@skaile/workspaces 0.41.1 → 0.41.2

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 (110) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/{asset-feeds-5AL623RN.js → asset-feeds-43JRFICZ.js} +7 -7
  3. package/dist/{asset-feeds-5AL623RN.js.map → asset-feeds-43JRFICZ.js.map} +1 -1
  4. package/dist/asset-manager/index.js +7 -7
  5. package/dist/asset-manager/installer.js +6 -6
  6. package/dist/asset-manager/renderers.js +2 -2
  7. package/dist/{chunk-XPHQSIFZ.js → chunk-2JCUYKUN.js} +2 -2
  8. package/dist/{chunk-XPHQSIFZ.js.map → chunk-2JCUYKUN.js.map} +1 -1
  9. package/dist/{chunk-HRKB2ATT.js → chunk-3CVX7ENC.js} +6 -3
  10. package/dist/chunk-3CVX7ENC.js.map +1 -0
  11. package/dist/{chunk-67MFR5LS.js → chunk-3SQYLWSD.js} +3 -3
  12. package/dist/{chunk-67MFR5LS.js.map → chunk-3SQYLWSD.js.map} +1 -1
  13. package/dist/{chunk-WCFB2EPJ.js → chunk-776SWGPA.js} +8 -8
  14. package/dist/{chunk-WCFB2EPJ.js.map → chunk-776SWGPA.js.map} +1 -1
  15. package/dist/{chunk-OL2BXZZV.js → chunk-7G6BP2QI.js} +4 -4
  16. package/dist/{chunk-OL2BXZZV.js.map → chunk-7G6BP2QI.js.map} +1 -1
  17. package/dist/{chunk-PIAWSWLQ.js → chunk-HA4Z2CLU.js} +5 -5
  18. package/dist/{chunk-PIAWSWLQ.js.map → chunk-HA4Z2CLU.js.map} +1 -1
  19. package/dist/{chunk-Y2OCHNEH.js → chunk-J4RF5ABK.js} +3 -3
  20. package/dist/{chunk-Y2OCHNEH.js.map → chunk-J4RF5ABK.js.map} +1 -1
  21. package/dist/{chunk-DUAB2AFV.js → chunk-JAOXG3LL.js} +3 -3
  22. package/dist/{chunk-DUAB2AFV.js.map → chunk-JAOXG3LL.js.map} +1 -1
  23. package/dist/{chunk-MWEB2TZ7.js → chunk-MVXXAXDW.js} +3 -3
  24. package/dist/{chunk-MWEB2TZ7.js.map → chunk-MVXXAXDW.js.map} +1 -1
  25. package/dist/{chunk-2PXSZYKV.js → chunk-NQDJQ7WB.js} +14 -3
  26. package/dist/chunk-NQDJQ7WB.js.map +1 -0
  27. package/dist/{chunk-5PGFAYN3.js → chunk-OJQPEAM6.js} +4 -4
  28. package/dist/{chunk-5PGFAYN3.js.map → chunk-OJQPEAM6.js.map} +1 -1
  29. package/dist/{chunk-IGNSNZPG.js → chunk-ON55QCTL.js} +3 -3
  30. package/dist/{chunk-IGNSNZPG.js.map → chunk-ON55QCTL.js.map} +1 -1
  31. package/dist/{chunk-KZPMBTQL.js → chunk-SSFS66YX.js} +6 -6
  32. package/dist/{chunk-KZPMBTQL.js.map → chunk-SSFS66YX.js.map} +1 -1
  33. package/dist/{chunk-FIMEPG6J.js → chunk-TB342H55.js} +5 -5
  34. package/dist/{chunk-FIMEPG6J.js.map → chunk-TB342H55.js.map} +1 -1
  35. package/dist/{chunk-QGDCLTK2.js → chunk-X4FCLBI7.js} +3 -3
  36. package/dist/{chunk-QGDCLTK2.js.map → chunk-X4FCLBI7.js.map} +1 -1
  37. package/dist/{chunk-OZVZA64O.js → chunk-YG3CG6QR.js} +2 -2
  38. package/dist/{chunk-OZVZA64O.js.map → chunk-YG3CG6QR.js.map} +1 -1
  39. package/dist/{chunk-ZFZ2BFQQ.js → chunk-Z6DAVEDZ.js} +7 -7
  40. package/dist/chunk-Z6DAVEDZ.js.map +1 -0
  41. package/dist/{chunk-RVXP5KN5.js → chunk-ZJ27BHIH.js} +3 -3
  42. package/dist/{chunk-RVXP5KN5.js.map → chunk-ZJ27BHIH.js.map} +1 -1
  43. package/dist/cli/index.js +32 -32
  44. package/dist/connectors/config.js +4 -4
  45. package/dist/connectors/index.js +5 -5
  46. package/dist/core/index.js +3 -3
  47. package/dist/core/runtime-assets.js +2 -2
  48. package/dist/core/src/workspace-config.d.ts.map +1 -1
  49. package/dist/core/workspace-config.js +1 -1
  50. package/dist/deploy/index.js +3 -3
  51. package/dist/discovery/index.js +2 -2
  52. package/dist/{ensure-sources-P2O7ATDO.js → ensure-sources-SIF2LFEL.js} +8 -8
  53. package/dist/{ensure-sources-P2O7ATDO.js.map → ensure-sources-SIF2LFEL.js.map} +1 -1
  54. package/dist/factory-assets/connectors/deploy.js +5 -5
  55. package/dist/factory-assets/connectors/devserver.js +5 -5
  56. package/dist/factory-assets/connectors/flow/adapter.js +5 -5
  57. package/dist/factory-assets/connectors/flow/engine.js +3 -3
  58. package/dist/factory-assets/connectors/flow/run-flow.js +6 -6
  59. package/dist/factory-assets/connectors/flow.js +5 -5
  60. package/dist/factory-assets/connectors/git.js +5 -5
  61. package/dist/factory-assets/connectors/gmail.js +5 -5
  62. package/dist/factory-assets/connectors/googledrive.js +5 -5
  63. package/dist/factory-assets/connectors/local.js +5 -5
  64. package/dist/factory-assets/connectors/mattermost.js +5 -5
  65. package/dist/factory-assets/connectors/memory.js +5 -5
  66. package/dist/factory-assets/connectors/minio.js +5 -5
  67. package/dist/factory-assets/connectors/postgres.js +5 -5
  68. package/dist/factory-assets/connectors/s3.js +5 -5
  69. package/dist/factory-assets/connectors/sharepoint.js +5 -5
  70. package/dist/factory-assets/connectors/sqlite.js +5 -5
  71. package/dist/factory-assets/connectors/static-server/CONNECTOR.md +2 -2
  72. package/dist/factory-assets/connectors/static-server/adapter.d.ts +1 -1
  73. package/dist/factory-assets/connectors/static-server/adapter.d.ts.map +1 -1
  74. package/dist/factory-assets/connectors/static-server.js +5 -5
  75. package/dist/factory-assets/connectors/tunnel.js +5 -5
  76. package/dist/factory-assets/connectors/webdav.js +5 -5
  77. package/dist/factory-assets/connectors/xstate-store.js +5 -5
  78. package/dist/factory-assets/connectors/xstate.js +5 -5
  79. package/dist/factory-assets/skaile.manifest.yaml +58 -0
  80. package/dist/{flows-2HE7KTMA.js → flows-3MBK2PDN.js} +3 -3
  81. package/dist/{flows-2HE7KTMA.js.map → flows-3MBK2PDN.js.map} +1 -1
  82. package/dist/library/index.js +6 -6
  83. package/dist/library/install.js +3 -3
  84. package/dist/{open-library-XBZTS6OM.js → open-library-Y7QYI2UK.js} +9 -9
  85. package/dist/{open-library-XBZTS6OM.js.map → open-library-Y7QYI2UK.js.map} +1 -1
  86. package/dist/{paths-FUTWU7TP.js → paths-KNLBYALO.js} +6 -6
  87. package/dist/{paths-FUTWU7TP.js.map → paths-KNLBYALO.js.map} +1 -1
  88. package/dist/{plugin-store-ULRBL4YO.js → plugin-store-CL6CTREE.js} +5 -5
  89. package/dist/{plugin-store-ULRBL4YO.js.map → plugin-store-CL6CTREE.js.map} +1 -1
  90. package/dist/runner/index.js +7 -7
  91. package/dist/sdk/asset-manager.js +7 -7
  92. package/dist/sdk/core.js +3 -3
  93. package/dist/sdk/flow.js +3 -3
  94. package/dist/sdk/index.js +7 -7
  95. package/dist/sdk/runner.js +7 -7
  96. package/dist/{setup-VIECJRD7.js → setup-345XOCH3.js} +5 -5
  97. package/dist/{setup-VIECJRD7.js.map → setup-345XOCH3.js.map} +1 -1
  98. package/dist/{store-client-UG2GRPXB.js → store-client-W3HKRE46.js} +6 -6
  99. package/dist/{store-client-UG2GRPXB.js.map → store-client-W3HKRE46.js.map} +1 -1
  100. package/dist/tui/index.js +7 -7
  101. package/dist/types/manifests.js +1 -1
  102. package/dist/types/src/manifests/mcp-server.d.ts +1 -0
  103. package/dist/types/src/manifests/mcp-server.d.ts.map +1 -1
  104. package/dist/workspace-plugin/adapters/mcp.js +1 -1
  105. package/dist/workspace-plugin/adapters/omp.js +3 -3
  106. package/dist/workspace-plugin/index.js +1 -1
  107. package/package.json +1 -1
  108. package/dist/chunk-2PXSZYKV.js.map +0 -1
  109. package/dist/chunk-HRKB2ATT.js.map +0 -1
  110. package/dist/chunk-ZFZ2BFQQ.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.41.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [#171](https://github.com/skaile-ai/workspaces/pull/171) [`e403d2f`](https://github.com/skaile-ai/workspaces/commit/e403d2f6c55aeb38df430a0efc3efae3759a38b0) Thanks [@mortegro](https://github.com/mortegro)! - Register all 19 factory connectors in `factory-assets/skaile.manifest.yaml`.
8
+ The manifest declared skills + a bundle but no connectors; because it is
9
+ non-empty, the walker runs manifest-driven and skips the filename-convention
10
+ fallback that indexes `CONNECTOR.md` files, so `AssetManager.add`'s provenance
11
+ index contained zero factory connectors. The manage TUI lists them via a
12
+ separate `scanRepo` path, producing a select-but-fail-to-add
13
+ (`Asset not found: connector:@skaile-ai/deploy`).
14
+
15
+ **Breaking:** also renames the static file-server connector's identity
16
+ `static` → `static-server` (registry key, catalog id, `CONNECTOR.md` `name:`,
17
+ adapter `name`, and `driver:`) so the catalog key matches its folder. Any
18
+ `skaile.yaml` using `driver: static` must switch to `driver: static-server`
19
+ (see MIGRATION.md).
20
+
21
+ - [#174](https://github.com/skaile-ai/workspaces/pull/174) [`2ec5b68`](https://github.com/skaile-ai/workspaces/commit/2ec5b68d9c4f9941d1a39877684e20fb5b34cd1a) Thanks [@peteralbert](https://github.com/peteralbert)! - Fix remote MCP servers declared with `transport: http` (or the MCP-spec alias `transport: streamable-http`) in an `MCP.md` catalog manifest.
22
+
23
+ - The `McpServerManifestSchema` enum now accepts `http` alongside `streamable-http` (it previously allowed only `streamable-http`, which the runner does not recognize).
24
+ - `mcpDeclFromCatalogEntry` normalizes `streamable-http` -> `http`, the literal `external-mcp.ts` branches on to open a `StreamableHTTPClientTransport`.
25
+
26
+ Without this, a catalog-published remote MCP either failed manifest validation (`http`) or produced a declaration the runner could not connect (`streamable-http`).
27
+
3
28
  ## 0.41.1
4
29
 
5
30
  ### Patch Changes
@@ -1,7 +1,7 @@
1
- import './chunk-MWEB2TZ7.js';
1
+ import './chunk-MVXXAXDW.js';
2
2
  import './chunk-ZAP2BDHG.js';
3
- import { factoryAssetRoots } from './chunk-DUAB2AFV.js';
4
- import { scanRepo } from './chunk-2PXSZYKV.js';
3
+ import { factoryAssetRoots } from './chunk-JAOXG3LL.js';
4
+ import { scanRepo } from './chunk-NQDJQ7WB.js';
5
5
  import './chunk-DZCK7GRW.js';
6
6
  import './chunk-B5PEERRZ.js';
7
7
  import './chunk-GEEW6SY2.js';
@@ -17,7 +17,7 @@ async function libraryAssets() {
17
17
  const notes = [];
18
18
  try {
19
19
  const [{ openLibraryManager }, { skaileHomeDir }] = await Promise.all([
20
- import('./open-library-XBZTS6OM.js'),
20
+ import('./open-library-Y7QYI2UK.js'),
21
21
  import('./library/index.js')
22
22
  ]);
23
23
  const { manager, close } = await openLibraryManager();
@@ -46,7 +46,7 @@ async function libraryAssets() {
46
46
  async function storeAssets(projectDir) {
47
47
  const notes = [];
48
48
  try {
49
- const { resolveCatalogSource } = await import('./open-library-XBZTS6OM.js');
49
+ const { resolveCatalogSource } = await import('./open-library-Y7QYI2UK.js');
50
50
  const { source, close } = await resolveCatalogSource({ projectDir });
51
51
  try {
52
52
  const assets = await source.listAssets();
@@ -120,5 +120,5 @@ async function gatherAssetFeeds(am, projectDir) {
120
120
  }
121
121
 
122
122
  export { gatherAssetFeeds };
123
- //# sourceMappingURL=asset-feeds-5AL623RN.js.map
124
- //# sourceMappingURL=asset-feeds-5AL623RN.js.map
123
+ //# sourceMappingURL=asset-feeds-43JRFICZ.js.map
124
+ //# sourceMappingURL=asset-feeds-43JRFICZ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../cli/src/asset-feeds.ts"],"names":[],"mappings":"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","file":"asset-feeds-5AL623RN.js","sourcesContent":["/**\n * asset-feeds.ts — gather installable assets from every feed the manage TUI\n * surfaces.\n *\n * Four feeds, normalized into `CatalogEntry`:\n * - **Project sources** — `skaile.yaml` `sources:` entries (scanned via\n * `AssetManager.search()`; the new `sources:` field is merged into the\n * legacy repositories map in `AssetManager.loadConfig`).\n * - **Local libraries** — user authoring places from `LocalIndex` (filesystem\n * scan of each library's `path`).\n * - **Factory assets** — the bundled first-party `factory-assets` tree\n * (`factoryAssetRoots()`), scanned from disk. Always present; no network.\n * - **Remote store** — the configured catalog source when `catalog.url` is\n * not `local`. Failures are non-fatal — they surface as notes.\n */\n\nimport { existsSync } from \"node:fs\";\nimport * as path from \"node:path\";\nimport {\n type AssetKind,\n type CatalogDomain,\n type CatalogEntry,\n factoryAssetRoots,\n scanRepo,\n} from \"@skaile/workspaces/core\";\n\n/** One non-fatal note returned to the caller for surfacing in the UI. */\nexport interface FeedNote {\n feed: \"sources\" | \"libraries\" | \"store\" | \"factory\";\n message: string;\n}\n\n/**\n * Which feed an asset came from. This is the top-level grouping axis in the\n * manage TUI (\"where is this skill coming from?\") and is intentionally distinct\n * from `publisher` (asset-intrinsic identity): the same publisher can legitimately\n * appear under more than one origin (e.g. a github repo you added as a `source`\n * that is also listed in the remote `store`).\n */\nexport type AssetOrigin = \"source\" | \"library\" | \"factory\" | \"store\";\n\n/** A catalog entry tagged with the feed it was gathered from. */\nexport interface OriginEntry {\n origin: AssetOrigin;\n entry: CatalogEntry;\n}\n\nexport interface AssetFeedResult {\n entries: OriginEntry[];\n /**\n * Display-only domain metadata, keyed (by the consumer) on `slug`. Populated\n * from the store's `catalog.listDomains` when the connected catalog source\n * exposes it; empty otherwise. The manage TUI joins `entry.domainSlug` → a\n * domain for grouping headers, descriptions, and relation badges.\n */\n domains: CatalogDomain[];\n notes: FeedNote[];\n}\n\n/**\n * Pull assets from local libraries (the authoring places under\n * `~/.skaile/libraries/<name>/`, not the `~/.skaile/sources/` cache). Each\n * library's `path` is scanned with `scanRepo` and tagged with\n * `repository = \"library:<name>\"` so the manage TUI groups them into their\n * own headers.\n */\nasync function libraryAssets(): Promise<{ entries: CatalogEntry[]; notes: FeedNote[] }> {\n const notes: FeedNote[] = [];\n try {\n const [{ openLibraryManager }, { skaileHomeDir }] = await Promise.all([\n import(\"./open-library.ts\"),\n import(\"@skaile/workspaces/library\"),\n ]);\n const { manager, close } = await openLibraryManager();\n try {\n const sourcesDir = path.join(skaileHomeDir(), \"sources\");\n const libs = (await manager.listLibraries()).filter((l) => !l.path.startsWith(sourcesDir));\n const entries: CatalogEntry[] = [];\n for (const lib of libs) {\n if (!existsSync(lib.path)) continue;\n for (const e of scanRepo(lib.path, `library:${lib.name}`)) {\n entries.push(e);\n }\n }\n return { entries, notes };\n } finally {\n close();\n }\n } catch (err) {\n notes.push({\n feed: \"libraries\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], notes };\n }\n}\n\n/**\n * Pull a (best-effort) snapshot of the connected remote store catalog.\n *\n * - Returns no entries when the resolved catalog is local-only or the host\n * is unreachable (the failure becomes a note, not an exception).\n * - Maps `CatalogAsset` → `CatalogEntry`, carrying `publisher`, `repo`, and\n * `category` straight through and using `source = \"store://<id>\"`; per-file\n * `source` paths are not available for remote assets so the canonical ref is\n * a stable placeholder.\n */\nasync function storeAssets(projectDir: string): Promise<{\n entries: CatalogEntry[];\n domains: CatalogDomain[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n const { resolveCatalogSource } = await import(\"./open-library.ts\");\n const { source, close } = await resolveCatalogSource({ projectDir });\n try {\n const assets = await source.listAssets();\n const entries: CatalogEntry[] = assets.map((a) => ({\n name: a.name,\n kind: (a.kind as AssetKind) ?? \"skill\",\n description: a.description ?? \"\",\n source: `store://${a.id}`,\n publisher: a.publisher,\n repo: a.repo,\n domainSlug: a.domainSlug,\n category: a.category,\n version: a.version,\n requires: [],\n dependencies: [],\n }));\n // Domains are optional on the catalog source — only the store backend\n // (post Part 4 `catalog.listDomains`) exposes them. Duck-type the call so\n // older sources and the local catalog degrade to no domains, not an error.\n const domains = await loadDomains(source);\n return { entries, domains, notes };\n } finally {\n close();\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n // Local-only catalog throws a recognizable message — silence it; absence\n // is the user's choice, not an error.\n if (!/local/i.test(msg)) {\n notes.push({ feed: \"store\", message: msg });\n }\n return { entries: [], domains: [], notes };\n }\n}\n\n/** Optional `listDomains` capability — returns `[]` when the source lacks it. */\nasync function loadDomains(source: unknown): Promise<CatalogDomain[]> {\n const fn = (source as { listDomains?: () => Promise<CatalogDomain[]> }).listDomains;\n if (typeof fn !== \"function\") return [];\n const domains = await fn.call(source);\n return Array.isArray(domains) ? domains : [];\n}\n\n/**\n * Project-source feed: leans on `AssetManager.search()`, which now merges\n * `skaile.yaml`'s `sources:` field into the repositories map. Provided as a\n * function rather than an inline call so the caller can supply a fresh\n * `AssetManager` instance.\n */\nfunction sourceAssets(am: { search: () => CatalogEntry[] }): CatalogEntry[] {\n return am.search();\n}\n\n/**\n * Factory-asset feed: scan the bundled first-party `factory-assets` tree(s)\n * resolved by `factoryAssetRoots()` (the `SKAILE_FACTORY_ASSETS_DIR` override\n * layer ahead of the bundled tree). Synchronous, no network — the entries are\n * the built-in skills / connectors / bundles that ship with `@skaile/workspaces`.\n * `factoryAssetRoots()` already dedupes, so the env override pointing at the\n * bundled dir collapses to one root.\n */\nfunction factoryAssets(): { entries: CatalogEntry[]; notes: FeedNote[] } {\n const notes: FeedNote[] = [];\n try {\n const entries: CatalogEntry[] = [];\n for (const root of factoryAssetRoots()) {\n for (const e of scanRepo(root, \"skaile-factory\")) entries.push(e);\n }\n return { entries, notes };\n } catch (err) {\n notes.push({\n feed: \"factory\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], notes };\n }\n}\n\n/** Tag a flat entry list with a single origin. */\nfunction tag(origin: AssetOrigin, entries: CatalogEntry[]): OriginEntry[] {\n return entries.map((entry) => ({ origin, entry }));\n}\n\n/**\n * Run all feeds and return a single normalized result.\n *\n * Feeds run in parallel where possible — the store fetch is the slow one\n * (one HTTP call) and is fired alongside the local library walk. The factory\n * scan is local + synchronous, so it runs inline.\n */\nexport async function gatherAssetFeeds(\n am: { search: () => CatalogEntry[] },\n projectDir: string,\n): Promise<AssetFeedResult> {\n const [libs, store] = await Promise.all([libraryAssets(), storeAssets(projectDir)]);\n const factory = factoryAssets();\n return {\n entries: [\n ...tag(\"source\", sourceAssets(am)),\n ...tag(\"library\", libs.entries),\n ...tag(\"factory\", factory.entries),\n ...tag(\"store\", store.entries),\n ],\n domains: store.domains,\n notes: [...libs.notes, ...store.notes, ...factory.notes],\n };\n}\n"]}
1
+ {"version":3,"sources":["../cli/src/asset-feeds.ts"],"names":[],"mappings":"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","file":"asset-feeds-43JRFICZ.js","sourcesContent":["/**\n * asset-feeds.ts — gather installable assets from every feed the manage TUI\n * surfaces.\n *\n * Four feeds, normalized into `CatalogEntry`:\n * - **Project sources** — `skaile.yaml` `sources:` entries (scanned via\n * `AssetManager.search()`; the new `sources:` field is merged into the\n * legacy repositories map in `AssetManager.loadConfig`).\n * - **Local libraries** — user authoring places from `LocalIndex` (filesystem\n * scan of each library's `path`).\n * - **Factory assets** — the bundled first-party `factory-assets` tree\n * (`factoryAssetRoots()`), scanned from disk. Always present; no network.\n * - **Remote store** — the configured catalog source when `catalog.url` is\n * not `local`. Failures are non-fatal — they surface as notes.\n */\n\nimport { existsSync } from \"node:fs\";\nimport * as path from \"node:path\";\nimport {\n type AssetKind,\n type CatalogDomain,\n type CatalogEntry,\n factoryAssetRoots,\n scanRepo,\n} from \"@skaile/workspaces/core\";\n\n/** One non-fatal note returned to the caller for surfacing in the UI. */\nexport interface FeedNote {\n feed: \"sources\" | \"libraries\" | \"store\" | \"factory\";\n message: string;\n}\n\n/**\n * Which feed an asset came from. This is the top-level grouping axis in the\n * manage TUI (\"where is this skill coming from?\") and is intentionally distinct\n * from `publisher` (asset-intrinsic identity): the same publisher can legitimately\n * appear under more than one origin (e.g. a github repo you added as a `source`\n * that is also listed in the remote `store`).\n */\nexport type AssetOrigin = \"source\" | \"library\" | \"factory\" | \"store\";\n\n/** A catalog entry tagged with the feed it was gathered from. */\nexport interface OriginEntry {\n origin: AssetOrigin;\n entry: CatalogEntry;\n}\n\nexport interface AssetFeedResult {\n entries: OriginEntry[];\n /**\n * Display-only domain metadata, keyed (by the consumer) on `slug`. Populated\n * from the store's `catalog.listDomains` when the connected catalog source\n * exposes it; empty otherwise. The manage TUI joins `entry.domainSlug` → a\n * domain for grouping headers, descriptions, and relation badges.\n */\n domains: CatalogDomain[];\n notes: FeedNote[];\n}\n\n/**\n * Pull assets from local libraries (the authoring places under\n * `~/.skaile/libraries/<name>/`, not the `~/.skaile/sources/` cache). Each\n * library's `path` is scanned with `scanRepo` and tagged with\n * `repository = \"library:<name>\"` so the manage TUI groups them into their\n * own headers.\n */\nasync function libraryAssets(): Promise<{ entries: CatalogEntry[]; notes: FeedNote[] }> {\n const notes: FeedNote[] = [];\n try {\n const [{ openLibraryManager }, { skaileHomeDir }] = await Promise.all([\n import(\"./open-library.ts\"),\n import(\"@skaile/workspaces/library\"),\n ]);\n const { manager, close } = await openLibraryManager();\n try {\n const sourcesDir = path.join(skaileHomeDir(), \"sources\");\n const libs = (await manager.listLibraries()).filter((l) => !l.path.startsWith(sourcesDir));\n const entries: CatalogEntry[] = [];\n for (const lib of libs) {\n if (!existsSync(lib.path)) continue;\n for (const e of scanRepo(lib.path, `library:${lib.name}`)) {\n entries.push(e);\n }\n }\n return { entries, notes };\n } finally {\n close();\n }\n } catch (err) {\n notes.push({\n feed: \"libraries\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], notes };\n }\n}\n\n/**\n * Pull a (best-effort) snapshot of the connected remote store catalog.\n *\n * - Returns no entries when the resolved catalog is local-only or the host\n * is unreachable (the failure becomes a note, not an exception).\n * - Maps `CatalogAsset` → `CatalogEntry`, carrying `publisher`, `repo`, and\n * `category` straight through and using `source = \"store://<id>\"`; per-file\n * `source` paths are not available for remote assets so the canonical ref is\n * a stable placeholder.\n */\nasync function storeAssets(projectDir: string): Promise<{\n entries: CatalogEntry[];\n domains: CatalogDomain[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n const { resolveCatalogSource } = await import(\"./open-library.ts\");\n const { source, close } = await resolveCatalogSource({ projectDir });\n try {\n const assets = await source.listAssets();\n const entries: CatalogEntry[] = assets.map((a) => ({\n name: a.name,\n kind: (a.kind as AssetKind) ?? \"skill\",\n description: a.description ?? \"\",\n source: `store://${a.id}`,\n publisher: a.publisher,\n repo: a.repo,\n domainSlug: a.domainSlug,\n category: a.category,\n version: a.version,\n requires: [],\n dependencies: [],\n }));\n // Domains are optional on the catalog source — only the store backend\n // (post Part 4 `catalog.listDomains`) exposes them. Duck-type the call so\n // older sources and the local catalog degrade to no domains, not an error.\n const domains = await loadDomains(source);\n return { entries, domains, notes };\n } finally {\n close();\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n // Local-only catalog throws a recognizable message — silence it; absence\n // is the user's choice, not an error.\n if (!/local/i.test(msg)) {\n notes.push({ feed: \"store\", message: msg });\n }\n return { entries: [], domains: [], notes };\n }\n}\n\n/** Optional `listDomains` capability — returns `[]` when the source lacks it. */\nasync function loadDomains(source: unknown): Promise<CatalogDomain[]> {\n const fn = (source as { listDomains?: () => Promise<CatalogDomain[]> }).listDomains;\n if (typeof fn !== \"function\") return [];\n const domains = await fn.call(source);\n return Array.isArray(domains) ? domains : [];\n}\n\n/**\n * Project-source feed: leans on `AssetManager.search()`, which now merges\n * `skaile.yaml`'s `sources:` field into the repositories map. Provided as a\n * function rather than an inline call so the caller can supply a fresh\n * `AssetManager` instance.\n */\nfunction sourceAssets(am: { search: () => CatalogEntry[] }): CatalogEntry[] {\n return am.search();\n}\n\n/**\n * Factory-asset feed: scan the bundled first-party `factory-assets` tree(s)\n * resolved by `factoryAssetRoots()` (the `SKAILE_FACTORY_ASSETS_DIR` override\n * layer ahead of the bundled tree). Synchronous, no network — the entries are\n * the built-in skills / connectors / bundles that ship with `@skaile/workspaces`.\n * `factoryAssetRoots()` already dedupes, so the env override pointing at the\n * bundled dir collapses to one root.\n */\nfunction factoryAssets(): { entries: CatalogEntry[]; notes: FeedNote[] } {\n const notes: FeedNote[] = [];\n try {\n const entries: CatalogEntry[] = [];\n for (const root of factoryAssetRoots()) {\n for (const e of scanRepo(root, \"skaile-factory\")) entries.push(e);\n }\n return { entries, notes };\n } catch (err) {\n notes.push({\n feed: \"factory\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], notes };\n }\n}\n\n/** Tag a flat entry list with a single origin. */\nfunction tag(origin: AssetOrigin, entries: CatalogEntry[]): OriginEntry[] {\n return entries.map((entry) => ({ origin, entry }));\n}\n\n/**\n * Run all feeds and return a single normalized result.\n *\n * Feeds run in parallel where possible — the store fetch is the slow one\n * (one HTTP call) and is fired alongside the local library walk. The factory\n * scan is local + synchronous, so it runs inline.\n */\nexport async function gatherAssetFeeds(\n am: { search: () => CatalogEntry[] },\n projectDir: string,\n): Promise<AssetFeedResult> {\n const [libs, store] = await Promise.all([libraryAssets(), storeAssets(projectDir)]);\n const factory = factoryAssets();\n return {\n entries: [\n ...tag(\"source\", sourceAssets(am)),\n ...tag(\"library\", libs.entries),\n ...tag(\"factory\", factory.entries),\n ...tag(\"store\", store.entries),\n ],\n domains: store.domains,\n notes: [...libs.notes, ...store.notes, ...factory.notes],\n };\n}\n"]}
@@ -1,9 +1,9 @@
1
- export { AssetManager, parseCanonicalLockKey } from '../chunk-KZPMBTQL.js';
2
- export { createScaffold, deployAll, installAgent, removeAsset } from '../chunk-FIMEPG6J.js';
3
- import '../chunk-MWEB2TZ7.js';
1
+ export { AssetManager, parseCanonicalLockKey } from '../chunk-SSFS66YX.js';
2
+ export { createScaffold, deployAll, installAgent, removeAsset } from '../chunk-TB342H55.js';
3
+ import '../chunk-MVXXAXDW.js';
4
4
  import '../chunk-ZAP2BDHG.js';
5
- import '../chunk-DUAB2AFV.js';
6
- import '../chunk-2PXSZYKV.js';
5
+ import '../chunk-JAOXG3LL.js';
6
+ import '../chunk-NQDJQ7WB.js';
7
7
  import '../chunk-DZCK7GRW.js';
8
8
  import '../chunk-B5PEERRZ.js';
9
9
  import '../chunk-GEEW6SY2.js';
@@ -13,8 +13,8 @@ import '../chunk-K5GBV4SA.js';
13
13
  import '../chunk-JB35MVBN.js';
14
14
  export { appendHistory, clearHistory, getRecentHistory, loadHistory } from '../chunk-KTBKW2FI.js';
15
15
  import '../chunk-UQ6LFBPZ.js';
16
- export { AGENT_RENDERERS, claudeCodeRenderer, codexRenderer, driverTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-67MFR5LS.js';
17
- import '../chunk-HRKB2ATT.js';
16
+ export { AGENT_RENDERERS, claudeCodeRenderer, codexRenderer, driverTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-3SQYLWSD.js';
17
+ import '../chunk-3CVX7ENC.js';
18
18
  export { BUILT_IN_FRAGMENTS, loadPromptExtensions, resolveFragments } from '../chunk-CGYEHQOX.js';
19
19
  import '../chunk-NSBPE2FW.js';
20
20
  //# sourceMappingURL=index.js.map
@@ -1,8 +1,8 @@
1
- export { createScaffold, deployAll, deployAsset, removeAsset } from '../chunk-FIMEPG6J.js';
2
- import '../chunk-MWEB2TZ7.js';
1
+ export { createScaffold, deployAll, deployAsset, removeAsset } from '../chunk-TB342H55.js';
2
+ import '../chunk-MVXXAXDW.js';
3
3
  import '../chunk-ZAP2BDHG.js';
4
- import '../chunk-DUAB2AFV.js';
5
- import '../chunk-2PXSZYKV.js';
4
+ import '../chunk-JAOXG3LL.js';
5
+ import '../chunk-NQDJQ7WB.js';
6
6
  import '../chunk-DZCK7GRW.js';
7
7
  import '../chunk-B5PEERRZ.js';
8
8
  import '../chunk-GEEW6SY2.js';
@@ -10,8 +10,8 @@ import '../chunk-XGCXFX7X.js';
10
10
  import '../chunk-O4JH3KUE.js';
11
11
  import '../chunk-K5GBV4SA.js';
12
12
  import '../chunk-JB35MVBN.js';
13
- import '../chunk-67MFR5LS.js';
14
- import '../chunk-HRKB2ATT.js';
13
+ import '../chunk-3SQYLWSD.js';
14
+ import '../chunk-3CVX7ENC.js';
15
15
  import '../chunk-CGYEHQOX.js';
16
16
  import '../chunk-NSBPE2FW.js';
17
17
  //# sourceMappingURL=installer.js.map
@@ -1,5 +1,5 @@
1
- export { AGENT_RENDERERS, claudeCodeRenderer, codexRenderer, driverTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-67MFR5LS.js';
2
- import '../chunk-HRKB2ATT.js';
1
+ export { AGENT_RENDERERS, claudeCodeRenderer, codexRenderer, driverTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-3SQYLWSD.js';
2
+ import '../chunk-3CVX7ENC.js';
3
3
  import '../chunk-NSBPE2FW.js';
4
4
  //# sourceMappingURL=renderers.js.map
5
5
  //# sourceMappingURL=renderers.js.map
@@ -68,5 +68,5 @@ async function flowFindFlowForSession(projectDir, runId) {
68
68
  }
69
69
 
70
70
  export { flowFindFlowForSession, flowGetSession, flowList, flowListSessions, flowShow };
71
- //# sourceMappingURL=chunk-XPHQSIFZ.js.map
72
- //# sourceMappingURL=chunk-XPHQSIFZ.js.map
71
+ //# sourceMappingURL=chunk-2JCUYKUN.js.map
72
+ //# sourceMappingURL=chunk-2JCUYKUN.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../workspace-plugin/src/tools/flows.ts"],"names":[],"mappings":";;;;;AAmBA,eAAsB,SAAS,UAAA,EAAyC;AACtE,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,GAAa,iBAAiB,UAAU,CAAA;AAC9C,IAAA,IAAI,CAAC,UAAA,EAAY,OAAO,MAAA,CAAO,EAAE,CAAA;AACjC,IAAA,MAAM,EAAE,YAAA,EAAa,GAAI,MAAM,OAC7B,4CACF,CAAA;AACA,IAAA,MAAM,KAAA,GAAQ,aAAa,UAAU,CAAA;AACrC,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAY;AAAA,MACrC,IAAI,CAAA,CAAE,EAAA;AAAA,MACN,IAAA,EAAM,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,EAAA;AAAA,MAClB,SAAA,EAAW,CAAA,CAAE,KAAA,EAAO,MAAA,IAAU;AAAA,KAChC,CAAE,CAAA;AACF,IAAA,OAAO,OAAO,OAAO,CAAA;AAAA,EACvB,SAAS,CAAA,EAAY;AACnB,IAAA,OAAO,IAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACvD;AACF;AAUA,eAAsB,QAAA,CAAS,YAAoB,MAAA,EAAqC;AACtF,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,GAAa,iBAAiB,UAAU,CAAA;AAC9C,IAAA,IAAI,CAAC,UAAA,EAAY,OAAO,GAAA,CAAI,CAAA,gBAAA,EAAmB,MAAM,CAAA,CAAE,CAAA;AACvD,IAAA,MAAM,EAAE,YAAA,EAAa,GAAI,MAAM,OAC7B,4CACF,CAAA;AACA,IAAA,MAAM,KAAA,GAAQ,aAAa,UAAU,CAAA;AACrC,IAAA,MAAM,OAAO,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAW,CAAA,CAAE,OAAO,MAAM,CAAA;AACnD,IAAA,IAAI,CAAC,IAAA,EAAM,OAAO,GAAA,CAAI,CAAA,gBAAA,EAAmB,MAAM,CAAA,CAAE,CAAA;AACjD,IAAA,OAAO,OAAO,IAAI,CAAA;AAAA,EACpB,SAAS,CAAA,EAAY;AACnB,IAAA,OAAO,IAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACvD;AACF;AAYA,eAAsB,iBAAiB,UAAA,EAAyC;AAC9E,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,eAAA,CAAgB,UAAU,CAAA;AACjD,IAAA,OAAO,OAAO,QAAQ,CAAA;AAAA,EACxB,SAAS,CAAA,EAAY;AACnB,IAAA,OAAO,IAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACvD;AACF;AAUA,eAAsB,cAAA,CAAe,YAAoB,KAAA,EAAoC;AAC3F,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,eAAA,CAAgB,UAAU,CAAA;AACjD,IAAA,MAAM,UAAU,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,KAAK,CAAA;AACtD,IAAA,IAAI,CAAC,OAAA,EAAS,OAAO,GAAA,CAAI,CAAA,mBAAA,EAAsB,KAAK,CAAA,CAAE,CAAA;AACtD,IAAA,OAAO,OAAO,OAAO,CAAA;AAAA,EACvB,SAAS,CAAA,EAAY;AACnB,IAAA,OAAO,IAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACvD;AACF;AAaA,eAAsB,sBAAA,CACpB,YACA,KAAA,EACqB;AACrB,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,eAAA,CAAgB,UAAU,CAAA;AACjD,IAAA,MAAM,UAAU,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,KAAK,CAAA;AACtD,IAAA,IAAI,CAAC,OAAA,EAAS,OAAO,GAAA,CAAI,CAAA,mBAAA,EAAsB,KAAK,CAAA,CAAE,CAAA;AAEtD,IAAA,MAAM,UAAA,GAAa,iBAAiB,UAAU,CAAA;AAC9C,IAAA,IAAI,CAAC,UAAA,EAAY,OAAO,GAAA,CAAI,CAAA,4BAAA,EAA+B,KAAK,CAAA,oBAAA,CAAsB,CAAA;AAEtF,IAAA,MAAM,EAAE,YAAA,EAAa,GAAI,MAAM,OAC7B,4CACF,CAAA;AACA,IAAA,MAAM,KAAA,GAAQ,aAAa,UAAU,CAAA;AACrC,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,CAAC,MAAW,CAAA,CAAE,EAAA,KAAO,QAAQ,MAAM,CAAA;AAC3D,IAAA,IAAI,CAAC,IAAA,EAAM,OAAO,IAAI,CAAA,gBAAA,EAAmB,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AACzD,IAAA,OAAO,OAAO,IAAI,CAAA;AAAA,EACpB,SAAS,CAAA,EAAY;AACnB,IAAA,OAAO,IAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACvD;AACF","file":"chunk-XPHQSIFZ.js","sourcesContent":["// src/tools/flows.ts\n\nimport type { ToolResult } from \"../types.js\";\nimport { err, okJson } from \"../types.js\";\nimport { findAiAssetsRoot } from \"../utils/ai-assets.js\";\nimport { readAllSessions } from \"./sessions.js\";\n\n// ── Flow tools ────────────────────────────────────────────────────────────────\n\n/**\n * List all flow definitions available in the project's `ai-assets` directory.\n *\n * Returns a JSON array of summary objects `{ id, name, nodeCount }`.\n * Returns an empty array when no `ai-assets` root is found.\n *\n * @param projectDir - Absolute path to the skaile project root.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowList(projectDir: string): Promise<ToolResult> {\n try {\n const assetsRoot = findAiAssetsRoot(projectDir);\n if (!assetsRoot) return okJson([]);\n const { loadAllFlows } = await import(\n \"@skaile/workspaces/factory-assets/connectors/flow/engine\"\n );\n const flows = loadAllFlows(assetsRoot);\n const summary = flows.map((f: any) => ({\n id: f.id,\n name: f.name ?? f.id,\n nodeCount: f.nodes?.length ?? 0,\n }));\n return okJson(summary);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Show the full flow definition (nodes, edges, metadata) for a specific flow.\n *\n * @param projectDir - Absolute path to the skaile project root.\n * @param flowId - Flow ID as returned by {@link flowList}.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowShow(projectDir: string, flowId: string): Promise<ToolResult> {\n try {\n const assetsRoot = findAiAssetsRoot(projectDir);\n if (!assetsRoot) return err(`Flow not found: ${flowId}`);\n const { loadAllFlows } = await import(\n \"@skaile/workspaces/factory-assets/connectors/flow/engine\"\n );\n const flows = loadAllFlows(assetsRoot);\n const flow = flows.find((f: any) => f.id === flowId);\n if (!flow) return err(`Flow not found: ${flowId}`);\n return okJson(flow);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * List all past and active flow run sessions for the workspace.\n *\n * Delegates to {@link readAllSessions} (reads `.skaile/sessions/*.json`),\n * sorted newest-first by `updatedAt`.\n *\n * @param projectDir - Absolute path to the skaile project root.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowListSessions(projectDir: string): Promise<ToolResult> {\n try {\n const sessions = await readAllSessions(projectDir);\n return okJson(sessions);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Get driver metadata for a specific flow run session.\n *\n * @param projectDir - Absolute path to the skaile project root.\n * @param runId - Run ID from {@link flowListSessions}.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowGetSession(projectDir: string, runId: string): Promise<ToolResult> {\n try {\n const sessions = await readAllSessions(projectDir);\n const session = sessions.find((s) => s.runId === runId);\n if (!session) return err(`Session not found: ${runId}`);\n return okJson(session);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Resolve and return the flow definition that was used in a past session.\n *\n * Looks up the session by `runId`, reads its `flowId`, then returns the full\n * flow definition from `ai-assets`.\n *\n * @param projectDir - Absolute path to the skaile project root.\n * @param runId - Run ID from {@link flowListSessions}.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowFindFlowForSession(\n projectDir: string,\n runId: string,\n): Promise<ToolResult> {\n try {\n const sessions = await readAllSessions(projectDir);\n const session = sessions.find((s) => s.runId === runId);\n if (!session) return err(`Session not found: ${runId}`);\n\n const assetsRoot = findAiAssetsRoot(projectDir);\n if (!assetsRoot) return err(`Flow not found for session: ${runId} (no ai-assets root)`);\n\n const { loadAllFlows } = await import(\n \"@skaile/workspaces/factory-assets/connectors/flow/engine\"\n );\n const flows = loadAllFlows(assetsRoot);\n const flow = flows.find((f: any) => f.id === session.flowId);\n if (!flow) return err(`Flow not found: ${session.flowId}`);\n return okJson(flow);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n"]}
1
+ {"version":3,"sources":["../workspace-plugin/src/tools/flows.ts"],"names":[],"mappings":"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","file":"chunk-2JCUYKUN.js","sourcesContent":["// src/tools/flows.ts\n\nimport type { ToolResult } from \"../types.js\";\nimport { err, okJson } from \"../types.js\";\nimport { findAiAssetsRoot } from \"../utils/ai-assets.js\";\nimport { readAllSessions } from \"./sessions.js\";\n\n// ── Flow tools ────────────────────────────────────────────────────────────────\n\n/**\n * List all flow definitions available in the project's `ai-assets` directory.\n *\n * Returns a JSON array of summary objects `{ id, name, nodeCount }`.\n * Returns an empty array when no `ai-assets` root is found.\n *\n * @param projectDir - Absolute path to the skaile project root.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowList(projectDir: string): Promise<ToolResult> {\n try {\n const assetsRoot = findAiAssetsRoot(projectDir);\n if (!assetsRoot) return okJson([]);\n const { loadAllFlows } = await import(\n \"@skaile/workspaces/factory-assets/connectors/flow/engine\"\n );\n const flows = loadAllFlows(assetsRoot);\n const summary = flows.map((f: any) => ({\n id: f.id,\n name: f.name ?? f.id,\n nodeCount: f.nodes?.length ?? 0,\n }));\n return okJson(summary);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Show the full flow definition (nodes, edges, metadata) for a specific flow.\n *\n * @param projectDir - Absolute path to the skaile project root.\n * @param flowId - Flow ID as returned by {@link flowList}.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowShow(projectDir: string, flowId: string): Promise<ToolResult> {\n try {\n const assetsRoot = findAiAssetsRoot(projectDir);\n if (!assetsRoot) return err(`Flow not found: ${flowId}`);\n const { loadAllFlows } = await import(\n \"@skaile/workspaces/factory-assets/connectors/flow/engine\"\n );\n const flows = loadAllFlows(assetsRoot);\n const flow = flows.find((f: any) => f.id === flowId);\n if (!flow) return err(`Flow not found: ${flowId}`);\n return okJson(flow);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * List all past and active flow run sessions for the workspace.\n *\n * Delegates to {@link readAllSessions} (reads `.skaile/sessions/*.json`),\n * sorted newest-first by `updatedAt`.\n *\n * @param projectDir - Absolute path to the skaile project root.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowListSessions(projectDir: string): Promise<ToolResult> {\n try {\n const sessions = await readAllSessions(projectDir);\n return okJson(sessions);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Get driver metadata for a specific flow run session.\n *\n * @param projectDir - Absolute path to the skaile project root.\n * @param runId - Run ID from {@link flowListSessions}.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowGetSession(projectDir: string, runId: string): Promise<ToolResult> {\n try {\n const sessions = await readAllSessions(projectDir);\n const session = sessions.find((s) => s.runId === runId);\n if (!session) return err(`Session not found: ${runId}`);\n return okJson(session);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Resolve and return the flow definition that was used in a past session.\n *\n * Looks up the session by `runId`, reads its `flowId`, then returns the full\n * flow definition from `ai-assets`.\n *\n * @param projectDir - Absolute path to the skaile project root.\n * @param runId - Run ID from {@link flowListSessions}.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowFindFlowForSession(\n projectDir: string,\n runId: string,\n): Promise<ToolResult> {\n try {\n const sessions = await readAllSessions(projectDir);\n const session = sessions.find((s) => s.runId === runId);\n if (!session) return err(`Session not found: ${runId}`);\n\n const assetsRoot = findAiAssetsRoot(projectDir);\n if (!assetsRoot) return err(`Flow not found for session: ${runId} (no ai-assets root)`);\n\n const { loadAllFlows } = await import(\n \"@skaile/workspaces/factory-assets/connectors/flow/engine\"\n );\n const flows = loadAllFlows(assetsRoot);\n const flow = flows.find((f: any) => f.id === session.flowId);\n if (!flow) return err(`Flow not found: ${session.flowId}`);\n return okJson(flow);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n"]}
@@ -226,7 +226,10 @@ var McpServerManifestSchema = z.looseObject({
226
226
  name: z.string().min(1),
227
227
  description: z.string().min(1),
228
228
  version: z.union([z.string(), z.number()]).optional(),
229
- transport: z.enum(["stdio", "sse", "streamable-http"]).optional(),
229
+ // "http" is the runtime literal the runner honours (StreamableHTTPClientTransport);
230
+ // "streamable-http" is accepted as an MCP-spec-aligned alias and normalized to
231
+ // "http" in mcpDeclFromCatalogEntry. Keep both until the alias is retired.
232
+ transport: z.enum(["stdio", "sse", "http", "streamable-http"]).optional(),
230
233
  command: z.string().optional(),
231
234
  args: z.array(z.string()).optional(),
232
235
  env: z.record(z.string(), z.string()).optional(),
@@ -356,5 +359,5 @@ function validateByKind(kind, data) {
356
359
  }
357
360
 
358
361
  export { ANTHROPIC_FULL_ID_PATTERN, ANTHROPIC_MODEL_ALIASES, AgentComposeItemSchema, AgentManifestSchema, ArtifactRefSchema, AssetKindSchema, AssetKindValues, BaseFrontmatterSchema, BindingSchema, BindingValues, CommonMetadataSchema, ConnectorManifestSchema, ContractManifestSchema, FieldSchema, FilePrerequisiteSchema, McpServerManifestSchema, ModelIdSchema, MountManifestSchema, PersonaManifestSchema, PlaceholderSchema, PlaceholderTypeSchema, PresetItemSchema, PresetManifestSchema, PromptManifestSchema, RulesetManifestSchema, SkillManifestSchema, UserInputSchema, normalizeAnthropicModel, validateAgent, validateByKind, validateConnector, validateContract, validateManifest, validateMcpServer, validateMount, validatePersona, validatePreset, validatePrompt, validateRuleset, validateSkill };
359
- //# sourceMappingURL=chunk-HRKB2ATT.js.map
360
- //# sourceMappingURL=chunk-HRKB2ATT.js.map
362
+ //# sourceMappingURL=chunk-3CVX7ENC.js.map
363
+ //# sourceMappingURL=chunk-3CVX7ENC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../types/src/manifests/_shared.ts","../types/src/manifests/agent.ts","../types/src/manifests/connector.ts","../types/src/manifests/mount.ts","../types/src/manifests/skill.ts","../types/src/manifests/contract.ts","../types/src/manifests/mcp-server.ts","../types/src/manifests/prompt.ts","../types/src/manifests/persona.ts","../types/src/manifests/preset.ts","../types/src/manifests/ruleset.ts","../types/src/manifests/index.ts"],"names":["z2","z3","z4","z5","z6","z7","z8","z9","z10","z11"],"mappings":"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","file":"chunk-3CVX7ENC.js","sourcesContent":["/**\n * Shared manifest frontmatter schemas and types.\n * Common across all 11 asset kinds + Preset.\n */\nimport * as z from \"zod\";\n\n// ---------------------------------------------------------------------------\n// Asset kind enum\n// ---------------------------------------------------------------------------\n\nexport const AssetKindValues = [\n \"skill\",\n \"agent\",\n \"connector\",\n \"mount\",\n \"flow\",\n \"contract\",\n \"prompt\",\n \"mcp-server\",\n \"knowledge\",\n \"persona\",\n \"ruleset\",\n] as const;\n\nexport const AssetKindSchema = z.enum(AssetKindValues);\nexport type AssetKind = z.infer<typeof AssetKindSchema>;\n\n// ---------------------------------------------------------------------------\n// Shared metadata sub-schemas\n// ---------------------------------------------------------------------------\n\n/** Artifact dependency (requires/produces/consumes in skill metadata). */\nexport const ArtifactRefSchema = z.object({\n id: z.string().min(1),\n description: z.string().optional(),\n gate: z.enum([\"hard\", \"soft\"]).optional(),\n path: z.string().optional(),\n});\n\n/** File prerequisite for a skill. */\nexport const FilePrerequisiteSchema = z.object({\n path: z.string().min(1),\n gate: z.enum([\"hard\", \"soft\"]).optional(),\n description: z.string().optional(),\n});\n\n/** User input definition (for skill user_inputs or metadata.prerequisites.inputs_*). */\nexport const UserInputSchema = z.looseObject({\n key: z.string().min(1).optional(),\n id: z.string().min(1).optional(),\n label: z.string().optional(),\n prompt: z.string().optional(),\n type: z.string().optional(),\n required: z.boolean().optional(),\n options: z.array(z.string()).optional(),\n values: z.array(z.union([z.string(), z.number()])).optional(),\n default: z\n .union([z.string(), z.number(), z.boolean(), z.array(z.union([z.string(), z.number()]))])\n .optional(),\n hint: z.string().optional(),\n});\n\n/** Field definition for connectors/mounts. */\nexport const FieldSchema = z.object({\n key: z.string().min(1),\n label: z.string().optional(),\n required: z.boolean().optional(),\n sensitive: z.boolean().optional(),\n type: z.string().optional(),\n default: z.union([z.string(), z.number(), z.boolean()]).optional(),\n});\n\n// ---------------------------------------------------------------------------\n// Common metadata block (appears inside metadata: in most manifest kinds)\n// ---------------------------------------------------------------------------\n\nexport const CommonMetadataSchema = z.looseObject({\n version: z.string().optional(),\n author: z.string().optional(),\n tags: z.array(z.string()).optional(),\n stage: z.enum([\"alpha\", \"beta\", \"stable\", \"deprecated\"]).optional(),\n source: z.string().optional(),\n do_not_invoke: z.boolean().optional(),\n});\n\n// ---------------------------------------------------------------------------\n// Common frontmatter fields (top-level, shared across kinds)\n// ---------------------------------------------------------------------------\n\n/**\n * Fields that can appear at the top level of any manifest's frontmatter.\n * Not all are required -- each kind schema intersects with its own specifics.\n */\nexport const BaseFrontmatterSchema = z.object({\n name: z.string().min(1),\n description: z.string().min(1),\n version: z.string().optional(),\n\n // Catalog identity (populated at discovery or authoring time)\n publisher: z.string().optional(),\n category: z.string().optional(),\n license: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n});\n\n// ---------------------------------------------------------------------------\n// Validation result type\n// ---------------------------------------------------------------------------\n\nexport interface ManifestValidationSuccess<T> {\n ok: true;\n data: T;\n}\n\nexport interface ManifestValidationFailure {\n ok: false;\n errors: Array<{ path: string; message: string }>;\n}\n\nexport type ManifestValidationResult<T> = ManifestValidationSuccess<T> | ManifestValidationFailure;\n\nexport function validateManifest<T>(\n schema: z.ZodType<T>,\n data: unknown,\n): ManifestValidationResult<T> {\n const result = schema.safeParse(data);\n if (result.success) {\n return { ok: true, data: result.data };\n }\n return {\n ok: false,\n errors: result.error.issues.map((issue) => ({\n path: issue.path.join(\".\"),\n message: issue.message,\n })),\n };\n}\n","import * as z from \"zod\";\nimport { type ManifestValidationResult, validateManifest } from \"./_shared.js\";\n\n// ---------------------------------------------------------------------------\n// Model identifier validation + normalization\n// ---------------------------------------------------------------------------\n\n/**\n * Anthropic model aliases recognized by Claude Code and the Claude Agent SDK.\n *\n * - `inherit` — use the parent agent's model (Claude Code only).\n * - `opus` / `sonnet` / `haiku` — auto-rolling pointer to the current top model\n * in that family. Resolved by Claude Code / the Claude SDK at runtime.\n *\n * Use these in `agent.yaml` `model.preferred` for portability across Claude\n * Code and `claude-sdk`. Use a full ID (see {@link ANTHROPIC_FULL_ID_PATTERN})\n * when you need to pin to a specific Anthropic release.\n */\nexport const ANTHROPIC_MODEL_ALIASES = [\"inherit\", \"opus\", \"sonnet\", \"haiku\"] as const;\nexport type AnthropicModelAlias = (typeof ANTHROPIC_MODEL_ALIASES)[number];\n\n/**\n * Regex matching a full Anthropic model identifier, optionally provider-prefixed.\n *\n * Accepts both the Claude 4+ \"family-first\" form and the legacy \"version-first\"\n * form used by Claude 3.x and some OpenRouter aliases.\n *\n * Examples that match (family-first):\n * - `claude-opus-4-6`\n * - `claude-sonnet-4-5`\n * - `claude-haiku-4-5-20251001`\n * - `anthropic/claude-sonnet-4.6` (OpenRouter form)\n *\n * Examples that match (version-first / legacy):\n * - `claude-3-5-sonnet-20241022`\n * - `anthropic/claude-3.7-sonnet`\n *\n * The version segment requires at least two numeric components separated by\n * `-` or `.`, so partial IDs like `claude-opus-4` (missing minor version) are\n * correctly rejected.\n */\nexport const ANTHROPIC_FULL_ID_PATTERN =\n /^(?:[a-z0-9-]+\\/)?claude-(?:(?:opus|sonnet|haiku)-\\d+(?:[-.]\\d+)+|\\d+(?:[-.]\\d+)+-(?:opus|sonnet|haiku))(?:-\\d{8})?$/;\n\n/**\n * Zod schema accepting either a Claude Code alias or a full Anthropic ID.\n *\n * Anything else fails validation. Use {@link normalizeAnthropicModel} to coerce\n * unrecognized values to a safe alias instead of failing.\n */\nexport const ModelIdSchema = z.union([\n z.enum(ANTHROPIC_MODEL_ALIASES),\n z\n .string()\n .regex(\n ANTHROPIC_FULL_ID_PATTERN,\n \"Invalid Anthropic model ID. Use an alias (opus | sonnet | haiku | inherit) or a full ID (e.g. claude-sonnet-4-6).\",\n ),\n]);\n\n/**\n * Normalize an arbitrary model string to a safe Claude Code value.\n *\n * - If `input` is a recognized alias or full ID, returns it unchanged.\n * - If `input` looks like `claude-<family>-...` but doesn't match the full-ID\n * regex (e.g. the broken `claude-opus-4`), returns the family alias.\n * - Otherwise returns `fallback` (default `\"sonnet\"` — Claude Code's default).\n *\n * Used by renderers that target Claude Code / the Claude SDK to coerce stale\n * or malformed model fields into a working alias rather than propagating a\n * silent runtime failure.\n */\nexport function normalizeAnthropicModel(\n input: string | undefined | null,\n fallback: AnthropicModelAlias = \"sonnet\",\n): string {\n if (!input) return fallback;\n if ((ANTHROPIC_MODEL_ALIASES as readonly string[]).includes(input)) return input;\n if (ANTHROPIC_FULL_ID_PATTERN.test(input)) return input;\n const familyMatch = input.match(/claude-(opus|sonnet|haiku)/i);\n if (familyMatch) return familyMatch[1]!.toLowerCase() as AnthropicModelAlias;\n return fallback;\n}\n\nconst ModelConfigSchema = z.looseObject({\n preferred: ModelIdSchema.optional(),\n fallback: z.array(ModelIdSchema).optional(),\n constraints: z\n .looseObject({\n temperature: z.number().optional(),\n max_tokens: z.number().optional(),\n })\n .optional(),\n});\n\n// ---------------------------------------------------------------------------\n// Composition binding types (Task 1.7)\n// ---------------------------------------------------------------------------\n\nexport const BindingValues = [\"discoverable\", \"inline-live\", \"inline-snapshot\"] as const;\nexport const BindingSchema = z.enum(BindingValues);\nexport type Binding = z.infer<typeof BindingSchema>;\n\n/**\n * A single composition item within an agent's `composes:` field.\n *\n * - `kind`: the asset kind being composed (skill, connector, ruleset, etc.)\n * - `ref`: asset ref (e.g. '@skaile/gmail@^1')\n * - `instance`: optional Library Instance ref to reuse (e.g. 'library://personal/instances/uuid')\n * - `binding`: how the asset integrates into the agent runtime; defaults per-kind\n */\nexport const AgentComposeItemSchema = z.object({\n kind: z.string().min(1),\n ref: z.string().min(1),\n instance: z.string().optional(),\n binding: BindingSchema.optional(),\n});\n\nexport type AgentComposeItem = z.infer<typeof AgentComposeItemSchema>;\n\n// ---------------------------------------------------------------------------\n// Agent manifest\n// ---------------------------------------------------------------------------\n\nexport const AgentManifestSchema = z.looseObject({\n spec_version: z.string().optional(),\n name: z.string().min(1),\n version: z.string().optional(),\n description: z.string().min(1),\n extends: z.string().optional(),\n\n model: ModelConfigSchema.optional(),\n skills: z.array(z.string()).optional(),\n delegation: z.looseObject({ mode: z.string() }).optional(),\n runtime: z\n .looseObject({\n max_turns: z.number().optional(),\n timeout: z.number().optional(),\n })\n .optional(),\n\n author: z.string().optional(),\n license: z.string().optional(),\n tags: z.array(z.string()).optional(),\n keywords: z.array(z.string()).optional(),\n\n // v2 composition (Task 1.7)\n composes: z.array(AgentComposeItemSchema).optional(),\n\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type AgentManifest = z.infer<typeof AgentManifestSchema>;\n\nexport function validateAgent(data: unknown): ManifestValidationResult<AgentManifest> {\n return validateManifest(AgentManifestSchema, data);\n}\n","import * as z from \"zod\";\nimport { FieldSchema, type ManifestValidationResult, validateManifest } from \"./_shared.js\";\n\nexport const ConnectorManifestSchema = z.looseObject({\n name: z.string().min(1),\n description: z.string().min(1),\n version: z.string().optional(),\n entry: z.string().min(1),\n npm_deps: z\n .object({\n required: z.array(z.string()).optional(),\n optional: z.array(z.string()).optional(),\n })\n .optional(),\n fields: z.array(FieldSchema).optional(),\n health_check: z.string().nullable().optional(),\n keywords: z.array(z.string()).optional(),\n license: z.string().optional(),\n});\n\nexport type ConnectorManifest = z.infer<typeof ConnectorManifestSchema>;\n\nexport function validateConnector(data: unknown): ManifestValidationResult<ConnectorManifest> {\n return validateManifest(ConnectorManifestSchema, data);\n}\n","import * as z from \"zod\";\nimport { FieldSchema, type ManifestValidationResult, validateManifest } from \"./_shared.js\";\n\nexport const MountManifestSchema = z.looseObject({\n name: z.string().min(1),\n description: z.string().min(1),\n version: z.string().optional(),\n entry: z.string().min(1),\n fields: z.array(FieldSchema).optional(),\n keywords: z.array(z.string()).optional(),\n license: z.string().optional(),\n});\n\nexport type MountManifest = z.infer<typeof MountManifestSchema>;\n\nexport function validateMount(data: unknown): ManifestValidationResult<MountManifest> {\n return validateManifest(MountManifestSchema, data);\n}\n","import * as z from \"zod\";\nimport {\n ArtifactRefSchema,\n CommonMetadataSchema,\n FilePrerequisiteSchema,\n type ManifestValidationResult,\n UserInputSchema,\n validateManifest,\n} from \"./_shared.js\";\n\nconst SkillMetadataSchema = CommonMetadataSchema.extend({\n parameters: z.record(z.string(), z.unknown()).optional(),\n artifacts: z\n .object({\n requires: z.array(ArtifactRefSchema).optional(),\n produces: z.array(ArtifactRefSchema).optional(),\n consumes: z.array(ArtifactRefSchema).optional(),\n })\n .optional(),\n prerequisites: z\n .object({\n files: z.array(FilePrerequisiteSchema).optional(),\n inputs_required: z.array(UserInputSchema).optional(),\n inputs_optional: z.array(UserInputSchema).optional(),\n // Parsed by the resolver's parseSkillRequirements; Zod would strip them otherwise.\n reads: z.array(z.object({ path: z.string(), description: z.string().optional() })).optional(),\n produces: z\n .array(z.object({ path: z.string(), description: z.string().optional() }))\n .optional(),\n resources: z\n .array(\n z.object({\n id: z.string(),\n operations: z.array(z.string()).optional(),\n optional: z.boolean().optional(),\n description: z.string().optional(),\n }),\n )\n .optional(),\n connectors: z\n .array(\n z.object({\n driver: z.string(),\n access: z.enum([\"read-only\", \"read-write\"]).optional(),\n }),\n )\n .optional(),\n })\n .optional(),\n produces: z.array(z.object({ path: z.string(), description: z.string().optional() })).optional(),\n});\n\nexport const SkillManifestSchema = z.looseObject({\n name: z.string().min(1),\n description: z.string().min(1),\n version: z.string().optional(),\n license: z.string().optional(),\n compatibility: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n\n // Legacy fields (SKILL.md convention)\n source: z.string().optional(),\n user_inputs: z.array(UserInputSchema).optional(),\n reads_from: z.array(z.string()).optional(),\n writes_to: z.array(z.string()).optional(),\n\n metadata: SkillMetadataSchema.optional(),\n});\n\nexport type SkillManifest = z.infer<typeof SkillManifestSchema>;\n\nexport function validateSkill(data: unknown): ManifestValidationResult<SkillManifest> {\n return validateManifest(SkillManifestSchema, data);\n}\n","import * as z from \"zod\";\nimport {\n CommonMetadataSchema,\n type ManifestValidationResult,\n validateManifest,\n} from \"./_shared.js\";\n\nexport const ContractManifestSchema = z.looseObject({\n name: z.string().min(1),\n description: z.string().min(1),\n version: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n license: z.string().optional(),\n metadata: CommonMetadataSchema.optional(),\n});\n\nexport type ContractManifest = z.infer<typeof ContractManifestSchema>;\n\nexport function validateContract(data: unknown): ManifestValidationResult<ContractManifest> {\n return validateManifest(ContractManifestSchema, data);\n}\n","import * as z from \"zod\";\nimport { type ManifestValidationResult, validateManifest } from \"./_shared.js\";\n\nexport const McpServerManifestSchema = z.looseObject({\n name: z.string().min(1),\n description: z.string().min(1),\n version: z.union([z.string(), z.number()]).optional(),\n // \"http\" is the runtime literal the runner honours (StreamableHTTPClientTransport);\n // \"streamable-http\" is accepted as an MCP-spec-aligned alias and normalized to\n // \"http\" in mcpDeclFromCatalogEntry. Keep both until the alias is retired.\n transport: z.enum([\"stdio\", \"sse\", \"http\", \"streamable-http\"]).optional(),\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n env: z.record(z.string(), z.string()).optional(),\n url: z.string().optional(),\n headers: z.record(z.string(), z.string()).optional(),\n keywords: z.array(z.string()).optional(),\n license: z.string().optional(),\n});\n\nexport type McpServerManifest = z.infer<typeof McpServerManifestSchema>;\n\nexport function validateMcpServer(data: unknown): ManifestValidationResult<McpServerManifest> {\n return validateManifest(McpServerManifestSchema, data);\n}\n","import * as z from \"zod\";\nimport {\n CommonMetadataSchema,\n type ManifestValidationResult,\n validateManifest,\n} from \"./_shared.js\";\n\nexport const PromptManifestSchema = z.looseObject({\n name: z.string().min(1),\n description: z.string().min(1),\n version: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n license: z.string().optional(),\n metadata: CommonMetadataSchema.optional(),\n});\n\nexport type PromptManifest = z.infer<typeof PromptManifestSchema>;\n\nexport function validatePrompt(data: unknown): ManifestValidationResult<PromptManifest> {\n return validateManifest(PromptManifestSchema, data);\n}\n","import * as z from \"zod\";\nimport {\n CommonMetadataSchema,\n type ManifestValidationResult,\n validateManifest,\n} from \"./_shared.js\";\n\nexport const PersonaManifestSchema = z.looseObject({\n name: z.string().min(1),\n description: z.string().min(1),\n version: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n license: z.string().optional(),\n metadata: CommonMetadataSchema.optional(),\n});\n\nexport type PersonaManifest = z.infer<typeof PersonaManifestSchema>;\n\nexport function validatePersona(data: unknown): ManifestValidationResult<PersonaManifest> {\n return validateManifest(PersonaManifestSchema, data);\n}\n","/**\n * Polymorphic Preset manifest schema.\n *\n * A Preset is the unified composition + configuration primitive. Items can be:\n * - Asset ref (plain or with inline config + placeholders)\n * - Library Instance ref (`library://tier/instances/id`)\n * - Nested Preset ref (resolved recursively, max depth 3)\n *\n * Apply semantics derive from ref type, not an explicit mode field.\n */\nimport * as z from \"zod\";\nimport { type ManifestValidationResult, validateManifest } from \"./_shared.js\";\n\n// ---------------------------------------------------------------------------\n// Placeholder types\n// ---------------------------------------------------------------------------\n\nconst PlaceholderTypeValues = [\n \"text\",\n \"multiline\",\n \"secret\",\n \"number\",\n \"boolean\",\n \"enum\",\n \"oauth\",\n \"instance-picker\",\n] as const;\n\nexport const PlaceholderTypeSchema = z.enum(PlaceholderTypeValues);\n\nexport const PlaceholderSchema = z.object({\n key: z.string().min(1),\n prompt: z.string().optional(),\n type: PlaceholderTypeSchema.optional(),\n required: z.boolean().optional(),\n default: z.union([z.string(), z.number(), z.boolean()]).optional(),\n values: z.array(z.union([z.string(), z.number()])).optional(),\n});\n\n// ---------------------------------------------------------------------------\n// Compose item (for agents within presets)\n// ---------------------------------------------------------------------------\n\nconst ComposeRefSchema = z.object({\n kind: z.string().min(1),\n ref: z.string().min(1),\n});\n\n// ---------------------------------------------------------------------------\n// Preset item\n// ---------------------------------------------------------------------------\n\nexport const PresetItemSchema = z.looseObject({\n /** Asset ref, Library Instance ref, or nested Preset ref. */\n ref: z.string().min(1),\n /** Local item ID for cross-item references (#item-id). */\n id: z.string().optional(),\n /** Author-prefilled non-secret config values. */\n config: z.record(z.string(), z.unknown()).optional(),\n /** User/secret values prompted at install. */\n placeholders: z.array(PlaceholderSchema).optional(),\n /** How placeholder values fold into the Instance config. */\n materialize: z.record(z.string(), z.string()).optional(),\n /** Composition for agent items. */\n composes: z.array(ComposeRefSchema).optional(),\n /** Outer-Preset-author-supplied placeholder values for nested Presets. */\n inputs: z.record(z.string(), z.unknown()).optional(),\n});\n\n// ---------------------------------------------------------------------------\n// Preset-level input (rare, shared across items)\n// ---------------------------------------------------------------------------\n\nconst PresetInputSchema = z.object({\n key: z.string().min(1),\n type: PlaceholderTypeSchema.optional(),\n prompt: z.string().optional(),\n required: z.boolean().optional(),\n values: z.array(z.union([z.string(), z.number()])).optional(),\n default: z.union([z.string(), z.number(), z.boolean()]).optional(),\n});\n\n// ---------------------------------------------------------------------------\n// Preset manifest\n// ---------------------------------------------------------------------------\n\nexport const PresetManifestSchema = z.looseObject({\n publisher: z.string().optional(),\n name: z.string().min(1),\n version: z.union([z.string(), z.number()]),\n description: z.string().min(1),\n category: z.string().optional(),\n license: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n\n /** 1+ polymorphic items. */\n items: z.array(PresetItemSchema).min(1),\n\n /** Preset-level inputs shared across items (rare). */\n inputs: z.array(PresetInputSchema).optional(),\n});\n\nexport type PresetManifest = z.infer<typeof PresetManifestSchema>;\nexport type PresetItem = z.infer<typeof PresetItemSchema>;\nexport type Placeholder = z.infer<typeof PlaceholderSchema>;\n\nexport function validatePreset(data: unknown): ManifestValidationResult<PresetManifest> {\n return validateManifest(PresetManifestSchema, data);\n}\n","import * as z from \"zod\";\nimport {\n CommonMetadataSchema,\n type ManifestValidationResult,\n validateManifest,\n} from \"./_shared.js\";\n\nexport const RulesetManifestSchema = z.looseObject({\n name: z.string().min(1),\n description: z.string().min(1),\n version: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n license: z.string().optional(),\n metadata: CommonMetadataSchema.optional(),\n});\n\nexport type RulesetManifest = z.infer<typeof RulesetManifestSchema>;\n\nexport function validateRuleset(data: unknown): ManifestValidationResult<RulesetManifest> {\n return validateManifest(RulesetManifestSchema, data);\n}\n","/**\n * Asset manifest schemas for all 11 kinds + Preset.\n *\n * Each kind exports:\n * - <Kind>ManifestSchema (zod)\n * - <Kind>Manifest (type)\n * - validate<Kind>(data) -> ManifestValidationResult\n */\n\nexport type {\n AssetKind,\n ManifestValidationFailure,\n ManifestValidationResult,\n ManifestValidationSuccess,\n} from \"./_shared.js\";\n// Shared\nexport {\n ArtifactRefSchema,\n AssetKindSchema,\n AssetKindValues,\n BaseFrontmatterSchema,\n CommonMetadataSchema,\n FieldSchema,\n FilePrerequisiteSchema,\n UserInputSchema,\n validateManifest,\n} from \"./_shared.js\";\nexport type { AgentComposeItem, AgentManifest, AnthropicModelAlias, Binding } from \"./agent.js\";\nexport {\n AgentComposeItemSchema,\n AgentManifestSchema,\n ANTHROPIC_FULL_ID_PATTERN,\n ANTHROPIC_MODEL_ALIASES,\n BindingSchema,\n BindingValues,\n ModelIdSchema,\n normalizeAnthropicModel,\n validateAgent,\n} from \"./agent.js\";\nexport type { ConnectorManifest } from \"./connector.js\";\nexport { ConnectorManifestSchema, validateConnector } from \"./connector.js\";\nexport type { MountManifest } from \"./mount.js\";\nexport { MountManifestSchema, validateMount } from \"./mount.js\";\nexport type { SkillManifest } from \"./skill.js\";\n// Per-kind\nexport { SkillManifestSchema, validateSkill } from \"./skill.js\";\n\n// NOTE: FlowManifestSchema, FlowManifest, validateFlow live in @skaile/workspaces/factory-assets/connectors/flow/engine.\n// Import from @skaile/workspaces/factory-assets/connectors/flow/engine directly.\n\nexport type { ContractManifest } from \"./contract.js\";\nexport { ContractManifestSchema, validateContract } from \"./contract.js\";\nexport type { McpServerManifest } from \"./mcp-server.js\";\nexport { McpServerManifestSchema, validateMcpServer } from \"./mcp-server.js\";\nexport type { PromptManifest } from \"./prompt.js\";\nexport { PromptManifestSchema, validatePrompt } from \"./prompt.js\";\n\n// NOTE: KnowledgeManifestSchema, KnowledgeManifest, validateKnowledge moved to @skaile/library in 1.7.4.\n// Import from @skaile/library directly.\n\nexport type { PersonaManifest } from \"./persona.js\";\nexport { PersonaManifestSchema, validatePersona } from \"./persona.js\";\nexport type { Placeholder, PresetItem, PresetManifest } from \"./preset.js\";\n// Preset (composition entity, not an asset kind)\nexport {\n PlaceholderSchema,\n PlaceholderTypeSchema,\n PresetItemSchema,\n PresetManifestSchema,\n validatePreset,\n} from \"./preset.js\";\nexport type { RulesetManifest } from \"./ruleset.js\";\nexport { RulesetManifestSchema, validateRuleset } from \"./ruleset.js\";\n\n// ---------------------------------------------------------------------------\n// Kind-to-validator lookup\n// ---------------------------------------------------------------------------\n\nimport type { AssetKind, ManifestValidationResult } from \"./_shared.js\";\nimport { validateAgent } from \"./agent.js\";\nimport { validateConnector } from \"./connector.js\";\nimport { validateContract } from \"./contract.js\";\nimport { validateMcpServer } from \"./mcp-server.js\";\nimport { validateMount } from \"./mount.js\";\nimport { validatePersona } from \"./persona.js\";\nimport { validatePrompt } from \"./prompt.js\";\nimport { validateRuleset } from \"./ruleset.js\";\nimport { validateSkill } from \"./skill.js\";\n\n/**\n * Validators for core kinds that still live in this package.\n * flow: lives in @skaile/workspaces/factory-assets/connectors/flow/engine\n * knowledge: lives in @skaile/library\n *\n * For kinds not in this map, use the IAssetKindRegistry from @skaile/plugins.\n */\nconst validators: Partial<Record<AssetKind, (data: unknown) => ManifestValidationResult<unknown>>> =\n {\n skill: validateSkill,\n agent: validateAgent,\n connector: validateConnector,\n mount: validateMount,\n contract: validateContract,\n prompt: validatePrompt,\n \"mcp-server\": validateMcpServer,\n persona: validatePersona,\n ruleset: validateRuleset,\n };\n\n/**\n * Validate a manifest against the schema for the given asset kind.\n *\n * NOTE: flow validation lives in @skaile/workspaces/factory-assets/connectors/flow/engine. Use the\n * IAssetKindRegistry for kind-agnostic validation that includes all\n * registered providers (including extension kinds).\n */\nexport function validateByKind(kind: AssetKind, data: unknown): ManifestValidationResult<unknown> {\n const validator = validators[kind];\n if (!validator) {\n return { ok: false, errors: [{ path: \"kind\", message: `Unknown asset kind: ${kind}` }] };\n }\n return validator(data);\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { normalizeAnthropicModel } from './chunk-HRKB2ATT.js';
1
+ import { normalizeAnthropicModel } from './chunk-3CVX7ENC.js';
2
2
  import { mkdirSync, writeFileSync } from 'fs';
3
3
  import { join, dirname, relative } from 'path';
4
4
  import { stringify } from 'yaml';
@@ -208,5 +208,5 @@ function driverTargetSupportsAgents(driverTarget) {
208
208
  }
209
209
 
210
210
  export { AGENT_RENDERERS, claudeCodeRenderer, codexRenderer, driverTargetSupportsAgents, ompRenderer, renderAgentToFramework };
211
- //# sourceMappingURL=chunk-67MFR5LS.js.map
212
- //# sourceMappingURL=chunk-67MFR5LS.js.map
211
+ //# sourceMappingURL=chunk-3SQYLWSD.js.map
212
+ //# sourceMappingURL=chunk-3SQYLWSD.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../asset-manager/src/renderers.ts"],"names":["stringifyYaml"],"mappings":"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","file":"chunk-67MFR5LS.js","sourcesContent":["/**\n * Framework-specific renderers for GitAgent packages.\n *\n * Each renderer transforms a parsed GitAgent package (agent.yaml + SOUL.md + RULES.md)\n * into the native file format that the target agent framework natively reads.\n *\n * Only backends with a full bridge driver (runtime execution) are included:\n * claude-code → .claude/agents/<name>.md (YAML frontmatter + markdown body)\n * omp → .omp/agents/<name>/ (directory with agent.yaml + SOUL.md)\n * codex → .codex/agents/<name>.toml (TOML)\n *\n * Removed (no bridge driver): cursor, roo, github-copilot, gemini, amp.\n * Add them back when a bridge driver is implemented.\n */\n\nimport { mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, join, relative } from \"node:path\";\nimport type { AgentManifest } from \"@skaile/workspaces/core\";\nimport { normalizeAnthropicModel } from \"@skaile/workspaces/types/manifests\";\nimport { stringify as stringifyYaml } from \"yaml\";\nimport type { AbilityRef, ContractRef } from \"./fragments.js\";\n\n// ── Types ─────────────────────────────────��───────────────────────────────────\n\nexport type { AgentManifest };\n\n/**\n * All data an {@link AgentRenderer} needs to produce a native agent definition file.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport interface AgentRenderInput {\n /** Parsed `agent.yaml` manifest for the GitAgent being rendered. */\n manifest: AgentManifest;\n /** Raw content of `SOUL.md`, or `null` if absent. */\n soul: string | null;\n /** Raw content of `RULES.md`, or `null` if absent. */\n rules: string | null;\n /** Raw content of `DUTIES.md`, or `null` if absent. */\n duties: string | null;\n /** Agent name used as the output filename and frontmatter `name` field. */\n agentName: string;\n /** Resolved absolute path to the framework's agent deploy directory (e.g. `.claude/agents/`). */\n agentDeployDir: string;\n /** Absolute path to the workspace root. */\n workspaceRoot: string;\n /** Resolved ability refs — installed skills referenced in the `## Installed Abilities` section. */\n abilityRefs: AbilityRef[];\n /** Resolved contract refs — installed in the skills dir, listed in the `## Contracts` section. */\n contractRefs: ContractRef[];\n /** Resolved framework fragment markdown blocks (agent-mode, handoff, skill-discovery, etc.). */\n frameworkFragments: string[];\n /** Per-project prompt extension markdown blocks loaded from `skaile.yaml` `agent.prompt-extensions`. */\n promptExtensions: string[];\n}\n\n/**\n * Result returned by every {@link AgentRenderer}.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport interface AgentRenderResult {\n /** Paths to files/dirs created, relative to `workspaceRoot`. */\n created: string[];\n /** Non-fatal warnings (e.g. experimental feature notices). */\n warnings: string[];\n}\n\n/**\n * A function that transforms an {@link AgentRenderInput} into framework-native agent definition files.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport type AgentRenderer = (input: AgentRenderInput) => AgentRenderResult;\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\n/**\n * Write an agent definition file, always overwriting if it already exists.\n * Agents are compiled artifacts — they must reflect the current canonical source.\n */\nfunction writeAgent(\n filePath: string,\n content: string,\n workspaceRoot: string,\n created: string[],\n): void {\n mkdirSync(dirname(filePath), { recursive: true });\n writeFileSync(filePath, content, \"utf-8\");\n created.push(relative(workspaceRoot, filePath));\n}\n\n/**\n * Build the full agent system prompt body baked into the framework-native agent file.\n *\n * This is the sole source of the agent's system prompt body. Agent identity is rendered at install time; the backend reads it natively at runtime.\n * The rendered output ends up in .claude/agents/<name>.md, .omp/agents/<name>/SOUL.md,\n * .codex/agents/<name>.toml and is read natively by the framework on every agent invocation.\n *\n * Composition order:\n * 1. SOUL.md — agent identity and values (inlined verbatim)\n * 2. Framework fragments — agent-mode, handoff, skill-discovery, connector-usage\n * (conditional; see fragments.ts BUILT_IN_FRAGMENTS)\n * 3. ## Constraints — RULES.md behavioral constraints (inlined)\n * 4. ## Duties — DUTIES.md responsibilities (inlined)\n * 5. ## Installed Abilities — skill name + description, listed as slash commands\n * 6. ## Contracts — relative paths to CONTRACT.md in the skills dir\n * 7. Prompt extensions — per-project markdown from skaile.yaml agent.prompt-extensions\n */\nfunction buildMarkdownBody(\n soul: string | null,\n rules: string | null,\n duties: string | null,\n abilityRefs: AbilityRef[],\n contractRefs: ContractRef[],\n frameworkFragments: string[],\n promptExtensions: string[],\n): string {\n const parts: string[] = [];\n\n if (soul) parts.push(soul.trim());\n for (const fragment of frameworkFragments) parts.push(fragment);\n if (rules) parts.push(`## Constraints\\n\\n${rules.trim()}`);\n if (duties) parts.push(`## Duties\\n\\n${duties.trim()}`);\n\n if (abilityRefs.length > 0) {\n const lines = [\"## Installed Abilities\", \"\"];\n for (const a of abilityRefs) lines.push(`- \\`/${a.name}\\` — ${a.description}`);\n parts.push(lines.join(\"\\n\"));\n }\n\n if (contractRefs.length > 0) {\n const lines = [\n \"## Contracts\",\n \"\",\n \"Read the relevant contract before acting on constrained tasks:\",\n \"\",\n ];\n for (const c of contractRefs) lines.push(`- \\`${c.relativePath}\\``);\n parts.push(lines.join(\"\\n\"));\n }\n\n for (const ext of promptExtensions) parts.push(ext);\n\n return `${parts.join(\"\\n\\n\")}\\n`;\n}\n\n/** Escape a string for use as a TOML multi-line basic string (triple-quote). */\nfunction toTomlMultilineString(s: string): string {\n // Replace \"\"\" with \\\\\"\"\" to avoid breaking the TOML literal\n return s.replace(/\"\"\"/g, '\\\\\"\\\\\"\\\\\"');\n}\n\n// ── Claude Code ────────────��──────────────────────────────────────────────────\n// Format: .claude/agents/<name>.md\n// Sub-agent support: automatic (description-based) + @-mention\n// Required frontmatter: name, description\n//\n// Installation → runtime handoff:\n// skaile install (claudeCodeRenderer) creates the .md file from GitAgent source\n// ClaudeSdkDriver.startQuery() passes options.agent = agentName to the SDK query\n// The SDK reads .claude/agents/<agentName>.md to get model, tools, and system prompt\n// This is equivalent to running: claude --agent <agentName>\n\n/**\n * Render a GitAgent to Claude Code's `.claude/agents/<name>.md` format.\n *\n * Writes YAML frontmatter (name, description, model, tools, maxTurns) followed\n * by the enriched system prompt body. Always overwrites to reflect current source.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const claudeCodeRenderer: AgentRenderer = ({\n manifest,\n soul,\n rules,\n duties,\n agentName,\n agentDeployDir,\n workspaceRoot,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n}) => {\n const created: string[] = [];\n const warnings: string[] = [];\n\n const frontmatter: Record<string, unknown> = {\n name: agentName,\n description: manifest.description ?? `${agentName} agent`,\n };\n\n // Model: map to Claude Code's model field. Accepts aliases (sonnet/opus/haiku/inherit)\n // or a full Anthropic ID. Unrecognized values (e.g. legacy `claude-opus-4`) are\n // coerced to the matching family alias so the agent still loads.\n if (manifest.model?.preferred) {\n const raw = manifest.model.preferred;\n const normalized = normalizeAnthropicModel(raw);\n if (normalized !== raw) {\n warnings.push(\n `agent ${agentName}: model \"${raw}\" is not a valid Claude model ID; normalized to alias \"${normalized}\". Update agent.yaml.`,\n );\n }\n frontmatter.model = normalized;\n }\n\n // Tool restrictions\n if (manifest.tools?.allowed?.length) {\n frontmatter.tools = manifest.tools.allowed.join(\", \");\n }\n if (manifest.tools?.denied?.length) {\n frontmatter.disallowedTools = manifest.tools.denied.join(\", \");\n }\n\n // Runtime\n if (manifest.runtime?.max_turns) {\n frontmatter.maxTurns = manifest.runtime.max_turns;\n }\n\n // Metadata pass-through for Claude Code-specific fields\n if (manifest.metadata?.color) frontmatter.color = manifest.metadata.color;\n if (manifest.metadata?.effort) frontmatter.effort = manifest.metadata.effort;\n if (manifest.metadata?.isolation) frontmatter.isolation = manifest.metadata.isolation;\n\n const body = buildMarkdownBody(\n soul,\n rules,\n duties,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n );\n const content = `---\\n${stringifyYaml(frontmatter).trim()}\\n---\\n\\n${body}`;\n const filePath = join(agentDeployDir, `${agentName}.md`);\n writeAgent(filePath, content, workspaceRoot, created);\n\n return { created, warnings };\n};\n\n// ── OpenAI Codex ──────────────────────────────────────────────────────────────\n// Format: .codex/agents/<name>.toml\n// Sub-agent support: explicit user request only (not automatic)\n// Required fields: name, description, developer_instructions\n\n/**\n * Render a GitAgent to OpenAI Codex's `.codex/agents/<name>.toml` format.\n *\n * Produces a TOML file with `name`, `description`, and `developer_instructions`\n * fields. Triple-quoted TOML multi-line strings are escaped to avoid syntax errors.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const codexRenderer: AgentRenderer = ({\n manifest,\n soul,\n rules,\n duties,\n agentName,\n agentDeployDir,\n workspaceRoot,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n}) => {\n const created: string[] = [];\n const warnings: string[] = [];\n\n const instructions = buildMarkdownBody(\n soul,\n rules,\n duties,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n );\n const escaped = toTomlMultilineString(instructions);\n\n const lines: string[] = [\n `name = ${JSON.stringify(agentName)}`,\n `description = ${JSON.stringify(manifest.description ?? `${agentName} agent`)}`,\n `developer_instructions = \"\"\"`,\n escaped.trim(),\n `\"\"\"`,\n ];\n if (manifest.model?.preferred) {\n lines.splice(2, 0, `model = ${JSON.stringify(manifest.model.preferred)}`);\n }\n\n const content = `${lines.join(\"\\n\")}\\n`;\n const filePath = join(agentDeployDir, `${agentName}.toml`);\n writeAgent(filePath, content, workspaceRoot, created);\n\n // Write the full agent identity as markdown for the Codex driver to read at runtime.\n // The driver combines this with the session's dynamic content (resources, context)\n // and passes the result via model_instructions_file.\n const agentMdPath = join(dirname(agentDeployDir), \"skaile-agent.md\");\n writeAgent(agentMdPath, instructions, workspaceRoot, created);\n\n return { created, warnings };\n};\n\n// ── oh-my-pi ─��────────────��────────────────────────────────��─────────────────\n// Format: .omp/agents/<name>/ (directory with agent.yaml + SOUL.md + RULES.md)\n// oh-my-pi reads GitAgent directories natively via PI_CODING_AGENT_DIR.\n// The renderer copies/enriches the source directory rather than flattening to .md.\n//\n// Installation → runtime handoff:\n// skaile install (ompRenderer) creates .omp/agents/<name>/ from GitAgent source\n// OmpDriver._start() sets env.PI_CODING_AGENT_DIR = agentDir in the child process\n// omp reads SOUL.md/RULES.md/knowledge/ from that directory natively on startup\n//\n// Note: REPL mode can bypass the install step — agentDir can point directly to the\n// GitAgent source directory, and omp will read it natively via PI_CODING_AGENT_DIR.\n// The rendered .omp/agents/ copy is only needed when the source is not accessible\n// from the project cwd (e.g. different repo, remote workspace).\n\n/**\n * Render a GitAgent to oh-my-pi's `.omp/agents/<name>/` directory format.\n *\n * Writes `agent.yaml` (with resolved model/tools/delegation) and an enriched\n * `SOUL.md` that includes fragments and extensions. omp reads this directory\n * natively via the `PI_CODING_AGENT_DIR` environment variable.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const ompRenderer: AgentRenderer = ({\n manifest,\n soul,\n rules,\n duties,\n agentName,\n agentDeployDir,\n workspaceRoot,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n}) => {\n const created: string[] = [];\n const warnings: string[] = [];\n\n const destDir = join(agentDeployDir, agentName);\n mkdirSync(destDir, { recursive: true });\n\n // Write agent.yaml with tools resolved\n const agentYaml: Record<string, unknown> = {\n spec_version: manifest.spec_version ?? \"0.1.0\",\n name: manifest.name ?? agentName,\n version: manifest.version ?? \"1.0.0\",\n description: manifest.description ?? `${agentName} agent`,\n };\n // Pass model through verbatim — omp expects provider-prefixed full IDs and does\n // not understand Claude Code aliases (`opus` / `sonnet` / `haiku`). Invalid IDs\n // are caught upstream by `validateAgent` (ModelIdSchema in @skaile/workspaces/types).\n // Do NOT call `normalizeAnthropicModel` here: it would coerce a bad ID into a\n // Claude alias that omp cannot resolve, masking the failure.\n if (manifest.model) agentYaml.model = manifest.model;\n if (manifest.tools) agentYaml.tools = manifest.tools;\n if (manifest.delegation) agentYaml.delegation = manifest.delegation;\n if (manifest.runtime) agentYaml.runtime = manifest.runtime;\n if (manifest.requires?.length) agentYaml.requires = manifest.requires;\n if (manifest.tags?.length) agentYaml.tags = manifest.tags;\n if (manifest.metadata) agentYaml.metadata = manifest.metadata;\n\n writeFileSync(join(destDir, \"agent.yaml\"), stringifyYaml(agentYaml), \"utf-8\");\n\n // Write SOUL.md (enriched with fragments and extensions, like other renderers)\n const enrichedSoul = buildMarkdownBody(\n soul,\n rules,\n duties,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n );\n writeFileSync(join(destDir, \"SOUL.md\"), enrichedSoul, \"utf-8\");\n\n created.push(relative(workspaceRoot, destDir));\n return { created, warnings };\n};\n\n// ── Renderer registry ──────────────────────────────���──────────────────────────\n\nexport type Log = (msg: string) => void;\nconst noop: Log = () => {};\n\n/**\n * Render an agent to framework-native format via the renderer registry.\n *\n * Shared by both the simple deploy path (`deployAsset`) and the enriched scaffold path (agents layer).\n *\n * @param input - Full render input including manifest, SOUL/RULES text, and resolved refs.\n * @param driverTarget - Agent framework ID to look up in {@link AGENT_RENDERERS}.\n * @param log - Optional logger callback for progress messages.\n * @returns Object with `created` file paths and `warnings` list.\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport function renderAgentToFramework(\n input: AgentRenderInput,\n driverTarget: string,\n log: Log = noop,\n): { created: string[]; warnings: string[] } {\n const renderer = AGENT_RENDERERS[driverTarget];\n if (!renderer) {\n return { created: [], warnings: [`No renderer for framework \"${driverTarget}\"`] };\n }\n const result = renderer(input);\n for (const c of result.created) log(` rendered agent: ${c}`);\n for (const w of result.warnings) log(` warn: ${w}`);\n return result;\n}\n\n/**\n * Registry mapping framework IDs to their {@link AgentRenderer} functions.\n *\n * Only backends with a full bridge driver are registered. Add new entries\n * when a bridge driver is implemented in `workspaces/bridge/src/drivers/`.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const AGENT_RENDERERS: Record<string, AgentRenderer> = {\n \"claude-code\": claudeCodeRenderer,\n omp: ompRenderer,\n codex: codexRenderer,\n};\n\n/**\n * Returns `true` if the given driver target supports file-based sub-agent installation.\n *\n * @param driverTarget - Agent framework ID to check.\n * @returns `true` when `driverTarget` has a registered entry in {@link AGENT_RENDERERS}.\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport function driverTargetSupportsAgents(driverTarget: string): boolean {\n return driverTarget in AGENT_RENDERERS;\n}\n"]}
1
+ {"version":3,"sources":["../asset-manager/src/renderers.ts"],"names":["stringifyYaml"],"mappings":"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","file":"chunk-3SQYLWSD.js","sourcesContent":["/**\n * Framework-specific renderers for GitAgent packages.\n *\n * Each renderer transforms a parsed GitAgent package (agent.yaml + SOUL.md + RULES.md)\n * into the native file format that the target agent framework natively reads.\n *\n * Only backends with a full bridge driver (runtime execution) are included:\n * claude-code → .claude/agents/<name>.md (YAML frontmatter + markdown body)\n * omp → .omp/agents/<name>/ (directory with agent.yaml + SOUL.md)\n * codex → .codex/agents/<name>.toml (TOML)\n *\n * Removed (no bridge driver): cursor, roo, github-copilot, gemini, amp.\n * Add them back when a bridge driver is implemented.\n */\n\nimport { mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, join, relative } from \"node:path\";\nimport type { AgentManifest } from \"@skaile/workspaces/core\";\nimport { normalizeAnthropicModel } from \"@skaile/workspaces/types/manifests\";\nimport { stringify as stringifyYaml } from \"yaml\";\nimport type { AbilityRef, ContractRef } from \"./fragments.js\";\n\n// ── Types ─────────────────────────────────��───────────────────────────────────\n\nexport type { AgentManifest };\n\n/**\n * All data an {@link AgentRenderer} needs to produce a native agent definition file.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport interface AgentRenderInput {\n /** Parsed `agent.yaml` manifest for the GitAgent being rendered. */\n manifest: AgentManifest;\n /** Raw content of `SOUL.md`, or `null` if absent. */\n soul: string | null;\n /** Raw content of `RULES.md`, or `null` if absent. */\n rules: string | null;\n /** Raw content of `DUTIES.md`, or `null` if absent. */\n duties: string | null;\n /** Agent name used as the output filename and frontmatter `name` field. */\n agentName: string;\n /** Resolved absolute path to the framework's agent deploy directory (e.g. `.claude/agents/`). */\n agentDeployDir: string;\n /** Absolute path to the workspace root. */\n workspaceRoot: string;\n /** Resolved ability refs — installed skills referenced in the `## Installed Abilities` section. */\n abilityRefs: AbilityRef[];\n /** Resolved contract refs — installed in the skills dir, listed in the `## Contracts` section. */\n contractRefs: ContractRef[];\n /** Resolved framework fragment markdown blocks (agent-mode, handoff, skill-discovery, etc.). */\n frameworkFragments: string[];\n /** Per-project prompt extension markdown blocks loaded from `skaile.yaml` `agent.prompt-extensions`. */\n promptExtensions: string[];\n}\n\n/**\n * Result returned by every {@link AgentRenderer}.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport interface AgentRenderResult {\n /** Paths to files/dirs created, relative to `workspaceRoot`. */\n created: string[];\n /** Non-fatal warnings (e.g. experimental feature notices). */\n warnings: string[];\n}\n\n/**\n * A function that transforms an {@link AgentRenderInput} into framework-native agent definition files.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport type AgentRenderer = (input: AgentRenderInput) => AgentRenderResult;\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\n/**\n * Write an agent definition file, always overwriting if it already exists.\n * Agents are compiled artifacts — they must reflect the current canonical source.\n */\nfunction writeAgent(\n filePath: string,\n content: string,\n workspaceRoot: string,\n created: string[],\n): void {\n mkdirSync(dirname(filePath), { recursive: true });\n writeFileSync(filePath, content, \"utf-8\");\n created.push(relative(workspaceRoot, filePath));\n}\n\n/**\n * Build the full agent system prompt body baked into the framework-native agent file.\n *\n * This is the sole source of the agent's system prompt body. Agent identity is rendered at install time; the backend reads it natively at runtime.\n * The rendered output ends up in .claude/agents/<name>.md, .omp/agents/<name>/SOUL.md,\n * .codex/agents/<name>.toml and is read natively by the framework on every agent invocation.\n *\n * Composition order:\n * 1. SOUL.md — agent identity and values (inlined verbatim)\n * 2. Framework fragments — agent-mode, handoff, skill-discovery, connector-usage\n * (conditional; see fragments.ts BUILT_IN_FRAGMENTS)\n * 3. ## Constraints — RULES.md behavioral constraints (inlined)\n * 4. ## Duties — DUTIES.md responsibilities (inlined)\n * 5. ## Installed Abilities — skill name + description, listed as slash commands\n * 6. ## Contracts — relative paths to CONTRACT.md in the skills dir\n * 7. Prompt extensions — per-project markdown from skaile.yaml agent.prompt-extensions\n */\nfunction buildMarkdownBody(\n soul: string | null,\n rules: string | null,\n duties: string | null,\n abilityRefs: AbilityRef[],\n contractRefs: ContractRef[],\n frameworkFragments: string[],\n promptExtensions: string[],\n): string {\n const parts: string[] = [];\n\n if (soul) parts.push(soul.trim());\n for (const fragment of frameworkFragments) parts.push(fragment);\n if (rules) parts.push(`## Constraints\\n\\n${rules.trim()}`);\n if (duties) parts.push(`## Duties\\n\\n${duties.trim()}`);\n\n if (abilityRefs.length > 0) {\n const lines = [\"## Installed Abilities\", \"\"];\n for (const a of abilityRefs) lines.push(`- \\`/${a.name}\\` — ${a.description}`);\n parts.push(lines.join(\"\\n\"));\n }\n\n if (contractRefs.length > 0) {\n const lines = [\n \"## Contracts\",\n \"\",\n \"Read the relevant contract before acting on constrained tasks:\",\n \"\",\n ];\n for (const c of contractRefs) lines.push(`- \\`${c.relativePath}\\``);\n parts.push(lines.join(\"\\n\"));\n }\n\n for (const ext of promptExtensions) parts.push(ext);\n\n return `${parts.join(\"\\n\\n\")}\\n`;\n}\n\n/** Escape a string for use as a TOML multi-line basic string (triple-quote). */\nfunction toTomlMultilineString(s: string): string {\n // Replace \"\"\" with \\\\\"\"\" to avoid breaking the TOML literal\n return s.replace(/\"\"\"/g, '\\\\\"\\\\\"\\\\\"');\n}\n\n// ── Claude Code ────────────��──────────────────────────────────────────────────\n// Format: .claude/agents/<name>.md\n// Sub-agent support: automatic (description-based) + @-mention\n// Required frontmatter: name, description\n//\n// Installation → runtime handoff:\n// skaile install (claudeCodeRenderer) creates the .md file from GitAgent source\n// ClaudeSdkDriver.startQuery() passes options.agent = agentName to the SDK query\n// The SDK reads .claude/agents/<agentName>.md to get model, tools, and system prompt\n// This is equivalent to running: claude --agent <agentName>\n\n/**\n * Render a GitAgent to Claude Code's `.claude/agents/<name>.md` format.\n *\n * Writes YAML frontmatter (name, description, model, tools, maxTurns) followed\n * by the enriched system prompt body. Always overwrites to reflect current source.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const claudeCodeRenderer: AgentRenderer = ({\n manifest,\n soul,\n rules,\n duties,\n agentName,\n agentDeployDir,\n workspaceRoot,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n}) => {\n const created: string[] = [];\n const warnings: string[] = [];\n\n const frontmatter: Record<string, unknown> = {\n name: agentName,\n description: manifest.description ?? `${agentName} agent`,\n };\n\n // Model: map to Claude Code's model field. Accepts aliases (sonnet/opus/haiku/inherit)\n // or a full Anthropic ID. Unrecognized values (e.g. legacy `claude-opus-4`) are\n // coerced to the matching family alias so the agent still loads.\n if (manifest.model?.preferred) {\n const raw = manifest.model.preferred;\n const normalized = normalizeAnthropicModel(raw);\n if (normalized !== raw) {\n warnings.push(\n `agent ${agentName}: model \"${raw}\" is not a valid Claude model ID; normalized to alias \"${normalized}\". Update agent.yaml.`,\n );\n }\n frontmatter.model = normalized;\n }\n\n // Tool restrictions\n if (manifest.tools?.allowed?.length) {\n frontmatter.tools = manifest.tools.allowed.join(\", \");\n }\n if (manifest.tools?.denied?.length) {\n frontmatter.disallowedTools = manifest.tools.denied.join(\", \");\n }\n\n // Runtime\n if (manifest.runtime?.max_turns) {\n frontmatter.maxTurns = manifest.runtime.max_turns;\n }\n\n // Metadata pass-through for Claude Code-specific fields\n if (manifest.metadata?.color) frontmatter.color = manifest.metadata.color;\n if (manifest.metadata?.effort) frontmatter.effort = manifest.metadata.effort;\n if (manifest.metadata?.isolation) frontmatter.isolation = manifest.metadata.isolation;\n\n const body = buildMarkdownBody(\n soul,\n rules,\n duties,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n );\n const content = `---\\n${stringifyYaml(frontmatter).trim()}\\n---\\n\\n${body}`;\n const filePath = join(agentDeployDir, `${agentName}.md`);\n writeAgent(filePath, content, workspaceRoot, created);\n\n return { created, warnings };\n};\n\n// ── OpenAI Codex ──────────────────────────────────────────────────────────────\n// Format: .codex/agents/<name>.toml\n// Sub-agent support: explicit user request only (not automatic)\n// Required fields: name, description, developer_instructions\n\n/**\n * Render a GitAgent to OpenAI Codex's `.codex/agents/<name>.toml` format.\n *\n * Produces a TOML file with `name`, `description`, and `developer_instructions`\n * fields. Triple-quoted TOML multi-line strings are escaped to avoid syntax errors.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const codexRenderer: AgentRenderer = ({\n manifest,\n soul,\n rules,\n duties,\n agentName,\n agentDeployDir,\n workspaceRoot,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n}) => {\n const created: string[] = [];\n const warnings: string[] = [];\n\n const instructions = buildMarkdownBody(\n soul,\n rules,\n duties,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n );\n const escaped = toTomlMultilineString(instructions);\n\n const lines: string[] = [\n `name = ${JSON.stringify(agentName)}`,\n `description = ${JSON.stringify(manifest.description ?? `${agentName} agent`)}`,\n `developer_instructions = \"\"\"`,\n escaped.trim(),\n `\"\"\"`,\n ];\n if (manifest.model?.preferred) {\n lines.splice(2, 0, `model = ${JSON.stringify(manifest.model.preferred)}`);\n }\n\n const content = `${lines.join(\"\\n\")}\\n`;\n const filePath = join(agentDeployDir, `${agentName}.toml`);\n writeAgent(filePath, content, workspaceRoot, created);\n\n // Write the full agent identity as markdown for the Codex driver to read at runtime.\n // The driver combines this with the session's dynamic content (resources, context)\n // and passes the result via model_instructions_file.\n const agentMdPath = join(dirname(agentDeployDir), \"skaile-agent.md\");\n writeAgent(agentMdPath, instructions, workspaceRoot, created);\n\n return { created, warnings };\n};\n\n// ── oh-my-pi ─��────────────��────────────────────────────────��─────────────────\n// Format: .omp/agents/<name>/ (directory with agent.yaml + SOUL.md + RULES.md)\n// oh-my-pi reads GitAgent directories natively via PI_CODING_AGENT_DIR.\n// The renderer copies/enriches the source directory rather than flattening to .md.\n//\n// Installation → runtime handoff:\n// skaile install (ompRenderer) creates .omp/agents/<name>/ from GitAgent source\n// OmpDriver._start() sets env.PI_CODING_AGENT_DIR = agentDir in the child process\n// omp reads SOUL.md/RULES.md/knowledge/ from that directory natively on startup\n//\n// Note: REPL mode can bypass the install step — agentDir can point directly to the\n// GitAgent source directory, and omp will read it natively via PI_CODING_AGENT_DIR.\n// The rendered .omp/agents/ copy is only needed when the source is not accessible\n// from the project cwd (e.g. different repo, remote workspace).\n\n/**\n * Render a GitAgent to oh-my-pi's `.omp/agents/<name>/` directory format.\n *\n * Writes `agent.yaml` (with resolved model/tools/delegation) and an enriched\n * `SOUL.md` that includes fragments and extensions. omp reads this directory\n * natively via the `PI_CODING_AGENT_DIR` environment variable.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const ompRenderer: AgentRenderer = ({\n manifest,\n soul,\n rules,\n duties,\n agentName,\n agentDeployDir,\n workspaceRoot,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n}) => {\n const created: string[] = [];\n const warnings: string[] = [];\n\n const destDir = join(agentDeployDir, agentName);\n mkdirSync(destDir, { recursive: true });\n\n // Write agent.yaml with tools resolved\n const agentYaml: Record<string, unknown> = {\n spec_version: manifest.spec_version ?? \"0.1.0\",\n name: manifest.name ?? agentName,\n version: manifest.version ?? \"1.0.0\",\n description: manifest.description ?? `${agentName} agent`,\n };\n // Pass model through verbatim — omp expects provider-prefixed full IDs and does\n // not understand Claude Code aliases (`opus` / `sonnet` / `haiku`). Invalid IDs\n // are caught upstream by `validateAgent` (ModelIdSchema in @skaile/workspaces/types).\n // Do NOT call `normalizeAnthropicModel` here: it would coerce a bad ID into a\n // Claude alias that omp cannot resolve, masking the failure.\n if (manifest.model) agentYaml.model = manifest.model;\n if (manifest.tools) agentYaml.tools = manifest.tools;\n if (manifest.delegation) agentYaml.delegation = manifest.delegation;\n if (manifest.runtime) agentYaml.runtime = manifest.runtime;\n if (manifest.requires?.length) agentYaml.requires = manifest.requires;\n if (manifest.tags?.length) agentYaml.tags = manifest.tags;\n if (manifest.metadata) agentYaml.metadata = manifest.metadata;\n\n writeFileSync(join(destDir, \"agent.yaml\"), stringifyYaml(agentYaml), \"utf-8\");\n\n // Write SOUL.md (enriched with fragments and extensions, like other renderers)\n const enrichedSoul = buildMarkdownBody(\n soul,\n rules,\n duties,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n );\n writeFileSync(join(destDir, \"SOUL.md\"), enrichedSoul, \"utf-8\");\n\n created.push(relative(workspaceRoot, destDir));\n return { created, warnings };\n};\n\n// ── Renderer registry ──────────────────────────────���──────────────────────────\n\nexport type Log = (msg: string) => void;\nconst noop: Log = () => {};\n\n/**\n * Render an agent to framework-native format via the renderer registry.\n *\n * Shared by both the simple deploy path (`deployAsset`) and the enriched scaffold path (agents layer).\n *\n * @param input - Full render input including manifest, SOUL/RULES text, and resolved refs.\n * @param driverTarget - Agent framework ID to look up in {@link AGENT_RENDERERS}.\n * @param log - Optional logger callback for progress messages.\n * @returns Object with `created` file paths and `warnings` list.\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport function renderAgentToFramework(\n input: AgentRenderInput,\n driverTarget: string,\n log: Log = noop,\n): { created: string[]; warnings: string[] } {\n const renderer = AGENT_RENDERERS[driverTarget];\n if (!renderer) {\n return { created: [], warnings: [`No renderer for framework \"${driverTarget}\"`] };\n }\n const result = renderer(input);\n for (const c of result.created) log(` rendered agent: ${c}`);\n for (const w of result.warnings) log(` warn: ${w}`);\n return result;\n}\n\n/**\n * Registry mapping framework IDs to their {@link AgentRenderer} functions.\n *\n * Only backends with a full bridge driver are registered. Add new entries\n * when a bridge driver is implemented in `workspaces/bridge/src/drivers/`.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const AGENT_RENDERERS: Record<string, AgentRenderer> = {\n \"claude-code\": claudeCodeRenderer,\n omp: ompRenderer,\n codex: codexRenderer,\n};\n\n/**\n * Returns `true` if the given driver target supports file-based sub-agent installation.\n *\n * @param driverTarget - Agent framework ID to check.\n * @returns `true` when `driverTarget` has a registered entry in {@link AGENT_RENDERERS}.\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport function driverTargetSupportsAgents(driverTarget: string): boolean {\n return driverTarget in AGENT_RENDERERS;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { WorkspacePlugin } from './chunk-OZVZA64O.js';
1
+ import { WorkspacePlugin } from './chunk-YG3CG6QR.js';
2
2
  import { WebSocketServerTransport } from './chunk-WQ7DE5UC.js';
3
3
  import { assembleSystemPrompt, buildCapabilitiesPromptSection } from './chunk-W3UDISS2.js';
4
4
  import { PROTOCOL_VERSION } from './chunk-TDSRLMDB.js';
@@ -6,12 +6,12 @@ import { EventNormalizer } from './chunk-5IXCNMMU.js';
6
6
  import { classifyClaudeSdkError } from './chunk-GAH4YRCI.js';
7
7
  import { createDriver } from './chunk-KM6DCR7A.js';
8
8
  import { deployCatalogEntry, undeployCatalogEntry } from './chunk-LV2HPH3C.js';
9
- import { registerBuiltinConnectors, buildConnectorPromptSection, findMissingPackages, installNpmPackages, ConnectorManager, ConnectorStartupError, buildSdkConnectorTools } from './chunk-ZFZ2BFQQ.js';
10
- import { loadConnectorDeclarations, SecretProviderChain, PreMintedSecretProvider, InMemorySecretProvider, deriveSingleMaterializedConnectorDeclaration } from './chunk-QGDCLTK2.js';
9
+ import { registerBuiltinConnectors, buildConnectorPromptSection, findMissingPackages, installNpmPackages, ConnectorManager, ConnectorStartupError, buildSdkConnectorTools } from './chunk-Z6DAVEDZ.js';
10
+ import { loadConnectorDeclarations, SecretProviderChain, PreMintedSecretProvider, InMemorySecretProvider, deriveSingleMaterializedConnectorDeclaration } from './chunk-X4FCLBI7.js';
11
11
  import { renderStimulusPrompt, buildOrchestratorPrompt } from './chunk-DEYYRFQU.js';
12
- import { resolveSettings, resolveApiKey, providerEnvKey } from './chunk-MWEB2TZ7.js';
13
- import { resolveRuntimeAssets } from './chunk-DUAB2AFV.js';
14
- import { resolveSkWorkspaceConfig, resolveAgentDir, stageMaterializedSkills, loadMcpServerDeclarations, COMPACTION_DEFAULTS, validateAssetRecipeAttr, deriveSingleMaterializedMcpDeclaration } from './chunk-2PXSZYKV.js';
12
+ import { resolveSettings, resolveApiKey, providerEnvKey } from './chunk-MVXXAXDW.js';
13
+ import { resolveRuntimeAssets } from './chunk-JAOXG3LL.js';
14
+ import { resolveSkWorkspaceConfig, resolveAgentDir, stageMaterializedSkills, loadMcpServerDeclarations, COMPACTION_DEFAULTS, validateAssetRecipeAttr, deriveSingleMaterializedMcpDeclaration } from './chunk-NQDJQ7WB.js';
15
15
  import { parseAssetRef } from './chunk-GEEW6SY2.js';
16
16
  import { resolveDriverPaths } from './chunk-K5GBV4SA.js';
17
17
  import { getLogStore, resolveLogStoreConfig, createLogStoreFromConfig, OnLogBridgeSink, WsLogSink, registerLogStore, resetLogStore, createLogger } from './chunk-JB35MVBN.js';
@@ -5538,5 +5538,5 @@ function touchSession(state) {
5538
5538
  }
5539
5539
 
5540
5540
  export { CLAUDE_CODE_CREDENTIALS_KEY, COMPILE_MANIFEST_FILENAME, CapabilityRegistry, DEFAULT_CAPABILITY_CALL_TIMEOUT_MS, DEFAULT_COALESCE_MS, MarkdownStreamer, PreInitRingSink, agentDefinitionExists, bootstrapCapabilityRegistry, bootstrapRunnerLogStore, buildAgentResources, buildClientCapabilityHandler, buildContextSection, buildEnvironmentSection, buildResourcesAvailablePayload, builtinCapabilities, clearPreInitRingSink, clearSession, compileComposition, computeCapabilitySignature, createAgentSession, createSessionStimulusBus, defineCapability, deleteSession, dispatchRunnerCapabilityInvocation, emitSystemPromptComposed, ensureGitConfigInclude, extractClaudeAiOauthExpiresAt, getPreInitRingSink, handleMountResourceRequest, handleResourceRequest, installPreInitRingSink, listSessions, loadAgentManifest, loadCompileManifest, loadCompileManifestFromDir, loadSession, loadSessionById, mcpAuthSecretKey, newSession, registerCompositionCapabilities, rejectCapabilityOnApprovalDeny, resetRunnerLogStore, resolveAgentComposition, resolveAgentMixins, resolveBinding, resolveCapabilityCallTimeoutMs, resolveCapabilityResult, resolveComposition, resolveMixin, runAgentChat, saveSession, setCurrentSession, startAgentServer, stripStaleHtmlTail, touchSession, writeClaudeCodeCredentialsFile };
5541
- //# sourceMappingURL=chunk-WCFB2EPJ.js.map
5542
- //# sourceMappingURL=chunk-WCFB2EPJ.js.map
5541
+ //# sourceMappingURL=chunk-776SWGPA.js.map
5542
+ //# sourceMappingURL=chunk-776SWGPA.js.map