@united-workforce/cli 0.4.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 +30 -3
- package/dist/.build-fingerprint +1 -0
- package/dist/__tests__/adapter-json-roundtrip.test.js +16 -6
- package/dist/__tests__/adapter-json-roundtrip.test.js.map +1 -1
- 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__/e2e-mock-agent.test.js +23 -7
- 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__/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__/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.js +9 -7
- package/dist/__tests__/pid-recycling.test.js.map +1 -1
- package/dist/__tests__/prompt.test.js +46 -4
- package/dist/__tests__/prompt.test.js.map +1 -1
- package/dist/__tests__/resolve-head-hash.test.js +8 -0
- package/dist/__tests__/resolve-head-hash.test.js.map +1 -1
- package/dist/__tests__/solve-issue-tea-worktree.test.js +3 -1
- package/dist/__tests__/solve-issue-tea-worktree.test.js.map +1 -1
- package/dist/__tests__/step-ask.test.js +9 -1
- package/dist/__tests__/step-ask.test.js.map +1 -1
- package/dist/__tests__/store-unified-threads.test.js +19 -17
- package/dist/__tests__/store-unified-threads.test.js.map +1 -1
- package/dist/__tests__/thread-cancel-status.test.js +19 -13
- 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 +10 -8
- 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.js +11 -1
- package/dist/__tests__/thread-poke.test.js.map +1 -1
- 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 +11 -1
- package/dist/__tests__/thread-resume.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 +5 -2
- package/dist/__tests__/thread-suspend-step.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 +11 -9
- package/dist/__tests__/thread.test.js.map +1 -1
- package/dist/__tests__/validate-semantic.test.js +56 -2
- package/dist/__tests__/validate-semantic.test.js.map +1 -1
- package/dist/__tests__/workflow-list-recursive.test.js +10 -7
- package/dist/__tests__/workflow-list-recursive.test.js.map +1 -1
- package/dist/__tests__/workflow-resolution.test.js +10 -7
- package/dist/__tests__/workflow-resolution.test.js.map +1 -1
- package/dist/__tests__/workflow-show-resolution.test.js +10 -7
- package/dist/__tests__/workflow-show-resolution.test.js.map +1 -1
- package/dist/__tests__/workflow-validate.test.js +75 -55
- package/dist/__tests__/workflow-validate.test.js.map +1 -1
- 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/cli.js +58 -35
- package/dist/cli.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +12 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/prompt.d.ts.map +1 -1
- package/dist/commands/prompt.js +42 -29
- package/dist/commands/prompt.js.map +1 -1
- package/dist/commands/setup.d.ts +9 -4
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +51 -7
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/thread.d.ts.map +1 -1
- package/dist/commands/thread.js +44 -2
- package/dist/commands/thread.js.map +1 -1
- package/dist/commands/workflow.d.ts +1 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +2 -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/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 +4 -1
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +31 -4
- package/dist/schemas.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 +28 -11
- package/dist/validate-semantic.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 +5 -4
- package/src/__tests__/adapter-json-roundtrip.test.ts +15 -6
- package/src/__tests__/concurrency.test.ts +266 -0
- package/src/__tests__/e2e-mock-agent.test.ts +45 -7
- package/src/__tests__/format-text-default.test.ts +49 -0
- package/src/__tests__/format-text-registry.test.ts +173 -0
- package/src/__tests__/log-text-renderer.test.ts +294 -0
- 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 +9 -8
- package/src/__tests__/prompt.test.ts +48 -4
- package/src/__tests__/resolve-head-hash.test.ts +7 -0
- package/src/__tests__/solve-issue-tea-worktree.test.ts +3 -1
- package/src/__tests__/step-ask.test.ts +8 -1
- package/src/__tests__/store-unified-threads.test.ts +21 -18
- package/src/__tests__/thread-cancel-status.test.ts +21 -14
- package/src/__tests__/thread-cancel-text-renderer.test.ts +125 -0
- package/src/__tests__/thread-list-filters.test.ts +9 -9
- 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 +10 -1
- package/src/__tests__/thread-read-xml-tags.test.ts +9 -11
- package/src/__tests__/thread-resume.test.ts +10 -1
- 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 +5 -2
- package/src/__tests__/thread-test-helpers.ts +15 -1
- package/src/__tests__/thread.test.ts +10 -10
- package/src/__tests__/validate-semantic.test.ts +59 -2
- package/src/__tests__/workflow-list-recursive.test.ts +9 -9
- package/src/__tests__/workflow-resolution.test.ts +9 -8
- package/src/__tests__/workflow-show-resolution.test.ts +9 -8
- package/src/__tests__/workflow-validate.test.ts +78 -56
- package/src/__tests__/write-envelope.test.ts +257 -0
- package/src/cli.ts +92 -35
- package/src/commands/config.ts +11 -0
- package/src/commands/prompt.ts +42 -29
- package/src/commands/setup.ts +57 -7
- package/src/commands/thread.ts +48 -2
- package/src/commands/workflow.ts +3 -7
- 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/output-mappers.ts +254 -0
- package/src/schemas.ts +39 -3
- package/src/text-renderers.ts +355 -0
- package/src/validate-semantic.ts +33 -12
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import type { CasRef, StartOutput, StepOutput } from "@united-workforce/protocol";
|
|
2
|
+
import type { ThreadListItemWithStatus } from "./commands/thread.js";
|
|
3
|
+
import type { WorkflowAddOutput, WorkflowListEntry, WorkflowShowOutput } from "./commands/workflow.js";
|
|
4
|
+
/**
|
|
5
|
+
* Mappers that convert the existing rich command outputs into the
|
|
6
|
+
* schema-aligned payload shapes registered under `@uwf/output/*`.
|
|
7
|
+
*
|
|
8
|
+
* Each mapper returns plain payload data — no CAS refs, no JSON encoding,
|
|
9
|
+
* no I/O. The CLI calls one of these immediately before handing the payload
|
|
10
|
+
* to `writeEnvelope`.
|
|
11
|
+
*/
|
|
12
|
+
export type ThreadStartPayload = {
|
|
13
|
+
threadId: string;
|
|
14
|
+
workflowHash: string;
|
|
15
|
+
};
|
|
16
|
+
export declare function toThreadStartPayload(out: StartOutput): ThreadStartPayload;
|
|
17
|
+
export type ThreadStatusPayload = {
|
|
18
|
+
threadId: string;
|
|
19
|
+
workflowHash: string;
|
|
20
|
+
head: string | null;
|
|
21
|
+
status: string;
|
|
22
|
+
currentRole: string | null;
|
|
23
|
+
suspendedRole: string | null;
|
|
24
|
+
suspendMessage: string | null;
|
|
25
|
+
done: boolean;
|
|
26
|
+
};
|
|
27
|
+
export declare function toThreadStatusPayload(out: StepOutput): ThreadStatusPayload;
|
|
28
|
+
export type ThreadListPayload = {
|
|
29
|
+
items: Array<{
|
|
30
|
+
threadId: string;
|
|
31
|
+
workflowHash: string;
|
|
32
|
+
workflowName: string | null;
|
|
33
|
+
status: string;
|
|
34
|
+
currentRole: string | null;
|
|
35
|
+
startedAt: number | null;
|
|
36
|
+
completedAt: number | null;
|
|
37
|
+
}>;
|
|
38
|
+
};
|
|
39
|
+
export declare function toThreadListPayload(items: ThreadListItemWithStatus[]): ThreadListPayload;
|
|
40
|
+
export type ThreadExecPayload = {
|
|
41
|
+
threadId: string;
|
|
42
|
+
workflowHash: string;
|
|
43
|
+
steps: Array<{
|
|
44
|
+
head: string;
|
|
45
|
+
status: string;
|
|
46
|
+
currentRole: string | null;
|
|
47
|
+
done: boolean;
|
|
48
|
+
role: string | null;
|
|
49
|
+
suspendedRole: string | null;
|
|
50
|
+
suspendMessage: string | null;
|
|
51
|
+
}>;
|
|
52
|
+
};
|
|
53
|
+
export declare function toThreadExecPayload(results: StepOutput[]): ThreadExecPayload;
|
|
54
|
+
export type StepDetailPayload = {
|
|
55
|
+
hash: string;
|
|
56
|
+
role: string;
|
|
57
|
+
agent: string;
|
|
58
|
+
status: string;
|
|
59
|
+
startedAtMs: number | null;
|
|
60
|
+
completedAtMs: number | null;
|
|
61
|
+
durationMs: number | null;
|
|
62
|
+
frontmatter: Record<string, unknown>;
|
|
63
|
+
turns: Array<{
|
|
64
|
+
role: string;
|
|
65
|
+
content: string;
|
|
66
|
+
timestamp: number | null;
|
|
67
|
+
}>;
|
|
68
|
+
};
|
|
69
|
+
export declare function toStepDetailPayload(stepHash: CasRef, raw: unknown): StepDetailPayload;
|
|
70
|
+
export type StepListPayload = {
|
|
71
|
+
threadId: string;
|
|
72
|
+
items: Array<{
|
|
73
|
+
hash: string;
|
|
74
|
+
role: string;
|
|
75
|
+
durationMs: number | null;
|
|
76
|
+
}>;
|
|
77
|
+
};
|
|
78
|
+
type StepsLikeOutput = {
|
|
79
|
+
thread: string;
|
|
80
|
+
steps: Array<{
|
|
81
|
+
hash: CasRef;
|
|
82
|
+
role?: string;
|
|
83
|
+
durationMs?: number;
|
|
84
|
+
}>;
|
|
85
|
+
};
|
|
86
|
+
export declare function toStepListPayload(out: StepsLikeOutput): StepListPayload;
|
|
87
|
+
export type WorkflowDetailPayload = {
|
|
88
|
+
name: string;
|
|
89
|
+
hash: string;
|
|
90
|
+
version: number;
|
|
91
|
+
description: string;
|
|
92
|
+
roles: Record<string, {
|
|
93
|
+
description: string;
|
|
94
|
+
goal: string;
|
|
95
|
+
}>;
|
|
96
|
+
graph: Record<string, Record<string, {
|
|
97
|
+
role: string;
|
|
98
|
+
prompt: string;
|
|
99
|
+
}>>;
|
|
100
|
+
};
|
|
101
|
+
export declare function toWorkflowDetailPayload(out: WorkflowShowOutput): WorkflowDetailPayload;
|
|
102
|
+
export type WorkflowListPayload = {
|
|
103
|
+
items: Array<{
|
|
104
|
+
name: string;
|
|
105
|
+
hash: string;
|
|
106
|
+
source: string;
|
|
107
|
+
description: string;
|
|
108
|
+
}>;
|
|
109
|
+
};
|
|
110
|
+
export declare function toWorkflowListPayload(entries: WorkflowListEntry[]): WorkflowListPayload;
|
|
111
|
+
export type WorkflowAddPayload = {
|
|
112
|
+
name: string;
|
|
113
|
+
hash: string;
|
|
114
|
+
};
|
|
115
|
+
export declare function toWorkflowAddPayload(out: WorkflowAddOutput): WorkflowAddPayload;
|
|
116
|
+
export type ValidateResultPayload = {
|
|
117
|
+
valid: boolean;
|
|
118
|
+
errors: string[];
|
|
119
|
+
};
|
|
120
|
+
export declare function toValidateResultPayload(errors: string[]): ValidateResultPayload;
|
|
121
|
+
export {};
|
|
122
|
+
//# sourceMappingURL=output-mappers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-mappers.d.ts","sourceRoot":"","sources":["../src/output-mappers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { extractUlidTimestamp } from "@united-workforce/util";
|
|
2
|
+
export function toThreadStartPayload(out) {
|
|
3
|
+
return { threadId: out.thread, workflowHash: out.workflow };
|
|
4
|
+
}
|
|
5
|
+
export function toThreadStatusPayload(out) {
|
|
6
|
+
return {
|
|
7
|
+
threadId: out.thread,
|
|
8
|
+
workflowHash: out.workflow,
|
|
9
|
+
head: out.head ?? null,
|
|
10
|
+
status: out.status,
|
|
11
|
+
currentRole: out.currentRole,
|
|
12
|
+
suspendedRole: out.suspendedRole,
|
|
13
|
+
suspendMessage: out.suspendMessage,
|
|
14
|
+
done: out.done,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export function toThreadListPayload(items) {
|
|
18
|
+
return {
|
|
19
|
+
items: items.map((it) => ({
|
|
20
|
+
threadId: it.thread,
|
|
21
|
+
workflowHash: it.workflow,
|
|
22
|
+
workflowName: it.workflowName,
|
|
23
|
+
status: it.status,
|
|
24
|
+
currentRole: it.currentRole,
|
|
25
|
+
startedAt: extractUlidTimestamp(it.thread),
|
|
26
|
+
completedAt: null,
|
|
27
|
+
})),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export function toThreadExecPayload(results) {
|
|
31
|
+
const first = results[0];
|
|
32
|
+
return {
|
|
33
|
+
threadId: first?.thread ?? "",
|
|
34
|
+
workflowHash: first?.workflow ?? "",
|
|
35
|
+
steps: results.map((r) => ({
|
|
36
|
+
head: r.head,
|
|
37
|
+
status: r.status,
|
|
38
|
+
currentRole: r.currentRole,
|
|
39
|
+
done: r.done,
|
|
40
|
+
role: r.currentRole ?? r.suspendedRole ?? null,
|
|
41
|
+
suspendedRole: r.suspendedRole,
|
|
42
|
+
suspendMessage: r.suspendMessage,
|
|
43
|
+
})),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export function toStepDetailPayload(stepHash, raw) {
|
|
47
|
+
const r = (raw ?? {});
|
|
48
|
+
const turnsIn = Array.isArray(r.turns) ? r.turns : [];
|
|
49
|
+
const startedAtMs = numericOrNull(r.startedAtMs);
|
|
50
|
+
const completedAtMs = numericOrNull(r.completedAtMs);
|
|
51
|
+
const durationMs = startedAtMs !== null && completedAtMs !== null && completedAtMs >= startedAtMs
|
|
52
|
+
? completedAtMs - startedAtMs
|
|
53
|
+
: null;
|
|
54
|
+
const frontmatter = r.frontmatter !== null && typeof r.frontmatter === "object" && !Array.isArray(r.frontmatter)
|
|
55
|
+
? r.frontmatter
|
|
56
|
+
: {};
|
|
57
|
+
const status = typeof frontmatter.$status === "string"
|
|
58
|
+
? frontmatter.$status
|
|
59
|
+
: typeof r.status === "string"
|
|
60
|
+
? r.status
|
|
61
|
+
: "";
|
|
62
|
+
return {
|
|
63
|
+
hash: stepHash,
|
|
64
|
+
role: typeof r.role === "string" ? r.role : "",
|
|
65
|
+
agent: typeof r.agent === "string" ? r.agent : "",
|
|
66
|
+
status,
|
|
67
|
+
startedAtMs,
|
|
68
|
+
completedAtMs,
|
|
69
|
+
durationMs,
|
|
70
|
+
frontmatter,
|
|
71
|
+
turns: turnsIn.map((t) => {
|
|
72
|
+
const o = (t ?? {});
|
|
73
|
+
return {
|
|
74
|
+
role: typeof o.role === "string" ? o.role : "",
|
|
75
|
+
content: typeof o.content === "string" ? o.content : "",
|
|
76
|
+
timestamp: numericOrNull(o.timestamp),
|
|
77
|
+
};
|
|
78
|
+
}),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function numericOrNull(v) {
|
|
82
|
+
return typeof v === "number" && Number.isFinite(v) ? v : null;
|
|
83
|
+
}
|
|
84
|
+
export function toStepListPayload(out) {
|
|
85
|
+
return {
|
|
86
|
+
threadId: out.thread,
|
|
87
|
+
items: out.steps
|
|
88
|
+
.filter((s) => typeof s.role === "string")
|
|
89
|
+
.map((s) => ({
|
|
90
|
+
hash: s.hash,
|
|
91
|
+
role: s.role ?? "",
|
|
92
|
+
durationMs: typeof s.durationMs === "number" ? s.durationMs : null,
|
|
93
|
+
})),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
export function toWorkflowDetailPayload(out) {
|
|
97
|
+
const roles = {};
|
|
98
|
+
for (const [name, def] of Object.entries(out.payload.roles)) {
|
|
99
|
+
roles[name] = { description: def.description, goal: def.goal };
|
|
100
|
+
}
|
|
101
|
+
const graph = {};
|
|
102
|
+
for (const [from, transitions] of Object.entries(out.payload.graph)) {
|
|
103
|
+
const t = {};
|
|
104
|
+
for (const [status, target] of Object.entries(transitions)) {
|
|
105
|
+
t[status] = { role: target.role, prompt: target.prompt };
|
|
106
|
+
}
|
|
107
|
+
graph[from] = t;
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
name: out.name ?? out.payload.name,
|
|
111
|
+
hash: out.hash,
|
|
112
|
+
version: out.payload.version,
|
|
113
|
+
description: out.payload.description,
|
|
114
|
+
roles,
|
|
115
|
+
graph,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
export function toWorkflowListPayload(entries) {
|
|
119
|
+
return {
|
|
120
|
+
items: entries.map((e) => ({
|
|
121
|
+
name: e.name,
|
|
122
|
+
hash: e.hash,
|
|
123
|
+
source: e.origin === "local" ? ".workflows" : "registry",
|
|
124
|
+
description: "",
|
|
125
|
+
})),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
export function toWorkflowAddPayload(out) {
|
|
129
|
+
return { name: out.name, hash: out.hash };
|
|
130
|
+
}
|
|
131
|
+
export function toValidateResultPayload(errors) {
|
|
132
|
+
return { valid: errors.length === 0, errors };
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=output-mappers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-mappers.js","sourceRoot":"","sources":["../src/output-mappers.ts"],"names":[],"mappings":"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"}
|
package/dist/schemas.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Hash, Store } from "@ocas/core";
|
|
2
|
+
import { type OutputSchemaName } from "@united-workforce/protocol";
|
|
2
3
|
export declare const TEXT_SCHEMA: {
|
|
3
4
|
type: "string";
|
|
4
5
|
};
|
|
@@ -9,9 +10,11 @@ export type UwfSchemaHashes = {
|
|
|
9
10
|
text: Hash;
|
|
10
11
|
errorOutput: Hash;
|
|
11
12
|
suspendOutput: Hash;
|
|
13
|
+
outputs: Record<OutputSchemaName, Hash>;
|
|
12
14
|
};
|
|
13
15
|
/**
|
|
14
|
-
* Register
|
|
16
|
+
* Register every uwf JSON Schema (workflow / start / step / error / suspend
|
|
17
|
+
* + the 9 CLI output envelopes) and the matching `text` Liquid templates.
|
|
15
18
|
* Idempotent: safe to call on every CLI invocation.
|
|
16
19
|
*/
|
|
17
20
|
export declare function registerUwfSchemas(store: Store): Promise<UwfSchemaHashes>;
|
package/dist/schemas.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
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;AAE9C,OAAO,EAIL,KAAK,gBAAgB,EAMtB,MAAM,4BAA4B,CAAC;AAEpC,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;IACX,WAAW,EAAE,IAAI,CAAC;IAClB,aAAa,EAAE,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;CACzC,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,eAAe,CAAC,CAW/E"}
|
package/dist/schemas.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { putSchema } from "@ocas/core";
|
|
2
|
-
import { ERROR_OUTPUT_SCHEMA, START_NODE_SCHEMA, STEP_NODE_SCHEMA, SUSPEND_OUTPUT_SCHEMA, WORKFLOW_SCHEMA, } from "@united-workforce/protocol";
|
|
1
|
+
import { bootstrap, putSchema } from "@ocas/core";
|
|
2
|
+
import { ERROR_OUTPUT_SCHEMA, OUTPUT_SCHEMAS, OUTPUT_TEMPLATES, outputSchemaVarName, START_NODE_SCHEMA, STEP_NODE_SCHEMA, SUSPEND_OUTPUT_SCHEMA, WORKFLOW_SCHEMA, } from "@united-workforce/protocol";
|
|
3
3
|
export const TEXT_SCHEMA = { type: "string" };
|
|
4
4
|
/**
|
|
5
|
-
* Register
|
|
5
|
+
* Register every uwf JSON Schema (workflow / start / step / error / suspend
|
|
6
|
+
* + the 9 CLI output envelopes) and the matching `text` Liquid templates.
|
|
6
7
|
* Idempotent: safe to call on every CLI invocation.
|
|
7
8
|
*/
|
|
8
9
|
export async function registerUwfSchemas(store) {
|
|
@@ -14,6 +15,32 @@ export async function registerUwfSchemas(store) {
|
|
|
14
15
|
putSchema(store, ERROR_OUTPUT_SCHEMA),
|
|
15
16
|
putSchema(store, SUSPEND_OUTPUT_SCHEMA),
|
|
16
17
|
]);
|
|
17
|
-
|
|
18
|
+
const outputs = await registerOutputSchemas(store);
|
|
19
|
+
return { workflow, startNode, stepNode, text, errorOutput, suspendOutput, outputs };
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Register the 9 CLI output schemas, bind `@uwf/output/<name>` to each, store
|
|
23
|
+
* each Liquid template as an `@ocas/string` CAS node, and bind
|
|
24
|
+
* `@ocas/template/text/<schemaHash>` to the template content hash.
|
|
25
|
+
*
|
|
26
|
+
* Idempotent: writes are content-addressed so repeat invocations no-op.
|
|
27
|
+
*/
|
|
28
|
+
async function registerOutputSchemas(store) {
|
|
29
|
+
const aliases = bootstrap(store);
|
|
30
|
+
const stringHash = aliases["@ocas/string"];
|
|
31
|
+
if (stringHash === undefined) {
|
|
32
|
+
throw new Error("@ocas/string schema not found in bootstrap result");
|
|
33
|
+
}
|
|
34
|
+
const result = {};
|
|
35
|
+
const names = Object.keys(OUTPUT_SCHEMAS);
|
|
36
|
+
for (const name of names) {
|
|
37
|
+
const schemaHash = await putSchema(store, OUTPUT_SCHEMAS[name]);
|
|
38
|
+
store.var.set(outputSchemaVarName(name), schemaHash);
|
|
39
|
+
const template = OUTPUT_TEMPLATES[name];
|
|
40
|
+
const contentHash = store.cas.put(stringHash, template);
|
|
41
|
+
store.var.set(`@ocas/template/text/${schemaHash}`, contentHash);
|
|
42
|
+
result[name] = schemaHash;
|
|
43
|
+
}
|
|
44
|
+
return result;
|
|
18
45
|
}
|
|
19
46
|
//# sourceMappingURL=schemas.js.map
|
package/dist/schemas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAEhB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,GAChB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,QAAiB,EAAE,CAAC;AAYvD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,KAAY;IACnD,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC1F,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;QAC7B,SAAS,CAAC,KAAK,EAAE,mBAAmB,CAAC;QACrC,SAAS,CAAC,KAAK,EAAE,qBAAqB,CAAC;KACxC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACnD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;AACtF,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,qBAAqB,CAAC,KAAY;IAC/C,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,MAAM,GAAG,EAAoC,CAAC;IACpD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAuB,CAAC;IAChE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;QAErD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACxD,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,uBAAuB,UAAU,EAAE,EAAE,WAAW,CAAC,CAAC;QAEhE,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;IAC5B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-command text renderers — the per-command registry from spec
|
|
3
|
+
* `cli-format-text-renderer-registry.md`.
|
|
4
|
+
*
|
|
5
|
+
* Each renderer accepts the command's payload (already mapped via the
|
|
6
|
+
* output-mappers module) and returns a human-readable string. Renderers must
|
|
7
|
+
* never throw on partial/missing data and must never return `undefined`.
|
|
8
|
+
*
|
|
9
|
+
* Distinct from the existing Liquid template registry in `format.ts`: this
|
|
10
|
+
* registry is plain JS functions (the spec contract is
|
|
11
|
+
* `Record<string, (data: unknown) => string>`). The Liquid templates remain
|
|
12
|
+
* the primary rendering path inside `writeEnvelope`; these renderers are the
|
|
13
|
+
* fallback contract surface so callers can resolve `text` rendering without
|
|
14
|
+
* needing access to a CAS store.
|
|
15
|
+
*/
|
|
16
|
+
export declare function renderThreadList(data: unknown): string;
|
|
17
|
+
export declare function renderThreadShow(data: unknown): string;
|
|
18
|
+
export declare function renderThreadStart(data: unknown): string;
|
|
19
|
+
export declare function renderWorkflowList(data: unknown): string;
|
|
20
|
+
export declare function renderWorkflowShow(data: unknown): string;
|
|
21
|
+
export declare function renderStepList(data: unknown): string;
|
|
22
|
+
export declare function renderStepShow(data: unknown): string;
|
|
23
|
+
export declare function renderThreadCancel(data: unknown): string;
|
|
24
|
+
export declare function renderThreadStop(data: unknown): string;
|
|
25
|
+
export declare function renderConfigList(data: unknown): string;
|
|
26
|
+
export declare function renderConfigGet(data: unknown): string;
|
|
27
|
+
export declare function renderConfigSet(data: unknown): string;
|
|
28
|
+
export declare function renderLogList(data: unknown): string;
|
|
29
|
+
export declare function renderLogShow(data: unknown): string;
|
|
30
|
+
//# sourceMappingURL=text-renderers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-renderers.d.ts","sourceRoot":"","sources":["../src/text-renderers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAoHH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAgBtD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAuBtD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAGvD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAaxD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAgBxD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAYpD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CASpD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAQxD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAItD;AAuBD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAItD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CASrD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAMrD;AA2BD,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAYnD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAiBnD"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-command text renderers — the per-command registry from spec
|
|
3
|
+
* `cli-format-text-renderer-registry.md`.
|
|
4
|
+
*
|
|
5
|
+
* Each renderer accepts the command's payload (already mapped via the
|
|
6
|
+
* output-mappers module) and returns a human-readable string. Renderers must
|
|
7
|
+
* never throw on partial/missing data and must never return `undefined`.
|
|
8
|
+
*
|
|
9
|
+
* Distinct from the existing Liquid template registry in `format.ts`: this
|
|
10
|
+
* registry is plain JS functions (the spec contract is
|
|
11
|
+
* `Record<string, (data: unknown) => string>`). The Liquid templates remain
|
|
12
|
+
* the primary rendering path inside `writeEnvelope`; these renderers are the
|
|
13
|
+
* fallback contract surface so callers can resolve `text` rendering without
|
|
14
|
+
* needing access to a CAS store.
|
|
15
|
+
*/
|
|
16
|
+
function asObject(data) {
|
|
17
|
+
if (data !== null && typeof data === "object" && !Array.isArray(data)) {
|
|
18
|
+
return data;
|
|
19
|
+
}
|
|
20
|
+
return {};
|
|
21
|
+
}
|
|
22
|
+
function asString(value, fallback = "-") {
|
|
23
|
+
if (typeof value === "string" && value.length > 0)
|
|
24
|
+
return value;
|
|
25
|
+
return fallback;
|
|
26
|
+
}
|
|
27
|
+
function asArray(value) {
|
|
28
|
+
return Array.isArray(value) ? value : [];
|
|
29
|
+
}
|
|
30
|
+
function formatDuration(durationMs) {
|
|
31
|
+
if (typeof durationMs !== "number" || !Number.isFinite(durationMs))
|
|
32
|
+
return "-";
|
|
33
|
+
if (durationMs >= 1000)
|
|
34
|
+
return `${(durationMs / 1000).toFixed(1)}s`;
|
|
35
|
+
return `${durationMs}ms`;
|
|
36
|
+
}
|
|
37
|
+
function pad(s, width) {
|
|
38
|
+
if (s.length >= width)
|
|
39
|
+
return s.slice(0, width);
|
|
40
|
+
return s + " ".repeat(width - s.length);
|
|
41
|
+
}
|
|
42
|
+
function formatTimestamp(ts) {
|
|
43
|
+
if (typeof ts !== "number" || !Number.isFinite(ts))
|
|
44
|
+
return "-";
|
|
45
|
+
const d = new Date(ts);
|
|
46
|
+
if (Number.isNaN(d.getTime()))
|
|
47
|
+
return "-";
|
|
48
|
+
const pad2 = (n) => n.toString().padStart(2, "0");
|
|
49
|
+
return `${d.getFullYear()}-${pad2(d.getMonth() + 1)}-${pad2(d.getDate())} ${pad2(d.getHours())}:${pad2(d.getMinutes())}`;
|
|
50
|
+
}
|
|
51
|
+
export function renderThreadList(data) {
|
|
52
|
+
const payload = asObject(data);
|
|
53
|
+
const items = asArray(payload.items);
|
|
54
|
+
const lines = [
|
|
55
|
+
"THREAD WORKFLOW STATUS ROLE STARTED",
|
|
56
|
+
];
|
|
57
|
+
for (const item of items) {
|
|
58
|
+
const it = asObject(item);
|
|
59
|
+
const threadId = asString(it.threadId);
|
|
60
|
+
const workflowHash = asString(it.workflowHash);
|
|
61
|
+
const status = pad(asString(it.status), 9);
|
|
62
|
+
const role = pad(asString(it.currentRole), 10);
|
|
63
|
+
const started = formatTimestamp(it.startedAt);
|
|
64
|
+
lines.push(`${threadId} ${workflowHash} ${status} ${role} ${started}`);
|
|
65
|
+
}
|
|
66
|
+
return lines.join("\n");
|
|
67
|
+
}
|
|
68
|
+
export function renderThreadShow(data) {
|
|
69
|
+
const p = asObject(data);
|
|
70
|
+
const status = asString(p.status);
|
|
71
|
+
const role = status === "suspended" && typeof p.suspendedRole === "string" && p.suspendedRole.length > 0
|
|
72
|
+
? p.suspendedRole
|
|
73
|
+
: asString(p.currentRole);
|
|
74
|
+
const head = asString(p.head);
|
|
75
|
+
const lines = [
|
|
76
|
+
`Thread ${asString(p.threadId)}`,
|
|
77
|
+
`Workflow ${asString(p.workflowHash)}`,
|
|
78
|
+
`Status ${status}`,
|
|
79
|
+
`Role ${role}`,
|
|
80
|
+
`Head ${head}`,
|
|
81
|
+
];
|
|
82
|
+
if (status === "suspended" &&
|
|
83
|
+
typeof p.suspendMessage === "string" &&
|
|
84
|
+
p.suspendMessage.length > 0) {
|
|
85
|
+
lines.push(`Suspend ${p.suspendMessage}`);
|
|
86
|
+
}
|
|
87
|
+
return lines.join("\n");
|
|
88
|
+
}
|
|
89
|
+
export function renderThreadStart(data) {
|
|
90
|
+
const p = asObject(data);
|
|
91
|
+
return `Thread ${asString(p.threadId)}\nWorkflow ${asString(p.workflowHash)}`;
|
|
92
|
+
}
|
|
93
|
+
export function renderWorkflowList(data) {
|
|
94
|
+
const payload = asObject(data);
|
|
95
|
+
const items = asArray(payload.items);
|
|
96
|
+
const lines = ["NAME HASH SOURCE DESCRIPTION"];
|
|
97
|
+
for (const item of items) {
|
|
98
|
+
const it = asObject(item);
|
|
99
|
+
const name = pad(asString(it.name), 13);
|
|
100
|
+
const hash = asString(it.hash);
|
|
101
|
+
const source = pad(asString(it.source), 10);
|
|
102
|
+
const description = asString(it.description, "");
|
|
103
|
+
lines.push(`${name} ${hash} ${source} ${description}`);
|
|
104
|
+
}
|
|
105
|
+
return lines.join("\n");
|
|
106
|
+
}
|
|
107
|
+
export function renderWorkflowShow(data) {
|
|
108
|
+
const p = asObject(data);
|
|
109
|
+
const roles = p.roles !== null && typeof p.roles === "object" && !Array.isArray(p.roles)
|
|
110
|
+
? Object.keys(p.roles)
|
|
111
|
+
: [];
|
|
112
|
+
const lines = [
|
|
113
|
+
`Workflow ${asString(p.name)}`,
|
|
114
|
+
`Version ${typeof p.version === "number" ? p.version : "-"}`,
|
|
115
|
+
`Hash ${asString(p.hash)}`,
|
|
116
|
+
`Roles ${roles.join(", ")}`,
|
|
117
|
+
];
|
|
118
|
+
if (typeof p.description === "string" && p.description.length > 0) {
|
|
119
|
+
lines.push(`Description ${p.description}`);
|
|
120
|
+
}
|
|
121
|
+
return lines.join("\n");
|
|
122
|
+
}
|
|
123
|
+
export function renderStepList(data) {
|
|
124
|
+
const payload = asObject(data);
|
|
125
|
+
const items = asArray(payload.items);
|
|
126
|
+
const lines = ["HASH ROLE DURATION"];
|
|
127
|
+
for (const item of items) {
|
|
128
|
+
const it = asObject(item);
|
|
129
|
+
const hash = asString(it.hash);
|
|
130
|
+
const role = pad(asString(it.role), 10);
|
|
131
|
+
const dur = formatDuration(it.durationMs);
|
|
132
|
+
lines.push(`${hash} ${role} ${dur}`);
|
|
133
|
+
}
|
|
134
|
+
return lines.join("\n");
|
|
135
|
+
}
|
|
136
|
+
export function renderStepShow(data) {
|
|
137
|
+
const p = asObject(data);
|
|
138
|
+
return [
|
|
139
|
+
`Step ${asString(p.hash)}`,
|
|
140
|
+
`Role ${asString(p.role)}`,
|
|
141
|
+
`Agent ${asString(p.agent)}`,
|
|
142
|
+
`Status ${asString(p.status)}`,
|
|
143
|
+
`Duration ${formatDuration(p.durationMs)}`,
|
|
144
|
+
].join("\n");
|
|
145
|
+
}
|
|
146
|
+
export function renderThreadCancel(data) {
|
|
147
|
+
const p = asObject(data);
|
|
148
|
+
const cancelled = typeof p.cancelled === "boolean" ? (p.cancelled ? "yes" : "no") : "-";
|
|
149
|
+
return [
|
|
150
|
+
`Thread ${asString(p.thread)}`,
|
|
151
|
+
`Status cancelled`,
|
|
152
|
+
`Cancelled ${cancelled}`,
|
|
153
|
+
].join("\n");
|
|
154
|
+
}
|
|
155
|
+
export function renderThreadStop(data) {
|
|
156
|
+
const p = asObject(data);
|
|
157
|
+
const stopped = typeof p.stopped === "boolean" ? (p.stopped ? "yes" : "no") : "-";
|
|
158
|
+
return [`Thread ${asString(p.thread)}`, `Stopped ${stopped}`].join("\n");
|
|
159
|
+
}
|
|
160
|
+
// ── Config renderers ────────────────────────────────────────────────
|
|
161
|
+
/**
|
|
162
|
+
* Flatten a nested object into dot-notation key-value lines.
|
|
163
|
+
* Arrays are rendered as compact JSON; scalars as strings.
|
|
164
|
+
*/
|
|
165
|
+
function flattenConfig(obj, prefix) {
|
|
166
|
+
const lines = [];
|
|
167
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
168
|
+
const fullKey = prefix ? `${prefix}.${key}` : key;
|
|
169
|
+
if (Array.isArray(value)) {
|
|
170
|
+
lines.push(`${fullKey}\t${JSON.stringify(value)}`);
|
|
171
|
+
}
|
|
172
|
+
else if (value !== null && typeof value === "object") {
|
|
173
|
+
lines.push(...flattenConfig(value, fullKey));
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
lines.push(`${fullKey}\t${String(value)}`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return lines;
|
|
180
|
+
}
|
|
181
|
+
export function renderConfigList(data) {
|
|
182
|
+
const obj = asObject(data);
|
|
183
|
+
if (Object.keys(obj).length === 0)
|
|
184
|
+
return "";
|
|
185
|
+
return flattenConfig(obj, "").join("\n");
|
|
186
|
+
}
|
|
187
|
+
export function renderConfigGet(data) {
|
|
188
|
+
const obj = asObject(data);
|
|
189
|
+
const value = obj.value;
|
|
190
|
+
if (value === null || value === undefined)
|
|
191
|
+
return "";
|
|
192
|
+
if (typeof value === "object" && !Array.isArray(value)) {
|
|
193
|
+
return flattenConfig(value, "").join("\n");
|
|
194
|
+
}
|
|
195
|
+
if (Array.isArray(value))
|
|
196
|
+
return JSON.stringify(value);
|
|
197
|
+
return String(value);
|
|
198
|
+
}
|
|
199
|
+
export function renderConfigSet(data) {
|
|
200
|
+
const obj = asObject(data);
|
|
201
|
+
const key = asString(obj.key);
|
|
202
|
+
const value = obj.value;
|
|
203
|
+
const rendered = Array.isArray(value) ? JSON.stringify(value) : String(value ?? "");
|
|
204
|
+
return `${key} = ${rendered}`;
|
|
205
|
+
}
|
|
206
|
+
function formatSize(bytes) {
|
|
207
|
+
if (typeof bytes !== "number" || !Number.isFinite(bytes) || bytes < 0)
|
|
208
|
+
return "-";
|
|
209
|
+
if (bytes < 1024)
|
|
210
|
+
return `${bytes}B`;
|
|
211
|
+
if (bytes < 1024 * 1024)
|
|
212
|
+
return `${(bytes / 1024).toFixed(1)}K`;
|
|
213
|
+
if (bytes < 1024 * 1024 * 1024)
|
|
214
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)}M`;
|
|
215
|
+
return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)}G`;
|
|
216
|
+
}
|
|
217
|
+
export function renderLogList(data) {
|
|
218
|
+
const items = asArray(data);
|
|
219
|
+
if (items.length === 0)
|
|
220
|
+
return "No log files.";
|
|
221
|
+
const lines = ["DATE SIZE NAME"];
|
|
222
|
+
for (const item of items) {
|
|
223
|
+
const it = asObject(item);
|
|
224
|
+
const date = pad(asString(it.date), 11);
|
|
225
|
+
const size = pad(formatSize(it.size), 9);
|
|
226
|
+
const name = asString(it.name);
|
|
227
|
+
lines.push(`${date} ${size} ${name}`);
|
|
228
|
+
}
|
|
229
|
+
return lines.join("\n");
|
|
230
|
+
}
|
|
231
|
+
export function renderLogShow(data) {
|
|
232
|
+
const items = asArray(data);
|
|
233
|
+
if (items.length === 0)
|
|
234
|
+
return "No log entries.";
|
|
235
|
+
const lines = [];
|
|
236
|
+
for (const item of items) {
|
|
237
|
+
const it = asObject(item);
|
|
238
|
+
const ts = asString(it.ts);
|
|
239
|
+
const pid = asString(it.pid);
|
|
240
|
+
const tag = asString(it.tag);
|
|
241
|
+
const msg = asString(it.msg, "");
|
|
242
|
+
const thread = typeof it.thread === "string" && it.thread.length > 0 ? it.thread : null;
|
|
243
|
+
const parts = [ts, `pid=${pid}`, tag];
|
|
244
|
+
if (thread !== null)
|
|
245
|
+
parts.push(`thread=${thread}`);
|
|
246
|
+
parts.push(msg);
|
|
247
|
+
lines.push(parts.join(" "));
|
|
248
|
+
}
|
|
249
|
+
return lines.join("\n");
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=text-renderers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-renderers.js","sourceRoot":"","sources":["../src/text-renderers.ts"],"names":[],"mappings":"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"}
|