pi-harness-runtime 1.1.397 → 1.1.402

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 (624) hide show
  1. package/AGENTS.md +44 -2
  2. package/CHANGELOG.md +21 -0
  3. package/RULES.md +28 -0
  4. package/harness/agent-handoff.ts +2 -3
  5. package/harness/autonomous-review.ts +1 -1
  6. package/harness/blackboard.ts +2 -3
  7. package/harness/context-compact-orchestrator.ts +1 -1
  8. package/harness/context-window-manager.ts +2 -2
  9. package/harness/e2e/playwright-runner.ts +6 -4
  10. package/harness/herdr-agents.ts +1 -1
  11. package/harness/job-state-machine.ts +1 -1
  12. package/harness/langchain/daemon.ts +3 -3
  13. package/harness/langchain/graph.ts +2 -2
  14. package/harness/langchain/ping-pong-middleware.ts +2 -2
  15. package/harness/loop-code-agent.ts +6 -4
  16. package/harness/loop-controller.ts +1 -1
  17. package/harness/loop-review-agent.ts +1 -1
  18. package/harness/loop-types.ts +1 -1
  19. package/harness/master-planner.ts +1 -1
  20. package/harness/notification-events.ts +6 -6
  21. package/harness/project-detector/detector.ts +1 -2
  22. package/harness/repair-engine.ts +2 -4
  23. package/harness/service-diagnostics.ts +1 -1
  24. package/harness/skill-sync.ts +3 -3
  25. package/index.ts +276 -55
  26. package/mirror.ts +1 -1
  27. package/package.json +5 -3
  28. package/packages/a2a-adapter/dist/discovery.d.ts.map +1 -1
  29. package/packages/a2a-adapter/dist/discovery.js +0 -1
  30. package/packages/a2a-adapter/dist/discovery.js.map +1 -1
  31. package/packages/a2a-adapter/package.json +1 -1
  32. package/packages/a2a-adapter/src/discovery.ts +0 -1
  33. package/packages/agent-policy/package.json +1 -1
  34. package/packages/architecture-generator/package.json +1 -1
  35. package/packages/auth/dist/index.d.ts +9 -0
  36. package/packages/auth/dist/index.d.ts.map +1 -0
  37. package/packages/auth/dist/index.js +9 -0
  38. package/packages/auth/dist/index.js.map +1 -0
  39. package/packages/auth/package.json +1 -1
  40. package/packages/auth/src/index.ts +9 -0
  41. package/packages/autonomous-refactor/package.json +1 -1
  42. package/packages/autonomous-runtime/package.json +1 -1
  43. package/packages/cache-strategy/package.json +1 -1
  44. package/packages/capability-registry/package.json +1 -1
  45. package/packages/checkpoint/package.json +1 -1
  46. package/packages/cli-plugin-sdk/package.json +1 -1
  47. package/packages/clipboard/package.json +1 -1
  48. package/packages/clipboard-plugin/package.json +1 -1
  49. package/packages/code-generation/package.json +1 -1
  50. package/packages/code-review/package.json +1 -1
  51. package/packages/codex-adapter/package.json +1 -1
  52. package/packages/codex-watcher/package.json +1 -1
  53. package/packages/config-capture/dist/index.d.ts +52 -0
  54. package/packages/config-capture/dist/index.d.ts.map +1 -0
  55. package/packages/config-capture/dist/index.js +261 -0
  56. package/packages/config-capture/dist/index.js.map +1 -0
  57. package/packages/config-capture/package.json +1 -1
  58. package/packages/connection-runtime/package.json +1 -1
  59. package/packages/context-compiler/package.json +1 -1
  60. package/packages/context-discovery/package.json +1 -1
  61. package/packages/context-manager/package.json +1 -1
  62. package/packages/contracts/package.json +1 -1
  63. package/packages/cookie-sanitizer/package.json +1 -1
  64. package/packages/cost-optimizer/package.json +1 -1
  65. package/packages/dependency-analyzer/package.json +1 -1
  66. package/packages/django-plugin/package.json +1 -1
  67. package/packages/doc-generator/package.json +1 -1
  68. package/packages/durable-review/package.json +1 -1
  69. package/packages/e2e-tester/package.json +1 -1
  70. package/packages/evaluation-engine/package.json +1 -1
  71. package/packages/evaluation-runner/package.json +1 -1
  72. package/packages/event-bus/package.json +1 -1
  73. package/packages/event-sink/package.json +1 -1
  74. package/packages/event-store/package.json +1 -1
  75. package/packages/experience-replay/package.json +1 -1
  76. package/packages/feedback-collector/package.json +1 -1
  77. package/packages/file-copy-helper/dist/extension.d.ts +15 -0
  78. package/packages/file-copy-helper/dist/extension.d.ts.map +1 -0
  79. package/packages/file-copy-helper/dist/extension.debug.d.ts +15 -0
  80. package/packages/file-copy-helper/dist/extension.debug.d.ts.map +1 -0
  81. package/packages/file-copy-helper/dist/extension.debug.js +215 -0
  82. package/packages/file-copy-helper/dist/extension.debug.js.map +1 -0
  83. package/packages/file-copy-helper/dist/extension.js +222 -0
  84. package/packages/file-copy-helper/dist/extension.js.map +1 -0
  85. package/packages/file-copy-helper/dist/index.d.ts +3 -0
  86. package/packages/file-copy-helper/dist/index.d.ts.map +1 -0
  87. package/packages/file-copy-helper/dist/index.js +3 -0
  88. package/packages/file-copy-helper/dist/index.js.map +1 -0
  89. package/packages/file-copy-helper/dist/intent-detector.d.ts +21 -0
  90. package/packages/file-copy-helper/dist/intent-detector.d.ts.map +1 -0
  91. package/packages/file-copy-helper/dist/intent-detector.js +348 -0
  92. package/packages/file-copy-helper/dist/intent-detector.js.map +1 -0
  93. package/packages/file-copy-helper/package.json +1 -1
  94. package/packages/framework-detector/package.json +1 -1
  95. package/packages/framework-plugin-sdk/package.json +1 -1
  96. package/packages/frappe-plugin/package.json +1 -1
  97. package/packages/generic-web-plugin/package.json +1 -1
  98. package/packages/health-monitor/package.json +1 -1
  99. package/packages/intent-analyzer/package.json +1 -1
  100. package/packages/jev-judge/dist/auto-continue.d.ts +161 -2
  101. package/packages/jev-judge/dist/auto-continue.d.ts.map +1 -1
  102. package/packages/jev-judge/dist/auto-continue.js +267 -22
  103. package/packages/jev-judge/dist/auto-continue.js.map +1 -1
  104. package/packages/jev-judge/dist/index.d.ts +2 -0
  105. package/packages/jev-judge/dist/index.d.ts.map +1 -1
  106. package/packages/jev-judge/dist/index.js +2 -0
  107. package/packages/jev-judge/dist/index.js.map +1 -1
  108. package/packages/jev-judge/dist/question-risk.d.ts +50 -0
  109. package/packages/jev-judge/dist/question-risk.d.ts.map +1 -0
  110. package/packages/jev-judge/dist/question-risk.js +100 -0
  111. package/packages/jev-judge/dist/question-risk.js.map +1 -0
  112. package/packages/jev-judge/package.json +1 -1
  113. package/packages/jev-judge/src/auto-continue.ts +426 -29
  114. package/packages/jev-judge/src/index.ts +4 -0
  115. package/packages/jev-judge/src/question-risk.ts +151 -0
  116. package/packages/jev-judge/tests/auto-continue-context.test.ts +221 -0
  117. package/packages/jev-judge/tests/outcome-application.test.ts +132 -0
  118. package/packages/jev-judge/tests/question-risk.test.ts +116 -0
  119. package/packages/knowledge-graph/package.json +1 -1
  120. package/packages/knowledge-retrieval/package.json +1 -1
  121. package/packages/laravel-plugin/package.json +1 -1
  122. package/packages/learning-engine/package.json +1 -1
  123. package/packages/logging/README.md +36 -3
  124. package/packages/logging/dist/config.d.ts +7 -0
  125. package/packages/logging/dist/config.d.ts.map +1 -1
  126. package/packages/logging/dist/config.js +14 -0
  127. package/packages/logging/dist/config.js.map +1 -1
  128. package/packages/logging/dist/incidents/schema.d.ts +111 -0
  129. package/packages/logging/dist/incidents/schema.d.ts.map +1 -0
  130. package/packages/logging/dist/incidents/schema.js +0 -0
  131. package/packages/logging/dist/incidents/schema.js.map +1 -0
  132. package/packages/logging/dist/index.d.ts +2 -0
  133. package/packages/logging/dist/index.d.ts.map +1 -1
  134. package/packages/logging/dist/index.js +2 -0
  135. package/packages/logging/dist/index.js.map +1 -1
  136. package/packages/logging/dist/server/http.d.ts +4 -3
  137. package/packages/logging/dist/server/http.d.ts.map +1 -1
  138. package/packages/logging/dist/server/http.js +35 -3
  139. package/packages/logging/dist/server/http.js.map +1 -1
  140. package/packages/logging/dist/server/incident-qdrant.d.ts +83 -0
  141. package/packages/logging/dist/server/incident-qdrant.d.ts.map +1 -0
  142. package/packages/logging/dist/server/incident-qdrant.js +129 -0
  143. package/packages/logging/dist/server/incident-qdrant.js.map +1 -0
  144. package/packages/logging/dist/server/incident-store.d.ts +76 -0
  145. package/packages/logging/dist/server/incident-store.d.ts.map +1 -0
  146. package/packages/logging/dist/server/incident-store.js +157 -0
  147. package/packages/logging/dist/server/incident-store.js.map +1 -0
  148. package/packages/logging/dist/server/index.d.ts +4 -0
  149. package/packages/logging/dist/server/index.d.ts.map +1 -1
  150. package/packages/logging/dist/server/index.js +2 -0
  151. package/packages/logging/dist/server/index.js.map +1 -1
  152. package/packages/logging/dist/server/service.d.ts +33 -0
  153. package/packages/logging/dist/server/service.d.ts.map +1 -1
  154. package/packages/logging/dist/server/service.js +63 -0
  155. package/packages/logging/dist/server/service.js.map +1 -1
  156. package/packages/logging/dist/shipper.d.ts +74 -3
  157. package/packages/logging/dist/shipper.d.ts.map +1 -1
  158. package/packages/logging/dist/shipper.js +88 -5
  159. package/packages/logging/dist/shipper.js.map +1 -1
  160. package/packages/logging/dist/singleton.d.ts.map +1 -1
  161. package/packages/logging/dist/singleton.js +1 -0
  162. package/packages/logging/dist/singleton.js.map +1 -1
  163. package/packages/logging/package.json +1 -1
  164. package/packages/logging/src/config.ts +22 -0
  165. package/packages/logging/src/incidents/schema.ts +0 -0
  166. package/packages/logging/src/index.ts +17 -0
  167. package/packages/logging/src/server/http.ts +42 -3
  168. package/packages/logging/src/server/incident-qdrant.ts +177 -0
  169. package/packages/logging/src/server/incident-store.ts +192 -0
  170. package/packages/logging/src/server/index.ts +21 -0
  171. package/packages/logging/src/server/service.ts +79 -0
  172. package/packages/logging/src/shipper.ts +120 -5
  173. package/packages/logging/src/singleton.ts +1 -0
  174. package/packages/logging/test/fanout.test.ts +186 -0
  175. package/packages/logging/test/incidents.test.ts +404 -0
  176. package/packages/mcp-adapter/package.json +1 -1
  177. package/packages/memory-engine/package.json +1 -1
  178. package/packages/milestone-manager/package.json +1 -1
  179. package/packages/model-registry/package.json +1 -1
  180. package/packages/nextjs-plugin/package.json +1 -1
  181. package/packages/notification/dist/adapters/detail-format.d.ts +42 -0
  182. package/packages/notification/dist/adapters/detail-format.d.ts.map +1 -0
  183. package/packages/notification/dist/adapters/detail-format.js +94 -0
  184. package/packages/notification/dist/adapters/detail-format.js.map +1 -0
  185. package/packages/notification/dist/adapters/email-adapter.d.ts.map +1 -1
  186. package/packages/notification/dist/adapters/email-adapter.js +3 -2
  187. package/packages/notification/dist/adapters/email-adapter.js.map +1 -1
  188. package/packages/notification/dist/adapters/line-adapter.d.ts +33 -0
  189. package/packages/notification/dist/adapters/line-adapter.d.ts.map +1 -1
  190. package/packages/notification/dist/adapters/line-adapter.js +87 -9
  191. package/packages/notification/dist/adapters/line-adapter.js.map +1 -1
  192. package/packages/notification/dist/adapters/ntfy-adapter.d.ts.map +1 -1
  193. package/packages/notification/dist/adapters/ntfy-adapter.js +3 -2
  194. package/packages/notification/dist/adapters/ntfy-adapter.js.map +1 -1
  195. package/packages/notification/dist/adapters/telegram-adapter.d.ts +14 -0
  196. package/packages/notification/dist/adapters/telegram-adapter.d.ts.map +1 -1
  197. package/packages/notification/dist/adapters/telegram-adapter.js +89 -69
  198. package/packages/notification/dist/adapters/telegram-adapter.js.map +1 -1
  199. package/packages/notification/dist/notification-center.d.ts.map +1 -1
  200. package/packages/notification/dist/notification-center.js +60 -7
  201. package/packages/notification/dist/notification-center.js.map +1 -1
  202. package/packages/notification/dist/pending-question.d.ts +69 -2
  203. package/packages/notification/dist/pending-question.d.ts.map +1 -1
  204. package/packages/notification/dist/pending-question.js +88 -2
  205. package/packages/notification/dist/pending-question.js.map +1 -1
  206. package/packages/notification/dist/types.d.ts +21 -0
  207. package/packages/notification/dist/types.d.ts.map +1 -1
  208. package/packages/notification/package.json +1 -1
  209. package/packages/notification/src/adapters/detail-format.ts +114 -0
  210. package/packages/notification/src/adapters/email-adapter.ts +3 -2
  211. package/packages/notification/src/adapters/line-adapter.ts +97 -9
  212. package/packages/notification/src/adapters/ntfy-adapter.ts +3 -2
  213. package/packages/notification/src/adapters/telegram-adapter.ts +98 -76
  214. package/packages/notification/src/notification-center.ts +66 -8
  215. package/packages/notification/src/pending-question.ts +160 -8
  216. package/packages/notification/src/types.ts +21 -0
  217. package/packages/notification/test/approval-payload.test.ts +269 -0
  218. package/packages/notification/test/detail-format.test.ts +106 -0
  219. package/packages/notification/test/pending-question-lifecycle.test.ts +195 -0
  220. package/packages/observability/package.json +1 -1
  221. package/packages/okf-indexer/dist/index.d.ts +9 -0
  222. package/packages/okf-indexer/dist/index.d.ts.map +1 -0
  223. package/packages/okf-indexer/dist/index.js +9 -0
  224. package/packages/okf-indexer/dist/index.js.map +1 -0
  225. package/packages/okf-indexer/package.json +1 -1
  226. package/packages/okf-indexer/src/index.ts +9 -0
  227. package/packages/paperclip-integration/package.json +1 -1
  228. package/packages/performance-optimizer/package.json +1 -1
  229. package/packages/permission-mode/package.json +1 -1
  230. package/packages/privilege-broker/package.json +1 -1
  231. package/packages/project-analyzer/package.json +1 -1
  232. package/packages/project-bootstrap/package.json +1 -1
  233. package/packages/projection-engine/package.json +1 -1
  234. package/packages/prompt-compiler/package.json +1 -1
  235. package/packages/prompt-versioning/package.json +1 -1
  236. package/packages/provider-adapter-sdk/package.json +1 -1
  237. package/packages/provider-router/dist/provider-router.d.ts.map +1 -1
  238. package/packages/provider-router/dist/types.d.ts +2 -2
  239. package/packages/provider-router/dist/types.d.ts.map +1 -1
  240. package/packages/provider-router/dist/types.js +1 -1
  241. package/packages/provider-router/package.json +1 -1
  242. package/packages/provider-router/src/types.ts +2 -2
  243. package/packages/provider-selector/package.json +1 -1
  244. package/packages/providers/package.json +1 -1
  245. package/packages/qdrant-skills/package.json +1 -1
  246. package/packages/quota-manager/package.json +1 -1
  247. package/packages/rate-limiter/package.json +1 -1
  248. package/packages/react-vite-plugin/package.json +1 -1
  249. package/packages/relay/package.json +1 -1
  250. package/packages/release-manager/package.json +1 -1
  251. package/packages/requirement-compiler/package.json +1 -1
  252. package/packages/runtime/package.json +1 -1
  253. package/packages/scheduler/dist/index.d.ts +9 -0
  254. package/packages/scheduler/dist/index.d.ts.map +1 -0
  255. package/packages/scheduler/dist/index.js +9 -0
  256. package/packages/scheduler/dist/index.js.map +1 -0
  257. package/packages/scheduler/dist/scheduler.d.ts +17 -0
  258. package/packages/scheduler/dist/scheduler.d.ts.map +1 -0
  259. package/packages/scheduler/dist/scheduler.js +41 -0
  260. package/packages/scheduler/dist/scheduler.js.map +1 -0
  261. package/packages/scheduler/package.json +1 -1
  262. package/packages/scheduler/src/index.ts +9 -0
  263. package/packages/scheduler-adapter/package.json +1 -1
  264. package/packages/session/package.json +1 -1
  265. package/packages/session-api/package.json +1 -1
  266. package/packages/session-export/package.json +1 -1
  267. package/packages/shared-context/dist/index.d.ts +7 -0
  268. package/packages/shared-context/dist/index.d.ts.map +1 -0
  269. package/packages/shared-context/dist/index.js +7 -0
  270. package/packages/shared-context/dist/index.js.map +1 -0
  271. package/packages/shared-context/dist/shared-context.d.ts +12 -0
  272. package/packages/shared-context/dist/shared-context.d.ts.map +1 -0
  273. package/packages/shared-context/dist/shared-context.js +39 -0
  274. package/packages/shared-context/dist/shared-context.js.map +1 -0
  275. package/packages/shared-context/package.json +1 -1
  276. package/packages/skill-mcp-client/dist/client.d.ts +56 -0
  277. package/packages/skill-mcp-client/dist/client.d.ts.map +1 -0
  278. package/packages/skill-mcp-client/dist/client.js +101 -0
  279. package/packages/skill-mcp-client/dist/client.js.map +1 -0
  280. package/packages/skill-mcp-client/dist/errors.d.ts +44 -0
  281. package/packages/skill-mcp-client/dist/errors.d.ts.map +1 -0
  282. package/packages/skill-mcp-client/dist/errors.js +68 -0
  283. package/packages/skill-mcp-client/dist/errors.js.map +1 -0
  284. package/packages/skill-mcp-client/dist/index.d.ts +9 -0
  285. package/packages/skill-mcp-client/dist/index.d.ts.map +1 -0
  286. package/packages/skill-mcp-client/dist/index.js +9 -0
  287. package/packages/skill-mcp-client/dist/index.js.map +1 -0
  288. package/packages/skill-mcp-client/dist/types.d.ts +106 -0
  289. package/packages/skill-mcp-client/dist/types.d.ts.map +1 -0
  290. package/packages/skill-mcp-client/dist/types.js +14 -0
  291. package/packages/skill-mcp-client/dist/types.js.map +1 -0
  292. package/packages/skill-mcp-client/package.json +1 -1
  293. package/packages/skill-registry/package.json +1 -1
  294. package/packages/skills/package.json +1 -5
  295. package/packages/sprint-planner/package.json +1 -1
  296. package/packages/subscription-engine/package.json +1 -1
  297. package/packages/task-compiler/package.json +1 -1
  298. package/packages/telegram/package.json +1 -1
  299. package/packages/telegram/src/agent-messages.d.ts +28 -0
  300. package/packages/telegram/src/agent-messages.js +90 -0
  301. package/packages/telegram/src/bindings.d.ts +296 -0
  302. package/packages/telegram/src/bindings.js +1086 -0
  303. package/packages/telegram/src/bus.d.ts +759 -0
  304. package/packages/telegram/src/bus.js +2732 -0
  305. package/packages/telegram/src/commands.d.ts +761 -0
  306. package/packages/telegram/src/commands.js +2622 -0
  307. package/packages/telegram/src/config.d.ts +222 -0
  308. package/packages/telegram/src/config.js +844 -0
  309. package/packages/telegram/src/delivery.d.ts +161 -0
  310. package/packages/telegram/src/delivery.js +550 -0
  311. package/packages/telegram/src/extension.d.ts +7 -0
  312. package/packages/telegram/src/extension.js +2444 -0
  313. package/packages/telegram/src/inbound.d.ts +94 -0
  314. package/packages/telegram/src/inbound.js +478 -0
  315. package/packages/telegram/src/index.d.ts +6 -0
  316. package/packages/telegram/src/index.js +6 -0
  317. package/packages/telegram/src/keyboard.d.ts +21 -0
  318. package/packages/telegram/src/keyboard.js +37 -0
  319. package/packages/telegram/src/lifecycle.d.ts +210 -0
  320. package/packages/telegram/src/lifecycle.js +538 -0
  321. package/packages/telegram/src/pi.d.ts +76 -0
  322. package/packages/telegram/src/pi.js +130 -0
  323. package/packages/telegram/src/polling.d.ts +332 -0
  324. package/packages/telegram/src/polling.js +1219 -0
  325. package/packages/telegram/src/replies.d.ts +210 -0
  326. package/packages/telegram/src/replies.js +752 -0
  327. package/packages/telegram/src/routing.d.ts +388 -0
  328. package/packages/telegram/src/routing.js +7886 -0
  329. package/packages/telegram/src/runtime.d.ts +159 -0
  330. package/packages/telegram/src/runtime.js +351 -0
  331. package/packages/telegram/src/telegram-api.d.ts +564 -0
  332. package/packages/telegram/src/telegram-api.js +1332 -0
  333. package/packages/telegram/src/turns.d.ts +108 -0
  334. package/packages/telegram/src/turns.js +482 -0
  335. package/packages/telegram/src/updates.d.ts +1545 -0
  336. package/packages/telegram/src/updates.js +6420 -0
  337. package/packages/tencentdb-memory/package.json +1 -1
  338. package/packages/tencentdb-sync/package.json +1 -1
  339. package/packages/test-data-generator/package.json +1 -1
  340. package/packages/test-generator/package.json +1 -1
  341. package/packages/todo-bd-sync/dist/detector.d.ts +54 -0
  342. package/packages/todo-bd-sync/dist/detector.d.ts.map +1 -0
  343. package/packages/todo-bd-sync/dist/detector.js +132 -0
  344. package/packages/todo-bd-sync/dist/detector.js.map +1 -0
  345. package/packages/todo-bd-sync/dist/extension.d.ts +30 -0
  346. package/packages/todo-bd-sync/dist/extension.d.ts.map +1 -0
  347. package/packages/todo-bd-sync/dist/extension.js +35 -0
  348. package/packages/todo-bd-sync/dist/extension.js.map +1 -0
  349. package/packages/todo-bd-sync/dist/index.d.ts +87 -0
  350. package/packages/todo-bd-sync/dist/index.d.ts.map +1 -0
  351. package/packages/todo-bd-sync/dist/index.js +296 -0
  352. package/packages/todo-bd-sync/dist/index.js.map +1 -0
  353. package/packages/todo-bd-sync/dist/sync.d.ts +72 -0
  354. package/packages/todo-bd-sync/dist/sync.d.ts.map +1 -0
  355. package/packages/todo-bd-sync/dist/sync.js +290 -0
  356. package/packages/todo-bd-sync/dist/sync.js.map +1 -0
  357. package/packages/todo-bd-sync/dist/task-analyzer.d.ts +49 -0
  358. package/packages/todo-bd-sync/dist/task-analyzer.d.ts.map +1 -0
  359. package/packages/todo-bd-sync/dist/task-analyzer.js +240 -0
  360. package/packages/todo-bd-sync/dist/task-analyzer.js.map +1 -0
  361. package/packages/todo-bd-sync/dist/todo-reminder.d.ts +126 -0
  362. package/packages/todo-bd-sync/dist/todo-reminder.d.ts.map +1 -0
  363. package/packages/todo-bd-sync/dist/todo-reminder.js +329 -0
  364. package/packages/todo-bd-sync/dist/todo-reminder.js.map +1 -0
  365. package/packages/todo-bd-sync/dist/types.d.ts +65 -0
  366. package/packages/todo-bd-sync/dist/types.d.ts.map +1 -0
  367. package/packages/todo-bd-sync/dist/types.js +67 -0
  368. package/packages/todo-bd-sync/dist/types.js.map +1 -0
  369. package/packages/todo-bd-sync/package.json +1 -1
  370. package/packages/token-estimation/dist/index.d.ts +94 -0
  371. package/packages/token-estimation/dist/index.d.ts.map +1 -0
  372. package/packages/token-estimation/dist/index.js +115 -0
  373. package/packages/token-estimation/dist/index.js.map +1 -0
  374. package/packages/token-estimation/package.json +1 -1
  375. package/packages/token-optimizer/package.json +1 -1
  376. package/packages/trajectory/package.json +1 -1
  377. package/packages/tui/package.json +1 -1
  378. package/packages/types/dist/ai-providers.d.ts +36 -0
  379. package/packages/types/dist/ai-providers.d.ts.map +1 -0
  380. package/packages/types/dist/ai-providers.js +66 -0
  381. package/packages/types/dist/ai-providers.js.map +1 -0
  382. package/packages/types/dist/index.d.ts +12 -0
  383. package/packages/types/dist/index.d.ts.map +1 -0
  384. package/packages/types/dist/index.js +12 -0
  385. package/packages/types/dist/index.js.map +1 -0
  386. package/packages/types/package.json +5 -5
  387. package/packages/types/src/index.ts +12 -0
  388. package/packages/voice-api/package.json +1 -1
  389. package/packages/webmcp-tester/package.json +1 -1
  390. package/packages/wiki/package.json +1 -1
  391. package/packages/workflow-events/package.json +1 -1
  392. package/packages/workspace-scanner/package.json +1 -1
  393. package/packages/worktree/package.json +1 -1
  394. package/packages/worktree/worktree.ts +1 -1
  395. package/packages/write-review/package.json +1 -1
  396. package/renderer.ts +1 -1
  397. package/scripts/build-packages.ts +162 -0
  398. package/scripts/relay-client.ts +2 -2
  399. package/scripts/typecheck-packages.mjs +3 -3
  400. package/scripts/unified-webhook-server.ts +22 -10
  401. package/scripts/verify-package-contents.ts +345 -0
  402. package/scripts/ws-server.ts +1 -1
  403. package/tracker.ts +1 -1
  404. package/harness/browser-scrapers/base-browser-scraper.d.ts +0 -91
  405. package/harness/browser-scrapers/chrome-profile-manager.d.ts +0 -80
  406. package/harness/browser-scrapers/codex-browser-scraper.d.ts +0 -60
  407. package/harness/browser-scrapers/index.d.ts +0 -29
  408. package/harness/browser-scrapers/zai-browser-scraper.d.ts +0 -79
  409. package/harness/e2e/browser-scrapers/base-browser-scraper.d.ts +0 -92
  410. package/harness/e2e/browser-scrapers/chrome-profile-manager.d.ts +0 -81
  411. package/harness/e2e/browser-scrapers/codex-browser-scraper.d.ts +0 -61
  412. package/harness/e2e/browser-scrapers/index.d.ts +0 -30
  413. package/harness/e2e/browser-scrapers/zai-browser-scraper.d.ts +0 -80
  414. package/harness/langchain/agents.d.ts +0 -143
  415. package/harness/langchain/agents.test.d.ts +0 -2
  416. package/harness/langchain/checkpointer.d.ts +0 -48
  417. package/harness/langchain/checkpointer.test.d.ts +0 -8
  418. package/harness/langchain/cron-cli.d.ts +0 -12
  419. package/harness/langchain/daemon.d.ts +0 -161
  420. package/harness/langchain/daemon.test.d.ts +0 -11
  421. package/harness/langchain/file-tools.d.ts +0 -97
  422. package/harness/langchain/graph.d.ts +0 -706
  423. package/harness/langchain/model-router.d.ts +0 -63
  424. package/harness/langchain/model-router.test.d.ts +0 -2
  425. package/harness/langchain/models.d.ts +0 -72
  426. package/harness/langchain/ping-pong-middleware.d.ts +0 -28
  427. package/harness/langchain/ping-pong-middleware.test.d.ts +0 -2
  428. package/harness/langchain/run.d.ts +0 -15
  429. package/harness/langchain/scoreboard.test.d.ts +0 -13
  430. package/harness/langchain/status-line.d.ts +0 -91
  431. package/harness/langchain/status-line.test.d.ts +0 -8
  432. package/harness/langchain/surge.d.ts +0 -111
  433. package/harness/langchain/surge.test.d.ts +0 -10
  434. package/harness/langchain/widget.d.ts +0 -105
  435. package/harness/langchain/widget.test.d.ts +0 -8
  436. package/packages/autonomous-runtime/dist/worker.d.ts +0 -63
  437. package/packages/autonomous-runtime/dist/worker.js +0 -133
  438. package/packages/capability-registry/src/types.d.ts +0 -47
  439. package/packages/clipboard/dist/clipboard.d.ts +0 -11
  440. package/packages/clipboard/dist/clipboard.js +0 -40
  441. package/packages/clipboard/dist/index.d.ts +0 -2
  442. package/packages/clipboard/dist/index.js +0 -2
  443. package/packages/clipboard/dist/types.d.ts +0 -13
  444. package/packages/clipboard/dist/types.js +0 -5
  445. package/packages/context-discovery/dist/discover.d.ts +0 -3
  446. package/packages/context-discovery/dist/discover.js +0 -42
  447. package/packages/context-discovery/dist/discovery.d.ts +0 -28
  448. package/packages/context-discovery/dist/discovery.js +0 -21
  449. package/packages/context-discovery/dist/index.d.ts +0 -3
  450. package/packages/context-discovery/dist/index.js +0 -2
  451. package/packages/context-discovery/dist/types.d.ts +0 -16
  452. package/packages/context-discovery/dist/types.js +0 -2
  453. package/packages/event-bus/dist/bus.d.ts +0 -15
  454. package/packages/event-bus/dist/bus.js +0 -90
  455. package/packages/event-bus/dist/index.d.ts +0 -4
  456. package/packages/event-bus/dist/index.js +0 -3
  457. package/packages/event-bus/dist/test/bus.test.js +0 -52
  458. package/packages/event-bus/dist/types.d.ts +0 -27
  459. package/packages/event-bus/dist/types.js +0 -10
  460. package/packages/event-store/dist/index.d.ts +0 -3
  461. package/packages/event-store/dist/index.js +0 -2
  462. package/packages/event-store/dist/store.d.ts +0 -15
  463. package/packages/event-store/dist/store.js +0 -131
  464. package/packages/event-store/dist/test/store.test.js +0 -57
  465. package/packages/event-store/dist/types.d.ts +0 -48
  466. package/packages/event-store/dist/types.js +0 -5
  467. package/packages/event-store/src/types.d.ts +0 -48
  468. package/packages/file-copy-helper/dist/src/extension.js +0 -186
  469. package/packages/model-registry/src/types.d.ts +0 -63
  470. package/packages/notification/dist/src/adapters/email-adapter.d.ts +0 -17
  471. package/packages/notification/dist/src/adapters/email-adapter.d.ts.map +0 -1
  472. package/packages/notification/dist/src/adapters/email-adapter.js +0 -89
  473. package/packages/notification/dist/src/adapters/email-adapter.js.map +0 -1
  474. package/packages/notification/dist/src/adapters/line-adapter.d.ts +0 -17
  475. package/packages/notification/dist/src/adapters/line-adapter.d.ts.map +0 -1
  476. package/packages/notification/dist/src/adapters/line-adapter.js +0 -99
  477. package/packages/notification/dist/src/adapters/line-adapter.js.map +0 -1
  478. package/packages/notification/dist/src/adapters/ntfy-adapter.d.ts +0 -17
  479. package/packages/notification/dist/src/adapters/ntfy-adapter.d.ts.map +0 -1
  480. package/packages/notification/dist/src/adapters/ntfy-adapter.js +0 -84
  481. package/packages/notification/dist/src/adapters/ntfy-adapter.js.map +0 -1
  482. package/packages/notification/dist/src/adapters/telegram-adapter.d.ts +0 -56
  483. package/packages/notification/dist/src/adapters/telegram-adapter.d.ts.map +0 -1
  484. package/packages/notification/dist/src/adapters/telegram-adapter.js +0 -251
  485. package/packages/notification/dist/src/adapters/telegram-adapter.js.map +0 -1
  486. package/packages/notification/dist/src/adapters/webhook-adapter.d.ts +0 -15
  487. package/packages/notification/dist/src/adapters/webhook-adapter.d.ts.map +0 -1
  488. package/packages/notification/dist/src/adapters/webhook-adapter.js +0 -64
  489. package/packages/notification/dist/src/adapters/webhook-adapter.js.map +0 -1
  490. package/packages/notification/dist/src/base-adapter.d.ts +0 -36
  491. package/packages/notification/dist/src/base-adapter.d.ts.map +0 -1
  492. package/packages/notification/dist/src/base-adapter.js +0 -39
  493. package/packages/notification/dist/src/base-adapter.js.map +0 -1
  494. package/packages/notification/dist/src/index.d.ts +0 -12
  495. package/packages/notification/dist/src/index.d.ts.map +0 -1
  496. package/packages/notification/dist/src/index.js +0 -12
  497. package/packages/notification/dist/src/index.js.map +0 -1
  498. package/packages/notification/dist/src/notification-center.d.ts +0 -89
  499. package/packages/notification/dist/src/notification-center.d.ts.map +0 -1
  500. package/packages/notification/dist/src/notification-center.js +0 -356
  501. package/packages/notification/dist/src/notification-center.js.map +0 -1
  502. package/packages/notification/dist/src/notification-policy.d.ts +0 -66
  503. package/packages/notification/dist/src/notification-policy.d.ts.map +0 -1
  504. package/packages/notification/dist/src/notification-policy.js +0 -153
  505. package/packages/notification/dist/src/notification-policy.js.map +0 -1
  506. package/packages/notification/dist/src/telegram-webhook-handler.d.ts +0 -86
  507. package/packages/notification/dist/src/telegram-webhook-handler.d.ts.map +0 -1
  508. package/packages/notification/dist/src/telegram-webhook-handler.js +0 -149
  509. package/packages/notification/dist/src/telegram-webhook-handler.js.map +0 -1
  510. package/packages/notification/dist/src/types.d.ts +0 -106
  511. package/packages/notification/dist/src/types.d.ts.map +0 -1
  512. package/packages/notification/dist/src/types.js +0 -7
  513. package/packages/notification/dist/src/types.js.map +0 -1
  514. package/packages/projection-engine/dist/engine.d.ts +0 -61
  515. package/packages/projection-engine/dist/engine.js +0 -76
  516. package/packages/projection-engine/dist/index.d.ts +0 -2
  517. package/packages/projection-engine/dist/index.js +0 -2
  518. package/packages/projection-engine/dist/project.d.ts +0 -3
  519. package/packages/projection-engine/dist/project.js +0 -24
  520. package/packages/projection-engine/dist/types.d.ts +0 -55
  521. package/packages/projection-engine/dist/types.js +0 -5
  522. package/packages/projection-engine/src/types.d.ts +0 -55
  523. package/packages/provider-adapter-sdk/dist/src/builder.d.ts +0 -140
  524. package/packages/provider-adapter-sdk/dist/src/builder.d.ts.map +0 -1
  525. package/packages/provider-adapter-sdk/dist/src/builder.js +0 -332
  526. package/packages/provider-adapter-sdk/dist/src/builder.js.map +0 -1
  527. package/packages/provider-adapter-sdk/dist/src/errors.d.ts +0 -71
  528. package/packages/provider-adapter-sdk/dist/src/errors.d.ts.map +0 -1
  529. package/packages/provider-adapter-sdk/dist/src/errors.js +0 -111
  530. package/packages/provider-adapter-sdk/dist/src/errors.js.map +0 -1
  531. package/packages/provider-adapter-sdk/dist/src/index.d.ts +0 -15
  532. package/packages/provider-adapter-sdk/dist/src/index.d.ts.map +0 -1
  533. package/packages/provider-adapter-sdk/dist/src/index.js +0 -19
  534. package/packages/provider-adapter-sdk/dist/src/index.js.map +0 -1
  535. package/packages/provider-adapter-sdk/dist/src/registry.d.ts +0 -108
  536. package/packages/provider-adapter-sdk/dist/src/registry.d.ts.map +0 -1
  537. package/packages/provider-adapter-sdk/dist/src/registry.js +0 -301
  538. package/packages/provider-adapter-sdk/dist/src/registry.js.map +0 -1
  539. package/packages/provider-adapter-sdk/dist/src/tester.d.ts +0 -71
  540. package/packages/provider-adapter-sdk/dist/src/tester.d.ts.map +0 -1
  541. package/packages/provider-adapter-sdk/dist/src/tester.js +0 -392
  542. package/packages/provider-adapter-sdk/dist/src/tester.js.map +0 -1
  543. package/packages/provider-adapter-sdk/dist/src/types.d.ts +0 -182
  544. package/packages/provider-adapter-sdk/dist/src/types.d.ts.map +0 -1
  545. package/packages/provider-adapter-sdk/dist/src/types.js +0 -11
  546. package/packages/provider-adapter-sdk/dist/src/types.js.map +0 -1
  547. package/packages/provider-router/dist/capability-registry/src/types.d.ts +0 -47
  548. package/packages/provider-router/dist/capability-registry/src/types.d.ts.map +0 -1
  549. package/packages/provider-router/dist/capability-registry/src/types.js +0 -10
  550. package/packages/provider-router/dist/capability-registry/src/types.js.map +0 -1
  551. package/packages/provider-router/dist/provider-router/src/index.d.ts +0 -23
  552. package/packages/provider-router/dist/provider-router/src/index.d.ts.map +0 -1
  553. package/packages/provider-router/dist/provider-router/src/index.js +0 -25
  554. package/packages/provider-router/dist/provider-router/src/index.js.map +0 -1
  555. package/packages/provider-router/dist/provider-router/src/policy.d.ts +0 -10
  556. package/packages/provider-router/dist/provider-router/src/policy.d.ts.map +0 -1
  557. package/packages/provider-router/dist/provider-router/src/policy.js +0 -45
  558. package/packages/provider-router/dist/provider-router/src/policy.js.map +0 -1
  559. package/packages/provider-router/dist/provider-router/src/provider-router.d.ts +0 -56
  560. package/packages/provider-router/dist/provider-router/src/provider-router.d.ts.map +0 -1
  561. package/packages/provider-router/dist/provider-router/src/provider-router.js +0 -222
  562. package/packages/provider-router/dist/provider-router/src/provider-router.js.map +0 -1
  563. package/packages/provider-router/dist/provider-router/src/strategies.d.ts +0 -19
  564. package/packages/provider-router/dist/provider-router/src/strategies.d.ts.map +0 -1
  565. package/packages/provider-router/dist/provider-router/src/strategies.js +0 -110
  566. package/packages/provider-router/dist/provider-router/src/strategies.js.map +0 -1
  567. package/packages/provider-router/dist/provider-router/src/types.d.ts +0 -91
  568. package/packages/provider-router/dist/provider-router/src/types.d.ts.map +0 -1
  569. package/packages/provider-router/dist/provider-router/src/types.js +0 -10
  570. package/packages/provider-router/dist/provider-router/src/types.js.map +0 -1
  571. package/packages/provider-router/dist/src/index.d.ts +0 -23
  572. package/packages/provider-router/dist/src/index.d.ts.map +0 -1
  573. package/packages/provider-router/dist/src/index.js +0 -25
  574. package/packages/provider-router/dist/src/index.js.map +0 -1
  575. package/packages/provider-router/dist/src/policy.d.ts +0 -10
  576. package/packages/provider-router/dist/src/policy.d.ts.map +0 -1
  577. package/packages/provider-router/dist/src/policy.js +0 -45
  578. package/packages/provider-router/dist/src/policy.js.map +0 -1
  579. package/packages/provider-router/dist/src/provider-router.d.ts +0 -56
  580. package/packages/provider-router/dist/src/provider-router.d.ts.map +0 -1
  581. package/packages/provider-router/dist/src/provider-router.js +0 -222
  582. package/packages/provider-router/dist/src/provider-router.js.map +0 -1
  583. package/packages/provider-router/dist/src/strategies.d.ts +0 -19
  584. package/packages/provider-router/dist/src/strategies.d.ts.map +0 -1
  585. package/packages/provider-router/dist/src/strategies.js +0 -110
  586. package/packages/provider-router/dist/src/strategies.js.map +0 -1
  587. package/packages/provider-router/dist/src/types.d.ts +0 -91
  588. package/packages/provider-router/dist/src/types.d.ts.map +0 -1
  589. package/packages/provider-router/dist/src/types.js +0 -10
  590. package/packages/provider-router/dist/src/types.js.map +0 -1
  591. package/packages/provider-router/dist/types/src/runtime-types.d.ts +0 -412
  592. package/packages/provider-router/dist/types/src/runtime-types.d.ts.map +0 -1
  593. package/packages/provider-router/dist/types/src/runtime-types.js +0 -2
  594. package/packages/provider-router/dist/types/src/runtime-types.js.map +0 -1
  595. package/packages/session-api/dist/api.d.ts +0 -83
  596. package/packages/session-api/dist/api.js +0 -35
  597. package/packages/session-api/dist/index.d.ts +0 -2
  598. package/packages/session-api/dist/index.js +0 -2
  599. package/packages/session-api/dist/types.d.ts +0 -22
  600. package/packages/session-api/dist/types.js +0 -5
  601. package/packages/session-export/dist/exporter.d.ts +0 -28
  602. package/packages/session-export/dist/exporter.js +0 -38
  603. package/packages/session-export/dist/index.d.ts +0 -2
  604. package/packages/session-export/dist/index.js +0 -2
  605. package/packages/session-export/dist/types.d.ts +0 -20
  606. package/packages/session-export/dist/types.js +0 -5
  607. package/packages/subscription-engine/dist/engine.d.ts +0 -13
  608. package/packages/subscription-engine/dist/engine.js +0 -40
  609. package/packages/subscription-engine/dist/index.d.ts +0 -2
  610. package/packages/subscription-engine/dist/index.js +0 -2
  611. package/packages/subscription-engine/dist/subscriptions.d.ts +0 -19
  612. package/packages/subscription-engine/dist/subscriptions.js +0 -32
  613. package/packages/subscription-engine/dist/types.d.ts +0 -24
  614. package/packages/subscription-engine/dist/types.js +0 -5
  615. package/packages/trajectory/test/store.test.d.ts +0 -2
  616. package/packages/workflow-events/dist/events.d.ts +0 -38
  617. package/packages/workflow-events/dist/events.js +0 -46
  618. package/packages/workflow-events/dist/index.d.ts +0 -2
  619. package/packages/workflow-events/dist/index.js +0 -2
  620. package/packages/workflow-events/dist/pipeline.d.ts +0 -21
  621. package/packages/workflow-events/dist/pipeline.js +0 -27
  622. package/packages/workflow-events/dist/types.d.ts +0 -110
  623. package/packages/workflow-events/dist/types.js +0 -5
  624. package/packages/workflow-events/src/types.d.ts +0 -110
