@bolloon/bolloon-agent 0.1.0 → 0.1.1

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 (431) hide show
  1. package/package.json +1 -1
  2. package/dist/constraint-runtime/tests/agent.test.js +0 -16
  3. package/dist/constraint-runtime/tests/constraint.test.js +0 -41
  4. package/dist/constraint-runtime/tests/skill.test.js +0 -19
  5. package/dist/constraint-runtime/tests/thinking.test.js +0 -22
  6. package/dist/electron-preload.js +0 -15
  7. package/dist/electron-preload.js.map +0 -1
  8. package/dist/electron.js +0 -206
  9. package/dist/electron.js.map +0 -1
  10. package/dist/test/constraint-layer.test.js +0 -164
  11. package/dist/test/global-shared-context.test.js +0 -315
  12. package/dist/test/pi-sdk.test.js +0 -47
  13. package/dist/test/set-persona.test.js +0 -38
  14. package/dist/test/subagent-manager.test.js +0 -276
  15. package/dist/test/workflow-engine.test.js +0 -87
  16. package/dist/workflows/collaboration.js +0 -374
  17. package/dist/workflows/index.js +0 -54
  18. package/docs/agent-communication.md +0 -333
  19. package/docs/plans/2026-05-15-document-agent-design.md +0 -479
  20. package/docs/plans/2026-05-15-document-agent-implementation-plan.md +0 -792
  21. package/docs/plans/2026-05-16-chat-ui-design.md +0 -86
  22. package/docs/plans/2026-05-16-constraint-runtime-design.md +0 -106
  23. package/docs/plans/2026-05-16-constraint-runtime-implementation.md +0 -441
  24. package/docs//346/225/260/345/255/246/350/276/205/345/212/251/346/231/272/350/203/275/344/275/223-/346/240/270/345/277/203/346/225/210/346/236/234/345/256/232/344/271/211.md +0 -287
  25. package/src/bollharness/.boll/CLAUDE.md.template +0 -34
  26. package/src/bollharness/.boll/MANIFEST.yaml +0 -213
  27. package/src/bollharness/.boll/active-review-agents/.gitkeep +0 -0
  28. package/src/bollharness/.boll/agents/review-base.yaml +0 -108
  29. package/src/bollharness/.boll/deploy-allowlist.yaml +0 -38
  30. package/src/bollharness/.boll/inbox/schema/message-v1.json +0 -99
  31. package/src/bollharness/.boll/install-staging/.gitkeep +0 -0
  32. package/src/bollharness/.boll/issue-adapter.yaml +0 -31
  33. package/src/bollharness/.boll/plugins/boll-mode-toolkit/contracts/mode-contract.md +0 -85
  34. package/src/bollharness/.boll/plugins/boll-review-toolkit/contracts/evidence-packet-schema.json +0 -102
  35. package/src/bollharness/.boll/plugins/boll-review-toolkit/contracts/review-contract.yaml +0 -247
  36. package/src/bollharness/.boll/rules/backend-routes.md +0 -31
  37. package/src/bollharness/.boll/rules/closure-semantics.md +0 -30
  38. package/src/bollharness/.boll/rules/env-vars.md +0 -32
  39. package/src/bollharness/.boll/rules/hanis-protocol.md +0 -145
  40. package/src/bollharness/.boll/rules/repo-structure.md +0 -42
  41. package/src/bollharness/.boll/rules/review-agent-isolation.md +0 -73
  42. package/src/bollharness/.boll/rules/source-of-truth.md +0 -33
  43. package/src/bollharness/.boll/settings.json +0 -180
  44. package/src/bollharness/.boll/settings.json.template +0 -31
  45. package/src/bollharness/.boll/skills/arch/SKILL.md +0 -372
  46. package/src/bollharness/.boll/skills/bug-pipeline/SKILL.md +0 -168
  47. package/src/bollharness/.boll/skills/bug-triage/SKILL.md +0 -161
  48. package/src/bollharness/.boll/skills/context-chains/SKILL.md +0 -250
  49. package/src/bollharness/.boll/skills/context-chains/context-chain-index.md +0 -48
  50. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/code_change_extractor.ts +0 -142
  51. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/debugging_extractor.ts +0 -126
  52. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/design_extractor.ts +0 -148
  53. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/planning_extractor.ts +0 -162
  54. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/question_extractor.ts +0 -116
  55. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/review_extractor.ts +0 -136
  56. package/src/bollharness/.boll/skills/crystal-learn/SKILL.md +0 -93
  57. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-0.md +0 -34
  58. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-1.md +0 -34
  59. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-2.md +0 -35
  60. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-3.md +0 -34
  61. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-4.md +0 -43
  62. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-5.md +0 -34
  63. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-6.md +0 -37
  64. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-7.md +0 -46
  65. package/src/bollharness/.boll/skills/guardian-fixer/PROMPT.md +0 -415
  66. package/src/bollharness/.boll/skills/guardian-fixer/SKILL.md +0 -320
  67. package/src/bollharness/.boll/skills/harness-dev/SKILL.md +0 -93
  68. package/src/bollharness/.boll/skills/harness-dev/examples/README.md +0 -227
  69. package/src/bollharness/.boll/skills/harness-dev-handoff/SKILL.md +0 -165
  70. package/src/bollharness/.boll/skills/harness-eng/SKILL.md +0 -110
  71. package/src/bollharness/.boll/skills/harness-eng-test/SKILL.md +0 -79
  72. package/src/bollharness/.boll/skills/harness-lab/SKILL.md +0 -170
  73. package/src/bollharness/.boll/skills/harness-ops/SKILL.md +0 -57
  74. package/src/bollharness/.boll/skills/harness-voice/SKILL.md +0 -183
  75. package/src/bollharness/.boll/skills/judgment/SKILL.md +0 -115
  76. package/src/bollharness/.boll/skills/lead/SKILL.md +0 -245
  77. package/src/bollharness/.boll/skills/lead/install-wow-harness.md +0 -77
  78. package/src/bollharness/.boll/skills/lead/ref-review-sop.md +0 -91
  79. package/src/bollharness/.boll/skills/lead/ref-stages.md +0 -129
  80. package/src/bollharness/.boll/skills/skill-discovery/SKILL.md +0 -169
  81. package/src/bollharness/.boll/skills/task-arch/SKILL.md +0 -106
  82. package/src/bollharness/.boll/skills/toolkit/SKILL.md +0 -57
  83. package/src/bollharness/.boll/tasks/.gitkeep +0 -0
  84. package/src/bollharness/.boll/toolkit-index.yaml +0 -112
  85. package/src/bollharness/.claude/agents/review-base.yaml +0 -108
  86. package/src/bollharness/.claude/plugins/boll-mode-toolkit/.claude-plugin/plugin.json +0 -44
  87. package/src/bollharness/.claude/plugins/boll-review-toolkit/.claude-plugin/plugin.json +0 -24
  88. package/src/bollharness/.claude/plugins/boll-review-toolkit/contracts/evidence-packet-schema.json +0 -102
  89. package/src/bollharness/.claude/plugins/boll-review-toolkit/contracts/review-contract.yaml +0 -247
  90. package/src/bollharness/.claude/settings.json +0 -157
  91. package/src/bollharness/.claude/skills/arch/SKILL.md +0 -64
  92. package/src/bollharness/.claude/skills/crystal-learn/SKILL.md +0 -93
  93. package/src/bollharness/.claude/skills/guardian-fixer/PROMPT.md +0 -44
  94. package/src/bollharness/.claude/skills/guardian-fixer/SKILL.md +0 -324
  95. package/src/bollharness/.claude/skills/harness-dev/SKILL.md +0 -93
  96. package/src/bollharness/.claude/skills/harness-dev/examples/README.md +0 -17
  97. package/src/bollharness/.claude/skills/harness-dev-handoff/SKILL.md +0 -165
  98. package/src/bollharness/.claude/skills/harness-eng/SKILL.md +0 -183
  99. package/src/bollharness/.claude/skills/harness-eng-test/SKILL.md +0 -57
  100. package/src/bollharness/.claude/skills/harness-ops/SKILL.md +0 -57
  101. package/src/bollharness/.claude/skills/harness-voice/SKILL.md +0 -84
  102. package/src/bollharness/.claude/skills/lead/INDEX.md +0 -28
  103. package/src/bollharness/.claude/skills/lead/SKILL.md +0 -24
  104. package/src/bollharness/.claude/skills/lead/install-wow-harness.md +0 -77
  105. package/src/bollharness/.claude/skills/lead/ref-review-sop.md +0 -48
  106. package/src/bollharness/.claude/skills/lead/ref-stages.md +0 -58
  107. package/src/bollharness/.claude/skills/plan-lock/SKILL.md +0 -74
  108. package/src/bollharness/.claude/skills/skill-discovery/SKILL.md +0 -120
  109. package/src/bollharness/.claude/skills/task-arch/SKILL.md +0 -106
  110. package/src/bollharness/.claude/skills/toolkit/SKILL.md +0 -57
  111. package/src/bollharness/.claude/skills/toolkit/list.sh +0 -92
  112. package/src/bollharness/.githooks/pre-commit +0 -21
  113. package/src/bollharness/.github/workflows/ci.yml +0 -88
  114. package/src/bollharness/CLAUDE.md +0 -73
  115. package/src/bollharness/README.md +0 -143
  116. package/src/bollharness/README.zh-CN.md +0 -131
  117. package/src/bollharness/docs/decisions/ADR-030-guard-signal-protocol-and-governance-reload.md +0 -1076
  118. package/src/bollharness/docs/decisions/ADR-038-harness-optimization-strategy.md +0 -2039
  119. package/src/bollharness/docs/decisions/ADR-041-codex-claude-code-division-of-labor.md +0 -128
  120. package/src/bollharness/docs/decisions/ADR-H1-crystal-learn-revival.md +0 -188
  121. package/src/bollharness/docs/decisions/ADR-H2-identity-isolation.md +0 -183
  122. package/src/bollharness/docs/decisions/ADR-H3-memory-scope.md +0 -133
  123. package/src/bollharness/docs/decisions/ADR-H4-prompt-governance.md +0 -146
  124. package/src/bollharness/docs/decisions/ADR-H5-gate-quantization.md +0 -212
  125. package/src/bollharness/docs/decisions/ADR-H6-state-file-health.md +0 -211
  126. package/src/bollharness/docs/decisions/ADR-H8-issue-and-doc-compliance.md +0 -202
  127. package/src/bollharness/docs/decisions/ADR-H9-mailbox.md +0 -231
  128. package/src/bollharness/docs/decisions/PLAN-H1-crystal-learn-revival.md +0 -270
  129. package/src/bollharness/docs/decisions/PLAN-H2-identity-isolation.md +0 -291
  130. package/src/bollharness/docs/decisions/PLAN-H3-memory-scope.md +0 -228
  131. package/src/bollharness/docs/decisions/PLAN-H4-prompt-governance.md +0 -227
  132. package/src/bollharness/docs/decisions/PLAN-H5-gate-quantization.md +0 -239
  133. package/src/bollharness/docs/decisions/PLAN-H6-state-file-health.md +0 -325
  134. package/src/bollharness/docs/decisions/PLAN-H8-issue-and-doc-compliance.md +0 -242
  135. package/src/bollharness/docs/decisions/PLAN-H9-mailbox.md +0 -378
  136. package/src/bollharness/docs/launch-article-en.md +0 -276
  137. package/src/bollharness/docs/launch-article-zh.md +0 -305
  138. package/src/bollharness/docs/practice.html +0 -356
  139. package/src/bollharness/docs/practice.md +0 -82
  140. package/src/bollharness/docs/research/round-1/README.md +0 -11
  141. package/src/bollharness/docs/research/round-2/README.md +0 -11
  142. package/src/bollharness/docs/research/round-3/README.md +0 -11
  143. package/src/bollharness/docs/research/round-4/README.md +0 -11
  144. package/src/bollharness/docs/research/round-5/README.md +0 -11
  145. package/src/bollharness/docs/research/round-6/README.md +0 -11
  146. package/src/bollharness/package-lock.json +0 -48
  147. package/src/bollharness/reference/boll-reference/.claude/rules/backend-routes.md +0 -268
  148. package/src/bollharness/reference/boll-reference/.claude/rules/bridge.md +0 -20
  149. package/src/bollharness/reference/boll-reference/.claude/rules/closure-semantics.md +0 -30
  150. package/src/bollharness/reference/boll-reference/.claude/rules/coaching.md +0 -13
  151. package/src/bollharness/reference/boll-reference/.claude/rules/env-vars.md +0 -50
  152. package/src/bollharness/reference/boll-reference/.claude/rules/hackathon.md +0 -12
  153. package/src/bollharness/reference/boll-reference/.claude/rules/repo-structure.md +0 -184
  154. package/src/bollharness/reference/boll-reference/.claude/rules/review-agent-isolation.md +0 -112
  155. package/src/bollharness/reference/boll-reference/.claude/rules/scenes.md +0 -12
  156. package/src/bollharness/reference/boll-reference/.claude/skills/arch/SKILL.md +0 -551
  157. package/src/bollharness/reference/boll-reference/.claude/skills/boll-animation/SKILL.md +0 -26
  158. package/src/bollharness/reference/boll-reference/.claude/skills/boll-bridge/SKILL.md +0 -227
  159. package/src/bollharness/reference/boll-reference/.claude/skills/boll-bridge/agents/openai.yaml +0 -4
  160. package/src/bollharness/reference/boll-reference/.claude/skills/boll-bridge/references/bridge-failure-taxonomy.md +0 -142
  161. package/src/bollharness/reference/boll-reference/.claude/skills/boll-bridge/references/bridge-validation-ladder.md +0 -107
  162. package/src/bollharness/reference/boll-reference/.claude/skills/boll-crystal/SKILL.md +0 -893
  163. package/src/bollharness/reference/boll-reference/.claude/skills/boll-crystal-learn/SKILL.md +0 -89
  164. package/src/bollharness/reference/boll-reference/.claude/skills/boll-dev/SKILL.md +0 -93
  165. package/src/bollharness/reference/boll-reference/.claude/skills/boll-dev/examples/README.md +0 -209
  166. package/src/bollharness/reference/boll-reference/.claude/skills/boll-dev-handoff/SKILL.md +0 -165
  167. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng/SKILL.md +0 -110
  168. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-frontend/SKILL.md +0 -203
  169. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-hdc/SKILL.md +0 -27
  170. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-orchestrator/SKILL.md +0 -28
  171. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-prompt/SKILL.md +0 -27
  172. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-test/SKILL.md +0 -79
  173. package/src/bollharness/reference/boll-reference/.claude/skills/boll-lab/SKILL.md +0 -372
  174. package/src/bollharness/reference/boll-reference/.claude/skills/boll-run/SKILL.md +0 -437
  175. package/src/bollharness/reference/boll-reference/.claude/skills/boll-ux-appstore/SKILL.md +0 -27
  176. package/src/bollharness/reference/boll-reference/.claude/skills/boll-voice/SKILL.md +0 -442
  177. package/src/bollharness/reference/boll-reference/.claude/skills/guardian-fixer/PROMPT.md +0 -421
  178. package/src/bollharness/reference/boll-reference/.claude/skills/guardian-fixer/SKILL.md +0 -326
  179. package/src/bollharness/reference/boll-reference/.claude/skills/lead/SKILL.md +0 -155
  180. package/src/bollharness/reference/boll-reference/.claude/skills/lead/ref-review-sop.md +0 -91
  181. package/src/bollharness/reference/boll-reference/.claude/skills/lead/ref-stages.md +0 -129
  182. package/src/bollharness/reference/boll-reference/.claude/skills/nature-designer/output/skill-map-preview.png +0 -0
  183. package/src/bollharness/reference/boll-reference/.claude/skills/nature-designer/output/skill-map-v2.png +0 -0
  184. package/src/bollharness/reference/boll-reference/.claude/skills/nature-designer/output/skill-map-v3.png +0 -0
  185. package/src/bollharness/reference/boll-reference/.claude/skills/nature-designer/output/skill-map-v4.png +0 -0
  186. package/src/bollharness/reference/boll-reference/.claude/skills/plan-lock/SKILL.md +0 -425
  187. package/src/bollharness/reference/boll-reference/.claude/skills/plan-lock/ref-three-checks.md +0 -62
  188. package/src/bollharness/reference/boll-reference/.claude/skills/plan-lock/ref-wp-templates.md +0 -78
  189. package/src/bollharness/reference/boll-reference/.claude/skills/task-arch/SKILL.md +0 -76
  190. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-graph/SKILL.md +0 -57
  191. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-graph/beads-graph.sh +0 -153
  192. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-init/SKILL.md +0 -52
  193. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-init/beads-auto-link.sh +0 -76
  194. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-sync/SKILL.md +0 -50
  195. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-sync/beads-sync-proj.sh +0 -108
  196. package/src/bollharness/reference/boll-reference/docs/architecture/AGENT-PROFILE.md +0 -151
  197. package/src/bollharness/reference/boll-reference/docs/architecture/COST-STRUCTURE.md +0 -56
  198. package/src/bollharness/reference/boll-reference/docs/architecture/INDEX.md +0 -76
  199. package/src/bollharness/reference/boll-reference/docs/architecture/MODULE1-INTENT-FIELD.md +0 -116
  200. package/src/bollharness/reference/boll-reference/docs/architecture/MODULE2-CRYSTALLIZATION.md +0 -200
  201. package/src/bollharness/reference/boll-reference/docs/architecture/PRINCIPLES.md +0 -84
  202. package/src/bollharness/reference/boll-reference/docs/architecture/PROTOCOL-CORE.md +0 -209
  203. package/src/bollharness/reference/boll-reference/docs/architecture/VISION.md +0 -181
  204. package/src/bollharness/reference/boll-reference/docs/architecture/discussions/D-01-MARKET-SCENE-PROTOCOL.md +0 -754
  205. package/src/bollharness/reference/boll-reference/scripts/hooks/stop-evaluator.md +0 -57
  206. package/src/bollharness/scripts/context-fragments/artifact-linkage.md +0 -14
  207. package/src/bollharness/scripts/context-fragments/auth-consumers.md +0 -17
  208. package/src/bollharness/scripts/context-fragments/bridge-constitution.md +0 -13
  209. package/src/bollharness/scripts/context-fragments/catalyst-distributed.md +0 -18
  210. package/src/bollharness/scripts/context-fragments/closure-checklist.md +0 -13
  211. package/src/bollharness/scripts/context-fragments/contract-consumers.md +0 -15
  212. package/src/bollharness/scripts/context-fragments/db-shared-structures.md +0 -15
  213. package/src/bollharness/scripts/context-fragments/fixed-three-layers.md +0 -19
  214. package/src/bollharness/scripts/context-fragments/general-dev-principles.md +0 -11
  215. package/src/bollharness/scripts/context-fragments/issue-first.md +0 -8
  216. package/src/bollharness/scripts/context-fragments/mcp-parity.md +0 -16
  217. package/src/bollharness/scripts/context-fragments/pi-agent-operations.md +0 -74
  218. package/src/bollharness/scripts/context-fragments/protocol-consumers.md +0 -15
  219. package/src/bollharness/scripts/context-fragments/run-events-consumers.md +0 -15
  220. package/src/bollharness/scripts/context-fragments/scene-fidelity.md +0 -13
  221. package/src/bollharness/scripts/context-fragments/truth-source-hierarchy.md +0 -15
  222. package/src/bollharness/scripts/context-fragments/two-language.md +0 -15
  223. package/src/bollharness/scripts/context-fragments/version-sources.md +0 -14
  224. package/src/bollharness/scripts/hooks/stop-evaluator.md +0 -83
  225. package/src/bollharness/templates/scaffold/.boll/guard/.gitkeep +0 -0
  226. package/src/bollharness/templates/scaffold/.boll/metrics/.gitkeep +0 -0
  227. package/src/bollharness/templates/scaffold/.boll/state/.gitkeep +0 -0
  228. package/src/bollharness/templates/scaffold/CLAUDE.md +0 -89
  229. package/src/bollharness/templates/scaffold/docs/INDEX.md +0 -3
  230. package/src/bollharness/templates/scaffold/docs/decisions/ADR_TEMPLATE.md +0 -38
  231. package/src/bollharness/templates/scaffold/docs/decisions/PLAN_TEMPLATE.md +0 -45
  232. package/src/bollharness/templates/scaffold/docs/decisions/tasks/.gitkeep +0 -2
  233. package/src/bollharness/templates/scaffold/docs/issues/.gitkeep +0 -0
  234. package/src/bollharness/templates/scaffold/docs/issues/GUARD_ISSUE_TEMPLATE.md +0 -35
  235. package/src/bollharness/templates/scaffold/docs/issues/ISSUE_TEMPLATE.md +0 -51
  236. package/src/bollharness/tsconfig.json +0 -26
  237. package/src/constraint-runtime/package-lock.json +0 -48
  238. package/src/constraint-runtime/package.json +0 -34
  239. package/src/constraint-runtime/src/_archive_helper.ts +0 -16
  240. package/src/constraint-runtime/src/agent/coordinator.ts +0 -71
  241. package/src/constraint-runtime/src/agent/index.ts +0 -1
  242. package/src/constraint-runtime/src/assistant/index.ts +0 -15
  243. package/src/constraint-runtime/src/bootstrap/index.ts +0 -15
  244. package/src/constraint-runtime/src/bootstrap_graph.ts +0 -17
  245. package/src/constraint-runtime/src/bridge/index.ts +0 -15
  246. package/src/constraint-runtime/src/buddy/index.ts +0 -15
  247. package/src/constraint-runtime/src/cli/index.ts +0 -15
  248. package/src/constraint-runtime/src/command_graph.ts +0 -20
  249. package/src/constraint-runtime/src/commands.ts +0 -83
  250. package/src/constraint-runtime/src/components/index.ts +0 -15
  251. package/src/constraint-runtime/src/constants/index.ts +0 -15
  252. package/src/constraint-runtime/src/constraint/budget.ts +0 -25
  253. package/src/constraint-runtime/src/constraint/index.ts +0 -3
  254. package/src/constraint-runtime/src/constraint/permission.ts +0 -28
  255. package/src/constraint-runtime/src/context.ts +0 -45
  256. package/src/constraint-runtime/src/coordinator/index.ts +0 -15
  257. package/src/constraint-runtime/src/cost_hook.ts +0 -6
  258. package/src/constraint-runtime/src/cost_tracker.ts +0 -9
  259. package/src/constraint-runtime/src/deferred_init.ts +0 -18
  260. package/src/constraint-runtime/src/direct_modes.ts +0 -13
  261. package/src/constraint-runtime/src/dynamic-tool-loader.ts +0 -115
  262. package/src/constraint-runtime/src/entrypoints/index.ts +0 -15
  263. package/src/constraint-runtime/src/execution_registry.ts +0 -41
  264. package/src/constraint-runtime/src/history.ts +0 -16
  265. package/src/constraint-runtime/src/hooks/index.ts +0 -15
  266. package/src/constraint-runtime/src/index.ts +0 -28
  267. package/src/constraint-runtime/src/ink.ts +0 -4
  268. package/src/constraint-runtime/src/keybindings/index.ts +0 -15
  269. package/src/constraint-runtime/src/memdir/index.ts +0 -15
  270. package/src/constraint-runtime/src/migrations/index.ts +0 -15
  271. package/src/constraint-runtime/src/models.ts +0 -49
  272. package/src/constraint-runtime/src/moreright/index.ts +0 -15
  273. package/src/constraint-runtime/src/native_ts/index.ts +0 -15
  274. package/src/constraint-runtime/src/output_styles/index.ts +0 -15
  275. package/src/constraint-runtime/src/parity_audit.ts +0 -23
  276. package/src/constraint-runtime/src/plugins/index.ts +0 -15
  277. package/src/constraint-runtime/src/port_manifest.ts +0 -20
  278. package/src/constraint-runtime/src/prefetch.ts +0 -17
  279. package/src/constraint-runtime/src/query.ts +0 -7
  280. package/src/constraint-runtime/src/reference_data/archive_surface_snapshot.json +0 -63
  281. package/src/constraint-runtime/src/reference_data/commands_snapshot.json +0 -1037
  282. package/src/constraint-runtime/src/reference_data/subsystems/OpenCLI.json +0 -10
  283. package/src/constraint-runtime/src/reference_data/subsystems/PolymarketSDK.json +0 -12
  284. package/src/constraint-runtime/src/reference_data/subsystems/SafeSDK.json +0 -14
  285. package/src/constraint-runtime/src/reference_data/subsystems/assistant.json +0 -8
  286. package/src/constraint-runtime/src/reference_data/subsystems/bootstrap.json +0 -8
  287. package/src/constraint-runtime/src/reference_data/subsystems/bridge.json +0 -32
  288. package/src/constraint-runtime/src/reference_data/subsystems/buddy.json +0 -13
  289. package/src/constraint-runtime/src/reference_data/subsystems/cli.json +0 -26
  290. package/src/constraint-runtime/src/reference_data/subsystems/components.json +0 -32
  291. package/src/constraint-runtime/src/reference_data/subsystems/constants.json +0 -28
  292. package/src/constraint-runtime/src/reference_data/subsystems/coordinator.json +0 -8
  293. package/src/constraint-runtime/src/reference_data/subsystems/entrypoints.json +0 -15
  294. package/src/constraint-runtime/src/reference_data/subsystems/hooks.json +0 -32
  295. package/src/constraint-runtime/src/reference_data/subsystems/keybindings.json +0 -21
  296. package/src/constraint-runtime/src/reference_data/subsystems/memdir.json +0 -15
  297. package/src/constraint-runtime/src/reference_data/subsystems/migrations.json +0 -18
  298. package/src/constraint-runtime/src/reference_data/subsystems/moreright.json +0 -8
  299. package/src/constraint-runtime/src/reference_data/subsystems/native_ts.json +0 -11
  300. package/src/constraint-runtime/src/reference_data/subsystems/outputStyles.json +0 -8
  301. package/src/constraint-runtime/src/reference_data/subsystems/plugins.json +0 -9
  302. package/src/constraint-runtime/src/reference_data/subsystems/remote.json +0 -11
  303. package/src/constraint-runtime/src/reference_data/subsystems/schemas.json +0 -8
  304. package/src/constraint-runtime/src/reference_data/subsystems/screens.json +0 -10
  305. package/src/constraint-runtime/src/reference_data/subsystems/server.json +0 -10
  306. package/src/constraint-runtime/src/reference_data/subsystems/services.json +0 -32
  307. package/src/constraint-runtime/src/reference_data/subsystems/skills.json +0 -27
  308. package/src/constraint-runtime/src/reference_data/subsystems/state.json +0 -13
  309. package/src/constraint-runtime/src/reference_data/subsystems/types.json +0 -18
  310. package/src/constraint-runtime/src/reference_data/subsystems/upstreamproxy.json +0 -9
  311. package/src/constraint-runtime/src/reference_data/subsystems/utils.json +0 -32
  312. package/src/constraint-runtime/src/reference_data/subsystems/vim.json +0 -12
  313. package/src/constraint-runtime/src/reference_data/subsystems/voice.json +0 -8
  314. package/src/constraint-runtime/src/reference_data/tools_snapshot.json +0 -1042
  315. package/src/constraint-runtime/src/remote/index.ts +0 -15
  316. package/src/constraint-runtime/src/remote_runtime.ts +0 -17
  317. package/src/constraint-runtime/src/runtime/index.ts +0 -1
  318. package/src/constraint-runtime/src/runtime/session.ts +0 -42
  319. package/src/constraint-runtime/src/schemas/index.ts +0 -15
  320. package/src/constraint-runtime/src/screens/index.ts +0 -15
  321. package/src/constraint-runtime/src/server/index.ts +0 -15
  322. package/src/constraint-runtime/src/services/index.ts +0 -15
  323. package/src/constraint-runtime/src/session_store.ts +0 -32
  324. package/src/constraint-runtime/src/setup.ts +0 -50
  325. package/src/constraint-runtime/src/skills/index.ts +0 -1
  326. package/src/constraint-runtime/src/skills/skill-registry.ts +0 -40
  327. package/src/constraint-runtime/src/state/index.ts +0 -15
  328. package/src/constraint-runtime/src/system_init.ts +0 -21
  329. package/src/constraint-runtime/src/thinking/engine.ts +0 -61
  330. package/src/constraint-runtime/src/thinking/index.ts +0 -1
  331. package/src/constraint-runtime/src/tool_pool.ts +0 -20
  332. package/src/constraint-runtime/src/tools/OpenCLI/execAdapter.ts +0 -12
  333. package/src/constraint-runtime/src/tools/OpenCLI/listAdapters.ts +0 -12
  334. package/src/constraint-runtime/src/tools/OpenCLI/runCommand.ts +0 -13
  335. package/src/constraint-runtime/src/tools/PolymarketSDK/cancelOrder.ts +0 -10
  336. package/src/constraint-runtime/src/tools/PolymarketSDK/createOrder.ts +0 -13
  337. package/src/constraint-runtime/src/tools/PolymarketSDK/getMarket.ts +0 -14
  338. package/src/constraint-runtime/src/tools/PolymarketSDK/getOrders.ts +0 -10
  339. package/src/constraint-runtime/src/tools/PolymarketSDK/listMarkets.ts +0 -24
  340. package/src/constraint-runtime/src/tools/SafeSDK/confirmTransaction.ts +0 -13
  341. package/src/constraint-runtime/src/tools/SafeSDK/createTransaction.ts +0 -23
  342. package/src/constraint-runtime/src/tools/SafeSDK/deploySafe.ts +0 -12
  343. package/src/constraint-runtime/src/tools/SafeSDK/executeTransaction.ts +0 -12
  344. package/src/constraint-runtime/src/tools/SafeSDK/getBalance.ts +0 -10
  345. package/src/constraint-runtime/src/tools/SafeSDK/getPendingTransactions.ts +0 -10
  346. package/src/constraint-runtime/src/tools/SafeSDK/proposeTransaction.ts +0 -14
  347. package/src/constraint-runtime/src/tools/WalletTools/autoPay.ts +0 -58
  348. package/src/constraint-runtime/src/tools/WalletTools/createWallet.ts +0 -19
  349. package/src/constraint-runtime/src/tools/WalletTools/getBalance.ts +0 -28
  350. package/src/constraint-runtime/src/tools/WalletTools/importWallet.ts +0 -34
  351. package/src/constraint-runtime/src/tools/WalletTools/sendTransaction.ts +0 -50
  352. package/src/constraint-runtime/src/tools/WalletTools/signMessage.ts +0 -23
  353. package/src/constraint-runtime/src/tools/WalletTools/transferToken.ts +0 -49
  354. package/src/constraint-runtime/src/tools.ts +0 -100
  355. package/src/constraint-runtime/src/transcript.ts +0 -23
  356. package/src/constraint-runtime/src/types/index.ts +0 -15
  357. package/src/constraint-runtime/src/upstream_proxy/index.ts +0 -15
  358. package/src/constraint-runtime/src/utils/index.ts +0 -15
  359. package/src/constraint-runtime/src/vim/index.ts +0 -15
  360. package/src/constraint-runtime/src/voice/index.ts +0 -15
  361. package/src/constraint-runtime/tests/agent.test.ts +0 -20
  362. package/src/constraint-runtime/tests/constraint.test.ts +0 -47
  363. package/src/constraint-runtime/tests/skill.test.ts +0 -23
  364. package/src/constraint-runtime/tests/thinking.test.ts +0 -28
  365. package/src/constraint-runtime/tsconfig.json +0 -13
  366. package/src/pi-ecosystem/index.ts +0 -453
  367. package/src/pi-ecosystem-colony/index.ts +0 -482
  368. package/src/pi-ecosystem-goals/index.ts +0 -585
  369. package/src/pi-ecosystem-judgment/decision.ts +0 -431
  370. package/src/pi-ecosystem-judgment/distillation.ts +0 -398
  371. package/src/pi-ecosystem-judgment/human-value-store.ts +0 -580
  372. package/src/pi-ecosystem-judgment/index.ts +0 -678
  373. package/src/pi-ecosystem-judgment/value-injection.ts +0 -744
  374. package/src/pi-ecosystem-mcp/index.ts +0 -427
  375. package/src/pi-ecosystem-subagents/index.ts +0 -408
  376. package/src/test/ai-judgment-test.ts +0 -92
  377. package/src/test/bollharness-integration.test.ts +0 -398
  378. package/src/test/channel-agent-multi-dialogue.ts +0 -265
  379. package/src/test/channel-heartbeat-agent-test.ts +0 -244
  380. package/src/test/constraint-layer.test.ts +0 -191
  381. package/src/test/diap-identity-test.ts +0 -222
  382. package/src/test/diap-quick-test.ts +0 -73
  383. package/src/test/global-shared-context.test.ts +0 -393
  384. package/src/test/harness-judgment-injection.test.ts +0 -353
  385. package/src/test/harness-workflow-integrator-test.ts +0 -285
  386. package/src/test/human-value-store.test.ts +0 -316
  387. package/src/test/hybrid-integration-test.ts +0 -126
  388. package/src/test/hybrid-messenger-verify.ts +0 -68
  389. package/src/test/iroh-bistream-debug.ts +0 -50
  390. package/src/test/iroh-communication.test.ts +0 -81
  391. package/src/test/iroh-debug-test.ts +0 -69
  392. package/src/test/iroh-diap-test.ts +0 -90
  393. package/src/test/iroh-direct-connect.ts +0 -65
  394. package/src/test/iroh-e2e-fixed.ts +0 -106
  395. package/src/test/iroh-e2e-same-process.ts +0 -83
  396. package/src/test/iroh-e2e.ts +0 -83
  397. package/src/test/iroh-final-e2e.ts +0 -84
  398. package/src/test/iroh-relay-test.ts +0 -46
  399. package/src/test/iroh-simple-test.ts +0 -49
  400. package/src/test/iroh-transport-verify.ts +0 -60
  401. package/src/test/iroh-transport.test.ts +0 -47
  402. package/src/test/iroh-two-nodes.ts +0 -87
  403. package/src/test/iroh-verify.ts +0 -55
  404. package/src/test/judgment-decision.test.ts +0 -373
  405. package/src/test/llm-judgment-integration.test.ts +0 -257
  406. package/src/test/p2p-agent-complex-dialogue.ts +0 -490
  407. package/src/test/p2p-agent-dialogue.ts +0 -423
  408. package/src/test/p2p-agent-full-bidirectional.ts +0 -686
  409. package/src/test/p2p-agent-harness-flow.ts +0 -562
  410. package/src/test/p2p-agent-harness-single.ts +0 -175
  411. package/src/test/p2p-ai-dialogue-test.ts +0 -374
  412. package/src/test/p2p-cid-connect-test.ts +0 -245
  413. package/src/test/p2p-connect-receiver.ts +0 -85
  414. package/src/test/p2p-iroh-test.ts +0 -214
  415. package/src/test/p2p-minimal-test.ts +0 -264
  416. package/src/test/p2p-node-1.ts +0 -172
  417. package/src/test/p2p-node-2.ts +0 -172
  418. package/src/test/p2p-server.ts +0 -335
  419. package/src/test/p2p-two-nodes-test.ts +0 -542
  420. package/src/test/pi-sdk.test.ts +0 -47
  421. package/src/test/set-persona.ts +0 -56
  422. package/src/test/simple.test.ts +0 -11
  423. package/src/test/storage-integration.test.ts +0 -191
  424. package/src/test/subagent-manager.test.ts +0 -392
  425. package/src/test/test-gate-flow.test.ts +0 -92
  426. package/src/test/workflow-engine.test.ts +0 -101
  427. package/src/web/design.md +0 -99
  428. package/src/workflows/collaboration.ts +0 -455
  429. package/src/workflows/index.ts +0 -64
  430. package/vitest.config.ts +0 -12
  431. package//346/203/263/346/263/225.md +0 -79
