@united-workforce/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +221 -0
  3. package/dist/__tests__/adapter-json-roundtrip.test.d.ts +2 -0
  4. package/dist/__tests__/adapter-json-roundtrip.test.d.ts.map +1 -0
  5. package/dist/__tests__/adapter-json-roundtrip.test.js +147 -0
  6. package/dist/__tests__/adapter-json-roundtrip.test.js.map +1 -0
  7. package/dist/__tests__/config.test.d.ts +2 -0
  8. package/dist/__tests__/config.test.d.ts.map +1 -0
  9. package/dist/__tests__/config.test.js +685 -0
  10. package/dist/__tests__/config.test.js.map +1 -0
  11. package/dist/__tests__/current-role.test.d.ts +2 -0
  12. package/dist/__tests__/current-role.test.d.ts.map +1 -0
  13. package/dist/__tests__/current-role.test.js +401 -0
  14. package/dist/__tests__/current-role.test.js.map +1 -0
  15. package/dist/__tests__/e2e-mock-agent.test.d.ts +2 -0
  16. package/dist/__tests__/e2e-mock-agent.test.d.ts.map +1 -0
  17. package/dist/__tests__/e2e-mock-agent.test.js +401 -0
  18. package/dist/__tests__/e2e-mock-agent.test.js.map +1 -0
  19. package/dist/__tests__/include-tag.test.d.ts +2 -0
  20. package/dist/__tests__/include-tag.test.d.ts.map +1 -0
  21. package/dist/__tests__/include-tag.test.js +69 -0
  22. package/dist/__tests__/include-tag.test.js.map +1 -0
  23. package/dist/__tests__/log.test.d.ts +2 -0
  24. package/dist/__tests__/log.test.d.ts.map +1 -0
  25. package/dist/__tests__/log.test.js +161 -0
  26. package/dist/__tests__/log.test.js.map +1 -0
  27. package/dist/__tests__/moderator-evaluate.test.d.ts +2 -0
  28. package/dist/__tests__/moderator-evaluate.test.d.ts.map +1 -0
  29. package/dist/__tests__/moderator-evaluate.test.js +170 -0
  30. package/dist/__tests__/moderator-evaluate.test.js.map +1 -0
  31. package/dist/__tests__/preload.d.ts +3 -0
  32. package/dist/__tests__/preload.d.ts.map +1 -0
  33. package/dist/__tests__/preload.js +6 -0
  34. package/dist/__tests__/preload.js.map +1 -0
  35. package/dist/__tests__/prompt.test.d.ts +2 -0
  36. package/dist/__tests__/prompt.test.d.ts.map +1 -0
  37. package/dist/__tests__/prompt.test.js +111 -0
  38. package/dist/__tests__/prompt.test.js.map +1 -0
  39. package/dist/__tests__/resolve-head-hash.test.d.ts +2 -0
  40. package/dist/__tests__/resolve-head-hash.test.d.ts.map +1 -0
  41. package/dist/__tests__/resolve-head-hash.test.js +66 -0
  42. package/dist/__tests__/resolve-head-hash.test.js.map +1 -0
  43. package/dist/__tests__/setup-agent-discovery.test.d.ts +2 -0
  44. package/dist/__tests__/setup-agent-discovery.test.d.ts.map +1 -0
  45. package/dist/__tests__/setup-agent-discovery.test.js +119 -0
  46. package/dist/__tests__/setup-agent-discovery.test.js.map +1 -0
  47. package/dist/__tests__/setup-complexity.test.d.ts +2 -0
  48. package/dist/__tests__/setup-complexity.test.d.ts.map +1 -0
  49. package/dist/__tests__/setup-complexity.test.js +314 -0
  50. package/dist/__tests__/setup-complexity.test.js.map +1 -0
  51. package/dist/__tests__/setup-validate.test.d.ts +2 -0
  52. package/dist/__tests__/setup-validate.test.d.ts.map +1 -0
  53. package/dist/__tests__/setup-validate.test.js +108 -0
  54. package/dist/__tests__/setup-validate.test.js.map +1 -0
  55. package/dist/__tests__/solve-issue-tea-worktree.test.d.ts +2 -0
  56. package/dist/__tests__/solve-issue-tea-worktree.test.d.ts.map +1 -0
  57. package/dist/__tests__/solve-issue-tea-worktree.test.js +107 -0
  58. package/dist/__tests__/solve-issue-tea-worktree.test.js.map +1 -0
  59. package/dist/__tests__/spawn-agent-json.test.d.ts +2 -0
  60. package/dist/__tests__/spawn-agent-json.test.d.ts.map +1 -0
  61. package/dist/__tests__/spawn-agent-json.test.js +79 -0
  62. package/dist/__tests__/spawn-agent-json.test.js.map +1 -0
  63. package/dist/__tests__/step-read.test.d.ts +2 -0
  64. package/dist/__tests__/step-read.test.d.ts.map +1 -0
  65. package/dist/__tests__/step-read.test.js +561 -0
  66. package/dist/__tests__/step-read.test.js.map +1 -0
  67. package/dist/__tests__/step-show-json.test.d.ts +2 -0
  68. package/dist/__tests__/step-show-json.test.d.ts.map +1 -0
  69. package/dist/__tests__/step-show-json.test.js +311 -0
  70. package/dist/__tests__/step-show-json.test.js.map +1 -0
  71. package/dist/__tests__/step-timing.test.d.ts +2 -0
  72. package/dist/__tests__/step-timing.test.d.ts.map +1 -0
  73. package/dist/__tests__/step-timing.test.js +345 -0
  74. package/dist/__tests__/step-timing.test.js.map +1 -0
  75. package/dist/__tests__/store-global-cas.test.d.ts +2 -0
  76. package/dist/__tests__/store-global-cas.test.d.ts.map +1 -0
  77. package/dist/__tests__/store-global-cas.test.js +235 -0
  78. package/dist/__tests__/store-global-cas.test.js.map +1 -0
  79. package/dist/__tests__/store-storage-root.test.d.ts +2 -0
  80. package/dist/__tests__/store-storage-root.test.d.ts.map +1 -0
  81. package/dist/__tests__/store-storage-root.test.js +43 -0
  82. package/dist/__tests__/store-storage-root.test.js.map +1 -0
  83. package/dist/__tests__/store-unified-threads.test.d.ts +2 -0
  84. package/dist/__tests__/store-unified-threads.test.d.ts.map +1 -0
  85. package/dist/__tests__/store-unified-threads.test.js +189 -0
  86. package/dist/__tests__/store-unified-threads.test.js.map +1 -0
  87. package/dist/__tests__/thread-cancel-status.test.d.ts +2 -0
  88. package/dist/__tests__/thread-cancel-status.test.d.ts.map +1 -0
  89. package/dist/__tests__/thread-cancel-status.test.js +111 -0
  90. package/dist/__tests__/thread-cancel-status.test.js.map +1 -0
  91. package/dist/__tests__/thread-list-filters.test.d.ts +2 -0
  92. package/dist/__tests__/thread-list-filters.test.d.ts.map +1 -0
  93. package/dist/__tests__/thread-list-filters.test.js +442 -0
  94. package/dist/__tests__/thread-list-filters.test.js.map +1 -0
  95. package/dist/__tests__/thread-location.test.d.ts +2 -0
  96. package/dist/__tests__/thread-location.test.d.ts.map +1 -0
  97. package/dist/__tests__/thread-location.test.js +159 -0
  98. package/dist/__tests__/thread-location.test.js.map +1 -0
  99. package/dist/__tests__/thread-read-quota.test.d.ts +2 -0
  100. package/dist/__tests__/thread-read-quota.test.d.ts.map +1 -0
  101. package/dist/__tests__/thread-read-quota.test.js +546 -0
  102. package/dist/__tests__/thread-read-quota.test.js.map +1 -0
  103. package/dist/__tests__/thread-read-xml-tags.test.d.ts +2 -0
  104. package/dist/__tests__/thread-read-xml-tags.test.d.ts.map +1 -0
  105. package/dist/__tests__/thread-read-xml-tags.test.js +610 -0
  106. package/dist/__tests__/thread-read-xml-tags.test.js.map +1 -0
  107. package/dist/__tests__/thread-resume.test.d.ts +2 -0
  108. package/dist/__tests__/thread-resume.test.d.ts.map +1 -0
  109. package/dist/__tests__/thread-resume.test.js +592 -0
  110. package/dist/__tests__/thread-resume.test.js.map +1 -0
  111. package/dist/__tests__/thread-show-status.test.d.ts +2 -0
  112. package/dist/__tests__/thread-show-status.test.d.ts.map +1 -0
  113. package/dist/__tests__/thread-show-status.test.js +267 -0
  114. package/dist/__tests__/thread-show-status.test.js.map +1 -0
  115. package/dist/__tests__/thread-start-cwd-cli.test.d.ts +2 -0
  116. package/dist/__tests__/thread-start-cwd-cli.test.d.ts.map +1 -0
  117. package/dist/__tests__/thread-start-cwd-cli.test.js +130 -0
  118. package/dist/__tests__/thread-start-cwd-cli.test.js.map +1 -0
  119. package/dist/__tests__/thread-step-count.test.d.ts +2 -0
  120. package/dist/__tests__/thread-step-count.test.d.ts.map +1 -0
  121. package/dist/__tests__/thread-step-count.test.js +55 -0
  122. package/dist/__tests__/thread-step-count.test.js.map +1 -0
  123. package/dist/__tests__/thread-suspend-step.test.d.ts +2 -0
  124. package/dist/__tests__/thread-suspend-step.test.d.ts.map +1 -0
  125. package/dist/__tests__/thread-suspend-step.test.js +155 -0
  126. package/dist/__tests__/thread-suspend-step.test.js.map +1 -0
  127. package/dist/__tests__/thread-suspended-display.test.d.ts +2 -0
  128. package/dist/__tests__/thread-suspended-display.test.d.ts.map +1 -0
  129. package/dist/__tests__/thread-suspended-display.test.js +247 -0
  130. package/dist/__tests__/thread-suspended-display.test.js.map +1 -0
  131. package/dist/__tests__/thread-test-helpers.d.ts +4 -0
  132. package/dist/__tests__/thread-test-helpers.d.ts.map +1 -0
  133. package/dist/__tests__/thread-test-helpers.js +23 -0
  134. package/dist/__tests__/thread-test-helpers.js.map +1 -0
  135. package/dist/__tests__/thread.test.d.ts +2 -0
  136. package/dist/__tests__/thread.test.d.ts.map +1 -0
  137. package/dist/__tests__/thread.test.js +883 -0
  138. package/dist/__tests__/thread.test.js.map +1 -0
  139. package/dist/__tests__/validate-semantic.test.d.ts +2 -0
  140. package/dist/__tests__/validate-semantic.test.d.ts.map +1 -0
  141. package/dist/__tests__/validate-semantic.test.js +408 -0
  142. package/dist/__tests__/validate-semantic.test.js.map +1 -0
  143. package/dist/__tests__/workflow-resolution.test.d.ts +2 -0
  144. package/dist/__tests__/workflow-resolution.test.d.ts.map +1 -0
  145. package/dist/__tests__/workflow-resolution.test.js +308 -0
  146. package/dist/__tests__/workflow-resolution.test.js.map +1 -0
  147. package/dist/background/background.d.ts +38 -0
  148. package/dist/background/background.d.ts.map +1 -0
  149. package/dist/background/background.js +123 -0
  150. package/dist/background/background.js.map +1 -0
  151. package/dist/background/index.d.ts +3 -0
  152. package/dist/background/index.d.ts.map +1 -0
  153. package/dist/background/index.js +2 -0
  154. package/dist/background/index.js.map +1 -0
  155. package/dist/background/types.d.ts +9 -0
  156. package/dist/background/types.d.ts.map +1 -0
  157. package/dist/background/types.js +2 -0
  158. package/dist/background/types.js.map +1 -0
  159. package/dist/cli.d.ts +3 -0
  160. package/dist/cli.d.ts.map +1 -0
  161. package/dist/cli.js +535 -0
  162. package/dist/cli.js.map +1 -0
  163. package/dist/commands/config.d.ts +41 -0
  164. package/dist/commands/config.d.ts.map +1 -0
  165. package/dist/commands/config.js +252 -0
  166. package/dist/commands/config.js.map +1 -0
  167. package/dist/commands/log.d.ts +26 -0
  168. package/dist/commands/log.d.ts.map +1 -0
  169. package/dist/commands/log.js +79 -0
  170. package/dist/commands/log.js.map +1 -0
  171. package/dist/commands/prompt.d.ts +6 -0
  172. package/dist/commands/prompt.d.ts.map +1 -0
  173. package/dist/commands/prompt.js +67 -0
  174. package/dist/commands/prompt.js.map +1 -0
  175. package/dist/commands/setup.d.ts +73 -0
  176. package/dist/commands/setup.d.ts.map +1 -0
  177. package/dist/commands/setup.js +522 -0
  178. package/dist/commands/setup.js.map +1 -0
  179. package/dist/commands/shared.d.ts +31 -0
  180. package/dist/commands/shared.d.ts.map +1 -0
  181. package/dist/commands/shared.js +154 -0
  182. package/dist/commands/shared.js.map +1 -0
  183. package/dist/commands/step.d.ts +18 -0
  184. package/dist/commands/step.d.ts.map +1 -0
  185. package/dist/commands/step.js +257 -0
  186. package/dist/commands/step.js.map +1 -0
  187. package/dist/commands/thread-time-parser.d.ts +6 -0
  188. package/dist/commands/thread-time-parser.d.ts.map +1 -0
  189. package/dist/commands/thread-time-parser.js +22 -0
  190. package/dist/commands/thread-time-parser.js.map +1 -0
  191. package/dist/commands/thread.d.ts +38 -0
  192. package/dist/commands/thread.d.ts.map +1 -0
  193. package/dist/commands/thread.js +1087 -0
  194. package/dist/commands/thread.js.map +1 -0
  195. package/dist/commands/workflow.d.ts +24 -0
  196. package/dist/commands/workflow.d.ts.map +1 -0
  197. package/dist/commands/workflow.js +138 -0
  198. package/dist/commands/workflow.js.map +1 -0
  199. package/dist/format.d.ts +3 -0
  200. package/dist/format.d.ts.map +1 -0
  201. package/dist/format.js +10 -0
  202. package/dist/format.js.map +1 -0
  203. package/dist/include.d.ts +12 -0
  204. package/dist/include.d.ts.map +1 -0
  205. package/dist/include.js +35 -0
  206. package/dist/include.js.map +1 -0
  207. package/dist/moderator/__tests__/evaluate.test.d.ts +2 -0
  208. package/dist/moderator/__tests__/evaluate.test.d.ts.map +1 -0
  209. package/dist/moderator/__tests__/evaluate.test.js +167 -0
  210. package/dist/moderator/__tests__/evaluate.test.js.map +1 -0
  211. package/dist/moderator/evaluate.d.ts +6 -0
  212. package/dist/moderator/evaluate.d.ts.map +1 -0
  213. package/dist/moderator/evaluate.js +65 -0
  214. package/dist/moderator/evaluate.js.map +1 -0
  215. package/dist/moderator/index.d.ts +4 -0
  216. package/dist/moderator/index.d.ts.map +1 -0
  217. package/dist/moderator/index.js +3 -0
  218. package/dist/moderator/index.js.map +1 -0
  219. package/dist/moderator/types.d.ts +25 -0
  220. package/dist/moderator/types.d.ts.map +1 -0
  221. package/dist/moderator/types.js +4 -0
  222. package/dist/moderator/types.js.map +1 -0
  223. package/dist/schemas.d.ts +16 -0
  224. package/dist/schemas.d.ts.map +1 -0
  225. package/dist/schemas.js +17 -0
  226. package/dist/schemas.js.map +1 -0
  227. package/dist/store.d.ts +77 -0
  228. package/dist/store.d.ts.map +1 -0
  229. package/dist/store.js +392 -0
  230. package/dist/store.js.map +1 -0
  231. package/dist/validate-semantic.d.ts +7 -0
  232. package/dist/validate-semantic.d.ts.map +1 -0
  233. package/dist/validate-semantic.js +263 -0
  234. package/dist/validate-semantic.js.map +1 -0
  235. package/dist/validate.d.ts +16 -0
  236. package/dist/validate.d.ts.map +1 -0
  237. package/dist/validate.js +115 -0
  238. package/dist/validate.js.map +1 -0
  239. package/package.json +44 -0
  240. package/src/__tests__/adapter-json-roundtrip.test.ts +181 -0
  241. package/src/__tests__/config.test.ts +740 -0
  242. package/src/__tests__/current-role.test.ts +438 -0
  243. package/src/__tests__/e2e-mock-agent.test.ts +498 -0
  244. package/src/__tests__/fixtures/e2e-completed-resume.mock.yaml +15 -0
  245. package/src/__tests__/fixtures/e2e-count.mock.yaml +19 -0
  246. package/src/__tests__/fixtures/e2e-count.workflow.yaml +45 -0
  247. package/src/__tests__/fixtures/e2e-linear.mock.yaml +13 -0
  248. package/src/__tests__/fixtures/e2e-linear.workflow.yaml +32 -0
  249. package/src/__tests__/fixtures/e2e-loop.mock.yaml +25 -0
  250. package/src/__tests__/fixtures/e2e-loop.workflow.yaml +36 -0
  251. package/src/__tests__/fixtures/e2e-mismatch.mock.yaml +16 -0
  252. package/src/__tests__/fixtures/e2e-mustache.mock.yaml +15 -0
  253. package/src/__tests__/fixtures/e2e-mustache.workflow.yaml +34 -0
  254. package/src/__tests__/fixtures/e2e-suspend.mock.yaml +14 -0
  255. package/src/__tests__/fixtures/e2e-suspend.workflow.yaml +24 -0
  256. package/src/__tests__/include-tag.test.ts +84 -0
  257. package/src/__tests__/log.test.ts +181 -0
  258. package/src/__tests__/moderator-evaluate.test.ts +186 -0
  259. package/src/__tests__/preload.ts +7 -0
  260. package/src/__tests__/prompt.test.ts +129 -0
  261. package/src/__tests__/resolve-head-hash.test.ts +86 -0
  262. package/src/__tests__/setup-agent-discovery.test.ts +167 -0
  263. package/src/__tests__/setup-complexity.test.ts +381 -0
  264. package/src/__tests__/setup-validate.test.ts +148 -0
  265. package/src/__tests__/solve-issue-tea-worktree.test.ts +144 -0
  266. package/src/__tests__/spawn-agent-json.test.ts +100 -0
  267. package/src/__tests__/step-read.test.ts +632 -0
  268. package/src/__tests__/step-show-json.test.ts +373 -0
  269. package/src/__tests__/step-timing.test.ts +392 -0
  270. package/src/__tests__/store-global-cas.test.ts +308 -0
  271. package/src/__tests__/store-storage-root.test.ts +49 -0
  272. package/src/__tests__/store-unified-threads.test.ts +235 -0
  273. package/src/__tests__/thread-cancel-status.test.ts +138 -0
  274. package/src/__tests__/thread-list-filters.test.ts +572 -0
  275. package/src/__tests__/thread-location.test.ts +186 -0
  276. package/src/__tests__/thread-read-quota.test.ts +613 -0
  277. package/src/__tests__/thread-read-xml-tags.test.ts +717 -0
  278. package/src/__tests__/thread-resume.test.ts +710 -0
  279. package/src/__tests__/thread-show-status.test.ts +317 -0
  280. package/src/__tests__/thread-start-cwd-cli.test.ts +164 -0
  281. package/src/__tests__/thread-step-count.test.ts +70 -0
  282. package/src/__tests__/thread-suspend-step.test.ts +181 -0
  283. package/src/__tests__/thread-suspended-display.test.ts +287 -0
  284. package/src/__tests__/thread-test-helpers.ts +37 -0
  285. package/src/__tests__/thread.test.ts +1025 -0
  286. package/src/__tests__/validate-semantic.test.ts +474 -0
  287. package/src/__tests__/workflow-resolution.test.ts +421 -0
  288. package/src/background/background.ts +147 -0
  289. package/src/background/index.ts +11 -0
  290. package/src/background/types.ts +9 -0
  291. package/src/cli.ts +692 -0
  292. package/src/commands/config.ts +304 -0
  293. package/src/commands/log.ts +116 -0
  294. package/src/commands/prompt.ts +81 -0
  295. package/src/commands/setup.ts +603 -0
  296. package/src/commands/shared.ts +227 -0
  297. package/src/commands/step.ts +343 -0
  298. package/src/commands/thread-time-parser.ts +23 -0
  299. package/src/commands/thread.ts +1575 -0
  300. package/src/commands/workflow.ts +213 -0
  301. package/src/format.ts +12 -0
  302. package/src/include.ts +37 -0
  303. package/src/moderator/__tests__/evaluate.test.ts +199 -0
  304. package/src/moderator/evaluate.ts +80 -0
  305. package/src/moderator/index.ts +7 -0
  306. package/src/moderator/types.ts +24 -0
  307. package/src/schemas.ts +26 -0
  308. package/src/store.ts +479 -0
  309. package/src/validate-semantic.ts +304 -0
  310. package/src/validate.ts +137 -0
