Commit 6479f76
authored
Add AppKit support and databricks-agent-skills integration (#356)
* Apps: Add AppKit, and prefer it over other app frameworks
* rename local databricks-apps skill to databricks-apps-python
* install: enable renaming skills from remote repos
* Drop agent skills for jobs and pipelines
Remove databricks-jobs:databricks-jobs-bundles and databricks-pipelines
from agent skills in both install.sh and install.ps1.
Co-authored-by: Isaac
* Rename databricks-app-python → databricks-apps-python everywhere
Completes the pre-existing-bug fix called out in the PR description. The
skill directory `databricks-apps-python` (plural) is the canonical name;
this updates all remaining stale singular references (.test eval skill,
routing ground truth, scorer, baselines, run_app_eval docs, builder-app
system prompt + UI, MCP tool docstring, install_skills.sh, related-skill
links in lakebase-provisioned/bundles SKILL.md).
Verified .test/tests/test_scorers.py: 36/36 pass.
Co-authored-by: Isaac
* fix: ACE multi-model review findings on agent-skill installer
Two issues caught in parallel review by GPT 5.4 and Gemini 3.1 Pro:
1. **Upstream skill name mismatch** (HIGH, GPT 5.4): The agent skill
at `databricks/databricks-agent-skills` is named `databricks-core`,
not `databricks`. Previously `--skills-profile app-developer` would
silently fail to install one of three advertised skills.
Fix: use the source:install-name syntax this PR already introduces
— `databricks-core:databricks` keeps the local install name while
pointing at the correct upstream directory.
2. **Partial-download false success** (CRITICAL, Gemini 3.1 Pro):
`ok_flag` was initialized to 0 and flipped to 1 on the first
successful file download, never reset on subsequent failures.
Any single successful file (even an examples/*.py) marked the
skill as installed, leaving a broken skill on disk. Same pattern
in install.ps1 with $okFlag.
Fix: initialize the flag to 1 (true) and only flip to 0 (false)
on any single download failure — a skill installs cleanly iff
every file lands.
Not addressed (acceptable today, worth a follow-up):
- Unauthenticated GitHub API rate limit (60/hr) — fine for single-
user installs, can bite CI.
- `grep '\.'` heuristic to filter trees vs blobs — brittle but works
for current skills (all files have extensions).
- Sequential vs parallel curl — perf nit, not a bug.
Co-authored-by: Isaac
* fix: address ACE multi-model review findings
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
* fix: agent-skills installer regex matches live GitHub API + clears stale 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
* fix: resolve_skills bucketing + 0-of-N agent install summary
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: Isaac1 parent 4e55b48 commit 6479f76
31 files changed
Lines changed: 308 additions & 74 deletions
File tree
- .test
- baselines/databricks-apps-python
- scripts
- skills
- _routing
- databricks-apps-python
- src/skill_test/scorers
- tests
- databricks-builder-app
- client/src/pages
- server/services
- databricks-mcp-server/databricks_mcp_server/tools
- databricks-skills
- databricks-apps-python
- examples
- databricks-bundles
- databricks-lakebase-provisioned
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
13 | | - | |
| 13 | + | |
14 | 14 | | |
15 | 15 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
12 | | - | |
13 | | - | |
| 12 | + | |
| 13 | + | |
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| |||
226 | 226 | | |
227 | 227 | | |
228 | 228 | | |
229 | | - | |
| 229 | + | |
230 | 230 | | |
231 | 231 | | |
232 | 232 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
148 | 148 | | |
149 | 149 | | |
150 | 150 | | |
151 | | - | |
| 151 | + | |
152 | 152 | | |
153 | 153 | | |
154 | 154 | | |
| |||
159 | 159 | | |
160 | 160 | | |
161 | 161 | | |
162 | | - | |
| 162 | + | |
163 | 163 | | |
164 | 164 | | |
165 | 165 | | |
| |||
170 | 170 | | |
171 | 171 | | |
172 | 172 | | |
173 | | - | |
| 173 | + | |
174 | 174 | | |
175 | 175 | | |
176 | 176 | | |
| |||
181 | 181 | | |
182 | 182 | | |
183 | 183 | | |
184 | | - | |
| 184 | + | |
185 | 185 | | |
186 | 186 | | |
187 | 187 | | |
| |||
192 | 192 | | |
193 | 193 | | |
194 | 194 | | |
195 | | - | |
| 195 | + | |
196 | 196 | | |
197 | 197 | | |
198 | 198 | | |
| |||
205 | 205 | | |
206 | 206 | | |
207 | 207 | | |
208 | | - | |
| 208 | + | |
209 | 209 | | |
210 | 210 | | |
211 | 211 | | |
| |||
218 | 218 | | |
219 | 219 | | |
220 | 220 | | |
221 | | - | |
| 221 | + | |
222 | 222 | | |
223 | 223 | | |
224 | 224 | | |
| |||
231 | 231 | | |
232 | 232 | | |
233 | 233 | | |
234 | | - | |
| 234 | + | |
235 | 235 | | |
236 | 236 | | |
237 | 237 | | |
| |||
246 | 246 | | |
247 | 247 | | |
248 | 248 | | |
249 | | - | |
| 249 | + | |
250 | 250 | | |
251 | 251 | | |
252 | 252 | | |
| |||
File renamed without changes.
File renamed without changes.
Lines changed: 2 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
3 | | - | |
| 2 | + | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
32 | 32 | | |
33 | 33 | | |
34 | 34 | | |
35 | | - | |
| 35 | + | |
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
70 | 70 | | |
71 | 71 | | |
72 | 72 | | |
73 | | - | |
| 73 | + | |
74 | 74 | | |
75 | 75 | | |
76 | | - | |
| 76 | + | |
77 | 77 | | |
78 | 78 | | |
79 | | - | |
| 79 | + | |
80 | 80 | | |
81 | 81 | | |
82 | | - | |
| 82 | + | |
83 | 83 | | |
84 | 84 | | |
85 | | - | |
| 85 | + | |
86 | 86 | | |
87 | 87 | | |
88 | | - | |
| 88 | + | |
89 | 89 | | |
90 | 90 | | |
91 | | - | |
| 91 | + | |
92 | 92 | | |
93 | 93 | | |
94 | | - | |
| 94 | + | |
95 | 95 | | |
96 | 96 | | |
97 | | - | |
| 97 | + | |
98 | 98 | | |
99 | 99 | | |
100 | | - | |
| 100 | + | |
101 | 101 | | |
102 | 102 | | |
103 | 103 | | |
| |||
109 | 109 | | |
110 | 110 | | |
111 | 111 | | |
112 | | - | |
| 112 | + | |
113 | 113 | | |
114 | 114 | | |
115 | 115 | | |
116 | 116 | | |
117 | 117 | | |
118 | | - | |
| 118 | + | |
119 | 119 | | |
120 | 120 | | |
121 | 121 | | |
| |||
140 | 140 | | |
141 | 141 | | |
142 | 142 | | |
143 | | - | |
| 143 | + | |
144 | 144 | | |
145 | 145 | | |
146 | 146 | | |
147 | 147 | | |
148 | 148 | | |
149 | 149 | | |
150 | | - | |
| 150 | + | |
151 | 151 | | |
152 | 152 | | |
153 | 153 | | |
| |||
171 | 171 | | |
172 | 172 | | |
173 | 173 | | |
174 | | - | |
| 174 | + | |
175 | 175 | | |
176 | 176 | | |
177 | 177 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
179 | 179 | | |
180 | 180 | | |
181 | 181 | | |
182 | | - | |
| 182 | + | |
183 | 183 | | |
184 | 184 | | |
185 | 185 | | |
| |||
313 | 313 | | |
314 | 314 | | |
315 | 315 | | |
316 | | - | |
| 316 | + | |
317 | 317 | | |
318 | 318 | | |
319 | 319 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
33 | | - | |
| 33 | + | |
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
| |||
0 commit comments