@10et/cli 1.0.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 (1401) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +79 -0
  3. package/clawdbot-plugin/clawdbot.plugin.json +20 -0
  4. package/clawdbot-plugin/index.js +555 -0
  5. package/clawdbot-plugin/index.ts +582 -0
  6. package/clawdbot-skill/README.md +328 -0
  7. package/clawdbot-skill/SKILL.md +59 -0
  8. package/clawdbot-skill/index.ts +683 -0
  9. package/clawdbot-skill/package.json +28 -0
  10. package/clawdbot-skill/skill.json +19 -0
  11. package/dist/commands/agent.d.ts +7 -0
  12. package/dist/commands/agent.d.ts.map +1 -0
  13. package/dist/commands/agent.js +170 -0
  14. package/dist/commands/agent.js.map +1 -0
  15. package/dist/commands/agents.d.ts +5 -0
  16. package/dist/commands/agents.d.ts.map +1 -0
  17. package/dist/commands/agents.js +400 -0
  18. package/dist/commands/agents.js.map +1 -0
  19. package/dist/commands/ci-setup.d.ts +5 -0
  20. package/dist/commands/ci-setup.d.ts.map +1 -0
  21. package/dist/commands/ci-setup.js +82 -0
  22. package/dist/commands/ci-setup.js.map +1 -0
  23. package/dist/commands/clawdbot.d.ts +11 -0
  24. package/dist/commands/clawdbot.d.ts.map +1 -0
  25. package/dist/commands/clawdbot.js +215 -0
  26. package/dist/commands/clawdbot.js.map +1 -0
  27. package/dist/commands/context-hub.d.ts +22 -0
  28. package/dist/commands/context-hub.d.ts.map +1 -0
  29. package/dist/commands/context-hub.js +3505 -0
  30. package/dist/commands/context-hub.js.map +1 -0
  31. package/dist/commands/deploy.d.ts +5 -0
  32. package/dist/commands/deploy.d.ts.map +1 -0
  33. package/dist/commands/deploy.js +371 -0
  34. package/dist/commands/deploy.js.map +1 -0
  35. package/dist/commands/digest.d.ts +12 -0
  36. package/dist/commands/digest.d.ts.map +1 -0
  37. package/dist/commands/digest.js +128 -0
  38. package/dist/commands/digest.js.map +1 -0
  39. package/dist/commands/doctor.d.ts +8 -0
  40. package/dist/commands/doctor.d.ts.map +1 -0
  41. package/dist/commands/doctor.js +265 -0
  42. package/dist/commands/doctor.js.map +1 -0
  43. package/dist/commands/eval.d.ts +46 -0
  44. package/dist/commands/eval.d.ts.map +1 -0
  45. package/dist/commands/eval.js +427 -0
  46. package/dist/commands/eval.js.map +1 -0
  47. package/dist/commands/feedback.d.ts +2 -0
  48. package/dist/commands/feedback.d.ts.map +1 -0
  49. package/dist/commands/feedback.js +179 -0
  50. package/dist/commands/feedback.js.map +1 -0
  51. package/dist/commands/findings.d.ts +13 -0
  52. package/dist/commands/findings.d.ts.map +1 -0
  53. package/dist/commands/findings.js +203 -0
  54. package/dist/commands/findings.js.map +1 -0
  55. package/dist/commands/flows.d.ts +10 -0
  56. package/dist/commands/flows.d.ts.map +1 -0
  57. package/dist/commands/flows.js +423 -0
  58. package/dist/commands/flows.js.map +1 -0
  59. package/dist/commands/gtm-process-update.d.ts +10 -0
  60. package/dist/commands/gtm-process-update.d.ts.map +1 -0
  61. package/dist/commands/gtm-process-update.js +101 -0
  62. package/dist/commands/gtm-process-update.js.map +1 -0
  63. package/dist/commands/hooks.d.ts +13 -0
  64. package/dist/commands/hooks.d.ts.map +1 -0
  65. package/dist/commands/hooks.js +304 -0
  66. package/dist/commands/hooks.js.map +1 -0
  67. package/dist/commands/hud.d.ts +4 -0
  68. package/dist/commands/hud.d.ts.map +1 -0
  69. package/dist/commands/hud.js +300 -0
  70. package/dist/commands/hud.js.map +1 -0
  71. package/dist/commands/ide.d.ts +28 -0
  72. package/dist/commands/ide.d.ts.map +1 -0
  73. package/dist/commands/ide.js +628 -0
  74. package/dist/commands/ide.js.map +1 -0
  75. package/dist/commands/improve.d.ts +11 -0
  76. package/dist/commands/improve.d.ts.map +1 -0
  77. package/dist/commands/improve.js +77 -0
  78. package/dist/commands/improve.js.map +1 -0
  79. package/dist/commands/init-from-service.d.ts +15 -0
  80. package/dist/commands/init-from-service.d.ts.map +1 -0
  81. package/dist/commands/init-from-service.js +540 -0
  82. package/dist/commands/init-from-service.js.map +1 -0
  83. package/dist/commands/init.d.ts +15 -0
  84. package/dist/commands/init.d.ts.map +1 -0
  85. package/dist/commands/init.js +940 -0
  86. package/dist/commands/init.js.map +1 -0
  87. package/dist/commands/kanban.d.ts +34 -0
  88. package/dist/commands/kanban.d.ts.map +1 -0
  89. package/dist/commands/kanban.js +225 -0
  90. package/dist/commands/kanban.js.map +1 -0
  91. package/dist/commands/linear.d.ts +41 -0
  92. package/dist/commands/linear.d.ts.map +1 -0
  93. package/dist/commands/linear.js +740 -0
  94. package/dist/commands/linear.js.map +1 -0
  95. package/dist/commands/login.d.ts +12 -0
  96. package/dist/commands/login.d.ts.map +1 -0
  97. package/dist/commands/login.js +780 -0
  98. package/dist/commands/login.js.map +1 -0
  99. package/dist/commands/memory.d.ts +38 -0
  100. package/dist/commands/memory.d.ts.map +1 -0
  101. package/dist/commands/memory.js +229 -0
  102. package/dist/commands/memory.js.map +1 -0
  103. package/dist/commands/migrate-services.d.ts +8 -0
  104. package/dist/commands/migrate-services.d.ts.map +1 -0
  105. package/dist/commands/migrate-services.js +182 -0
  106. package/dist/commands/migrate-services.js.map +1 -0
  107. package/dist/commands/migrate-tenet.d.ts +25 -0
  108. package/dist/commands/migrate-tenet.d.ts.map +1 -0
  109. package/dist/commands/migrate-tenet.js +252 -0
  110. package/dist/commands/migrate-tenet.js.map +1 -0
  111. package/dist/commands/onboard.d.ts +24 -0
  112. package/dist/commands/onboard.d.ts.map +1 -0
  113. package/dist/commands/onboard.js +873 -0
  114. package/dist/commands/onboard.js.map +1 -0
  115. package/dist/commands/openclaw.d.ts +59 -0
  116. package/dist/commands/openclaw.d.ts.map +1 -0
  117. package/dist/commands/openclaw.js +775 -0
  118. package/dist/commands/openclaw.js.map +1 -0
  119. package/dist/commands/orchestrate.d.ts +14 -0
  120. package/dist/commands/orchestrate.d.ts.map +1 -0
  121. package/dist/commands/orchestrate.js +270 -0
  122. package/dist/commands/orchestrate.js.map +1 -0
  123. package/dist/commands/organize.d.ts +16 -0
  124. package/dist/commands/organize.d.ts.map +1 -0
  125. package/dist/commands/organize.js +334 -0
  126. package/dist/commands/organize.js.map +1 -0
  127. package/dist/commands/peter.d.ts +21 -0
  128. package/dist/commands/peter.d.ts.map +1 -0
  129. package/dist/commands/peter.js +2778 -0
  130. package/dist/commands/peter.js.map +1 -0
  131. package/dist/commands/pi-fleet.d.ts +18 -0
  132. package/dist/commands/pi-fleet.d.ts.map +1 -0
  133. package/dist/commands/pi-fleet.js +382 -0
  134. package/dist/commands/pi-fleet.js.map +1 -0
  135. package/dist/commands/pi.d.ts +25 -0
  136. package/dist/commands/pi.d.ts.map +1 -0
  137. package/dist/commands/pi.js +218 -0
  138. package/dist/commands/pi.js.map +1 -0
  139. package/dist/commands/pivot.d.ts +28 -0
  140. package/dist/commands/pivot.d.ts.map +1 -0
  141. package/dist/commands/pivot.js +216 -0
  142. package/dist/commands/pivot.js.map +1 -0
  143. package/dist/commands/portfolio.d.ts +11 -0
  144. package/dist/commands/portfolio.d.ts.map +1 -0
  145. package/dist/commands/portfolio.js +239 -0
  146. package/dist/commands/portfolio.js.map +1 -0
  147. package/dist/commands/predict.d.ts +25 -0
  148. package/dist/commands/predict.d.ts.map +1 -0
  149. package/dist/commands/predict.js +234 -0
  150. package/dist/commands/predict.js.map +1 -0
  151. package/dist/commands/profile.d.ts +46 -0
  152. package/dist/commands/profile.d.ts.map +1 -0
  153. package/dist/commands/profile.js +498 -0
  154. package/dist/commands/profile.js.map +1 -0
  155. package/dist/commands/ralph.d.ts +11 -0
  156. package/dist/commands/ralph.d.ts.map +1 -0
  157. package/dist/commands/ralph.js +102 -0
  158. package/dist/commands/ralph.js.map +1 -0
  159. package/dist/commands/repair.d.ts +7 -0
  160. package/dist/commands/repair.d.ts.map +1 -0
  161. package/dist/commands/repair.js +356 -0
  162. package/dist/commands/repair.js.map +1 -0
  163. package/dist/commands/scope.d.ts +8 -0
  164. package/dist/commands/scope.d.ts.map +1 -0
  165. package/dist/commands/scope.js +503 -0
  166. package/dist/commands/scope.js.map +1 -0
  167. package/dist/commands/service-agent.d.ts +16 -0
  168. package/dist/commands/service-agent.d.ts.map +1 -0
  169. package/dist/commands/service-agent.js +375 -0
  170. package/dist/commands/service-agent.js.map +1 -0
  171. package/dist/commands/service-manager.d.ts +12 -0
  172. package/dist/commands/service-manager.d.ts.map +1 -0
  173. package/dist/commands/service-manager.js +969 -0
  174. package/dist/commands/service-manager.js.map +1 -0
  175. package/dist/commands/service-validate.d.ts +12 -0
  176. package/dist/commands/service-validate.d.ts.map +1 -0
  177. package/dist/commands/service-validate.js +619 -0
  178. package/dist/commands/service-validate.js.map +1 -0
  179. package/dist/commands/services-create.d.ts +15 -0
  180. package/dist/commands/services-create.d.ts.map +1 -0
  181. package/dist/commands/services-create.js +1800 -0
  182. package/dist/commands/services-create.js.map +1 -0
  183. package/dist/commands/services-scan.d.ts +13 -0
  184. package/dist/commands/services-scan.d.ts.map +1 -0
  185. package/dist/commands/services-scan.js +251 -0
  186. package/dist/commands/services-scan.js.map +1 -0
  187. package/dist/commands/services-sync-agents.d.ts +23 -0
  188. package/dist/commands/services-sync-agents.d.ts.map +1 -0
  189. package/dist/commands/services-sync-agents.js +207 -0
  190. package/dist/commands/services-sync-agents.js.map +1 -0
  191. package/dist/commands/services.d.ts +19 -0
  192. package/dist/commands/services.d.ts.map +1 -0
  193. package/dist/commands/services.js +906 -0
  194. package/dist/commands/services.js.map +1 -0
  195. package/dist/commands/session.d.ts +7 -0
  196. package/dist/commands/session.d.ts.map +1 -0
  197. package/dist/commands/session.js +597 -0
  198. package/dist/commands/session.js.map +1 -0
  199. package/dist/commands/setup.d.ts +12 -0
  200. package/dist/commands/setup.d.ts.map +1 -0
  201. package/dist/commands/setup.js +727 -0
  202. package/dist/commands/setup.js.map +1 -0
  203. package/dist/commands/skills.d.ts +31 -0
  204. package/dist/commands/skills.d.ts.map +1 -0
  205. package/dist/commands/skills.js +314 -0
  206. package/dist/commands/skills.js.map +1 -0
  207. package/dist/commands/start.d.ts +25 -0
  208. package/dist/commands/start.d.ts.map +1 -0
  209. package/dist/commands/start.js +251 -0
  210. package/dist/commands/start.js.map +1 -0
  211. package/dist/commands/status.d.ts +2 -0
  212. package/dist/commands/status.d.ts.map +1 -0
  213. package/dist/commands/status.js +163 -0
  214. package/dist/commands/status.js.map +1 -0
  215. package/dist/commands/synopsis.d.ts +54 -0
  216. package/dist/commands/synopsis.d.ts.map +1 -0
  217. package/dist/commands/synopsis.js +277 -0
  218. package/dist/commands/synopsis.js.map +1 -0
  219. package/dist/commands/telemetry-monitor.d.ts +11 -0
  220. package/dist/commands/telemetry-monitor.d.ts.map +1 -0
  221. package/dist/commands/telemetry-monitor.js +224 -0
  222. package/dist/commands/telemetry-monitor.js.map +1 -0
  223. package/dist/commands/telemetry-test.d.ts +11 -0
  224. package/dist/commands/telemetry-test.d.ts.map +1 -0
  225. package/dist/commands/telemetry-test.js +67 -0
  226. package/dist/commands/telemetry-test.js.map +1 -0
  227. package/dist/commands/tenet-agents.d.ts +13 -0
  228. package/dist/commands/tenet-agents.d.ts.map +1 -0
  229. package/dist/commands/tenet-agents.js +191 -0
  230. package/dist/commands/tenet-agents.js.map +1 -0
  231. package/dist/commands/tenet-setup.d.ts +20 -0
  232. package/dist/commands/tenet-setup.d.ts.map +1 -0
  233. package/dist/commands/tenet-setup.js +135 -0
  234. package/dist/commands/tenet-setup.js.map +1 -0
  235. package/dist/commands/train.d.ts +51 -0
  236. package/dist/commands/train.d.ts.map +1 -0
  237. package/dist/commands/train.js +692 -0
  238. package/dist/commands/train.js.map +1 -0
  239. package/dist/commands/update.d.ts +12 -0
  240. package/dist/commands/update.d.ts.map +1 -0
  241. package/dist/commands/update.js +559 -0
  242. package/dist/commands/update.js.map +1 -0
  243. package/dist/commands/validate-settings.d.ts +37 -0
  244. package/dist/commands/validate-settings.d.ts.map +1 -0
  245. package/dist/commands/validate-settings.js +197 -0
  246. package/dist/commands/validate-settings.js.map +1 -0
  247. package/dist/commands/verify.d.ts +14 -0
  248. package/dist/commands/verify.d.ts.map +1 -0
  249. package/dist/commands/verify.js +304 -0
  250. package/dist/commands/verify.js.map +1 -0
  251. package/dist/commands/viz.d.ts +40 -0
  252. package/dist/commands/viz.d.ts.map +1 -0
  253. package/dist/commands/viz.js +877 -0
  254. package/dist/commands/viz.js.map +1 -0
  255. package/dist/commands/voice.d.ts +409 -0
  256. package/dist/commands/voice.d.ts.map +1 -0
  257. package/dist/commands/voice.js +4765 -0
  258. package/dist/commands/voice.js.map +1 -0
  259. package/dist/commands/whoami.d.ts +2 -0
  260. package/dist/commands/whoami.d.ts.map +1 -0
  261. package/dist/commands/whoami.js +24 -0
  262. package/dist/commands/whoami.js.map +1 -0
  263. package/dist/dashboard/index.d.ts +11 -0
  264. package/dist/dashboard/index.d.ts.map +1 -0
  265. package/dist/dashboard/index.js +70 -0
  266. package/dist/dashboard/index.js.map +1 -0
  267. package/dist/dashboard-static/assets/index-BVrmW-ZI.js +154 -0
  268. package/dist/dashboard-static/assets/index-DtruPD44.css +1 -0
  269. package/dist/dashboard-static/index.html +16 -0
  270. package/dist/index.d.ts +4 -0
  271. package/dist/index.d.ts.map +1 -0
  272. package/dist/index.js +1707 -0
  273. package/dist/index.js.map +1 -0
  274. package/dist/lib/advanced-setup.d.ts +78 -0
  275. package/dist/lib/advanced-setup.d.ts.map +1 -0
  276. package/dist/lib/advanced-setup.js +433 -0
  277. package/dist/lib/advanced-setup.js.map +1 -0
  278. package/dist/lib/agent-config.d.ts +86 -0
  279. package/dist/lib/agent-config.d.ts.map +1 -0
  280. package/dist/lib/agent-config.js +281 -0
  281. package/dist/lib/agent-config.js.map +1 -0
  282. package/dist/lib/agent-generator.d.ts +36 -0
  283. package/dist/lib/agent-generator.d.ts.map +1 -0
  284. package/dist/lib/agent-generator.js +400 -0
  285. package/dist/lib/agent-generator.js.map +1 -0
  286. package/dist/lib/agent-guards.d.ts +67 -0
  287. package/dist/lib/agent-guards.d.ts.map +1 -0
  288. package/dist/lib/agent-guards.js +229 -0
  289. package/dist/lib/agent-guards.js.map +1 -0
  290. package/dist/lib/agent-manifest.d.ts +35 -0
  291. package/dist/lib/agent-manifest.d.ts.map +1 -0
  292. package/dist/lib/agent-manifest.js +75 -0
  293. package/dist/lib/agent-manifest.js.map +1 -0
  294. package/dist/lib/agent-runtime-api.d.ts +32 -0
  295. package/dist/lib/agent-runtime-api.d.ts.map +1 -0
  296. package/dist/lib/agent-runtime-api.js +270 -0
  297. package/dist/lib/agent-runtime-api.js.map +1 -0
  298. package/dist/lib/agent-session.d.ts +104 -0
  299. package/dist/lib/agent-session.d.ts.map +1 -0
  300. package/dist/lib/agent-session.js +954 -0
  301. package/dist/lib/agent-session.js.map +1 -0
  302. package/dist/lib/build-supervisor.d.ts +44 -0
  303. package/dist/lib/build-supervisor.d.ts.map +1 -0
  304. package/dist/lib/build-supervisor.js +79 -0
  305. package/dist/lib/build-supervisor.js.map +1 -0
  306. package/dist/lib/connectors/index.d.ts +19 -0
  307. package/dist/lib/connectors/index.d.ts.map +1 -0
  308. package/dist/lib/connectors/index.js +23 -0
  309. package/dist/lib/connectors/index.js.map +1 -0
  310. package/dist/lib/counterfactual-engine.d.ts +136 -0
  311. package/dist/lib/counterfactual-engine.d.ts.map +1 -0
  312. package/dist/lib/counterfactual-engine.js +417 -0
  313. package/dist/lib/counterfactual-engine.js.map +1 -0
  314. package/dist/lib/counterfactual-training-bridge.d.ts +114 -0
  315. package/dist/lib/counterfactual-training-bridge.d.ts.map +1 -0
  316. package/dist/lib/counterfactual-training-bridge.js +322 -0
  317. package/dist/lib/counterfactual-training-bridge.js.map +1 -0
  318. package/dist/lib/discovery-agent.d.ts +48 -0
  319. package/dist/lib/discovery-agent.d.ts.map +1 -0
  320. package/dist/lib/discovery-agent.js +111 -0
  321. package/dist/lib/discovery-agent.js.map +1 -0
  322. package/dist/lib/domain/engine.d.ts +11 -0
  323. package/dist/lib/domain/engine.d.ts.map +1 -0
  324. package/dist/lib/domain/engine.js +23 -0
  325. package/dist/lib/domain/engine.js.map +1 -0
  326. package/dist/lib/domain/index.d.ts +3 -0
  327. package/dist/lib/domain/index.d.ts.map +1 -0
  328. package/dist/lib/domain/index.js +3 -0
  329. package/dist/lib/domain/index.js.map +1 -0
  330. package/dist/lib/domain/template-loader.d.ts +9 -0
  331. package/dist/lib/domain/template-loader.d.ts.map +1 -0
  332. package/dist/lib/domain/template-loader.js +29 -0
  333. package/dist/lib/domain/template-loader.js.map +1 -0
  334. package/dist/lib/domain/types.d.ts +29 -0
  335. package/dist/lib/domain/types.d.ts.map +1 -0
  336. package/dist/lib/domain/types.js +2 -0
  337. package/dist/lib/domain/types.js.map +1 -0
  338. package/dist/lib/dynamics-model.d.ts +107 -0
  339. package/dist/lib/dynamics-model.d.ts.map +1 -0
  340. package/dist/lib/dynamics-model.js +363 -0
  341. package/dist/lib/dynamics-model.js.map +1 -0
  342. package/dist/lib/eval-snapshot.d.ts +47 -0
  343. package/dist/lib/eval-snapshot.d.ts.map +1 -0
  344. package/dist/lib/eval-snapshot.js +326 -0
  345. package/dist/lib/eval-snapshot.js.map +1 -0
  346. package/dist/lib/eval-store.d.ts +20 -0
  347. package/dist/lib/eval-store.d.ts.map +1 -0
  348. package/dist/lib/eval-store.js +209 -0
  349. package/dist/lib/eval-store.js.map +1 -0
  350. package/dist/lib/findings-engine.d.ts +51 -0
  351. package/dist/lib/findings-engine.d.ts.map +1 -0
  352. package/dist/lib/findings-engine.js +338 -0
  353. package/dist/lib/findings-engine.js.map +1 -0
  354. package/dist/lib/flow-engine.d.ts +57 -0
  355. package/dist/lib/flow-engine.d.ts.map +1 -0
  356. package/dist/lib/flow-engine.js +717 -0
  357. package/dist/lib/flow-engine.js.map +1 -0
  358. package/dist/lib/gtm-generator.d.ts +29 -0
  359. package/dist/lib/gtm-generator.d.ts.map +1 -0
  360. package/dist/lib/gtm-generator.js +250 -0
  361. package/dist/lib/gtm-generator.js.map +1 -0
  362. package/dist/lib/hook-transformer.d.ts +11 -0
  363. package/dist/lib/hook-transformer.d.ts.map +1 -0
  364. package/dist/lib/hook-transformer.js +74 -0
  365. package/dist/lib/hook-transformer.js.map +1 -0
  366. package/dist/lib/hub-client.d.ts +81 -0
  367. package/dist/lib/hub-client.d.ts.map +1 -0
  368. package/dist/lib/hub-client.js +73 -0
  369. package/dist/lib/hub-client.js.map +1 -0
  370. package/dist/lib/hub-health.d.ts +40 -0
  371. package/dist/lib/hub-health.d.ts.map +1 -0
  372. package/dist/lib/hub-health.js +101 -0
  373. package/dist/lib/hub-health.js.map +1 -0
  374. package/dist/lib/ide-panes.d.ts +58 -0
  375. package/dist/lib/ide-panes.d.ts.map +1 -0
  376. package/dist/lib/ide-panes.js +508 -0
  377. package/dist/lib/ide-panes.js.map +1 -0
  378. package/dist/lib/invariant-monitor.d.ts +54 -0
  379. package/dist/lib/invariant-monitor.d.ts.map +1 -0
  380. package/dist/lib/invariant-monitor.js +487 -0
  381. package/dist/lib/invariant-monitor.js.map +1 -0
  382. package/dist/lib/journal-analyzer.d.ts +71 -0
  383. package/dist/lib/journal-analyzer.d.ts.map +1 -0
  384. package/dist/lib/journal-analyzer.js +306 -0
  385. package/dist/lib/journal-analyzer.js.map +1 -0
  386. package/dist/lib/kanban-github.d.ts +81 -0
  387. package/dist/lib/kanban-github.d.ts.map +1 -0
  388. package/dist/lib/kanban-github.js +318 -0
  389. package/dist/lib/kanban-github.js.map +1 -0
  390. package/dist/lib/kanban.d.ts +131 -0
  391. package/dist/lib/kanban.d.ts.map +1 -0
  392. package/dist/lib/kanban.js +340 -0
  393. package/dist/lib/kanban.js.map +1 -0
  394. package/dist/lib/kuva.d.ts +45 -0
  395. package/dist/lib/kuva.d.ts.map +1 -0
  396. package/dist/lib/kuva.js +131 -0
  397. package/dist/lib/kuva.js.map +1 -0
  398. package/dist/lib/linear-client.d.ts +73 -0
  399. package/dist/lib/linear-client.d.ts.map +1 -0
  400. package/dist/lib/linear-client.js +112 -0
  401. package/dist/lib/linear-client.js.map +1 -0
  402. package/dist/lib/linear-id-map.d.ts +20 -0
  403. package/dist/lib/linear-id-map.d.ts.map +1 -0
  404. package/dist/lib/linear-id-map.js +59 -0
  405. package/dist/lib/linear-id-map.js.map +1 -0
  406. package/dist/lib/linear-kanban.d.ts +66 -0
  407. package/dist/lib/linear-kanban.d.ts.map +1 -0
  408. package/dist/lib/linear-kanban.js +175 -0
  409. package/dist/lib/linear-kanban.js.map +1 -0
  410. package/dist/lib/linear-webhook.d.ts +50 -0
  411. package/dist/lib/linear-webhook.d.ts.map +1 -0
  412. package/dist/lib/linear-webhook.js +92 -0
  413. package/dist/lib/linear-webhook.js.map +1 -0
  414. package/dist/lib/map-event-bus.d.ts +50 -0
  415. package/dist/lib/map-event-bus.d.ts.map +1 -0
  416. package/dist/lib/map-event-bus.js +366 -0
  417. package/dist/lib/map-event-bus.js.map +1 -0
  418. package/dist/lib/memory-db.d.ts +136 -0
  419. package/dist/lib/memory-db.d.ts.map +1 -0
  420. package/dist/lib/memory-db.js +429 -0
  421. package/dist/lib/memory-db.js.map +1 -0
  422. package/dist/lib/memory-indexer.d.ts +61 -0
  423. package/dist/lib/memory-indexer.d.ts.map +1 -0
  424. package/dist/lib/memory-indexer.js +418 -0
  425. package/dist/lib/memory-indexer.js.map +1 -0
  426. package/dist/lib/memory-search.d.ts +185 -0
  427. package/dist/lib/memory-search.d.ts.map +1 -0
  428. package/dist/lib/memory-search.js +678 -0
  429. package/dist/lib/memory-search.js.map +1 -0
  430. package/dist/lib/meta-orchestrator.d.ts +141 -0
  431. package/dist/lib/meta-orchestrator.d.ts.map +1 -0
  432. package/dist/lib/meta-orchestrator.js +552 -0
  433. package/dist/lib/meta-orchestrator.js.map +1 -0
  434. package/dist/lib/model-pricing.d.ts +11 -0
  435. package/dist/lib/model-pricing.d.ts.map +1 -0
  436. package/dist/lib/model-pricing.js +27 -0
  437. package/dist/lib/model-pricing.js.map +1 -0
  438. package/dist/lib/onboarding.d.ts +40 -0
  439. package/dist/lib/onboarding.d.ts.map +1 -0
  440. package/dist/lib/onboarding.js +213 -0
  441. package/dist/lib/onboarding.js.map +1 -0
  442. package/dist/lib/openclaw-registry.d.ts +48 -0
  443. package/dist/lib/openclaw-registry.d.ts.map +1 -0
  444. package/dist/lib/openclaw-registry.js +181 -0
  445. package/dist/lib/openclaw-registry.js.map +1 -0
  446. package/dist/lib/openclaw-sdk.d.ts +115 -0
  447. package/dist/lib/openclaw-sdk.d.ts.map +1 -0
  448. package/dist/lib/openclaw-sdk.js +220 -0
  449. package/dist/lib/openclaw-sdk.js.map +1 -0
  450. package/dist/lib/peer-agent-generator.d.ts +44 -0
  451. package/dist/lib/peer-agent-generator.d.ts.map +1 -0
  452. package/dist/lib/peer-agent-generator.js +310 -0
  453. package/dist/lib/peer-agent-generator.js.map +1 -0
  454. package/dist/lib/peter-parker-bridge.d.ts +70 -0
  455. package/dist/lib/peter-parker-bridge.d.ts.map +1 -0
  456. package/dist/lib/peter-parker-bridge.js +345 -0
  457. package/dist/lib/peter-parker-bridge.js.map +1 -0
  458. package/dist/lib/peter-parker-config.d.ts +13 -0
  459. package/dist/lib/peter-parker-config.d.ts.map +1 -0
  460. package/dist/lib/peter-parker-config.js +86 -0
  461. package/dist/lib/peter-parker-config.js.map +1 -0
  462. package/dist/lib/physical-world-model.d.ts +50 -0
  463. package/dist/lib/physical-world-model.d.ts.map +1 -0
  464. package/dist/lib/physical-world-model.js +251 -0
  465. package/dist/lib/physical-world-model.js.map +1 -0
  466. package/dist/lib/pi-sky/bridge.d.ts +55 -0
  467. package/dist/lib/pi-sky/bridge.d.ts.map +1 -0
  468. package/dist/lib/pi-sky/bridge.js +264 -0
  469. package/dist/lib/pi-sky/bridge.js.map +1 -0
  470. package/dist/lib/pi-sky/cost-monitor.d.ts +21 -0
  471. package/dist/lib/pi-sky/cost-monitor.d.ts.map +1 -0
  472. package/dist/lib/pi-sky/cost-monitor.js +126 -0
  473. package/dist/lib/pi-sky/cost-monitor.js.map +1 -0
  474. package/dist/lib/pi-sky/eval-sweep.d.ts +27 -0
  475. package/dist/lib/pi-sky/eval-sweep.d.ts.map +1 -0
  476. package/dist/lib/pi-sky/eval-sweep.js +141 -0
  477. package/dist/lib/pi-sky/eval-sweep.js.map +1 -0
  478. package/dist/lib/pi-sky/event-router.d.ts +32 -0
  479. package/dist/lib/pi-sky/event-router.d.ts.map +1 -0
  480. package/dist/lib/pi-sky/event-router.js +176 -0
  481. package/dist/lib/pi-sky/event-router.js.map +1 -0
  482. package/dist/lib/pi-sky/experiment.d.ts +9 -0
  483. package/dist/lib/pi-sky/experiment.d.ts.map +1 -0
  484. package/dist/lib/pi-sky/experiment.js +83 -0
  485. package/dist/lib/pi-sky/experiment.js.map +1 -0
  486. package/dist/lib/pi-sky/index.d.ts +16 -0
  487. package/dist/lib/pi-sky/index.d.ts.map +1 -0
  488. package/dist/lib/pi-sky/index.js +16 -0
  489. package/dist/lib/pi-sky/index.js.map +1 -0
  490. package/dist/lib/pi-sky/stratus-gate.d.ts +28 -0
  491. package/dist/lib/pi-sky/stratus-gate.d.ts.map +1 -0
  492. package/dist/lib/pi-sky/stratus-gate.js +61 -0
  493. package/dist/lib/pi-sky/stratus-gate.js.map +1 -0
  494. package/dist/lib/pi-sky/swarm.d.ts +28 -0
  495. package/dist/lib/pi-sky/swarm.d.ts.map +1 -0
  496. package/dist/lib/pi-sky/swarm.js +208 -0
  497. package/dist/lib/pi-sky/swarm.js.map +1 -0
  498. package/dist/lib/pi-sky/types.d.ts +139 -0
  499. package/dist/lib/pi-sky/types.d.ts.map +1 -0
  500. package/dist/lib/pi-sky/types.js +2 -0
  501. package/dist/lib/pi-sky/types.js.map +1 -0
  502. package/dist/lib/pi-sky/voice-bridge.d.ts +20 -0
  503. package/dist/lib/pi-sky/voice-bridge.d.ts.map +1 -0
  504. package/dist/lib/pi-sky/voice-bridge.js +91 -0
  505. package/dist/lib/pi-sky/voice-bridge.js.map +1 -0
  506. package/dist/lib/planning-loop.d.ts +157 -0
  507. package/dist/lib/planning-loop.d.ts.map +1 -0
  508. package/dist/lib/planning-loop.js +537 -0
  509. package/dist/lib/planning-loop.js.map +1 -0
  510. package/dist/lib/policy-head.d.ts +53 -0
  511. package/dist/lib/policy-head.d.ts.map +1 -0
  512. package/dist/lib/policy-head.js +400 -0
  513. package/dist/lib/policy-head.js.map +1 -0
  514. package/dist/lib/predictor.d.ts +109 -0
  515. package/dist/lib/predictor.d.ts.map +1 -0
  516. package/dist/lib/predictor.js +433 -0
  517. package/dist/lib/predictor.js.map +1 -0
  518. package/dist/lib/replay-buffer.d.ts +93 -0
  519. package/dist/lib/replay-buffer.d.ts.map +1 -0
  520. package/dist/lib/replay-buffer.js +302 -0
  521. package/dist/lib/replay-buffer.js.map +1 -0
  522. package/dist/lib/resource-optimizer-middleware.d.ts +39 -0
  523. package/dist/lib/resource-optimizer-middleware.d.ts.map +1 -0
  524. package/dist/lib/resource-optimizer-middleware.js +228 -0
  525. package/dist/lib/resource-optimizer-middleware.js.map +1 -0
  526. package/dist/lib/resource-optimizer.d.ts +71 -0
  527. package/dist/lib/resource-optimizer.d.ts.map +1 -0
  528. package/dist/lib/resource-optimizer.js +228 -0
  529. package/dist/lib/resource-optimizer.js.map +1 -0
  530. package/dist/lib/rewards/index.d.ts +14 -0
  531. package/dist/lib/rewards/index.d.ts.map +1 -0
  532. package/dist/lib/rewards/index.js +15 -0
  533. package/dist/lib/rewards/index.js.map +1 -0
  534. package/dist/lib/rl-manager.d.ts +74 -0
  535. package/dist/lib/rl-manager.d.ts.map +1 -0
  536. package/dist/lib/rl-manager.js +245 -0
  537. package/dist/lib/rl-manager.js.map +1 -0
  538. package/dist/lib/sentinel-rl.d.ts +97 -0
  539. package/dist/lib/sentinel-rl.d.ts.map +1 -0
  540. package/dist/lib/sentinel-rl.js +430 -0
  541. package/dist/lib/sentinel-rl.js.map +1 -0
  542. package/dist/lib/service-analyzer.d.ts +76 -0
  543. package/dist/lib/service-analyzer.d.ts.map +1 -0
  544. package/dist/lib/service-analyzer.js +704 -0
  545. package/dist/lib/service-analyzer.js.map +1 -0
  546. package/dist/lib/service-dependencies.d.ts +44 -0
  547. package/dist/lib/service-dependencies.d.ts.map +1 -0
  548. package/dist/lib/service-dependencies.js +314 -0
  549. package/dist/lib/service-dependencies.js.map +1 -0
  550. package/dist/lib/service-detector.d.ts +61 -0
  551. package/dist/lib/service-detector.d.ts.map +1 -0
  552. package/dist/lib/service-detector.js +541 -0
  553. package/dist/lib/service-detector.js.map +1 -0
  554. package/dist/lib/service-gtm.d.ts +208 -0
  555. package/dist/lib/service-gtm.d.ts.map +1 -0
  556. package/dist/lib/service-gtm.js +1006 -0
  557. package/dist/lib/service-gtm.js.map +1 -0
  558. package/dist/lib/service-mcp-base.d.ts +103 -0
  559. package/dist/lib/service-mcp-base.d.ts.map +1 -0
  560. package/dist/lib/service-mcp-base.js +263 -0
  561. package/dist/lib/service-mcp-base.js.map +1 -0
  562. package/dist/lib/service-questionnaire.d.ts +11 -0
  563. package/dist/lib/service-questionnaire.d.ts.map +1 -0
  564. package/dist/lib/service-questionnaire.js +89 -0
  565. package/dist/lib/service-questionnaire.js.map +1 -0
  566. package/dist/lib/service-utils.d.ts +103 -0
  567. package/dist/lib/service-utils.d.ts.map +1 -0
  568. package/dist/lib/service-utils.js +385 -0
  569. package/dist/lib/service-utils.js.map +1 -0
  570. package/dist/lib/session-lock.d.ts +61 -0
  571. package/dist/lib/session-lock.d.ts.map +1 -0
  572. package/dist/lib/session-lock.js +438 -0
  573. package/dist/lib/session-lock.js.map +1 -0
  574. package/dist/lib/setup/agent-generator.d.ts +25 -0
  575. package/dist/lib/setup/agent-generator.d.ts.map +1 -0
  576. package/dist/lib/setup/agent-generator.js +444 -0
  577. package/dist/lib/setup/agent-generator.js.map +1 -0
  578. package/dist/lib/setup/context-analyzer.d.ts +16 -0
  579. package/dist/lib/setup/context-analyzer.d.ts.map +1 -0
  580. package/dist/lib/setup/context-analyzer.js +112 -0
  581. package/dist/lib/setup/context-analyzer.js.map +1 -0
  582. package/dist/lib/setup/doc-auditor.d.ts +54 -0
  583. package/dist/lib/setup/doc-auditor.d.ts.map +1 -0
  584. package/dist/lib/setup/doc-auditor.js +629 -0
  585. package/dist/lib/setup/doc-auditor.js.map +1 -0
  586. package/dist/lib/setup/domain-generator.d.ts +7 -0
  587. package/dist/lib/setup/domain-generator.d.ts.map +1 -0
  588. package/dist/lib/setup/domain-generator.js +58 -0
  589. package/dist/lib/setup/domain-generator.js.map +1 -0
  590. package/dist/lib/setup/flow-generator.d.ts +10 -0
  591. package/dist/lib/setup/flow-generator.d.ts.map +1 -0
  592. package/dist/lib/setup/flow-generator.js +113 -0
  593. package/dist/lib/setup/flow-generator.js.map +1 -0
  594. package/dist/lib/setup/invariant-bridge.d.ts +91 -0
  595. package/dist/lib/setup/invariant-bridge.d.ts.map +1 -0
  596. package/dist/lib/setup/invariant-bridge.js +384 -0
  597. package/dist/lib/setup/invariant-bridge.js.map +1 -0
  598. package/dist/lib/setup/smart-eval-generator.d.ts +38 -0
  599. package/dist/lib/setup/smart-eval-generator.d.ts.map +1 -0
  600. package/dist/lib/setup/smart-eval-generator.js +378 -0
  601. package/dist/lib/setup/smart-eval-generator.js.map +1 -0
  602. package/dist/lib/setup/smart-recommender.d.ts +63 -0
  603. package/dist/lib/setup/smart-recommender.d.ts.map +1 -0
  604. package/dist/lib/setup/smart-recommender.js +329 -0
  605. package/dist/lib/setup/smart-recommender.js.map +1 -0
  606. package/dist/lib/setup/spec-generator.d.ts +99 -0
  607. package/dist/lib/setup/spec-generator.d.ts.map +1 -0
  608. package/dist/lib/setup/spec-generator.js +784 -0
  609. package/dist/lib/setup/spec-generator.js.map +1 -0
  610. package/dist/lib/setup/starter-intelligence.d.ts +25 -0
  611. package/dist/lib/setup/starter-intelligence.d.ts.map +1 -0
  612. package/dist/lib/setup/starter-intelligence.js +309 -0
  613. package/dist/lib/setup/starter-intelligence.js.map +1 -0
  614. package/dist/lib/setup/violation-agent-generator.d.ts +32 -0
  615. package/dist/lib/setup/violation-agent-generator.d.ts.map +1 -0
  616. package/dist/lib/setup/violation-agent-generator.js +255 -0
  617. package/dist/lib/setup/violation-agent-generator.js.map +1 -0
  618. package/dist/lib/skill-generator.d.ts +21 -0
  619. package/dist/lib/skill-generator.d.ts.map +1 -0
  620. package/dist/lib/skill-generator.js +253 -0
  621. package/dist/lib/skill-generator.js.map +1 -0
  622. package/dist/lib/state-capture.d.ts +36 -0
  623. package/dist/lib/state-capture.d.ts.map +1 -0
  624. package/dist/lib/state-capture.js +541 -0
  625. package/dist/lib/state-capture.js.map +1 -0
  626. package/dist/lib/stealth-onboarding.d.ts +40 -0
  627. package/dist/lib/stealth-onboarding.d.ts.map +1 -0
  628. package/dist/lib/stealth-onboarding.js +213 -0
  629. package/dist/lib/stealth-onboarding.js.map +1 -0
  630. package/dist/lib/storage/cloud.d.ts +27 -0
  631. package/dist/lib/storage/cloud.d.ts.map +1 -0
  632. package/dist/lib/storage/cloud.js +75 -0
  633. package/dist/lib/storage/cloud.js.map +1 -0
  634. package/dist/lib/storage/index.d.ts +15 -0
  635. package/dist/lib/storage/index.d.ts.map +1 -0
  636. package/dist/lib/storage/index.js +15 -0
  637. package/dist/lib/storage/index.js.map +1 -0
  638. package/dist/lib/storage/interface.d.ts +56 -0
  639. package/dist/lib/storage/interface.d.ts.map +1 -0
  640. package/dist/lib/storage/interface.js +2 -0
  641. package/dist/lib/storage/interface.js.map +1 -0
  642. package/dist/lib/storage/local.d.ts +26 -0
  643. package/dist/lib/storage/local.d.ts.map +1 -0
  644. package/dist/lib/storage/local.js +164 -0
  645. package/dist/lib/storage/local.js.map +1 -0
  646. package/dist/lib/stratus-client.d.ts +178 -0
  647. package/dist/lib/stratus-client.d.ts.map +1 -0
  648. package/dist/lib/stratus-client.js +739 -0
  649. package/dist/lib/stratus-client.js.map +1 -0
  650. package/dist/lib/stratus-rollout-test.d.ts +10 -0
  651. package/dist/lib/stratus-rollout-test.d.ts.map +1 -0
  652. package/dist/lib/stratus-rollout-test.js +412 -0
  653. package/dist/lib/stratus-rollout-test.js.map +1 -0
  654. package/dist/lib/surface-agent.d.ts +78 -0
  655. package/dist/lib/surface-agent.d.ts.map +1 -0
  656. package/dist/lib/surface-agent.js +105 -0
  657. package/dist/lib/surface-agent.js.map +1 -0
  658. package/dist/lib/surface-coordination-example.d.ts +30 -0
  659. package/dist/lib/surface-coordination-example.d.ts.map +1 -0
  660. package/dist/lib/surface-coordination-example.js +164 -0
  661. package/dist/lib/surface-coordination-example.js.map +1 -0
  662. package/dist/lib/telemetry/physical-world-collector.d.ts +15 -0
  663. package/dist/lib/telemetry/physical-world-collector.d.ts.map +1 -0
  664. package/dist/lib/telemetry/physical-world-collector.js +177 -0
  665. package/dist/lib/telemetry/physical-world-collector.js.map +1 -0
  666. package/dist/lib/telemetry/training-bridge.d.ts +51 -0
  667. package/dist/lib/telemetry/training-bridge.d.ts.map +1 -0
  668. package/dist/lib/telemetry/training-bridge.js +185 -0
  669. package/dist/lib/telemetry/training-bridge.js.map +1 -0
  670. package/dist/lib/telemetry-agent-v2.d.ts +128 -0
  671. package/dist/lib/telemetry-agent-v2.d.ts.map +1 -0
  672. package/dist/lib/telemetry-agent-v2.js +1043 -0
  673. package/dist/lib/telemetry-agent-v2.js.map +1 -0
  674. package/dist/lib/telemetry-agent.d.ts +57 -0
  675. package/dist/lib/telemetry-agent.d.ts.map +1 -0
  676. package/dist/lib/telemetry-agent.js +289 -0
  677. package/dist/lib/telemetry-agent.js.map +1 -0
  678. package/dist/lib/telemetry-digest.d.ts +10 -0
  679. package/dist/lib/telemetry-digest.d.ts.map +1 -0
  680. package/dist/lib/telemetry-digest.js +381 -0
  681. package/dist/lib/telemetry-digest.js.map +1 -0
  682. package/dist/lib/telemetry.d.ts +37 -0
  683. package/dist/lib/telemetry.d.ts.map +1 -0
  684. package/dist/lib/telemetry.js +376 -0
  685. package/dist/lib/telemetry.js.map +1 -0
  686. package/dist/lib/tenet-board-agent.d.ts +52 -0
  687. package/dist/lib/tenet-board-agent.d.ts.map +1 -0
  688. package/dist/lib/tenet-board-agent.js +226 -0
  689. package/dist/lib/tenet-board-agent.js.map +1 -0
  690. package/dist/lib/tenet-ide-agent.d.ts +40 -0
  691. package/dist/lib/tenet-ide-agent.d.ts.map +1 -0
  692. package/dist/lib/tenet-ide-agent.js +199 -0
  693. package/dist/lib/tenet-ide-agent.js.map +1 -0
  694. package/dist/lib/text-preprocessing.d.ts +83 -0
  695. package/dist/lib/text-preprocessing.d.ts.map +1 -0
  696. package/dist/lib/text-preprocessing.js +261 -0
  697. package/dist/lib/text-preprocessing.js.map +1 -0
  698. package/dist/lib/tool-schemas.d.ts +35 -0
  699. package/dist/lib/tool-schemas.d.ts.map +1 -0
  700. package/dist/lib/tool-schemas.js +246 -0
  701. package/dist/lib/tool-schemas.js.map +1 -0
  702. package/dist/lib/training-buffer.d.ts +86 -0
  703. package/dist/lib/training-buffer.d.ts.map +1 -0
  704. package/dist/lib/training-buffer.js +139 -0
  705. package/dist/lib/training-buffer.js.map +1 -0
  706. package/dist/lib/training-tuples.d.ts +33 -0
  707. package/dist/lib/training-tuples.d.ts.map +1 -0
  708. package/dist/lib/training-tuples.js +273 -0
  709. package/dist/lib/training-tuples.js.map +1 -0
  710. package/dist/lib/trajectory-loader.d.ts +82 -0
  711. package/dist/lib/trajectory-loader.d.ts.map +1 -0
  712. package/dist/lib/trajectory-loader.js +406 -0
  713. package/dist/lib/trajectory-loader.js.map +1 -0
  714. package/dist/lib/tuple-miner.d.ts +30 -0
  715. package/dist/lib/tuple-miner.d.ts.map +1 -0
  716. package/dist/lib/tuple-miner.js +427 -0
  717. package/dist/lib/tuple-miner.js.map +1 -0
  718. package/dist/lib/vm-backend.d.ts +72 -0
  719. package/dist/lib/vm-backend.d.ts.map +1 -0
  720. package/dist/lib/vm-backend.js +175 -0
  721. package/dist/lib/vm-backend.js.map +1 -0
  722. package/dist/lib/workspace/backend.d.ts +53 -0
  723. package/dist/lib/workspace/backend.d.ts.map +1 -0
  724. package/dist/lib/workspace/backend.js +37 -0
  725. package/dist/lib/workspace/backend.js.map +1 -0
  726. package/dist/lib/workspace/cmux-adapter.d.ts +46 -0
  727. package/dist/lib/workspace/cmux-adapter.d.ts.map +1 -0
  728. package/dist/lib/workspace/cmux-adapter.js +261 -0
  729. package/dist/lib/workspace/cmux-adapter.js.map +1 -0
  730. package/dist/lib/workspace/data-pipeline.d.ts +35 -0
  731. package/dist/lib/workspace/data-pipeline.d.ts.map +1 -0
  732. package/dist/lib/workspace/data-pipeline.js +494 -0
  733. package/dist/lib/workspace/data-pipeline.js.map +1 -0
  734. package/dist/lib/workspace/engine.d.ts +65 -0
  735. package/dist/lib/workspace/engine.d.ts.map +1 -0
  736. package/dist/lib/workspace/engine.js +407 -0
  737. package/dist/lib/workspace/engine.js.map +1 -0
  738. package/dist/lib/workspace/notifications.d.ts +14 -0
  739. package/dist/lib/workspace/notifications.d.ts.map +1 -0
  740. package/dist/lib/workspace/notifications.js +41 -0
  741. package/dist/lib/workspace/notifications.js.map +1 -0
  742. package/dist/lib/workspace/sidebar-runner.d.ts +13 -0
  743. package/dist/lib/workspace/sidebar-runner.d.ts.map +1 -0
  744. package/dist/lib/workspace/sidebar-runner.js +419 -0
  745. package/dist/lib/workspace/sidebar-runner.js.map +1 -0
  746. package/dist/lib/workspace/surface-registry.d.ts +49 -0
  747. package/dist/lib/workspace/surface-registry.d.ts.map +1 -0
  748. package/dist/lib/workspace/surface-registry.js +225 -0
  749. package/dist/lib/workspace/surface-registry.js.map +1 -0
  750. package/dist/lib/workspace/surface-type.d.ts +153 -0
  751. package/dist/lib/workspace/surface-type.d.ts.map +1 -0
  752. package/dist/lib/workspace/surface-type.js +9 -0
  753. package/dist/lib/workspace/surface-type.js.map +1 -0
  754. package/dist/lib/workspace/surfaces/agent-overview.d.ts +16 -0
  755. package/dist/lib/workspace/surfaces/agent-overview.d.ts.map +1 -0
  756. package/dist/lib/workspace/surfaces/agent-overview.js +116 -0
  757. package/dist/lib/workspace/surfaces/agent-overview.js.map +1 -0
  758. package/dist/lib/workspace/surfaces/agent.d.ts +16 -0
  759. package/dist/lib/workspace/surfaces/agent.d.ts.map +1 -0
  760. package/dist/lib/workspace/surfaces/agent.js +112 -0
  761. package/dist/lib/workspace/surfaces/agent.js.map +1 -0
  762. package/dist/lib/workspace/surfaces/claude.d.ts +15 -0
  763. package/dist/lib/workspace/surfaces/claude.d.ts.map +1 -0
  764. package/dist/lib/workspace/surfaces/claude.js +23 -0
  765. package/dist/lib/workspace/surfaces/claude.js.map +1 -0
  766. package/dist/lib/workspace/surfaces/dashboard.d.ts +21 -0
  767. package/dist/lib/workspace/surfaces/dashboard.d.ts.map +1 -0
  768. package/dist/lib/workspace/surfaces/dashboard.js +32 -0
  769. package/dist/lib/workspace/surfaces/dashboard.js.map +1 -0
  770. package/dist/lib/workspace/surfaces/eval.d.ts +15 -0
  771. package/dist/lib/workspace/surfaces/eval.d.ts.map +1 -0
  772. package/dist/lib/workspace/surfaces/eval.js +42 -0
  773. package/dist/lib/workspace/surfaces/eval.js.map +1 -0
  774. package/dist/lib/workspace/surfaces/event-stream.d.ts +16 -0
  775. package/dist/lib/workspace/surfaces/event-stream.d.ts.map +1 -0
  776. package/dist/lib/workspace/surfaces/event-stream.js +40 -0
  777. package/dist/lib/workspace/surfaces/event-stream.js.map +1 -0
  778. package/dist/lib/workspace/surfaces/flow.d.ts +16 -0
  779. package/dist/lib/workspace/surfaces/flow.d.ts.map +1 -0
  780. package/dist/lib/workspace/surfaces/flow.js +49 -0
  781. package/dist/lib/workspace/surfaces/flow.js.map +1 -0
  782. package/dist/lib/workspace/surfaces/index.d.ts +19 -0
  783. package/dist/lib/workspace/surfaces/index.d.ts.map +1 -0
  784. package/dist/lib/workspace/surfaces/index.js +19 -0
  785. package/dist/lib/workspace/surfaces/index.js.map +1 -0
  786. package/dist/lib/workspace/surfaces/kanban.d.ts +15 -0
  787. package/dist/lib/workspace/surfaces/kanban.d.ts.map +1 -0
  788. package/dist/lib/workspace/surfaces/kanban.js +43 -0
  789. package/dist/lib/workspace/surfaces/kanban.js.map +1 -0
  790. package/dist/lib/workspace/surfaces/physical-world.d.ts +15 -0
  791. package/dist/lib/workspace/surfaces/physical-world.d.ts.map +1 -0
  792. package/dist/lib/workspace/surfaces/physical-world.js +37 -0
  793. package/dist/lib/workspace/surfaces/physical-world.js.map +1 -0
  794. package/dist/lib/workspace/surfaces/portfolio.d.ts +16 -0
  795. package/dist/lib/workspace/surfaces/portfolio.d.ts.map +1 -0
  796. package/dist/lib/workspace/surfaces/portfolio.js +102 -0
  797. package/dist/lib/workspace/surfaces/portfolio.js.map +1 -0
  798. package/dist/lib/workspace/surfaces/service.d.ts +16 -0
  799. package/dist/lib/workspace/surfaces/service.d.ts.map +1 -0
  800. package/dist/lib/workspace/surfaces/service.js +45 -0
  801. package/dist/lib/workspace/surfaces/service.js.map +1 -0
  802. package/dist/lib/workspace/surfaces/shell.d.ts +15 -0
  803. package/dist/lib/workspace/surfaces/shell.d.ts.map +1 -0
  804. package/dist/lib/workspace/surfaces/shell.js +19 -0
  805. package/dist/lib/workspace/surfaces/shell.js.map +1 -0
  806. package/dist/lib/workspace/surfaces/sidebar.d.ts +22 -0
  807. package/dist/lib/workspace/surfaces/sidebar.d.ts.map +1 -0
  808. package/dist/lib/workspace/surfaces/sidebar.js +94 -0
  809. package/dist/lib/workspace/surfaces/sidebar.js.map +1 -0
  810. package/dist/lib/workspace/surfaces/telemetry.d.ts +16 -0
  811. package/dist/lib/workspace/surfaces/telemetry.d.ts.map +1 -0
  812. package/dist/lib/workspace/surfaces/telemetry.js +48 -0
  813. package/dist/lib/workspace/surfaces/telemetry.js.map +1 -0
  814. package/dist/lib/workspace/surfaces/topology.d.ts +15 -0
  815. package/dist/lib/workspace/surfaces/topology.d.ts.map +1 -0
  816. package/dist/lib/workspace/surfaces/topology.js +19 -0
  817. package/dist/lib/workspace/surfaces/topology.js.map +1 -0
  818. package/dist/lib/workspace/surfaces/training.d.ts +16 -0
  819. package/dist/lib/workspace/surfaces/training.d.ts.map +1 -0
  820. package/dist/lib/workspace/surfaces/training.js +22 -0
  821. package/dist/lib/workspace/surfaces/training.js.map +1 -0
  822. package/dist/lib/workspace/tmux-adapter.d.ts +30 -0
  823. package/dist/lib/workspace/tmux-adapter.d.ts.map +1 -0
  824. package/dist/lib/workspace/tmux-adapter.js +137 -0
  825. package/dist/lib/workspace/tmux-adapter.js.map +1 -0
  826. package/dist/lib/workspace/tmux-sidebar.d.ts +14 -0
  827. package/dist/lib/workspace/tmux-sidebar.d.ts.map +1 -0
  828. package/dist/lib/workspace/tmux-sidebar.js +230 -0
  829. package/dist/lib/workspace/tmux-sidebar.js.map +1 -0
  830. package/dist/lib/world-model-store.d.ts +172 -0
  831. package/dist/lib/world-model-store.d.ts.map +1 -0
  832. package/dist/lib/world-model-store.js +487 -0
  833. package/dist/lib/world-model-store.js.map +1 -0
  834. package/dist/mcp/context-hub-mcp.d.ts +11 -0
  835. package/dist/mcp/context-hub-mcp.d.ts.map +1 -0
  836. package/dist/mcp/context-hub-mcp.js +797 -0
  837. package/dist/mcp/context-hub-mcp.js.map +1 -0
  838. package/dist/mcp/service-mcp-server.d.ts +12 -0
  839. package/dist/mcp/service-mcp-server.d.ts.map +1 -0
  840. package/dist/mcp/service-mcp-server.js +434 -0
  841. package/dist/mcp/service-mcp-server.js.map +1 -0
  842. package/dist/mcp/service-peer-mcp.d.ts +36 -0
  843. package/dist/mcp/service-peer-mcp.d.ts.map +1 -0
  844. package/dist/mcp/service-peer-mcp.js +220 -0
  845. package/dist/mcp/service-peer-mcp.js.map +1 -0
  846. package/dist/mcp/service-registry-mcp.d.ts +13 -0
  847. package/dist/mcp/service-registry-mcp.d.ts.map +1 -0
  848. package/dist/mcp/service-registry-mcp.js +330 -0
  849. package/dist/mcp/service-registry-mcp.js.map +1 -0
  850. package/dist/telegram/voice.d.ts +146 -0
  851. package/dist/telegram/voice.d.ts.map +1 -0
  852. package/dist/telegram/voice.js +351 -0
  853. package/dist/telegram/voice.js.map +1 -0
  854. package/dist/types/eval.d.ts +18 -0
  855. package/dist/types/eval.d.ts.map +1 -0
  856. package/dist/types/eval.js +5 -0
  857. package/dist/types/eval.js.map +1 -0
  858. package/dist/types/flows.d.ts +72 -0
  859. package/dist/types/flows.d.ts.map +1 -0
  860. package/dist/types/flows.js +10 -0
  861. package/dist/types/flows.js.map +1 -0
  862. package/dist/types/ide.d.ts +49 -0
  863. package/dist/types/ide.d.ts.map +1 -0
  864. package/dist/types/ide.js +5 -0
  865. package/dist/types/ide.js.map +1 -0
  866. package/dist/types/journal.d.ts +133 -0
  867. package/dist/types/journal.d.ts.map +1 -0
  868. package/dist/types/journal.js +59 -0
  869. package/dist/types/journal.js.map +1 -0
  870. package/dist/types/map.d.ts +42 -0
  871. package/dist/types/map.d.ts.map +1 -0
  872. package/dist/types/map.js +39 -0
  873. package/dist/types/map.js.map +1 -0
  874. package/dist/types/physical-world-model.d.ts +65 -0
  875. package/dist/types/physical-world-model.d.ts.map +1 -0
  876. package/dist/types/physical-world-model.js +43 -0
  877. package/dist/types/physical-world-model.js.map +1 -0
  878. package/dist/types/platform-digest.d.ts +228 -0
  879. package/dist/types/platform-digest.d.ts.map +1 -0
  880. package/dist/types/platform-digest.js +5 -0
  881. package/dist/types/platform-digest.js.map +1 -0
  882. package/dist/types/skills.d.ts +44 -0
  883. package/dist/types/skills.d.ts.map +1 -0
  884. package/dist/types/skills.js +5 -0
  885. package/dist/types/skills.js.map +1 -0
  886. package/dist/types/telemetry-digest.d.ts +75 -0
  887. package/dist/types/telemetry-digest.d.ts.map +1 -0
  888. package/dist/types/telemetry-digest.js +5 -0
  889. package/dist/types/telemetry-digest.js.map +1 -0
  890. package/dist/types/telemetry.d.ts +107 -0
  891. package/dist/types/telemetry.d.ts.map +1 -0
  892. package/dist/types/telemetry.js +5 -0
  893. package/dist/types/telemetry.js.map +1 -0
  894. package/dist/types/world-model.d.ts +478 -0
  895. package/dist/types/world-model.d.ts.map +1 -0
  896. package/dist/types/world-model.js +87 -0
  897. package/dist/types/world-model.js.map +1 -0
  898. package/dist/ui/banner.d.ts +18 -0
  899. package/dist/ui/banner.d.ts.map +1 -0
  900. package/dist/ui/banner.js +323 -0
  901. package/dist/ui/banner.js.map +1 -0
  902. package/dist/ui/context-hub-logs.d.ts +10 -0
  903. package/dist/ui/context-hub-logs.d.ts.map +1 -0
  904. package/dist/ui/context-hub-logs.js +175 -0
  905. package/dist/ui/context-hub-logs.js.map +1 -0
  906. package/dist/ui/event-dashboard.d.ts +12 -0
  907. package/dist/ui/event-dashboard.d.ts.map +1 -0
  908. package/dist/ui/event-dashboard.js +342 -0
  909. package/dist/ui/event-dashboard.js.map +1 -0
  910. package/dist/ui/index.d.ts +8 -0
  911. package/dist/ui/index.d.ts.map +1 -0
  912. package/dist/ui/index.js +8 -0
  913. package/dist/ui/index.js.map +1 -0
  914. package/dist/ui/prompts.d.ts +52 -0
  915. package/dist/ui/prompts.d.ts.map +1 -0
  916. package/dist/ui/prompts.js +72 -0
  917. package/dist/ui/prompts.js.map +1 -0
  918. package/dist/ui/service-dashboard.d.ts +11 -0
  919. package/dist/ui/service-dashboard.d.ts.map +1 -0
  920. package/dist/ui/service-dashboard.js +357 -0
  921. package/dist/ui/service-dashboard.js.map +1 -0
  922. package/dist/ui/services-manager.d.ts +11 -0
  923. package/dist/ui/services-manager.d.ts.map +1 -0
  924. package/dist/ui/services-manager.js +507 -0
  925. package/dist/ui/services-manager.js.map +1 -0
  926. package/dist/ui/theme.d.ts +82 -0
  927. package/dist/ui/theme.d.ts.map +1 -0
  928. package/dist/ui/theme.js +142 -0
  929. package/dist/ui/theme.js.map +1 -0
  930. package/dist/utils/auth-guard.d.ts +66 -0
  931. package/dist/utils/auth-guard.d.ts.map +1 -0
  932. package/dist/utils/auth-guard.js +347 -0
  933. package/dist/utils/auth-guard.js.map +1 -0
  934. package/dist/utils/auth-status.d.ts +21 -0
  935. package/dist/utils/auth-status.d.ts.map +1 -0
  936. package/dist/utils/auth-status.js +53 -0
  937. package/dist/utils/auth-status.js.map +1 -0
  938. package/dist/utils/claude-md-generator.d.ts +10 -0
  939. package/dist/utils/claude-md-generator.d.ts.map +1 -0
  940. package/dist/utils/claude-md-generator.js +215 -0
  941. package/dist/utils/claude-md-generator.js.map +1 -0
  942. package/dist/utils/context-hub-port.d.ts +33 -0
  943. package/dist/utils/context-hub-port.d.ts.map +1 -0
  944. package/dist/utils/context-hub-port.js +118 -0
  945. package/dist/utils/context-hub-port.js.map +1 -0
  946. package/dist/utils/ensure-context-hub.d.ts +20 -0
  947. package/dist/utils/ensure-context-hub.d.ts.map +1 -0
  948. package/dist/utils/ensure-context-hub.js +66 -0
  949. package/dist/utils/ensure-context-hub.js.map +1 -0
  950. package/dist/utils/ensure-project.d.ts +12 -0
  951. package/dist/utils/ensure-project.d.ts.map +1 -0
  952. package/dist/utils/ensure-project.js +81 -0
  953. package/dist/utils/ensure-project.js.map +1 -0
  954. package/dist/utils/git.d.ts +73 -0
  955. package/dist/utils/git.d.ts.map +1 -0
  956. package/dist/utils/git.js +222 -0
  957. package/dist/utils/git.js.map +1 -0
  958. package/dist/utils/github-auth.d.ts +54 -0
  959. package/dist/utils/github-auth.d.ts.map +1 -0
  960. package/dist/utils/github-auth.js +376 -0
  961. package/dist/utils/github-auth.js.map +1 -0
  962. package/dist/utils/github-repo.d.ts +30 -0
  963. package/dist/utils/github-repo.d.ts.map +1 -0
  964. package/dist/utils/github-repo.js +219 -0
  965. package/dist/utils/github-repo.js.map +1 -0
  966. package/dist/utils/jfl-config.d.ts +30 -0
  967. package/dist/utils/jfl-config.d.ts.map +1 -0
  968. package/dist/utils/jfl-config.js +153 -0
  969. package/dist/utils/jfl-config.js.map +1 -0
  970. package/dist/utils/jfl-migration.d.ts +29 -0
  971. package/dist/utils/jfl-migration.d.ts.map +1 -0
  972. package/dist/utils/jfl-migration.js +142 -0
  973. package/dist/utils/jfl-migration.js.map +1 -0
  974. package/dist/utils/jfl-paths.d.ts +71 -0
  975. package/dist/utils/jfl-paths.d.ts.map +1 -0
  976. package/dist/utils/jfl-paths.js +157 -0
  977. package/dist/utils/jfl-paths.js.map +1 -0
  978. package/dist/utils/platform-auth.d.ts +81 -0
  979. package/dist/utils/platform-auth.d.ts.map +1 -0
  980. package/dist/utils/platform-auth.js +192 -0
  981. package/dist/utils/platform-auth.js.map +1 -0
  982. package/dist/utils/project-config.d.ts +43 -0
  983. package/dist/utils/project-config.d.ts.map +1 -0
  984. package/dist/utils/project-config.js +97 -0
  985. package/dist/utils/project-config.js.map +1 -0
  986. package/dist/utils/provenance.d.ts +65 -0
  987. package/dist/utils/provenance.d.ts.map +1 -0
  988. package/dist/utils/provenance.js +213 -0
  989. package/dist/utils/provenance.js.map +1 -0
  990. package/dist/utils/settings-validator.d.ts +74 -0
  991. package/dist/utils/settings-validator.d.ts.map +1 -0
  992. package/dist/utils/settings-validator.js +241 -0
  993. package/dist/utils/settings-validator.js.map +1 -0
  994. package/dist/utils/skill-registry.d.ts +49 -0
  995. package/dist/utils/skill-registry.d.ts.map +1 -0
  996. package/dist/utils/skill-registry.js +192 -0
  997. package/dist/utils/skill-registry.js.map +1 -0
  998. package/dist/utils/tenet-env.d.ts +34 -0
  999. package/dist/utils/tenet-env.d.ts.map +1 -0
  1000. package/dist/utils/tenet-env.js +42 -0
  1001. package/dist/utils/tenet-env.js.map +1 -0
  1002. package/dist/utils/wallet.d.ts +62 -0
  1003. package/dist/utils/wallet.d.ts.map +1 -0
  1004. package/dist/utils/wallet.js +253 -0
  1005. package/dist/utils/wallet.js.map +1 -0
  1006. package/dist/utils/x402-client.d.ts +86 -0
  1007. package/dist/utils/x402-client.d.ts.map +1 -0
  1008. package/dist/utils/x402-client.js +266 -0
  1009. package/dist/utils/x402-client.js.map +1 -0
  1010. package/package.json +105 -0
  1011. package/packages/pi/AGENTS.md +112 -0
  1012. package/packages/pi/assets/boot.mp3 +0 -0
  1013. package/packages/pi/dist/agent-grid.d.ts +24 -0
  1014. package/packages/pi/dist/agent-grid.d.ts.map +1 -0
  1015. package/packages/pi/dist/agent-grid.js +162 -0
  1016. package/packages/pi/dist/agent-grid.js.map +1 -0
  1017. package/packages/pi/dist/agent-names.d.ts +43 -0
  1018. package/packages/pi/dist/agent-names.d.ts.map +1 -0
  1019. package/packages/pi/dist/agent-names.js +156 -0
  1020. package/packages/pi/dist/agent-names.js.map +1 -0
  1021. package/packages/pi/dist/autoresearch.d.ts +15 -0
  1022. package/packages/pi/dist/autoresearch.d.ts.map +1 -0
  1023. package/packages/pi/dist/autoresearch.js +372 -0
  1024. package/packages/pi/dist/autoresearch.js.map +1 -0
  1025. package/packages/pi/dist/bookmarks.d.ts +15 -0
  1026. package/packages/pi/dist/bookmarks.d.ts.map +1 -0
  1027. package/packages/pi/dist/bookmarks.js +77 -0
  1028. package/packages/pi/dist/bookmarks.js.map +1 -0
  1029. package/packages/pi/dist/context.d.ts +17 -0
  1030. package/packages/pi/dist/context.d.ts.map +1 -0
  1031. package/packages/pi/dist/context.js +152 -0
  1032. package/packages/pi/dist/context.js.map +1 -0
  1033. package/packages/pi/dist/crm-tool.d.ts +12 -0
  1034. package/packages/pi/dist/crm-tool.d.ts.map +1 -0
  1035. package/packages/pi/dist/crm-tool.js +58 -0
  1036. package/packages/pi/dist/crm-tool.js.map +1 -0
  1037. package/packages/pi/dist/eval-tool.d.ts +11 -0
  1038. package/packages/pi/dist/eval-tool.d.ts.map +1 -0
  1039. package/packages/pi/dist/eval-tool.js +188 -0
  1040. package/packages/pi/dist/eval-tool.js.map +1 -0
  1041. package/packages/pi/dist/eval.d.ts +12 -0
  1042. package/packages/pi/dist/eval.d.ts.map +1 -0
  1043. package/packages/pi/dist/eval.js +43 -0
  1044. package/packages/pi/dist/eval.js.map +1 -0
  1045. package/packages/pi/dist/footer.d.ts +20 -0
  1046. package/packages/pi/dist/footer.d.ts.map +1 -0
  1047. package/packages/pi/dist/footer.js +222 -0
  1048. package/packages/pi/dist/footer.js.map +1 -0
  1049. package/packages/pi/dist/header.d.ts +17 -0
  1050. package/packages/pi/dist/header.d.ts.map +1 -0
  1051. package/packages/pi/dist/header.js +156 -0
  1052. package/packages/pi/dist/header.js.map +1 -0
  1053. package/packages/pi/dist/hub-resolver.d.ts +11 -0
  1054. package/packages/pi/dist/hub-resolver.d.ts.map +1 -0
  1055. package/packages/pi/dist/hub-resolver.js +58 -0
  1056. package/packages/pi/dist/hub-resolver.js.map +1 -0
  1057. package/packages/pi/dist/hub-tools.d.ts +14 -0
  1058. package/packages/pi/dist/hub-tools.d.ts.map +1 -0
  1059. package/packages/pi/dist/hub-tools.js +266 -0
  1060. package/packages/pi/dist/hub-tools.js.map +1 -0
  1061. package/packages/pi/dist/hud-tool.d.ts +17 -0
  1062. package/packages/pi/dist/hud-tool.d.ts.map +1 -0
  1063. package/packages/pi/dist/hud-tool.js +297 -0
  1064. package/packages/pi/dist/hud-tool.js.map +1 -0
  1065. package/packages/pi/dist/index.d.ts +12 -0
  1066. package/packages/pi/dist/index.d.ts.map +1 -0
  1067. package/packages/pi/dist/index.js +556 -0
  1068. package/packages/pi/dist/index.js.map +1 -0
  1069. package/packages/pi/dist/jfl-resolve.d.ts +29 -0
  1070. package/packages/pi/dist/jfl-resolve.d.ts.map +1 -0
  1071. package/packages/pi/dist/jfl-resolve.js +89 -0
  1072. package/packages/pi/dist/jfl-resolve.js.map +1 -0
  1073. package/packages/pi/dist/journal.d.ts +23 -0
  1074. package/packages/pi/dist/journal.d.ts.map +1 -0
  1075. package/packages/pi/dist/journal.js +250 -0
  1076. package/packages/pi/dist/journal.js.map +1 -0
  1077. package/packages/pi/dist/map-bridge.d.ts +20 -0
  1078. package/packages/pi/dist/map-bridge.d.ts.map +1 -0
  1079. package/packages/pi/dist/map-bridge.js +181 -0
  1080. package/packages/pi/dist/map-bridge.js.map +1 -0
  1081. package/packages/pi/dist/memory-tool.d.ts +11 -0
  1082. package/packages/pi/dist/memory-tool.d.ts.map +1 -0
  1083. package/packages/pi/dist/memory-tool.js +162 -0
  1084. package/packages/pi/dist/memory-tool.js.map +1 -0
  1085. package/packages/pi/dist/notifications.d.ts +15 -0
  1086. package/packages/pi/dist/notifications.d.ts.map +1 -0
  1087. package/packages/pi/dist/notifications.js +65 -0
  1088. package/packages/pi/dist/notifications.js.map +1 -0
  1089. package/packages/pi/dist/onboarding-v1.d.ts +15 -0
  1090. package/packages/pi/dist/onboarding-v1.d.ts.map +1 -0
  1091. package/packages/pi/dist/onboarding-v1.js +417 -0
  1092. package/packages/pi/dist/onboarding-v1.js.map +1 -0
  1093. package/packages/pi/dist/onboarding-v2.d.ts +18 -0
  1094. package/packages/pi/dist/onboarding-v2.d.ts.map +1 -0
  1095. package/packages/pi/dist/onboarding-v2.js +402 -0
  1096. package/packages/pi/dist/onboarding-v2.js.map +1 -0
  1097. package/packages/pi/dist/onboarding-v3.d.ts +13 -0
  1098. package/packages/pi/dist/onboarding-v3.d.ts.map +1 -0
  1099. package/packages/pi/dist/onboarding-v3.js +581 -0
  1100. package/packages/pi/dist/onboarding-v3.js.map +1 -0
  1101. package/packages/pi/dist/peter-parker.d.ts +12 -0
  1102. package/packages/pi/dist/peter-parker.d.ts.map +1 -0
  1103. package/packages/pi/dist/peter-parker.js +162 -0
  1104. package/packages/pi/dist/peter-parker.js.map +1 -0
  1105. package/packages/pi/dist/pivot-tool.d.ts +11 -0
  1106. package/packages/pi/dist/pivot-tool.d.ts.map +1 -0
  1107. package/packages/pi/dist/pivot-tool.js +56 -0
  1108. package/packages/pi/dist/pivot-tool.js.map +1 -0
  1109. package/packages/pi/dist/policy-head-tool.d.ts +15 -0
  1110. package/packages/pi/dist/policy-head-tool.d.ts.map +1 -0
  1111. package/packages/pi/dist/policy-head-tool.js +220 -0
  1112. package/packages/pi/dist/policy-head-tool.js.map +1 -0
  1113. package/packages/pi/dist/portfolio-bridge.d.ts +12 -0
  1114. package/packages/pi/dist/portfolio-bridge.d.ts.map +1 -0
  1115. package/packages/pi/dist/portfolio-bridge.js +81 -0
  1116. package/packages/pi/dist/portfolio-bridge.js.map +1 -0
  1117. package/packages/pi/dist/service-skills.d.ts +15 -0
  1118. package/packages/pi/dist/service-skills.d.ts.map +1 -0
  1119. package/packages/pi/dist/service-skills.js +198 -0
  1120. package/packages/pi/dist/service-skills.js.map +1 -0
  1121. package/packages/pi/dist/session.d.ts +28 -0
  1122. package/packages/pi/dist/session.d.ts.map +1 -0
  1123. package/packages/pi/dist/session.js +649 -0
  1124. package/packages/pi/dist/session.js.map +1 -0
  1125. package/packages/pi/dist/shortcuts.d.ts +11 -0
  1126. package/packages/pi/dist/shortcuts.d.ts.map +1 -0
  1127. package/packages/pi/dist/shortcuts.js +231 -0
  1128. package/packages/pi/dist/shortcuts.js.map +1 -0
  1129. package/packages/pi/dist/startup-briefing.d.ts +13 -0
  1130. package/packages/pi/dist/startup-briefing.d.ts.map +1 -0
  1131. package/packages/pi/dist/startup-briefing.js +432 -0
  1132. package/packages/pi/dist/startup-briefing.js.map +1 -0
  1133. package/packages/pi/dist/stratus-bridge.d.ts +14 -0
  1134. package/packages/pi/dist/stratus-bridge.d.ts.map +1 -0
  1135. package/packages/pi/dist/stratus-bridge.js +104 -0
  1136. package/packages/pi/dist/stratus-bridge.js.map +1 -0
  1137. package/packages/pi/dist/subway-mesh.d.ts +88 -0
  1138. package/packages/pi/dist/subway-mesh.d.ts.map +1 -0
  1139. package/packages/pi/dist/subway-mesh.js +813 -0
  1140. package/packages/pi/dist/subway-mesh.js.map +1 -0
  1141. package/packages/pi/dist/synopsis-tool.d.ts +12 -0
  1142. package/packages/pi/dist/synopsis-tool.d.ts.map +1 -0
  1143. package/packages/pi/dist/synopsis-tool.js +84 -0
  1144. package/packages/pi/dist/synopsis-tool.js.map +1 -0
  1145. package/packages/pi/dist/tool-renderers.d.ts +55 -0
  1146. package/packages/pi/dist/tool-renderers.d.ts.map +1 -0
  1147. package/packages/pi/dist/tool-renderers.js +349 -0
  1148. package/packages/pi/dist/tool-renderers.js.map +1 -0
  1149. package/packages/pi/dist/training-buffer-tool.d.ts +16 -0
  1150. package/packages/pi/dist/training-buffer-tool.d.ts.map +1 -0
  1151. package/packages/pi/dist/training-buffer-tool.js +319 -0
  1152. package/packages/pi/dist/training-buffer-tool.js.map +1 -0
  1153. package/packages/pi/dist/types.d.ts +195 -0
  1154. package/packages/pi/dist/types.d.ts.map +1 -0
  1155. package/packages/pi/dist/types.js +11 -0
  1156. package/packages/pi/dist/types.js.map +1 -0
  1157. package/packages/pi/extensions/agent-grid.ts +191 -0
  1158. package/packages/pi/extensions/agent-names.ts +178 -0
  1159. package/packages/pi/extensions/autoresearch.ts +428 -0
  1160. package/packages/pi/extensions/bookmarks.ts +85 -0
  1161. package/packages/pi/extensions/context.ts +158 -0
  1162. package/packages/pi/extensions/crm-tool.ts +61 -0
  1163. package/packages/pi/extensions/eval-tool.ts +224 -0
  1164. package/packages/pi/extensions/eval.ts +61 -0
  1165. package/packages/pi/extensions/footer.ts +239 -0
  1166. package/packages/pi/extensions/header.ts +171 -0
  1167. package/packages/pi/extensions/hub-resolver.ts +63 -0
  1168. package/packages/pi/extensions/hub-tools.ts +267 -0
  1169. package/packages/pi/extensions/hud-tool.ts +294 -0
  1170. package/packages/pi/extensions/index.ts +601 -0
  1171. package/packages/pi/extensions/jfl-resolve.ts +98 -0
  1172. package/packages/pi/extensions/journal.ts +309 -0
  1173. package/packages/pi/extensions/map-bridge.ts +209 -0
  1174. package/packages/pi/extensions/memory-tool.ts +170 -0
  1175. package/packages/pi/extensions/notifications.ts +73 -0
  1176. package/packages/pi/extensions/onboarding-v1.ts +455 -0
  1177. package/packages/pi/extensions/onboarding-v2.ts +374 -0
  1178. package/packages/pi/extensions/onboarding-v3.ts +686 -0
  1179. package/packages/pi/extensions/peter-parker.ts +203 -0
  1180. package/packages/pi/extensions/pivot-tool.ts +59 -0
  1181. package/packages/pi/extensions/policy-head-tool.ts +277 -0
  1182. package/packages/pi/extensions/portfolio-bridge.ts +89 -0
  1183. package/packages/pi/extensions/service-skills.ts +219 -0
  1184. package/packages/pi/extensions/session.ts +684 -0
  1185. package/packages/pi/extensions/shortcuts.ts +259 -0
  1186. package/packages/pi/extensions/startup-briefing.ts +482 -0
  1187. package/packages/pi/extensions/stratus-bridge.ts +116 -0
  1188. package/packages/pi/extensions/subway-mesh.ts +893 -0
  1189. package/packages/pi/extensions/synopsis-tool.ts +88 -0
  1190. package/packages/pi/extensions/tool-renderers.ts +366 -0
  1191. package/packages/pi/extensions/training-buffer-tool.ts +376 -0
  1192. package/packages/pi/extensions/types.ts +169 -0
  1193. package/packages/pi/package-lock.json +346 -0
  1194. package/packages/pi/package.json +42 -0
  1195. package/packages/pi/skills/agent-browser/SKILL.md +116 -0
  1196. package/packages/pi/skills/brand-architect/SKILL.md +240 -0
  1197. package/packages/pi/skills/brand-architect/config.yaml +137 -0
  1198. package/packages/pi/skills/campaign-hud/config.yaml +112 -0
  1199. package/packages/pi/skills/content-creator/SKILL.md +294 -0
  1200. package/packages/pi/skills/context/SKILL.md +65 -0
  1201. package/packages/pi/skills/debug/MULTI_AGENT.md +360 -0
  1202. package/packages/pi/skills/debug/SKILL.md +554 -0
  1203. package/packages/pi/skills/end/SKILL.md +1790 -0
  1204. package/packages/pi/skills/eval/SKILL.md +75 -0
  1205. package/packages/pi/skills/fly-deploy/SKILL.md +676 -0
  1206. package/packages/pi/skills/founder-video/SKILL.md +467 -0
  1207. package/packages/pi/skills/hud/SKILL.md +160 -0
  1208. package/packages/pi/skills/orchestrate/SKILL.md +74 -0
  1209. package/packages/pi/skills/pi-agents/SKILL.md +78 -0
  1210. package/packages/pi/skills/pivot/SKILL.md +91 -0
  1211. package/packages/pi/skills/react-best-practices/AGENTS.md +2249 -0
  1212. package/packages/pi/skills/react-best-practices/README.md +123 -0
  1213. package/packages/pi/skills/react-best-practices/SKILL.md +125 -0
  1214. package/packages/pi/skills/react-best-practices/metadata.json +15 -0
  1215. package/packages/pi/skills/react-best-practices/rules/_sections.md +46 -0
  1216. package/packages/pi/skills/react-best-practices/rules/_template.md +28 -0
  1217. package/packages/pi/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  1218. package/packages/pi/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
  1219. package/packages/pi/skills/react-best-practices/rules/async-api-routes.md +38 -0
  1220. package/packages/pi/skills/react-best-practices/rules/async-defer-await.md +80 -0
  1221. package/packages/pi/skills/react-best-practices/rules/async-dependencies.md +36 -0
  1222. package/packages/pi/skills/react-best-practices/rules/async-parallel.md +28 -0
  1223. package/packages/pi/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  1224. package/packages/pi/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  1225. package/packages/pi/skills/react-best-practices/rules/bundle-conditional.md +31 -0
  1226. package/packages/pi/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  1227. package/packages/pi/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  1228. package/packages/pi/skills/react-best-practices/rules/bundle-preload.md +50 -0
  1229. package/packages/pi/skills/react-best-practices/rules/client-event-listeners.md +74 -0
  1230. package/packages/pi/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
  1231. package/packages/pi/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
  1232. package/packages/pi/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  1233. package/packages/pi/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  1234. package/packages/pi/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  1235. package/packages/pi/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  1236. package/packages/pi/skills/react-best-practices/rules/js-early-exit.md +50 -0
  1237. package/packages/pi/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  1238. package/packages/pi/skills/react-best-practices/rules/js-index-maps.md +37 -0
  1239. package/packages/pi/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  1240. package/packages/pi/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  1241. package/packages/pi/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  1242. package/packages/pi/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  1243. package/packages/pi/skills/react-best-practices/rules/rendering-activity.md +26 -0
  1244. package/packages/pi/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  1245. package/packages/pi/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  1246. package/packages/pi/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  1247. package/packages/pi/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  1248. package/packages/pi/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  1249. package/packages/pi/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  1250. package/packages/pi/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  1251. package/packages/pi/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  1252. package/packages/pi/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  1253. package/packages/pi/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  1254. package/packages/pi/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  1255. package/packages/pi/skills/react-best-practices/rules/rerender-memo.md +44 -0
  1256. package/packages/pi/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  1257. package/packages/pi/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
  1258. package/packages/pi/skills/react-best-practices/rules/server-cache-lru.md +41 -0
  1259. package/packages/pi/skills/react-best-practices/rules/server-cache-react.md +26 -0
  1260. package/packages/pi/skills/react-best-practices/rules/server-parallel-fetching.md +79 -0
  1261. package/packages/pi/skills/react-best-practices/rules/server-serialization.md +38 -0
  1262. package/packages/pi/skills/remotion-best-practices/SKILL.md +43 -0
  1263. package/packages/pi/skills/remotion-best-practices/rules/3d.md +86 -0
  1264. package/packages/pi/skills/remotion-best-practices/rules/animations.md +29 -0
  1265. package/packages/pi/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
  1266. package/packages/pi/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  1267. package/packages/pi/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
  1268. package/packages/pi/skills/remotion-best-practices/rules/assets.md +78 -0
  1269. package/packages/pi/skills/remotion-best-practices/rules/audio.md +172 -0
  1270. package/packages/pi/skills/remotion-best-practices/rules/calculate-metadata.md +104 -0
  1271. package/packages/pi/skills/remotion-best-practices/rules/can-decode.md +75 -0
  1272. package/packages/pi/skills/remotion-best-practices/rules/charts.md +58 -0
  1273. package/packages/pi/skills/remotion-best-practices/rules/compositions.md +146 -0
  1274. package/packages/pi/skills/remotion-best-practices/rules/display-captions.md +126 -0
  1275. package/packages/pi/skills/remotion-best-practices/rules/extract-frames.md +229 -0
  1276. package/packages/pi/skills/remotion-best-practices/rules/fonts.md +152 -0
  1277. package/packages/pi/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
  1278. package/packages/pi/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  1279. package/packages/pi/skills/remotion-best-practices/rules/get-video-duration.md +58 -0
  1280. package/packages/pi/skills/remotion-best-practices/rules/gifs.md +138 -0
  1281. package/packages/pi/skills/remotion-best-practices/rules/images.md +130 -0
  1282. package/packages/pi/skills/remotion-best-practices/rules/import-srt-captions.md +67 -0
  1283. package/packages/pi/skills/remotion-best-practices/rules/lottie.md +68 -0
  1284. package/packages/pi/skills/remotion-best-practices/rules/measuring-dom-nodes.md +35 -0
  1285. package/packages/pi/skills/remotion-best-practices/rules/measuring-text.md +143 -0
  1286. package/packages/pi/skills/remotion-best-practices/rules/sequencing.md +106 -0
  1287. package/packages/pi/skills/remotion-best-practices/rules/tailwind.md +11 -0
  1288. package/packages/pi/skills/remotion-best-practices/rules/text-animations.md +20 -0
  1289. package/packages/pi/skills/remotion-best-practices/rules/timing.md +179 -0
  1290. package/packages/pi/skills/remotion-best-practices/rules/transcribe-captions.md +19 -0
  1291. package/packages/pi/skills/remotion-best-practices/rules/transitions.md +122 -0
  1292. package/packages/pi/skills/remotion-best-practices/rules/trimming.md +53 -0
  1293. package/packages/pi/skills/remotion-best-practices/rules/videos.md +171 -0
  1294. package/packages/pi/skills/search/SKILL.md +220 -0
  1295. package/packages/pi/skills/spec/SKILL.md +377 -0
  1296. package/packages/pi/skills/startup/SKILL.md +315 -0
  1297. package/packages/pi/skills/subway-browser/SKILL.md +292 -0
  1298. package/packages/pi/skills/viz/SKILL.md +204 -0
  1299. package/packages/pi/skills/web-architect/SKILL.md +309 -0
  1300. package/packages/pi/skills/x-algorithm/SKILL.md +305 -0
  1301. package/packages/pi/teams/dev-team.yaml +63 -0
  1302. package/packages/pi/teams/gtm-team.yaml +79 -0
  1303. package/packages/pi/themes/jfl.theme.json +76 -0
  1304. package/packages/pi/tsconfig.json +21 -0
  1305. package/scripts/__pycache__/train-policy-head.cpython-314.pyc +0 -0
  1306. package/scripts/collect-tuples.sh +124 -0
  1307. package/scripts/commit-gtm.sh +56 -0
  1308. package/scripts/commit-product.sh +68 -0
  1309. package/scripts/context-query.sh +45 -0
  1310. package/scripts/destroy-fleet.sh +37 -0
  1311. package/scripts/generate-changesets.sh +113 -0
  1312. package/scripts/jfl-ide.sh +48 -0
  1313. package/scripts/migrate-to-branch-sessions.sh +201 -0
  1314. package/scripts/postinstall.js +146 -0
  1315. package/scripts/pp-branch-pr.sh +133 -0
  1316. package/scripts/pp-branch-pr.sh.bak +115 -0
  1317. package/scripts/session/auto-commit.sh +297 -0
  1318. package/scripts/session/fix-tracked-logs.sh +97 -0
  1319. package/scripts/session/jfl-doctor.sh +707 -0
  1320. package/scripts/session/session-cleanup.sh +292 -0
  1321. package/scripts/session/session-end.sh +198 -0
  1322. package/scripts/session/session-init.sh +356 -0
  1323. package/scripts/session/session-init.sh.backup +292 -0
  1324. package/scripts/session/session-sync.sh +192 -0
  1325. package/scripts/session/test-context-preservation.sh +160 -0
  1326. package/scripts/session/test-critical-infrastructure.sh +293 -0
  1327. package/scripts/session/test-experience-level.sh +336 -0
  1328. package/scripts/session/test-session-cleanup.sh +268 -0
  1329. package/scripts/session/test-session-sync.sh +320 -0
  1330. package/scripts/setup-branch-protection.sh +106 -0
  1331. package/scripts/spawn-fleet.sh +144 -0
  1332. package/scripts/telemetry-dashboard.sh +44 -0
  1333. package/scripts/test-map-eventbus.sh +357 -0
  1334. package/scripts/test-onboarding.sh +121 -0
  1335. package/scripts/test-planning-loop-e2e.ts +181 -0
  1336. package/scripts/test-server-inference.ts +49 -0
  1337. package/scripts/test-state-sensitivity.ts +32 -0
  1338. package/scripts/train/requirements.txt +5 -0
  1339. package/scripts/train/train-policy-head.py +477 -0
  1340. package/scripts/train/v2/__pycache__/dataset.cpython-314.pyc +0 -0
  1341. package/scripts/train/v2/__pycache__/eval.cpython-314.pyc +0 -0
  1342. package/scripts/train/v2/__pycache__/generate_data.cpython-314.pyc +0 -0
  1343. package/scripts/train/v2/__pycache__/infer.cpython-314.pyc +0 -0
  1344. package/scripts/train/v2/__pycache__/model.cpython-314.pyc +0 -0
  1345. package/scripts/train/v2/__pycache__/precompute.cpython-314.pyc +0 -0
  1346. package/scripts/train/v2/__pycache__/train.cpython-314.pyc +0 -0
  1347. package/scripts/train/v2/__pycache__/transform_buffer.cpython-314.pyc +0 -0
  1348. package/scripts/train/v2/__pycache__/validate_data.cpython-314.pyc +0 -0
  1349. package/scripts/train/v2/benchmark.py +661 -0
  1350. package/scripts/train/v2/dataset.py +81 -0
  1351. package/scripts/train/v2/domain.json +66 -0
  1352. package/scripts/train/v2/eval.py +196 -0
  1353. package/scripts/train/v2/generate_balanced.py +439 -0
  1354. package/scripts/train/v2/generate_data.py +219 -0
  1355. package/scripts/train/v2/generate_hard_negatives.py +219 -0
  1356. package/scripts/train/v2/infer.py +301 -0
  1357. package/scripts/train/v2/infer_server.py +224 -0
  1358. package/scripts/train/v2/model.py +112 -0
  1359. package/scripts/train/v2/online_train.py +576 -0
  1360. package/scripts/train/v2/precompute.py +150 -0
  1361. package/scripts/train/v2/train.py +302 -0
  1362. package/scripts/train/v2/transform_buffer.py +227 -0
  1363. package/scripts/train/v2/validate_data.py +115 -0
  1364. package/scripts/train-policy-head.py +434 -0
  1365. package/scripts/vm-swarm/README.md +301 -0
  1366. package/scripts/vm-swarm/collect-tuples.sh +331 -0
  1367. package/scripts/vm-swarm/create-base-template.sh +339 -0
  1368. package/scripts/vm-swarm/kill-fleet.sh +204 -0
  1369. package/scripts/vm-swarm/monitor-fleet.sh +346 -0
  1370. package/scripts/vm-swarm/spawn-fleet.sh +304 -0
  1371. package/scripts/voice-start.sh +156 -0
  1372. package/scripts/voice-stop.sh +33 -0
  1373. package/scripts/where-am-i.sh +78 -0
  1374. package/templates/QUICKSTART_SKILL_TO_PRODUCT.md +242 -0
  1375. package/templates/brand/BRAND_BRIEF.md +124 -0
  1376. package/templates/brand/BRAND_DECISIONS.md +168 -0
  1377. package/templates/brand/BRAND_GUIDELINES.md +251 -0
  1378. package/templates/brand/VOICE_AND_TONE.md +146 -0
  1379. package/templates/brand/global.css +240 -0
  1380. package/templates/collaboration/CONTRIBUTOR.md +74 -0
  1381. package/templates/collaboration/CRM.md +97 -0
  1382. package/templates/collaboration/TASKS.md +83 -0
  1383. package/templates/dating/FUNNEL.md +29 -0
  1384. package/templates/dating/REWARDS.md +24 -0
  1385. package/templates/dating/SIGNALS.md +18 -0
  1386. package/templates/dating/anti_patterns.md +23 -0
  1387. package/templates/dating/connectors/index.md +16 -0
  1388. package/templates/dating/modes.md +21 -0
  1389. package/templates/dating/psychology.md +18 -0
  1390. package/templates/default/README.md +19 -0
  1391. package/templates/service-agent/.claude/settings.json +32 -0
  1392. package/templates/service-agent/CLAUDE.md +334 -0
  1393. package/templates/service-agent/knowledge/ARCHITECTURE.md +115 -0
  1394. package/templates/service-agent/knowledge/DEPLOYMENT.md +199 -0
  1395. package/templates/service-agent/knowledge/RUNBOOK.md +412 -0
  1396. package/templates/service-agent/knowledge/SERVICE_SPEC.md +77 -0
  1397. package/templates/service-mcp-template.js +325 -0
  1398. package/templates/strategic/NARRATIVE.md +114 -0
  1399. package/templates/strategic/ROADMAP.md +128 -0
  1400. package/templates/strategic/THESIS.md +108 -0
  1401. package/templates/strategic/VISION.md +74 -0
package/dist/index.js ADDED
@@ -0,0 +1,1707 @@
1
+ #!/usr/bin/env node
2
+ ;
3
+ globalThis.__jfl_start = Date.now();
4
+ /**
5
+ * JFL CLI - Just Fucking Launch
6
+ *
7
+ * Free tier: Works standalone with BYOAI
8
+ * Paid tier: Connects to platform for dashboard, integrations, hosted agents
9
+ */
10
+ import { Command } from "commander";
11
+ import chalk from "chalk";
12
+ import { spawn } from "child_process";
13
+ import { readFileSync } from "fs";
14
+ import { join } from "path";
15
+ import * as path from "path";
16
+ import { fileURLToPath } from "url";
17
+ import { TENET_DEBUG } from "./utils/tenet-env.js";
18
+ // Lazy imports - only load when needed to reduce startup latency
19
+ // All commands use dynamic import() to defer loading until invoked
20
+ import { JFL_PATHS } from "./utils/jfl-paths.js";
21
+ // Telemetry loaded lazily on first track() call
22
+ let _telemetry;
23
+ async function getTelemetry() {
24
+ if (!_telemetry) {
25
+ const mod = await import("./lib/telemetry.js");
26
+ _telemetry = mod.telemetry;
27
+ }
28
+ return _telemetry;
29
+ }
30
+ // Migration check runs in background, doesn't block startup
31
+ import("./utils/jfl-migration.js").then(mod => mod.checkAndMigrate({ silent: true })).catch(() => { });
32
+ const program = new Command();
33
+ // Telemetry hooks — auto-track all commands (lazy load telemetry)
34
+ program.hook('preAction', async (_thisCommand, actionCommand) => {
35
+ ;
36
+ actionCommand.__telemetryStart = Date.now();
37
+ if (TENET_DEBUG) {
38
+ console.error(`[timing] preAction start: ${Date.now() - globalThis.__jfl_start}ms`);
39
+ }
40
+ // ResourceOptimizer: decide() before every command (<5ms)
41
+ try {
42
+ const { resourceOptimizerPreAction, applyGuidance } = await import("./lib/resource-optimizer-middleware.js");
43
+ const guidance = await resourceOptimizerPreAction(actionCommand.name());
44
+ actionCommand.__roGuidance = guidance;
45
+ // Apply guidance (delay if thermal/CPU issue)
46
+ if (guidance.action !== "passthrough" && guidance.action !== "monitor") {
47
+ await applyGuidance(guidance);
48
+ if (guidance.delay_ms > 0) {
49
+ const chalk = (await import("chalk")).default;
50
+ console.log(chalk.yellow(` ⚡ ${guidance.reason}`));
51
+ }
52
+ }
53
+ }
54
+ catch {
55
+ // Never block commands for RO failures
56
+ }
57
+ if (TENET_DEBUG) {
58
+ console.error(`[timing] preAction end: ${Date.now() - globalThis.__jfl_start}ms`);
59
+ }
60
+ });
61
+ program.hook('postAction', async (_thisCommand, actionCommand) => {
62
+ if (TENET_DEBUG) {
63
+ console.error(`[timing] postAction start: ${Date.now() - globalThis.__jfl_start}ms`);
64
+ }
65
+ const start = actionCommand.__telemetryStart;
66
+ const commandName = actionCommand.name();
67
+ const durationMs = start ? Date.now() - start : undefined;
68
+ // Fire-and-forget: don't block CLI exit for telemetry/RO
69
+ // These run in background; process.on('beforeExit') flushes telemetry
70
+ Promise.all([
71
+ // ResourceOptimizer: record transition
72
+ import("./lib/resource-optimizer-middleware.js")
73
+ .then(m => m.resourceOptimizerPostAction(commandName, process.cwd()))
74
+ .catch(() => { }),
75
+ // Telemetry: track command
76
+ getTelemetry()
77
+ .then(t => t.track({
78
+ category: 'command',
79
+ event: `command:${commandName}`,
80
+ command: commandName,
81
+ duration_ms: durationMs,
82
+ success: true,
83
+ }))
84
+ .catch(() => { }),
85
+ ]).catch(() => { });
86
+ if (TENET_DEBUG) {
87
+ console.error(`[timing] postAction end: ${Date.now() - globalThis.__jfl_start}ms`);
88
+ }
89
+ });
90
+ const HELP_GROUPS = {
91
+ "Getting Started": ["init", "status", "whoami", "hud", "ide", "doctor"],
92
+ "Daily Use": ["synopsis", "ask", "improve", "organize", "events", "voice", "kanban"],
93
+ "Management": ["services", "portfolio", "flows", "hooks", "scope", "memory", "eval", "findings", "viz", "telemetry", "context-hub", "skills", "ci"],
94
+ "Platform": ["login", "deploy", "wallet", "preferences"],
95
+ "Advanced": ["peter", "orchestrate", "openclaw", "ralph", "agent", "train", "setup"],
96
+ };
97
+ const HIDDEN_COMMANDS = new Set([
98
+ "repair", "validate-settings", "test", "brand", "content", "feedback",
99
+ "migrate-services", "onboard", "service-agent", "dashboard", "profile",
100
+ "gtm", "clawdbot", "update", "service-manager", "logout", "agents", "help",
101
+ ]);
102
+ program.configureHelp({
103
+ formatHelp(cmd, helper) {
104
+ // For sub-commands, render standard Commander help so arguments/options are visible
105
+ if (cmd.parent !== null) {
106
+ const lines = [];
107
+ const pad = 22;
108
+ lines.push("");
109
+ lines.push(` Usage: ${helper.commandUsage(cmd)}`);
110
+ const desc = helper.commandDescription(cmd);
111
+ if (desc) {
112
+ lines.push("");
113
+ lines.push(` ${desc}`);
114
+ }
115
+ const args = helper.visibleArguments(cmd);
116
+ if (args.length > 0) {
117
+ lines.push("");
118
+ lines.push(" Arguments:");
119
+ for (const arg of args) {
120
+ lines.push(` ${helper.argumentTerm(arg).padEnd(pad)}${helper.argumentDescription(arg)}`);
121
+ }
122
+ }
123
+ const opts = helper.visibleOptions(cmd);
124
+ if (opts.length > 0) {
125
+ lines.push("");
126
+ lines.push(" Options:");
127
+ for (const opt of opts) {
128
+ lines.push(` ${helper.optionTerm(opt).padEnd(pad)}${helper.optionDescription(opt)}`);
129
+ }
130
+ }
131
+ const cmds = helper.visibleCommands(cmd);
132
+ if (cmds.length > 0) {
133
+ lines.push("");
134
+ lines.push(" Commands:");
135
+ for (const c of cmds) {
136
+ lines.push(` ${helper.subcommandTerm(c).padEnd(pad)}${helper.subcommandDescription(c)}`);
137
+ }
138
+ }
139
+ lines.push("");
140
+ return lines.join("\n");
141
+ }
142
+ // Root command: custom grouped format
143
+ const lines = [];
144
+ lines.push("");
145
+ lines.push(chalk.bold(" JFL - Just Fucking Launch"));
146
+ lines.push("");
147
+ lines.push(chalk.gray(" Your context layer. Any project. Any AI."));
148
+ lines.push("");
149
+ const allCommands = cmd.commands;
150
+ const commandMap = new Map();
151
+ for (const sub of allCommands) {
152
+ commandMap.set(sub.name(), sub.description());
153
+ }
154
+ for (const [group, names] of Object.entries(HELP_GROUPS)) {
155
+ lines.push(chalk.cyan(` ${group}`));
156
+ for (const name of names) {
157
+ const desc = commandMap.get(name);
158
+ if (desc) {
159
+ lines.push(` ${name.padEnd(18)}${desc}`);
160
+ }
161
+ }
162
+ lines.push("");
163
+ }
164
+ lines.push(chalk.gray(" Run jfl <command> --help for details"));
165
+ lines.push("");
166
+ return lines.join("\n");
167
+ },
168
+ });
169
+ function getVersion() {
170
+ try {
171
+ const pkgPath = new URL("../package.json", import.meta.url);
172
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
173
+ return pkg.version ?? "0.0.0";
174
+ }
175
+ catch {
176
+ return "0.0.0";
177
+ }
178
+ }
179
+ program
180
+ .name("tenet")
181
+ .description("TENET — The operating system for AI agent teams")
182
+ .version(getVersion())
183
+ .option("--no-update", "Skip automatic update check")
184
+ .action(async (options) => {
185
+ // Always update on session start (unless --no-update flag)
186
+ if (options.update !== false) {
187
+ const { updateCommand } = await import("./commands/update.js");
188
+ await updateCommand({ autoUpdate: true });
189
+ console.log(); // Add spacing before session starts
190
+ }
191
+ const { sessionCommand } = await import("./commands/session.js");
192
+ await sessionCommand({});
193
+ });
194
+ // ============================================================================
195
+ // FREE TIER COMMANDS (work offline/standalone)
196
+ // ============================================================================
197
+ program
198
+ .command("start")
199
+ .description("One-command activation: init → setup → launch (zero to intelligence in <2 min)")
200
+ .argument("[name]", "Project name or path")
201
+ .option("--repo <path>", "Analyze existing repo and create GTM workspace")
202
+ .option("--pi", "Launch Pi instead of Claude Code")
203
+ .option("--ci", "Deploy CI workflows (eval + review)")
204
+ .option("-s, --service <path...>", "Service repo paths/URLs to onboard (repeatable)")
205
+ .option("--no-launch", "Don't launch editor after setup")
206
+ .action(async (name, options) => {
207
+ const { startCommand } = await import("./commands/start.js");
208
+ await startCommand(name, options);
209
+ });
210
+ program
211
+ .command("init")
212
+ .description("Initialize a new JFL project")
213
+ .option("-n, --name <name>", "Project name")
214
+ .option("-t, --type <type>", "Workspace type: gtm, portfolio, service", "gtm")
215
+ .option("-d, --description <desc>", "Project description")
216
+ .option("-s, --service <path...>", "Service repo paths/URLs to onboard (repeatable)")
217
+ .option("--from-service", "Deep-analyze current directory and create GTM in sibling directory")
218
+ .option("--ci", "Deploy eval + review CI workflows after init")
219
+ .option("--no-interactive", "Skip all prompts, use defaults")
220
+ .option("--no-search", "Skip search setup")
221
+ .option("--no-services", "Skip service onboarding")
222
+ .option("--no-launch", "Skip launching Claude Code after init")
223
+ .action(async (options) => {
224
+ const { initCommand } = await import("./commands/init.js");
225
+ await initCommand(options);
226
+ });
227
+ program
228
+ .command("migrate")
229
+ .description("Migrate project from JFL to Tenet naming (.jfl/ → .tenet/, configs, scripts)")
230
+ .option("--dry-run", "Show what would change without making changes")
231
+ .option("--force", "Overwrite existing .tenet/ directory")
232
+ .option("--rollback", "Reverse: migrate from Tenet back to JFL")
233
+ .action(async (options) => {
234
+ const { migrateTenetCommand } = await import("./commands/migrate-tenet.js");
235
+ await migrateTenetCommand(options);
236
+ });
237
+ program
238
+ .command("repair")
239
+ .description("Repair a JFL project missing .jfl directory")
240
+ .action(async () => {
241
+ const { repairCommand } = await import("./commands/repair.js");
242
+ await repairCommand();
243
+ });
244
+ program
245
+ .command("validate-settings")
246
+ .description("Validate and repair .claude/settings.json")
247
+ .option("--fix", "Attempt to auto-repair common issues")
248
+ .option("--json", "Output in JSON format")
249
+ .action(async (options) => {
250
+ const { validateSettingsCommand } = await import("./commands/validate-settings.js");
251
+ await validateSettingsCommand(options);
252
+ });
253
+ program
254
+ .command("hud")
255
+ .description("Show campaign dashboard")
256
+ .option("-c, --compact", "Show compact one-line status")
257
+ .action(async (options) => {
258
+ const { hudCommand } = await import("./commands/hud.js");
259
+ await hudCommand(options);
260
+ });
261
+ program
262
+ .command("status")
263
+ .description("Show project status")
264
+ .action(async () => {
265
+ if (TENET_DEBUG) {
266
+ const _t = Date.now();
267
+ const { statusCommand } = await import("./commands/status.js");
268
+ console.error(`[timing] import status.js: ${Date.now() - _t}ms`);
269
+ const _t2 = Date.now();
270
+ await statusCommand();
271
+ console.error(`[timing] statusCommand exec: ${Date.now() - _t2}ms`);
272
+ }
273
+ else {
274
+ const { statusCommand } = await import("./commands/status.js");
275
+ await statusCommand();
276
+ }
277
+ });
278
+ program
279
+ .command("whoami")
280
+ .description("Print current user and project info")
281
+ .action(async () => {
282
+ const { whoamiCommand } = await import("./commands/whoami.js");
283
+ whoamiCommand();
284
+ });
285
+ // RL learning agents now accessible via: jfl agents rl <action>
286
+ // (integrated into existing agents command)
287
+ // IDE workspace command — uses dynamic imports to avoid linter stripping
288
+ const ide = program.command("ide").description("Launch smart development environment (jfl ide) or manage workspace (jfl ide <command>)");
289
+ ide.command("launch", { isDefault: true }).description("Launch workspace (same as 'jfl ide')").option("--json", "Output as JSON").option("--sidebar", "Include sidebar pane (20% width)").action(async (options) => { const m = await import("./commands/ide.js"); await m.ideLaunchCommand(options); });
290
+ ide.command("add").description("Add a surface to the workspace").argument("[name]", "Surface name (agent, built-in type, or service)").option("--row <n>", "Row index (0-based)").option("--position <n>", "Position within row (0-based)").option("--title <title>", "Custom surface title").option("--cmd <command>", "Custom surface command").action(async (name, options) => { const m = await import("./commands/ide.js"); await m.ideAddCommand(name, options); });
291
+ ide.command("remove").description("Remove a surface from the workspace").argument("<name>", "Surface name or title to remove").action(async (name) => { const m = await import("./commands/ide.js"); await m.ideRemoveCommand(name); });
292
+ ide.command("available").description("List available surface types, agents, and services").action(async () => { const m = await import("./commands/ide.js"); await m.ideAvailableCommand(); });
293
+ ide.command("status").description("Show current workspace layout and session state").option("--json", "Output as JSON").action(async (options) => { const m = await import("./commands/ide.js"); await m.ideStatusCommand(options); });
294
+ ide.command("surfaces").description("List active surfaces with live sidebar data").option("--json", "Output as JSON").action(async (options) => { const m = await import("./commands/ide.js"); await m.ideSurfacesCommand(options); });
295
+ ide.command("stop").description("Stop the running workspace session").action(async () => { const m = await import("./commands/ide.js"); await m.ideStopCommand(); });
296
+ ide.command("restart").description("Restart the workspace session").action(async () => { const m = await import("./commands/ide.js"); await m.ideRestartCommand(); });
297
+ ide.command("reset").description("Reset workspace to welcome state").action(async () => { const m = await import("./commands/ide.js"); await m.ideResetCommand(); });
298
+ ide.command("open").description("Open a child project/service in the workspace").argument("<name>", "Service or product name to open").action(async (name) => { const m = await import("./commands/ide.js"); await m.ideOpenCommand(name); });
299
+ ide.command("up").description("Navigate to parent project (portfolio or GTM)").action(async () => { const m = await import("./commands/ide.js"); await m.ideUpCommand(); });
300
+ ide.command("config").description("View or set IDE configuration").argument("[key]", "Config key (e.g., primary, backend)").argument("[value]", "Config value").action(async (key, value) => { const m = await import("./commands/ide.js"); await m.ideConfigCommand(key, value); });
301
+ program
302
+ .command("context-hub")
303
+ .description("Manage Context Hub daemon (unified context for AI agents)")
304
+ .argument("[action]", "start, stop, restart, status, ensure, ensure-all, doctor, dashboard, install-daemon, uninstall-daemon, query, serve")
305
+ .option("-p, --port <port>", "Port to run on (default: per-project)")
306
+ .option("-g, --global", "Run in global mode (serve all GTM projects)")
307
+ .option("-q, --quiet", "Suppress output (for daemon use)")
308
+ .option("--clean", "Remove stale entries (for doctor)")
309
+ .option("--purge", "Also delete token file (for stop)")
310
+ .option("--project-root <path>", "Override project root directory")
311
+ .allowUnknownOption()
312
+ .action(async (action, options) => {
313
+ const { contextHubCommand } = await import("./commands/context-hub.js");
314
+ await contextHubCommand(action, {
315
+ port: options.port ? parseInt(options.port, 10) : undefined,
316
+ global: options.global || false,
317
+ quiet: options.quiet || false,
318
+ projectRoot: options.projectRoot,
319
+ });
320
+ });
321
+ program
322
+ .command("hooks")
323
+ .description("Manage Claude Code HTTP hooks for Context Hub")
324
+ .argument("[action]", "init, status, remove")
325
+ .action(async (action) => {
326
+ const { hooksCommand } = await import("./commands/hooks.js");
327
+ await hooksCommand(action);
328
+ });
329
+ program
330
+ .command("flows")
331
+ .description("Manage declarative event flows")
332
+ .argument("[action]", "list, add, test, enable, disable, approve")
333
+ .argument("[name]", "Flow name (for test/enable/disable)")
334
+ .option("--flow <name>", "Filter approvals to a specific flow")
335
+ .option("--all", "Approve all pending gated executions")
336
+ .action(async (action, name, options) => {
337
+ const { flowsCommand } = await import("./commands/flows.js");
338
+ await flowsCommand(action, name, options);
339
+ });
340
+ program
341
+ .command("scope")
342
+ .description("View and manage service context scopes")
343
+ .argument("[action]", "list, set, test, viz")
344
+ .argument("[args...]", "Arguments for the action")
345
+ .action(async (action, args) => {
346
+ const { scopeCommand } = await import("./commands/scope.js");
347
+ await scopeCommand(action, ...args);
348
+ });
349
+ program
350
+ .command("synopsis")
351
+ .description("Show work summary (journal + commits + code)")
352
+ .argument("[hours]", "Hours to look back (default: 24)", "24")
353
+ .argument("[author]", "Filter by author name")
354
+ .action(async (hours, author) => {
355
+ const { synopsisCommand } = await import("./commands/synopsis.js");
356
+ await synopsisCommand(hours, author);
357
+ });
358
+ program
359
+ .command("service-manager")
360
+ .description("Manage Service Manager API daemon")
361
+ .argument("[action]", "start, stop, restart, status, serve")
362
+ .option("-p, --port <port>", "Port to run on (default: from config or 3402)")
363
+ .action(async (action, options) => {
364
+ const { serviceManagerCommand } = await import("./commands/service-manager.js");
365
+ await serviceManagerCommand(action, {
366
+ port: options.port ? parseInt(options.port, 10) : undefined
367
+ });
368
+ });
369
+ program
370
+ .command("services")
371
+ .description("Manage services across all GTM projects (interactive TUI or CLI)")
372
+ .argument("[action]", "create, scan, list, status, start, stop, deps, validate, sync-agents, or leave empty for TUI")
373
+ .argument("[service]", "Service name")
374
+ .option("--dry-run", "Preview what would be discovered (for scan) or preview sync changes (for sync-agents)")
375
+ .option("--current", "Sync only current service (for sync-agents)")
376
+ .option("--path <path>", "Path to scan (default: current directory)")
377
+ .option("--force", "Force operation (for stop with dependents)")
378
+ .option("--verbose", "Verbose output")
379
+ .option("--fix", "Auto-repair issues (for validate)")
380
+ .option("--json", "Output JSON (for validate)")
381
+ .option("--skip-ai", "Skip AI tool, just scaffold (for create)")
382
+ .action(async (action, service, options) => {
383
+ // Handle scan action
384
+ if (action === "scan") {
385
+ const { scanServices } = await import("./commands/services-scan.js");
386
+ await scanServices({
387
+ path: options.path,
388
+ dryRun: options.dryRun
389
+ });
390
+ return;
391
+ }
392
+ // Handle dependency actions
393
+ if (action === "deps" || action === "dependencies") {
394
+ const { buildDependencyGraph, visualizeDependencies, validateDependencies } = await import("./lib/service-dependencies.js");
395
+ const fs = await import("fs");
396
+ const servicesConfigPath = path.join(JFL_PATHS.data, "services.json");
397
+ const servicesConfig = JSON.parse(fs.readFileSync(servicesConfigPath, "utf-8"));
398
+ if (service === "validate") {
399
+ const result = validateDependencies(servicesConfig.services);
400
+ if (result.valid) {
401
+ console.log(chalk.green("\n✓ All dependencies valid\n"));
402
+ }
403
+ else {
404
+ console.log(chalk.red("\n✗ Dependency validation failed:\n"));
405
+ result.errors.forEach(err => console.log(chalk.red(` - ${err}`)));
406
+ console.log();
407
+ }
408
+ }
409
+ else {
410
+ console.log(visualizeDependencies(servicesConfig.services));
411
+ }
412
+ return;
413
+ }
414
+ // If no action, launch interactive TUI
415
+ if (!action) {
416
+ const { spawn } = await import("child_process");
417
+ const { fileURLToPath } = await import("url");
418
+ const __filename = fileURLToPath(import.meta.url);
419
+ const __dirname = path.dirname(__filename);
420
+ const tui = spawn(process.execPath, [
421
+ path.join(__dirname, "../dist/ui/services-manager.js")
422
+ ], {
423
+ stdio: "inherit"
424
+ });
425
+ tui.on("exit", (code) => {
426
+ process.exit(code || 0);
427
+ });
428
+ }
429
+ else {
430
+ // CLI mode
431
+ const { servicesCommand } = await import("./commands/services.js");
432
+ await servicesCommand(action, service, {
433
+ fix: options.fix,
434
+ json: options.json,
435
+ dryRun: options.dryRun,
436
+ current: options.current,
437
+ skipAI: options.skipAi
438
+ });
439
+ }
440
+ });
441
+ program
442
+ .command("onboard")
443
+ .description("Onboard a service repo as a service agent")
444
+ .argument("<path-or-url>", "Local path to service directory, or git URL to clone")
445
+ .option("-n, --name <name>", "Override service name")
446
+ .option("-t, --type <type>", "Override service type (web, api, container, worker, cli, infrastructure, library)")
447
+ .option("-d, --description <desc>", "Override service description")
448
+ .option("--skip-git", "Skip git clone (treat URL as local path)")
449
+ .action(async (pathOrUrl, options) => {
450
+ const { onboardCommand } = await import("./commands/onboard.js");
451
+ await onboardCommand(pathOrUrl, options);
452
+ });
453
+ program
454
+ .command("orchestrate")
455
+ .description("Execute multi-service orchestration workflows")
456
+ .argument("[name]", "Orchestration name to run (omit to list available)")
457
+ .option("--dry-run", "Preview orchestration steps without executing")
458
+ .option("--list", "List available orchestrations")
459
+ .option("--create <name>", "Create new orchestration template")
460
+ .action(async (name, options) => {
461
+ const { orchestrate, listOrchestrations, createOrchestration } = await import("./commands/orchestrate.js");
462
+ if (options.list) {
463
+ await listOrchestrations();
464
+ }
465
+ else if (options.create) {
466
+ await createOrchestration(options.create);
467
+ }
468
+ else if (name) {
469
+ await orchestrate(name, { dryRun: options.dryRun });
470
+ }
471
+ else {
472
+ await listOrchestrations();
473
+ }
474
+ });
475
+ program
476
+ .command("dashboard")
477
+ .description("Launch interactive service monitoring dashboard")
478
+ .action(async () => {
479
+ const { startDashboard } = await import("./ui/service-dashboard.js");
480
+ await startDashboard();
481
+ });
482
+ program
483
+ .command("service-agent")
484
+ .description("Manage service MCP agents")
485
+ .argument("<action>", "init | generate | generate-all | register | unregister | list | clean")
486
+ .argument("[name]", "Service name (required for generate, unregister)")
487
+ .action(async (action, name) => {
488
+ const { init, generate, generateAll, register, unregister, list, clean } = await import("./commands/service-agent.js");
489
+ switch (action) {
490
+ case "init":
491
+ await init(name); // name is optional path
492
+ break;
493
+ case "generate":
494
+ if (!name) {
495
+ console.log(chalk.red("Error: service name required"));
496
+ console.log(chalk.gray("Usage: jfl service-agent generate <service-name>"));
497
+ process.exit(1);
498
+ }
499
+ await generate(name);
500
+ break;
501
+ case "generate-all":
502
+ await generateAll();
503
+ break;
504
+ case "register":
505
+ await register(name);
506
+ break;
507
+ case "unregister":
508
+ if (!name) {
509
+ console.log(chalk.red("Error: service name required"));
510
+ console.log(chalk.gray("Usage: jfl service-agent unregister <service-name>"));
511
+ process.exit(1);
512
+ }
513
+ await unregister(name);
514
+ break;
515
+ case "list":
516
+ await list();
517
+ break;
518
+ case "clean":
519
+ await clean();
520
+ break;
521
+ default:
522
+ console.log(chalk.red(`Unknown action: ${action}`));
523
+ console.log(chalk.gray("Available actions: init, generate, generate-all, register, unregister, list, clean"));
524
+ process.exit(1);
525
+ }
526
+ });
527
+ program
528
+ .command("profile [action]")
529
+ .description("Manage your JFL profile (stored in config)")
530
+ .argument("[action]", "show, edit, export, import, generate")
531
+ .option("-f, --file <path>", "File path for export/import/generate output")
532
+ .action(async (action, options) => {
533
+ const { profileCommand } = await import("./commands/profile.js");
534
+ await profileCommand(action, options);
535
+ });
536
+ program
537
+ .command("migrate-services")
538
+ .description("Migrate services from references/ to service manager")
539
+ .argument("[gtm-path]", "Path to GTM project (default: current directory)")
540
+ .action(async (gtmPath) => {
541
+ const { migrateServices } = await import("./commands/migrate-services.js");
542
+ await migrateServices(gtmPath);
543
+ });
544
+ // ============================================================================
545
+ // PLATFORM COMMANDS (require login for full features)
546
+ // ============================================================================
547
+ program
548
+ .command("login")
549
+ .description("Login to JFL platform")
550
+ .option("--platform", "Use Platform Account (recommended)")
551
+ .option("--x402", "Use x402 Day Pass ($5/day, crypto)")
552
+ .option("--solo", "Use Solo plan ($49/mo)")
553
+ .option("--team", "Use Team plan ($199/mo)")
554
+ .option("--free", "Stay on trial")
555
+ .option("--force", "Force re-authentication")
556
+ .action(async (options) => {
557
+ const { loginCommand } = await import("./commands/login.js");
558
+ await loginCommand(options);
559
+ });
560
+ program
561
+ .command("logout")
562
+ .description("Logout from JFL platform")
563
+ .action(async () => {
564
+ const { logout } = await import("./commands/login.js");
565
+ logout();
566
+ console.log(chalk.green("Logged out successfully."));
567
+ });
568
+ program
569
+ .command("preferences")
570
+ .description("Manage JFL preferences")
571
+ .option("--clear-ai", "Clear saved AI CLI preference")
572
+ .option("--no-telemetry", "Disable anonymous telemetry")
573
+ .option("--telemetry", "Enable anonymous telemetry")
574
+ .option("--show", "Show current preferences")
575
+ .action(async (options) => {
576
+ const { getConfigValue, deleteConfigKey } = await import("./utils/jfl-config.js");
577
+ if (options.clearAi) {
578
+ deleteConfigKey("aiCLI");
579
+ console.log(chalk.green("\n✓ Cleared AI CLI preference"));
580
+ console.log(chalk.gray(" Next 'jfl' will show selection menu\n"));
581
+ return;
582
+ }
583
+ if (options.telemetry === false) {
584
+ const telemetry = await getTelemetry();
585
+ telemetry.disable();
586
+ console.log(chalk.green("\n✓ Telemetry disabled"));
587
+ console.log(chalk.gray(" No data will be collected\n"));
588
+ return;
589
+ }
590
+ if (options.telemetry === true) {
591
+ const telemetry = await getTelemetry();
592
+ telemetry.enable();
593
+ console.log(chalk.green("\n✓ Telemetry enabled"));
594
+ console.log(chalk.gray(" Anonymous usage data helps improve JFL\n"));
595
+ return;
596
+ }
597
+ if (options.show || (!options.clearAi && options.telemetry === undefined)) {
598
+ const telemetry = await getTelemetry();
599
+ console.log(chalk.bold("\n JFL Preferences\n"));
600
+ console.log(chalk.gray(" AI CLI:") + " " + (getConfigValue("aiCLI") || chalk.gray("none")));
601
+ console.log(chalk.gray(" Projects tracked:") + " " + ((getConfigValue("projects") || []).length));
602
+ console.log(chalk.gray(" Telemetry:") + " " + (telemetry.isEnabled() ? chalk.green("enabled") : chalk.red("disabled")));
603
+ console.log();
604
+ console.log(chalk.gray(" To clear AI preference: jfl preferences --clear-ai"));
605
+ console.log(chalk.gray(" To disable telemetry: jfl preferences --no-telemetry"));
606
+ console.log();
607
+ }
608
+ });
609
+ program
610
+ .command("wallet")
611
+ .description("Show wallet and day pass status")
612
+ .action(async () => {
613
+ const { showDayPassStatus, hasWallet, getWalletAddress } = await import("./utils/auth-guard.js");
614
+ const address = getWalletAddress();
615
+ if (!address) {
616
+ console.log(chalk.yellow("\n⚠️ No wallet configured"));
617
+ console.log(chalk.gray(" Run: jfl login\n"));
618
+ return;
619
+ }
620
+ console.log(chalk.bold("\n💰 Wallet Status\n"));
621
+ console.log(chalk.gray("Address: ") + chalk.cyan(address));
622
+ if (!hasWallet()) {
623
+ console.log(chalk.yellow("Mode: View-only (cannot sign payments)"));
624
+ console.log(chalk.gray("Run 'jfl login' to import signing key"));
625
+ }
626
+ else {
627
+ console.log(chalk.green("Mode: Full (can sign payments)"));
628
+ }
629
+ console.log();
630
+ showDayPassStatus();
631
+ console.log();
632
+ });
633
+ program
634
+ .command("deploy")
635
+ .description("Deploy project to JFL platform")
636
+ .option("-f, --force", "Force deploy even if no changes")
637
+ .action(async (options) => {
638
+ const { deployCommand } = await import("./commands/deploy.js");
639
+ await deployCommand(options);
640
+ });
641
+ program
642
+ .command("agents")
643
+ .description("Manage parallel agents and RL learning agents")
644
+ .argument("[action]", "Action: list, create, start, stop, destroy, rl")
645
+ .argument("[subaction]", "For 'rl': status, dashboard, train, tune, feedback, explain")
646
+ .option("-n, --name <name>", "Agent name")
647
+ .option("-t, --task <task>", "Task for agent")
648
+ .option("--agent <name>", "Target specific RL agent")
649
+ .option("--insight-id <id>", "Insight ID for RL agent feedback")
650
+ .option("--feedback <type>", "RL agent feedback: helpful, not_helpful, needs_adjustment")
651
+ .action(async (action, subaction, options) => {
652
+ if (action === 'rl') {
653
+ const { tenentAgentsCommand } = await import("./commands/tenet-agents.js");
654
+ await tenentAgentsCommand(subaction, options);
655
+ }
656
+ else {
657
+ const { agentsCommand } = await import("./commands/agents.js");
658
+ await agentsCommand(action, options);
659
+ }
660
+ });
661
+ program
662
+ .command("feedback")
663
+ .description("Rate your JFL session")
664
+ .argument("[action]", "view or sync")
665
+ .action(async (action) => {
666
+ const { feedbackCommand } = await import("./commands/feedback.js");
667
+ await feedbackCommand(action);
668
+ });
669
+ program
670
+ .command("update")
671
+ .description("Pull latest JFL product updates")
672
+ .option("--dry", "Show what would be updated without making changes")
673
+ .option("--auto", "Auto mode: check once per 24h, skip if recently updated")
674
+ .action(async (options) => {
675
+ const { updateCommand } = await import("./commands/update.js");
676
+ await updateCommand({ dry: options.dry, autoUpdate: options.auto });
677
+ });
678
+ // ============================================================================
679
+ // SKILL MANAGEMENT (work offline)
680
+ // ============================================================================
681
+ const skills = program.command("skills").description("Manage JFL skills");
682
+ skills
683
+ .command("list")
684
+ .description("List installed or available skills")
685
+ .option("-a, --available", "Show all available skills")
686
+ .option("-c, --category <category>", "Filter by category (core or catalog)")
687
+ .option("-t, --tag <tag>", "Filter by tag")
688
+ .action(async (options) => {
689
+ const { listSkillsCommand } = await import("./commands/skills.js");
690
+ await listSkillsCommand(options);
691
+ });
692
+ skills
693
+ .command("install")
694
+ .description("Install skill(s)")
695
+ .argument("<skills...>", "Skill name(s) to install")
696
+ .action(async (skills) => {
697
+ const { installSkillCommand } = await import("./commands/skills.js");
698
+ await installSkillCommand(skills);
699
+ });
700
+ skills
701
+ .command("remove")
702
+ .description("Remove skill(s)")
703
+ .argument("<skills...>", "Skill name(s) to remove")
704
+ .action(async (skills) => {
705
+ const { removeSkillCommand } = await import("./commands/skills.js");
706
+ await removeSkillCommand(skills);
707
+ });
708
+ skills
709
+ .command("update")
710
+ .description("Update installed skill(s)")
711
+ .argument("[skill]", "Skill name to update (omit to update all)")
712
+ .option("--dry", "Show what would be updated without making changes")
713
+ .action(async (skill, options) => {
714
+ const { updateSkillsCommand } = await import("./commands/skills.js");
715
+ await updateSkillsCommand({ ...options, skillName: skill });
716
+ });
717
+ skills
718
+ .command("search")
719
+ .description("Search for skills")
720
+ .argument("<query>", "Search query")
721
+ .action(async (query) => {
722
+ const { searchSkillsCommand } = await import("./commands/skills.js");
723
+ await searchSkillsCommand(query);
724
+ });
725
+ // ============================================================================
726
+ // VOICE INPUT (work offline)
727
+ // ============================================================================
728
+ const voice = program.command("voice").description("Voice input for JFL");
729
+ voice
730
+ .command("model")
731
+ .description("Manage whisper models")
732
+ .argument("[action]", "list, download, or default")
733
+ .argument("[name]", "Model name (tiny, base, small, etc.)")
734
+ .option("-f, --force", "Force re-download")
735
+ .action(async (action, name, options) => {
736
+ const { voiceCommand } = await import("./commands/voice.js");
737
+ await voiceCommand("model", action, name, options);
738
+ });
739
+ voice
740
+ .command("devices")
741
+ .description("List audio input devices")
742
+ .action(async () => {
743
+ const { voiceCommand } = await import("./commands/voice.js");
744
+ await voiceCommand("devices");
745
+ });
746
+ voice
747
+ .command("test")
748
+ .description("Test voice input (record 3s and transcribe)")
749
+ .option("-d, --device <id>", "Device ID to use")
750
+ .action(async (options) => {
751
+ const { voiceCommand } = await import("./commands/voice.js");
752
+ await voiceCommand("test", undefined, undefined, {
753
+ device: options.device,
754
+ });
755
+ });
756
+ voice
757
+ .command("recording")
758
+ .description("Test recording only (no transcription)")
759
+ .option("-d, --device <id>", "Device ID to use")
760
+ .option("-t, --duration <seconds>", "Recording duration in seconds", "5")
761
+ .action(async (options) => {
762
+ const { voiceCommand } = await import("./commands/voice.js");
763
+ await voiceCommand("recording", undefined, undefined, {
764
+ device: options.device,
765
+ duration: parseInt(options.duration, 10),
766
+ });
767
+ });
768
+ voice
769
+ .command("setup")
770
+ .description("First-time setup wizard for voice input")
771
+ .action(async () => {
772
+ const { voiceCommand } = await import("./commands/voice.js");
773
+ await voiceCommand("setup");
774
+ });
775
+ voice
776
+ .command("record")
777
+ .description("Record voice with VAD (same as running jfl voice)")
778
+ .option("-d, --device <id>", "Device ID to use")
779
+ .action(async (options) => {
780
+ const { voiceCommand } = await import("./commands/voice.js");
781
+ await voiceCommand("record", undefined, undefined, {
782
+ device: options.device,
783
+ });
784
+ });
785
+ voice
786
+ .command("help")
787
+ .description("Show voice command help")
788
+ .action(async () => {
789
+ const { voiceCommand } = await import("./commands/voice.js");
790
+ await voiceCommand("help");
791
+ });
792
+ voice
793
+ .command("hotkey")
794
+ .description("Start global hotkey listener (macOS only)")
795
+ .option("-d, --device <id>", "Device ID to use")
796
+ .option("-m, --mode <mode>", "Hotkey mode: auto, tap, or hold (default: auto)")
797
+ .action(async (options) => {
798
+ const { voiceCommand } = await import("./commands/voice.js");
799
+ await voiceCommand("hotkey", undefined, undefined, {
800
+ device: options.device,
801
+ mode: options.mode,
802
+ });
803
+ });
804
+ // VS-013: Daemon commands for background hotkey listening
805
+ const daemon = voice
806
+ .command("daemon")
807
+ .description("Background hotkey listener daemon (macOS only)");
808
+ daemon
809
+ .command("start")
810
+ .description("Start hotkey listener in background")
811
+ .option("-m, --mode <mode>", "Hotkey mode: auto, tap, or hold (default: auto)")
812
+ .action(async (options) => {
813
+ const { voiceCommand } = await import("./commands/voice.js");
814
+ await voiceCommand("daemon", "start", undefined, {
815
+ mode: options.mode,
816
+ });
817
+ });
818
+ daemon
819
+ .command("stop")
820
+ .description("Stop the background daemon")
821
+ .action(async () => {
822
+ const { voiceCommand } = await import("./commands/voice.js");
823
+ await voiceCommand("daemon", "stop");
824
+ });
825
+ daemon
826
+ .command("status")
827
+ .description("Show daemon status and uptime")
828
+ .action(async () => {
829
+ const { voiceCommand } = await import("./commands/voice.js");
830
+ await voiceCommand("daemon", "status");
831
+ });
832
+ // Default daemon action (show status)
833
+ daemon.action(async () => {
834
+ const { voiceCommand } = await import("./commands/voice.js");
835
+ await voiceCommand("daemon", "status");
836
+ });
837
+ // Running `jfl voice` without subcommand starts recording with VAD
838
+ voice
839
+ .option("-d, --device <id>", "Device ID to use")
840
+ .action(async (options) => {
841
+ const { voiceCommand } = await import("./commands/voice.js");
842
+ await voiceCommand(undefined, undefined, undefined, {
843
+ device: options.device,
844
+ });
845
+ });
846
+ // ============================================================================
847
+ // MEMORY SYSTEM (work offline)
848
+ // ============================================================================
849
+ const memory = program.command("memory").description("Memory system management");
850
+ memory
851
+ .command("init")
852
+ .description("Initialize memory database")
853
+ .action(async () => {
854
+ const { memoryInitCommand } = await import("./commands/memory.js");
855
+ await memoryInitCommand();
856
+ });
857
+ memory
858
+ .command("status")
859
+ .description("Show memory statistics")
860
+ .action(async () => {
861
+ const { memoryStatusCommand } = await import("./commands/memory.js");
862
+ await memoryStatusCommand();
863
+ });
864
+ memory
865
+ .command("search")
866
+ .description("Search memories")
867
+ .argument("<query>", "Search query")
868
+ .option("-t, --type <type>", "Filter by type (feature, fix, decision, etc.)")
869
+ .option("-n, --max <n>", "Maximum results", "10")
870
+ .action(async (query, options) => {
871
+ const { memorySearchCommand } = await import("./commands/memory.js");
872
+ await memorySearchCommand(query, options);
873
+ });
874
+ memory
875
+ .command("index")
876
+ .description("Reindex journal entries")
877
+ .option("-f, --force", "Force full reindex")
878
+ .action(async (options) => {
879
+ const { memoryIndexCommand } = await import("./commands/memory.js");
880
+ await memoryIndexCommand(options);
881
+ });
882
+ // Alias: jfl ask <question> → jfl memory search <question>
883
+ program
884
+ .command("ask")
885
+ .description("Ask a question - searches memory system")
886
+ .argument("<question>", "Question to search for in memory")
887
+ .option("-t, --type <type>", "Filter by type (feature, fix, decision, etc.)")
888
+ .option("-n, --max <n>", "Maximum results", "5")
889
+ .action(async (question, options) => {
890
+ const { memorySearchCommand } = await import("./commands/memory.js");
891
+ await memorySearchCommand(question, options);
892
+ });
893
+ // ============================================================================
894
+ // SKILL SHORTCUTS (work offline)
895
+ // ============================================================================
896
+ program
897
+ .command("brand")
898
+ .description("Run brand architect skill")
899
+ .argument("[subcommand]", "marks, colors, typography, or full")
900
+ .action(async (subcommand) => {
901
+ console.log(chalk.cyan("Running /brand-architect..."));
902
+ console.log(chalk.gray("This skill runs in your Claude Code session."));
903
+ console.log(chalk.yellow("\nRun in Claude Code:"), "/brand-architect", subcommand || "");
904
+ });
905
+ program
906
+ .command("content")
907
+ .description("Run content creator skill")
908
+ .argument("<type>", "thread, post, article, or one-pager")
909
+ .argument("[topic]", "Topic for content")
910
+ .action(async (type, topic) => {
911
+ console.log(chalk.cyan("Running /content..."));
912
+ console.log(chalk.gray("This skill runs in your Claude Code session."));
913
+ console.log(chalk.yellow("\nRun in Claude Code:"), "/content", type, topic || "");
914
+ });
915
+ // ============================================================================
916
+ // RALPH TUI (autonomous task execution)
917
+ // ============================================================================
918
+ program
919
+ .command("ralph")
920
+ .description("AI agent loop orchestrator (ralph-tui)")
921
+ .argument("[command...]", "ralph-tui command and args")
922
+ .option("-h, --help", "Show ralph-tui help")
923
+ .allowUnknownOption()
924
+ .action(async (args, options) => {
925
+ const { ralphCommand, showRalphHelp } = await import("./commands/ralph.js");
926
+ if (options.help || args.length === 0) {
927
+ showRalphHelp();
928
+ return;
929
+ }
930
+ await ralphCommand(args);
931
+ });
932
+ program
933
+ .command("events")
934
+ .description("Live MAP event bus dashboard")
935
+ .option("-p, --pattern <pattern>", "Filter pattern (default: *)")
936
+ .action(async (options) => {
937
+ const { startEventDashboard } = await import("./ui/event-dashboard.js");
938
+ await startEventDashboard({ pattern: options.pattern });
939
+ });
940
+ program
941
+ .command("peter")
942
+ .description("Peter Parker - model-routed agent orchestrator")
943
+ .argument("[action]", "setup, run, pr, experiment, autoresearch, status, agent, or dashboard")
944
+ .argument("[name]", "Agent name (for agent subcommand)")
945
+ .option("--cost", "Cost-optimized model routing (haiku-heavy)")
946
+ .option("--balanced", "Balanced model routing (default)")
947
+ .option("--quality", "Quality-first model routing (opus-heavy)")
948
+ .option("-t, --task <task>", "Task to run (for run action)")
949
+ .option("-r, --rounds <n>", "Number of autoresearch rounds (default: 5)")
950
+ .option("--mode <mode>", "Experiment mode: default or autoresearch")
951
+ .option("--budget <amount>", "Cost budget in USD (Pi runtime: auto-downgrades model when exceeded)")
952
+ .option("--pi", "Force Pi runtime (default: auto-detect based on 'pi' command availability)")
953
+ .action(async (action, name, options) => {
954
+ const { peterCommand } = await import("./commands/peter.js");
955
+ if (name)
956
+ options.name = name;
957
+ await peterCommand(action, options);
958
+ });
959
+ // ============================================================================
960
+ // TEST MODE (for development)
961
+ // ============================================================================
962
+ program
963
+ .command("test")
964
+ .description("Test onboarding flow (isolated environment)")
965
+ .action(() => {
966
+ const __filename = fileURLToPath(import.meta.url);
967
+ const __dirname = join(__filename, "..");
968
+ const scriptPath = join(__dirname, "../scripts/test-onboarding.sh");
969
+ const test = spawn("bash", [scriptPath], {
970
+ stdio: "inherit",
971
+ });
972
+ test.on("error", (err) => {
973
+ console.log(chalk.red("\n❌ Failed to launch test mode"));
974
+ console.log(chalk.gray(" Make sure the test script exists at: scripts/test-onboarding.sh"));
975
+ });
976
+ });
977
+ // ============================================================================
978
+ // CLAWDBOT INTEGRATION
979
+ // ============================================================================
980
+ const clawdbot = program.command("clawdbot").description("Manage JFL plugin for Clawdbot gateway");
981
+ clawdbot
982
+ .command("setup")
983
+ .description("Install JFL plugin into Clawdbot and configure it")
984
+ .action(async () => {
985
+ const { clawdbotSetupCommand } = await import("./commands/clawdbot.js");
986
+ await clawdbotSetupCommand();
987
+ });
988
+ clawdbot
989
+ .command("status")
990
+ .description("Show JFL Clawdbot plugin installation status")
991
+ .action(async () => {
992
+ const { clawdbotStatusCommand } = await import("./commands/clawdbot.js");
993
+ await clawdbotStatusCommand();
994
+ });
995
+ // Default action: show status
996
+ clawdbot.action(async () => {
997
+ const { clawdbotStatusCommand } = await import("./commands/clawdbot.js");
998
+ await clawdbotStatusCommand();
999
+ });
1000
+ // ============================================================================
1001
+ // PIVOT (checkpoint + context reset)
1002
+ // ============================================================================
1003
+ program
1004
+ .command("pivot")
1005
+ .description("Checkpoint current work to journals/memory and signal context reset — same branch, no restart hooks")
1006
+ .option("-s, --summary <text>", "Summary of what you were working on")
1007
+ .option("--push", "Push to remote after pivot")
1008
+ .option("--json", "JSON output")
1009
+ .action(async (options) => {
1010
+ const { pivotCommand } = await import("./commands/pivot.js");
1011
+ await pivotCommand(options);
1012
+ });
1013
+ // ============================================================================
1014
+ // OPENCLAW (runtime-agnostic agent protocol)
1015
+ // ============================================================================
1016
+ const openclaw = program.command("openclaw").description("OpenClaw agent protocol - runtime-agnostic JFL integration");
1017
+ openclaw
1018
+ .command("session-start")
1019
+ .description("Start an agent session (branch, auto-commit, Context Hub)")
1020
+ .requiredOption("-a, --agent <name>", "Agent name/ID")
1021
+ .option("-g, --gtm <path>", "GTM workspace path")
1022
+ .option("--json", "Output JSON")
1023
+ .action(async (options) => {
1024
+ const { sessionStartCommand } = await import("./commands/openclaw.js");
1025
+ await sessionStartCommand(options);
1026
+ });
1027
+ openclaw
1028
+ .command("session-end")
1029
+ .description("End session (commit, merge, cleanup)")
1030
+ .option("-s, --sync", "Sync to GTM parent (for services)")
1031
+ .option("--json", "Output JSON")
1032
+ .action(async (options) => {
1033
+ const { sessionEndCommand } = await import("./commands/openclaw.js");
1034
+ await sessionEndCommand(options);
1035
+ });
1036
+ openclaw
1037
+ .command("heartbeat")
1038
+ .description("Health pulse (auto-commit, check Context Hub)")
1039
+ .option("--json", "Output JSON")
1040
+ .action(async (options) => {
1041
+ const { heartbeatCommand: openclawHeartbeat } = await import("./commands/openclaw.js");
1042
+ await openclawHeartbeat(options);
1043
+ });
1044
+ openclaw
1045
+ .command("context")
1046
+ .description("Get unified context from Context Hub")
1047
+ .option("-q, --query <query>", "Search query")
1048
+ .option("-t, --task-type <type>", "Task type (code, spec, content, strategy, general)")
1049
+ .option("--json", "Output JSON")
1050
+ .action(async (options) => {
1051
+ const { contextCommand } = await import("./commands/openclaw.js");
1052
+ await contextCommand(options);
1053
+ });
1054
+ openclaw
1055
+ .command("journal")
1056
+ .description("Write a journal entry")
1057
+ .requiredOption("--type <type>", "Entry type (feature, fix, decision, milestone, spec, discovery)")
1058
+ .requiredOption("--title <title>", "Entry title")
1059
+ .requiredOption("--summary <summary>", "Entry summary")
1060
+ .option("--detail <detail>", "Full detail")
1061
+ .option("--files <files>", "Comma-separated file paths")
1062
+ .option("--json", "Output JSON")
1063
+ .action(async (options) => {
1064
+ const { journalCommand } = await import("./commands/openclaw.js");
1065
+ await journalCommand(options);
1066
+ });
1067
+ openclaw
1068
+ .command("status")
1069
+ .description("Show agent session state and health")
1070
+ .option("--json", "Output JSON")
1071
+ .action(async (options) => {
1072
+ const { statusCommand: openclawStatus } = await import("./commands/openclaw.js");
1073
+ await openclawStatus(options);
1074
+ });
1075
+ openclaw
1076
+ .command("gtm-list")
1077
+ .description("List registered GTM workspaces")
1078
+ .option("--json", "Output JSON")
1079
+ .action(async (options) => {
1080
+ const { gtmListCommand } = await import("./commands/openclaw.js");
1081
+ await gtmListCommand(options);
1082
+ });
1083
+ openclaw
1084
+ .command("gtm-switch")
1085
+ .description("Switch active GTM workspace")
1086
+ .argument("<gtm-id>", "GTM ID to switch to")
1087
+ .option("--json", "Output JSON")
1088
+ .action(async (gtmId, options) => {
1089
+ const { gtmSwitchCommand } = await import("./commands/openclaw.js");
1090
+ await gtmSwitchCommand(gtmId, options);
1091
+ });
1092
+ openclaw
1093
+ .command("gtm-create")
1094
+ .description("Create and register a new GTM workspace")
1095
+ .argument("<name>", "GTM workspace name")
1096
+ .option("-p, --path <dir>", "Target directory")
1097
+ .option("--json", "Output JSON")
1098
+ .action(async (name, options) => {
1099
+ const { gtmCreateCommand } = await import("./commands/openclaw.js");
1100
+ await gtmCreateCommand(name, options);
1101
+ });
1102
+ openclaw
1103
+ .command("register")
1104
+ .description("Register agent with a GTM workspace")
1105
+ .requiredOption("-g, --gtm <path>", "GTM workspace path")
1106
+ .option("-a, --agent <name>", "Agent name (auto-detected from manifest)")
1107
+ .option("--json", "Output JSON")
1108
+ .action(async (options) => {
1109
+ const { registerCommand } = await import("./commands/openclaw.js");
1110
+ await registerCommand(options);
1111
+ });
1112
+ openclaw
1113
+ .command("tag")
1114
+ .description("Send message to a service agent")
1115
+ .argument("<service>", "Service name")
1116
+ .argument("<message>", "Message to send")
1117
+ .option("--json", "Output JSON")
1118
+ .action(async (service, message, options) => {
1119
+ const { tagCommand } = await import("./commands/openclaw.js");
1120
+ await tagCommand(service, message, options);
1121
+ });
1122
+ openclaw
1123
+ .command("install-skill")
1124
+ .description("Install jfl-gtm skill into OpenClaw (~/.openclaw/skills/)")
1125
+ .option("--dir <path>", "Custom install directory")
1126
+ .action(async (options) => {
1127
+ const { installSkillCommand } = await import("./commands/openclaw.js");
1128
+ await installSkillCommand(options);
1129
+ });
1130
+ // ============================================================================
1131
+ // CI WORKFLOWS
1132
+ // ============================================================================
1133
+ const ci = program.command("ci").description("CI/CD workflow management");
1134
+ ci
1135
+ .command("setup")
1136
+ .description("Deploy eval + review CI workflows to .github/workflows/")
1137
+ .action(async () => {
1138
+ const { ciSetupCommand } = await import("./commands/ci-setup.js");
1139
+ await ciSetupCommand();
1140
+ });
1141
+ ci.action(() => {
1142
+ ci.outputHelp();
1143
+ });
1144
+ // ============================================================================
1145
+ // EVAL FRAMEWORK
1146
+ // ============================================================================
1147
+ // Lazy command registration — modules loaded only when command is invoked
1148
+ // (was: registerXxxCommand eager imports adding ~200ms to startup)
1149
+ // --- eval ---
1150
+ const evalCmd = program.command("eval").description("Eval framework — track agent metrics over time");
1151
+ evalCmd.command("list").description("List recent eval entries").option("--agent <name>", "Filter by agent name").option("--limit <n>", "Max entries to show", "20").action(async (options) => { const m = await import("./commands/eval.js"); await m.listCommand(options); });
1152
+ evalCmd.command("trajectory").description("Show metric trajectory over time").requiredOption("--agent <name>", "Agent name").option("--metric <name>", "Metric to plot (default: composite)").action(async (options) => { const m = await import("./commands/eval.js"); await m.trajectoryCommand(options); });
1153
+ evalCmd.command("log").description("Log an eval entry").requiredOption("--agent <name>", "Agent name").requiredOption("--metrics <json>", "Metrics as JSON object").option("--composite <n>", "Composite score").option("--model-version <v>", "Model version").option("--dataset <ds>", "Dataset name").option("--run-id <id>", "Run ID").option("--notes <text>", "Notes").action(async (options) => { const m = await import("./commands/eval.js"); await m.logCommand(options); });
1154
+ evalCmd.command("compare").description("Compare agents side-by-side").requiredOption("--agents <list>", "Comma-separated agent names").option("--metric <name>", "Metric to compare (default: composite)").action(async (options) => { const m = await import("./commands/eval.js"); await m.compareCommand(options); });
1155
+ evalCmd.command("tuples").description("Extract training tuples from journals").option("--team <name>", "Filter by team").option("--since <date>", "Only tuples after this date").option("--report", "Full markdown report").action(async (options) => { const m = await import("./commands/eval.js"); await m.tuplesCommand(options); });
1156
+ evalCmd.command("buffer").description("View or export RL training buffer (.jfl/training-buffer.jsonl)").option("--export", "Export as JSONL for policy head training").option("--limit <n>", "Max entries to show", "10").action(async (options) => { const m = await import("./commands/eval.js"); await m.bufferCommand(options); });
1157
+ evalCmd.command("mine").description("Mine training tuples from journals, events, telemetry, and eval history").option("--all", "Scan all JFL projects (from ~/.config/jfl/config.json)").option("--telemetry", "Include global telemetry archive (58k+ events)").option("--dry-run", "Show what would be mined without writing").option("--dir <path>", "Specific directory to mine").action(async (options) => { const m = await import("./commands/eval.js"); await m.mineCommand(options); });
1158
+ evalCmd.command("train").description("Train policy head from training buffer (requires STRATUS_API_KEY)").option("--epochs <n>", "Training epochs", "50").option("--lr <rate>", "Learning rate", "0.0001").action(async (options) => { const m = await import("./commands/eval.js"); await m.trainCommand(options); });
1159
+ evalCmd.action(async () => { const m = await import("./commands/eval.js"); await m.listCommand({}); });
1160
+ // --- predict ---
1161
+ const predictCmd = program.command("predict").description("Predict eval score delta before executing changes (Stratus world model)");
1162
+ predictCmd.command("run").description("Generate a prediction for a proposed change").requiredOption("--proposal <text>", "Description of the proposed change").requiredOption("--goal <text>", "Goal expression (e.g. 'test_pass_rate > 0.9')").option("--score <n>", "Current composite score", "0").option("--type <type>", "Change type: fix, refactor, feature, config", "fix").option("--scope <scope>", "Change scope: small, medium, large", "medium").option("--files <list>", "Comma-separated affected files").option("--failing-evals <list>", "Comma-separated failing eval names").action(async (options) => { const m = await import("./commands/predict.js"); await m.predictCommand(options); });
1163
+ predictCmd.command("resolve").description("Resolve a prediction with actual results").requiredOption("--id <prediction_id>", "Prediction ID to resolve").requiredOption("--actual-delta <n>", "Actual score delta").requiredOption("--actual-score <n>", "Actual final score").requiredOption("--eval-run <id>", "Eval run ID").action(async (options) => { const m = await import("./commands/predict.js"); await m.resolveCommand({ resolve: options.id, actualDelta: options.actualDelta, actualScore: options.actualScore, evalRun: options.evalRun }); });
1164
+ predictCmd.command("accuracy").description("Show prediction accuracy statistics").action(async () => { const m = await import("./commands/predict.js"); await m.accuracyCommand(); });
1165
+ predictCmd.command("history").description("Show recent predictions").option("--limit <n>", "Max entries to show", "20").action(async (options) => { const m = await import("./commands/predict.js"); await m.historyCommand(options); });
1166
+ predictCmd.action(async () => { console.log(chalk.bold("\n Stratus Prediction Engine\n")); console.log(chalk.gray(" Commands:")); console.log(chalk.gray(' jfl predict run --proposal "..." --goal "..." Generate prediction')); console.log(chalk.gray(" jfl predict resolve --id <id> ... Resolve with actuals")); console.log(chalk.gray(" jfl predict accuracy Show accuracy stats")); console.log(chalk.gray(" jfl predict history Recent predictions")); console.log(); });
1167
+ // --- portfolio ---
1168
+ const portfolioCmd = program.command("portfolio").description("Manage portfolio of GTM workspaces");
1169
+ portfolioCmd.command("register <path>").description("Register a GTM workspace in this portfolio").action(async (gtmPath) => { const m = await import("./commands/portfolio.js"); await m.portfolioRegisterCommand(gtmPath); });
1170
+ portfolioCmd.command("list").description("List registered GTM workspaces").action(async () => { const m = await import("./commands/portfolio.js"); await m.portfolioListCommand(); });
1171
+ portfolioCmd.command("unregister <name>").description("Remove a GTM workspace from this portfolio").action(async (name) => { const m = await import("./commands/portfolio.js"); await m.portfolioUnregisterCommand(name); });
1172
+ portfolioCmd.command("status").description("Portfolio health and eval summary").action(async () => { const m = await import("./commands/portfolio.js"); await m.portfolioStatusCommand(); });
1173
+ portfolioCmd.command("phone-home").description("Sync this GTM's journals and activity to its portfolio parent").action(async () => { const m = await import("./commands/portfolio.js"); await m.portfolioPhoneHomeCommand(); });
1174
+ // --- viz ---
1175
+ const vizCmd = program.command("viz").description("Terminal visualizations — headless dashboard data via Context Hub");
1176
+ vizCmd.command("experiments").description("Show experiment runs with dot plot, sparklines, and score table").option("--agent <name>", "Filter to a specific agent").option("--json", "Output as JSON").action(async (options) => { const m = await import("./commands/viz.js"); await m.experimentsCommand(options); });
1177
+ vizCmd.command("leaderboard").description("Ranked agent leaderboard with sparklines and bar chart").option("--json", "Output as JSON").action(async (options) => { const m = await import("./commands/viz.js"); await m.leaderboardCommand(options); });
1178
+ vizCmd.command("flows").description("Flow definitions and pending executions").option("--pending", "Show only pending approval executions").option("--json", "Output as JSON").action(async (options) => { const m = await import("./commands/viz.js"); await m.flowsVizCommand(options); });
1179
+ vizCmd.command("events").description("Recent event stream with type coloring").option("--pattern <pattern>", "Filter events by type pattern").option("--limit <n>", "Max events to show", "20").option("--json", "Output as JSON").action(async (options) => { const m = await import("./commands/viz.js"); await m.eventsCommand(options); });
1180
+ vizCmd.command("status").description("Hub health, children, sources, item count").option("--json", "Output as JSON").action(async (options) => { const m = await import("./commands/viz.js"); await m.statusCommand(options); });
1181
+ vizCmd.command("dash").description("Composite dashboard — leaderboard, pending flows, events, status").option("--json", "Output as JSON").action(async (options) => { const m = await import("./commands/viz.js"); await m.dashCommand(options); });
1182
+ vizCmd.command("loop").description("Self-driving loop pipeline — detect, propose, eval, merge, learn").option("--days <n>", "Lookback period in days", "7").option("--json", "Output as JSON").action(async (options) => { const m = await import("./commands/viz.js"); await m.loopCommand(options); });
1183
+ vizCmd.command("learning").description("Policy head learning curve — tuples, accuracy, action rewards").option("--json", "Output as JSON").action(async (options) => { const m = await import("./commands/viz.js"); await m.learningCommand(options); });
1184
+ vizCmd.command("fleet").description("VM fleet status — parallel agent waves and tuple collection").option("--wave <id>", "Filter to a specific wave ID").option("--json", "Output as JSON").action(async (options) => { const m = await import("./commands/viz.js"); await m.fleetCommand(options); });
1185
+ vizCmd.action(async () => { const m = await import("./commands/viz.js"); await m.dashCommand({}); });
1186
+ // --- findings ---
1187
+ const findingsCmd = program.command("findings").description("Surface and fix problems automatically");
1188
+ findingsCmd.command("list", { isDefault: true }).description("List current findings").option("--refresh", "Re-analyze before listing").option("--all", "Include dismissed findings").action(async (options) => { const m = await import("./commands/findings.js"); await m.listCommand(options); });
1189
+ findingsCmd.command("fix <n>").description("Spawn an agent to fix finding #n").action(async (n) => { const m = await import("./commands/findings.js"); await m.fixCommand(n); });
1190
+ findingsCmd.command("dismiss <n>").description("Dismiss finding #n").action(async (n) => { const m = await import("./commands/findings.js"); await m.dismissCommand(n); });
1191
+ findingsCmd.command("analyze").description("Force re-analyze the project").action(async () => { const m = await import("./commands/findings.js"); await m.analyzeCommand(); });
1192
+ findingsCmd.action(async () => { const m = await import("./commands/findings.js"); await m.listCommand({}); });
1193
+ // --- verify ---
1194
+ program.command("verify").description("Run TLA+ model checking on system specs")
1195
+ .option("-s, --spec <name>", "Check a specific spec (default: all)")
1196
+ .option("-t, --timeout <seconds>", "TLC timeout in seconds", "120")
1197
+ .option("--apalache", "Use Apalache (symbolic bounded) instead of TLC")
1198
+ .option("-v, --verbose", "Show full TLC output")
1199
+ .option("--json", "Output results as JSON (pipe-friendly)")
1200
+ .action(async (options) => { const m = await import("./commands/verify.js"); await m.verifyCommand({ ...options, timeout: parseInt(options.timeout) }); });
1201
+ // ============================================================================
1202
+ // TELEMETRY
1203
+ // ============================================================================
1204
+ const telemetryCmd = program.command("telemetry").description("Manage anonymous usage telemetry");
1205
+ // Digest command registered lazily (was: registerDigestCommand)
1206
+ telemetryCmd
1207
+ .command('digest')
1208
+ .description('Analyze telemetry events: costs, stats, and suggestions')
1209
+ .option('--hours <hours>', 'Analysis period in hours', '24')
1210
+ .option('--format <format>', 'Output format: text or json', 'text')
1211
+ .option('--plots', 'Render terminal charts for key metrics')
1212
+ .option('--platform', 'Include platform-side data (requires network)')
1213
+ .action(async (options) => { const m = await import("./commands/digest.js"); await m.digestCommand(options); });
1214
+ telemetryCmd
1215
+ .command("status")
1216
+ .description("Show telemetry status")
1217
+ .action(async () => {
1218
+ const telemetry = await getTelemetry();
1219
+ const enabled = telemetry.isEnabled();
1220
+ const installId = telemetry.getInstallId();
1221
+ const queueSize = telemetry.getQueueSize();
1222
+ const spillover = telemetry.getSpilloverEvents();
1223
+ console.log(chalk.bold("\n Telemetry Status\n"));
1224
+ console.log(chalk.gray(" Enabled: ") + (enabled ? chalk.green("yes") : chalk.red("no")));
1225
+ if (enabled) {
1226
+ console.log(chalk.gray(" Install ID: ") + chalk.cyan(installId));
1227
+ console.log(chalk.gray(" Queue: ") + `${queueSize} events pending`);
1228
+ console.log(chalk.gray(" Spillover: ") + `${spillover.length} events on disk`);
1229
+ }
1230
+ console.log(chalk.gray("\n Disable: jfl preferences --no-telemetry"));
1231
+ console.log(chalk.gray(" Or set: JFL_TELEMETRY=0\n"));
1232
+ });
1233
+ telemetryCmd
1234
+ .command("show")
1235
+ .description("Show recent telemetry events from spillover queue")
1236
+ .action(async () => {
1237
+ const telemetry = await getTelemetry();
1238
+ const spillover = telemetry.getSpilloverEvents();
1239
+ if (spillover.length === 0) {
1240
+ console.log(chalk.gray("\n No events in spillover queue.\n"));
1241
+ return;
1242
+ }
1243
+ console.log(chalk.bold(`\n Last ${Math.min(spillover.length, 20)} events:\n`));
1244
+ for (const event of spillover.slice(-20)) {
1245
+ const time = event.ts.replace('T', ' ').slice(0, 19);
1246
+ console.log(chalk.gray(` [${time}]`) + ` ${chalk.cyan(event.event)}` + (event.duration_ms ? chalk.gray(` ${event.duration_ms}ms`) : ''));
1247
+ }
1248
+ console.log();
1249
+ });
1250
+ telemetryCmd
1251
+ .command("reset")
1252
+ .description("Reset install ID (generates new anonymous ID)")
1253
+ .action(async () => {
1254
+ const telemetry = await getTelemetry();
1255
+ telemetry.resetInstallId();
1256
+ console.log(chalk.green("\n Install ID reset. New ID: ") + chalk.cyan(telemetry.getInstallId()) + "\n");
1257
+ });
1258
+ telemetryCmd
1259
+ .command("track")
1260
+ .description("Emit a telemetry event (for shell scripts/hooks)")
1261
+ .requiredOption("--category <category>", "Event category (command, error, context_hub, session, performance)")
1262
+ .requiredOption("--event <event>", "Event name (e.g., hook:session_init)")
1263
+ .option("--duration <ms>", "Duration in milliseconds")
1264
+ .option("--success <bool>", "Whether the operation succeeded")
1265
+ .option("--endpoint <endpoint>", "HTTP endpoint")
1266
+ .option("--error-type <type>", "Error type")
1267
+ .option("--error-code <code>", "Error code")
1268
+ .allowUnknownOption()
1269
+ .action(async (options) => {
1270
+ const telemetry = await getTelemetry();
1271
+ telemetry.track({
1272
+ category: options.category,
1273
+ event: options.event,
1274
+ duration_ms: options.duration ? parseInt(options.duration, 10) : undefined,
1275
+ success: options.success !== undefined ? options.success === 'true' : undefined,
1276
+ endpoint: options.endpoint,
1277
+ error_type: options.errorType,
1278
+ error_code: options.errorCode,
1279
+ });
1280
+ await telemetry.flush();
1281
+ });
1282
+ telemetryCmd
1283
+ .command("monitor")
1284
+ .description("Monitor physical-world telemetry data in real-time")
1285
+ .option("--live", "Live monitoring with auto-refresh")
1286
+ .option("--compact", "Compact display mode")
1287
+ .option("--interval <seconds>", "Update interval in seconds (default: 5)", "5")
1288
+ .option("--filter <pattern>", "Filter events by category, event name, or content")
1289
+ .action(async (options) => {
1290
+ const { telemetryMonitorCommand } = await import("./commands/telemetry-monitor.js");
1291
+ await telemetryMonitorCommand(options);
1292
+ });
1293
+ telemetryCmd
1294
+ .command("test")
1295
+ .description("Generate test physical-world telemetry data (for testing)")
1296
+ .option("--count <n>", "Number of events to generate (default: 10)", "10")
1297
+ .option("--interval <ms>", "Interval between events in ms (default: 1000)", "1000")
1298
+ .option("--categories <list>", "Comma-separated event categories (default: command,performance,session)")
1299
+ .action(async (options) => {
1300
+ const { telemetryTestCommand } = await import("./commands/telemetry-test.js");
1301
+ await telemetryTestCommand(options);
1302
+ });
1303
+ // Default telemetry action
1304
+ telemetryCmd.action(async () => {
1305
+ // Show status by default
1306
+ const telemetry = await getTelemetry();
1307
+ const enabled = telemetry.isEnabled();
1308
+ const installId = telemetry.getInstallId();
1309
+ console.log(chalk.bold("\n Telemetry Status\n"));
1310
+ console.log(chalk.gray(" Enabled: ") + (enabled ? chalk.green("yes") : chalk.red("no")));
1311
+ if (enabled) {
1312
+ console.log(chalk.gray(" Install ID: ") + chalk.cyan(installId));
1313
+ }
1314
+ console.log(chalk.gray("\n Commands:"));
1315
+ console.log(" jfl telemetry status Show detailed status");
1316
+ console.log(" jfl telemetry show Show queued events");
1317
+ console.log(" jfl telemetry digest Cost and health analysis");
1318
+ console.log(" jfl telemetry monitor Monitor physical-world data");
1319
+ console.log(" jfl telemetry reset Reset install ID");
1320
+ console.log();
1321
+ });
1322
+ // ============================================================================
1323
+ // IMPROVE
1324
+ // ============================================================================
1325
+ program
1326
+ .command("organize")
1327
+ .description("Audit knowledge docs for staleness, propose updates, manage lifecycle")
1328
+ .option("--fix", "Generate PENDING.md with proposed updates and open questions")
1329
+ .option("--apply", "Apply reviewed changes from PENDING.md")
1330
+ .option("--archive", "Move archive-candidate docs to knowledge/archive/")
1331
+ .option("--days <days>", "Journal lookback period in days", "30")
1332
+ .action(async (options) => {
1333
+ const { organizeCommand } = await import("./commands/organize.js");
1334
+ await organizeCommand({ ...options, days: parseInt(options.days || "30") });
1335
+ });
1336
+ program
1337
+ .command("improve")
1338
+ .description("Analyze telemetry and suggest improvements")
1339
+ .option("--dry-run", "Preview suggestions without creating issues")
1340
+ .option("--auto", "Create GitHub issues for actionable suggestions")
1341
+ .option("--hours <hours>", "Analysis period in hours", "24")
1342
+ .action(async (options) => {
1343
+ const { improveCommand } = await import("./commands/improve.js");
1344
+ await improveCommand(options);
1345
+ });
1346
+ // ============================================================================
1347
+ // DOCTOR (unified health check)
1348
+ // ============================================================================
1349
+ program
1350
+ .command("doctor")
1351
+ .description("Check project health and auto-repair")
1352
+ .option("--fix", "Auto-repair fixable issues")
1353
+ .option("--json", "Output structured JSON (machine-readable)")
1354
+ .action(async (options) => {
1355
+ const { doctorCommand } = await import("./commands/doctor.js");
1356
+ await doctorCommand({ fix: options.fix, json: options.json });
1357
+ });
1358
+ // ============================================================================
1359
+ // TRAIN (policy head training pipeline)
1360
+ // ============================================================================
1361
+ const train = program.command("train").description("Policy head training pipeline");
1362
+ train
1363
+ .command("policy-head")
1364
+ .description("Train policy head (v2 transformer by default, --v1 for legacy MLP)")
1365
+ .option("-f, --force", "Train even if threshold not met")
1366
+ .option("--v1", "Use v1 MLP trainer instead of v2 transformer")
1367
+ .option("--epochs <n>", "Max training epochs")
1368
+ .option("--lr <rate>", "Learning rate")
1369
+ .option("--batch-size <n>", "Batch size")
1370
+ .option("--min-entries <n>", "Minimum entries required")
1371
+ .option("-o, --output <path>", "Output path for weights (v1 only)")
1372
+ .option("-a, --agent <name>", "Filter training data to specific agent")
1373
+ .action(async (options) => {
1374
+ const { trainPolicyHead } = await import("./commands/train.js");
1375
+ await trainPolicyHead(options);
1376
+ });
1377
+ train
1378
+ .command("transform")
1379
+ .description("Transform training buffer to v2 format (current_state, goal, correct_tool)")
1380
+ .option("--all", "Include entries where improved=false")
1381
+ .action(async (options) => {
1382
+ const { trainTransform } = await import("./commands/train.js");
1383
+ await trainTransform(options);
1384
+ });
1385
+ train
1386
+ .command("generate")
1387
+ .description("Generate synthetic training data for v2 policy head")
1388
+ .option("--goals-per-tool <n>", "Goals to generate per tool (default: 50)")
1389
+ .option("--states-per-goal <n>", "States to generate per goal (default: 2)")
1390
+ .action(async (options) => {
1391
+ const { trainGenerate } = await import("./commands/train.js");
1392
+ await trainGenerate(options);
1393
+ });
1394
+ train
1395
+ .command("eval")
1396
+ .description("Evaluate v2 policy head — per-tool accuracy report")
1397
+ .option("--split <name>", "Which split to evaluate: train/val/test (default: test)")
1398
+ .action(async (options) => {
1399
+ const { trainEval } = await import("./commands/train.js");
1400
+ await trainEval(options);
1401
+ });
1402
+ train
1403
+ .command("status")
1404
+ .description("Show training data stats, model info, and threshold")
1405
+ .action(async () => {
1406
+ const { trainStatus } = await import("./commands/train.js");
1407
+ await trainStatus();
1408
+ });
1409
+ train
1410
+ .command("export")
1411
+ .description("Export training data for external tools")
1412
+ .option("--format <fmt>", "Export format: jsonl or csv (default: jsonl)")
1413
+ .action(async (options) => {
1414
+ const { trainExport } = await import("./commands/train.js");
1415
+ await trainExport(options);
1416
+ });
1417
+ train
1418
+ .command("check")
1419
+ .description("Check if training threshold is met")
1420
+ .option("-q, --quiet", "Quiet mode — exit code only")
1421
+ .action(async (options) => {
1422
+ const { trainThresholdCheck } = await import("./commands/train.js");
1423
+ const ready = await trainThresholdCheck(options);
1424
+ if (!ready)
1425
+ process.exitCode = 1;
1426
+ });
1427
+ train.action(async () => {
1428
+ const { trainStatus } = await import("./commands/train.js");
1429
+ await trainStatus();
1430
+ });
1431
+ // ============================================================================
1432
+ // AGENT (narrowly-scoped agent scaffolding)
1433
+ // ============================================================================
1434
+ const agent = program.command("agent").description("Manage narrowly-scoped agents");
1435
+ agent
1436
+ .command("init")
1437
+ .description("Scaffold a new agent (manifest + policy + flows)")
1438
+ .argument("<name>", "Agent name (lowercase, hyphens allowed)")
1439
+ .option("-d, --description <desc>", "Agent description")
1440
+ .action(async (name, options) => {
1441
+ const { agentCommand } = await import("./commands/agent.js");
1442
+ await agentCommand("init", name, { description: options.description });
1443
+ });
1444
+ agent
1445
+ .command("list")
1446
+ .description("List registered agents")
1447
+ .action(async () => {
1448
+ const { agentCommand } = await import("./commands/agent.js");
1449
+ await agentCommand("list");
1450
+ });
1451
+ agent
1452
+ .command("status")
1453
+ .description("Show agent health and config")
1454
+ .argument("<name>", "Agent name")
1455
+ .action(async (name) => {
1456
+ const { agentCommand } = await import("./commands/agent.js");
1457
+ await agentCommand("status", name);
1458
+ });
1459
+ agent.action(async () => {
1460
+ const { agentCommand } = await import("./commands/agent.js");
1461
+ await agentCommand();
1462
+ });
1463
+ // ============================================================================
1464
+ // SETUP (auto-configure RL agents from project context)
1465
+ // ============================================================================
1466
+ program
1467
+ .command("setup")
1468
+ .description("Progressive intelligent setup - personalized RL agents based on your development patterns")
1469
+ .option("--dry-run", "Show recommendations without writing files")
1470
+ .option("-f, --force", "Proceed even if readiness check fails")
1471
+ .option("--from-violations", "Generate agents from TLC invariant violations")
1472
+ .option("--smart", "Use Stratus reasoning for agent recommendations")
1473
+ .action(async (options) => {
1474
+ const { setupCommand } = await import("./commands/setup.js");
1475
+ await setupCommand(options);
1476
+ });
1477
+ // ============================================================================
1478
+ // GTM COMMANDS
1479
+ // ============================================================================
1480
+ const gtm = program.command("gtm").description("GTM workspace management");
1481
+ gtm
1482
+ .command("process-service-update")
1483
+ .description("Process service sync notification (called by hooks)")
1484
+ .argument("[event-file]", "Path to service sync event JSON file")
1485
+ .action(async (eventFile) => {
1486
+ const { gtmProcessUpdate } = await import("./commands/gtm-process-update.js");
1487
+ await gtmProcessUpdate(eventFile);
1488
+ });
1489
+ // ============================================================================
1490
+ // PI INTEGRATION
1491
+ // ============================================================================
1492
+ const piCmd = program
1493
+ .command("pi")
1494
+ .description("Pi AI agent runtime — launch JFL with Pi extensions, multi-provider LLM, agent grid")
1495
+ .option("--provider <name>", "AI provider (anthropic, google, openai, openrouter)")
1496
+ .option("--model <id>", "Model ID or pattern (e.g. claude-opus-4-6, *sonnet*, gpt-4o)")
1497
+ .option("--thinking <level>", "Thinking level: off, low, medium, high, xhigh")
1498
+ .option("--yolo", "Skip all permission prompts (pass-through to Pi)")
1499
+ .option("--mode <mode>", "Pi mode: interactive (default), rpc, headless")
1500
+ .option("--task <task>", "Task for RPC/headless mode")
1501
+ .option("--onboarding <v1|v2|v3>", "Onboarding variant: v1 (minimal), v2 (cinematic), v3 (mission control)")
1502
+ .allowUnknownOption(true)
1503
+ .action(async (options, cmd) => {
1504
+ const { piCommand } = await import("./commands/pi.js");
1505
+ await piCommand(options, cmd.args);
1506
+ });
1507
+ const piAgents = piCmd.command("agents").description("Manage Pi agent team sessions");
1508
+ piAgents
1509
+ .command("run")
1510
+ .description("Spawn agent team as Pi RPC subprocesses")
1511
+ .option("--team <yaml>", "Team configuration YAML", "teams/gtm-team.yaml")
1512
+ .option("--dry-run", "Show what would be spawned without spawning")
1513
+ .action(async (options) => {
1514
+ const { piAgentsRunCommand } = await import("./commands/pi.js");
1515
+ await piAgentsRunCommand(options);
1516
+ });
1517
+ // ============================================================================
1518
+ const piFleet = piCmd.command("fleet").description("VM agent fleet — spawn, collect, destroy waves of autonomous agents");
1519
+ piFleet
1520
+ .command("setup")
1521
+ .description("Install VM backend, check boot arg, create base image")
1522
+ .option("--backend <name>", "VM backend: lume (default)", "lume")
1523
+ .option("--cpus <n>", "CPUs per VM", "4")
1524
+ .option("--memory <mb>", "Memory per VM in MB", "4096")
1525
+ .option("--skip-boot-arg", "Skip VM quota boot arg check")
1526
+ .action(async (options) => {
1527
+ const { fleetSetup } = await import("./commands/pi-fleet.js");
1528
+ await fleetSetup({ ...options, cpus: parseInt(options.cpus), memory: parseInt(options.memory) });
1529
+ });
1530
+ piFleet
1531
+ .command("spawn <count>")
1532
+ .description("Spawn N agent VMs for parallel autoresearch")
1533
+ .option("--rounds <n>", "Autoresearch rounds per agent", "5")
1534
+ .option("--repo <url>", "Target repo (defaults to git remote origin)")
1535
+ .action(async (count, options) => {
1536
+ const { fleetSpawn } = await import("./commands/pi-fleet.js");
1537
+ await fleetSpawn(parseInt(count), { ...options, rounds: parseInt(options.rounds) });
1538
+ });
1539
+ piFleet
1540
+ .command("status")
1541
+ .description("Show running agents, tuple counts, health")
1542
+ .action(async () => {
1543
+ const { fleetStatus } = await import("./commands/pi-fleet.js");
1544
+ await fleetStatus();
1545
+ });
1546
+ piFleet
1547
+ .command("collect [waveId]")
1548
+ .description("Pull tuples from agents, dedup, append to training buffer")
1549
+ .action(async (waveId) => {
1550
+ const { fleetCollect } = await import("./commands/pi-fleet.js");
1551
+ await fleetCollect(waveId);
1552
+ });
1553
+ piFleet
1554
+ .command("destroy [waveId]")
1555
+ .description("Tear down a wave of agent VMs")
1556
+ .action(async (waveId) => {
1557
+ const { fleetDestroy } = await import("./commands/pi-fleet.js");
1558
+ await fleetDestroy(waveId);
1559
+ });
1560
+ piFleet
1561
+ .command("logs <agent>")
1562
+ .description("Tail an agent's autoresearch log")
1563
+ .action(async (agent) => {
1564
+ const { fleetLogs } = await import("./commands/pi-fleet.js");
1565
+ await fleetLogs(agent);
1566
+ });
1567
+ // ============================================================================
1568
+ // Kanban
1569
+ // ============================================================================
1570
+ const kanban = program
1571
+ .command("kanban")
1572
+ .description("Task board — cards flow backlog → in_progress → eval → done");
1573
+ kanban
1574
+ .command("ls")
1575
+ .description("Show the board")
1576
+ .option("--json", "JSON output")
1577
+ .option("--column <col>", "Filter by column")
1578
+ .option("--scope <name>", "Filter by service scope")
1579
+ .option("--label <tag>", "Filter by label")
1580
+ .option("--compact", "Compact view")
1581
+ .action(async (options) => {
1582
+ const { kanbanLs } = await import("./commands/kanban.js");
1583
+ await kanbanLs(process.cwd(), options);
1584
+ });
1585
+ kanban
1586
+ .command("add <title>")
1587
+ .description("Add a card to backlog")
1588
+ .option("--description <desc>", "Card description")
1589
+ .option("--priority <n>", "Priority (higher = first)")
1590
+ .option("--source <src>", "Source: human, agent, setup, verify, findings")
1591
+ .option("--scope <name>", "Service scope (auto-detected from config)")
1592
+ .option("--label <tag...>", "Labels (repeatable)")
1593
+ .action(async (title, options) => {
1594
+ const { kanbanAdd } = await import("./commands/kanban.js");
1595
+ await kanbanAdd(process.cwd(), title, options);
1596
+ });
1597
+ kanban
1598
+ .command("move <id> <column>")
1599
+ .description("Move card to column (backlog, in_progress, eval, done)")
1600
+ .option("--agent <name>", "Agent performing the move")
1601
+ .action(async (id, column, options) => {
1602
+ const { kanbanMove } = await import("./commands/kanban.js");
1603
+ await kanbanMove(process.cwd(), id, column, options);
1604
+ });
1605
+ kanban
1606
+ .command("pick")
1607
+ .description("Pick top card from backlog (outputs title for piping)")
1608
+ .option("--agent <name>", "Agent picking the card")
1609
+ .action(async (options) => {
1610
+ const { kanbanPick } = await import("./commands/kanban.js");
1611
+ await kanbanPick(process.cwd(), options);
1612
+ });
1613
+ kanban
1614
+ .command("done <id>")
1615
+ .description("Mark card done")
1616
+ .option("--agent <name>", "Agent that completed it")
1617
+ .action(async (id, options) => {
1618
+ const { kanbanDone } = await import("./commands/kanban.js");
1619
+ await kanbanDone(process.cwd(), id, options);
1620
+ });
1621
+ kanban
1622
+ .command("bootstrap")
1623
+ .description("Create kanban labels + optional GitHub Action on the repo")
1624
+ .option("--workflow", "Also install the kanban GitHub Action")
1625
+ .action(async (options) => {
1626
+ const { kanbanBootstrap } = await import("./commands/kanban.js");
1627
+ await kanbanBootstrap(process.cwd(), options);
1628
+ });
1629
+ // ============================================================================
1630
+ // Linear
1631
+ // ============================================================================
1632
+ const linear = program
1633
+ .command("linear")
1634
+ .description("Sync with Linear — bidirectional issue sync (GitHub ↔ Linear)");
1635
+ linear
1636
+ .command("link")
1637
+ .description("Link a Linear project to this workspace")
1638
+ .action(async () => {
1639
+ const { findProjectRoot: fpr } = await import("./utils/jfl-config.js");
1640
+ const root = fpr(process.cwd());
1641
+ if (!root) {
1642
+ console.error(chalk.red("Not in a JFL project. Run jfl init first."));
1643
+ process.exit(1);
1644
+ }
1645
+ const { linearLink } = await import("./commands/linear.js");
1646
+ await linearLink(root);
1647
+ });
1648
+ linear
1649
+ .command("unlink")
1650
+ .description("Unlink the Linear project")
1651
+ .action(async () => {
1652
+ const { findProjectRoot: fpr } = await import("./utils/jfl-config.js");
1653
+ const root = fpr(process.cwd());
1654
+ if (!root) {
1655
+ console.error(chalk.red("Not in a JFL project."));
1656
+ process.exit(1);
1657
+ }
1658
+ const { linearUnlink } = await import("./commands/linear.js");
1659
+ await linearUnlink(root);
1660
+ });
1661
+ linear
1662
+ .command("status")
1663
+ .description("Show Linear sync state and mapped issues")
1664
+ .action(async () => {
1665
+ const { findProjectRoot: fpr } = await import("./utils/jfl-config.js");
1666
+ const root = fpr(process.cwd()) ?? process.cwd();
1667
+ const { linearStatus } = await import("./commands/linear.js");
1668
+ await linearStatus(root);
1669
+ });
1670
+ linear
1671
+ .command("sync")
1672
+ .description("Bidirectional sync: GitHub Issues ↔ Linear")
1673
+ .option("--direction <dir>", "Sync direction: github, linear, or both (default: both)", "both")
1674
+ .option("--dry-run", "Preview changes without applying them")
1675
+ .option("--json", "Output structured JSON (for CI and agents)")
1676
+ .action(async (options) => {
1677
+ const { findProjectRoot: fpr } = await import("./utils/jfl-config.js");
1678
+ const root = fpr(process.cwd());
1679
+ if (!root) {
1680
+ console.error(chalk.red("Not in a JFL project."));
1681
+ process.exit(1);
1682
+ }
1683
+ const { linearSync } = await import("./commands/linear.js");
1684
+ await linearSync(root, { direction: options.direction, dryRun: options.dryRun, json: options.json });
1685
+ });
1686
+ linear
1687
+ .command("bootstrap")
1688
+ .description("Deploy GitHub Actions sync workflow + set secrets (one-time setup)")
1689
+ .action(async () => {
1690
+ const { findProjectRoot: fpr } = await import("./utils/jfl-config.js");
1691
+ const root = fpr(process.cwd());
1692
+ if (!root) {
1693
+ console.error(chalk.red("Not in a JFL project."));
1694
+ process.exit(1);
1695
+ }
1696
+ const { linearBootstrap } = await import("./commands/linear.js");
1697
+ await linearBootstrap(root);
1698
+ });
1699
+ // Parse and run
1700
+ if (TENET_DEBUG) {
1701
+ console.error(`[timing] before parse: ${Date.now() - globalThis.__jfl_start}ms`);
1702
+ }
1703
+ program.parse();
1704
+ // Library exports
1705
+ export * from "./lib/domain/index.js";
1706
+ export * from "./lib/connectors/index.js";
1707
+ //# sourceMappingURL=index.js.map