apex-code 0.0.1-alpha.0 → 0.0.1-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (426) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +66 -681
  3. package/dist/cli/args.d.ts +5 -0
  4. package/dist/cli/args.d.ts.map +1 -1
  5. package/dist/cli/args.js +45 -6
  6. package/dist/cli/args.js.map +1 -1
  7. package/dist/cli/auth-command.d.ts.map +1 -1
  8. package/dist/cli/auth-command.js +3 -3
  9. package/dist/cli/auth-command.js.map +1 -1
  10. package/dist/cli/cost-command.d.ts +19 -0
  11. package/dist/cli/cost-command.d.ts.map +1 -0
  12. package/dist/cli/cost-command.js +107 -0
  13. package/dist/cli/cost-command.js.map +1 -0
  14. package/dist/cli/startup-ui.d.ts +1 -1
  15. package/dist/cli/startup-ui.d.ts.map +1 -1
  16. package/dist/cli/startup-ui.js +1 -2
  17. package/dist/cli/startup-ui.js.map +1 -1
  18. package/dist/cli.d.ts.map +1 -1
  19. package/dist/cli.js +45 -16
  20. package/dist/cli.js.map +1 -1
  21. package/dist/config.d.ts +2 -2
  22. package/dist/config.d.ts.map +1 -1
  23. package/dist/config.js +14 -7
  24. package/dist/config.js.map +1 -1
  25. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  26. package/dist/core/agent-session-runtime.js +2 -0
  27. package/dist/core/agent-session-runtime.js.map +1 -1
  28. package/dist/core/agent-session-services.d.ts +9 -0
  29. package/dist/core/agent-session-services.d.ts.map +1 -1
  30. package/dist/core/agent-session-services.js +30 -4
  31. package/dist/core/agent-session-services.js.map +1 -1
  32. package/dist/core/agent-session.d.ts +46 -0
  33. package/dist/core/agent-session.d.ts.map +1 -1
  34. package/dist/core/agent-session.js +137 -19
  35. package/dist/core/agent-session.js.map +1 -1
  36. package/dist/core/auth-storage.d.ts.map +1 -1
  37. package/dist/core/auth-storage.js +6 -6
  38. package/dist/core/auth-storage.js.map +1 -1
  39. package/dist/core/bash-executor.d.ts.map +1 -1
  40. package/dist/core/bash-executor.js +1 -1
  41. package/dist/core/bash-executor.js.map +1 -1
  42. package/dist/core/context/deferred-schemas.d.ts +92 -0
  43. package/dist/core/context/deferred-schemas.d.ts.map +1 -0
  44. package/dist/core/context/deferred-schemas.js +74 -0
  45. package/dist/core/context/deferred-schemas.js.map +1 -0
  46. package/dist/core/context/eviction.d.ts +47 -0
  47. package/dist/core/context/eviction.d.ts.map +1 -0
  48. package/dist/core/context/eviction.js +83 -0
  49. package/dist/core/context/eviction.js.map +1 -0
  50. package/dist/core/context/pipeline.d.ts +90 -0
  51. package/dist/core/context/pipeline.d.ts.map +1 -0
  52. package/dist/core/context/pipeline.js +109 -0
  53. package/dist/core/context/pipeline.js.map +1 -0
  54. package/dist/core/credential-failover.d.ts +30 -0
  55. package/dist/core/credential-failover.d.ts.map +1 -0
  56. package/dist/core/credential-failover.js +46 -0
  57. package/dist/core/credential-failover.js.map +1 -0
  58. package/dist/core/credential-pool.d.ts +60 -0
  59. package/dist/core/credential-pool.d.ts.map +1 -0
  60. package/dist/core/credential-pool.js +84 -0
  61. package/dist/core/credential-pool.js.map +1 -0
  62. package/dist/core/delegation/agents.d.ts +15 -0
  63. package/dist/core/delegation/agents.d.ts.map +1 -0
  64. package/dist/core/delegation/agents.js +55 -0
  65. package/dist/core/delegation/agents.js.map +1 -0
  66. package/dist/core/delegation/ceiling.d.ts +29 -0
  67. package/dist/core/delegation/ceiling.d.ts.map +1 -0
  68. package/dist/core/delegation/ceiling.js +34 -0
  69. package/dist/core/delegation/ceiling.js.map +1 -0
  70. package/dist/core/delegation/runtime.d.ts +94 -0
  71. package/dist/core/delegation/runtime.d.ts.map +1 -0
  72. package/dist/core/delegation/runtime.js +117 -0
  73. package/dist/core/delegation/runtime.js.map +1 -0
  74. package/dist/core/durable-state/daemon.d.ts +37 -0
  75. package/dist/core/durable-state/daemon.d.ts.map +1 -0
  76. package/dist/core/durable-state/daemon.js +62 -0
  77. package/dist/core/durable-state/daemon.js.map +1 -0
  78. package/dist/core/durable-state/provenance.d.ts +7 -0
  79. package/dist/core/durable-state/provenance.d.ts.map +1 -0
  80. package/dist/core/durable-state/provenance.js +24 -0
  81. package/dist/core/durable-state/provenance.js.map +1 -0
  82. package/dist/core/durable-state/sqlite.d.ts +84 -0
  83. package/dist/core/durable-state/sqlite.d.ts.map +1 -0
  84. package/dist/core/durable-state/sqlite.js +331 -0
  85. package/dist/core/durable-state/sqlite.js.map +1 -0
  86. package/dist/core/environment.d.ts +12 -0
  87. package/dist/core/environment.d.ts.map +1 -0
  88. package/dist/core/environment.js +69 -0
  89. package/dist/core/environment.js.map +1 -0
  90. package/dist/core/evidence-policy.d.ts +17 -0
  91. package/dist/core/evidence-policy.d.ts.map +1 -0
  92. package/dist/core/evidence-policy.js +25 -0
  93. package/dist/core/evidence-policy.js.map +1 -0
  94. package/dist/core/evidence.d.ts +16 -0
  95. package/dist/core/evidence.d.ts.map +1 -0
  96. package/dist/core/evidence.js +51 -0
  97. package/dist/core/evidence.js.map +1 -0
  98. package/dist/core/experimental.d.ts.map +1 -1
  99. package/dist/core/experimental.js +2 -1
  100. package/dist/core/experimental.js.map +1 -1
  101. package/dist/core/extensions/types.d.ts +2 -0
  102. package/dist/core/extensions/types.d.ts.map +1 -1
  103. package/dist/core/extensions/types.js.map +1 -1
  104. package/dist/core/index.d.ts +1 -0
  105. package/dist/core/index.d.ts.map +1 -1
  106. package/dist/core/index.js +1 -0
  107. package/dist/core/index.js.map +1 -1
  108. package/dist/core/model-config.d.ts +8 -0
  109. package/dist/core/model-config.d.ts.map +1 -1
  110. package/dist/core/model-config.js +21 -5
  111. package/dist/core/model-config.js.map +1 -1
  112. package/dist/core/model-resolver.d.ts +20 -0
  113. package/dist/core/model-resolver.d.ts.map +1 -1
  114. package/dist/core/model-resolver.js +59 -0
  115. package/dist/core/model-resolver.js.map +1 -1
  116. package/dist/core/model-runtime.d.ts +73 -0
  117. package/dist/core/model-runtime.d.ts.map +1 -1
  118. package/dist/core/model-runtime.js +225 -8
  119. package/dist/core/model-runtime.js.map +1 -1
  120. package/dist/core/observability/aggregate.d.ts +21 -0
  121. package/dist/core/observability/aggregate.d.ts.map +1 -0
  122. package/dist/core/observability/aggregate.js +36 -0
  123. package/dist/core/observability/aggregate.js.map +1 -0
  124. package/dist/core/observability/otlp.d.ts +66 -0
  125. package/dist/core/observability/otlp.d.ts.map +1 -0
  126. package/dist/core/observability/otlp.js +95 -0
  127. package/dist/core/observability/otlp.js.map +1 -0
  128. package/dist/core/package-manager.d.ts.map +1 -1
  129. package/dist/core/package-manager.js +3 -2
  130. package/dist/core/package-manager.js.map +1 -1
  131. package/dist/core/permissions/gate.d.ts +35 -0
  132. package/dist/core/permissions/gate.d.ts.map +1 -0
  133. package/dist/core/permissions/gate.js +72 -0
  134. package/dist/core/permissions/gate.js.map +1 -0
  135. package/dist/core/permissions/modes.d.ts +18 -0
  136. package/dist/core/permissions/modes.d.ts.map +1 -0
  137. package/dist/core/permissions/modes.js +57 -0
  138. package/dist/core/permissions/modes.js.map +1 -0
  139. package/dist/core/permissions/responder.d.ts +30 -0
  140. package/dist/core/permissions/responder.d.ts.map +1 -0
  141. package/dist/core/permissions/responder.js +32 -0
  142. package/dist/core/permissions/responder.js.map +1 -0
  143. package/dist/core/permissions/rules.d.ts +34 -0
  144. package/dist/core/permissions/rules.d.ts.map +1 -0
  145. package/dist/core/permissions/rules.js +74 -0
  146. package/dist/core/permissions/rules.js.map +1 -0
  147. package/dist/core/permissions/startup.d.ts +33 -0
  148. package/dist/core/permissions/startup.d.ts.map +1 -0
  149. package/dist/core/permissions/startup.js +55 -0
  150. package/dist/core/permissions/startup.js.map +1 -0
  151. package/dist/core/permissions/store.d.ts +114 -0
  152. package/dist/core/permissions/store.d.ts.map +1 -0
  153. package/dist/core/permissions/store.js +229 -0
  154. package/dist/core/permissions/store.js.map +1 -0
  155. package/dist/core/project-trust.d.ts.map +1 -1
  156. package/dist/core/project-trust.js +1 -1
  157. package/dist/core/project-trust.js.map +1 -1
  158. package/dist/core/provider-attribution.d.ts.map +1 -1
  159. package/dist/core/provider-attribution.js +6 -7
  160. package/dist/core/provider-attribution.js.map +1 -1
  161. package/dist/core/remote-catalog-provider.d.ts +2 -2
  162. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  163. package/dist/core/remote-catalog-provider.js +20 -16
  164. package/dist/core/remote-catalog-provider.js.map +1 -1
  165. package/dist/core/sandbox/child-entry.d.ts +2 -0
  166. package/dist/core/sandbox/child-entry.d.ts.map +1 -0
  167. package/dist/core/sandbox/child-entry.js +11 -0
  168. package/dist/core/sandbox/child-entry.js.map +1 -0
  169. package/dist/core/sandbox/cli-launch.d.ts +27 -0
  170. package/dist/core/sandbox/cli-launch.d.ts.map +1 -0
  171. package/dist/core/sandbox/cli-launch.js +133 -0
  172. package/dist/core/sandbox/cli-launch.js.map +1 -0
  173. package/dist/core/sandbox/cli-supervisor.d.ts +25 -0
  174. package/dist/core/sandbox/cli-supervisor.d.ts.map +1 -0
  175. package/dist/core/sandbox/cli-supervisor.js +57 -0
  176. package/dist/core/sandbox/cli-supervisor.js.map +1 -0
  177. package/dist/core/sandbox/linux-backend.d.ts +18 -0
  178. package/dist/core/sandbox/linux-backend.d.ts.map +1 -0
  179. package/dist/core/sandbox/linux-backend.js +186 -0
  180. package/dist/core/sandbox/linux-backend.js.map +1 -0
  181. package/dist/core/sandbox/macos-backend.d.ts +18 -0
  182. package/dist/core/sandbox/macos-backend.d.ts.map +1 -0
  183. package/dist/core/sandbox/macos-backend.js +195 -0
  184. package/dist/core/sandbox/macos-backend.js.map +1 -0
  185. package/dist/core/sandbox/network-proxy.d.ts +19 -0
  186. package/dist/core/sandbox/network-proxy.d.ts.map +1 -0
  187. package/dist/core/sandbox/network-proxy.js +79 -0
  188. package/dist/core/sandbox/network-proxy.js.map +1 -0
  189. package/dist/core/sandbox/policy.d.ts +32 -0
  190. package/dist/core/sandbox/policy.d.ts.map +1 -0
  191. package/dist/core/sandbox/policy.js +38 -0
  192. package/dist/core/sandbox/policy.js.map +1 -0
  193. package/dist/core/sandbox/supervisor.d.ts +31 -0
  194. package/dist/core/sandbox/supervisor.d.ts.map +1 -0
  195. package/dist/core/sandbox/supervisor.js +18 -0
  196. package/dist/core/sandbox/supervisor.js.map +1 -0
  197. package/dist/core/sandbox/violations.d.ts +23 -0
  198. package/dist/core/sandbox/violations.d.ts.map +1 -0
  199. package/dist/core/sandbox/violations.js +30 -0
  200. package/dist/core/sandbox/violations.js.map +1 -0
  201. package/dist/core/sdk.d.ts +20 -36
  202. package/dist/core/sdk.d.ts.map +1 -1
  203. package/dist/core/sdk.js +129 -2
  204. package/dist/core/sdk.js.map +1 -1
  205. package/dist/core/session-manager.d.ts +41 -2
  206. package/dist/core/session-manager.d.ts.map +1 -1
  207. package/dist/core/session-manager.js +57 -0
  208. package/dist/core/session-manager.js.map +1 -1
  209. package/dist/core/session-share.d.ts +16 -0
  210. package/dist/core/session-share.d.ts.map +1 -0
  211. package/dist/core/session-share.js +22 -0
  212. package/dist/core/session-share.js.map +1 -0
  213. package/dist/core/settings-manager.d.ts +38 -9
  214. package/dist/core/settings-manager.d.ts.map +1 -1
  215. package/dist/core/settings-manager.js +39 -24
  216. package/dist/core/settings-manager.js.map +1 -1
  217. package/dist/core/system-prompt.d.ts.map +1 -1
  218. package/dist/core/system-prompt.js +5 -5
  219. package/dist/core/system-prompt.js.map +1 -1
  220. package/dist/core/timings.d.ts +1 -1
  221. package/dist/core/timings.d.ts.map +1 -1
  222. package/dist/core/timings.js +3 -2
  223. package/dist/core/timings.js.map +1 -1
  224. package/dist/core/tools/ask-user.d.ts +25 -0
  225. package/dist/core/tools/ask-user.d.ts.map +1 -0
  226. package/dist/core/tools/ask-user.js +49 -0
  227. package/dist/core/tools/ask-user.js.map +1 -0
  228. package/dist/core/tools/bash-command-segments.d.ts +22 -0
  229. package/dist/core/tools/bash-command-segments.d.ts.map +1 -0
  230. package/dist/core/tools/bash-command-segments.js +128 -0
  231. package/dist/core/tools/bash-command-segments.js.map +1 -0
  232. package/dist/core/tools/bash.d.ts +26 -3
  233. package/dist/core/tools/bash.d.ts.map +1 -1
  234. package/dist/core/tools/bash.js +105 -16
  235. package/dist/core/tools/bash.js.map +1 -1
  236. package/dist/core/tools/contract.d.ts +156 -0
  237. package/dist/core/tools/contract.d.ts.map +1 -0
  238. package/dist/core/tools/contract.js +48 -0
  239. package/dist/core/tools/contract.js.map +1 -0
  240. package/dist/core/tools/delegate.d.ts +38 -0
  241. package/dist/core/tools/delegate.d.ts.map +1 -0
  242. package/dist/core/tools/delegate.js +66 -0
  243. package/dist/core/tools/delegate.js.map +1 -0
  244. package/dist/core/tools/edit.d.ts +2 -2
  245. package/dist/core/tools/edit.d.ts.map +1 -1
  246. package/dist/core/tools/edit.js +24 -0
  247. package/dist/core/tools/edit.js.map +1 -1
  248. package/dist/core/tools/find.d.ts +2 -2
  249. package/dist/core/tools/find.d.ts.map +1 -1
  250. package/dist/core/tools/find.js +12 -0
  251. package/dist/core/tools/find.js.map +1 -1
  252. package/dist/core/tools/grep.d.ts +2 -2
  253. package/dist/core/tools/grep.d.ts.map +1 -1
  254. package/dist/core/tools/grep.js +12 -0
  255. package/dist/core/tools/grep.js.map +1 -1
  256. package/dist/core/tools/index.d.ts +29 -4
  257. package/dist/core/tools/index.d.ts.map +1 -1
  258. package/dist/core/tools/index.js +118 -2
  259. package/dist/core/tools/index.js.map +1 -1
  260. package/dist/core/tools/ls.d.ts +2 -2
  261. package/dist/core/tools/ls.d.ts.map +1 -1
  262. package/dist/core/tools/ls.js +12 -0
  263. package/dist/core/tools/ls.js.map +1 -1
  264. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  265. package/dist/core/tools/output-accumulator.js +1 -1
  266. package/dist/core/tools/output-accumulator.js.map +1 -1
  267. package/dist/core/tools/path-permission.d.ts +18 -0
  268. package/dist/core/tools/path-permission.d.ts.map +1 -0
  269. package/dist/core/tools/path-permission.js +28 -0
  270. package/dist/core/tools/path-permission.js.map +1 -0
  271. package/dist/core/tools/plan-present.d.ts +27 -0
  272. package/dist/core/tools/plan-present.d.ts.map +1 -0
  273. package/dist/core/tools/plan-present.js +55 -0
  274. package/dist/core/tools/plan-present.js.map +1 -0
  275. package/dist/core/tools/read.d.ts +2 -2
  276. package/dist/core/tools/read.d.ts.map +1 -1
  277. package/dist/core/tools/read.js +12 -0
  278. package/dist/core/tools/read.js.map +1 -1
  279. package/dist/core/tools/test.d.ts +34 -0
  280. package/dist/core/tools/test.d.ts.map +1 -0
  281. package/dist/core/tools/test.js +75 -0
  282. package/dist/core/tools/test.js.map +1 -0
  283. package/dist/core/tools/todo-write.d.ts +31 -0
  284. package/dist/core/tools/todo-write.d.ts.map +1 -0
  285. package/dist/core/tools/todo-write.js +51 -0
  286. package/dist/core/tools/todo-write.js.map +1 -0
  287. package/dist/core/tools/tool-definition-wrapper.d.ts +13 -2
  288. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  289. package/dist/core/tools/tool-definition-wrapper.js +11 -1
  290. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  291. package/dist/core/tools/tool-schema.d.ts +22 -0
  292. package/dist/core/tools/tool-schema.d.ts.map +1 -0
  293. package/dist/core/tools/tool-schema.js +45 -0
  294. package/dist/core/tools/tool-schema.js.map +1 -0
  295. package/dist/core/tools/web-fetch.d.ts +26 -0
  296. package/dist/core/tools/web-fetch.d.ts.map +1 -0
  297. package/dist/core/tools/web-fetch.js +62 -0
  298. package/dist/core/tools/web-fetch.js.map +1 -0
  299. package/dist/core/tools/web-search.d.ts +26 -0
  300. package/dist/core/tools/web-search.d.ts.map +1 -0
  301. package/dist/core/tools/web-search.js +53 -0
  302. package/dist/core/tools/web-search.js.map +1 -0
  303. package/dist/core/tools/write.d.ts +6 -2
  304. package/dist/core/tools/write.d.ts.map +1 -1
  305. package/dist/core/tools/write.js +32 -1
  306. package/dist/core/tools/write.js.map +1 -1
  307. package/dist/core/usage-performance-store.d.ts +56 -0
  308. package/dist/core/usage-performance-store.d.ts.map +1 -0
  309. package/dist/core/usage-performance-store.js +85 -0
  310. package/dist/core/usage-performance-store.js.map +1 -0
  311. package/dist/index.d.ts +1 -0
  312. package/dist/index.d.ts.map +1 -1
  313. package/dist/index.js +1 -0
  314. package/dist/index.js.map +1 -1
  315. package/dist/main.d.ts.map +1 -1
  316. package/dist/main.js +48 -6
  317. package/dist/main.js.map +1 -1
  318. package/dist/migrations.d.ts.map +1 -1
  319. package/dist/migrations.js +2 -2
  320. package/dist/migrations.js.map +1 -1
  321. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  322. package/dist/modes/interactive/components/config-selector.js +9 -6
  323. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  324. package/dist/modes/interactive/components/first-time-setup.d.ts +1 -4
  325. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  326. package/dist/modes/interactive/components/first-time-setup.js +11 -39
  327. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  328. package/dist/modes/interactive/components/footer.d.ts +8 -1
  329. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  330. package/dist/modes/interactive/components/footer.js +49 -20
  331. package/dist/modes/interactive/components/footer.js.map +1 -1
  332. package/dist/modes/interactive/components/settings-selector.d.ts +2 -2
  333. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  334. package/dist/modes/interactive/components/settings-selector.js +6 -6
  335. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  336. package/dist/modes/interactive/components/tool-execution.d.ts +2 -1
  337. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  338. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  339. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  340. package/dist/modes/interactive/external-editor.js +58 -9
  341. package/dist/modes/interactive/external-editor.js.map +1 -1
  342. package/dist/modes/interactive/interactive-mode.d.ts +2 -3
  343. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  344. package/dist/modes/interactive/interactive-mode.js +92 -104
  345. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  346. package/dist/modes/interactive/theme/theme-schema.json +2 -2
  347. package/dist/package-manager-cli.d.ts.map +1 -1
  348. package/dist/package-manager-cli.js +15 -10
  349. package/dist/package-manager-cli.js.map +1 -1
  350. package/dist/rpc-entry.d.ts.map +1 -1
  351. package/dist/rpc-entry.js +2 -1
  352. package/dist/rpc-entry.js.map +1 -1
  353. package/dist/server/create-harness.d.ts +1 -1
  354. package/dist/server/create-harness.d.ts.map +1 -1
  355. package/dist/server/create-harness.js +6 -5
  356. package/dist/server/create-harness.js.map +1 -1
  357. package/dist/testing/replay/metrics.d.ts +24 -0
  358. package/dist/testing/replay/metrics.d.ts.map +1 -0
  359. package/dist/testing/replay/metrics.js +35 -0
  360. package/dist/testing/replay/metrics.js.map +1 -0
  361. package/dist/testing/replay/recorded-provider.d.ts +10 -0
  362. package/dist/testing/replay/recorded-provider.d.ts.map +1 -0
  363. package/dist/testing/replay/recorded-provider.js +108 -0
  364. package/dist/testing/replay/recorded-provider.js.map +1 -0
  365. package/dist/testing/replay/runner.d.ts +56 -0
  366. package/dist/testing/replay/runner.d.ts.map +1 -0
  367. package/dist/testing/replay/runner.js +406 -0
  368. package/dist/testing/replay/runner.js.map +1 -0
  369. package/dist/utils/apex-code-user-agent.d.ts +2 -0
  370. package/dist/utils/apex-code-user-agent.d.ts.map +1 -0
  371. package/dist/utils/apex-code-user-agent.js +5 -0
  372. package/dist/utils/apex-code-user-agent.js.map +1 -0
  373. package/dist/utils/clipboard-image.d.ts.map +1 -1
  374. package/dist/utils/clipboard-image.js +1 -1
  375. package/dist/utils/clipboard-image.js.map +1 -1
  376. package/dist/utils/tools-manager.d.ts +32 -0
  377. package/dist/utils/tools-manager.d.ts.map +1 -1
  378. package/dist/utils/tools-manager.js +198 -100
  379. package/dist/utils/tools-manager.js.map +1 -1
  380. package/dist/utils/version-check.d.ts +5 -5
  381. package/dist/utils/version-check.d.ts.map +1 -1
  382. package/dist/utils/version-check.js +23 -14
  383. package/dist/utils/version-check.js.map +1 -1
  384. package/dist/utils/windows-self-update.d.ts.map +1 -1
  385. package/dist/utils/windows-self-update.js +1 -1
  386. package/dist/utils/windows-self-update.js.map +1 -1
  387. package/docs/compaction.md +21 -21
  388. package/docs/containerization.md +24 -21
  389. package/docs/custom-provider.md +9 -9
  390. package/docs/development.md +11 -11
  391. package/docs/environment-variables.md +36 -77
  392. package/docs/extensions.md +47 -47
  393. package/docs/index.md +12 -24
  394. package/docs/json.md +6 -6
  395. package/docs/keybindings.md +3 -3
  396. package/docs/llama-cpp.md +7 -7
  397. package/docs/models.md +11 -11
  398. package/docs/packages.md +46 -42
  399. package/docs/prompt-templates.md +3 -3
  400. package/docs/providers.md +10 -10
  401. package/docs/quickstart.md +49 -32
  402. package/docs/rpc.md +11 -11
  403. package/docs/sdk.md +4 -4
  404. package/docs/security.md +18 -18
  405. package/docs/session-format.md +9 -9
  406. package/docs/sessions.md +13 -13
  407. package/docs/settings.md +10 -14
  408. package/docs/shell-aliases.md +1 -1
  409. package/docs/skills.md +8 -8
  410. package/docs/terminal-setup.md +12 -12
  411. package/docs/termux.md +4 -4
  412. package/docs/themes.md +8 -8
  413. package/docs/tmux.md +4 -4
  414. package/docs/tui.md +3 -3
  415. package/docs/usage.md +54 -51
  416. package/docs/windows.md +1 -1
  417. package/npm-shrinkwrap.json +5 -5
  418. package/package.json +2 -3
  419. package/dist/core/telemetry.d.ts +0 -3
  420. package/dist/core/telemetry.d.ts.map +0 -1
  421. package/dist/core/telemetry.js +0 -9
  422. package/dist/core/telemetry.js.map +0 -1
  423. package/dist/utils/pi-user-agent.d.ts +0 -2
  424. package/dist/utils/pi-user-agent.d.ts.map +0 -1
  425. package/dist/utils/pi-user-agent.js +0 -5
  426. package/dist/utils/pi-user-agent.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../src/core/durable-state/sqlite.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { DatabaseSync } from \"node:sqlite\";\n\n/** Current schema for the daemon-owned durable-state sidecar. */\nexport const CURRENT_DURABLE_STATE_SCHEMA_VERSION = 4;\n\nexport type CommandJournalState = \"created\" | \"running\" | \"completed\" | \"failed\" | \"interrupted\";\n\nexport type SessionLeaseMode = \"shared\" | \"exclusive\";\nexport interface SessionLeaseRecord {\n\tsessionId: string;\n\townerId: string;\n\tmode: SessionLeaseMode;\n\texpiresAt: string;\n}\n\nexport interface CommandJournalRecord {\n\tid: string;\n\tsessionId: string;\n\tcommand: string;\n\tstate: CommandJournalState;\n\tcreatedAt: string;\n\tupdatedAt: string;\n\trecoveryReason?: string;\n}\n\nconst COMMAND_TRANSITIONS: Record<CommandJournalState, readonly CommandJournalState[]> = {\n\tcreated: [\"running\", \"failed\", \"interrupted\"],\n\trunning: [\"completed\", \"failed\", \"interrupted\"],\n\tcompleted: [],\n\tfailed: [],\n\tinterrupted: [],\n};\n\nconst TABLES = [\n\t\"cache_entries\",\n\t\"command_journal\",\n\t\"daemon_metadata\",\n\t\"model_performance\",\n\t\"schema_migrations\",\n\t\"session_leases\",\n] as const;\n\n/** Columns added to `model_performance` in schema version 4 (roadmap Phase 8). */\nconst MODEL_PERFORMANCE_V4_COLUMNS: ReadonlyArray<readonly [string, string]> = [\n\t[\"session_id\", \"TEXT\"],\n\t[\"role\", \"TEXT\"],\n\t[\"credential_identity\", \"TEXT\"],\n\t[\"outcome\", \"TEXT\"],\n\t[\"failure_kind\", \"TEXT\"],\n\t[\"input_tokens\", \"INTEGER\"],\n\t[\"output_tokens\", \"INTEGER\"],\n\t[\"cache_read_tokens\", \"INTEGER\"],\n\t[\"cache_write_tokens\", \"INTEGER\"],\n\t[\"cost\", \"REAL\"],\n];\n\n/**\n * Plain, domain-independent row shape for `model_performance`. Deliberately not the\n * richer `UsagePerformanceSample` (which carries a branded `CredentialIdentity` and a\n * nested `usage` object) — this module owns SQLite schema and writes only, never\n * `ModelRuntime`'s domain types, to avoid a circular import between the two.\n */\nexport interface UsagePerformanceRow {\n\tprovider: string;\n\tmodelId: string;\n\tttftMs: number | null;\n\tgenerationMs: number | null;\n\tsampledAt: string;\n\tsessionId: string | null;\n\trole: string | null;\n\tcredentialIdentity: string | null;\n\toutcome: string | null;\n\tfailureKind: string | null;\n\tinputTokens: number | null;\n\toutputTokens: number | null;\n\tcacheReadTokens: number | null;\n\tcacheWriteTokens: number | null;\n\tcost: number | null;\n}\n\nexport interface RecoveryDiagnostic {\n\tcommandId: string;\n\tsessionId: string;\n\tpreviousState: \"created\" | \"running\";\n\tstate: \"interrupted\";\n\treason: string;\n\trecoveredAt: string;\n}\n\nexport interface DurableStateStore {\n\tschemaVersion(): number;\n\ttableNames(): string[];\n\tcolumns(tableName: string): string[];\n\tbeginCommand(input: { id?: string; sessionId: string; command: string }): CommandJournalRecord;\n\trunCommand<T>(input: { id?: string; sessionId: string; command: string }, operation: () => Promise<T>): Promise<T>;\n\ttransitionCommand(id: string, state: Exclude<CommandJournalState, \"created\">, reason?: string): CommandJournalRecord;\n\tgetCommand(id: string): CommandJournalRecord | undefined;\n\tcommandCount(): number;\n\trecoverUnfinishedCommands(reason?: string): CommandJournalRecord[];\n\trecoverUnfinishedCommandsWithDiagnostics(reason?: string): RecoveryDiagnostic[];\n\tacquireLease(input: {\n\t\tsessionId: string;\n\t\townerId: string;\n\t\tmode: SessionLeaseMode;\n\t\tttlMs: number;\n\t}): SessionLeaseRecord;\n\treleaseLease(sessionId: string, ownerId: string): void;\n\tgetLease(sessionId: string): SessionLeaseRecord | undefined;\n\trecordUsagePerformance(row: UsagePerformanceRow): void;\n\tlistUsagePerformance(): UsagePerformanceRow[];\n\tpruneUsagePerformance(olderThanIso: string): number;\n\tclose(): void;\n}\n\nfunction readSchemaVersion(database: DatabaseSync): number {\n\tconst row = database.prepare(\"SELECT COALESCE(MAX(version), 0) AS version FROM schema_migrations\").get() as\n\t\t| { version: number }\n\t\t| undefined;\n\treturn row?.version ?? 0;\n}\n\nfunction createSchema(database: DatabaseSync): void {\n\tdatabase.exec(`\n\t\tCREATE TABLE IF NOT EXISTS schema_migrations (\n\t\t\tversion INTEGER PRIMARY KEY,\n\t\t\tapplied_at TEXT NOT NULL\n\t\t);\n\t\tCREATE TABLE IF NOT EXISTS daemon_metadata (\n\t\t\tkey TEXT PRIMARY KEY,\n\t\t\tvalue TEXT NOT NULL\n\t\t);\n\t\tCREATE TABLE IF NOT EXISTS command_journal (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tsession_id TEXT NOT NULL,\n\t\t\tcommand TEXT NOT NULL,\n\t\t\tstate TEXT NOT NULL,\n\t\t\trecovery_reason TEXT,\n\t\t\tcreated_at TEXT NOT NULL,\n\t\t\tupdated_at TEXT NOT NULL\n\t\t);\n\t\tCREATE TABLE IF NOT EXISTS session_leases (\n\t\t\tsession_id TEXT NOT NULL,\n\t\t\towner_id TEXT NOT NULL,\n\t\t\tmode TEXT NOT NULL,\n\t\t\texpires_at TEXT NOT NULL,\n\t\t\tPRIMARY KEY (session_id, owner_id)\n\t\t);\n\t\tCREATE TABLE IF NOT EXISTS model_performance (\n\t\t\tid INTEGER PRIMARY KEY,\n\t\t\tprovider TEXT NOT NULL,\n\t\t\tmodel_id TEXT NOT NULL,\n\t\t\tttft_ms REAL,\n\t\t\tgeneration_ms REAL,\n\t\t\tsampled_at TEXT NOT NULL,\n\t\t\tsession_id TEXT,\n\t\t\trole TEXT,\n\t\t\tcredential_identity TEXT,\n\t\t\toutcome TEXT,\n\t\t\tfailure_kind TEXT,\n\t\t\tinput_tokens INTEGER,\n\t\t\toutput_tokens INTEGER,\n\t\t\tcache_read_tokens INTEGER,\n\t\t\tcache_write_tokens INTEGER,\n\t\t\tcost REAL\n\t\t);\n\t\tCREATE TABLE IF NOT EXISTS cache_entries (\n\t\t\tkey TEXT PRIMARY KEY,\n\t\t\tvalue BLOB NOT NULL,\n\t\t\texpires_at TEXT\n\t\t);\n\t`);\n}\n\nfunction readCommand(database: DatabaseSync, id: string): CommandJournalRecord | undefined {\n\tconst row = database\n\t\t.prepare(\n\t\t\t\"SELECT id, session_id, command, state, recovery_reason, created_at, updated_at FROM command_journal WHERE id = ?\",\n\t\t)\n\t\t.get(id) as\n\t\t| {\n\t\t\t\tid: string;\n\t\t\t\tsession_id: string;\n\t\t\t\tcommand: string;\n\t\t\t\tstate: CommandJournalState;\n\t\t\t\trecovery_reason: string | null;\n\t\t\t\tcreated_at: string;\n\t\t\t\tupdated_at: string;\n\t\t }\n\t\t| undefined;\n\tif (!row) return undefined;\n\treturn {\n\t\tid: row.id,\n\t\tsessionId: row.session_id,\n\t\tcommand: row.command,\n\t\tstate: row.state,\n\t\tcreatedAt: row.created_at,\n\t\tupdatedAt: row.updated_at,\n\t\t...(row.recovery_reason ? { recoveryReason: row.recovery_reason } : {}),\n\t};\n}\n\nfunction readLeases(database: DatabaseSync, sessionId: string): SessionLeaseRecord[] {\n\tconst rows = database\n\t\t.prepare(\n\t\t\t\"SELECT session_id, owner_id, mode, expires_at FROM session_leases WHERE session_id = ? ORDER BY owner_id\",\n\t\t)\n\t\t.all(sessionId) as Array<{ session_id: string; owner_id: string; mode: SessionLeaseMode; expires_at: string }>;\n\treturn rows.map((row) => ({\n\t\tsessionId: row.session_id,\n\t\townerId: row.owner_id,\n\t\tmode: row.mode,\n\t\texpiresAt: row.expires_at,\n\t}));\n}\n\nfunction readLease(database: DatabaseSync, sessionId: string): SessionLeaseRecord | undefined {\n\treturn readLeases(database, sessionId)[0];\n}\n\nfunction transitionCommand(\n\tdatabase: DatabaseSync,\n\tid: string,\n\tstate: Exclude<CommandJournalState, \"created\">,\n\treason?: string,\n): CommandJournalRecord {\n\tconst current = readCommand(database, id);\n\tif (!current) throw new Error(`Unknown command journal entry: ${id}`);\n\tif (!COMMAND_TRANSITIONS[current.state].includes(state))\n\t\tthrow new Error(`Invalid command transition: ${current.state} -> ${state}`);\n\tconst now = new Date().toISOString();\n\tdatabase\n\t\t.prepare(\"UPDATE command_journal SET state = ?, recovery_reason = ?, updated_at = ? WHERE id = ?\")\n\t\t.run(state, reason ?? null, now, id);\n\treturn readCommand(database, id)!;\n}\n\nexport function openDurableStateStore(path: string): DurableStateStore {\n\tconst database = new DatabaseSync(path);\n\ttry {\n\t\tdatabase.exec(\"BEGIN IMMEDIATE\");\n\t\tcreateSchema(database);\n\t\tconst version = readSchemaVersion(database);\n\t\tif (version > CURRENT_DURABLE_STATE_SCHEMA_VERSION) {\n\t\t\tdatabase.exec(\"ROLLBACK\");\n\t\t\tthrow new Error(\n\t\t\t\t`Durable state database schema version ${version} is newer than this version (${CURRENT_DURABLE_STATE_SCHEMA_VERSION})`,\n\t\t\t);\n\t\t}\n\t\tif (version < 2) {\n\t\t\tconst commandColumns = database.prepare('PRAGMA table_info(\"command_journal\")').all() as Array<{\n\t\t\t\tname: string;\n\t\t\t}>;\n\t\t\tif (!commandColumns.some((column) => column.name === \"recovery_reason\"))\n\t\t\t\tdatabase.exec(\"ALTER TABLE command_journal ADD COLUMN recovery_reason TEXT\");\n\t\t}\n\t\tif (version < 3 && version > 0) {\n\t\t\tdatabase.exec(`\n\t\t\t\tALTER TABLE session_leases RENAME TO session_leases_v2;\n\t\t\t\tCREATE TABLE session_leases (\n\t\t\t\t\tsession_id TEXT NOT NULL,\n\t\t\t\t\towner_id TEXT NOT NULL,\n\t\t\t\t\tmode TEXT NOT NULL,\n\t\t\t\t\texpires_at TEXT NOT NULL,\n\t\t\t\t\tPRIMARY KEY (session_id, owner_id)\n\t\t\t\t);\n\t\t\t\tINSERT INTO session_leases (session_id, owner_id, mode, expires_at)\n\t\t\t\tSELECT session_id, owner_id, mode, expires_at FROM session_leases_v2;\n\t\t\t\tDROP TABLE session_leases_v2;\n\t\t\t`);\n\t\t}\n\t\tif (version < 4 && version > 0) {\n\t\t\tconst modelPerformanceColumns = database.prepare('PRAGMA table_info(\"model_performance\")').all() as Array<{\n\t\t\t\tname: string;\n\t\t\t}>;\n\t\t\tconst existingNames = new Set(modelPerformanceColumns.map((column) => column.name));\n\t\t\tfor (const [name, type] of MODEL_PERFORMANCE_V4_COLUMNS) {\n\t\t\t\tif (!existingNames.has(name)) database.exec(`ALTER TABLE model_performance ADD COLUMN ${name} ${type}`);\n\t\t\t}\n\t\t\tdatabase.exec(\"DROP TABLE IF EXISTS usage_totals\");\n\t\t}\n\t\tif (version < CURRENT_DURABLE_STATE_SCHEMA_VERSION) {\n\t\t\tdatabase\n\t\t\t\t.prepare(\"INSERT INTO schema_migrations (version, applied_at) VALUES (?, ?)\")\n\t\t\t\t.run(CURRENT_DURABLE_STATE_SCHEMA_VERSION, new Date().toISOString());\n\t\t}\n\t\tdatabase.exec(\"COMMIT\");\n\t} catch (error) {\n\t\ttry {\n\t\t\tdatabase.exec(\"ROLLBACK\");\n\t\t} catch {\n\t\t\t// Preserve the original migration error.\n\t\t}\n\t\tdatabase.close();\n\t\tthrow error;\n\t}\n\n\treturn {\n\t\tschemaVersion: () => readSchemaVersion(database),\n\t\ttableNames: () => {\n\t\t\tconst rows = database\n\t\t\t\t.prepare(\"SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%' ORDER BY name\")\n\t\t\t\t.all() as Array<{ name: string }>;\n\t\t\treturn rows.map((row) => row.name);\n\t\t},\n\t\tcolumns: (tableName) => {\n\t\t\tif (!TABLES.includes(tableName as (typeof TABLES)[number]))\n\t\t\t\tthrow new Error(`Unknown durable-state table: ${tableName}`);\n\t\t\tconst rows = database.prepare(`PRAGMA table_info(\"${tableName}\")`).all() as Array<{ name: string }>;\n\t\t\treturn rows.map((row) => row.name);\n\t\t},\n\t\tbeginCommand: ({ id = randomUUID(), sessionId, command }) => {\n\t\t\tconst now = new Date().toISOString();\n\t\t\tdatabase\n\t\t\t\t.prepare(\n\t\t\t\t\t\"INSERT INTO command_journal (id, session_id, command, state, created_at, updated_at) VALUES (?, ?, ?, 'created', ?, ?)\",\n\t\t\t\t)\n\t\t\t\t.run(id, sessionId, command, now, now);\n\t\t\treturn readCommand(database, id)!;\n\t\t},\n\t\trunCommand: async (input, operation) => {\n\t\t\tconst entry = (() => {\n\t\t\t\tconst id = input.id ?? randomUUID();\n\t\t\t\tconst now = new Date().toISOString();\n\t\t\t\tdatabase\n\t\t\t\t\t.prepare(\n\t\t\t\t\t\t\"INSERT INTO command_journal (id, session_id, command, state, created_at, updated_at) VALUES (?, ?, ?, 'created', ?, ?)\",\n\t\t\t\t\t)\n\t\t\t\t\t.run(id, input.sessionId, input.command, now, now);\n\t\t\t\treturn readCommand(database, id)!;\n\t\t\t})();\n\t\t\ttransitionCommand(database, entry.id, \"running\");\n\t\t\ttry {\n\t\t\t\tconst result = await operation();\n\t\t\t\ttransitionCommand(database, entry.id, \"completed\");\n\t\t\t\treturn result;\n\t\t\t} catch (error) {\n\t\t\t\ttransitionCommand(database, entry.id, \"failed\");\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\ttransitionCommand: (id, state, reason) => {\n\t\t\tconst current = readCommand(database, id);\n\t\t\tif (!current) throw new Error(`Unknown command journal entry: ${id}`);\n\t\t\tif (!COMMAND_TRANSITIONS[current.state].includes(state))\n\t\t\t\tthrow new Error(`Invalid command transition: ${current.state} -> ${state}`);\n\t\t\tconst now = new Date().toISOString();\n\t\t\tdatabase\n\t\t\t\t.prepare(\"UPDATE command_journal SET state = ?, recovery_reason = ?, updated_at = ? WHERE id = ?\")\n\t\t\t\t.run(state, reason ?? null, now, id);\n\t\t\treturn readCommand(database, id)!;\n\t\t},\n\t\tgetCommand: (id) => readCommand(database, id),\n\t\tcommandCount: () =>\n\t\t\t(database.prepare(\"SELECT COUNT(*) AS count FROM command_journal\").get() as { count: number }).count,\n\t\trecoverUnfinishedCommands: (reason = \"daemon restarted before command completion\") => {\n\t\t\tconst rows = database\n\t\t\t\t.prepare(\"SELECT id FROM command_journal WHERE state IN ('created', 'running')\")\n\t\t\t\t.all() as Array<{ id: string }>;\n\t\t\treturn rows.map(({ id }) => {\n\t\t\t\tconst current = readCommand(database, id)!;\n\t\t\t\treturn current.state === \"interrupted\" ? current : transitionCommand(database, id, \"interrupted\", reason);\n\t\t\t});\n\t\t},\n\t\trecoverUnfinishedCommandsWithDiagnostics: (reason = \"daemon restarted before command completion\") => {\n\t\t\tconst recoveredAt = new Date().toISOString();\n\t\t\tconst rows = database\n\t\t\t\t.prepare(\"SELECT id, session_id, state FROM command_journal WHERE state IN ('created', 'running')\")\n\t\t\t\t.all() as Array<{ id: string; session_id: string; state: \"created\" | \"running\" }>;\n\t\t\treturn rows.map((row) => {\n\t\t\t\ttransitionCommand(database, row.id, \"interrupted\", reason);\n\t\t\t\treturn {\n\t\t\t\t\tcommandId: row.id,\n\t\t\t\t\tsessionId: row.session_id,\n\t\t\t\t\tpreviousState: row.state,\n\t\t\t\t\tstate: \"interrupted\" as const,\n\t\t\t\t\treason,\n\t\t\t\t\trecoveredAt,\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\tacquireLease: ({ sessionId, ownerId, mode, ttlMs }) => {\n\t\t\tif (!Number.isFinite(ttlMs) || ttlMs <= 0) throw new Error(\"Lease TTL must be positive\");\n\t\t\tdatabase.exec(\"BEGIN IMMEDIATE\");\n\t\t\ttry {\n\t\t\t\tdatabase.prepare(\"DELETE FROM session_leases WHERE expires_at <= ?\").run(new Date().toISOString());\n\t\t\t\tconst active = readLeases(database, sessionId).filter((lease) => lease.ownerId !== ownerId);\n\t\t\t\tif (active.some((lease) => lease.mode === \"exclusive\") || (mode === \"exclusive\" && active.length > 0)) {\n\t\t\t\t\tthrow new Error(`Session lease is held for ${sessionId}`);\n\t\t\t\t}\n\t\t\t\tconst expiresAt = new Date(Date.now() + ttlMs).toISOString();\n\t\t\t\tdatabase\n\t\t\t\t\t.prepare(\n\t\t\t\t\t\t\"INSERT INTO session_leases (session_id, owner_id, mode, expires_at) VALUES (?, ?, ?, ?) ON CONFLICT(session_id, owner_id) DO UPDATE SET mode=excluded.mode, expires_at=excluded.expires_at\",\n\t\t\t\t\t)\n\t\t\t\t\t.run(sessionId, ownerId, mode, expiresAt);\n\t\t\t\tdatabase.exec(\"COMMIT\");\n\t\t\t\treturn readLeases(database, sessionId).find((lease) => lease.ownerId === ownerId)!;\n\t\t\t} catch (error) {\n\t\t\t\tdatabase.exec(\"ROLLBACK\");\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\treleaseLease: (sessionId, ownerId) => {\n\t\t\tdatabase.prepare(\"DELETE FROM session_leases WHERE session_id = ? AND owner_id = ?\").run(sessionId, ownerId);\n\t\t},\n\t\tgetLease: (sessionId) => readLease(database, sessionId),\n\t\trecordUsagePerformance: (row) => {\n\t\t\tdatabase\n\t\t\t\t.prepare(\n\t\t\t\t\t`INSERT INTO model_performance (\n\t\t\t\t\t\tprovider, model_id, ttft_ms, generation_ms, sampled_at,\n\t\t\t\t\t\tsession_id, role, credential_identity, outcome, failure_kind,\n\t\t\t\t\t\tinput_tokens, output_tokens, cache_read_tokens, cache_write_tokens, cost\n\t\t\t\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n\t\t\t\t)\n\t\t\t\t.run(\n\t\t\t\t\trow.provider,\n\t\t\t\t\trow.modelId,\n\t\t\t\t\trow.ttftMs,\n\t\t\t\t\trow.generationMs,\n\t\t\t\t\trow.sampledAt,\n\t\t\t\t\trow.sessionId,\n\t\t\t\t\trow.role,\n\t\t\t\t\trow.credentialIdentity,\n\t\t\t\t\trow.outcome,\n\t\t\t\t\trow.failureKind,\n\t\t\t\t\trow.inputTokens,\n\t\t\t\t\trow.outputTokens,\n\t\t\t\t\trow.cacheReadTokens,\n\t\t\t\t\trow.cacheWriteTokens,\n\t\t\t\t\trow.cost,\n\t\t\t\t);\n\t\t},\n\t\tlistUsagePerformance: () =>\n\t\t\t(\n\t\t\t\tdatabase\n\t\t\t\t\t.prepare(\n\t\t\t\t\t\t`SELECT provider, model_id, ttft_ms, generation_ms, sampled_at, session_id, role,\n\t\t\t\t\t\t\tcredential_identity, outcome, failure_kind, input_tokens, output_tokens,\n\t\t\t\t\t\t\tcache_read_tokens, cache_write_tokens, cost\n\t\t\t\t\t\tFROM model_performance ORDER BY id ASC`,\n\t\t\t\t\t)\n\t\t\t\t\t.all() as Array<{\n\t\t\t\t\tprovider: string;\n\t\t\t\t\tmodel_id: string;\n\t\t\t\t\tttft_ms: number | null;\n\t\t\t\t\tgeneration_ms: number | null;\n\t\t\t\t\tsampled_at: string;\n\t\t\t\t\tsession_id: string | null;\n\t\t\t\t\trole: string | null;\n\t\t\t\t\tcredential_identity: string | null;\n\t\t\t\t\toutcome: string | null;\n\t\t\t\t\tfailure_kind: string | null;\n\t\t\t\t\tinput_tokens: number | null;\n\t\t\t\t\toutput_tokens: number | null;\n\t\t\t\t\tcache_read_tokens: number | null;\n\t\t\t\t\tcache_write_tokens: number | null;\n\t\t\t\t\tcost: number | null;\n\t\t\t\t}>\n\t\t\t).map((row) => ({\n\t\t\t\tprovider: row.provider,\n\t\t\t\tmodelId: row.model_id,\n\t\t\t\tttftMs: row.ttft_ms,\n\t\t\t\tgenerationMs: row.generation_ms,\n\t\t\t\tsampledAt: row.sampled_at,\n\t\t\t\tsessionId: row.session_id,\n\t\t\t\trole: row.role,\n\t\t\t\tcredentialIdentity: row.credential_identity,\n\t\t\t\toutcome: row.outcome,\n\t\t\t\tfailureKind: row.failure_kind,\n\t\t\t\tinputTokens: row.input_tokens,\n\t\t\t\toutputTokens: row.output_tokens,\n\t\t\t\tcacheReadTokens: row.cache_read_tokens,\n\t\t\t\tcacheWriteTokens: row.cache_write_tokens,\n\t\t\t\tcost: row.cost,\n\t\t\t})),\n\t\tpruneUsagePerformance: (olderThanIso) => {\n\t\t\tconst result = database.prepare(\"DELETE FROM model_performance WHERE sampled_at < ?\").run(olderThanIso);\n\t\t\treturn Number(result.changes);\n\t\t},\n\t\tclose: () => database.close(),\n\t};\n}\n"]}