@@ -1,585 +0,0 @@
1
- /**
2
- * Pi Goals Integration for Bolloon
3
- *
4
- * Provides persistent goal tracking and workflow orchestration.
5
- * Based on pi-goals philosophy: goal-oriented agent workflows with budget enforcement.
6
- *
7
- * Key features:
8
- * - Persistent goal state across sessions
9
- * - Goal queue with FIFO execution
10
- * - Budget enforcement (max time/tokens, min work thresholds)
11
- * - Workflow templates with {{args}} placeholders
12
- * - Churn monitoring to detect drift/stalling
13
- */
14
-
15
- import * as fs from 'fs/promises';
16
- import * as path from 'path';
17
-
18
- // Goal state
19
- export interface Goal {
20
- id: string;
21
- objective: string;
22
- status: GoalStatus;
23
- createdAt: string;
24
- startedAt?: string;
25
- completedAt?: string;
26
- budget?: GoalBudget;
27
- result?: string;
28
- error?: string;
29
- summary?: string;
30
- metadata?: Record<string, unknown>;
31
- }
32
-
33
- export type GoalStatus = 'pending' | 'in_progress' | 'completed' | 'failed' | 'paused' | 'cutoff';
34
-
35
- export interface GoalBudget {
36
- maxTimeMs: number;
37
- maxTokens: number;
38
- minWorkMs?: number;
39
- minTokens?: number;
40
- }
41
-
42
- export interface GoalQueue {
43
- goals: Goal[];
44
- currentIndex: number;
45
- }
46
-
47
- // Workflow template
48
- export interface WorkflowTemplate {
49
- name: string;
50
- description?: string;
51
- goals: string[];
52
- args?: Record<string, { description?: string; default?: string }>;
53
- gate?: string;
54
- }
55
-
56
- // Churn detection
57
- export interface ChurnEvent {
58
- goalId: string;
59
- type: 'drift' | 'stall' | 'repeat';
60
- message: string;
61
- timestamp: string;
62
- }
63
-
64
- // State
65
- let goalQueue: Goal[] = [];
66
- let currentIndex = 0;
67
- const GOALS_DIR = path.join(process.env.HOME || '/tmp', '.bolloon', 'goals');
68
- const GOALS_FILE = path.join(GOALS_DIR, 'queue.json');
69
- const CHURN_FILE = path.join(GOALS_DIR, 'churn.json');
70
- const TEMPLATES_DIR = path.join(process.cwd(), '.pi-goals');
71
- const TEMPLATES_DIR_ALT = path.join(process.cwd(), '.ai', '.pi-goals');
72
-
73
- // Churn monitoring
74
- let churnEvents: ChurnEvent[] = [];
75
- let lastGoalSnapshot: { goalId: string; hash: string; timestamp: string } | null = null;
76
-
77
- /**
78
- * Generate a unique goal ID
79
- */
80
- function generateGoalId(): string {
81
- return `goal-${Date.now()}-${Math.random().toString(36).substring(2, 8)}`;
82
- }
83
-
84
- /**
85
- * Create a new goal
86
- */
87
- export async function createGoal(objective: string, budget?: GoalBudget, metadata?: Record<string, unknown>): Promise<Goal> {
88
- const goal: Goal = {
89
- id: generateGoalId(),
90
- objective,
91
- status: 'pending',
92
- createdAt: new Date().toISOString(),
93
- budget,
94
- metadata,
95
- };
96
-
97
- goalQueue.push(goal);
98
- await persistGoals();
99
-
100
- console.log(`[PiGoals] Created goal: ${goal.id} - ${objective.substring(0, 50)}...`);
101
- return goal;
102
- }
103
-
104
- /**
105
- * Create a queue of goals
106
- */
107
- export async function createGoalQueue(objectives: string[], budgets?: GoalBudget[]): Promise<Goal[]> {
108
- const goals = await Promise.all(
109
- objectives.map((obj, i) => createGoal(obj, budgets?.[i]))
110
- );
111
- return goals;
112
- }
113
-
114
- /**
115
- * Get current goal
116
- */
117
- export function getCurrentGoal(): Goal | undefined {
118
- return goalQueue[currentIndex];
119
- }
120
-
121
- /**
122
- * Start current goal
123
- */
124
- export async function startCurrentGoal(): Promise<Goal | undefined> {
125
- const goal = getCurrentGoal();
126
- if (goal) {
127
- goal.status = 'in_progress';
128
- goal.startedAt = new Date().toISOString();
129
- await persistGoals();
130
- console.log(`[PiGoals] Started goal: ${goal.id}`);
131
- }
132
- return goal;
133
- }
134
-
135
- /**
136
- * Complete current goal with result
137
- */
138
- export async function completeCurrentGoal(result?: string): Promise<Goal | undefined> {
139
- const goal = getCurrentGoal();
140
- if (goal) {
141
- goal.status = 'completed';
142
- goal.completedAt = new Date().toISOString();
143
- goal.result = result;
144
-
145
- // Summarize for context management
146
- goal.summary = summarizeGoal(goal);
147
-
148
- // Check budget enforcement
149
- if (goal.budget?.minWorkMs || goal.budget?.minTokens) {
150
- const meetsMin = checkMinimumWork(goal);
151
- if (!meetsMin) {
152
- console.warn(`[PiGoals] Goal ${goal.id} did not meet minimum work threshold`);
153
- }
154
- }
155
-
156
- currentIndex++;
157
- await persistGoals();
158
- await persistChurn();
159
-
160
- console.log(`[PiGoals] Completed goal: ${goal.id} (${currentIndex}/${goalQueue.length})`);
161
- }
162
- return goal;
163
- }
164
-
165
- /**
166
- * Fail current goal
167
- */
168
- export async function failCurrentGoal(error: string): Promise<Goal | undefined> {
169
- const goal = getCurrentGoal();
170
- if (goal) {
171
- goal.status = 'failed';
172
- goal.completedAt = new Date().toISOString();
173
- goal.error = error;
174
- goal.summary = summarizeGoal(goal);
175
-
176
- currentIndex++;
177
- await persistGoals();
178
-
179
- console.log(`[PiGoals] Failed goal: ${goal.id} - ${error}`);
180
- }
181
- return goal;
182
- }
183
-
184
- /**
185
- * Cutoff current goal (exceeded budget)
186
- */
187
- export async function cutoffCurrentGoal(reason: string): Promise<Goal | undefined> {
188
- const goal = getCurrentGoal();
189
- if (goal) {
190
- goal.status = 'cutoff';
191
- goal.completedAt = new Date().toISOString();
192
- goal.error = reason;
193
- goal.summary = summarizeGoal(goal);
194
-
195
- currentIndex++;
196
- await persistGoals();
197
-
198
- addChurnEvent(goal.id, 'drift', `Goal cut off: ${reason}`);
199
-
200
- console.log(`[PiGoals] Cutoff goal: ${goal.id} - ${reason}`);
201
- }
202
- return goal;
203
- }
204
-
205
- /**
206
- * Pause current goal
207
- */
208
- export async function pauseCurrentGoal(): Promise<Goal | undefined> {
209
- const goal = getCurrentGoal();
210
- if (goal) {
211
- goal.status = 'paused';
212
- goal.completedAt = new Date().toISOString();
213
- await persistGoals();
214
- console.log(`[PiGoals] Paused goal: ${goal.id}`);
215
- }
216
- return goal;
217
- }
218
-
219
- /**
220
- * Check budget for a goal
221
- */
222
- export function checkBudget(goal: Goal, elapsedMs?: number, tokensUsed?: number): { exceeded: boolean; reason?: string } {
223
- if (!goal.budget) return { exceeded: false };
224
-
225
- if (goal.budget.maxTimeMs && elapsedMs && elapsedMs > goal.budget.maxTimeMs) {
226
- return { exceeded: true, reason: `Time budget exceeded: ${elapsedMs}ms > ${goal.budget.maxTimeMs}ms` };
227
- }
228
-
229
- if (goal.budget.maxTokens && tokensUsed && tokensUsed > goal.budget.maxTokens) {
230
- return { exceeded: true, reason: `Token budget exceeded: ${tokensUsed} > ${goal.budget.maxTokens}` };
231
- }
232
-
233
- return { exceeded: false };
234
- }
235
-
236
- /**
237
- * Check minimum work threshold
238
- */
239
- function checkMinimumWork(goal: Goal): boolean {
240
- if (!goal.budget) return true;
241
-
242
- // Simplified - in practice would track actual time/token usage
243
- if (goal.budget.minWorkMs && goal.startedAt) {
244
- const elapsed = Date.now() - new Date(goal.startedAt).getTime();
245
- if (elapsed < goal.budget.minWorkMs) {
246
- return false;
247
- }
248
- }
249
-
250
- return true;
251
- }
252
-
253
- /**
254
- * Detect churn (goal drift, stall, repeat)
255
- */
256
- function detectChurn(goal: Goal): ChurnEvent | null {
257
- if (!lastGoalSnapshot || lastGoalSnapshot.goalId !== goal.id) {
258
- lastGoalSnapshot = {
259
- goalId: goal.id,
260
- hash: hashGoal(goal),
261
- timestamp: new Date().toISOString(),
262
- };
263
- return null;
264
- }
265
-
266
- const currentHash = hashGoal(goal);
267
-
268
- // Same goal, same state - stall
269
- if (currentHash === lastGoalSnapshot.hash) {
270
- const stallTime = Date.now() - new Date(lastGoalSnapshot.timestamp).getTime();
271
- if (stallTime > 5 * 60 * 1000) {
272
- // 5 minutes
273
- return {
274
- goalId: goal.id,
275
- type: 'stall',
276
- message: `Goal stalled for ${Math.floor(stallTime / 60000)} minutes`,
277
- timestamp: new Date().toISOString(),
278
- };
279
- }
280
- }
281
-
282
- lastGoalSnapshot = {
283
- goalId: goal.id,
284
- hash: currentHash,
285
- timestamp: new Date().toISOString(),
286
- };
287
-
288
- return null;
289
- }
290
-
291
- /**
292
- * Hash goal state for churn detection
293
- */
294
- function hashGoal(goal: Goal): string {
295
- return `${goal.id}-${goal.status}-${goal.objective.substring(0, 50)}`;
296
- }
297
-
298
- /**
299
- * Add a churn event
300
- */
301
- function addChurnEvent(goalId: string, type: ChurnEvent['type'], message: string): void {
302
- const event: ChurnEvent = {
303
- goalId,
304
- type,
305
- message,
306
- timestamp: new Date().toISOString(),
307
- };
308
- churnEvents.push(event);
309
-
310
- if (churnEvents.length > 50) {
311
- churnEvents = churnEvents.slice(-25);
312
- }
313
- }
314
-
315
- /**
316
- * Get churn events for current goal
317
- */
318
- export function getChurnForGoal(goalId: string): ChurnEvent[] {
319
- return churnEvents.filter((e) => e.goalId === goalId);
320
- }
321
-
322
- /**
323
- * Summarize a goal for context management
324
- */
325
- function summarizeGoal(goal: Goal): string {
326
- const duration = goal.startedAt && goal.completedAt
327
- ? Math.round((new Date(goal.completedAt).getTime() - new Date(goal.startedAt).getTime()) / 1000)
328
- : 0;
329
-
330
- return `[${goal.status.toUpperCase()}] ${goal.objective.substring(0, 100)}${goal.objective.length > 100 ? '...' : ''} | Duration: ${duration}s`;
331
- }
332
-
333
- /**
334
- * Get goal statistics
335
- */
336
- export function getGoalStats(): {
337
- total: number;
338
- pending: number;
339
- inProgress: number;
340
- completed: number;
341
- failed: number;
342
- paused: number;
343
- cutoff: number;
344
- } {
345
- return {
346
- total: goalQueue.length,
347
- pending: goalQueue.filter((g) => g.status === 'pending').length,
348
- inProgress: goalQueue.filter((g) => g.status === 'in_progress').length,
349
- completed: goalQueue.filter((g) => g.status === 'completed').length,
350
- failed: goalQueue.filter((g) => g.status === 'failed').length,
351
- paused: goalQueue.filter((g) => g.status === 'paused').length,
352
- cutoff: goalQueue.filter((g) => g.status === 'cutoff').length,
353
- };
354
- }
355
-
356
- /**
357
- * Get queue summary
358
- */
359
- export function getQueueSummary(): string {
360
- const stats = getGoalStats();
361
- const current = getCurrentGoal();
362
-
363
- let summary = `# Goal Queue\n\n`;
364
- summary += `Total: ${stats.total} | Pending: ${stats.pending} | Active: ${stats.inProgress} | Done: ${stats.completed + stats.failed + stats.cutoff}\n\n`;
365
-
366
- if (current) {
367
- summary += `Current: ${current.objective}\n`;
368
- summary += `Status: ${current.status}\n`;
369
- if (current.budget) {
370
- summary += `Budget: maxTime=${current.budget.maxTimeMs}ms, maxTokens=${current.budget.maxTokens}\n`;
371
- }
372
- }
373
-
374
- summary += `\n## Recent Goals\n`;
375
- const recent = goalQueue.slice(-5).reverse();
376
- for (const g of recent) {
377
- summary += `- [${g.status}] ${g.objective.substring(0, 60)}${g.objective.length > 60 ? '...' : ''}\n`;
378
- }
379
-
380
- return summary;
381
- }
382
-
383
- /**
384
- * Persist goals to disk
385
- */
386
- async function persistGoals(): Promise<void> {
387
- try {
388
- await fs.mkdir(GOALS_DIR, { recursive: true });
389
- await fs.writeFile(
390
- GOALS_FILE,
391
- JSON.stringify(
392
- {
393
- goals: goalQueue,
394
- currentIndex,
395
- updatedAt: new Date().toISOString(),
396
- },
397
- null,
398
- 2
399
- )
400
- );
401
- } catch (e) {
402
- console.warn('[PiGoals] Failed to persist:', e);
403
- }
404
- }
405
-
406
- /**
407
- * Persist churn events
408
- */
409
- async function persistChurn(): Promise<void> {
410
- try {
411
- await fs.mkdir(GOALS_DIR, { recursive: true });
412
- await fs.writeFile(CHURN_FILE, JSON.stringify(churnEvents, null, 2));
413
- } catch (e) {
414
- console.warn('[PiGoals] Failed to persist churn:', e);
415
- }
416
- }
417
-
418
- /**
419
- * Load goals from disk
420
- */
421
- export async function loadGoals(): Promise<void> {
422
- try {
423
- const data = await fs.readFile(GOALS_FILE, 'utf-8');
424
- const state = JSON.parse(data);
425
- goalQueue = state.goals || [];
426
- currentIndex = state.currentIndex || 0;
427
- console.log(`[PiGoals] Loaded ${goalQueue.length} goals, current index: ${currentIndex}`);
428
- } catch {
429
- goalQueue = [];
430
- currentIndex = 0;
431
- }
432
- }
433
-
434
- /**
435
- * Load churn events
436
- */
437
- async function loadChurn(): Promise<void> {
438
- try {
439
- const data = await fs.readFile(CHURN_FILE, 'utf-8');
440
- churnEvents = JSON.parse(data);
441
- } catch {
442
- churnEvents = [];
443
- }
444
- }
445
-
446
- /**
447
- * Clear all goals
448
- */
449
- export async function clearGoals(): Promise<void> {
450
- goalQueue = [];
451
- currentIndex = 0;
452
- await persistGoals();
453
- console.log('[PiGoals] Cleared all goals');
454
- }
455
-
456
- /**
457
- * Remove completed goals and compact queue
458
- */
459
- export async function compactQueue(): Promise<void> {
460
- const completed = goalQueue.filter((g) =>
461
- ['completed', 'failed', 'cutoff'].includes(g.status)
462
- );
463
-
464
- // Keep only summaries for completed goals
465
- goalQueue = goalQueue.filter((g) =>
466
- ['pending', 'in_progress', 'paused'].includes(g.status)
467
- );
468
-
469
- // Re-index
470
- currentIndex = Math.min(currentIndex, goalQueue.length);
471
-
472
- await persistGoals();
473
- console.log(`[PiGoals] Compacted queue: removed ${completed.length} completed goals`);
474
- }
475
-
476
- /**
477
- * Load workflow templates
478
- */
479
- export async function loadTemplates(): Promise<WorkflowTemplate[]> {
480
- const templates: WorkflowTemplate[] = [];
481
-
482
- for (const dir of [TEMPLATES_DIR, TEMPLATES_DIR_ALT]) {
483
- try {
484
- const files = await fs.readdir(dir);
485
- for (const file of files) {
486
- if (file.endsWith('.md')) {
487
- const content = await fs.readFile(path.join(dir, file), 'utf-8');
488
- const template = parseTemplate(file.replace('.md', ''), content);
489
- if (template) {
490
- templates.push(template);
491
- }
492
- }
493
- }
494
- } catch {
495
- // Directory doesn't exist
496
- }
497
- }
498
-
499
- return templates;
500
- }
501
-
502
- /**
503
- * Parse a workflow template
504
- */
505
- function parseTemplate(name: string, content: string): WorkflowTemplate | null {
506
- const lines = content.split('\n');
507
-
508
- // Simple frontmatter parsing
509
- let description = '';
510
- const goals: string[] = [];
511
- const args: Record<string, { description?: string; default?: string }> = {};
512
- let gate: string | undefined;
513
-
514
- let inGoals = false;
515
- for (const line of lines) {
516
- if (line.startsWith('description:')) {
517
- description = line.replace('description:', '').trim();
518
- } else if (line.startsWith('gate:')) {
519
- gate = line.replace('gate:', '').trim();
520
- } else if (line.startsWith('---')) {
521
- inGoals = !inGoals;
522
- } else if (inGoals && line.trim().startsWith('-')) {
523
- goals.push(line.trim().substring(1).trim());
524
- } else if (line.includes(':')) {
525
- const [key, ...rest] = line.split(':');
526
- if (rest.length > 0) {
527
- const value = rest.join(':').trim();
528
- if (value.startsWith('{{') && value.endsWith('}}')) {
529
- args[key.trim()] = { default: value };
530
- } else {
531
- args[key.trim()] = { description: value };
532
- }
533
- }
534
- }
535
- }
536
-
537
- if (goals.length === 0) {
538
- return null;
539
- }
540
-
541
- return { name, description, goals, args, gate };
542
- }
543
-
544
- /**
545
- * Create goals from a template
546
- */
547
- export async function createFromTemplate(
548
- templateName: string,
549
- args: Record<string, string>
550
- ): Promise<Goal[]> {
551
- const templates = await loadTemplates();
552
- const template = templates.find((t) => t.name === templateName);
553
-
554
- if (!template) {
555
- throw new Error(`Template not found: ${templateName}`);
556
- }
557
-
558
- const goals: Goal[] = [];
559
- for (const goalText of template.goals) {
560
- // Replace {{args}}
561
- let objective = goalText;
562
- for (const [key, value] of Object.entries(args)) {
563
- objective = objective.replace(new RegExp(`\\{\\{${key}\\}\\}`, 'g'), value);
564
- }
565
- const goal = await createGoal(objective, undefined, { template: templateName });
566
- goals.push(goal);
567
- }
568
-
569
- return goals;
570
- }
571
-
572
- /**
573
- * Continue working on current goal (anti-stall)
574
- */
575
- export async function nudgeCurrentGoal(): Promise<Goal | undefined> {
576
- const goal = getCurrentGoal();
577
- if (goal) {
578
- const churn = detectChurn(goal);
579
- if (churn) {
580
- addChurnEvent(goal.id, churn.type, churn.message);
581
- console.warn(`[PiGoals] Churn detected: ${churn.message}`);
582
- }
583
- }
584
- return goal;
585
- }