@@ -0,0 +1,522 @@
1
+ import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { stdin as input, stdout as output } from "node:process";
4
+ import { createInterface } from "node:readline/promises";
5
+ import { parse, stringify } from "yaml";
6
+ /**
7
+ * Send a minimal chat completion request to verify the model is reachable.
8
+ * Returns ok on 2xx, error with reason string otherwise.
9
+ */
10
+ export async function validateModel(baseUrl, apiKey, model) {
11
+ try {
12
+ const url = `${baseUrl.replace(/\/+$/, "")}/chat/completions`;
13
+ const res = await fetch(url, {
14
+ method: "POST",
15
+ headers: {
16
+ Authorization: `Bearer ${apiKey}`,
17
+ "Content-Type": "application/json",
18
+ },
19
+ body: JSON.stringify({
20
+ model,
21
+ messages: [{ role: "user", content: "hi" }],
22
+ max_tokens: 1,
23
+ }),
24
+ signal: AbortSignal.timeout(15_000),
25
+ });
26
+ if (!res.ok) {
27
+ return { ok: false, error: `HTTP ${res.status} ${res.statusText}` };
28
+ }
29
+ return { ok: true, value: undefined };
30
+ }
31
+ catch (err) {
32
+ if (err instanceof DOMException && err.name === "AbortError") {
33
+ return { ok: false, error: "Request timed out — model endpoint unreachable" };
34
+ }
35
+ return { ok: false, error: `Network error — could not reach endpoint (${String(err)})` };
36
+ }
37
+ }
38
+ /**
39
+ * Preset provider list — embedded to avoid runtime YAML loading dependency.
40
+ * Keep in sync with providers.yaml in cli.
41
+ */
42
+ const PRESET_PROVIDERS = [
43
+ // International
44
+ { name: "openai", label: "OpenAI", baseUrl: "https://api.openai.com/v1" },
45
+ { name: "xai", label: "xAI", baseUrl: "https://api.x.ai/v1" },
46
+ { name: "openrouter", label: "OpenRouter", baseUrl: "https://openrouter.ai/api/v1" },
47
+ { name: "venice", label: "Venice", baseUrl: "https://api.venice.ai/api/v1" },
48
+ // China
49
+ {
50
+ name: "dashscope",
51
+ label: "DashScope (Alibaba)",
52
+ baseUrl: "https://dashscope.aliyuncs.com/compatible-mode/v1",
53
+ },
54
+ { name: "deepseek", label: "DeepSeek", baseUrl: "https://api.deepseek.com/v1" },
55
+ { name: "siliconflow", label: "SiliconFlow", baseUrl: "https://api.siliconflow.cn/v1" },
56
+ {
57
+ name: "volcengine",
58
+ label: "Volcengine (ByteDance)",
59
+ baseUrl: "https://ark.cn-beijing.volces.com/api/v3",
60
+ },
61
+ { name: "kimi", label: "Kimi (Moonshot)", baseUrl: "https://api.moonshot.cn/v1" },
62
+ { name: "glm", label: "GLM (Zhipu AI)", baseUrl: "https://open.bigmodel.cn/api/paas/v4" },
63
+ { name: "stepfun", label: "StepFun", baseUrl: "https://api.stepfun.com/v1" },
64
+ { name: "minimax", label: "MiniMax", baseUrl: "https://api.minimax.io/v1" },
65
+ // Local
66
+ { name: "ollama", label: "Ollama (local)", baseUrl: "http://localhost:11434/v1" },
67
+ ];
68
+ function getConfigPath(root) {
69
+ return join(root, "config.yaml");
70
+ }
71
+ /**
72
+ * Load existing config.yaml or return empty structure.
73
+ */
74
+ function loadExistingConfig(configPath) {
75
+ try {
76
+ if (existsSync(configPath)) {
77
+ const raw = parse(readFileSync(configPath, "utf8"));
78
+ if (typeof raw === "object" && raw !== null && !Array.isArray(raw)) {
79
+ return raw;
80
+ }
81
+ }
82
+ }
83
+ catch {
84
+ // ignore parse errors, start fresh
85
+ }
86
+ return {};
87
+ }
88
+ // ──────────────────────────────────────────────────────────────────────────────
89
+ // Extracted helpers — _discoverAgents
90
+ // ──────────────────────────────────────────────────────────────────────────────
91
+ /**
92
+ * Scans directories from a PATH string for uwf-* executables.
93
+ */
94
+ export async function _searchPathDirs(pathEnv) {
95
+ if (!pathEnv)
96
+ return [];
97
+ const dirs = pathEnv.split(":").filter((d) => d.length > 0);
98
+ const agents = new Set();
99
+ for (const dir of dirs) {
100
+ _scanDirForAgents(dir, agents);
101
+ }
102
+ return Array.from(agents).sort();
103
+ }
104
+ function _scanDirForAgents(dir, agents) {
105
+ try {
106
+ if (!existsSync(dir))
107
+ return;
108
+ const entries = readdirSync(dir);
109
+ for (const entry of entries) {
110
+ if (!entry.startsWith("uwf-") || entry === "uwf")
111
+ continue;
112
+ if (_isExecutableFile(join(dir, entry))) {
113
+ agents.add(entry);
114
+ }
115
+ }
116
+ }
117
+ catch {
118
+ // Skip inaccessible directories
119
+ }
120
+ }
121
+ function _isExecutableFile(fullPath) {
122
+ try {
123
+ const s = statSync(fullPath);
124
+ return s.isFile() && (s.mode & 0o111) !== 0;
125
+ }
126
+ catch {
127
+ return false;
128
+ }
129
+ }
130
+ /**
131
+ * Parses the stdout of `which -a` into sorted unique basenames.
132
+ */
133
+ export function _parseWhichOutput(text) {
134
+ if (!text)
135
+ return [];
136
+ const agents = new Set();
137
+ for (const line of text.trim().split("\n")) {
138
+ if (!line)
139
+ continue;
140
+ const basename = line.split("/").pop() ?? "";
141
+ if (basename.startsWith("uwf-") && basename !== "uwf") {
142
+ agents.add(basename);
143
+ }
144
+ }
145
+ return Array.from(agents).sort();
146
+ }
147
+ /**
148
+ * Discover uwf-* agent binaries in PATH.
149
+ * Returns sorted list of binary names (e.g., ["uwf-hermes", "uwf-claude-code"]).
150
+ */
151
+ export async function _discoverAgents() {
152
+ try {
153
+ const agents = await _tryWhichDiscovery();
154
+ if (agents !== null)
155
+ return agents;
156
+ return await _searchPathDirs(process.env.PATH ?? "");
157
+ }
158
+ catch {
159
+ return [];
160
+ }
161
+ }
162
+ async function _tryWhichDiscovery() {
163
+ try {
164
+ const { execFileSync } = await import("node:child_process");
165
+ const text = execFileSync("which", ["-a", "uwf-hermes", "uwf-claude-code", "uwf-cursor"], {
166
+ encoding: "utf-8",
167
+ stdio: ["pipe", "pipe", "pipe"],
168
+ });
169
+ return _parseWhichOutput(text);
170
+ }
171
+ catch {
172
+ return null;
173
+ }
174
+ }
175
+ // ──────────────────────────────────────────────────────────────────────────────
176
+ // Extracted helpers — onData closure (promptSecret)
177
+ // ──────────────────────────────────────────────────────────────────────────────
178
+ /** Returns true for newline, carriage return, or EOF (EOT). */
179
+ export function _isTerminator(c) {
180
+ return c === "\n" || c === "\r" || c === "";
181
+ }
182
+ /** Returns true for DEL or backspace. */
183
+ export function _isBackspace(c) {
184
+ return c === "" || c === "\b";
185
+ }
186
+ /** Prints the numbered provider list and custom option to stdout. */
187
+ export function _printProviderMenu(providers) {
188
+ const numWidth = String(providers.length + 1).length;
189
+ for (let i = 0; i < providers.length; i++) {
190
+ const p = providers[i];
191
+ if (!p)
192
+ continue;
193
+ const num = String(i + 1).padStart(numWidth);
194
+ console.log(` ${num}) ${p.label.padEnd(28)} ${p.baseUrl}`);
195
+ }
196
+ const customNum = String(providers.length + 1).padStart(numWidth);
197
+ console.log(` ${customNum}) Custom (enter name and URL manually)\n`);
198
+ }
199
+ /** Resolves a numeric choice string to a preset provider, or null for custom/invalid. */
200
+ export function _resolveProviderChoice(choice, providers) {
201
+ const n = Number.parseInt(choice, 10);
202
+ if (Number.isNaN(n) || n < 1 || n > providers.length)
203
+ return null;
204
+ const p = providers[n - 1];
205
+ if (!p)
206
+ return null;
207
+ return { providerName: p.name, baseUrl: p.baseUrl };
208
+ }
209
+ /** Resolves numeric index or literal model name to a model string. */
210
+ export function _resolveModelChoice(input, models) {
211
+ const n = Number.parseInt(input, 10);
212
+ if (!Number.isNaN(n) && n >= 1 && n <= models.length) {
213
+ return models[n - 1] ?? input;
214
+ }
215
+ return input;
216
+ }
217
+ /** Prints the multi-column model list to stdout. */
218
+ export function _printModelMenu(models, termCols) {
219
+ const nw = String(models.length).length;
220
+ const maxLen = models.reduce((m, s) => Math.max(m, s.length), 0);
221
+ const colWidth = nw + 2 + maxLen + 4;
222
+ const cols = Math.max(1, Math.floor(termCols / colWidth));
223
+ const rows = Math.ceil(models.length / cols);
224
+ for (let r = 0; r < rows; r++) {
225
+ let line = "";
226
+ for (let c = 0; c < cols; c++) {
227
+ const idx = c * rows + r;
228
+ if (idx >= models.length)
229
+ break;
230
+ const num = String(idx + 1).padStart(nw);
231
+ const name = (models[idx] ?? "").padEnd(maxLen);
232
+ line += ` ${num}) ${name} `;
233
+ }
234
+ console.log(line.trimEnd());
235
+ }
236
+ }
237
+ // ──────────────────────────────────────────────────────────────────────────────
238
+ // Agent selection prompt
239
+ // ──────────────────────────────────────────────────────────────────────────────
240
+ /** Known agent binary → display label mapping. */
241
+ const KNOWN_AGENTS = {
242
+ "uwf-hermes": "Hermes (hermes-agent)",
243
+ "uwf-claude-code": "Claude Code",
244
+ "uwf-cursor": "Cursor",
245
+ "uwf-builtin": "Built-in (lightweight, no external agent)",
246
+ };
247
+ /** Extract short agent name from binary name: uwf-claude-code → claude-code */
248
+ export function _agentNameFromBinary(binary) {
249
+ return binary.replace(/^uwf-/, "");
250
+ }
251
+ /** Prints numbered agent list to stdout. */
252
+ export function _printAgentMenu(agents) {
253
+ const numWidth = String(agents.length).length;
254
+ for (let i = 0; i < agents.length; i++) {
255
+ const bin = agents[i] ?? "";
256
+ const label = KNOWN_AGENTS[bin] ?? bin;
257
+ const num = String(i + 1).padStart(numWidth);
258
+ console.log(` ${num}) ${label} (${bin})`);
259
+ }
260
+ console.log("");
261
+ }
262
+ /**
263
+ * Interactive agent selection. Discovers uwf-* binaries, lets user pick default.
264
+ * Returns short agent name (e.g. "hermes", "claude-code").
265
+ */
266
+ export async function _promptAgentSelection(rl) {
267
+ console.log("Discovering installed agents...\n");
268
+ const agents = await _discoverAgents();
269
+ if (agents.length === 0) {
270
+ console.log(" No uwf-* agent binaries found in PATH.\n");
271
+ console.log(" Install one first, for example:");
272
+ console.log(" npm i -g @united-workforce/agent-hermes");
273
+ console.log(" npm i -g @united-workforce/agent-claude-code\n");
274
+ const manual = (await rl.question("Agent binary name (e.g. uwf-hermes), or press Enter to skip: ")).trim();
275
+ if (!manual)
276
+ return "hermes";
277
+ return _agentNameFromBinary(manual.startsWith("uwf-") ? manual : `uwf-${manual}`);
278
+ }
279
+ if (agents.length === 1) {
280
+ const name = _agentNameFromBinary(agents[0] ?? "uwf-hermes");
281
+ const label = KNOWN_AGENTS[agents[0] ?? ""] ?? agents[0];
282
+ console.log(` Found 1 agent: ${label} — auto-selected.\n`);
283
+ return name;
284
+ }
285
+ console.log(` Found ${agents.length} agents:\n`);
286
+ _printAgentMenu(agents);
287
+ const choice = (await rl.question(`Choose default agent [1-${agents.length}]: `)).trim();
288
+ const n = Number.parseInt(choice, 10);
289
+ if (!Number.isNaN(n) && n >= 1 && n <= agents.length) {
290
+ const selected = agents[n - 1] ?? "uwf-hermes";
291
+ const name = _agentNameFromBinary(selected);
292
+ console.log(` → ${name}\n`);
293
+ return name;
294
+ }
295
+ // Treat as literal name
296
+ const name = _agentNameFromBinary(choice.startsWith("uwf-") ? choice : `uwf-${choice}`);
297
+ console.log(` → ${name}\n`);
298
+ return name;
299
+ }
300
+ /** Prints the model validation result to stdout. */
301
+ export function _printValidationResult(validation) {
302
+ if (validation.ok) {
303
+ console.log("✓ Model verified — connection successful.\n");
304
+ }
305
+ else {
306
+ console.log(`\n⚠ Warning: Could not reach model — ${validation.error}`);
307
+ console.log(" Config saved, but you may want to try a different model or check your API key.\n");
308
+ }
309
+ }
310
+ // ──────────────────────────────────────────────────────────────────────────────
311
+ /**
312
+ * Merge setup args into config.yaml structure. Non-destructive — preserves existing entries.
313
+ */
314
+ function mergeConfig(existing, args) {
315
+ const providers = (typeof existing.providers === "object" && existing.providers !== null
316
+ ? { ...existing.providers }
317
+ : {});
318
+ providers[args.provider] = { baseUrl: args.baseUrl, apiKey: args.apiKey };
319
+ const models = (typeof existing.models === "object" && existing.models !== null
320
+ ? { ...existing.models }
321
+ : {});
322
+ models.default = { provider: args.provider, name: args.model };
323
+ const agents = (typeof existing.agents === "object" && existing.agents !== null
324
+ ? { ...existing.agents }
325
+ : {});
326
+ const agentName = _agentNameFromBinary(args.agent ?? "hermes");
327
+ // Ensure the selected agent has an entry
328
+ if (!agents[agentName]) {
329
+ agents[agentName] = { command: `uwf-${agentName}`, args: [] };
330
+ }
331
+ return {
332
+ ...existing,
333
+ providers,
334
+ models,
335
+ agents,
336
+ defaultAgent: agentName,
337
+ defaultModel: existing.defaultModel ?? "default",
338
+ };
339
+ }
340
+ /**
341
+ * Non-interactive setup. All required args provided via CLI flags.
342
+ */
343
+ export async function cmdSetup(args) {
344
+ const { storageRoot } = args;
345
+ mkdirSync(storageRoot, { recursive: true });
346
+ const configPath = getConfigPath(storageRoot);
347
+ const existing = loadExistingConfig(configPath);
348
+ const merged = mergeConfig(existing, args);
349
+ writeFileSync(configPath, stringify(merged, { indent: 2 }), "utf8");
350
+ // Validate model connectivity
351
+ const validation = await validateModel(args.baseUrl, args.apiKey, args.model);
352
+ return {
353
+ configPath,
354
+ provider: args.provider,
355
+ model: args.model,
356
+ defaultAgent: merged.defaultAgent,
357
+ validation,
358
+ };
359
+ }
360
+ function _handleSecretTerminator(state) {
361
+ if (process.stdin.isTTY)
362
+ process.stdin.setRawMode(state.rawWasSet);
363
+ process.stdin.pause();
364
+ process.stdin.removeListener("data", state.onData);
365
+ process.stdout.write("\n");
366
+ state.resolve(state.buf.trim());
367
+ }
368
+ function _handleSecretBackspace(state) {
369
+ if (state.buf.length > 0) {
370
+ state.buf = state.buf.slice(0, -1);
371
+ process.stdout.write("\b \b");
372
+ }
373
+ }
374
+ function _handleSecretChar(c, state) {
375
+ if (_isTerminator(c)) {
376
+ _handleSecretTerminator(state);
377
+ return true;
378
+ }
379
+ if (_isBackspace(c)) {
380
+ _handleSecretBackspace(state);
381
+ return false;
382
+ }
383
+ if (c === "") {
384
+ if (process.stdin.isTTY)
385
+ process.stdin.setRawMode(state.rawWasSet);
386
+ process.exit(130);
387
+ }
388
+ state.buf += c;
389
+ process.stdout.write("*");
390
+ return false;
391
+ }
392
+ /** Read a line with terminal echo disabled (for secrets). */
393
+ async function promptSecret(label) {
394
+ process.stdout.write(label);
395
+ return new Promise((resolve) => {
396
+ const rawWasSet = process.stdin.isRaw;
397
+ if (process.stdin.isTTY) {
398
+ process.stdin.setRawMode(true);
399
+ }
400
+ process.stdin.resume();
401
+ process.stdin.setEncoding("utf8");
402
+ const state = { buf: "", rawWasSet, resolve, onData: () => { } };
403
+ state.onData = (chunk) => {
404
+ for (const c of chunk.toString()) {
405
+ if (_handleSecretChar(c, state))
406
+ return;
407
+ }
408
+ };
409
+ process.stdin.on("data", state.onData);
410
+ });
411
+ }
412
+ /** Fetch available models from an OpenAI-compatible /models endpoint. */
413
+ async function fetchModels(baseUrl, apiKey) {
414
+ try {
415
+ const url = `${baseUrl.replace(/\/+$/, "")}/models`;
416
+ const res = await fetch(url, {
417
+ headers: { Authorization: `Bearer ${apiKey}` },
418
+ signal: AbortSignal.timeout(10_000),
419
+ });
420
+ if (!res.ok)
421
+ return [];
422
+ const body = (await res.json());
423
+ if (!Array.isArray(body.data))
424
+ return [];
425
+ const NON_CHAT = /speech|embed|image|video|audio|ocr|rerank|tts|asr|paraformer|sambert|cosyvoice|wordart|wanx|wan2|flux|stable-diffusion|gui-/i;
426
+ return body.data
427
+ .map((m) => m.id)
428
+ .filter((id) => !NON_CHAT.test(id))
429
+ .sort();
430
+ }
431
+ catch {
432
+ return [];
433
+ }
434
+ }
435
+ async function _promptProviderSelection(rl) {
436
+ console.log("Select a provider:\n");
437
+ _printProviderMenu(PRESET_PROVIDERS);
438
+ const choice = (await rl.question(`Choose [1-${PRESET_PROVIDERS.length + 1}]: `)).trim();
439
+ const choiceNum = Number.parseInt(choice, 10);
440
+ if (Number.isNaN(choiceNum) || choiceNum < 1 || choiceNum > PRESET_PROVIDERS.length + 1) {
441
+ throw new Error(`Invalid choice: ${choice}`);
442
+ }
443
+ const preset = _resolveProviderChoice(choice, PRESET_PROVIDERS);
444
+ if (preset) {
445
+ const selected = PRESET_PROVIDERS[choiceNum - 1];
446
+ if (selected) {
447
+ console.log(`\n → ${selected.label} (${selected.baseUrl})\n`);
448
+ }
449
+ return preset;
450
+ }
451
+ const providerName = (await rl.question("Provider name (e.g. my-proxy): ")).trim();
452
+ if (!providerName)
453
+ throw new Error("Provider name required");
454
+ const baseUrl = (await rl.question("OpenAI-compatible API base URL: ")).trim();
455
+ if (!baseUrl)
456
+ throw new Error("Base URL required");
457
+ return { providerName, baseUrl };
458
+ }
459
+ async function _promptModelSelection(rl, baseUrl, apiKey) {
460
+ console.log("\nFetching available models...");
461
+ const models = await fetchModels(baseUrl, apiKey);
462
+ if (models.length === 0) {
463
+ console.log("Could not fetch models. Enter model name manually.");
464
+ const model = (await rl.question("Default model (e.g. qwen-plus, gpt-4o): ")).trim();
465
+ if (!model)
466
+ throw new Error("Model required");
467
+ return model;
468
+ }
469
+ console.log(`\nAvailable models (${models.length}):\n`);
470
+ _printModelMenu(models, process.stdout.columns || 100);
471
+ console.log(`\nChoose a number, or type a model name directly.`);
472
+ const modelInput = (await rl.question(`Default model [1-${models.length}]: `)).trim();
473
+ if (!modelInput)
474
+ throw new Error("Model required");
475
+ return _resolveModelChoice(modelInput, models);
476
+ }
477
+ /**
478
+ * Interactive setup — prompts user for provider, API key, model.
479
+ */
480
+ export async function cmdSetupInteractive(storageRoot) {
481
+ const rl = createInterface({ input, output });
482
+ try {
483
+ console.log("Configure LLM provider for uwf workflow agents.\n");
484
+ const { providerName, baseUrl } = await _promptProviderSelection(rl);
485
+ // 2. API key
486
+ rl.close();
487
+ const apiKey = await promptSecret("API key: ");
488
+ if (!apiKey)
489
+ throw new Error("API key required");
490
+ // 3. Model selection
491
+ const rl2 = createInterface({ input, output });
492
+ const model = await _promptModelSelection(rl2, baseUrl, apiKey);
493
+ rl2.close();
494
+ console.log(` → ${providerName}/${model}\n`);
495
+ // 4. Agent discovery & selection
496
+ const rl3 = createInterface({ input, output });
497
+ const agentName = await _promptAgentSelection(rl3);
498
+ rl3.close();
499
+ const setupResult = await cmdSetup({
500
+ provider: providerName,
501
+ baseUrl,
502
+ apiKey,
503
+ model,
504
+ agent: agentName,
505
+ storageRoot,
506
+ });
507
+ // Show validation result
508
+ if (setupResult.validation && typeof setupResult.validation === "object") {
509
+ _printValidationResult(setupResult.validation);
510
+ }
511
+ console.log("Setup complete! Get started:\n");
512
+ console.log(" uwf workflow put <workflow.yaml> Register a workflow");
513
+ console.log(' uwf thread start <name> -p "..." Start a thread');
514
+ console.log(" uwf thread step <thread-id> Execute next step");
515
+ console.log("");
516
+ return null;
517
+ }
518
+ finally {
519
+ rl.close();
520
+ }
521
+ }
522
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { Store as CasStore, JSONSchema } from "@ocas/core";
2
+ import type { CasRef, StartNodePayload, StepNodePayload, ThreadId } from "@united-workforce/protocol";
3
+ import { type UwfStore } from "../store.js";
4
+ type ChainState = {
5
+ startHash: CasRef;
6
+ start: StartNodePayload;
7
+ stepsNewestFirst: StepNodePayload[];
8
+ headIsStart: boolean;
9
+ };
10
+ type OrderedStepItem = {
11
+ hash: CasRef;
12
+ payload: StepNodePayload;
13
+ timestamp: number;
14
+ };
15
+ declare function fail(message: string): never;
16
+ declare function walkChain(uwf: UwfStore, headHash: CasRef): ChainState;
17
+ declare function expandOutput(uwf: UwfStore, outputRef: CasRef): unknown;
18
+ /**
19
+ * Recursively expand all ocas_ref fields in a CAS node's payload,
20
+ * replacing hash strings with the referenced node's expanded payload.
21
+ */
22
+ declare function expandDeep(store: CasStore, hash: CasRef, visited?: Set<string>): unknown;
23
+ declare function expandCasRefField(store: CasStore, value: unknown, visited: Set<string>): unknown;
24
+ declare function expandAnyOfField(store: CasStore, schema: JSONSchema, value: unknown, visited: Set<string>): unknown;
25
+ declare function expandArrayField(store: CasStore, schema: JSONSchema, value: unknown, visited: Set<string>): unknown;
26
+ declare function expandObjectField(store: CasStore, schema: JSONSchema, value: unknown, visited: Set<string>): unknown;
27
+ declare function expandValue(store: CasStore, schema: JSONSchema, value: unknown, visited: Set<string>): unknown;
28
+ declare function collectOrderedSteps(uwf: UwfStore, headHash: CasRef, chain: ChainState): OrderedStepItem[];
29
+ declare function resolveHeadHash(storageRoot: string, threadId: ThreadId): Promise<CasRef>;
30
+ export { type ChainState, collectOrderedSteps, expandAnyOfField, expandArrayField, expandCasRefField, expandDeep, expandObjectField, expandOutput, expandValue, fail, type OrderedStepItem, resolveHeadHash, walkChain, };
31
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,IAAI,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEhE,OAAO,KAAK,EACV,MAAM,EACN,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACT,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAA6B,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvE,KAAK,UAAU,GAAG;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,gBAAgB,CAAC;IACxB,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,eAAe,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,iBAAS,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAGpC;AAED,iBAAS,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAmD9D;AAED,iBAAS,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAM/D;AAED;;;GAGG;AACH,iBAAS,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAYjF;AAED,iBAAS,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAKzF;AAED,iBAAS,gBAAgB,CACvB,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GACnB,OAAO,CAQT;AAED,iBAAS,gBAAgB,CACvB,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GACnB,OAAO,CAIT;AAED,iBAAS,iBAAiB,CACxB,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GACnB,OAAO,CAYT;AAED,iBAAS,WAAW,CAClB,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GACnB,OAAO,CAKT;AAED,iBAAS,mBAAmB,CAC1B,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,UAAU,GAChB,eAAe,EAAE,CA0BnB;AAED,iBAAe,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAOvF;AAED,OAAO,EACL,KAAK,UAAU,EACf,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,IAAI,EACJ,KAAK,eAAe,EACpB,eAAe,EACf,SAAS,GACV,CAAC"}