@@ -0,0 +1,12 @@
1
+ /** Canonical Apex Code environment compatibility boundary. */
2
+ export interface EnvironmentVariableSpec {
3
+ readonly canonical: string;
4
+ readonly legacy: string;
5
+ readonly description: string;
6
+ }
7
+ export declare const APEX_ENVIRONMENT_VARIABLES: [string, string, string][];
8
+ export declare function getApexEnvironment(name: string, environment?: NodeJS.ProcessEnv): string | undefined;
9
+ export declare function setApexEnvironment(name: string, value: string | undefined, environment?: NodeJS.ProcessEnv): void;
10
+ export declare function setApexSubprocessEnvironment(environment: NodeJS.ProcessEnv, values: Partial<Record<string, string | undefined>>): void;
11
+ export declare function getApexEnvironmentSpecs(): readonly EnvironmentVariableSpec[];
12
+ //# sourceMappingURL=environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/core/environment.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,MAAM,WAAW,uBAAuB;IACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,0BAA0B,4BAgBmB,CAAC;AAmB3D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,GAAG,SAAS,CAWjH;AAED,wBAAgB,kBAAkB,CACjC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,WAAW,GAAE,MAAM,CAAC,UAAwB,GAC1C,IAAI,CAcN;AAED,wBAAgB,4BAA4B,CAC3C,WAAW,EAAE,MAAM,CAAC,UAAU,EAC9B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GACjD,IAAI,CAEN;AAED,wBAAgB,uBAAuB,IAAI,SAAS,uBAAuB,EAAE,CAE5E","sourcesContent":["/** Canonical Apex Code environment compatibility boundary. */\nexport interface EnvironmentVariableSpec {\n\treadonly canonical: string;\n\treadonly legacy: string;\n\treadonly description: string;\n}\n\nexport const APEX_ENVIRONMENT_VARIABLES = [\n\t[\"APEX_CODE_OFFLINE\", \"PI_OFFLINE\", \"Disable startup network operations\"],\n\t[\"APEX_CODE_SKIP_VERSION_CHECK\", \"PI_SKIP_VERSION_CHECK\", \"Skip the npm version check\"],\n\t[\"APEX_CODE_PACKAGE_DIR\", \"PI_PACKAGE_DIR\", \"Override the package directory\"],\n\t[\"APEX_CODE_EXPERIMENTAL\", \"PI_EXPERIMENTAL\", \"Enable experimental features\"],\n\t[\"APEX_CODE_STARTUP_BENCHMARK\", \"PI_STARTUP_BENCHMARK\", \"Enable startup benchmarking\"],\n\t[\"APEX_CODE_TIMING\", \"PI_TIMING\", \"Enable timing diagnostics\"],\n\t[\"APEX_CODE_CLEAR_ON_SHRINK\", \"PI_CLEAR_ON_SHRINK\", \"Clear context on shrink\"],\n\t[\"APEX_CODE_HARDWARE_CURSOR\", \"PI_HARDWARE_CURSOR\", \"Enable the hardware cursor\"],\n\t[\"APEX_CODE_SHARE_VIEWER_URL\", \"PI_SHARE_VIEWER_URL\", \"Base URL for the share viewer\"],\n\t[\"APEX_CODE_CODING_AGENT\", \"PI_CODING_AGENT\", \"Identify an Apex Code child process\"],\n\t[\"APEX_CODE_SESSION_ID\", \"PI_SESSION_ID\", \"Current session identifier\"],\n\t[\"APEX_CODE_SESSION_FILE\", \"PI_SESSION_FILE\", \"Current session file\"],\n\t[\"APEX_CODE_PROVIDER\", \"PI_PROVIDER\", \"Current provider\"],\n\t[\"APEX_CODE_MODEL\", \"PI_MODEL\", \"Current model\"],\n\t[\"APEX_CODE_REASONING_LEVEL\", \"PI_REASONING_LEVEL\", \"Current reasoning level\"],\n] satisfies readonly (readonly [string, string, string])[];\n\nconst specs = new Map<string, EnvironmentVariableSpec>(\n\tAPEX_ENVIRONMENT_VARIABLES.map(([canonical, legacy, description]) => [\n\t\tcanonical,\n\t\t{ canonical, legacy, description },\n\t]),\n);\nconst warned = new Set<string>();\n\nfunction warn(spec: EnvironmentVariableSpec, conflict: boolean): void {\n\tconst key = `${spec.canonical}:${conflict ? \"conflict\" : \"legacy\"}`;\n\tif (warned.has(key)) return;\n\twarned.add(key);\n\tconsole.error(\n\t\t`Apex Code: ${conflict ? `both ${spec.canonical} and legacy ${spec.legacy} are set; using ${spec.canonical}` : `${spec.legacy} is deprecated; use ${spec.canonical}`}.`,\n\t);\n}\n\nexport function getApexEnvironment(name: string, environment: NodeJS.ProcessEnv = process.env): string | undefined {\n\tconst spec = specs.get(name) ?? [...specs.values()].find((candidate) => candidate.legacy === name);\n\tif (!spec) return environment[name];\n\tconst canonical = environment[spec.canonical];\n\tconst legacy = environment[spec.legacy];\n\tif (canonical !== undefined) {\n\t\tif (legacy !== undefined && canonical !== legacy) warn(spec, true);\n\t\treturn canonical;\n\t}\n\tif (legacy !== undefined) warn(spec, false);\n\treturn legacy;\n}\n\nexport function setApexEnvironment(\n\tname: string,\n\tvalue: string | undefined,\n\tenvironment: NodeJS.ProcessEnv = process.env,\n): void {\n\tconst spec = specs.get(name) ?? [...specs.values()].find((candidate) => candidate.legacy === name);\n\tif (!spec) {\n\t\tif (value === undefined) delete environment[name];\n\t\telse environment[name] = value;\n\t\treturn;\n\t}\n\tif (value === undefined) {\n\t\tdelete environment[spec.canonical];\n\t\tdelete environment[spec.legacy];\n\t\treturn;\n\t}\n\tenvironment[spec.canonical] = value;\n\tenvironment[spec.legacy] = value;\n}\n\nexport function setApexSubprocessEnvironment(\n\tenvironment: NodeJS.ProcessEnv,\n\tvalues: Partial<Record<string, string | undefined>>,\n): void {\n\tfor (const [name, value] of Object.entries(values)) setApexEnvironment(name, value, environment);\n}\n\nexport function getApexEnvironmentSpecs(): readonly EnvironmentVariableSpec[] {\n\treturn [...specs.values()];\n}\n"]}
@@ -0,0 +1,69 @@
1
+ export const APEX_ENVIRONMENT_VARIABLES = [
2
+ ["APEX_CODE_OFFLINE", "PI_OFFLINE", "Disable startup network operations"],
3
+ ["APEX_CODE_SKIP_VERSION_CHECK", "PI_SKIP_VERSION_CHECK", "Skip the npm version check"],
4
+ ["APEX_CODE_PACKAGE_DIR", "PI_PACKAGE_DIR", "Override the package directory"],
5
+ ["APEX_CODE_EXPERIMENTAL", "PI_EXPERIMENTAL", "Enable experimental features"],
6
+ ["APEX_CODE_STARTUP_BENCHMARK", "PI_STARTUP_BENCHMARK", "Enable startup benchmarking"],
7
+ ["APEX_CODE_TIMING", "PI_TIMING", "Enable timing diagnostics"],
8
+ ["APEX_CODE_CLEAR_ON_SHRINK", "PI_CLEAR_ON_SHRINK", "Clear context on shrink"],
9
+ ["APEX_CODE_HARDWARE_CURSOR", "PI_HARDWARE_CURSOR", "Enable the hardware cursor"],
10
+ ["APEX_CODE_SHARE_VIEWER_URL", "PI_SHARE_VIEWER_URL", "Base URL for the share viewer"],
11
+ ["APEX_CODE_CODING_AGENT", "PI_CODING_AGENT", "Identify an Apex Code child process"],
12
+ ["APEX_CODE_SESSION_ID", "PI_SESSION_ID", "Current session identifier"],
13
+ ["APEX_CODE_SESSION_FILE", "PI_SESSION_FILE", "Current session file"],
14
+ ["APEX_CODE_PROVIDER", "PI_PROVIDER", "Current provider"],
15
+ ["APEX_CODE_MODEL", "PI_MODEL", "Current model"],
16
+ ["APEX_CODE_REASONING_LEVEL", "PI_REASONING_LEVEL", "Current reasoning level"],
17
+ ];
18
+ const specs = new Map(APEX_ENVIRONMENT_VARIABLES.map(([canonical, legacy, description]) => [
19
+ canonical,
20
+ { canonical, legacy, description },
21
+ ]));
22
+ const warned = new Set();
23
+ function warn(spec, conflict) {
24
+ const key = `${spec.canonical}:${conflict ? "conflict" : "legacy"}`;
25
+ if (warned.has(key))
26
+ return;
27
+ warned.add(key);
28
+ console.error(`Apex Code: ${conflict ? `both ${spec.canonical} and legacy ${spec.legacy} are set; using ${spec.canonical}` : `${spec.legacy} is deprecated; use ${spec.canonical}`}.`);
29
+ }
30
+ export function getApexEnvironment(name, environment = process.env) {
31
+ const spec = specs.get(name) ?? [...specs.values()].find((candidate) => candidate.legacy === name);
32
+ if (!spec)
33
+ return environment[name];
34
+ const canonical = environment[spec.canonical];
35
+ const legacy = environment[spec.legacy];
36
+ if (canonical !== undefined) {
37
+ if (legacy !== undefined && canonical !== legacy)
38
+ warn(spec, true);
39
+ return canonical;
40
+ }
41
+ if (legacy !== undefined)
42
+ warn(spec, false);
43
+ return legacy;
44
+ }
45
+ export function setApexEnvironment(name, value, environment = process.env) {
46
+ const spec = specs.get(name) ?? [...specs.values()].find((candidate) => candidate.legacy === name);
47
+ if (!spec) {
48
+ if (value === undefined)
49
+ delete environment[name];
50
+ else
51
+ environment[name] = value;
52
+ return;
53
+ }
54
+ if (value === undefined) {
55
+ delete environment[spec.canonical];
56
+ delete environment[spec.legacy];
57
+ return;
58
+ }
59
+ environment[spec.canonical] = value;
60
+ environment[spec.legacy] = value;
61
+ }
62
+ export function setApexSubprocessEnvironment(environment, values) {
63
+ for (const [name, value] of Object.entries(values))
64
+ setApexEnvironment(name, value, environment);
65
+ }
66
+ export function getApexEnvironmentSpecs() {
67
+ return [...specs.values()];
68
+ }
69
+ //# sourceMappingURL=environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/core/environment.ts"],"names":[],"mappings":"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","sourcesContent":["/** Canonical Apex Code environment compatibility boundary. */\nexport interface EnvironmentVariableSpec {\n\treadonly canonical: string;\n\treadonly legacy: string;\n\treadonly description: string;\n}\n\nexport const APEX_ENVIRONMENT_VARIABLES = [\n\t[\"APEX_CODE_OFFLINE\", \"PI_OFFLINE\", \"Disable startup network operations\"],\n\t[\"APEX_CODE_SKIP_VERSION_CHECK\", \"PI_SKIP_VERSION_CHECK\", \"Skip the npm version check\"],\n\t[\"APEX_CODE_PACKAGE_DIR\", \"PI_PACKAGE_DIR\", \"Override the package directory\"],\n\t[\"APEX_CODE_EXPERIMENTAL\", \"PI_EXPERIMENTAL\", \"Enable experimental features\"],\n\t[\"APEX_CODE_STARTUP_BENCHMARK\", \"PI_STARTUP_BENCHMARK\", \"Enable startup benchmarking\"],\n\t[\"APEX_CODE_TIMING\", \"PI_TIMING\", \"Enable timing diagnostics\"],\n\t[\"APEX_CODE_CLEAR_ON_SHRINK\", \"PI_CLEAR_ON_SHRINK\", \"Clear context on shrink\"],\n\t[\"APEX_CODE_HARDWARE_CURSOR\", \"PI_HARDWARE_CURSOR\", \"Enable the hardware cursor\"],\n\t[\"APEX_CODE_SHARE_VIEWER_URL\", \"PI_SHARE_VIEWER_URL\", \"Base URL for the share viewer\"],\n\t[\"APEX_CODE_CODING_AGENT\", \"PI_CODING_AGENT\", \"Identify an Apex Code child process\"],\n\t[\"APEX_CODE_SESSION_ID\", \"PI_SESSION_ID\", \"Current session identifier\"],\n\t[\"APEX_CODE_SESSION_FILE\", \"PI_SESSION_FILE\", \"Current session file\"],\n\t[\"APEX_CODE_PROVIDER\", \"PI_PROVIDER\", \"Current provider\"],\n\t[\"APEX_CODE_MODEL\", \"PI_MODEL\", \"Current model\"],\n\t[\"APEX_CODE_REASONING_LEVEL\", \"PI_REASONING_LEVEL\", \"Current reasoning level\"],\n] satisfies readonly (readonly [string, string, string])[];\n\nconst specs = new Map<string, EnvironmentVariableSpec>(\n\tAPEX_ENVIRONMENT_VARIABLES.map(([canonical, legacy, description]) => [\n\t\tcanonical,\n\t\t{ canonical, legacy, description },\n\t]),\n);\nconst warned = new Set<string>();\n\nfunction warn(spec: EnvironmentVariableSpec, conflict: boolean): void {\n\tconst key = `${spec.canonical}:${conflict ? \"conflict\" : \"legacy\"}`;\n\tif (warned.has(key)) return;\n\twarned.add(key);\n\tconsole.error(\n\t\t`Apex Code: ${conflict ? `both ${spec.canonical} and legacy ${spec.legacy} are set; using ${spec.canonical}` : `${spec.legacy} is deprecated; use ${spec.canonical}`}.`,\n\t);\n}\n\nexport function getApexEnvironment(name: string, environment: NodeJS.ProcessEnv = process.env): string | undefined {\n\tconst spec = specs.get(name) ?? [...specs.values()].find((candidate) => candidate.legacy === name);\n\tif (!spec) return environment[name];\n\tconst canonical = environment[spec.canonical];\n\tconst legacy = environment[spec.legacy];\n\tif (canonical !== undefined) {\n\t\tif (legacy !== undefined && canonical !== legacy) warn(spec, true);\n\t\treturn canonical;\n\t}\n\tif (legacy !== undefined) warn(spec, false);\n\treturn legacy;\n}\n\nexport function setApexEnvironment(\n\tname: string,\n\tvalue: string | undefined,\n\tenvironment: NodeJS.ProcessEnv = process.env,\n): void {\n\tconst spec = specs.get(name) ?? [...specs.values()].find((candidate) => candidate.legacy === name);\n\tif (!spec) {\n\t\tif (value === undefined) delete environment[name];\n\t\telse environment[name] = value;\n\t\treturn;\n\t}\n\tif (value === undefined) {\n\t\tdelete environment[spec.canonical];\n\t\tdelete environment[spec.legacy];\n\t\treturn;\n\t}\n\tenvironment[spec.canonical] = value;\n\tenvironment[spec.legacy] = value;\n}\n\nexport function setApexSubprocessEnvironment(\n\tenvironment: NodeJS.ProcessEnv,\n\tvalues: Partial<Record<string, string | undefined>>,\n): void {\n\tfor (const [name, value] of Object.entries(values)) setApexEnvironment(name, value, environment);\n}\n\nexport function getApexEnvironmentSpecs(): readonly EnvironmentVariableSpec[] {\n\treturn [...specs.values()];\n}\n"]}
@@ -0,0 +1,17 @@
1
+ import type { ExtensionFactory } from "./extensions/types.ts";
2
+ import type { DurableEvidenceRecord } from "./session-manager.ts";
3
+ export interface EvidencePolicyInput {
4
+ toolName: string;
5
+ toolCallId: string;
6
+ isError: boolean;
7
+ records: readonly DurableEvidenceRecord[];
8
+ }
9
+ /**
10
+ * Optional policy-consumption adapter. It receives an immutable snapshot after
11
+ * core has durably captured source facts, and deliberately returns no tool-result
12
+ * patch: policy may report or gate at its own extension boundary, never alter
13
+ * capture or core execution semantics.
14
+ */
15
+ export type EvidencePolicy = (input: EvidencePolicyInput) => void | Promise<void>;
16
+ export declare function createEvidencePolicyExtension(policy: EvidencePolicy): ExtensionFactory;
17
+ //# sourceMappingURL=evidence-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-policy.d.ts","sourceRoot":"","sources":["../../src/core/evidence-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAElE,MAAM,WAAW,mBAAmB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAC;CAC1C;AAED;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAclF,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,cAAc,GAAG,gBAAgB,CAWtF","sourcesContent":["import type { ExtensionFactory } from \"./extensions/types.ts\";\nimport type { DurableEvidenceRecord } from \"./session-manager.ts\";\n\nexport interface EvidencePolicyInput {\n\ttoolName: string;\n\ttoolCallId: string;\n\tisError: boolean;\n\trecords: readonly DurableEvidenceRecord[];\n}\n\n/**\n * Optional policy-consumption adapter. It receives an immutable snapshot after\n * core has durably captured source facts, and deliberately returns no tool-result\n * patch: policy may report or gate at its own extension boundary, never alter\n * capture or core execution semantics.\n */\nexport type EvidencePolicy = (input: EvidencePolicyInput) => void | Promise<void>;\n\nfunction freezeRecursively(value: unknown): void {\n\tif (value === null || typeof value !== \"object\" || Object.isFrozen(value)) return;\n\tObject.freeze(value);\n\tfor (const child of Object.values(value)) freezeRecursively(child);\n}\n\nfunction evidenceSnapshot(records: readonly DurableEvidenceRecord[]): readonly DurableEvidenceRecord[] {\n\tconst snapshot = structuredClone(records);\n\tfreezeRecursively(snapshot);\n\treturn snapshot;\n}\n\nexport function createEvidencePolicyExtension(policy: EvidencePolicy): ExtensionFactory {\n\treturn (pi) => {\n\t\tpi.on(\"tool_result\", async (event, ctx) => {\n\t\t\tawait policy({\n\t\t\t\ttoolName: event.toolName,\n\t\t\t\ttoolCallId: event.toolCallId,\n\t\t\t\tisError: event.isError,\n\t\t\t\trecords: evidenceSnapshot(ctx.sessionManager.getEvidenceRecords()),\n\t\t\t});\n\t\t});\n\t};\n}\n"]}
@@ -0,0 +1,25 @@
1
+ function freezeRecursively(value) {
2
+ if (value === null || typeof value !== "object" || Object.isFrozen(value))
3
+ return;
4
+ Object.freeze(value);
5
+ for (const child of Object.values(value))
6
+ freezeRecursively(child);
7
+ }
8
+ function evidenceSnapshot(records) {
9
+ const snapshot = structuredClone(records);
10
+ freezeRecursively(snapshot);
11
+ return snapshot;
12
+ }
13
+ export function createEvidencePolicyExtension(policy) {
14
+ return (pi) => {
15
+ pi.on("tool_result", async (event, ctx) => {
16
+ await policy({
17
+ toolName: event.toolName,
18
+ toolCallId: event.toolCallId,
19
+ isError: event.isError,
20
+ records: evidenceSnapshot(ctx.sessionManager.getEvidenceRecords()),
21
+ });
22
+ });
23
+ };
24
+ }
25
+ //# sourceMappingURL=evidence-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-policy.js","sourceRoot":"","sources":["../../src/core/evidence-policy.ts"],"names":[],"mappings":"AAkBA,SAAS,iBAAiB,CAAC,KAAc,EAAQ;IAChD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO;IAClF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAAA,CACnE;AAED,SAAS,gBAAgB,CAAC,OAAyC,EAAoC;IACtG,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC1C,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC5B,OAAO,QAAQ,CAAC;AAAA,CAChB;AAED,MAAM,UAAU,6BAA6B,CAAC,MAAsB,EAAoB;IACvF,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;QACd,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;YAC1C,MAAM,MAAM,CAAC;gBACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;aAClE,CAAC,CAAC;QAAA,CACH,CAAC,CAAC;IAAA,CACH,CAAC;AAAA,CACF","sourcesContent":["import type { ExtensionFactory } from \"./extensions/types.ts\";\nimport type { DurableEvidenceRecord } from \"./session-manager.ts\";\n\nexport interface EvidencePolicyInput {\n\ttoolName: string;\n\ttoolCallId: string;\n\tisError: boolean;\n\trecords: readonly DurableEvidenceRecord[];\n}\n\n/**\n * Optional policy-consumption adapter. It receives an immutable snapshot after\n * core has durably captured source facts, and deliberately returns no tool-result\n * patch: policy may report or gate at its own extension boundary, never alter\n * capture or core execution semantics.\n */\nexport type EvidencePolicy = (input: EvidencePolicyInput) => void | Promise<void>;\n\nfunction freezeRecursively(value: unknown): void {\n\tif (value === null || typeof value !== \"object\" || Object.isFrozen(value)) return;\n\tObject.freeze(value);\n\tfor (const child of Object.values(value)) freezeRecursively(child);\n}\n\nfunction evidenceSnapshot(records: readonly DurableEvidenceRecord[]): readonly DurableEvidenceRecord[] {\n\tconst snapshot = structuredClone(records);\n\tfreezeRecursively(snapshot);\n\treturn snapshot;\n}\n\nexport function createEvidencePolicyExtension(policy: EvidencePolicy): ExtensionFactory {\n\treturn (pi) => {\n\t\tpi.on(\"tool_result\", async (event, ctx) => {\n\t\t\tawait policy({\n\t\t\t\ttoolName: event.toolName,\n\t\t\t\ttoolCallId: event.toolCallId,\n\t\t\t\tisError: event.isError,\n\t\t\t\trecords: evidenceSnapshot(ctx.sessionManager.getEvidenceRecords()),\n\t\t\t});\n\t\t});\n\t};\n}\n"]}
@@ -0,0 +1,16 @@
1
+ import type { SessionManager } from "./session-manager.ts";
2
+ import type { EvidenceCaptureDiagnostic, EvidenceRecord, EvidenceSink } from "./tools/contract.ts";
3
+ /**
4
+ * Durable JSONL evidence sink. It validates the secret boundary before appending
5
+ * source facts; policy evaluation intentionally remains outside core.
6
+ */
7
+ export declare class SessionEvidenceSink implements EvidenceSink {
8
+ #private;
9
+ constructor(sessionManager: SessionManager);
10
+ record(entry: {
11
+ toolName: string;
12
+ records: EvidenceRecord[];
13
+ }): void;
14
+ recordDiagnostic(diagnostic: EvidenceCaptureDiagnostic): void;
15
+ }
16
+ //# sourceMappingURL=evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/core/evidence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,yBAAyB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAsCnG;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,YAAY;;IAGvD,YAAY,cAAc,EAAE,cAAc,EAEzC;IAED,MAAM,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,cAAc,EAAE,CAAA;KAAE,GAAG,IAAI,CAInE;IAED,gBAAgB,CAAC,UAAU,EAAE,yBAAyB,GAAG,IAAI,CAE5D;CACD","sourcesContent":["import type { SessionManager } from \"./session-manager.ts\";\nimport type { EvidenceCaptureDiagnostic, EvidenceRecord, EvidenceSink } from \"./tools/contract.ts\";\n\nconst CREDENTIAL_KEY = /(?:api[_-]?key|access[_-]?token|refresh[_-]?token|bearer|password|secret)/i;\n\nconst MAX_FACT_BYTES = 16_384;\nconst RAW_CONTENT_KEY = /^(?:content|output|stdout|stderr|patch|body|text)$/i;\nconst ARTIFACT_KEY = /(?:artifact|outputPath|fullOutputPath)/i;\n\nfunction assertSafeValue(value: unknown, key?: string): void {\n\tif (key && RAW_CONTENT_KEY.test(key)) {\n\t\tthrow new Error(`Evidence contains raw content: ${key}`);\n\t}\n\tif (Array.isArray(value)) {\n\t\tfor (const item of value) assertSafeValue(item);\n\t\treturn;\n\t}\n\tif (value === null || typeof value !== \"object\") return;\n\tfor (const [childKey, child] of Object.entries(value)) {\n\t\tif (CREDENTIAL_KEY.test(childKey)) {\n\t\t\tthrow new Error(`Evidence contains credential-shaped key: ${childKey}`);\n\t\t}\n\t\tif (\n\t\t\tARTIFACT_KEY.test(childKey) &&\n\t\t\ttypeof child === \"string\" &&\n\t\t\t(child.startsWith(\"/\") || child.split(/[\\\\/]+/).includes(\"..\"))\n\t\t) {\n\t\t\tthrow new Error(`Evidence contains unsafe artifact reference: ${child}`);\n\t\t}\n\t\tassertSafeValue(child, childKey);\n\t}\n}\n\nfunction assertBounded(records: EvidenceRecord[]): void {\n\tif (Buffer.byteLength(JSON.stringify(records), \"utf8\") > MAX_FACT_BYTES) {\n\t\tthrow new Error(`Evidence facts must remain bounded at ${MAX_FACT_BYTES} bytes`);\n\t}\n}\n\n/**\n * Durable JSONL evidence sink. It validates the secret boundary before appending\n * source facts; policy evaluation intentionally remains outside core.\n */\nexport class SessionEvidenceSink implements EvidenceSink {\n\treadonly #sessionManager: SessionManager;\n\n\tconstructor(sessionManager: SessionManager) {\n\t\tthis.#sessionManager = sessionManager;\n\t}\n\n\trecord(entry: { toolName: string; records: EvidenceRecord[] }): void {\n\t\tassertSafeValue(entry.records);\n\t\tassertBounded(entry.records);\n\t\tthis.#sessionManager.appendEvidence(entry.toolName, entry.records);\n\t}\n\n\trecordDiagnostic(diagnostic: EvidenceCaptureDiagnostic): void {\n\t\tthis.#sessionManager.appendEvidenceDiagnostic(diagnostic);\n\t}\n}\n"]}
@@ -0,0 +1,51 @@
1
+ const CREDENTIAL_KEY = /(?:api[_-]?key|access[_-]?token|refresh[_-]?token|bearer|password|secret)/i;
2
+ const MAX_FACT_BYTES = 16_384;
3
+ const RAW_CONTENT_KEY = /^(?:content|output|stdout|stderr|patch|body|text)$/i;
4
+ const ARTIFACT_KEY = /(?:artifact|outputPath|fullOutputPath)/i;
5
+ function assertSafeValue(value, key) {
6
+ if (key && RAW_CONTENT_KEY.test(key)) {
7
+ throw new Error(`Evidence contains raw content: ${key}`);
8
+ }
9
+ if (Array.isArray(value)) {
10
+ for (const item of value)
11
+ assertSafeValue(item);
12
+ return;
13
+ }
14
+ if (value === null || typeof value !== "object")
15
+ return;
16
+ for (const [childKey, child] of Object.entries(value)) {
17
+ if (CREDENTIAL_KEY.test(childKey)) {
18
+ throw new Error(`Evidence contains credential-shaped key: ${childKey}`);
19
+ }
20
+ if (ARTIFACT_KEY.test(childKey) &&
21
+ typeof child === "string" &&
22
+ (child.startsWith("/") || child.split(/[\\/]+/).includes(".."))) {
23
+ throw new Error(`Evidence contains unsafe artifact reference: ${child}`);
24
+ }
25
+ assertSafeValue(child, childKey);
26
+ }
27
+ }
28
+ function assertBounded(records) {
29
+ if (Buffer.byteLength(JSON.stringify(records), "utf8") > MAX_FACT_BYTES) {
30
+ throw new Error(`Evidence facts must remain bounded at ${MAX_FACT_BYTES} bytes`);
31
+ }
32
+ }
33
+ /**
34
+ * Durable JSONL evidence sink. It validates the secret boundary before appending
35
+ * source facts; policy evaluation intentionally remains outside core.
36
+ */
37
+ export class SessionEvidenceSink {
38
+ #sessionManager;
39
+ constructor(sessionManager) {
40
+ this.#sessionManager = sessionManager;
41
+ }
42
+ record(entry) {
43
+ assertSafeValue(entry.records);
44
+ assertBounded(entry.records);
45
+ this.#sessionManager.appendEvidence(entry.toolName, entry.records);
46
+ }
47
+ recordDiagnostic(diagnostic) {
48
+ this.#sessionManager.appendEvidenceDiagnostic(diagnostic);
49
+ }
50
+ }
51
+ //# sourceMappingURL=evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/core/evidence.ts"],"names":[],"mappings":"AAGA,MAAM,cAAc,GAAG,4EAA4E,CAAC;AAEpG,MAAM,cAAc,GAAG,MAAM,CAAC;AAC9B,MAAM,eAAe,GAAG,qDAAqD,CAAC;AAC9E,MAAM,YAAY,GAAG,yCAAyC,CAAC;AAE/D,SAAS,eAAe,CAAC,KAAc,EAAE,GAAY,EAAQ;IAC5D,IAAI,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,eAAe,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO;IACR,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO;IACxD,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,4CAA4C,QAAQ,EAAE,CAAC,CAAC;QACzE,CAAC;QACD,IACC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC3B,OAAO,KAAK,KAAK,QAAQ;YACzB,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAC9D,CAAC;YACF,MAAM,IAAI,KAAK,CAAC,gDAAgD,KAAK,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAClC,CAAC;AAAA,CACD;AAED,SAAS,aAAa,CAAC,OAAyB,EAAQ;IACvD,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,GAAG,cAAc,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,yCAAyC,cAAc,QAAQ,CAAC,CAAC;IAClF,CAAC;AAAA,CACD;AAED;;;GAGG;AACH,MAAM,OAAO,mBAAmB;IACtB,eAAe,CAAiB;IAEzC,YAAY,cAA8B,EAAE;QAC3C,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;IAAA,CACtC;IAED,MAAM,CAAC,KAAsD,EAAQ;QACpE,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAAA,CACnE;IAED,gBAAgB,CAAC,UAAqC,EAAQ;QAC7D,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC;IAAA,CAC1D;CACD","sourcesContent":["import type { SessionManager } from \"./session-manager.ts\";\nimport type { EvidenceCaptureDiagnostic, EvidenceRecord, EvidenceSink } from \"./tools/contract.ts\";\n\nconst CREDENTIAL_KEY = /(?:api[_-]?key|access[_-]?token|refresh[_-]?token|bearer|password|secret)/i;\n\nconst MAX_FACT_BYTES = 16_384;\nconst RAW_CONTENT_KEY = /^(?:content|output|stdout|stderr|patch|body|text)$/i;\nconst ARTIFACT_KEY = /(?:artifact|outputPath|fullOutputPath)/i;\n\nfunction assertSafeValue(value: unknown, key?: string): void {\n\tif (key && RAW_CONTENT_KEY.test(key)) {\n\t\tthrow new Error(`Evidence contains raw content: ${key}`);\n\t}\n\tif (Array.isArray(value)) {\n\t\tfor (const item of value) assertSafeValue(item);\n\t\treturn;\n\t}\n\tif (value === null || typeof value !== \"object\") return;\n\tfor (const [childKey, child] of Object.entries(value)) {\n\t\tif (CREDENTIAL_KEY.test(childKey)) {\n\t\t\tthrow new Error(`Evidence contains credential-shaped key: ${childKey}`);\n\t\t}\n\t\tif (\n\t\t\tARTIFACT_KEY.test(childKey) &&\n\t\t\ttypeof child === \"string\" &&\n\t\t\t(child.startsWith(\"/\") || child.split(/[\\\\/]+/).includes(\"..\"))\n\t\t) {\n\t\t\tthrow new Error(`Evidence contains unsafe artifact reference: ${child}`);\n\t\t}\n\t\tassertSafeValue(child, childKey);\n\t}\n}\n\nfunction assertBounded(records: EvidenceRecord[]): void {\n\tif (Buffer.byteLength(JSON.stringify(records), \"utf8\") > MAX_FACT_BYTES) {\n\t\tthrow new Error(`Evidence facts must remain bounded at ${MAX_FACT_BYTES} bytes`);\n\t}\n}\n\n/**\n * Durable JSONL evidence sink. It validates the secret boundary before appending\n * source facts; policy evaluation intentionally remains outside core.\n */\nexport class SessionEvidenceSink implements EvidenceSink {\n\treadonly #sessionManager: SessionManager;\n\n\tconstructor(sessionManager: SessionManager) {\n\t\tthis.#sessionManager = sessionManager;\n\t}\n\n\trecord(entry: { toolName: string; records: EvidenceRecord[] }): void {\n\t\tassertSafeValue(entry.records);\n\t\tassertBounded(entry.records);\n\t\tthis.#sessionManager.appendEvidence(entry.toolName, entry.records);\n\t}\n\n\trecordDiagnostic(diagnostic: EvidenceCaptureDiagnostic): void {\n\t\tthis.#sessionManager.appendEvidenceDiagnostic(diagnostic);\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"experimental.d.ts","sourceRoot":"","sources":["../../src/core/experimental.ts"],"names":[],"mappings":"AAAA,wBAAgB,8BAA8B,IAAI,OAAO,CAExD","sourcesContent":["export function areExperimentalFeaturesEnabled(): boolean {\n\treturn process.env.PI_EXPERIMENTAL === \"1\";\n}\n"]}
1
+ {"version":3,"file":"experimental.d.ts","sourceRoot":"","sources":["../../src/core/experimental.ts"],"names":[],"mappings":"AAAA,wBAAgB,8BAA8B,IAAI,OAAO,CAExD","sourcesContent":["export function areExperimentalFeaturesEnabled(): boolean {\n\treturn getApexEnvironment(\"APEX_CODE_EXPERIMENTAL\") === \"1\";\n}\n\nimport { getApexEnvironment } from \"./environment.ts\";\n"]}
@@ -1,4 +1,5 @@
1
1
  export function areExperimentalFeaturesEnabled() {
2
- return process.env.PI_EXPERIMENTAL === "1";
2
+ return getApexEnvironment("APEX_CODE_EXPERIMENTAL") === "1";
3
3
  }
