@bolloon/bolloon-agent 0.1.0 → 0.1.2

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 (581) hide show
  1. package/bin/bolloon-cli.cjs +157 -0
  2. package/bin/bolloon-daemon.sh +207 -0
  3. package/bin/bolloon.cmd +11 -0
  4. package/dist/agents/constraint-layer.js +10 -15
  5. package/dist/agents/pi-sdk.js +433 -106
  6. package/dist/agents/protocol.js +82 -1
  7. package/dist/agents/subagent-manager.js +2 -2
  8. package/dist/agents/workflow-engine.js +15 -20
  9. package/dist/agents/workflow-pivot-loop.js +541 -0
  10. package/dist/bollharness/src/index.js +5 -0
  11. package/dist/bollharness/src/scripts/checks/check_adr_plan_numbering.js +6 -0
  12. package/dist/bollharness/src/scripts/checks/check_api_types.js +45 -0
  13. package/dist/bollharness/src/scripts/checks/check_artifact_link.js +146 -0
  14. package/dist/bollharness/src/scripts/checks/check_bridge_deps.js +6 -0
  15. package/dist/bollharness/src/scripts/checks/check_bugfix_binding.js +6 -0
  16. package/dist/bollharness/src/scripts/checks/check_bugfix_binding_ci.js +6 -0
  17. package/dist/bollharness/src/scripts/checks/check_doc_file_references.js +6 -0
  18. package/dist/bollharness/src/scripts/checks/check_doc_freshness.js +135 -0
  19. package/dist/bollharness/src/scripts/checks/check_doc_links.js +31 -0
  20. package/dist/bollharness/src/scripts/checks/check_file_existence_claims.js +6 -0
  21. package/dist/bollharness/src/scripts/checks/check_fragment_integrity.js +34 -0
  22. package/dist/bollharness/src/scripts/checks/check_hook_installed.js +63 -0
  23. package/dist/bollharness/src/scripts/checks/check_issue_closure.js +41 -0
  24. package/dist/bollharness/src/scripts/checks/check_mcp_parity.js +6 -0
  25. package/dist/bollharness/src/scripts/checks/check_security.js +48 -0
  26. package/dist/bollharness/src/scripts/checks/check_skill_parity.js +6 -0
  27. package/dist/bollharness/src/scripts/checks/check_versions.js +6 -0
  28. package/dist/bollharness/src/scripts/checks/finding.js +13 -0
  29. package/dist/bollharness/src/scripts/checks/next_decision_number.js +20 -0
  30. package/dist/bollharness/src/scripts/checks/regenerate_magic_docs.js +6 -0
  31. package/dist/bollharness/src/scripts/ci/detect_rebaseline_triggers.js +8 -0
  32. package/dist/bollharness/src/scripts/ci/scan_subprocess_cfg.js +8 -0
  33. package/dist/bollharness/src/scripts/ci/scan_verify_artifacts.js +8 -0
  34. package/dist/bollharness/src/scripts/ci/scan_yaml_schema.js +8 -0
  35. package/dist/bollharness/src/scripts/context_router.js +67 -0
  36. package/dist/bollharness/src/scripts/deploy-guard.js +157 -0
  37. package/dist/bollharness/src/scripts/guard-feedback.js +192 -0
  38. package/dist/bollharness/src/scripts/guard_router.js +158 -0
  39. package/dist/bollharness/src/scripts/hooks/_hook_output.js +6 -0
  40. package/dist/bollharness/src/scripts/hooks/auto-python3.js +6 -0
  41. package/dist/bollharness/src/scripts/hooks/deploy-progress-on-session-end.js +6 -0
  42. package/dist/bollharness/src/scripts/hooks/failure-analyzer.js +6 -0
  43. package/dist/bollharness/src/scripts/hooks/gate-judgment-inject.js +92 -0
  44. package/dist/bollharness/src/scripts/hooks/gate-transition-judgment.js +63 -0
  45. package/dist/bollharness/src/scripts/hooks/inbox-ack.js +6 -0
  46. package/dist/bollharness/src/scripts/hooks/inbox-inject-on-start.js +6 -0
  47. package/dist/bollharness/src/scripts/hooks/inbox-validate.js +6 -0
  48. package/dist/bollharness/src/scripts/hooks/inbox-write-ledger.js +6 -0
  49. package/dist/bollharness/src/scripts/hooks/initializer-agent.js +6 -0
  50. package/dist/bollharness/src/scripts/hooks/loop-detection.js +73 -0
  51. package/dist/bollharness/src/scripts/hooks/owner-guard.js +6 -0
  52. package/dist/bollharness/src/scripts/hooks/precompact.js +6 -0
  53. package/dist/bollharness/src/scripts/hooks/review-agent-gatekeeper.js +6 -0
  54. package/dist/bollharness/src/scripts/hooks/risk-tracker.js +108 -0
  55. package/dist/bollharness/src/scripts/hooks/sanitize-on-read.js +6 -0
  56. package/dist/bollharness/src/scripts/hooks/session-reflection.js +7 -0
  57. package/dist/bollharness/src/scripts/hooks/session-start-magic-docs.js +7 -0
  58. package/dist/bollharness/src/scripts/hooks/session-start-reset-risk.js +7 -0
  59. package/dist/bollharness/src/scripts/hooks/session-start-toolkit-reminder.js +7 -0
  60. package/dist/bollharness/src/scripts/hooks/stop-evaluator.js +157 -0
  61. package/dist/bollharness/src/scripts/hooks/tool-call-counter.js +6 -0
  62. package/dist/bollharness/src/scripts/hooks/trace-analyzer.js +10 -0
  63. package/dist/bollharness/src/scripts/install/install-trust-token.js +7 -0
  64. package/dist/bollharness/src/scripts/install/multi_project_registry.js +9 -0
  65. package/dist/bollharness/src/scripts/install/phase2_auto.js +21 -0
  66. package/dist/bollharness/src/scripts/install/pre_commit_installer.js +6 -0
  67. package/dist/bollharness/src/scripts/install/tier_selector.js +7 -0
  68. package/dist/bollharness/src/scripts/install/transcript_miner.js +7 -0
  69. package/dist/bollharness/src/scripts/lib/claim_patterns.js +10 -0
  70. package/dist/bollharness/src/scripts/lib/sanitize_patterns.js +12 -0
  71. package/dist/bollharness/src/scripts/sanitize.js +6 -0
  72. package/dist/bollharness-integration/channel-judgment-engine.js +530 -0
  73. package/dist/bollharness-integration/context-chain-router.js +383 -0
  74. package/dist/bollharness-integration/context-router-judgment.js +13 -21
  75. package/dist/bollharness-integration/context-router.js +22 -64
  76. package/dist/bollharness-integration/gate-state-machine.js +14 -19
  77. package/dist/bollharness-integration/gate-transition-hooks.js +16 -61
  78. package/dist/bollharness-integration/guard-checker.js +21 -68
  79. package/dist/bollharness-integration/index.js +14 -124
  80. package/dist/bollharness-integration/integration.js +13 -20
  81. package/dist/bollharness-integration/llm-judgment-engine.js +569 -0
  82. package/dist/bollharness-integration/skill-adapter.js +18 -64
  83. package/dist/cli-entry.js +261 -0
  84. package/dist/constraint-runtime/src/commands.js +17 -7
  85. package/dist/constraint-runtime/src/constraint/budget.js +1 -6
  86. package/dist/constraint-runtime/src/constraint/permission.js +1 -6
  87. package/dist/constraint-runtime/src/models.js +1 -3
  88. package/dist/constraint-runtime/src/tools.js +17 -7
  89. package/dist/constraints/index.js +1 -7
  90. package/dist/documents/reader.js +8 -49
  91. package/dist/heartbeat/DaemonManager.js +242 -0
  92. package/dist/heartbeat/HealthMonitor.js +285 -0
  93. package/dist/heartbeat/StartupVerifier.js +205 -0
  94. package/dist/heartbeat/Watchdog.js +168 -0
  95. package/dist/heartbeat/index.js +84 -0
  96. package/dist/heartbeat/types.js +5 -0
  97. package/dist/index.js +381 -28
  98. package/dist/llm/config-store.js +31 -57
  99. package/dist/llm/llm-judgment-client.js +389 -0
  100. package/dist/llm/pi-ai.js +9 -52
  101. package/dist/network/agent-network.js +46 -90
  102. package/dist/network/hybrid-messenger.js +125 -0
  103. package/dist/network/iroh-bootstrap.js +38 -0
  104. package/dist/network/iroh-discovery.js +145 -0
  105. package/dist/network/iroh-integration.js +9 -16
  106. package/dist/network/iroh-transport.js +10 -48
  107. package/dist/network/p2p.js +23 -62
  108. package/dist/network/storage/adapters/json-adapter.js +4 -42
  109. package/dist/network/storage/index.js +147 -0
  110. package/dist/network/storage/types.js +14 -0
  111. package/dist/pi-ecosystem/index.js +233 -0
  112. package/dist/pi-ecosystem-colony/index.js +29 -90
  113. package/dist/pi-ecosystem-goals/index.js +20 -74
  114. package/dist/pi-ecosystem-judgment/decision.js +29 -47
  115. package/dist/pi-ecosystem-judgment/distillation.js +16 -29
  116. package/dist/pi-ecosystem-judgment/human-value-store.js +13 -60
  117. package/dist/pi-ecosystem-judgment/index.js +21 -74
  118. package/dist/pi-ecosystem-judgment/value-injection.js +26 -72
  119. package/dist/pi-ecosystem-mcp/index.js +24 -78
  120. package/dist/pi-ecosystem-subagents/index.js +20 -69
  121. package/dist/social/ant-colony/AdaptiveHeartbeat.js +3 -8
  122. package/dist/social/ant-colony/PheromoneEngine.js +11 -49
  123. package/dist/social/ant-colony/index.js +6 -0
  124. package/dist/social/ant-colony/types.js +4 -8
  125. package/dist/social/channels/ChannelManager.js +8 -46
  126. package/dist/social/channels/DiapChannelBridge.js +9 -47
  127. package/dist/social/channels/InterestMatcher.js +2 -7
  128. package/dist/social/channels/channel-agent-session.js +309 -0
  129. package/dist/social/channels/channel-heartbeat-agent.js +494 -0
  130. package/dist/social/channels/diap-doc-parser.js +204 -0
  131. package/dist/social/channels/harness-workflow-integrator.js +446 -0
  132. package/dist/social/channels/index.js +9 -0
  133. package/dist/social/channels/types.js +3 -7
  134. package/dist/social/global-shared-context.js +6 -47
  135. package/dist/social/heartbeat.js +29 -72
  136. package/dist/social/persona/enhanced-persona.js +299 -0
  137. package/dist/web/client.js +302 -136
  138. package/dist/web/components/p2p/index.js +159 -9
  139. package/dist/web/components/p2p/p2p-connection.js +136 -0
  140. package/dist/web/components/p2p/p2p-manager.js +24 -0
  141. package/dist/web/components/p2p/p2p-store-memory.js +1 -1
  142. package/dist/web/components/p2p/types.js +7 -0
  143. package/dist/web/index.html +5 -0
  144. package/dist/web/style.css +118 -0
  145. package/package.json +12 -6
  146. package/scripts/build-cli.js +206 -0
  147. package/scripts/postinstall.js +153 -0
  148. package/src/agents/pi-sdk.ts +347 -28
  149. package/src/agents/protocol.ts +95 -1
  150. package/src/agents/workflow-pivot-loop.ts +674 -0
  151. package/src/bollharness/scripts/context-fragments/pi-agent-operations.md +34 -0
  152. package/src/cli-entry.ts +304 -0
  153. package/src/heartbeat/DaemonManager.ts +283 -0
  154. package/src/heartbeat/HealthMonitor.ts +316 -0
  155. package/src/heartbeat/StartupVerifier.ts +223 -0
  156. package/src/heartbeat/Watchdog.ts +198 -0
  157. package/src/heartbeat/index.ts +108 -0
  158. package/src/heartbeat/types.ts +82 -0
  159. package/src/llm/config-store.ts +23 -5
  160. package/src/network/iroh-transport.ts +3 -3
  161. package/src/web/client.js +302 -136
  162. package/src/web/components/p2p/P2PModal.tsx +91 -3
  163. package/src/web/components/p2p/index.ts +171 -9
  164. package/src/web/components/p2p/p2p-connection.ts +153 -1
  165. package/src/web/components/p2p/p2p-manager.ts +39 -1
  166. package/src/web/components/p2p/p2p-store-memory.ts +1 -1
  167. package/src/web/components/p2p/p2p-tools.ts +315 -0
  168. package/src/web/components/p2p/types.ts +58 -0
  169. package/src/web/index.html +5 -0
  170. package/src/web/server.ts +353 -36
  171. package/src/web/style.css +118 -0
  172. package/tsconfig.cli.json +16 -0
  173. package/tsconfig.electron.json +1 -1
  174. package/tsconfig.json +1 -2
  175. package/dist/constraint-runtime/tests/agent.test.js +0 -16
  176. package/dist/constraint-runtime/tests/constraint.test.js +0 -41
  177. package/dist/constraint-runtime/tests/skill.test.js +0 -19
  178. package/dist/constraint-runtime/tests/thinking.test.js +0 -22
  179. package/dist/electron-preload.js +0 -15
  180. package/dist/electron-preload.js.map +0 -1
  181. package/dist/electron.js +0 -206
  182. package/dist/electron.js.map +0 -1
  183. package/dist/test/constraint-layer.test.js +0 -164
  184. package/dist/test/global-shared-context.test.js +0 -315
  185. package/dist/test/pi-sdk.test.js +0 -47
  186. package/dist/test/set-persona.test.js +0 -38
  187. package/dist/test/subagent-manager.test.js +0 -276
  188. package/dist/test/workflow-engine.test.js +0 -87
  189. package/dist/web/server.js +0 -1647
  190. package/dist/web/server.js.map +0 -1
  191. package/dist/workflows/collaboration.js +0 -374
  192. package/dist/workflows/index.js +0 -54
  193. package/docs/agent-communication.md +0 -333
  194. package/docs/plans/2026-05-15-document-agent-design.md +0 -479
  195. package/docs/plans/2026-05-15-document-agent-implementation-plan.md +0 -792
  196. package/docs/plans/2026-05-16-chat-ui-design.md +0 -86
  197. package/docs/plans/2026-05-16-constraint-runtime-design.md +0 -106
  198. package/docs/plans/2026-05-16-constraint-runtime-implementation.md +0 -441
  199. 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
  200. package/src/bollharness/.boll/CLAUDE.md.template +0 -34
  201. package/src/bollharness/.boll/MANIFEST.yaml +0 -213
  202. package/src/bollharness/.boll/active-review-agents/.gitkeep +0 -0
  203. package/src/bollharness/.boll/agents/review-base.yaml +0 -108
  204. package/src/bollharness/.boll/deploy-allowlist.yaml +0 -38
  205. package/src/bollharness/.boll/inbox/schema/message-v1.json +0 -99
  206. package/src/bollharness/.boll/install-staging/.gitkeep +0 -0
  207. package/src/bollharness/.boll/issue-adapter.yaml +0 -31
  208. package/src/bollharness/.boll/plugins/boll-mode-toolkit/contracts/mode-contract.md +0 -85
  209. package/src/bollharness/.boll/plugins/boll-review-toolkit/contracts/evidence-packet-schema.json +0 -102
  210. package/src/bollharness/.boll/plugins/boll-review-toolkit/contracts/review-contract.yaml +0 -247
  211. package/src/bollharness/.boll/rules/backend-routes.md +0 -31
  212. package/src/bollharness/.boll/rules/closure-semantics.md +0 -30
  213. package/src/bollharness/.boll/rules/env-vars.md +0 -32
  214. package/src/bollharness/.boll/rules/hanis-protocol.md +0 -145
  215. package/src/bollharness/.boll/rules/repo-structure.md +0 -42
  216. package/src/bollharness/.boll/rules/review-agent-isolation.md +0 -73
  217. package/src/bollharness/.boll/rules/source-of-truth.md +0 -33
  218. package/src/bollharness/.boll/settings.json +0 -180
  219. package/src/bollharness/.boll/settings.json.template +0 -31
  220. package/src/bollharness/.boll/skills/arch/SKILL.md +0 -372
  221. package/src/bollharness/.boll/skills/bug-pipeline/SKILL.md +0 -168
  222. package/src/bollharness/.boll/skills/bug-triage/SKILL.md +0 -161
  223. package/src/bollharness/.boll/skills/context-chains/SKILL.md +0 -250
  224. package/src/bollharness/.boll/skills/context-chains/context-chain-index.md +0 -48
  225. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/code_change_extractor.ts +0 -142
  226. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/debugging_extractor.ts +0 -126
  227. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/design_extractor.ts +0 -148
  228. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/planning_extractor.ts +0 -162
  229. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/question_extractor.ts +0 -116
  230. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/review_extractor.ts +0 -136
  231. package/src/bollharness/.boll/skills/crystal-learn/SKILL.md +0 -93
  232. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-0.md +0 -34
  233. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-1.md +0 -34
  234. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-2.md +0 -35
  235. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-3.md +0 -34
  236. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-4.md +0 -43
  237. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-5.md +0 -34
  238. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-6.md +0 -37
  239. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-7.md +0 -46
  240. package/src/bollharness/.boll/skills/guardian-fixer/PROMPT.md +0 -415
  241. package/src/bollharness/.boll/skills/guardian-fixer/SKILL.md +0 -320
  242. package/src/bollharness/.boll/skills/harness-dev/SKILL.md +0 -93
  243. package/src/bollharness/.boll/skills/harness-dev/examples/README.md +0 -227
  244. package/src/bollharness/.boll/skills/harness-dev-handoff/SKILL.md +0 -165
  245. package/src/bollharness/.boll/skills/harness-eng/SKILL.md +0 -110
  246. package/src/bollharness/.boll/skills/harness-eng-test/SKILL.md +0 -79
  247. package/src/bollharness/.boll/skills/harness-lab/SKILL.md +0 -170
  248. package/src/bollharness/.boll/skills/harness-ops/SKILL.md +0 -57
  249. package/src/bollharness/.boll/skills/harness-voice/SKILL.md +0 -183
  250. package/src/bollharness/.boll/skills/judgment/SKILL.md +0 -115
  251. package/src/bollharness/.boll/skills/lead/SKILL.md +0 -245
  252. package/src/bollharness/.boll/skills/lead/install-wow-harness.md +0 -77
  253. package/src/bollharness/.boll/skills/lead/ref-review-sop.md +0 -91
  254. package/src/bollharness/.boll/skills/lead/ref-stages.md +0 -129
  255. package/src/bollharness/.boll/skills/skill-discovery/SKILL.md +0 -169
  256. package/src/bollharness/.boll/skills/task-arch/SKILL.md +0 -106
  257. package/src/bollharness/.boll/skills/toolkit/SKILL.md +0 -57
  258. package/src/bollharness/.boll/tasks/.gitkeep +0 -0
  259. package/src/bollharness/.boll/toolkit-index.yaml +0 -112
  260. package/src/bollharness/.claude/agents/review-base.yaml +0 -108
  261. package/src/bollharness/.claude/plugins/boll-mode-toolkit/.claude-plugin/plugin.json +0 -44
  262. package/src/bollharness/.claude/plugins/boll-review-toolkit/.claude-plugin/plugin.json +0 -24
  263. package/src/bollharness/.claude/plugins/boll-review-toolkit/contracts/evidence-packet-schema.json +0 -102
  264. package/src/bollharness/.claude/plugins/boll-review-toolkit/contracts/review-contract.yaml +0 -247
  265. package/src/bollharness/.claude/settings.json +0 -157
  266. package/src/bollharness/.claude/skills/arch/SKILL.md +0 -64
  267. package/src/bollharness/.claude/skills/crystal-learn/SKILL.md +0 -93
  268. package/src/bollharness/.claude/skills/guardian-fixer/PROMPT.md +0 -44
  269. package/src/bollharness/.claude/skills/guardian-fixer/SKILL.md +0 -324
  270. package/src/bollharness/.claude/skills/harness-dev/SKILL.md +0 -93
  271. package/src/bollharness/.claude/skills/harness-dev/examples/README.md +0 -17
  272. package/src/bollharness/.claude/skills/harness-dev-handoff/SKILL.md +0 -165
  273. package/src/bollharness/.claude/skills/harness-eng/SKILL.md +0 -183
  274. package/src/bollharness/.claude/skills/harness-eng-test/SKILL.md +0 -57
  275. package/src/bollharness/.claude/skills/harness-ops/SKILL.md +0 -57
  276. package/src/bollharness/.claude/skills/harness-voice/SKILL.md +0 -84
  277. package/src/bollharness/.claude/skills/lead/INDEX.md +0 -28
  278. package/src/bollharness/.claude/skills/lead/SKILL.md +0 -24
  279. package/src/bollharness/.claude/skills/lead/install-wow-harness.md +0 -77
  280. package/src/bollharness/.claude/skills/lead/ref-review-sop.md +0 -48
  281. package/src/bollharness/.claude/skills/lead/ref-stages.md +0 -58
  282. package/src/bollharness/.claude/skills/plan-lock/SKILL.md +0 -74
  283. package/src/bollharness/.claude/skills/skill-discovery/SKILL.md +0 -120
  284. package/src/bollharness/.claude/skills/task-arch/SKILL.md +0 -106
  285. package/src/bollharness/.claude/skills/toolkit/SKILL.md +0 -57
  286. package/src/bollharness/.claude/skills/toolkit/list.sh +0 -92
  287. package/src/bollharness/.githooks/pre-commit +0 -21
  288. package/src/bollharness/.github/workflows/ci.yml +0 -88
  289. package/src/bollharness/docs/decisions/ADR-030-guard-signal-protocol-and-governance-reload.md +0 -1076
  290. package/src/bollharness/docs/decisions/ADR-038-harness-optimization-strategy.md +0 -2039
  291. package/src/bollharness/docs/decisions/ADR-041-codex-claude-code-division-of-labor.md +0 -128
  292. package/src/bollharness/docs/decisions/ADR-H1-crystal-learn-revival.md +0 -188
  293. package/src/bollharness/docs/decisions/ADR-H2-identity-isolation.md +0 -183
  294. package/src/bollharness/docs/decisions/ADR-H3-memory-scope.md +0 -133
  295. package/src/bollharness/docs/decisions/ADR-H4-prompt-governance.md +0 -146
  296. package/src/bollharness/docs/decisions/ADR-H5-gate-quantization.md +0 -212
  297. package/src/bollharness/docs/decisions/ADR-H6-state-file-health.md +0 -211
  298. package/src/bollharness/docs/decisions/ADR-H8-issue-and-doc-compliance.md +0 -202
  299. package/src/bollharness/docs/decisions/ADR-H9-mailbox.md +0 -231
  300. package/src/bollharness/docs/decisions/PLAN-H1-crystal-learn-revival.md +0 -270
  301. package/src/bollharness/docs/decisions/PLAN-H2-identity-isolation.md +0 -291
  302. package/src/bollharness/docs/decisions/PLAN-H3-memory-scope.md +0 -228
  303. package/src/bollharness/docs/decisions/PLAN-H4-prompt-governance.md +0 -227
  304. package/src/bollharness/docs/decisions/PLAN-H5-gate-quantization.md +0 -239
  305. package/src/bollharness/docs/decisions/PLAN-H6-state-file-health.md +0 -325
  306. package/src/bollharness/docs/decisions/PLAN-H8-issue-and-doc-compliance.md +0 -242
  307. package/src/bollharness/docs/decisions/PLAN-H9-mailbox.md +0 -378
  308. package/src/bollharness/docs/launch-article-en.md +0 -276
  309. package/src/bollharness/docs/launch-article-zh.md +0 -305
  310. package/src/bollharness/docs/practice.html +0 -356
  311. package/src/bollharness/docs/practice.md +0 -82
  312. package/src/bollharness/docs/research/round-1/README.md +0 -11
  313. package/src/bollharness/docs/research/round-2/README.md +0 -11
  314. package/src/bollharness/docs/research/round-3/README.md +0 -11
  315. package/src/bollharness/docs/research/round-4/README.md +0 -11
  316. package/src/bollharness/docs/research/round-5/README.md +0 -11
  317. package/src/bollharness/docs/research/round-6/README.md +0 -11
  318. package/src/bollharness/package-lock.json +0 -48
  319. package/src/bollharness/reference/boll-reference/.claude/rules/backend-routes.md +0 -268
  320. package/src/bollharness/reference/boll-reference/.claude/rules/bridge.md +0 -20
  321. package/src/bollharness/reference/boll-reference/.claude/rules/closure-semantics.md +0 -30
  322. package/src/bollharness/reference/boll-reference/.claude/rules/coaching.md +0 -13
  323. package/src/bollharness/reference/boll-reference/.claude/rules/env-vars.md +0 -50
  324. package/src/bollharness/reference/boll-reference/.claude/rules/hackathon.md +0 -12
  325. package/src/bollharness/reference/boll-reference/.claude/rules/repo-structure.md +0 -184
  326. package/src/bollharness/reference/boll-reference/.claude/rules/review-agent-isolation.md +0 -112
  327. package/src/bollharness/reference/boll-reference/.claude/rules/scenes.md +0 -12
  328. package/src/bollharness/reference/boll-reference/.claude/skills/arch/SKILL.md +0 -551
  329. package/src/bollharness/reference/boll-reference/.claude/skills/boll-animation/SKILL.md +0 -26
  330. package/src/bollharness/reference/boll-reference/.claude/skills/boll-bridge/SKILL.md +0 -227
  331. package/src/bollharness/reference/boll-reference/.claude/skills/boll-bridge/agents/openai.yaml +0 -4
  332. package/src/bollharness/reference/boll-reference/.claude/skills/boll-bridge/references/bridge-failure-taxonomy.md +0 -142
  333. package/src/bollharness/reference/boll-reference/.claude/skills/boll-bridge/references/bridge-validation-ladder.md +0 -107
  334. package/src/bollharness/reference/boll-reference/.claude/skills/boll-crystal/SKILL.md +0 -893
  335. package/src/bollharness/reference/boll-reference/.claude/skills/boll-crystal-learn/SKILL.md +0 -89
  336. package/src/bollharness/reference/boll-reference/.claude/skills/boll-dev/SKILL.md +0 -93
  337. package/src/bollharness/reference/boll-reference/.claude/skills/boll-dev/examples/README.md +0 -209
  338. package/src/bollharness/reference/boll-reference/.claude/skills/boll-dev-handoff/SKILL.md +0 -165
  339. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng/SKILL.md +0 -110
  340. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-frontend/SKILL.md +0 -203
  341. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-hdc/SKILL.md +0 -27
  342. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-orchestrator/SKILL.md +0 -28
  343. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-prompt/SKILL.md +0 -27
  344. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-test/SKILL.md +0 -79
  345. package/src/bollharness/reference/boll-reference/.claude/skills/boll-lab/SKILL.md +0 -372
  346. package/src/bollharness/reference/boll-reference/.claude/skills/boll-run/SKILL.md +0 -437
  347. package/src/bollharness/reference/boll-reference/.claude/skills/boll-ux-appstore/SKILL.md +0 -27
  348. package/src/bollharness/reference/boll-reference/.claude/skills/boll-voice/SKILL.md +0 -442
  349. package/src/bollharness/reference/boll-reference/.claude/skills/guardian-fixer/PROMPT.md +0 -421
  350. package/src/bollharness/reference/boll-reference/.claude/skills/guardian-fixer/SKILL.md +0 -326
  351. package/src/bollharness/reference/boll-reference/.claude/skills/lead/SKILL.md +0 -155
  352. package/src/bollharness/reference/boll-reference/.claude/skills/lead/ref-review-sop.md +0 -91
  353. package/src/bollharness/reference/boll-reference/.claude/skills/lead/ref-stages.md +0 -129
  354. package/src/bollharness/reference/boll-reference/.claude/skills/nature-designer/output/skill-map-preview.png +0 -0
  355. package/src/bollharness/reference/boll-reference/.claude/skills/nature-designer/output/skill-map-v2.png +0 -0
  356. package/src/bollharness/reference/boll-reference/.claude/skills/nature-designer/output/skill-map-v3.png +0 -0
  357. package/src/bollharness/reference/boll-reference/.claude/skills/nature-designer/output/skill-map-v4.png +0 -0
  358. package/src/bollharness/reference/boll-reference/.claude/skills/plan-lock/SKILL.md +0 -425
  359. package/src/bollharness/reference/boll-reference/.claude/skills/plan-lock/ref-three-checks.md +0 -62
  360. package/src/bollharness/reference/boll-reference/.claude/skills/plan-lock/ref-wp-templates.md +0 -78
  361. package/src/bollharness/reference/boll-reference/.claude/skills/task-arch/SKILL.md +0 -76
  362. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-graph/SKILL.md +0 -57
  363. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-graph/beads-graph.sh +0 -153
  364. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-init/SKILL.md +0 -52
  365. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-init/beads-auto-link.sh +0 -76
  366. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-sync/SKILL.md +0 -50
  367. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-sync/beads-sync-proj.sh +0 -108
  368. package/src/bollharness/reference/boll-reference/docs/architecture/AGENT-PROFILE.md +0 -151
  369. package/src/bollharness/reference/boll-reference/docs/architecture/COST-STRUCTURE.md +0 -56
  370. package/src/bollharness/reference/boll-reference/docs/architecture/INDEX.md +0 -76
  371. package/src/bollharness/reference/boll-reference/docs/architecture/MODULE1-INTENT-FIELD.md +0 -116
  372. package/src/bollharness/reference/boll-reference/docs/architecture/MODULE2-CRYSTALLIZATION.md +0 -200
  373. package/src/bollharness/reference/boll-reference/docs/architecture/PRINCIPLES.md +0 -84
  374. package/src/bollharness/reference/boll-reference/docs/architecture/PROTOCOL-CORE.md +0 -209
  375. package/src/bollharness/reference/boll-reference/docs/architecture/VISION.md +0 -181
  376. package/src/bollharness/reference/boll-reference/docs/architecture/discussions/D-01-MARKET-SCENE-PROTOCOL.md +0 -754
  377. package/src/bollharness/templates/scaffold/.boll/guard/.gitkeep +0 -0
  378. package/src/bollharness/templates/scaffold/.boll/metrics/.gitkeep +0 -0
  379. package/src/bollharness/templates/scaffold/.boll/state/.gitkeep +0 -0
  380. package/src/bollharness/templates/scaffold/docs/INDEX.md +0 -3
  381. package/src/bollharness/templates/scaffold/docs/decisions/ADR_TEMPLATE.md +0 -38
  382. package/src/bollharness/templates/scaffold/docs/decisions/PLAN_TEMPLATE.md +0 -45
  383. package/src/bollharness/templates/scaffold/docs/decisions/tasks/.gitkeep +0 -2
  384. package/src/bollharness/templates/scaffold/docs/issues/.gitkeep +0 -0
  385. package/src/bollharness/templates/scaffold/docs/issues/GUARD_ISSUE_TEMPLATE.md +0 -35
  386. package/src/bollharness/templates/scaffold/docs/issues/ISSUE_TEMPLATE.md +0 -51
  387. package/src/bollharness/tsconfig.json +0 -26
  388. package/src/constraint-runtime/package-lock.json +0 -48
  389. package/src/constraint-runtime/package.json +0 -34
  390. package/src/constraint-runtime/src/_archive_helper.ts +0 -16
  391. package/src/constraint-runtime/src/agent/coordinator.ts +0 -71
  392. package/src/constraint-runtime/src/agent/index.ts +0 -1
  393. package/src/constraint-runtime/src/assistant/index.ts +0 -15
  394. package/src/constraint-runtime/src/bootstrap/index.ts +0 -15
  395. package/src/constraint-runtime/src/bootstrap_graph.ts +0 -17
  396. package/src/constraint-runtime/src/bridge/index.ts +0 -15
  397. package/src/constraint-runtime/src/buddy/index.ts +0 -15
  398. package/src/constraint-runtime/src/cli/index.ts +0 -15
  399. package/src/constraint-runtime/src/command_graph.ts +0 -20
  400. package/src/constraint-runtime/src/commands.ts +0 -83
  401. package/src/constraint-runtime/src/components/index.ts +0 -15
  402. package/src/constraint-runtime/src/constants/index.ts +0 -15
  403. package/src/constraint-runtime/src/constraint/budget.ts +0 -25
  404. package/src/constraint-runtime/src/constraint/index.ts +0 -3
  405. package/src/constraint-runtime/src/constraint/permission.ts +0 -28
  406. package/src/constraint-runtime/src/context.ts +0 -45
  407. package/src/constraint-runtime/src/coordinator/index.ts +0 -15
  408. package/src/constraint-runtime/src/cost_hook.ts +0 -6
  409. package/src/constraint-runtime/src/cost_tracker.ts +0 -9
  410. package/src/constraint-runtime/src/deferred_init.ts +0 -18
  411. package/src/constraint-runtime/src/direct_modes.ts +0 -13
  412. package/src/constraint-runtime/src/dynamic-tool-loader.ts +0 -115
  413. package/src/constraint-runtime/src/entrypoints/index.ts +0 -15
  414. package/src/constraint-runtime/src/execution_registry.ts +0 -41
  415. package/src/constraint-runtime/src/history.ts +0 -16
  416. package/src/constraint-runtime/src/hooks/index.ts +0 -15
  417. package/src/constraint-runtime/src/index.ts +0 -28
  418. package/src/constraint-runtime/src/ink.ts +0 -4
  419. package/src/constraint-runtime/src/keybindings/index.ts +0 -15
  420. package/src/constraint-runtime/src/memdir/index.ts +0 -15
  421. package/src/constraint-runtime/src/migrations/index.ts +0 -15
  422. package/src/constraint-runtime/src/models.ts +0 -49
  423. package/src/constraint-runtime/src/moreright/index.ts +0 -15
  424. package/src/constraint-runtime/src/native_ts/index.ts +0 -15
  425. package/src/constraint-runtime/src/output_styles/index.ts +0 -15
  426. package/src/constraint-runtime/src/parity_audit.ts +0 -23
  427. package/src/constraint-runtime/src/plugins/index.ts +0 -15
  428. package/src/constraint-runtime/src/port_manifest.ts +0 -20
  429. package/src/constraint-runtime/src/prefetch.ts +0 -17
  430. package/src/constraint-runtime/src/query.ts +0 -7
  431. package/src/constraint-runtime/src/reference_data/archive_surface_snapshot.json +0 -63
  432. package/src/constraint-runtime/src/reference_data/commands_snapshot.json +0 -1037
  433. package/src/constraint-runtime/src/reference_data/subsystems/OpenCLI.json +0 -10
  434. package/src/constraint-runtime/src/reference_data/subsystems/PolymarketSDK.json +0 -12
  435. package/src/constraint-runtime/src/reference_data/subsystems/SafeSDK.json +0 -14
  436. package/src/constraint-runtime/src/reference_data/subsystems/assistant.json +0 -8
  437. package/src/constraint-runtime/src/reference_data/subsystems/bootstrap.json +0 -8
  438. package/src/constraint-runtime/src/reference_data/subsystems/bridge.json +0 -32
  439. package/src/constraint-runtime/src/reference_data/subsystems/buddy.json +0 -13
  440. package/src/constraint-runtime/src/reference_data/subsystems/cli.json +0 -26
  441. package/src/constraint-runtime/src/reference_data/subsystems/components.json +0 -32
  442. package/src/constraint-runtime/src/reference_data/subsystems/constants.json +0 -28
  443. package/src/constraint-runtime/src/reference_data/subsystems/coordinator.json +0 -8
  444. package/src/constraint-runtime/src/reference_data/subsystems/entrypoints.json +0 -15
  445. package/src/constraint-runtime/src/reference_data/subsystems/hooks.json +0 -32
  446. package/src/constraint-runtime/src/reference_data/subsystems/keybindings.json +0 -21
  447. package/src/constraint-runtime/src/reference_data/subsystems/memdir.json +0 -15
  448. package/src/constraint-runtime/src/reference_data/subsystems/migrations.json +0 -18
  449. package/src/constraint-runtime/src/reference_data/subsystems/moreright.json +0 -8
  450. package/src/constraint-runtime/src/reference_data/subsystems/native_ts.json +0 -11
  451. package/src/constraint-runtime/src/reference_data/subsystems/outputStyles.json +0 -8
  452. package/src/constraint-runtime/src/reference_data/subsystems/plugins.json +0 -9
  453. package/src/constraint-runtime/src/reference_data/subsystems/remote.json +0 -11
  454. package/src/constraint-runtime/src/reference_data/subsystems/schemas.json +0 -8
  455. package/src/constraint-runtime/src/reference_data/subsystems/screens.json +0 -10
  456. package/src/constraint-runtime/src/reference_data/subsystems/server.json +0 -10
  457. package/src/constraint-runtime/src/reference_data/subsystems/services.json +0 -32
  458. package/src/constraint-runtime/src/reference_data/subsystems/skills.json +0 -27
  459. package/src/constraint-runtime/src/reference_data/subsystems/state.json +0 -13
  460. package/src/constraint-runtime/src/reference_data/subsystems/types.json +0 -18
  461. package/src/constraint-runtime/src/reference_data/subsystems/upstreamproxy.json +0 -9
  462. package/src/constraint-runtime/src/reference_data/subsystems/utils.json +0 -32
  463. package/src/constraint-runtime/src/reference_data/subsystems/vim.json +0 -12
  464. package/src/constraint-runtime/src/reference_data/subsystems/voice.json +0 -8
  465. package/src/constraint-runtime/src/reference_data/tools_snapshot.json +0 -1042
  466. package/src/constraint-runtime/src/remote/index.ts +0 -15
  467. package/src/constraint-runtime/src/remote_runtime.ts +0 -17
  468. package/src/constraint-runtime/src/runtime/index.ts +0 -1
  469. package/src/constraint-runtime/src/runtime/session.ts +0 -42
  470. package/src/constraint-runtime/src/schemas/index.ts +0 -15
  471. package/src/constraint-runtime/src/screens/index.ts +0 -15
  472. package/src/constraint-runtime/src/server/index.ts +0 -15
  473. package/src/constraint-runtime/src/services/index.ts +0 -15
  474. package/src/constraint-runtime/src/session_store.ts +0 -32
  475. package/src/constraint-runtime/src/setup.ts +0 -50
  476. package/src/constraint-runtime/src/skills/index.ts +0 -1
  477. package/src/constraint-runtime/src/skills/skill-registry.ts +0 -40
  478. package/src/constraint-runtime/src/state/index.ts +0 -15
  479. package/src/constraint-runtime/src/system_init.ts +0 -21
  480. package/src/constraint-runtime/src/thinking/engine.ts +0 -61
  481. package/src/constraint-runtime/src/thinking/index.ts +0 -1
  482. package/src/constraint-runtime/src/tool_pool.ts +0 -20
  483. package/src/constraint-runtime/src/tools/OpenCLI/execAdapter.ts +0 -12
  484. package/src/constraint-runtime/src/tools/OpenCLI/listAdapters.ts +0 -12
  485. package/src/constraint-runtime/src/tools/OpenCLI/runCommand.ts +0 -13
  486. package/src/constraint-runtime/src/tools/PolymarketSDK/cancelOrder.ts +0 -10
  487. package/src/constraint-runtime/src/tools/PolymarketSDK/createOrder.ts +0 -13
  488. package/src/constraint-runtime/src/tools/PolymarketSDK/getMarket.ts +0 -14
  489. package/src/constraint-runtime/src/tools/PolymarketSDK/getOrders.ts +0 -10
  490. package/src/constraint-runtime/src/tools/PolymarketSDK/listMarkets.ts +0 -24
  491. package/src/constraint-runtime/src/tools/SafeSDK/confirmTransaction.ts +0 -13
  492. package/src/constraint-runtime/src/tools/SafeSDK/createTransaction.ts +0 -23
  493. package/src/constraint-runtime/src/tools/SafeSDK/deploySafe.ts +0 -12
  494. package/src/constraint-runtime/src/tools/SafeSDK/executeTransaction.ts +0 -12
  495. package/src/constraint-runtime/src/tools/SafeSDK/getBalance.ts +0 -10
  496. package/src/constraint-runtime/src/tools/SafeSDK/getPendingTransactions.ts +0 -10
  497. package/src/constraint-runtime/src/tools/SafeSDK/proposeTransaction.ts +0 -14
  498. package/src/constraint-runtime/src/tools/WalletTools/autoPay.ts +0 -58
  499. package/src/constraint-runtime/src/tools/WalletTools/createWallet.ts +0 -19
  500. package/src/constraint-runtime/src/tools/WalletTools/getBalance.ts +0 -28
  501. package/src/constraint-runtime/src/tools/WalletTools/importWallet.ts +0 -34
  502. package/src/constraint-runtime/src/tools/WalletTools/sendTransaction.ts +0 -50
  503. package/src/constraint-runtime/src/tools/WalletTools/signMessage.ts +0 -23
  504. package/src/constraint-runtime/src/tools/WalletTools/transferToken.ts +0 -49
  505. package/src/constraint-runtime/src/tools.ts +0 -100
  506. package/src/constraint-runtime/src/transcript.ts +0 -23
  507. package/src/constraint-runtime/src/types/index.ts +0 -15
  508. package/src/constraint-runtime/src/upstream_proxy/index.ts +0 -15
  509. package/src/constraint-runtime/src/utils/index.ts +0 -15
  510. package/src/constraint-runtime/src/vim/index.ts +0 -15
  511. package/src/constraint-runtime/src/voice/index.ts +0 -15
  512. package/src/constraint-runtime/tests/agent.test.ts +0 -20
  513. package/src/constraint-runtime/tests/constraint.test.ts +0 -47
  514. package/src/constraint-runtime/tests/skill.test.ts +0 -23
  515. package/src/constraint-runtime/tests/thinking.test.ts +0 -28
  516. package/src/constraint-runtime/tsconfig.json +0 -13
  517. package/src/pi-ecosystem/index.ts +0 -453
  518. package/src/pi-ecosystem-colony/index.ts +0 -482
  519. package/src/pi-ecosystem-goals/index.ts +0 -585
  520. package/src/pi-ecosystem-judgment/decision.ts +0 -431
  521. package/src/pi-ecosystem-judgment/distillation.ts +0 -398
  522. package/src/pi-ecosystem-judgment/human-value-store.ts +0 -580
  523. package/src/pi-ecosystem-judgment/index.ts +0 -678
  524. package/src/pi-ecosystem-judgment/value-injection.ts +0 -744
  525. package/src/pi-ecosystem-mcp/index.ts +0 -427
  526. package/src/pi-ecosystem-subagents/index.ts +0 -408
  527. package/src/test/ai-judgment-test.ts +0 -92
  528. package/src/test/bollharness-integration.test.ts +0 -398
  529. package/src/test/channel-agent-multi-dialogue.ts +0 -265
  530. package/src/test/channel-heartbeat-agent-test.ts +0 -244
  531. package/src/test/constraint-layer.test.ts +0 -191
  532. package/src/test/diap-identity-test.ts +0 -222
  533. package/src/test/diap-quick-test.ts +0 -73
  534. package/src/test/global-shared-context.test.ts +0 -393
  535. package/src/test/harness-judgment-injection.test.ts +0 -353
  536. package/src/test/harness-workflow-integrator-test.ts +0 -285
  537. package/src/test/human-value-store.test.ts +0 -316
  538. package/src/test/hybrid-integration-test.ts +0 -126
  539. package/src/test/hybrid-messenger-verify.ts +0 -68
  540. package/src/test/iroh-bistream-debug.ts +0 -50
  541. package/src/test/iroh-communication.test.ts +0 -81
  542. package/src/test/iroh-debug-test.ts +0 -69
  543. package/src/test/iroh-diap-test.ts +0 -90
  544. package/src/test/iroh-direct-connect.ts +0 -65
  545. package/src/test/iroh-e2e-fixed.ts +0 -106
  546. package/src/test/iroh-e2e-same-process.ts +0 -83
  547. package/src/test/iroh-e2e.ts +0 -83
  548. package/src/test/iroh-final-e2e.ts +0 -84
  549. package/src/test/iroh-relay-test.ts +0 -46
  550. package/src/test/iroh-simple-test.ts +0 -49
  551. package/src/test/iroh-transport-verify.ts +0 -60
  552. package/src/test/iroh-transport.test.ts +0 -47
  553. package/src/test/iroh-two-nodes.ts +0 -87
  554. package/src/test/iroh-verify.ts +0 -55
  555. package/src/test/judgment-decision.test.ts +0 -373
  556. package/src/test/llm-judgment-integration.test.ts +0 -257
  557. package/src/test/p2p-agent-complex-dialogue.ts +0 -490
  558. package/src/test/p2p-agent-dialogue.ts +0 -423
  559. package/src/test/p2p-agent-full-bidirectional.ts +0 -686
  560. package/src/test/p2p-agent-harness-flow.ts +0 -562
  561. package/src/test/p2p-agent-harness-single.ts +0 -175
  562. package/src/test/p2p-ai-dialogue-test.ts +0 -374
  563. package/src/test/p2p-cid-connect-test.ts +0 -245
  564. package/src/test/p2p-connect-receiver.ts +0 -85
  565. package/src/test/p2p-iroh-test.ts +0 -214
  566. package/src/test/p2p-minimal-test.ts +0 -264
  567. package/src/test/p2p-node-1.ts +0 -172
  568. package/src/test/p2p-node-2.ts +0 -172
  569. package/src/test/p2p-server.ts +0 -335
  570. package/src/test/p2p-two-nodes-test.ts +0 -542
  571. package/src/test/pi-sdk.test.ts +0 -47
  572. package/src/test/set-persona.ts +0 -56
  573. package/src/test/simple.test.ts +0 -11
  574. package/src/test/storage-integration.test.ts +0 -191
  575. package/src/test/subagent-manager.test.ts +0 -392
  576. package/src/test/test-gate-flow.test.ts +0 -92
  577. package/src/test/workflow-engine.test.ts +0 -101
  578. package/src/workflows/collaboration.ts +0 -455
  579. package/src/workflows/index.ts +0 -64
  580. package/vitest.config.ts +0 -12
  581. 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
- ```