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,107 @@
1
+ /**
2
+ * EditThisCookie / Chrome devtools JSON cookie export parser.
3
+ *
4
+ * Browser extension "EditThisCookie" and Chrome devtools both export
5
+ * cookies in this canonical shape (Chrome/Edge/Chromium cookie store):
6
+ *
7
+ * ```json
8
+ * [
9
+ * {
10
+ * "domain": ".minimax.io",
11
+ * "expirationDate": 1760000000.123,
12
+ * "hostOnly": false,
13
+ * "httpOnly": true,
14
+ * "name": "_token",
15
+ * "path": "/",
16
+ * "sameSite": "no_restriction",
17
+ * "secure": true,
18
+ * "session": false,
19
+ * "storeId": "0",
20
+ * "value": "...",
21
+ * "id": 1
22
+ * }
23
+ * ]
24
+ * ```
25
+ *
26
+ * Some tools may export a single object (not an array). Handle both.
27
+ *
28
+ * SEC-001: Cookie VALUES are returned as strings in-memory. Never logged.
29
+ */
30
+ /**
31
+ * Parse EditThisCookie / Chrome devtools JSON export.
32
+ *
33
+ * Accepts:
34
+ * - top-level array of records
35
+ * - top-level single object
36
+ *
37
+ * Skips:
38
+ * - non-object entries
39
+ * - records without non-empty name+value
40
+ *
41
+ * Never throws; returns empty array on parse failure.
42
+ */
43
+ export function parseEditThisCookieJson(text) {
44
+ if (typeof text !== "string" || text.length === 0)
45
+ return [];
46
+ let data;
47
+ try {
48
+ data = JSON.parse(text);
49
+ }
50
+ catch {
51
+ return [];
52
+ }
53
+ const records = [];
54
+ if (Array.isArray(data)) {
55
+ for (const item of data) {
56
+ if (item && typeof item === "object" && !Array.isArray(item)) {
57
+ records.push(item);
58
+ }
59
+ }
60
+ }
61
+ else if (data && typeof data === "object" && !Array.isArray(data)) {
62
+ records.push(data);
63
+ }
64
+ const cookies = [];
65
+ for (const r of records) {
66
+ const name = asString(r.name);
67
+ const value = asString(r.value);
68
+ if (!name || !value)
69
+ continue;
70
+ const expires = asExpires(r.expirationDate, r.session);
71
+ cookies.push({
72
+ name,
73
+ value,
74
+ domain: asString(r.domain) ?? "",
75
+ path: asString(r.path) ?? "/",
76
+ expires,
77
+ secure: asBool(r.secure) ?? false,
78
+ httpOnly: asBool(r.httpOnly) ?? false,
79
+ });
80
+ }
81
+ return cookies;
82
+ }
83
+ function asString(v) {
84
+ if (typeof v === "string" && v.length > 0)
85
+ return v;
86
+ return undefined;
87
+ }
88
+ function asBool(v) {
89
+ if (typeof v === "boolean")
90
+ return v;
91
+ if (v === 1 || v === "1" || v === "true" || v === "TRUE")
92
+ return true;
93
+ if (v === 0 || v === "0" || v === "false" || v === "FALSE")
94
+ return false;
95
+ return undefined;
96
+ }
97
+ function asExpires(v, session) {
98
+ if (session === true || session === "true")
99
+ return undefined;
100
+ if (typeof v === "number" && Number.isFinite(v)) {
101
+ // EditThisCookie uses unix-seconds (with millisecond decimals sometimes).
102
+ // If v > 1e12, it's milliseconds — convert.
103
+ const seconds = v > 1e12 ? Math.floor(v / 1000) : Math.floor(v);
104
+ return seconds > 0 ? seconds : undefined;
105
+ }
106
+ return undefined;
107
+ }
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Netscape-format cookie file parser.
3
+ *
4
+ * Format reference: https://curl.haxx.se/rfc/cookie_spec.html
5
+ *
6
+ * Each row is tab-separated, 7 columns:
7
+ * domain flag path secure expires name value
8
+ *
9
+ * - Lines starting with `# ` are comments (skipped).
10
+ * - Lines starting with `#HttpOnly_` are HTTP-only cookies
11
+ * (the leading `#HttpOnly_` is stripped, the rest is parsed normally).
12
+ * - Empty lines are skipped.
13
+ * - `expires` is Unix seconds; `0` or unparseable → session cookie.
14
+ * - Lines with fewer than 7 columns are skipped (malformed).
15
+ *
16
+ * SEC-001: Cookie values are returned as strings in-memory. They MUST
17
+ * never be logged. The scrubber in cookie-sanitizer applies value
18
+ * redaction before any path-touching log line.
19
+ */
20
+ /**
21
+ * Parse a Netscape-format cookie string into canonical records.
22
+ *
23
+ * Skips:
24
+ * - blank lines
25
+ * - comments (lines starting with `#` but not `#HttpOnly_`)
26
+ * - malformed rows (< 7 columns)
27
+ *
28
+ * Never throws; returns empty array if input is invalid.
29
+ */
30
+ export function parseNetscape(text) {
31
+ if (typeof text !== "string" || text.length === 0)
32
+ return [];
33
+ const rows = [];
34
+ const lines = text.split(/\r?\n/);
35
+ for (const raw of lines) {
36
+ if (!raw)
37
+ continue;
38
+ let line = raw;
39
+ let httpOnly = false;
40
+ if (line.startsWith("#HttpOnly_")) {
41
+ httpOnly = true;
42
+ line = line.slice("#HttpOnly_".length);
43
+ }
44
+ else if (line.startsWith("#")) {
45
+ // Plain comment line (Netscape / curl spec).
46
+ continue;
47
+ }
48
+ const cols = line.split("\t");
49
+ if (cols.length < 7)
50
+ continue;
51
+ const [domain, _flag, cookiePath, secure, expires, name, value] = cols;
52
+ if (!name || !value)
53
+ continue;
54
+ rows.push({
55
+ domain: (domain ?? "").trim(),
56
+ path: (cookiePath ?? "/").trim() || "/",
57
+ secure: (secure ?? "FALSE").toUpperCase() === "TRUE",
58
+ httpOnly,
59
+ expires: parseInt(expires ?? "0", 10) || 0,
60
+ name: name.trim(),
61
+ value, // intentional: keep as-is for in-memory pipeline; never log
62
+ });
63
+ }
64
+ // Map to CanonicalCookie shape.
65
+ return rows.map((r) => ({
66
+ name: r.name,
67
+ value: r.value,
68
+ domain: r.domain,
69
+ path: r.path,
70
+ expires: r.expires === 0 ? undefined : r.expires,
71
+ secure: r.secure,
72
+ httpOnly: r.httpOnly,
73
+ }));
74
+ }
75
+ /**
76
+ * Serialize a list of canonical cookies back to Netscape format.
77
+ * Used by atomic-write.ts to produce the canonical cache.
78
+ *
79
+ * Output uses the canonical column order:
80
+ * domain flag path secure expires name value
81
+ *
82
+ * `flag` is FALSE per curl spec (HttpOnly is encoded as `#HttpOnly_`).
83
+ * Cookie values are NEVER logged during the round-trip.
84
+ */
85
+ export function serializeNetscape(cookies) {
86
+ const out = ["# Netscape HTTP Cookie File", ""];
87
+ for (const c of cookies) {
88
+ if (!c.name || !c.value)
89
+ continue;
90
+ const domain = c.domain ?? "";
91
+ const path = c.path ?? "/";
92
+ const secure = c.secure ? "TRUE" : "FALSE";
93
+ const expires = c.expires != null ? String(c.expires) : "0";
94
+ const line = [domain, "FALSE", path, secure, expires, c.name, c.value].join("\t");
95
+ out.push(c.httpOnly ? `#HttpOnly_${line}` : line);
96
+ }
97
+ return out.join("\n") + "\n";
98
+ }
@@ -0,0 +1,268 @@
1
+ /**
2
+ * Sync orchestrator — the heart of the sanitizer.
3
+ *
4
+ * Pipeline (per run):
5
+ * 1. Enumerate files in the drop folder (one level + one sublevel).
6
+ * 2. Read each file. Detect format. Parse.
7
+ * 3. Concatenate cookies from all parsed files.
8
+ * 4. Infer provider from filename + cookies.
9
+ * 5. Normalize (dedupe, expire, domain-match).
10
+ * 6. Serialize to Netscape and write to the canonical cache (atomic).
11
+ *
12
+ * Returns a SyncResult. Never throws — returns structured errors in `result.errors`.
13
+ *
14
+ * Sec-001: Cookie VALUES never appear in any log line. Diagnostics
15
+ * use file basenames and 64-char previews with values redacted.
16
+ */
17
+ import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, } from "node:fs";
18
+ import { join } from "node:path";
19
+ import { buildDetectedFile, safePreview } from "./detect-format.js";
20
+ import { parseNetscape, serializeNetscape } from "./parse-netscape.js";
21
+ import { parseEditThisCookieJson } from "./parse-json.js";
22
+ import { normalize } from "./normalize.js";
23
+ import { inferProvider } from "./infer-provider.js";
24
+ import { atomicWriteFileSync, defaultCachePathFor } from "./atomic-write.js";
25
+ /** Max depth for the drop-folder walk (one-level + one subfolder). */
26
+ const MAX_DEPTH = 2;
27
+ /** Max size of a single input file we'll parse (5 MB). */
28
+ const MAX_INPUT_BYTES = 5 * 1024 * 1024;
29
+ /** Default drop-folder location. */
30
+ export const DEFAULT_DROP_DIR = join(process.env.HOME ?? "/tmp", ".pi-harness-runtime", "cookies");
31
+ /**
32
+ * Enumerate readable files inside `dir`, up to MAX_DEPTH.
33
+ * Returns absolute paths. Skips dotfiles, editor temp files.
34
+ *
35
+ * `excludePath` (optional) — absolute path of a file to skip, e.g.
36
+ * the canonical cache file (so we never recursively read it).
37
+ */
38
+ export function enumerateDropFiles(dir, excludePath) {
39
+ if (!existsSync(dir))
40
+ return [];
41
+ let stat;
42
+ try {
43
+ stat = statSync(dir);
44
+ }
45
+ catch {
46
+ return [];
47
+ }
48
+ if (!stat.isDirectory())
49
+ return [];
50
+ const result = [];
51
+ function walk(current, depth) {
52
+ if (depth > MAX_DEPTH)
53
+ return;
54
+ let entries;
55
+ try {
56
+ entries = readdirSync(current);
57
+ }
58
+ catch {
59
+ return;
60
+ }
61
+ for (const name of entries) {
62
+ // Skip dotfiles, editor temp/swap.
63
+ if (name.startsWith("."))
64
+ continue;
65
+ if (name.endsWith("~") || name.endsWith(".swp"))
66
+ continue;
67
+ const full = join(current, name);
68
+ if (excludePath && full === excludePath)
69
+ continue;
70
+ let st;
71
+ try {
72
+ st = statSync(full);
73
+ }
74
+ catch {
75
+ continue;
76
+ }
77
+ if (st.isFile()) {
78
+ result.push(full);
79
+ }
80
+ else if (st.isDirectory() && depth < MAX_DEPTH) {
81
+ walk(full, depth + 1);
82
+ }
83
+ }
84
+ }
85
+ walk(dir, 0);
86
+ return result;
87
+ }
88
+ /**
89
+ * Read a single input file as text, capped at MAX_INPUT_BYTES.
90
+ * Returns null + a `reason` if the file can't be read.
91
+ */
92
+ export function readInputFile(filePath) {
93
+ let stat;
94
+ try {
95
+ stat = statSync(filePath);
96
+ }
97
+ catch {
98
+ return { text: "", reason: "file not accessible" };
99
+ }
100
+ if (!stat.isFile())
101
+ return { text: "", reason: "not a regular file" };
102
+ if (stat.size > MAX_INPUT_BYTES) {
103
+ return { text: "", reason: `file too large (${stat.size} bytes)` };
104
+ }
105
+ try {
106
+ return { text: readFileSync(filePath, "utf8") };
107
+ }
108
+ catch (e) {
109
+ return {
110
+ text: "",
111
+ reason: `read failed: ${e instanceof Error ? e.message : String(e)}`,
112
+ };
113
+ }
114
+ }
115
+ /**
116
+ * Run the full sync pipeline.
117
+ *
118
+ * Options:
119
+ * - dropDir default: ~/.pi-harness-runtime/cookies/
120
+ * - cachePath default: ~/.config/<provider>-cookies.txt
121
+ * - providerHint override inference (skips filename/domain checks)
122
+ * - dryRun skip the actual file write (still returns would-be result)
123
+ *
124
+ * Returns a SyncResult. Never throws.
125
+ */
126
+ export function sync(opts = {}) {
127
+ const dropDir = opts.dropDir ?? DEFAULT_DROP_DIR;
128
+ // Ensure the drop directory exists so users don't need to mkdir manually
129
+ if (!existsSync(dropDir))
130
+ mkdirSync(dropDir, { recursive: true });
131
+ const tmpResult = {
132
+ provider: null,
133
+ processedFiles: [],
134
+ skippedFiles: [],
135
+ totalCookies: 0,
136
+ cachePath: "",
137
+ sourceDir: dropDir,
138
+ wrote: false,
139
+ errors: [],
140
+ };
141
+ const files = enumerateDropFiles(dropDir, opts.cachePath);
142
+ if (files.length === 0) {
143
+ // Nothing to do — no error, just nothing. Caller decides whether
144
+ // to surface this to the user.
145
+ return tmpResult;
146
+ }
147
+ const allCookies = [];
148
+ let firstBasename;
149
+ for (const filePath of files) {
150
+ const { text, reason } = readInputFile(filePath);
151
+ if (reason) {
152
+ const det = buildDetectedFile(filePath, "");
153
+ tmpResult.skippedFiles.push({ basename: det.basename, reason });
154
+ tmpResult.errors.push({ basename: det.basename, message: reason });
155
+ continue;
156
+ }
157
+ const det = buildDetectedFile(filePath, text);
158
+ if (det.format == null) {
159
+ const preview = safePreview(text);
160
+ tmpResult.skippedFiles.push({
161
+ basename: det.basename,
162
+ reason: `unrecognised format (preview: ${preview})`,
163
+ });
164
+ tmpResult.errors.push({
165
+ basename: det.basename,
166
+ message: "unrecognised format",
167
+ });
168
+ continue;
169
+ }
170
+ let cookies = [];
171
+ if (det.format === "netscape") {
172
+ cookies = parseNetscape(text);
173
+ }
174
+ else if (det.format === "edit-this-cookie-json") {
175
+ cookies = parseEditThisCookieJson(text);
176
+ }
177
+ if (cookies.length === 0) {
178
+ tmpResult.skippedFiles.push({
179
+ basename: det.basename,
180
+ reason: `${det.format} parsed but yielded 0 cookies`,
181
+ });
182
+ continue;
183
+ }
184
+ allCookies.push(...cookies);
185
+ tmpResult.processedFiles.push(det.basename);
186
+ if (!firstBasename)
187
+ firstBasename = det.basename;
188
+ }
189
+ if (allCookies.length === 0) {
190
+ return tmpResult;
191
+ }
192
+ const provider = inferProvider(firstBasename, allCookies, opts.providerHint);
193
+ if (!provider) {
194
+ tmpResult.errors.push({
195
+ basename: firstBasename ?? "<unknown>",
196
+ message: "could not infer provider (no filename/domain match)",
197
+ });
198
+ return tmpResult;
199
+ }
200
+ tmpResult.provider = provider;
201
+ const cachePath = opts.cachePath ?? defaultCachePathFor(provider);
202
+ tmpResult.cachePath = cachePath;
203
+ const normalized = normalize(allCookies, provider);
204
+ tmpResult.totalCookies = normalized.length;
205
+ if (normalized.length === 0) {
206
+ // All cookies were filtered (expired / wrong domain).
207
+ tmpResult.errors.push({
208
+ basename: firstBasename ?? "<unknown>",
209
+ message: "all cookies filtered (expired or wrong-provider domain)",
210
+ });
211
+ return tmpResult;
212
+ }
213
+ if (opts.dryRun) {
214
+ tmpResult.wrote = false;
215
+ return tmpResult;
216
+ }
217
+ const serialized = serializeNetscape(normalized);
218
+ try {
219
+ atomicWriteFileSync(cachePath, serialized);
220
+ tmpResult.wrote = true;
221
+ }
222
+ catch (e) {
223
+ tmpResult.errors.push({
224
+ basename: firstBasename ?? "<unknown>",
225
+ message: `atomic write failed: ${e instanceof Error ? e.message : String(e)}`,
226
+ });
227
+ }
228
+ return tmpResult;
229
+ }
230
+ /**
231
+ * Has-any-input check: true if the drop folder has anything readable.
232
+ * Cheap — does a single `readdirSync`; no parsing.
233
+ */
234
+ export function hasAnyCookieSource(dropDir = DEFAULT_DROP_DIR) {
235
+ return enumerateDropFiles(dropDir).length > 0;
236
+ }
237
+ /**
238
+ * Convenience: cache path for the dominant provider in the drop folder,
239
+ * or null if nothing's there. Used by `footer-status.ts` to ask "should
240
+ * the footer hint point at this provider?"
241
+ */
242
+ export function inferCachePath(dropDir = DEFAULT_DROP_DIR) {
243
+ const files = enumerateDropFiles(dropDir);
244
+ if (files.length === 0)
245
+ return null;
246
+ let firstBasename;
247
+ const cookies = [];
248
+ for (const fp of files) {
249
+ const { text } = readInputFile(fp);
250
+ if (!text)
251
+ continue;
252
+ const det = buildDetectedFile(fp, text);
253
+ if (!det.format)
254
+ continue;
255
+ if (det.format === "netscape")
256
+ cookies.push(...parseNetscape(text));
257
+ else if (det.format === "edit-this-cookie-json")
258
+ cookies.push(...parseEditThisCookieJson(text));
259
+ if (!firstBasename)
260
+ firstBasename = det.basename;
261
+ }
262
+ const provider = inferProvider(firstBasename, cookies);
263
+ if (!provider)
264
+ return null;
265
+ return defaultCachePathFor(provider);
266
+ }
267
+ export { inferProvider, inferProviderFromFilename, inferProviderFromCookies, } from "./infer-provider.js";
268
+ export { defaultCachePathFor } from "./atomic-write.js";
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Cookie sanitizer types.
3
+ *
4
+ * The data model is intentionally simple and explicit. Cookies flow in
5
+ * from one of two input formats (Netscape, EditThisCookie JSON), are
6
+ * normalised here into a canonical record, and written out as a single
7
+ * standard Netscape file by the writer.
8
+ *
9
+ * Cookie values are NEVER logged anywhere. They live in memory only
10
+ * for the duration of one parse → normalize → write cycle.
11
+ */
12
+ export {};
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Live cookie-folder watcher.
3
+ *
4
+ * Wraps chokidar v5 with the project-specific options:
5
+ * - `atomic: 100` — EditThisCookie / browser exporters use atomic write
6
+ * - `awaitWriteFinish` — wait for size to settle before triggering
7
+ * - `ignoreInitial: true` — startup is handled by sync.ts separately
8
+ * - `depth: 2` — one level + one subfolder
9
+ * - editor temp ignored
10
+ *
11
+ * Sec-001: Cookie values are NEVER logged. Diagnostics use only
12
+ * basenames, file paths, and event kinds.
13
+ */
14
+ import chokidar from "chokidar";
15
+ import { join } from "node:path";
16
+ import { sync } from "./sync.js";
17
+ const DEFAULT_DEBOUNCE_MS = 250;
18
+ /** Wraps a chokidar watcher for the drop folder. */
19
+ export class CookieWatcher {
20
+ watcher = null;
21
+ debounceMs;
22
+ debounceTimer = null;
23
+ log;
24
+ cfg;
25
+ running = false;
26
+ constructor(config) {
27
+ this.cfg = config;
28
+ this.debounceMs = config.debounceMs ?? DEFAULT_DEBOUNCE_MS;
29
+ this.log = config.logger ?? ((m) => console.log(`[cookie-sanitizer] ${m}`));
30
+ }
31
+ /** Start watching. Idempotent — calling twice is a no-op. */
32
+ start() {
33
+ if (this.running)
34
+ return;
35
+ this.running = true;
36
+ this.watcher = chokidar.watch(this.cfg.dropDir, {
37
+ ignored: (targetPath) => {
38
+ const base = targetPath.split("/").pop() ?? "";
39
+ if (base.startsWith("."))
40
+ return true;
41
+ if (base.endsWith("~") || base.endsWith(".swp"))
42
+ return true;
43
+ if (base.endsWith(".tmp"))
44
+ return true;
45
+ // Exclude the canonical cache file (if specified) so the
46
+ // sanitizer's own write doesn't trigger a re-sync.
47
+ if (this.cfg.syncOptions?.cachePath &&
48
+ targetPath === this.cfg.syncOptions.cachePath) {
49
+ return true;
50
+ }
51
+ return false;
52
+ },
53
+ ignoreInitial: true,
54
+ persistent: true,
55
+ depth: 2,
56
+ atomic: 100,
57
+ awaitWriteFinish: {
58
+ stabilityThreshold: 200,
59
+ pollInterval: 50,
60
+ },
61
+ });
62
+ this.watcher.on("add", () => this.schedule());
63
+ this.watcher.on("change", () => this.schedule());
64
+ this.watcher.on("unlink", () => this.schedule());
65
+ this.watcher.on("error", (err) => {
66
+ this.log(`watcher error: ${err instanceof Error ? err.message : String(err)}`);
67
+ this.cfg.onEvent({
68
+ kind: "watcher-error",
69
+ message: err instanceof Error ? err.message : String(err),
70
+ });
71
+ });
72
+ this.log(`watching ${this.cfg.dropDir}`);
73
+ }
74
+ /** Stop watching. Idempotent. */
75
+ async stop() {
76
+ if (!this.running)
77
+ return;
78
+ this.running = false;
79
+ if (this.debounceTimer) {
80
+ clearTimeout(this.debounceTimer);
81
+ this.debounceTimer = null;
82
+ }
83
+ if (this.watcher) {
84
+ await this.watcher.close();
85
+ this.watcher = null;
86
+ }
87
+ this.log("stopped");
88
+ }
89
+ /** Trigger a sync immediately (bypass debounce). */
90
+ triggerNow() {
91
+ if (this.debounceTimer) {
92
+ clearTimeout(this.debounceTimer);
93
+ this.debounceTimer = null;
94
+ }
95
+ this.runSync();
96
+ }
97
+ schedule() {
98
+ if (this.debounceTimer)
99
+ clearTimeout(this.debounceTimer);
100
+ this.debounceTimer = setTimeout(() => {
101
+ this.debounceTimer = null;
102
+ this.runSync();
103
+ }, this.debounceMs);
104
+ }
105
+ runSync() {
106
+ try {
107
+ const result = sync(this.cfg.syncOptions ?? {});
108
+ if (result.errors.length > 0) {
109
+ for (const err of result.errors) {
110
+ this.cfg.onEvent({
111
+ kind: "sync-error",
112
+ message: `${err.basename}: ${err.message}`,
113
+ });
114
+ }
115
+ }
116
+ if (result.provider && result.wrote) {
117
+ this.cfg.onEvent({
118
+ kind: "sync-ok",
119
+ provider: result.provider,
120
+ cachePath: result.cachePath,
121
+ cookies: result.totalCookies,
122
+ });
123
+ }
124
+ else if (result.processedFiles.length === 0 &&
125
+ result.provider === null) {
126
+ this.cfg.onEvent({
127
+ kind: "sync-skip",
128
+ reason: "no usable cookies found",
129
+ });
130
+ }
131
+ }
132
+ catch (e) {
133
+ this.cfg.onEvent({
134
+ kind: "sync-error",
135
+ message: e instanceof Error ? e.message : String(e),
136
+ });
137
+ }
138
+ }
139
+ }
140
+ /** Factory: a watcher that writes to a default no-op logger. */
141
+ export function createWatcher(dropDir, syncOptions, onEvent) {
142
+ return new CookieWatcher({ dropDir, syncOptions, onEvent });
143
+ }
144
+ /** Compute a sensible dropDir for a given HOME override (test seam). */
145
+ export function defaultDropDir(home = process.env.HOME ?? "/tmp") {
146
+ return join(home, ".pi-harness-runtime", "cookies");
147
+ }