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.
Files changed (581) hide show
  1. package/harness/notification-events.ts +2 -2
  2. package/package.json +4 -7
  3. package/packages/auth/src/minimax-browser-auth.js +889 -0
  4. package/packages/capability-registry/src/types.js +10 -0
  5. package/packages/checkpoint/src/checkpoint-manager.js +29 -0
  6. package/packages/clipboard/src/copy-sync.js +169 -0
  7. package/packages/clipboard/src/gist-relay.js +185 -0
  8. package/packages/clipboard/src/github-login.js +68 -0
  9. package/packages/config-capture/src/index.js +268 -0
  10. package/packages/cookie-sanitizer/src/atomic-write.js +66 -0
  11. package/packages/cookie-sanitizer/src/detect-format.js +87 -0
  12. package/packages/cookie-sanitizer/src/index.js +38 -0
  13. package/packages/cookie-sanitizer/src/infer-provider.js +95 -0
  14. package/packages/cookie-sanitizer/src/normalize.js +74 -0
  15. package/packages/cookie-sanitizer/src/parse-json.js +107 -0
  16. package/packages/cookie-sanitizer/src/parse-netscape.js +98 -0
  17. package/packages/cookie-sanitizer/src/sync.js +268 -0
  18. package/packages/cookie-sanitizer/src/types.js +12 -0
  19. package/packages/cookie-sanitizer/src/watcher.js +147 -0
  20. package/packages/evaluation-engine/src/engine.js +343 -0
  21. package/packages/evaluation-engine/src/index.js +7 -0
  22. package/packages/evaluation-engine/src/types.js +14 -0
  23. package/packages/event-store/src/types.js +5 -0
  24. package/packages/experience-replay/src/index.js +6 -0
  25. package/packages/experience-replay/src/replay.js +228 -0
  26. package/packages/experience-replay/src/types.js +6 -0
  27. package/packages/learning-engine/src/engine.js +294 -0
  28. package/packages/learning-engine/src/index.js +7 -0
  29. package/packages/learning-engine/src/types.js +63 -0
  30. package/packages/memory-engine/src/engine.js +507 -0
  31. package/packages/memory-engine/src/index.js +7 -0
  32. package/packages/memory-engine/src/types.js +39 -0
  33. package/packages/model-registry/src/types.js +5 -0
  34. package/packages/performance-optimizer/src/index.js +6 -0
  35. package/packages/performance-optimizer/src/optimizer.js +304 -0
  36. package/packages/performance-optimizer/src/types.js +6 -0
  37. package/packages/projection-engine/src/types.js +5 -0
  38. package/packages/providers/src/provider-id.js +112 -0
  39. package/packages/quota-manager/src/quota-manager.js +259 -0
  40. package/packages/quota-manager/src/tui-usage-monitor.js +267 -0
  41. package/packages/todo-bd-sync/src/detector.js +131 -0
  42. package/packages/todo-bd-sync/src/extension.js +104 -0
  43. package/packages/todo-bd-sync/src/sync.js +289 -0
  44. package/packages/todo-bd-sync/src/task-analyzer.js +239 -0
  45. package/packages/todo-bd-sync/src/types.js +66 -0
  46. package/packages/token-estimation/src/index.js +114 -0
  47. package/packages/types/src/agent-worker-types.js +41 -0
  48. package/packages/types/src/ai-providers.js +66 -0
  49. package/packages/types/src/runtime-types.js +3 -0
  50. package/packages/workflow-events/src/types.js +5 -0
  51. package/packages/write-review/src/blackboard.js +228 -0
  52. package/packages/write-review/src/gate.js +137 -0
  53. package/packages/write-review/src/index.js +17 -0
  54. package/packages/write-review/src/injection.js +141 -0
  55. package/packages/write-review/src/review.js +153 -0
  56. package/packages/write-review/src/trigger.js +106 -0
  57. package/packages/write-review/src/types.js +25 -0
  58. package/IMPLEMENTATION/RFC-0010/ACCEPTANCE_CRITERIA.md +0 -7
  59. package/IMPLEMENTATION/RFC-0010/AI_BRIEF.md +0 -20
  60. package/IMPLEMENTATION/RFC-0010/FILES.md +0 -11
  61. package/IMPLEMENTATION/RFC-0010/TASKS.md +0 -10
  62. package/IMPLEMENTATION/RFC-0010/TESTS.md +0 -6
  63. package/IMPLEMENTATION/RFC-0011/ACCEPTANCE_CRITERIA.md +0 -7
  64. package/IMPLEMENTATION/RFC-0011/AI_BRIEF.md +0 -19
  65. package/IMPLEMENTATION/RFC-0011/FILES.md +0 -11
  66. package/IMPLEMENTATION/RFC-0011/TASKS.md +0 -10
  67. package/IMPLEMENTATION/RFC-0011/TESTS.md +0 -6
  68. package/IMPLEMENTATION/RFC-0012/ACCEPTANCE_CRITERIA.md +0 -7
  69. package/IMPLEMENTATION/RFC-0012/AI_BRIEF.md +0 -18
  70. package/IMPLEMENTATION/RFC-0012/FILES.md +0 -11
  71. package/IMPLEMENTATION/RFC-0012/TASKS.md +0 -10
  72. package/IMPLEMENTATION/RFC-0012/TESTS.md +0 -6
  73. package/IMPLEMENTATION/RFC-0013/ACCEPTANCE_CRITERIA.md +0 -7
  74. package/IMPLEMENTATION/RFC-0013/AI_BRIEF.md +0 -19
  75. package/IMPLEMENTATION/RFC-0013/FILES.md +0 -11
  76. package/IMPLEMENTATION/RFC-0013/TASKS.md +0 -10
  77. package/IMPLEMENTATION/RFC-0013/TESTS.md +0 -6
  78. package/IMPLEMENTATION/RFC-0014/ACCEPTANCE_CRITERIA.md +0 -7
  79. package/IMPLEMENTATION/RFC-0014/AI_BRIEF.md +0 -20
  80. package/IMPLEMENTATION/RFC-0014/FILES.md +0 -11
  81. package/IMPLEMENTATION/RFC-0014/TASKS.md +0 -10
  82. package/IMPLEMENTATION/RFC-0014/TESTS.md +0 -6
  83. package/IMPLEMENTATION/RFC-0015/ACCEPTANCE_CRITERIA.md +0 -2
  84. package/IMPLEMENTATION/RFC-0015/AI_BRIEF.md +0 -2
  85. package/IMPLEMENTATION/RFC-0015/FILES.md +0 -2
  86. package/IMPLEMENTATION/RFC-0015/TASKS.md +0 -4
  87. package/IMPLEMENTATION/RFC-0015/TESTS.md +0 -3
  88. package/IMPLEMENTATION/RFC-0016/ACCEPTANCE_CRITERIA.md +0 -2
  89. package/IMPLEMENTATION/RFC-0016/AI_BRIEF.md +0 -2
  90. package/IMPLEMENTATION/RFC-0016/FILES.md +0 -2
  91. package/IMPLEMENTATION/RFC-0016/TASKS.md +0 -4
  92. package/IMPLEMENTATION/RFC-0016/TESTS.md +0 -3
  93. package/IMPLEMENTATION/RFC-0017/ACCEPTANCE_CRITERIA.md +0 -2
  94. package/IMPLEMENTATION/RFC-0017/AI_BRIEF.md +0 -2
  95. package/IMPLEMENTATION/RFC-0017/FILES.md +0 -2
  96. package/IMPLEMENTATION/RFC-0017/TASKS.md +0 -4
  97. package/IMPLEMENTATION/RFC-0017/TESTS.md +0 -3
  98. package/IMPLEMENTATION/RFC-0018/ACCEPTANCE_CRITERIA.md +0 -2
  99. package/IMPLEMENTATION/RFC-0018/AI_BRIEF.md +0 -2
  100. package/IMPLEMENTATION/RFC-0018/FILES.md +0 -2
  101. package/IMPLEMENTATION/RFC-0018/TASKS.md +0 -4
  102. package/IMPLEMENTATION/RFC-0018/TESTS.md +0 -3
  103. package/IMPLEMENTATION/RFC-0019/ACCEPTANCE_CRITERIA.md +0 -7
  104. package/IMPLEMENTATION/RFC-0019/AI_BRIEF.md +0 -18
  105. package/IMPLEMENTATION/RFC-0019/TASKS.md +0 -10
  106. package/IMPLEMENTATION/RFC-0020/ACCEPTANCE_CRITERIA.md +0 -7
  107. package/IMPLEMENTATION/RFC-0020/AI_BRIEF.md +0 -18
  108. package/IMPLEMENTATION/RFC-0020/TASKS.md +0 -10
  109. package/IMPLEMENTATION/RFC-0021/ACCEPTANCE_CRITERIA.md +0 -7
  110. package/IMPLEMENTATION/RFC-0021/AI_BRIEF.md +0 -18
  111. package/IMPLEMENTATION/RFC-0021/TASKS.md +0 -10
  112. package/IMPLEMENTATION/RFC-0022/ACCEPTANCE_CRITERIA.md +0 -7
  113. package/IMPLEMENTATION/RFC-0022/AI_BRIEF.md +0 -18
  114. package/IMPLEMENTATION/RFC-0022/TASKS.md +0 -10
  115. package/IMPLEMENTATION/RFC-0023/ACCEPTANCE_CRITERIA.md +0 -7
  116. package/IMPLEMENTATION/RFC-0023/AI_BRIEF.md +0 -18
  117. package/IMPLEMENTATION/RFC-0023/TASKS.md +0 -10
  118. package/IMPLEMENTATION/RFC-0024/AI_BRIEF.md +0 -1
  119. package/IMPLEMENTATION/RFC-0024/TASKS.md +0 -3
  120. package/IMPLEMENTATION/RFC-0025/AI_BRIEF.md +0 -1
  121. package/IMPLEMENTATION/RFC-0025/TASKS.md +0 -3
  122. package/IMPLEMENTATION/RFC-0026/AI_BRIEF.md +0 -1
  123. package/IMPLEMENTATION/RFC-0026/TASKS.md +0 -3
  124. package/IMPLEMENTATION/RFC-0027/AI_BRIEF.md +0 -1
  125. package/IMPLEMENTATION/RFC-0027/TASKS.md +0 -3
  126. package/IMPLEMENTATION/RFC-0028/AI_BRIEF.md +0 -1
  127. package/IMPLEMENTATION/RFC-0028/TASKS.md +0 -3
  128. package/IMPLEMENTATION/RFC-0029/AI_BRIEF.md +0 -1
  129. package/IMPLEMENTATION/RFC-0029/TASKS.md +0 -4
  130. package/IMPLEMENTATION/RFC-0030/AI_BRIEF.md +0 -1
  131. package/IMPLEMENTATION/RFC-0030/TASKS.md +0 -3
  132. package/IMPLEMENTATION/RFC-0031/AI_BRIEF.md +0 -45
  133. package/IMPLEMENTATION/RFC-0031/TASKS.md +0 -48
  134. package/IMPLEMENTATION/RFC-0032/AI_BRIEF.md +0 -45
  135. package/IMPLEMENTATION/RFC-0032/TASKS.md +0 -44
  136. package/IMPLEMENTATION/RFC-0033/AI_BRIEF.md +0 -46
  137. package/IMPLEMENTATION/RFC-0033/TASKS.md +0 -49
  138. package/IMPLEMENTATION/RFC-0034/AI_BRIEF.md +0 -54
  139. package/IMPLEMENTATION/RFC-0034/TASKS.md +0 -57
  140. package/IMPLEMENTATION/RFC-0035/AI_BRIEF.md +0 -55
  141. package/IMPLEMENTATION/RFC-0035/TASKS.md +0 -75
  142. package/IMPLEMENTATION/RFC-0036/AI_BRIEF.md +0 -62
  143. package/IMPLEMENTATION/RFC-0036/TASKS.md +0 -60
  144. package/IMPLEMENTATION/RFC-0037/AI_BRIEF.md +0 -59
  145. package/IMPLEMENTATION/RFC-0037/TASKS.md +0 -63
  146. package/IMPLEMENTATION/RFC-0038/AI_BRIEF.md +0 -67
  147. package/IMPLEMENTATION/RFC-0038/TASKS.md +0 -65
  148. package/IMPLEMENTATION/RFC-0039/AI_BRIEF.md +0 -68
  149. package/IMPLEMENTATION/RFC-0039/TASKS.md +0 -74
  150. package/IMPLEMENTATION/RFC-0040/AI_BRIEF.md +0 -79
  151. package/IMPLEMENTATION/RFC-0040/TASKS.md +0 -77
  152. package/IMPLEMENTATION/RFC-0041/ACCEPTANCE_CRITERIA.md +0 -8
  153. package/IMPLEMENTATION/RFC-0041/AI_BRIEF.md +0 -26
  154. package/IMPLEMENTATION/RFC-0041/FILES.md +0 -12
  155. package/IMPLEMENTATION/RFC-0041/TASKS.md +0 -12
  156. package/IMPLEMENTATION/RFC-0041/TESTS.md +0 -12
  157. package/IMPLEMENTATION/RFC-0042/ACCEPTANCE_CRITERIA.md +0 -7
  158. package/IMPLEMENTATION/RFC-0042/AI_BRIEF.md +0 -5
  159. package/IMPLEMENTATION/RFC-0042/FILES.md +0 -14
  160. package/IMPLEMENTATION/RFC-0042/TASKS.md +0 -12
  161. package/IMPLEMENTATION/RFC-0042/TESTS.md +0 -11
  162. package/IMPLEMENTATION/RFC-0043/ACCEPTANCE_CRITERIA.md +0 -7
  163. package/IMPLEMENTATION/RFC-0043/AI_BRIEF.md +0 -5
  164. package/IMPLEMENTATION/RFC-0043/FILES.md +0 -14
  165. package/IMPLEMENTATION/RFC-0043/TASKS.md +0 -12
  166. package/IMPLEMENTATION/RFC-0043/TESTS.md +0 -10
  167. package/IMPLEMENTATION/RFC-0044/ACCEPTANCE_CRITERIA.md +0 -7
  168. package/IMPLEMENTATION/RFC-0044/AI_BRIEF.md +0 -5
  169. package/IMPLEMENTATION/RFC-0044/FILES.md +0 -13
  170. package/IMPLEMENTATION/RFC-0044/TASKS.md +0 -12
  171. package/IMPLEMENTATION/RFC-0044/TESTS.md +0 -10
  172. package/IMPLEMENTATION/RFC-0045/ACCEPTANCE_CRITERIA.md +0 -30
  173. package/IMPLEMENTATION/RFC-0045/AI_BRIEF.md +0 -53
  174. package/IMPLEMENTATION/RFC-0045/FILES.md +0 -13
  175. package/IMPLEMENTATION/RFC-0045/TASKS.md +0 -31
  176. package/IMPLEMENTATION/RFC-0045/TESTS.md +0 -62
  177. package/IMPLEMENTATION/RFC-0046/ACCEPTANCE_CRITERIA.md +0 -1
  178. package/IMPLEMENTATION/RFC-0046/AI_BRIEF.md +0 -1
  179. package/IMPLEMENTATION/RFC-0046/FILES.md +0 -2
  180. package/IMPLEMENTATION/RFC-0046/TASKS.md +0 -3
  181. package/IMPLEMENTATION/RFC-0046/TESTS.md +0 -1
  182. package/IMPLEMENTATION/RFC-0047/ACCEPTANCE_CRITERIA.md +0 -1
  183. package/IMPLEMENTATION/RFC-0047/AI_BRIEF.md +0 -1
  184. package/IMPLEMENTATION/RFC-0047/FILES.md +0 -2
  185. package/IMPLEMENTATION/RFC-0047/TASKS.md +0 -3
  186. package/IMPLEMENTATION/RFC-0047/TESTS.md +0 -1
  187. package/IMPLEMENTATION/RFC-0048/ACCEPTANCE_CRITERIA.md +0 -1
  188. package/IMPLEMENTATION/RFC-0048/AI_BRIEF.md +0 -1
  189. package/IMPLEMENTATION/RFC-0048/FILES.md +0 -2
  190. package/IMPLEMENTATION/RFC-0048/TASKS.md +0 -3
  191. package/IMPLEMENTATION/RFC-0048/TESTS.md +0 -1
  192. package/IMPLEMENTATION/RFC-0049/ACCEPTANCE_CRITERIA.md +0 -1
  193. package/IMPLEMENTATION/RFC-0049/AI_BRIEF.md +0 -1
  194. package/IMPLEMENTATION/RFC-0049/FILES.md +0 -2
  195. package/IMPLEMENTATION/RFC-0049/TASKS.md +0 -3
  196. package/IMPLEMENTATION/RFC-0049/TESTS.md +0 -1
  197. package/IMPLEMENTATION/RFC-0050/ACCEPTANCE_CRITERIA.md +0 -1
  198. package/IMPLEMENTATION/RFC-0050/AI_BRIEF.md +0 -1
  199. package/IMPLEMENTATION/RFC-0050/FILES.md +0 -2
  200. package/IMPLEMENTATION/RFC-0050/TASKS.md +0 -3
  201. package/IMPLEMENTATION/RFC-0050/TESTS.md +0 -1
  202. package/IMPLEMENTATION/RFC-0051/ACCEPTANCE_CRITERIA.md +0 -6
  203. package/IMPLEMENTATION/RFC-0051/AI_BRIEF.md +0 -20
  204. package/IMPLEMENTATION/RFC-0051/FILES.md +0 -8
  205. package/IMPLEMENTATION/RFC-0051/TASKS.md +0 -3
  206. package/IMPLEMENTATION/RFC-0051/TESTS.md +0 -4
  207. package/IMPLEMENTATION/RFC-0052/ACCEPTANCE_CRITERIA.md +0 -7
  208. package/IMPLEMENTATION/RFC-0052/AI_BRIEF.md +0 -19
  209. package/IMPLEMENTATION/RFC-0052/FILES.md +0 -8
  210. package/IMPLEMENTATION/RFC-0052/TASKS.md +0 -3
  211. package/IMPLEMENTATION/RFC-0052/TESTS.md +0 -1
  212. package/IMPLEMENTATION/RFC-0053/ACCEPTANCE_CRITERIA.md +0 -8
  213. package/IMPLEMENTATION/RFC-0053/AI_BRIEF.md +0 -20
  214. package/IMPLEMENTATION/RFC-0053/FILES.md +0 -9
  215. package/IMPLEMENTATION/RFC-0053/TASKS.md +0 -3
  216. package/IMPLEMENTATION/RFC-0053/TESTS.md +0 -1
  217. package/IMPLEMENTATION/RFC-0054/ACCEPTANCE_CRITERIA.md +0 -8
  218. package/IMPLEMENTATION/RFC-0054/AI_BRIEF.md +0 -19
  219. package/IMPLEMENTATION/RFC-0054/FILES.md +0 -8
  220. package/IMPLEMENTATION/RFC-0054/TASKS.md +0 -3
  221. package/IMPLEMENTATION/RFC-0054/TESTS.md +0 -1
  222. package/IMPLEMENTATION/RFC-0055/ACCEPTANCE_CRITERIA.md +0 -8
  223. package/IMPLEMENTATION/RFC-0055/AI_BRIEF.md +0 -17
  224. package/IMPLEMENTATION/RFC-0055/FILES.md +0 -9
  225. package/IMPLEMENTATION/RFC-0055/TASKS.md +0 -3
  226. package/IMPLEMENTATION/RFC-0055/TESTS.md +0 -1
  227. package/IMPLEMENTATION/RFC-0056/ACCEPTANCE_CRITERIA.md +0 -6
  228. package/IMPLEMENTATION/RFC-0056/AI_BRIEF.md +0 -18
  229. package/IMPLEMENTATION/RFC-0056/FILES.md +0 -9
  230. package/IMPLEMENTATION/RFC-0056/TASKS.md +0 -9
  231. package/IMPLEMENTATION/RFC-0056/TESTS.md +0 -7
  232. package/IMPLEMENTATION/RFC-0057/ACCEPTANCE_CRITERIA.md +0 -5
  233. package/IMPLEMENTATION/RFC-0057/AI_BRIEF.md +0 -5
  234. package/IMPLEMENTATION/RFC-0057/FILES.md +0 -11
  235. package/IMPLEMENTATION/RFC-0057/TASKS.md +0 -9
  236. package/IMPLEMENTATION/RFC-0057/TESTS.md +0 -7
  237. package/IMPLEMENTATION/RFC-0058/ACCEPTANCE_CRITERIA.md +0 -6
  238. package/IMPLEMENTATION/RFC-0058/AI_BRIEF.md +0 -5
  239. package/IMPLEMENTATION/RFC-0058/FILES.md +0 -11
  240. package/IMPLEMENTATION/RFC-0058/TASKS.md +0 -9
  241. package/IMPLEMENTATION/RFC-0058/TESTS.md +0 -7
  242. package/IMPLEMENTATION/RFC-0059/ACCEPTANCE_CRITERIA.md +0 -6
  243. package/IMPLEMENTATION/RFC-0059/AI_BRIEF.md +0 -5
  244. package/IMPLEMENTATION/RFC-0059/FILES.md +0 -11
  245. package/IMPLEMENTATION/RFC-0059/TASKS.md +0 -9
  246. package/IMPLEMENTATION/RFC-0059/TESTS.md +0 -7
  247. package/IMPLEMENTATION/RFC-0060/ACCEPTANCE_CRITERIA.md +0 -7
  248. package/IMPLEMENTATION/RFC-0060/AI_BRIEF.md +0 -5
  249. package/IMPLEMENTATION/RFC-0060/FILES.md +0 -14
  250. package/IMPLEMENTATION/RFC-0060/TASKS.md +0 -12
  251. package/IMPLEMENTATION/RFC-0060/TESTS.md +0 -10
  252. package/IMPLEMENTATION/RFC-0061/ACCEPTANCE_CRITERIA.md +0 -1
  253. package/IMPLEMENTATION/RFC-0061/AI_BRIEF.md +0 -1
  254. package/IMPLEMENTATION/RFC-0061/FILES.md +0 -2
  255. package/IMPLEMENTATION/RFC-0061/TASKS.md +0 -4
  256. package/IMPLEMENTATION/RFC-0061/TESTS.md +0 -2
  257. package/IMPLEMENTATION/RFC-0062/ACCEPTANCE_CRITERIA.md +0 -1
  258. package/IMPLEMENTATION/RFC-0062/AI_BRIEF.md +0 -1
  259. package/IMPLEMENTATION/RFC-0062/FILES.md +0 -2
  260. package/IMPLEMENTATION/RFC-0062/TASKS.md +0 -4
  261. package/IMPLEMENTATION/RFC-0062/TESTS.md +0 -2
  262. package/IMPLEMENTATION/RFC-0063/ACCEPTANCE_CRITERIA.md +0 -1
  263. package/IMPLEMENTATION/RFC-0063/AI_BRIEF.md +0 -1
  264. package/IMPLEMENTATION/RFC-0063/FILES.md +0 -2
  265. package/IMPLEMENTATION/RFC-0063/TASKS.md +0 -4
  266. package/IMPLEMENTATION/RFC-0063/TESTS.md +0 -2
  267. package/IMPLEMENTATION/RFC-0064/ACCEPTANCE_CRITERIA.md +0 -1
  268. package/IMPLEMENTATION/RFC-0064/AI_BRIEF.md +0 -1
  269. package/IMPLEMENTATION/RFC-0064/FILES.md +0 -2
  270. package/IMPLEMENTATION/RFC-0064/TASKS.md +0 -4
  271. package/IMPLEMENTATION/RFC-0064/TESTS.md +0 -2
  272. package/IMPLEMENTATION/RFC-0065/ACCEPTANCE_CRITERIA.md +0 -1
  273. package/IMPLEMENTATION/RFC-0065/AI_BRIEF.md +0 -1
  274. package/IMPLEMENTATION/RFC-0065/FILES.md +0 -2
  275. package/IMPLEMENTATION/RFC-0065/TASKS.md +0 -4
  276. package/IMPLEMENTATION/RFC-0065/TESTS.md +0 -2
  277. package/IMPLEMENTATION/RFC-0066/ACCEPTANCE_CRITERIA.md +0 -2
  278. package/IMPLEMENTATION/RFC-0066/AI_BRIEF.md +0 -2
  279. package/IMPLEMENTATION/RFC-0066/FILES.md +0 -2
  280. package/IMPLEMENTATION/RFC-0066/TASKS.md +0 -4
  281. package/IMPLEMENTATION/RFC-0066/TESTS.md +0 -3
  282. package/IMPLEMENTATION/RFC-0067/ACCEPTANCE_CRITERIA.md +0 -2
  283. package/IMPLEMENTATION/RFC-0067/AI_BRIEF.md +0 -2
  284. package/IMPLEMENTATION/RFC-0067/FILES.md +0 -2
  285. package/IMPLEMENTATION/RFC-0067/TASKS.md +0 -4
  286. package/IMPLEMENTATION/RFC-0067/TESTS.md +0 -3
  287. package/IMPLEMENTATION/RFC-0068/ACCEPTANCE_CRITERIA.md +0 -2
  288. package/IMPLEMENTATION/RFC-0068/AI_BRIEF.md +0 -2
  289. package/IMPLEMENTATION/RFC-0068/FILES.md +0 -2
  290. package/IMPLEMENTATION/RFC-0068/TASKS.md +0 -4
  291. package/IMPLEMENTATION/RFC-0068/TESTS.md +0 -3
  292. package/IMPLEMENTATION/RFC-0069/ACCEPTANCE_CRITERIA.md +0 -2
  293. package/IMPLEMENTATION/RFC-0069/AI_BRIEF.md +0 -2
  294. package/IMPLEMENTATION/RFC-0069/FILES.md +0 -2
  295. package/IMPLEMENTATION/RFC-0069/TASKS.md +0 -4
  296. package/IMPLEMENTATION/RFC-0069/TESTS.md +0 -3
  297. package/IMPLEMENTATION/RFC-0070/ACCEPTANCE_CRITERIA.md +0 -2
  298. package/IMPLEMENTATION/RFC-0070/AI_BRIEF.md +0 -2
  299. package/IMPLEMENTATION/RFC-0070/FILES.md +0 -2
  300. package/IMPLEMENTATION/RFC-0070/TASKS.md +0 -4
  301. package/IMPLEMENTATION/RFC-0070/TESTS.md +0 -3
  302. package/IMPLEMENTATION/RFC-0071/ACCEPTANCE_CRITERIA.md +0 -2
  303. package/IMPLEMENTATION/RFC-0071/AI_BRIEF.md +0 -2
  304. package/IMPLEMENTATION/RFC-0071/FILES.md +0 -2
  305. package/IMPLEMENTATION/RFC-0071/TASKS.md +0 -4
  306. package/IMPLEMENTATION/RFC-0071/TESTS.md +0 -3
  307. package/IMPLEMENTATION/RFC-0072/ACCEPTANCE_CRITERIA.md +0 -2
  308. package/IMPLEMENTATION/RFC-0072/AI_BRIEF.md +0 -2
  309. package/IMPLEMENTATION/RFC-0072/FILES.md +0 -2
  310. package/IMPLEMENTATION/RFC-0072/TASKS.md +0 -4
  311. package/IMPLEMENTATION/RFC-0072/TESTS.md +0 -3
  312. package/IMPLEMENTATION/RFC-0073/ACCEPTANCE_CRITERIA.md +0 -2
  313. package/IMPLEMENTATION/RFC-0073/AI_BRIEF.md +0 -2
  314. package/IMPLEMENTATION/RFC-0073/FILES.md +0 -2
  315. package/IMPLEMENTATION/RFC-0073/TASKS.md +0 -4
  316. package/IMPLEMENTATION/RFC-0073/TESTS.md +0 -3
  317. package/IMPLEMENTATION/RFC-0074/ACCEPTANCE_CRITERIA.md +0 -2
  318. package/IMPLEMENTATION/RFC-0074/AI_BRIEF.md +0 -17
  319. package/IMPLEMENTATION/RFC-0074/FILES.md +0 -2
  320. package/IMPLEMENTATION/RFC-0074/TASKS.md +0 -4
  321. package/IMPLEMENTATION/RFC-0074/TESTS.md +0 -3
  322. package/IMPLEMENTATION/RFC-0075/ACCEPTANCE_CRITERIA.md +0 -2
  323. package/IMPLEMENTATION/RFC-0075/AI_BRIEF.md +0 -2
  324. package/IMPLEMENTATION/RFC-0075/FILES.md +0 -2
  325. package/IMPLEMENTATION/RFC-0075/TASKS.md +0 -4
  326. package/IMPLEMENTATION/RFC-0075/TESTS.md +0 -3
  327. package/IMPLEMENTATION/RFC-0076/ACCEPTANCE_CRITERIA.md +0 -2
  328. package/IMPLEMENTATION/RFC-0076/AI_BRIEF.md +0 -2
  329. package/IMPLEMENTATION/RFC-0076/FILES.md +0 -2
  330. package/IMPLEMENTATION/RFC-0076/TASKS.md +0 -4
  331. package/IMPLEMENTATION/RFC-0076/TESTS.md +0 -3
  332. package/IMPLEMENTATION/RFC-0077/ACCEPTANCE_CRITERIA.md +0 -2
  333. package/IMPLEMENTATION/RFC-0077/AI_BRIEF.md +0 -2
  334. package/IMPLEMENTATION/RFC-0077/FILES.md +0 -2
  335. package/IMPLEMENTATION/RFC-0077/TASKS.md +0 -4
  336. package/IMPLEMENTATION/RFC-0077/TESTS.md +0 -3
  337. package/IMPLEMENTATION/RFC-0078/ACCEPTANCE_CRITERIA.md +0 -2
  338. package/IMPLEMENTATION/RFC-0078/AI_BRIEF.md +0 -17
  339. package/IMPLEMENTATION/RFC-0078/FILES.md +0 -2
  340. package/IMPLEMENTATION/RFC-0078/TASKS.md +0 -4
  341. package/IMPLEMENTATION/RFC-0078/TESTS.md +0 -3
  342. package/IMPLEMENTATION/RFC-0079/ACCEPTANCE_CRITERIA.md +0 -2
  343. package/IMPLEMENTATION/RFC-0079/AI_BRIEF.md +0 -7
  344. package/IMPLEMENTATION/RFC-0079/FILES.md +0 -2
  345. package/IMPLEMENTATION/RFC-0079/TASKS.md +0 -4
  346. package/IMPLEMENTATION/RFC-0079/TESTS.md +0 -3
  347. package/IMPLEMENTATION/RFC-0080/ACCEPTANCE_CRITERIA.md +0 -2
  348. package/IMPLEMENTATION/RFC-0080/AI_BRIEF.md +0 -2
  349. package/IMPLEMENTATION/RFC-0080/FILES.md +0 -2
  350. package/IMPLEMENTATION/RFC-0080/TASKS.md +0 -4
  351. package/IMPLEMENTATION/RFC-0080/TESTS.md +0 -3
  352. package/IMPLEMENTATION/RFC-0081/ACCEPTANCE_CRITERIA.md +0 -2
  353. package/IMPLEMENTATION/RFC-0081/AI_BRIEF.md +0 -2
  354. package/IMPLEMENTATION/RFC-0081/FILES.md +0 -2
  355. package/IMPLEMENTATION/RFC-0081/TASKS.md +0 -4
  356. package/IMPLEMENTATION/RFC-0081/TESTS.md +0 -3
  357. package/IMPLEMENTATION/RFC-0082/ACCEPTANCE_CRITERIA.md +0 -2
  358. package/IMPLEMENTATION/RFC-0082/AI_BRIEF.md +0 -2
  359. package/IMPLEMENTATION/RFC-0082/FILES.md +0 -2
  360. package/IMPLEMENTATION/RFC-0082/TASKS.md +0 -4
  361. package/IMPLEMENTATION/RFC-0082/TESTS.md +0 -3
  362. package/IMPLEMENTATION/RFC-0083/ACCEPTANCE_CRITERIA.md +0 -2
  363. package/IMPLEMENTATION/RFC-0083/AI_BRIEF.md +0 -2
  364. package/IMPLEMENTATION/RFC-0083/FILES.md +0 -2
  365. package/IMPLEMENTATION/RFC-0083/TASKS.md +0 -4
  366. package/IMPLEMENTATION/RFC-0083/TESTS.md +0 -3
  367. package/IMPLEMENTATION/RFC-0084/ACCEPTANCE_CRITERIA.md +0 -2
  368. package/IMPLEMENTATION/RFC-0084/AI_BRIEF.md +0 -2
  369. package/IMPLEMENTATION/RFC-0084/FILES.md +0 -2
  370. package/IMPLEMENTATION/RFC-0084/TASKS.md +0 -4
  371. package/IMPLEMENTATION/RFC-0084/TESTS.md +0 -3
  372. package/IMPLEMENTATION/RFC-0085/ACCEPTANCE_CRITERIA.md +0 -2
  373. package/IMPLEMENTATION/RFC-0085/AI_BRIEF.md +0 -2
  374. package/IMPLEMENTATION/RFC-0085/FILES.md +0 -2
  375. package/IMPLEMENTATION/RFC-0085/TASKS.md +0 -4
  376. package/IMPLEMENTATION/RFC-0085/TESTS.md +0 -3
  377. package/IMPLEMENTATION/RFC-0086/ACCEPTANCE_CRITERIA.md +0 -2
  378. package/IMPLEMENTATION/RFC-0086/AI_BRIEF.md +0 -2
  379. package/IMPLEMENTATION/RFC-0086/FILES.md +0 -2
  380. package/IMPLEMENTATION/RFC-0086/TASKS.md +0 -4
  381. package/IMPLEMENTATION/RFC-0086/TESTS.md +0 -3
  382. package/IMPLEMENTATION/RFC-0087/ACCEPTANCE_CRITERIA.md +0 -2
  383. package/IMPLEMENTATION/RFC-0087/AI_BRIEF.md +0 -2
  384. package/IMPLEMENTATION/RFC-0087/FILES.md +0 -2
  385. package/IMPLEMENTATION/RFC-0087/TASKS.md +0 -4
  386. package/IMPLEMENTATION/RFC-0087/TESTS.md +0 -3
  387. package/IMPLEMENTATION/RFC-0088/ACCEPTANCE_CRITERIA.md +0 -2
  388. package/IMPLEMENTATION/RFC-0088/AI_BRIEF.md +0 -2
  389. package/IMPLEMENTATION/RFC-0088/FILES.md +0 -2
  390. package/IMPLEMENTATION/RFC-0088/TASKS.md +0 -4
  391. package/IMPLEMENTATION/RFC-0088/TESTS.md +0 -3
  392. package/IMPLEMENTATION/RFC-0089/ACCEPTANCE_CRITERIA.md +0 -2
  393. package/IMPLEMENTATION/RFC-0089/AI_BRIEF.md +0 -2
  394. package/IMPLEMENTATION/RFC-0089/FILES.md +0 -2
  395. package/IMPLEMENTATION/RFC-0089/TASKS.md +0 -4
  396. package/IMPLEMENTATION/RFC-0089/TESTS.md +0 -3
  397. package/IMPLEMENTATION/RFC-0090/ACCEPTANCE_CRITERIA.md +0 -2
  398. package/IMPLEMENTATION/RFC-0090/AI_BRIEF.md +0 -2
  399. package/IMPLEMENTATION/RFC-0090/FILES.md +0 -2
  400. package/IMPLEMENTATION/RFC-0090/TASKS.md +0 -4
  401. package/IMPLEMENTATION/RFC-0090/TESTS.md +0 -3
  402. package/IMPLEMENTATION/RFC-0091/ACCEPTANCE_CRITERIA.md +0 -2
  403. package/IMPLEMENTATION/RFC-0091/AI_BRIEF.md +0 -2
  404. package/IMPLEMENTATION/RFC-0091/FILES.md +0 -2
  405. package/IMPLEMENTATION/RFC-0091/TASKS.md +0 -4
  406. package/IMPLEMENTATION/RFC-0091/TESTS.md +0 -3
  407. package/IMPLEMENTATION/RFC-0092/ACCEPTANCE_CRITERIA.md +0 -2
  408. package/IMPLEMENTATION/RFC-0092/AI_BRIEF.md +0 -20
  409. package/IMPLEMENTATION/RFC-0092/FILES.md +0 -2
  410. package/IMPLEMENTATION/RFC-0092/TASKS.md +0 -4
  411. package/IMPLEMENTATION/RFC-0092/TESTS.md +0 -3
  412. package/IMPLEMENTATION/RFC-0093/ACCEPTANCE_CRITERIA.md +0 -2
  413. package/IMPLEMENTATION/RFC-0093/AI_BRIEF.md +0 -22
  414. package/IMPLEMENTATION/RFC-0093/FILES.md +0 -2
  415. package/IMPLEMENTATION/RFC-0093/TASKS.md +0 -4
  416. package/IMPLEMENTATION/RFC-0093/TESTS.md +0 -3
  417. package/IMPLEMENTATION/RFC-0094/ACCEPTANCE_CRITERIA.md +0 -2
  418. package/IMPLEMENTATION/RFC-0094/AI_BRIEF.md +0 -2
  419. package/IMPLEMENTATION/RFC-0094/FILES.md +0 -2
  420. package/IMPLEMENTATION/RFC-0094/TASKS.md +0 -4
  421. package/IMPLEMENTATION/RFC-0094/TESTS.md +0 -3
  422. package/IMPLEMENTATION/RFC-0095/ACCEPTANCE_CRITERIA.md +0 -2
  423. package/IMPLEMENTATION/RFC-0095/AI_BRIEF.md +0 -2
  424. package/IMPLEMENTATION/RFC-0095/FILES.md +0 -2
  425. package/IMPLEMENTATION/RFC-0095/TASKS.md +0 -4
  426. package/IMPLEMENTATION/RFC-0095/TESTS.md +0 -3
  427. package/IMPLEMENTATION/RFC-0096/ACCEPTANCE_CRITERIA.md +0 -2
  428. package/IMPLEMENTATION/RFC-0096/AI_BRIEF.md +0 -2
  429. package/IMPLEMENTATION/RFC-0096/FILES.md +0 -2
  430. package/IMPLEMENTATION/RFC-0096/TASKS.md +0 -4
  431. package/IMPLEMENTATION/RFC-0096/TESTS.md +0 -3
  432. package/IMPLEMENTATION/RFC-0097/ACCEPTANCE_CRITERIA.md +0 -2
  433. package/IMPLEMENTATION/RFC-0097/AI_BRIEF.md +0 -2
  434. package/IMPLEMENTATION/RFC-0097/FILES.md +0 -2
  435. package/IMPLEMENTATION/RFC-0097/TASKS.md +0 -4
  436. package/IMPLEMENTATION/RFC-0097/TESTS.md +0 -3
  437. package/IMPLEMENTATION/RFC-0098/ACCEPTANCE_CRITERIA.md +0 -2
  438. package/IMPLEMENTATION/RFC-0098/AI_BRIEF.md +0 -2
  439. package/IMPLEMENTATION/RFC-0098/FILES.md +0 -2
  440. package/IMPLEMENTATION/RFC-0098/TASKS.md +0 -4
  441. package/IMPLEMENTATION/RFC-0098/TESTS.md +0 -3
  442. package/IMPLEMENTATION/RFC-0099/ACCEPTANCE_CRITERIA.md +0 -2
  443. package/IMPLEMENTATION/RFC-0099/AI_BRIEF.md +0 -2
  444. package/IMPLEMENTATION/RFC-0099/FILES.md +0 -2
  445. package/IMPLEMENTATION/RFC-0099/TASKS.md +0 -4
  446. package/IMPLEMENTATION/RFC-0099/TESTS.md +0 -3
  447. package/IMPLEMENTATION/RFC-0100/ACCEPTANCE_CRITERIA.md +0 -2
  448. package/IMPLEMENTATION/RFC-0100/AI_BRIEF.md +0 -2
  449. package/IMPLEMENTATION/RFC-0100/FILES.md +0 -2
  450. package/IMPLEMENTATION/RFC-0100/TASKS.md +0 -4
  451. package/IMPLEMENTATION/RFC-0100/TESTS.md +0 -3
  452. package/IMPLEMENTATION/RFC-0101/ACCEPTANCE_CRITERIA.md +0 -74
  453. package/IMPLEMENTATION/RFC-0101/AI_BRIEF.md +0 -80
  454. package/IMPLEMENTATION/RFC-0101/FILES.md +0 -82
  455. package/IMPLEMENTATION/RFC-0101/TASKS.md +0 -92
  456. package/IMPLEMENTATION/RFC-0101/TESTS.md +0 -127
  457. package/IMPLEMENTATION/RFC-0102/ACCEPTANCE_CRITERIA.md +0 -33
  458. package/IMPLEMENTATION/RFC-0102/AI_BRIEF.md +0 -34
  459. package/IMPLEMENTATION/RFC-0102/FILES.md +0 -73
  460. package/IMPLEMENTATION/RFC-0102/TASKS.md +0 -75
  461. package/IMPLEMENTATION/RFC-0102/TESTS.md +0 -78
  462. package/IMPLEMENTATION/RFC-0103/ACCEPTANCE_CRITERIA.md +0 -45
  463. package/IMPLEMENTATION/RFC-0103/AI_BRIEF.md +0 -46
  464. package/IMPLEMENTATION/RFC-0103/FILES.md +0 -121
  465. package/IMPLEMENTATION/RFC-0103/TASKS.md +0 -97
  466. package/IMPLEMENTATION/RFC-0103/TESTS.md +0 -118
  467. package/IMPLEMENTATION/RFC-0104/ACCEPTANCE_CRITERIA.md +0 -29
  468. package/IMPLEMENTATION/RFC-0104/FILES.md +0 -33
  469. package/IMPLEMENTATION/RFC-0105/ACCEPTANCE_CRITERIA.md +0 -29
  470. package/IMPLEMENTATION/RFC-0105/FILES.md +0 -41
  471. package/IMPLEMENTATION/RFC-0106/ACCEPTANCE_CRITERIA.md +0 -29
  472. package/IMPLEMENTATION/RFC-0106/FILES.md +0 -43
  473. package/RFC/0001_LOOP_RUNTIME.md +0 -14
  474. package/RFC/0002_PROVIDER_ADAPTER.md +0 -3
  475. package/RFC/0003_QUOTA_MANAGER.md +0 -3
  476. package/RFC/0004_PLAYWRIGHT_ADAPTER.md +0 -3
  477. package/RFC/0005_GIT_WORKTREE.md +0 -3
  478. package/RFC/0006_CHECKPOINT_MANAGER.md +0 -56
  479. package/RFC/0007_SCHEDULER.md +0 -32
  480. package/RFC/0008_PROVIDER_ROUTER.md +0 -44
  481. package/RFC/0009_SHARED_CONTEXT.md +0 -32
  482. package/RFC/0010_CONTEXT_WINDOW_MANAGER.md +0 -50
  483. package/RFC/0011_SHARED_BLACKBOARD.md +0 -42
  484. package/RFC/0012_AGENT_HANDOFF_PROTOCOL.md +0 -41
  485. package/RFC/0013_E2E_TEST_ENGINE.md +0 -42
  486. package/RFC/0014_PROJECT_DETECTOR_AND_TEST_DATA_ENGINE.md +0 -35
  487. package/RFC/0015_JOB_STATE_MACHINE.md +0 -45
  488. package/RFC/0016_TASK_GRAPH.md +0 -31
  489. package/RFC/0017_MASTER_PLANNER.md +0 -32
  490. package/RFC/0018_REPAIR_ENGINE.md +0 -36
  491. package/RFC/0019_AUTO_COMPACT_AND_CONTINUE.md +0 -51
  492. package/RFC/0020_OUTPUT_TOKEN_LIMIT_HANDLER.md +0 -49
  493. package/RFC/0021_PARTIAL_RESPONSE_RECOVERY.md +0 -49
  494. package/RFC/0022_NOTIFICATION_CENTER.md +0 -47
  495. package/RFC/0023_LOCAL_BROWSER_AGENT.md +0 -67
  496. package/RFC/0024_LOCAL_RUNTIME_AGENT.md +0 -3
  497. package/RFC/0025_COMMAND_EXECUTOR.md +0 -3
  498. package/RFC/0026_WORKSPACE_MANAGER.md +0 -3
  499. package/RFC/0027_RUNTIME_API.md +0 -3
  500. package/RFC/0028_POLICY_ENGINE.md +0 -3
  501. package/RFC/0029_DEEPAGENTS_ADAPTER.md +0 -2
  502. package/RFC/0030_AGENT_WORKER_INTERFACE.md +0 -2
  503. package/RFC/0031_PROVIDER_ADAPTER_SDK.md +0 -171
  504. package/RFC/0032_CHECKPOINT_ENGINE.md +0 -217
  505. package/RFC/0033_SESSION_MANAGER.md +0 -262
  506. package/RFC/0034_OBSERVABILITY.md +0 -416
  507. package/RFC/0035_ROADMAP_V1.md +0 -295
  508. package/RFC/0036_CODE_REVIEW_ENGINE.md +0 -430
  509. package/RFC/0037_CODE_GENERATION_PIPELINE.md +0 -504
  510. package/RFC/0038_FRAMEWORK_DETECTOR.md +0 -466
  511. package/RFC/0039_TEST_DATA_GENERATOR.md +0 -504
  512. package/RFC/0040_FRAMEWORK_PLUGIN_SDK.md +0 -543
  513. package/RFC/0041_PROMPT_COMPILER.md +0 -232
  514. package/RFC/0042_CONTEXT_COMPILER.md +0 -216
  515. package/RFC/0043_REQUIREMENT_COMPILER.md +0 -211
  516. package/RFC/0044_TASK_COMPILER.md +0 -207
  517. package/RFC/0045_PROJECT_ANALYZER.md +0 -246
  518. package/RFC/0046_DEPENDENCY_ANALYZER.md +0 -14
  519. package/RFC/0047_REPOSITORY_KNOWLEDGE_GRAPH.md +0 -14
  520. package/RFC/0048_CODE_MERGE_ENGINE.md +0 -14
  521. package/RFC/0049_CONFLICT_RESOLUTION_ENGINE.md +0 -14
  522. package/RFC/0050_DOCUMENTATION_GENERATOR.md +0 -14
  523. package/RFC/0051_CAPABILITY_REGISTRY.md +0 -144
  524. package/RFC/0052_SKILL_REGISTRY.md +0 -167
  525. package/RFC/0053_MODEL_REGISTRY.md +0 -214
  526. package/RFC/0054_PROVIDER_ROUTER.md +0 -239
  527. package/RFC/0055_COST_OPTIMIZER.md +0 -285
  528. package/RFC/0056_PERFORMANCE_OPTIMIZER.md +0 -118
  529. package/RFC/0057_EVALUATION_ENGINE.md +0 -116
  530. package/RFC/0058_LEARNING_ENGINE.md +0 -113
  531. package/RFC/0059_EXPERIENCE_REPLAY.md +0 -107
  532. package/RFC/0060_MEMORY_ENGINE_OKF.md +0 -152
  533. package/RFC/0061_FRAPPE_PLUGIN.md +0 -9
  534. package/RFC/0062_NEXTJS_PLUGIN.md +0 -9
  535. package/RFC/0063_REACT_VITE_PLUGIN.md +0 -9
  536. package/RFC/0064_DJANGO_PLUGIN.md +0 -9
  537. package/RFC/0065_LARAVEL_PLUGIN.md +0 -9
  538. package/RFC/0066_GENERIC_WEB_PLUGIN.md +0 -24
  539. package/RFC/0067_CLI_PLUGIN_SDK.md +0 -101
  540. package/RFC/0068_MCP_ADAPTER.md +0 -114
  541. package/RFC/0069_GOOGLE_A2A_ADAPTER.md +0 -139
  542. package/RFC/0070_OPENAI_CODEX_ADAPTER.md +0 -134
  543. package/RFC/0071_REQUIREMENT_INTAKE.md +0 -95
  544. package/RFC/0072_PROJECT_BOOTSTRAP.md +0 -82
  545. package/RFC/0073_ARCHITECTURE_GENERATOR.md +0 -85
  546. package/RFC/0074_SPRINT_PLANNER.md +0 -61
  547. package/RFC/0075_MILESTONE_MANAGER.md +0 -58
  548. package/RFC/0076_BACKLOG_MANAGER.md +0 -24
  549. package/RFC/0077_HUMAN_APPROVAL_GATE.md +0 -24
  550. package/RFC/0078_RELEASE_MANAGER.md +0 -24
  551. package/RFC/0079_VERSION_MANAGER.md +0 -24
  552. package/RFC/0080_DEPLOYMENT_PIPELINE.md +0 -24
  553. package/RFC/0081_MULTI_USER_RUNTIME.md +0 -24
  554. package/RFC/0082_RBAC.md +0 -24
  555. package/RFC/0083_AUDIT_TRAIL.md +0 -24
  556. package/RFC/0084_DASHBOARD.md +0 -24
  557. package/RFC/0085_ANALYTICS.md +0 -24
  558. package/RFC/0086_DISTRIBUTED_RUNTIME.md +0 -24
  559. package/RFC/0087_CLUSTER_MANAGER.md +0 -24
  560. package/RFC/0088_RUNTIME_FEDERATION.md +0 -24
  561. package/RFC/0089_HIGH_AVAILABILITY.md +0 -24
  562. package/RFC/0090_DISASTER_RECOVERY.md +0 -24
  563. package/RFC/0091_AUTONOMOUS_ARCHITECTURE_REVIEW.md +0 -24
  564. package/RFC/0092_AUTONOMOUS_REFACTORING.md +0 -24
  565. package/RFC/0093_AUTONOMOUS_BUG_FIXING.md +0 -24
  566. package/RFC/0094_AUTONOMOUS_PERFORMANCE_TUNING.md +0 -24
  567. package/RFC/0095_AUTONOMOUS_SECURITY_REVIEW.md +0 -24
  568. package/RFC/0096_AUTONOMOUS_COST_OPTIMIZATION.md +0 -24
  569. package/RFC/0097_AUTONOMOUS_DOCUMENTATION.md +0 -24
  570. package/RFC/0098_AUTONOMOUS_KNOWLEDGE_MANAGEMENT.md +0 -24
  571. package/RFC/0099_RUNTIME_EVOLUTION_ENGINE.md +0 -24
  572. package/RFC/0100_SELF_DEVELOPING_RUNTIME.md +0 -24
  573. package/RFC/0101_AUTONOMOUS_OPERATIONS_RUNTIME.md +0 -1105
  574. package/RFC/0102_CONTEXT_ENGINEERING_PIPELINE.md +0 -508
  575. package/RFC/0103_SESSION_EVENT_RUNTIME_AGENT_COMMUNICATION_LAYER.md +0 -616
  576. package/RFC/0104_DISTRIBUTED_AGENT_COMMUNICATION.md +0 -143
  577. package/RFC/0105_DISTRIBUTED_KNOWLEDGE_RETRIEVAL.md +0 -301
  578. package/RFC/0106_KNOWLEDGE_GRAPH_PROVENANCE.md +0 -368
  579. package/RFC/README.md +0 -11
  580. package/packages/event-bus/dist/tsconfig.tsbuildinfo +0 -1
  581. package/packages/provider-adapter-sdk/dist/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,268 @@
