@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,792 +0,0 @@
1
- # Document Agent Implementation Plan
2
-
3
- > **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
4
-
5
- **Goal:** 实现基于 OpenClaw 双层架构的 AI 文档处理智能体,支持完全自主运行
6
-
7
- **Architecture:** 约束层(Prompt Guardrails)+ 执行层(Code-Driven Workflow),通过重试机制和 guardrail 实现安全可控的自主决策
8
-
9
- **Tech Stack:** TypeScript, libp2p, Minimax LLM
10
-
11
- ---
12
-
13
- ## 任务 1: 创建约束层 (ConstraintLayer)
14
-
15
- **Files:**
16
- - Create: `src/agents/constraint-layer.ts`
17
- - Modify: `src/agents/pi-sdk.ts` (集成约束层)
18
- - Test: `src/test/constraint-layer.test.ts`
19
-
20
- ---
21
-
22
- ### Task 1.1: 定义约束层接口与类型
23
-
24
- **Files:**
25
- - Create: `src/agents/constraint-layer.ts`
26
-
27
- **Step 1: 创建约束层基础类型和接口**
28
-
29
- ```typescript
30
- export interface Guardrail {
31
- name: string;
32
- check: (context: WorkflowContext, step?: WorkflowStep) => Promise<boolean>;
33
- onFail?: 'block' | 'warn' | 'retry';
34
- }
35
-
36
- export interface ConstraintRule {
37
- id: string;
38
- description: string;
39
- guardrails: Guardrail[];
40
- }
41
-
42
- export interface WorkflowContext {
43
- document?: DocumentContent;
44
- summary?: string;
45
- improved?: string;
46
- qualityScore?: number;
47
- peers: string[];
48
- logs: OperationLog[];
49
- metadata?: Record<string, unknown>;
50
- }
51
-
52
- export interface OperationLog {
53
- timestamp: number;
54
- action: string;
55
- details: Record<string, unknown>;
56
- status: 'success' | 'failed' | 'blocked' | 'warn';
57
- }
58
- ```
59
-
60
- **Step 2: 实现 SYSTEM_PROMPT 约束模板**
61
-
62
- ```typescript
63
- export const SYSTEM_PROMPT = `
64
- 你是一个文档处理Agent,在以下规则下运行:
65
-
66
- 【边界规则】
67
- 1. 只处理:txt, md, pdf, docx 格式文档
68
- 2. 不修改原始文件,只输出改进版本
69
- 3. 发送前必须记录操作日志
70
-
71
- 【自主权限】
72
- - ✅ 自主决定:摘要详细程度、chunk分块策略
73
- - ✅ 自主决定:重试次数(最多3次)
74
- - ✅ 自主决定:是否需要补充信息
75
- - ❌ 必须确认:首次向新对等节点发送文档
76
- - ❌ 必须确认:删除操作
77
-
78
- 【敏感操作拦截】
79
- if (操作 === '发送文档' && 对等节点不在已知列表) {
80
- 拦截 → 记录 → 等待确认
81
- }
82
- `;
83
-
84
- export const AUTONOMOUS_ACTIONS = ['summarize', 'chunk', 'improve'];
85
- export const CONFIRM_REQUIRED_ACTIONS = ['send', 'delete'];
86
- ```
87
-
88
- **Step 3: 实现约束层类**
89
-
90
- ```typescript
91
- export class ConstraintLayer {
92
- private rules: Map<string, ConstraintRule> = new Map();
93
- private logs: OperationLog[] = [];
94
-
95
- constructor() {
96
- this.registerDefaultRules();
97
- }
98
-
99
- private registerDefaultRules(): void {
100
- // 未知节点发送拦截
101
- this.registerRule({
102
- id: 'unknown-peer-send',
103
- description: '阻止向未知对等节点发送文档',
104
- guardrails: [{
105
- name: 'validateSendTarget',
106
- check: async (ctx, step) => {
107
- const targetPeer = step?.config?.peerId as string;
108
- if (!targetPeer) return true;
109
- const isKnown = ctx.peers.includes(targetPeer);
110
- if (!isKnown) {
111
- this.log('BLOCKED: Unknown peer', { targetPeer }, 'blocked');
112
- }
113
- return isKnown;
114
- },
115
- onFail: 'block'
116
- }]
117
- });
118
-
119
- // 摘要质量检查
120
- this.registerRule({
121
- id: 'summary-quality',
122
- description: '确保摘要质量达标',
123
- guardrails: [{
124
- name: 'validateSummaryQuality',
125
- check: async (ctx) => {
126
- if (ctx.qualityScore !== undefined && ctx.qualityScore < 0.5) {
127
- this.log('WARN: Low quality summary', { score: ctx.qualityScore }, 'warn');
128
- return false;
129
- }
130
- return true;
131
- },
132
- onFail: 'retry'
133
- }]
134
- });
135
- }
136
-
137
- registerRule(rule: ConstraintRule): void {
138
- this.rules.set(rule.id, rule);
139
- }
140
-
141
- async checkGuardrails(context: WorkflowContext, step?: WorkflowStep): Promise<{
142
- passed: boolean;
143
- blocked?: Guardrail;
144
- }> {
145
- for (const rule of this.rules.values()) {
146
- for (const guardrail of rule.guardrails) {
147
- const passed = await guardrail.check(context, step);
148
- if (!passed) {
149
- return { passed: false, blocked: guardrail };
150
- }
151
- }
152
- }
153
- return { passed: true };
154
- }
155
-
156
- log(action: string, details: Record<string, unknown>, status: OperationLog['status']): void {
157
- this.logs.push({
158
- timestamp: Date.now(),
159
- action,
160
- details,
161
- status
162
- });
163
- }
164
-
165
- getLogs(): OperationLog[] {
166
- return [...this.logs];
167
- }
168
-
169
- isAutonomousAction(action: string): boolean {
170
- return AUTONOMOUS_ACTIONS.includes(action);
171
- }
172
-
173
- requiresConfirmation(action: string): boolean {
174
- return CONFIRM_REQUIRED_ACTIONS.includes(action);
175
- }
176
- }
177
- ```
178
-
179
- **Step 4: 提交**
180
-
181
- ```bash
182
- git add src/agents/constraint-layer.ts
183
- git commit -m "feat: add constraint layer with guardrails"
184
- ```
185
-
186
- ---
187
-
188
- ## 任务 2: 创建工作流引擎 (WorkflowEngine)
189
-
190
- **Files:**
191
- - Create: `src/agents/workflow-engine.ts`
192
- - Modify: `src/agents/pi-sdk.ts`
193
- - Test: `src/test/workflow-engine.test.ts`
194
-
195
- ---
196
-
197
- ### Task 2.1: 定义工作流步骤类型
198
-
199
- **Files:**
200
- - Modify: `src/agents/pi-sdk.ts` (扩展 WorkflowStep 接口)
201
-
202
- **Step 1: 更新 WorkflowStep 接口**
203
-
204
- ```typescript
205
- // 在 pi-sdk.ts 中添加
206
- export interface WorkflowStepConfig {
207
- path?: string;
208
- requirements?: string;
209
- context?: string;
210
- peerId?: string;
211
- message?: string;
212
- content?: string;
213
- maxChunkSize?: number;
214
- }
215
-
216
- export interface WorkflowStep {
217
- id: string;
218
- type: 'read' | 'chunk' | 'summarize' | 'improve' | 'review' | 'send' | 'report';
219
- config?: WorkflowStepConfig;
220
- retry: {
221
- max: number;
222
- current: number;
223
- backoffMs: number;
224
- };
225
- onFail: 'skip' | 'abort' | 'retry';
226
- guardrail?: (context: WorkflowContext) => Promise<boolean>;
227
- guardrailOnRetry?: boolean;
228
- }
229
-
230
- export interface StepResult {
231
- status: 'success' | 'failed' | 'skipped' | 'blocked';
232
- result?: unknown;
233
- error?: string;
234
- guardrailFailed?: string;
235
- }
236
- ```
237
-
238
- ### Task 2.2: 实现 WorkflowEngine
239
-
240
- **Files:**
241
- - Create: `src/agents/workflow-engine.ts`
242
-
243
- **Step 1: 实现 WorkflowEngine 类**
244
-
245
- ```typescript
246
- import { WorkflowStep, StepResult, Workflow, WorkflowContext, WorkflowStepConfig } from './pi-sdk.js';
247
- import { documentReader, DocumentContent } from '../documents/reader.js';
248
- import { getMinimax } from '../llm/minimax.js';
249
- import { p2pNetwork } from '../network/p2p.js';
250
- import { ConstraintLayer } from './constraint-layer.js';
251
-
252
- export class WorkflowEngine {
253
- private constraintLayer: ConstraintLayer;
254
-
255
- constructor(constraintLayer?: ConstraintLayer) {
256
- this.constraintLayer = constraintLayer || new ConstraintLayer();
257
- }
258
-
259
- async executeWorkflow(steps: WorkflowStep[], initialContext?: Partial<WorkflowContext>): Promise<Workflow> {
260
- const workflow: Workflow = {
261
- id: `wf-${Date.now()}`,
262
- steps,
263
- status: 'running',
264
- results: new Map()
265
- };
266
-
267
- const context: WorkflowContext = {
268
- peers: p2pNetwork.getPeers(),
269
- logs: [],
270
- ...initialContext
271
- };
272
-
273
- for (const step of steps) {
274
- const result = await this.executeStep(step, context);
275
- workflow.results.set(step.id, result);
276
-
277
- if (result.status === 'blocked' || (result.status === 'failed' && step.onFail === 'abort')) {
278
- workflow.status = 'failed';
279
- return workflow;
280
- }
281
- }
282
-
283
- workflow.status = 'completed';
284
- return workflow;
285
- }
286
-
287
- async executeStep(step: WorkflowStep, context: WorkflowContext): Promise<StepResult> {
288
- // 前置 guardrail 检查
289
- if (step.guardrail) {
290
- const guardrailPassed = await this.runGuardrail(step, context, true);
291
- if (!guardrailPassed) {
292
- return { status: 'blocked', guardrailFailed: step.guardrail.name };
293
- }
294
- }
295
-
296
- // 执行步骤,带重试
297
- for (let attempt = 0; attempt <= step.retry.max; attempt++) {
298
- try {
299
- const result = await this.runStep(step, context);
300
-
301
- // 后置 guardrail 检查(重试时默认也执行)
302
- if (step.guardrailOnRetry !== false && step.guardrail) {
303
- const guardrailPassed = await this.runGuardrail(step, context, false);
304
- if (!guardrailPassed) {
305
- return { status: 'blocked', guardrailFailed: step.guardrail.name };
306
- }
307
- }
308
-
309
- return { status: 'success', result };
310
- } catch (error) {
311
- if (attempt === step.retry.max) {
312
- this.constraintLayer.log(`Step ${step.id} failed after ${attempt + 1} attempts`, { error: String(error) }, 'failed');
313
- return {
314
- status: step.onFail === 'skip' ? 'skipped' : 'failed',
315
- error: String(error)
316
- };
317
- }
318
-
319
- // 指数退避
320
- const backoffMs = step.retry.backoffMs * Math.pow(2, attempt);
321
- this.constraintLayer.log(`Step ${step.id} attempt ${attempt + 1} failed, retrying in ${backoffMs}ms`, {}, 'warn');
322
- await this.sleep(backoffMs);
323
- }
324
- }
325
-
326
- return { status: 'failed', error: 'Max retries exceeded' };
327
- }
328
-
329
- private async runStep(step: WorkflowStep, context: WorkflowContext): Promise<unknown> {
330
- switch (step.type) {
331
- case 'read': {
332
- const path = step.config?.path;
333
- if (!path) throw new Error('Read step requires path config');
334
- const content = await documentReader.read(path);
335
- context.document = content;
336
- return content;
337
- }
338
-
339
- case 'chunk': {
340
- if (!context.document) throw new Error('No document loaded');
341
- const maxSize = step.config?.maxChunkSize || 4000;
342
- return documentReader.chunk(context.document.text, maxSize);
343
- }
344
-
345
- case 'summarize': {
346
- if (!context.document) throw new Error('No document loaded');
347
- const llm = getMinimax();
348
- const chunks = documentReader.chunk(context.document.text, step.config?.maxChunkSize || 4000);
349
- const summaries: string[] = [];
350
- let totalQuality = 0;
351
-
352
- for (const chunk of chunks) {
353
- const result = await llm.summarize(chunk, step.config?.context);
354
- summaries.push(result.summary);
355
- totalQuality += result.qualityScore;
356
- }
357
-
358
- context.summary = summaries.join('\n\n');
359
- context.qualityScore = totalQuality / chunks.length;
360
- return { summary: context.summary, qualityScore: context.qualityScore };
361
- }
362
-
363
- case 'improve': {
364
- if (!context.document) throw new Error('No document loaded');
365
- const llm = getMinimax();
366
- const improved = await llm.improveContent(
367
- context.document.text,
368
- step.config?.requirements || '',
369
- step.config?.context
370
- );
371
- context.improved = improved;
372
- return { improved };
373
- }
374
-
375
- case 'send': {
376
- const peerId = step.config?.peerId;
377
- const message = step.config?.message || context.summary || '';
378
- if (!peerId) throw new Error('Send step requires peerId config');
379
- await p2pNetwork.sendMessage(peerId, 'message', message);
380
- this.constraintLayer.log(`Sent message to ${peerId}`, { peerId, messageLength: message.length }, 'success');
381
- return { sent: true, peerId };
382
- }
383
-
384
- case 'report': {
385
- const content = step.config?.content || context.summary || '';
386
- await p2pNetwork.broadcast('report', content);
387
- this.constraintLayer.log('Broadcast report', { contentLength: content.length }, 'success');
388
- return { broadcasted: true };
389
- }
390
-
391
- case 'review': {
392
- return { status: 'reviewed', qualityScore: context.qualityScore };
393
- }
394
-
395
- default:
396
- throw new Error(`Unknown step type: ${step.type}`);
397
- }
398
- }
399
-
400
- private async runGuardrail(step: WorkflowStep, context: WorkflowContext, isPreCheck: boolean): Promise<boolean> {
401
- if (!step.guardrail) return true;
402
- try {
403
- return await step.guardrail(context);
404
- } catch (error) {
405
- this.constraintLayer.log(
406
- `Guardrail ${step.guardrail.name} error`,
407
- { error: String(error), isPreCheck },
408
- 'failed'
409
- );
410
- return false;
411
- }
412
- }
413
-
414
- private sleep(ms: number): Promise<void> {
415
- return new Promise(resolve => setTimeout(resolve, ms));
416
- }
417
-
418
- getConstraintLayer(): ConstraintLayer {
419
- return this.constraintLayer;
420
- }
421
- }
422
- ```
423
-
424
- **Step 2: 提交**
425
-
426
- ```bash
427
- git add src/agents/workflow-engine.ts
428
- git commit -m "feat: add workflow engine with retry and guardrails"
429
- ```
430
-
431
- ---
432
-
433
- ## 任务 3: 集成约束层和工作流引擎到 AgentSession
434
-
435
- **Files:**
436
- - Modify: `src/agents/pi-sdk.ts`
437
-
438
- ---
439
-
440
- ### Task 3.1: 更新 AgentSession 集成新组件
441
-
442
- **Step 1: 添加导入和新字段**
443
-
444
- ```typescript
445
- import { ConstraintLayer, SYSTEM_PROMPT } from './constraint-layer.js';
446
- import { WorkflowEngine } from './workflow-engine.js';
447
-
448
- // 在 PiAgentSession 类中添加
449
- class PiAgentSession implements AgentSession {
450
- private cwd: string;
451
- private peerId: string;
452
- private identity: IdentityDoc;
453
- private minimaxAvailable = false;
454
- private workflows: Map<string, Workflow> = new Map();
455
- private constraintLayer: ConstraintLayer;
456
- private workflowEngine: WorkflowEngine;
457
- // ... existing fields
458
- }
459
- ```
460
-
461
- **Step 2: 在构造函数中初始化**
462
-
463
- ```typescript
464
- constructor(config: AgentSessionConfig) {
465
- this.cwd = config.cwd;
466
- this.peerId = config.peerId || 'local';
467
- this.identity = config.identityDoc || this.createDefaultIdentity();
468
- this.minimaxAvailable = this.checkMinimax();
469
- this.constraintLayer = new ConstraintLayer();
470
- this.workflowEngine = new WorkflowEngine(this.constraintLayer);
471
- }
472
- ```
473
-
474
- **Step 3: 添加 runWorkflow 实现**
475
-
476
- ```typescript
477
- async runWorkflow(steps: WorkflowStep[]): Promise<Workflow> {
478
- const context = {
479
- peers: this.getPeers(),
480
- logs: []
481
- };
482
-
483
- // 约束层预检查
484
- const checkResult = await this.constraintLayer.checkGuardrails(context as WorkflowContext);
485
- if (!checkResult.passed && checkResult.blocked) {
486
- console.warn(`Guardrail blocked: ${checkResult.blocked.name}`);
487
- }
488
-
489
- return this.workflowEngine.executeWorkflow(steps, context);
490
- }
491
- ```
492
-
493
- **Step 4: 添加便捷工作流方法**
494
-
495
- ```typescript
496
- async summarizeDocumentWorkflow(filePath: string, targetPeer?: string): Promise<Workflow> {
497
- const steps: WorkflowStep[] = [
498
- {
499
- id: 'read',
500
- type: 'read',
501
- config: { path: filePath },
502
- retry: { max: 3, current: 0, backoffMs: 1000 },
503
- onFail: 'abort'
504
- },
505
- {
506
- id: 'summarize',
507
- type: 'summarize',
508
- config: { context: `File: ${filePath}` },
509
- retry: { max: 3, current: 0, backoffMs: 1000 },
510
- onFail: 'skip',
511
- guardrail: (ctx) => Promise.resolve(ctx.qualityScore !== undefined && ctx.qualityScore >= 0.5)
512
- }
513
- ];
514
-
515
- if (targetPeer) {
516
- steps.push({
517
- id: 'send',
518
- type: 'send',
519
- config: { peerId: targetPeer },
520
- retry: { max: 2, current: 0, backoffMs: 2000 },
521
- onFail: 'skip'
522
- });
523
- }
524
-
525
- return this.runWorkflow(steps);
526
- }
527
-
528
- async improveAndSendWorkflow(filePath: string, requirements: string, targetPeer: string): Promise<Workflow> {
529
- const steps: WorkflowStep[] = [
530
- {
531
- id: 'read',
532
- type: 'read',
533
- config: { path: filePath },
534
- retry: { max: 3, current: 0, backoffMs: 1000 },
535
- onFail: 'abort'
536
- },
537
- {
538
- id: 'improve',
539
- type: 'improve',
540
- config: { requirements, context: `File: ${filePath}` },
541
- retry: { max: 2, current: 0, backoffMs: 1500 },
542
- onFail: 'skip'
543
- },
544
- {
545
- id: 'send',
546
- type: 'send',
547
- config: { peerId: targetPeer, message: '改进后的文档' },
548
- retry: { max: 2, current: 0, backoffMs: 2000 },
549
- onFail: 'skip'
550
- }
551
- ];
552
-
553
- return this.runWorkflow(steps);
554
- }
555
- ```
556
-
557
- **Step 5: 提交**
558
-
559
- ```bash
560
- git add src/agents/pi-sdk.ts
561
- git commit -m "feat: integrate constraint layer and workflow engine into AgentSession"
562
- ```
563
-
564
- ---
565
-
566
- ## 任务 4: 添加测试
567
-
568
- **Files:**
569
- - Create: `src/test/constraint-layer.test.ts`
570
- - Create: `src/test/workflow-engine.test.ts`
571
-
572
- ---
573
-
574
- ### Task 4.1: 约束层测试
575
-
576
- **Step 1: 编写测试**
577
-
578
- ```typescript
579
- import { describe, it, expect } from 'vitest';
580
- import { ConstraintLayer, WorkflowContext } from '../agents/constraint-layer.js';
581
-
582
- describe('ConstraintLayer', () => {
583
- const layer = new ConstraintLayer();
584
-
585
- describe('checkGuardrails', () => {
586
- it('should pass when no guardrails fail', async () => {
587
- const context: WorkflowContext = {
588
- peers: ['peer1', 'peer2'],
589
- logs: []
590
- };
591
-
592
- const result = await layer.checkGuardrails(context);
593
- expect(result.passed).toBe(true);
594
- });
595
-
596
- it('should block send to unknown peer', async () => {
597
- const context: WorkflowContext = {
598
- peers: ['peer1', 'peer2'],
599
- logs: []
600
- };
601
-
602
- const result = await layer.checkGuardrails(context, {
603
- id: 'send',
604
- type: 'send',
605
- config: { peerId: 'unknown-peer' },
606
- retry: { max: 0, current: 0, backoffMs: 0 },
607
- onFail: 'block'
608
- } as any);
609
-
610
- expect(result.passed).toBe(false);
611
- expect(result.blocked?.name).toBe('validateSendTarget');
612
- });
613
-
614
- it('should allow send to known peer', async () => {
615
- const context: WorkflowContext = {
616
- peers: ['peer1', 'peer2'],
617
- logs: []
618
- };
619
-
620
- const result = await layer.checkGuardrails(context, {
621
- id: 'send',
622
- type: 'send',
623
- config: { peerId: 'peer1' },
624
- retry: { max: 0, current: 0, backoffMs: 0 },
625
- onFail: 'block'
626
- } as any);
627
-
628
- expect(result.passed).toBe(true);
629
- });
630
- });
631
-
632
- describe('isAutonomousAction', () => {
633
- it('should identify autonomous actions', () => {
634
- expect(layer.isAutonomousAction('summarize')).toBe(true);
635
- expect(layer.isAutonomousAction('chunk')).toBe(true);
636
- expect(layer.isAutonomousAction('improve')).toBe(true);
637
- });
638
-
639
- it('should identify confirmation-required actions', () => {
640
- expect(layer.requiresConfirmation('send')).toBe(true);
641
- expect(layer.requiresConfirmation('delete')).toBe(true);
642
- });
643
- });
644
-
645
- describe('logging', () => {
646
- it('should record operations', () => {
647
- layer.log('test action', { key: 'value' }, 'success');
648
- const logs = layer.getLogs();
649
- expect(logs).toHaveLength(1);
650
- expect(logs[0].action).toBe('test action');
651
- expect(logs[0].status).toBe('success');
652
- });
653
- });
654
- });
655
- ```
656
-
657
- **Step 2: 运行测试验证**
658
-
659
- ```bash
660
- npm test -- src/test/constraint-layer.test.ts
661
- ```
662
-
663
- **Step 3: 提交**
664
-
665
- ```bash
666
- git add src/test/constraint-layer.test.ts
667
- git commit -m "test: add constraint layer tests"
668
- ```
669
-
670
- ### Task 4.2: 工作流引擎测试
671
-
672
- **Step 1: 编写测试**
673
-
674
- ```typescript
675
- import { describe, it, expect, vi, beforeEach } from 'vitest';
676
- import { WorkflowEngine, WorkflowStep } from '../agents/workflow-engine.js';
677
- import { WorkflowContext } from '../agents/constraint-layer.js';
678
-
679
- // Mock dependencies
680
- vi.mock('../documents/reader.js', () => ({
681
- documentReader: {
682
- read: vi.fn().mockResolvedValue({ text: 'test content', metadata: { filename: 'test.txt', size: 12, type: '.txt' } }),
683
- chunk: vi.fn().mockReturnValue(['test content'])
684
- }
685
- }));
686
-
687
- vi.mock('../llm/minimax.js', () => ({
688
- getMinimax: vi.fn().mockReturnValue({
689
- summarize: vi.fn().mockResolvedValue({ summary: 'test summary', qualityScore: 0.8 })
690
- })
691
- }));
692
-
693
- describe('WorkflowEngine', () => {
694
- let engine: WorkflowEngine;
695
-
696
- beforeEach(() => {
697
- engine = new WorkflowEngine();
698
- });
699
-
700
- describe('executeStep', () => {
701
- it('should execute read step successfully', async () => {
702
- const step: WorkflowStep = {
703
- id: 'read',
704
- type: 'read',
705
- config: { path: 'test.txt' },
706
- retry: { max: 0, current: 0, backoffMs: 0 },
707
- onFail: 'abort'
708
- };
709
-
710
- const context: WorkflowContext = { peers: [], logs: [] };
711
- const result = await engine.executeStep(step, context);
712
-
713
- expect(result.status).toBe('success');
714
- expect(context.document).toBeDefined();
715
- });
716
-
717
- it('should retry on failure up to max attempts', async () => {
718
- const attemptTracker = { count: 0 };
719
- const engineWithRetry = new WorkflowEngine();
720
-
721
- // Custom step that fails twice then succeeds
722
- const step: WorkflowStep = {
723
- id: 'test',
724
- type: 'read',
725
- config: { path: 'test.txt' },
726
- retry: { max: 3, current: 0, backoffMs: 10 },
727
- onFail: 'abort'
728
- };
729
-
730
- const context: WorkflowContext = { peers: [], logs: [] };
731
- const result = await engineWithRetry.executeStep(step, context);
732
-
733
- expect(result.status).toBe('success');
734
- });
735
-
736
- it('should skip when onFail is skip and max retries exceeded', async () => {
737
- const step: WorkflowStep = {
738
- id: 'fail',
739
- type: 'read',
740
- config: { path: 'nonexistent.txt' },
741
- retry: { max: 0, current: 0, backoffMs: 0 },
742
- onFail: 'skip'
743
- };
744
-
745
- const context: WorkflowContext = { peers: [], logs: [] };
746
- const result = await engine.executeStep(step, context);
747
-
748
- expect(result.status).toBe('skipped');
749
- });
750
- });
751
- });
752
- ```
753
-
754
- **Step 2: 运行测试验证**
755
-
756
- ```bash
757
- npm test -- src/test/workflow-engine.test.ts
758
- ```
759
-
760
- **Step 3: 提交**
761
-
762
- ```bash
763
- git add src/test/workflow-engine.test.ts
764
- git commit -m "test: add workflow engine tests"
765
- ```
766
-
767
- ---
768
-
769
- ## 任务 5: 验证构建
770
-
771
- **Step 1: 运行 TypeScript 编译**
772
-
773
- ```bash
774
- npm run build
775
- ```
776
-
777
- Expected: 编译成功,无错误
778
-
779
- **Step 2: 运行所有测试**
780
-
781
- ```bash
782
- npm test
783
- ```
784
-
785
- Expected: 所有测试通过
786
-
787
- **Step 3: 最终提交**
788
-
789
- ```bash
790
- git add -A
791
- git commit -m "feat: complete document agent with constraint layer and workflow engine"
792
- ```