@skaile/workspaces 1.3.0 → 1.4.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.
Files changed (185) hide show
  1. package/CHANGELOG.md +122 -0
  2. package/README.md +1 -1
  3. package/dist/app-sdk/index.d.ts +2 -0
  4. package/dist/app-sdk/index.js +295 -0
  5. package/dist/app-sdk/index.js.map +1 -0
  6. package/dist/app-sdk/src/app.d.ts +101 -0
  7. package/dist/app-sdk/src/app.d.ts.map +1 -0
  8. package/dist/app-sdk/src/define-app-capability.d.ts +139 -0
  9. package/dist/app-sdk/src/define-app-capability.d.ts.map +1 -0
  10. package/dist/app-sdk/src/index.d.ts +16 -0
  11. package/dist/app-sdk/src/index.d.ts.map +1 -0
  12. package/dist/app-sdk/src/logger.d.ts +26 -0
  13. package/dist/app-sdk/src/logger.d.ts.map +1 -0
  14. package/dist/app-sdk/src/transport.d.ts +84 -0
  15. package/dist/app-sdk/src/transport.d.ts.map +1 -0
  16. package/dist/app-sdk/src/ws-transport.d.ts +63 -0
  17. package/dist/app-sdk/src/ws-transport.d.ts.map +1 -0
  18. package/dist/{asset-feeds-NEZKG6YS.js → asset-feeds-NG5TKB3V.js} +8 -8
  19. package/dist/{asset-feeds-NEZKG6YS.js.map → asset-feeds-NG5TKB3V.js.map} +1 -1
  20. package/dist/asset-manager/index.js +7 -7
  21. package/dist/asset-manager/installer.js +6 -6
  22. package/dist/asset-manager/renderers.js +2 -2
  23. package/dist/asset-manager/src/index.d.ts +42 -6
  24. package/dist/asset-manager/src/index.d.ts.map +1 -1
  25. package/dist/bridge/drivers/claude-sdk.js +2 -2
  26. package/dist/bridge/drivers/codex.js +1 -1
  27. package/dist/bridge/drivers/continue.js +2 -2
  28. package/dist/bridge/drivers/echo.js +1 -1
  29. package/dist/bridge/drivers/gemini.js +3 -3
  30. package/dist/bridge/drivers/goose.js +2 -2
  31. package/dist/bridge/drivers/omp.js +1 -1
  32. package/dist/bridge/drivers/opencode.js +2 -2
  33. package/dist/bridge/drivers/qwen.js +3 -3
  34. package/dist/bridge/index.js +3 -3
  35. package/dist/{chunk-AZAS3FKN.js → chunk-26YCXWCU.js} +48 -2
  36. package/dist/chunk-26YCXWCU.js.map +1 -0
  37. package/dist/{chunk-SKADPHAM.js → chunk-4N5XR5DQ.js} +2 -2
  38. package/dist/chunk-4N5XR5DQ.js.map +1 -0
  39. package/dist/{chunk-RHMQPLIK.js → chunk-77OXU44H.js} +6 -6
  40. package/dist/{chunk-RHMQPLIK.js.map → chunk-77OXU44H.js.map} +1 -1
  41. package/dist/{chunk-7CNIRF42.js → chunk-AAGD2J4H.js} +20 -11
  42. package/dist/chunk-AAGD2J4H.js.map +1 -0
  43. package/dist/{chunk-BZMTR5WW.js → chunk-B6SSXVF2.js} +4 -4
  44. package/dist/chunk-B6SSXVF2.js.map +1 -0
  45. package/dist/{chunk-YOPSHV7V.js → chunk-BE5KTS2L.js} +3 -3
  46. package/dist/{chunk-YOPSHV7V.js.map → chunk-BE5KTS2L.js.map} +1 -1
  47. package/dist/{chunk-JQMIG7D3.js → chunk-BJHZHNKR.js} +3 -3
  48. package/dist/{chunk-JQMIG7D3.js.map → chunk-BJHZHNKR.js.map} +1 -1
  49. package/dist/{chunk-5XS3BFJS.js → chunk-DNFIKRO6.js} +3 -3
  50. package/dist/{chunk-5XS3BFJS.js.map → chunk-DNFIKRO6.js.map} +1 -1
  51. package/dist/{chunk-PSMW5HLX.js → chunk-GWDZW44L.js} +4 -4
  52. package/dist/{chunk-PSMW5HLX.js.map → chunk-GWDZW44L.js.map} +1 -1
  53. package/dist/{chunk-K5SD7FSF.js → chunk-HKX5VSWQ.js} +3 -3
  54. package/dist/{chunk-K5SD7FSF.js.map → chunk-HKX5VSWQ.js.map} +1 -1
  55. package/dist/{chunk-P3MJYPZE.js → chunk-HWTQ6HPO.js} +4 -4
  56. package/dist/{chunk-P3MJYPZE.js.map → chunk-HWTQ6HPO.js.map} +1 -1
  57. package/dist/{chunk-XKARS6EE.js → chunk-IEX5YV4R.js} +3 -3
  58. package/dist/{chunk-XKARS6EE.js.map → chunk-IEX5YV4R.js.map} +1 -1
  59. package/dist/{chunk-GB4SEEK4.js → chunk-IRORTHGA.js} +10 -4
  60. package/dist/chunk-IRORTHGA.js.map +1 -0
  61. package/dist/{chunk-YXEPZ7LP.js → chunk-JZPEEMIM.js} +5 -5
  62. package/dist/{chunk-YXEPZ7LP.js.map → chunk-JZPEEMIM.js.map} +1 -1
  63. package/dist/{chunk-WFEPI5LA.js → chunk-LCTRCWBK.js} +5 -5
  64. package/dist/{chunk-WFEPI5LA.js.map → chunk-LCTRCWBK.js.map} +1 -1
  65. package/dist/{chunk-QK5JDAFF.js → chunk-NKTFEV7Q.js} +4 -4
  66. package/dist/{chunk-QK5JDAFF.js.map → chunk-NKTFEV7Q.js.map} +1 -1
  67. package/dist/{chunk-ETYDLXI5.js → chunk-OSCJRUKM.js} +2 -2
  68. package/dist/{chunk-ETYDLXI5.js.map → chunk-OSCJRUKM.js.map} +1 -1
  69. package/dist/{chunk-EVZKWY5J.js → chunk-PK7Q7MC7.js} +5 -4
  70. package/dist/chunk-PK7Q7MC7.js.map +1 -0
  71. package/dist/{chunk-RYRJEVQ4.js → chunk-QM2TT2PJ.js} +19 -11
  72. package/dist/chunk-QM2TT2PJ.js.map +1 -0
  73. package/dist/{chunk-SUOGVHGJ.js → chunk-TNSCHS4I.js} +2 -2
  74. package/dist/{chunk-SUOGVHGJ.js.map → chunk-TNSCHS4I.js.map} +1 -1
  75. package/dist/{chunk-Z5Z3MYDL.js → chunk-UPZGQZEJ.js} +3 -3
  76. package/dist/{chunk-Z5Z3MYDL.js.map → chunk-UPZGQZEJ.js.map} +1 -1
  77. package/dist/{chunk-RJ3HUSBC.js → chunk-UQ5FK2AB.js} +3 -3
  78. package/dist/{chunk-RJ3HUSBC.js.map → chunk-UQ5FK2AB.js.map} +1 -1
  79. package/dist/{chunk-OBSSORCE.js → chunk-X57AMTAH.js} +72 -9
  80. package/dist/chunk-X57AMTAH.js.map +1 -0
  81. package/dist/cli/index.js +766 -185
  82. package/dist/cli/index.js.map +1 -1
  83. package/dist/cli/src/commands/preset-apply.d.ts +59 -0
  84. package/dist/cli/src/commands/preset-apply.d.ts.map +1 -0
  85. package/dist/cli/src/commands/preset-cmd.d.ts +2 -2
  86. package/dist/cli/src/commands/preset-cmd.d.ts.map +1 -1
  87. package/dist/cli/src/commands/preset-export.d.ts +93 -0
  88. package/dist/cli/src/commands/preset-export.d.ts.map +1 -0
  89. package/dist/cli/src/commands/source.d.ts.map +1 -1
  90. package/dist/cli/src/commands/why.d.ts +18 -0
  91. package/dist/cli/src/commands/why.d.ts.map +1 -1
  92. package/dist/connectors/config.js +2 -2
  93. package/dist/connectors/index.js +4 -4
  94. package/dist/core/index.js +2 -2
  95. package/dist/core/src/workspace-yaml-editor.d.ts +14 -1
  96. package/dist/core/src/workspace-yaml-editor.d.ts.map +1 -1
  97. package/dist/deploy/index.js +2 -2
  98. package/dist/discovery/index.js +2 -2
  99. package/dist/{ensure-sources-4BAJGJRK.js → ensure-sources-CHC7X7AJ.js} +10 -10
  100. package/dist/{ensure-sources-4BAJGJRK.js.map → ensure-sources-CHC7X7AJ.js.map} +1 -1
  101. package/dist/factory-assets/connectors/box.js +4 -4
  102. package/dist/factory-assets/connectors/deploy.js +4 -4
  103. package/dist/factory-assets/connectors/devserver.js +4 -4
  104. package/dist/factory-assets/connectors/flow/adapter.js +4 -4
  105. package/dist/factory-assets/connectors/flow/engine/engine.d.ts +4 -1
  106. package/dist/factory-assets/connectors/flow/engine/engine.d.ts.map +1 -1
  107. package/dist/factory-assets/connectors/flow/engine/types.d.ts +41 -6
  108. package/dist/factory-assets/connectors/flow/engine/types.d.ts.map +1 -1
  109. package/dist/factory-assets/connectors/flow/engine.js +3 -3
  110. package/dist/factory-assets/connectors/flow/run-flow.js +5 -5
  111. package/dist/factory-assets/connectors/flow.js +4 -4
  112. package/dist/factory-assets/connectors/git.js +4 -4
  113. package/dist/factory-assets/connectors/gmail.js +4 -4
  114. package/dist/factory-assets/connectors/googledrive.js +4 -4
  115. package/dist/factory-assets/connectors/local.js +4 -4
  116. package/dist/factory-assets/connectors/mattermost.js +4 -4
  117. package/dist/factory-assets/connectors/memory.js +4 -4
  118. package/dist/factory-assets/connectors/minio.js +4 -4
  119. package/dist/factory-assets/connectors/postgres.js +4 -4
  120. package/dist/factory-assets/connectors/s3.js +4 -4
  121. package/dist/factory-assets/connectors/sharepoint.js +4 -4
  122. package/dist/factory-assets/connectors/sqlite.js +4 -4
  123. package/dist/factory-assets/connectors/static-server.js +4 -4
  124. package/dist/factory-assets/connectors/tunnel.js +4 -4
  125. package/dist/factory-assets/connectors/webdav.js +4 -4
  126. package/dist/factory-assets/connectors/xstate-store.js +4 -4
  127. package/dist/factory-assets/connectors/xstate.js +4 -4
  128. package/dist/factory-assets/skills/skaile-author-asset/SKILL.md +1 -1
  129. package/dist/factory-assets/skills/skaile-manage-workspace/SKILL.md +1 -1
  130. package/dist/{flows-UFCOGAAM.js → flows-CGOCUNO6.js} +4 -4
  131. package/dist/{flows-UFCOGAAM.js.map → flows-CGOCUNO6.js.map} +1 -1
  132. package/dist/{helpers-2OL4FRFB.js → helpers-GWG4CYYC.js} +10 -10
  133. package/dist/{helpers-2OL4FRFB.js.map → helpers-GWG4CYYC.js.map} +1 -1
  134. package/dist/library/index.js +6 -6
  135. package/dist/library/install.js +2 -2
  136. package/dist/{open-library-RPV2LIKL.js → open-library-37PXN6MK.js} +15 -15
  137. package/dist/{open-library-RPV2LIKL.js.map → open-library-37PXN6MK.js.map} +1 -1
  138. package/dist/{paths-ML33B5SB.js → paths-UVOHWUPY.js} +4 -4
  139. package/dist/{paths-ML33B5SB.js.map → paths-UVOHWUPY.js.map} +1 -1
  140. package/dist/{plugin-store-G4HKWCTU.js → plugin-store-EIMVEH3O.js} +4 -4
  141. package/dist/{plugin-store-G4HKWCTU.js.map → plugin-store-EIMVEH3O.js.map} +1 -1
  142. package/dist/runner/index.js +10 -10
  143. package/dist/runner/src/capability-registry.d.ts +15 -4
  144. package/dist/runner/src/capability-registry.d.ts.map +1 -1
  145. package/dist/sdk/asset-manager.js +7 -7
  146. package/dist/sdk/bridge.js +3 -3
  147. package/dist/sdk/core.js +2 -2
  148. package/dist/sdk/flow.js +3 -3
  149. package/dist/sdk/index.js +10 -10
  150. package/dist/sdk/runner.js +10 -10
  151. package/dist/sdk/session.js +2 -2
  152. package/dist/sdk/types.js +1 -1
  153. package/dist/session/index.js +2 -2
  154. package/dist/{setup-WS6PF6JQ.js → setup-DINVR6ZQ.js} +7 -7
  155. package/dist/{setup-WS6PF6JQ.js.map → setup-DINVR6ZQ.js.map} +1 -1
  156. package/dist/{source-22U5NOY4.js → source-RXAHIGMD.js} +16 -16
  157. package/dist/{source-22U5NOY4.js.map → source-RXAHIGMD.js.map} +1 -1
  158. package/dist/{store-client-YLMBH5MF.js → store-client-T3F663YG.js} +5 -5
  159. package/dist/{store-client-YLMBH5MF.js.map → store-client-T3F663YG.js.map} +1 -1
  160. package/dist/tui/index.js +10 -10
  161. package/dist/types/index.js +1 -1
  162. package/dist/types/manifests.js +1 -1
  163. package/dist/types/src/capabilities.d.ts +8 -2
  164. package/dist/types/src/capabilities.d.ts.map +1 -1
  165. package/dist/types/src/logging.d.ts +3 -2
  166. package/dist/types/src/logging.d.ts.map +1 -1
  167. package/dist/types/src/manifests/_shared.d.ts +4 -4
  168. package/dist/types/src/manifests/index.d.ts +2 -2
  169. package/dist/types/src/manifests/index.d.ts.map +1 -1
  170. package/dist/types/src/manifests/preset.d.ts +10 -0
  171. package/dist/types/src/manifests/preset.d.ts.map +1 -1
  172. package/dist/types/src/version.d.ts +11 -1
  173. package/dist/types/src/version.d.ts.map +1 -1
  174. package/dist/workspace-plugin/adapters/mcp.js +2 -2
  175. package/dist/workspace-plugin/adapters/omp.js +3 -3
  176. package/dist/workspace-plugin/index.js +1 -1
  177. package/package.json +7 -1
  178. package/dist/chunk-7CNIRF42.js.map +0 -1
  179. package/dist/chunk-AZAS3FKN.js.map +0 -1
  180. package/dist/chunk-BZMTR5WW.js.map +0 -1
  181. package/dist/chunk-EVZKWY5J.js.map +0 -1
  182. package/dist/chunk-GB4SEEK4.js.map +0 -1
  183. package/dist/chunk-OBSSORCE.js.map +0 -1
  184. package/dist/chunk-RYRJEVQ4.js.map +0 -1
  185. package/dist/chunk-SKADPHAM.js.map +0 -1