1
+ /**
2
+ * Config Capture Extension
3
+ *
4
+ * Automatically detects API responses containing constant configuration values
5
+ * (DNS records, routes, feature flags, etc.) and logs a suggestion to document
6
+ * them to AGENTS.md.
7
+ *
8
+ * Pattern: Like todo-bd-sync, this listens to tool execution end events
9
+ * and logs when constant config is detected. The agent decides whether to
10
+ * document based on context.
11
+ *
12
+ * Usage:
13
+ * import { registerConfigCapture } from "@moocoding/config-capture";
14
+ * registerConfigCapture(pi);
15
+ */
16
+ // ─── Config Type Detection ────────────────────────────────────────────────────
17
+ const DNS_PATTERNS = [
18
+ "zone_id",
19
+ "zoneId",
20
+ "dns_record",
21
+ "dns-record",
22
+ "cloudflare",
23
+ "name_servers",
24
+ "@",
25
+ "ttl",
26
+ "proxied",
27
+ "record_type",
28
+ " a ",
29
+ "aaaa",
30
+ "cname",
31
+ "txt",
32
+ "mx",
33
+ "ns",
34
+ "spf",
35
+ ];
36
+ const ROUTE_PATTERNS = [
37
+ "routes",
38
+ "endpoints",
39
+ "api_routes",
40
+ "api_rout",
41
+ "path",
42
+ "method",
43
+ " get ",
44
+ " post ",
45
+ " put ",
46
+ " delete ",
47
+ " patch ",
48
+ "/api/",
49
+ "route_path",
50
+ ];
51
+ const FEATURE_FLAG_PATTERNS = [
52
+ "feature_flags",
53
+ "feature-flags",
54
+ "feature_toggle",
55
+ "feature-toggle",
56
+ "enabled",
57
+ "disabled",
58
+ "rollout",
59
+ "variants",
60
+ ];
61
+ const INTEGRATION_PATTERNS = [
62
+ "integration_id",
63
+ "integrationId",
64
+ "webhook_url",
65
+ "webhookUrl",
66
+ "webhook_id",
67
+ "redirect_url",
68
+ "account_id",
69
+ "project_id",
70
+ ];
71
+ // ─── Detection Logic ─────────────────────────────────────────────────────────
72
+ /**
73
+ * Detect if a tool result contains constant configuration data
74
+ */
75
+ export function detectConfig(result) {
76
+ if (!result || typeof result !== "object") {
77
+ return { detected: false, configType: null, confidence: "low" };
78
+ }
79
+ const resultStr = JSON.stringify(result).toLowerCase();
80
+ const scores = [
81
+ { type: "dns_records", score: countMatches(resultStr, DNS_PATTERNS) },
82
+ { type: "routes", score: countMatches(resultStr, ROUTE_PATTERNS) },
83
+ { type: "feature_flags", score: countMatches(resultStr, FEATURE_FLAG_PATTERNS) },
84
+ { type: "integration_ids", score: countMatches(resultStr, INTEGRATION_PATTERNS) },
85
+ ];
86
+ // Sort by score descending
87
+ scores.sort((a, b) => b.score - a.score);
88
+ const best = scores[0];
89
+ if (best.score < 2) {
90
+ return { detected: false, configType: null, confidence: "low" };
91
+ }
92
+ // Check for array of objects (typical config structure)
93
+ const hasArrayOfObjects = detectArrayOfObjects(result);
94
+ let confidence = "low";
95
+ if (best.score >= 4 || (best.score >= 2 && hasArrayOfObjects)) {
96
+ confidence = "high";
97
+ }
98
+ else if (best.score >= 2) {
99
+ confidence = "medium";
100
+ }
101
+ // Extract sample data for logging
102
+ const sampleData = extractSampleData(result, best.type);
103
+ return {
104
+ detected: true,
105
+ configType: best.type,
106
+ confidence,
107
+ sampleData,
108
+ };
109
+ }
110
+ function countMatches(text, patterns) {
111
+ return patterns.filter((p) => text.includes(p.toLowerCase())).length;
112
+ }
113
+ function detectArrayOfObjects(result) {
114
+ if (Array.isArray(result)) {
115
+ return result.some((item) => typeof item === "object" && item !== null);
116
+ }
117
+ if (typeof result === "object" && result !== null) {
118
+ const values = Object.values(result);
119
+ return values.some((v) => Array.isArray(v) && v.length > 0 && typeof v[0] === "object");
120
+ }
121
+ return false;
122
+ }
123
+ function extractSampleData(result, _type) {
124
+ if (!Array.isArray(result) || result.length === 0)
125
+ return undefined;
126
+ const sample = result[0];
127
+ if (typeof sample !== "object" || sample === null)
128
+ return undefined;
129
+ const entries = Object.entries(sample).slice(0, 5);
130
+ if (entries.length === 0)
131
+ return undefined;
132
+ const lines = entries.map(([k, v]) => `${k}: ${JSON.stringify(v)}`);
133
+ return lines.join(", ");
134
+ }
135
+ // ─── Privacy Filter ────────────────────────────────────────────────────────────
136
+ const SENSITIVE_PATTERNS = [
137
+ "token",
138
+ "secret",
139
+ "password",
140
+ "key",
141
+ "credential",
142
+ "auth",
143
+ "api_key",
144
+ "apiKey",
145
+ "bearer",
146
+ "authorization",
147
+ "private_",
148
+ "private-",
149
+ ];
150
+ /**
151
+ * Check if a field name is sensitive (should not be documented)
152
+ */
153
+ export function isSensitiveField(fieldName) {
154
+ const lower = fieldName.toLowerCase();
155
+ return SENSITIVE_PATTERNS.some((p) => lower.includes(p));
156
+ }
157
+ /**
158
+ * Remove sensitive fields from a config object
159
+ */
160
+ export function removeSensitiveFields(config) {
161
+ const sanitized = {};
162
+ for (const [key, value] of Object.entries(config)) {
163
+ if (!isSensitiveField(key)) {
164
+ sanitized[key] = value;
165
+ }
166
+ }
167
+ return sanitized;
168
+ }
169
+ /**
170
+ * Format detected config for AGENTS.md
171
+ */
172
+ export function formatForAgentsMd(detection, sampleData) {
173
+ const lines = [];
174
+ switch (detection.configType) {
175
+ case "dns_records":
176
+ lines.push("### DNS Records");
177
+ lines.push("");
178
+ lines.push("| Name | Type | Content | Notes |");
179
+ lines.push("|------|------|---------|-------|");
180
+ lines.push("| ... | ... | ... | ... |");
181
+ lines.push("");
182
+ lines.push("*Source: Auto-captured from API*");
183
+ break;
184
+ case "routes":
185
+ lines.push("### API Routes");
186
+ lines.push("");
187
+ lines.push("- `GET /api/resource` - Description");
188
+ lines.push("- `POST /api/resource` - Create");
189
+ lines.push("");
190
+ lines.push("*Source: Auto-captured from API*");
191
+ break;
192
+ case "feature_flags":
193
+ lines.push("### Feature Flags");
194
+ lines.push("");
195
+ lines.push("| Flag | Enabled | Notes |");
196
+ lines.push("|------|---------|-------|");
197
+ lines.push("| flag_name | true/false | ... |");
198
+ lines.push("");
199
+ lines.push("*Source: Auto-captured from API*");
200
+ break;
201
+ default:
202
+ lines.push("### Configuration");
203
+ lines.push("");
204
+ if (sampleData) {
205
+ lines.push("```");
206
+ lines.push(sampleData);
207
+ lines.push("```");
208
+ }
209
+ lines.push("");
210
+ lines.push("*Source: Auto-captured from API*");
211
+ }
212
+ return lines.join("\n");
213
+ }
214
+ const DEFAULT_CONFIG = {
215
+ debug: false,
216
+ minConfidence: "medium",
217
+ };
218
+ /**
219
+ * Register the config-capture extension
220
+ */
221
+ export function registerConfigCapture(pi, config = {}) {
222
+ const cfg = { ...DEFAULT_CONFIG, ...config };
223
+ // Track if we've already suggested documenting this config in this session
224
+ const documentedConfigs = new Set();
225
+ // Listen to tool execution end
226
+ pi.on("tool_execution_end", (event) => {
227
+ // Skip errors
228
+ if (event.isError)
229
+ return;
230
+ // Skip non-API tools (focus on bash/curl/http calls)
231
+ const apiTools = ["bash", "http_request", "fetch", "curl"];
232
+ if (!apiTools.includes(event.toolName))
233
+ return;
234
+ // Detect config in result
235
+ const detection = detectConfig(event.result);
236
+ if (!detection.detected)
237
+ return;
238
+ // Check confidence threshold
239
+ const confidenceLevels = { low: 0, medium: 1, high: 2 };
240
+ const minLevel = confidenceLevels[cfg.minConfidence];
241
+ const currentLevel = confidenceLevels[detection.confidence];
242
+ if (currentLevel < minLevel)
243
+ return;
244
+ // Create a unique key for this config type + rough content hash
245
+ const contentStr = JSON.stringify(event.result).slice(0, 100);
246
+ const configKey = `${detection.configType}-${contentStr}`;
247
+ // Skip if already suggested in this session
248
+ if (documentedConfigs.has(configKey))
249
+ return;
250
+ // Log detection
251
+ if (cfg.debug) {
252
+ console.log(`[config-capture] Detected ${detection.configType} (${detection.confidence})`);
253
+ console.log(`[config-capture] Sample: ${detection.sampleData}`);
254
+ }
255
+ // Mark as documented
256
+ documentedConfigs.add(configKey);
257
+ // Log the suggestion - agent will notice this
258
+ console.log(`[config-capture] Config detected: ${detection.configType}`);
259
+ console.log(`[config-capture] Confidence: ${detection.confidence}`);
260
+ console.log(`[config-capture] Sample: ${detection.sampleData?.slice(0, 200)}`);
261
+ // Suggest action
262
+ const actionMsg = `[config-capture] Consider documenting this to AGENTS.md section "Discovered Configuration"`;
263
+ console.log(actionMsg);
264
+ });
265
+ console.log("[config-capture] Started - detecting API config responses");
266
+ }
267
+ // Default export
268
+ export default registerConfigCapture;
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Atomic file write — write to temp, fsync, then rename.
3
+ *
4
+ * POSIX `rename(2)` is atomic — on partial-write crash, the prior target
5
+ * file remains valid. We pair this with `fsync(tempfile)` so the temp
6
+ * file's data is durable on disk before the rename.
7
+ *
8
+ * Permissions: `0o600` (owner R/W only) to keep the canonical cache
9
+ * owner-readable.
10
+ *
11
+ * Sec-001: Cookie values go into the file content. The caller is
12
+ * responsible for value-handling hygiene; this module just writes
13
+ * bytes. We do not log the content.
14
+ */
15
+ import { mkdirSync, openSync, writeSync, fsyncSync, closeSync, renameSync, chmodSync, } from "node:fs";
16
+ import { dirname, join } from "node:path";
17
+ import { randomBytes } from "node:crypto";
18
+ /**
19
+ * Atomically write `content` to `finalPath`.
20
+ *
21
+ * Steps:
22
+ * 1. mkdir -p the parent directory
23
+ * 2. write to <finalPath>.tmp.<rand> with mode 0o600
24
+ * 3. fsync the temp file
25
+ * 4. rename temp → final (atomic on POSIX)
26
+ * 5. chmod final to 0o600 (in case rename preserved looser perms)
27
+ *
28
+ * Throws if any step fails. The original `finalPath` is unchanged
29
+ * until step 4 succeeds.
30
+ */
31
+ export function atomicWriteFileSync(finalPath, content) {
32
+ mkdirSync(dirname(finalPath), { recursive: true });
33
+ const rand = randomBytes(6).toString("hex");
34
+ const tempPath = `${finalPath}.tmp.${rand}`;
35
+ let fd;
36
+ try {
37
+ fd = openSync(tempPath, "w", 0o600);
38
+ writeSync(fd, Buffer.from(content, "utf8"));
39
+ fsyncSync(fd);
40
+ }
41
+ finally {
42
+ if (fd !== undefined)
43
+ closeSync(fd);
44
+ }
45
+ renameSync(tempPath, finalPath);
46
+ // Belt-and-braces in case rename preserved a looser mode from an
47
+ // existing file on some systems.
48
+ try {
49
+ chmodSync(finalPath, 0o600);
50
+ }
51
+ catch {
52
+ // Filesystems that don't support chmod (e.g. FAT32) are not a
53
+ // target platform here — drop the error silently.
54
+ }
55
+ }
56
+ /**
57
+ * Compute the default cache path for a given provider, e.g.:
58
+ * defaultCachePathFor("minimax") → "~/.config/minimax-cookies.txt"
59
+ *
60
+ * The home directory is read via `process.env.HOME` so tests can
61
+ * override it.
62
+ */
63
+ export function defaultCachePathFor(provider) {
64
+ const home = process.env.HOME ?? "/tmp";
65
+ return join(home, ".config", `${provider}-cookies.txt`);
66
+ }
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Format detection — does the input look like Netscape or EditThisCookie JSON?
3
+ *
4
+ * Detection rule:
5
+ * - File extension `.json` AND first non-blank byte is `[` or `{` → JSON
6
+ * - File content has `# Netscape HTTP Cookie File` header OR
7
+ * ≥ 1 tab-separated 7-column row → Netscape
8
+ * - Otherwise → unknown
9
+ *
10
+ * Cookie VALUES are never copied into return values that get logged.
11
+ * Only the basename and a 64-char prefix of the first non-blank line.
12
+ */
13
+ import { basename } from "node:path";
14
+ const HEADER_RE = /^# Netscape HTTP Cookie File/im;
15
+ const MIN_TAB_COLS = 7;
16
+ /**
17
+ * Returns the basename only, never a path that could leak directory
18
+ * structure. Safe to log.
19
+ */
20
+ export function safeBasename(filePath) {
21
+ return basename(filePath);
22
+ }
23
+ /**
24
+ * Safely truncated preview of a file's content (for diagnostics).
25
+ * Strips cookie values to avoid leaking secrets.
26
+ *
27
+ * Heuristic: any line that has a tab-separated name=value pair,
28
+ * replace the value column with `<redacted>`.
29
+ */
30
+ export function safePreview(text, maxChars = 64) {
31
+ const firstLine = text
32
+ .split("\n")
33
+ .map((l) => l.trim())
34
+ .find((l) => l.length > 0) ?? "";
35
+ const redacted = firstLine
36
+ .split("\t")
37
+ .map((col, i) => (i >= 5 ? "<redacted>" : col))
38
+ .join("\t");
39
+ return redacted.length > maxChars
40
+ ? `${redacted.slice(0, maxChars)}…`
41
+ : redacted;
42
+ }
43
+ /**
44
+ * Detect the format of cookie file text.
45
+ */
46
+ export function detectFormat(text) {
47
+ if (typeof text !== "string" || text.length === 0)
48
+ return null;
49
+ const trimmed = text.trimStart();
50
+ const firstByte = trimmed[0];
51
+ // JSON heuristic — array or object at the top.
52
+ if (firstByte === "[" || firstByte === "{") {
53
+ return "edit-this-cookie-json";
54
+ }
55
+ // Netscape heuristic — header OR a tab-separated 7-column row.
56
+ if (HEADER_RE.test(text)) {
57
+ return "netscape";
58
+ }
59
+ const lines = text.split(/\r?\n/);
60
+ for (const line of lines) {
61
+ if (!line || (line.startsWith("#") && !line.startsWith("#HttpOnly_"))) {
62
+ continue;
63
+ }
64
+ const trimmedLine = line.startsWith("#HttpOnly_")
65
+ ? line.slice("#HttpOnly_".length)
66
+ : line;
67
+ const cols = trimmedLine.split("\t");
68
+ if (cols.length >= MIN_TAB_COLS) {
69
+ return "netscape";
70
+ }
71
+ }
72
+ return null;
73
+ }
74
+ /**
75
+ * Build a DetectedFile from a path and its text contents.
76
+ * Used by sync.ts after reading the file from disk.
77
+ */
78
+ export function buildDetectedFile(filePath, text) {
79
+ const format = detectFormat(text);
80
+ return {
81
+ path: filePath,
82
+ basename: safeBasename(filePath),
83
+ format,
84
+ text,
85
+ // No error if format is null — unknown format is a normal case.
86
+ };
87
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Cookie Sanitizer — public API.
3
+ *
4
+ * Forgiving input → strict canonical cache for downstream consumers
5
+ * (e.g. MiniMaxQuotaScraper reads only `~/.config/minimax-cookies.txt`).
6
+ *
7
+ * The package is provider-agnostic but currently shipping with:
8
+ * - filename hints: minimax, anthropic, openai, glm, openrouter
9
+ * - domain hints : the matching provider domains
10
+ *
11
+ * Inputs accepted (auto-detected per file):
12
+ * - Netscape HTTP Cookie File
13
+ * - EditThisCookie / Chrome devtools JSON export
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * import { sync, hasAnyCookieSource, CookieWatcher } from "@pi-harness/cookie-sanitizer";
18
+ *
19
+ * // One-shot sync.
20
+ * const result = sync();
21
+ * console.log(result.provider, result.cachePath, result.totalCookies);
22
+ *
23
+ * // Live updates.
24
+ * const watcher = new CookieWatcher({
25
+ * dropDir: "~/.pi-harness-runtime/cookies",
26
+ * onEvent: (e) => console.log(e),
27
+ * });
28
+ * watcher.start();
29
+ * ```
30
+ */
31
+ export { sync, hasAnyCookieSource, inferCachePath, enumerateDropFiles, readInputFile, DEFAULT_DROP_DIR, } from "./sync.js";
32
+ export { parseNetscape, serializeNetscape, } from "./parse-netscape.js";
33
+ export { parseEditThisCookieJson } from "./parse-json.js";
34
+ export { inferProvider, inferProviderFromFilename, inferProviderFromCookies, knownProviders, } from "./infer-provider.js";
35
+ export { normalize, domainMatchesProvider, isExpired, } from "./normalize.js";
36
+ export { detectFormat, buildDetectedFile, safeBasename, safePreview, } from "./detect-format.js";
37
+ export { atomicWriteFileSync, defaultCachePathFor, } from "./atomic-write.js";
38
+ export { CookieWatcher, createWatcher, defaultDropDir, } from "./watcher.js";
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Provider inference — figure out which provider a cookie dump belongs to
3
+ * without the user having to organize by subfolder.
4
+ *
5
+ * Three inference passes, first hit wins:
6
+ * 1. Filename hint (e.g. `minimax-*.txt`, `*minimax.json` → "minimax")
7
+ * 2. Dominant domain (≥ 80% of cookies on `*.minimax.io` → "minimax")
8
+ * 3. Nothing → null (caller will surface a friendly error)
9
+ *
10
+ * Provider hint from SyncOptions overrides all of the above.
11
+ */
12
+ const FILENAME_HINTS = [
13
+ { pattern: /minimax/i, provider: "minimax" },
14
+ { pattern: /anthropic|claude/i, provider: "anthropic" },
15
+ { pattern: /openai|gpt|chatgpt/i, provider: "openai" },
16
+ { pattern: /glm|z\.ai|zhipuai/i, provider: "glm" },
17
+ { pattern: /openrouter/i, provider: "openrouter" },
18
+ ];
19
+ const DOMAIN_HINTS = [
20
+ { pattern: /\.minimax\.io$|^minimax\.io$/i, provider: "minimax" },
21
+ { pattern: /\.anthropic\.com$|^anthropic\.com$/i, provider: "anthropic" },
22
+ {
23
+ pattern: /\.openai\.com$|^openai\.com$|\.chatgpt\.com$|^chatgpt\.com$/i,
24
+ provider: "openai",
25
+ },
26
+ {
27
+ pattern: /\.z\.ai$|^z\.ai$|\.zhipuai\.cn$|^zhipuai\.cn$/i,
28
+ provider: "glm",
29
+ },
30
+ { pattern: /\.openrouter\.ai$|^openrouter\.ai$/i, provider: "openrouter" },
31
+ ];
32
+ /** Returns the first provider whose filename pattern matches, or null. */
33
+ export function inferProviderFromFilename(filename) {
34
+ if (!filename)
35
+ return null;
36
+ for (const { pattern, provider } of FILENAME_HINTS) {
37
+ if (pattern.test(filename))
38
+ return provider;
39
+ }
40
+ return null;
41
+ }
42
+ /** Returns the provider whose domain is the dominant (≥ 80%) match. */
43
+ export function inferProviderFromCookies(cookies) {
44
+ if (!Array.isArray(cookies) || cookies.length === 0)
45
+ return null;
46
+ const counts = new Map();
47
+ let total = 0;
48
+ for (const c of cookies) {
49
+ if (!c.domain)
50
+ continue;
51
+ total += 1;
52
+ for (const { pattern, provider } of DOMAIN_HINTS) {
53
+ if (pattern.test(c.domain.toLowerCase())) {
54
+ counts.set(provider, (counts.get(provider) ?? 0) + 1);
55
+ break;
56
+ }
57
+ }
58
+ }
59
+ if (total === 0)
60
+ return null;
61
+ const threshold = Math.ceil(total * 0.8); // ≥ 80 %
62
+ let best = null;
63
+ for (const [provider, count] of counts) {
64
+ if (count >= threshold && (!best || count > best.count)) {
65
+ best = { provider, count };
66
+ }
67
+ }
68
+ return best?.provider ?? null;
69
+ }
70
+ /**
71
+ * Combined inference: hint → filename → dominant domain → null.
72
+ *
73
+ * If `filename` is provided it takes priority over domain inference
74
+ * (filename hints are explicit). Domain inference is the fallback.
75
+ */
76
+ export function inferProvider(filename, cookies, hint) {
77
+ if (hint)
78
+ return hint;
79
+ if (filename) {
80
+ const fromName = inferProviderFromFilename(filename);
81
+ if (fromName)
82
+ return fromName;
83
+ }
84
+ return inferProviderFromCookies(cookies);
85
+ }
86
+ /**
87
+ * Build a list of provider rules used by other parts of the package.
88
+ * Exposed for UI display (e.g. "which providers does this sanitizer know?").
89
+ */
90
+ export function knownProviders() {
91
+ const set = new Set();
92
+ for (const { provider } of FILENAME_HINTS)
93
+ set.add(provider);
94
+ return Array.from(set);
95
+ }
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Normalize step — dedupe, drop invalid/expired, set provider.
3
+ *
4
+ * Rules (applied in order):
5
+ * 1. Drop cookies with empty `name` or `value`.
6
+ * 2. Drop cookies whose domain doesn't match the inferred provider.
7
+ * 3. Drop expired cookies (expires in the past, not session).
8
+ * 4. Dedupe by `(domain, name)` — keep the LAST entry (most recent wins).
9
+ * 5. Mark each surviving cookie with the provider id.
10
+ *
11
+ * SEC-001: Cookie values are not touched here, but never logged.
12
+ */
13
+ /** Returns true if the cookie's domain matches the given provider's domain scope. */
14
+ export function domainMatchesProvider(domain, provider) {
15
+ if (!domain)
16
+ return false;
17
+ const d = domain.toLowerCase();
18
+ switch (provider) {
19
+ case "minimax":
20
+ return d === "minimax.io" || d.endsWith(".minimax.io");
21
+ case "anthropic":
22
+ return d === "anthropic.com" || d.endsWith(".anthropic.com");
23
+ case "openai":
24
+ return (d === "openai.com" ||
25
+ d.endsWith(".openai.com") ||
26
+ d === "chatgpt.com" ||
27
+ d.endsWith(".chatgpt.com"));
28
+ case "glm":
29
+ return (d === "z.ai" ||
30
+ d.endsWith(".z.ai") ||
31
+ d === "zhipuai.cn" ||
32
+ d.endsWith(".zhipuai.cn"));
33
+ case "openrouter":
34
+ return d === "openrouter.ai" || d.endsWith(".openrouter.ai");
35
+ default:
36
+ // Unknown provider — accept all and let downstream reject.
37
+ return true;
38
+ }
39
+ }
40
+ /** Returns true if the cookie is expired (in the past). Session cookies never expire. */
41
+ export function isExpired(cookie, nowSec = Math.floor(Date.now() / 1000)) {
42
+ if (cookie.expires == null)
43
+ return false; // session cookie
44
+ if (cookie.expires <= 0)
45
+ return false; // 0 = session in Netscape
46
+ return cookie.expires < nowSec;
47
+ }
48
+ /**
49
+ * Normalize the union of all parsed cookies.
50
+ *
51
+ * @param cookies Raw cookies from all parsed files
52
+ * @param provider Inferred (or hinted) provider; used for domain filtering and tagging
53
+ * @param nowSec Override for the current Unix seconds (test seam)
54
+ */
55
+ export function normalize(cookies, provider, nowSec = Math.floor(Date.now() / 1000)) {
56
+ if (!Array.isArray(cookies) || cookies.length === 0)
57
+ return [];
58
+ const dedup = new Map();
59
+ for (const c of cookies) {
60
+ // Rule 1: empty fields.
61
+ if (!c.name || !c.value)
62
+ continue;
63
+ // Rule 2: domain must match provider (skip for unknown provider).
64
+ if (provider && !domainMatchesProvider(c.domain, provider))
65
+ continue;
66
+ // Rule 3: expired.
67
+ if (isExpired(c, nowSec))
68
+ continue;
69
+ // Rule 4 + 5: dedupe by (domain, name); last wins. Tag with provider.
70
+ const key = `${c.domain}::${c.name}`;
71
+ dedup.set(key, { ...c, provider });
72
+ }
73
+ return Array.from(dedup.values());
74
+ }