@zihanw/pi-forge 0.4.1 → 0.5.1

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 (372) hide show
  1. package/CHANGELOG.md +79 -1
  2. package/README.md +12 -11
  3. package/README.zh-CN.md +3 -5
  4. package/SUBAGENT_ADAPTER_CONTRACT.md +3 -1
  5. package/dist/agent-profile.d.ts +18 -62
  6. package/dist/agent-profile.d.ts.map +1 -1
  7. package/dist/agent-profile.js +27 -249
  8. package/dist/agent-profile.js.map +1 -1
  9. package/dist/codecs/agent-profile.d.ts +53 -0
  10. package/dist/codecs/agent-profile.d.ts.map +1 -0
  11. package/dist/codecs/agent-profile.js +176 -0
  12. package/dist/codecs/agent-profile.js.map +1 -0
  13. package/dist/codecs/index.d.ts +5 -0
  14. package/dist/codecs/index.d.ts.map +1 -0
  15. package/dist/codecs/index.js +3 -0
  16. package/dist/codecs/index.js.map +1 -0
  17. package/dist/codecs/prompt-stack.d.ts +18 -0
  18. package/dist/codecs/prompt-stack.d.ts.map +1 -0
  19. package/dist/codecs/prompt-stack.js +479 -0
  20. package/dist/codecs/prompt-stack.js.map +1 -0
  21. package/dist/compile-cycle.d.ts +18 -0
  22. package/dist/compile-cycle.d.ts.map +1 -0
  23. package/dist/compile-cycle.js +13 -0
  24. package/dist/compile-cycle.js.map +1 -0
  25. package/dist/compiler.d.ts +10 -4
  26. package/dist/compiler.d.ts.map +1 -1
  27. package/dist/compiler.js +53 -19
  28. package/dist/compiler.js.map +1 -1
  29. package/dist/context-diff-history.d.ts +61 -0
  30. package/dist/context-diff-history.d.ts.map +1 -0
  31. package/dist/context-diff-history.js +84 -0
  32. package/dist/context-diff-history.js.map +1 -0
  33. package/dist/context-diff-snapshot.d.ts +19 -0
  34. package/dist/context-diff-snapshot.d.ts.map +1 -0
  35. package/dist/context-diff-snapshot.js +146 -0
  36. package/dist/context-diff-snapshot.js.map +1 -0
  37. package/dist/context-diff.d.ts +70 -0
  38. package/dist/context-diff.d.ts.map +1 -0
  39. package/dist/context-diff.js +259 -0
  40. package/dist/context-diff.js.map +1 -0
  41. package/dist/extension-registry.d.ts.map +1 -1
  42. package/dist/extension-registry.js +5 -2
  43. package/dist/extension-registry.js.map +1 -1
  44. package/dist/forge-config.d.ts +0 -105
  45. package/dist/forge-config.d.ts.map +1 -1
  46. package/dist/forge-config.js +1 -313
  47. package/dist/forge-config.js.map +1 -1
  48. package/dist/forge-v1/analyzer.d.ts +3 -0
  49. package/dist/forge-v1/analyzer.d.ts.map +1 -0
  50. package/dist/forge-v1/analyzer.js +50 -0
  51. package/dist/forge-v1/analyzer.js.map +1 -0
  52. package/dist/forge-v1/index.d.ts +6 -0
  53. package/dist/forge-v1/index.d.ts.map +1 -0
  54. package/dist/forge-v1/index.js +13 -0
  55. package/dist/forge-v1/index.js.map +1 -0
  56. package/dist/forge-v1/parser.d.ts +3 -0
  57. package/dist/forge-v1/parser.d.ts.map +1 -0
  58. package/dist/forge-v1/parser.js +186 -0
  59. package/dist/forge-v1/parser.js.map +1 -0
  60. package/dist/forge-v1/renderer.d.ts +9 -0
  61. package/dist/forge-v1/renderer.d.ts.map +1 -0
  62. package/dist/forge-v1/renderer.js +181 -0
  63. package/dist/forge-v1/renderer.js.map +1 -0
  64. package/dist/forge-v1/types.d.ts +87 -0
  65. package/dist/forge-v1/types.d.ts.map +1 -0
  66. package/dist/forge-v1/types.js +4 -0
  67. package/dist/forge-v1/types.js.map +1 -0
  68. package/dist/index.d.ts +12 -12
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +54 -83
  71. package/dist/index.js.map +1 -1
  72. package/dist/lifecycle.d.ts +8 -5
  73. package/dist/lifecycle.d.ts.map +1 -1
  74. package/dist/lifecycle.js +45 -112
  75. package/dist/lifecycle.js.map +1 -1
  76. package/dist/loader.d.ts +5 -8
  77. package/dist/loader.d.ts.map +1 -1
  78. package/dist/loader.js +10 -467
  79. package/dist/loader.js.map +1 -1
  80. package/dist/macro-engine.d.ts +9 -14
  81. package/dist/macro-engine.d.ts.map +1 -1
  82. package/dist/macro-engine.js +5 -238
  83. package/dist/macro-engine.js.map +1 -1
  84. package/dist/payload-capture.d.ts +10 -0
  85. package/dist/payload-capture.d.ts.map +1 -1
  86. package/dist/payload-capture.js +39 -9
  87. package/dist/payload-capture.js.map +1 -1
  88. package/dist/payload-command.d.ts +8 -6
  89. package/dist/payload-command.d.ts.map +1 -1
  90. package/dist/payload-command.js +36 -6
  91. package/dist/payload-command.js.map +1 -1
  92. package/dist/payload-state.d.ts +19 -0
  93. package/dist/payload-state.d.ts.map +1 -0
  94. package/dist/payload-state.js +19 -0
  95. package/dist/payload-state.js.map +1 -0
  96. package/dist/preset-command.d.ts +4 -4
  97. package/dist/preset-command.d.ts.map +1 -1
  98. package/dist/preset-command.js +33 -104
  99. package/dist/preset-command.js.map +1 -1
  100. package/dist/preview.d.ts +4 -4
  101. package/dist/preview.d.ts.map +1 -1
  102. package/dist/preview.js +34 -11
  103. package/dist/preview.js.map +1 -1
  104. package/dist/profile-command.d.ts +2 -2
  105. package/dist/profile-command.d.ts.map +1 -1
  106. package/dist/profile-command.js +15 -14
  107. package/dist/profile-command.js.map +1 -1
  108. package/dist/profile-service.d.ts.map +1 -1
  109. package/dist/profile-service.js +23 -39
  110. package/dist/profile-service.js.map +1 -1
  111. package/dist/prompt-analysis.d.ts +24 -0
  112. package/dist/prompt-analysis.d.ts.map +1 -0
  113. package/dist/prompt-analysis.js +84 -0
  114. package/dist/prompt-analysis.js.map +1 -0
  115. package/dist/prompt-runtime.d.ts +19 -0
  116. package/dist/prompt-runtime.d.ts.map +1 -0
  117. package/dist/prompt-runtime.js +30 -0
  118. package/dist/prompt-runtime.js.map +1 -0
  119. package/dist/regex.js +6 -12
  120. package/dist/regex.js.map +1 -1
  121. package/dist/render-helpers.d.ts +2 -10
  122. package/dist/render-helpers.d.ts.map +1 -1
  123. package/dist/render-helpers.js +3 -53
  124. package/dist/render-helpers.js.map +1 -1
  125. package/dist/repositories/agent-profile.d.ts +36 -0
  126. package/dist/repositories/agent-profile.d.ts.map +1 -0
  127. package/dist/repositories/agent-profile.js +153 -0
  128. package/dist/repositories/agent-profile.js.map +1 -0
  129. package/dist/repositories/index.d.ts +3 -0
  130. package/dist/repositories/index.d.ts.map +1 -0
  131. package/dist/repositories/index.js +3 -0
  132. package/dist/repositories/index.js.map +1 -0
  133. package/dist/repositories/prompt-stack.d.ts +57 -0
  134. package/dist/repositories/prompt-stack.d.ts.map +1 -0
  135. package/dist/repositories/prompt-stack.js +175 -0
  136. package/dist/repositories/prompt-stack.js.map +1 -0
  137. package/dist/runtime/profile-runtime.d.ts +2 -2
  138. package/dist/runtime/profile-runtime.d.ts.map +1 -1
  139. package/dist/runtime/profile-runtime.js +13 -10
  140. package/dist/runtime/profile-runtime.js.map +1 -1
  141. package/dist/runtime/prompt-stack-runtime.d.ts +4 -3
  142. package/dist/runtime/prompt-stack-runtime.d.ts.map +1 -1
  143. package/dist/runtime/prompt-stack-runtime.js +42 -57
  144. package/dist/runtime/prompt-stack-runtime.js.map +1 -1
  145. package/dist/runtime/tool-policy-runtime.d.ts +2 -2
  146. package/dist/runtime/tool-policy-runtime.d.ts.map +1 -1
  147. package/dist/runtime/tool-policy-runtime.js +16 -6
  148. package/dist/runtime/tool-policy-runtime.js.map +1 -1
  149. package/dist/runtime/web-editor-runtime.d.ts +2 -1
  150. package/dist/runtime/web-editor-runtime.d.ts.map +1 -1
  151. package/dist/runtime/web-editor-runtime.js +8 -3
  152. package/dist/runtime/web-editor-runtime.js.map +1 -1
  153. package/dist/session-adapter.d.ts +17 -0
  154. package/dist/session-adapter.d.ts.map +1 -0
  155. package/dist/session-adapter.js +57 -0
  156. package/dist/session-adapter.js.map +1 -0
  157. package/dist/slot-renderers.d.ts +16 -3
  158. package/dist/slot-renderers.d.ts.map +1 -1
  159. package/dist/slot-renderers.js +15 -63
  160. package/dist/slot-renderers.js.map +1 -1
  161. package/dist/stack-migration.d.ts +6 -0
  162. package/dist/stack-migration.d.ts.map +1 -1
  163. package/dist/stack-migration.js +49 -52
  164. package/dist/stack-migration.js.map +1 -1
  165. package/dist/subagent/fingerprints.d.ts +24 -0
  166. package/dist/subagent/fingerprints.d.ts.map +1 -0
  167. package/dist/subagent/fingerprints.js +81 -0
  168. package/dist/subagent/fingerprints.js.map +1 -0
  169. package/dist/subagent/host-port.d.ts +296 -0
  170. package/dist/subagent/host-port.d.ts.map +1 -0
  171. package/dist/subagent/host-port.js +560 -0
  172. package/dist/subagent/host-port.js.map +1 -0
  173. package/dist/subagent/index.d.ts +10 -10
  174. package/dist/subagent/index.d.ts.map +1 -1
  175. package/dist/subagent/index.js +9 -10
  176. package/dist/subagent/index.js.map +1 -1
  177. package/dist/subagent-host.d.ts +99 -18
  178. package/dist/subagent-host.d.ts.map +1 -1
  179. package/dist/subagent-host.js +143 -146
  180. package/dist/subagent-host.js.map +1 -1
  181. package/dist/template-render.d.ts +18 -0
  182. package/dist/template-render.d.ts.map +1 -0
  183. package/dist/template-render.js +232 -0
  184. package/dist/template-render.js.map +1 -0
  185. package/dist/types.d.ts +40 -27
  186. package/dist/types.d.ts.map +1 -1
  187. package/dist/types.js.map +1 -1
  188. package/dist/ui-contribution/contrib-port.d.ts +170 -0
  189. package/dist/ui-contribution/contrib-port.d.ts.map +1 -0
  190. package/dist/ui-contribution/contrib-port.js +640 -0
  191. package/dist/ui-contribution/contrib-port.js.map +1 -0
  192. package/dist/ui-contribution/index.d.ts +3 -0
  193. package/dist/ui-contribution/index.d.ts.map +1 -0
  194. package/dist/ui-contribution/index.js +2 -0
  195. package/dist/ui-contribution/index.js.map +1 -0
  196. package/dist/web-editor/client-script.generated.d.ts.map +1 -1
  197. package/dist/web-editor/client-script.generated.js +1 -1
  198. package/dist/web-editor/client-script.generated.js.map +1 -1
  199. package/dist/web-editor/client-styles.generated.d.ts.map +1 -1
  200. package/dist/web-editor/client-styles.generated.js +1 -1
  201. package/dist/web-editor/client-styles.generated.js.map +1 -1
  202. package/dist/web-editor/contrib-service.d.ts +41 -0
  203. package/dist/web-editor/contrib-service.d.ts.map +1 -0
  204. package/dist/web-editor/contrib-service.js +174 -0
  205. package/dist/web-editor/contrib-service.js.map +1 -0
  206. package/dist/web-editor/line-diff.d.ts +28 -0
  207. package/dist/web-editor/line-diff.d.ts.map +1 -0
  208. package/dist/web-editor/line-diff.js +216 -0
  209. package/dist/web-editor/line-diff.js.map +1 -0
  210. package/dist/web-editor/schema-form.d.ts +63 -0
  211. package/dist/web-editor/schema-form.d.ts.map +1 -0
  212. package/dist/web-editor/schema-form.js +213 -0
  213. package/dist/web-editor/schema-form.js.map +1 -0
  214. package/dist/web-editor/server.d.ts.map +1 -1
  215. package/dist/web-editor/server.js +72 -74
  216. package/dist/web-editor/server.js.map +1 -1
  217. package/dist/web-editor/styles.d.ts.map +1 -1
  218. package/dist/web-editor/styles.js +201 -21
  219. package/dist/web-editor/styles.js.map +1 -1
  220. package/dist/web-editor/types.d.ts +12 -35
  221. package/dist/web-editor/types.d.ts.map +1 -1
  222. package/dist/web-host.d.ts +6 -2
  223. package/dist/web-host.d.ts.map +1 -1
  224. package/dist/web-host.js +33 -103
  225. package/dist/web-host.js.map +1 -1
  226. package/dist/workspace.d.ts +74 -0
  227. package/dist/workspace.d.ts.map +1 -0
  228. package/dist/workspace.js +351 -0
  229. package/dist/workspace.js.map +1 -0
  230. package/docs/README.md +7 -4
  231. package/docs/concepts/agent-profiles.md +1 -1
  232. package/docs/concepts/prompt-stacks.md +5 -5
  233. package/docs/design/0.5.1-plan.md +237 -0
  234. package/docs/design/README.md +21 -3
  235. package/docs/design/architecture-0.5.md +222 -0
  236. package/docs/design/archive/0.5-full-proposal/0.5-consumer-audit.md +62 -0
  237. package/docs/design/archive/0.5-full-proposal/0.5-inventory.md +208 -0
  238. package/docs/design/archive/0.5-full-proposal/0.5-phase0-decision-drafts.md +237 -0
  239. package/docs/design/archive/0.5-full-proposal/README.md +12 -0
  240. package/docs/design/archive/0.5-full-proposal/architecture-0.5.md +423 -0
  241. package/docs/design/archive/0.5-full-proposal/host-discovery-spike.md +103 -0
  242. package/docs/design/archive/0.5-full-proposal/template-language-spike.md +156 -0
  243. package/docs/design/context-diff-plan.md +78 -0
  244. package/docs/design/decision-template.md +33 -0
  245. package/docs/design/roadmap-0.4-archive.md +1 -1
  246. package/docs/design/subagents/interface-design.md +1 -1
  247. package/docs/development/architecture-rules.md +148 -0
  248. package/docs/development/release.md +7 -1
  249. package/docs/development/roadmap.md +37 -5
  250. package/docs/development/scoped-global-profiles-stacks.md +1 -1
  251. package/docs/development/setup.md +6 -4
  252. package/docs/getting-started.md +5 -4
  253. package/docs/guides/custom-macros-and-slots.md +8 -7
  254. package/docs/guides/debugging.md +1 -1
  255. package/docs/guides/delegation.md +18 -22
  256. package/docs/guides/migrating-to-0.5.md +107 -0
  257. package/docs/guides/use-cases.md +7 -11
  258. package/docs/guides/web-editor.md +6 -10
  259. package/docs/reference/commands.md +4 -3
  260. package/docs/reference/configuration.md +17 -18
  261. package/docs/reference/features.md +34 -80
  262. package/docs/reference/macros-and-slots.md +70 -49
  263. package/docs/reference/public-api.md +76 -17
  264. package/docs/reference/stack-schema.md +15 -10
  265. package/docs/reference/subagent-host-port.md +49 -0
  266. package/docs/reference/ui-contribution-port.md +51 -0
  267. package/docs/zh-CN/README.md +3 -3
  268. package/docs/zh-CN/concepts/agent-profiles.md +1 -1
  269. package/docs/zh-CN/concepts/prompt-stacks.md +5 -5
  270. package/docs/zh-CN/getting-started.md +3 -2
  271. package/docs/zh-CN/guides/delegation.md +10 -12
  272. package/docs/zh-CN/guides/migrating-to-0.5.md +92 -0
  273. package/docs/zh-CN/guides/web-editor.md +4 -4
  274. package/docs/zh-CN/reference/commands.md +3 -2
  275. package/examples/custom-system-status-extension/README.md +3 -3
  276. package/examples/custom-system-status-extension/index.ts +2 -1
  277. package/examples/custom-system-status-extension/prompt-stack.json +4 -3
  278. package/examples/default-prompt-stack.json +9 -4
  279. package/examples/image-reader-prompt-stack.json +16 -26
  280. package/examples/reviewer-prompt-stack.json +13 -24
  281. package/package.json +106 -120
  282. package/dist/runtime/subagent-runtime.d.ts +0 -45
  283. package/dist/runtime/subagent-runtime.d.ts.map +0 -1
  284. package/dist/runtime/subagent-runtime.js +0 -343
  285. package/dist/runtime/subagent-runtime.js.map +0 -1
  286. package/dist/runtime-state.d.ts +0 -30
  287. package/dist/runtime-state.d.ts.map +0 -1
  288. package/dist/runtime-state.js +0 -17
  289. package/dist/runtime-state.js.map +0 -1
  290. package/dist/sillytavern-importer/items.d.ts +0 -3
  291. package/dist/sillytavern-importer/items.d.ts.map +0 -1
  292. package/dist/sillytavern-importer/items.js +0 -88
  293. package/dist/sillytavern-importer/items.js.map +0 -1
  294. package/dist/sillytavern-importer/macros.d.ts +0 -15
  295. package/dist/sillytavern-importer/macros.d.ts.map +0 -1
  296. package/dist/sillytavern-importer/macros.js +0 -141
  297. package/dist/sillytavern-importer/macros.js.map +0 -1
  298. package/dist/sillytavern-importer/prompt-order.d.ts +0 -6
  299. package/dist/sillytavern-importer/prompt-order.d.ts.map +0 -1
  300. package/dist/sillytavern-importer/prompt-order.js +0 -38
  301. package/dist/sillytavern-importer/prompt-order.js.map +0 -1
  302. package/dist/sillytavern-importer/regex.d.ts +0 -3
  303. package/dist/sillytavern-importer/regex.d.ts.map +0 -1
  304. package/dist/sillytavern-importer/regex.js +0 -275
  305. package/dist/sillytavern-importer/regex.js.map +0 -1
  306. package/dist/sillytavern-importer/report.d.ts +0 -21
  307. package/dist/sillytavern-importer/report.d.ts.map +0 -1
  308. package/dist/sillytavern-importer/report.js +0 -166
  309. package/dist/sillytavern-importer/report.js.map +0 -1
  310. package/dist/sillytavern-importer/types.d.ts +0 -106
  311. package/dist/sillytavern-importer/types.d.ts.map +0 -1
  312. package/dist/sillytavern-importer/types.js +0 -2
  313. package/dist/sillytavern-importer/types.js.map +0 -1
  314. package/dist/sillytavern-importer.d.ts +0 -5
  315. package/dist/sillytavern-importer.d.ts.map +0 -1
  316. package/dist/sillytavern-importer.js +0 -117
  317. package/dist/sillytavern-importer.js.map +0 -1
  318. package/dist/subagent/canonical.d.ts +0 -22
  319. package/dist/subagent/canonical.d.ts.map +0 -1
  320. package/dist/subagent/canonical.js +0 -24
  321. package/dist/subagent/canonical.js.map +0 -1
  322. package/dist/subagent/context.d.ts +0 -8
  323. package/dist/subagent/context.d.ts.map +0 -1
  324. package/dist/subagent/context.js +0 -125
  325. package/dist/subagent/context.js.map +0 -1
  326. package/dist/subagent/contract.d.ts +0 -10
  327. package/dist/subagent/contract.d.ts.map +0 -1
  328. package/dist/subagent/contract.js +0 -10
  329. package/dist/subagent/contract.js.map +0 -1
  330. package/dist/subagent/plan.d.ts +0 -18
  331. package/dist/subagent/plan.d.ts.map +0 -1
  332. package/dist/subagent/plan.js +0 -157
  333. package/dist/subagent/plan.js.map +0 -1
  334. package/dist/subagent/preflight.d.ts +0 -4
  335. package/dist/subagent/preflight.d.ts.map +0 -1
  336. package/dist/subagent/preflight.js +0 -108
  337. package/dist/subagent/preflight.js.map +0 -1
  338. package/dist/subagent/request.d.ts +0 -4
  339. package/dist/subagent/request.d.ts.map +0 -1
  340. package/dist/subagent/request.js +0 -154
  341. package/dist/subagent/request.js.map +0 -1
  342. package/dist/subagent/response.d.ts +0 -8
  343. package/dist/subagent/response.d.ts.map +0 -1
  344. package/dist/subagent/response.js +0 -155
  345. package/dist/subagent/response.js.map +0 -1
  346. package/dist/subagent/tools.d.ts +0 -4
  347. package/dist/subagent/tools.d.ts.map +0 -1
  348. package/dist/subagent/tools.js +0 -42
  349. package/dist/subagent/tools.js.map +0 -1
  350. package/dist/subagent/types.d.ts +0 -272
  351. package/dist/subagent/types.d.ts.map +0 -1
  352. package/dist/subagent/types.js +0 -3
  353. package/dist/subagent/types.js.map +0 -1
  354. package/dist/subagent/validation.d.ts +0 -35
  355. package/dist/subagent/validation.d.ts.map +0 -1
  356. package/dist/subagent/validation.js +0 -314
  357. package/dist/subagent/validation.js.map +0 -1
  358. package/dist/subagent-command.d.ts +0 -5
  359. package/dist/subagent-command.d.ts.map +0 -1
  360. package/dist/subagent-command.js +0 -249
  361. package/dist/subagent-command.js.map +0 -1
  362. package/dist/subagent-profile-tool.d.ts +0 -49
  363. package/dist/subagent-profile-tool.d.ts.map +0 -1
  364. package/dist/subagent-profile-tool.js +0 -125
  365. package/dist/subagent-profile-tool.js.map +0 -1
  366. package/dist/subagent-tool.d.ts +0 -77
  367. package/dist/subagent-tool.d.ts.map +0 -1
  368. package/dist/subagent-tool.js +0 -559
  369. package/dist/subagent-tool.js.map +0 -1
  370. package/docs/guides/sillytavern-import.md +0 -47
  371. package/docs/reference/subagent-adapter.md +0 -204
  372. package/examples/sillytavern-dm-writer-prompt-stack.json +0 -190
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Host-neutral context diff engine.
3
+ *
4
+ * Pure functions only: no DOM, no Vue, no Node APIs. Consecutive turn
5
+ * snapshots are compared with a simple prefix-walk that models KV-cache
6
+ * reuse without attempting a full Myers diff.
7
+ */
8
+ /** Estimate tokens from characters using the same chars/4 approximation as payload capture. */
9
+ export function estimateApproxTokens(text) {
10
+ return Math.max(1, Math.ceil(text.length / 4));
11
+ }
12
+ /** Pure string hash used as the block identity shortcut. */
13
+ export function hashText(text) {
14
+ let hash = 0x811c9dc5;
15
+ for (let i = 0; i < text.length; i++) {
16
+ hash ^= text.charCodeAt(i);
17
+ hash = Math.imul(hash, 0x01000193);
18
+ }
19
+ return (hash >>> 0).toString(16).padStart(8, "0");
20
+ }
21
+ export function createBlock(key, role, text, serialized) {
22
+ const hashInput = serialized === undefined
23
+ ? { role, text }
24
+ : { role, text, serialized };
25
+ const serializedHashInput = stringifyHashInput(hashInput);
26
+ return {
27
+ key,
28
+ role,
29
+ text,
30
+ chars: text.length,
31
+ approxTokens: estimateApproxTokens(text),
32
+ hash: hashText(serializedHashInput),
33
+ };
34
+ }
35
+ export function createTurnSnapshot(input) {
36
+ return {
37
+ turnId: input.turnId,
38
+ capturedAt: input.capturedAt ?? "",
39
+ stackId: input.stackId ?? "",
40
+ blocks: input.blocks ?? [],
41
+ };
42
+ }
43
+ export function turnApproxTokens(turn) {
44
+ const chars = turn.blocks.reduce((sum, block) => sum + block.chars, 0);
45
+ return chars === 0 ? 0 : Math.ceil(chars / 4);
46
+ }
47
+ function commonPrefixLength(a, b) {
48
+ const max = Math.min(a.length, b.length);
49
+ let index = 0;
50
+ while (index < max && a.charCodeAt(index) === b.charCodeAt(index)) {
51
+ index++;
52
+ }
53
+ return index;
54
+ }
55
+ function stringifyHashInput(value) {
56
+ try {
57
+ const serialized = JSON.stringify(value);
58
+ return serialized === undefined ? String(value) : serialized;
59
+ }
60
+ catch {
61
+ return String(value);
62
+ }
63
+ }
64
+ /**
65
+ * A block hash includes fields that affect the provider wire request, while
66
+ * the visible block text remains the useful prompt excerpt. When a hash
67
+ * differs because metadata changed without changing the excerpt, no part of
68
+ * that excerpt is safe to count as a reusable prefix.
69
+ */
70
+ function safeCommonPrefixLength(before, after) {
71
+ if (before.role !== after.role || before.text === after.text)
72
+ return 0;
73
+ return commonPrefixLength(before.text, after.text);
74
+ }
75
+ function classify(before, after) {
76
+ if (before && after) {
77
+ if (before.hash === after.hash) {
78
+ return { status: "same", before, after, tokenDelta: 0 };
79
+ }
80
+ return {
81
+ status: "modified",
82
+ before,
83
+ after,
84
+ tokenDelta: 0,
85
+ };
86
+ }
87
+ if (before) {
88
+ return { status: "removed", before, tokenDelta: 0 };
89
+ }
90
+ return { status: "added", after, tokenDelta: 0 };
91
+ }
92
+ /**
93
+ * Allocate the request-level chars/4 delta across changed blocks. Per-block
94
+ * token deltas are deliberately based on character deltas, with the single
95
+ * request-level rounding remainder distributed across blocks so the chips and
96
+ * summary describe the same integer total.
97
+ */
98
+ function assignTokenDeltas(blocks, deltaTokens) {
99
+ const candidates = blocks
100
+ .map((block) => ({
101
+ block,
102
+ charDelta: (block.after?.chars ?? 0) - (block.before?.chars ?? 0),
103
+ }))
104
+ .filter(({ block, charDelta }) => block.status !== "same" && charDelta !== 0);
105
+ if (candidates.length === 0)
106
+ return;
107
+ let allocated = 0;
108
+ for (const candidate of candidates) {
109
+ candidate.block.tokenDelta = Math.trunc(candidate.charDelta / 4);
110
+ allocated += candidate.block.tokenDelta;
111
+ }
112
+ let remainder = deltaTokens - allocated;
113
+ if (remainder === 0)
114
+ return;
115
+ const direction = remainder > 0 ? 1 : -1;
116
+ const preferred = candidates.filter(({ charDelta }) => direction > 0 ? charDelta > 0 : charDelta < 0);
117
+ const targets = preferred.length > 0 ? preferred : candidates;
118
+ const wholeShare = Math.trunc(Math.abs(remainder) / targets.length);
119
+ if (wholeShare > 0) {
120
+ for (const target of targets)
121
+ target.block.tokenDelta += direction * wholeShare;
122
+ remainder -= direction * wholeShare * targets.length;
123
+ }
124
+ for (let index = 0; remainder !== 0; index++) {
125
+ targets[index % targets.length].block.tokenDelta += direction;
126
+ remainder -= direction;
127
+ }
128
+ }
129
+ function summarize(blocks, netTokens) {
130
+ let sameBlocks = 0;
131
+ let addedBlocks = 0;
132
+ let removedBlocks = 0;
133
+ let modifiedBlocks = 0;
134
+ let addedTokens = 0;
135
+ let removedTokens = 0;
136
+ for (const block of blocks) {
137
+ switch (block.status) {
138
+ case "same":
139
+ sameBlocks++;
140
+ break;
141
+ case "added":
142
+ addedBlocks++;
143
+ if (block.tokenDelta > 0)
144
+ addedTokens += block.tokenDelta;
145
+ if (block.tokenDelta < 0)
146
+ removedTokens += -block.tokenDelta;
147
+ break;
148
+ case "removed":
149
+ removedBlocks++;
150
+ if (block.tokenDelta > 0)
151
+ addedTokens += block.tokenDelta;
152
+ if (block.tokenDelta < 0)
153
+ removedTokens += -block.tokenDelta;
154
+ break;
155
+ case "modified":
156
+ modifiedBlocks++;
157
+ if (block.tokenDelta > 0) {
158
+ addedTokens += block.tokenDelta;
159
+ }
160
+ else {
161
+ removedTokens += -block.tokenDelta;
162
+ }
163
+ break;
164
+ }
165
+ }
166
+ return {
167
+ sameBlocks,
168
+ addedBlocks,
169
+ removedBlocks,
170
+ modifiedBlocks,
171
+ changedBlocks: addedBlocks + removedBlocks + modifiedBlocks,
172
+ addedTokens,
173
+ removedTokens,
174
+ netTokens,
175
+ };
176
+ }
177
+ function hasUniqueStableKeys(blocks) {
178
+ const keys = blocks.map((block) => block.key);
179
+ return keys.every((key) => key.length > 0) && new Set(keys).size === keys.length;
180
+ }
181
+ function alignBlocks(beforeBlocks, afterBlocks) {
182
+ const afterKeys = new Set(afterBlocks.map((block) => block.key));
183
+ const useKeys = hasUniqueStableKeys(beforeBlocks)
184
+ && hasUniqueStableKeys(afterBlocks)
185
+ && beforeBlocks.some((block) => afterKeys.has(block.key));
186
+ if (!useKeys) {
187
+ return alignPositional(beforeBlocks, afterBlocks);
188
+ }
189
+ const beforeByKey = new Map(beforeBlocks.map((block) => [block.key, block]));
190
+ const beforeIndexByKey = new Map(beforeBlocks.map((block, index) => [block.key, index]));
191
+ const aligned = [];
192
+ let beforeCursor = 0;
193
+ let afterCursor = 0;
194
+ for (let afterIndex = 0; afterIndex < afterBlocks.length; afterIndex++) {
195
+ const after = afterBlocks[afterIndex];
196
+ const beforeIndex = beforeIndexByKey.get(after.key);
197
+ if (beforeIndex === undefined || beforeIndex < beforeCursor)
198
+ continue;
199
+ aligned.push(...alignPositional(beforeBlocks.slice(beforeCursor, beforeIndex), afterBlocks.slice(afterCursor, afterIndex)));
200
+ aligned.push({ before: beforeByKey.get(after.key), after });
201
+ beforeCursor = beforeIndex + 1;
202
+ afterCursor = afterIndex + 1;
203
+ }
204
+ aligned.push(...alignPositional(beforeBlocks.slice(beforeCursor), afterBlocks.slice(afterCursor)));
205
+ return aligned;
206
+ }
207
+ function alignPositional(beforeBlocks, afterBlocks) {
208
+ const maxLength = Math.max(beforeBlocks.length, afterBlocks.length);
209
+ return Array.from({ length: maxLength }, (_, index) => ({
210
+ before: beforeBlocks[index],
211
+ after: afterBlocks[index],
212
+ }));
213
+ }
214
+ /**
215
+ * Diff two consecutive turn snapshots.
216
+ *
217
+ * The cache-boundary walk compares block arrays positionally while hashes
218
+ * match. This preserves the serialized-prefix meaning even when a later
219
+ * block is moved. Classification uses stable block keys after the boundary so
220
+ * a middle insertion does not make every following block look modified.
221
+ */
222
+ export function diffTurns(previous, current) {
223
+ const beforeBlocks = previous?.blocks ?? [];
224
+ const afterBlocks = current.blocks;
225
+ const diffBlocks = alignBlocks(beforeBlocks, afterBlocks).map(({ before, after }) => classify(before, after));
226
+ let prefixChars = 0;
227
+ let boundaryCrossed = false;
228
+ for (let index = 0; index < Math.max(beforeBlocks.length, afterBlocks.length); index++) {
229
+ const before = beforeBlocks[index];
230
+ const after = afterBlocks[index];
231
+ if (!boundaryCrossed) {
232
+ if (before && after && before.hash === after.hash) {
233
+ prefixChars += after.chars;
234
+ continue;
235
+ }
236
+ if (before && after) {
237
+ prefixChars += safeCommonPrefixLength(before, after);
238
+ }
239
+ boundaryCrossed = true;
240
+ }
241
+ }
242
+ const currentTokens = turnApproxTokens(current);
243
+ const previousTokens = previous ? turnApproxTokens(previous) : 0;
244
+ const currentChars = afterBlocks.reduce((sum, block) => sum + block.chars, 0);
245
+ const prefixTokens = !boundaryCrossed || prefixChars >= currentChars
246
+ ? currentTokens
247
+ : Math.min(currentTokens, Math.floor(prefixChars / 4));
248
+ const deltaTokens = currentTokens - previousTokens;
249
+ assignTokenDeltas(diffBlocks, deltaTokens);
250
+ const prefixRatio = currentTokens === 0 ? 0 : prefixTokens / currentTokens;
251
+ return {
252
+ blocks: diffBlocks,
253
+ prefixTokens,
254
+ prefixRatio,
255
+ deltaTokens,
256
+ summary: summarize(diffBlocks, deltaTokens),
257
+ };
258
+ }
259
+ //# sourceMappingURL=context-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-diff.js","sourceRoot":"","sources":["../src/context-diff.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"extension-registry.d.ts","sourceRoot":"","sources":["../src/extension-registry.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,yBAAyB,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,aAAa,CAAC;AAEjG,MAAM,WAAW,+BAA+B;IAC/C,IAAI,EAAE,yBAAyB,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,MAAM,EAAE,CAAC;IACxD,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,4BAA4B,GAAG,MAAM,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAC;AAE3F,MAAM,WAAW,iCAAiC;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAInE"}
1
+ {"version":3,"file":"extension-registry.d.ts","sourceRoot":"","sources":["../src/extension-registry.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,yBAAyB,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,aAAa,CAAC;AAEjG,MAAM,WAAW,+BAA+B;IAC/C,IAAI,EAAE,yBAAyB,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,MAAM,EAAE,CAAC;IACxD,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,4BAA4B,GAAG,MAAM,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAC;AAE3F,MAAM,WAAW,iCAAiC;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAOnE"}
@@ -1,6 +1,9 @@
1
1
  export function assertRegistryName(kind, name) {
2
- if (!/^[A-Za-z][A-Za-z0-9_.-]*$/.test(name)) {
3
- throw new Error(`${kind} name must start with a letter and contain only letters, numbers, underscore, dot, or hyphen: ${name}`);
2
+ // Names must be a single template-path segment: forge-v1 uses "." as the
3
+ // path separator, so a dotted name ("git.branch") could be registered but
4
+ // never addressed — "extensions.git.branch" parses as three segments.
5
+ if (!/^[A-Za-z][A-Za-z0-9_-]*$/.test(name)) {
6
+ throw new Error(`${kind} name must start with a letter and contain only letters, numbers, underscore, or hyphen: ${name}`);
4
7
  }
5
8
  }
6
9
  //# sourceMappingURL=extension-registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extension-registry.js","sourceRoot":"","sources":["../src/extension-registry.ts"],"names":[],"mappings":"AA4BA,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,IAAY;IAC5D,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,iGAAiG,IAAI,EAAE,CAAC,CAAC;IACjI,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"extension-registry.js","sourceRoot":"","sources":["../src/extension-registry.ts"],"names":[],"mappings":"AA4BA,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,IAAY;IAC5D,yEAAyE;IACzE,0EAA0E;IAC1E,sEAAsE;IACtE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,4FAA4F,IAAI,EAAE,CAAC,CAAC;IAC5H,CAAC;AACF,CAAC"}
@@ -1,114 +1,9 @@
1
- import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
2
- import { type ResourceScope } from "./resource-identity.ts";
3
- /** Backend used when neither a per-run override nor a configured default applies. */
4
- export declare const DEFAULT_SUBAGENT_BACKEND_ID = "pi-subprocess-readonly";
5
- /** Preserve the original foreground-run timeout unless the user configures one. */
6
- export declare const DEFAULT_SUBAGENT_TIMEOUT_MS = 60000;
7
- export declare const MIN_SUBAGENT_TIMEOUT_MS = 1000;
8
- export declare const MAX_SUBAGENT_TIMEOUT_MS = 3600000;
9
1
  /**
10
2
  * Development/test override for the global config location. Keeps automated
11
3
  * tests hermetic regardless of the developer's real ~/.pi/forge/config.json.
12
4
  * Not part of the supported user-facing configuration surface.
13
5
  */
14
6
  export declare const GLOBAL_FORGE_CONFIG_PATH_ENV = "PI_FORGE_GLOBAL_CONFIG_PATH";
15
- export type ForgeSubagentBackendSource = "explicit" | "project-profile" | "global-profile" | "project" | "global" | "built-in";
16
- export type ForgeSubagentConfigSource = "project" | "global";
17
- export type ForgeSubagentProfileSource = "project-profile" | "global-profile";
18
- export interface ForgeSubagentProfileSettings {
19
- enabled?: boolean;
20
- enabledSource?: ForgeSubagentProfileSource;
21
- backend?: string;
22
- backendSource?: ForgeSubagentProfileSource;
23
- timeoutMs?: number;
24
- timeoutSource?: ForgeSubagentProfileSource;
25
- }
26
- export interface ForgeSubagentSettings {
27
- allowAgentInvocationWithoutApproval: boolean;
28
- /** Configured default backend ID; a trusted project config wins over the global config. */
29
- backend?: string;
30
- backendSource?: ForgeSubagentConfigSource;
31
- /** Best-effort foreground timeout; a trusted project config wins over the global config. */
32
- timeoutMs: number;
33
- timeoutSource: ForgeSubagentConfigSource | "built-in";
34
- /**
35
- * Embed a compact summary of enabled subagent profiles directly in the
36
- * forge_subagent tool description so the parent model does not need a
37
- * discovery call for a small set of frequently used profiles. Opt-in
38
- * because the summary rides in every request; the discovery tool remains
39
- * the authoritative surface.
40
- */
41
- summaryInToolDescription: boolean;
42
- summaryInToolDescriptionSource?: ForgeSubagentConfigSource;
43
- /**
44
- * Per-profile delegation allowlist and execution overrides, keyed by
45
- * canonical scoped selector (`global:<id>` or `project:<id>`). Unlisted
46
- * profiles are not delegatable.
47
- */
48
- profiles: Record<string, ForgeSubagentProfileSettings>;
49
- configPath: string;
50
- globalConfigPath: string;
51
- warnings: string[];
52
- }
53
- export interface ResolvedSubagentBackend {
54
- id: string;
55
- source: ForgeSubagentBackendSource;
56
- }
57
- export interface ResolvedSubagentTimeout {
58
- milliseconds: number;
59
- source: Exclude<ForgeSubagentBackendSource, "explicit">;
60
- }
61
- export interface ResolvedSubagentProfilePolicy {
62
- /** The selector used to resolve this policy, e.g. `reviewer` or `global:reviewer`. */
63
- profileId: string;
64
- enabled: boolean;
65
- enabledSource: ForgeSubagentProfileSource | "built-in";
66
- backend: ResolvedSubagentBackend;
67
- timeout: ResolvedSubagentTimeout;
68
- }
69
- /**
70
- * Resolve the effective backend for one run: explicit per-run override, then
71
- * a matching-scope per-profile override, then trusted-project/global defaults,
72
- * then the built-in subprocess backend. There is deliberately no fallback when
73
- * the resolved backend is missing or rejects the intent.
74
- */
75
- export declare function resolveSubagentBackend(settings: ForgeSubagentSettings, explicitBackend?: string, profileId?: string): ResolvedSubagentBackend;
76
- export declare function resolveSubagentTimeout(settings: ForgeSubagentSettings, profileId?: string): ResolvedSubagentTimeout;
77
- export declare function resolveSubagentProfilePolicy(settings: ForgeSubagentSettings, profileId: string, explicitBackend?: string): ResolvedSubagentProfilePolicy;
78
- export declare function loadForgeSubagentSettings(ctx: ExtensionContext): ForgeSubagentSettings;
79
- export declare function isValidSubagentTimeoutMs(value: unknown): value is number;
80
- /**
81
- * One scoped per-profile delegation update. `enabled: false`,
82
- * `backend: null`, and `timeoutMs: null` remove the explicit value; entries
83
- * that become empty are removed so the file only records real overrides.
84
- */
85
- export interface ForgeSubagentProfileConfigUpdate {
86
- enabled?: boolean;
87
- backend?: string | null;
88
- timeoutMs?: number | null;
89
- }
90
- export type ForgeSubagentProfileConfigResult = {
91
- ok: true;
92
- configPath: string;
93
- } | {
94
- ok: false;
95
- error: string;
96
- };
97
7
  export declare function globalForgeConfigPath(): string;
98
8
  export declare function projectForgeConfigPath(cwd: string): string;
99
- /**
100
- * Update `subagents.profiles.<id>` in the selected scope's config file,
101
- * preserving unknown top-level, `subagents`, and per-entry fields. Project
102
- * config updates must be gated on project trust by the caller; global config
103
- * is user-owned and always writable.
104
- */
105
- export declare function updateForgeSubagentProfileConfig(cwd: string, profileId: string, update: ForgeSubagentProfileConfigUpdate, options?: {
106
- scope?: ResourceScope;
107
- }): ForgeSubagentProfileConfigResult;
108
- /**
109
- * Resolve the configured per-profile settings for a profile selector. Bare
110
- * selectors use project-first effective lookup; qualified selectors address
111
- * the exact scope. Returns undefined for unknown or malformed selectors.
112
- */
113
- export declare function configuredProfileForSelector(settings: ForgeSubagentSettings, profileId: string): ForgeSubagentProfileSettings | undefined;
114
9
  //# sourceMappingURL=forge-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"forge-config.d.ts","sourceRoot":"","sources":["../src/forge-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"forge-config.d.ts","sourceRoot":"","sources":["../src/forge-config.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,gCAAgC,CAAC;AAE1E,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1D"}