@@ -0,0 +1,151 @@
1
+ /**
2
+ * The risk facts of a pending question.
3
+ *
4
+ * The autonomous decision is only as safe as the facts it is based on: a
5
+ * question that asks for permission for a destructive or irreversible
6
+ * action must never be approved while the user is away. The facts are
7
+ * derived deterministically from the question the agent asked and from the
8
+ * kind of the question - never from a guess.
9
+ *
10
+ * The classifier is deliberately conservative: an uncertain case is
11
+ * classified as "needs an explicit authorization", so the deterministic
12
+ * policy waits for a human instead of continuing the work.
13
+ */
14
+
15
+ export type QuestionKindLike =
16
+ | "routine"
17
+ | "approval"
18
+ | "clarification"
19
+ | "explicit"
20
+ | (string & {});
21
+
22
+ /** The risk facts of a proposed action. */
23
+ export interface QuestionRiskFacts {
24
+ /** Does the action need an explicit human authorization? */
25
+ requiresExplicitAuthorization: boolean;
26
+ /** Can the action destroy or damage something? */
27
+ destructive: boolean;
28
+ /** Can the action be undone? */
29
+ reversible: boolean;
30
+ /** Does the action reach the outside world? */
31
+ external: boolean;
32
+ /** The signals that produced the facts (for diagnostics). */
33
+ signals: string[];
34
+ }
35
+
36
+ export interface QuestionRiskInput {
37
+ /** The kind of the question ("routine", "approval", ...). */
38
+ kind?: QuestionKindLike;
39
+ /** The complete question text. */
40
+ text?: string;
41
+ }
42
+
43
+ interface RiskPattern {
44
+ /** The name of the signal, used for diagnostics. */
45
+ name: string;
46
+ pattern: RegExp;
47
+ }
48
+
49
+ /**
50
+ * Words that name an action that destroys, drops or overwrites something.
51
+ */
52
+ const DESTRUCTIVE_PATTERNS: RiskPattern[] = [
53
+ { name: "delete", pattern: /\b(delete|remove|drop|truncate|wipe|purge|destroy|erase)\b/ },
54
+ { name: "reset", pattern: /\b(reset|rollback|revert)\b/ },
55
+ { name: "revoke", pattern: /\b(revoke|rotate|invalidate)\b/ },
56
+ { name: "force-push", pattern: /\b(force[\s-]?push|push\s+(--force|-f\b)|reset\s+--hard|clean\s+-\w*f)\b/ },
57
+ { name: "drop-object", pattern: /\bdrop\s+(table|database|schema|collection|index|bucket)\b/ },
58
+ { name: "delete-object", pattern: /\bdelete\s+(the\s+)?(database|table|file|folder|branch|tag|user|account|volume|key)\b/ },
59
+ { name: "terminate", pattern: /\b(terminate|kill|shutdown|stop)\b/ },
60
+ { name: "overwrite", pattern: /\boverwrite\b/ },
61
+ ];
62
+
63
+ /**
64
+ * Words that name an action that reaches the outside world.
65
+ */
66
+ const EXTERNAL_PATTERNS: RiskPattern[] = [
67
+ { name: "production", pattern: /\b(production|prod|live)\b/ },
68
+ { name: "deploy", pattern: /\b(deploy|publish|release|ship)\b/ },
69
+ { name: "merge-main", pattern: /\bmerge\b.*\b(main|master|develop)\b/ },
70
+ { name: "notify-people", pattern: /\b(send|post|notify|email|message|announce)\b.*\b(users|customers|clients|everyone|subscribers|team|customer)\b/ },
71
+ { name: "money", pattern: /\b(payment|purchase|order|invoice|charge|refund|spend|billing)\b/ },
72
+ ];
73
+
74
+ /**
75
+ * Words that name a secret or a credential.
76
+ */
77
+ const SENSITIVE_PATTERNS: RiskPattern[] = [
78
+ { name: "credentials", pattern: /\b(secret|credential|api[\s-]?key|token|password)\b/ },
79
+ ];
80
+
81
+ function matchPatterns(
82
+ text: string,
83
+ patterns: RiskPattern[],
84
+ signals: string[],
85
+ ): boolean {
86
+ let matched = false;
87
+ for (const { name, pattern } of patterns) {
88
+ if (pattern.test(text)) {
89
+ signals.push(name);
90
+ matched = true;
91
+ }
92
+ }
93
+ return matched;
94
+ }
95
+
96
+ /**
97
+ * Derive the risk facts of a pending question.
98
+ *
99
+ * The rules:
100
+ *
101
+ * - A question that asks for permission for a concrete action ("approval",
102
+ * "explicit") needs the explicit authorization of a human. Jev never
103
+ * approves it on its own.
104
+ * - A question that names a destructive action is destructive, and its
105
+ * reversibility cannot be proven - so it waits.
106
+ * - A question with an unknown kind or an empty text is uncertain, and an
107
+ * uncertain case waits for the human.
108
+ * - Only a routine question without a destructive or external signal is
109
+ * harmless enough for an autonomous decision.
110
+ */
111
+ export function classifyQuestionRisk(
112
+ input: QuestionRiskInput,
113
+ ): QuestionRiskFacts {
114
+ const text = (input.text ?? "").toLowerCase();
115
+ const kind = input.kind;
116
+ const signals: string[] = [];
117
+
118
+ const destructive = matchPatterns(text, DESTRUCTIVE_PATTERNS, signals);
119
+ const external = matchPatterns(text, EXTERNAL_PATTERNS, signals);
120
+ const sensitive = matchPatterns(text, SENSITIVE_PATTERNS, signals);
121
+
122
+ // The agent asked for permission for a concrete action.
123
+ let requiresExplicitAuthorization =
124
+ kind === "approval" || kind === "explicit";
125
+
126
+ // A destructive action never gets an autonomous approval.
127
+ if (destructive) {
128
+ requiresExplicitAuthorization = true;
129
+ }
130
+
131
+ // An action that reaches the outside world or touches a secret needs a
132
+ // human as well.
133
+ if (external || sensitive) {
134
+ requiresExplicitAuthorization = true;
135
+ }
136
+
137
+ // Unknown kind or unknown text: the action cannot be judged.
138
+ if (!kind || !text.trim()) {
139
+ requiresExplicitAuthorization = true;
140
+ signals.push("unknown-question");
141
+ }
142
+
143
+ return {
144
+ requiresExplicitAuthorization,
145
+ destructive,
146
+ // A destructive action is not provably reversible.
147
+ reversible: !destructive,
148
+ external,
149
+ signals,
150
+ };
151
+ }
@@ -0,0 +1,221 @@
1
+ /**
2
+ * Decision context tests.
3
+ *
4
+ * Jev has to see the question it decides about, and the deterministic policy
5
+ * has to decide what is actually allowed. A clarification is never an
6
+ * approval, and an action that needs an explicit authorization or that
7
+ * cannot be undone is never approved autonomously.
8
+ */
9
+
10
+ import { describe, it, expect } from "bun:test";
11
+ import {
12
+ applyDecisionPolicy,
13
+ buildDecisionState,
14
+ createTaskState,
15
+ isEligibleForDecision,
16
+ MAX_LISTED_TASKS,
17
+ MAX_QUESTION_CHARS,
18
+ type DecisionContext,
19
+ } from "../src/auto-continue.js";
20
+
21
+ function context(overrides: Partial<DecisionContext> = {}): DecisionContext {
22
+ return {
23
+ question: {
24
+ requestId: "q-123",
25
+ text: "Want me to implement the toggle buttons now?",
26
+ kind: "approval",
27
+ proposedAction: "implement the toggle buttons",
28
+ consequence: "the button files change",
29
+ requiresExplicitAuthorization: false,
30
+ destructive: false,
31
+ external: false,
32
+ reversible: true,
33
+ },
34
+ currentTask: "Build the toggle",
35
+ completionRatio: 0.5,
36
+ totalTasks: 4,
37
+ completedTasks: 2,
38
+ blockers: [],
39
+ nextTasks: ["Build the toggle", "Write the test"],
40
+ validationStatus: "no pending final tier",
41
+ waitedMinutes: 6,
42
+ deadlineMinutes: 30,
43
+ ...overrides,
44
+ };
45
+ }
46
+
47
+ describe("decision threshold", () => {
48
+ it("is not eligible before the threshold", () => {
49
+ expect(isEligibleForDecision(4.9, 5)).toBe(false);
50
+ expect(isEligibleForDecision(5, 5)).toBe(true);
51
+ expect(isEligibleForDecision(30, 5)).toBe(true);
52
+ });
53
+ });
54
+
55
+ describe("decision state", () => {
56
+ it("carries the question, the kind and the risk of the action", () => {
57
+ const state = buildDecisionState(
58
+ createTaskState(["a"], ["b"], new Date(), new Date(), context()),
59
+ ) as any;
60
+
61
+ expect(state.pending_question.request_id).toBe("q-123");
62
+ expect(state.pending_question.kind).toBe("approval");
63
+ expect(state.pending_question.text).toContain("toggle buttons");
64
+ expect(state.pending_question.proposed_action).toBe(
65
+ "implement the toggle buttons",
66
+ );
67
+ expect(state.pending_question.consequence_of_approval).toBe(
68
+ "the button files change",
69
+ );
70
+ expect(state.pending_question.destructive).toBe(false);
71
+ expect(state.pending_question.reversible).toBe(true);
72
+ });
73
+
74
+ it("carries the bounded task and risk context", () => {
75
+ const state = buildDecisionState(
76
+ createTaskState(["a"], ["b"], new Date(), new Date(), context()),
77
+ ) as any;
78
+
79
+ expect(state.decision_context.current_task).toBe("Build the toggle");
80
+ expect(state.decision_context.completion_ratio).toBe(0.5);
81
+ expect(state.decision_context.validation_status).toBe(
82
+ "no pending final tier",
83
+ );
84
+ expect(state.decision_context.waited_minutes).toBe(6);
85
+ expect(state.decision_context.deadline_minutes).toBe(30);
86
+ expect(state.decision_context.next_tasks).toHaveLength(2);
87
+ });
88
+
89
+ it("bounds the task lists and the question text", () => {
90
+ const many = Array.from({ length: 50 }, (_, i) => `task ${i}`);
91
+ const state = buildDecisionState(
92
+ createTaskState(
93
+ many,
94
+ many,
95
+ new Date(),
96
+ new Date(),
97
+ context({
98
+ question: {
99
+ requestId: "q-123",
100
+ text: "x".repeat(MAX_QUESTION_CHARS + 500),
101
+ kind: "approval",
102
+ },
103
+ nextTasks: many,
104
+ }),
105
+ ),
106
+ ) as any;
107
+
108
+ expect(state.task_summary.completed_list).toHaveLength(MAX_LISTED_TASKS);
109
+ expect(state.task_summary.remaining_list).toHaveLength(MAX_LISTED_TASKS);
110
+ expect(state.decision_context.next_tasks).toHaveLength(MAX_LISTED_TASKS);
111
+ expect(state.pending_question.text).toHaveLength(MAX_QUESTION_CHARS);
112
+ });
113
+
114
+ it("has no question when there is none", () => {
115
+ const state = buildDecisionState(
116
+ createTaskState(["a"], ["b"], new Date(), new Date()),
117
+ ) as any;
118
+
119
+ expect(state.pending_question).toBeNull();
120
+ });
121
+ });
122
+
123
+ describe("decision policy", () => {
124
+ it("never turns a clarification into an approval", () => {
125
+ const result = applyDecisionPolicy(
126
+ "approve",
127
+ context({
128
+ question: {
129
+ requestId: "q-1",
130
+ text: "Do you mean the toggle or the switch?",
131
+ kind: "clarification",
132
+ },
133
+ }),
134
+ { confidence: 0.99 },
135
+ );
136
+
137
+ expect(result.outcome).toBe("wait");
138
+ expect(result.appliedRule).toBe("clarification-never-approved");
139
+ });
140
+
141
+ it("never approves an action that needs an explicit authorization", () => {
142
+ const result = applyDecisionPolicy(
143
+ "approve",
144
+ context({
145
+ question: {
146
+ requestId: "q-1",
147
+ text: "Shall I deploy to production?",
148
+ kind: "explicit",
149
+ requiresExplicitAuthorization: true,
150
+ },
151
+ }),
152
+ { confidence: 0.99 },
153
+ );
154
+
155
+ expect(result.outcome).toBe("wait");
156
+ expect(result.appliedRule).toBe("explicit-authorization-required");
157
+ });
158
+
159
+ it("never approves an irreversible destructive action", () => {
160
+ const result = applyDecisionPolicy(
161
+ "approve",
162
+ context({
163
+ question: {
164
+ requestId: "q-1",
165
+ text: "Shall I drop the production table?",
166
+ kind: "approval",
167
+ destructive: true,
168
+ reversible: false,
169
+ },
170
+ }),
171
+ { confidence: 0.99 },
172
+ );
173
+
174
+ expect(result.outcome).toBe("wait");
175
+ expect(result.appliedRule).toBe("irreversible-action");
176
+ });
177
+
178
+ it("proceeds with caution when a destructive action is reversible", () => {
179
+ const result = applyDecisionPolicy(
180
+ "approve",
181
+ context({
182
+ question: {
183
+ requestId: "q-1",
184
+ text: "Shall I regenerate the snapshots?",
185
+ kind: "approval",
186
+ destructive: true,
187
+ reversible: true,
188
+ },
189
+ }),
190
+ { confidence: 0.99 },
191
+ );
192
+
193
+ expect(result.outcome).toBe("proceed_with_caution");
194
+ expect(result.appliedRule).toBe("destructive-action");
195
+ });
196
+
197
+ it("waits when the confidence is below the threshold", () => {
198
+ const result = applyDecisionPolicy("approve", context(), {
199
+ confidence: 0.4,
200
+ confidenceThreshold: 0.7,
201
+ });
202
+
203
+ expect(result.outcome).toBe("wait");
204
+ expect(result.appliedRule).toBe("confidence-below-threshold");
205
+ });
206
+
207
+ it("approves a low risk approval with a high confidence", () => {
208
+ const result = applyDecisionPolicy("approve", context(), {
209
+ confidence: 0.9,
210
+ confidenceThreshold: 0.7,
211
+ });
212
+
213
+ expect(result.outcome).toBe("approve");
214
+ expect(result.appliedRule).toBeUndefined();
215
+ });
216
+
217
+ it("keeps a wait and a reject decision", () => {
218
+ expect(applyDecisionPolicy("wait", context()).outcome).toBe("wait");
219
+ expect(applyDecisionPolicy("reject", context()).outcome).toBe("reject");
220
+ });
221
+ });
@@ -0,0 +1,132 @@
1
+ /**
2
+ * The structured outcome of the evaluation.
3
+ *
4
+ * Jev has to be able to reject a proposed action, and the outcome of the
5
+ * evaluation may only tighten the decision the thresholds allow.
6
+ */
7
+
8
+ import { describe, it, expect } from "bun:test";
9
+ import {
10
+ applyDecisionPolicy,
11
+ isDecisionOutcome,
12
+ tightenOutcome,
13
+ type DecisionContext,
14
+ } from "../src/auto-continue.js";
15
+
16
+ const context: DecisionContext = {
17
+ question: {
18
+ requestId: "q-1",
19
+ text: "Should I continue with the remaining tasks?",
20
+ kind: "routine",
21
+ requiresExplicitAuthorization: false,
22
+ destructive: false,
23
+ external: false,
24
+ reversible: true,
25
+ },
26
+ currentTask: "Build the toggle",
27
+ completionRatio: 0.5,
28
+ totalTasks: 4,
29
+ completedTasks: 2,
30
+ blockers: [],
31
+ nextTasks: ["Build the toggle"],
32
+ validationStatus: "no pending final tier",
33
+ waitedMinutes: 6,
34
+ deadlineMinutes: 30,
35
+ };
36
+
37
+ describe("the structured outcome of the evaluation", () => {
38
+ it("recognizes the known outcomes", () => {
39
+ expect(isDecisionOutcome("approve")).toBe(true);
40
+ expect(isDecisionOutcome("proceed_with_caution")).toBe(true);
41
+ expect(isDecisionOutcome("wait")).toBe(true);
42
+ expect(isDecisionOutcome("reject")).toBe(true);
43
+ });
44
+
45
+ it("ignores an unknown outcome", () => {
46
+ expect(isDecisionOutcome("maybe")).toBe(false);
47
+ expect(isDecisionOutcome(undefined)).toBe(false);
48
+ });
49
+ });
50
+
51
+ describe("tightenOutcome", () => {
52
+ it("keeps a rejection a rejection", () => {
53
+ expect(tightenOutcome("approve", "reject")).toBe("reject");
54
+ expect(tightenOutcome("wait", "reject")).toBe("reject");
55
+ });
56
+
57
+ it("keeps a wait a wait", () => {
58
+ expect(tightenOutcome("approve", "wait")).toBe("wait");
59
+ });
60
+
61
+ it("turns an approval into a cautious approval", () => {
62
+ expect(tightenOutcome("approve", "proceed_with_caution")).toBe(
63
+ "proceed_with_caution",
64
+ );
65
+ });
66
+
67
+ it("never lets an approval beat the thresholds", () => {
68
+ expect(tightenOutcome("wait", "approve")).toBe("wait");
69
+ expect(tightenOutcome("proceed_with_caution", "approve")).toBe(
70
+ "proceed_with_caution",
71
+ );
72
+ });
73
+
74
+ it("keeps the threshold outcome without a proposal", () => {
75
+ expect(tightenOutcome("approve", undefined)).toBe("approve");
76
+ });
77
+ });
78
+
79
+ describe("the policy of a rejection", () => {
80
+ it("keeps a rejection", () => {
81
+ const result = applyDecisionPolicy("reject", context);
82
+
83
+ expect(result.outcome).toBe("reject");
84
+ expect(result.appliedRule).toBeUndefined();
85
+ });
86
+
87
+ it("never turns a rejection into an approval", () => {
88
+ const result = applyDecisionPolicy("reject", context, {
89
+ confidence: 0.99,
90
+ });
91
+
92
+ expect(result.outcome).toBe("reject");
93
+ });
94
+ });
95
+
96
+ describe("the policy of unknown risk facts", () => {
97
+ it("waits when nothing is known about the action", () => {
98
+ const result = applyDecisionPolicy(
99
+ "approve",
100
+ {
101
+ ...context,
102
+ question: {
103
+ requestId: "q-1",
104
+ text: "Should I continue?",
105
+ kind: "routine",
106
+ },
107
+ },
108
+ { confidence: 0.99 },
109
+ );
110
+
111
+ expect(result.outcome).toBe("wait");
112
+ expect(result.appliedRule).toBe("unknown-risk-facts");
113
+ });
114
+
115
+ it("still blocks a clarification first", () => {
116
+ const result = applyDecisionPolicy(
117
+ "approve",
118
+ {
119
+ ...context,
120
+ question: {
121
+ requestId: "q-1",
122
+ text: "Do you mean the toggle or the switch?",
123
+ kind: "clarification",
124
+ },
125
+ },
126
+ { confidence: 0.99 },
127
+ );
128
+
129
+ expect(result.outcome).toBe("wait");
130
+ expect(result.appliedRule).toBe("clarification-never-approved");
131
+ });
132
+ });
@@ -0,0 +1,116 @@
1
+ /**
2
+ * The risk facts of a pending question.
3
+ *
4
+ * The autonomous decision is only as safe as the facts it rests on: a
5
+ * question that asks for permission for a destructive or irreversible
6
+ * action must never be approved while the user is away.
7
+ */
8
+
9
+ import { describe, it, expect } from "bun:test";
10
+ import { classifyQuestionRisk } from "../src/question-risk.js";
11
+
12
+ describe("classifyQuestionRisk", () => {
13
+ describe("a routine continuation question", () => {
14
+ it("is harmless enough for an autonomous decision", () => {
15
+ const risk = classifyQuestionRisk({
16
+ kind: "routine",
17
+ text: "Should I continue with the remaining tasks?",
18
+ });
19
+
20
+ expect(risk.requiresExplicitAuthorization).toBe(false);
21
+ expect(risk.destructive).toBe(false);
22
+ expect(risk.reversible).toBe(true);
23
+ expect(risk.external).toBe(false);
24
+ });
25
+ });
26
+
27
+ describe("a question that asks for permission", () => {
28
+ it("needs an explicit authorization for an approval question", () => {
29
+ const risk = classifyQuestionRisk({
30
+ kind: "approval",
31
+ text: "Want me to implement the toggle buttons now?",
32
+ });
33
+
34
+ expect(risk.requiresExplicitAuthorization).toBe(true);
35
+ expect(risk.destructive).toBe(false);
36
+ });
37
+
38
+ it("needs an explicit authorization for an explicit question", () => {
39
+ const risk = classifyQuestionRisk({
40
+ kind: "explicit",
41
+ text: "Shall I push the release?",
42
+ });
43
+
44
+ expect(risk.requiresExplicitAuthorization).toBe(true);
45
+ });
46
+ });
47
+
48
+ describe("a destructive action", () => {
49
+ it("is destructive even in a routine question", () => {
50
+ const risk = classifyQuestionRisk({
51
+ kind: "routine",
52
+ text: "Should I remove the old config file now?",
53
+ });
54
+
55
+ expect(risk.destructive).toBe(true);
56
+ expect(risk.requiresExplicitAuthorization).toBe(true);
57
+ expect(risk.reversible).toBe(false);
58
+ });
59
+
60
+ it("recognizes a dropped database table", () => {
61
+ const risk = classifyQuestionRisk({
62
+ kind: "routine",
63
+ text: "Should I drop table users from the dev database?",
64
+ });
65
+
66
+ expect(risk.destructive).toBe(true);
67
+ expect(risk.reversible).toBe(false);
68
+ });
69
+
70
+ it("recognizes a force push", () => {
71
+ const risk = classifyQuestionRisk({
72
+ kind: "routine",
73
+ text: "Should I git push --force to the remote?",
74
+ });
75
+
76
+ expect(risk.destructive).toBe(true);
77
+ });
78
+ });
79
+
80
+ describe("an uncertain question", () => {
81
+ it("waits when the kind is unknown", () => {
82
+ const risk = classifyQuestionRisk({ text: "Should I go on?" });
83
+
84
+ expect(risk.requiresExplicitAuthorization).toBe(true);
85
+ expect(risk.signals).toContain("unknown-question");
86
+ });
87
+
88
+ it("waits when the text is empty", () => {
89
+ const risk = classifyQuestionRisk({ kind: "routine", text: " " });
90
+
91
+ expect(risk.requiresExplicitAuthorization).toBe(true);
92
+ expect(risk.signals).toContain("unknown-question");
93
+ });
94
+ });
95
+
96
+ describe("an action that reaches the outside world", () => {
97
+ it("is external", () => {
98
+ const risk = classifyQuestionRisk({
99
+ kind: "routine",
100
+ text: "Should I deploy to production now?",
101
+ });
102
+
103
+ expect(risk.external).toBe(true);
104
+ expect(risk.requiresExplicitAuthorization).toBe(true);
105
+ });
106
+
107
+ it("recognizes a message to the users", () => {
108
+ const risk = classifyQuestionRisk({
109
+ kind: "routine",
110
+ text: "Should I send the announcement email to all customers?",
111
+ });
112
+
113
+ expect(risk.external).toBe(true);
114
+ });
115
+ });
116
+ });
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/knowledge-graph",
3
- "version": "1.1.397",
3
+ "version": "1.1.402",
4
4
  "description": "Knowledge Graph extraction and provenance linking for SKILL.md files",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/knowledge-retrieval",
3
- "version": "1.1.397",
3
+ "version": "1.1.402",
4
4
  "description": "Knowledge retrieval via TencentDB-Agent-Memory MCP (RFC-0105)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/laravel-plugin",
3
- "version": "1.1.397",
3
+ "version": "1.1.402",
4
4
  "description": "Laravel framework analysis — artisan commands, Eloquent models, Blade",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/learning-engine",
3
- "version": "1.1.397",
3
+ "version": "1.1.402",
4
4
  "description": "Learning engine for extracting lessons from runtime execution (RFC-0058)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",