@united-workforce/cli 0.3.0 → 0.4.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 (219) hide show
  1. package/README.md +15 -8
  2. package/dist/__tests__/adapter-json-roundtrip.test.js +1 -1
  3. package/dist/__tests__/adapter-json-roundtrip.test.js.map +1 -1
  4. package/dist/__tests__/agent-resolution-llm-free.test.d.ts +2 -0
  5. package/dist/__tests__/agent-resolution-llm-free.test.d.ts.map +1 -0
  6. package/dist/__tests__/agent-resolution-llm-free.test.js +30 -0
  7. package/dist/__tests__/agent-resolution-llm-free.test.js.map +1 -0
  8. package/dist/__tests__/build-step-entry.test.d.ts +2 -0
  9. package/dist/__tests__/build-step-entry.test.d.ts.map +1 -0
  10. package/dist/__tests__/build-step-entry.test.js +173 -0
  11. package/dist/__tests__/build-step-entry.test.js.map +1 -0
  12. package/dist/__tests__/clear-thread-failed-attempts.test.d.ts +2 -0
  13. package/dist/__tests__/clear-thread-failed-attempts.test.d.ts.map +1 -0
  14. package/dist/__tests__/clear-thread-failed-attempts.test.js +93 -0
  15. package/dist/__tests__/clear-thread-failed-attempts.test.js.map +1 -0
  16. package/dist/__tests__/config.test.js +26 -302
  17. package/dist/__tests__/config.test.js.map +1 -1
  18. package/dist/__tests__/current-role.test.js +7 -6
  19. package/dist/__tests__/current-role.test.js.map +1 -1
  20. package/dist/__tests__/e2e-mock-agent.test.js +20 -23
  21. package/dist/__tests__/e2e-mock-agent.test.js.map +1 -1
  22. package/dist/__tests__/issue-180-workflow-ref-removed.test.d.ts +2 -0
  23. package/dist/__tests__/issue-180-workflow-ref-removed.test.d.ts.map +1 -0
  24. package/dist/__tests__/issue-180-workflow-ref-removed.test.js +40 -0
  25. package/dist/__tests__/issue-180-workflow-ref-removed.test.js.map +1 -0
  26. package/dist/__tests__/moderator-evaluate.test.js +9 -50
  27. package/dist/__tests__/moderator-evaluate.test.js.map +1 -1
  28. package/dist/__tests__/pid-recycling.test.d.ts +2 -0
  29. package/dist/__tests__/pid-recycling.test.d.ts.map +1 -0
  30. package/dist/__tests__/pid-recycling.test.js +271 -0
  31. package/dist/__tests__/pid-recycling.test.js.map +1 -0
  32. package/dist/__tests__/prompt.test.js +321 -0
  33. package/dist/__tests__/prompt.test.js.map +1 -1
  34. package/dist/__tests__/resolve-head-hash.test.js +4 -4
  35. package/dist/__tests__/resolve-head-hash.test.js.map +1 -1
  36. package/dist/__tests__/setup-agent-discovery.test.js +21 -30
  37. package/dist/__tests__/setup-agent-discovery.test.js.map +1 -1
  38. package/dist/__tests__/setup-complexity.test.js +2 -168
  39. package/dist/__tests__/setup-complexity.test.js.map +1 -1
  40. package/dist/__tests__/setup-no-llm.test.d.ts +2 -0
  41. package/dist/__tests__/setup-no-llm.test.d.ts.map +1 -0
  42. package/dist/__tests__/setup-no-llm.test.js +52 -0
  43. package/dist/__tests__/setup-no-llm.test.js.map +1 -0
  44. package/dist/__tests__/solve-issue-tea-worktree.test.js +24 -27
  45. package/dist/__tests__/solve-issue-tea-worktree.test.js.map +1 -1
  46. package/dist/__tests__/step-ask.test.d.ts +2 -0
  47. package/dist/__tests__/step-ask.test.d.ts.map +1 -0
  48. package/dist/__tests__/step-ask.test.js +499 -0
  49. package/dist/__tests__/step-ask.test.js.map +1 -0
  50. package/dist/__tests__/step-show-json.test.js +1 -0
  51. package/dist/__tests__/step-show-json.test.js.map +1 -1
  52. package/dist/__tests__/step-timing.test.js +2 -0
  53. package/dist/__tests__/step-timing.test.js.map +1 -1
  54. package/dist/__tests__/store-global-cas.test.js +2 -2
  55. package/dist/__tests__/store-global-cas.test.js.map +1 -1
  56. package/dist/__tests__/store-unified-threads.test.js +9 -9
  57. package/dist/__tests__/store-unified-threads.test.js.map +1 -1
  58. package/dist/__tests__/thread-cancel-status.test.js +6 -6
  59. package/dist/__tests__/thread-cancel-status.test.js.map +1 -1
  60. package/dist/__tests__/thread-list-filters.test.js +344 -9
  61. package/dist/__tests__/thread-list-filters.test.js.map +1 -1
  62. package/dist/__tests__/thread-poke.test.d.ts +2 -0
  63. package/dist/__tests__/thread-poke.test.d.ts.map +1 -0
  64. package/dist/__tests__/thread-poke.test.js +412 -0
  65. package/dist/__tests__/thread-poke.test.js.map +1 -0
  66. package/dist/__tests__/thread-resume.test.js +10 -14
  67. package/dist/__tests__/thread-resume.test.js.map +1 -1
  68. package/dist/__tests__/thread-show-status.test.js +17 -28
  69. package/dist/__tests__/thread-show-status.test.js.map +1 -1
  70. package/dist/__tests__/thread-suspend-step.test.js +8 -14
  71. package/dist/__tests__/thread-suspend-step.test.js.map +1 -1
  72. package/dist/__tests__/thread-suspended-display.test.js +10 -22
  73. package/dist/__tests__/thread-suspended-display.test.js.map +1 -1
  74. package/dist/__tests__/thread.test.js +4 -4
  75. package/dist/__tests__/thread.test.js.map +1 -1
  76. package/dist/__tests__/validate-semantic.test.js +49 -21
  77. package/dist/__tests__/validate-semantic.test.js.map +1 -1
  78. package/dist/__tests__/workflow-list-recursive.test.d.ts +2 -0
  79. package/dist/__tests__/workflow-list-recursive.test.d.ts.map +1 -0
  80. package/dist/__tests__/workflow-list-recursive.test.js +283 -0
  81. package/dist/__tests__/workflow-list-recursive.test.js.map +1 -0
  82. package/dist/__tests__/workflow-resolution.test.js +36 -21
  83. package/dist/__tests__/workflow-resolution.test.js.map +1 -1
  84. package/dist/__tests__/workflow-show-resolution.test.d.ts +2 -0
  85. package/dist/__tests__/workflow-show-resolution.test.d.ts.map +1 -0
  86. package/dist/__tests__/workflow-show-resolution.test.js +210 -0
  87. package/dist/__tests__/workflow-show-resolution.test.js.map +1 -0
  88. package/dist/__tests__/workflow-validate.test.d.ts +2 -0
  89. package/dist/__tests__/workflow-validate.test.d.ts.map +1 -0
  90. package/dist/__tests__/workflow-validate.test.js +687 -0
  91. package/dist/__tests__/workflow-validate.test.js.map +1 -0
  92. package/dist/background/background.d.ts +22 -1
  93. package/dist/background/background.d.ts.map +1 -1
  94. package/dist/background/background.js +83 -6
  95. package/dist/background/background.js.map +1 -1
  96. package/dist/background/index.d.ts +1 -1
  97. package/dist/background/index.d.ts.map +1 -1
  98. package/dist/background/index.js +1 -1
  99. package/dist/background/index.js.map +1 -1
  100. package/dist/background/types.d.ts +1 -0
  101. package/dist/background/types.d.ts.map +1 -1
  102. package/dist/cli.js +66 -31
  103. package/dist/cli.js.map +1 -1
  104. package/dist/commands/config.d.ts +3 -1
  105. package/dist/commands/config.d.ts.map +1 -1
  106. package/dist/commands/config.js +7 -33
  107. package/dist/commands/config.js.map +1 -1
  108. package/dist/commands/prompt.d.ts.map +1 -1
  109. package/dist/commands/prompt.js +15 -2
  110. package/dist/commands/prompt.js.map +1 -1
  111. package/dist/commands/setup.d.ts +7 -39
  112. package/dist/commands/setup.d.ts.map +1 -1
  113. package/dist/commands/setup.js +27 -302
  114. package/dist/commands/setup.js.map +1 -1
  115. package/dist/commands/step.d.ts +44 -1
  116. package/dist/commands/step.d.ts.map +1 -1
  117. package/dist/commands/step.js +255 -11
  118. package/dist/commands/step.js.map +1 -1
  119. package/dist/commands/thread.d.ts +16 -3
  120. package/dist/commands/thread.d.ts.map +1 -1
  121. package/dist/commands/thread.js +379 -140
  122. package/dist/commands/thread.js.map +1 -1
  123. package/dist/commands/workflow.d.ts +9 -1
  124. package/dist/commands/workflow.d.ts.map +1 -1
  125. package/dist/commands/workflow.js +130 -6
  126. package/dist/commands/workflow.js.map +1 -1
  127. package/dist/moderator/__tests__/evaluate.test.js +31 -17
  128. package/dist/moderator/__tests__/evaluate.test.js.map +1 -1
  129. package/dist/moderator/evaluate.d.ts.map +1 -1
  130. package/dist/moderator/evaluate.js +4 -16
  131. package/dist/moderator/evaluate.js.map +1 -1
  132. package/dist/moderator/index.d.ts +1 -2
  133. package/dist/moderator/index.d.ts.map +1 -1
  134. package/dist/moderator/index.js +0 -1
  135. package/dist/moderator/index.js.map +1 -1
  136. package/dist/moderator/types.d.ts +6 -10
  137. package/dist/moderator/types.d.ts.map +1 -1
  138. package/dist/moderator/types.js +1 -3
  139. package/dist/moderator/types.js.map +1 -1
  140. package/dist/schemas.d.ts +2 -0
  141. package/dist/schemas.d.ts.map +1 -1
  142. package/dist/schemas.js +5 -3
  143. package/dist/schemas.js.map +1 -1
  144. package/dist/store.d.ts +28 -9
  145. package/dist/store.d.ts.map +1 -1
  146. package/dist/store.js +75 -16
  147. package/dist/store.js.map +1 -1
  148. package/dist/validate-semantic.d.ts.map +1 -1
  149. package/dist/validate-semantic.js +83 -66
  150. package/dist/validate-semantic.js.map +1 -1
  151. package/dist/validate.d.ts +6 -0
  152. package/dist/validate.d.ts.map +1 -1
  153. package/dist/validate.js +24 -0
  154. package/dist/validate.js.map +1 -1
  155. package/package.json +8 -10
  156. package/src/__tests__/adapter-json-roundtrip.test.ts +1 -1
  157. package/src/__tests__/agent-resolution-llm-free.test.ts +39 -0
  158. package/src/__tests__/build-step-entry.test.ts +203 -0
  159. package/src/__tests__/clear-thread-failed-attempts.test.ts +122 -0
  160. package/src/__tests__/config.test.ts +33 -321
  161. package/src/__tests__/current-role.test.ts +7 -6
  162. package/src/__tests__/e2e-mock-agent.test.ts +20 -23
  163. package/src/__tests__/fixtures/e2e-count.workflow.yaml +1 -0
  164. package/src/__tests__/fixtures/e2e-linear.workflow.yaml +1 -0
  165. package/src/__tests__/fixtures/{e2e-mustache.workflow.yaml → e2e-liquid.workflow.yaml} +3 -2
  166. package/src/__tests__/fixtures/e2e-loop.workflow.yaml +1 -0
  167. package/src/__tests__/fixtures/e2e-suspend.mock.yaml +2 -2
  168. package/src/__tests__/fixtures/e2e-suspend.workflow.yaml +6 -10
  169. package/src/__tests__/issue-180-workflow-ref-removed.test.ts +43 -0
  170. package/src/__tests__/moderator-evaluate.test.ts +9 -52
  171. package/src/__tests__/pid-recycling.test.ts +328 -0
  172. package/src/__tests__/prompt.test.ts +397 -0
  173. package/src/__tests__/resolve-head-hash.test.ts +4 -4
  174. package/src/__tests__/setup-agent-discovery.test.ts +26 -51
  175. package/src/__tests__/setup-complexity.test.ts +1 -203
  176. package/src/__tests__/setup-no-llm.test.ts +68 -0
  177. package/src/__tests__/solve-issue-tea-worktree.test.ts +24 -30
  178. package/src/__tests__/step-ask.test.ts +670 -0
  179. package/src/__tests__/step-show-json.test.ts +1 -0
  180. package/src/__tests__/step-timing.test.ts +2 -0
  181. package/src/__tests__/store-global-cas.test.ts +2 -2
  182. package/src/__tests__/store-unified-threads.test.ts +9 -9
  183. package/src/__tests__/thread-cancel-status.test.ts +6 -6
  184. package/src/__tests__/thread-list-filters.test.ts +434 -8
  185. package/src/__tests__/thread-poke.test.ts +545 -0
  186. package/src/__tests__/thread-resume.test.ts +10 -14
  187. package/src/__tests__/thread-show-status.test.ts +17 -29
  188. package/src/__tests__/thread-suspend-step.test.ts +8 -14
  189. package/src/__tests__/thread-suspended-display.test.ts +10 -22
  190. package/src/__tests__/thread.test.ts +4 -4
  191. package/src/__tests__/validate-semantic.test.ts +59 -31
  192. package/src/__tests__/workflow-list-recursive.test.ts +370 -0
  193. package/src/__tests__/workflow-resolution.test.ts +39 -21
  194. package/src/__tests__/workflow-show-resolution.test.ts +285 -0
  195. package/src/__tests__/workflow-validate.test.ts +806 -0
  196. package/src/background/background.ts +88 -6
  197. package/src/background/index.ts +2 -0
  198. package/src/background/types.ts +1 -0
  199. package/src/cli.ts +97 -47
  200. package/src/commands/config.ts +7 -35
  201. package/src/commands/prompt.ts +15 -2
  202. package/src/commands/setup.ts +29 -357
  203. package/src/commands/step.ts +339 -12
  204. package/src/commands/thread.ts +463 -169
  205. package/src/commands/workflow.ts +159 -4
  206. package/src/moderator/__tests__/evaluate.test.ts +34 -17
  207. package/src/moderator/evaluate.ts +5 -17
  208. package/src/moderator/index.ts +1 -6
  209. package/src/moderator/types.ts +6 -14
  210. package/src/schemas.ts +13 -3
  211. package/src/store.ts +86 -20
  212. package/src/validate-semantic.ts +109 -78
  213. package/src/validate.ts +27 -0
  214. package/dist/__tests__/setup-validate.test.d.ts +0 -2
  215. package/dist/__tests__/setup-validate.test.d.ts.map +0 -1
  216. package/dist/__tests__/setup-validate.test.js +0 -108
  217. package/dist/__tests__/setup-validate.test.js.map +0 -1
  218. package/src/__tests__/setup-validate.test.ts +0 -148
  219. /package/src/__tests__/fixtures/{e2e-mustache.mock.yaml → e2e-liquid.mock.yaml} +0 -0
