@skaile/workspaces 4.28.2 → 4.29.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/{asset-feeds-3P3XWCCZ.js → asset-feeds-46K7CTW2.js} +4 -4
- package/dist/{asset-feeds-3P3XWCCZ.js.map → asset-feeds-46K7CTW2.js.map} +1 -1
- package/dist/asset-manager/index.js +1 -1
- package/dist/{chunk-2ZFE2R7S.js → chunk-3LIUBF5P.js} +2 -2
- package/dist/{chunk-2ZFE2R7S.js.map → chunk-3LIUBF5P.js.map} +1 -1
- package/dist/{chunk-LFZEN3XG.js → chunk-6X4DHKHP.js} +3 -3
- package/dist/{chunk-LFZEN3XG.js.map → chunk-6X4DHKHP.js.map} +1 -1
- package/dist/{chunk-7P6OPPG4.js → chunk-7NC3VL6Z.js} +3 -3
- package/dist/{chunk-7P6OPPG4.js.map → chunk-7NC3VL6Z.js.map} +1 -1
- package/dist/{chunk-TFH6Z4KZ.js → chunk-7SLRVWKR.js} +3 -3
- package/dist/{chunk-TFH6Z4KZ.js.map → chunk-7SLRVWKR.js.map} +1 -1
- package/dist/{chunk-AMJSC6SU.js → chunk-C56FCYFU.js} +3 -3
- package/dist/{chunk-AMJSC6SU.js.map → chunk-C56FCYFU.js.map} +1 -1
- package/dist/{chunk-PZL6BEWG.js → chunk-DIQDYNXZ.js} +3 -3
- package/dist/{chunk-PZL6BEWG.js.map → chunk-DIQDYNXZ.js.map} +1 -1
- package/dist/{chunk-RPZ6ZE7S.js → chunk-G3YTK6UI.js} +79 -23
- package/dist/chunk-G3YTK6UI.js.map +1 -0
- package/dist/{chunk-3TZECMBB.js → chunk-GYBCW4S7.js} +6 -6
- package/dist/{chunk-3TZECMBB.js.map → chunk-GYBCW4S7.js.map} +1 -1
- package/dist/{chunk-DQ64NLMC.js → chunk-K3IBZ2UZ.js} +3 -3
- package/dist/{chunk-DQ64NLMC.js.map → chunk-K3IBZ2UZ.js.map} +1 -1
- package/dist/{chunk-FUKJ4IU6.js → chunk-LIEOC4JE.js} +34 -15
- package/dist/chunk-LIEOC4JE.js.map +1 -0
- package/dist/{chunk-Y42A2ZBB.js → chunk-NGQVRFQJ.js} +4 -4
- package/dist/{chunk-Y42A2ZBB.js.map → chunk-NGQVRFQJ.js.map} +1 -1
- package/dist/{chunk-KPRZHEEI.js → chunk-ORH2BZEM.js} +155 -85
- package/dist/chunk-ORH2BZEM.js.map +1 -0
- package/dist/{chunk-I4C4AHZB.js → chunk-PJY4J37J.js} +3 -3
- package/dist/{chunk-I4C4AHZB.js.map → chunk-PJY4J37J.js.map} +1 -1
- package/dist/{chunk-YU2CVP3M.js → chunk-SZEICOXM.js} +6 -6
- package/dist/{chunk-YU2CVP3M.js.map → chunk-SZEICOXM.js.map} +1 -1
- package/dist/{chunk-BGSM22L6.js → chunk-T57M3SST.js} +6 -6
- package/dist/{chunk-BGSM22L6.js.map → chunk-T57M3SST.js.map} +1 -1
- package/dist/{chunk-ULLMVMAN.js → chunk-UDFWBALP.js} +3 -3
- package/dist/{chunk-ULLMVMAN.js.map → chunk-UDFWBALP.js.map} +1 -1
- package/dist/{chunk-YNJRENVU.js → chunk-UQ3JFN4N.js} +2 -2
- package/dist/{chunk-YNJRENVU.js.map → chunk-UQ3JFN4N.js.map} +1 -1
- package/dist/{chunk-YO654LTQ.js → chunk-YVWUHPQW.js} +43 -66
- package/dist/chunk-YVWUHPQW.js.map +1 -0
- package/dist/{chunk-2MD6TJWZ.js → chunk-YYH5EVPM.js} +3 -3
- package/dist/{chunk-2MD6TJWZ.js.map → chunk-YYH5EVPM.js.map} +1 -1
- package/dist/{chunk-LZRA54EP.js → chunk-ZKX5KY2K.js} +2 -2
- package/dist/{chunk-LZRA54EP.js.map → chunk-ZKX5KY2K.js.map} +1 -1
- package/dist/cli/index.js +37 -37
- package/dist/connectors/index.js +7 -7
- package/dist/{ensure-sources-3NKAGEBJ.js → ensure-sources-HH4CCGY5.js} +4 -4
- package/dist/{ensure-sources-3NKAGEBJ.js.map → ensure-sources-HH4CCGY5.js.map} +1 -1
- package/dist/factory-assets/connectors/box.js +7 -7
- package/dist/factory-assets/connectors/deploy.js +7 -7
- package/dist/factory-assets/connectors/devserver.js +7 -7
- package/dist/factory-assets/connectors/flow/CONNECTOR.md +6 -2
- package/dist/factory-assets/connectors/flow/adapter.js +7 -7
- package/dist/factory-assets/connectors/flow/contract/index.d.ts +1 -1
- package/dist/factory-assets/connectors/flow/contract/index.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/contract/output-fields.d.ts +28 -0
- package/dist/factory-assets/connectors/flow/contract/output-fields.d.ts.map +1 -0
- package/dist/factory-assets/connectors/flow/contract/schema.d.ts +5 -0
- package/dist/factory-assets/connectors/flow/contract/schema.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/contract.js +4 -4
- package/dist/factory-assets/connectors/flow/engine/output-schema.d.ts +2 -7
- package/dist/factory-assets/connectors/flow/engine/output-schema.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/engine.js +4 -4
- package/dist/factory-assets/connectors/flow/prompt-fragments.js +3 -3
- package/dist/factory-assets/connectors/flow/run-flow.js +8 -8
- package/dist/factory-assets/connectors/flow.js +7 -7
- package/dist/factory-assets/connectors/git/CONNECTOR.md +2 -0
- package/dist/factory-assets/connectors/git/driver.d.ts +3 -2
- package/dist/factory-assets/connectors/git/driver.d.ts.map +1 -1
- package/dist/factory-assets/connectors/git.js +7 -7
- package/dist/factory-assets/connectors/gmail.js +7 -7
- package/dist/factory-assets/connectors/googledrive.js +7 -7
- package/dist/factory-assets/connectors/local.js +7 -7
- package/dist/factory-assets/connectors/mattermost.js +7 -7
- package/dist/factory-assets/connectors/memory.js +7 -7
- package/dist/factory-assets/connectors/minio.js +7 -7
- package/dist/factory-assets/connectors/postgres.js +7 -7
- package/dist/factory-assets/connectors/s3.js +7 -7
- package/dist/factory-assets/connectors/sharepoint.js +7 -7
- package/dist/factory-assets/connectors/sqlite.js +7 -7
- package/dist/factory-assets/connectors/static-server.js +7 -7
- package/dist/factory-assets/connectors/tunnel.js +7 -7
- package/dist/factory-assets/connectors/webdav.js +7 -7
- package/dist/factory-assets/connectors/xstate-store.js +7 -7
- package/dist/factory-assets/connectors/xstate.js +7 -7
- package/dist/{flows-4X6PVPPH.js → flows-6WUQ2J4X.js} +3 -3
- package/dist/{flows-4X6PVPPH.js.map → flows-6WUQ2J4X.js.map} +1 -1
- package/dist/{helpers-WHBQSVBQ.js → helpers-BKOX66EA.js} +4 -4
- package/dist/{helpers-WHBQSVBQ.js.map → helpers-BKOX66EA.js.map} +1 -1
- package/dist/{library-publish-4APUZRJV.js → library-publish-PCY3ULAA.js} +10 -10
- package/dist/{library-publish-4APUZRJV.js.map → library-publish-PCY3ULAA.js.map} +1 -1
- package/dist/{open-library-QTC5PH7Y.js → open-library-R73XWQNW.js} +9 -9
- package/dist/{open-library-QTC5PH7Y.js.map → open-library-R73XWQNW.js.map} +1 -1
- package/dist/{project-3K6VBQIV.js → project-7RHUAYUZ.js} +5 -5
- package/dist/{project-3K6VBQIV.js.map → project-7RHUAYUZ.js.map} +1 -1
- package/dist/runner/index.js +13 -13
- package/dist/runner/src/pending-turns.d.ts +28 -0
- package/dist/runner/src/pending-turns.d.ts.map +1 -0
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +1 -1
- package/dist/sdk/flow.js +4 -4
- package/dist/sdk/index.js +13 -13
- package/dist/sdk/runner.js +13 -13
- package/dist/{setup-K37IWBVQ.js → setup-MYJDFOCG.js} +5 -5
- package/dist/{setup-K37IWBVQ.js.map → setup-MYJDFOCG.js.map} +1 -1
- package/dist/{source-DMSYJIY6.js → source-SKGXVE7I.js} +10 -10
- package/dist/{source-DMSYJIY6.js.map → source-SKGXVE7I.js.map} +1 -1
- package/dist/{source-manifest-publish-VJSEWCG7.js → source-manifest-publish-QSZRNMSM.js} +11 -11
- package/dist/{source-manifest-publish-VJSEWCG7.js.map → source-manifest-publish-QSZRNMSM.js.map} +1 -1
- package/dist/tui/index.js +13 -13
- package/dist/workspace-plugin/adapters/mcp.js +2 -2
- package/dist/workspace-plugin/adapters/omp.js +3 -3
- package/dist/workspace-plugin/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-FUKJ4IU6.js.map +0 -1
- package/dist/chunk-KPRZHEEI.js.map +0 -1
- package/dist/chunk-RPZ6ZE7S.js.map +0 -1
- package/dist/chunk-YO654LTQ.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { logErr } from './chunk-
|
|
2
|
-
import { flowKindProvider } from './chunk-
|
|
1
|
+
import { logErr } from './chunk-7SLRVWKR.js';
|
|
2
|
+
import { flowKindProvider } from './chunk-YVWUHPQW.js';
|
|
3
3
|
import { knowledgeKindProvider } from './chunk-UFWADBG6.js';
|
|
4
4
|
import { createDefaultRegistry } from './chunk-HGPSZXZP.js';
|
|
5
5
|
|
|
@@ -103,5 +103,5 @@ async function openLibraryManager() {
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
export { LocalCatalogDisabledError, createFullRegistry, openCatalogSource, openLibrary, openLibraryManager, resolveCatalogSource };
|
|
106
|
-
//# sourceMappingURL=chunk-
|
|
107
|
-
//# sourceMappingURL=chunk-
|
|
106
|
+
//# sourceMappingURL=chunk-NGQVRFQJ.js.map
|
|
107
|
+
//# sourceMappingURL=chunk-NGQVRFQJ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../cli/src/open-registry.ts","../cli/src/open-library.ts"],"names":["source"],"mappings":"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","file":"chunk-Y42A2ZBB.js","sourcesContent":["/**\n * open-registry.ts — shared helper to create a full AssetKindRegistry.\n *\n * Bootstraps the registry with all built-in providers (9 core + preset)\n * from @skaile/discovery, plus the extension kind providers (flow from\n * @skaile/workspaces/factory-assets/connectors/flow/engine, knowledge from @skaile/library).\n *\n * This is the single registration point for the CLI. All code paths\n * that need a registry (source sync, lib-status, etc.) should use this.\n */\n\nimport type { AssetKindRegistry } from \"@skaile/workspaces/discovery\";\nimport { createDefaultRegistry } from \"@skaile/workspaces/discovery\";\nimport { flowKindProvider } from \"@skaile/workspaces/factory-assets/connectors/flow/engine\";\nimport { knowledgeKindProvider } from \"@skaile/workspaces/library\";\n\n/**\n * Create a fully-configured AssetKindRegistry with all known providers.\n *\n * Registers:\n * - 9 core kinds (skill, agent, connector, mount, mcp-server, contract, prompt, persona, ruleset)\n * - preset (composition entity)\n * - flow (extension, from @skaile/workspaces/factory-assets/connectors/flow/engine)\n * - knowledge (extension, from @skaile/library)\n *\n * @returns An unfrozen registry (auto-freezes on first read)\n */\nexport function createFullRegistry(): AssetKindRegistry {\n const registry = createDefaultRegistry();\n registry.register(flowKindProvider);\n registry.register(knowledgeKindProvider);\n return registry;\n}\n","/**\n * open-library.ts — shared helpers to open the LocalIndex and the configured\n * Catalog source.\n *\n * Lazy-loads the `@skaile/workspaces/library` subpath and returns the\n * LocalIndex instance (backed by `@libsql/client`; runs on Node and Bun).\n * The catalog-source helper reads\n * `~/.skaile/config.yaml` (and project-level overlay if `projectDir` is given)\n * to decide between {@link RemoteCatalogSource} (default — points at\n * `https://skaile.store`) and a {@link LocalCatalogSource} bound to the most\n * recent local library registered via `skaile source add`.\n */\n\nimport { logErr } from \"./helpers.ts\";\nimport { createFullRegistry } from \"./open-registry.ts\";\n\n/** Thrown by {@link openCatalogSource} when `catalog.url` is the `local` sentinel. */\nexport class LocalCatalogDisabledError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"LocalCatalogDisabledError\";\n }\n}\n\n/**\n * Open the LocalIndex with the full kind registry. Exits with code 1\n * if the library directory cannot be created.\n *\n * @returns A `LocalIndex` instance ready for use.\n * @docLink cli/dev-guide#open-library\n */\nexport async function openLibrary() {\n try {\n const { LocalIndex } = await import(\"@skaile/workspaces/library\");\n return new LocalIndex({ kindRegistry: createFullRegistry() });\n } catch (err) {\n logErr(`Could not open LocalIndex: ${err instanceof Error ? err.message : String(err)}`);\n process.exit(1);\n }\n}\n\n/**\n * Resolve the configured **remote** Catalog source for the CLI.\n *\n * Reads `~/.skaile/config.yaml` (plus the optional project-level overlay) and\n * returns a {@link RemoteCatalogSource} pointing at `catalog.url` (default:\n * `https://skaile.store`). The `cache_ttl: 0` config flag flips the source\n * into air-gapped mode: network reads are disabled, only `skaile update`\n * performs refreshes.\n *\n * **Local-mode rejection.** If the resolved config has `catalog.url: local`\n * this helper throws — callers wanting the dispatched local-or-remote source\n * must use {@link resolveCatalogSource}. Remote-only consumers like\n * `skaile update --catalog-only` rely on this strict behaviour.\n *\n * @param opts - Project directory (overlays project config) and explicit overrides.\n * @returns A configured {@link RemoteCatalogSource}.\n * @throws When `catalog.url` is the `local` sentinel.\n * @docLink cli/dev-guide#open-library\n */\nexport async function openCatalogSource(opts?: {\n projectDir?: string;\n baseUrlOverride?: string;\n /** Override the user-config path for tests. */\n userConfigFile?: string;\n}): Promise<\n | import(\"@skaile/workspaces/library\").RemoteCatalogSource\n | import(\"@skaile/workspaces/library\").RestCatalogSource\n> {\n const { resolveConfig, RemoteCatalogSource, RestCatalogSource, isLocalCatalogUrl } = await import(\n \"@skaile/workspaces/library\"\n );\n const cfg = resolveConfig({\n projectDir: opts?.projectDir,\n userConfigFile: opts?.userConfigFile,\n });\n const baseUrl = opts?.baseUrlOverride ?? cfg.catalog.url;\n if (isLocalCatalogUrl(baseUrl)) {\n throw new LocalCatalogDisabledError(\n \"catalog.url is set to 'local' — remote catalog is disabled. \" +\n \"Use `skaile source add <path>` + `skaile source sync` for local sources, \" +\n \"or set `catalog.url: https://skaile.store` in ~/.skaile/config.yaml.\",\n );\n }\n const cacheTtlMs = cfg.catalog.cache_ttl * 1000;\n if (cfg.catalog.framing === \"rest\") {\n return new RestCatalogSource({ baseUrl, cacheTtlMs });\n }\n return new RemoteCatalogSource({ baseUrl, cacheTtlMs });\n}\n\n/**\n * Resolved catalog source plus a close handle for releasing any underlying\n * resources (e.g. the `LocalIndex` SQLite connection in local mode).\n *\n * Callers MUST invoke `close()` when done — typically in a `finally` block.\n * For remote-mode sources `close()` is a no-op, but the contract is uniform\n * so consumers don't have to branch.\n *\n * @docLink cli/dev-guide#open-library\n */\nexport interface ResolvedCatalogSource {\n /** The {@link ICatalogSource} ready for use. */\n source: import(\"@skaile/workspaces/library\").ICatalogSource;\n /** Release any underlying resources (SQLite handle in local mode). */\n close(): void;\n}\n\n/**\n * Resolve the configured Catalog source — local or remote — based on\n * `~/.skaile/config.yaml`.\n *\n * Dispatch:\n * - `catalog.url: local` → opens {@link LocalIndex}, picks the most recently\n * registered local library whose `path` still exists on disk, and returns a\n * {@link LocalCatalogSource} bound to that library. Throws if no usable\n * local library is registered.\n * - any URL → returns {@link RemoteCatalogSource} (same as\n * {@link openCatalogSource}).\n *\n * The returned `close()` releases the underlying `LocalIndex` SQLite handle\n * in local mode (no-op in remote mode). Callers MUST invoke it — typically in\n * a `finally` block — to satisfy `library/CLAUDE.md` § \"Notes for Consumers\".\n *\n * @param opts - Project directory (overlays project config) and explicit overrides.\n * @returns A `ResolvedCatalogSource` carrying the source and a close handle.\n * @throws When `local` is configured but no usable local library is registered.\n * @docLink cli/dev-guide#open-library\n */\nexport async function resolveCatalogSource(opts?: {\n projectDir?: string;\n baseUrlOverride?: string;\n /** Override the user-config path for tests. */\n userConfigFile?: string;\n}): Promise<ResolvedCatalogSource> {\n const {\n resolveConfig,\n RemoteCatalogSource,\n RestCatalogSource,\n LocalCatalogSource,\n isLocalCatalogUrl,\n } = await import(\"@skaile/workspaces/library\");\n const cfg = resolveConfig({\n projectDir: opts?.projectDir,\n userConfigFile: opts?.userConfigFile,\n });\n const baseUrl = opts?.baseUrlOverride ?? cfg.catalog.url;\n\n if (isLocalCatalogUrl(baseUrl)) {\n const fs = await import(\"node:fs\");\n const library = await openLibrary();\n try {\n const sources = await library.listSources();\n type LibraryRow = (typeof sources)[number];\n // Type-narrow: `path` is required for local libraries after the filter.\n const usable = sources\n .filter(\n (s): s is LibraryRow & { path: string } =>\n s.backend === \"local\" && typeof s.path === \"string\" && s.path.length > 0,\n )\n .sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());\n\n if (usable.length === 0) {\n throw new Error(\n \"catalog.url is set to 'local' but no local library is registered. \" +\n \"Run `skaile source add <path>` first, then `skaile source sync`.\",\n );\n }\n\n // Prefer the most recently added library whose path still exists.\n const present = usable.find((s) => fs.existsSync(s.path));\n if (!present) {\n const head = usable[0];\n throw new Error(\n `catalog.url is set to 'local' but every registered local library has a missing path on disk. ` +\n `Most recent: ${head.path} (library ${head.id}). ` +\n `Re-register with \\`skaile source add <existing-path>\\` or run \\`skaile source list\\` to inspect.`,\n );\n }\n\n const source = new LocalCatalogSource(\n library,\n present.id,\n present.path,\n createFullRegistry(),\n );\n return { source, close: () => library.close() };\n } catch (err) {\n // Release the handle on any failure during dispatch — otherwise the\n // SQLite WAL state leaks for the lifetime of the process.\n library.close();\n throw err;\n }\n }\n\n const cacheTtlMs = cfg.catalog.cache_ttl * 1000;\n const source =\n cfg.catalog.framing === \"rest\"\n ? new RestCatalogSource({ baseUrl, cacheTtlMs })\n : new RemoteCatalogSource({ baseUrl, cacheTtlMs });\n return { source, close: () => {} };\n}\n\n/**\n * Open the LibraryManager bound to the active LocalIndex.\n * Caller owns lifetime — must call `close()` (returned helper closes the\n * underlying LocalIndex).\n *\n * @docLink cli/dev-guide#open-library\n */\nexport async function openLibraryManager(): Promise<{\n manager: import(\"@skaile/workspaces/library\").LibraryManager;\n library: import(\"@skaile/workspaces/library\").LocalIndex;\n close: () => void;\n}> {\n const { LibraryManager } = await import(\"@skaile/workspaces/library\");\n const library = await openLibrary();\n const manager = new LibraryManager(library);\n return { manager, library, close: () => library.close() };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../cli/src/open-registry.ts","../cli/src/open-library.ts"],"names":["source"],"mappings":"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","file":"chunk-NGQVRFQJ.js","sourcesContent":["/**\n * open-registry.ts — shared helper to create a full AssetKindRegistry.\n *\n * Bootstraps the registry with all built-in providers (9 core + preset)\n * from @skaile/discovery, plus the extension kind providers (flow from\n * @skaile/workspaces/factory-assets/connectors/flow/engine, knowledge from @skaile/library).\n *\n * This is the single registration point for the CLI. All code paths\n * that need a registry (source sync, lib-status, etc.) should use this.\n */\n\nimport type { AssetKindRegistry } from \"@skaile/workspaces/discovery\";\nimport { createDefaultRegistry } from \"@skaile/workspaces/discovery\";\nimport { flowKindProvider } from \"@skaile/workspaces/factory-assets/connectors/flow/engine\";\nimport { knowledgeKindProvider } from \"@skaile/workspaces/library\";\n\n/**\n * Create a fully-configured AssetKindRegistry with all known providers.\n *\n * Registers:\n * - 9 core kinds (skill, agent, connector, mount, mcp-server, contract, prompt, persona, ruleset)\n * - preset (composition entity)\n * - flow (extension, from @skaile/workspaces/factory-assets/connectors/flow/engine)\n * - knowledge (extension, from @skaile/library)\n *\n * @returns An unfrozen registry (auto-freezes on first read)\n */\nexport function createFullRegistry(): AssetKindRegistry {\n const registry = createDefaultRegistry();\n registry.register(flowKindProvider);\n registry.register(knowledgeKindProvider);\n return registry;\n}\n","/**\n * open-library.ts — shared helpers to open the LocalIndex and the configured\n * Catalog source.\n *\n * Lazy-loads the `@skaile/workspaces/library` subpath and returns the\n * LocalIndex instance (backed by `@libsql/client`; runs on Node and Bun).\n * The catalog-source helper reads\n * `~/.skaile/config.yaml` (and project-level overlay if `projectDir` is given)\n * to decide between {@link RemoteCatalogSource} (default — points at\n * `https://skaile.store`) and a {@link LocalCatalogSource} bound to the most\n * recent local library registered via `skaile source add`.\n */\n\nimport { logErr } from \"./helpers.ts\";\nimport { createFullRegistry } from \"./open-registry.ts\";\n\n/** Thrown by {@link openCatalogSource} when `catalog.url` is the `local` sentinel. */\nexport class LocalCatalogDisabledError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"LocalCatalogDisabledError\";\n }\n}\n\n/**\n * Open the LocalIndex with the full kind registry. Exits with code 1\n * if the library directory cannot be created.\n *\n * @returns A `LocalIndex` instance ready for use.\n * @docLink cli/dev-guide#open-library\n */\nexport async function openLibrary() {\n try {\n const { LocalIndex } = await import(\"@skaile/workspaces/library\");\n return new LocalIndex({ kindRegistry: createFullRegistry() });\n } catch (err) {\n logErr(`Could not open LocalIndex: ${err instanceof Error ? err.message : String(err)}`);\n process.exit(1);\n }\n}\n\n/**\n * Resolve the configured **remote** Catalog source for the CLI.\n *\n * Reads `~/.skaile/config.yaml` (plus the optional project-level overlay) and\n * returns a {@link RemoteCatalogSource} pointing at `catalog.url` (default:\n * `https://skaile.store`). The `cache_ttl: 0` config flag flips the source\n * into air-gapped mode: network reads are disabled, only `skaile update`\n * performs refreshes.\n *\n * **Local-mode rejection.** If the resolved config has `catalog.url: local`\n * this helper throws — callers wanting the dispatched local-or-remote source\n * must use {@link resolveCatalogSource}. Remote-only consumers like\n * `skaile update --catalog-only` rely on this strict behaviour.\n *\n * @param opts - Project directory (overlays project config) and explicit overrides.\n * @returns A configured {@link RemoteCatalogSource}.\n * @throws When `catalog.url` is the `local` sentinel.\n * @docLink cli/dev-guide#open-library\n */\nexport async function openCatalogSource(opts?: {\n projectDir?: string;\n baseUrlOverride?: string;\n /** Override the user-config path for tests. */\n userConfigFile?: string;\n}): Promise<\n | import(\"@skaile/workspaces/library\").RemoteCatalogSource\n | import(\"@skaile/workspaces/library\").RestCatalogSource\n> {\n const { resolveConfig, RemoteCatalogSource, RestCatalogSource, isLocalCatalogUrl } = await import(\n \"@skaile/workspaces/library\"\n );\n const cfg = resolveConfig({\n projectDir: opts?.projectDir,\n userConfigFile: opts?.userConfigFile,\n });\n const baseUrl = opts?.baseUrlOverride ?? cfg.catalog.url;\n if (isLocalCatalogUrl(baseUrl)) {\n throw new LocalCatalogDisabledError(\n \"catalog.url is set to 'local' — remote catalog is disabled. \" +\n \"Use `skaile source add <path>` + `skaile source sync` for local sources, \" +\n \"or set `catalog.url: https://skaile.store` in ~/.skaile/config.yaml.\",\n );\n }\n const cacheTtlMs = cfg.catalog.cache_ttl * 1000;\n if (cfg.catalog.framing === \"rest\") {\n return new RestCatalogSource({ baseUrl, cacheTtlMs });\n }\n return new RemoteCatalogSource({ baseUrl, cacheTtlMs });\n}\n\n/**\n * Resolved catalog source plus a close handle for releasing any underlying\n * resources (e.g. the `LocalIndex` SQLite connection in local mode).\n *\n * Callers MUST invoke `close()` when done — typically in a `finally` block.\n * For remote-mode sources `close()` is a no-op, but the contract is uniform\n * so consumers don't have to branch.\n *\n * @docLink cli/dev-guide#open-library\n */\nexport interface ResolvedCatalogSource {\n /** The {@link ICatalogSource} ready for use. */\n source: import(\"@skaile/workspaces/library\").ICatalogSource;\n /** Release any underlying resources (SQLite handle in local mode). */\n close(): void;\n}\n\n/**\n * Resolve the configured Catalog source — local or remote — based on\n * `~/.skaile/config.yaml`.\n *\n * Dispatch:\n * - `catalog.url: local` → opens {@link LocalIndex}, picks the most recently\n * registered local library whose `path` still exists on disk, and returns a\n * {@link LocalCatalogSource} bound to that library. Throws if no usable\n * local library is registered.\n * - any URL → returns {@link RemoteCatalogSource} (same as\n * {@link openCatalogSource}).\n *\n * The returned `close()` releases the underlying `LocalIndex` SQLite handle\n * in local mode (no-op in remote mode). Callers MUST invoke it — typically in\n * a `finally` block — to satisfy `library/CLAUDE.md` § \"Notes for Consumers\".\n *\n * @param opts - Project directory (overlays project config) and explicit overrides.\n * @returns A `ResolvedCatalogSource` carrying the source and a close handle.\n * @throws When `local` is configured but no usable local library is registered.\n * @docLink cli/dev-guide#open-library\n */\nexport async function resolveCatalogSource(opts?: {\n projectDir?: string;\n baseUrlOverride?: string;\n /** Override the user-config path for tests. */\n userConfigFile?: string;\n}): Promise<ResolvedCatalogSource> {\n const {\n resolveConfig,\n RemoteCatalogSource,\n RestCatalogSource,\n LocalCatalogSource,\n isLocalCatalogUrl,\n } = await import(\"@skaile/workspaces/library\");\n const cfg = resolveConfig({\n projectDir: opts?.projectDir,\n userConfigFile: opts?.userConfigFile,\n });\n const baseUrl = opts?.baseUrlOverride ?? cfg.catalog.url;\n\n if (isLocalCatalogUrl(baseUrl)) {\n const fs = await import(\"node:fs\");\n const library = await openLibrary();\n try {\n const sources = await library.listSources();\n type LibraryRow = (typeof sources)[number];\n // Type-narrow: `path` is required for local libraries after the filter.\n const usable = sources\n .filter(\n (s): s is LibraryRow & { path: string } =>\n s.backend === \"local\" && typeof s.path === \"string\" && s.path.length > 0,\n )\n .sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());\n\n if (usable.length === 0) {\n throw new Error(\n \"catalog.url is set to 'local' but no local library is registered. \" +\n \"Run `skaile source add <path>` first, then `skaile source sync`.\",\n );\n }\n\n // Prefer the most recently added library whose path still exists.\n const present = usable.find((s) => fs.existsSync(s.path));\n if (!present) {\n const head = usable[0];\n throw new Error(\n `catalog.url is set to 'local' but every registered local library has a missing path on disk. ` +\n `Most recent: ${head.path} (library ${head.id}). ` +\n `Re-register with \\`skaile source add <existing-path>\\` or run \\`skaile source list\\` to inspect.`,\n );\n }\n\n const source = new LocalCatalogSource(\n library,\n present.id,\n present.path,\n createFullRegistry(),\n );\n return { source, close: () => library.close() };\n } catch (err) {\n // Release the handle on any failure during dispatch — otherwise the\n // SQLite WAL state leaks for the lifetime of the process.\n library.close();\n throw err;\n }\n }\n\n const cacheTtlMs = cfg.catalog.cache_ttl * 1000;\n const source =\n cfg.catalog.framing === \"rest\"\n ? new RestCatalogSource({ baseUrl, cacheTtlMs })\n : new RemoteCatalogSource({ baseUrl, cacheTtlMs });\n return { source, close: () => {} };\n}\n\n/**\n * Open the LibraryManager bound to the active LocalIndex.\n * Caller owns lifetime — must call `close()` (returned helper closes the\n * underlying LocalIndex).\n *\n * @docLink cli/dev-guide#open-library\n */\nexport async function openLibraryManager(): Promise<{\n manager: import(\"@skaile/workspaces/library\").LibraryManager;\n library: import(\"@skaile/workspaces/library\").LocalIndex;\n close: () => void;\n}> {\n const { LibraryManager } = await import(\"@skaile/workspaces/library\");\n const library = await openLibrary();\n const manager = new LibraryManager(library);\n return { manager, library, close: () => library.close() };\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as z2 from 'zod';
|
|
2
2
|
|
|
3
3
|
// factory-assets/connectors/flow/contract/classifier.ts
|
|
4
4
|
var RESERVED_CLASSIFIER_FIELDS = ["confidence", "calibrated"];
|
|
@@ -798,15 +798,44 @@ function resolveFlowBindings(bindings, context, nodeOutputOrigin = {}, flowInput
|
|
|
798
798
|
}
|
|
799
799
|
return { values, origins };
|
|
800
800
|
}
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
801
|
+
function consumerExpressions(node) {
|
|
802
|
+
const expressions = (node.contract?.requires ?? []).map(({ expr }) => expr);
|
|
803
|
+
expressions.push(...collectFlowBindingExpressions(node.contract?.input));
|
|
804
|
+
if (node.run?.kind === "router") {
|
|
805
|
+
expressions.push(...node.run.routes.map(({ when }) => when));
|
|
806
|
+
}
|
|
807
|
+
return expressions;
|
|
808
|
+
}
|
|
809
|
+
function readsProducerOutput(node, producerId) {
|
|
810
|
+
return consumerExpressions(node).some(
|
|
811
|
+
(expression) => inspectFlowExpression(expression, false).some(
|
|
812
|
+
({ path }) => path.startsWith(`nodes.${producerId}.output.fields.`)
|
|
813
|
+
)
|
|
814
|
+
);
|
|
815
|
+
}
|
|
816
|
+
function getConsumedOutputSchema(flow, producerId) {
|
|
817
|
+
const producer = flow.nodes.find(({ id }) => id === producerId);
|
|
818
|
+
const schema = producer?.contract?.output?.fields;
|
|
819
|
+
if (!schema) return void 0;
|
|
820
|
+
return flow.nodes.some(
|
|
821
|
+
(consumer) => consumer.id !== producerId && readsProducerOutput(consumer, producerId)
|
|
822
|
+
) ? schema : void 0;
|
|
823
|
+
}
|
|
824
|
+
function compileOutputFieldsSchema(schema) {
|
|
825
|
+
return z2.fromJSONSchema(schema);
|
|
826
|
+
}
|
|
827
|
+
function invalidOutputFieldsSchemaMessage(error) {
|
|
828
|
+
return `invalid authored JSON Schema: ${error instanceof Error ? error.message : String(error)}`;
|
|
829
|
+
}
|
|
830
|
+
var jsonValue = () => z2.json();
|
|
831
|
+
var nonEmptyString = z2.string().min(1);
|
|
832
|
+
var flowAssetIdentity = z2.string().regex(
|
|
804
833
|
/^[a-z0-9]+(?:-[a-z0-9]+)*$/,
|
|
805
834
|
"Flow identity must be lowercase kebab-case without path separators"
|
|
806
835
|
);
|
|
807
|
-
var jsonSchema =
|
|
808
|
-
var bindingName =
|
|
809
|
-
var nodeBindings =
|
|
836
|
+
var jsonSchema = z2.record(z2.string(), jsonValue());
|
|
837
|
+
var bindingName = z2.string().regex(FLOW_BINDING_NAME_PATTERN, "Binding name is reserved");
|
|
838
|
+
var nodeBindings = z2.preprocess(
|
|
810
839
|
(value, context) => {
|
|
811
840
|
if (typeof value === "object" && value !== null) {
|
|
812
841
|
for (const key of Object.keys(value)) {
|
|
@@ -817,7 +846,7 @@ var nodeBindings = z.preprocess(
|
|
|
817
846
|
}
|
|
818
847
|
return value;
|
|
819
848
|
},
|
|
820
|
-
|
|
849
|
+
z2.record(bindingName, jsonValue())
|
|
821
850
|
);
|
|
822
851
|
var MISSING_FIELD = /* @__PURE__ */ Symbol("missing-field");
|
|
823
852
|
function declaredFieldSchema(schema, path) {
|
|
@@ -832,7 +861,7 @@ function declaredFieldSchema(schema, path) {
|
|
|
832
861
|
}
|
|
833
862
|
return current;
|
|
834
863
|
}
|
|
835
|
-
var FlowInputContractSchema =
|
|
864
|
+
var FlowInputContractSchema = z2.strictObject({
|
|
836
865
|
schema: jsonSchema,
|
|
837
866
|
example: jsonValue().optional(),
|
|
838
867
|
labelField: nonEmptyString.optional()
|
|
@@ -847,45 +876,45 @@ var FlowInputContractSchema = z.strictObject({
|
|
|
847
876
|
});
|
|
848
877
|
}
|
|
849
878
|
});
|
|
850
|
-
var FlowOutputContractSchema =
|
|
879
|
+
var FlowOutputContractSchema = z2.strictObject({
|
|
851
880
|
schema: jsonSchema
|
|
852
881
|
});
|
|
853
|
-
var PreconditionSchema =
|
|
882
|
+
var PreconditionSchema = z2.strictObject({
|
|
854
883
|
expr: nonEmptyString,
|
|
855
884
|
message: nonEmptyString.optional()
|
|
856
885
|
});
|
|
857
|
-
var ArtifactContractSchema =
|
|
886
|
+
var ArtifactContractSchema = z2.strictObject({
|
|
858
887
|
kind: nonEmptyString,
|
|
859
|
-
lifetime:
|
|
888
|
+
lifetime: z2.enum(["session", "persistent"])
|
|
860
889
|
});
|
|
861
|
-
var NodeOutputContractSchema =
|
|
890
|
+
var NodeOutputContractSchema = z2.strictObject({
|
|
862
891
|
fields: jsonSchema.optional(),
|
|
863
|
-
artifacts:
|
|
892
|
+
artifacts: z2.array(ArtifactContractSchema).optional()
|
|
864
893
|
});
|
|
865
|
-
var NodeContractSchema =
|
|
866
|
-
requires:
|
|
894
|
+
var NodeContractSchema = z2.strictObject({
|
|
895
|
+
requires: z2.array(PreconditionSchema).optional(),
|
|
867
896
|
input: nodeBindings.optional(),
|
|
868
897
|
output: NodeOutputContractSchema.optional()
|
|
869
898
|
});
|
|
870
|
-
var NodeGateSchema =
|
|
871
|
-
approval:
|
|
899
|
+
var NodeGateSchema = z2.strictObject({
|
|
900
|
+
approval: z2.enum(["none", "optional", "mandatory"])
|
|
872
901
|
});
|
|
873
|
-
var NodeControlSchema =
|
|
874
|
-
optional:
|
|
875
|
-
retries:
|
|
876
|
-
timeoutSec:
|
|
902
|
+
var NodeControlSchema = z2.strictObject({
|
|
903
|
+
optional: z2.boolean().optional(),
|
|
904
|
+
retries: z2.number().int().min(0).optional(),
|
|
905
|
+
timeoutSec: z2.number().positive().optional(),
|
|
877
906
|
parallelGroup: nonEmptyString.optional()
|
|
878
907
|
});
|
|
879
|
-
var runAssets = { assets:
|
|
880
|
-
var modelTier =
|
|
881
|
-
var AgentRunSchema =
|
|
882
|
-
kind:
|
|
908
|
+
var runAssets = { assets: z2.array(nonEmptyString).optional() };
|
|
909
|
+
var modelTier = z2.enum(["small", "default", "deep"]);
|
|
910
|
+
var AgentRunSchema = z2.strictObject({
|
|
911
|
+
kind: z2.literal("agent"),
|
|
883
912
|
instruction: nonEmptyString,
|
|
884
913
|
model: modelTier.optional(),
|
|
885
914
|
...runAssets
|
|
886
915
|
});
|
|
887
|
-
var SubpromptRunSchema =
|
|
888
|
-
kind:
|
|
916
|
+
var SubpromptRunSchema = z2.strictObject({
|
|
917
|
+
kind: z2.literal("subprompt"),
|
|
889
918
|
instruction: nonEmptyString,
|
|
890
919
|
model: modelTier.optional(),
|
|
891
920
|
...runAssets
|
|
@@ -899,73 +928,77 @@ function invalidCaptureDestinationMessage(kind, nodeId, channel, destination) {
|
|
|
899
928
|
const kindLabel = kind === "check" ? "Check" : "Function";
|
|
900
929
|
return `${kindLabel} node ${nodeId} run.capture.${channel} destination "${destination}" is invalid; expected fields.<name>`;
|
|
901
930
|
}
|
|
931
|
+
function duplicateCaptureDestinationMessage(kind, nodeId, fieldName) {
|
|
932
|
+
const kindLabel = kind === "check" ? "Check" : "Function";
|
|
933
|
+
return `${kindLabel} node ${nodeId} run.capture.stdout and run.capture.stderr both write fields.${fieldName}; stderr would overwrite stdout, so capture them into different fields`;
|
|
934
|
+
}
|
|
902
935
|
var deterministicRun = {
|
|
903
|
-
runtime:
|
|
936
|
+
runtime: z2.enum(["shell", "node", "python"]).optional(),
|
|
904
937
|
command: nonEmptyString,
|
|
905
938
|
cwd: nonEmptyString.optional(),
|
|
906
|
-
successExit:
|
|
907
|
-
capture:
|
|
939
|
+
successExit: z2.array(z2.number().int()).optional(),
|
|
940
|
+
capture: z2.strictObject({ stdout: nonEmptyString.optional(), stderr: nonEmptyString.optional() }).optional(),
|
|
908
941
|
...runAssets
|
|
909
942
|
};
|
|
910
|
-
var FunctionRunSchema =
|
|
911
|
-
kind:
|
|
943
|
+
var FunctionRunSchema = z2.strictObject({
|
|
944
|
+
kind: z2.literal("function"),
|
|
912
945
|
...deterministicRun
|
|
913
946
|
});
|
|
914
|
-
var CheckRunSchema =
|
|
915
|
-
kind:
|
|
916
|
-
onFail:
|
|
947
|
+
var CheckRunSchema = z2.strictObject({
|
|
948
|
+
kind: z2.literal("check"),
|
|
949
|
+
onFail: z2.enum(["escalate", "fail"]).default("escalate"),
|
|
917
950
|
...deterministicRun
|
|
918
951
|
});
|
|
919
|
-
var InputChoiceSchema =
|
|
952
|
+
var InputChoiceSchema = z2.strictObject({
|
|
920
953
|
id: nonEmptyString,
|
|
921
954
|
label: nonEmptyString,
|
|
922
955
|
description: nonEmptyString.optional()
|
|
923
956
|
});
|
|
924
|
-
var FormFieldSchema =
|
|
957
|
+
var FormFieldSchema = z2.strictObject({
|
|
925
958
|
id: nonEmptyString,
|
|
926
959
|
label: nonEmptyString,
|
|
927
|
-
type:
|
|
928
|
-
required:
|
|
929
|
-
options:
|
|
930
|
-
accept:
|
|
960
|
+
type: z2.enum(["text", "textarea", "number", "choice", "file", "date", "boolean"]),
|
|
961
|
+
required: z2.boolean().optional(),
|
|
962
|
+
options: z2.array(InputChoiceSchema).optional(),
|
|
963
|
+
accept: z2.array(nonEmptyString).optional()
|
|
931
964
|
});
|
|
932
|
-
var InputSchema =
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
kind:
|
|
936
|
-
options:
|
|
937
|
-
multiple:
|
|
965
|
+
var InputSchema = z2.discriminatedUnion("kind", [
|
|
966
|
+
z2.strictObject({ kind: z2.literal("text"), multiline: z2.boolean().optional() }),
|
|
967
|
+
z2.strictObject({
|
|
968
|
+
kind: z2.literal("choice"),
|
|
969
|
+
options: z2.array(InputChoiceSchema).min(1),
|
|
970
|
+
multiple: z2.boolean().optional()
|
|
938
971
|
}),
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
kind:
|
|
942
|
-
accept:
|
|
943
|
-
maxSize:
|
|
944
|
-
multiple:
|
|
972
|
+
z2.strictObject({ kind: z2.literal("form"), fields: z2.array(FormFieldSchema) }),
|
|
973
|
+
z2.strictObject({
|
|
974
|
+
kind: z2.literal("file"),
|
|
975
|
+
accept: z2.array(nonEmptyString).optional(),
|
|
976
|
+
maxSize: z2.number().positive().optional(),
|
|
977
|
+
multiple: z2.boolean().optional()
|
|
945
978
|
})
|
|
946
979
|
]);
|
|
947
|
-
var GateRunSchema =
|
|
948
|
-
kind:
|
|
980
|
+
var GateRunSchema = z2.strictObject({
|
|
981
|
+
kind: z2.literal("gate"),
|
|
949
982
|
prompt: nonEmptyString,
|
|
950
983
|
schema: InputSchema,
|
|
951
984
|
...runAssets
|
|
952
985
|
});
|
|
953
|
-
var RouteSchema =
|
|
986
|
+
var RouteSchema = z2.strictObject({
|
|
954
987
|
when: nonEmptyString,
|
|
955
988
|
target: nonEmptyString.nullable()
|
|
956
989
|
});
|
|
957
|
-
var RouterRunSchema =
|
|
958
|
-
kind:
|
|
959
|
-
routes:
|
|
990
|
+
var RouterRunSchema = z2.strictObject({
|
|
991
|
+
kind: z2.literal("router"),
|
|
992
|
+
routes: z2.array(RouteSchema).min(1),
|
|
960
993
|
...runAssets
|
|
961
994
|
});
|
|
962
|
-
var SubFlowRunSchema =
|
|
963
|
-
kind:
|
|
995
|
+
var SubFlowRunSchema = z2.strictObject({
|
|
996
|
+
kind: z2.literal("sub-flow"),
|
|
964
997
|
flow: flowAssetIdentity,
|
|
965
|
-
passContext:
|
|
998
|
+
passContext: z2.boolean().optional(),
|
|
966
999
|
...runAssets
|
|
967
1000
|
});
|
|
968
|
-
var RunSchema =
|
|
1001
|
+
var RunSchema = z2.discriminatedUnion("kind", [
|
|
969
1002
|
AgentRunSchema,
|
|
970
1003
|
SubpromptRunSchema,
|
|
971
1004
|
FunctionRunSchema,
|
|
@@ -974,7 +1007,7 @@ var RunSchema = z.discriminatedUnion("kind", [
|
|
|
974
1007
|
RouterRunSchema,
|
|
975
1008
|
SubFlowRunSchema
|
|
976
1009
|
]);
|
|
977
|
-
var NodeSchema =
|
|
1010
|
+
var NodeSchema = z2.strictObject({
|
|
978
1011
|
id: nonEmptyString,
|
|
979
1012
|
label: nonEmptyString,
|
|
980
1013
|
description: nonEmptyString,
|
|
@@ -984,35 +1017,35 @@ var NodeSchema = z.strictObject({
|
|
|
984
1017
|
gate: NodeGateSchema.optional(),
|
|
985
1018
|
control: NodeControlSchema.optional()
|
|
986
1019
|
});
|
|
987
|
-
var EdgeSchema =
|
|
1020
|
+
var EdgeSchema = z2.strictObject({
|
|
988
1021
|
id: nonEmptyString,
|
|
989
1022
|
source: nonEmptyString,
|
|
990
1023
|
target: nonEmptyString,
|
|
991
|
-
type:
|
|
1024
|
+
type: z2.enum(["flow", "parallel", "optional"])
|
|
992
1025
|
});
|
|
993
|
-
var FlowDefaultsSchema =
|
|
994
|
-
approval:
|
|
1026
|
+
var FlowDefaultsSchema = z2.strictObject({
|
|
1027
|
+
approval: z2.enum(["checkpoint", "auto", "manual"]).optional(),
|
|
995
1028
|
researchDepth: nonEmptyString.optional(),
|
|
996
|
-
autoReview:
|
|
1029
|
+
autoReview: z2.boolean().optional(),
|
|
997
1030
|
verbosity: nonEmptyString.optional(),
|
|
998
|
-
cliMode:
|
|
1031
|
+
cliMode: z2.boolean().optional(),
|
|
999
1032
|
run_input: jsonValue().optional(),
|
|
1000
|
-
parameters:
|
|
1033
|
+
parameters: z2.record(z2.string(), jsonValue()).optional()
|
|
1001
1034
|
});
|
|
1002
|
-
var FlowMetaSchema =
|
|
1035
|
+
var FlowMetaSchema = z2.strictObject({
|
|
1003
1036
|
icon: nonEmptyString.optional(),
|
|
1004
1037
|
category: nonEmptyString.optional(),
|
|
1005
|
-
tags:
|
|
1038
|
+
tags: z2.array(nonEmptyString).optional(),
|
|
1006
1039
|
stage: nonEmptyString.optional(),
|
|
1007
|
-
onboarding:
|
|
1008
|
-
input_style:
|
|
1040
|
+
onboarding: z2.strictObject({
|
|
1041
|
+
input_style: z2.enum(["freeform", "structured", "repo"]),
|
|
1009
1042
|
placeholder: nonEmptyString.optional(),
|
|
1010
|
-
fields:
|
|
1043
|
+
fields: z2.array(nonEmptyString).optional()
|
|
1011
1044
|
}).optional()
|
|
1012
1045
|
});
|
|
1013
|
-
var FlowDefinitionObjectSchema =
|
|
1046
|
+
var FlowDefinitionObjectSchema = z2.strictObject({
|
|
1014
1047
|
$schema: nonEmptyString.optional(),
|
|
1015
|
-
schemaVersion:
|
|
1048
|
+
schemaVersion: z2.literal(2),
|
|
1016
1049
|
id: nonEmptyString,
|
|
1017
1050
|
version: nonEmptyString,
|
|
1018
1051
|
name: nonEmptyString,
|
|
@@ -1021,8 +1054,8 @@ var FlowDefinitionObjectSchema = z.strictObject({
|
|
|
1021
1054
|
output: FlowOutputContractSchema.optional(),
|
|
1022
1055
|
defaults: FlowDefaultsSchema.optional(),
|
|
1023
1056
|
entry: nonEmptyString.optional(),
|
|
1024
|
-
nodes:
|
|
1025
|
-
edges:
|
|
1057
|
+
nodes: z2.array(NodeSchema),
|
|
1058
|
+
edges: z2.array(EdgeSchema),
|
|
1026
1059
|
meta: FlowMetaSchema.optional()
|
|
1027
1060
|
});
|
|
1028
1061
|
function parseFlowDefinitionStructure(data) {
|
|
@@ -1084,6 +1117,17 @@ var FlowDefinitionSchema = FlowDefinitionObjectSchema.superRefine((flow, context
|
|
|
1084
1117
|
message: invalidCaptureDestinationMessage(node.run.kind, node.id, channel, destination)
|
|
1085
1118
|
});
|
|
1086
1119
|
}
|
|
1120
|
+
const { stdout, stderr } = node.run.capture ?? {};
|
|
1121
|
+
const stdoutField = stdout === void 0 ? void 0 : captureDestinationFieldName(stdout);
|
|
1122
|
+
if (stdoutField !== void 0 && stderr !== void 0) {
|
|
1123
|
+
if (captureDestinationFieldName(stderr) === stdoutField) {
|
|
1124
|
+
context.addIssue({
|
|
1125
|
+
code: "custom",
|
|
1126
|
+
path: ["nodes", index, "run", "capture", "stderr"],
|
|
1127
|
+
message: duplicateCaptureDestinationMessage(node.run.kind, node.id, stdoutField)
|
|
1128
|
+
});
|
|
1129
|
+
}
|
|
1130
|
+
}
|
|
1087
1131
|
}
|
|
1088
1132
|
}
|
|
1089
1133
|
if (flow.entry !== void 0 && !nodeIds.has(flow.entry)) {
|
|
@@ -1209,6 +1253,7 @@ var FlowDefinitionSchema = FlowDefinitionObjectSchema.superRefine((flow, context
|
|
|
1209
1253
|
}
|
|
1210
1254
|
}
|
|
1211
1255
|
validateClassifierRules(flow, context);
|
|
1256
|
+
validateConsumedOutputSchemasCompile(flow, context);
|
|
1212
1257
|
const state = /* @__PURE__ */ new Map();
|
|
1213
1258
|
for (const nodeId of nodeIds) {
|
|
1214
1259
|
if (state.has(nodeId)) continue;
|
|
@@ -1233,6 +1278,31 @@ var FlowDefinitionSchema = FlowDefinitionObjectSchema.superRefine((flow, context
|
|
|
1233
1278
|
}
|
|
1234
1279
|
}
|
|
1235
1280
|
});
|
|
1281
|
+
function validateConsumedOutputSchemasCompile(flow, context) {
|
|
1282
|
+
for (const [nodeIndex, node] of flow.nodes.entries()) {
|
|
1283
|
+
const fields = node.contract?.output?.fields;
|
|
1284
|
+
if (!fields) continue;
|
|
1285
|
+
let compileError;
|
|
1286
|
+
try {
|
|
1287
|
+
compileOutputFieldsSchema(fields);
|
|
1288
|
+
continue;
|
|
1289
|
+
} catch (error) {
|
|
1290
|
+
compileError = error;
|
|
1291
|
+
}
|
|
1292
|
+
let consumed;
|
|
1293
|
+
try {
|
|
1294
|
+
consumed = getConsumedOutputSchema(flow, node.id) !== void 0;
|
|
1295
|
+
} catch {
|
|
1296
|
+
continue;
|
|
1297
|
+
}
|
|
1298
|
+
if (!consumed) continue;
|
|
1299
|
+
context.addIssue({
|
|
1300
|
+
code: "custom",
|
|
1301
|
+
path: ["nodes", nodeIndex, "contract", "output", "fields"],
|
|
1302
|
+
message: `node ${node.id} contract.output.fields: ${invalidOutputFieldsSchemaMessage(compileError)}`
|
|
1303
|
+
});
|
|
1304
|
+
}
|
|
1305
|
+
}
|
|
1236
1306
|
var ORDERING_OPERATORS = /* @__PURE__ */ new Set(["<", "<=", ">", ">="]);
|
|
1237
1307
|
function validateClassifierRules(flow, context) {
|
|
1238
1308
|
const classifierIds = /* @__PURE__ */ new Set();
|
|
@@ -1331,6 +1401,6 @@ function validateClassifierRules(flow, context) {
|
|
|
1331
1401
|
}
|
|
1332
1402
|
}
|
|
1333
1403
|
|
|
1334
|
-
export { FLOW_CAPTURE_CHANNELS, FLOW_CAPTURE_DESTINATION_PATTERN, FLOW_EXPRESSION_LIMITS, FlowDefinitionSchema, FlowExpressionError, InputSchema, RESERVED_CLASSIFIER_FIELDS, captureDestinationFieldName, checkClassifierShape, classifierDecision,
|
|
1335
|
-
//# sourceMappingURL=chunk-
|
|
1336
|
-
//# sourceMappingURL=chunk-
|
|
1404
|
+
export { FLOW_CAPTURE_CHANNELS, FLOW_CAPTURE_DESTINATION_PATTERN, FLOW_EXPRESSION_LIMITS, FlowDefinitionSchema, FlowExpressionError, InputSchema, RESERVED_CLASSIFIER_FIELDS, captureDestinationFieldName, checkClassifierShape, classifierDecision, compileOutputFieldsSchema, declaresReservedClassifierField, duplicateCaptureDestinationMessage, evaluate, evaluateFlowExpression, getConsumedOutputSchema, hasConstantlyFalsePrecondition, inspectFlowExpressionComparisons, invalidCaptureDestinationMessage, invalidOutputFieldsSchemaMessage, parseFlowDefinitionStructure, resolveFlowBindings, stableFlowJson, withoutReservedClassifierFields };
|
|
1405
|
+
//# sourceMappingURL=chunk-ORH2BZEM.js.map
|
|
1406
|
+
//# sourceMappingURL=chunk-ORH2BZEM.js.map
|