pi-harness-runtime 0.10.13 → 0.10.15
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.
- package/harness/notification-events.ts +2 -2
- package/package.json +4 -7
- package/packages/auth/src/minimax-browser-auth.js +889 -0
- package/packages/capability-registry/src/types.js +10 -0
- package/packages/checkpoint/src/checkpoint-manager.js +29 -0
- package/packages/clipboard/src/copy-sync.js +169 -0
- package/packages/clipboard/src/gist-relay.js +185 -0
- package/packages/clipboard/src/github-login.js +68 -0
- package/packages/config-capture/src/index.js +268 -0
- package/packages/cookie-sanitizer/src/atomic-write.js +66 -0
- package/packages/cookie-sanitizer/src/detect-format.js +87 -0
- package/packages/cookie-sanitizer/src/index.js +38 -0
- package/packages/cookie-sanitizer/src/infer-provider.js +95 -0
- package/packages/cookie-sanitizer/src/normalize.js +74 -0
- package/packages/cookie-sanitizer/src/parse-json.js +107 -0
- package/packages/cookie-sanitizer/src/parse-netscape.js +98 -0
- package/packages/cookie-sanitizer/src/sync.js +268 -0
- package/packages/cookie-sanitizer/src/types.js +12 -0
- package/packages/cookie-sanitizer/src/watcher.js +147 -0
- package/packages/evaluation-engine/src/engine.js +343 -0
- package/packages/evaluation-engine/src/index.js +7 -0
- package/packages/evaluation-engine/src/types.js +14 -0
- package/packages/event-store/src/types.js +5 -0
- package/packages/experience-replay/src/index.js +6 -0
- package/packages/experience-replay/src/replay.js +228 -0
- package/packages/experience-replay/src/types.js +6 -0
- package/packages/learning-engine/src/engine.js +294 -0
- package/packages/learning-engine/src/index.js +7 -0
- package/packages/learning-engine/src/types.js +63 -0
- package/packages/memory-engine/src/engine.js +507 -0
- package/packages/memory-engine/src/index.js +7 -0
- package/packages/memory-engine/src/types.js +39 -0
- package/packages/model-registry/src/types.js +5 -0
- package/packages/performance-optimizer/src/index.js +6 -0
- package/packages/performance-optimizer/src/optimizer.js +304 -0
- package/packages/performance-optimizer/src/types.js +6 -0
- package/packages/projection-engine/src/types.js +5 -0
- package/packages/providers/src/provider-id.js +112 -0
- package/packages/quota-manager/src/quota-manager.js +259 -0
- package/packages/quota-manager/src/tui-usage-monitor.js +267 -0
- package/packages/todo-bd-sync/src/detector.js +131 -0
- package/packages/todo-bd-sync/src/extension.js +104 -0
- package/packages/todo-bd-sync/src/sync.js +289 -0
- package/packages/todo-bd-sync/src/task-analyzer.js +239 -0
- package/packages/todo-bd-sync/src/types.js +66 -0
- package/packages/token-estimation/src/index.js +114 -0
- package/packages/types/src/agent-worker-types.js +41 -0
- package/packages/types/src/ai-providers.js +66 -0
- package/packages/types/src/runtime-types.js +3 -0
- package/packages/workflow-events/src/types.js +5 -0
- package/packages/write-review/src/blackboard.js +228 -0
- package/packages/write-review/src/gate.js +137 -0
- package/packages/write-review/src/index.js +17 -0
- package/packages/write-review/src/injection.js +141 -0
- package/packages/write-review/src/review.js +153 -0
- package/packages/write-review/src/trigger.js +106 -0
- package/packages/write-review/src/types.js +25 -0
- package/IMPLEMENTATION/RFC-0010/ACCEPTANCE_CRITERIA.md +0 -7
- package/IMPLEMENTATION/RFC-0010/AI_BRIEF.md +0 -20
- package/IMPLEMENTATION/RFC-0010/FILES.md +0 -11
- package/IMPLEMENTATION/RFC-0010/TASKS.md +0 -10
- package/IMPLEMENTATION/RFC-0010/TESTS.md +0 -6
- package/IMPLEMENTATION/RFC-0011/ACCEPTANCE_CRITERIA.md +0 -7
- package/IMPLEMENTATION/RFC-0011/AI_BRIEF.md +0 -19
- package/IMPLEMENTATION/RFC-0011/FILES.md +0 -11
- package/IMPLEMENTATION/RFC-0011/TASKS.md +0 -10
- package/IMPLEMENTATION/RFC-0011/TESTS.md +0 -6
- package/IMPLEMENTATION/RFC-0012/ACCEPTANCE_CRITERIA.md +0 -7
- package/IMPLEMENTATION/RFC-0012/AI_BRIEF.md +0 -18
- package/IMPLEMENTATION/RFC-0012/FILES.md +0 -11
- package/IMPLEMENTATION/RFC-0012/TASKS.md +0 -10
- package/IMPLEMENTATION/RFC-0012/TESTS.md +0 -6
- package/IMPLEMENTATION/RFC-0013/ACCEPTANCE_CRITERIA.md +0 -7
- package/IMPLEMENTATION/RFC-0013/AI_BRIEF.md +0 -19
- package/IMPLEMENTATION/RFC-0013/FILES.md +0 -11
- package/IMPLEMENTATION/RFC-0013/TASKS.md +0 -10
- package/IMPLEMENTATION/RFC-0013/TESTS.md +0 -6
- package/IMPLEMENTATION/RFC-0014/ACCEPTANCE_CRITERIA.md +0 -7
- package/IMPLEMENTATION/RFC-0014/AI_BRIEF.md +0 -20
- package/IMPLEMENTATION/RFC-0014/FILES.md +0 -11
- package/IMPLEMENTATION/RFC-0014/TASKS.md +0 -10
- package/IMPLEMENTATION/RFC-0014/TESTS.md +0 -6
- package/IMPLEMENTATION/RFC-0015/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0015/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0015/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0015/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0015/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0016/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0016/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0016/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0016/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0016/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0017/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0017/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0017/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0017/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0017/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0018/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0018/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0018/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0018/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0018/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0019/ACCEPTANCE_CRITERIA.md +0 -7
- package/IMPLEMENTATION/RFC-0019/AI_BRIEF.md +0 -18
- package/IMPLEMENTATION/RFC-0019/TASKS.md +0 -10
- package/IMPLEMENTATION/RFC-0020/ACCEPTANCE_CRITERIA.md +0 -7
- package/IMPLEMENTATION/RFC-0020/AI_BRIEF.md +0 -18
- package/IMPLEMENTATION/RFC-0020/TASKS.md +0 -10
- package/IMPLEMENTATION/RFC-0021/ACCEPTANCE_CRITERIA.md +0 -7
- package/IMPLEMENTATION/RFC-0021/AI_BRIEF.md +0 -18
- package/IMPLEMENTATION/RFC-0021/TASKS.md +0 -10
- package/IMPLEMENTATION/RFC-0022/ACCEPTANCE_CRITERIA.md +0 -7
- package/IMPLEMENTATION/RFC-0022/AI_BRIEF.md +0 -18
- package/IMPLEMENTATION/RFC-0022/TASKS.md +0 -10
- package/IMPLEMENTATION/RFC-0023/ACCEPTANCE_CRITERIA.md +0 -7
- package/IMPLEMENTATION/RFC-0023/AI_BRIEF.md +0 -18
- package/IMPLEMENTATION/RFC-0023/TASKS.md +0 -10
- package/IMPLEMENTATION/RFC-0024/AI_BRIEF.md +0 -1
- package/IMPLEMENTATION/RFC-0024/TASKS.md +0 -3
- package/IMPLEMENTATION/RFC-0025/AI_BRIEF.md +0 -1
- package/IMPLEMENTATION/RFC-0025/TASKS.md +0 -3
- package/IMPLEMENTATION/RFC-0026/AI_BRIEF.md +0 -1
- package/IMPLEMENTATION/RFC-0026/TASKS.md +0 -3
- package/IMPLEMENTATION/RFC-0027/AI_BRIEF.md +0 -1
- package/IMPLEMENTATION/RFC-0027/TASKS.md +0 -3
- package/IMPLEMENTATION/RFC-0028/AI_BRIEF.md +0 -1
- package/IMPLEMENTATION/RFC-0028/TASKS.md +0 -3
- package/IMPLEMENTATION/RFC-0029/AI_BRIEF.md +0 -1
- package/IMPLEMENTATION/RFC-0029/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0030/AI_BRIEF.md +0 -1
- package/IMPLEMENTATION/RFC-0030/TASKS.md +0 -3
- package/IMPLEMENTATION/RFC-0031/AI_BRIEF.md +0 -45
- package/IMPLEMENTATION/RFC-0031/TASKS.md +0 -48
- package/IMPLEMENTATION/RFC-0032/AI_BRIEF.md +0 -45
- package/IMPLEMENTATION/RFC-0032/TASKS.md +0 -44
- package/IMPLEMENTATION/RFC-0033/AI_BRIEF.md +0 -46
- package/IMPLEMENTATION/RFC-0033/TASKS.md +0 -49
- package/IMPLEMENTATION/RFC-0034/AI_BRIEF.md +0 -54
- package/IMPLEMENTATION/RFC-0034/TASKS.md +0 -57
- package/IMPLEMENTATION/RFC-0035/AI_BRIEF.md +0 -55
- package/IMPLEMENTATION/RFC-0035/TASKS.md +0 -75
- package/IMPLEMENTATION/RFC-0036/AI_BRIEF.md +0 -62
- package/IMPLEMENTATION/RFC-0036/TASKS.md +0 -60
- package/IMPLEMENTATION/RFC-0037/AI_BRIEF.md +0 -59
- package/IMPLEMENTATION/RFC-0037/TASKS.md +0 -63
- package/IMPLEMENTATION/RFC-0038/AI_BRIEF.md +0 -67
- package/IMPLEMENTATION/RFC-0038/TASKS.md +0 -65
- package/IMPLEMENTATION/RFC-0039/AI_BRIEF.md +0 -68
- package/IMPLEMENTATION/RFC-0039/TASKS.md +0 -74
- package/IMPLEMENTATION/RFC-0040/AI_BRIEF.md +0 -79
- package/IMPLEMENTATION/RFC-0040/TASKS.md +0 -77
- package/IMPLEMENTATION/RFC-0041/ACCEPTANCE_CRITERIA.md +0 -8
- package/IMPLEMENTATION/RFC-0041/AI_BRIEF.md +0 -26
- package/IMPLEMENTATION/RFC-0041/FILES.md +0 -12
- package/IMPLEMENTATION/RFC-0041/TASKS.md +0 -12
- package/IMPLEMENTATION/RFC-0041/TESTS.md +0 -12
- package/IMPLEMENTATION/RFC-0042/ACCEPTANCE_CRITERIA.md +0 -7
- package/IMPLEMENTATION/RFC-0042/AI_BRIEF.md +0 -5
- package/IMPLEMENTATION/RFC-0042/FILES.md +0 -14
- package/IMPLEMENTATION/RFC-0042/TASKS.md +0 -12
- package/IMPLEMENTATION/RFC-0042/TESTS.md +0 -11
- package/IMPLEMENTATION/RFC-0043/ACCEPTANCE_CRITERIA.md +0 -7
- package/IMPLEMENTATION/RFC-0043/AI_BRIEF.md +0 -5
- package/IMPLEMENTATION/RFC-0043/FILES.md +0 -14
- package/IMPLEMENTATION/RFC-0043/TASKS.md +0 -12
- package/IMPLEMENTATION/RFC-0043/TESTS.md +0 -10
- package/IMPLEMENTATION/RFC-0044/ACCEPTANCE_CRITERIA.md +0 -7
- package/IMPLEMENTATION/RFC-0044/AI_BRIEF.md +0 -5
- package/IMPLEMENTATION/RFC-0044/FILES.md +0 -13
- package/IMPLEMENTATION/RFC-0044/TASKS.md +0 -12
- package/IMPLEMENTATION/RFC-0044/TESTS.md +0 -10
- package/IMPLEMENTATION/RFC-0045/ACCEPTANCE_CRITERIA.md +0 -30
- package/IMPLEMENTATION/RFC-0045/AI_BRIEF.md +0 -53
- package/IMPLEMENTATION/RFC-0045/FILES.md +0 -13
- package/IMPLEMENTATION/RFC-0045/TASKS.md +0 -31
- package/IMPLEMENTATION/RFC-0045/TESTS.md +0 -62
- package/IMPLEMENTATION/RFC-0046/ACCEPTANCE_CRITERIA.md +0 -1
- package/IMPLEMENTATION/RFC-0046/AI_BRIEF.md +0 -1
- package/IMPLEMENTATION/RFC-0046/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0046/TASKS.md +0 -3
- package/IMPLEMENTATION/RFC-0046/TESTS.md +0 -1
- package/IMPLEMENTATION/RFC-0047/ACCEPTANCE_CRITERIA.md +0 -1
- package/IMPLEMENTATION/RFC-0047/AI_BRIEF.md +0 -1
- package/IMPLEMENTATION/RFC-0047/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0047/TASKS.md +0 -3
- package/IMPLEMENTATION/RFC-0047/TESTS.md +0 -1
- package/IMPLEMENTATION/RFC-0048/ACCEPTANCE_CRITERIA.md +0 -1
- package/IMPLEMENTATION/RFC-0048/AI_BRIEF.md +0 -1
- package/IMPLEMENTATION/RFC-0048/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0048/TASKS.md +0 -3
- package/IMPLEMENTATION/RFC-0048/TESTS.md +0 -1
- package/IMPLEMENTATION/RFC-0049/ACCEPTANCE_CRITERIA.md +0 -1
- package/IMPLEMENTATION/RFC-0049/AI_BRIEF.md +0 -1
- package/IMPLEMENTATION/RFC-0049/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0049/TASKS.md +0 -3
- package/IMPLEMENTATION/RFC-0049/TESTS.md +0 -1
- package/IMPLEMENTATION/RFC-0050/ACCEPTANCE_CRITERIA.md +0 -1
- package/IMPLEMENTATION/RFC-0050/AI_BRIEF.md +0 -1
- package/IMPLEMENTATION/RFC-0050/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0050/TASKS.md +0 -3
- package/IMPLEMENTATION/RFC-0050/TESTS.md +0 -1
- package/IMPLEMENTATION/RFC-0051/ACCEPTANCE_CRITERIA.md +0 -6
- package/IMPLEMENTATION/RFC-0051/AI_BRIEF.md +0 -20
- package/IMPLEMENTATION/RFC-0051/FILES.md +0 -8
- package/IMPLEMENTATION/RFC-0051/TASKS.md +0 -3
- package/IMPLEMENTATION/RFC-0051/TESTS.md +0 -4
- package/IMPLEMENTATION/RFC-0052/ACCEPTANCE_CRITERIA.md +0 -7
- package/IMPLEMENTATION/RFC-0052/AI_BRIEF.md +0 -19
- package/IMPLEMENTATION/RFC-0052/FILES.md +0 -8
- package/IMPLEMENTATION/RFC-0052/TASKS.md +0 -3
- package/IMPLEMENTATION/RFC-0052/TESTS.md +0 -1
- package/IMPLEMENTATION/RFC-0053/ACCEPTANCE_CRITERIA.md +0 -8
- package/IMPLEMENTATION/RFC-0053/AI_BRIEF.md +0 -20
- package/IMPLEMENTATION/RFC-0053/FILES.md +0 -9
- package/IMPLEMENTATION/RFC-0053/TASKS.md +0 -3
- package/IMPLEMENTATION/RFC-0053/TESTS.md +0 -1
- package/IMPLEMENTATION/RFC-0054/ACCEPTANCE_CRITERIA.md +0 -8
- package/IMPLEMENTATION/RFC-0054/AI_BRIEF.md +0 -19
- package/IMPLEMENTATION/RFC-0054/FILES.md +0 -8
- package/IMPLEMENTATION/RFC-0054/TASKS.md +0 -3
- package/IMPLEMENTATION/RFC-0054/TESTS.md +0 -1
- package/IMPLEMENTATION/RFC-0055/ACCEPTANCE_CRITERIA.md +0 -8
- package/IMPLEMENTATION/RFC-0055/AI_BRIEF.md +0 -17
- package/IMPLEMENTATION/RFC-0055/FILES.md +0 -9
- package/IMPLEMENTATION/RFC-0055/TASKS.md +0 -3
- package/IMPLEMENTATION/RFC-0055/TESTS.md +0 -1
- package/IMPLEMENTATION/RFC-0056/ACCEPTANCE_CRITERIA.md +0 -6
- package/IMPLEMENTATION/RFC-0056/AI_BRIEF.md +0 -18
- package/IMPLEMENTATION/RFC-0056/FILES.md +0 -9
- package/IMPLEMENTATION/RFC-0056/TASKS.md +0 -9
- package/IMPLEMENTATION/RFC-0056/TESTS.md +0 -7
- package/IMPLEMENTATION/RFC-0057/ACCEPTANCE_CRITERIA.md +0 -5
- package/IMPLEMENTATION/RFC-0057/AI_BRIEF.md +0 -5
- package/IMPLEMENTATION/RFC-0057/FILES.md +0 -11
- package/IMPLEMENTATION/RFC-0057/TASKS.md +0 -9
- package/IMPLEMENTATION/RFC-0057/TESTS.md +0 -7
- package/IMPLEMENTATION/RFC-0058/ACCEPTANCE_CRITERIA.md +0 -6
- package/IMPLEMENTATION/RFC-0058/AI_BRIEF.md +0 -5
- package/IMPLEMENTATION/RFC-0058/FILES.md +0 -11
- package/IMPLEMENTATION/RFC-0058/TASKS.md +0 -9
- package/IMPLEMENTATION/RFC-0058/TESTS.md +0 -7
- package/IMPLEMENTATION/RFC-0059/ACCEPTANCE_CRITERIA.md +0 -6
- package/IMPLEMENTATION/RFC-0059/AI_BRIEF.md +0 -5
- package/IMPLEMENTATION/RFC-0059/FILES.md +0 -11
- package/IMPLEMENTATION/RFC-0059/TASKS.md +0 -9
- package/IMPLEMENTATION/RFC-0059/TESTS.md +0 -7
- package/IMPLEMENTATION/RFC-0060/ACCEPTANCE_CRITERIA.md +0 -7
- package/IMPLEMENTATION/RFC-0060/AI_BRIEF.md +0 -5
- package/IMPLEMENTATION/RFC-0060/FILES.md +0 -14
- package/IMPLEMENTATION/RFC-0060/TASKS.md +0 -12
- package/IMPLEMENTATION/RFC-0060/TESTS.md +0 -10
- package/IMPLEMENTATION/RFC-0061/ACCEPTANCE_CRITERIA.md +0 -1
- package/IMPLEMENTATION/RFC-0061/AI_BRIEF.md +0 -1
- package/IMPLEMENTATION/RFC-0061/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0061/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0061/TESTS.md +0 -2
- package/IMPLEMENTATION/RFC-0062/ACCEPTANCE_CRITERIA.md +0 -1
- package/IMPLEMENTATION/RFC-0062/AI_BRIEF.md +0 -1
- package/IMPLEMENTATION/RFC-0062/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0062/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0062/TESTS.md +0 -2
- package/IMPLEMENTATION/RFC-0063/ACCEPTANCE_CRITERIA.md +0 -1
- package/IMPLEMENTATION/RFC-0063/AI_BRIEF.md +0 -1
- package/IMPLEMENTATION/RFC-0063/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0063/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0063/TESTS.md +0 -2
- package/IMPLEMENTATION/RFC-0064/ACCEPTANCE_CRITERIA.md +0 -1
- package/IMPLEMENTATION/RFC-0064/AI_BRIEF.md +0 -1
- package/IMPLEMENTATION/RFC-0064/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0064/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0064/TESTS.md +0 -2
- package/IMPLEMENTATION/RFC-0065/ACCEPTANCE_CRITERIA.md +0 -1
- package/IMPLEMENTATION/RFC-0065/AI_BRIEF.md +0 -1
- package/IMPLEMENTATION/RFC-0065/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0065/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0065/TESTS.md +0 -2
- package/IMPLEMENTATION/RFC-0066/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0066/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0066/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0066/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0066/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0067/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0067/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0067/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0067/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0067/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0068/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0068/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0068/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0068/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0068/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0069/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0069/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0069/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0069/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0069/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0070/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0070/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0070/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0070/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0070/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0071/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0071/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0071/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0071/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0071/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0072/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0072/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0072/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0072/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0072/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0073/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0073/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0073/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0073/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0073/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0074/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0074/AI_BRIEF.md +0 -17
- package/IMPLEMENTATION/RFC-0074/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0074/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0074/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0075/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0075/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0075/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0075/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0075/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0076/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0076/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0076/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0076/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0076/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0077/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0077/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0077/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0077/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0077/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0078/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0078/AI_BRIEF.md +0 -17
- package/IMPLEMENTATION/RFC-0078/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0078/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0078/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0079/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0079/AI_BRIEF.md +0 -7
- package/IMPLEMENTATION/RFC-0079/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0079/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0079/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0080/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0080/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0080/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0080/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0080/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0081/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0081/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0081/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0081/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0081/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0082/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0082/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0082/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0082/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0082/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0083/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0083/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0083/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0083/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0083/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0084/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0084/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0084/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0084/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0084/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0085/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0085/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0085/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0085/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0085/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0086/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0086/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0086/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0086/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0086/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0087/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0087/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0087/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0087/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0087/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0088/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0088/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0088/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0088/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0088/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0089/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0089/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0089/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0089/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0089/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0090/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0090/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0090/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0090/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0090/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0091/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0091/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0091/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0091/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0091/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0092/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0092/AI_BRIEF.md +0 -20
- package/IMPLEMENTATION/RFC-0092/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0092/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0092/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0093/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0093/AI_BRIEF.md +0 -22
- package/IMPLEMENTATION/RFC-0093/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0093/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0093/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0094/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0094/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0094/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0094/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0094/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0095/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0095/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0095/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0095/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0095/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0096/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0096/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0096/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0096/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0096/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0097/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0097/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0097/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0097/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0097/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0098/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0098/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0098/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0098/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0098/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0099/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0099/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0099/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0099/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0099/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0100/ACCEPTANCE_CRITERIA.md +0 -2
- package/IMPLEMENTATION/RFC-0100/AI_BRIEF.md +0 -2
- package/IMPLEMENTATION/RFC-0100/FILES.md +0 -2
- package/IMPLEMENTATION/RFC-0100/TASKS.md +0 -4
- package/IMPLEMENTATION/RFC-0100/TESTS.md +0 -3
- package/IMPLEMENTATION/RFC-0101/ACCEPTANCE_CRITERIA.md +0 -74
- package/IMPLEMENTATION/RFC-0101/AI_BRIEF.md +0 -80
- package/IMPLEMENTATION/RFC-0101/FILES.md +0 -82
- package/IMPLEMENTATION/RFC-0101/TASKS.md +0 -92
- package/IMPLEMENTATION/RFC-0101/TESTS.md +0 -127
- package/IMPLEMENTATION/RFC-0102/ACCEPTANCE_CRITERIA.md +0 -33
- package/IMPLEMENTATION/RFC-0102/AI_BRIEF.md +0 -34
- package/IMPLEMENTATION/RFC-0102/FILES.md +0 -73
- package/IMPLEMENTATION/RFC-0102/TASKS.md +0 -75
- package/IMPLEMENTATION/RFC-0102/TESTS.md +0 -78
- package/IMPLEMENTATION/RFC-0103/ACCEPTANCE_CRITERIA.md +0 -45
- package/IMPLEMENTATION/RFC-0103/AI_BRIEF.md +0 -46
- package/IMPLEMENTATION/RFC-0103/FILES.md +0 -121
- package/IMPLEMENTATION/RFC-0103/TASKS.md +0 -97
- package/IMPLEMENTATION/RFC-0103/TESTS.md +0 -118
- package/IMPLEMENTATION/RFC-0104/ACCEPTANCE_CRITERIA.md +0 -29
- package/IMPLEMENTATION/RFC-0104/FILES.md +0 -33
- package/IMPLEMENTATION/RFC-0105/ACCEPTANCE_CRITERIA.md +0 -29
- package/IMPLEMENTATION/RFC-0105/FILES.md +0 -41
- package/IMPLEMENTATION/RFC-0106/ACCEPTANCE_CRITERIA.md +0 -29
- package/IMPLEMENTATION/RFC-0106/FILES.md +0 -43
- package/RFC/0001_LOOP_RUNTIME.md +0 -14
- package/RFC/0002_PROVIDER_ADAPTER.md +0 -3
- package/RFC/0003_QUOTA_MANAGER.md +0 -3
- package/RFC/0004_PLAYWRIGHT_ADAPTER.md +0 -3
- package/RFC/0005_GIT_WORKTREE.md +0 -3
- package/RFC/0006_CHECKPOINT_MANAGER.md +0 -56
- package/RFC/0007_SCHEDULER.md +0 -32
- package/RFC/0008_PROVIDER_ROUTER.md +0 -44
- package/RFC/0009_SHARED_CONTEXT.md +0 -32
- package/RFC/0010_CONTEXT_WINDOW_MANAGER.md +0 -50
- package/RFC/0011_SHARED_BLACKBOARD.md +0 -42
- package/RFC/0012_AGENT_HANDOFF_PROTOCOL.md +0 -41
- package/RFC/0013_E2E_TEST_ENGINE.md +0 -42
- package/RFC/0014_PROJECT_DETECTOR_AND_TEST_DATA_ENGINE.md +0 -35
- package/RFC/0015_JOB_STATE_MACHINE.md +0 -45
- package/RFC/0016_TASK_GRAPH.md +0 -31
- package/RFC/0017_MASTER_PLANNER.md +0 -32
- package/RFC/0018_REPAIR_ENGINE.md +0 -36
- package/RFC/0019_AUTO_COMPACT_AND_CONTINUE.md +0 -51
- package/RFC/0020_OUTPUT_TOKEN_LIMIT_HANDLER.md +0 -49
- package/RFC/0021_PARTIAL_RESPONSE_RECOVERY.md +0 -49
- package/RFC/0022_NOTIFICATION_CENTER.md +0 -47
- package/RFC/0023_LOCAL_BROWSER_AGENT.md +0 -67
- package/RFC/0024_LOCAL_RUNTIME_AGENT.md +0 -3
- package/RFC/0025_COMMAND_EXECUTOR.md +0 -3
- package/RFC/0026_WORKSPACE_MANAGER.md +0 -3
- package/RFC/0027_RUNTIME_API.md +0 -3
- package/RFC/0028_POLICY_ENGINE.md +0 -3
- package/RFC/0029_DEEPAGENTS_ADAPTER.md +0 -2
- package/RFC/0030_AGENT_WORKER_INTERFACE.md +0 -2
- package/RFC/0031_PROVIDER_ADAPTER_SDK.md +0 -171
- package/RFC/0032_CHECKPOINT_ENGINE.md +0 -217
- package/RFC/0033_SESSION_MANAGER.md +0 -262
- package/RFC/0034_OBSERVABILITY.md +0 -416
- package/RFC/0035_ROADMAP_V1.md +0 -295
- package/RFC/0036_CODE_REVIEW_ENGINE.md +0 -430
- package/RFC/0037_CODE_GENERATION_PIPELINE.md +0 -504
- package/RFC/0038_FRAMEWORK_DETECTOR.md +0 -466
- package/RFC/0039_TEST_DATA_GENERATOR.md +0 -504
- package/RFC/0040_FRAMEWORK_PLUGIN_SDK.md +0 -543
- package/RFC/0041_PROMPT_COMPILER.md +0 -232
- package/RFC/0042_CONTEXT_COMPILER.md +0 -216
- package/RFC/0043_REQUIREMENT_COMPILER.md +0 -211
- package/RFC/0044_TASK_COMPILER.md +0 -207
- package/RFC/0045_PROJECT_ANALYZER.md +0 -246
- package/RFC/0046_DEPENDENCY_ANALYZER.md +0 -14
- package/RFC/0047_REPOSITORY_KNOWLEDGE_GRAPH.md +0 -14
- package/RFC/0048_CODE_MERGE_ENGINE.md +0 -14
- package/RFC/0049_CONFLICT_RESOLUTION_ENGINE.md +0 -14
- package/RFC/0050_DOCUMENTATION_GENERATOR.md +0 -14
- package/RFC/0051_CAPABILITY_REGISTRY.md +0 -144
- package/RFC/0052_SKILL_REGISTRY.md +0 -167
- package/RFC/0053_MODEL_REGISTRY.md +0 -214
- package/RFC/0054_PROVIDER_ROUTER.md +0 -239
- package/RFC/0055_COST_OPTIMIZER.md +0 -285
- package/RFC/0056_PERFORMANCE_OPTIMIZER.md +0 -118
- package/RFC/0057_EVALUATION_ENGINE.md +0 -116
- package/RFC/0058_LEARNING_ENGINE.md +0 -113
- package/RFC/0059_EXPERIENCE_REPLAY.md +0 -107
- package/RFC/0060_MEMORY_ENGINE_OKF.md +0 -152
- package/RFC/0061_FRAPPE_PLUGIN.md +0 -9
- package/RFC/0062_NEXTJS_PLUGIN.md +0 -9
- package/RFC/0063_REACT_VITE_PLUGIN.md +0 -9
- package/RFC/0064_DJANGO_PLUGIN.md +0 -9
- package/RFC/0065_LARAVEL_PLUGIN.md +0 -9
- package/RFC/0066_GENERIC_WEB_PLUGIN.md +0 -24
- package/RFC/0067_CLI_PLUGIN_SDK.md +0 -101
- package/RFC/0068_MCP_ADAPTER.md +0 -114
- package/RFC/0069_GOOGLE_A2A_ADAPTER.md +0 -139
- package/RFC/0070_OPENAI_CODEX_ADAPTER.md +0 -134
- package/RFC/0071_REQUIREMENT_INTAKE.md +0 -95
- package/RFC/0072_PROJECT_BOOTSTRAP.md +0 -82
- package/RFC/0073_ARCHITECTURE_GENERATOR.md +0 -85
- package/RFC/0074_SPRINT_PLANNER.md +0 -61
- package/RFC/0075_MILESTONE_MANAGER.md +0 -58
- package/RFC/0076_BACKLOG_MANAGER.md +0 -24
- package/RFC/0077_HUMAN_APPROVAL_GATE.md +0 -24
- package/RFC/0078_RELEASE_MANAGER.md +0 -24
- package/RFC/0079_VERSION_MANAGER.md +0 -24
- package/RFC/0080_DEPLOYMENT_PIPELINE.md +0 -24
- package/RFC/0081_MULTI_USER_RUNTIME.md +0 -24
- package/RFC/0082_RBAC.md +0 -24
- package/RFC/0083_AUDIT_TRAIL.md +0 -24
- package/RFC/0084_DASHBOARD.md +0 -24
- package/RFC/0085_ANALYTICS.md +0 -24
- package/RFC/0086_DISTRIBUTED_RUNTIME.md +0 -24
- package/RFC/0087_CLUSTER_MANAGER.md +0 -24
- package/RFC/0088_RUNTIME_FEDERATION.md +0 -24
- package/RFC/0089_HIGH_AVAILABILITY.md +0 -24
- package/RFC/0090_DISASTER_RECOVERY.md +0 -24
- package/RFC/0091_AUTONOMOUS_ARCHITECTURE_REVIEW.md +0 -24
- package/RFC/0092_AUTONOMOUS_REFACTORING.md +0 -24
- package/RFC/0093_AUTONOMOUS_BUG_FIXING.md +0 -24
- package/RFC/0094_AUTONOMOUS_PERFORMANCE_TUNING.md +0 -24
- package/RFC/0095_AUTONOMOUS_SECURITY_REVIEW.md +0 -24
- package/RFC/0096_AUTONOMOUS_COST_OPTIMIZATION.md +0 -24
- package/RFC/0097_AUTONOMOUS_DOCUMENTATION.md +0 -24
- package/RFC/0098_AUTONOMOUS_KNOWLEDGE_MANAGEMENT.md +0 -24
- package/RFC/0099_RUNTIME_EVOLUTION_ENGINE.md +0 -24
- package/RFC/0100_SELF_DEVELOPING_RUNTIME.md +0 -24
- package/RFC/0101_AUTONOMOUS_OPERATIONS_RUNTIME.md +0 -1105
- package/RFC/0102_CONTEXT_ENGINEERING_PIPELINE.md +0 -508
- package/RFC/0103_SESSION_EVENT_RUNTIME_AGENT_COMMUNICATION_LAYER.md +0 -616
- package/RFC/0104_DISTRIBUTED_AGENT_COMMUNICATION.md +0 -143
- package/RFC/0105_DISTRIBUTED_KNOWLEDGE_RETRIEVAL.md +0 -301
- package/RFC/0106_KNOWLEDGE_GRAPH_PROVENANCE.md +0 -368
- package/RFC/README.md +0 -11
- package/packages/event-bus/dist/tsconfig.tsbuildinfo +0 -1
- package/packages/provider-adapter-sdk/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Worker Interface — RFC-0030
|
|
3
|
+
*
|
|
4
|
+
* Common interface for all agent workers (Codex, MiniMax, GLM, GPT, DeepAgents).
|
|
5
|
+
* Runtime remains the orchestrator; agents are pluggable workers.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Registry of agent worker factories
|
|
9
|
+
*/
|
|
10
|
+
export class AgentWorkerRegistry {
|
|
11
|
+
factories = new Map();
|
|
12
|
+
/**
|
|
13
|
+
* Register a worker factory
|
|
14
|
+
*/
|
|
15
|
+
register(provider, factory) {
|
|
16
|
+
this.factories.set(provider.toLowerCase(), factory);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Create a worker for a provider
|
|
20
|
+
*/
|
|
21
|
+
create(config) {
|
|
22
|
+
const factory = this.factories.get(config.provider.toLowerCase());
|
|
23
|
+
if (!factory) {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
return factory(config);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Check if a provider is supported
|
|
30
|
+
*/
|
|
31
|
+
supports(provider) {
|
|
32
|
+
return this.factories.has(provider.toLowerCase());
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* List all supported providers
|
|
36
|
+
*/
|
|
37
|
+
listProviders() {
|
|
38
|
+
return Array.from(this.factories.keys());
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=agent-worker-types.js.map
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Provider Registry
|
|
3
|
+
*
|
|
4
|
+
* Centralized, canonical list of known AI/LLM providers used as keys across
|
|
5
|
+
* mirror.json, quota tracking, TUI signal parsing, and footer display.
|
|
6
|
+
*
|
|
7
|
+
* Adding a new provider = add ONE entry here + update the places that
|
|
8
|
+
* need per-provider behaviour (scraper, TUI parser, footer, etc.).
|
|
9
|
+
*
|
|
10
|
+
* Provider ids are lowercase internal keys.
|
|
11
|
+
* Labels are human-readable display strings.
|
|
12
|
+
*/
|
|
13
|
+
export const KNOWN_AI_PROVIDERS = [
|
|
14
|
+
"minimax",
|
|
15
|
+
"openai",
|
|
16
|
+
"anthropic",
|
|
17
|
+
"glm",
|
|
18
|
+
"openrouter",
|
|
19
|
+
"openai-codex",
|
|
20
|
+
"deepseek",
|
|
21
|
+
"gemini",
|
|
22
|
+
"kimi",
|
|
23
|
+
];
|
|
24
|
+
/** Human-readable display labels (used in footer, notifications). */
|
|
25
|
+
export const PROVIDER_LABELS = {
|
|
26
|
+
minimax: "MiniMax",
|
|
27
|
+
openai: "OpenAI",
|
|
28
|
+
anthropic: "Anthropic",
|
|
29
|
+
glm: "GLM",
|
|
30
|
+
openrouter: "OpenRouter",
|
|
31
|
+
"openai-codex": "OpenAI Codex",
|
|
32
|
+
deepseek: "DeepSeek",
|
|
33
|
+
gemini: "Gemini",
|
|
34
|
+
kimi: "Kimi",
|
|
35
|
+
unknown: "Unknown",
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Providers that support continuous quota scraping via cookie/browser automation.
|
|
39
|
+
* Only MiniMax is currently supported here.
|
|
40
|
+
*/
|
|
41
|
+
export const SCRAPEABLE_PROVIDERS = ["minimax"];
|
|
42
|
+
/**
|
|
43
|
+
* Providers that report quota via TUI signal capture (one-shot on limit hit).
|
|
44
|
+
* These do NOT have a continuous scraping path.
|
|
45
|
+
*/
|
|
46
|
+
export const TUI_SIGNAL_PROVIDERS = [
|
|
47
|
+
"openai",
|
|
48
|
+
"openai-codex",
|
|
49
|
+
"anthropic",
|
|
50
|
+
"glm",
|
|
51
|
+
"openrouter",
|
|
52
|
+
];
|
|
53
|
+
/**
|
|
54
|
+
* Check if a provider id is a known AI provider.
|
|
55
|
+
*/
|
|
56
|
+
export function isKnownAiProvider(id) {
|
|
57
|
+
return KNOWN_AI_PROVIDERS.includes(id);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get the display label for a provider id.
|
|
61
|
+
* Falls back to the id itself if unknown.
|
|
62
|
+
*/
|
|
63
|
+
export function getProviderLabel(id) {
|
|
64
|
+
return PROVIDER_LABELS[id] ?? id;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=ai-providers.js.map
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Write-Review Blackboard
|
|
3
|
+
*
|
|
4
|
+
* File-based coordination between writer and reviewer agents.
|
|
5
|
+
* Location: {project}/.write-review/status.json
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
8
|
+
import { join } from "path";
|
|
9
|
+
const DEFAULT_DIR = ".write-review";
|
|
10
|
+
const STATUS_FILE = "status.json";
|
|
11
|
+
export class WriteReviewBlackboard {
|
|
12
|
+
projectPath;
|
|
13
|
+
dir;
|
|
14
|
+
status = null;
|
|
15
|
+
constructor(projectPath, dir = DEFAULT_DIR) {
|
|
16
|
+
this.projectPath = projectPath;
|
|
17
|
+
this.dir = join(projectPath, dir);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Initialize a new write-review session
|
|
21
|
+
*/
|
|
22
|
+
init() {
|
|
23
|
+
mkdirSync(this.dir, { recursive: true });
|
|
24
|
+
this.status = {
|
|
25
|
+
projectPath: this.projectPath,
|
|
26
|
+
phase: "idle",
|
|
27
|
+
writerDone: false,
|
|
28
|
+
iteration: 0,
|
|
29
|
+
createdAt: new Date().toISOString(),
|
|
30
|
+
updatedAt: new Date().toISOString(),
|
|
31
|
+
};
|
|
32
|
+
this.save();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Load status from disk
|
|
36
|
+
*/
|
|
37
|
+
load() {
|
|
38
|
+
const path = join(this.dir, STATUS_FILE);
|
|
39
|
+
if (!existsSync(path)) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
this.status = JSON.parse(readFileSync(path, "utf-8"));
|
|
44
|
+
return this.status;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Save status to disk
|
|
52
|
+
*/
|
|
53
|
+
save() {
|
|
54
|
+
if (!this.status)
|
|
55
|
+
return;
|
|
56
|
+
this.status.updatedAt = new Date().toISOString();
|
|
57
|
+
mkdirSync(this.dir, { recursive: true });
|
|
58
|
+
const path = join(this.dir, STATUS_FILE);
|
|
59
|
+
writeFileSync(path, JSON.stringify(this.status, null, 2));
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get current status
|
|
63
|
+
*/
|
|
64
|
+
getStatus() {
|
|
65
|
+
return this.status;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Start a new write session
|
|
69
|
+
*/
|
|
70
|
+
startWriting() {
|
|
71
|
+
if (!this.status)
|
|
72
|
+
this.init();
|
|
73
|
+
this.status.phase = "writing";
|
|
74
|
+
this.status.writerDone = false;
|
|
75
|
+
this.status.iteration++;
|
|
76
|
+
this.save();
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Mark writer as done
|
|
80
|
+
*/
|
|
81
|
+
writerDone(message) {
|
|
82
|
+
if (!this.status)
|
|
83
|
+
return;
|
|
84
|
+
this.status.writerDone = true;
|
|
85
|
+
this.status.writerMessage = message;
|
|
86
|
+
this.status.phase = "pending_review";
|
|
87
|
+
this.save();
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Start reviewing
|
|
91
|
+
*/
|
|
92
|
+
startReview() {
|
|
93
|
+
if (!this.status)
|
|
94
|
+
return;
|
|
95
|
+
this.status.phase = "reviewing";
|
|
96
|
+
this.status.reviewerStarted = new Date().toISOString();
|
|
97
|
+
this.save();
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Record verdict
|
|
101
|
+
*/
|
|
102
|
+
setVerdict(verdict, message) {
|
|
103
|
+
if (!this.status)
|
|
104
|
+
return;
|
|
105
|
+
this.status.verdict = verdict;
|
|
106
|
+
this.status.verdictMessage = message;
|
|
107
|
+
switch (verdict) {
|
|
108
|
+
case "approved":
|
|
109
|
+
this.status.phase = "approved";
|
|
110
|
+
this.status.approvedAt = new Date().toISOString();
|
|
111
|
+
break;
|
|
112
|
+
case "blocked":
|
|
113
|
+
this.status.phase = "blocked";
|
|
114
|
+
this.status.blockedAt = new Date().toISOString();
|
|
115
|
+
break;
|
|
116
|
+
case "changes_requested":
|
|
117
|
+
this.status.phase = "changes_requested";
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
this.save();
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Record code files written
|
|
124
|
+
*/
|
|
125
|
+
setCodeFiles(files) {
|
|
126
|
+
if (!this.status)
|
|
127
|
+
return;
|
|
128
|
+
this.status.codeFiles = files;
|
|
129
|
+
this.save();
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Record requested changes
|
|
133
|
+
*/
|
|
134
|
+
setChangesRequested(changes) {
|
|
135
|
+
if (!this.status)
|
|
136
|
+
return;
|
|
137
|
+
this.status.changesRequested = changes;
|
|
138
|
+
this.save();
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get current phase
|
|
142
|
+
*/
|
|
143
|
+
getPhase() {
|
|
144
|
+
return this.status?.phase ?? "idle";
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get iteration number
|
|
148
|
+
*/
|
|
149
|
+
getIteration() {
|
|
150
|
+
return this.status?.iteration ?? 0;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Check if build is allowed
|
|
154
|
+
*/
|
|
155
|
+
canBuild() {
|
|
156
|
+
return this.status?.phase === "approved";
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Get blackboard directory path
|
|
160
|
+
*/
|
|
161
|
+
getPath() {
|
|
162
|
+
return this.dir;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Reset to idle
|
|
166
|
+
*/
|
|
167
|
+
reset() {
|
|
168
|
+
if (!this.status)
|
|
169
|
+
return;
|
|
170
|
+
this.status.phase = "idle";
|
|
171
|
+
this.status.writerDone = false;
|
|
172
|
+
this.status.verdict = undefined;
|
|
173
|
+
this.status.verdictMessage = undefined;
|
|
174
|
+
this.status.reviewerStarted = undefined;
|
|
175
|
+
this.status.approvedAt = undefined;
|
|
176
|
+
this.status.blockedAt = undefined;
|
|
177
|
+
this.status.codeFiles = undefined;
|
|
178
|
+
this.status.changesRequested = undefined;
|
|
179
|
+
this.save();
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Check if a review session exists for this project
|
|
183
|
+
*/
|
|
184
|
+
exists() {
|
|
185
|
+
const path = join(this.dir, STATUS_FILE);
|
|
186
|
+
return existsSync(path);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Export status as markdown for display
|
|
190
|
+
*/
|
|
191
|
+
toMarkdown() {
|
|
192
|
+
if (!this.status)
|
|
193
|
+
return "No active write-review session.";
|
|
194
|
+
const { phase, iteration, verdict, verdictMessage, codeFiles } = this.status;
|
|
195
|
+
const lines = [
|
|
196
|
+
`## Write-Review Status`,
|
|
197
|
+
``,
|
|
198
|
+
`| Field | Value |`,
|
|
199
|
+
`|-------|-------|`,
|
|
200
|
+
`| Phase | ${phase} |`,
|
|
201
|
+
`| Iteration | ${iteration} |`,
|
|
202
|
+
`| Verdict | ${verdict ?? "pending"} |`,
|
|
203
|
+
];
|
|
204
|
+
if (verdictMessage) {
|
|
205
|
+
lines.push(`| Message | ${verdictMessage} |`);
|
|
206
|
+
}
|
|
207
|
+
if (codeFiles && codeFiles.length > 0) {
|
|
208
|
+
lines.push(``, `### Code Files`);
|
|
209
|
+
for (const file of codeFiles) {
|
|
210
|
+
lines.push(`- ${file}`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return lines.join("\n");
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Create or get blackboard for project
|
|
218
|
+
*/
|
|
219
|
+
export function createBlackboard(projectPath, dir) {
|
|
220
|
+
const bb = new WriteReviewBlackboard(projectPath, dir);
|
|
221
|
+
if (!bb.exists()) {
|
|
222
|
+
bb.init();
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
bb.load();
|
|
226
|
+
}
|
|
227
|
+
return bb;
|
|
228
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* No-Build Gate
|
|
3
|
+
*
|
|
4
|
+
* Blocks build commands until review is approved.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Commands that trigger build gate
|
|
8
|
+
*/
|
|
9
|
+
const BUILD_COMMANDS = [
|
|
10
|
+
"bench build",
|
|
11
|
+
"npm run build",
|
|
12
|
+
"yarn build",
|
|
13
|
+
"pnpm build",
|
|
14
|
+
"bun run build",
|
|
15
|
+
"npm run dev",
|
|
16
|
+
"yarn dev",
|
|
17
|
+
"pnpm dev",
|
|
18
|
+
"./build",
|
|
19
|
+
"make build",
|
|
20
|
+
"gradle build",
|
|
21
|
+
"mvn package",
|
|
22
|
+
"dotnet build",
|
|
23
|
+
"cargo build",
|
|
24
|
+
"go build",
|
|
25
|
+
"python manage.py migrate",
|
|
26
|
+
"bench migrate",
|
|
27
|
+
"bench --site",
|
|
28
|
+
];
|
|
29
|
+
/**
|
|
30
|
+
* Check if a command is a build command
|
|
31
|
+
*/
|
|
32
|
+
export function isBuildCommand(command) {
|
|
33
|
+
const lower = command.toLowerCase().trim();
|
|
34
|
+
return BUILD_COMMANDS.some((cmd) => lower.includes(cmd.toLowerCase()));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Check if build is allowed
|
|
38
|
+
*/
|
|
39
|
+
export function checkBuildGate(command, blackboard) {
|
|
40
|
+
if (!isBuildCommand(command)) {
|
|
41
|
+
return { allowed: true };
|
|
42
|
+
}
|
|
43
|
+
const status = blackboard.load();
|
|
44
|
+
if (!status) {
|
|
45
|
+
// No review session - allow build
|
|
46
|
+
return { allowed: true };
|
|
47
|
+
}
|
|
48
|
+
if (status.phase === "approved") {
|
|
49
|
+
return {
|
|
50
|
+
allowed: true,
|
|
51
|
+
currentPhase: status.phase,
|
|
52
|
+
message: "Build allowed - review approved.",
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
allowed: false,
|
|
57
|
+
reason: "REVIEW_NOT_APPROVED",
|
|
58
|
+
currentPhase: status.phase,
|
|
59
|
+
message: `Build blocked. Current review phase: ${status.phase}. Wait for "APPROVED" verdict.`,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Format gate rejection message
|
|
64
|
+
*/
|
|
65
|
+
export function formatGateRejection(result) {
|
|
66
|
+
if (result.allowed) {
|
|
67
|
+
return "";
|
|
68
|
+
}
|
|
69
|
+
const lines = [
|
|
70
|
+
"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━",
|
|
71
|
+
"⚠️ BUILD BLOCKED",
|
|
72
|
+
"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━",
|
|
73
|
+
"",
|
|
74
|
+
`Current Phase: ${result.currentPhase}`,
|
|
75
|
+
"",
|
|
76
|
+
"The code is under review. Build is only allowed after APPROVED verdict.",
|
|
77
|
+
"",
|
|
78
|
+
"To check status:",
|
|
79
|
+
` cat {project}/.write-review/status.json`,
|
|
80
|
+
"",
|
|
81
|
+
"To wait for approval, do nothing. The reviewer will post the verdict.",
|
|
82
|
+
"",
|
|
83
|
+
];
|
|
84
|
+
if (result.currentPhase === "changes_requested") {
|
|
85
|
+
lines.push("Reviewer requested changes. Writer agent should update the code.");
|
|
86
|
+
}
|
|
87
|
+
else if (result.currentPhase === "reviewing") {
|
|
88
|
+
lines.push("Review is in progress. Please wait...");
|
|
89
|
+
}
|
|
90
|
+
else if (result.currentPhase === "pending_review") {
|
|
91
|
+
lines.push("Review not started yet. Waiting for reviewer...");
|
|
92
|
+
}
|
|
93
|
+
return lines.join("\n");
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get phase emoji
|
|
97
|
+
*/
|
|
98
|
+
export function getPhaseEmoji(phase) {
|
|
99
|
+
const emojis = {
|
|
100
|
+
idle: "💤",
|
|
101
|
+
writing: "✍️",
|
|
102
|
+
pending_review: "⏳",
|
|
103
|
+
reviewing: "🔍",
|
|
104
|
+
approved: "✅",
|
|
105
|
+
blocked: "🚫",
|
|
106
|
+
changes_requested: "🔄",
|
|
107
|
+
};
|
|
108
|
+
return emojis[phase] ?? "❓";
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Format status for display
|
|
112
|
+
*/
|
|
113
|
+
export function formatStatusDisplay(status) {
|
|
114
|
+
const emoji = getPhaseEmoji(status.phase);
|
|
115
|
+
const lines = [
|
|
116
|
+
`${emoji} Write-Review Status`,
|
|
117
|
+
"",
|
|
118
|
+
`Phase: ${status.phase}`,
|
|
119
|
+
`Iteration: ${status.iteration}`,
|
|
120
|
+
];
|
|
121
|
+
if (status.verdict) {
|
|
122
|
+
lines.push(`Verdict: ${status.verdict}`);
|
|
123
|
+
}
|
|
124
|
+
if (status.verdictMessage) {
|
|
125
|
+
lines.push("");
|
|
126
|
+
lines.push("Message:");
|
|
127
|
+
lines.push(status.verdictMessage);
|
|
128
|
+
}
|
|
129
|
+
if (status.codeFiles && status.codeFiles.length > 0) {
|
|
130
|
+
lines.push("");
|
|
131
|
+
lines.push("Code Files:");
|
|
132
|
+
for (const file of status.codeFiles) {
|
|
133
|
+
lines.push(` - ${file}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return lines.join("\n");
|
|
137
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
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
|
+
// Re-export all public APIs
|
|
12
|
+
export * from "./types.js";
|
|
13
|
+
export * from "./blackboard.js";
|
|
14
|
+
export * from "./trigger.js";
|
|
15
|
+
export * from "./injection.js";
|
|
16
|
+
export * from "./gate.js";
|
|
17
|
+
export * from "./review.js";
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* System Prompt Injection
|
|
3
|
+
*
|
|
4
|
+
* Adds write-review hints to the agent's system prompt.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Write-review hint for system prompt
|
|
8
|
+
*/
|
|
9
|
+
export const WRITE_REVIEW_HINT = `
|
|
10
|
+
|
|
11
|
+
## Write-Review Loop
|
|
12
|
+
|
|
13
|
+
When reading a prompt from {project}/wiki/*:
|
|
14
|
+
|
|
15
|
+
1. You are the **WRITER** agent (Minimax). Read the wiki prompt and write code.
|
|
16
|
+
2. After writing code, write "## WRITER_DONE" to signal completion.
|
|
17
|
+
3. Do NOT build or commit until you receive "APPROVED" verdict.
|
|
18
|
+
4. If you receive "CHANGES_REQUESTED", update the code accordingly.
|
|
19
|
+
5. Acknowledge each verdict in your response.
|
|
20
|
+
|
|
21
|
+
### Blackboard Path
|
|
22
|
+
{p}/.write-review/status.json
|
|
23
|
+
|
|
24
|
+
### Verdict Types
|
|
25
|
+
- **APPROVED**: Code is ready. You may build/commit.
|
|
26
|
+
- **CHANGES_REQUESTED**: Reviewer found issues. Update code.
|
|
27
|
+
- **BLOCKED**: Critical issues. Human intervention needed.
|
|
28
|
+
`;
|
|
29
|
+
/**
|
|
30
|
+
* Helper agent hint (for worker agent)
|
|
31
|
+
*/
|
|
32
|
+
export const HELPER_HINT = `
|
|
33
|
+
|
|
34
|
+
## Helper Agent Task
|
|
35
|
+
|
|
36
|
+
The writer agent is busy or needs assistance. Your task:
|
|
37
|
+
|
|
38
|
+
1. Note any pending tasks to the Todos list using the todo tool.
|
|
39
|
+
2. Review the changes requested and prepare notes for the writer.
|
|
40
|
+
3. Do NOT write code directly - that's the writer's job.
|
|
41
|
+
4. Write a summary of pending tasks to the blackboard.
|
|
42
|
+
`;
|
|
43
|
+
/**
|
|
44
|
+
* Review reminder hint
|
|
45
|
+
*/
|
|
46
|
+
export const REVIEW_REMINDER_HINT = `
|
|
47
|
+
|
|
48
|
+
## Review Reminder
|
|
49
|
+
|
|
50
|
+
Before committing or building, ALWAYS check the write-review status:
|
|
51
|
+
|
|
52
|
+
\`\`\`bash
|
|
53
|
+
cat {project}/.write-review/status.json
|
|
54
|
+
\`\`\`
|
|
55
|
+
|
|
56
|
+
Only build/commit if the status shows "approved" or "phase": "approved".
|
|
57
|
+
`;
|
|
58
|
+
/**
|
|
59
|
+
* Format hint with project path
|
|
60
|
+
*/
|
|
61
|
+
export function formatWriteReviewHint(projectPath) {
|
|
62
|
+
return WRITE_REVIEW_HINT.replace("{project}", projectPath).replace("{p}", projectPath);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Format review reminder with project path
|
|
66
|
+
*/
|
|
67
|
+
export function formatReviewReminder(projectPath) {
|
|
68
|
+
return REVIEW_REMINDER_HINT.replace("{project}", projectPath);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get all hints to inject
|
|
72
|
+
*/
|
|
73
|
+
export function getWriteReviewHints(projectPath) {
|
|
74
|
+
return {
|
|
75
|
+
writeHint: formatWriteReviewHint(projectPath),
|
|
76
|
+
reminderHint: formatReviewReminder(projectPath),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
import { createBlackboard } from "./blackboard.js";
|
|
80
|
+
export function injectWriterInstructions(pi, config) {
|
|
81
|
+
let currentProject = null;
|
|
82
|
+
let blackboard = null;
|
|
83
|
+
let hintsInjected = false;
|
|
84
|
+
// System prompt injection
|
|
85
|
+
pi.on("before_agent_start", async (event) => {
|
|
86
|
+
const cwd = process.cwd?.() ?? "/";
|
|
87
|
+
if (cwd !== currentProject) {
|
|
88
|
+
currentProject = cwd;
|
|
89
|
+
blackboard = createBlackboard(cwd);
|
|
90
|
+
hintsInjected = false;
|
|
91
|
+
}
|
|
92
|
+
if (!hintsInjected && blackboard) {
|
|
93
|
+
const status = blackboard.load();
|
|
94
|
+
if (status && status.phase !== "idle") {
|
|
95
|
+
event.systemPrompt += formatWriteReviewHint(cwd);
|
|
96
|
+
if (status.phase !== "approved") {
|
|
97
|
+
event.systemPrompt += formatReviewReminder(cwd);
|
|
98
|
+
}
|
|
99
|
+
hintsInjected = true;
|
|
100
|
+
if (config?.debug) {
|
|
101
|
+
console.log(`[write-review] Hints injected for ${cwd}, phase: ${status.phase}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
// Build gate
|
|
107
|
+
pi.on("tool_execution_end", async (event) => {
|
|
108
|
+
const toolName = event.tool?.name ?? "";
|
|
109
|
+
if (toolName !== "bash")
|
|
110
|
+
return;
|
|
111
|
+
const result = event;
|
|
112
|
+
const content = result.result?.content ?? "";
|
|
113
|
+
// Check for build commands
|
|
114
|
+
const buildCommands = [
|
|
115
|
+
"bench build",
|
|
116
|
+
"npm run build",
|
|
117
|
+
"yarn build",
|
|
118
|
+
"pnpm build",
|
|
119
|
+
"bun run build",
|
|
120
|
+
"make build",
|
|
121
|
+
"gradle build",
|
|
122
|
+
"dotnet build",
|
|
123
|
+
"cargo build",
|
|
124
|
+
];
|
|
125
|
+
const isBuild = buildCommands.some((cmd) => content.includes(cmd));
|
|
126
|
+
if (isBuild && blackboard) {
|
|
127
|
+
const status = blackboard.load();
|
|
128
|
+
if (status && status.phase !== "approved") {
|
|
129
|
+
result.result.content =
|
|
130
|
+
content +
|
|
131
|
+
"\n\n" +
|
|
132
|
+
"⚠️ BUILD BLOCKED - Review not approved yet.\n" +
|
|
133
|
+
`Current phase: ${status.phase}\n` +
|
|
134
|
+
"Wait for APPROVED verdict before building.";
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
if (config?.debug) {
|
|
139
|
+
console.log("[write-review] Extension registered");
|
|
140
|
+
}
|
|
141
|
+
}
|