@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.
Files changed (193) hide show
  1. package/README.md +30 -3
  2. package/dist/.build-fingerprint +1 -0
  3. package/dist/__tests__/adapter-json-roundtrip.test.js +16 -6
  4. package/dist/__tests__/adapter-json-roundtrip.test.js.map +1 -1
  5. package/dist/__tests__/concurrency.test.d.ts +2 -0
  6. package/dist/__tests__/concurrency.test.d.ts.map +1 -0
  7. package/dist/__tests__/concurrency.test.js +196 -0
  8. package/dist/__tests__/concurrency.test.js.map +1 -0
  9. package/dist/__tests__/e2e-mock-agent.test.js +23 -7
  10. package/dist/__tests__/e2e-mock-agent.test.js.map +1 -1
  11. package/dist/__tests__/format-text-default.test.d.ts +2 -0
  12. package/dist/__tests__/format-text-default.test.d.ts.map +1 -0
  13. package/dist/__tests__/format-text-default.test.js +43 -0
  14. package/dist/__tests__/format-text-default.test.js.map +1 -0
  15. package/dist/__tests__/format-text-registry.test.d.ts +2 -0
  16. package/dist/__tests__/format-text-registry.test.d.ts.map +1 -0
  17. package/dist/__tests__/format-text-registry.test.js +158 -0
  18. package/dist/__tests__/format-text-registry.test.js.map +1 -0
  19. package/dist/__tests__/log-text-renderer.test.d.ts +2 -0
  20. package/dist/__tests__/log-text-renderer.test.d.ts.map +1 -0
  21. package/dist/__tests__/log-text-renderer.test.js +265 -0
  22. package/dist/__tests__/log-text-renderer.test.js.map +1 -0
  23. package/dist/__tests__/output-mapper-thread-list-startedat.test.d.ts +2 -0
  24. package/dist/__tests__/output-mapper-thread-list-startedat.test.d.ts.map +1 -0
  25. package/dist/__tests__/output-mapper-thread-list-startedat.test.js +102 -0
  26. package/dist/__tests__/output-mapper-thread-list-startedat.test.js.map +1 -0
  27. package/dist/__tests__/output-mapper-workflow-add.test.d.ts +2 -0
  28. package/dist/__tests__/output-mapper-workflow-add.test.d.ts.map +1 -0
  29. package/dist/__tests__/output-mapper-workflow-add.test.js +22 -0
  30. package/dist/__tests__/output-mapper-workflow-add.test.js.map +1 -0
  31. package/dist/__tests__/pid-recycling.test.js +9 -7
  32. package/dist/__tests__/pid-recycling.test.js.map +1 -1
  33. package/dist/__tests__/prompt.test.js +46 -4
  34. package/dist/__tests__/prompt.test.js.map +1 -1
  35. package/dist/__tests__/resolve-head-hash.test.js +8 -0
  36. package/dist/__tests__/resolve-head-hash.test.js.map +1 -1
  37. package/dist/__tests__/solve-issue-tea-worktree.test.js +3 -1
  38. package/dist/__tests__/solve-issue-tea-worktree.test.js.map +1 -1
  39. package/dist/__tests__/step-ask.test.js +9 -1
  40. package/dist/__tests__/step-ask.test.js.map +1 -1
  41. package/dist/__tests__/store-unified-threads.test.js +19 -17
  42. package/dist/__tests__/store-unified-threads.test.js.map +1 -1
  43. package/dist/__tests__/thread-cancel-status.test.js +19 -13
  44. package/dist/__tests__/thread-cancel-status.test.js.map +1 -1
  45. package/dist/__tests__/thread-cancel-text-renderer.test.d.ts +2 -0
  46. package/dist/__tests__/thread-cancel-text-renderer.test.d.ts.map +1 -0
  47. package/dist/__tests__/thread-cancel-text-renderer.test.js +110 -0
  48. package/dist/__tests__/thread-cancel-text-renderer.test.js.map +1 -0
  49. package/dist/__tests__/thread-list-filters.test.js +10 -8
  50. package/dist/__tests__/thread-list-filters.test.js.map +1 -1
  51. package/dist/__tests__/thread-list-template-ms-date.test.d.ts +2 -0
  52. package/dist/__tests__/thread-list-template-ms-date.test.d.ts.map +1 -0
  53. package/dist/__tests__/thread-list-template-ms-date.test.js +102 -0
  54. package/dist/__tests__/thread-list-template-ms-date.test.js.map +1 -0
  55. package/dist/__tests__/thread-list-workflow-corrupt.test.d.ts +2 -0
  56. package/dist/__tests__/thread-list-workflow-corrupt.test.d.ts.map +1 -0
  57. package/dist/__tests__/thread-list-workflow-corrupt.test.js +157 -0
  58. package/dist/__tests__/thread-list-workflow-corrupt.test.js.map +1 -0
  59. package/dist/__tests__/thread-poke.test.js +11 -1
  60. package/dist/__tests__/thread-poke.test.js.map +1 -1
  61. package/dist/__tests__/thread-read-xml-tags.test.js +10 -9
  62. package/dist/__tests__/thread-read-xml-tags.test.js.map +1 -1
  63. package/dist/__tests__/thread-resume.test.js +11 -1
  64. package/dist/__tests__/thread-resume.test.js.map +1 -1
  65. package/dist/__tests__/thread-start-cwd-cli.test.js +15 -3
  66. package/dist/__tests__/thread-start-cwd-cli.test.js.map +1 -1
  67. package/dist/__tests__/thread-stop-text-renderer.test.d.ts +2 -0
  68. package/dist/__tests__/thread-stop-text-renderer.test.d.ts.map +1 -0
  69. package/dist/__tests__/thread-stop-text-renderer.test.js +148 -0
  70. package/dist/__tests__/thread-stop-text-renderer.test.js.map +1 -0
  71. package/dist/__tests__/thread-suspend-step.test.js +5 -2
  72. package/dist/__tests__/thread-suspend-step.test.js.map +1 -1
  73. package/dist/__tests__/thread-test-helpers.d.ts +7 -0
  74. package/dist/__tests__/thread-test-helpers.d.ts.map +1 -1
  75. package/dist/__tests__/thread-test-helpers.js +13 -0
  76. package/dist/__tests__/thread-test-helpers.js.map +1 -1
  77. package/dist/__tests__/thread.test.js +11 -9
  78. package/dist/__tests__/thread.test.js.map +1 -1
  79. package/dist/__tests__/validate-semantic.test.js +56 -2
  80. package/dist/__tests__/validate-semantic.test.js.map +1 -1
  81. package/dist/__tests__/workflow-list-recursive.test.js +10 -7
  82. package/dist/__tests__/workflow-list-recursive.test.js.map +1 -1
  83. package/dist/__tests__/workflow-resolution.test.js +10 -7
  84. package/dist/__tests__/workflow-resolution.test.js.map +1 -1
  85. package/dist/__tests__/workflow-show-resolution.test.js +10 -7
  86. package/dist/__tests__/workflow-show-resolution.test.js.map +1 -1
  87. package/dist/__tests__/workflow-validate.test.js +75 -55
  88. package/dist/__tests__/workflow-validate.test.js.map +1 -1
  89. package/dist/__tests__/write-envelope.test.d.ts +2 -0
  90. package/dist/__tests__/write-envelope.test.d.ts.map +1 -0
  91. package/dist/__tests__/write-envelope.test.js +201 -0
  92. package/dist/__tests__/write-envelope.test.js.map +1 -0
  93. package/dist/cli.js +58 -35
  94. package/dist/cli.js.map +1 -1
  95. package/dist/commands/config.d.ts.map +1 -1
  96. package/dist/commands/config.js +12 -0
  97. package/dist/commands/config.js.map +1 -1
  98. package/dist/commands/prompt.d.ts.map +1 -1
  99. package/dist/commands/prompt.js +42 -29
  100. package/dist/commands/prompt.js.map +1 -1
  101. package/dist/commands/setup.d.ts +9 -4
  102. package/dist/commands/setup.d.ts.map +1 -1
  103. package/dist/commands/setup.js +51 -7
  104. package/dist/commands/setup.js.map +1 -1
  105. package/dist/commands/thread.d.ts.map +1 -1
  106. package/dist/commands/thread.js +44 -2
  107. package/dist/commands/thread.js.map +1 -1
  108. package/dist/commands/workflow.d.ts +1 -1
  109. package/dist/commands/workflow.d.ts.map +1 -1
  110. package/dist/commands/workflow.js +2 -6
  111. package/dist/commands/workflow.js.map +1 -1
  112. package/dist/concurrency/concurrency.d.ts +34 -0
  113. package/dist/concurrency/concurrency.d.ts.map +1 -0
  114. package/dist/concurrency/concurrency.js +216 -0
  115. package/dist/concurrency/concurrency.js.map +1 -0
  116. package/dist/concurrency/index.d.ts +3 -0
  117. package/dist/concurrency/index.d.ts.map +1 -0
  118. package/dist/concurrency/index.js +2 -0
  119. package/dist/concurrency/index.js.map +1 -0
  120. package/dist/concurrency/types.d.ts +19 -0
  121. package/dist/concurrency/types.d.ts.map +1 -0
  122. package/dist/concurrency/types.js +2 -0
  123. package/dist/concurrency/types.js.map +1 -0
  124. package/dist/format.d.ts +69 -2
  125. package/dist/format.d.ts.map +1 -1
  126. package/dist/format.js +198 -1
  127. package/dist/format.js.map +1 -1
  128. package/dist/output-mappers.d.ts +122 -0
  129. package/dist/output-mappers.d.ts.map +1 -0
  130. package/dist/output-mappers.js +134 -0
  131. package/dist/output-mappers.js.map +1 -0
  132. package/dist/schemas.d.ts +4 -1
  133. package/dist/schemas.d.ts.map +1 -1
  134. package/dist/schemas.js +31 -4
  135. package/dist/schemas.js.map +1 -1
  136. package/dist/text-renderers.d.ts +30 -0
  137. package/dist/text-renderers.d.ts.map +1 -0
  138. package/dist/text-renderers.js +251 -0
  139. package/dist/text-renderers.js.map +1 -0
  140. package/dist/validate-semantic.d.ts.map +1 -1
  141. package/dist/validate-semantic.js +28 -11
  142. package/dist/validate-semantic.js.map +1 -1
  143. package/examples/brainstorm.yaml +130 -0
  144. package/examples/debate.yaml +169 -0
  145. package/examples/socratic-questioning.yaml +112 -0
  146. package/package.json +5 -4
  147. package/src/__tests__/adapter-json-roundtrip.test.ts +15 -6
  148. package/src/__tests__/concurrency.test.ts +266 -0
  149. package/src/__tests__/e2e-mock-agent.test.ts +45 -7
  150. package/src/__tests__/format-text-default.test.ts +49 -0
  151. package/src/__tests__/format-text-registry.test.ts +173 -0
  152. package/src/__tests__/log-text-renderer.test.ts +294 -0
  153. package/src/__tests__/output-mapper-thread-list-startedat.test.ts +124 -0
  154. package/src/__tests__/output-mapper-workflow-add.test.ts +24 -0
  155. package/src/__tests__/pid-recycling.test.ts +9 -8
  156. package/src/__tests__/prompt.test.ts +48 -4
  157. package/src/__tests__/resolve-head-hash.test.ts +7 -0
  158. package/src/__tests__/solve-issue-tea-worktree.test.ts +3 -1
  159. package/src/__tests__/step-ask.test.ts +8 -1
  160. package/src/__tests__/store-unified-threads.test.ts +21 -18
  161. package/src/__tests__/thread-cancel-status.test.ts +21 -14
  162. package/src/__tests__/thread-cancel-text-renderer.test.ts +125 -0
  163. package/src/__tests__/thread-list-filters.test.ts +9 -9
  164. package/src/__tests__/thread-list-template-ms-date.test.ts +110 -0
  165. package/src/__tests__/thread-list-workflow-corrupt.test.ts +198 -0
  166. package/src/__tests__/thread-poke.test.ts +10 -1
  167. package/src/__tests__/thread-read-xml-tags.test.ts +9 -11
  168. package/src/__tests__/thread-resume.test.ts +10 -1
  169. package/src/__tests__/thread-start-cwd-cli.test.ts +15 -3
  170. package/src/__tests__/thread-stop-text-renderer.test.ts +168 -0
  171. package/src/__tests__/thread-suspend-step.test.ts +5 -2
  172. package/src/__tests__/thread-test-helpers.ts +15 -1
  173. package/src/__tests__/thread.test.ts +10 -10
  174. package/src/__tests__/validate-semantic.test.ts +59 -2
  175. package/src/__tests__/workflow-list-recursive.test.ts +9 -9
  176. package/src/__tests__/workflow-resolution.test.ts +9 -8
  177. package/src/__tests__/workflow-show-resolution.test.ts +9 -8
  178. package/src/__tests__/workflow-validate.test.ts +78 -56
  179. package/src/__tests__/write-envelope.test.ts +257 -0
  180. package/src/cli.ts +92 -35
  181. package/src/commands/config.ts +11 -0
  182. package/src/commands/prompt.ts +42 -29
  183. package/src/commands/setup.ts +57 -7
  184. package/src/commands/thread.ts +48 -2
  185. package/src/commands/workflow.ts +3 -7
  186. package/src/concurrency/concurrency.ts +245 -0
  187. package/src/concurrency/index.ts +10 -0
  188. package/src/concurrency/types.ts +19 -0
  189. package/src/format.ts +282 -2
  190. package/src/output-mappers.ts +254 -0
  191. package/src/schemas.ts +39 -3
  192. package/src/text-renderers.ts +355 -0
  193. 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":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAElF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;GAOG;AAEH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,WAAW,GAAG,kBAAkB,CAEzE;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,UAAU,GAAG,mBAAmB,CAW1E;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,KAAK,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,CAAC,CAAC;CACJ,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,EAAE,GAAG,iBAAiB,CAYxF;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,IAAI,EAAE,OAAO,CAAC;QACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;KAC/B,CAAC,CAAC;CACJ,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,iBAAiB,CAe5E;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;CAC3E,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,iBAAiB,CAqCrF;AAMD,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;CACzE,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;CACJ,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,eAAe,GAAG,eAAe,CAWvE;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CACzE,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,kBAAkB,GAAG,qBAAqB,CAqBtF;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnF,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,mBAAmB,CASvF;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,iBAAiB,GAAG,kBAAkB,CAE/E;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,qBAAqB,CAE/E"}
@@ -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 Workflow, StartNode, and StepNode JSON Schemas in the CAS store.
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>;
@@ -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;AAU9C,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;CACrB,CAAC;AAEF;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,eAAe,CAAC,CAU/E"}
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 Workflow, StartNode, and StepNode JSON Schemas in the CAS store.
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
- return { workflow, startNode, stepNode, text, errorOutput, suspendOutput };
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
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EACL,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;AAWvD;;;GAGG;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,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;AAC7E,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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"}