@@ -0,0 +1,59 @@
1
+ /**
2
+ * `skaile preset apply` — pure core: reverse a `.preset.yaml` snapshot back into
3
+ * a workspace's `skaile.yaml` sections (the inverse of `preset export`).
4
+ *
5
+ * These helpers are I/O- and prompt-free so they can be unit-tested in
6
+ * isolation. The Commander action in `preset-cmd.ts` owns file reads, the
7
+ * interactive prompting for non-secret inputs, the editor writes, and the
8
+ * post-apply install.
9
+ */
10
+ import type { ConnectorDeclaration, McpServerDeclaration, SourceEntry } from "@skaile/workspaces/core";
11
+ import type { Placeholder, PresetManifest } from "@skaile/workspaces/types/manifests";
12
+ /** The workspace sections produced by reversing a preset's items. */
13
+ export interface WorkspaceItems {
14
+ /** Bare dependency refs, copied verbatim from non-connector/mcp items. */
15
+ dependencies: string[];
16
+ /** Connector declarations rebuilt from `connector:<driver>` items. */
17
+ connectors: ConnectorDeclaration[];
18
+ /** MCP server declarations rebuilt from `mcp:<id>` items. */
19
+ mcpServers: McpServerDeclaration[];
20
+ /** Git sources the deps resolve from — registered before install. */
21
+ sources: SourceEntry[];
22
+ /** Secret placeholder keys the user must export as env vars before running. */
23
+ envVarsToSet: string[];
24
+ }
25
+ /** Rejection message for nested preset refs (unsupported by v1 apply). */
26
+ export declare const NESTED_PRESET_UNSUPPORTED = "nested presets are not supported by `preset apply` yet";
27
+ /**
28
+ * Resolve one placeholder to the value that lands in `skaile.yaml`.
29
+ *
30
+ * A secret placeholder NEVER yields its raw value — it resolves to an
31
+ * `env:<KEY>` indirection reference so the credential stays out of the file.
32
+ * A non-secret placeholder resolves to the provided literal (or its declared
33
+ * default); a required non-secret placeholder with neither throws.
34
+ *
35
+ * @param placeholder - The placeholder definition from the preset item.
36
+ * @param providedValue - Value supplied via `--input`/prompt, or `undefined`.
37
+ * @returns `{ envRef }` for secrets, `{ value }` for resolved literals.
38
+ * @throws When a required non-secret placeholder has no value and no default.
39
+ */
40
+ export declare function resolvePlaceholderValue(placeholder: Placeholder, providedValue: string | undefined): {
41
+ value: string;
42
+ } | {
43
+ envRef: string;
44
+ };
45
+ /**
46
+ * Reverse a preset's items into additive `skaile.yaml` sections.
47
+ *
48
+ * Items are classified by **`id` presence** (export writes one on connector/mcp
49
+ * items, never on deps), so a bare `mcp:excel` shorthand stays a dependency.
50
+ * Secret tokens resolve to `env:<KEY>` refs (collected into `envVarsToSet`).
51
+ *
52
+ * @param preset - The validated preset manifest.
53
+ * @param values - Resolved non-secret input values, keyed by placeholder key.
54
+ * @returns The workspace sections plus the secret env-var keys to set.
55
+ * @throws When a required non-secret placeholder is unresolved, or a nested
56
+ * preset ref is encountered (unsupported by apply).
57
+ */
58
+ export declare function presetItemsToWorkspace(preset: PresetManifest, values: Record<string, string>): WorkspaceItems;
59
+ //# sourceMappingURL=preset-apply.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preset-apply.d.ts","sourceRoot":"","sources":["../../../../cli/src/commands/preset-apply.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACpB,WAAW,EACZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAc,MAAM,oCAAoC,CAAC;AAElG,qEAAqE;AACrE,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,sEAAsE;IACtE,UAAU,EAAE,oBAAoB,EAAE,CAAC;IACnC,6DAA6D;IAC7D,UAAU,EAAE,oBAAoB,EAAE,CAAC;IACnC,qEAAqE;IACrE,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,+EAA+E;IAC/E,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAKD,0EAA0E;AAC1E,eAAO,MAAM,yBAAyB,2DAA2D,CAAC;AAElG;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,MAAM,GAAG,SAAS,GAChC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAexC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,cAAc,CA+BhB"}
@@ -1,7 +1,7 @@
1
1
  /**
2
- * skaile preset — scaffold and validate preset YAML files.
2
+ * skaile preset — scaffold, validate, export, and apply preset YAML files.
3
3
  *
4
- * Subcommands: init, validate.
4
+ * Subcommands: init, validate, export, apply.
5
5
  * Delegates to @skaile/library preset module for parsing and validation.
6
6
  */
