@skaile/workspaces 4.12.0 → 4.14.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 +24 -0
- package/dist/app-sdk/index.js +1 -1
- package/dist/{asset-feeds-WSKIL5GA.js → asset-feeds-ZCUKOJVN.js} +9 -8
- package/dist/asset-feeds-ZCUKOJVN.js.map +1 -0
- package/dist/asset-manager/catalog-deployer.js +5 -4
- package/dist/asset-manager/index.js +8 -7
- package/dist/asset-manager/installer.js +6 -5
- package/dist/bridge/drivers/claude-sdk.js +259 -27
- package/dist/bridge/drivers/claude-sdk.js.map +1 -1
- package/dist/bridge/drivers/codex.js +8 -7
- package/dist/bridge/drivers/codex.js.map +1 -1
- package/dist/bridge/drivers/continue.js +9 -8
- package/dist/bridge/drivers/continue.js.map +1 -1
- package/dist/bridge/drivers/echo.js +5 -4
- package/dist/bridge/drivers/echo.js.map +1 -1
- package/dist/bridge/drivers/gemini.js +7 -6
- package/dist/bridge/drivers/goose.js +9 -8
- package/dist/bridge/drivers/goose.js.map +1 -1
- package/dist/bridge/drivers/omp.js +4 -3
- package/dist/bridge/drivers/omp.js.map +1 -1
- package/dist/bridge/drivers/opencode.js +9 -8
- package/dist/bridge/drivers/opencode.js.map +1 -1
- package/dist/bridge/drivers/qwen.js +7 -6
- package/dist/bridge/drivers/qwen.js.map +1 -1
- package/dist/bridge/index.js +10 -9
- package/dist/bridge/src/drivers/claude-sdk.d.ts +25 -1
- package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
- package/dist/bridge/src/mcp-tool-schema-filter.d.ts +44 -0
- package/dist/bridge/src/mcp-tool-schema-filter.d.ts.map +1 -0
- package/dist/bridge/src/normalizer.d.ts.map +1 -1
- package/dist/bridge/src/types.d.ts +8 -0
- package/dist/bridge/src/types.d.ts.map +1 -1
- package/dist/{chunk-5UPJWC3M.js → chunk-2JGXE46E.js} +7 -7
- package/dist/{chunk-5UPJWC3M.js.map → chunk-2JGXE46E.js.map} +1 -1
- package/dist/{chunk-C7R65ZTD.js → chunk-4JGTXBQB.js} +4 -4
- package/dist/{chunk-C7R65ZTD.js.map → chunk-4JGTXBQB.js.map} +1 -1
- package/dist/{chunk-TMOS6KL5.js → chunk-6GHXBCE5.js} +6 -6
- package/dist/{chunk-TMOS6KL5.js.map → chunk-6GHXBCE5.js.map} +1 -1
- package/dist/{chunk-RE2XE2AP.js → chunk-7CO3MYNN.js} +6 -6
- package/dist/chunk-7CO3MYNN.js.map +1 -0
- package/dist/{chunk-3QCLMSXU.js → chunk-7NRF7BQB.js} +4 -4
- package/dist/{chunk-3QCLMSXU.js.map → chunk-7NRF7BQB.js.map} +1 -1
- package/dist/{chunk-626UIDZT.js → chunk-A2T4WIZL.js} +3 -3
- package/dist/{chunk-626UIDZT.js.map → chunk-A2T4WIZL.js.map} +1 -1
- package/dist/{chunk-C7DPL3YA.js → chunk-BRNGJTHH.js} +3 -3
- package/dist/{chunk-C7DPL3YA.js.map → chunk-BRNGJTHH.js.map} +1 -1
- package/dist/chunk-C3CAXQMA.js +8 -0
- package/dist/chunk-C3CAXQMA.js.map +1 -0
- package/dist/{chunk-N5O6Z7HV.js → chunk-DM4KP4SC.js} +9 -9
- package/dist/{chunk-N5O6Z7HV.js.map → chunk-DM4KP4SC.js.map} +1 -1
- package/dist/{chunk-NQ3OMJFK.js → chunk-FEEAYDKF.js} +28 -10
- package/dist/chunk-FEEAYDKF.js.map +1 -0
- package/dist/{chunk-DMJ4FUEO.js → chunk-FVKSVVVP.js} +3 -3
- package/dist/{chunk-DMJ4FUEO.js.map → chunk-FVKSVVVP.js.map} +1 -1
- package/dist/{chunk-TVQPJZSO.js → chunk-IM7S4A5E.js} +2 -2
- package/dist/{chunk-TVQPJZSO.js.map → chunk-IM7S4A5E.js.map} +1 -1
- package/dist/{chunk-RUBPZLMO.js → chunk-JMKB7IB4.js} +3 -5
- package/dist/chunk-JMKB7IB4.js.map +1 -0
- package/dist/{chunk-QUSE2T4N.js → chunk-JN2TH5YB.js} +9 -9
- package/dist/chunk-JN2TH5YB.js.map +1 -0
- package/dist/{chunk-QOCH3LO7.js → chunk-L534UCEQ.js} +5 -5
- package/dist/{chunk-QOCH3LO7.js.map → chunk-L534UCEQ.js.map} +1 -1
- package/dist/{chunk-LHBWHIIT.js → chunk-LCKZCLXA.js} +2 -2
- package/dist/{chunk-LHBWHIIT.js.map → chunk-LCKZCLXA.js.map} +1 -1
- package/dist/{chunk-RQRWMKST.js → chunk-LQMALDDB.js} +2 -2
- package/dist/{chunk-RQRWMKST.js.map → chunk-LQMALDDB.js.map} +1 -1
- package/dist/{chunk-WNDDWWGU.js → chunk-NCALGSGL.js} +5 -5
- package/dist/{chunk-WNDDWWGU.js.map → chunk-NCALGSGL.js.map} +1 -1
- package/dist/{chunk-ZSB2SPV4.js → chunk-NKRAHM7T.js} +3 -3
- package/dist/{chunk-ZSB2SPV4.js.map → chunk-NKRAHM7T.js.map} +1 -1
- package/dist/{chunk-N4DHPRBS.js → chunk-NXTLDFLA.js} +3 -3
- package/dist/{chunk-N4DHPRBS.js.map → chunk-NXTLDFLA.js.map} +1 -1
- package/dist/{chunk-PCM75ICY.js → chunk-O7MVMQEU.js} +4 -4
- package/dist/{chunk-PCM75ICY.js.map → chunk-O7MVMQEU.js.map} +1 -1
- package/dist/{chunk-BVYTXIN5.js → chunk-ODP2MN2D.js} +3 -3
- package/dist/{chunk-BVYTXIN5.js.map → chunk-ODP2MN2D.js.map} +1 -1
- package/dist/{chunk-UE4AKJNQ.js → chunk-PB2Y4AMQ.js} +3 -3
- package/dist/{chunk-UE4AKJNQ.js.map → chunk-PB2Y4AMQ.js.map} +1 -1
- package/dist/{chunk-6XIIGQXL.js → chunk-PE3A6FFW.js} +3 -3
- package/dist/{chunk-6XIIGQXL.js.map → chunk-PE3A6FFW.js.map} +1 -1
- package/dist/{chunk-O64WU6WS.js → chunk-QQ3G5N7X.js} +4 -4
- package/dist/chunk-QQ3G5N7X.js.map +1 -0
- package/dist/{chunk-2J3PASYF.js → chunk-QWGSKDD7.js} +90 -6
- package/dist/chunk-QWGSKDD7.js.map +1 -0
- package/dist/{chunk-CPIAQTYM.js → chunk-TOXPRXAK.js} +3 -3
- package/dist/{chunk-CPIAQTYM.js.map → chunk-TOXPRXAK.js.map} +1 -1
- package/dist/{chunk-YZSMZK37.js → chunk-UF4AEO54.js} +3 -3
- package/dist/{chunk-YZSMZK37.js.map → chunk-UF4AEO54.js.map} +1 -1
- package/dist/{chunk-IGI6M7MS.js → chunk-UOJW2DOZ.js} +3 -3
- package/dist/{chunk-IGI6M7MS.js.map → chunk-UOJW2DOZ.js.map} +1 -1
- package/dist/{chunk-KECSNBET.js → chunk-W64ZXABT.js} +26 -19
- package/dist/chunk-W64ZXABT.js.map +1 -0
- package/dist/{chunk-7EYRYGIM.js → chunk-WQPLZUXU.js} +4 -4
- package/dist/{chunk-7EYRYGIM.js.map → chunk-WQPLZUXU.js.map} +1 -1
- package/dist/{chunk-DPKRBLYC.js → chunk-WZQWZJYL.js} +3 -3
- package/dist/{chunk-DPKRBLYC.js.map → chunk-WZQWZJYL.js.map} +1 -1
- package/dist/{chunk-RJNBMEFG.js → chunk-ZEODSOBX.js} +10 -8
- package/dist/chunk-ZEODSOBX.js.map +1 -0
- package/dist/{chunk-BYBIEHQX.js → chunk-ZISHZRG6.js} +27 -27
- package/dist/chunk-ZISHZRG6.js.map +1 -0
- package/dist/{chunk-MH4GYGOW.js → chunk-ZXPIKQAN.js} +4 -4
- package/dist/{chunk-MH4GYGOW.js.map → chunk-ZXPIKQAN.js.map} +1 -1
- package/dist/{chunk-4G6HFU27.js → chunk-ZXQMKXWR.js} +3 -3
- package/dist/{chunk-4G6HFU27.js.map → chunk-ZXQMKXWR.js.map} +1 -1
- package/dist/cli/index.js +61 -55
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/commands/migrate-legacy-entry.d.ts.map +1 -1
- package/dist/cli/src/commands/project.d.ts.map +1 -1
- package/dist/cli/src/store-auth.d.ts.map +1 -1
- package/dist/connectors/config.js +3 -2
- package/dist/connectors/index.js +14 -13
- package/dist/connectors-shared/index.js +2 -2
- package/dist/core/index.js +5 -4
- package/dist/core/logging.js +2 -1
- package/dist/core/runtime-assets.js +3 -2
- package/dist/core/src/index.d.ts +2 -2
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/logging/retention-value.d.ts +7 -0
- package/dist/core/src/logging/retention-value.d.ts.map +1 -0
- package/dist/core/src/logging/retention.d.ts.map +1 -1
- package/dist/core/src/workspace-config.d.ts +51 -2
- package/dist/core/src/workspace-config.d.ts.map +1 -1
- package/dist/core/workspace-config.js +2 -1
- package/dist/deploy/index.js +5 -4
- package/dist/deploy/index.js.map +1 -1
- package/dist/{ensure-sources-ZZRU74UG.js → ensure-sources-5QRNKIKQ.js} +11 -10
- package/dist/ensure-sources-5QRNKIKQ.js.map +1 -0
- package/dist/factory-assets/connectors/box.js +14 -13
- package/dist/factory-assets/connectors/deploy.js +14 -13
- package/dist/factory-assets/connectors/devserver.js +14 -13
- package/dist/factory-assets/connectors/flow/adapter.js +14 -13
- package/dist/factory-assets/connectors/flow/engine.js +6 -5
- package/dist/factory-assets/connectors/flow/run-flow.js +15 -14
- package/dist/factory-assets/connectors/flow/subprompt-runner.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow.js +14 -13
- package/dist/factory-assets/connectors/git.js +14 -13
- package/dist/factory-assets/connectors/gmail.js +14 -13
- package/dist/factory-assets/connectors/googledrive.js +14 -13
- package/dist/factory-assets/connectors/local.js +14 -13
- package/dist/factory-assets/connectors/mattermost.js +14 -13
- package/dist/factory-assets/connectors/memory.js +14 -13
- package/dist/factory-assets/connectors/minio.js +14 -13
- package/dist/factory-assets/connectors/postgres.js +14 -13
- package/dist/factory-assets/connectors/s3.js +14 -13
- package/dist/factory-assets/connectors/sharepoint.js +14 -13
- package/dist/factory-assets/connectors/sqlite.js +14 -13
- package/dist/factory-assets/connectors/static-server.js +14 -13
- package/dist/factory-assets/connectors/tunnel.js +14 -13
- package/dist/factory-assets/connectors/webdav.js +14 -13
- package/dist/factory-assets/connectors/xstate-store.js +14 -13
- package/dist/factory-assets/connectors/xstate.js +14 -13
- package/dist/{flows-XHRUNYJV.js → flows-7EB63Q2Q.js} +8 -7
- package/dist/{flows-XHRUNYJV.js.map → flows-7EB63Q2Q.js.map} +1 -1
- package/dist/{helpers-M76C6JVC.js → helpers-FNZ6J5AB.js} +11 -10
- package/dist/{helpers-M76C6JVC.js.map → helpers-FNZ6J5AB.js.map} +1 -1
- package/dist/library/index.js +6 -5
- package/dist/{library-publish-EQYEJXWO.js → library-publish-BM7X5K6K.js} +15 -14
- package/dist/library-publish-BM7X5K6K.js.map +1 -0
- package/dist/{open-library-YTP7CVVT.js → open-library-TVZI745K.js} +13 -12
- package/dist/{open-library-YTP7CVVT.js.map → open-library-TVZI745K.js.map} +1 -1
- package/dist/{paths-BG3I2LPM.js → paths-IK6Y4OIU.js} +8 -7
- package/dist/{paths-BG3I2LPM.js.map → paths-IK6Y4OIU.js.map} +1 -1
- package/dist/{plugin-store-BCNR6ZBP.js → plugin-store-LUJ4GXSO.js} +7 -6
- package/dist/plugin-store-LUJ4GXSO.js.map +1 -0
- package/dist/{project-THCZLS67.js → project-SLWRBQVB.js} +12 -11
- package/dist/{project-THCZLS67.js.map → project-SLWRBQVB.js.map} +1 -1
- package/dist/resolver/index.js +5 -4
- package/dist/run-group-engine/index.js.map +1 -1
- package/dist/run-group-engine/src/rollup.d.ts.map +1 -1
- package/dist/runner/index.js +20 -19
- package/dist/runner/src/codex-init.d.ts.map +1 -1
- package/dist/runner/src/compaction/orchestrator.d.ts.map +1 -1
- package/dist/runner/src/compaction/strategy.d.ts +8 -5
- package/dist/runner/src/compaction/strategy.d.ts.map +1 -1
- package/dist/runner/src/logging-bootstrap.d.ts +6 -1
- package/dist/runner/src/logging-bootstrap.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +8 -7
- package/dist/sdk/bridge.js +10 -9
- package/dist/sdk/core.js +5 -4
- package/dist/sdk/flow.js +6 -5
- package/dist/sdk/index.js +20 -19
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/resolver.js +5 -4
- package/dist/sdk/runner.js +20 -19
- package/dist/sdk/session.js +2 -2
- package/dist/sdk/types.js +1 -1
- package/dist/session/index.js +2 -2
- package/dist/session/src/dispatcher.d.ts +7 -1
- package/dist/session/src/dispatcher.d.ts.map +1 -1
- package/dist/{setup-QN4HKSFJ.js → setup-YTYMPCWC.js} +17 -16
- package/dist/setup-YTYMPCWC.js.map +1 -0
- package/dist/{skills-FKVBIDNM.js → skills-YB5RHUAT.js} +7 -6
- package/dist/{skills-FKVBIDNM.js.map → skills-YB5RHUAT.js.map} +1 -1
- package/dist/{source-5EAGZA6K.js → source-WPO6HH4P.js} +14 -13
- package/dist/{source-5EAGZA6K.js.map → source-WPO6HH4P.js.map} +1 -1
- package/dist/{source-manifest-publish-57SGT7Q3.js → source-manifest-publish-FNPZJFFK.js} +16 -15
- package/dist/source-manifest-publish-FNPZJFFK.js.map +1 -0
- package/dist/tui/index.js +20 -19
- package/dist/tui/index.js.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/src/events.d.ts +12 -0
- package/dist/types/src/events.d.ts.map +1 -1
- package/dist/types/src/version.d.ts +8 -1
- package/dist/types/src/version.d.ts.map +1 -1
- package/dist/workspace-plugin/adapters/mcp.js +8 -7
- package/dist/workspace-plugin/adapters/omp.js +7 -7
- package/dist/workspace-plugin/adapters/omp.js.map +1 -1
- package/dist/workspace-plugin/index.js +3 -2
- package/dist/workspace-plugin/src/adapters/omp.d.ts.map +1 -1
- package/package.json +2 -1
- package/dist/asset-feeds-WSKIL5GA.js.map +0 -1
- package/dist/chunk-2J3PASYF.js.map +0 -1
- package/dist/chunk-BYBIEHQX.js.map +0 -1
- package/dist/chunk-KECSNBET.js.map +0 -1
- package/dist/chunk-NQ3OMJFK.js.map +0 -1
- package/dist/chunk-O64WU6WS.js.map +0 -1
- package/dist/chunk-QUSE2T4N.js.map +0 -1
- package/dist/chunk-RE2XE2AP.js.map +0 -1
- package/dist/chunk-RJNBMEFG.js.map +0 -1
- package/dist/chunk-RUBPZLMO.js.map +0 -1
- package/dist/ensure-sources-ZZRU74UG.js.map +0 -1
- package/dist/library-publish-EQYEJXWO.js.map +0 -1
- package/dist/plugin-store-BCNR6ZBP.js.map +0 -1
- package/dist/setup-QN4HKSFJ.js.map +0 -1
- package/dist/source-manifest-publish-57SGT7Q3.js.map +0 -1
|
@@ -48,6 +48,13 @@ export type ProtocolVersion = {
|
|
|
48
48
|
* @category Protocol
|
|
49
49
|
* @since 3.0.0
|
|
50
50
|
*
|
|
51
|
+
* Changed in 4.5.0:
|
|
52
|
+
* `tool_call` and `tool_result` gain optional `parentToolUseId`, set when a
|
|
53
|
+
* subagent made the call. Such a call runs alongside the main reply, so a host
|
|
54
|
+
* that treats a tool call as a break in the reply's text should skip tagged
|
|
55
|
+
* ones. A 4.4 runner never sets it and cannot be told apart from a turn with no
|
|
56
|
+
* subagent; feature-detect on `major === 4 && minor >= 5`.
|
|
57
|
+
*
|
|
51
58
|
* Changed in 4.4.0:
|
|
52
59
|
* `SystemPromptSection.label` gains `"home"`, the `agent.home` block that the
|
|
53
60
|
* runner builds from workspace files. A host that switches exhaustively over the
|
|
@@ -290,7 +297,7 @@ export declare const PROTOCOL_VERSION: ProtocolVersion;
|
|
|
290
297
|
* @since 3.0.0
|
|
291
298
|
* @docLink packages/types/protocol-v3#protocol-version
|
|
292
299
|
*/
|
|
293
|
-
export declare const PROTOCOL_VERSION_STRING = "4.
|
|
300
|
+
export declare const PROTOCOL_VERSION_STRING = "4.5.0";
|
|
294
301
|
/**
|
|
295
302
|
* Parse a `"major.minor.patch"` string into a {@link ProtocolVersion}.
|
|
296
303
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../types/src/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,4GAA4G;IAC5G,KAAK,EAAE,MAAM,CAAC;IACd,0FAA0F;IAC1F,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../types/src/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,4GAA4G;IAC5G,KAAK,EAAE,MAAM,CAAC;IACd,0FAA0F;IAC1F,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+PG;AACH,eAAO,MAAM,gBAAgB,EAAE,eAAkD,CAAC;AAElF;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,UAAU,CAAC;AAE/C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,eAAe,CAoBvD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,CAExD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { buildWorkspaceMcpServer, buildWorkspaceMcpStdioServer, buildWorkspaceToolDefs, runMcpServerStdio } from '../../chunk-
|
|
2
|
-
import '../../chunk-
|
|
1
|
+
export { buildWorkspaceMcpServer, buildWorkspaceMcpStdioServer, buildWorkspaceToolDefs, runMcpServerStdio } from '../../chunk-ZXPIKQAN.js';
|
|
2
|
+
import '../../chunk-LCKZCLXA.js';
|
|
3
3
|
import '../../chunk-P2DLXBZK.js';
|
|
4
4
|
import '../../chunk-7IH3RKKK.js';
|
|
5
5
|
import '../../chunk-4ZTPYIBE.js';
|
|
@@ -8,21 +8,22 @@ import '../../chunk-R6O6YWU7.js';
|
|
|
8
8
|
import '../../chunk-X5YPJV4N.js';
|
|
9
9
|
import '../../chunk-T3YUSWVK.js';
|
|
10
10
|
import '../../chunk-Q6NDQ6BH.js';
|
|
11
|
-
import '../../chunk-
|
|
12
|
-
import '../../chunk-
|
|
11
|
+
import '../../chunk-QQ3G5N7X.js';
|
|
12
|
+
import '../../chunk-7NRF7BQB.js';
|
|
13
13
|
import '../../chunk-4GY63JU6.js';
|
|
14
|
-
import '../../chunk-
|
|
14
|
+
import '../../chunk-NXTLDFLA.js';
|
|
15
15
|
import '../../chunk-F3HNW354.js';
|
|
16
16
|
import '../../chunk-K5GBV4SA.js';
|
|
17
17
|
import '../../chunk-QVZA2MDT.js';
|
|
18
|
-
import '../../chunk-
|
|
18
|
+
import '../../chunk-QWGSKDD7.js';
|
|
19
19
|
import '../../chunk-MENCWIHW.js';
|
|
20
20
|
import '../../chunk-P4VHQA4N.js';
|
|
21
21
|
import '../../chunk-2FBPAR2V.js';
|
|
22
22
|
import '../../chunk-GEEW6SY2.js';
|
|
23
|
-
import '../../chunk-
|
|
23
|
+
import '../../chunk-JMKB7IB4.js';
|
|
24
24
|
import '../../chunk-DPLIN2RA.js';
|
|
25
25
|
import '../../chunk-GZZPKAV5.js';
|
|
26
|
+
import '../../chunk-C3CAXQMA.js';
|
|
26
27
|
import '../../chunk-BOFL7GIF.js';
|
|
27
28
|
import '../../chunk-NSBPE2FW.js';
|
|
28
29
|
//# sourceMappingURL=mcp.js.map
|
|
@@ -74,7 +74,7 @@ function buildOmpToolSet(plugin) {
|
|
|
74
74
|
description: "List all available flow definitions from ai-assets.",
|
|
75
75
|
parameters: {},
|
|
76
76
|
handler: async () => {
|
|
77
|
-
const { flowList } = await import('../../flows-
|
|
77
|
+
const { flowList } = await import('../../flows-7EB63Q2Q.js');
|
|
78
78
|
return (await flowList(plugin.projectDir)).content[0].text;
|
|
79
79
|
}
|
|
80
80
|
},
|
|
@@ -83,7 +83,7 @@ function buildOmpToolSet(plugin) {
|
|
|
83
83
|
description: "List past flow run sessions for this workspace.",
|
|
84
84
|
parameters: {},
|
|
85
85
|
handler: async () => {
|
|
86
|
-
const { flowListSessions } = await import('../../flows-
|
|
86
|
+
const { flowListSessions } = await import('../../flows-7EB63Q2Q.js');
|
|
87
87
|
return (await flowListSessions(plugin.projectDir)).content[0].text;
|
|
88
88
|
}
|
|
89
89
|
},
|
|
@@ -92,7 +92,7 @@ function buildOmpToolSet(plugin) {
|
|
|
92
92
|
description: "List all skills in the ai-assets catalog.",
|
|
93
93
|
parameters: { domain: { type: "string", optional: true } },
|
|
94
94
|
handler: async ({ domain }) => {
|
|
95
|
-
const { skillList } = await import('../../skills-
|
|
95
|
+
const { skillList } = await import('../../skills-YB5RHUAT.js');
|
|
96
96
|
return (await skillList(plugin.projectDir, domain)).content[0].text;
|
|
97
97
|
}
|
|
98
98
|
},
|
|
@@ -101,7 +101,7 @@ function buildOmpToolSet(plugin) {
|
|
|
101
101
|
description: "Search skills by name, description, or keywords.",
|
|
102
102
|
parameters: { query: { type: "string" } },
|
|
103
103
|
handler: async ({ query }) => {
|
|
104
|
-
const { skillSearch } = await import('../../skills-
|
|
104
|
+
const { skillSearch } = await import('../../skills-YB5RHUAT.js');
|
|
105
105
|
return (await skillSearch(plugin.projectDir, query)).content[0].text;
|
|
106
106
|
}
|
|
107
107
|
},
|
|
@@ -110,7 +110,7 @@ function buildOmpToolSet(plugin) {
|
|
|
110
110
|
description: "Show the full SKILL.md content for a skill.",
|
|
111
111
|
parameters: { skill_id: { type: "string" } },
|
|
112
112
|
handler: async ({ skill_id }) => {
|
|
113
|
-
const { skillShow } = await import('../../skills-
|
|
113
|
+
const { skillShow } = await import('../../skills-YB5RHUAT.js');
|
|
114
114
|
return (await skillShow(plugin.projectDir, skill_id)).content[0].text;
|
|
115
115
|
}
|
|
116
116
|
},
|
|
@@ -201,7 +201,7 @@ async function handleSlashCommand(plugin, group, args) {
|
|
|
201
201
|
}
|
|
202
202
|
}
|
|
203
203
|
async function handleFlowCommand(plugin, sub, rest) {
|
|
204
|
-
const { flowList, flowShow, flowListSessions, flowGetSession } = await import('../../flows-
|
|
204
|
+
const { flowList, flowShow, flowListSessions, flowGetSession } = await import('../../flows-7EB63Q2Q.js');
|
|
205
205
|
if (!sub || sub === "list") return (await flowList(plugin.projectDir)).content[0].text;
|
|
206
206
|
if (sub === "show" && rest[0])
|
|
207
207
|
return (await flowShow(plugin.projectDir, rest[0])).content[0].text;
|
|
@@ -230,7 +230,7 @@ async function handleConnectorCommand(plugin, sub, rest) {
|
|
|
230
230
|
return "Usage: /connector list | read <id> <path> | exec <id> <op> [json-args] | describe <id>";
|
|
231
231
|
}
|
|
232
232
|
async function handleSkillCommand(plugin, sub, rest) {
|
|
233
|
-
const { skillList, skillShow, skillSearch } = await import('../../skills-
|
|
233
|
+
const { skillList, skillShow, skillSearch } = await import('../../skills-YB5RHUAT.js');
|
|
234
234
|
if (sub === "run" && rest[0])
|
|
235
235
|
return (await skillShow(plugin.projectDir, rest[0])).content[0].text;
|
|
236
236
|
if (!sub || sub === "list") return (await skillList(plugin.projectDir, rest[0])).content[0].text;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../workspace-plugin/src/adapters/omp.ts"],"names":[],"mappings":"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","file":"omp.js","sourcesContent":["import type { WorkspacePlugin } from \"../plugin.js\";\n\n// ── Extension source generator (STATELESS) ──────────────────────────────────\n// This function generates the .omp/extensions/skaile.ts file content.\n// It is stateless — takes only projectDir, does not require a booted plugin.\n// OMP tool set in the generated file is intentionally a reduced subset\n// (high-frequency tools only) — the full set is available via the MCP adapter.\n\n/**\n * Generate the `.omp/extensions/skaile.ts` file content for a given project.\n *\n * Stateless — accepts only `projectDir` and embeds it as a JSON string\n * literal in the generated TypeScript source. No `boot()` or plugin instance\n * is required; this function is safe to call from install commands.\n *\n * The generated file exports `onInit`, `tools`, and `slashCommands` as\n * required by the OMP extension API.\n *\n * @param projectDir - Absolute path to the skaile project root (embedded in\n * the generated source).\n * @returns A TypeScript source string ready to be written to\n * `.omp/extensions/skaile.ts`.\n *\n * @docLink packages/workspace-plugin/concepts#adapters\n */\nexport function buildOmpExtensionSource(projectDir: string): string {\n const escaped = JSON.stringify(projectDir);\n return `// .omp/extensions/skaile.ts\n// Generated by: skaile plugin install --driver omp\n// or: skaile repl --driver omp (ephemeral — removed on exit)\n// Re-generate: skaile plugin install --driver omp --project-dir ${projectDir}\nimport { WorkspacePlugin } from \"@skaile/workspaces/workspace-plugin\";\n\nconst plugin = new WorkspacePlugin({ projectDir: ${escaped}, bootOwned: true });\n\nexport async function onInit() {\n await plugin.boot();\n return { systemPromptAppend: plugin.buildSystemPromptSection() };\n}\n\nexport function tools() {\n return plugin.buildOmpToolSet();\n}\n\nexport const slashCommands = [\n {\n name: \"/flow\",\n description: \"Flow inspection: /flow list | show <id> | sessions | session <runId>\",\n handler: (args: string[]) => plugin.handleSlashCommand(\"flow\", args),\n },\n {\n name: \"/connector\",\n description: \"Connector CRUD: /connector list | read <id> <path> | exec <id> <op> [json-args] | describe <id>\",\n handler: (args: string[]) => plugin.handleSlashCommand(\"connector\", args),\n },\n {\n name: \"/skill\",\n description: \"Skill catalog: /skill list [domain] | show <id> | search <query> | run <id>\",\n handler: (args: string[]) => plugin.handleSlashCommand(\"skill\", args),\n },\n {\n name: \"/mounts\",\n description: \"Mount management: /mounts list | sync <id> | status <id>\",\n handler: (args: string[]) => plugin.handleSlashCommand(\"mounts\", args),\n },\n {\n name: \"/validate\",\n description: \"Validate workspace config (skaile.yaml)\",\n handler: () => plugin.handleSlashCommand(\"validate\", []),\n },\n];\n`;\n}\n\n// ── OMP tool set builder ──────────────────────────────────────────────────────\n// OMP tool definition shape: { name, description, parameters, handler }\n// This is a reduced subset of the MCP tool surface (high-frequency tools only).\n\n/**\n * Build the OMP-native tool set for a booted `WorkspacePlugin`.\n *\n * Returns 13 tool objects in OMP's `{ name, description, parameters, handler }`\n * shape — a high-frequency subset of the 28 MCP tools. The full tool surface\n * is available via the MCP adapter.\n *\n * Included tools: `mount_list`, `mount_sync`, `flow_list`, `flow_list_sessions`,\n * `skill_list`, `skill_search`, `skill_show`, `connector_list`, `connector_read`,\n * `connector_exec`, `session_list`, `workspace_validate`, `workspace_info`.\n *\n * @param plugin - A booted `WorkspacePlugin` instance.\n * @returns Array of OMP tool definition objects.\n *\n * @docLink packages/workspace-plugin/concepts#adapters\n */\nexport function buildOmpToolSet(plugin: WorkspacePlugin): unknown[] {\n return [\n {\n name: \"mount_list\",\n description: \"List all mounts declared in skaile.yaml with their mount status.\",\n parameters: {},\n handler: async () => {\n const { mountList } = await import(\"../tools/connectors.js\");\n return (await mountList(plugin.connectorManager)).content[0].text;\n },\n },\n {\n name: \"mount_sync\",\n description: \"Sync a mount (pull latest from remote).\",\n parameters: { mount_id: { type: \"string\" } },\n handler: async ({ mount_id }: { mount_id: string }) => {\n const { mountSync } = await import(\"../tools/connectors.js\");\n return (await mountSync(plugin.connectorManager, mount_id)).content[0].text;\n },\n },\n {\n name: \"flow_list\",\n description: \"List all available flow definitions from ai-assets.\",\n parameters: {},\n handler: async () => {\n const { flowList } = await import(\"../tools/flows.js\");\n return (await flowList(plugin.projectDir)).content[0].text;\n },\n },\n {\n name: \"flow_list_sessions\",\n description: \"List past flow run sessions for this workspace.\",\n parameters: {},\n handler: async () => {\n const { flowListSessions } = await import(\"../tools/flows.js\");\n return (await flowListSessions(plugin.projectDir)).content[0].text;\n },\n },\n {\n name: \"skill_list\",\n description: \"List all skills in the ai-assets catalog.\",\n parameters: { domain: { type: \"string\", optional: true } },\n handler: async ({ domain }: { domain?: string }) => {\n const { skillList } = await import(\"../tools/skills.js\");\n return (await skillList(plugin.projectDir, domain)).content[0].text;\n },\n },\n {\n name: \"skill_search\",\n description: \"Search skills by name, description, or keywords.\",\n parameters: { query: { type: \"string\" } },\n handler: async ({ query }: { query: string }) => {\n const { skillSearch } = await import(\"../tools/skills.js\");\n return (await skillSearch(plugin.projectDir, query)).content[0].text;\n },\n },\n {\n name: \"skill_show\",\n description: \"Show the full SKILL.md content for a skill.\",\n parameters: { skill_id: { type: \"string\" } },\n handler: async ({ skill_id }: { skill_id: string }) => {\n const { skillShow } = await import(\"../tools/skills.js\");\n return (await skillShow(plugin.projectDir, skill_id)).content[0].text;\n },\n },\n {\n name: \"connector_list\",\n description:\n \"List connectors declared in skaile.yaml as {connected, failed}. `failed` holds connectors that did not connect this session, with the failure reason — their mount paths are dead directories, not synced workspaces.\",\n parameters: {},\n handler: async () => {\n const { connectorList } = await import(\"../tools/connectors.js\");\n return (await connectorList(plugin.connectorManager)).content[0].text;\n },\n },\n {\n name: \"connector_read\",\n description: \"Read content from a connector by path.\",\n parameters: { connector_id: { type: \"string\" }, path: { type: \"string\" } },\n handler: async ({ connector_id, path }: { connector_id: string; path: string }) => {\n const { connectorRead } = await import(\"../tools/connectors.js\");\n return (await connectorRead(plugin.connectorManager, connector_id, path)).content[0].text;\n },\n },\n {\n name: \"connector_exec\",\n description: \"Execute a custom operation on a connector.\",\n parameters: {\n connector_id: { type: \"string\" },\n operation: { type: \"string\" },\n args: { type: \"object\", optional: true },\n },\n handler: async ({\n connector_id,\n operation,\n args,\n }: {\n connector_id: string;\n operation: string;\n args?: Record<string, unknown>;\n }) => {\n const { connectorExec } = await import(\"../tools/connectors.js\");\n return (await connectorExec(plugin.connectorManager, connector_id, operation, args ?? {}))\n .content[0].text;\n },\n },\n {\n name: \"session_list\",\n description: \"List past agent run sessions.\",\n parameters: {},\n handler: async () => {\n const { sessionList } = await import(\"../tools/sessions.js\");\n return (await sessionList(plugin.projectDir)).content[0].text;\n },\n },\n {\n name: \"workspace_validate\",\n description: \"Run a full health check on the workspace config.\",\n parameters: {},\n handler: async () => {\n const { workspaceValidate } = await import(\"../tools/validator.js\");\n return (await workspaceValidate(plugin, plugin.driver ?? \"omp\")).content[0].text;\n },\n },\n {\n name: \"workspace_info\",\n description: \"Show workspace configuration (driver, model, resource counts).\",\n parameters: {},\n handler: async () => {\n const { workspaceInfo } = await import(\"../tools/validator.js\");\n return (await workspaceInfo(plugin, plugin.driver ?? \"omp\", plugin.model))\n .content[0].text;\n },\n },\n ];\n}\n\n// ── Slash command dispatcher ──────────────────────────────────────────────────\n\n/**\n * Dispatch an OMP slash command to the appropriate tool group.\n *\n * Routes the command group string to the corresponding tool functions.\n * Supported groups: `\"flow\"`, `\"connector\"`, `\"skill\"`, `\"mounts\"`,\n * `\"validate\"`. Returns a human-readable string for display in the OMP\n * terminal.\n *\n * Sub-commands per group:\n * - `flow`: `list` | `show <id>` | `sessions` | `session <runId>`\n * - `connector`: `list` | `read <id> <path>` | `exec <id> <op> [json-args]` | `describe <id>`\n * - `skill`: `list [domain]` | `show <id>` | `search <query>` | `run <id>`\n * - `mounts`: `list` | `sync <id>` | `status <id>`\n * - `validate`: (no sub-commands)\n *\n * @param plugin - A booted `WorkspacePlugin` instance.\n * @param group - Slash command group name (without the leading `/`).\n * @param args - Tokenised arguments following the group name.\n * @returns Plain-text result string for the OMP terminal.\n *\n * @docLink packages/workspace-plugin/concepts#adapters\n */\nexport async function handleSlashCommand(\n plugin: WorkspacePlugin,\n group: string,\n args: string[],\n): Promise<string> {\n const sub = args[0];\n const rest = args.slice(1);\n\n try {\n switch (group) {\n case \"flow\":\n return await handleFlowCommand(plugin, sub, rest);\n case \"connector\":\n return await handleConnectorCommand(plugin, sub, rest);\n case \"skill\":\n return await handleSkillCommand(plugin, sub, rest);\n case \"mounts\":\n return await handleMountsCommand(plugin, sub, rest);\n case \"validate\":\n return await handleValidateCommand(plugin);\n default:\n return `Unknown group '${group}'`;\n }\n } catch (e: unknown) {\n return `Error: ${e instanceof Error ? e.message : String(e)}`;\n }\n}\n\nasync function handleFlowCommand(\n plugin: WorkspacePlugin,\n sub: string | undefined,\n rest: string[],\n): Promise<string> {\n const { flowList, flowShow, flowListSessions, flowGetSession } = await import(\n \"../tools/flows.js\"\n );\n if (!sub || sub === \"list\") return (await flowList(plugin.projectDir)).content[0].text;\n if (sub === \"show\" && rest[0])\n return (await flowShow(plugin.projectDir, rest[0])).content[0].text;\n if (sub === \"sessions\") return (await flowListSessions(plugin.projectDir)).content[0].text;\n if (sub === \"session\" && rest[0])\n return (await flowGetSession(plugin.projectDir, rest[0])).content[0].text;\n return \"Usage: /flow list | show <id> | sessions | session <runId>\";\n}\n\nasync function handleConnectorCommand(\n plugin: WorkspacePlugin,\n sub: string | undefined,\n rest: string[],\n): Promise<string> {\n const { connectorList, connectorRead, connectorExec, connectorDescribe } = await import(\n \"../tools/connectors.js\"\n );\n if (!sub || sub === \"list\") return (await connectorList(plugin.connectorManager)).content[0].text;\n if (sub === \"read\" && rest[0] && rest[1])\n return (await connectorRead(plugin.connectorManager, rest[0], rest[1])).content[0].text;\n if (sub === \"exec\" && rest[0] && rest[1]) {\n let args: Record<string, unknown> = {};\n if (rest[2]) {\n try {\n args = JSON.parse(rest.slice(2).join(\" \"));\n } catch {\n /* best-effort parse */\n }\n }\n return (await connectorExec(plugin.connectorManager, rest[0], rest[1], args)).content[0].text;\n }\n if (sub === \"describe\" && rest[0])\n return (await connectorDescribe(plugin.connectorManager, rest[0])).content[0].text;\n return \"Usage: /connector list | read <id> <path> | exec <id> <op> [json-args] | describe <id>\";\n}\n\nasync function handleSkillCommand(\n plugin: WorkspacePlugin,\n sub: string | undefined,\n rest: string[],\n): Promise<string> {\n const { skillList, skillShow, skillSearch } = await import(\"../tools/skills.js\");\n if (sub === \"run\" && rest[0])\n return (await skillShow(plugin.projectDir, rest[0])).content[0].text;\n if (!sub || sub === \"list\") return (await skillList(plugin.projectDir, rest[0])).content[0].text;\n if (sub === \"show\" && rest[0])\n return (await skillShow(plugin.projectDir, rest[0])).content[0].text;\n if (sub === \"search\" && rest[0])\n return (await skillSearch(plugin.projectDir, rest.join(\" \"))).content[0].text;\n return \"Usage: /skill list [domain] | show <id> | search <query> | run <id>\";\n}\n\nasync function handleMountsCommand(\n plugin: WorkspacePlugin,\n sub: string | undefined,\n rest: string[],\n): Promise<string> {\n const { mountList, mountSync, mountStatus } = await import(\"../tools/connectors.js\");\n if (!sub || sub === \"list\") return (await mountList(plugin.connectorManager)).content[0].text;\n if (sub === \"sync\" && rest[0])\n return (await mountSync(plugin.connectorManager, rest[0])).content[0].text;\n if (sub === \"status\" && rest[0])\n return (await mountStatus(plugin.connectorManager, rest[0])).content[0].text;\n return \"Usage: /mounts list | sync <id> | status <id>\";\n}\n\nasync function handleValidateCommand(plugin: WorkspacePlugin): Promise<string> {\n const { workspaceValidate } = await import(\"../tools/validator.js\");\n return (await workspaceValidate(plugin, plugin.driver ?? \"omp\")).content[0].text;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../workspace-plugin/src/adapters/omp.ts"],"names":[],"mappings":"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","file":"omp.js","sourcesContent":["import type { WorkspacePlugin } from \"../plugin.js\";\n\n// ── Extension source generator (STATELESS) ──────────────────────────────────\n// This function generates the .omp/extensions/skaile.ts file content.\n// It is stateless — takes only projectDir, does not require a booted plugin.\n// OMP tool set in the generated file is intentionally a reduced subset\n// (high-frequency tools only) — the full set is available via the MCP adapter.\n\n/**\n * Generate the `.omp/extensions/skaile.ts` file content for a given project.\n *\n * Stateless — accepts only `projectDir` and embeds it as a JSON string\n * literal in the generated TypeScript source. No `boot()` or plugin instance\n * is required; this function is safe to call from install commands.\n *\n * The generated file exports `onInit`, `tools`, and `slashCommands` as\n * required by the OMP extension API.\n *\n * @param projectDir - Absolute path to the skaile project root (embedded in\n * the generated source).\n * @returns A TypeScript source string ready to be written to\n * `.omp/extensions/skaile.ts`.\n *\n * @docLink packages/workspace-plugin/concepts#adapters\n */\nexport function buildOmpExtensionSource(projectDir: string): string {\n const escaped = JSON.stringify(projectDir);\n return `// .omp/extensions/skaile.ts\n// Generated by: skaile plugin install --driver omp\n// or: skaile repl --driver omp (ephemeral — removed on exit)\n// Re-generate: skaile plugin install --driver omp --project-dir ${projectDir}\nimport { WorkspacePlugin } from \"@skaile/workspaces/workspace-plugin\";\n\nconst plugin = new WorkspacePlugin({ projectDir: ${escaped}, bootOwned: true });\n\nexport async function onInit() {\n await plugin.boot();\n return { systemPromptAppend: plugin.buildSystemPromptSection() };\n}\n\nexport function tools() {\n return plugin.buildOmpToolSet();\n}\n\nexport const slashCommands = [\n {\n name: \"/flow\",\n description: \"Flow inspection: /flow list | show <id> | sessions | session <runId>\",\n handler: (args: string[]) => plugin.handleSlashCommand(\"flow\", args),\n },\n {\n name: \"/connector\",\n description: \"Connector CRUD: /connector list | read <id> <path> | exec <id> <op> [json-args] | describe <id>\",\n handler: (args: string[]) => plugin.handleSlashCommand(\"connector\", args),\n },\n {\n name: \"/skill\",\n description: \"Skill catalog: /skill list [domain] | show <id> | search <query> | run <id>\",\n handler: (args: string[]) => plugin.handleSlashCommand(\"skill\", args),\n },\n {\n name: \"/mounts\",\n description: \"Mount management: /mounts list | sync <id> | status <id>\",\n handler: (args: string[]) => plugin.handleSlashCommand(\"mounts\", args),\n },\n {\n name: \"/validate\",\n description: \"Validate workspace config (skaile.yaml)\",\n handler: () => plugin.handleSlashCommand(\"validate\", []),\n },\n];\n`;\n}\n\n// ── OMP tool set builder ──────────────────────────────────────────────────────\n// OMP tool definition shape: { name, description, parameters, handler }\n// This is a reduced subset of the MCP tool surface (high-frequency tools only).\n\n/**\n * Build the OMP-native tool set for a booted `WorkspacePlugin`.\n *\n * Returns 13 tool objects in OMP's `{ name, description, parameters, handler }`\n * shape — a high-frequency subset of the 28 MCP tools. The full tool surface\n * is available via the MCP adapter.\n *\n * Included tools: `mount_list`, `mount_sync`, `flow_list`, `flow_list_sessions`,\n * `skill_list`, `skill_search`, `skill_show`, `connector_list`, `connector_read`,\n * `connector_exec`, `session_list`, `workspace_validate`, `workspace_info`.\n *\n * @param plugin - A booted `WorkspacePlugin` instance.\n * @returns Array of OMP tool definition objects.\n *\n * @docLink packages/workspace-plugin/concepts#adapters\n */\nexport function buildOmpToolSet(plugin: WorkspacePlugin): unknown[] {\n return [\n {\n name: \"mount_list\",\n description: \"List all mounts declared in skaile.yaml with their mount status.\",\n parameters: {},\n handler: async () => {\n const { mountList } = await import(\"../tools/connectors.js\");\n return (await mountList(plugin.connectorManager)).content[0].text;\n },\n },\n {\n name: \"mount_sync\",\n description: \"Sync a mount (pull latest from remote).\",\n parameters: { mount_id: { type: \"string\" } },\n handler: async ({ mount_id }: { mount_id: string }) => {\n const { mountSync } = await import(\"../tools/connectors.js\");\n return (await mountSync(plugin.connectorManager, mount_id)).content[0].text;\n },\n },\n {\n name: \"flow_list\",\n description: \"List all available flow definitions from ai-assets.\",\n parameters: {},\n handler: async () => {\n const { flowList } = await import(\"../tools/flows.js\");\n return (await flowList(plugin.projectDir)).content[0].text;\n },\n },\n {\n name: \"flow_list_sessions\",\n description: \"List past flow run sessions for this workspace.\",\n parameters: {},\n handler: async () => {\n const { flowListSessions } = await import(\"../tools/flows.js\");\n return (await flowListSessions(plugin.projectDir)).content[0].text;\n },\n },\n {\n name: \"skill_list\",\n description: \"List all skills in the ai-assets catalog.\",\n parameters: { domain: { type: \"string\", optional: true } },\n handler: async ({ domain }: { domain?: string }) => {\n const { skillList } = await import(\"../tools/skills.js\");\n return (await skillList(plugin.projectDir, domain)).content[0].text;\n },\n },\n {\n name: \"skill_search\",\n description: \"Search skills by name, description, or keywords.\",\n parameters: { query: { type: \"string\" } },\n handler: async ({ query }: { query: string }) => {\n const { skillSearch } = await import(\"../tools/skills.js\");\n return (await skillSearch(plugin.projectDir, query)).content[0].text;\n },\n },\n {\n name: \"skill_show\",\n description: \"Show the full SKILL.md content for a skill.\",\n parameters: { skill_id: { type: \"string\" } },\n handler: async ({ skill_id }: { skill_id: string }) => {\n const { skillShow } = await import(\"../tools/skills.js\");\n return (await skillShow(plugin.projectDir, skill_id)).content[0].text;\n },\n },\n {\n name: \"connector_list\",\n description:\n \"List connectors declared in skaile.yaml as {connected, failed}. `failed` holds connectors that did not connect this session, with the failure reason — their mount paths are dead directories, not synced workspaces.\",\n parameters: {},\n handler: async () => {\n const { connectorList } = await import(\"../tools/connectors.js\");\n return (await connectorList(plugin.connectorManager)).content[0].text;\n },\n },\n {\n name: \"connector_read\",\n description: \"Read content from a connector by path.\",\n parameters: { connector_id: { type: \"string\" }, path: { type: \"string\" } },\n handler: async ({ connector_id, path }: { connector_id: string; path: string }) => {\n const { connectorRead } = await import(\"../tools/connectors.js\");\n return (await connectorRead(plugin.connectorManager, connector_id, path)).content[0].text;\n },\n },\n {\n name: \"connector_exec\",\n description: \"Execute a custom operation on a connector.\",\n parameters: {\n connector_id: { type: \"string\" },\n operation: { type: \"string\" },\n args: { type: \"object\", optional: true },\n },\n handler: async ({\n connector_id,\n operation,\n args,\n }: {\n connector_id: string;\n operation: string;\n args?: Record<string, unknown>;\n }) => {\n const { connectorExec } = await import(\"../tools/connectors.js\");\n return (await connectorExec(plugin.connectorManager, connector_id, operation, args ?? {}))\n .content[0].text;\n },\n },\n {\n name: \"session_list\",\n description: \"List past agent run sessions.\",\n parameters: {},\n handler: async () => {\n const { sessionList } = await import(\"../tools/sessions.js\");\n return (await sessionList(plugin.projectDir)).content[0].text;\n },\n },\n {\n name: \"workspace_validate\",\n description: \"Run a full health check on the workspace config.\",\n parameters: {},\n handler: async () => {\n const { workspaceValidate } = await import(\"../tools/validator.js\");\n return (await workspaceValidate(plugin, plugin.driver ?? \"omp\")).content[0].text;\n },\n },\n {\n name: \"workspace_info\",\n description: \"Show workspace configuration (driver, model, resource counts).\",\n parameters: {},\n handler: async () => {\n const { workspaceInfo } = await import(\"../tools/validator.js\");\n return (await workspaceInfo(plugin, plugin.driver ?? \"omp\", plugin.model)).content[0].text;\n },\n },\n ];\n}\n\n// ── Slash command dispatcher ──────────────────────────────────────────────────\n\n/**\n * Dispatch an OMP slash command to the appropriate tool group.\n *\n * Routes the command group string to the corresponding tool functions.\n * Supported groups: `\"flow\"`, `\"connector\"`, `\"skill\"`, `\"mounts\"`,\n * `\"validate\"`. Returns a human-readable string for display in the OMP\n * terminal.\n *\n * Sub-commands per group:\n * - `flow`: `list` | `show <id>` | `sessions` | `session <runId>`\n * - `connector`: `list` | `read <id> <path>` | `exec <id> <op> [json-args]` | `describe <id>`\n * - `skill`: `list [domain]` | `show <id>` | `search <query>` | `run <id>`\n * - `mounts`: `list` | `sync <id>` | `status <id>`\n * - `validate`: (no sub-commands)\n *\n * @param plugin - A booted `WorkspacePlugin` instance.\n * @param group - Slash command group name (without the leading `/`).\n * @param args - Tokenised arguments following the group name.\n * @returns Plain-text result string for the OMP terminal.\n *\n * @docLink packages/workspace-plugin/concepts#adapters\n */\nexport async function handleSlashCommand(\n plugin: WorkspacePlugin,\n group: string,\n args: string[],\n): Promise<string> {\n const sub = args[0];\n const rest = args.slice(1);\n\n try {\n switch (group) {\n case \"flow\":\n return await handleFlowCommand(plugin, sub, rest);\n case \"connector\":\n return await handleConnectorCommand(plugin, sub, rest);\n case \"skill\":\n return await handleSkillCommand(plugin, sub, rest);\n case \"mounts\":\n return await handleMountsCommand(plugin, sub, rest);\n case \"validate\":\n return await handleValidateCommand(plugin);\n default:\n return `Unknown group '${group}'`;\n }\n } catch (e: unknown) {\n return `Error: ${e instanceof Error ? e.message : String(e)}`;\n }\n}\n\nasync function handleFlowCommand(\n plugin: WorkspacePlugin,\n sub: string | undefined,\n rest: string[],\n): Promise<string> {\n const { flowList, flowShow, flowListSessions, flowGetSession } = await import(\n \"../tools/flows.js\"\n );\n if (!sub || sub === \"list\") return (await flowList(plugin.projectDir)).content[0].text;\n if (sub === \"show\" && rest[0])\n return (await flowShow(plugin.projectDir, rest[0])).content[0].text;\n if (sub === \"sessions\") return (await flowListSessions(plugin.projectDir)).content[0].text;\n if (sub === \"session\" && rest[0])\n return (await flowGetSession(plugin.projectDir, rest[0])).content[0].text;\n return \"Usage: /flow list | show <id> | sessions | session <runId>\";\n}\n\nasync function handleConnectorCommand(\n plugin: WorkspacePlugin,\n sub: string | undefined,\n rest: string[],\n): Promise<string> {\n const { connectorList, connectorRead, connectorExec, connectorDescribe } = await import(\n \"../tools/connectors.js\"\n );\n if (!sub || sub === \"list\") return (await connectorList(plugin.connectorManager)).content[0].text;\n if (sub === \"read\" && rest[0] && rest[1])\n return (await connectorRead(plugin.connectorManager, rest[0], rest[1])).content[0].text;\n if (sub === \"exec\" && rest[0] && rest[1]) {\n let args: Record<string, unknown> = {};\n if (rest[2]) {\n try {\n args = JSON.parse(rest.slice(2).join(\" \"));\n } catch {\n /* best-effort parse */\n }\n }\n return (await connectorExec(plugin.connectorManager, rest[0], rest[1], args)).content[0].text;\n }\n if (sub === \"describe\" && rest[0])\n return (await connectorDescribe(plugin.connectorManager, rest[0])).content[0].text;\n return \"Usage: /connector list | read <id> <path> | exec <id> <op> [json-args] | describe <id>\";\n}\n\nasync function handleSkillCommand(\n plugin: WorkspacePlugin,\n sub: string | undefined,\n rest: string[],\n): Promise<string> {\n const { skillList, skillShow, skillSearch } = await import(\"../tools/skills.js\");\n if (sub === \"run\" && rest[0])\n return (await skillShow(plugin.projectDir, rest[0])).content[0].text;\n if (!sub || sub === \"list\") return (await skillList(plugin.projectDir, rest[0])).content[0].text;\n if (sub === \"show\" && rest[0])\n return (await skillShow(plugin.projectDir, rest[0])).content[0].text;\n if (sub === \"search\" && rest[0])\n return (await skillSearch(plugin.projectDir, rest.join(\" \"))).content[0].text;\n return \"Usage: /skill list [domain] | show <id> | search <query> | run <id>\";\n}\n\nasync function handleMountsCommand(\n plugin: WorkspacePlugin,\n sub: string | undefined,\n rest: string[],\n): Promise<string> {\n const { mountList, mountSync, mountStatus } = await import(\"../tools/connectors.js\");\n if (!sub || sub === \"list\") return (await mountList(plugin.connectorManager)).content[0].text;\n if (sub === \"sync\" && rest[0])\n return (await mountSync(plugin.connectorManager, rest[0])).content[0].text;\n if (sub === \"status\" && rest[0])\n return (await mountStatus(plugin.connectorManager, rest[0])).content[0].text;\n return \"Usage: /mounts list | sync <id> | status <id>\";\n}\n\nasync function handleValidateCommand(plugin: WorkspacePlugin): Promise<string> {\n const { workspaceValidate } = await import(\"../tools/validator.js\");\n return (await workspaceValidate(plugin, plugin.driver ?? \"omp\")).content[0].text;\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export { PluginStore, WorkspacePlugin, buildClaudePluginFiles, resolveProjectDir } from '../chunk-
|
|
1
|
+
export { PluginStore, WorkspacePlugin, buildClaudePluginFiles, resolveProjectDir } from '../chunk-IM7S4A5E.js';
|
|
2
2
|
export { err, ok, okJson } from '../chunk-X5YPJV4N.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-JMKB7IB4.js';
|
|
4
|
+
import '../chunk-C3CAXQMA.js';
|
|
4
5
|
import '../chunk-BOFL7GIF.js';
|
|
5
6
|
import '../chunk-NSBPE2FW.js';
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"omp.d.ts","sourceRoot":"","sources":["../../../../workspace-plugin/src/adapters/omp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAQpD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CA+ClE;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"omp.d.ts","sourceRoot":"","sources":["../../../../workspace-plugin/src/adapters/omp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAQpD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CA+ClE;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,EAAE,CAsIlE;AAID;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,MAAM,CAAC,CAsBjB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skaile/workspaces",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.14.0",
|
|
4
4
|
"description": "Skaile workspaces runtime — types, core, bridge, runner, store, connectors, and supporting layers as one publishable package",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "bun@1.3.9",
|
|
@@ -727,6 +727,7 @@
|
|
|
727
727
|
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
728
728
|
"@octokit/rest": "22.0.1",
|
|
729
729
|
"@trpc/client": "^11.10.0",
|
|
730
|
+
"ajv": "^8.17.1",
|
|
730
731
|
"chokidar": "^5.0.0",
|
|
731
732
|
"commander": "^14.0.0",
|
|
732
733
|
"drizzle-orm": "^0.45.2",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../cli/src/asset-feeds.ts"],"names":[],"mappings":"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","file":"asset-feeds-WSKIL5GA.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, readFileSync } from \"node:fs\";\nimport * as path from \"node:path\";\nimport {\n type AssetKind,\n type CatalogDomain,\n type CatalogEntry,\n factoryAssetRoots,\n parseFrontmatter,\n scanRepo,\n walkDir,\n} from \"@skaile/workspaces/core\";\nimport {\n assignDomain,\n buildDomainIndex,\n DOMAIN_MD_FILENAME,\n type DomainMd,\n parseDomainMd,\n} from \"@skaile/workspaces/discovery\";\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 * Second-level grouping label for the manage tree. Defaults (when unset) to the\n * entry's `publisher`; the source feed sets it to the source's short repo name\n * so the Sources band groups by source — \"which repo did this come from\" — not\n * by the asset-intrinsic publisher.\n */\n group?: string;\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// ── Domain stamping (on-disk feeds) ──────────────────────────────────────────\n//\n// `scanRepo` (the source / library / factory scan path) does not read the\n// `DOMAIN.md` sidecars, so its entries arrive with no `domainSlug` and render\n// flat under their publisher band. We re-derive the grouping here from the\n// root's `DOMAIN.md` files (the same sidecars the remote store computes\n// server-side), and fall back to the repo/source name for any entry no domain\n// claims so it still groups instead of landing in the synthetic \"no domain\" pile.\n\n/** Repo-relative POSIX path (DOMAIN.md slugs are matched whole-segment, `/`-joined). */\nfunction toPosix(p: string): string {\n return p.split(path.sep).join(\"/\");\n}\n\n/** Parse every `DOMAIN.md` sidecar under `root` into a {@link DomainMd}. */\nasync function loadDomainMds(root: string): Promise<DomainMd[]> {\n const out: DomainMd[] = [];\n for await (const { path: filePath, name } of walkDir(root)) {\n if (name !== DOMAIN_MD_FILENAME) continue;\n try {\n const { data } = parseFrontmatter(readFileSync(filePath, \"utf8\"));\n out.push(parseDomainMd(toPosix(path.relative(root, filePath)), data));\n } catch {}\n }\n return out;\n}\n\n/**\n * Stamp `domainSlug` onto every entry scanned from `root` using the root's\n * `DOMAIN.md` sidecars. Returns the `CatalogDomain` registry for the real\n * domains, plus a synthetic fallback domain when any entry used the fallback.\n * Mutates `entries` in place (sets `entry.domainSlug`).\n *\n * `synthesizeFallback` (default true): entries no domain claims fall back to\n * `fallbackSlug` (the repo/source name). Pass `false` when the caller already\n * groups these entries one level up (e.g. the source feed groups by source\n * node) — unmatched entries then get no domain (`\"\"`) and hang directly under\n * that parent, instead of nesting under a same-named fallback domain.\n */\nasync function stampDomains(\n root: string,\n fallbackSlug: string,\n entries: CatalogEntry[],\n synthesizeFallback = true,\n): Promise<CatalogDomain[]> {\n const domainMds = await loadDomainMds(root);\n const assignables = entries.map((entry) => ({\n entry,\n ref: `${entry.kind}:${entry.name}`,\n relativePath: toPosix(path.relative(root, entry.source)),\n }));\n\n let usedFallback = false;\n for (const a of assignables) {\n const slug = assignDomain(a.relativePath, domainMds);\n if (slug) a.entry.domainSlug = slug;\n else if (synthesizeFallback) {\n a.entry.domainSlug = fallbackSlug;\n usedFallback = true;\n } else a.entry.domainSlug = \"\";\n }\n\n const { index } = buildDomainIndex(assignables, domainMds);\n const catalog: CatalogDomain[] = Object.values(index).map((d) => ({\n slug: d.slug,\n title: d.title,\n ...(d.description ? { description: d.description } : {}),\n ...(d.relation ? { relation: d.relation } : {}),\n ...(d.order !== undefined ? { order: d.order } : {}),\n ...(d.recommended[0] ? { recommendedRef: d.recommended[0] } : {}),\n }));\n if (usedFallback) catalog.push({ slug: fallbackSlug, title: fallbackSlug });\n return catalog;\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 grouped under the bare library\n * name (`group: <name>`) so the manage TUI shows a clean `<name>` band — no\n * `library:` prefix and no redundant same-named fallback domain (mirrors the\n * source feed).\n */\nasync function libraryAssets(): Promise<{\n entries: OriginEntry[];\n domains: CatalogDomain[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n const domains: CatalogDomain[] = [];\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: OriginEntry[] = [];\n for (const lib of libs) {\n if (!existsSync(lib.path)) continue;\n // Scan + group under the bare library name. `synthesizeFallback: false`\n // (as the source feed does) keeps domainless assets directly under the\n // library band instead of a redundant same-named fallback domain.\n const libEntries = [...(await scanRepo(lib.path, lib.name))];\n domains.push(...(await stampDomains(lib.path, lib.name, libEntries, false)));\n for (const entry of libEntries) entries.push({ origin: \"library\", entry, group: lib.name });\n }\n return { entries, domains, 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: [], domains, 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/** The slice of `AssetManager` the source feed needs (kept narrow for tests). */\ninterface AssetManagerLike {\n search: () => Promise<CatalogEntry[]>;\n searchRepoRoots: () => { repoName: string; root: string }[];\n}\n\n/**\n * Project-source feed: leans on `AssetManager.search()`, which now merges\n * `skaile.yaml`'s `sources:` field into the repositories map, then stamps\n * `DOMAIN.md`-derived domain grouping onto the scanned entries via\n * `searchRepoRoots()`.\n */\nasync function sourceAssets(\n am: AssetManagerLike,\n): Promise<{ entries: OriginEntry[]; domains: CatalogDomain[] }> {\n // The bundled factory tree is injected into the repositories map as an implicit\n // source, so `am.search()` returns it too. It has its own `factory` origin band,\n // so drop it here — otherwise the same first-party skills list twice under Sources.\n const factoryPrefixes = factoryAssetRoots().map((r) => (r.endsWith(path.sep) ? r : r + path.sep));\n const isFactoryPath = (p: string) =>\n factoryPrefixes.some((fp) => p === fp.slice(0, -1) || p.startsWith(fp));\n\n const all = (await am.search()).filter((e) => !isFactoryPath(e.source));\n const entries: OriginEntry[] = [];\n const domains: CatalogDomain[] = [];\n // Group each source's entries under the source node (its short repo name), not\n // the publisher: under Sources the navigational question is \"which repo did\n // this come from\". Each entry's `source` (absolute manifest path) lives under\n // exactly one declared root, so group + stamp by prefix. The cache slug is\n // URL-keyed `github.com/<org>/<repo>` — take the trailing segment.\n for (const { repoName, root } of am.searchRepoRoots()) {\n if (isFactoryPath(root)) continue;\n const prefix = root.endsWith(path.sep) ? root : root + path.sep;\n const owned = all.filter((e) => e.source === root || e.source.startsWith(prefix));\n if (owned.length === 0) continue;\n const sourceName = repoName.split(\"/\").pop() || repoName;\n // No synthetic fallback domain — the source node already groups these, so a\n // same-named fallback would just nest the source under itself.\n domains.push(...(await stampDomains(root, sourceName, owned, false)));\n for (const entry of owned) entries.push({ origin: \"source\", entry, group: sourceName });\n }\n return { entries, domains };\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). Local disk only, 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 */\nasync function factoryAssets(): Promise<{\n entries: CatalogEntry[];\n domains: CatalogDomain[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n const domains: CatalogDomain[] = [];\n try {\n const entries: CatalogEntry[] = [];\n for (const root of factoryAssetRoots()) {\n const rootEntries = [...(await scanRepo(root, \"skaile-factory\"))];\n domains.push(...(await stampDomains(root, \"skaile-factory\", rootEntries)));\n entries.push(...rootEntries);\n }\n return { entries, domains, notes };\n } catch (err) {\n notes.push({\n feed: \"factory\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], domains, 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 disk only, so it runs inline.\n */\nexport async function gatherAssetFeeds(\n am: AssetManagerLike,\n projectDir: string,\n): Promise<AssetFeedResult> {\n const [libs, store] = await Promise.all([libraryAssets(), storeAssets(projectDir)]);\n const factory = await factoryAssets();\n const src = await sourceAssets(am);\n return {\n entries: [\n ...src.entries,\n ...libs.entries,\n ...tag(\"factory\", factory.entries),\n ...tag(\"store\", store.entries),\n ],\n // Store domains first (server-curated), then the on-disk feeds; dedupe by\n // slug, first-wins, so a store-served domain shadows a same-slug local one.\n domains: dedupeBySlug([...store.domains, ...src.domains, ...libs.domains, ...factory.domains]),\n notes: [...libs.notes, ...store.notes, ...factory.notes],\n };\n}\n\n/** First-wins dedupe of a domain list by `slug`. */\nfunction dedupeBySlug(domains: CatalogDomain[]): CatalogDomain[] {\n const seen = new Set<string>();\n const out: CatalogDomain[] = [];\n for (const d of domains) {\n if (seen.has(d.slug)) continue;\n seen.add(d.slug);\n out.push(d);\n }\n return out;\n}\n"]}
|