@united-workforce/cli 0.3.0 → 0.5.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/README.md +45 -11
- package/dist/.build-fingerprint +1 -0
- package/dist/__tests__/adapter-json-roundtrip.test.js +17 -7
- package/dist/__tests__/adapter-json-roundtrip.test.js.map +1 -1
- package/dist/__tests__/agent-resolution-llm-free.test.d.ts +2 -0
- package/dist/__tests__/agent-resolution-llm-free.test.d.ts.map +1 -0
- package/dist/__tests__/agent-resolution-llm-free.test.js +30 -0
- package/dist/__tests__/agent-resolution-llm-free.test.js.map +1 -0
- package/dist/__tests__/build-step-entry.test.d.ts +2 -0
- package/dist/__tests__/build-step-entry.test.d.ts.map +1 -0
- package/dist/__tests__/build-step-entry.test.js +173 -0
- package/dist/__tests__/build-step-entry.test.js.map +1 -0
- package/dist/__tests__/clear-thread-failed-attempts.test.d.ts +2 -0
- package/dist/__tests__/clear-thread-failed-attempts.test.d.ts.map +1 -0
- package/dist/__tests__/clear-thread-failed-attempts.test.js +93 -0
- package/dist/__tests__/clear-thread-failed-attempts.test.js.map +1 -0
- package/dist/__tests__/concurrency.test.d.ts +2 -0
- package/dist/__tests__/concurrency.test.d.ts.map +1 -0
- package/dist/__tests__/concurrency.test.js +196 -0
- package/dist/__tests__/concurrency.test.js.map +1 -0
- package/dist/__tests__/config.test.js +26 -302
- package/dist/__tests__/config.test.js.map +1 -1
- package/dist/__tests__/current-role.test.js +7 -6
- package/dist/__tests__/current-role.test.js.map +1 -1
- package/dist/__tests__/e2e-mock-agent.test.js +43 -30
- package/dist/__tests__/e2e-mock-agent.test.js.map +1 -1
- package/dist/__tests__/format-text-default.test.d.ts +2 -0
- package/dist/__tests__/format-text-default.test.d.ts.map +1 -0
- package/dist/__tests__/format-text-default.test.js +43 -0
- package/dist/__tests__/format-text-default.test.js.map +1 -0
- package/dist/__tests__/format-text-registry.test.d.ts +2 -0
- package/dist/__tests__/format-text-registry.test.d.ts.map +1 -0
- package/dist/__tests__/format-text-registry.test.js +158 -0
- package/dist/__tests__/format-text-registry.test.js.map +1 -0
- package/dist/__tests__/issue-180-workflow-ref-removed.test.d.ts +2 -0
- package/dist/__tests__/issue-180-workflow-ref-removed.test.d.ts.map +1 -0
- package/dist/__tests__/issue-180-workflow-ref-removed.test.js +40 -0
- package/dist/__tests__/issue-180-workflow-ref-removed.test.js.map +1 -0
- package/dist/__tests__/log-text-renderer.test.d.ts +2 -0
- package/dist/__tests__/log-text-renderer.test.d.ts.map +1 -0
- package/dist/__tests__/log-text-renderer.test.js +265 -0
- package/dist/__tests__/log-text-renderer.test.js.map +1 -0
- package/dist/__tests__/moderator-evaluate.test.js +9 -50
- package/dist/__tests__/moderator-evaluate.test.js.map +1 -1
- package/dist/__tests__/output-mapper-thread-list-startedat.test.d.ts +2 -0
- package/dist/__tests__/output-mapper-thread-list-startedat.test.d.ts.map +1 -0
- package/dist/__tests__/output-mapper-thread-list-startedat.test.js +102 -0
- package/dist/__tests__/output-mapper-thread-list-startedat.test.js.map +1 -0
- package/dist/__tests__/output-mapper-workflow-add.test.d.ts +2 -0
- package/dist/__tests__/output-mapper-workflow-add.test.d.ts.map +1 -0
- package/dist/__tests__/output-mapper-workflow-add.test.js +22 -0
- package/dist/__tests__/output-mapper-workflow-add.test.js.map +1 -0
- package/dist/__tests__/pid-recycling.test.d.ts +2 -0
- package/dist/__tests__/pid-recycling.test.d.ts.map +1 -0
- package/dist/__tests__/pid-recycling.test.js +273 -0
- package/dist/__tests__/pid-recycling.test.js.map +1 -0
- package/dist/__tests__/prompt.test.js +365 -2
- package/dist/__tests__/prompt.test.js.map +1 -1
- package/dist/__tests__/resolve-head-hash.test.js +12 -4
- package/dist/__tests__/resolve-head-hash.test.js.map +1 -1
- package/dist/__tests__/setup-agent-discovery.test.js +21 -30
- package/dist/__tests__/setup-agent-discovery.test.js.map +1 -1
- package/dist/__tests__/setup-complexity.test.js +2 -168
- package/dist/__tests__/setup-complexity.test.js.map +1 -1
- package/dist/__tests__/setup-no-llm.test.d.ts +2 -0
- package/dist/__tests__/setup-no-llm.test.d.ts.map +1 -0
- package/dist/__tests__/setup-no-llm.test.js +52 -0
- package/dist/__tests__/setup-no-llm.test.js.map +1 -0
- package/dist/__tests__/solve-issue-tea-worktree.test.js +27 -28
- package/dist/__tests__/solve-issue-tea-worktree.test.js.map +1 -1
- package/dist/__tests__/step-ask.test.d.ts +2 -0
- package/dist/__tests__/step-ask.test.d.ts.map +1 -0
- package/dist/__tests__/step-ask.test.js +507 -0
- package/dist/__tests__/step-ask.test.js.map +1 -0
- package/dist/__tests__/step-show-json.test.js +1 -0
- package/dist/__tests__/step-show-json.test.js.map +1 -1
- package/dist/__tests__/step-timing.test.js +2 -0
- package/dist/__tests__/step-timing.test.js.map +1 -1
- package/dist/__tests__/store-global-cas.test.js +2 -2
- package/dist/__tests__/store-global-cas.test.js.map +1 -1
- package/dist/__tests__/store-unified-threads.test.js +28 -26
- package/dist/__tests__/store-unified-threads.test.js.map +1 -1
- package/dist/__tests__/thread-cancel-status.test.js +25 -19
- package/dist/__tests__/thread-cancel-status.test.js.map +1 -1
- package/dist/__tests__/thread-cancel-text-renderer.test.d.ts +2 -0
- package/dist/__tests__/thread-cancel-text-renderer.test.d.ts.map +1 -0
- package/dist/__tests__/thread-cancel-text-renderer.test.js +110 -0
- package/dist/__tests__/thread-cancel-text-renderer.test.js.map +1 -0
- package/dist/__tests__/thread-list-filters.test.js +354 -17
- package/dist/__tests__/thread-list-filters.test.js.map +1 -1
- package/dist/__tests__/thread-list-template-ms-date.test.d.ts +2 -0
- package/dist/__tests__/thread-list-template-ms-date.test.d.ts.map +1 -0
- package/dist/__tests__/thread-list-template-ms-date.test.js +102 -0
- package/dist/__tests__/thread-list-template-ms-date.test.js.map +1 -0
- package/dist/__tests__/thread-list-workflow-corrupt.test.d.ts +2 -0
- package/dist/__tests__/thread-list-workflow-corrupt.test.d.ts.map +1 -0
- package/dist/__tests__/thread-list-workflow-corrupt.test.js +157 -0
- package/dist/__tests__/thread-list-workflow-corrupt.test.js.map +1 -0
- package/dist/__tests__/thread-poke.test.d.ts +2 -0
- package/dist/__tests__/thread-poke.test.d.ts.map +1 -0
- package/dist/__tests__/thread-poke.test.js +422 -0
- package/dist/__tests__/thread-poke.test.js.map +1 -0
- package/dist/__tests__/thread-read-xml-tags.test.js +10 -9
- package/dist/__tests__/thread-read-xml-tags.test.js.map +1 -1
- package/dist/__tests__/thread-resume.test.js +21 -15
- package/dist/__tests__/thread-resume.test.js.map +1 -1
- package/dist/__tests__/thread-show-status.test.js +17 -28
- package/dist/__tests__/thread-show-status.test.js.map +1 -1
- package/dist/__tests__/thread-start-cwd-cli.test.js +15 -3
- package/dist/__tests__/thread-start-cwd-cli.test.js.map +1 -1
- package/dist/__tests__/thread-stop-text-renderer.test.d.ts +2 -0
- package/dist/__tests__/thread-stop-text-renderer.test.d.ts.map +1 -0
- package/dist/__tests__/thread-stop-text-renderer.test.js +148 -0
- package/dist/__tests__/thread-stop-text-renderer.test.js.map +1 -0
- package/dist/__tests__/thread-suspend-step.test.js +13 -16
- package/dist/__tests__/thread-suspend-step.test.js.map +1 -1
- package/dist/__tests__/thread-suspended-display.test.js +10 -22
- package/dist/__tests__/thread-suspended-display.test.js.map +1 -1
- package/dist/__tests__/thread-test-helpers.d.ts +7 -0
- package/dist/__tests__/thread-test-helpers.d.ts.map +1 -1
- package/dist/__tests__/thread-test-helpers.js +13 -0
- package/dist/__tests__/thread-test-helpers.js.map +1 -1
- package/dist/__tests__/thread.test.js +15 -13
- package/dist/__tests__/thread.test.js.map +1 -1
- package/dist/__tests__/validate-semantic.test.js +105 -23
- package/dist/__tests__/validate-semantic.test.js.map +1 -1
- package/dist/__tests__/workflow-list-recursive.test.d.ts +2 -0
- package/dist/__tests__/workflow-list-recursive.test.d.ts.map +1 -0
- package/dist/__tests__/workflow-list-recursive.test.js +286 -0
- package/dist/__tests__/workflow-list-recursive.test.js.map +1 -0
- package/dist/__tests__/workflow-resolution.test.js +46 -28
- package/dist/__tests__/workflow-resolution.test.js.map +1 -1
- package/dist/__tests__/workflow-show-resolution.test.d.ts +2 -0
- package/dist/__tests__/workflow-show-resolution.test.d.ts.map +1 -0
- package/dist/__tests__/workflow-show-resolution.test.js +213 -0
- package/dist/__tests__/workflow-show-resolution.test.js.map +1 -0
- package/dist/__tests__/workflow-validate.test.d.ts +2 -0
- package/dist/__tests__/workflow-validate.test.d.ts.map +1 -0
- package/dist/__tests__/workflow-validate.test.js +707 -0
- package/dist/__tests__/workflow-validate.test.js.map +1 -0
- package/dist/__tests__/write-envelope.test.d.ts +2 -0
- package/dist/__tests__/write-envelope.test.d.ts.map +1 -0
- package/dist/__tests__/write-envelope.test.js +201 -0
- package/dist/__tests__/write-envelope.test.js.map +1 -0
- package/dist/background/background.d.ts +22 -1
- package/dist/background/background.d.ts.map +1 -1
- package/dist/background/background.js +83 -6
- package/dist/background/background.js.map +1 -1
- package/dist/background/index.d.ts +1 -1
- package/dist/background/index.d.ts.map +1 -1
- package/dist/background/index.js +1 -1
- package/dist/background/index.js.map +1 -1
- package/dist/background/types.d.ts +1 -0
- package/dist/background/types.d.ts.map +1 -1
- package/dist/cli.js +120 -62
- package/dist/cli.js.map +1 -1
- package/dist/commands/config.d.ts +3 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +17 -31
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/prompt.d.ts.map +1 -1
- package/dist/commands/prompt.js +57 -31
- package/dist/commands/prompt.js.map +1 -1
- package/dist/commands/setup.d.ts +12 -39
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +72 -303
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/step.d.ts +44 -1
- package/dist/commands/step.d.ts.map +1 -1
- package/dist/commands/step.js +255 -11
- package/dist/commands/step.js.map +1 -1
- package/dist/commands/thread.d.ts +16 -3
- package/dist/commands/thread.d.ts.map +1 -1
- package/dist/commands/thread.js +423 -142
- package/dist/commands/thread.js.map +1 -1
- package/dist/commands/workflow.d.ts +9 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +126 -6
- package/dist/commands/workflow.js.map +1 -1
- package/dist/concurrency/concurrency.d.ts +34 -0
- package/dist/concurrency/concurrency.d.ts.map +1 -0
- package/dist/concurrency/concurrency.js +216 -0
- package/dist/concurrency/concurrency.js.map +1 -0
- package/dist/concurrency/index.d.ts +3 -0
- package/dist/concurrency/index.d.ts.map +1 -0
- package/dist/concurrency/index.js +2 -0
- package/dist/concurrency/index.js.map +1 -0
- package/dist/concurrency/types.d.ts +19 -0
- package/dist/concurrency/types.d.ts.map +1 -0
- package/dist/concurrency/types.js +2 -0
- package/dist/concurrency/types.js.map +1 -0
- package/dist/format.d.ts +69 -2
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +198 -1
- package/dist/format.js.map +1 -1
- package/dist/moderator/__tests__/evaluate.test.js +31 -17
- package/dist/moderator/__tests__/evaluate.test.js.map +1 -1
- package/dist/moderator/evaluate.d.ts.map +1 -1
- package/dist/moderator/evaluate.js +4 -16
- package/dist/moderator/evaluate.js.map +1 -1
- package/dist/moderator/index.d.ts +1 -2
- package/dist/moderator/index.d.ts.map +1 -1
- package/dist/moderator/index.js +0 -1
- package/dist/moderator/index.js.map +1 -1
- package/dist/moderator/types.d.ts +6 -10
- package/dist/moderator/types.d.ts.map +1 -1
- package/dist/moderator/types.js +1 -3
- package/dist/moderator/types.js.map +1 -1
- package/dist/output-mappers.d.ts +122 -0
- package/dist/output-mappers.d.ts.map +1 -0
- package/dist/output-mappers.js +134 -0
- package/dist/output-mappers.js.map +1 -0
- package/dist/schemas.d.ts +6 -1
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +34 -5
- package/dist/schemas.js.map +1 -1
- package/dist/store.d.ts +28 -9
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +75 -16
- package/dist/store.js.map +1 -1
- package/dist/text-renderers.d.ts +30 -0
- package/dist/text-renderers.d.ts.map +1 -0
- package/dist/text-renderers.js +251 -0
- package/dist/text-renderers.js.map +1 -0
- package/dist/validate-semantic.d.ts.map +1 -1
- package/dist/validate-semantic.js +95 -61
- package/dist/validate-semantic.js.map +1 -1
- package/dist/validate.d.ts +6 -0
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +24 -0
- package/dist/validate.js.map +1 -1
- package/examples/brainstorm.yaml +130 -0
- package/examples/debate.yaml +169 -0
- package/examples/socratic-questioning.yaml +112 -0
- package/package.json +9 -10
- package/src/__tests__/adapter-json-roundtrip.test.ts +16 -7
- package/src/__tests__/agent-resolution-llm-free.test.ts +39 -0
- package/src/__tests__/build-step-entry.test.ts +203 -0
- package/src/__tests__/clear-thread-failed-attempts.test.ts +122 -0
- package/src/__tests__/concurrency.test.ts +266 -0
- package/src/__tests__/config.test.ts +33 -321
- package/src/__tests__/current-role.test.ts +7 -6
- package/src/__tests__/e2e-mock-agent.test.ts +65 -30
- package/src/__tests__/fixtures/e2e-count.workflow.yaml +1 -0
- package/src/__tests__/fixtures/e2e-linear.workflow.yaml +1 -0
- package/src/__tests__/fixtures/{e2e-mustache.workflow.yaml → e2e-liquid.workflow.yaml} +3 -2
- package/src/__tests__/fixtures/e2e-loop.workflow.yaml +1 -0
- package/src/__tests__/fixtures/e2e-suspend.mock.yaml +2 -2
- package/src/__tests__/fixtures/e2e-suspend.workflow.yaml +6 -10
- package/src/__tests__/format-text-default.test.ts +49 -0
- package/src/__tests__/format-text-registry.test.ts +173 -0
- package/src/__tests__/issue-180-workflow-ref-removed.test.ts +43 -0
- package/src/__tests__/log-text-renderer.test.ts +294 -0
- package/src/__tests__/moderator-evaluate.test.ts +9 -52
- package/src/__tests__/output-mapper-thread-list-startedat.test.ts +124 -0
- package/src/__tests__/output-mapper-workflow-add.test.ts +24 -0
- package/src/__tests__/pid-recycling.test.ts +329 -0
- package/src/__tests__/prompt.test.ts +443 -2
- package/src/__tests__/resolve-head-hash.test.ts +11 -4
- package/src/__tests__/setup-agent-discovery.test.ts +26 -51
- package/src/__tests__/setup-complexity.test.ts +1 -203
- package/src/__tests__/setup-no-llm.test.ts +68 -0
- package/src/__tests__/solve-issue-tea-worktree.test.ts +27 -31
- package/src/__tests__/step-ask.test.ts +677 -0
- package/src/__tests__/step-show-json.test.ts +1 -0
- package/src/__tests__/step-timing.test.ts +2 -0
- package/src/__tests__/store-global-cas.test.ts +2 -2
- package/src/__tests__/store-unified-threads.test.ts +30 -27
- package/src/__tests__/thread-cancel-status.test.ts +27 -20
- package/src/__tests__/thread-cancel-text-renderer.test.ts +125 -0
- package/src/__tests__/thread-list-filters.test.ts +443 -17
- package/src/__tests__/thread-list-template-ms-date.test.ts +110 -0
- package/src/__tests__/thread-list-workflow-corrupt.test.ts +198 -0
- package/src/__tests__/thread-poke.test.ts +554 -0
- package/src/__tests__/thread-read-xml-tags.test.ts +9 -11
- package/src/__tests__/thread-resume.test.ts +20 -15
- package/src/__tests__/thread-show-status.test.ts +17 -29
- package/src/__tests__/thread-start-cwd-cli.test.ts +15 -3
- package/src/__tests__/thread-stop-text-renderer.test.ts +168 -0
- package/src/__tests__/thread-suspend-step.test.ts +13 -16
- package/src/__tests__/thread-suspended-display.test.ts +10 -22
- package/src/__tests__/thread-test-helpers.ts +15 -1
- package/src/__tests__/thread.test.ts +14 -14
- package/src/__tests__/validate-semantic.test.ts +118 -33
- package/src/__tests__/workflow-list-recursive.test.ts +370 -0
- package/src/__tests__/workflow-resolution.test.ts +48 -29
- package/src/__tests__/workflow-show-resolution.test.ts +286 -0
- package/src/__tests__/workflow-validate.test.ts +828 -0
- package/src/__tests__/write-envelope.test.ts +257 -0
- package/src/background/background.ts +88 -6
- package/src/background/index.ts +2 -0
- package/src/background/types.ts +1 -0
- package/src/cli.ts +184 -77
- package/src/commands/config.ts +16 -33
- package/src/commands/prompt.ts +57 -31
- package/src/commands/setup.ts +80 -358
- package/src/commands/step.ts +339 -12
- package/src/commands/thread.ts +511 -171
- package/src/commands/workflow.ts +155 -4
- package/src/concurrency/concurrency.ts +245 -0
- package/src/concurrency/index.ts +10 -0
- package/src/concurrency/types.ts +19 -0
- package/src/format.ts +282 -2
- package/src/moderator/__tests__/evaluate.test.ts +34 -17
- package/src/moderator/evaluate.ts +5 -17
- package/src/moderator/index.ts +1 -6
- package/src/moderator/types.ts +6 -14
- package/src/output-mappers.ts +254 -0
- package/src/schemas.ts +51 -5
- package/src/store.ts +86 -20
- package/src/text-renderers.ts +355 -0
- package/src/validate-semantic.ts +125 -73
- package/src/validate.ts +27 -0
- package/dist/__tests__/setup-validate.test.d.ts +0 -2
- package/dist/__tests__/setup-validate.test.d.ts.map +0 -1
- package/dist/__tests__/setup-validate.test.js +0 -108
- package/dist/__tests__/setup-validate.test.js.map +0 -1
- package/src/__tests__/setup-validate.test.ts +0 -148
- /package/src/__tests__/fixtures/{e2e-mustache.mock.yaml → e2e-liquid.mock.yaml} +0 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { OUTPUT_TEMPLATES } from "@united-workforce/protocol";
|
|
2
|
+
import { Liquid } from "liquidjs";
|
|
3
|
+
import { describe, expect, test } from "vitest";
|
|
4
|
+
/**
|
|
5
|
+
* Issue #351 — `uwf thread list --format text` rendered the `STARTED` column
|
|
6
|
+
* as `58414-12-06` because `THREAD_LIST_TEMPLATE` piped `item.startedAt` (Unix
|
|
7
|
+
* **ms** per `THREAD_LIST_OUTPUT_SCHEMA`) directly into LiquidJS's `| date`
|
|
8
|
+
* filter, which expects Unix **seconds**.
|
|
9
|
+
*
|
|
10
|
+
* This integration test renders the template against a known ms timestamp
|
|
11
|
+
* and asserts the year falls within the realistic 20xx range, confirming
|
|
12
|
+
* the ms→s conversion is in place at the protocol layer.
|
|
13
|
+
*/
|
|
14
|
+
function makeEngine() {
|
|
15
|
+
return new Liquid({ cache: false, strictFilters: false, strictVariables: false });
|
|
16
|
+
}
|
|
17
|
+
describe("THREAD_LIST_TEMPLATE rendering — issue #351 ms→s for `| date`", () => {
|
|
18
|
+
test("renders item.startedAt=1781229932779 as a 2026 calendar date (not 58414)", async () => {
|
|
19
|
+
const engine = makeEngine();
|
|
20
|
+
const out = await engine.parseAndRender(OUTPUT_TEMPLATES["thread-list"], {
|
|
21
|
+
items: [
|
|
22
|
+
{
|
|
23
|
+
threadId: "01K5HMKZQB7VDA8E2K9P3R5XBC",
|
|
24
|
+
workflowHash: "WF1234567890A",
|
|
25
|
+
workflowName: null,
|
|
26
|
+
status: "idle",
|
|
27
|
+
currentRole: "planner",
|
|
28
|
+
startedAt: 1781229932779,
|
|
29
|
+
completedAt: null,
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
});
|
|
33
|
+
expect(out).not.toContain("58414");
|
|
34
|
+
expect(out).toMatch(/\b20\d{2}-\d{2}-\d{2}\b/);
|
|
35
|
+
// The STARTED cell must NOT begin with a 5-digit year.
|
|
36
|
+
expect(out).not.toMatch(/\b\d{5}-\d{2}-\d{2}\b/);
|
|
37
|
+
});
|
|
38
|
+
test("renders `-` for items with startedAt=null (null guard preserved)", async () => {
|
|
39
|
+
const engine = makeEngine();
|
|
40
|
+
const out = await engine.parseAndRender(OUTPUT_TEMPLATES["thread-list"], {
|
|
41
|
+
items: [
|
|
42
|
+
{
|
|
43
|
+
threadId: "01K5HMKZQB7VDA8E2K9P3R5XBC",
|
|
44
|
+
workflowHash: "WF1234567890A",
|
|
45
|
+
workflowName: null,
|
|
46
|
+
status: "idle",
|
|
47
|
+
currentRole: "planner",
|
|
48
|
+
startedAt: null,
|
|
49
|
+
completedAt: null,
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
});
|
|
53
|
+
expect(out).not.toContain("58414");
|
|
54
|
+
expect(out).not.toContain("Invalid Date");
|
|
55
|
+
expect(out).not.toContain("1970-01-01");
|
|
56
|
+
// Last token of the row is the rendered STARTED cell — must be `-`.
|
|
57
|
+
const dataRow = out
|
|
58
|
+
.split("\n")
|
|
59
|
+
.find((line) => line.includes("01K5HMKZQB7VDA8E2K9P3R5XBC"));
|
|
60
|
+
expect(dataRow).toBeDefined();
|
|
61
|
+
expect(dataRow?.trimEnd().endsWith("-")).toBe(true);
|
|
62
|
+
});
|
|
63
|
+
test("renders multiple ms timestamps across years 2020–2030 with correct year prefix", async () => {
|
|
64
|
+
const engine = makeEngine();
|
|
65
|
+
const items = [
|
|
66
|
+
{
|
|
67
|
+
threadId: "ID1",
|
|
68
|
+
workflowHash: "WF",
|
|
69
|
+
workflowName: null,
|
|
70
|
+
status: "idle",
|
|
71
|
+
currentRole: null,
|
|
72
|
+
startedAt: Date.UTC(2020, 0, 1, 0, 0, 0),
|
|
73
|
+
completedAt: null,
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
threadId: "ID2",
|
|
77
|
+
workflowHash: "WF",
|
|
78
|
+
workflowName: null,
|
|
79
|
+
status: "idle",
|
|
80
|
+
currentRole: null,
|
|
81
|
+
startedAt: Date.UTC(2026, 5, 12, 5, 25, 0),
|
|
82
|
+
completedAt: null,
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
threadId: "ID3",
|
|
86
|
+
workflowHash: "WF",
|
|
87
|
+
workflowName: null,
|
|
88
|
+
status: "idle",
|
|
89
|
+
currentRole: null,
|
|
90
|
+
startedAt: Date.UTC(2030, 11, 31, 23, 59, 0),
|
|
91
|
+
completedAt: null,
|
|
92
|
+
},
|
|
93
|
+
];
|
|
94
|
+
const out = await engine.parseAndRender(OUTPUT_TEMPLATES["thread-list"], { items });
|
|
95
|
+
expect(out).toContain("2020-");
|
|
96
|
+
expect(out).toContain("2026-");
|
|
97
|
+
expect(out).toContain("2030-");
|
|
98
|
+
expect(out).not.toContain("58414");
|
|
99
|
+
expect(out).not.toMatch(/\b\d{5}-\d{2}-\d{2}\b/);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=thread-list-template-ms-date.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-list-template-ms-date.test.js","sourceRoot":"","sources":["../../src/__tests__/thread-list-template-ms-date.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-list-workflow-corrupt.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/thread-list-workflow-corrupt.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { mkdtemp, rm } from "node:fs/promises";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { createThreadIndexEntry } from "@united-workforce/protocol";
|
|
5
|
+
import { generateUlid } from "@united-workforce/util";
|
|
6
|
+
import { afterEach, beforeEach, describe, expect, test } from "vitest";
|
|
7
|
+
import { cmdThreadList } from "../commands/thread.js";
|
|
8
|
+
import { completeThread as completeThreadInStore, setThread } from "../store.js";
|
|
9
|
+
import { makeUwfStore } from "./thread-test-helpers.js";
|
|
10
|
+
// ── helpers ───────────────────────────────────────────────────────────────────
|
|
11
|
+
async function createTestWorkflow(uwf) {
|
|
12
|
+
const workflowPayload = {
|
|
13
|
+
name: "test-workflow",
|
|
14
|
+
roles: {
|
|
15
|
+
role1: {
|
|
16
|
+
goal: "test goal",
|
|
17
|
+
outputSchema: { type: "object", properties: {} },
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
graph: { start: "role1" },
|
|
21
|
+
conditions: {},
|
|
22
|
+
};
|
|
23
|
+
return await uwf.store.cas.put(uwf.schemas.workflow, workflowPayload);
|
|
24
|
+
}
|
|
25
|
+
async function createTestThread(uwf, storageRoot, workflowHash, timestamp) {
|
|
26
|
+
const threadId = generateUlid(timestamp);
|
|
27
|
+
const startPayload = {
|
|
28
|
+
workflow: workflowHash,
|
|
29
|
+
prompt: "test prompt",
|
|
30
|
+
cwd: storageRoot,
|
|
31
|
+
};
|
|
32
|
+
const headHash = await uwf.store.cas.put(uwf.schemas.startNode, startPayload);
|
|
33
|
+
setThread(uwf.varStore, threadId, createThreadIndexEntry(headHash));
|
|
34
|
+
return threadId;
|
|
35
|
+
}
|
|
36
|
+
// ── test setup ────────────────────────────────────────────────────────────────
|
|
37
|
+
let tmpDir;
|
|
38
|
+
let savedOcasHome;
|
|
39
|
+
beforeEach(async () => {
|
|
40
|
+
savedOcasHome = process.env.OCAS_HOME;
|
|
41
|
+
tmpDir = await mkdtemp(join(tmpdir(), "thread-list-workflow-corrupt-test-"));
|
|
42
|
+
});
|
|
43
|
+
afterEach(async () => {
|
|
44
|
+
if (savedOcasHome === undefined) {
|
|
45
|
+
delete process.env.OCAS_HOME;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
process.env.OCAS_HOME = savedOcasHome;
|
|
49
|
+
}
|
|
50
|
+
await rm(tmpDir, { recursive: true, force: true });
|
|
51
|
+
});
|
|
52
|
+
// ── issue #326: loadWorkflowPayload throws instead of process.exit ───────────
|
|
53
|
+
describe("loadWorkflowPayload throws on error (#326)", () => {
|
|
54
|
+
test("active thread with missing workflow CAS node appears as corrupt", async () => {
|
|
55
|
+
const uwf = await makeUwfStore(tmpDir);
|
|
56
|
+
const workflowHash = await createTestWorkflow(uwf);
|
|
57
|
+
const now = Date.now();
|
|
58
|
+
// Create a valid thread
|
|
59
|
+
const validId = await createTestThread(uwf, tmpDir, workflowHash, now);
|
|
60
|
+
// Create a thread with a different workflow, then delete it
|
|
61
|
+
const otherWorkflowPayload = {
|
|
62
|
+
name: "other-workflow",
|
|
63
|
+
roles: {
|
|
64
|
+
role1: {
|
|
65
|
+
goal: "other goal",
|
|
66
|
+
outputSchema: { type: "object", properties: {} },
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
graph: { start: "role1" },
|
|
70
|
+
conditions: {},
|
|
71
|
+
};
|
|
72
|
+
const otherWorkflowHash = await uwf.store.cas.put(uwf.schemas.workflow, otherWorkflowPayload);
|
|
73
|
+
const corruptId = await createTestThread(uwf, tmpDir, otherWorkflowHash, now + 1000);
|
|
74
|
+
// Delete the other workflow CAS node — start node still exists but workflow ref dangles
|
|
75
|
+
uwf.store.cas.delete(otherWorkflowHash);
|
|
76
|
+
// thread list should NOT crash — corrupt thread appears with status: "corrupt"
|
|
77
|
+
const result = await cmdThreadList(tmpDir, null, null, null, null, null, true);
|
|
78
|
+
expect(result.length).toBe(2);
|
|
79
|
+
const validItem = result.find((r) => r.thread === validId);
|
|
80
|
+
expect(validItem).toBeDefined();
|
|
81
|
+
expect(validItem.status).toBe("idle");
|
|
82
|
+
const corruptItem = result.find((r) => r.thread === corruptId);
|
|
83
|
+
expect(corruptItem).toBeDefined();
|
|
84
|
+
expect(corruptItem.status).toBe("corrupt");
|
|
85
|
+
expect(corruptItem.statusDisplay).toBe("corrupt");
|
|
86
|
+
});
|
|
87
|
+
test("active thread with wrong-type workflow CAS node appears as corrupt", async () => {
|
|
88
|
+
const uwf = await makeUwfStore(tmpDir);
|
|
89
|
+
const now = Date.now();
|
|
90
|
+
// Create a valid workflow and thread
|
|
91
|
+
const workflowHash = await createTestWorkflow(uwf);
|
|
92
|
+
const validId = await createTestThread(uwf, tmpDir, workflowHash, now);
|
|
93
|
+
// Create a non-workflow CAS node (text type) and use its hash as a workflow ref
|
|
94
|
+
const wrongTypeHash = await uwf.store.cas.put(uwf.schemas.text, "not a workflow");
|
|
95
|
+
// Create a thread whose start node points to the wrong-type CAS node
|
|
96
|
+
const corruptId = generateUlid(now + 1000);
|
|
97
|
+
const startPayload = {
|
|
98
|
+
workflow: wrongTypeHash,
|
|
99
|
+
prompt: "corrupt thread with wrong type workflow",
|
|
100
|
+
cwd: tmpDir,
|
|
101
|
+
};
|
|
102
|
+
const headHash = await uwf.store.cas.put(uwf.schemas.startNode, startPayload);
|
|
103
|
+
setThread(uwf.varStore, corruptId, createThreadIndexEntry(headHash));
|
|
104
|
+
// thread list should NOT crash — wrong-type thread appears as corrupt
|
|
105
|
+
const result = await cmdThreadList(tmpDir, null, null, null, null, null, true);
|
|
106
|
+
expect(result.length).toBe(2);
|
|
107
|
+
const validItem = result.find((r) => r.thread === validId);
|
|
108
|
+
expect(validItem).toBeDefined();
|
|
109
|
+
expect(validItem.status).toBe("idle");
|
|
110
|
+
const corruptItem = result.find((r) => r.thread === corruptId);
|
|
111
|
+
expect(corruptItem).toBeDefined();
|
|
112
|
+
expect(corruptItem.status).toBe("corrupt");
|
|
113
|
+
expect(corruptItem.statusDisplay).toBe("corrupt");
|
|
114
|
+
});
|
|
115
|
+
test("completed thread with missing workflow CAS node retains stored status with --all", async () => {
|
|
116
|
+
const uwf = await makeUwfStore(tmpDir);
|
|
117
|
+
const now = Date.now();
|
|
118
|
+
// Create two separate workflows so we can corrupt one without affecting the other
|
|
119
|
+
const activeWorkflowHash = await createTestWorkflow(uwf);
|
|
120
|
+
const completedWorkflowPayload = {
|
|
121
|
+
name: "completed-workflow",
|
|
122
|
+
roles: {
|
|
123
|
+
role1: {
|
|
124
|
+
goal: "completed goal",
|
|
125
|
+
outputSchema: { type: "object", properties: {} },
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
graph: { start: "role1" },
|
|
129
|
+
conditions: {},
|
|
130
|
+
};
|
|
131
|
+
const completedWorkflowHash = await uwf.store.cas.put(uwf.schemas.workflow, completedWorkflowPayload);
|
|
132
|
+
// Create a valid active thread
|
|
133
|
+
const activeId = await createTestThread(uwf, tmpDir, activeWorkflowHash, now);
|
|
134
|
+
// Create a thread and complete it
|
|
135
|
+
const completedId = await createTestThread(uwf, tmpDir, completedWorkflowHash, now + 1000);
|
|
136
|
+
completeThreadInStore(uwf.varStore, completedId, "end");
|
|
137
|
+
// Delete only the completed thread's workflow CAS node
|
|
138
|
+
uwf.store.cas.delete(completedWorkflowHash);
|
|
139
|
+
// thread list --all should NOT crash
|
|
140
|
+
const result = await cmdThreadList(tmpDir, null, null, null, null, null, true);
|
|
141
|
+
expect(result.length).toBe(2);
|
|
142
|
+
// Active thread is still valid (its workflow exists)
|
|
143
|
+
const activeItem = result.find((r) => r.thread === activeId);
|
|
144
|
+
expect(activeItem).toBeDefined();
|
|
145
|
+
expect(activeItem.status).toBe("idle");
|
|
146
|
+
// Completed thread retains its stored status — collectCompletedThreads only calls
|
|
147
|
+
// resolveWorkflowFromHead (returns ref from start node) and never loads the workflow CAS node
|
|
148
|
+
const completedItem = result.find((r) => r.thread === completedId);
|
|
149
|
+
expect(completedItem).toBeDefined();
|
|
150
|
+
expect(completedItem.status).toBe("end");
|
|
151
|
+
expect(completedItem.statusDisplay).toBe("end");
|
|
152
|
+
// workflowName is null because the workflow ref won't match a registry entry
|
|
153
|
+
// (the deleted workflow was never registered)
|
|
154
|
+
expect(completedItem.workflowName).toBeNull();
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
//# sourceMappingURL=thread-list-workflow-corrupt.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-list-workflow-corrupt.test.js","sourceRoot":"","sources":["../../src/__tests__/thread-list-workflow-corrupt.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-poke.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/thread-poke.test.ts"],"names":[],"mappings":""}
|