7
7
  import { Command } from "commander";
@@ -1 +1 @@
1
- {"version":3,"file":"preset-cmd.d.ts","sourceRoot":"","sources":["../../../../cli/src/commands/preset-cmd.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAsC3C"}
1
+ {"version":3,"file":"preset-cmd.d.ts","sourceRoot":"","sources":["../../../../cli/src/commands/preset-cmd.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CA0E3C"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * `skaile preset export` — pure core: turn a project's own `skaile.yaml`
3
+ * (`SkWorkspaceConfig`) into a shareable `PresetManifest`, with first-class
4
+ * detection and redaction of inline secrets.
5
+ *
6
+ * These helpers are intentionally free of I/O and prompting so they can be
7
+ * unit-tested in isolation; the Commander action in `preset-cmd.ts` owns file
8
+ * reads/writes, the loud stderr summary, and interactive confirmation.
9
+ */
10
+ import type { LockFile, SkWorkspaceConfig, SourceEntry } from "@skaile/workspaces/core";
11
+ import type { PresetManifest } from "@skaile/workspaces/types/manifests";
12
+ /** One inline-secret hit: which item, where in its config, and a safe preview. */
13
+ export interface SecretFinding {
14
+ /** `id` of the offending preset item (connector/mcp id). */
15
+ itemId: string;
16
+ /** Dotted path into the item's `config`, e.g. `options.dsn` or `env.TOKEN`. */
17
+ path: string;
18
+ /** Value with its secret portion masked, safe to print to a terminal. */
19
+ maskedValue: string;
20
+ }
21
+ /**
22
+ * Build a self-consistent {@link PresetManifest} from a workspace config.
23
+ *
24
+ * Mapping (a future `preset apply` reverses this):
25
+ * - `dependencies[]` → `{ ref }` items, ref copied VERBATIM (no re-pinning).
26
+ * - `connectors[]` → `{ id, ref: "connector:<driver>", config }` items.
27
+ * - `mcp_servers[]` → `{ id, ref: "mcp:<id>", config }` items.
28
+ *
29
+ * `agent_config` is deliberately NOT exported — it is personal/machine-specific
30
+ * (driver, model, API-cloud transport) and does not belong in a shared preset.
31
+ *
32
+ * @param config - The project-own `skaile.yaml` (NOT the merged/global config).
33
+ * @param name - Preset name; also the default output filename stem.
34
+ * @param sources - Git sources the dep items resolve from (see {@link neededSources}).
35
+ * @returns A manifest that passes `validatePreset` whenever it has ≥1 item.
36
+ */
37
+ export declare function buildPresetFromWorkspace(config: SkWorkspaceConfig, name: string, sources?: SourceEntry[]): PresetManifest;
38
+ /**
39
+ * The subset of `config.sources` a cross-repo apply must register before install.
40
+ *
41
+ * The lock's top-level `sources` list is the full **transitive** closure of every
42
+ * source that contributed a resolved asset, so filtering `config.sources` to it
43
+ * (minus the always-available factory source) captures direct + transitive deps
44
+ * with no drop risk. With no lock (provenance unknown), every non-factory source
45
+ * is kept so apply still resolves. Connectors/mcp carry no source.
46
+ */
47
+ export declare function neededSources(config: SkWorkspaceConfig, lock: LockFile | null): SourceEntry[];
48
+ /**
49
+ * True when `value` is a secret *reference* (indirection) rather than an inline
50
+ * secret — e.g. `env:DATABASE_URL`, `forge:api-key`, `pat:env:GH_TOKEN`. Such
51
+ * values are safe to publish and are never flagged.
52
+ */
53
+ export declare function isSecretReference(value: string): boolean;
54
+ /** True when a source URL embeds `user:pass@` credentials (private-HTTPS auth form). */
55
+ export declare function urlHasCredentials(url: string): boolean;
56
+ /**
57
+ * Strip `user:pass@` userinfo from a URL. The repo is fully identified without it
58
+ * (git auth on apply uses the target's own credential helper / ssh key), so an
59
+ * exported source URL must never carry the token into a shared preset.
60
+ */
61
+ export declare function stripUrlCredentials(url: string): string;
62
+ /**
63
+ * Scan every string inside each item's `config` and return inline secrets.
64
+ *
65
+ * A string is flagged when it is NOT a {@link isSecretReference} AND sits in a
66
+ * credential context: the inherent `auth` field, a suspicious key name, a
67
+ * `proto://user:pass@` URL, or a long high-entropy blob. Items without a `config`
68
+ * (bare deps) are skipped.
69
+ *
70
+ * Detection is **heuristic / best-effort**, not exhaustive: a short, low-entropy
71
+ * secret under an innocuous key name can slip through. A clean scan is not a
72
+ * guarantee — treat it as a safety net, not proof the file holds no secrets.
73
+ */
74
+ export declare function scanInlineSecrets(preset: PresetManifest): SecretFinding[];
75
+ /**
76
+ * Replace each flagged inline value with a `${INPUT:<KEY>}` placeholder and add
77
+ * a matching `secret` placeholder entry to the owning item. Returns a NEW preset
78
+ * (the input is not mutated) plus the generated placeholder keys.
79
+ *
80
+ * `<KEY>` is `<itemId>_<path>` upper-snake-cased so it is stable and readable.
81
+ */
82
+ export declare function redactSecrets(preset: PresetManifest, findings: SecretFinding[]): {
83
+ preset: PresetManifest;
84
+ keys: string[];
85
+ };
86
+ /** Exact wording written into the file when unresolved inline secrets remain. */
87
+ export declare const INLINE_SECRETS_HEADER = "# \u26A0\uFE0F CONTAINS INLINE SECRETS \u2014 replace with placeholders before sharing or publishing";
88
+ /**
89
+ * Header comment for a preset that still holds unresolved inline secrets, or
90
+ * `null` when `findings` is empty (nothing left to warn about).
91
+ */
92
+ export declare function secretHeaderComment(findings: SecretFinding[]): string | null;
93
+ //# sourceMappingURL=preset-export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preset-export.d.ts","sourceRoot":"","sources":["../../../../cli/src/commands/preset-export.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACxF,OAAO,KAAK,EAA2B,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAElG,kFAAkF;AAClF,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;CACrB;AAID;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,iBAAiB,EACzB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,WAAW,EAAO,GAC1B,cAAc,CAoDhB;AAID;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,WAAW,EAAE,CAM7F;AAmBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAExD;AAkBD,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEvD;AAiBD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,aAAa,EAAE,CASzE;AAwDD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,aAAa,EAAE,GACxB;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CA+B5C;AAwBD,iFAAiF;AACjF,eAAO,MAAM,qBAAqB,yGACuD,CAAC;AAE1F;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,GAAG,IAAI,CAE5E"}
@@ -1 +1 @@
1
- {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../../cli/src/commands/source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAGL,KAAK,WAAW,EAKjB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD;AAKD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,OAAO,CAEzE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAYvE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOxD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAIzE;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,EAAE,EACtB,GAAG,EAAE,MAAM,GACV,WAAW,GAAG,SAAS,CAGzB;AAkFD;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ5E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3B,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAsC5D;AAoBD,wBAAgB,iBAAiB,IAAI,OAAO,CAmR3C"}
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../../cli/src/commands/source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAGL,KAAK,WAAW,EAKjB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD;AAKD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,OAAO,CAEzE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAYvE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOxD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAIzE;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,EAAE,EACtB,GAAG,EAAE,MAAM,GACV,WAAW,GAAG,SAAS,CAGzB;AA8FD;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ5E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3B,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAsC5D;AAoBD,wBAAgB,iBAAiB,IAAI,OAAO,CAsR3C"}
@@ -1,4 +1,22 @@
1
1
  import { Command } from "commander";
2
+ /**
3
+ * Pick the right message when `am.why(ref)` returns an empty chain. Two
4
+ * distinct causes need different guidance:
5
+ *
6
+ * - The ref **is** a declared dependency (matches `declared` by kind+name) but
7
+ * isn't in the lock file yet → tell the user to run `skaile install`.
8
+ * - The ref is **not** declared at all → `skaile install` cannot help, so say
9
+ * plainly that nothing in `skaile.yaml` requires it.
10
+ *
11
+ * Pure and terminal-free so it can be unit-tested; the command wires the
12
+ * returned string into `logErr`.
13
+ *
14
+ * @param declared - Declared deps exposing `.kind` + `.name` (from `listDeclared`).
15
+ */
16
+ export declare function whyEmptyMessage(ref: string, declared: Array<{
17
+ kind: string;
18
+ name: string;
19
+ }>): string;
2
20
  /**
3
21
  * Creates the `skaile why` command.
4
22
  *
@@ -1 +1 @@
1
- {"version":3,"file":"why.d.ts","sourceRoot":"","sources":["../../../../cli/src/commands/why.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC;;;;;;;;GAQG;AACH,wBAAgB,cAAc,IAAI,OAAO,CA6BxC"}
1
+ {"version":3,"file":"why.d.ts","sourceRoot":"","sources":["../../../../cli/src/commands/why.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAC9C,MAAM,CASR;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAuCxC"}
@@ -1,5 +1,6 @@
1
1
  export { LegacyAuthGrammarError, createCliSecretProviderChain, createForgeSecretProviderChain, loadConnectorDeclarations, resolveAuthRef, resolveBackendAuthFor } from '../chunk-BDUANIAR.js';
2
- import '../chunk-AZAS3FKN.js';
2
+ import '../chunk-26YCXWCU.js';
3
+ import '../chunk-ZAP2BDHG.js';
3
4
  import '../chunk-TJRWGMD2.js';
4
5
  import '../chunk-OUWNTFDG.js';
5
6
  import '../chunk-DZCK7GRW.js';
@@ -8,7 +9,6 @@ import '../chunk-GEEW6SY2.js';
8
9
  import '../chunk-F3HNW354.js';
9
10
  import '../chunk-MENCWIHW.js';
10
11
  import '../chunk-K5GBV4SA.js';
11
- import '../chunk-ZAP2BDHG.js';
12
12
  import '../chunk-JB35MVBN.js';
13
13
  import '../chunk-NSBPE2FW.js';
14
14
  //# sourceMappingURL=config.js.map
@@ -1,10 +1,11 @@
1
- export { AbstractConnector, BUILTIN_CONNECTOR_CATALOG, ConnectorFieldMissingError, ConnectorManager, ConnectorStartupError, FlowAdapter, LogBuffer, ManagedGitconfigCollisionError, PortPool, atomicReplaceCredential, buildConnectorPromptSection, buildSdkConnectorTools, createFsWatcher, createWorktree, defaultSpawn, ensureDirMode, ensureFleetMounted, findGitRoot, findMissingPackages, getConnector, installNpmPackages, isFleetManaged, isPackageResolvable, listConnectors, listWorktrees, registerBuiltinConnectors, removeMountBlock, renderCredentialHelperScript, tryGetConnector, worktreeRegistry, writeHelperScript, writeMountBlock } from '../chunk-PSMW5HLX.js';
1
+ export { AbstractConnector, BUILTIN_CONNECTOR_CATALOG, ConnectorFieldMissingError, ConnectorManager, ConnectorStartupError, FlowAdapter, LogBuffer, ManagedGitconfigCollisionError, PortPool, atomicReplaceCredential, buildConnectorPromptSection, buildSdkConnectorTools, createFsWatcher, createWorktree, defaultSpawn, ensureDirMode, ensureFleetMounted, findGitRoot, findMissingPackages, getConnector, installNpmPackages, isFleetManaged, isPackageResolvable, listConnectors, listWorktrees, registerBuiltinConnectors, removeMountBlock, renderCredentialHelperScript, tryGetConnector, worktreeRegistry, writeHelperScript, writeMountBlock } from '../chunk-GWDZW44L.js';
2
2
  export { EnvSecretProvider, ForgeSecretProvider, InMemorySecretProvider, LegacyAuthGrammarError, LockedSecretProvider, OAuthRequiredError, PreMintedSecretProvider, SecretProviderChain, createCliSecretProviderChain, createForgeSecretProviderChain, deriveSingleMaterializedConnectorDeclaration, fromMaterializedConnectorMd, loadConnectorDeclarations, loadMaterializedConnectorDeclarations, resolveAuthRef, resolveBackendAuthFor } from '../chunk-BDUANIAR.js';
3
3
  import '../chunk-6E6PKKAD.js';
4
- import '../chunk-SKADPHAM.js';
4
+ import '../chunk-4N5XR5DQ.js';
5
5
  import '../chunk-DEYYRFQU.js';
6
6
  import '../chunk-IFGTRL2I.js';
7
- import '../chunk-AZAS3FKN.js';
7
+ import '../chunk-26YCXWCU.js';
8
+ import '../chunk-ZAP2BDHG.js';
8
9
  import '../chunk-TJRWGMD2.js';
9
10
  import '../chunk-OUWNTFDG.js';
10
11
  import '../chunk-DZCK7GRW.js';
@@ -13,7 +14,6 @@ import '../chunk-GEEW6SY2.js';
13
14
  import '../chunk-F3HNW354.js';
14
15
  import '../chunk-MENCWIHW.js';
15
16
  import '../chunk-K5GBV4SA.js';
16
- import '../chunk-ZAP2BDHG.js';
17
17
  import '../chunk-JB35MVBN.js';
18
18
  import '../chunk-NSBPE2FW.js';
19
19
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,5 @@
1
- export { ALL_PROVIDERS, ManifestYamlEditor, SETTINGS_DEFAULTS, WorkspaceYamlEditor, applyPatch, buildLockFile, checkAgentSkillConformance, computeHash, detectEnvApiKeys, extractForPatch, generatePatch, globalSettingsPath, listPatches, loadSettings, mapLegacyFields, maskApiKey, migrateSettings, portableSpawn, portableSpawnSync, projectSettingsPath, providerEnvKey, readLock, readPatch, readPluginsLockSlice, resolveAllKeys, resolveApiKey, resolveSettings, savePatch, saveSettings, verifyLock, walkForSettings, writeLock, writePluginsLockSlice } from '../chunk-AZAS3FKN.js';
1
+ export { ALL_PROVIDERS, ManifestYamlEditor, SETTINGS_DEFAULTS, WorkspaceYamlEditor, applyPatch, buildLockFile, checkAgentSkillConformance, computeHash, detectEnvApiKeys, extractForPatch, generatePatch, globalSettingsPath, listPatches, loadSettings, mapLegacyFields, maskApiKey, migrateSettings, portableSpawn, portableSpawnSync, projectSettingsPath, providerEnvKey, readLock, readPatch, readPluginsLockSlice, resolveAllKeys, resolveApiKey, resolveSettings, savePatch, saveSettings, verifyLock, walkForSettings, writeLock, writePluginsLockSlice } from '../chunk-26YCXWCU.js';
2
+ export { ASSET_KIND_DIRS, assetSearchDirs, detectAiResources, detectDomains, detectMonorepoRoot } from '../chunk-ZAP2BDHG.js';
2
3
  export { FACTORY_ASSETS_REPO_NAME, factoryAssetRoots, resolveFactoryAssetsRoot, resolveFactoryAssetsRootOrNull, resolvePackagedAssetsDir, resolveRuntimeAssets, resolveWorkspacesPackageRoot } from '../chunk-TJRWGMD2.js';
3
4
  export { COMPACTION_DEFAULTS, CanonicalRefConflictError, DEFAULT_RECIPE_ATTR, SKAILE_YAML_DEFAULT, SK_WORKSPACE_DEFAULT_NAME, SK_WORKSPACE_SUFFIX, __resetCacheMigrationMemo, buildProvenanceIndex, checkRepoStatus, checkoutPin, cloneRepo, cloudConfigFromProfile, decodeSkaileYaml, deriveSingleMaterializedMcpDeclaration, encodeSkaileYaml, ensureRepo, findWorkspaceRoot, getGlobalCacheDir, getRepoCommit, globalCacheRoot, globalSkaileDir, linkRepo, listSkWorkspaceConfigs, loadMcpServerDeclarations, loadSkWorkspaceConfig, mergeLegacyEntriesInto, mergeSkWorkspaceConfigs, migrateLegacyDir, normalizeConfig, pullRepo, readLinks, resolveAgentDir, resolveAll, resolveAsset, resolveGlobalBackends, resolveGlobalSkWorkspaceConfig, resolveSkWorkspaceConfig, resolveSourcePublisher, saveSkWorkspaceConfig, scanRepo, sourceCacheKey, sourceShortName, stageMaterializedSkills, unlinkRepo, validateAssetRecipeAttr, validateAssetRecipeFlake, workspaceConfigFilename, writeLinks } from '../chunk-OUWNTFDG.js';
4
5
  export { SKAILE_MANIFEST_FILENAME, decodeSkaileManifest, encodeSkaileManifest, loadSkPublishManifest, saveSkPublishManifest } from '../chunk-DZCK7GRW.js';
@@ -7,7 +8,6 @@ export { ASSET_KINDS, ASSET_NAME_HINT, INDIVIDUAL_KINDS, assetRefToDep, assetRef
7
8
  export { deployedBase, deployedDir, isDeployed } from '../chunk-F3HNW354.js';
8
9
  export { DRIVER_TARGETS, SUPPORTED_DRIVER_TARGETS, globalBackendRoot } from '../chunk-MENCWIHW.js';
9
10
  export { DRIVER_DEFAULTS, resolveDriverPaths } from '../chunk-K5GBV4SA.js';
10
- export { ASSET_KIND_DIRS, assetSearchDirs, detectAiResources, detectDomains, detectMonorepoRoot } from '../chunk-ZAP2BDHG.js';
11
11
  export { LogStore, LogStoreDisabledError, NoOpSink, OnLogBridgeSink, SqliteSink, StdoutSink, WsLogSink, createLogStoreFromConfig, createLogger, getLogStore, normalizeError, openSqlite, registerLogStore, resetLogStore, resolveLogStoreConfig, sanitizeData } from '../chunk-JB35MVBN.js';
12
12
  import '../chunk-NSBPE2FW.js';
13
13
  //# sourceMappingURL=index.js.map
@@ -15,7 +15,7 @@
15
15
  * editor.save()
16
16
  */
17
17
  import { Document } from "yaml";
18
- import type { AgentConfigProfile, ConnectorDeclaration, OverrideEntry, SourceEntry, StoreEntry } from "./workspace-config.js";
18
+ import type { AgentConfigProfile, ConnectorDeclaration, McpServerDeclaration, OverrideEntry, SourceEntry, StoreEntry } from "./workspace-config.js";
19
19
  /**
20
20
  * Comment-preserving editor for `skaile.yaml` files.
21
21
  * Uses the `yaml` library's Document AST so untouched sections remain byte-identical.
@@ -59,6 +59,19 @@ export declare class WorkspaceYamlEditor {
59
59
  setConnector(connector: ConnectorDeclaration): void;
60
60
  /** Remove a connector by id. */
61
61
  removeConnector(id: string): boolean;
62
+ /**
63
+ * Add or replace an mcp server entry, matched by `id`.
64
+ * Mirrors {@link setConnector}: an existing entry with the same `id` is
65
+ * replaced in place; otherwise the declaration is appended.
66
+ */
67
+ setMcpServer(mcp: McpServerDeclaration): void;
68
+ /**
69
+ * Append a dependency ref to `dependencies:`, deduped by exact ref string.
70
+ *
71
+ * @param ref - Canonical dependency ref (e.g. `skill:@skaile/foo#1.0.0`).
72
+ * @returns `true` when the ref was newly added, `false` when it was already present.
73
+ */
74
+ addDependency(ref: string): boolean;
62
75
  /** Get all `plugins:` specifiers. */
63
76
  getPlugins(): string[];
64
77
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-yaml-editor.d.ts","sourceRoot":"","sources":["../../../core/src/workspace-yaml-editor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,QAAQ,EAA6C,MAAM,MAAM,CAAC;AAC3E,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,WAAW,EACX,UAAU,EACX,MAAM,uBAAuB,CAAC;AAE/B;;;;;GAKG;AACH,qBAAa,mBAAmB;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,GAAG,CAAW;IAEtB,OAAO;IAKP,yCAAyC;IACzC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB;IASlD,qEAAqE;IACrE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB;IAKpD,2EAA2E;IAC3E,IAAI,IAAI,IAAI;IAIZ,iEAAiE;IACjE,QAAQ,IAAI,MAAM;IAMlB,wDAAwD;IACxD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,MAAM,GAAG,SAAS;IAKpD,oCAAoC;IACpC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMrD;;;OAGG;IACH,cAAc,CAAC,OAAO,SAAY,GAAG,kBAAkB,GAAG,SAAS;IAOnE;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;IAoB1E;;OAEG;IACH,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAS5D,OAAO,CAAC,sBAAsB;IAQ9B,0BAA0B;IAC1B,aAAa,IAAI,oBAAoB,EAAE;IAMvC,uCAAuC;IACvC,YAAY,CAAC,SAAS,EAAE,oBAAoB,GAAG,IAAI;IAwBnD,gCAAgC;IAChC,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAiBpC,qCAAqC;IACrC,UAAU,IAAI,MAAM,EAAE;IAWtB;;;;;;;;OAQG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO;IAoB/D;;;;;;OAMG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO;IAiBlE,8CAA8C;IAC9C,UAAU,IAAI,WAAW,EAAE;IAM3B;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAkBnC,4EAA4E;IAC5E,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAelC,uCAAuC;IACvC,SAAS,IAAI,UAAU,EAAE;IAMzB,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAkBjC,2EAA2E;IAC3E,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAejC,0DAA0D;IAC1D,YAAY,IAAI,aAAa,EAAE;IAM/B,yDAAyD;IACzD,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAkBvC,+EAA+E;IAC/E,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAepC,kEAAkE;IAClE,IAAI,QAAQ,IAAI,QAAQ,CAEvB;CACF"}
1
+ {"version":3,"file":"workspace-yaml-editor.d.ts","sourceRoot":"","sources":["../../../core/src/workspace-yaml-editor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,QAAQ,EAA6C,MAAM,MAAM,CAAC;AAC3E,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,WAAW,EACX,UAAU,EACX,MAAM,uBAAuB,CAAC;AAE/B;;;;;GAKG;AACH,qBAAa,mBAAmB;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,GAAG,CAAW;IAEtB,OAAO;IAKP,yCAAyC;IACzC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB;IASlD,qEAAqE;IACrE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB;IAKpD,2EAA2E;IAC3E,IAAI,IAAI,IAAI;IAIZ,iEAAiE;IACjE,QAAQ,IAAI,MAAM;IAMlB,wDAAwD;IACxD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,MAAM,GAAG,SAAS;IAKpD,oCAAoC;IACpC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMrD;;;OAGG;IACH,cAAc,CAAC,OAAO,SAAY,GAAG,kBAAkB,GAAG,SAAS;IAOnE;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;IAoB1E;;OAEG;IACH,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAS5D,OAAO,CAAC,sBAAsB;IAQ9B,0BAA0B;IAC1B,aAAa,IAAI,oBAAoB,EAAE;IAMvC,uCAAuC;IACvC,YAAY,CAAC,SAAS,EAAE,oBAAoB,GAAG,IAAI;IAwBnD,gCAAgC;IAChC,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAiBpC;;;;OAIG;IACH,YAAY,CAAC,GAAG,EAAE,oBAAoB,GAAG,IAAI;IA0B7C;;;;;OAKG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAgBnC,qCAAqC;IACrC,UAAU,IAAI,MAAM,EAAE;IAWtB;;;;;;;;OAQG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO;IAoB/D;;;;;;OAMG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO;IAiBlE,8CAA8C;IAC9C,UAAU,IAAI,WAAW,EAAE;IAM3B;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAkBnC,4EAA4E;IAC5E,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAelC,uCAAuC;IACvC,SAAS,IAAI,UAAU,EAAE;IAMzB,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAkBjC,2EAA2E;IAC3E,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAejC,0DAA0D;IAC1D,YAAY,IAAI,aAAa,EAAE;IAM/B,yDAAyD;IACzD,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAkBvC,+EAA+E;IAC/E,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAepC,kEAAkE;IAClE,IAAI,QAAQ,IAAI,QAAQ,CAEvB;CACF"}
@@ -1,5 +1,6 @@
1
1
  import { makeDeployHandle, pluginRegistry } from '../chunk-6E6PKKAD.js';
2
- import { portableSpawnSync, portableSpawn } from '../chunk-AZAS3FKN.js';
2
+ import { portableSpawnSync, portableSpawn } from '../chunk-26YCXWCU.js';
3
+ import '../chunk-ZAP2BDHG.js';
3
4
  import '../chunk-TJRWGMD2.js';
4
5
  import '../chunk-OUWNTFDG.js';
5
6
  import '../chunk-DZCK7GRW.js';
@@ -8,7 +9,6 @@ import '../chunk-GEEW6SY2.js';
8
9
  import '../chunk-F3HNW354.js';
9
10
  import '../chunk-MENCWIHW.js';
10
11
  import '../chunk-K5GBV4SA.js';
11
- import '../chunk-ZAP2BDHG.js';
12
12
  import '../chunk-JB35MVBN.js';
13
13
  import '../chunk-NSBPE2FW.js';
14
14
  import * as z from 'zod';
@@ -1,9 +1,9 @@
1
- export { AGENT_COMPANION_DIRS, AssetKindRegistry, BUILTIN_PROVIDERS, DEFAULT_ATOMIZATION_POLICY, DOMAIN_MD_FILENAME, SEMVER_RE, SKILL_COMPANION_DIRS, SourceConfigSchema, VERSION, agentProvider, assignDomain, buildDomainIndex, buildRequiresGraph, closeOverReferences, computeDeterministicHash, computeDeterministicHashDetailed, connectorProvider, contractProvider, createDefaultRegistry, createNodeAssetFs, decodeManifestSourceConfig, detectCycles, discoverAssetsInTree, discoverAssetsInTreeEntries, discoverFromManifest, extractPathCandidates, extractRequires, extractSlashCommands, isDomainMdPath, isExcludedDevPath, isManifestMode, lintUncoveredReferences, loadMergedSourceConfig, loadSourceConfig, manifestToSourceConfig, mcpServerProvider, mergeSourceConfigs, parseDomainMd, parseSourceConfig, personaProvider, presetProvider, promptProvider, readManifestSourceConfig, rulesetProvider, scanAssetReferences, scanSlashCommandNames, skillProvider, validateDomains, validateSourceConfig } from '../chunk-BZMTR5WW.js';
1
+ export { AGENT_COMPANION_DIRS, AssetKindRegistry, BUILTIN_PROVIDERS, DEFAULT_ATOMIZATION_POLICY, DOMAIN_MD_FILENAME, SEMVER_RE, SKILL_COMPANION_DIRS, SourceConfigSchema, VERSION, agentProvider, assignDomain, buildDomainIndex, buildRequiresGraph, closeOverReferences, computeDeterministicHash, computeDeterministicHashDetailed, connectorProvider, contractProvider, createDefaultRegistry, createNodeAssetFs, decodeManifestSourceConfig, detectCycles, discoverAssetsInTree, discoverAssetsInTreeEntries, discoverFromManifest, extractPathCandidates, extractRequires, extractSlashCommands, isDomainMdPath, isExcludedDevPath, isManifestMode, lintUncoveredReferences, loadMergedSourceConfig, loadSourceConfig, manifestToSourceConfig, mcpServerProvider, mergeSourceConfigs, parseDomainMd, parseSourceConfig, personaProvider, presetProvider, promptProvider, readManifestSourceConfig, rulesetProvider, scanAssetReferences, scanSlashCommandNames, skillProvider, validateDomains, validateSourceConfig } from '../chunk-B6SSXVF2.js';
2
2
  import '../chunk-JXT46QFC.js';
3
3
  import '../chunk-DZCK7GRW.js';
4
4
  import '../chunk-BQCGFPHW.js';
5
5
  import '../chunk-GEEW6SY2.js';
6
- import '../chunk-GB4SEEK4.js';
6
+ import '../chunk-IRORTHGA.js';
7
7
  import '../chunk-NSBPE2FW.js';
8
8
  //# sourceMappingURL=index.js.map
9
9
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,9 @@
1
- import { logErr, logOk, logInfo } from './chunk-5XS3BFJS.js';
2
- import './chunk-OBSSORCE.js';
3
- import './chunk-WFEPI5LA.js';
4
- import { WorkspaceYamlEditor } from './chunk-AZAS3FKN.js';
1
+ import { logErr, logOk, logInfo } from './chunk-DNFIKRO6.js';
2
+ import './chunk-X57AMTAH.js';
3
+ import './chunk-LCTRCWBK.js';
4
+ import './chunk-CGYEHQOX.js';
5
+ import { WorkspaceYamlEditor } from './chunk-26YCXWCU.js';
6
+ import './chunk-ZAP2BDHG.js';
5
7
  import './chunk-TJRWGMD2.js';
6
8
  import { sourceCacheKey, sourceShortName, getGlobalCacheDir } from './chunk-OUWNTFDG.js';
7
9
  import './chunk-DZCK7GRW.js';
@@ -10,13 +12,11 @@ import './chunk-GEEW6SY2.js';
10
12
  import './chunk-F3HNW354.js';
11
13
  import './chunk-MENCWIHW.js';
12
14
  import './chunk-K5GBV4SA.js';
13
- import './chunk-ZAP2BDHG.js';
14
15
  import './chunk-JB35MVBN.js';
15
16
  import './chunk-KTBKW2FI.js';
16
17
  import './chunk-UQ6LFBPZ.js';
17
- import './chunk-XKARS6EE.js';
18
- import './chunk-GB4SEEK4.js';
19
- import './chunk-CGYEHQOX.js';
18
+ import './chunk-IEX5YV4R.js';
19
+ import './chunk-IRORTHGA.js';
20
20
  import './chunk-NSBPE2FW.js';
21
21
  import { spawnSync } from 'child_process';
22
22
  import { existsSync, mkdirSync } from 'fs';
@@ -80,5 +80,5 @@ function ensureSourcesCloned(projectDir, opts = {}) {
80
80
  }
81
81
 
82
82
  export { ensureSourcesCloned };
83
- //# sourceMappingURL=ensure-sources-4BAJGJRK.js.map
84
- //# sourceMappingURL=ensure-sources-4BAJGJRK.js.map
83
+ //# sourceMappingURL=ensure-sources-CHC7X7AJ.js.map
84
+ //# sourceMappingURL=ensure-sources-CHC7X7AJ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../cli/src/ensure-sources.ts"],"names":[],"mappings":"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","file":"ensure-sources-4BAJGJRK.js","sourcesContent":["/**\n * ensure-sources.ts — hydrate the `~/.skaile/cache/sources/` clone cache from a\n * project's `skaile.yaml` `sources:` entries.\n *\n * Called by `skaile init` (idempotent: no-op when no sources declared) and\n * `skaile install` so checking out a project pulls its source clones onto\n * the local machine.\n */\n\nimport { spawnSync } from \"node:child_process\";\nimport { existsSync, mkdirSync } from \"node:fs\";\nimport * as path from \"node:path\";\nimport {\n getGlobalCacheDir,\n type SourceEntry,\n sourceCacheKey,\n sourceShortName,\n WorkspaceYamlEditor,\n} from \"@skaile/workspaces/core\";\nimport { logErr, logInfo, logOk } from \"./helpers.ts\";\n\nfunction sourceClonePath(key: string): string {\n return path.join(getGlobalCacheDir(), key);\n}\n\nexport interface EnsureResult {\n cloned: string[];\n cached: string[];\n failed: string[];\n}\n\n/** Load `sources:` from a project's `skaile.yaml`, or `null` when unavailable. */\nfunction loadProjectSources(yamlPath: string, quiet: boolean): SourceEntry[] | null {\n try {\n return WorkspaceYamlEditor.load(yamlPath).getSources();\n } catch (err) {\n if (!quiet) {\n logErr(`Could not read ${yamlPath}: ${err instanceof Error ? err.message : String(err)}`);\n }\n return null;\n }\n}\n\n/**\n * Hydrate a single source entry into `result`: skip when already cached,\n * otherwise clone and record success/failure. Mutates `result` in place.\n */\nfunction hydrateSourceEntry(entry: SourceEntry, quiet: boolean, result: EnsureResult): void {\n const key = sourceCacheKey(entry.url);\n const slug = sourceShortName(entry.url);\n const dest = sourceClonePath(key);\n if (existsSync(dest)) {\n result.cached.push(slug);\n return;\n }\n mkdirSync(path.dirname(dest), { recursive: true });\n const args = [\"clone\", entry.url, dest];\n if (entry.pin) args.splice(1, 0, \"--branch\", entry.pin);\n const clone = spawnSync(\"git\", args, { stdio: quiet ? \"pipe\" : \"inherit\" });\n if (clone.status !== 0) {\n result.failed.push(slug);\n if (quiet) {\n logErr(`git clone failed for ${entry.url}`);\n }\n return;\n }\n result.cloned.push(slug);\n}\n\n/** Log a full-hydrate summary of cloned + reused-cached entries. */\nfunction logHydrateSummary(result: EnsureResult): void {\n for (const n of result.cloned) logOk(`Cloned source \"${n}\".`);\n if (result.cached.length > 0) {\n logInfo(`Reused cached clones: ${result.cached.join(\", \")}`);\n }\n}\n\n/**\n * Walk `projectDir/skaile.yaml` `sources:` and clone any entries whose\n * clone directory does not yet exist under `~/.skaile/cache/sources/`. Existing\n * clones are left untouched — this is hydration, not sync.\n *\n * Quiet by default: when `quiet: true` the helper only prints failures.\n * On full hydrate (`quiet: false`) it logs each cloned/cached entry.\n */\nexport function ensureSourcesCloned(\n projectDir: string,\n opts: { quiet?: boolean } = {},\n): EnsureResult {\n const result: EnsureResult = { cloned: [], cached: [], failed: [] };\n const yamlPath = path.join(projectDir, \"skaile.yaml\");\n if (!existsSync(yamlPath)) return result;\n\n const quiet = opts.quiet ?? false;\n const sources = loadProjectSources(yamlPath, quiet);\n if (sources === null) return result;\n if (sources.length === 0) return result;\n\n for (const entry of sources) {\n hydrateSourceEntry(entry, quiet, result);\n }\n\n if (!quiet) {\n logHydrateSummary(result);\n }\n\n return result;\n}\n"]}
1
+ {"version":3,"sources":["../cli/src/ensure-sources.ts"],"names":[],"mappings":"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","file":"ensure-sources-CHC7X7AJ.js","sourcesContent":["/**\n * ensure-sources.ts — hydrate the `~/.skaile/cache/sources/` clone cache from a\n * project's `skaile.yaml` `sources:` entries.\n *\n * Called by `skaile init` (idempotent: no-op when no sources declared) and\n * `skaile install` so checking out a project pulls its source clones onto\n * the local machine.\n */\n\nimport { spawnSync } from \"node:child_process\";\nimport { existsSync, mkdirSync } from \"node:fs\";\nimport * as path from \"node:path\";\nimport {\n getGlobalCacheDir,\n type SourceEntry,\n sourceCacheKey,\n sourceShortName,\n WorkspaceYamlEditor,\n} from \"@skaile/workspaces/core\";\nimport { logErr, logInfo, logOk } from \"./helpers.ts\";\n\nfunction sourceClonePath(key: string): string {\n return path.join(getGlobalCacheDir(), key);\n}\n\nexport interface EnsureResult {\n cloned: string[];\n cached: string[];\n failed: string[];\n}\n\n/** Load `sources:` from a project's `skaile.yaml`, or `null` when unavailable. */\nfunction loadProjectSources(yamlPath: string, quiet: boolean): SourceEntry[] | null {\n try {\n return WorkspaceYamlEditor.load(yamlPath).getSources();\n } catch (err) {\n if (!quiet) {\n logErr(`Could not read ${yamlPath}: ${err instanceof Error ? err.message : String(err)}`);\n }\n return null;\n }\n}\n\n/**\n * Hydrate a single source entry into `result`: skip when already cached,\n * otherwise clone and record success/failure. Mutates `result` in place.\n */\nfunction hydrateSourceEntry(entry: SourceEntry, quiet: boolean, result: EnsureResult): void {\n const key = sourceCacheKey(entry.url);\n const slug = sourceShortName(entry.url);\n const dest = sourceClonePath(key);\n if (existsSync(dest)) {\n result.cached.push(slug);\n return;\n }\n mkdirSync(path.dirname(dest), { recursive: true });\n const args = [\"clone\", entry.url, dest];\n if (entry.pin) args.splice(1, 0, \"--branch\", entry.pin);\n const clone = spawnSync(\"git\", args, { stdio: quiet ? \"pipe\" : \"inherit\" });\n if (clone.status !== 0) {\n result.failed.push(slug);\n if (quiet) {\n logErr(`git clone failed for ${entry.url}`);\n }\n return;\n }\n result.cloned.push(slug);\n}\n\n/** Log a full-hydrate summary of cloned + reused-cached entries. */\nfunction logHydrateSummary(result: EnsureResult): void {\n for (const n of result.cloned) logOk(`Cloned source \"${n}\".`);\n if (result.cached.length > 0) {\n logInfo(`Reused cached clones: ${result.cached.join(\", \")}`);\n }\n}\n\n/**\n * Walk `projectDir/skaile.yaml` `sources:` and clone any entries whose\n * clone directory does not yet exist under `~/.skaile/cache/sources/`. Existing\n * clones are left untouched — this is hydration, not sync.\n *\n * Quiet by default: when `quiet: true` the helper only prints failures.\n * On full hydrate (`quiet: false`) it logs each cloned/cached entry.\n */\nexport function ensureSourcesCloned(\n projectDir: string,\n opts: { quiet?: boolean } = {},\n): EnsureResult {\n const result: EnsureResult = { cloned: [], cached: [], failed: [] };\n const yamlPath = path.join(projectDir, \"skaile.yaml\");\n if (!existsSync(yamlPath)) return result;\n\n const quiet = opts.quiet ?? false;\n const sources = loadProjectSources(yamlPath, quiet);\n if (sources === null) return result;\n if (sources.length === 0) return result;\n\n for (const entry of sources) {\n hydrateSourceEntry(entry, quiet, result);\n }\n\n if (!quiet) {\n logHydrateSummary(result);\n }\n\n return result;\n}\n"]}
@@ -1,10 +1,11 @@
1
- export { BoxConnector, createConnector4 as createConnector } from '../../chunk-PSMW5HLX.js';
1
+ export { BoxConnector, createConnector4 as createConnector } from '../../chunk-GWDZW44L.js';
2
2
  import '../../chunk-BDUANIAR.js';
3
3
  import '../../chunk-6E6PKKAD.js';
4
- import '../../chunk-SKADPHAM.js';
4
+ import '../../chunk-4N5XR5DQ.js';
5
5
  import '../../chunk-DEYYRFQU.js';
6
6
  import '../../chunk-IFGTRL2I.js';
7
- import '../../chunk-AZAS3FKN.js';
7
+ import '../../chunk-26YCXWCU.js';
8
+ import '../../chunk-ZAP2BDHG.js';
8
9
  import '../../chunk-TJRWGMD2.js';
9
10
  import '../../chunk-OUWNTFDG.js';
10
11
  import '../../chunk-DZCK7GRW.js';
@@ -13,7 +14,6 @@ import '../../chunk-GEEW6SY2.js';
13
14
  import '../../chunk-F3HNW354.js';
14
15
  import '../../chunk-MENCWIHW.js';
15
16
  import '../../chunk-K5GBV4SA.js';
16
- import '../../chunk-ZAP2BDHG.js';
17
17
  import '../../chunk-JB35MVBN.js';
18
18
  import '../../chunk-NSBPE2FW.js';
19
19
  //# sourceMappingURL=box.js.map
@@ -1,10 +1,11 @@
1
- export { DeployConnector, createConnector2 as createConnector } from '../../chunk-PSMW5HLX.js';
1
+ export { DeployConnector, createConnector2 as createConnector } from '../../chunk-GWDZW44L.js';
2
2
  import '../../chunk-BDUANIAR.js';
3
3
  import '../../chunk-6E6PKKAD.js';
4
- import '../../chunk-SKADPHAM.js';
4
+ import '../../chunk-4N5XR5DQ.js';
5
5
  import '../../chunk-DEYYRFQU.js';
6
6
  import '../../chunk-IFGTRL2I.js';
7
- import '../../chunk-AZAS3FKN.js';
7
+ import '../../chunk-26YCXWCU.js';
8
+ import '../../chunk-ZAP2BDHG.js';
8
9
  import '../../chunk-TJRWGMD2.js';
9
10
  import '../../chunk-OUWNTFDG.js';
10
11
  import '../../chunk-DZCK7GRW.js';
@@ -13,7 +14,6 @@ import '../../chunk-GEEW6SY2.js';
13
14
  import '../../chunk-F3HNW354.js';
14
15
  import '../../chunk-MENCWIHW.js';
15
16
  import '../../chunk-K5GBV4SA.js';
16
- import '../../chunk-ZAP2BDHG.js';
17
17
  import '../../chunk-JB35MVBN.js';
18
18
  import '../../chunk-NSBPE2FW.js';
19
19
  //# sourceMappingURL=deploy.js.map
@@ -1,10 +1,11 @@
1
- export { DevServerConnector, createConnector3 as createConnector } from '../../chunk-PSMW5HLX.js';
1
+ export { DevServerConnector, createConnector3 as createConnector } from '../../chunk-GWDZW44L.js';
2
2
  import '../../chunk-BDUANIAR.js';
3
3
  import '../../chunk-6E6PKKAD.js';
4
- import '../../chunk-SKADPHAM.js';
4
+ import '../../chunk-4N5XR5DQ.js';
5
5
  import '../../chunk-DEYYRFQU.js';
6
6
  import '../../chunk-IFGTRL2I.js';
7
- import '../../chunk-AZAS3FKN.js';
7
+ import '../../chunk-26YCXWCU.js';
8
+ import '../../chunk-ZAP2BDHG.js';
8
9
  import '../../chunk-TJRWGMD2.js';
9
10
  import '../../chunk-OUWNTFDG.js';
10
11
  import '../../chunk-DZCK7GRW.js';
@@ -13,7 +14,6 @@ import '../../chunk-GEEW6SY2.js';
13
14
  import '../../chunk-F3HNW354.js';
14
15
  import '../../chunk-MENCWIHW.js';
15
16
  import '../../chunk-K5GBV4SA.js';
16
- import '../../chunk-ZAP2BDHG.js';
17
17
  import '../../chunk-JB35MVBN.js';
18
18
  import '../../chunk-NSBPE2FW.js';
19
19
  //# sourceMappingURL=devserver.js.map
@@ -1,10 +1,11 @@
1
- export { FlowAdapter, createConnector } from '../../../chunk-PSMW5HLX.js';
1
+ export { FlowAdapter, createConnector } from '../../../chunk-GWDZW44L.js';
2
2
  import '../../../chunk-BDUANIAR.js';
3
3
  import '../../../chunk-6E6PKKAD.js';
4
- export { isBlocking } from '../../../chunk-SKADPHAM.js';
4
+ export { isBlocking } from '../../../chunk-4N5XR5DQ.js';
5
5
  import '../../../chunk-DEYYRFQU.js';
6
6
  import '../../../chunk-IFGTRL2I.js';
7
- import '../../../chunk-AZAS3FKN.js';
7
+ import '../../../chunk-26YCXWCU.js';
8
+ import '../../../chunk-ZAP2BDHG.js';
8
9
  import '../../../chunk-TJRWGMD2.js';
9
10
  import '../../../chunk-OUWNTFDG.js';
10
11
  import '../../../chunk-DZCK7GRW.js';
@@ -13,7 +14,6 @@ import '../../../chunk-GEEW6SY2.js';
13
14
  import '../../../chunk-F3HNW354.js';
14
15
  import '../../../chunk-MENCWIHW.js';
15
16
  import '../../../chunk-K5GBV4SA.js';
16
- import '../../../chunk-ZAP2BDHG.js';
17
17
  import '../../../chunk-JB35MVBN.js';
18
18
  import '../../../chunk-NSBPE2FW.js';
19
19
  //# sourceMappingURL=adapter.js.map
@@ -82,7 +82,10 @@ export declare function isBlocking(status: NodeStatus): boolean;
82
82
  * @param completedIds - Set of node IDs already known to be complete before this call.
83
83
  * @param skippedIds - Set of node IDs that were explicitly skipped. Defaults to an empty set.
84
84
  * @returns Array of node IDs whose hard dependencies are now fully satisfied and that
85
- * were not already available before `justCompleted` finished.
85
+ * were not already available before `justCompleted` finished. Unlike {@link skillNodes}-based
86
+ * helpers, this walks raw edge targets and does not filter by node type — if a `group`,
87
+ * `sub-flow`, or `router` node is a direct successor, its ID can appear here. Callers that
88
+ * dispatch these IDs as runnable skill nodes are responsible for filtering non-`'skill'` IDs.
86
89
  * @docLink packages/flow-engine/concepts#resolve-next-nodes
87
90
  */
88
91
  export declare function resolveNextNodes(flow: FlowDefinition, justCompleted: string, completedIds: Set<string>, skippedIds?: Set<string>): string[];
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../../../factory-assets/connectors/flow/engine/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAGd,SAAS,EACT,qBAAqB,EAErB,UAAU,EACX,MAAM,YAAY,CAAC;AA+BpB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,cAAc,EACpB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,EACzB,UAAU,GAAE,GAAG,CAAC,MAAM,CAAa,EACnC,UAAU,GAAE,GAAG,CAAC,MAAM,CAAa,GAClC,SAAS,CA+EX;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAC5C,SAAS,CA6DX;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAEtD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,cAAc,EACpB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,EACzB,UAAU,GAAE,GAAG,CAAC,MAAM,CAAa,GAClC,MAAM,EAAE,CAmBV;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAgB1F"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../../../factory-assets/connectors/flow/engine/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAGd,SAAS,EACT,qBAAqB,EAErB,UAAU,EACX,MAAM,YAAY,CAAC;AA+BpB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,cAAc,EACpB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,EACzB,UAAU,GAAE,GAAG,CAAC,MAAM,CAAa,EACnC,UAAU,GAAE,GAAG,CAAC,MAAM,CAAa,GAClC,SAAS,CA+EX;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAC5C,SAAS,CA6DX;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAEtD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,cAAc,EACpB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,EACzB,UAAU,GAAE,GAAG,CAAC,MAAM,CAAa,GAClC,MAAM,EAAE,CAmBV;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAgB1F"}
@@ -14,8 +14,26 @@ export type EdgeType = "flow" | "parallel" | "optional";
14
14
  /**
15
15
  * A single node in a flow definition.
16
16
  *
17
- * Nodes with `type === 'group'` are visual containers used by the flow editor — the engine
18
- * filters them out before any computation. Only `type === 'skill'` nodes are executed.
17
+ * Four node kinds exist:
18
+ * - `'skill'` — executed: the runner invokes `data.skill`; completion is reported via
19
+ * the standard `complete_node` tool call. The only kind the engine tracks
20
+ * in {@link NodeState} today (see below).
21
+ * - `'sub-flow'` — non-executable: no skill runs. Conceptually completes when the delegated
22
+ * flow named by `data.flow` finishes — driving that nested run is entirely
23
+ * a host/orchestrator concern, not something this package implements.
24
+ * - `'router'` — non-executable: no skill runs. Conceptually completes when a route from
25
+ * `data.routes` is chosen. `data.routes` is evaluated in order — the first
26
+ * entry whose `condition` holds wins; `condition: "default"` is a
27
+ * catch-all; `target: null` means "choose to skip".
28
+ * - `'group'` — visual only: a canvas container used by the flow editor.
29
+ *
30
+ * Today the engine (`computeFlowState`, `computeFlowStateFromSnapshots`,
31
+ * `computeSkippable`) tracks only `'skill'` nodes — `'sub-flow'`, `'router'`, and `'group'`
32
+ * are all excluded from {@link NodeState}, edge computation, and dependency blocking, the
33
+ * same as pure visual containers. `'sub-flow'` and `'router'` are recognized node kinds so
34
+ * consumers don't need to cast around the type, and their intended completion semantics are
35
+ * documented here, but wiring them into the engine's dependency graph (so dependents
36
+ * actually wait on them) is downstream/future work.
19
37
  *
20
38
  * Note: `node.id` is the canvas identifier; `node.data.skill` is the skill that runs.
21
39
  * They may differ when the same skill is aliased to multiple canvas positions.
@@ -26,10 +44,11 @@ export interface FlowNode {
26
44
  /** Canvas-unique node identifier. Used as the key in completed/running/skipped sets. */
27
45
  id: string;
28
46
  /**
29
- * Node kind. `'skill'` nodes are executed by the runner; `'group'` nodes are
30
- * visual containers only and are ignored by the engine.
47
+ * Node kind see the type-level doc above for the full semantics of each kind. Only
48
+ * `'skill'` is tracked by the engine today; `'sub-flow'`, `'router'`, and `'group'` are
49
+ * all ignored by `computeFlowState` / `computeFlowStateFromSnapshots` / `computeSkippable`.
31
50
  */
32
- type: "skill" | "group";
51
+ type: "skill" | "group" | "sub-flow" | "router";
33
52
  /** ID of the parent group node when this node is nested inside a group container. */
34
53
  parentNode?: string;
35
54
  /** Visual position on the canvas — not used by the engine. */
@@ -70,6 +89,22 @@ export interface FlowNode {
70
89
  /** File paths to skip checking (guaranteed by prior nodes in this flow). */
71
90
  skip_checks?: string[];
72
91
  };
92
+ /** `'sub-flow'` nodes only: ID of the delegated flow whose completion completes this node. */
93
+ flow?: string;
94
+ /**
95
+ * `'router'` nodes only: ordered routing table. Evaluated top to bottom — the first
96
+ * entry whose `condition` holds is taken. `condition: "default"` matches unconditionally
97
+ * (a catch-all, conventionally placed last). `target: null` means the route resolves to
98
+ * "skip" rather than to another node. This package does not itself parse or evaluate
99
+ * `condition` — it is an opaque string whose format (expression language, predicate
100
+ * syntax, or named enum value) is defined by whichever host/orchestrator evaluates
101
+ * routes. See `docs/flow-execution.md#node-types` — concept-forge's
102
+ * `shared/flow-extended.ts` is a reference implementation.
103
+ */
104
+ routes?: Array<{
105
+ condition: string;
106
+ target: string | null;
107
+ }>;
73
108
  [key: string]: any;
74
109
  };
75
110
  }
@@ -278,7 +313,7 @@ export interface NodeState {
278
313
  export interface FlowState {
279
314
  /** ID of the flow this state was computed from (`FlowDefinition.id`). */
280
315
  flowId: string;
281
- /** Per-node state for every skill node in the flow (group nodes excluded). */
316
+ /** Per-node state for every skill node in the flow (group, sub-flow, and router nodes excluded). */
282
317
  nodes: NodeState[];
283
318
  /** IDs of nodes whose status is `'available'` — ready to be dispatched by the runner. */
284
319
  available: string[];