@united-workforce/cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +221 -0
- package/dist/__tests__/adapter-json-roundtrip.test.d.ts +2 -0
- package/dist/__tests__/adapter-json-roundtrip.test.d.ts.map +1 -0
- package/dist/__tests__/adapter-json-roundtrip.test.js +147 -0
- package/dist/__tests__/adapter-json-roundtrip.test.js.map +1 -0
- package/dist/__tests__/config.test.d.ts +2 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +685 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/current-role.test.d.ts +2 -0
- package/dist/__tests__/current-role.test.d.ts.map +1 -0
- package/dist/__tests__/current-role.test.js +401 -0
- package/dist/__tests__/current-role.test.js.map +1 -0
- package/dist/__tests__/e2e-mock-agent.test.d.ts +2 -0
- package/dist/__tests__/e2e-mock-agent.test.d.ts.map +1 -0
- package/dist/__tests__/e2e-mock-agent.test.js +401 -0
- package/dist/__tests__/e2e-mock-agent.test.js.map +1 -0
- package/dist/__tests__/include-tag.test.d.ts +2 -0
- package/dist/__tests__/include-tag.test.d.ts.map +1 -0
- package/dist/__tests__/include-tag.test.js +69 -0
- package/dist/__tests__/include-tag.test.js.map +1 -0
- package/dist/__tests__/log.test.d.ts +2 -0
- package/dist/__tests__/log.test.d.ts.map +1 -0
- package/dist/__tests__/log.test.js +161 -0
- package/dist/__tests__/log.test.js.map +1 -0
- package/dist/__tests__/moderator-evaluate.test.d.ts +2 -0
- package/dist/__tests__/moderator-evaluate.test.d.ts.map +1 -0
- package/dist/__tests__/moderator-evaluate.test.js +170 -0
- package/dist/__tests__/moderator-evaluate.test.js.map +1 -0
- package/dist/__tests__/preload.d.ts +3 -0
- package/dist/__tests__/preload.d.ts.map +1 -0
- package/dist/__tests__/preload.js +6 -0
- package/dist/__tests__/preload.js.map +1 -0
- package/dist/__tests__/prompt.test.d.ts +2 -0
- package/dist/__tests__/prompt.test.d.ts.map +1 -0
- package/dist/__tests__/prompt.test.js +111 -0
- package/dist/__tests__/prompt.test.js.map +1 -0
- package/dist/__tests__/resolve-head-hash.test.d.ts +2 -0
- package/dist/__tests__/resolve-head-hash.test.d.ts.map +1 -0
- package/dist/__tests__/resolve-head-hash.test.js +66 -0
- package/dist/__tests__/resolve-head-hash.test.js.map +1 -0
- package/dist/__tests__/setup-agent-discovery.test.d.ts +2 -0
- package/dist/__tests__/setup-agent-discovery.test.d.ts.map +1 -0
- package/dist/__tests__/setup-agent-discovery.test.js +119 -0
- package/dist/__tests__/setup-agent-discovery.test.js.map +1 -0
- package/dist/__tests__/setup-complexity.test.d.ts +2 -0
- package/dist/__tests__/setup-complexity.test.d.ts.map +1 -0
- package/dist/__tests__/setup-complexity.test.js +314 -0
- package/dist/__tests__/setup-complexity.test.js.map +1 -0
- package/dist/__tests__/setup-validate.test.d.ts +2 -0
- package/dist/__tests__/setup-validate.test.d.ts.map +1 -0
- package/dist/__tests__/setup-validate.test.js +108 -0
- package/dist/__tests__/setup-validate.test.js.map +1 -0
- package/dist/__tests__/solve-issue-tea-worktree.test.d.ts +2 -0
- package/dist/__tests__/solve-issue-tea-worktree.test.d.ts.map +1 -0
- package/dist/__tests__/solve-issue-tea-worktree.test.js +107 -0
- package/dist/__tests__/solve-issue-tea-worktree.test.js.map +1 -0
- package/dist/__tests__/spawn-agent-json.test.d.ts +2 -0
- package/dist/__tests__/spawn-agent-json.test.d.ts.map +1 -0
- package/dist/__tests__/spawn-agent-json.test.js +79 -0
- package/dist/__tests__/spawn-agent-json.test.js.map +1 -0
- package/dist/__tests__/step-read.test.d.ts +2 -0
- package/dist/__tests__/step-read.test.d.ts.map +1 -0
- package/dist/__tests__/step-read.test.js +561 -0
- package/dist/__tests__/step-read.test.js.map +1 -0
- package/dist/__tests__/step-show-json.test.d.ts +2 -0
- package/dist/__tests__/step-show-json.test.d.ts.map +1 -0
- package/dist/__tests__/step-show-json.test.js +311 -0
- package/dist/__tests__/step-show-json.test.js.map +1 -0
- package/dist/__tests__/step-timing.test.d.ts +2 -0
- package/dist/__tests__/step-timing.test.d.ts.map +1 -0
- package/dist/__tests__/step-timing.test.js +345 -0
- package/dist/__tests__/step-timing.test.js.map +1 -0
- package/dist/__tests__/store-global-cas.test.d.ts +2 -0
- package/dist/__tests__/store-global-cas.test.d.ts.map +1 -0
- package/dist/__tests__/store-global-cas.test.js +235 -0
- package/dist/__tests__/store-global-cas.test.js.map +1 -0
- package/dist/__tests__/store-storage-root.test.d.ts +2 -0
- package/dist/__tests__/store-storage-root.test.d.ts.map +1 -0
- package/dist/__tests__/store-storage-root.test.js +43 -0
- package/dist/__tests__/store-storage-root.test.js.map +1 -0
- package/dist/__tests__/store-unified-threads.test.d.ts +2 -0
- package/dist/__tests__/store-unified-threads.test.d.ts.map +1 -0
- package/dist/__tests__/store-unified-threads.test.js +189 -0
- package/dist/__tests__/store-unified-threads.test.js.map +1 -0
- package/dist/__tests__/thread-cancel-status.test.d.ts +2 -0
- package/dist/__tests__/thread-cancel-status.test.d.ts.map +1 -0
- package/dist/__tests__/thread-cancel-status.test.js +111 -0
- package/dist/__tests__/thread-cancel-status.test.js.map +1 -0
- package/dist/__tests__/thread-list-filters.test.d.ts +2 -0
- package/dist/__tests__/thread-list-filters.test.d.ts.map +1 -0
- package/dist/__tests__/thread-list-filters.test.js +442 -0
- package/dist/__tests__/thread-list-filters.test.js.map +1 -0
- package/dist/__tests__/thread-location.test.d.ts +2 -0
- package/dist/__tests__/thread-location.test.d.ts.map +1 -0
- package/dist/__tests__/thread-location.test.js +159 -0
- package/dist/__tests__/thread-location.test.js.map +1 -0
- package/dist/__tests__/thread-read-quota.test.d.ts +2 -0
- package/dist/__tests__/thread-read-quota.test.d.ts.map +1 -0
- package/dist/__tests__/thread-read-quota.test.js +546 -0
- package/dist/__tests__/thread-read-quota.test.js.map +1 -0
- package/dist/__tests__/thread-read-xml-tags.test.d.ts +2 -0
- package/dist/__tests__/thread-read-xml-tags.test.d.ts.map +1 -0
- package/dist/__tests__/thread-read-xml-tags.test.js +610 -0
- package/dist/__tests__/thread-read-xml-tags.test.js.map +1 -0
- package/dist/__tests__/thread-resume.test.d.ts +2 -0
- package/dist/__tests__/thread-resume.test.d.ts.map +1 -0
- package/dist/__tests__/thread-resume.test.js +592 -0
- package/dist/__tests__/thread-resume.test.js.map +1 -0
- package/dist/__tests__/thread-show-status.test.d.ts +2 -0
- package/dist/__tests__/thread-show-status.test.d.ts.map +1 -0
- package/dist/__tests__/thread-show-status.test.js +267 -0
- package/dist/__tests__/thread-show-status.test.js.map +1 -0
- package/dist/__tests__/thread-start-cwd-cli.test.d.ts +2 -0
- package/dist/__tests__/thread-start-cwd-cli.test.d.ts.map +1 -0
- package/dist/__tests__/thread-start-cwd-cli.test.js +130 -0
- package/dist/__tests__/thread-start-cwd-cli.test.js.map +1 -0
- package/dist/__tests__/thread-step-count.test.d.ts +2 -0
- package/dist/__tests__/thread-step-count.test.d.ts.map +1 -0
- package/dist/__tests__/thread-step-count.test.js +55 -0
- package/dist/__tests__/thread-step-count.test.js.map +1 -0
- package/dist/__tests__/thread-suspend-step.test.d.ts +2 -0
- package/dist/__tests__/thread-suspend-step.test.d.ts.map +1 -0
- package/dist/__tests__/thread-suspend-step.test.js +155 -0
- package/dist/__tests__/thread-suspend-step.test.js.map +1 -0
- package/dist/__tests__/thread-suspended-display.test.d.ts +2 -0
- package/dist/__tests__/thread-suspended-display.test.d.ts.map +1 -0
- package/dist/__tests__/thread-suspended-display.test.js +247 -0
- package/dist/__tests__/thread-suspended-display.test.js.map +1 -0
- package/dist/__tests__/thread-test-helpers.d.ts +4 -0
- package/dist/__tests__/thread-test-helpers.d.ts.map +1 -0
- package/dist/__tests__/thread-test-helpers.js +23 -0
- package/dist/__tests__/thread-test-helpers.js.map +1 -0
- package/dist/__tests__/thread.test.d.ts +2 -0
- package/dist/__tests__/thread.test.d.ts.map +1 -0
- package/dist/__tests__/thread.test.js +883 -0
- package/dist/__tests__/thread.test.js.map +1 -0
- package/dist/__tests__/validate-semantic.test.d.ts +2 -0
- package/dist/__tests__/validate-semantic.test.d.ts.map +1 -0
- package/dist/__tests__/validate-semantic.test.js +408 -0
- package/dist/__tests__/validate-semantic.test.js.map +1 -0
- package/dist/__tests__/workflow-resolution.test.d.ts +2 -0
- package/dist/__tests__/workflow-resolution.test.d.ts.map +1 -0
- package/dist/__tests__/workflow-resolution.test.js +308 -0
- package/dist/__tests__/workflow-resolution.test.js.map +1 -0
- package/dist/background/background.d.ts +38 -0
- package/dist/background/background.d.ts.map +1 -0
- package/dist/background/background.js +123 -0
- package/dist/background/background.js.map +1 -0
- package/dist/background/index.d.ts +3 -0
- package/dist/background/index.d.ts.map +1 -0
- package/dist/background/index.js +2 -0
- package/dist/background/index.js.map +1 -0
- package/dist/background/types.d.ts +9 -0
- package/dist/background/types.d.ts.map +1 -0
- package/dist/background/types.js +2 -0
- package/dist/background/types.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +535 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/config.d.ts +41 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +252 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/log.d.ts +26 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +79 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/prompt.d.ts +6 -0
- package/dist/commands/prompt.d.ts.map +1 -0
- package/dist/commands/prompt.js +67 -0
- package/dist/commands/prompt.js.map +1 -0
- package/dist/commands/setup.d.ts +73 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +522 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/shared.d.ts +31 -0
- package/dist/commands/shared.d.ts.map +1 -0
- package/dist/commands/shared.js +154 -0
- package/dist/commands/shared.js.map +1 -0
- package/dist/commands/step.d.ts +18 -0
- package/dist/commands/step.d.ts.map +1 -0
- package/dist/commands/step.js +257 -0
- package/dist/commands/step.js.map +1 -0
- package/dist/commands/thread-time-parser.d.ts +6 -0
- package/dist/commands/thread-time-parser.d.ts.map +1 -0
- package/dist/commands/thread-time-parser.js +22 -0
- package/dist/commands/thread-time-parser.js.map +1 -0
- package/dist/commands/thread.d.ts +38 -0
- package/dist/commands/thread.d.ts.map +1 -0
- package/dist/commands/thread.js +1087 -0
- package/dist/commands/thread.js.map +1 -0
- package/dist/commands/workflow.d.ts +24 -0
- package/dist/commands/workflow.d.ts.map +1 -0
- package/dist/commands/workflow.js +138 -0
- package/dist/commands/workflow.js.map +1 -0
- package/dist/format.d.ts +3 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +10 -0
- package/dist/format.js.map +1 -0
- package/dist/include.d.ts +12 -0
- package/dist/include.d.ts.map +1 -0
- package/dist/include.js +35 -0
- package/dist/include.js.map +1 -0
- package/dist/moderator/__tests__/evaluate.test.d.ts +2 -0
- package/dist/moderator/__tests__/evaluate.test.d.ts.map +1 -0
- package/dist/moderator/__tests__/evaluate.test.js +167 -0
- package/dist/moderator/__tests__/evaluate.test.js.map +1 -0
- package/dist/moderator/evaluate.d.ts +6 -0
- package/dist/moderator/evaluate.d.ts.map +1 -0
- package/dist/moderator/evaluate.js +65 -0
- package/dist/moderator/evaluate.js.map +1 -0
- package/dist/moderator/index.d.ts +4 -0
- package/dist/moderator/index.d.ts.map +1 -0
- package/dist/moderator/index.js +3 -0
- package/dist/moderator/index.js.map +1 -0
- package/dist/moderator/types.d.ts +25 -0
- package/dist/moderator/types.d.ts.map +1 -0
- package/dist/moderator/types.js +4 -0
- package/dist/moderator/types.js.map +1 -0
- package/dist/schemas.d.ts +16 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +17 -0
- package/dist/schemas.js.map +1 -0
- package/dist/store.d.ts +77 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +392 -0
- package/dist/store.js.map +1 -0
- package/dist/validate-semantic.d.ts +7 -0
- package/dist/validate-semantic.d.ts.map +1 -0
- package/dist/validate-semantic.js +263 -0
- package/dist/validate-semantic.js.map +1 -0
- package/dist/validate.d.ts +16 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +115 -0
- package/dist/validate.js.map +1 -0
- package/package.json +44 -0
- package/src/__tests__/adapter-json-roundtrip.test.ts +181 -0
- package/src/__tests__/config.test.ts +740 -0
- package/src/__tests__/current-role.test.ts +438 -0
- package/src/__tests__/e2e-mock-agent.test.ts +498 -0
- package/src/__tests__/fixtures/e2e-completed-resume.mock.yaml +15 -0
- package/src/__tests__/fixtures/e2e-count.mock.yaml +19 -0
- package/src/__tests__/fixtures/e2e-count.workflow.yaml +45 -0
- package/src/__tests__/fixtures/e2e-linear.mock.yaml +13 -0
- package/src/__tests__/fixtures/e2e-linear.workflow.yaml +32 -0
- package/src/__tests__/fixtures/e2e-loop.mock.yaml +25 -0
- package/src/__tests__/fixtures/e2e-loop.workflow.yaml +36 -0
- package/src/__tests__/fixtures/e2e-mismatch.mock.yaml +16 -0
- package/src/__tests__/fixtures/e2e-mustache.mock.yaml +15 -0
- package/src/__tests__/fixtures/e2e-mustache.workflow.yaml +34 -0
- package/src/__tests__/fixtures/e2e-suspend.mock.yaml +14 -0
- package/src/__tests__/fixtures/e2e-suspend.workflow.yaml +24 -0
- package/src/__tests__/include-tag.test.ts +84 -0
- package/src/__tests__/log.test.ts +181 -0
- package/src/__tests__/moderator-evaluate.test.ts +186 -0
- package/src/__tests__/preload.ts +7 -0
- package/src/__tests__/prompt.test.ts +129 -0
- package/src/__tests__/resolve-head-hash.test.ts +86 -0
- package/src/__tests__/setup-agent-discovery.test.ts +167 -0
- package/src/__tests__/setup-complexity.test.ts +381 -0
- package/src/__tests__/setup-validate.test.ts +148 -0
- package/src/__tests__/solve-issue-tea-worktree.test.ts +144 -0
- package/src/__tests__/spawn-agent-json.test.ts +100 -0
- package/src/__tests__/step-read.test.ts +632 -0
- package/src/__tests__/step-show-json.test.ts +373 -0
- package/src/__tests__/step-timing.test.ts +392 -0
- package/src/__tests__/store-global-cas.test.ts +308 -0
- package/src/__tests__/store-storage-root.test.ts +49 -0
- package/src/__tests__/store-unified-threads.test.ts +235 -0
- package/src/__tests__/thread-cancel-status.test.ts +138 -0
- package/src/__tests__/thread-list-filters.test.ts +572 -0
- package/src/__tests__/thread-location.test.ts +186 -0
- package/src/__tests__/thread-read-quota.test.ts +613 -0
- package/src/__tests__/thread-read-xml-tags.test.ts +717 -0
- package/src/__tests__/thread-resume.test.ts +710 -0
- package/src/__tests__/thread-show-status.test.ts +317 -0
- package/src/__tests__/thread-start-cwd-cli.test.ts +164 -0
- package/src/__tests__/thread-step-count.test.ts +70 -0
- package/src/__tests__/thread-suspend-step.test.ts +181 -0
- package/src/__tests__/thread-suspended-display.test.ts +287 -0
- package/src/__tests__/thread-test-helpers.ts +37 -0
- package/src/__tests__/thread.test.ts +1025 -0
- package/src/__tests__/validate-semantic.test.ts +474 -0
- package/src/__tests__/workflow-resolution.test.ts +421 -0
- package/src/background/background.ts +147 -0
- package/src/background/index.ts +11 -0
- package/src/background/types.ts +9 -0
- package/src/cli.ts +692 -0
- package/src/commands/config.ts +304 -0
- package/src/commands/log.ts +116 -0
- package/src/commands/prompt.ts +81 -0
- package/src/commands/setup.ts +603 -0
- package/src/commands/shared.ts +227 -0
- package/src/commands/step.ts +343 -0
- package/src/commands/thread-time-parser.ts +23 -0
- package/src/commands/thread.ts +1575 -0
- package/src/commands/workflow.ts +213 -0
- package/src/format.ts +12 -0
- package/src/include.ts +37 -0
- package/src/moderator/__tests__/evaluate.test.ts +199 -0
- package/src/moderator/evaluate.ts +80 -0
- package/src/moderator/index.ts +7 -0
- package/src/moderator/types.ts +24 -0
- package/src/schemas.ts +26 -0
- package/src/store.ts +479 -0
- package/src/validate-semantic.ts +304 -0
- package/src/validate.ts +137 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/moderator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAMzC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type Result<T, E> = {
|
|
2
|
+
ok: true;
|
|
3
|
+
value: T;
|
|
4
|
+
} | {
|
|
5
|
+
ok: false;
|
|
6
|
+
error: E;
|
|
7
|
+
};
|
|
8
|
+
/** Moderator routes the thread to a real role (or `$END`). */
|
|
9
|
+
export type EvaluateRouteResult = {
|
|
10
|
+
role: string;
|
|
11
|
+
prompt: string;
|
|
12
|
+
/** Resolved working directory from edge location field (null = inherit thread cwd). */
|
|
13
|
+
location: string | null;
|
|
14
|
+
};
|
|
15
|
+
/** Moderator routes the thread to `$SUSPEND` — waiting for external input. */
|
|
16
|
+
export type EvaluateSuspendResult = {
|
|
17
|
+
action: "suspend";
|
|
18
|
+
/** Role whose output triggered the suspend transition. */
|
|
19
|
+
suspendedRole: string;
|
|
20
|
+
prompt: string;
|
|
21
|
+
};
|
|
22
|
+
/** The result of moderator evaluation. */
|
|
23
|
+
export type EvaluateResult = EvaluateRouteResult | EvaluateSuspendResult;
|
|
24
|
+
export declare function isSuspendResult(result: EvaluateResult): result is EvaluateSuspendResult;
|
|
25
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/moderator/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC;AAE5E,8DAA8D;AAC9D,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,uFAAuF;IACvF,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF,8EAA8E;AAC9E,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,SAAS,CAAC;IAClB,0DAA0D;IAC1D,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,0CAA0C;AAC1C,MAAM,MAAM,cAAc,GAAG,mBAAmB,GAAG,qBAAqB,CAAC;AAEzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,IAAI,qBAAqB,CAEvF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/moderator/types.ts"],"names":[],"mappings":"AAqBA,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,OAAO,QAAQ,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Hash, Store } from "@ocas/core";
|
|
2
|
+
export declare const TEXT_SCHEMA: {
|
|
3
|
+
type: "string";
|
|
4
|
+
};
|
|
5
|
+
export type UwfSchemaHashes = {
|
|
6
|
+
workflow: Hash;
|
|
7
|
+
startNode: Hash;
|
|
8
|
+
stepNode: Hash;
|
|
9
|
+
text: Hash;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Register Workflow, StartNode, and StepNode JSON Schemas in the CAS store.
|
|
13
|
+
* Idempotent: safe to call on every CLI invocation.
|
|
14
|
+
*/
|
|
15
|
+
export declare function registerUwfSchemas(store: Store): Promise<UwfSchemaHashes>;
|
|
16
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAI9C,eAAO,MAAM,WAAW;;CAA8B,CAAC;AAEvD,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,IAAI,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,eAAe,CAAC,CAQ/E"}
|
package/dist/schemas.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { putSchema } from "@ocas/core";
|
|
2
|
+
import { START_NODE_SCHEMA, STEP_NODE_SCHEMA, WORKFLOW_SCHEMA } from "@united-workforce/protocol";
|
|
3
|
+
export const TEXT_SCHEMA = { type: "string" };
|
|
4
|
+
/**
|
|
5
|
+
* Register Workflow, StartNode, and StepNode JSON Schemas in the CAS store.
|
|
6
|
+
* Idempotent: safe to call on every CLI invocation.
|
|
7
|
+
*/
|
|
8
|
+
export async function registerUwfSchemas(store) {
|
|
9
|
+
const [workflow, startNode, stepNode, text] = await Promise.all([
|
|
10
|
+
putSchema(store, WORKFLOW_SCHEMA),
|
|
11
|
+
putSchema(store, START_NODE_SCHEMA),
|
|
12
|
+
putSchema(store, STEP_NODE_SCHEMA),
|
|
13
|
+
putSchema(store, TEXT_SCHEMA),
|
|
14
|
+
]);
|
|
15
|
+
return { workflow, startNode, stepNode, text };
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElG,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,QAAiB,EAAE,CAAC;AASvD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,KAAY;IACnD,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC9D,SAAS,CAAC,KAAK,EAAE,eAAe,CAAC;QACjC,SAAS,CAAC,KAAK,EAAE,iBAAiB,CAAC;QACnC,SAAS,CAAC,KAAK,EAAE,gBAAgB,CAAC;QAClC,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC;KAC9B,CAAC,CAAC;IACH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACjD,CAAC"}
|
package/dist/store.d.ts
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { type Hash, type Store, type VarStore } from "@ocas/core";
|
|
2
|
+
import type { CasRef, ThreadId, ThreadIndexEntry, ThreadsIndex } from "@united-workforce/protocol";
|
|
3
|
+
import { type UwfSchemaHashes } from "./schemas.js";
|
|
4
|
+
export type WorkflowRegistry = Record<string, CasRef>;
|
|
5
|
+
/** Variable name prefix for workflow registry entries (`@uwf/registry/<name>`). */
|
|
6
|
+
export declare const REGISTRY_VAR_PREFIX = "@uwf/registry/";
|
|
7
|
+
/** Variable name prefix for active thread entries (`@uwf/thread/<thread-id>`). */
|
|
8
|
+
export declare const THREAD_VAR_PREFIX = "@uwf/thread/";
|
|
9
|
+
/** A workflow entry discovered from the project-local .workflows/ directory. */
|
|
10
|
+
export type ProjectWorkflowEntry = {
|
|
11
|
+
/** Workflow name (from YAML `name` field, equals filename stem). */
|
|
12
|
+
name: string;
|
|
13
|
+
/** Absolute path to the YAML file. */
|
|
14
|
+
filePath: string;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Scan `<projectRoot>/.workflow/` (preferred) and `.workflows/` (legacy) for workflow entries.
|
|
18
|
+
* .workflow/ takes priority: if a name is found in both, .workflow/ wins.
|
|
19
|
+
* Returns an empty array if neither directory exists.
|
|
20
|
+
*/
|
|
21
|
+
export declare function discoverProjectWorkflows(projectRoot: string): Promise<ProjectWorkflowEntry[]>;
|
|
22
|
+
/** Default filesystem root for uwf data (`~/.uwf`). */
|
|
23
|
+
export declare function getDefaultStorageRoot(): string;
|
|
24
|
+
/**
|
|
25
|
+
* Resolve storage root.
|
|
26
|
+
* Priority: `UWF_HOME` → default.
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveStorageRoot(): string;
|
|
29
|
+
/**
|
|
30
|
+
* Deprecated: Use `getGlobalCasDir()` instead.
|
|
31
|
+
* Returns the old CAS directory for backward compatibility.
|
|
32
|
+
*/
|
|
33
|
+
export declare function getCasDir(storageRoot: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* Returns the global CAS directory shared by all uwf and ocas tools.
|
|
36
|
+
* Priority: `OCAS_HOME` → default ~/.ocas
|
|
37
|
+
*/
|
|
38
|
+
export declare function getGlobalCasDir(): string;
|
|
39
|
+
export declare function getRegistryPath(storageRoot: string): string;
|
|
40
|
+
export declare function getThreadsPath(storageRoot: string): string;
|
|
41
|
+
export type UwfStore = {
|
|
42
|
+
storageRoot: string;
|
|
43
|
+
store: Store;
|
|
44
|
+
schemas: UwfSchemaHashes;
|
|
45
|
+
varStore: VarStore;
|
|
46
|
+
};
|
|
47
|
+
export declare function createUwfStore(storageRoot: string): Promise<UwfStore>;
|
|
48
|
+
/** One-time migration: `~/.uwf/workflows.yaml` → `@uwf/registry/*` variables. */
|
|
49
|
+
export declare function migrateWorkflowRegistryIfNeeded(storageRoot: string, varStore: VarStore): Promise<void>;
|
|
50
|
+
export declare function loadWorkflowRegistry(varStore: VarStore): WorkflowRegistry;
|
|
51
|
+
export declare function saveWorkflowRegistry(varStore: VarStore, name: string, hash: CasRef): void;
|
|
52
|
+
export declare function resolveWorkflowHash(registry: WorkflowRegistry, id: string): CasRef;
|
|
53
|
+
/**
|
|
54
|
+
* Resolve a workflow name to a project-local YAML file path.
|
|
55
|
+
* Returns null if the name is not found in the local entries.
|
|
56
|
+
*/
|
|
57
|
+
export declare function resolveProjectWorkflowFile(localEntries: ProjectWorkflowEntry[], name: string): string | null;
|
|
58
|
+
export declare function findRegistryName(registry: WorkflowRegistry, hash: Hash): string | null;
|
|
59
|
+
/** One-time migration: `~/.uwf/threads.yaml` → `@uwf/thread/*` variables. */
|
|
60
|
+
export declare function migrateThreadsIndexIfNeeded(storageRoot: string, varStore: VarStore): Promise<void>;
|
|
61
|
+
/** Load all active threads (equivalent to legacy `loadThreadsIndex`). */
|
|
62
|
+
export declare function loadAllThreads(varStore: VarStore): ThreadsIndex;
|
|
63
|
+
/** Get a single active thread entry, or null if not found. */
|
|
64
|
+
export declare function getThread(varStore: VarStore, threadId: ThreadId): ThreadIndexEntry | null;
|
|
65
|
+
/** Set or update a single active thread entry. */
|
|
66
|
+
export declare function setThread(varStore: VarStore, threadId: ThreadId, entry: ThreadIndexEntry): void;
|
|
67
|
+
/** Load only active threads (status not in completed/cancelled). */
|
|
68
|
+
export declare function loadActiveThreads(varStore: VarStore): ThreadsIndex;
|
|
69
|
+
/** Load only completed/cancelled threads (history). */
|
|
70
|
+
export declare function loadHistoryThreads(varStore: VarStore): ThreadsIndex;
|
|
71
|
+
/** Complete a thread by marking it completed or cancelled. */
|
|
72
|
+
export declare function completeThread(varStore: VarStore, threadId: ThreadId, reason: "completed" | "cancelled"): void;
|
|
73
|
+
/** One-time migration: `~/.uwf/history.jsonl` → `@uwf/thread/*` variables with status tags. */
|
|
74
|
+
export declare function migrateHistoryIfNeeded(storageRoot: string, varStore: VarStore): Promise<void>;
|
|
75
|
+
/** Migrate `@uwf/history/*` variables to `@uwf/thread/*` with status tags. */
|
|
76
|
+
export declare function migrateHistoryVarsToThreadVars(varStore: VarStore): void;
|
|
77
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/store.js
ADDED
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { access, mkdir, readdir, readFile, rename } from "node:fs/promises";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { bootstrap } from "@ocas/core";
|
|
6
|
+
import { createFsStore, createSqliteVarStore } from "@ocas/fs";
|
|
7
|
+
import { parseThreadsIndex } from "@united-workforce/protocol";
|
|
8
|
+
import { parse } from "yaml";
|
|
9
|
+
import { registerUwfSchemas } from "./schemas.js";
|
|
10
|
+
/** Variable name prefix for workflow registry entries (`@uwf/registry/<name>`). */
|
|
11
|
+
export const REGISTRY_VAR_PREFIX = "@uwf/registry/";
|
|
12
|
+
/** Variable name prefix for active thread entries (`@uwf/thread/<thread-id>`). */
|
|
13
|
+
export const THREAD_VAR_PREFIX = "@uwf/thread/";
|
|
14
|
+
/** Extract workflow name from a YAML filename (strip .yaml/.yml extension). */
|
|
15
|
+
function stemFromYaml(name) {
|
|
16
|
+
if (name.endsWith(".yaml"))
|
|
17
|
+
return name.slice(0, -5);
|
|
18
|
+
if (name.endsWith(".yml"))
|
|
19
|
+
return name.slice(0, -4);
|
|
20
|
+
return name;
|
|
21
|
+
}
|
|
22
|
+
/** Check if a directory contains an index.yaml or index.yml workflow file. */
|
|
23
|
+
async function findIndexWorkflow(dir, dirName) {
|
|
24
|
+
for (const indexName of ["index.yaml", "index.yml"]) {
|
|
25
|
+
const indexPath = join(dir, dirName, indexName);
|
|
26
|
+
try {
|
|
27
|
+
await access(indexPath);
|
|
28
|
+
return { name: dirName, filePath: indexPath };
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// not found, try next
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Scan a single directory for workflow entries (flat YAML files + folder/index.yaml).
|
|
38
|
+
* Returns discovered entries. Returns empty array if directory does not exist.
|
|
39
|
+
*/
|
|
40
|
+
async function scanWorkflowDir(dir) {
|
|
41
|
+
let dirents;
|
|
42
|
+
try {
|
|
43
|
+
dirents = await readdir(dir, { withFileTypes: true });
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
const err = e;
|
|
47
|
+
if (err.code === "ENOENT" || err.code === "ENOTDIR") {
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
throw e;
|
|
51
|
+
}
|
|
52
|
+
const result = [];
|
|
53
|
+
for (const entry of dirents) {
|
|
54
|
+
if (entry.isFile() && (entry.name.endsWith(".yaml") || entry.name.endsWith(".yml"))) {
|
|
55
|
+
result.push({ name: stemFromYaml(entry.name), filePath: join(dir, entry.name) });
|
|
56
|
+
}
|
|
57
|
+
else if (entry.isDirectory()) {
|
|
58
|
+
const found = await findIndexWorkflow(dir, entry.name);
|
|
59
|
+
if (found !== null) {
|
|
60
|
+
result.push(found);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Scan `<projectRoot>/.workflow/` (preferred) and `.workflows/` (legacy) for workflow entries.
|
|
68
|
+
* .workflow/ takes priority: if a name is found in both, .workflow/ wins.
|
|
69
|
+
* Returns an empty array if neither directory exists.
|
|
70
|
+
*/
|
|
71
|
+
export async function discoverProjectWorkflows(projectRoot) {
|
|
72
|
+
const primary = await scanWorkflowDir(join(projectRoot, ".workflow"));
|
|
73
|
+
const legacy = await scanWorkflowDir(join(projectRoot, ".workflows"));
|
|
74
|
+
const seen = new Set(primary.map((e) => e.name));
|
|
75
|
+
const merged = [...primary];
|
|
76
|
+
for (const entry of legacy) {
|
|
77
|
+
if (!seen.has(entry.name)) {
|
|
78
|
+
merged.push(entry);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return merged;
|
|
82
|
+
}
|
|
83
|
+
/** Default filesystem root for uwf data (`~/.uwf`). */
|
|
84
|
+
export function getDefaultStorageRoot() {
|
|
85
|
+
return join(homedir(), ".uwf");
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Resolve storage root.
|
|
89
|
+
* Priority: `UWF_HOME` → default.
|
|
90
|
+
*/
|
|
91
|
+
export function resolveStorageRoot() {
|
|
92
|
+
const primary = process.env.UWF_HOME;
|
|
93
|
+
if (primary !== undefined && primary !== "") {
|
|
94
|
+
return primary;
|
|
95
|
+
}
|
|
96
|
+
return getDefaultStorageRoot();
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Deprecated: Use `getGlobalCasDir()` instead.
|
|
100
|
+
* Returns the old CAS directory for backward compatibility.
|
|
101
|
+
*/
|
|
102
|
+
export function getCasDir(storageRoot) {
|
|
103
|
+
return join(storageRoot, "cas");
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Returns the global CAS directory shared by all uwf and ocas tools.
|
|
107
|
+
* Priority: `OCAS_HOME` → default ~/.ocas
|
|
108
|
+
*/
|
|
109
|
+
export function getGlobalCasDir() {
|
|
110
|
+
const primary = process.env.OCAS_HOME;
|
|
111
|
+
if (primary !== undefined && primary !== "") {
|
|
112
|
+
return primary;
|
|
113
|
+
}
|
|
114
|
+
return join(homedir(), ".ocas");
|
|
115
|
+
}
|
|
116
|
+
export function getRegistryPath(storageRoot) {
|
|
117
|
+
return join(storageRoot, "workflows.yaml");
|
|
118
|
+
}
|
|
119
|
+
export function getThreadsPath(storageRoot) {
|
|
120
|
+
return join(storageRoot, "threads.yaml");
|
|
121
|
+
}
|
|
122
|
+
export async function createUwfStore(storageRoot) {
|
|
123
|
+
const casDir = getGlobalCasDir();
|
|
124
|
+
await mkdir(casDir, { recursive: true });
|
|
125
|
+
const cas = createFsStore(casDir);
|
|
126
|
+
const { var: varStore, tag } = createSqliteVarStore(join(casDir, "vars"), cas);
|
|
127
|
+
const store = { cas, var: varStore, tag };
|
|
128
|
+
bootstrap(store);
|
|
129
|
+
const schemas = await registerUwfSchemas(store);
|
|
130
|
+
await migrateWorkflowRegistryIfNeeded(storageRoot, varStore);
|
|
131
|
+
await migrateThreadsIndexIfNeeded(storageRoot, varStore);
|
|
132
|
+
await migrateHistoryIfNeeded(storageRoot, varStore);
|
|
133
|
+
migrateHistoryVarsToThreadVars(varStore);
|
|
134
|
+
return { storageRoot, store, schemas, varStore };
|
|
135
|
+
}
|
|
136
|
+
async function loadWorkflowRegistryFromYaml(storageRoot) {
|
|
137
|
+
const path = getRegistryPath(storageRoot);
|
|
138
|
+
const text = await readFile(path, "utf8");
|
|
139
|
+
const raw = parse(text);
|
|
140
|
+
if (raw === null || typeof raw !== "object" || Array.isArray(raw)) {
|
|
141
|
+
return {};
|
|
142
|
+
}
|
|
143
|
+
const registry = {};
|
|
144
|
+
for (const [name, hash] of Object.entries(raw)) {
|
|
145
|
+
if (typeof hash === "string") {
|
|
146
|
+
registry[name] = hash;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return registry;
|
|
150
|
+
}
|
|
151
|
+
/** One-time migration: `~/.uwf/workflows.yaml` → `@uwf/registry/*` variables. */
|
|
152
|
+
export async function migrateWorkflowRegistryIfNeeded(storageRoot, varStore) {
|
|
153
|
+
const path = getRegistryPath(storageRoot);
|
|
154
|
+
if (!existsSync(path)) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const registry = await loadWorkflowRegistryFromYaml(storageRoot);
|
|
158
|
+
for (const [name, hash] of Object.entries(registry)) {
|
|
159
|
+
saveWorkflowRegistry(varStore, name, hash);
|
|
160
|
+
}
|
|
161
|
+
await rename(path, `${path}.migrated`);
|
|
162
|
+
}
|
|
163
|
+
export function loadWorkflowRegistry(varStore) {
|
|
164
|
+
const vars = varStore.list({ namePrefix: REGISTRY_VAR_PREFIX });
|
|
165
|
+
const registry = {};
|
|
166
|
+
for (const v of vars) {
|
|
167
|
+
const name = v.name.slice(REGISTRY_VAR_PREFIX.length);
|
|
168
|
+
registry[name] = v.value;
|
|
169
|
+
}
|
|
170
|
+
return registry;
|
|
171
|
+
}
|
|
172
|
+
export function saveWorkflowRegistry(varStore, name, hash) {
|
|
173
|
+
varStore.set(`${REGISTRY_VAR_PREFIX}${name}`, hash);
|
|
174
|
+
}
|
|
175
|
+
export function resolveWorkflowHash(registry, id) {
|
|
176
|
+
return registry[id] !== undefined ? registry[id] : id;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Resolve a workflow name to a project-local YAML file path.
|
|
180
|
+
* Returns null if the name is not found in the local entries.
|
|
181
|
+
*/
|
|
182
|
+
export function resolveProjectWorkflowFile(localEntries, name) {
|
|
183
|
+
for (const entry of localEntries) {
|
|
184
|
+
if (entry.name === name) {
|
|
185
|
+
return entry.filePath;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
export function findRegistryName(registry, hash) {
|
|
191
|
+
for (const [name, h] of Object.entries(registry)) {
|
|
192
|
+
if (h === hash) {
|
|
193
|
+
return name;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
async function loadThreadsIndexFromYaml(storageRoot) {
|
|
199
|
+
const path = getThreadsPath(storageRoot);
|
|
200
|
+
try {
|
|
201
|
+
const text = await readFile(path, "utf8");
|
|
202
|
+
const raw = parse(text);
|
|
203
|
+
return parseThreadsIndex(raw);
|
|
204
|
+
}
|
|
205
|
+
catch (e) {
|
|
206
|
+
const err = e;
|
|
207
|
+
if (err.code === "ENOENT") {
|
|
208
|
+
return {};
|
|
209
|
+
}
|
|
210
|
+
throw e;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/** One-time migration: `~/.uwf/threads.yaml` → `@uwf/thread/*` variables. */
|
|
214
|
+
export async function migrateThreadsIndexIfNeeded(storageRoot, varStore) {
|
|
215
|
+
const path = getThreadsPath(storageRoot);
|
|
216
|
+
if (!existsSync(path)) {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
const index = await loadThreadsIndexFromYaml(storageRoot);
|
|
220
|
+
for (const [threadId, entry] of Object.entries(index)) {
|
|
221
|
+
setThread(varStore, threadId, entry);
|
|
222
|
+
}
|
|
223
|
+
await rename(path, `${path}.migrated`);
|
|
224
|
+
}
|
|
225
|
+
function threadVarName(threadId) {
|
|
226
|
+
return `${THREAD_VAR_PREFIX}${threadId}`;
|
|
227
|
+
}
|
|
228
|
+
function entryFromVariable(v) {
|
|
229
|
+
return {
|
|
230
|
+
head: v.value,
|
|
231
|
+
status: (v.tags.status ?? "idle"),
|
|
232
|
+
suspendedRole: v.tags.suspendedRole ?? null,
|
|
233
|
+
suspendMessage: v.tags.suspendMessage ?? null,
|
|
234
|
+
completedAt: v.tags.completedAt !== undefined ? Number(v.tags.completedAt) : null,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
/** Load all active threads (equivalent to legacy `loadThreadsIndex`). */
|
|
238
|
+
export function loadAllThreads(varStore) {
|
|
239
|
+
const vars = varStore.list({ namePrefix: THREAD_VAR_PREFIX });
|
|
240
|
+
const index = {};
|
|
241
|
+
for (const v of vars) {
|
|
242
|
+
const threadId = v.name.slice(THREAD_VAR_PREFIX.length);
|
|
243
|
+
index[threadId] = entryFromVariable(v);
|
|
244
|
+
}
|
|
245
|
+
return index;
|
|
246
|
+
}
|
|
247
|
+
/** Get a single active thread entry, or null if not found. */
|
|
248
|
+
export function getThread(varStore, threadId) {
|
|
249
|
+
const vars = varStore.list({ exactName: threadVarName(threadId) });
|
|
250
|
+
const v = vars[0];
|
|
251
|
+
if (v === undefined) {
|
|
252
|
+
return null;
|
|
253
|
+
}
|
|
254
|
+
return entryFromVariable(v);
|
|
255
|
+
}
|
|
256
|
+
/** Set or update a single active thread entry. */
|
|
257
|
+
export function setThread(varStore, threadId, entry) {
|
|
258
|
+
const name = threadVarName(threadId);
|
|
259
|
+
// Head CAS nodes may use different schemas (StartNode vs StepNode) — clear all variants first.
|
|
260
|
+
varStore.remove(name);
|
|
261
|
+
const tags = {};
|
|
262
|
+
if (entry.status !== "idle") {
|
|
263
|
+
tags.status = entry.status;
|
|
264
|
+
}
|
|
265
|
+
if (entry.suspendedRole !== null) {
|
|
266
|
+
tags.suspendedRole = entry.suspendedRole;
|
|
267
|
+
}
|
|
268
|
+
if (entry.suspendMessage !== null) {
|
|
269
|
+
tags.suspendMessage = entry.suspendMessage;
|
|
270
|
+
}
|
|
271
|
+
if (entry.completedAt !== null) {
|
|
272
|
+
tags.completedAt = String(entry.completedAt);
|
|
273
|
+
}
|
|
274
|
+
varStore.set(name, entry.head, { tags });
|
|
275
|
+
}
|
|
276
|
+
/** Load only active threads (status not in completed/cancelled). */
|
|
277
|
+
export function loadActiveThreads(varStore) {
|
|
278
|
+
const all = loadAllThreads(varStore);
|
|
279
|
+
const active = {};
|
|
280
|
+
for (const [threadId, entry] of Object.entries(all)) {
|
|
281
|
+
if (entry.status !== "completed" && entry.status !== "cancelled") {
|
|
282
|
+
active[threadId] = entry;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return active;
|
|
286
|
+
}
|
|
287
|
+
/** Load only completed/cancelled threads (history). */
|
|
288
|
+
export function loadHistoryThreads(varStore) {
|
|
289
|
+
const all = loadAllThreads(varStore);
|
|
290
|
+
const history = {};
|
|
291
|
+
for (const [threadId, entry] of Object.entries(all)) {
|
|
292
|
+
if (entry.status === "completed" || entry.status === "cancelled") {
|
|
293
|
+
history[threadId] = entry;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return history;
|
|
297
|
+
}
|
|
298
|
+
/** Complete a thread by marking it completed or cancelled. */
|
|
299
|
+
export function completeThread(varStore, threadId, reason) {
|
|
300
|
+
const entry = getThread(varStore, threadId);
|
|
301
|
+
if (entry === null) {
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
const completed = {
|
|
305
|
+
head: entry.head,
|
|
306
|
+
status: reason,
|
|
307
|
+
suspendedRole: null,
|
|
308
|
+
suspendMessage: null,
|
|
309
|
+
completedAt: Date.now(),
|
|
310
|
+
};
|
|
311
|
+
setThread(varStore, threadId, completed);
|
|
312
|
+
}
|
|
313
|
+
function parseLegacyHistoryJsonlLine(trimmed) {
|
|
314
|
+
let raw;
|
|
315
|
+
try {
|
|
316
|
+
raw = JSON.parse(trimmed);
|
|
317
|
+
}
|
|
318
|
+
catch {
|
|
319
|
+
return null;
|
|
320
|
+
}
|
|
321
|
+
if (raw === null || typeof raw !== "object" || Array.isArray(raw)) {
|
|
322
|
+
return null;
|
|
323
|
+
}
|
|
324
|
+
const rec = raw;
|
|
325
|
+
const thread = rec.thread;
|
|
326
|
+
const workflow = rec.workflow;
|
|
327
|
+
const head = rec.head;
|
|
328
|
+
const completedAt = rec.completedAt;
|
|
329
|
+
if (typeof thread === "string" &&
|
|
330
|
+
typeof workflow === "string" &&
|
|
331
|
+
typeof head === "string" &&
|
|
332
|
+
typeof completedAt === "number") {
|
|
333
|
+
const reason = rec.reason;
|
|
334
|
+
const parsedReason = reason === "completed" || reason === "cancelled" ? reason : null;
|
|
335
|
+
return {
|
|
336
|
+
thread: thread,
|
|
337
|
+
workflow,
|
|
338
|
+
head,
|
|
339
|
+
completedAt,
|
|
340
|
+
reason: parsedReason,
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
return null;
|
|
344
|
+
}
|
|
345
|
+
/** One-time migration: `~/.uwf/history.jsonl` → `@uwf/thread/*` variables with status tags. */
|
|
346
|
+
export async function migrateHistoryIfNeeded(storageRoot, varStore) {
|
|
347
|
+
const path = join(storageRoot, "history.jsonl");
|
|
348
|
+
if (!existsSync(path)) {
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
const text = await readFile(path, "utf8");
|
|
352
|
+
for (const line of text.split("\n")) {
|
|
353
|
+
const trimmed = line.trim();
|
|
354
|
+
if (trimmed === "") {
|
|
355
|
+
continue;
|
|
356
|
+
}
|
|
357
|
+
const entry = parseLegacyHistoryJsonlLine(trimmed);
|
|
358
|
+
if (entry !== null) {
|
|
359
|
+
const status = entry.reason === "cancelled" ? "cancelled" : "completed";
|
|
360
|
+
const threadEntry = {
|
|
361
|
+
head: entry.head,
|
|
362
|
+
status: status,
|
|
363
|
+
suspendedRole: null,
|
|
364
|
+
suspendMessage: null,
|
|
365
|
+
completedAt: entry.completedAt,
|
|
366
|
+
};
|
|
367
|
+
setThread(varStore, entry.thread, threadEntry);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
await rename(path, `${path}.migrated`);
|
|
371
|
+
}
|
|
372
|
+
/** Migrate `@uwf/history/*` variables to `@uwf/thread/*` with status tags. */
|
|
373
|
+
export function migrateHistoryVarsToThreadVars(varStore) {
|
|
374
|
+
const LEGACY_HISTORY_VAR_PREFIX = "@uwf/history/";
|
|
375
|
+
const vars = varStore.list({ namePrefix: LEGACY_HISTORY_VAR_PREFIX });
|
|
376
|
+
for (const v of vars) {
|
|
377
|
+
const threadId = v.name.slice(LEGACY_HISTORY_VAR_PREFIX.length);
|
|
378
|
+
const reason = v.tags.reason;
|
|
379
|
+
const status = reason === "cancelled" ? "cancelled" : "completed";
|
|
380
|
+
const completedAt = Number(v.tags.completedAt ?? Date.now());
|
|
381
|
+
const threadEntry = {
|
|
382
|
+
head: v.value,
|
|
383
|
+
status: status,
|
|
384
|
+
suspendedRole: null,
|
|
385
|
+
suspendMessage: null,
|
|
386
|
+
completedAt,
|
|
387
|
+
};
|
|
388
|
+
setThread(varStore, threadId, threadEntry);
|
|
389
|
+
varStore.remove(v.name);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,SAAS,EAAwC,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAwB,MAAM,cAAc,CAAC;AAIxE,mFAAmF;AACnF,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAEpD,kFAAkF;AAClF,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAUhD,+EAA+E;AAC/E,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,KAAK,UAAU,iBAAiB,CAC9B,GAAW,EACX,OAAe;IAEf,KAAK,MAAM,SAAS,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;YACxB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,eAAe,CAAC,GAAW;IACxC,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,CAA0B,CAAC;QACvC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACpD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,CAAC,CAAC;IACV,CAAC;IAED,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YACpF,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnF,CAAC;aAAM,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACvD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,WAAmB;IAEnB,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IACrC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QAC5C,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,qBAAqB,EAAE,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,WAAmB;IAC3C,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IACtC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QAC5C,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAAmB;IACjD,OAAO,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,OAAO,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAC3C,CAAC;AASD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,WAAmB;IACtD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/E,MAAM,KAAK,GAAU,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IACjD,SAAS,CAAC,KAAK,CAAC,CAAC;IACjB,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,+BAA+B,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC7D,MAAM,2BAA2B,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,sBAAsB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACpD,8BAA8B,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AACnD,CAAC;AAED,KAAK,UAAU,4BAA4B,CAAC,WAAmB;IAC7D,MAAM,IAAI,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAY,CAAC;IACnC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,QAAQ,GAAqB,EAAE,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAA8B,CAAC,EAAE,CAAC;QAC1E,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,WAAmB,EACnB,QAAkB;IAElB,MAAM,IAAI,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,4BAA4B,CAAC,WAAW,CAAC,CAAC;IACjE,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,WAAW,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAkB;IACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAqB,EAAE,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACtD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IAC3B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAkB,EAAE,IAAY,EAAE,IAAY;IACjF,QAAQ,CAAC,GAAG,CAAC,GAAG,mBAAmB,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAA0B,EAAE,EAAU;IACxE,OAAO,QAAQ,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CACxC,YAAoC,EACpC,IAAY;IAEZ,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC,QAAQ,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAA0B,EAAE,IAAU;IACrE,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,WAAmB;IACzD,MAAM,IAAI,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAY,CAAC;QACnC,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,CAA0B,CAAC;QACvC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,WAAmB,EACnB,QAAkB;IAElB,MAAM,IAAI,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,wBAAwB,CAAC,WAAW,CAAC,CAAC;IAC1D,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,SAAS,CAAC,QAAQ,EAAE,QAAoB,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,WAAW,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,aAAa,CAAC,QAAkB;IACvC,OAAO,GAAG,iBAAiB,GAAG,QAAQ,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAkD;IAC3E,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,KAAe;QACvB,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAA+B;QAC/D,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI;QAC3C,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI;QAC7C,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;KAClF,CAAC;AACJ,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,cAAc,CAAC,QAAkB;IAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAa,CAAC;QACpE,KAAK,CAAC,QAAQ,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,SAAS,CAAC,QAAkB,EAAE,QAAkB;IAC9D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,SAAS,CAAC,QAAkB,EAAE,QAAkB,EAAE,KAAuB;IACvF,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACrC,+FAA+F;IAC/F,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,MAAM,IAAI,GAA2B,EAAE,CAAC;IACxC,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC7B,CAAC;IACD,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;IAC3C,CAAC;IACD,IAAI,KAAK,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;IAC7C,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;IACD,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,iBAAiB,CAAC,QAAkB;IAClD,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACpD,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACjE,MAAM,CAAC,QAAoB,CAAC,GAAG,KAAK,CAAC;QACvC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,kBAAkB,CAAC,QAAkB;IACnD,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACpD,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACjE,OAAO,CAAC,QAAoB,CAAC,GAAG,KAAK,CAAC;QACxC,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,cAAc,CAC5B,QAAkB,EAClB,QAAkB,EAClB,MAAiC;IAEjC,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC5C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO;IACT,CAAC;IACD,MAAM,SAAS,GAAG;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,MAAM;QACd,aAAa,EAAE,IAAI;QACnB,cAAc,EAAE,IAAI;QACpB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;KACJ,CAAC;IACtB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC3C,CAAC;AAUD,SAAS,2BAA2B,CAAC,OAAe;IAClD,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,GAAG,GAAG,GAA8B,CAAC;IAC3C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAC1B,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC9B,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACtB,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;IACpC,IACE,OAAO,MAAM,KAAK,QAAQ;QAC1B,OAAO,QAAQ,KAAK,QAAQ;QAC5B,OAAO,IAAI,KAAK,QAAQ;QACxB,OAAO,WAAW,KAAK,QAAQ,EAC/B,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAC1B,MAAM,YAAY,GAAG,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACtF,OAAO;YACL,MAAM,EAAE,MAAkB;YAC1B,QAAQ;YACR,IAAI;YACJ,WAAW;YACX,MAAM,EAAE,YAAY;SACrB,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,WAAmB,EACnB,QAAkB;IAElB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;YACnB,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC;YACxE,MAAM,WAAW,GAAqB;gBACpC,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,MAAoC;gBAC5C,aAAa,EAAE,IAAI;gBACnB,cAAc,EAAE,IAAI;gBACpB,WAAW,EAAE,KAAK,CAAC,WAAW;aAC/B,CAAC;YACF,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,MAAM,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,WAAW,CAAC,CAAC;AACzC,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,8BAA8B,CAAC,QAAkB;IAC/D,MAAM,yBAAyB,GAAG,eAAe,CAAC;IAClD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,yBAAyB,EAAE,CAAC,CAAC;IAEtE,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,MAAM,CAAa,CAAC;QAC5E,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC;QAClE,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAE7D,MAAM,WAAW,GAAqB;YACpC,IAAI,EAAE,CAAC,CAAC,KAAe;YACvB,MAAM,EAAE,MAAoC;YAC5C,aAAa,EAAE,IAAI;YACnB,cAAc,EAAE,IAAI;YACpB,WAAW;SACZ,CAAC;QAEF,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC3C,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { WorkflowPayload } from "@united-workforce/protocol";
|
|
2
|
+
/**
|
|
3
|
+
* Validate a parsed WorkflowPayload for semantic correctness.
|
|
4
|
+
* Returns an array of error messages. Empty array = valid.
|
|
5
|
+
*/
|
|
6
|
+
export declare function validateWorkflow(payload: WorkflowPayload): string[];
|
|
7
|
+
//# sourceMappingURL=validate-semantic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-semantic.d.ts","sourceRoot":"","sources":["../src/validate-semantic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAqSlE;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,EAAE,CAMnE"}
|