@skaile/workspaces 0.48.1 → 0.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +73 -0
- package/dist/{asset-feeds-DLRQWELS.js → asset-feeds-O6R6J4RI.js} +7 -7
- package/dist/{asset-feeds-DLRQWELS.js.map → asset-feeds-O6R6J4RI.js.map} +1 -1
- package/dist/asset-manager/index.js +5 -5
- package/dist/asset-manager/installer.js +4 -4
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/asset-manager/src/installer.d.ts.map +1 -1
- package/dist/bridge/drivers/claude-sdk.js +91 -1
- package/dist/bridge/drivers/claude-sdk.js.map +1 -1
- package/dist/bridge/drivers/codex.js +1 -1
- package/dist/bridge/drivers/continue.js +2 -2
- package/dist/bridge/drivers/echo.js +1 -1
- package/dist/bridge/drivers/gemini.js +3 -3
- package/dist/bridge/drivers/goose.js +2 -2
- package/dist/bridge/drivers/omp.js +1 -1
- package/dist/bridge/drivers/opencode.js +2 -2
- package/dist/bridge/drivers/qwen.js +3 -3
- package/dist/bridge/index.js +2 -2
- package/dist/bridge/src/drivers/claude-sdk.d.ts +30 -0
- package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
- package/dist/bridge/src/types.d.ts +21 -0
- package/dist/bridge/src/types.d.ts.map +1 -1
- package/dist/{chunk-HOEP5CJQ.js → chunk-33WB7VFV.js} +3 -3
- package/dist/{chunk-HOEP5CJQ.js.map → chunk-33WB7VFV.js.map} +1 -1
- package/dist/{chunk-P6HRQPXC.js → chunk-3A3OACI2.js} +2 -2
- package/dist/{chunk-P6HRQPXC.js.map → chunk-3A3OACI2.js.map} +1 -1
- package/dist/{chunk-Z3ZRI2AE.js → chunk-4IGNQG6E.js} +3 -3
- package/dist/{chunk-Z3ZRI2AE.js.map → chunk-4IGNQG6E.js.map} +1 -1
- package/dist/{chunk-Z3GAAIJK.js → chunk-6AD3NS7R.js} +4 -4
- package/dist/{chunk-Z3GAAIJK.js.map → chunk-6AD3NS7R.js.map} +1 -1
- package/dist/{chunk-RSK6FDMV.js → chunk-6VUP6XHK.js} +3 -3
- package/dist/{chunk-RSK6FDMV.js.map → chunk-6VUP6XHK.js.map} +1 -1
- package/dist/{chunk-SALVPTK3.js → chunk-BWCGSGAC.js} +7 -7
- package/dist/{chunk-SALVPTK3.js.map → chunk-BWCGSGAC.js.map} +1 -1
- package/dist/{chunk-KC7V5XCO.js → chunk-EBSIZYM6.js} +4 -4
- package/dist/{chunk-KC7V5XCO.js.map → chunk-EBSIZYM6.js.map} +1 -1
- package/dist/{chunk-ILMBTQSB.js → chunk-H74X4TSR.js} +5 -5
- package/dist/{chunk-ILMBTQSB.js.map → chunk-H74X4TSR.js.map} +1 -1
- package/dist/{chunk-FAALG3QN.js → chunk-HNORRENR.js} +3 -3
- package/dist/{chunk-FAALG3QN.js.map → chunk-HNORRENR.js.map} +1 -1
- package/dist/{chunk-4VPRAG35.js → chunk-LTUTK2Q3.js} +14 -12
- package/dist/chunk-LTUTK2Q3.js.map +1 -0
- package/dist/{chunk-BDM5UVU3.js → chunk-LV73DB4G.js} +41 -10
- package/dist/chunk-LV73DB4G.js.map +1 -0
- package/dist/{chunk-OCAQH66V.js → chunk-N5AE5SOC.js} +28 -2
- package/dist/chunk-N5AE5SOC.js.map +1 -0
- package/dist/{chunk-5C3QJSOD.js → chunk-OYMSCV7T.js} +3 -3
- package/dist/{chunk-5C3QJSOD.js.map → chunk-OYMSCV7T.js.map} +1 -1
- package/dist/{chunk-LLOXWWB6.js → chunk-P4BDTJMI.js} +85 -4
- package/dist/chunk-P4BDTJMI.js.map +1 -0
- package/dist/{chunk-WTFJFW7F.js → chunk-PBO6SCT2.js} +2 -2
- package/dist/{chunk-WTFJFW7F.js.map → chunk-PBO6SCT2.js.map} +1 -1
- package/dist/{chunk-G3GODNHM.js → chunk-SDAKQCOB.js} +3 -3
- package/dist/{chunk-G3GODNHM.js.map → chunk-SDAKQCOB.js.map} +1 -1
- package/dist/{chunk-XHDPCL4O.js → chunk-SXT6BAQJ.js} +2 -2
- package/dist/{chunk-XHDPCL4O.js.map → chunk-SXT6BAQJ.js.map} +1 -1
- package/dist/{chunk-3VBQJZYL.js → chunk-WBF7JLTY.js} +3 -3
- package/dist/{chunk-3VBQJZYL.js.map → chunk-WBF7JLTY.js.map} +1 -1
- package/dist/{chunk-T2CIVTTC.js → chunk-ZJ3VRPOI.js} +7 -3
- package/dist/chunk-ZJ3VRPOI.js.map +1 -0
- package/dist/cli/index.js +88 -36
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/commands/source.d.ts +18 -0
- package/dist/cli/src/commands/source.d.ts.map +1 -1
- package/dist/connectors/config.js +4 -4
- package/dist/connectors/index.js +5 -5
- package/dist/connectors/src/config.d.ts.map +1 -1
- package/dist/connectors/src/materialized-connectors.d.ts.map +1 -1
- package/dist/core/index.js +3 -3
- package/dist/core/runtime-assets.js +2 -2
- package/dist/core/src/workspace-config.d.ts +7 -0
- package/dist/core/src/workspace-config.d.ts.map +1 -1
- package/dist/core/workspace-config.js +1 -1
- package/dist/deploy/index.js +3 -3
- package/dist/{ensure-sources-KLCGXVE6.js → ensure-sources-EE7Z2HKS.js} +5 -5
- package/dist/{ensure-sources-KLCGXVE6.js.map → ensure-sources-EE7Z2HKS.js.map} +1 -1
- package/dist/factory-assets/connectors/deploy.js +5 -5
- package/dist/factory-assets/connectors/devserver.js +5 -5
- package/dist/factory-assets/connectors/flow/adapter.js +5 -5
- package/dist/factory-assets/connectors/flow/engine.js +3 -3
- package/dist/factory-assets/connectors/flow/run-flow.js +6 -6
- package/dist/factory-assets/connectors/flow.js +5 -5
- package/dist/factory-assets/connectors/git.js +5 -5
- package/dist/factory-assets/connectors/gmail.js +5 -5
- package/dist/factory-assets/connectors/googledrive.js +5 -5
- package/dist/factory-assets/connectors/local.js +5 -5
- package/dist/factory-assets/connectors/mattermost.js +5 -5
- package/dist/factory-assets/connectors/memory.js +5 -5
- package/dist/factory-assets/connectors/minio.js +5 -5
- package/dist/factory-assets/connectors/postgres.js +5 -5
- package/dist/factory-assets/connectors/s3.js +5 -5
- package/dist/factory-assets/connectors/sharepoint.js +5 -5
- package/dist/factory-assets/connectors/sqlite.js +5 -5
- package/dist/factory-assets/connectors/static-server.js +5 -5
- package/dist/factory-assets/connectors/tunnel.js +5 -5
- package/dist/factory-assets/connectors/webdav.js +5 -5
- package/dist/factory-assets/connectors/xstate-store.js +5 -5
- package/dist/factory-assets/connectors/xstate.js +5 -5
- package/dist/{flows-PNDUCOJR.js → flows-AAHXXXCH.js} +3 -3
- package/dist/{flows-PNDUCOJR.js.map → flows-AAHXXXCH.js.map} +1 -1
- package/dist/library/index.js +4 -4
- package/dist/library/install.js +3 -3
- package/dist/library/src/local/db.d.ts.map +1 -1
- package/dist/library/src/local/local-catalog-source.d.ts +12 -0
- package/dist/library/src/local/local-catalog-source.d.ts.map +1 -1
- package/dist/{open-library-COHFCT4N.js → open-library-TXJMFG34.js} +7 -7
- package/dist/{open-library-COHFCT4N.js.map → open-library-TXJMFG34.js.map} +1 -1
- package/dist/{paths-2SYXGTZJ.js → paths-OMVC4UWY.js} +6 -6
- package/dist/{paths-2SYXGTZJ.js.map → paths-OMVC4UWY.js.map} +1 -1
- package/dist/{plugin-store-UNENLB56.js → plugin-store-JWJHIPUT.js} +5 -5
- package/dist/{plugin-store-UNENLB56.js.map → plugin-store-JWJHIPUT.js.map} +1 -1
- package/dist/runner/index.js +9 -9
- package/dist/runner/src/runtime-session-emit.d.ts +39 -0
- package/dist/runner/src/runtime-session-emit.d.ts.map +1 -0
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +5 -5
- package/dist/sdk/bridge.js +2 -2
- package/dist/sdk/core.js +3 -3
- package/dist/sdk/flow.js +3 -3
- package/dist/sdk/index.js +9 -9
- package/dist/sdk/runner.js +9 -9
- package/dist/{setup-AYH6SR4U.js → setup-ETNBVZQA.js} +7 -7
- package/dist/{setup-AYH6SR4U.js.map → setup-ETNBVZQA.js.map} +1 -1
- package/dist/{store-client-U4FMAIWX.js → store-client-SLFAAKSV.js} +6 -6
- package/dist/{store-client-U4FMAIWX.js.map → store-client-SLFAAKSV.js.map} +1 -1
- package/dist/tui/index.js +9 -9
- package/dist/types/src/events.d.ts +33 -1
- package/dist/types/src/events.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/workspace-plugin/adapters/mcp.js +1 -1
- package/dist/workspace-plugin/adapters/omp.js +3 -3
- package/dist/workspace-plugin/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-4VPRAG35.js.map +0 -1
- package/dist/chunk-BDM5UVU3.js.map +0 -1
- package/dist/chunk-LLOXWWB6.js.map +0 -1
- package/dist/chunk-OCAQH66V.js.map +0 -1
- package/dist/chunk-T2CIVTTC.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,78 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.49.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#242](https://github.com/skaile-ai/workspaces/pull/242) [`a476838`](https://github.com/skaile-ai/workspaces/commit/a476838df093016bffbcbc29be75c0868b82a21a) Thanks [@Frozen666](https://github.com/Frozen666)! - runner: emit a `runtime_session` event carrying the driver SDK session id (+ model + capability signature) on first-known and on change
|
|
8
|
+
|
|
9
|
+
Surfaces the tier-1 native-resume token so the platform can persist it on the Session independently of compaction. Previously the resume token was captured only as a side effect of a compaction, so a session that never compacted and only auto-hibernated had no stored token and fell back to lossy raw-tail resume on wake even though its JSONL survived. Additive to the `AgentEvent` union — existing consumers ignore the new event.
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [#244](https://github.com/skaile-ai/workspaces/pull/244) [`21558f6`](https://github.com/skaile-ai/workspaces/commit/21558f6ab3768dccbab22d55cb6d76c71952027d) Thanks [@Frozen666](https://github.com/Frozen666)! - runner: re-emit `runtime_session` on model/capability-signature drift, not only on session-id change
|
|
14
|
+
|
|
15
|
+
A mid-session capability shift (e.g. a live skill add) or model change that does not recreate the driver previously left the platform's stored wake-time guards stale, needlessly dropping a still-valid session to lossy tier-2 resume on wake. The runner now re-emits whenever the session id, model, OR capability signature changes. Also short-circuits before hashing the capability signature when no session id exists yet, so early no-session turns don't pay for the compute.
|
|
16
|
+
|
|
17
|
+
## 0.48.2
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- [#241](https://github.com/skaile-ai/workspaces/pull/241) [`23aed4b`](https://github.com/skaile-ai/workspaces/commit/23aed4b297cc01736bfcc9e01775ae68e39c8161) Thanks [@peteralbert](https://github.com/peteralbert)! - Fix git mount token refresh failing with `not-configured` ("connector is missing
|
|
22
|
+
a providerLinkId; cannot refresh"). The 0.48.0 runner-side refresh mediator runs
|
|
23
|
+
but the skaile.yaml boot path stripped the connector's `providerLinkId` before it
|
|
24
|
+
reached the mediator: the core `ConnectorDeclaration` did not declare the field,
|
|
25
|
+
so `workspaceConnectorToDeclaration` (and the materialized-CONNECTOR.md loader)
|
|
26
|
+
silently dropped it. The platform serializes `providerLinkId` top-level on
|
|
27
|
+
backend-auth git connectors, so the value was present in config but lost in the
|
|
28
|
+
mapping, and `host.refresh_credential` was never invoked — the git token never
|
|
29
|
+
rotated and the agent's raw `git push` failed ~1h after wake. `providerLinkId`
|
|
30
|
+
now survives both the skaile.yaml and materialized boot paths. The hot-plug path
|
|
31
|
+
(which nested it under `options`) was unaffected.
|
|
32
|
+
|
|
33
|
+
- [#235](https://github.com/skaile-ai/workspaces/pull/235) [`f895e7b`](https://github.com/skaile-ai/workspaces/commit/f895e7b496a001d51ba03ae26fe2945e9572f0fc) Thanks [@Frozen666](https://github.com/Frozen666)! - fix(bridge): answer AskUserQuestion via the SDK `canUseTool` round-trip instead of re-asking
|
|
34
|
+
|
|
35
|
+
The `claude-sdk` driver treated `AskUserQuestion` as an ordinary `tool_use`, so the query was never paused — the model kept taking turns and re-asked the same question several times before any reply, and the reply was delivered as a plain prompt rather than the structured answer. The driver now wires the SDK `canUseTool` callback to pause on `AskUserQuestion` and resume with the user's answer (`hasPendingQuestion()` / `answerQuestion()` on `AgentDriver`; routed by the runner's reply handler). A pending question is denied cleanly on abort/hibernate so the resumed transcript has no dangling `tool_use`.
|
|
36
|
+
|
|
37
|
+
- [#239](https://github.com/skaile-ai/workspaces/pull/239) [`65d5b1e`](https://github.com/skaile-ai/workspaces/commit/65d5b1e1c4b1ee4a36923dce6dfd43ce771885d3) Thanks [@P1umPudding](https://github.com/P1umPudding)! - Fix `skaile source add` failing to index a valid source repo. Index DBs upgraded
|
|
38
|
+
through the old `sources → libraries` migration carried a stale
|
|
39
|
+
`asset_definitions.library_id` foreign key still referencing the dropped
|
|
40
|
+
`sources` table, so every upsert failed under `PRAGMA foreign_keys = ON` with
|
|
41
|
+
`SQLITE_ERROR: no such table: main.sources` — surfaced only as an opaque
|
|
42
|
+
`Failed query: <SQL>`. `createLibraryDb` now heals the stale FK on open by
|
|
43
|
+
rebuilding the table, the catalog sync error now includes the underlying cause,
|
|
44
|
+
`skaile source add`/`sync` no longer report success when indexing partially
|
|
45
|
+
fails (exit code 1), and a hint is emitted when a source ships only a legacy
|
|
46
|
+
`.skaile-source.yaml` without a `skaile.manifest.yaml`. The partial-failure gate
|
|
47
|
+
keys on real indexing errors rather than the discovered-vs-indexed count, so a
|
|
48
|
+
source that ships a `.preset.yaml` (counted but intentionally not upserted) no
|
|
49
|
+
longer trips a false `failed to index` warning + non-zero exit.
|
|
50
|
+
|
|
51
|
+
- [#238](https://github.com/skaile-ai/workspaces/pull/238) [`fc0ee47`](https://github.com/skaile-ai/workspaces/commit/fc0ee4780c93281973992c1999f3c89963874dfa) Thanks [@P1umPudding](https://github.com/P1umPudding)! - Fix four small install/init issues:
|
|
52
|
+
|
|
53
|
+
- **`install` no longer spuriously removes a still-declared asset.**
|
|
54
|
+
`reconcileRemovedAssets` built its "still resolved" set as
|
|
55
|
+
`<publisher>/<kind>:<name>@<version>` but compared it against the lock keys,
|
|
56
|
+
which are `<kind>:@<publisher>/<name>#<version>` (per `buildLockFile`). The
|
|
57
|
+
formats never matched, so every locked asset was reported `! Removed` and
|
|
58
|
+
needlessly undeployed + redeployed on each repeat `install`. Both sides now use
|
|
59
|
+
the canonical lock-key format.
|
|
60
|
+
- **`install`/`add` now restore a deleted manifest file.** `deployAll` only
|
|
61
|
+
`lstat`'d the deployed _directory_ to decide an asset was already deployed, and
|
|
62
|
+
its `catch` swallowed the `ENOENT` thrown when hashing a missing manifest —
|
|
63
|
+
so deleting just `.claude/skills/<name>/SKILL.md` (leaving the dir) made
|
|
64
|
+
`install`/`add` report "already up to date" and never re-create the file. The
|
|
65
|
+
hash compare now guards on `existsSync(deployedManifest)` first; a missing
|
|
66
|
+
manifest falls through to a re-deploy. Symlinked installs (which resolve
|
|
67
|
+
through to the live source) and content-hash mismatches are unchanged.
|
|
68
|
+
- **`skaile init` writes a complete `.gitignore`.** Added the skaile-created
|
|
69
|
+
artifacts `.skaile/logs.db*`, `.skaile/settings.json` (holds personal API
|
|
70
|
+
keys), and `.skaile/history.yaml`, closing a secret-leak gap — `settings.json`
|
|
71
|
+
was documented as gitignored but wasn't.
|
|
72
|
+
- **`skaile init` "Next steps" now mentions `skaile add`.** The post-init hint
|
|
73
|
+
surfaces the ergonomic `skaile add <ref>` (add + deploy in one step) and
|
|
74
|
+
`skaile search`, not only the manual edit-`skaile.yaml`-then-`install` path.
|
|
75
|
+
|
|
3
76
|
## 0.48.1
|
|
4
77
|
|
|
5
78
|
### Patch Changes
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import './chunk-
|
|
1
|
+
import './chunk-SDAKQCOB.js';
|
|
2
2
|
import './chunk-ZAP2BDHG.js';
|
|
3
|
-
import { factoryAssetRoots } from './chunk-
|
|
4
|
-
import { scanRepo } from './chunk-
|
|
3
|
+
import { factoryAssetRoots } from './chunk-WBF7JLTY.js';
|
|
4
|
+
import { scanRepo } from './chunk-PBO6SCT2.js';
|
|
5
5
|
import './chunk-DZCK7GRW.js';
|
|
6
6
|
import './chunk-6IDBWPK2.js';
|
|
7
7
|
import './chunk-GEEW6SY2.js';
|
|
@@ -17,7 +17,7 @@ async function libraryAssets() {
|
|
|
17
17
|
const notes = [];
|
|
18
18
|
try {
|
|
19
19
|
const [{ openLibraryManager }, { skaileHomeDir }, { getGlobalCacheDir }] = await Promise.all([
|
|
20
|
-
import('./open-library-
|
|
20
|
+
import('./open-library-TXJMFG34.js'),
|
|
21
21
|
import('./library/index.js'),
|
|
22
22
|
import('./core/index.js')
|
|
23
23
|
]);
|
|
@@ -50,7 +50,7 @@ async function libraryAssets() {
|
|
|
50
50
|
async function storeAssets(projectDir) {
|
|
51
51
|
const notes = [];
|
|
52
52
|
try {
|
|
53
|
-
const { resolveCatalogSource } = await import('./open-library-
|
|
53
|
+
const { resolveCatalogSource } = await import('./open-library-TXJMFG34.js');
|
|
54
54
|
const { source, close } = await resolveCatalogSource({ projectDir });
|
|
55
55
|
try {
|
|
56
56
|
const assets = await source.listAssets();
|
|
@@ -124,5 +124,5 @@ async function gatherAssetFeeds(am, projectDir) {
|
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
export { gatherAssetFeeds };
|
|
127
|
-
//# sourceMappingURL=asset-feeds-
|
|
128
|
-
//# sourceMappingURL=asset-feeds-
|
|
127
|
+
//# sourceMappingURL=asset-feeds-O6R6J4RI.js.map
|
|
128
|
+
//# sourceMappingURL=asset-feeds-O6R6J4RI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../cli/src/asset-feeds.ts"],"names":[],"mappings":"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","file":"asset-feeds-DLRQWELS.js","sourcesContent":["/**\n * asset-feeds.ts — gather installable assets from every feed the manage TUI\n * surfaces.\n *\n * Four feeds, normalized into `CatalogEntry`:\n * - **Project sources** — `skaile.yaml` `sources:` entries (scanned via\n * `AssetManager.search()`; the new `sources:` field is merged into the\n * legacy repositories map in `AssetManager.loadConfig`).\n * - **Local libraries** — user authoring places from `LocalIndex` (filesystem\n * scan of each library's `path`).\n * - **Factory assets** — the bundled first-party `factory-assets` tree\n * (`factoryAssetRoots()`), scanned from disk. Always present; no network.\n * - **Remote store** — the configured catalog source when `catalog.url` is\n * not `local`. Failures are non-fatal — they surface as notes.\n */\n\nimport { existsSync } from \"node:fs\";\nimport * as path from \"node:path\";\nimport {\n type AssetKind,\n type CatalogDomain,\n type CatalogEntry,\n factoryAssetRoots,\n scanRepo,\n} from \"@skaile/workspaces/core\";\n\n/** One non-fatal note returned to the caller for surfacing in the UI. */\nexport interface FeedNote {\n feed: \"sources\" | \"libraries\" | \"store\" | \"factory\";\n message: string;\n}\n\n/**\n * Which feed an asset came from. This is the top-level grouping axis in the\n * manage TUI (\"where is this skill coming from?\") and is intentionally distinct\n * from `publisher` (asset-intrinsic identity): the same publisher can legitimately\n * appear under more than one origin (e.g. a github repo you added as a `source`\n * that is also listed in the remote `store`).\n */\nexport type AssetOrigin = \"source\" | \"library\" | \"factory\" | \"store\";\n\n/** A catalog entry tagged with the feed it was gathered from. */\nexport interface OriginEntry {\n origin: AssetOrigin;\n entry: CatalogEntry;\n}\n\nexport interface AssetFeedResult {\n entries: OriginEntry[];\n /**\n * Display-only domain metadata, keyed (by the consumer) on `slug`. Populated\n * from the store's `catalog.listDomains` when the connected catalog source\n * exposes it; empty otherwise. The manage TUI joins `entry.domainSlug` → a\n * domain for grouping headers, descriptions, and relation badges.\n */\n domains: CatalogDomain[];\n notes: FeedNote[];\n}\n\n/**\n * Pull assets from local libraries (the authoring places under\n * `~/.skaile/libraries/<name>/`, not the `~/.skaile/cache/sources/` cache). Each\n * library's `path` is scanned with `scanRepo` and tagged with\n * `repository = \"library:<name>\"` so the manage TUI groups them into their\n * own headers.\n */\nasync function libraryAssets(): Promise<{ entries: CatalogEntry[]; notes: FeedNote[] }> {\n const notes: FeedNote[] = [];\n try {\n const [{ openLibraryManager }, { skaileHomeDir }, { getGlobalCacheDir }] = await Promise.all([\n import(\"./open-library.ts\"),\n import(\"@skaile/workspaces/library\"),\n import(\"@skaile/workspaces/core\"),\n ]);\n const { manager, close } = await openLibraryManager();\n try {\n // Authoring libraries are the rows that are NOT source clones. index.db\n // rows predating the cache migration still carry the legacy\n // ~/.skaile/sources path, so exclude both roots.\n const newRoot = getGlobalCacheDir();\n const legacyRoot = path.join(skaileHomeDir(), \"sources\");\n const libs = (await manager.listLibraries()).filter(\n (l) => !l.path.startsWith(newRoot) && !l.path.startsWith(legacyRoot),\n );\n const entries: CatalogEntry[] = [];\n for (const lib of libs) {\n if (!existsSync(lib.path)) continue;\n for (const e of scanRepo(lib.path, `library:${lib.name}`)) {\n entries.push(e);\n }\n }\n return { entries, notes };\n } finally {\n close();\n }\n } catch (err) {\n notes.push({\n feed: \"libraries\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], notes };\n }\n}\n\n/**\n * Pull a (best-effort) snapshot of the connected remote store catalog.\n *\n * - Returns no entries when the resolved catalog is local-only or the host\n * is unreachable (the failure becomes a note, not an exception).\n * - Maps `CatalogAsset` → `CatalogEntry`, carrying `publisher`, `repo`, and\n * `category` straight through and using `source = \"store://<id>\"`; per-file\n * `source` paths are not available for remote assets so the canonical ref is\n * a stable placeholder.\n */\nasync function storeAssets(projectDir: string): Promise<{\n entries: CatalogEntry[];\n domains: CatalogDomain[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n const { resolveCatalogSource } = await import(\"./open-library.ts\");\n const { source, close } = await resolveCatalogSource({ projectDir });\n try {\n const assets = await source.listAssets();\n const entries: CatalogEntry[] = assets.map((a) => ({\n name: a.name,\n kind: (a.kind as AssetKind) ?? \"skill\",\n description: a.description ?? \"\",\n source: `store://${a.id}`,\n publisher: a.publisher,\n repo: a.repo,\n domainSlug: a.domainSlug,\n category: a.category,\n version: a.version,\n requires: [],\n dependencies: [],\n }));\n // Domains are optional on the catalog source — only the store backend\n // (post Part 4 `catalog.listDomains`) exposes them. Duck-type the call so\n // older sources and the local catalog degrade to no domains, not an error.\n const domains = await loadDomains(source);\n return { entries, domains, notes };\n } finally {\n close();\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n // Local-only catalog throws a recognizable message — silence it; absence\n // is the user's choice, not an error.\n if (!/local/i.test(msg)) {\n notes.push({ feed: \"store\", message: msg });\n }\n return { entries: [], domains: [], notes };\n }\n}\n\n/** Optional `listDomains` capability — returns `[]` when the source lacks it. */\nasync function loadDomains(source: unknown): Promise<CatalogDomain[]> {\n const fn = (source as { listDomains?: () => Promise<CatalogDomain[]> }).listDomains;\n if (typeof fn !== \"function\") return [];\n const domains = await fn.call(source);\n return Array.isArray(domains) ? domains : [];\n}\n\n/**\n * Project-source feed: leans on `AssetManager.search()`, which now merges\n * `skaile.yaml`'s `sources:` field into the repositories map. Provided as a\n * function rather than an inline call so the caller can supply a fresh\n * `AssetManager` instance.\n */\nfunction sourceAssets(am: { search: () => CatalogEntry[] }): CatalogEntry[] {\n return am.search();\n}\n\n/**\n * Factory-asset feed: scan the bundled first-party `factory-assets` tree(s)\n * resolved by `factoryAssetRoots()` (the `SKAILE_FACTORY_ASSETS_DIR` override\n * layer ahead of the bundled tree). Synchronous, no network — the entries are\n * the built-in skills / connectors / bundles that ship with `@skaile/workspaces`.\n * `factoryAssetRoots()` already dedupes, so the env override pointing at the\n * bundled dir collapses to one root.\n */\nfunction factoryAssets(): { entries: CatalogEntry[]; notes: FeedNote[] } {\n const notes: FeedNote[] = [];\n try {\n const entries: CatalogEntry[] = [];\n for (const root of factoryAssetRoots()) {\n for (const e of scanRepo(root, \"skaile-factory\")) entries.push(e);\n }\n return { entries, notes };\n } catch (err) {\n notes.push({\n feed: \"factory\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], notes };\n }\n}\n\n/** Tag a flat entry list with a single origin. */\nfunction tag(origin: AssetOrigin, entries: CatalogEntry[]): OriginEntry[] {\n return entries.map((entry) => ({ origin, entry }));\n}\n\n/**\n * Run all feeds and return a single normalized result.\n *\n * Feeds run in parallel where possible — the store fetch is the slow one\n * (one HTTP call) and is fired alongside the local library walk. The factory\n * scan is local + synchronous, so it runs inline.\n */\nexport async function gatherAssetFeeds(\n am: { search: () => CatalogEntry[] },\n projectDir: string,\n): Promise<AssetFeedResult> {\n const [libs, store] = await Promise.all([libraryAssets(), storeAssets(projectDir)]);\n const factory = factoryAssets();\n return {\n entries: [\n ...tag(\"source\", sourceAssets(am)),\n ...tag(\"library\", libs.entries),\n ...tag(\"factory\", factory.entries),\n ...tag(\"store\", store.entries),\n ],\n domains: store.domains,\n notes: [...libs.notes, ...store.notes, ...factory.notes],\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../cli/src/asset-feeds.ts"],"names":[],"mappings":"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","file":"asset-feeds-O6R6J4RI.js","sourcesContent":["/**\n * asset-feeds.ts — gather installable assets from every feed the manage TUI\n * surfaces.\n *\n * Four feeds, normalized into `CatalogEntry`:\n * - **Project sources** — `skaile.yaml` `sources:` entries (scanned via\n * `AssetManager.search()`; the new `sources:` field is merged into the\n * legacy repositories map in `AssetManager.loadConfig`).\n * - **Local libraries** — user authoring places from `LocalIndex` (filesystem\n * scan of each library's `path`).\n * - **Factory assets** — the bundled first-party `factory-assets` tree\n * (`factoryAssetRoots()`), scanned from disk. Always present; no network.\n * - **Remote store** — the configured catalog source when `catalog.url` is\n * not `local`. Failures are non-fatal — they surface as notes.\n */\n\nimport { existsSync } from \"node:fs\";\nimport * as path from \"node:path\";\nimport {\n type AssetKind,\n type CatalogDomain,\n type CatalogEntry,\n factoryAssetRoots,\n scanRepo,\n} from \"@skaile/workspaces/core\";\n\n/** One non-fatal note returned to the caller for surfacing in the UI. */\nexport interface FeedNote {\n feed: \"sources\" | \"libraries\" | \"store\" | \"factory\";\n message: string;\n}\n\n/**\n * Which feed an asset came from. This is the top-level grouping axis in the\n * manage TUI (\"where is this skill coming from?\") and is intentionally distinct\n * from `publisher` (asset-intrinsic identity): the same publisher can legitimately\n * appear under more than one origin (e.g. a github repo you added as a `source`\n * that is also listed in the remote `store`).\n */\nexport type AssetOrigin = \"source\" | \"library\" | \"factory\" | \"store\";\n\n/** A catalog entry tagged with the feed it was gathered from. */\nexport interface OriginEntry {\n origin: AssetOrigin;\n entry: CatalogEntry;\n}\n\nexport interface AssetFeedResult {\n entries: OriginEntry[];\n /**\n * Display-only domain metadata, keyed (by the consumer) on `slug`. Populated\n * from the store's `catalog.listDomains` when the connected catalog source\n * exposes it; empty otherwise. The manage TUI joins `entry.domainSlug` → a\n * domain for grouping headers, descriptions, and relation badges.\n */\n domains: CatalogDomain[];\n notes: FeedNote[];\n}\n\n/**\n * Pull assets from local libraries (the authoring places under\n * `~/.skaile/libraries/<name>/`, not the `~/.skaile/cache/sources/` cache). Each\n * library's `path` is scanned with `scanRepo` and tagged with\n * `repository = \"library:<name>\"` so the manage TUI groups them into their\n * own headers.\n */\nasync function libraryAssets(): Promise<{ entries: CatalogEntry[]; notes: FeedNote[] }> {\n const notes: FeedNote[] = [];\n try {\n const [{ openLibraryManager }, { skaileHomeDir }, { getGlobalCacheDir }] = await Promise.all([\n import(\"./open-library.ts\"),\n import(\"@skaile/workspaces/library\"),\n import(\"@skaile/workspaces/core\"),\n ]);\n const { manager, close } = await openLibraryManager();\n try {\n // Authoring libraries are the rows that are NOT source clones. index.db\n // rows predating the cache migration still carry the legacy\n // ~/.skaile/sources path, so exclude both roots.\n const newRoot = getGlobalCacheDir();\n const legacyRoot = path.join(skaileHomeDir(), \"sources\");\n const libs = (await manager.listLibraries()).filter(\n (l) => !l.path.startsWith(newRoot) && !l.path.startsWith(legacyRoot),\n );\n const entries: CatalogEntry[] = [];\n for (const lib of libs) {\n if (!existsSync(lib.path)) continue;\n for (const e of scanRepo(lib.path, `library:${lib.name}`)) {\n entries.push(e);\n }\n }\n return { entries, notes };\n } finally {\n close();\n }\n } catch (err) {\n notes.push({\n feed: \"libraries\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], notes };\n }\n}\n\n/**\n * Pull a (best-effort) snapshot of the connected remote store catalog.\n *\n * - Returns no entries when the resolved catalog is local-only or the host\n * is unreachable (the failure becomes a note, not an exception).\n * - Maps `CatalogAsset` → `CatalogEntry`, carrying `publisher`, `repo`, and\n * `category` straight through and using `source = \"store://<id>\"`; per-file\n * `source` paths are not available for remote assets so the canonical ref is\n * a stable placeholder.\n */\nasync function storeAssets(projectDir: string): Promise<{\n entries: CatalogEntry[];\n domains: CatalogDomain[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n const { resolveCatalogSource } = await import(\"./open-library.ts\");\n const { source, close } = await resolveCatalogSource({ projectDir });\n try {\n const assets = await source.listAssets();\n const entries: CatalogEntry[] = assets.map((a) => ({\n name: a.name,\n kind: (a.kind as AssetKind) ?? \"skill\",\n description: a.description ?? \"\",\n source: `store://${a.id}`,\n publisher: a.publisher,\n repo: a.repo,\n domainSlug: a.domainSlug,\n category: a.category,\n version: a.version,\n requires: [],\n dependencies: [],\n }));\n // Domains are optional on the catalog source — only the store backend\n // (post Part 4 `catalog.listDomains`) exposes them. Duck-type the call so\n // older sources and the local catalog degrade to no domains, not an error.\n const domains = await loadDomains(source);\n return { entries, domains, notes };\n } finally {\n close();\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n // Local-only catalog throws a recognizable message — silence it; absence\n // is the user's choice, not an error.\n if (!/local/i.test(msg)) {\n notes.push({ feed: \"store\", message: msg });\n }\n return { entries: [], domains: [], notes };\n }\n}\n\n/** Optional `listDomains` capability — returns `[]` when the source lacks it. */\nasync function loadDomains(source: unknown): Promise<CatalogDomain[]> {\n const fn = (source as { listDomains?: () => Promise<CatalogDomain[]> }).listDomains;\n if (typeof fn !== \"function\") return [];\n const domains = await fn.call(source);\n return Array.isArray(domains) ? domains : [];\n}\n\n/**\n * Project-source feed: leans on `AssetManager.search()`, which now merges\n * `skaile.yaml`'s `sources:` field into the repositories map. Provided as a\n * function rather than an inline call so the caller can supply a fresh\n * `AssetManager` instance.\n */\nfunction sourceAssets(am: { search: () => CatalogEntry[] }): CatalogEntry[] {\n return am.search();\n}\n\n/**\n * Factory-asset feed: scan the bundled first-party `factory-assets` tree(s)\n * resolved by `factoryAssetRoots()` (the `SKAILE_FACTORY_ASSETS_DIR` override\n * layer ahead of the bundled tree). Synchronous, no network — the entries are\n * the built-in skills / connectors / bundles that ship with `@skaile/workspaces`.\n * `factoryAssetRoots()` already dedupes, so the env override pointing at the\n * bundled dir collapses to one root.\n */\nfunction factoryAssets(): { entries: CatalogEntry[]; notes: FeedNote[] } {\n const notes: FeedNote[] = [];\n try {\n const entries: CatalogEntry[] = [];\n for (const root of factoryAssetRoots()) {\n for (const e of scanRepo(root, \"skaile-factory\")) entries.push(e);\n }\n return { entries, notes };\n } catch (err) {\n notes.push({\n feed: \"factory\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], notes };\n }\n}\n\n/** Tag a flat entry list with a single origin. */\nfunction tag(origin: AssetOrigin, entries: CatalogEntry[]): OriginEntry[] {\n return entries.map((entry) => ({ origin, entry }));\n}\n\n/**\n * Run all feeds and return a single normalized result.\n *\n * Feeds run in parallel where possible — the store fetch is the slow one\n * (one HTTP call) and is fired alongside the local library walk. The factory\n * scan is local + synchronous, so it runs inline.\n */\nexport async function gatherAssetFeeds(\n am: { search: () => CatalogEntry[] },\n projectDir: string,\n): Promise<AssetFeedResult> {\n const [libs, store] = await Promise.all([libraryAssets(), storeAssets(projectDir)]);\n const factory = factoryAssets();\n return {\n entries: [\n ...tag(\"source\", sourceAssets(am)),\n ...tag(\"library\", libs.entries),\n ...tag(\"factory\", factory.entries),\n ...tag(\"store\", store.entries),\n ],\n domains: store.domains,\n notes: [...libs.notes, ...store.notes, ...factory.notes],\n };\n}\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { AssetManager, MissingManifestError, NON_DEPLOYABLE_KINDS, parseCanonicalLockKey } from '../chunk-
|
|
2
|
-
export { createScaffold, deployAll, installAgent, removeAsset } from '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { AssetManager, MissingManifestError, NON_DEPLOYABLE_KINDS, parseCanonicalLockKey } from '../chunk-BWCGSGAC.js';
|
|
2
|
+
export { createScaffold, deployAll, installAgent, removeAsset } from '../chunk-LTUTK2Q3.js';
|
|
3
|
+
import '../chunk-SDAKQCOB.js';
|
|
4
4
|
import '../chunk-ZAP2BDHG.js';
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
5
|
+
import '../chunk-WBF7JLTY.js';
|
|
6
|
+
import '../chunk-PBO6SCT2.js';
|
|
7
7
|
import '../chunk-DZCK7GRW.js';
|
|
8
8
|
import '../chunk-6IDBWPK2.js';
|
|
9
9
|
import '../chunk-GEEW6SY2.js';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { createScaffold, deployAll, deployAsset, removeAsset } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { createScaffold, deployAll, deployAsset, removeAsset } from '../chunk-LTUTK2Q3.js';
|
|
2
|
+
import '../chunk-SDAKQCOB.js';
|
|
3
3
|
import '../chunk-ZAP2BDHG.js';
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
4
|
+
import '../chunk-WBF7JLTY.js';
|
|
5
|
+
import '../chunk-PBO6SCT2.js';
|
|
6
6
|
import '../chunk-DZCK7GRW.js';
|
|
7
7
|
import '../chunk-6IDBWPK2.js';
|
|
8
8
|
import '../chunk-GEEW6SY2.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../asset-manager/src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../asset-manager/src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../../asset-manager/src/installer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,OAAO,KAAK,EAEV,YAAY,EACZ,YAAY,EACZ,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AAWjC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAE1C,YAAY,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AA6C1C;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,+GAA+G;IAC/G,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,wFAAwF;IACxF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAID;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,YAAY,EACnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAC/C,IAAI,GAAE,aAAkB,EACxB,GAAG,GAAE,GAAU,GACd,OAAO,CA0DT;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,YAAY,EAAE,EACxB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAC/C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,IAAI,GAAE,aAAkB,EACxB,GAAG,GAAE,GAAU,GACd,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../../asset-manager/src/installer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,OAAO,KAAK,EAEV,YAAY,EACZ,YAAY,EACZ,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AAWjC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAE1C,YAAY,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AA6C1C;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,+GAA+G;IAC/G,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,wFAAwF;IACxF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAID;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,YAAY,EACnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAC/C,IAAI,GAAE,aAAkB,EACxB,GAAG,GAAE,GAAU,GACd,OAAO,CA0DT;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,YAAY,EAAE,EACxB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAC/C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,IAAI,GAAE,aAAkB,EACxB,GAAG,GAAE,GAAU,GACd,MAAM,EAAE,CAgFV;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAczF;AAkCD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAmC/B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { dispatchCapability } from '../../chunk-RRVQAE5D.js';
|
|
2
2
|
import { fetchProviderModels } from '../../chunk-BMQKMOQY.js';
|
|
3
3
|
import { AuthError, classifyClaudeSdkError, reclassifyAuthAsAccountUnavailable, AccountUnavailableError } from '../../chunk-GAH4YRCI.js';
|
|
4
|
-
import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-
|
|
4
|
+
import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-N5AE5SOC.js';
|
|
5
5
|
import '../../chunk-6E6PKKAD.js';
|
|
6
6
|
import '../../chunk-JB35MVBN.js';
|
|
7
7
|
import '../../chunk-NSBPE2FW.js';
|
|
@@ -356,6 +356,17 @@ var ClaudeSdkDriver = class extends AgentDriver {
|
|
|
356
356
|
hasSession = false;
|
|
357
357
|
/** Session ID from the SDK — used for streamInput messages. */
|
|
358
358
|
sessionId = "";
|
|
359
|
+
/**
|
|
360
|
+
* Set while the SDK is paused inside `canUseTool` on an `AskUserQuestion`
|
|
361
|
+
* call, waiting for the user's answer. The SDK delivers every sub-question in
|
|
362
|
+
* one call (one `toolUseID`) and the turn stays paused until we resolve with
|
|
363
|
+
* a {@link PermissionResult}. Replies arrive one per `question` event in
|
|
364
|
+
* order, so we accumulate `answers[questionText] = reply` and resolve `allow`
|
|
365
|
+
* once `answered === questions.length`. On abort/hibernate the request is
|
|
366
|
+
* denied so the SDK writes a clean tool_result (no dangling tool_use to
|
|
367
|
+
* poison the resumed transcript). Null when no question is pending.
|
|
368
|
+
*/
|
|
369
|
+
pendingQuestion = null;
|
|
359
370
|
/** Cached slash commands discovered from the SDK. */
|
|
360
371
|
cachedCommands = [];
|
|
361
372
|
/** Token usage from the most recent completed turn. */
|
|
@@ -680,6 +691,11 @@ var ClaudeSdkDriver = class extends AgentDriver {
|
|
|
680
691
|
tools: { type: "preset", preset: "claude_code" },
|
|
681
692
|
permissionMode: "bypassPermissions",
|
|
682
693
|
allowDangerouslySkipPermissions: true,
|
|
694
|
+
// AskUserQuestion routes through canUseTool even under bypassPermissions
|
|
695
|
+
// (ask-rule evaluation precedes permission-mode evaluation in the SDK),
|
|
696
|
+
// so this is the only place the turn can pause to collect a real answer.
|
|
697
|
+
// Every other tool auto-approves and never reaches this callback.
|
|
698
|
+
canUseTool: this.handleCanUseTool,
|
|
683
699
|
abortController: this.abortController,
|
|
684
700
|
model: this.config.model || "sonnet",
|
|
685
701
|
maxTurns: this.config.maxTurns ?? 15,
|
|
@@ -753,6 +769,77 @@ var ClaudeSdkDriver = class extends AgentDriver {
|
|
|
753
769
|
getSlashCommands() {
|
|
754
770
|
return this.cachedCommands;
|
|
755
771
|
}
|
|
772
|
+
// ── Interactive questions (AskUserQuestion) ──────────────────────────────
|
|
773
|
+
/**
|
|
774
|
+
* Permission callback wired into every query. Only `AskUserQuestion` is
|
|
775
|
+
* intercepted: the turn pauses here until {@link answerQuestion} resolves it
|
|
776
|
+
* (or {@link denyPendingQuestion} cancels it). Every other tool auto-approves
|
|
777
|
+
* — under `bypassPermissions` the SDK never even invokes this callback for
|
|
778
|
+
* them, but we approve verbatim as a defensive default.
|
|
779
|
+
*
|
|
780
|
+
* Arrow property so the bound `this` survives being passed as
|
|
781
|
+
* `options.canUseTool` by value.
|
|
782
|
+
*/
|
|
783
|
+
handleCanUseTool = (toolName, input, opts) => {
|
|
784
|
+
if (toolName !== "AskUserQuestion") {
|
|
785
|
+
return Promise.resolve({ behavior: "allow", updatedInput: input });
|
|
786
|
+
}
|
|
787
|
+
const rawQuestions = Array.isArray(input.questions) ? input.questions : [];
|
|
788
|
+
const questionTexts = rawQuestions.map(
|
|
789
|
+
(q) => String(q?.question ?? "")
|
|
790
|
+
);
|
|
791
|
+
if (questionTexts.length === 0) {
|
|
792
|
+
return Promise.resolve({ behavior: "allow", updatedInput: input });
|
|
793
|
+
}
|
|
794
|
+
this.denyPendingQuestion("superseded by a new question");
|
|
795
|
+
return new Promise((resolve) => {
|
|
796
|
+
this.pendingQuestion = {
|
|
797
|
+
resolve,
|
|
798
|
+
originalInput: input,
|
|
799
|
+
questionTexts,
|
|
800
|
+
answers: {},
|
|
801
|
+
answered: 0
|
|
802
|
+
};
|
|
803
|
+
opts.signal.addEventListener(
|
|
804
|
+
"abort",
|
|
805
|
+
() => this.denyPendingQuestion("session aborted before the question was answered"),
|
|
806
|
+
{ once: true }
|
|
807
|
+
);
|
|
808
|
+
this.log.debug("paused on AskUserQuestion", { questions: questionTexts.length });
|
|
809
|
+
});
|
|
810
|
+
};
|
|
811
|
+
hasPendingQuestion() {
|
|
812
|
+
return this.pendingQuestion !== null;
|
|
813
|
+
}
|
|
814
|
+
answerQuestion(answer) {
|
|
815
|
+
const pending = this.pendingQuestion;
|
|
816
|
+
if (!pending) return false;
|
|
817
|
+
const key = pending.questionTexts[pending.answered];
|
|
818
|
+
if (key !== void 0) {
|
|
819
|
+
pending.answers[key] = answer;
|
|
820
|
+
pending.answered += 1;
|
|
821
|
+
}
|
|
822
|
+
if (pending.answered >= pending.questionTexts.length) {
|
|
823
|
+
this.pendingQuestion = null;
|
|
824
|
+
pending.resolve({
|
|
825
|
+
behavior: "allow",
|
|
826
|
+
updatedInput: { ...pending.originalInput, answers: pending.answers }
|
|
827
|
+
});
|
|
828
|
+
this.log.debug("answered AskUserQuestion", { questions: pending.questionTexts.length });
|
|
829
|
+
}
|
|
830
|
+
return true;
|
|
831
|
+
}
|
|
832
|
+
/**
|
|
833
|
+
* Resolve any pending {@link handleCanUseTool} promise with a `deny` so the
|
|
834
|
+
* SDK records a clean tool_result and the turn unwinds. No-op when nothing is
|
|
835
|
+
* pending. Used on abort/kill/reset and when a question is superseded.
|
|
836
|
+
*/
|
|
837
|
+
denyPendingQuestion(reason) {
|
|
838
|
+
const pending = this.pendingQuestion;
|
|
839
|
+
if (!pending) return;
|
|
840
|
+
this.pendingQuestion = null;
|
|
841
|
+
pending.resolve({ behavior: "deny", message: reason });
|
|
842
|
+
}
|
|
756
843
|
/**
|
|
757
844
|
* Compose the MCP servers passed to the SDK query. Merges the legacy
|
|
758
845
|
* `config.mcpServers` (connectors / workspace plugin / declarative skaile.yaml
|
|
@@ -1272,6 +1359,7 @@ var ClaudeSdkDriver = class extends AgentDriver {
|
|
|
1272
1359
|
* error is silently swallowed and the abort signal is still sent.
|
|
1273
1360
|
*/
|
|
1274
1361
|
async abort() {
|
|
1362
|
+
this.denyPendingQuestion("turn aborted before the question was answered");
|
|
1275
1363
|
if (this.query) {
|
|
1276
1364
|
try {
|
|
1277
1365
|
await this.query.interrupt();
|
|
@@ -1293,6 +1381,7 @@ var ClaudeSdkDriver = class extends AgentDriver {
|
|
|
1293
1381
|
* so a new `ClaudeSdkDriver` will start a fresh session.
|
|
1294
1382
|
*/
|
|
1295
1383
|
kill() {
|
|
1384
|
+
this.denyPendingQuestion("session terminated before the question was answered");
|
|
1296
1385
|
if (this.query) {
|
|
1297
1386
|
try {
|
|
1298
1387
|
this.query.close();
|
|
@@ -1318,6 +1407,7 @@ var ClaudeSdkDriver = class extends AgentDriver {
|
|
|
1318
1407
|
return this._contextWindow;
|
|
1319
1408
|
}
|
|
1320
1409
|
async resetSession() {
|
|
1410
|
+
this.denyPendingQuestion("session reset before the question was answered");
|
|
1321
1411
|
if (this.query) {
|
|
1322
1412
|
try {
|
|
1323
1413
|
this.query.close();
|