@@ -2,17 +2,11 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import { parse, stringify } from "yaml";
4
4
  /**
5
- * Valid configuration key schema
5
+ * Valid configuration key schema. Engine config is LLM-free — providers,
6
+ * models, defaultModel, and modelOverrides are no longer accepted here.
7
+ * Each adapter owns its own LLM configuration.
6
8
  */
7
9
  const VALID_CONFIG_KEYS = {
8
- providers: {
9
- nested: true,
10
- knownFields: ["baseUrl", "apiKey"],
11
- },
12
- models: {
13
- nested: true,
14
- knownFields: ["provider", "name"],
15
- },
16
10
  agents: {
17
11
  nested: true,
18
12
  knownFields: ["command", "args"],
@@ -22,14 +16,7 @@ const VALID_CONFIG_KEYS = {
22
16
  // agentOverrides.<workflowName>.<roleName> = agentAlias (string value)
23
17
  // No knownFields — workflow/role names are user-defined
24
18
  },
25
- modelOverrides: {
26
- nested: true,
27
- minDepth: 2,
28
- // modelOverrides.<scenario> = modelAlias (string value)
29
- // No knownFields — scenarios are user-defined
30
- },
31
19
  defaultAgent: { nested: false },
32
- defaultModel: { nested: false },
33
20
  };
34
21
  /**
35
22
  * Validate a config key path against the known schema
@@ -149,25 +136,12 @@ export function setNestedValue(obj, path, value) {
149
136
  current[lastSegment] = value;
150
137
  }
151
138
  /**
152
- * Deep clone and mask all apiKey values in providers section
139
+ * Deep clone the config. Engine config is LLM-free, so there are no apiKey
140
+ * fields to mask — this function is preserved as a defensive deep-clone
141
+ * boundary used by `cmdConfigList`.
153
142
  */
154
143
  export function maskApiKeys(config) {
155
- // Deep clone
156
- const cloned = JSON.parse(JSON.stringify(config));
157
- // Mask apiKey values in providers
158
- if (cloned.providers && typeof cloned.providers === "object") {
159
- const providers = cloned.providers;
160
- for (const providerName of Object.keys(providers)) {
161
- const provider = providers[providerName];
162
- if (provider && typeof provider === "object") {
163
- const providerObj = provider;
164
- if ("apiKey" in providerObj) {
165
- providerObj.apiKey = "***MASKED***";
166
- }
167
- }
168
- }
169
- }
170
- return cloned;
144
+ return JSON.parse(JSON.stringify(config));
171
145
  }
172
146
  /**
173
147
  * List all configuration values (masks API keys)
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,kCAAkC,EAClC,sBAAsB,EACtB,kCAAkC,EACnC,MAAM,wBAAwB,CAAC;AAyBhC,OAAO,EACL,kCAAkC,IAAI,0BAA0B,EAChE,sBAAsB,IAAI,cAAc,EACxC,kCAAkC,IAAI,0BAA0B,GACjE,CAAC;AAQF,wBAAgB,aAAa,IAAI,aAAa,CAAC,MAAM,CAAC,CAErD;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAyR3C"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,kCAAkC,EAClC,sBAAsB,EACtB,kCAAkC,EACnC,MAAM,wBAAwB,CAAC;AAyBhC,OAAO,EACL,kCAAkC,IAAI,0BAA0B,EAChE,sBAAsB,IAAI,cAAc,EACxC,kCAAkC,IAAI,0BAA0B,GACjE,CAAC;AAQF,wBAAgB,aAAa,IAAI,aAAa,CAAC,MAAM,CAAC,CAErD;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAsS3C"}
@@ -226,7 +226,17 @@ uwf thread exec <thread-id>
226
226
  uwf thread show <thread-id>
227
227
  \`\`\`
228
228
 
229
- If the thread reaches \`$END\` with status \`completed\`, the setup is working.
229
+ If the thread reaches \`$END\` with status \`end\`, the setup is working.
230
+
231
+ To verify suspend/resume and poke:
232
+
233
+ \`\`\`bash
234
+ # After a role yields with $status: "$SUSPEND", resume the suspended thread:
235
+ uwf thread resume <thread-id> -p "Additional context for the agent"
236
+
237
+ # Re-run the head step's agent with a supplementary prompt (replaces head step):
238
+ uwf thread poke <thread-id> -p "Try again with this hint"
239
+ \`\`\`
230
240
 
231
241
  ## Scenario B: Upgrade from Previous Version
232
242
 
@@ -282,7 +292,7 @@ Check the changelog for breaking changes. Known migrations:
282
292
  resume: { role: planner, prompt: "Review previous run and continue." }
283
293
  \`\`\`
284
294
 
285
- Update all \`.workflow/\` and \`.workflows/\` YAML files in your projects. \`uwf workflow add\` will reject files with the old \`_\` syntax.
295
+ Update all \`.workflows/\` and \`.workflow/\` YAML files in your projects. \`uwf workflow add\` will reject files with the old \`_\` syntax.
286
296
 
287
297
  - **v0.2.1**: \`$status: { enum: [value] }\` → \`$status: { const: "value" }\`. The validator no longer accepts \`enum\` for \`$status\`. Update all workflow YAML files:
288
298
  \`\`\`yaml
@@ -295,6 +305,9 @@ Update all \`.workflow/\` and \`.workflows/\` YAML files in your projects. \`uwf
295
305
  # For multi-exit, use oneOf with const (unchanged)
296
306
  \`\`\`
297
307
 
308
+ - **v0.4.0**: Thread status \`completed\` → \`end\`. Update scripts that filter \`--status completed\` to use \`--status end\`. Legacy on-disk \`status: completed\` is normalized to \`end\` on read.
309
+ - **v0.4.0**: \`$SUSPEND\` is now an engine-level coroutine yield, not a graph target. Workflows that routed to \`role: "$SUSPEND"\` must emit \`$status: "$SUSPEND"\` with a \`reason\` from the role output instead. The thread becomes \`suspended\`; continue with \`uwf thread resume\`.
310
+
298
311
  ### Step 4 — Verify
299
312
 
300
313
  \`\`\`bash
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,kCAAkC,EAClC,sBAAsB,EACtB,kCAAkC,GACnC,MAAM,wBAAwB,CAAC;AAEhC,yEAAyE;AACzE,2FAA2F;AAC3F,SAAS,eAAe;IACtB,IAAI,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC5C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAGtD,CAAC;YACF,IAAI,GAAG,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;gBACzC,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;YAChC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,0BAA0B;QAC5B,CAAC;QACD,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AACD,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;AAEtC,OAAO,EACL,kCAAkC,IAAI,0BAA0B,EAChE,sBAAsB,IAAI,cAAc,EACxC,kCAAkC,IAAI,0BAA0B,GACjE,CAAC;AAEF,MAAM,cAAc,GAA4D;IAC9E,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE;IACnD,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,kCAAkC,EAAE;IAC5E,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,kCAAkC,EAAE;CAC7E,CAAC;AAEF,MAAM,UAAU,aAAa;IAC3B,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCAwE+B,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAyIlB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsE3C,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,kCAAkC,EAClC,sBAAsB,EACtB,kCAAkC,GACnC,MAAM,wBAAwB,CAAC;AAEhC,yEAAyE;AACzE,2FAA2F;AAC3F,SAAS,eAAe;IACtB,IAAI,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC5C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAGtD,CAAC;YACF,IAAI,GAAG,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;gBACzC,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;YAChC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,0BAA0B;QAC5B,CAAC;QACD,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AACD,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;AAEtC,OAAO,EACL,kCAAkC,IAAI,0BAA0B,EAChE,sBAAsB,IAAI,cAAc,EACxC,kCAAkC,IAAI,0BAA0B,GACjE,CAAC;AAEF,MAAM,cAAc,GAA4D;IAC9E,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE;IACnD,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,kCAAkC,EAAE;IAC5E,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,kCAAkC,EAAE;CAC7E,CAAC;AAEF,MAAM,UAAU,aAAa;IAC3B,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCAwE+B,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAmJlB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyE3C,CAAC;AACF,CAAC"}
@@ -1,18 +1,6 @@
1
1
  import { createInterface } from "node:readline/promises";
2
- import type { Result } from "@united-workforce/util";
3
- /**
4
- * Send a minimal chat completion request to verify the model is reachable.
5
- * Returns ok on 2xx, error with reason string otherwise.
6
- */
7
- export declare function validateModel(baseUrl: string, apiKey: string, model: string): Promise<Result<void, string>>;
8
- /** Look up the base URL for a preset provider name. Returns null if not a preset. */
9
- export declare function resolvePresetBaseUrl(providerName: string): string | null;
10
- type SetupArgs = {
11
- provider: string;
12
- baseUrl: string;
13
- apiKey: string;
14
- model: string;
15
- agent?: string | undefined;
2
+ export type SetupArgs = {
3
+ agent: string;
16
4
  storageRoot: string;
17
5
  };
18
6
  /**
@@ -32,22 +20,6 @@ export declare function _discoverAgents(): Promise<string[]>;
32
20
  export declare function _isTerminator(c: string): boolean;
33
21
  /** Returns true for DEL or backspace. */
34
22
  export declare function _isBackspace(c: string): boolean;
35
- type ProviderEntry = {
36
- name: string;
37
- label: string;
38
- baseUrl: string;
39
- };
40
- /** Prints the numbered provider list and custom option to stdout. */
41
- export declare function _printProviderMenu(providers: readonly ProviderEntry[]): void;
42
- /** Resolves a numeric choice string to a preset provider, or null for custom/invalid. */
43
- export declare function _resolveProviderChoice(choice: string, providers: readonly ProviderEntry[]): {
44
- providerName: string;
45
- baseUrl: string;
46
- } | null;
47
- /** Resolves numeric index or literal model name to a model string. */
48
- export declare function _resolveModelChoice(input: string, models: string[]): string;
49
- /** Prints the multi-column model list to stdout. */
50
- export declare function _printModelMenu(models: string[], termCols: number): void;
51
23
  /** Extract short agent name from binary name: uwf-claude-code → claude-code */
52
24
  export declare function _agentNameFromBinary(binary: string): string;
53
25
  /** Prints numbered agent list to stdout. */
@@ -57,24 +29,20 @@ export declare function _printAgentMenu(agents: string[]): void;
57
29
  * Returns short agent name (e.g. "hermes", "claude-code").
58
30
  */
59
31
  export declare function _promptAgentSelection(rl: ReturnType<typeof createInterface>): Promise<string>;
60
- type ValidationResult = {
61
- ok: boolean;
62
- error: string | null;
63
- };
64
- /** Prints the model validation result to stdout. */
65
- export declare function _printValidationResult(validation: ValidationResult): void;
66
32
  /**
67
33
  * Check if the configured adapter binary (and its dependencies) are in PATH.
68
34
  * Returns warnings array — empty means all good.
69
35
  */
70
36
  export declare function _checkAdapterAvailability(agentName: string): string[];
71
37
  /**
72
- * Non-interactive setup. All required args provided via CLI flags.
38
+ * Non-interactive setup. Engine config is LLM-free only writes
39
+ * agents + defaultAgent. LLM provider/model configuration lives in
40
+ * config.yaml under `providers` and `models`.
73
41
  */
74
42
  export declare function cmdSetup(args: SetupArgs): Promise<Record<string, unknown>>;
75
43
  /**
76
- * Interactive setup — prompts user for provider, API key, model.
44
+ * Interactive setup — prompts the user only for the default agent. LLM
45
+ * configuration lives in config.yaml under `providers` and `models`.
77
46
  */
78
47
  export declare function cmdSetupInteractive(storageRoot: string): Promise<Record<string, unknown>>;
79
- export {};
80
48
  //# sourceMappingURL=setup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AA2BF;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQxE;AA0BD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAWxD;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAQzD;AAkBD,+DAA+D;AAC/D,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,yCAAyC;AACzC,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE/C;AAcD,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,4CAA4C;AAC5C,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAStD;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,GACrC,OAAO,CAAC,MAAM,CAAC,CAoCjB;AA+BD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAyBrE;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA0BhF;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAsB/F"}
@@ -4,73 +4,6 @@ import { join } from "node:path";
4
4
  import { stdin as input, stdout as output } from "node:process";
5
5
  import { createInterface } from "node:readline/promises";
6
6
  import { parse, stringify } from "yaml";
7
- /**
8
- * Send a minimal chat completion request to verify the model is reachable.
9
- * Returns ok on 2xx, error with reason string otherwise.
10
- */
11
- export async function validateModel(baseUrl, apiKey, model) {
12
- try {
13
- const url = `${baseUrl.replace(/\/+$/, "")}/chat/completions`;
14
- const res = await fetch(url, {
15
- method: "POST",
16
- headers: {
17
- Authorization: `Bearer ${apiKey}`,
18
- "Content-Type": "application/json",
19
- },
20
- body: JSON.stringify({
21
- model,
22
- messages: [{ role: "user", content: "hi" }],
23
- max_tokens: 1,
24
- }),
25
- signal: AbortSignal.timeout(15_000),
26
- });
27
- if (!res.ok) {
28
- return { ok: false, error: `HTTP ${res.status} ${res.statusText}` };
29
- }
30
- return { ok: true, value: undefined };
31
- }
32
- catch (err) {
33
- if (err instanceof DOMException && err.name === "AbortError") {
34
- return { ok: false, error: "Request timed out — model endpoint unreachable" };
35
- }
36
- return { ok: false, error: `Network error — could not reach endpoint (${String(err)})` };
37
- }
38
- }
39
- /**
40
- * Preset provider list — embedded to avoid runtime YAML loading dependency.
41
- * Keep in sync with providers.yaml in cli.
42
- */
43
- const PRESET_PROVIDERS = [
44
- // International
45
- { name: "openai", label: "OpenAI", baseUrl: "https://api.openai.com/v1" },
46
- { name: "xai", label: "xAI", baseUrl: "https://api.x.ai/v1" },
47
- { name: "openrouter", label: "OpenRouter", baseUrl: "https://openrouter.ai/api/v1" },
48
- { name: "venice", label: "Venice", baseUrl: "https://api.venice.ai/api/v1" },
49
- // China
50
- {
51
- name: "dashscope",
52
- label: "DashScope (Alibaba)",
53
- baseUrl: "https://dashscope.aliyuncs.com/compatible-mode/v1",
54
- },
55
- { name: "deepseek", label: "DeepSeek", baseUrl: "https://api.deepseek.com/v1" },
56
- { name: "siliconflow", label: "SiliconFlow", baseUrl: "https://api.siliconflow.cn/v1" },
57
- {
58
- name: "volcengine",
59
- label: "Volcengine (ByteDance)",
60
- baseUrl: "https://ark.cn-beijing.volces.com/api/v3",
61
- },
62
- { name: "kimi", label: "Kimi (Moonshot)", baseUrl: "https://api.moonshot.cn/v1" },
63
- { name: "glm", label: "GLM (Zhipu AI)", baseUrl: "https://open.bigmodel.cn/api/paas/v4" },
64
- { name: "stepfun", label: "StepFun", baseUrl: "https://api.stepfun.com/v1" },
65
- { name: "minimax", label: "MiniMax", baseUrl: "https://api.minimax.io/v1" },
66
- // Local
67
- { name: "ollama", label: "Ollama (local)", baseUrl: "http://localhost:11434/v1" },
68
- ];
69
- /** Look up the base URL for a preset provider name. Returns null if not a preset. */
70
- export function resolvePresetBaseUrl(providerName) {
71
- const preset = PRESET_PROVIDERS.find((p) => p.name === providerName);
72
- return preset !== undefined ? preset.baseUrl : null;
73
- }
74
7
  function getConfigPath(root) {
75
8
  return join(root, "config.yaml");
76
9
  }
@@ -178,66 +111,15 @@ async function _tryWhichDiscovery() {
178
111
  }
179
112
  }
180
113
  // ──────────────────────────────────────────────────────────────────────────────
181
- // Extracted helpers onData closure (promptSecret)
114
+ // Terminator/backspace helpers (kept for reuse + test coverage)
182
115
  // ──────────────────────────────────────────────────────────────────────────────
183
116
  /** Returns true for newline, carriage return, or EOF (EOT). */
184
117
  export function _isTerminator(c) {
185
- return c === "\n" || c === "\r" || c === "";
118
+ return c === "\n" || c === "\r" || c === "\u0004";
186
119
  }
187
120
  /** Returns true for DEL or backspace. */
188
121
  export function _isBackspace(c) {
189
- return c === "" || c === "\b";
190
- }
191
- /** Prints the numbered provider list and custom option to stdout. */
192
- export function _printProviderMenu(providers) {
193
- const numWidth = String(providers.length + 1).length;
194
- for (let i = 0; i < providers.length; i++) {
195
- const p = providers[i];
196
- if (!p)
197
- continue;
198
- const num = String(i + 1).padStart(numWidth);
199
- console.log(` ${num}) ${p.label.padEnd(28)} ${p.baseUrl}`);
200
- }
201
- const customNum = String(providers.length + 1).padStart(numWidth);
202
- console.log(` ${customNum}) Custom (enter name and URL manually)\n`);
203
- }
204
- /** Resolves a numeric choice string to a preset provider, or null for custom/invalid. */
205
- export function _resolveProviderChoice(choice, providers) {
206
- const n = Number.parseInt(choice, 10);
207
- if (Number.isNaN(n) || n < 1 || n > providers.length)
208
- return null;
209
- const p = providers[n - 1];
210
- if (!p)
211
- return null;
212
- return { providerName: p.name, baseUrl: p.baseUrl };
213
- }
214
- /** Resolves numeric index or literal model name to a model string. */
215
- export function _resolveModelChoice(input, models) {
216
- const n = Number.parseInt(input, 10);
217
- if (!Number.isNaN(n) && n >= 1 && n <= models.length) {
218
- return models[n - 1] ?? input;
219
- }
220
- return input;
221
- }
222
- /** Prints the multi-column model list to stdout. */
223
- export function _printModelMenu(models, termCols) {
224
- const nw = String(models.length).length;
225
- const maxLen = models.reduce((m, s) => Math.max(m, s.length), 0);
226
- const colWidth = nw + 2 + maxLen + 4;
227
- const cols = Math.max(1, Math.floor(termCols / colWidth));
228
- const rows = Math.ceil(models.length / cols);
229
- for (let r = 0; r < rows; r++) {
230
- let line = "";
231
- for (let c = 0; c < cols; c++) {
232
- const idx = c * rows + r;
233
- if (idx >= models.length)
234
- break;
235
- const num = String(idx + 1).padStart(nw);
236
- const name = (models[idx] ?? "").padEnd(maxLen);
237
- line += ` ${num}) ${name} `;
238
- }
239
- console.log(line.trimEnd());
240
- }
122
+ return c === "\u007f" || c === "\b";
241
123
  }
242
124
  // ──────────────────────────────────────────────────────────────────────────────
243
125
  // Agent selection prompt
@@ -302,45 +184,28 @@ export async function _promptAgentSelection(rl) {
302
184
  console.log(` → ${name}\n`);
303
185
  return name;
304
186
  }
305
- /** Prints the model validation result to stdout. */
306
- export function _printValidationResult(validation) {
307
- if (validation.ok) {
308
- console.log("✓ Model verified — connection successful.\n");
309
- }
310
- else {
311
- console.log(`\n⚠ Warning: Could not reach model — ${validation.error}`);
312
- console.log(" Config saved, but you may want to try a different model or check your API key.\n");
313
- }
314
- }
315
187
  // ──────────────────────────────────────────────────────────────────────────────
316
188
  /**
317
- * Merge setup args into config.yaml structure. Non-destructive — preserves existing entries.
189
+ * Merge setup args into config.yaml structure. Non-destructive — preserves
190
+ * existing entries (including agentOverrides). Engine config is LLM-free, so
191
+ * legacy provider/model fields are dropped on rewrite.
318
192
  */
319
193
  function mergeConfig(existing, args) {
320
- const providers = (typeof existing.providers === "object" && existing.providers !== null
321
- ? { ...existing.providers }
322
- : {});
323
- providers[args.provider] = { baseUrl: args.baseUrl, apiKey: args.apiKey };
324
- const models = (typeof existing.models === "object" && existing.models !== null
325
- ? { ...existing.models }
326
- : {});
327
- models.default = { provider: args.provider, name: args.model };
328
194
  const agents = (typeof existing.agents === "object" && existing.agents !== null
329
195
  ? { ...existing.agents }
330
196
  : {});
331
- const agentName = _agentNameFromBinary(args.agent ?? "hermes");
332
- // Ensure the selected agent has an entry
197
+ const agentName = _agentNameFromBinary(args.agent);
333
198
  if (!agents[agentName]) {
334
199
  agents[agentName] = { command: `uwf-${agentName}`, args: [] };
335
200
  }
336
- return {
337
- ...existing,
338
- providers,
339
- models,
201
+ const merged = {
340
202
  agents,
341
203
  defaultAgent: agentName,
342
- defaultModel: existing.defaultModel ?? "default",
343
204
  };
205
+ if (existing.agentOverrides !== undefined) {
206
+ merged.agentOverrides = existing.agentOverrides;
207
+ }
208
+ return merged;
344
209
  }
345
210
  /**
346
211
  * Check if the configured adapter binary (and its dependencies) are in PATH.
@@ -368,7 +233,9 @@ export function _checkAdapterAvailability(agentName) {
368
233
  return warnings;
369
234
  }
370
235
  /**
371
- * Non-interactive setup. All required args provided via CLI flags.
236
+ * Non-interactive setup. Engine config is LLM-free only writes
237
+ * agents + defaultAgent. LLM provider/model configuration lives in
238
+ * config.yaml under `providers` and `models`.
372
239
  */
373
240
  export async function cmdSetup(args) {
374
241
  const { storageRoot } = args;
@@ -379,178 +246,36 @@ export async function cmdSetup(args) {
379
246
  writeFileSync(configPath, stringify(merged, { indent: 2 }), "utf8");
380
247
  // Print config path to stderr (stdout is reserved for JSON output)
381
248
  console.error(`Config saved to ${configPath} ✓`);
382
- // Validate model connectivity
383
- const validation = await validateModel(args.baseUrl, args.apiKey, args.model);
384
249
  // Check adapter availability
385
- const agentName = _agentNameFromBinary(args.agent ?? "hermes");
250
+ const agentName = _agentNameFromBinary(args.agent);
386
251
  const adapterWarnings = _checkAdapterAvailability(agentName);
387
252
  for (const w of adapterWarnings) {
388
253
  console.error(`⚠ ${w}`);
389
254
  }
390
255
  return {
391
256
  configPath,
392
- provider: args.provider,
393
- model: args.model,
394
257
  defaultAgent: merged.defaultAgent,
395
- validation,
396
258
  adapterWarnings,
397
259
  };
398
260
  }
399
- function _handleSecretTerminator(state) {
400
- if (process.stdin.isTTY)
401
- process.stdin.setRawMode(state.rawWasSet);
402
- process.stdin.pause();
403
- process.stdin.removeListener("data", state.onData);
404
- process.stdout.write("\n");
405
- state.resolve(state.buf.trim());
406
- }
407
- function _handleSecretBackspace(state) {
408
- if (state.buf.length > 0) {
409
- state.buf = state.buf.slice(0, -1);
410
- process.stdout.write("\b \b");
411
- }
412
- }
413
- function _handleSecretChar(c, state) {
414
- if (_isTerminator(c)) {
415
- _handleSecretTerminator(state);
416
- return true;
417
- }
418
- if (_isBackspace(c)) {
419
- _handleSecretBackspace(state);
420
- return false;
421
- }
422
- if (c === "") {
423
- if (process.stdin.isTTY)
424
- process.stdin.setRawMode(state.rawWasSet);
425
- process.exit(130);
426
- }
427
- state.buf += c;
428
- process.stdout.write("*");
429
- return false;
430
- }
431
- /** Read a line with terminal echo disabled (for secrets). */
432
- async function promptSecret(label) {
433
- process.stdout.write(label);
434
- return new Promise((resolve) => {
435
- const rawWasSet = process.stdin.isRaw;
436
- if (process.stdin.isTTY) {
437
- process.stdin.setRawMode(true);
438
- }
439
- process.stdin.resume();
440
- process.stdin.setEncoding("utf8");
441
- const state = { buf: "", rawWasSet, resolve, onData: () => { } };
442
- state.onData = (chunk) => {
443
- for (const c of chunk.toString()) {
444
- if (_handleSecretChar(c, state))
445
- return;
446
- }
447
- };
448
- process.stdin.on("data", state.onData);
449
- });
450
- }
451
- /** Fetch available models from an OpenAI-compatible /models endpoint. */
452
- async function fetchModels(baseUrl, apiKey) {
453
- try {
454
- const url = `${baseUrl.replace(/\/+$/, "")}/models`;
455
- const res = await fetch(url, {
456
- headers: { Authorization: `Bearer ${apiKey}` },
457
- signal: AbortSignal.timeout(10_000),
458
- });
459
- if (!res.ok)
460
- return [];
461
- const body = (await res.json());
462
- if (!Array.isArray(body.data))
463
- return [];
464
- const NON_CHAT = /speech|embed|image|video|audio|ocr|rerank|tts|asr|paraformer|sambert|cosyvoice|wordart|wanx|wan2|flux|stable-diffusion|gui-/i;
465
- return body.data
466
- .map((m) => m.id)
467
- .filter((id) => !NON_CHAT.test(id))
468
- .sort();
469
- }
470
- catch {
471
- return [];
472
- }
473
- }
474
- async function _promptProviderSelection(rl) {
475
- console.log("Select a provider:\n");
476
- _printProviderMenu(PRESET_PROVIDERS);
477
- const choice = (await rl.question(`Choose [1-${PRESET_PROVIDERS.length + 1}]: `)).trim();
478
- const choiceNum = Number.parseInt(choice, 10);
479
- if (Number.isNaN(choiceNum) || choiceNum < 1 || choiceNum > PRESET_PROVIDERS.length + 1) {
480
- throw new Error(`Invalid choice: ${choice}`);
481
- }
482
- const preset = _resolveProviderChoice(choice, PRESET_PROVIDERS);
483
- if (preset) {
484
- const selected = PRESET_PROVIDERS[choiceNum - 1];
485
- if (selected) {
486
- console.log(`\n → ${selected.label} (${selected.baseUrl})\n`);
487
- }
488
- return preset;
489
- }
490
- const providerName = (await rl.question("Provider name (e.g. my-proxy): ")).trim();
491
- if (!providerName)
492
- throw new Error("Provider name required");
493
- const baseUrl = (await rl.question("OpenAI-compatible API base URL: ")).trim();
494
- if (!baseUrl)
495
- throw new Error("Base URL required");
496
- return { providerName, baseUrl };
497
- }
498
- async function _promptModelSelection(rl, baseUrl, apiKey) {
499
- console.log("\nFetching available models...");
500
- const models = await fetchModels(baseUrl, apiKey);
501
- if (models.length === 0) {
502
- console.log("Could not fetch models. Enter model name manually.");
503
- const model = (await rl.question("Default model (e.g. qwen-plus, gpt-4o): ")).trim();
504
- if (!model)
505
- throw new Error("Model required");
506
- return model;
507
- }
508
- console.log(`\nAvailable models (${models.length}):\n`);
509
- _printModelMenu(models, process.stdout.columns || 100);
510
- console.log(`\nChoose a number, or type a model name directly.`);
511
- const modelInput = (await rl.question(`Default model [1-${models.length}]: `)).trim();
512
- if (!modelInput)
513
- throw new Error("Model required");
514
- return _resolveModelChoice(modelInput, models);
515
- }
516
261
  /**
517
- * Interactive setup — prompts user for provider, API key, model.
262
+ * Interactive setup — prompts the user only for the default agent. LLM
263
+ * configuration lives in config.yaml under `providers` and `models`.
518
264
  */
519
265
  export async function cmdSetupInteractive(storageRoot) {
520
266
  const rl = createInterface({ input, output });
521
267
  try {
522
- console.log("Configure LLM provider for uwf workflow agents.\n");
523
- const { providerName, baseUrl } = await _promptProviderSelection(rl);
524
- // 2. API key
268
+ console.log("Configure default agent for uwf workflow.\n");
269
+ const agentName = await _promptAgentSelection(rl);
525
270
  rl.close();
526
- const apiKey = await promptSecret("API key: ");
527
- if (!apiKey)
528
- throw new Error("API key required");
529
- // 3. Model selection
530
- const rl2 = createInterface({ input, output });
531
- const model = await _promptModelSelection(rl2, baseUrl, apiKey);
532
- rl2.close();
533
- console.log(` → ${providerName}/${model}\n`);
534
- // 4. Agent discovery & selection
535
- const rl3 = createInterface({ input, output });
536
- const agentName = await _promptAgentSelection(rl3);
537
- rl3.close();
538
- const setupResult = await cmdSetup({
539
- provider: providerName,
540
- baseUrl,
541
- apiKey,
542
- model,
543
- agent: agentName,
544
- storageRoot,
545
- });
546
- // Show validation result
547
- if (setupResult.validation && typeof setupResult.validation === "object") {
548
- _printValidationResult(setupResult.validation);
549
- }
271
+ await cmdSetup({ agent: agentName, storageRoot });
550
272
  console.log("Setup complete! Get started:\n");
551
- console.log(" uwf workflow put <workflow.yaml> Register a workflow");
552
- console.log(' uwf thread start <name> -p "..." Start a thread');
553
- console.log(" uwf thread step <thread-id> Execute next step");
273
+ console.log(" uwf workflow list List available workflows");
274
+ console.log(" uwf workflow add <workflow.yaml> Register a workflow");
275
+ console.log(' uwf thread start <name> -p "..." Start a thread');
276
+ console.log(" uwf thread exec <thread-id> Execute next step");
277
+ console.log("");
278
+ console.log("LLM config: edit ~/.uwf/config.yaml (providers + models sections).");
554
279
  console.log("");
555
280
  return null;
556
281
  }