pi-harness-runtime 1.1.0 → 1.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 (612) hide show
  1. package/.pi/plugins/herdr-clipboard/herdr-plugin.toml +22 -0
  2. package/.pi/plugins/herdr-clipboard/start-bridge.sh +29 -0
  3. package/.pi/plugins/herdr-clipboard/tmux-watch.sh +39 -0
  4. package/CHANGELOG.md +175 -13
  5. package/README.md +87 -1
  6. package/config.toml.example +35 -0
  7. package/harness/autonomous-review.ts +5 -2
  8. package/harness/e2e/chatgpt-quota-scraper.ts +478 -0
  9. package/harness/e2e/glm-quota-scraper.ts +449 -0
  10. package/harness/herdr-agents.ts +6 -2
  11. package/harness/loop-code-agent.ts +4 -1
  12. package/harness/loop-review-agent.ts +5 -6
  13. package/harness/notification-events.ts +2 -2
  14. package/harness/task-graph.d.ts +51 -0
  15. package/index.ts +147 -2
  16. package/package.json +17 -16
  17. package/packages/a2a-adapter/dist/index.d.ts +1 -0
  18. package/packages/a2a-adapter/dist/index.d.ts.map +1 -1
  19. package/packages/a2a-adapter/dist/index.js +1 -0
  20. package/packages/a2a-adapter/dist/index.js.map +1 -1
  21. package/packages/a2a-adapter/package.json +1 -1
  22. package/packages/a2a-adapter/src/discovery.ts +106 -0
  23. package/packages/a2a-adapter/src/index.ts +8 -0
  24. package/packages/architecture-generator/package.json +21 -0
  25. package/packages/architecture-generator/src/adr.ts +51 -0
  26. package/packages/architecture-generator/src/index.ts +9 -0
  27. package/packages/architecture-generator/src/mermaid.ts +76 -0
  28. package/packages/architecture-generator/src/types.ts +30 -0
  29. package/packages/auth/package.json +1 -1
  30. package/packages/autonomous-refactor/package.json +1 -1
  31. package/packages/autonomous-runtime/package.json +1 -1
  32. package/packages/cache-strategy/package.json +1 -1
  33. package/packages/capability-registry/package.json +1 -1
  34. package/packages/checkpoint/package.json +1 -1
  35. package/packages/cli-plugin-sdk/package.json +2 -2
  36. package/packages/clipboard/package.json +1 -1
  37. package/packages/clipboard/src/copy-sync.ts +52 -3
  38. package/packages/clipboard/src/index.ts +1 -0
  39. package/packages/clipboard/src/paste-bridge.ts +86 -0
  40. package/packages/clipboard-plugin/package.json +17 -0
  41. package/packages/clipboard-plugin/src/index.ts +74 -0
  42. package/packages/clipboard-plugin/src/types.ts +30 -0
  43. package/packages/code-generation/package.json +1 -1
  44. package/packages/code-review/package.json +1 -1
  45. package/packages/codex-adapter/package.json +2 -2
  46. package/packages/config-capture/package.json +23 -0
  47. package/packages/config-capture/src/index.ts +357 -0
  48. package/packages/context-compiler/package.json +1 -1
  49. package/packages/context-discovery/package.json +1 -1
  50. package/packages/context-manager/package.json +1 -1
  51. package/packages/cookie-sanitizer/package.json +1 -1
  52. package/packages/cost-optimizer/package.json +1 -1
  53. package/packages/dependency-analyzer/package.json +1 -1
  54. package/packages/django-plugin/package.json +1 -1
  55. package/packages/doc-generator/package.json +1 -1
  56. package/packages/evaluation-engine/package.json +1 -1
  57. package/packages/evaluation-runner/package.json +1 -1
  58. package/packages/event-bus/package.json +1 -1
  59. package/packages/event-bus/src/herdr-bus.ts +4 -1
  60. package/packages/event-store/package.json +1 -1
  61. package/packages/experience-replay/package.json +1 -1
  62. package/packages/feedback-collector/package.json +1 -1
  63. package/packages/file-copy-helper/package.json +17 -0
  64. package/packages/file-copy-helper/src/extension.debug.ts +226 -0
  65. package/packages/file-copy-helper/src/extension.ts +226 -0
  66. package/packages/file-copy-helper/src/index.ts +1 -0
  67. package/packages/framework-detector/package.json +1 -1
  68. package/packages/framework-plugin-sdk/package.json +1 -1
  69. package/packages/frappe-plugin/package.json +1 -1
  70. package/packages/generic-web-plugin/package.json +1 -1
  71. package/packages/health-monitor/package.json +1 -1
  72. package/packages/intent-analyzer/package.json +1 -1
  73. package/packages/knowledge-graph/package.json +24 -0
  74. package/packages/knowledge-graph/src/graph-extractor.ts +338 -0
  75. package/packages/knowledge-graph/src/index.ts +27 -0
  76. package/packages/knowledge-graph/src/mcp-client.ts +237 -0
  77. package/packages/knowledge-graph/src/provenance-linker.ts +101 -0
  78. package/packages/knowledge-graph/src/types.ts +86 -0
  79. package/packages/knowledge-retrieval/package.json +25 -0
  80. package/packages/knowledge-retrieval/src/index.ts +18 -0
  81. package/packages/knowledge-retrieval/src/mcp-client.ts +212 -0
  82. package/packages/knowledge-retrieval/src/types.ts +112 -0
  83. package/packages/laravel-plugin/package.json +1 -1
  84. package/packages/learning-engine/package.json +1 -1
  85. package/packages/mcp-adapter/package.json +1 -1
  86. package/packages/memory-engine/package.json +1 -1
  87. package/packages/milestone-manager/package.json +21 -0
  88. package/packages/milestone-manager/src/engine.ts +105 -0
  89. package/packages/milestone-manager/src/index.ts +6 -0
  90. package/packages/milestone-manager/src/types.ts +28 -0
  91. package/packages/model-registry/package.json +1 -1
  92. package/packages/nextjs-plugin/package.json +1 -1
  93. package/packages/notification/package.json +1 -1
  94. package/packages/notification/src/adapters/line-adapter.ts +119 -0
  95. package/packages/notification/src/index.ts +1 -0
  96. package/packages/notification/src/notification-center.ts +6 -0
  97. package/packages/notification/src/types.ts +7 -2
  98. package/packages/observability/package.json +1 -1
  99. package/packages/okf-indexer/package.json +12 -0
  100. package/packages/okf-indexer/src/cli.ts +25 -0
  101. package/packages/okf-indexer/src/indexer.ts +186 -0
  102. package/packages/performance-optimizer/package.json +1 -1
  103. package/packages/privilege-broker/package.json +1 -1
  104. package/packages/project-analyzer/package.json +1 -1
  105. package/packages/project-bootstrap/package.json +24 -0
  106. package/packages/project-bootstrap/src/bootstrap.ts +166 -0
  107. package/packages/project-bootstrap/src/frappe.ts +97 -0
  108. package/packages/project-bootstrap/src/index.ts +27 -0
  109. package/packages/project-bootstrap/src/minimal.ts +45 -0
  110. package/packages/project-bootstrap/src/types.ts +66 -0
  111. package/packages/project-bootstrap/src/typescript.ts +114 -0
  112. package/packages/projection-engine/package.json +1 -1
  113. package/packages/prompt-compiler/package.json +1 -1
  114. package/packages/prompt-versioning/package.json +1 -1
  115. package/packages/provider-adapter-sdk/package.json +1 -1
  116. package/packages/provider-router/dist/src/types.js +1 -1
  117. package/packages/provider-router/package.json +1 -1
  118. package/packages/provider-selector/package.json +1 -1
  119. package/packages/providers/package.json +1 -1
  120. package/packages/providers/src/adapters.ts +1 -1
  121. package/packages/providers/src/deepagents-adapter.ts +2 -2
  122. package/packages/quota-manager/package.json +1 -1
  123. package/packages/quota-manager/src/quota-manager.ts +1 -4
  124. package/packages/rate-limiter/package.json +1 -1
  125. package/packages/react-vite-plugin/package.json +1 -1
  126. package/packages/release-manager/package.json +1 -1
  127. package/packages/requirement-compiler/package.json +1 -1
  128. package/packages/runtime/package.json +1 -1
  129. package/packages/runtime/src/runtime-api.ts +16 -16
  130. package/packages/scheduler/package.json +1 -1
  131. package/packages/scheduler-adapter/package.json +1 -1
  132. package/packages/session/dist/manager.d.ts.map +1 -1
  133. package/packages/session/dist/manager.js +3 -1
  134. package/packages/session/dist/manager.js.map +1 -1
  135. package/packages/session/package.json +1 -1
  136. package/packages/session/src/manager.ts +4 -1
  137. package/packages/session-api/package.json +1 -1
  138. package/packages/session-export/package.json +1 -1
  139. package/packages/shared-context/package.json +1 -1
  140. package/packages/skill-registry/package.json +1 -1
  141. package/packages/sprint-planner/package.json +1 -1
  142. package/packages/subscription-engine/package.json +1 -1
  143. package/packages/task-compiler/package.json +1 -1
  144. package/packages/tencentdb-memory/package.json +23 -0
  145. package/packages/tencentdb-memory/src/client.ts +130 -0
  146. package/packages/tencentdb-memory/src/index.ts +32 -0
  147. package/packages/tencentdb-memory/src/loader.ts +150 -0
  148. package/packages/tencentdb-memory/src/mcp-tools.ts +213 -0
  149. package/packages/tencentdb-memory/src/types.ts +101 -0
  150. package/packages/tencentdb-sync/package.json +26 -0
  151. package/packages/tencentdb-sync/src/cli.ts +363 -0
  152. package/packages/tencentdb-sync/src/client.ts +268 -0
  153. package/packages/tencentdb-sync/src/config.ts +139 -0
  154. package/packages/tencentdb-sync/src/index.ts +15 -0
  155. package/packages/test-data-generator/package.json +1 -1
  156. package/packages/test-generator/package.json +1 -1
  157. package/packages/todo-bd-sync/package.json +1 -1
  158. package/packages/todo-bd-sync/src/detector.ts +25 -4
  159. package/packages/todo-bd-sync/src/extension.ts +8 -86
  160. package/packages/todo-bd-sync/src/task-analyzer.ts +314 -0
  161. package/packages/token-estimation/package.json +1 -1
  162. package/packages/token-optimizer/package.json +1 -1
  163. package/packages/tui/package.json +1 -1
  164. package/packages/types/package.json +1 -1
  165. package/packages/types/src/agent-worker-types.d.ts +206 -0
  166. package/packages/types/src/ai-providers.d.ts +36 -0
  167. package/packages/types/src/runtime-types.d.ts +6 -0
  168. package/packages/workflow-events/package.json +1 -1
  169. package/packages/workspace-scanner/package.json +1 -1
  170. package/packages/worktree/package.json +1 -1
  171. package/packages/worktree/src/worktree.ts +1 -4
  172. package/packages/write-review/package.json +22 -0
  173. package/packages/write-review/src/blackboard.ts +249 -0
  174. package/packages/write-review/src/gate.ts +169 -0
  175. package/packages/write-review/src/index.ts +65 -0
  176. package/packages/write-review/src/injection.ts +190 -0
  177. package/packages/write-review/src/review.ts +206 -0
  178. package/packages/write-review/src/trigger.ts +133 -0
  179. package/packages/write-review/src/types.ts +90 -0
  180. package/prompts/agents/reviewer.md +57 -0
  181. package/prompts/agents/writer.md +42 -0
  182. package/prompts/slash-commands.md +40 -0
  183. package/prompts/tencentdb-connect.md +35 -0
  184. package/prompts/tencentdb-setup.md +101 -0
  185. package/prompts/tencentdb.md +88 -0
  186. package/prompts/write-review.md +50 -0
  187. package/scripts/check-version-sync.ts +80 -0
  188. package/scripts/convert-skills-to-okf.ts +168 -0
  189. package/scripts/copy-plugins.js +56 -0
  190. package/scripts/gist-auth.ts +64 -0
  191. package/scripts/gist-poll.sh +127 -0
  192. package/scripts/release/actions-monitor.ts +357 -0
  193. package/scripts/release/adapters/base.ts +95 -0
  194. package/scripts/release/adapters/detector.ts +181 -0
  195. package/scripts/release/adapters/node-workspace.ts +230 -0
  196. package/scripts/release/adapters/python.ts +236 -0
  197. package/scripts/release/adapters/rust.ts +129 -0
  198. package/scripts/release/adapters/tauri.ts +298 -0
  199. package/scripts/release/orchestrator.ts +278 -0
  200. package/scripts/release-all.ts +211 -0
  201. package/scripts/scan-secrets.sh +68 -0
  202. package/scripts/skills-sync.ts +487 -0
  203. package/packages/a2a-adapter/tsconfig.json +0 -5
  204. package/packages/auth/dist/minimax-browser-auth.d.ts +0 -89
  205. package/packages/auth/dist/minimax-browser-auth.d.ts.map +0 -1
  206. package/packages/auth/dist/minimax-browser-auth.js +0 -890
  207. package/packages/auth/dist/minimax-browser-auth.js.map +0 -1
  208. package/packages/auth/dist/run-minimax-auth.d.ts +0 -19
  209. package/packages/auth/dist/run-minimax-auth.d.ts.map +0 -1
  210. package/packages/auth/dist/run-minimax-auth.js +0 -112
  211. package/packages/auth/dist/run-minimax-auth.js.map +0 -1
  212. package/packages/auth/tsconfig.json +0 -9
  213. package/packages/autonomous-refactor/tsconfig.json +0 -5
  214. package/packages/autonomous-runtime/test/inbox.test.mjs +0 -266
  215. package/packages/autonomous-runtime/tsconfig.json +0 -22
  216. package/packages/autonomous-runtime/tsconfig.tsbuildinfo +0 -1
  217. package/packages/cache-strategy/tsconfig.json +0 -5
  218. package/packages/capability-registry/src/types.d.ts.map +0 -1
  219. package/packages/capability-registry/src/types.js +0 -10
  220. package/packages/capability-registry/src/types.js.map +0 -1
  221. package/packages/capability-registry/tsconfig.json +0 -22
  222. package/packages/checkpoint/tsconfig.json +0 -33
  223. package/packages/checkpoint/tsconfig.tsbuildinfo +0 -1
  224. package/packages/cli-plugin-sdk/tsconfig.json +0 -11
  225. package/packages/clipboard/dist/src/clipboard.d.ts +0 -11
  226. package/packages/clipboard/dist/src/clipboard.d.ts.map +0 -1
  227. package/packages/clipboard/dist/src/clipboard.js +0 -51
  228. package/packages/clipboard/dist/src/clipboard.js.map +0 -1
  229. package/packages/clipboard/dist/src/copy-sync.d.ts +0 -27
  230. package/packages/clipboard/dist/src/copy-sync.d.ts.map +0 -1
  231. package/packages/clipboard/dist/src/copy-sync.js +0 -170
  232. package/packages/clipboard/dist/src/copy-sync.js.map +0 -1
  233. package/packages/clipboard/dist/src/gist-relay.d.ts +0 -48
  234. package/packages/clipboard/dist/src/gist-relay.d.ts.map +0 -1
  235. package/packages/clipboard/dist/src/gist-relay.js +0 -186
  236. package/packages/clipboard/dist/src/gist-relay.js.map +0 -1
  237. package/packages/clipboard/dist/src/github-login.d.ts +0 -16
  238. package/packages/clipboard/dist/src/github-login.d.ts.map +0 -1
  239. package/packages/clipboard/dist/src/github-login.js +0 -69
  240. package/packages/clipboard/dist/src/github-login.js.map +0 -1
  241. package/packages/clipboard/dist/src/index.d.ts +0 -4
  242. package/packages/clipboard/dist/src/index.d.ts.map +0 -1
  243. package/packages/clipboard/dist/src/index.js +0 -3
  244. package/packages/clipboard/dist/src/index.js.map +0 -1
  245. package/packages/clipboard/dist/src/types.d.ts +0 -13
  246. package/packages/clipboard/dist/src/types.d.ts.map +0 -1
  247. package/packages/clipboard/dist/src/types.js +0 -5
  248. package/packages/clipboard/dist/src/types.js.map +0 -1
  249. package/packages/clipboard/test/mojibake.test.mjs +0 -143
  250. package/packages/clipboard/tsconfig.json +0 -10
  251. package/packages/code-generation/tsconfig.json +0 -33
  252. package/packages/code-generation/tsconfig.tsbuildinfo +0 -1
  253. package/packages/code-review/tsconfig.json +0 -33
  254. package/packages/code-review/tsconfig.tsbuildinfo +0 -1
  255. package/packages/codex-adapter/tsconfig.json +0 -5
  256. package/packages/context-compiler/tsconfig.json +0 -17
  257. package/packages/context-discovery/dist/src/discover.d.ts +0 -3
  258. package/packages/context-discovery/dist/src/discover.d.ts.map +0 -1
  259. package/packages/context-discovery/dist/src/discover.js +0 -42
  260. package/packages/context-discovery/dist/src/discover.js.map +0 -1
  261. package/packages/context-discovery/dist/src/discovery.d.ts +0 -28
  262. package/packages/context-discovery/dist/src/discovery.d.ts.map +0 -1
  263. package/packages/context-discovery/dist/src/discovery.js +0 -21
  264. package/packages/context-discovery/dist/src/discovery.js.map +0 -1
  265. package/packages/context-discovery/dist/src/index.d.ts +0 -3
  266. package/packages/context-discovery/dist/src/index.d.ts.map +0 -1
  267. package/packages/context-discovery/dist/src/index.js +0 -2
  268. package/packages/context-discovery/dist/src/index.js.map +0 -1
  269. package/packages/context-discovery/dist/src/types.d.ts +0 -16
  270. package/packages/context-discovery/dist/src/types.d.ts.map +0 -1
  271. package/packages/context-discovery/dist/src/types.js +0 -2
  272. package/packages/context-discovery/dist/src/types.js.map +0 -1
  273. package/packages/context-discovery/tsconfig.json +0 -10
  274. package/packages/context-manager/tsconfig.json +0 -6
  275. package/packages/cookie-sanitizer/tsconfig.json +0 -8
  276. package/packages/cost-optimizer/tsconfig.json +0 -22
  277. package/packages/dependency-analyzer/dist/src/analyzer.d.ts +0 -17
  278. package/packages/dependency-analyzer/dist/src/analyzer.d.ts.map +0 -1
  279. package/packages/dependency-analyzer/dist/src/analyzer.js +0 -119
  280. package/packages/dependency-analyzer/dist/src/analyzer.js.map +0 -1
  281. package/packages/dependency-analyzer/dist/src/imports.d.ts +0 -12
  282. package/packages/dependency-analyzer/dist/src/imports.d.ts.map +0 -1
  283. package/packages/dependency-analyzer/dist/src/imports.js +0 -73
  284. package/packages/dependency-analyzer/dist/src/imports.js.map +0 -1
  285. package/packages/dependency-analyzer/dist/src/index.d.ts +0 -4
  286. package/packages/dependency-analyzer/dist/src/index.d.ts.map +0 -1
  287. package/packages/dependency-analyzer/dist/src/index.js +0 -3
  288. package/packages/dependency-analyzer/dist/src/index.js.map +0 -1
  289. package/packages/dependency-analyzer/dist/src/types.d.ts +0 -28
  290. package/packages/dependency-analyzer/dist/src/types.d.ts.map +0 -1
  291. package/packages/dependency-analyzer/dist/src/types.js +0 -5
  292. package/packages/dependency-analyzer/dist/src/types.js.map +0 -1
  293. package/packages/dependency-analyzer/test/analyzer.test.js +0 -37
  294. package/packages/dependency-analyzer/tsconfig.json +0 -10
  295. package/packages/django-plugin/tsconfig.json +0 -12
  296. package/packages/doc-generator/tsconfig.json +0 -6
  297. package/packages/evaluation-engine/tsconfig.json +0 -8
  298. package/packages/evaluation-runner/tsconfig.json +0 -5
  299. package/packages/event-bus/dist/src/bus.d.ts +0 -15
  300. package/packages/event-bus/dist/src/bus.d.ts.map +0 -1
  301. package/packages/event-bus/dist/src/bus.js +0 -98
  302. package/packages/event-bus/dist/src/bus.js.map +0 -1
  303. package/packages/event-bus/dist/src/herdr-bus.d.ts +0 -121
  304. package/packages/event-bus/dist/src/herdr-bus.d.ts.map +0 -1
  305. package/packages/event-bus/dist/src/herdr-bus.js +0 -322
  306. package/packages/event-bus/dist/src/herdr-bus.js.map +0 -1
  307. package/packages/event-bus/dist/src/index.d.ts +0 -6
  308. package/packages/event-bus/dist/src/index.d.ts.map +0 -1
  309. package/packages/event-bus/dist/src/index.js +0 -4
  310. package/packages/event-bus/dist/src/index.js.map +0 -1
  311. package/packages/event-bus/dist/src/types.d.ts +0 -27
  312. package/packages/event-bus/dist/src/types.d.ts.map +0 -1
  313. package/packages/event-bus/dist/src/types.js +0 -10
  314. package/packages/event-bus/dist/src/types.js.map +0 -1
  315. package/packages/event-bus/tsconfig.json +0 -10
  316. package/packages/event-store/dist/src/index.d.ts +0 -3
  317. package/packages/event-store/dist/src/index.d.ts.map +0 -1
  318. package/packages/event-store/dist/src/index.js +0 -2
  319. package/packages/event-store/dist/src/index.js.map +0 -1
  320. package/packages/event-store/dist/src/store.d.ts +0 -15
  321. package/packages/event-store/dist/src/store.d.ts.map +0 -1
  322. package/packages/event-store/dist/src/store.js +0 -139
  323. package/packages/event-store/dist/src/store.js.map +0 -1
  324. package/packages/event-store/dist/src/types.d.ts +0 -48
  325. package/packages/event-store/dist/src/types.d.ts.map +0 -1
  326. package/packages/event-store/dist/src/types.js +0 -5
  327. package/packages/event-store/dist/src/types.js.map +0 -1
  328. package/packages/event-store/src/types.d.ts.map +0 -1
  329. package/packages/event-store/src/types.js +0 -5
  330. package/packages/event-store/src/types.js.map +0 -1
  331. package/packages/event-store/tsconfig.json +0 -10
  332. package/packages/experience-replay/tsconfig.json +0 -8
  333. package/packages/feedback-collector/tsconfig.json +0 -5
  334. package/packages/framework-detector/tsconfig.json +0 -33
  335. package/packages/framework-detector/tsconfig.tsbuildinfo +0 -1
  336. package/packages/framework-plugin-sdk/tsconfig.json +0 -33
  337. package/packages/framework-plugin-sdk/tsconfig.tsbuildinfo +0 -1
  338. package/packages/frappe-plugin/tsconfig.json +0 -12
  339. package/packages/generic-web-plugin/tsconfig.json +0 -12
  340. package/packages/health-monitor/tsconfig.json +0 -5
  341. package/packages/intent-analyzer/dist/src/analyzer.d.ts +0 -13
  342. package/packages/intent-analyzer/dist/src/analyzer.d.ts.map +0 -1
  343. package/packages/intent-analyzer/dist/src/analyzer.js +0 -239
  344. package/packages/intent-analyzer/dist/src/analyzer.js.map +0 -1
  345. package/packages/intent-analyzer/dist/src/index.d.ts +0 -3
  346. package/packages/intent-analyzer/dist/src/index.d.ts.map +0 -1
  347. package/packages/intent-analyzer/dist/src/index.js +0 -2
  348. package/packages/intent-analyzer/dist/src/index.js.map +0 -1
  349. package/packages/intent-analyzer/dist/src/types.d.ts +0 -26
  350. package/packages/intent-analyzer/dist/src/types.d.ts.map +0 -1
  351. package/packages/intent-analyzer/dist/src/types.js +0 -7
  352. package/packages/intent-analyzer/dist/src/types.js.map +0 -1
  353. package/packages/intent-analyzer/tsconfig.json +0 -10
  354. package/packages/laravel-plugin/tsconfig.json +0 -12
  355. package/packages/learning-engine/tsconfig.json +0 -8
  356. package/packages/mcp-adapter/tsconfig.json +0 -8
  357. package/packages/memory-engine/tsconfig.json +0 -8
  358. package/packages/model-registry/src/types.d.ts.map +0 -1
  359. package/packages/model-registry/src/types.js +0 -5
  360. package/packages/model-registry/src/types.js.map +0 -1
  361. package/packages/model-registry/tsconfig.json +0 -22
  362. package/packages/nextjs-plugin/tsconfig.json +0 -12
  363. package/packages/notification/dist/adapters/email-adapter.d.ts +0 -17
  364. package/packages/notification/dist/adapters/email-adapter.d.ts.map +0 -1
  365. package/packages/notification/dist/adapters/email-adapter.js +0 -89
  366. package/packages/notification/dist/adapters/email-adapter.js.map +0 -1
  367. package/packages/notification/dist/adapters/ntfy-adapter.d.ts +0 -17
  368. package/packages/notification/dist/adapters/ntfy-adapter.d.ts.map +0 -1
  369. package/packages/notification/dist/adapters/ntfy-adapter.js +0 -84
  370. package/packages/notification/dist/adapters/ntfy-adapter.js.map +0 -1
  371. package/packages/notification/dist/adapters/telegram-adapter.d.ts +0 -17
  372. package/packages/notification/dist/adapters/telegram-adapter.d.ts.map +0 -1
  373. package/packages/notification/dist/adapters/telegram-adapter.js +0 -88
  374. package/packages/notification/dist/adapters/telegram-adapter.js.map +0 -1
  375. package/packages/notification/dist/adapters/webhook-adapter.d.ts +0 -15
  376. package/packages/notification/dist/adapters/webhook-adapter.d.ts.map +0 -1
  377. package/packages/notification/dist/adapters/webhook-adapter.js +0 -64
  378. package/packages/notification/dist/adapters/webhook-adapter.js.map +0 -1
  379. package/packages/notification/dist/base-adapter.d.ts +0 -36
  380. package/packages/notification/dist/base-adapter.d.ts.map +0 -1
  381. package/packages/notification/dist/base-adapter.js +0 -39
  382. package/packages/notification/dist/base-adapter.js.map +0 -1
  383. package/packages/notification/dist/index.d.ts +0 -9
  384. package/packages/notification/dist/index.d.ts.map +0 -1
  385. package/packages/notification/dist/index.js +0 -9
  386. package/packages/notification/dist/index.js.map +0 -1
  387. package/packages/notification/dist/notification-center.d.ts +0 -46
  388. package/packages/notification/dist/notification-center.d.ts.map +0 -1
  389. package/packages/notification/dist/notification-center.js +0 -228
  390. package/packages/notification/dist/notification-center.js.map +0 -1
  391. package/packages/notification/dist/types.d.ts +0 -65
  392. package/packages/notification/dist/types.d.ts.map +0 -1
  393. package/packages/notification/dist/types.js +0 -7
  394. package/packages/notification/dist/types.js.map +0 -1
  395. package/packages/notification/tsconfig.json +0 -8
  396. package/packages/observability/tsconfig.json +0 -33
  397. package/packages/observability/tsconfig.tsbuildinfo +0 -1
  398. package/packages/performance-optimizer/tsconfig.json +0 -8
  399. package/packages/privilege-broker/config/privileges.yaml.example +0 -172
  400. package/packages/privilege-broker/tsconfig.json +0 -22
  401. package/packages/privilege-broker/tsconfig.tsbuildinfo +0 -1
  402. package/packages/project-analyzer/tsconfig.json +0 -33
  403. package/packages/project-analyzer/tsconfig.tsbuildinfo +0 -1
  404. package/packages/projection-engine/dist/src/engine.d.ts +0 -61
  405. package/packages/projection-engine/dist/src/engine.d.ts.map +0 -1
  406. package/packages/projection-engine/dist/src/engine.js +0 -87
  407. package/packages/projection-engine/dist/src/engine.js.map +0 -1
  408. package/packages/projection-engine/dist/src/index.d.ts +0 -2
  409. package/packages/projection-engine/dist/src/index.d.ts.map +0 -1
  410. package/packages/projection-engine/dist/src/index.js +0 -2
  411. package/packages/projection-engine/dist/src/index.js.map +0 -1
  412. package/packages/projection-engine/dist/src/project.d.ts +0 -3
  413. package/packages/projection-engine/dist/src/project.d.ts.map +0 -1
  414. package/packages/projection-engine/dist/src/project.js +0 -24
  415. package/packages/projection-engine/dist/src/project.js.map +0 -1
  416. package/packages/projection-engine/dist/src/types.d.ts +0 -55
  417. package/packages/projection-engine/dist/src/types.d.ts.map +0 -1
  418. package/packages/projection-engine/dist/src/types.js +0 -5
  419. package/packages/projection-engine/dist/src/types.js.map +0 -1
  420. package/packages/projection-engine/src/types.d.ts.map +0 -1
  421. package/packages/projection-engine/src/types.js +0 -5
  422. package/packages/projection-engine/src/types.js.map +0 -1
  423. package/packages/projection-engine/tsconfig.json +0 -10
  424. package/packages/prompt-compiler/tsconfig.json +0 -19
  425. package/packages/prompt-versioning/tsconfig.json +0 -5
  426. package/packages/provider-adapter-sdk/dist/tsconfig.tsbuildinfo +0 -1
  427. package/packages/provider-adapter-sdk/tsconfig.json +0 -34
  428. package/packages/provider-adapter-sdk/tsconfig.tsbuildinfo +0 -1
  429. package/packages/provider-router/tsconfig.json +0 -20
  430. package/packages/provider-selector/tsconfig.json +0 -6
  431. package/packages/providers/dist/adapters.d.ts +0 -133
  432. package/packages/providers/dist/adapters.d.ts.map +0 -1
  433. package/packages/providers/dist/adapters.js +0 -236
  434. package/packages/providers/dist/adapters.js.map +0 -1
  435. package/packages/providers/dist/deepagents-adapter.d.ts +0 -78
  436. package/packages/providers/dist/deepagents-adapter.d.ts.map +0 -1
  437. package/packages/providers/dist/deepagents-adapter.js +0 -323
  438. package/packages/providers/dist/deepagents-adapter.js.map +0 -1
  439. package/packages/providers/dist/glm-usage.d.ts +0 -102
  440. package/packages/providers/dist/glm-usage.d.ts.map +0 -1
  441. package/packages/providers/dist/glm-usage.js +0 -197
  442. package/packages/providers/dist/glm-usage.js.map +0 -1
  443. package/packages/providers/dist/index.d.ts +0 -11
  444. package/packages/providers/dist/index.d.ts.map +0 -1
  445. package/packages/providers/dist/index.js +0 -11
  446. package/packages/providers/dist/index.js.map +0 -1
  447. package/packages/providers/dist/openai-usage.d.ts +0 -103
  448. package/packages/providers/dist/openai-usage.d.ts.map +0 -1
  449. package/packages/providers/dist/openai-usage.js +0 -208
  450. package/packages/providers/dist/openai-usage.js.map +0 -1
  451. package/packages/providers/dist/provider-id.d.ts +0 -46
  452. package/packages/providers/dist/provider-id.d.ts.map +0 -1
  453. package/packages/providers/dist/provider-id.js +0 -113
  454. package/packages/providers/dist/provider-id.js.map +0 -1
  455. package/packages/providers/tsconfig.json +0 -8
  456. package/packages/quota-manager/dist/examples/tui-usage-integration.d.ts +0 -35
  457. package/packages/quota-manager/dist/examples/tui-usage-integration.d.ts.map +0 -1
  458. package/packages/quota-manager/dist/examples/tui-usage-integration.js +0 -73
  459. package/packages/quota-manager/dist/examples/tui-usage-integration.js.map +0 -1
  460. package/packages/quota-manager/dist/index.d.ts +0 -8
  461. package/packages/quota-manager/dist/index.d.ts.map +0 -1
  462. package/packages/quota-manager/dist/index.js +0 -8
  463. package/packages/quota-manager/dist/index.js.map +0 -1
  464. package/packages/quota-manager/dist/quota-manager.d.ts +0 -70
  465. package/packages/quota-manager/dist/quota-manager.d.ts.map +0 -1
  466. package/packages/quota-manager/dist/quota-manager.js +0 -260
  467. package/packages/quota-manager/dist/quota-manager.js.map +0 -1
  468. package/packages/quota-manager/dist/tui-usage-monitor.d.ts +0 -96
  469. package/packages/quota-manager/dist/tui-usage-monitor.d.ts.map +0 -1
  470. package/packages/quota-manager/dist/tui-usage-monitor.js +0 -268
  471. package/packages/quota-manager/dist/tui-usage-monitor.js.map +0 -1
  472. package/packages/quota-manager/tsconfig.json +0 -8
  473. package/packages/rate-limiter/tsconfig.json +0 -5
  474. package/packages/react-vite-plugin/tsconfig.json +0 -12
  475. package/packages/release-manager/tsconfig.json +0 -5
  476. package/packages/requirement-compiler/tsconfig.json +0 -22
  477. package/packages/runtime/dist/command-executor.d.ts +0 -129
  478. package/packages/runtime/dist/command-executor.d.ts.map +0 -1
  479. package/packages/runtime/dist/command-executor.js +0 -383
  480. package/packages/runtime/dist/command-executor.js.map +0 -1
  481. package/packages/runtime/dist/index.d.ts +0 -11
  482. package/packages/runtime/dist/index.d.ts.map +0 -1
  483. package/packages/runtime/dist/index.js +0 -11
  484. package/packages/runtime/dist/index.js.map +0 -1
  485. package/packages/runtime/dist/local-runtime-agent.d.ts +0 -111
  486. package/packages/runtime/dist/local-runtime-agent.d.ts.map +0 -1
  487. package/packages/runtime/dist/local-runtime-agent.js +0 -356
  488. package/packages/runtime/dist/local-runtime-agent.js.map +0 -1
  489. package/packages/runtime/dist/policy-engine.d.ts +0 -203
  490. package/packages/runtime/dist/policy-engine.d.ts.map +0 -1
  491. package/packages/runtime/dist/policy-engine.js +0 -592
  492. package/packages/runtime/dist/policy-engine.js.map +0 -1
  493. package/packages/runtime/dist/runtime-api.d.ts +0 -137
  494. package/packages/runtime/dist/runtime-api.d.ts.map +0 -1
  495. package/packages/runtime/dist/runtime-api.js +0 -454
  496. package/packages/runtime/dist/runtime-api.js.map +0 -1
  497. package/packages/runtime/dist/workspace-manager.d.ts +0 -162
  498. package/packages/runtime/dist/workspace-manager.d.ts.map +0 -1
  499. package/packages/runtime/dist/workspace-manager.js +0 -451
  500. package/packages/runtime/dist/workspace-manager.js.map +0 -1
  501. package/packages/runtime/tsconfig.json +0 -8
  502. package/packages/scheduler-adapter/tsconfig.json +0 -22
  503. package/packages/scheduler-adapter/tsconfig.tsbuildinfo +0 -1
  504. package/packages/session/tsconfig.json +0 -33
  505. package/packages/session/tsconfig.tsbuildinfo +0 -1
  506. package/packages/session-api/dist/src/api.d.ts +0 -83
  507. package/packages/session-api/dist/src/api.d.ts.map +0 -1
  508. package/packages/session-api/dist/src/api.js +0 -49
  509. package/packages/session-api/dist/src/api.js.map +0 -1
  510. package/packages/session-api/dist/src/index.d.ts +0 -2
  511. package/packages/session-api/dist/src/index.d.ts.map +0 -1
  512. package/packages/session-api/dist/src/index.js +0 -2
  513. package/packages/session-api/dist/src/index.js.map +0 -1
  514. package/packages/session-api/dist/src/types.d.ts +0 -22
  515. package/packages/session-api/dist/src/types.d.ts.map +0 -1
  516. package/packages/session-api/dist/src/types.js +0 -5
  517. package/packages/session-api/dist/src/types.js.map +0 -1
  518. package/packages/session-api/tsconfig.json +0 -10
  519. package/packages/session-export/dist/src/exporter.d.ts +0 -28
  520. package/packages/session-export/dist/src/exporter.d.ts.map +0 -1
  521. package/packages/session-export/dist/src/exporter.js +0 -42
  522. package/packages/session-export/dist/src/exporter.js.map +0 -1
  523. package/packages/session-export/dist/src/index.d.ts +0 -2
  524. package/packages/session-export/dist/src/index.d.ts.map +0 -1
  525. package/packages/session-export/dist/src/index.js +0 -2
  526. package/packages/session-export/dist/src/index.js.map +0 -1
  527. package/packages/session-export/dist/src/types.d.ts +0 -20
  528. package/packages/session-export/dist/src/types.d.ts.map +0 -1
  529. package/packages/session-export/dist/src/types.js +0 -5
  530. package/packages/session-export/dist/src/types.js.map +0 -1
  531. package/packages/session-export/tsconfig.json +0 -10
  532. package/packages/skill-registry/tsconfig.json +0 -22
  533. package/packages/sprint-planner/tsconfig.json +0 -5
  534. package/packages/subscription-engine/dist/src/engine.d.ts +0 -13
  535. package/packages/subscription-engine/dist/src/engine.d.ts.map +0 -1
  536. package/packages/subscription-engine/dist/src/engine.js +0 -40
  537. package/packages/subscription-engine/dist/src/engine.js.map +0 -1
  538. package/packages/subscription-engine/dist/src/index.d.ts +0 -2
  539. package/packages/subscription-engine/dist/src/index.d.ts.map +0 -1
  540. package/packages/subscription-engine/dist/src/index.js +0 -2
  541. package/packages/subscription-engine/dist/src/index.js.map +0 -1
  542. package/packages/subscription-engine/dist/src/subscriptions.d.ts +0 -19
  543. package/packages/subscription-engine/dist/src/subscriptions.d.ts.map +0 -1
  544. package/packages/subscription-engine/dist/src/subscriptions.js +0 -39
  545. package/packages/subscription-engine/dist/src/subscriptions.js.map +0 -1
  546. package/packages/subscription-engine/dist/src/types.d.ts +0 -24
  547. package/packages/subscription-engine/dist/src/types.d.ts.map +0 -1
  548. package/packages/subscription-engine/dist/src/types.js +0 -5
  549. package/packages/subscription-engine/dist/src/types.js.map +0 -1
  550. package/packages/subscription-engine/tsconfig.json +0 -10
  551. package/packages/task-compiler/tsconfig.json +0 -24
  552. package/packages/test-data-generator/tsconfig.json +0 -33
  553. package/packages/test-data-generator/tsconfig.tsbuildinfo +0 -1
  554. package/packages/test-generator/tsconfig.json +0 -6
  555. package/packages/token-optimizer/tsconfig.json +0 -6
  556. package/packages/tui/tsconfig.json +0 -8
  557. package/packages/types/src/runtime-types.d.ts.map +0 -1
  558. package/packages/types/src/runtime-types.js +0 -2
  559. package/packages/types/src/runtime-types.js.map +0 -1
  560. package/packages/types/tsconfig.json +0 -21
  561. package/packages/types/tsconfig.tsbuildinfo +0 -1
  562. package/packages/workflow-events/dist/src/events.d.ts +0 -38
  563. package/packages/workflow-events/dist/src/events.d.ts.map +0 -1
  564. package/packages/workflow-events/dist/src/events.js +0 -55
  565. package/packages/workflow-events/dist/src/events.js.map +0 -1
  566. package/packages/workflow-events/dist/src/index.d.ts +0 -2
  567. package/packages/workflow-events/dist/src/index.d.ts.map +0 -1
  568. package/packages/workflow-events/dist/src/index.js +0 -2
  569. package/packages/workflow-events/dist/src/index.js.map +0 -1
  570. package/packages/workflow-events/dist/src/pipeline.d.ts +0 -21
  571. package/packages/workflow-events/dist/src/pipeline.d.ts.map +0 -1
  572. package/packages/workflow-events/dist/src/pipeline.js +0 -36
  573. package/packages/workflow-events/dist/src/pipeline.js.map +0 -1
  574. package/packages/workflow-events/dist/src/types.d.ts +0 -110
  575. package/packages/workflow-events/dist/src/types.d.ts.map +0 -1
  576. package/packages/workflow-events/dist/src/types.js +0 -5
  577. package/packages/workflow-events/dist/src/types.js.map +0 -1
  578. package/packages/workflow-events/src/types.d.ts.map +0 -1
  579. package/packages/workflow-events/src/types.js +0 -5
  580. package/packages/workflow-events/src/types.js.map +0 -1
  581. package/packages/workflow-events/tsconfig.json +0 -10
  582. package/packages/workspace-scanner/dist/src/detect.d.ts +0 -3
  583. package/packages/workspace-scanner/dist/src/detect.d.ts.map +0 -1
  584. package/packages/workspace-scanner/dist/src/detect.js +0 -60
  585. package/packages/workspace-scanner/dist/src/detect.js.map +0 -1
  586. package/packages/workspace-scanner/dist/src/git.d.ts +0 -7
  587. package/packages/workspace-scanner/dist/src/git.d.ts.map +0 -1
  588. package/packages/workspace-scanner/dist/src/git.js +0 -75
  589. package/packages/workspace-scanner/dist/src/git.js.map +0 -1
  590. package/packages/workspace-scanner/dist/src/index.d.ts +0 -5
  591. package/packages/workspace-scanner/dist/src/index.d.ts.map +0 -1
  592. package/packages/workspace-scanner/dist/src/index.js +0 -4
  593. package/packages/workspace-scanner/dist/src/index.js.map +0 -1
  594. package/packages/workspace-scanner/dist/src/scanner.d.ts +0 -11
  595. package/packages/workspace-scanner/dist/src/scanner.d.ts.map +0 -1
  596. package/packages/workspace-scanner/dist/src/scanner.js +0 -59
  597. package/packages/workspace-scanner/dist/src/scanner.js.map +0 -1
  598. package/packages/workspace-scanner/dist/src/types.d.ts +0 -35
  599. package/packages/workspace-scanner/dist/src/types.d.ts.map +0 -1
  600. package/packages/workspace-scanner/dist/src/types.js +0 -5
  601. package/packages/workspace-scanner/dist/src/types.js.map +0 -1
  602. package/packages/workspace-scanner/test/scanner.test.js +0 -31
  603. package/packages/workspace-scanner/tsconfig.json +0 -10
  604. package/packages/worktree/dist/index.d.ts +0 -7
  605. package/packages/worktree/dist/index.d.ts.map +0 -1
  606. package/packages/worktree/dist/index.js +0 -7
  607. package/packages/worktree/dist/index.js.map +0 -1
  608. package/packages/worktree/dist/worktree.d.ts +0 -88
  609. package/packages/worktree/dist/worktree.d.ts.map +0 -1
  610. package/packages/worktree/dist/worktree.js +0 -242
  611. package/packages/worktree/dist/worktree.js.map +0 -1
  612. package/packages/worktree/tsconfig.json +0 -8
