Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Taskfile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -613,6 +613,7 @@ tasks:
sources:
- experimental/aitools/**
- acceptance/apps/**
- acceptance/experimental/aitools/**
- "{{.EMBED_SOURCES}}"
cmds:
- |
Expand All @@ -626,7 +627,7 @@ tasks:
--format ${GOTESTSUM_FORMAT:-pkgname-and-test-fails} \
--no-summary=skipped \
--packages ./acceptance/... \
-- -timeout=${LOCAL_TIMEOUT:-30m} -run "TestAccept/apps"
-- -timeout=${LOCAL_TIMEOUT:-30m} -run "TestAccept/(apps|experimental/aitools)"

test-exp-ssh:
desc: Run experimental SSH unit and acceptance tests
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

=== --experimental against a manifest with no experimental skills logs a nudge
>>> [CLI] experimental aitools install --global --experimental
Installing Databricks AI skills for Claude Code...
Warn: --experimental was set but the manifest at test-ref exposes no experimental skills. Set DATABRICKS_SKILLS_REF to a release that includes them (or =main for the latest).
Installed 1 skill (vtest-ref).
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
mkdir -p "$HOME/.claude"

title "--experimental against a manifest with no experimental skills logs a nudge"
trace $CLI experimental aitools install --global --experimental
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
Env.DATABRICKS_SKILLS_BASE_URL = "$DATABRICKS_HOST"
Env.DATABRICKS_SKILLS_REF = "test-ref"

Ignore = [
".databricks/aitools/skills/.state.json",
]

[EnvMatrix]
DATABRICKS_BUNDLE_ENGINE = []

# Manifest with stable skills only — no experimental_skills section.
# Simulates a release tag that pre-dates the experimental feature.
[[Server]]
Pattern = "GET /test-ref/manifest.json"
Response.Body = '''
{
"version": "2",
"updated_at": "2026-01-01T00:00:00Z",
"skills": {
"test-stable": {"version": "1.0.0", "files": ["SKILL.md"]}
}
}
'''

[[Server]]
Pattern = "GET /test-ref/skills/test-stable/SKILL.md"
Response.Body = '''---
name: test-stable
---

# Stable
'''

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions acceptance/experimental/aitools/skills/install-specific/output.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@

=== install only one specific stable skill via --skills
>>> [CLI] experimental aitools install --global --skills test-stable-a
Installing Databricks AI skills for Claude Code...
Installed 1 skill (vtest-ref).

=== install a specific experimental skill (note the -experimental suffix)
>>> [CLI] experimental aitools install --global --skills test-exp-experimental --experimental
Installing Databricks AI skills for Claude Code...
Installed 1 skill (vtest-ref).

=== asking for an experimental skill without --experimental flag errors out
>>> [CLI] experimental aitools install --global --skills test-exp-experimental
Installing Databricks AI skills for Claude Code...
Error: skill "test-exp-experimental" is experimental; use --experimental to install

Exit code: 1
10 changes: 10 additions & 0 deletions acceptance/experimental/aitools/skills/install-specific/script
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
mkdir -p "$HOME/.claude"

title "install only one specific stable skill via --skills"
trace $CLI experimental aitools install --global --skills test-stable-a

title "install a specific experimental skill (note the -experimental suffix)"
trace $CLI experimental aitools install --global --skills test-exp-experimental --experimental

title "asking for an experimental skill without --experimental flag errors out"
errcode trace $CLI experimental aitools install --global --skills test-exp-experimental
52 changes: 52 additions & 0 deletions acceptance/experimental/aitools/skills/install-specific/test.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
Env.DATABRICKS_SKILLS_BASE_URL = "$DATABRICKS_HOST"
Env.DATABRICKS_SKILLS_REF = "test-ref"

Ignore = [
".databricks/aitools/skills/.state.json",
]

[EnvMatrix]
DATABRICKS_BUNDLE_ENGINE = []

[[Server]]
Pattern = "GET /test-ref/manifest.json"
Response.Body = '''
{
"version": "2",
"updated_at": "2026-01-01T00:00:00Z",
"skills": {
"test-stable-a": {"version": "1.0.0", "files": ["SKILL.md"]},
"test-stable-b": {"version": "1.0.0", "files": ["SKILL.md"]}
},
"experimental_skills": {
"test-exp": {"version": "0.0.1", "files": ["SKILL.md"]}
}
}
'''

[[Server]]
Pattern = "GET /test-ref/skills/test-stable-a/SKILL.md"
Response.Body = '''---
name: test-stable-a
---

# A
'''

[[Server]]
Pattern = "GET /test-ref/skills/test-stable-b/SKILL.md"
Response.Body = '''---
name: test-stable-b
---

# B
'''

[[Server]]
Pattern = "GET /test-ref/experimental/test-exp/SKILL.md"
Response.Body = '''---
name: test-exp
---

# Exp
'''
3 changes: 3 additions & 0 deletions acceptance/experimental/aitools/skills/install/out.test.toml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 15 additions & 0 deletions acceptance/experimental/aitools/skills/install/output.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@

=== stable-only install (no --experimental flag) installs 1 skill
>>> [CLI] experimental aitools install --global
Installing Databricks AI skills for Claude Code...
Installed 1 skill (vtest-ref).

=== re-run with --experimental installs the experimental one too
>>> [CLI] experimental aitools install --global --experimental
Installing Databricks AI skills for Claude Code...
Installed 2 skills (vtest-ref).

=== no-op re-run is idempotent (no new fetches, no errors)
>>> [CLI] experimental aitools install --global --experimental
Installing Databricks AI skills for Claude Code...
Installed 2 skills (vtest-ref).
11 changes: 11 additions & 0 deletions acceptance/experimental/aitools/skills/install/script
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Fake a Claude Code installation so agent detection picks it up.
mkdir -p "$HOME/.claude"

title "stable-only install (no --experimental flag) installs 1 skill"
trace $CLI experimental aitools install --global

title "re-run with --experimental installs the experimental one too"
trace $CLI experimental aitools install --global --experimental

title "no-op re-run is idempotent (no new fetches, no errors)"
trace $CLI experimental aitools install --global --experimental
57 changes: 57 additions & 0 deletions acceptance/experimental/aitools/skills/install/test.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# Point the manifest + skill-file fetch at the acceptance mock server
# instead of raw.githubusercontent.com.
Env.DATABRICKS_SKILLS_BASE_URL = "$DATABRICKS_HOST"
Env.DATABRICKS_SKILLS_REF = "test-ref"

# The state file mtime + path under $HOME contain timestamps and the
# random temp dir name; squash those from the captured tree.
Ignore = [
".databricks/aitools/skills/.state.json",
]

# aitools doesn't use the bundle engine; opt out of the parent matrix.
[EnvMatrix]
DATABRICKS_BUNDLE_ENGINE = []

# Mock the manifest. One stable skill, one experimental skill.
[[Server]]
Pattern = "GET /test-ref/manifest.json"
Response.Body = '''
{
"version": "2",
"updated_at": "2026-01-01T00:00:00Z",
"skills": {
"test-stable": {
"version": "1.0.0",
"description": "Stable test skill",
"files": ["SKILL.md"]
}
},
"experimental_skills": {
"test-exp": {
"version": "0.0.1",
"description": "Experimental test skill",
"files": ["SKILL.md"]
}
}
}
'''

# Mock the per-skill file fetches.
[[Server]]
Pattern = "GET /test-ref/skills/test-stable/SKILL.md"
Response.Body = '''---
name: test-stable
---

# Test stable skill
'''

[[Server]]
Pattern = "GET /test-ref/experimental/test-exp/SKILL.md"
Response.Body = '''---
name: test-exp
---

# Test experimental skill
'''
Loading
Loading