4
+ import { getApexEnvironment } from "./environment.js";
4
5
  //# sourceMappingURL=experimental.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"experimental.js","sourceRoot":"","sources":["../../src/core/experimental.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,8BAA8B,GAAY;IACzD,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,GAAG,CAAC;AAAA,CAC3C","sourcesContent":["export function areExperimentalFeaturesEnabled(): boolean {\n\treturn process.env.PI_EXPERIMENTAL === \"1\";\n}\n"]}
1
+ {"version":3,"file":"experimental.js","sourceRoot":"","sources":["../../src/core/experimental.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,8BAA8B,GAAY;IACzD,OAAO,kBAAkB,CAAC,wBAAwB,CAAC,KAAK,GAAG,CAAC;AAAA,CAC5D;AAED,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC","sourcesContent":["export function areExperimentalFeaturesEnabled(): boolean {\n\treturn getApexEnvironment(\"APEX_CODE_EXPERIMENTAL\") === \"1\";\n}\n\nimport { getApexEnvironment } from \"./environment.ts\";\n"]}
@@ -1141,6 +1141,8 @@ export type GetActiveToolsHandler = () => string[];
1141
1141
  /** Tool info with name, description, parameter schema, prompt guidelines, and source metadata. */
1142
1142
  export type ToolInfo = Pick<ToolDefinition, "name" | "description" | "parameters" | "promptGuidelines"> & {
1143
1143
  sourceInfo: SourceInfo;
1144
+ /** True when a foreign tool receives the conservative UNCLASSIFIED contract. */
1145
+ unclassified: boolean;
1144
1146
  };
1145
1147
  export type GetAllToolsHandler = () => ToolInfo[];
1146
1148
  export type GetCommandsHandler = () => SlashCommandInfo[];