@@ -0,0 +1,249 @@
1
+ /**
2
+ * Write-Review Blackboard
3
+ *
4
+ * File-based coordination between writer and reviewer agents.
5
+ * Location: {project}/.write-review/status.json
6
+ */
7
+
8
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
9
+ import { join } from "path";
10
+ import type { WriteReviewStatus, ReviewPhase, Verdict } from "./types.js";
11
+
12
+ const DEFAULT_DIR = ".write-review";
13
+ const STATUS_FILE = "status.json";
14
+
15
+ export class WriteReviewBlackboard {
16
+ private readonly projectPath: string;
17
+ private readonly dir: string;
18
+ private status: WriteReviewStatus | null = null;
19
+
20
+ constructor(projectPath: string, dir: string = DEFAULT_DIR) {
21
+ this.projectPath = projectPath;
22
+ this.dir = join(projectPath, dir);
23
+ }
24
+
25
+ /**
26
+ * Initialize a new write-review session
27
+ */
28
+ init(): void {
29
+ mkdirSync(this.dir, { recursive: true });
30
+ this.status = {
31
+ projectPath: this.projectPath,
32
+ phase: "idle",
33
+ writerDone: false,
34
+ iteration: 0,
35
+ createdAt: new Date().toISOString(),
36
+ updatedAt: new Date().toISOString(),
37
+ };
38
+ this.save();
39
+ }
40
+
41
+ /**
42
+ * Load status from disk
43
+ */
44
+ load(): WriteReviewStatus | null {
45
+ const path = join(this.dir, STATUS_FILE);
46
+ if (!existsSync(path)) {
47
+ return null;
48
+ }
49
+ try {
50
+ this.status = JSON.parse(readFileSync(path, "utf-8"));
51
+ return this.status;
52
+ } catch {
53
+ return null;
54
+ }
55
+ }
56
+
57
+ /**
58
+ * Save status to disk
59
+ */
60
+ save(): void {
61
+ if (!this.status) return;
62
+ this.status.updatedAt = new Date().toISOString();
63
+ mkdirSync(this.dir, { recursive: true });
64
+ const path = join(this.dir, STATUS_FILE);
65
+ writeFileSync(path, JSON.stringify(this.status, null, 2));
66
+ }
67
+
68
+ /**
69
+ * Get current status
70
+ */
71
+ getStatus(): WriteReviewStatus | null {
72
+ return this.status;
73
+ }
74
+
75
+ /**
76
+ * Start a new write session
77
+ */
78
+ startWriting(): void {
79
+ if (!this.status) this.init();
80
+ this.status!.phase = "writing";
81
+ this.status!.writerDone = false;
82
+ this.status!.iteration++;
83
+ this.save();
84
+ }
85
+
86
+ /**
87
+ * Mark writer as done
88
+ */
89
+ writerDone(message?: string): void {
90
+ if (!this.status) return;
91
+ this.status.writerDone = true;
92
+ this.status.writerMessage = message;
93
+ this.status.phase = "pending_review";
94
+ this.save();
95
+ }
96
+
97
+ /**
98
+ * Start reviewing
99
+ */
100
+ startReview(): void {
101
+ if (!this.status) return;
102
+ this.status.phase = "reviewing";
103
+ this.status.reviewerStarted = new Date().toISOString();
104
+ this.save();
105
+ }
106
+
107
+ /**
108
+ * Record verdict
109
+ */
110
+ setVerdict(verdict: Verdict, message?: string): void {
111
+ if (!this.status) return;
112
+ this.status.verdict = verdict;
113
+ this.status.verdictMessage = message;
114
+
115
+ switch (verdict) {
116
+ case "approved":
117
+ this.status.phase = "approved";
118
+ this.status.approvedAt = new Date().toISOString();
119
+ break;
120
+ case "blocked":
121
+ this.status.phase = "blocked";
122
+ this.status.blockedAt = new Date().toISOString();
123
+ break;
124
+ case "changes_requested":
125
+ this.status.phase = "changes_requested";
126
+ break;
127
+ }
128
+ this.save();
129
+ }
130
+
131
+ /**
132
+ * Record code files written
133
+ */
134
+ setCodeFiles(files: string[]): void {
135
+ if (!this.status) return;
136
+ this.status.codeFiles = files;
137
+ this.save();
138
+ }
139
+
140
+ /**
141
+ * Record requested changes
142
+ */
143
+ setChangesRequested(changes: string[]): void {
144
+ if (!this.status) return;
145
+ this.status.changesRequested = changes;
146
+ this.save();
147
+ }
148
+
149
+ /**
150
+ * Get current phase
151
+ */
152
+ getPhase(): ReviewPhase {
153
+ return this.status?.phase ?? "idle";
154
+ }
155
+
156
+ /**
157
+ * Get iteration number
158
+ */
159
+ getIteration(): number {
160
+ return this.status?.iteration ?? 0;
161
+ }
162
+
163
+ /**
164
+ * Check if build is allowed
165
+ */
166
+ canBuild(): boolean {
167
+ return this.status?.phase === "approved";
168
+ }
169
+
170
+ /**
171
+ * Get blackboard directory path
172
+ */
173
+ getPath(): string {
174
+ return this.dir;
175
+ }
176
+
177
+ /**
178
+ * Reset to idle
179
+ */
180
+ reset(): void {
181
+ if (!this.status) return;
182
+ this.status.phase = "idle";
183
+ this.status.writerDone = false;
184
+ this.status.verdict = undefined;
185
+ this.status.verdictMessage = undefined;
186
+ this.status.reviewerStarted = undefined;
187
+ this.status.approvedAt = undefined;
188
+ this.status.blockedAt = undefined;
189
+ this.status.codeFiles = undefined;
190
+ this.status.changesRequested = undefined;
191
+ this.save();
192
+ }
193
+
194
+ /**
195
+ * Check if a review session exists for this project
196
+ */
197
+ exists(): boolean {
198
+ const path = join(this.dir, STATUS_FILE);
199
+ return existsSync(path);
200
+ }
201
+
202
+ /**
203
+ * Export status as markdown for display
204
+ */
205
+ toMarkdown(): string {
206
+ if (!this.status) return "No active write-review session.";
207
+
208
+ const { phase, iteration, verdict, verdictMessage, codeFiles } =
209
+ this.status;
210
+ const lines = [
211
+ `## Write-Review Status`,
212
+ ``,
213
+ `| Field | Value |`,
214
+ `|-------|-------|`,
215
+ `| Phase | ${phase} |`,
216
+ `| Iteration | ${iteration} |`,
217
+ `| Verdict | ${verdict ?? "pending"} |`,
218
+ ];
219
+
220
+ if (verdictMessage) {
221
+ lines.push(`| Message | ${verdictMessage} |`);
222
+ }
223
+
224
+ if (codeFiles && codeFiles.length > 0) {
225
+ lines.push(``, `### Code Files`);
226
+ for (const file of codeFiles) {
227
+ lines.push(`- ${file}`);
228
+ }
229
+ }
230
+
231
+ return lines.join("\n");
232
+ }
233
+ }
234
+
235
+ /**
236
+ * Create or get blackboard for project
237
+ */
238
+ export function createBlackboard(
239
+ projectPath: string,
240
+ dir?: string,
241
+ ): WriteReviewBlackboard {
242
+ const bb = new WriteReviewBlackboard(projectPath, dir);
243
+ if (!bb.exists()) {
244
+ bb.init();
245
+ } else {
246
+ bb.load();
247
+ }
248
+ return bb;
249
+ }
@@ -0,0 +1,169 @@
1
+ /**
2
+ * No-Build Gate
3
+ *
4
+ * Blocks build commands until review is approved.
5
+ */
6
+
7
+ import type { WriteReviewBlackboard } from "./blackboard.js";
8
+ import type { WriteReviewStatus } from "./types.js";
9
+
10
+ /**
11
+ * Commands that trigger build gate
12
+ */
13
+ const BUILD_COMMANDS = [
14
+ "bench build",
15
+ "npm run build",
16
+ "yarn build",
17
+ "pnpm build",
18
+ "bun run build",
19
+ "npm run dev",
20
+ "yarn dev",
21
+ "pnpm dev",
22
+ "./build",
23
+ "make build",
24
+ "gradle build",
25
+ "mvn package",
26
+ "dotnet build",
27
+ "cargo build",
28
+ "go build",
29
+ "python manage.py migrate",
30
+ "bench migrate",
31
+ "bench --site",
32
+ ];
33
+
34
+ /**
35
+ * Check if a command is a build command
36
+ */
37
+ export function isBuildCommand(command: string): boolean {
38
+ const lower = command.toLowerCase().trim();
39
+ return BUILD_COMMANDS.some((cmd) => lower.includes(cmd.toLowerCase()));
40
+ }
41
+
42
+ /**
43
+ * Gate result
44
+ */
45
+ export interface GateResult {
46
+ allowed: boolean;
47
+ reason?: string;
48
+ currentPhase?: string;
49
+ message?: string;
50
+ }
51
+
52
+ /**
53
+ * Check if build is allowed
54
+ */
55
+ export function checkBuildGate(
56
+ command: string,
57
+ blackboard: WriteReviewBlackboard,
58
+ ): GateResult {
59
+ if (!isBuildCommand(command)) {
60
+ return { allowed: true };
61
+ }
62
+
63
+ const status = blackboard.load();
64
+ if (!status) {
65
+ // No review session - allow build
66
+ return { allowed: true };
67
+ }
68
+
69
+ if (status.phase === "approved") {
70
+ return {
71
+ allowed: true,
72
+ currentPhase: status.phase,
73
+ message: "Build allowed - review approved.",
74
+ };
75
+ }
76
+
77
+ return {
78
+ allowed: false,
79
+ reason: "REVIEW_NOT_APPROVED",
80
+ currentPhase: status.phase,
81
+ message: `Build blocked. Current review phase: ${status.phase}. Wait for "APPROVED" verdict.`,
82
+ };
83
+ }
84
+
85
+ /**
86
+ * Format gate rejection message
87
+ */
88
+ export function formatGateRejection(result: GateResult): string {
89
+ if (result.allowed) {
90
+ return "";
91
+ }
92
+
93
+ const lines = [
94
+ "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━",
95
+ "⚠️ BUILD BLOCKED",
96
+ "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━",
97
+ "",
98
+ `Current Phase: ${result.currentPhase}`,
99
+ "",
100
+ "The code is under review. Build is only allowed after APPROVED verdict.",
101
+ "",
102
+ "To check status:",
103
+ ` cat {project}/.write-review/status.json`,
104
+ "",
105
+ "To wait for approval, do nothing. The reviewer will post the verdict.",
106
+ "",
107
+ ];
108
+
109
+ if (result.currentPhase === "changes_requested") {
110
+ lines.push(
111
+ "Reviewer requested changes. Writer agent should update the code.",
112
+ );
113
+ } else if (result.currentPhase === "reviewing") {
114
+ lines.push("Review is in progress. Please wait...");
115
+ } else if (result.currentPhase === "pending_review") {
116
+ lines.push("Review not started yet. Waiting for reviewer...");
117
+ }
118
+
119
+ return lines.join("\n");
120
+ }
121
+
122
+ /**
123
+ * Get phase emoji
124
+ */
125
+ export function getPhaseEmoji(phase: string): string {
126
+ const emojis: Record<string, string> = {
127
+ idle: "💤",
128
+ writing: "✍️",
129
+ pending_review: "⏳",
130
+ reviewing: "🔍",
131
+ approved: "✅",
132
+ blocked: "🚫",
133
+ changes_requested: "🔄",
134
+ };
135
+ return emojis[phase] ?? "❓";
136
+ }
137
+
138
+ /**
139
+ * Format status for display
140
+ */
141
+ export function formatStatusDisplay(status: WriteReviewStatus): string {
142
+ const emoji = getPhaseEmoji(status.phase);
143
+ const lines = [
144
+ `${emoji} Write-Review Status`,
145
+ "",
146
+ `Phase: ${status.phase}`,
147
+ `Iteration: ${status.iteration}`,
148
+ ];
149
+
150
+ if (status.verdict) {
151
+ lines.push(`Verdict: ${status.verdict}`);
152
+ }
153
+
154
+ if (status.verdictMessage) {
155
+ lines.push("");
156
+ lines.push("Message:");
157
+ lines.push(status.verdictMessage);
158
+ }
159
+
160
+ if (status.codeFiles && status.codeFiles.length > 0) {
161
+ lines.push("");
162
+ lines.push("Code Files:");
163
+ for (const file of status.codeFiles) {
164
+ lines.push(` - ${file}`);
165
+ }
166
+ }
167
+
168
+ return lines.join("\n");
169
+ }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * write-review - Two-agent code writing with review loop
3
+ *
4
+ * Integrates with pi-harness-runtime via:
5
+ * - Smart trigger detection (prompt files in wiki/)
6
+ * - System prompt injection for writer agent
7
+ * - Subagent integration for reviewer agent
8
+ *
9
+ * Directory structure: {project}/.write-review/
10
+ */
11
+
12
+ import { rmSync, readdirSync, statSync, existsSync } from "node:fs";
13
+ import { join, resolve } from "node:path";
14
+
15
+ const MAX_AGE_DAYS = 3;
16
+
17
+ /**
18
+ * Auto-cleanup old review history files older than MAX_AGE_DAYS
19
+ */
20
+ export function cleanupOldReviews(projectPath: string): number {
21
+ // Resolve path to prevent traversal attacks
22
+ const basePath = resolve(projectPath);
23
+ const reviewDir = join(basePath, ".write-review");
24
+
25
+ // Ensure reviewDir is within basePath (traversal guard)
26
+ if (!reviewDir.startsWith(basePath + '/')) {
27
+ return 0; // Invalid path, skip
28
+ }
29
+
30
+ if (!existsSync(reviewDir)) {
31
+ return 0; // Directory doesn't exist
32
+ }
33
+
34
+ let deleted = 0;
35
+ const files = readdirSync(reviewDir);
36
+ const cutoff = Date.now() - MAX_AGE_DAYS * 24 * 60 * 60 * 1000;
37
+
38
+ for (const file of files) {
39
+ if (file === "status.json") continue; // Keep status file
40
+ // Sanitize filename to prevent path traversal
41
+ const sanitized = file.replace(/[^a-zA-Z0-9_.-]/g, '_');
42
+ if (sanitized !== file) continue; // Skip suspicious filenames
43
+
44
+ const filePath = join(reviewDir, sanitized);
45
+ try {
46
+ const stats = statSync(filePath);
47
+ if (stats.mtimeMs < cutoff) {
48
+ rmSync(filePath, { force: true });
49
+ deleted++;
50
+ }
51
+ } catch {
52
+ // Ignore files that can't be read
53
+ }
54
+ }
55
+
56
+ return deleted;
57
+ }
58
+
59
+ // Re-export all public APIs
60
+ export * from "./types.js";
61
+ export * from "./blackboard.js";
62
+ export * from "./trigger.js";
63
+ export * from "./injection.js";
64
+ export * from "./gate.js";
65
+ export * from "./review.js";
@@ -0,0 +1,190 @@
1
+ /**
2
+ * System Prompt Injection
3
+ *
4
+ * Adds write-review hints to the agent's system prompt.
5
+ */
6
+
7
+ import { existsSync } from "node:fs";
8
+ import { dirname, join } from "node:path";
9
+
10
+ /**
11
+ * Find the project root (directory containing .git)
12
+ */
13
+ function findProjectRoot(startPath: string): string {
14
+ let dir = startPath;
15
+ // Limit traversal to prevent infinite loops
16
+ for (let i = 0; i < 20; i++) {
17
+ if (existsSync(join(dir, ".git"))) {
18
+ return dir;
19
+ }
20
+ const parent = dirname(dir);
21
+ if (parent === dir) break; // Reached filesystem root
22
+ dir = parent;
23
+ }
24
+ return startPath; // Fallback to start path
25
+ }
26
+
27
+ /**
28
+ * Write-review hint for system prompt
29
+ */
30
+ export const WRITE_REVIEW_HINT = `
31
+
32
+ ## Write-Review Loop
33
+
34
+ When reading a prompt from {project}/wiki/*:
35
+
36
+ 1. You are the **WRITER** agent (Minimax). Read the wiki prompt and write code.
37
+ 2. After writing code, write "## WRITER_DONE" to signal completion.
38
+ 3. Do NOT build or commit until you receive "APPROVED" verdict.
39
+ 4. If you receive "CHANGES_REQUESTED", update the code accordingly.
40
+ 5. Acknowledge each verdict in your response.
41
+
42
+ ### Blackboard Path
43
+ {p}/.write-review/status.json
44
+
45
+ ### Verdict Types
46
+ - **APPROVED**: Code is ready. You may build/commit.
47
+ - **CHANGES_REQUESTED**: Reviewer found issues. Update code.
48
+ - **BLOCKED**: Critical issues. Human intervention needed.
49
+ `;
50
+
51
+ /**
52
+ * Helper agent hint (for worker agent)
53
+ */
54
+ export const HELPER_HINT = `
55
+
56
+ ## Helper Agent Task
57
+
58
+ The writer agent is busy or needs assistance. Your task:
59
+
60
+ 1. Note any pending tasks to the Todos list using the todo tool.
61
+ 2. Review the changes requested and prepare notes for the writer.
62
+ 3. Do NOT write code directly - that's the writer's job.
63
+ 4. Write a summary of pending tasks to the blackboard.
64
+ `;
65
+
66
+ /**
67
+ * Review reminder hint
68
+ */
69
+ export const REVIEW_REMINDER_HINT = `
70
+
71
+ ## Review Reminder
72
+
73
+ Before committing or building, ALWAYS check the write-review status:
74
+
75
+ \`\`\`bash
76
+ cat {project}/.write-review/status.json
77
+ \`\`\`
78
+
79
+ Only build/commit if the status shows "approved" or "phase": "approved".
80
+ `;
81
+
82
+ /**
83
+ * Format hint with project path
84
+ */
85
+ export function formatWriteReviewHint(projectPath: string): string {
86
+ return WRITE_REVIEW_HINT.replace("{project}", projectPath).replace(
87
+ "{p}",
88
+ projectPath,
89
+ );
90
+ }
91
+
92
+ /**
93
+ * Format review reminder with project path
94
+ */
95
+ export function formatReviewReminder(projectPath: string): string {
96
+ return REVIEW_REMINDER_HINT.replace("{project}", projectPath);
97
+ }
98
+
99
+ /**
100
+ * Get all hints to inject
101
+ */
102
+ export function getWriteReviewHints(projectPath: string): {
103
+ writeHint: string;
104
+ reminderHint: string;
105
+ } {
106
+ return {
107
+ writeHint: formatWriteReviewHint(projectPath),
108
+ reminderHint: formatReviewReminder(projectPath),
109
+ };
110
+ }
111
+
112
+ /**
113
+ * Register write-review extension with pi
114
+ */
115
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
116
+ import { createBlackboard } from "./blackboard.js";
117
+
118
+ export function injectWriterInstructions(
119
+ pi: ExtensionAPI,
120
+ config?: { debug?: boolean },
121
+ ): void {
122
+ let currentProject: string | null = null;
123
+ let blackboard: ReturnType<typeof createBlackboard> | null = null;
124
+ let hintsInjected = false;
125
+
126
+ // System prompt injection
127
+ pi.on("before_agent_start", async (event) => {
128
+ const cwd = findProjectRoot(process.cwd?.() ?? "/");
129
+ if (cwd !== currentProject) {
130
+ currentProject = cwd;
131
+ blackboard = createBlackboard(cwd);
132
+ hintsInjected = false;
133
+ }
134
+
135
+ if (!hintsInjected && blackboard) {
136
+ const status = blackboard.load();
137
+ if (status && status.phase !== "idle") {
138
+ event.systemPrompt += formatWriteReviewHint(cwd);
139
+ if (status.phase !== "approved") {
140
+ event.systemPrompt += formatReviewReminder(cwd);
141
+ }
142
+ hintsInjected = true;
143
+ if (config?.debug) {
144
+ console.log(
145
+ `[write-review] Hints injected for ${cwd}, phase: ${status.phase}`,
146
+ );
147
+ }
148
+ }
149
+ }
150
+ });
151
+
152
+ // Build gate
153
+ pi.on("tool_execution_end", async (event) => {
154
+ const toolName = (event as { tool?: { name?: string } }).tool?.name ?? "";
155
+ if (toolName !== "bash") return;
156
+
157
+ const result = event as { result?: { content?: string } };
158
+ const content = result.result?.content ?? "";
159
+
160
+ // Check for build commands
161
+ const buildCommands = [
162
+ "bench build",
163
+ "npm run build",
164
+ "yarn build",
165
+ "pnpm build",
166
+ "bun run build",
167
+ "make build",
168
+ "gradle build",
169
+ "dotnet build",
170
+ "cargo build",
171
+ ];
172
+ const isBuild = buildCommands.some((cmd) => content.includes(cmd));
173
+
174
+ if (isBuild && blackboard) {
175
+ const status = blackboard.load();
176
+ if (status && status.phase !== "approved") {
177
+ result.result!.content =
178
+ content +
179
+ "\n\n" +
180
+ "⚠️ BUILD BLOCKED - Review not approved yet.\n" +
181
+ `Current phase: ${status.phase}\n` +
182
+ "Wait for APPROVED verdict before building.";
183
+ }
184
+ }
185
+ });
186
+
187
+ if (config?.debug) {
188
+ console.log("[write-review] Extension registered");
189
+ }
190
+ }