Skip to content

Add AppKit support and databricks-agent-skills integration (experimental)#533

Open
jamesbroadhead wants to merge 4 commits into
databricks-solutions:experimentalfrom
jamesbroadhead:appkit-on-experimental
Open

Add AppKit support and databricks-agent-skills integration (experimental)#533
jamesbroadhead wants to merge 4 commits into
databricks-solutions:experimentalfrom
jamesbroadhead:appkit-on-experimental

Conversation

@jamesbroadhead
Copy link
Copy Markdown

Summary

Equivalent of #356 (which targets main), adapted for the experimental branch.

  • Prefer AppKit for new Databricks apps: databricks-apps-python/SKILL.md (renamed from databricks-app-python/) now leads with AppKit (TypeScript + React SDK) as the recommended approach for new apps, with Python frameworks (Dash, Streamlit, Gradio, Flask, FastAPI, Reflex) demoted to an explicit alternative. Frontmatter name and H1 title updated to match.
  • Rename databricks-app-pythondatabricks-apps-python (plural) for the bundled skill directory, eval baselines, routing manifests, builder-app references, install scripts, and cross-skill mentions.
  • Pull in databricks/databricks-agent-skills: both install.sh and install.ps1 now fetch and install skills from databricks/databricks-agent-skills (databricks, databricks-apps, databricks-lakebase). Uses a single GitHub API tree call per install to fetch all files recursively, including nested references/ subdirectories.
  • source:install-name rename syntax: AGENT_SKILLS supports source:install-name entries (e.g. databricks-core:databricks) to decouple the upstream repo path from the local install directory name — no changes needed in the upstream repo.

Differences vs #356 (preserves experimental's polish)

Test plan

  • bash install.sh --list-skills shows agent skills with install names (not source:install-name raw entries)
  • bash install.sh --skills-profile app-developer installs databricks-apps-python, databricks-app-apx, and agent skills databricks, databricks-apps, databricks-lakebase
  • bash install.sh --skills databricks correctly fetches and installs databricks-core from the agent-skills repo into a directory named databricks
  • bash install.sh --skills-profile all installs all 37 skills with no directory conflicts
  • Same checks for install.ps1 on Windows

This pull request was AI-assisted by Isaac.

Equivalent of databricks-solutions#356 (which targets main), adapted for the experimental branch:

- Rename `databricks-app-python` → `databricks-apps-python` (plural) for the
  bundled skill directory, baselines, manifests, builder-app refs, install
  scripts, and cross-skill mentions.
- `databricks-apps-python/SKILL.md` now leads with AppKit (TypeScript + React
  SDK) as the recommended approach for new apps, with Python frameworks
  (Dash, Streamlit, Gradio, Flask, FastAPI, Reflex) demoted to an explicit
  alternative. Frontmatter `name` and H1 title updated to match.
- `install.sh` and `install.ps1` fetch and install skills from
  `databricks/databricks-agent-skills` (`databricks`, `databricks-apps`,
  `databricks-lakebase`) via a single GitHub API tree call. New `AGENT_SKILLS`
  variable supports `source:install-name` syntax (e.g.
  `databricks-core:databricks`) so the install directory can differ from the
  upstream skill path.
- Preserves experimental's polish: keeps `6-cli-approach.md` (not MCP) and
  references `databricks-lakebase-autoscale` (since
  `databricks-lakebase-provisioned` was removed on experimental).

Co-authored-by: Isaac
GPT 5.4 xhigh and Gemini 3.1 Pro both flagged the new short agent-skill
names triggering latent bugs in the install scripts. Three fixes:

1. install.sh `_is_preselected`: `grep -qw` treats `-` as a word boundary,
   so checking for `databricks` would falsely match `databricks-jobs`,
   `databricks-apps`, etc. Strip `source:` prefix from each preselected
   entry and use `grep -Fxq` for exact whole-line equality. Same fix
   applied to the deselection cleanup at the cleanup loop.

2. install.ps1: `$preselected -contains "databricks"` is exact equality on
   array elements, so it never matched the `"databricks-core:databricks"`
   entry seeded by the app-developer profile — the Agent: Databricks
   checkbox was never auto-preselected. Normalize `$preselected` by
   stripping `source:` prefixes once before the menu is built.

3. install.sh/ps1: the "Agent skills (N) -> ..." success line ran
   unconditionally, even when the GitHub tree fetch failed or every
   per-skill download warned and was rolled back. Track an
   `agent_success`/`$agentSuccess` counter and only print the success
   line when all selected agent skills installed; print a warning when
   only some succeeded.

Co-authored-by: Isaac
…ale dirs

Two more ACE review findings, both real:

1. The path-extraction regex `"path":"skills/..."` (no space) does NOT match
   the GitHub tree API's actual response, which is pretty-printed as
   `"path": "skills/..."` (space after colon). Result: the installer would
   warn "Could not fetch agent skill" for every entry and install nothing.
   Fix: collapse the JSON whitespace before regex extraction, and switch
   from the `grep '\.'` heuristic to matching the adjacent
   `"type": "blob"` field so directory entries are correctly skipped.

2. Reinstalls reused the existing $dest_dir / $destDir without clearing
   it, so files removed upstream would persist locally across upgrades.
   Fix: `rm -rf` / `Remove-Item -Recurse` the destination before each
   skill is downloaded.

Co-authored-by: Isaac
ACE iteration 2 findings:

- Gemini caught that the `grep -qw` word-boundary bug I fixed in
  `_is_preselected` still bit the resolve_skills() bucketing chain
  (lines 918/920/922). Passing `--skills databricks` (a valid agent
  install-name) would match `databricks-app-apx` via the hyphen
  word-boundary on the APX branch and get misclassified. Switched
  all three buckets to exact match via `tr ' ' '\n' | grep -Fxq`,
  and rewrote the source:install-name lookup on line 923 with `-E`
  and a clean anchored alternation.

- GPT caught that when the GitHub tree fetch fails entirely
  (`agent_tree` empty / `$agentTree` null), the summary branch
  emits nothing — neither OK nor "only N of M installed" — even
  though zero of N agent skills were actually installed. Added an
  `else` branch that emits a `0 of $agent_count installed` warning.

Out of scope (flagged but not addressed):
- GPT raised legacy-name compatibility for `databricks-app-python`
  → `databricks-apps-python`. The rename is intentional per the
  product decision; back-compat aliasing is a separate concern.

Co-authored-by: Isaac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant