@heretek-ai/epistemic-swarm 0.7.25 → 1.0.3

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 (351) hide show
  1. package/dist/tui.js +793 -0
  2. package/index.ts +1 -0
  3. package/package.json +68 -139
  4. package/rpc.ts +1 -0
  5. package/server.ts +1 -0
  6. package/src/agents.ts +69 -0
  7. package/src/continue.ts +40 -0
  8. package/src/hooks.ts +283 -0
  9. package/src/panels.tsx +220 -0
  10. package/src/policy.ts +221 -0
  11. package/src/pr.ts +37 -0
  12. package/src/research.ts +63 -0
  13. package/src/rpc-def.ts +136 -0
  14. package/src/rpc.ts +331 -0
  15. package/src/runtime.ts +112 -0
  16. package/src/server.ts +311 -0
  17. package/src/session.ts +61 -0
  18. package/src/tools.ts +61 -0
  19. package/src/tui.tsx +206 -0
  20. package/tui.tsx +1 -0
  21. package/.agents/skills/brainstorming/SKILL.md +0 -19
  22. package/.agents/skills/code_audit/SKILL.md +0 -19
  23. package/.agents/skills/darkharvest/SKILL.md +0 -19
  24. package/.agents/skills/epistemic_search/SKILL.md +0 -19
  25. package/.agents/skills/factory/SKILL.md +0 -19
  26. package/.agents/skills/grilling/SKILL.md +0 -19
  27. package/.agents/skills/oss_scout/SKILL.md +0 -19
  28. package/.agents/skills/research_cache/SKILL.md +0 -19
  29. package/.agents/skills/swarm_config/SKILL.md +0 -19
  30. package/.claude-plugin/marketplace.json +0 -61
  31. package/.claude-plugin/plugin.json +0 -76
  32. package/.omp/README.md +0 -39
  33. package/.omp/SYSTEM.md +0 -17
  34. package/.omp/commands/audit.md +0 -10
  35. package/.omp/commands/brainstorming.md +0 -12
  36. package/.omp/commands/darkharvest.md +0 -11
  37. package/.omp/commands/domainexpansion.md +0 -9
  38. package/.omp/commands/factory.md +0 -9
  39. package/.omp/commands/grill.md +0 -9
  40. package/.omp/commands/scout.md +0 -10
  41. package/.omp/commands/swarm-config.md +0 -10
  42. package/.omp/commands/swarm.md +0 -9
  43. package/.omp/hooks/post/epistemic-audit.ts +0 -16
  44. package/.omp/hooks/pre/epistemic-redirect.ts +0 -21
  45. package/.omp/prompts/brainstorming.md +0 -8
  46. package/.omp/prompts/swarm.md +0 -8
  47. package/LICENSE +0 -126
  48. package/MARKETPLACE.md +0 -130
  49. package/README.md +0 -403
  50. package/bin/cli.js +0 -297
  51. package/config/claude-settings-patch.json +0 -10
  52. package/config/docker-compose.infra.yml +0 -23
  53. package/config/domain_packs/biopharma.json +0 -23
  54. package/config/domain_packs/legal.json +0 -19
  55. package/config/domain_packs/quant.json +0 -19
  56. package/config/mcp-research-servers.json +0 -33
  57. package/config/mcp_launcher.py +0 -153
  58. package/config/opencode-snippet.json +0 -156
  59. package/config/searxng_mcp.py +0 -92
  60. package/extensions/pi/index.js +0 -357
  61. package/hooks/hooks.json +0 -45
  62. package/install.sh +0 -473
  63. package/plugins/antigravity/README.md +0 -72
  64. package/plugins/antigravity/agents/alpha-thesis.md +0 -36
  65. package/plugins/antigravity/agents/beta-antithesis.md +0 -35
  66. package/plugins/antigravity/agents/brainstormer.md +0 -27
  67. package/plugins/antigravity/agents/code-auditor.md +0 -28
  68. package/plugins/antigravity/agents/darkharvester.md +0 -30
  69. package/plugins/antigravity/agents/epistemic-auditor.md +0 -28
  70. package/plugins/antigravity/agents/manager.md +0 -26
  71. package/plugins/antigravity/agents/oss-scout.md +0 -27
  72. package/plugins/antigravity/agents/programmer.md +0 -25
  73. package/plugins/antigravity/agents/qa-a.md +0 -22
  74. package/plugins/antigravity/agents/qa-b.md +0 -22
  75. package/plugins/antigravity/antigravity_hooks.py +0 -265
  76. package/plugins/antigravity/commands/audit.md +0 -11
  77. package/plugins/antigravity/commands/brainstorm.md +0 -9
  78. package/plugins/antigravity/commands/brainstorming.md +0 -10
  79. package/plugins/antigravity/commands/darkharvest.md +0 -12
  80. package/plugins/antigravity/commands/domainexpansion.md +0 -12
  81. package/plugins/antigravity/commands/factory.md +0 -14
  82. package/plugins/antigravity/commands/grill.md +0 -10
  83. package/plugins/antigravity/commands/scout.md +0 -11
  84. package/plugins/antigravity/commands/swarm-config.md +0 -9
  85. package/plugins/antigravity/commands/swarm.md +0 -12
  86. package/plugins/antigravity/hook_bus_bridge.js +0 -352
  87. package/plugins/antigravity/hooks.json +0 -44
  88. package/plugins/antigravity/mcp_config.json +0 -33
  89. package/plugins/antigravity/mcp_launcher.py +0 -58
  90. package/plugins/antigravity/plugin.json +0 -13
  91. package/plugins/antigravity/rules/AGENTS.md +0 -127
  92. package/plugins/antigravity/rules/epistemic-integrity.md +0 -16
  93. package/plugins/antigravity/skills/brainstorming/SKILL.md +0 -19
  94. package/plugins/antigravity/skills/code_audit/SKILL.md +0 -19
  95. package/plugins/antigravity/skills/darkharvest/SKILL.md +0 -19
  96. package/plugins/antigravity/skills/epistemic_search/SKILL.md +0 -19
  97. package/plugins/antigravity/skills/factory/SKILL.md +0 -19
  98. package/plugins/antigravity/skills/grilling/SKILL.md +0 -19
  99. package/plugins/antigravity/skills/oss_scout/SKILL.md +0 -19
  100. package/plugins/antigravity/skills/research_cache/SKILL.md +0 -19
  101. package/plugins/antigravity/skills/swarm_config/SKILL.md +0 -19
  102. package/plugins/codex/AGENTS.md.snippet +0 -10
  103. package/plugins/codex/README.md +0 -37
  104. package/plugins/codex/config.toml.snippet +0 -28
  105. package/plugins/codex/openai.yaml +0 -24
  106. package/plugins/codex/skills/brainstorming/SKILL.md +0 -19
  107. package/plugins/codex/skills/code_audit/SKILL.md +0 -19
  108. package/plugins/codex/skills/darkharvest/SKILL.md +0 -19
  109. package/plugins/codex/skills/epistemic_search/SKILL.md +0 -19
  110. package/plugins/codex/skills/factory/SKILL.md +0 -19
  111. package/plugins/codex/skills/grilling/SKILL.md +0 -19
  112. package/plugins/codex/skills/oss_scout/SKILL.md +0 -19
  113. package/plugins/codex/skills/research_cache/SKILL.md +0 -19
  114. package/plugins/codex/skills/swarm_config/SKILL.md +0 -19
  115. package/plugins/darkharvest/.claude-plugin/plugin.json +0 -15
  116. package/plugins/darkharvest/agents/harvest-proponent.md +0 -22
  117. package/plugins/darkharvest/agents/harvest-redteam.md +0 -20
  118. package/plugins/darkharvest/evals/teardown-verdict/graders/license-line.md +0 -6
  119. package/plugins/darkharvest/evals/teardown-verdict/graders/skill-fired.md +0 -5
  120. package/plugins/darkharvest/evals/teardown-verdict/prompt.md +0 -6
  121. package/plugins/darkharvest/skills/darkharvest/SKILL.md +0 -70
  122. package/plugins/darkharvest/skills/darkharvest/scripts/harvest.py +0 -289
  123. package/plugins/factory/.claude-plugin/plugin.json +0 -15
  124. package/plugins/factory/agents/factory-manager.md +0 -22
  125. package/plugins/factory/agents/programmer.md +0 -16
  126. package/plugins/factory/agents/qa-adversarial.md +0 -17
  127. package/plugins/factory/agents/qa-functional.md +0 -17
  128. package/plugins/factory/evals/gate-halt/graders/gates-first.md +0 -6
  129. package/plugins/factory/evals/gate-halt/graders/skill-fired.md +0 -5
  130. package/plugins/factory/evals/gate-halt/prompt.md +0 -6
  131. package/plugins/factory/skills/factory/SKILL.md +0 -61
  132. package/plugins/factory/skills/factory/scripts/factory.py +0 -300
  133. package/plugins/gemini/GEMINI.md +0 -16
  134. package/plugins/gemini/README.md +0 -20
  135. package/plugins/gemini/commands/audit.toml +0 -6
  136. package/plugins/gemini/commands/brainstorming.toml +0 -10
  137. package/plugins/gemini/commands/darkharvest.toml +0 -8
  138. package/plugins/gemini/commands/domainexpansion.toml +0 -7
  139. package/plugins/gemini/commands/factory.toml +0 -8
  140. package/plugins/gemini/commands/grill.toml +0 -6
  141. package/plugins/gemini/commands/scout.toml +0 -7
  142. package/plugins/gemini/commands/swarm-config.toml +0 -7
  143. package/plugins/gemini/commands/swarm.toml +0 -8
  144. package/plugins/gemini/gemini-extension.json +0 -38
  145. package/plugins/gemini/hooks/hooks.json +0 -11
  146. package/plugins/gemini/skills/brainstorming/SKILL.md +0 -19
  147. package/plugins/gemini/skills/code_audit/SKILL.md +0 -19
  148. package/plugins/gemini/skills/darkharvest/SKILL.md +0 -19
  149. package/plugins/gemini/skills/epistemic_search/SKILL.md +0 -19
  150. package/plugins/gemini/skills/factory/SKILL.md +0 -19
  151. package/plugins/gemini/skills/grilling/SKILL.md +0 -19
  152. package/plugins/gemini/skills/oss_scout/SKILL.md +0 -19
  153. package/plugins/gemini/skills/research_cache/SKILL.md +0 -19
  154. package/plugins/gemini/skills/swarm_config/SKILL.md +0 -19
  155. package/plugins/opencode/analysis-bridge.js +0 -620
  156. package/plugins/opencode/config-io.js +0 -1651
  157. package/plugins/opencode/dep-health.js +0 -1039
  158. package/plugins/opencode/hook-bus.js +0 -496
  159. package/plugins/opencode/index.js +0 -2992
  160. package/plugins/opencode/tui.js +0 -1551
  161. package/plugins/opencode/weight-baseline.json +0 -16
  162. package/plugins/opencode/weight-signals.js +0 -769
  163. package/plugins/research-cache/.claude-plugin/plugin.json +0 -15
  164. package/plugins/research-cache/skills/research_cache/SKILL.md +0 -36
  165. package/plugins/research-cache/skills/research_cache/__init__.py +0 -0
  166. package/plugins/research-cache/skills/research_cache/hasher.py +0 -302
  167. package/plugins/socratic-grilling/.claude-plugin/plugin.json +0 -15
  168. package/plugins/socratic-grilling/skills/grilling/SKILL.md +0 -61
  169. package/plugins/socratic-grilling/skills/grilling/__init__.py +0 -0
  170. package/plugins/socratic-grilling/skills/grilling/socratic_tree.py +0 -363
  171. package/prompts/agent_alpha_thesis.md +0 -70
  172. package/prompts/agent_beta_antithesis.md +0 -78
  173. package/prompts/agent_brainstormer.md +0 -143
  174. package/prompts/agent_code_auditor.md +0 -88
  175. package/prompts/agent_darkharvest.md +0 -140
  176. package/prompts/agent_oss_scout.md +0 -78
  177. package/prompts/antigravity_repo_factcheck.md +0 -143
  178. package/prompts/base_epistemic_system.md +0 -50
  179. package/prompts/epistemic_auditor.md +0 -74
  180. package/prompts/orchestrator.md +0 -70
  181. package/runner/__init__.py +0 -0
  182. package/runner/__pycache__/__init__.cpython-311.pyc +0 -0
  183. package/runner/__pycache__/auctioneer.cpython-311.pyc +0 -0
  184. package/runner/__pycache__/auditor_engine.cpython-311.pyc +0 -0
  185. package/runner/__pycache__/claim_store.cpython-311.pyc +0 -0
  186. package/runner/__pycache__/claim_witness.cpython-311.pyc +0 -0
  187. package/runner/__pycache__/darkharvest_claims.cpython-311.pyc +0 -0
  188. package/runner/__pycache__/errors.cpython-311.pyc +0 -0
  189. package/runner/__pycache__/living_dossiers.cpython-311.pyc +0 -0
  190. package/runner/__pycache__/mcp_protocol.cpython-311.pyc +0 -0
  191. package/runner/__pycache__/mcp_server.cpython-311.pyc +0 -0
  192. package/runner/__pycache__/path_safety.cpython-311.pyc +0 -0
  193. package/runner/__pycache__/pcrb.cpython-311.pyc +0 -0
  194. package/runner/__pycache__/pcrb_verify.cpython-311.pyc +0 -0
  195. package/runner/__pycache__/preflight.cpython-311.pyc +0 -0
  196. package/runner/__pycache__/refinement.cpython-311.pyc +0 -0
  197. package/runner/__pycache__/research_swarm.cpython-311.pyc +0 -0
  198. package/runner/__pycache__/retrieval_log.cpython-311.pyc +0 -0
  199. package/runner/__pycache__/schema_validate.cpython-311.pyc +0 -0
  200. package/runner/__pycache__/schemas.cpython-311.pyc +0 -0
  201. package/runner/__pycache__/state_machine.cpython-311.pyc +0 -0
  202. package/runner/antigravity_hooks.py +0 -265
  203. package/runner/auctioneer.py +0 -169
  204. package/runner/auditor_engine.py +0 -711
  205. package/runner/claim_store.py +0 -417
  206. package/runner/claim_witness.py +0 -412
  207. package/runner/darkharvest_claims.py +0 -358
  208. package/runner/errors.py +0 -51
  209. package/runner/living_dossiers.py +0 -395
  210. package/runner/mcp_protocol.py +0 -188
  211. package/runner/mcp_server.py +0 -1447
  212. package/runner/path_safety.py +0 -62
  213. package/runner/pcrb.py +0 -290
  214. package/runner/pcrb_verify.py +0 -267
  215. package/runner/preflight.py +0 -1011
  216. package/runner/refinement.py +0 -580
  217. package/runner/research_swarm.py +0 -1848
  218. package/runner/retrieval_log.py +0 -90
  219. package/runner/schema_validate.py +0 -193
  220. package/runner/schemas.py +0 -630
  221. package/runner/state_machine.py +0 -463
  222. package/runner/tests/__pycache__/test_analysis_bridge.cpython-311.pyc +0 -0
  223. package/runner/tests/__pycache__/test_antigravity_plugin.cpython-311.pyc +0 -0
  224. package/runner/tests/__pycache__/test_auction_order.cpython-311.pyc +0 -0
  225. package/runner/tests/__pycache__/test_backends.cpython-311.pyc +0 -0
  226. package/runner/tests/__pycache__/test_bet1_spike.cpython-311.pyc +0 -0
  227. package/runner/tests/__pycache__/test_claim_store.cpython-311.pyc +0 -0
  228. package/runner/tests/__pycache__/test_claim_witness.cpython-311.pyc +0 -0
  229. package/runner/tests/__pycache__/test_claude_plugin.cpython-311.pyc +0 -0
  230. package/runner/tests/__pycache__/test_config_schema.cpython-311.pyc +0 -0
  231. package/runner/tests/__pycache__/test_contract_tooling.cpython-311.pyc +0 -0
  232. package/runner/tests/__pycache__/test_darkharvest_audit.cpython-311.pyc +0 -0
  233. package/runner/tests/__pycache__/test_dep_health.cpython-311.pyc +0 -0
  234. package/runner/tests/__pycache__/test_domain_packs.cpython-311.pyc +0 -0
  235. package/runner/tests/__pycache__/test_dossier_contract.cpython-311.pyc +0 -0
  236. package/runner/tests/__pycache__/test_factory.cpython-311.pyc +0 -0
  237. package/runner/tests/__pycache__/test_fleet_seam.cpython-311.pyc +0 -0
  238. package/runner/tests/__pycache__/test_frontier_concurrency.cpython-311.pyc +0 -0
  239. package/runner/tests/__pycache__/test_frontier_mirror_standalone.cpython-311.pyc +0 -0
  240. package/runner/tests/__pycache__/test_grounding.cpython-311.pyc +0 -0
  241. package/runner/tests/__pycache__/test_hardening_contract.cpython-311.pyc +0 -0
  242. package/runner/tests/__pycache__/test_hook_bus.cpython-311.pyc +0 -0
  243. package/runner/tests/__pycache__/test_living_dossiers.cpython-311.pyc +0 -0
  244. package/runner/tests/__pycache__/test_manifest_concurrency.cpython-311.pyc +0 -0
  245. package/runner/tests/__pycache__/test_mcp_server.cpython-311.pyc +0 -0
  246. package/runner/tests/__pycache__/test_nk_hardening.cpython-311.pyc +0 -0
  247. package/runner/tests/__pycache__/test_opencode_ux.cpython-311.pyc +0 -0
  248. package/runner/tests/__pycache__/test_opencode_v2_registrars.cpython-311.pyc +0 -0
  249. package/runner/tests/__pycache__/test_pcrb.cpython-311.pyc +0 -0
  250. package/runner/tests/__pycache__/test_phase08_waiver_reopens.cpython-311.pyc +0 -0
  251. package/runner/tests/__pycache__/test_refinement.cpython-311.pyc +0 -0
  252. package/runner/tests/__pycache__/test_search_anomaly.cpython-311.pyc +0 -0
  253. package/runner/tests/__pycache__/test_search_provider.cpython-311.pyc +0 -0
  254. package/runner/tests/__pycache__/test_search_provider_plugin.cpython-311.pyc +0 -0
  255. package/runner/tests/__pycache__/test_swarm.cpython-311.pyc +0 -0
  256. package/runner/tests/__pycache__/test_swarm_config.cpython-311.pyc +0 -0
  257. package/runner/tests/__pycache__/test_sweep_regressions.cpython-311.pyc +0 -0
  258. package/runner/tests/__pycache__/test_webcache.cpython-311.pyc +0 -0
  259. package/runner/tests/__pycache__/test_weight_signals.cpython-311.pyc +0 -0
  260. package/runner/tests/fixtures/auction_objective.json +0 -35
  261. package/runner/tests/fixtures/borderline_claims.json +0 -27
  262. package/runner/tests/fixtures/config_validation_cases.json +0 -276
  263. package/runner/tests/fixtures/ddg_anomaly_page.html +0 -176
  264. package/runner/tests/fixtures/ddg_results_page.html +0 -28
  265. package/runner/tests/fixtures/divergence_objectives.json +0 -31
  266. package/runner/tests/test_analysis_bridge.py +0 -450
  267. package/runner/tests/test_antigravity_plugin.py +0 -361
  268. package/runner/tests/test_auction_order.py +0 -173
  269. package/runner/tests/test_backends.py +0 -457
  270. package/runner/tests/test_bet1_spike.py +0 -95
  271. package/runner/tests/test_claim_store.py +0 -162
  272. package/runner/tests/test_claim_witness.py +0 -186
  273. package/runner/tests/test_claude_plugin.py +0 -170
  274. package/runner/tests/test_config_schema.py +0 -879
  275. package/runner/tests/test_contract_tooling.py +0 -312
  276. package/runner/tests/test_darkharvest_audit.py +0 -395
  277. package/runner/tests/test_dep_health.py +0 -595
  278. package/runner/tests/test_domain_packs.py +0 -217
  279. package/runner/tests/test_dossier_contract.py +0 -196
  280. package/runner/tests/test_factory.py +0 -258
  281. package/runner/tests/test_fleet_seam.py +0 -113
  282. package/runner/tests/test_frontier_concurrency.py +0 -288
  283. package/runner/tests/test_frontier_mirror_standalone.py +0 -156
  284. package/runner/tests/test_grounding.py +0 -183
  285. package/runner/tests/test_hardening_contract.py +0 -391
  286. package/runner/tests/test_hook_bus.py +0 -956
  287. package/runner/tests/test_living_dossiers.py +0 -204
  288. package/runner/tests/test_manifest_concurrency.py +0 -187
  289. package/runner/tests/test_mcp_server.py +0 -257
  290. package/runner/tests/test_nk_hardening.py +0 -1046
  291. package/runner/tests/test_opencode_ux.py +0 -2438
  292. package/runner/tests/test_opencode_v2_registrars.py +0 -2157
  293. package/runner/tests/test_pcrb.py +0 -240
  294. package/runner/tests/test_phase08_waiver_reopens.py +0 -539
  295. package/runner/tests/test_refinement.py +0 -255
  296. package/runner/tests/test_search_anomaly.py +0 -342
  297. package/runner/tests/test_search_provider.py +0 -1534
  298. package/runner/tests/test_search_provider_plugin.py +0 -401
  299. package/runner/tests/test_swarm.py +0 -444
  300. package/runner/tests/test_swarm_config.py +0 -520
  301. package/runner/tests/test_sweep_regressions.py +0 -453
  302. package/runner/tests/test_webcache.py +0 -271
  303. package/runner/tests/test_weight_signals.py +0 -401
  304. package/schemas/alpha_dossier.schema.json +0 -204
  305. package/schemas/audit_report.schema.json +0 -79
  306. package/schemas/beta_dossier.schema.json +0 -214
  307. package/schemas/config.schema.json +0 -311
  308. package/schemas/frontier.schema.json +0 -61
  309. package/schemas/manifest.schema.json +0 -49
  310. package/schemas/scope_manifest.schema.json +0 -47
  311. package/scripts/__pycache__/bet1_advisory_spike.cpython-311.pyc +0 -0
  312. package/scripts/__pycache__/build_adapters.cpython-311.pyc +0 -0
  313. package/scripts/__pycache__/check_docs.cpython-311.pyc +0 -0
  314. package/scripts/__pycache__/divergence_experiment.cpython-311.pyc +0 -0
  315. package/scripts/__pycache__/gen_schemas.cpython-311.pyc +0 -0
  316. package/scripts/auction_experiment.py +0 -188
  317. package/scripts/bet1_advisory_spike.py +0 -442
  318. package/scripts/build_adapters.py +0 -417
  319. package/scripts/check_docs.py +0 -66
  320. package/scripts/divergence_experiment.py +0 -214
  321. package/scripts/gen_schemas.py +0 -69
  322. package/skills/brainstorming/SKILL.md +0 -106
  323. package/skills/brainstorming/__init__.py +0 -1
  324. package/skills/brainstorming/scripts/brainstorm.py +0 -201
  325. package/skills/code_audit/SKILL.md +0 -45
  326. package/skills/darkharvest/SKILL.md +0 -70
  327. package/skills/darkharvest/scripts/harvest.py +0 -289
  328. package/skills/epistemic_search/SKILL.md +0 -67
  329. package/skills/epistemic_search/__init__.py +0 -1
  330. package/skills/epistemic_search/scripts/__pycache__/search.cpython-311.pyc +0 -0
  331. package/skills/epistemic_search/scripts/fetch.py +0 -156
  332. package/skills/epistemic_search/scripts/search.py +0 -551
  333. package/skills/epistemic_search/scripts/webcache.py +0 -339
  334. package/skills/factory/SKILL.md +0 -61
  335. package/skills/factory/scripts/factory.py +0 -300
  336. package/skills/grilling/SKILL.md +0 -61
  337. package/skills/grilling/__init__.py +0 -0
  338. package/skills/grilling/__pycache__/__init__.cpython-311.pyc +0 -0
  339. package/skills/grilling/__pycache__/socratic_tree.cpython-311.pyc +0 -0
  340. package/skills/grilling/socratic_tree.py +0 -363
  341. package/skills/oss_scout/SKILL.md +0 -49
  342. package/skills/research_cache/SKILL.md +0 -36
  343. package/skills/research_cache/__init__.py +0 -0
  344. package/skills/research_cache/__pycache__/__init__.cpython-311.pyc +0 -0
  345. package/skills/research_cache/__pycache__/hasher.cpython-311.pyc +0 -0
  346. package/skills/research_cache/hasher.py +0 -302
  347. package/skills/swarm_config/SKILL.md +0 -178
  348. package/skills/swarm_config/__init__.py +0 -35
  349. package/skills/swarm_config/__pycache__/__init__.cpython-311.pyc +0 -0
  350. package/skills/swarm_config/__pycache__/configure.cpython-311.pyc +0 -0
  351. package/skills/swarm_config/configure.py +0 -1002
package/dist/tui.js ADDED
@@ -0,0 +1,793 @@
1
+ // @bun
2
+ // src/tui.tsx
3
+ import { userInfo } from "os";
4
+ import { Plugin } from "@opencode/plugin/tui";
5
+
6
+ // src/panels.tsx
7
+ import { memo as _$memo } from "@opentui/solid";
8
+ import { createComponent as _$createComponent } from "@opentui/solid";
9
+ import { createTextNode as _$createTextNode } from "@opentui/solid";
10
+ import { insertNode as _$insertNode } from "@opentui/solid";
11
+ import { insert as _$insert } from "@opentui/solid";
12
+ import { setProp as _$setProp } from "@opentui/solid";
13
+ import { createElement as _$createElement } from "@opentui/solid";
14
+ import { createResource, createSignal, For, onCleanup, Show } from "solid-js";
15
+ var PANEL_REFRESH_MS = 2000;
16
+ function usePanelState(props, method) {
17
+ const [version, setVersion] = createSignal(0);
18
+ const bump = () => setVersion((value) => value + 1);
19
+ const unsubscribe = props.subscribe(bump);
20
+ const timer = setInterval(bump, PANEL_REFRESH_MS);
21
+ onCleanup(() => {
22
+ unsubscribe();
23
+ clearInterval(timer);
24
+ });
25
+ const [state] = createResource(version, () => props.call(method).then((data) => ({
26
+ data
27
+ }), (error) => ({
28
+ error: String(error?.data?.reason ?? error?.message ?? error)
29
+ })));
30
+ return {
31
+ data: () => state.latest?.data,
32
+ error: () => state.latest?.error
33
+ };
34
+ }
35
+ var Frame = (props) => (() => {
36
+ var _el$ = _$createElement("box"), _el$2 = _$createElement("text");
37
+ _$insertNode(_el$, _el$2);
38
+ _$setProp(_el$, "flexDirection", "column");
39
+ _$setProp(_el$, "padding", 1);
40
+ _$setProp(_el$, "gap", 1);
41
+ _$insert(_el$2, () => props.title);
42
+ _$insert(_el$, () => props.children, null);
43
+ return _el$;
44
+ })();
45
+ var Failed = (props) => _$createComponent(Show, {
46
+ get when() {
47
+ return props.error();
48
+ },
49
+ get children() {
50
+ var _el$3 = _$createElement("text"), _el$4 = _$createTextNode(`Could not load: `);
51
+ _$insertNode(_el$3, _el$4);
52
+ _$insert(_el$3, () => props.error(), null);
53
+ return _el$3;
54
+ }
55
+ });
56
+ var FactoryPanel = (props) => {
57
+ const state = usePanelState(props, "factoryState");
58
+ return _$createComponent(Frame, {
59
+ title: "Factory dashboard",
60
+ get children() {
61
+ return [_$createComponent(Failed, {
62
+ get error() {
63
+ return state.error;
64
+ }
65
+ }), _$createComponent(Show, {
66
+ get when() {
67
+ return state.data();
68
+ },
69
+ get fallback() {
70
+ return (() => {
71
+ var _el$5 = _$createElement("text");
72
+ _$insert(_el$5, () => state.error() ? "" : "Loading factory state\u2026");
73
+ return _el$5;
74
+ })();
75
+ },
76
+ children: (data) => [(() => {
77
+ var _el$6 = _$createElement("text"), _el$7 = _$createTextNode(`Stage: `);
78
+ _$insertNode(_el$6, _el$7);
79
+ _$insert(_el$6, () => data().stage, null);
80
+ _$insert(_el$6, (() => {
81
+ var _c$ = _$memo(() => !!data().runId);
82
+ return () => _c$() ? ` \xB7 ${data().runId}` : "";
83
+ })(), null);
84
+ return _el$6;
85
+ })(), (() => {
86
+ var _el$8 = _$createElement("text"), _el$9 = _$createTextNode(`Spend: $`);
87
+ _$insertNode(_el$8, _el$9);
88
+ _$insert(_el$8, () => data().spend.usd.toFixed(2), null);
89
+ _$insert(_el$8, (() => {
90
+ var _c$2 = _$memo(() => !!data().spend.ceilingUSD);
91
+ return () => _c$2() ? ` / $${data().spend.ceilingUSD}` : "";
92
+ })(), null);
93
+ _$insert(_el$8, () => data().spend.estimated ? " (estimated)" : "", null);
94
+ return _el$8;
95
+ })(), _$createComponent(Show, {
96
+ get when() {
97
+ return data().halt;
98
+ },
99
+ get children() {
100
+ var _el$0 = _$createElement("text"), _el$1 = _$createTextNode(`HALTED: `);
101
+ _$insertNode(_el$0, _el$1);
102
+ _$insert(_el$0, () => data().halt, null);
103
+ return _el$0;
104
+ }
105
+ }), _$createComponent(Show, {
106
+ get when() {
107
+ return data().release;
108
+ },
109
+ get children() {
110
+ var _el$10 = _$createElement("text"), _el$11 = _$createTextNode(`PR: `);
111
+ _$insertNode(_el$10, _el$11);
112
+ _$insert(_el$10, () => data().release, null);
113
+ return _el$10;
114
+ }
115
+ }), _$createComponent(Show, {
116
+ get when() {
117
+ return data().pending.length;
118
+ },
119
+ get children() {
120
+ var _el$12 = _$createElement("text"), _el$13 = _$createTextNode(`Waiting on human: `);
121
+ _$insertNode(_el$12, _el$13);
122
+ _$insert(_el$12, () => data().pending.join(", "), null);
123
+ return _el$12;
124
+ }
125
+ }), (() => {
126
+ var _el$14 = _$createElement("text");
127
+ _$insertNode(_el$14, _$createTextNode(`Phases:`));
128
+ return _el$14;
129
+ })(), _$createComponent(For, {
130
+ get each() {
131
+ return data().phases;
132
+ },
133
+ children: (phase) => (() => {
134
+ var _el$16 = _$createElement("text"), _el$17 = _$createTextNode(` \xB7 `), _el$18 = _$createTextNode(` \xB7 failures `);
135
+ _$insertNode(_el$16, _el$17);
136
+ _$insertNode(_el$16, _el$18);
137
+ _$insert(_el$16, () => phase.id === data().activePhase ? "\u25B6 " : " ", _el$17);
138
+ _$insert(_el$16, () => phase.id, _el$17);
139
+ _$insert(_el$16, () => phase.status, _el$18);
140
+ _$insert(_el$16, () => phase.failures, null);
141
+ return _el$16;
142
+ })()
143
+ })]
144
+ })];
145
+ }
146
+ });
147
+ };
148
+ var LspPanel = (props) => {
149
+ const state = usePanelState(props, "lspState");
150
+ return _$createComponent(Frame, {
151
+ title: "Language servers",
152
+ get children() {
153
+ return [_$createComponent(Failed, {
154
+ get error() {
155
+ return state.error;
156
+ }
157
+ }), _$createComponent(Show, {
158
+ get when() {
159
+ return state.data();
160
+ },
161
+ get fallback() {
162
+ return (() => {
163
+ var _el$19 = _$createElement("text");
164
+ _$insert(_el$19, () => state.error() ? "" : "Loading language servers\u2026");
165
+ return _el$19;
166
+ })();
167
+ },
168
+ children: (data) => [(() => {
169
+ var _el$20 = _$createElement("text");
170
+ _$insert(_el$20, () => data().enabled ? "LSP is on." : "LSP is disabled (lsp: false).");
171
+ return _el$20;
172
+ })(), _$createComponent(For, {
173
+ get each() {
174
+ return data().servers;
175
+ },
176
+ children: (server) => (() => {
177
+ var _el$21 = _$createElement("text"), _el$22 = _$createTextNode(` `), _el$23 = _$createTextNode(` [`), _el$24 = _$createTextNode(`]`);
178
+ _$insertNode(_el$21, _el$22);
179
+ _$insertNode(_el$21, _el$23);
180
+ _$insertNode(_el$21, _el$24);
181
+ _$insert(_el$21, () => server.available ? "\u25CF" : "\u25CB", _el$22);
182
+ _$insert(_el$21, () => server.id, _el$23);
183
+ _$insert(_el$21, () => server.extensions.join(" "), _el$24);
184
+ _$insert(_el$21, (() => {
185
+ var _c$3 = _$memo(() => !!server.running);
186
+ return () => _c$3() ? ` \xB7 ${server.running} running` : "";
187
+ })(), null);
188
+ _$insert(_el$21, () => server.available ? "" : " \u2014 not installed", null);
189
+ return _el$21;
190
+ })()
191
+ }), _$createComponent(For, {
192
+ get each() {
193
+ return data().diagnostics;
194
+ },
195
+ children: (diagnostic) => (() => {
196
+ var _el$25 = _$createElement("text"), _el$26 = _$createTextNode(`! `);
197
+ _$insertNode(_el$25, _el$26);
198
+ _$insert(_el$25, diagnostic, null);
199
+ return _el$25;
200
+ })()
201
+ })]
202
+ })];
203
+ }
204
+ });
205
+ };
206
+ var HooksPanel = (props) => {
207
+ const state = usePanelState(props, "hooksState");
208
+ return _$createComponent(Frame, {
209
+ title: "Hook bridge",
210
+ get children() {
211
+ return [_$createComponent(Failed, {
212
+ get error() {
213
+ return state.error;
214
+ }
215
+ }), _$createComponent(Show, {
216
+ get when() {
217
+ return state.data();
218
+ },
219
+ get fallback() {
220
+ return (() => {
221
+ var _el$27 = _$createElement("text");
222
+ _$insert(_el$27, () => state.error() ? "" : "Loading hooks\u2026");
223
+ return _el$27;
224
+ })();
225
+ },
226
+ children: (data) => [(() => {
227
+ var _el$28 = _$createElement("text"), _el$29 = _$createTextNode(` handler(s) \xB7 `), _el$30 = _$createTextNode(` from the project \xB7 `);
228
+ _$insertNode(_el$28, _el$29);
229
+ _$insertNode(_el$28, _el$30);
230
+ _$insert(_el$28, () => data().handlers, _el$29);
231
+ _$insert(_el$28, () => data().projectHandlers, _el$30);
232
+ _$insert(_el$28, (() => {
233
+ var _c$4 = _$memo(() => data().projectHandlers === 0);
234
+ return () => _c$4() ? "nothing to trust" : data().trusted ? "trusted" : "NOT trusted";
235
+ })(), null);
236
+ return _el$28;
237
+ })(), _$createComponent(For, {
238
+ get each() {
239
+ return data().projectLines;
240
+ },
241
+ children: (line) => (() => {
242
+ var _el$34 = _$createElement("text");
243
+ _$insert(_el$34, line);
244
+ return _el$34;
245
+ })()
246
+ }), _$createComponent(Show, {
247
+ get when() {
248
+ return data().loss.length;
249
+ },
250
+ get children() {
251
+ return [(() => {
252
+ var _el$32 = _$createElement("text");
253
+ _$insertNode(_el$32, _$createTextNode(`Capability loss (advisory rows):`));
254
+ return _el$32;
255
+ })(), _$createComponent(For, {
256
+ get each() {
257
+ return data().loss;
258
+ },
259
+ children: (item) => (() => {
260
+ var _el$35 = _$createElement("text"), _el$36 = _$createTextNode(`! `), _el$37 = _$createTextNode(` \xB7 `), _el$38 = _$createTextNode(` \u2014 `), _el$39 = _$createTextNode(`: `);
261
+ _$insertNode(_el$35, _el$36);
262
+ _$insertNode(_el$35, _el$37);
263
+ _$insertNode(_el$35, _el$38);
264
+ _$insertNode(_el$35, _el$39);
265
+ _$insert(_el$35, () => item.event, _el$37);
266
+ _$insert(_el$35, () => item.handler, _el$38);
267
+ _$insert(_el$35, () => item.support, _el$39);
268
+ _$insert(_el$35, () => item.reason, null);
269
+ return _el$35;
270
+ })()
271
+ })];
272
+ }
273
+ }), _$createComponent(For, {
274
+ get each() {
275
+ return data().diagnostics;
276
+ },
277
+ children: (item) => (() => {
278
+ var _el$40 = _$createElement("text"), _el$41 = _$createTextNode(`! `);
279
+ _$insertNode(_el$40, _el$41);
280
+ _$insert(_el$40, item, null);
281
+ return _el$40;
282
+ })()
283
+ }), _$createComponent(For, {
284
+ get each() {
285
+ return data().recent;
286
+ },
287
+ children: (item) => (() => {
288
+ var _el$42 = _$createElement("text"), _el$43 = _$createTextNode(`recent error: `);
289
+ _$insertNode(_el$42, _el$43);
290
+ _$insert(_el$42, item, null);
291
+ return _el$42;
292
+ })()
293
+ })]
294
+ })];
295
+ }
296
+ });
297
+ };
298
+ var BrainstormPanel = (props) => {
299
+ const state = usePanelState(props, "brainstormState");
300
+ return _$createComponent(Frame, {
301
+ title: "Brainstorm board",
302
+ get children() {
303
+ return [_$createComponent(Failed, {
304
+ get error() {
305
+ return state.error;
306
+ }
307
+ }), _$createComponent(Show, {
308
+ get when() {
309
+ return state.data();
310
+ },
311
+ get fallback() {
312
+ return (() => {
313
+ var _el$44 = _$createElement("text");
314
+ _$insert(_el$44, () => state.error() ? "" : "Loading brainstorm\u2026");
315
+ return _el$44;
316
+ })();
317
+ },
318
+ children: (data) => _$createComponent(Show, {
319
+ get when() {
320
+ return data().active;
321
+ },
322
+ get fallback() {
323
+ return (() => {
324
+ var _el$59 = _$createElement("text");
325
+ _$insertNode(_el$59, _$createTextNode(`No brainstorm in .factory/brainstorm yet. Run /brainstorm.`));
326
+ return _el$59;
327
+ })();
328
+ },
329
+ get children() {
330
+ return [(() => {
331
+ var _el$45 = _$createElement("text"), _el$46 = _$createTextNode(`Brief: `);
332
+ _$insertNode(_el$45, _el$46);
333
+ _$insert(_el$45, () => data().brief, null);
334
+ return _el$45;
335
+ })(), (() => {
336
+ var _el$47 = _$createElement("text"), _el$48 = _$createTextNode(` idea(s) \xB7 `), _el$49 = _$createTextNode(` duplicate(s) \xB7 `), _el$50 = _$createTextNode(` scored \xB7 `);
337
+ _$insertNode(_el$47, _el$48);
338
+ _$insertNode(_el$47, _el$49);
339
+ _$insertNode(_el$47, _el$50);
340
+ _$insert(_el$47, () => data().ideas, _el$48);
341
+ _$insert(_el$47, () => data().duplicates, _el$49);
342
+ _$insert(_el$47, () => data().scored, _el$50);
343
+ _$insert(_el$47, () => data().complete ? "complete" : "in progress", null);
344
+ return _el$47;
345
+ })(), (() => {
346
+ var _el$52 = _$createElement("text"), _el$53 = _$createTextNode(`Coverage: `);
347
+ _$insertNode(_el$52, _el$53);
348
+ _$insert(_el$52, () => data().lenses.map((lens) => `${lens} ${data().coverage[lens] ?? 0}`).join(" \xB7 "), null);
349
+ return _el$52;
350
+ })(), _$createComponent(Show, {
351
+ get when() {
352
+ return data().gaps.length;
353
+ },
354
+ get children() {
355
+ var _el$55 = _$createElement("text"), _el$56 = _$createTextNode(`Gaps: `);
356
+ _$insertNode(_el$55, _el$56);
357
+ _$insert(_el$55, () => data().gaps.join(", "), null);
358
+ return _el$55;
359
+ }
360
+ }), _$createComponent(Show, {
361
+ get when() {
362
+ return data().shortlist.length;
363
+ },
364
+ get children() {
365
+ return [(() => {
366
+ var _el$57 = _$createElement("text");
367
+ _$insertNode(_el$57, _$createTextNode(`Shortlist:`));
368
+ return _el$57;
369
+ })(), _$createComponent(For, {
370
+ get each() {
371
+ return data().shortlist;
372
+ },
373
+ children: (entry) => (() => {
374
+ var _el$61 = _$createElement("text"), _el$62 = _$createTextNode(` `), _el$63 = _$createTextNode(` (`), _el$64 = _$createTextNode(`/20) \u2014 `);
375
+ _$insertNode(_el$61, _el$62);
376
+ _$insertNode(_el$61, _el$63);
377
+ _$insertNode(_el$61, _el$64);
378
+ _$insert(_el$61, () => entry.outlier ? "\u25C7" : "\u25C6", _el$62);
379
+ _$insert(_el$61, () => entry.id, _el$63);
380
+ _$insert(_el$61, () => entry.total, _el$64);
381
+ _$insert(_el$61, () => entry.title, null);
382
+ _$insert(_el$61, () => entry.outlier ? " (forced outlier)" : "", null);
383
+ return _el$61;
384
+ })()
385
+ })];
386
+ }
387
+ })];
388
+ }
389
+ })
390
+ })];
391
+ }
392
+ });
393
+ };
394
+ var PANEL_COMPONENTS = {
395
+ factory: FactoryPanel,
396
+ lsp: LspPanel,
397
+ hooks: HooksPanel,
398
+ brainstorm: BrainstormPanel
399
+ };
400
+ var PANELS = Object.entries(PANEL_COMPONENTS).map(([name, Panel]) => ({
401
+ name,
402
+ render: (props) => _$createComponent(Panel, {
403
+ get call() {
404
+ return props.call;
405
+ },
406
+ get subscribe() {
407
+ return props.subscribe;
408
+ }
409
+ })
410
+ }));
411
+ function registerPanels(context, call, subscribe) {
412
+ const disposers = PANELS.map((panel) => context.slot({
413
+ append: "session.panel",
414
+ render: (input) => input.name === panel.name ? panel.render({
415
+ call,
416
+ subscribe
417
+ }) : null
418
+ }));
419
+ return () => {
420
+ for (const dispose of disposers)
421
+ dispose();
422
+ };
423
+ }
424
+ var PANEL_NAMES = PANELS.map((panel) => panel.name);
425
+
426
+ // ../../node_modules/.bun/@opencode+schema@2.0.24/node_modules/@opencode/schema/dist/rpc.js
427
+ function define(definition) {
428
+ const reserved = Object.values(definition.methods).flatMap((method) => Object.keys(method.errors ?? {})).find((name) => name.startsWith("rpc."));
429
+ if (reserved)
430
+ throw new Error(`RPC error names starting with "rpc." are reserved: ${reserved}`);
431
+ return definition;
432
+ }
433
+ // src/rpc-def.ts
434
+ var obj = (properties, required = []) => ({
435
+ type: "object",
436
+ properties,
437
+ required,
438
+ additionalProperties: false
439
+ });
440
+ var str = { type: "string" };
441
+ var strArray = { type: "array", items: str };
442
+ var Preview = obj({ ok: { type: "boolean" }, title: str, lines: strArray, problems: strArray, token: str }, [
443
+ "ok",
444
+ "title",
445
+ "lines",
446
+ "problems"
447
+ ]);
448
+ var EsRpc = define({
449
+ id: "epistemic-swarm",
450
+ methods: {
451
+ status: {
452
+ input: obj({}),
453
+ output: obj({ summary: str, stage: str, pending: strArray }, ["summary", "stage", "pending"])
454
+ },
455
+ previewApproval: {
456
+ input: obj({ stage: { type: "string", enum: ["frontier", "spec"] } }, ["stage"]),
457
+ output: Preview
458
+ },
459
+ approve: {
460
+ input: obj({ stage: { type: "string", enum: ["frontier", "spec"] }, user: str, token: str }, [
461
+ "stage",
462
+ "user",
463
+ "token"
464
+ ]),
465
+ output: obj({ message: str }, ["message"]),
466
+ errors: { refused: obj({ reason: str }, ["reason"]) }
467
+ },
468
+ previewTrust: { input: obj({}), output: Preview },
469
+ trust: {
470
+ input: obj({ user: str, token: str }, ["user", "token"]),
471
+ output: obj({ message: str }, ["message"]),
472
+ errors: { refused: obj({ reason: str }, ["reason"]) }
473
+ },
474
+ previewResume: { input: obj({}), output: Preview },
475
+ previewLspInstall: { input: obj({ id: str }, ["id"]), output: Preview },
476
+ lspInstall: {
477
+ input: obj({ id: str, user: str, token: str }, ["id", "user", "token"]),
478
+ output: obj({ message: str }, ["message"]),
479
+ errors: { refused: obj({ reason: str }, ["reason"]) }
480
+ },
481
+ resume: {
482
+ input: obj({
483
+ user: str,
484
+ token: str,
485
+ acceptControlDrift: { type: "boolean" },
486
+ raiseCeilingUSD: { type: "number" },
487
+ extendRuntime: { type: "boolean" }
488
+ }, ["user", "token"]),
489
+ output: obj({ message: str }, ["message"]),
490
+ errors: { refused: obj({ reason: str }, ["reason"]) }
491
+ },
492
+ factoryState: {
493
+ input: obj({}),
494
+ output: obj({
495
+ stage: str,
496
+ runId: str,
497
+ halt: str,
498
+ release: str,
499
+ activePhase: str,
500
+ spend: obj({ usd: { type: "number" }, estimated: { type: "boolean" }, ceilingUSD: { type: "number" } }, [
501
+ "usd",
502
+ "estimated"
503
+ ]),
504
+ phases: { type: "array" },
505
+ pending: strArray
506
+ }, ["stage", "spend", "phases", "pending"])
507
+ },
508
+ lspState: {
509
+ input: obj({}),
510
+ output: obj({
511
+ enabled: { type: "boolean" },
512
+ servers: { type: "array" },
513
+ diagnostics: strArray
514
+ }, ["enabled", "servers", "diagnostics"])
515
+ },
516
+ hooksState: {
517
+ input: obj({}),
518
+ output: obj({
519
+ handlers: { type: "number" },
520
+ projectHandlers: { type: "number" },
521
+ trusted: { type: "boolean" },
522
+ projectLines: strArray,
523
+ diagnostics: strArray,
524
+ recent: strArray,
525
+ loss: { type: "array" }
526
+ }, ["handlers", "projectHandlers", "trusted", "projectLines", "diagnostics", "recent", "loss"])
527
+ },
528
+ brainstormState: {
529
+ input: obj({}),
530
+ output: obj({
531
+ active: { type: "boolean" },
532
+ brief: str,
533
+ lenses: strArray,
534
+ ideas: { type: "number" },
535
+ duplicates: { type: "number" },
536
+ scored: { type: "number" },
537
+ coverage: { type: "object" },
538
+ shortlist: { type: "array" },
539
+ gaps: strArray,
540
+ complete: { type: "boolean" }
541
+ }, ["active"])
542
+ }
543
+ },
544
+ events: {
545
+ changed: { schema: obj({ stage: str, summary: str }, ["stage", "summary"]) }
546
+ }
547
+ });
548
+
549
+ // src/tui.tsx
550
+ var tui_default = Plugin.define({
551
+ id: "epistemic-swarm.tui",
552
+ setup(context) {
553
+ const rpc = context.client.rpc(EsRpc);
554
+ const location = () => context.location ?? context.data.location.default();
555
+ const call = (method, input = {}) => rpc[method](input, {
556
+ location: location()
557
+ });
558
+ const stopPanels = registerPanels(context, call, (listener) => rpc.events.on("changed", () => listener()));
559
+ const user = userInfo().username;
560
+ const toast = (message, variant = "info") => context.ui.toast.show({
561
+ title: "Epistemic Swarm",
562
+ message,
563
+ variant
564
+ });
565
+ const confirm = async (preview, label) => {
566
+ if (!preview.ok || !preview.token) {
567
+ await context.ui.dialog.alert({
568
+ title: preview.title,
569
+ message: [...preview.problems, ...preview.lines].join(`
570
+ `)
571
+ });
572
+ return;
573
+ }
574
+ const ok = await context.ui.dialog.confirm({
575
+ title: preview.title,
576
+ message: preview.lines.join(`
577
+ `),
578
+ label: {
579
+ confirm: label,
580
+ cancel: "Cancel"
581
+ }
582
+ });
583
+ return ok ? preview.token : undefined;
584
+ };
585
+ const guarded = (fn) => async (input) => {
586
+ try {
587
+ await fn(input);
588
+ } catch (error) {
589
+ toast(error?.data?.reason ?? error?.message ?? String(error), "error");
590
+ }
591
+ };
592
+ const approve = guarded(async (input) => {
593
+ const status = await call("status");
594
+ const stage = input?.trim() || (status.pending.length === 1 ? status.pending[0] : await context.ui.dialog.select({
595
+ title: "Approve which checkpoint?",
596
+ options: [{
597
+ title: "Frontier (design tree + spend ceiling)",
598
+ value: "frontier"
599
+ }, {
600
+ title: "Spec (roadmap + every GOAL.md)",
601
+ value: "spec"
602
+ }]
603
+ }));
604
+ if (stage !== "frontier" && stage !== "spec")
605
+ return;
606
+ const token = await confirm(await call("previewApproval", {
607
+ stage
608
+ }), "Approve");
609
+ if (!token)
610
+ return;
611
+ toast((await call("approve", {
612
+ stage,
613
+ user,
614
+ token
615
+ })).message, "success");
616
+ });
617
+ const trust = guarded(async () => {
618
+ const token = await confirm(await call("previewTrust"), "Trust");
619
+ if (!token)
620
+ return;
621
+ toast((await call("trust", {
622
+ user,
623
+ token
624
+ })).message, "success");
625
+ });
626
+ const resume = guarded(async () => {
627
+ const preview = await call("previewResume");
628
+ const token = await confirm(preview, "Resume");
629
+ if (!token)
630
+ return;
631
+ const drift = preview.lines.some((line) => line.startsWith("Control-file drift"));
632
+ let raiseCeilingUSD;
633
+ if (/spend ceiling/i.test(preview.lines[0] ?? "")) {
634
+ const raised = await context.ui.dialog.prompt({
635
+ title: "New spend ceiling (USD)",
636
+ placeholder: "e.g. 50"
637
+ });
638
+ raiseCeilingUSD = raised ? Number(raised) : undefined;
639
+ }
640
+ const extendRuntime = /runtime cap/i.test(preview.lines[0] ?? "");
641
+ const result = await call("resume", {
642
+ user,
643
+ token,
644
+ ...drift ? {
645
+ acceptControlDrift: true
646
+ } : {},
647
+ ...raiseCeilingUSD ? {
648
+ raiseCeilingUSD
649
+ } : {},
650
+ ...extendRuntime ? {
651
+ extendRuntime: true
652
+ } : {}
653
+ });
654
+ toast(result.message, "success");
655
+ });
656
+ const lspInstall = guarded(async (input) => {
657
+ const id = input?.trim() || await context.ui.dialog.prompt({
658
+ title: "Install which language server?",
659
+ placeholder: "typescript, pyright"
660
+ });
661
+ if (!id)
662
+ return;
663
+ const token = await confirm(await call("previewLspInstall", {
664
+ id
665
+ }), "Install");
666
+ if (!token)
667
+ return;
668
+ toast((await call("lspInstall", {
669
+ id,
670
+ user,
671
+ token
672
+ })).message, "success");
673
+ });
674
+ const status = guarded(async () => {
675
+ const result = await call("status");
676
+ await context.ui.dialog.alert({
677
+ title: "Factory",
678
+ message: result.summary.replace(/<\/?factory-state>/g, "").trim()
679
+ });
680
+ });
681
+ context.keymap.layer(() => ({
682
+ mode: "global",
683
+ commands: [{
684
+ id: "es.approve",
685
+ title: "Epistemic Swarm: approve a checkpoint",
686
+ group: "Epistemic Swarm",
687
+ palette: true,
688
+ slash: {
689
+ name: "es-approve",
690
+ arguments: true
691
+ },
692
+ run: approve
693
+ }, {
694
+ id: "es.trust",
695
+ title: "Epistemic Swarm: trust gate commands",
696
+ group: "Epistemic Swarm",
697
+ palette: true,
698
+ slash: {
699
+ name: "es-trust"
700
+ },
701
+ run: trust
702
+ }, {
703
+ id: "es.resume",
704
+ title: "Epistemic Swarm: resume a halted factory",
705
+ group: "Epistemic Swarm",
706
+ palette: true,
707
+ slash: {
708
+ name: "es-resume"
709
+ },
710
+ run: resume
711
+ }, {
712
+ id: "es.status",
713
+ title: "Epistemic Swarm: factory status",
714
+ group: "Epistemic Swarm",
715
+ palette: true,
716
+ slash: {
717
+ name: "es-status"
718
+ },
719
+ run: status
720
+ }, {
721
+ id: "es.lsp.install",
722
+ title: "Epistemic Swarm: install a language server",
723
+ group: "Epistemic Swarm",
724
+ palette: true,
725
+ slash: {
726
+ name: "es-lsp-install",
727
+ arguments: true
728
+ },
729
+ run: lspInstall
730
+ }, {
731
+ id: "es.panel.factory",
732
+ title: "Epistemic Swarm: factory dashboard",
733
+ group: "Epistemic Swarm",
734
+ palette: true,
735
+ slash: {
736
+ name: "es-factory"
737
+ },
738
+ run: () => {
739
+ context.ui.panel.open("factory", {
740
+ presentation: "fullscreen"
741
+ });
742
+ }
743
+ }, {
744
+ id: "es.panel.lsp",
745
+ title: "Epistemic Swarm: language server panel",
746
+ group: "Epistemic Swarm",
747
+ palette: true,
748
+ slash: {
749
+ name: "es-lsp-panel"
750
+ },
751
+ run: () => {
752
+ context.ui.panel.open("lsp", {
753
+ presentation: "fullscreen"
754
+ });
755
+ }
756
+ }, {
757
+ id: "es.panel.hooks",
758
+ title: "Epistemic Swarm: hook inspector",
759
+ group: "Epistemic Swarm",
760
+ palette: true,
761
+ slash: {
762
+ name: "es-hooks"
763
+ },
764
+ run: () => {
765
+ context.ui.panel.open("hooks", {
766
+ presentation: "fullscreen"
767
+ });
768
+ }
769
+ }, {
770
+ id: "es.panel.brainstorm",
771
+ title: "Epistemic Swarm: brainstorm board",
772
+ group: "Epistemic Swarm",
773
+ palette: true,
774
+ slash: {
775
+ name: "es-brainstorm"
776
+ },
777
+ run: () => {
778
+ context.ui.panel.open("brainstorm", {
779
+ presentation: "fullscreen"
780
+ });
781
+ }
782
+ }]
783
+ }));
784
+ const stop = rpc.events.on("changed", (event) => toast(`Factory \u2192 ${event.data.stage}`));
785
+ return () => {
786
+ stopPanels();
787
+ stop();
788
+ };
789
+ }
790
+ });
791
+ export {
792
+ tui_default as default
793
+ };