@zihanw/pi-forge 0.4.1 → 0.5.0

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 (328) hide show
  1. package/CHANGELOG.md +41 -1
  2. package/README.md +11 -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/extension-registry.d.ts.map +1 -1
  30. package/dist/extension-registry.js +5 -2
  31. package/dist/extension-registry.js.map +1 -1
  32. package/dist/forge-config.d.ts +0 -105
  33. package/dist/forge-config.d.ts.map +1 -1
  34. package/dist/forge-config.js +1 -313
  35. package/dist/forge-config.js.map +1 -1
  36. package/dist/forge-v1/analyzer.d.ts +3 -0
  37. package/dist/forge-v1/analyzer.d.ts.map +1 -0
  38. package/dist/forge-v1/analyzer.js +50 -0
  39. package/dist/forge-v1/analyzer.js.map +1 -0
  40. package/dist/forge-v1/index.d.ts +6 -0
  41. package/dist/forge-v1/index.d.ts.map +1 -0
  42. package/dist/forge-v1/index.js +13 -0
  43. package/dist/forge-v1/index.js.map +1 -0
  44. package/dist/forge-v1/parser.d.ts +3 -0
  45. package/dist/forge-v1/parser.d.ts.map +1 -0
  46. package/dist/forge-v1/parser.js +186 -0
  47. package/dist/forge-v1/parser.js.map +1 -0
  48. package/dist/forge-v1/renderer.d.ts +9 -0
  49. package/dist/forge-v1/renderer.d.ts.map +1 -0
  50. package/dist/forge-v1/renderer.js +181 -0
  51. package/dist/forge-v1/renderer.js.map +1 -0
  52. package/dist/forge-v1/types.d.ts +87 -0
  53. package/dist/forge-v1/types.d.ts.map +1 -0
  54. package/dist/forge-v1/types.js +4 -0
  55. package/dist/forge-v1/types.js.map +1 -0
  56. package/dist/index.d.ts +12 -12
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +49 -81
  59. package/dist/index.js.map +1 -1
  60. package/dist/lifecycle.d.ts +6 -5
  61. package/dist/lifecycle.d.ts.map +1 -1
  62. package/dist/lifecycle.js +43 -112
  63. package/dist/lifecycle.js.map +1 -1
  64. package/dist/loader.d.ts +5 -8
  65. package/dist/loader.d.ts.map +1 -1
  66. package/dist/loader.js +10 -467
  67. package/dist/loader.js.map +1 -1
  68. package/dist/macro-engine.d.ts +9 -14
  69. package/dist/macro-engine.d.ts.map +1 -1
  70. package/dist/macro-engine.js +5 -238
  71. package/dist/macro-engine.js.map +1 -1
  72. package/dist/payload-command.d.ts +6 -6
  73. package/dist/payload-command.d.ts.map +1 -1
  74. package/dist/payload-command.js.map +1 -1
  75. package/dist/payload-state.d.ts +16 -0
  76. package/dist/payload-state.d.ts.map +1 -0
  77. package/dist/payload-state.js +14 -0
  78. package/dist/payload-state.js.map +1 -0
  79. package/dist/preset-command.d.ts +4 -4
  80. package/dist/preset-command.d.ts.map +1 -1
  81. package/dist/preset-command.js +33 -104
  82. package/dist/preset-command.js.map +1 -1
  83. package/dist/preview.d.ts +4 -4
  84. package/dist/preview.d.ts.map +1 -1
  85. package/dist/preview.js +17 -8
  86. package/dist/preview.js.map +1 -1
  87. package/dist/profile-command.d.ts +2 -2
  88. package/dist/profile-command.d.ts.map +1 -1
  89. package/dist/profile-command.js +15 -14
  90. package/dist/profile-command.js.map +1 -1
  91. package/dist/profile-service.d.ts.map +1 -1
  92. package/dist/profile-service.js +23 -39
  93. package/dist/profile-service.js.map +1 -1
  94. package/dist/prompt-analysis.d.ts +24 -0
  95. package/dist/prompt-analysis.d.ts.map +1 -0
  96. package/dist/prompt-analysis.js +84 -0
  97. package/dist/prompt-analysis.js.map +1 -0
  98. package/dist/prompt-runtime.d.ts +19 -0
  99. package/dist/prompt-runtime.d.ts.map +1 -0
  100. package/dist/prompt-runtime.js +30 -0
  101. package/dist/prompt-runtime.js.map +1 -0
  102. package/dist/regex.js +6 -12
  103. package/dist/regex.js.map +1 -1
  104. package/dist/render-helpers.d.ts +2 -10
  105. package/dist/render-helpers.d.ts.map +1 -1
  106. package/dist/render-helpers.js +3 -53
  107. package/dist/render-helpers.js.map +1 -1
  108. package/dist/repositories/agent-profile.d.ts +36 -0
  109. package/dist/repositories/agent-profile.d.ts.map +1 -0
  110. package/dist/repositories/agent-profile.js +153 -0
  111. package/dist/repositories/agent-profile.js.map +1 -0
  112. package/dist/repositories/index.d.ts +3 -0
  113. package/dist/repositories/index.d.ts.map +1 -0
  114. package/dist/repositories/index.js +3 -0
  115. package/dist/repositories/index.js.map +1 -0
  116. package/dist/repositories/prompt-stack.d.ts +57 -0
  117. package/dist/repositories/prompt-stack.d.ts.map +1 -0
  118. package/dist/repositories/prompt-stack.js +175 -0
  119. package/dist/repositories/prompt-stack.js.map +1 -0
  120. package/dist/runtime/profile-runtime.d.ts +2 -2
  121. package/dist/runtime/profile-runtime.d.ts.map +1 -1
  122. package/dist/runtime/profile-runtime.js +13 -10
  123. package/dist/runtime/profile-runtime.js.map +1 -1
  124. package/dist/runtime/prompt-stack-runtime.d.ts +4 -3
  125. package/dist/runtime/prompt-stack-runtime.d.ts.map +1 -1
  126. package/dist/runtime/prompt-stack-runtime.js +42 -57
  127. package/dist/runtime/prompt-stack-runtime.js.map +1 -1
  128. package/dist/runtime/tool-policy-runtime.d.ts +2 -2
  129. package/dist/runtime/tool-policy-runtime.d.ts.map +1 -1
  130. package/dist/runtime/tool-policy-runtime.js +3 -3
  131. package/dist/runtime/tool-policy-runtime.js.map +1 -1
  132. package/dist/session-adapter.d.ts +17 -0
  133. package/dist/session-adapter.d.ts.map +1 -0
  134. package/dist/session-adapter.js +57 -0
  135. package/dist/session-adapter.js.map +1 -0
  136. package/dist/slot-renderers.d.ts +16 -3
  137. package/dist/slot-renderers.d.ts.map +1 -1
  138. package/dist/slot-renderers.js +15 -63
  139. package/dist/slot-renderers.js.map +1 -1
  140. package/dist/stack-migration.d.ts +6 -0
  141. package/dist/stack-migration.d.ts.map +1 -1
  142. package/dist/stack-migration.js +49 -52
  143. package/dist/stack-migration.js.map +1 -1
  144. package/dist/subagent/fingerprints.d.ts +24 -0
  145. package/dist/subagent/fingerprints.d.ts.map +1 -0
  146. package/dist/subagent/fingerprints.js +81 -0
  147. package/dist/subagent/fingerprints.js.map +1 -0
  148. package/dist/subagent/host-port.d.ts +296 -0
  149. package/dist/subagent/host-port.d.ts.map +1 -0
  150. package/dist/subagent/host-port.js +560 -0
  151. package/dist/subagent/host-port.js.map +1 -0
  152. package/dist/subagent/index.d.ts +10 -10
  153. package/dist/subagent/index.d.ts.map +1 -1
  154. package/dist/subagent/index.js +9 -10
  155. package/dist/subagent/index.js.map +1 -1
  156. package/dist/subagent-host.d.ts +99 -18
  157. package/dist/subagent-host.d.ts.map +1 -1
  158. package/dist/subagent-host.js +143 -146
  159. package/dist/subagent-host.js.map +1 -1
  160. package/dist/template-render.d.ts +18 -0
  161. package/dist/template-render.d.ts.map +1 -0
  162. package/dist/template-render.js +232 -0
  163. package/dist/template-render.js.map +1 -0
  164. package/dist/types.d.ts +40 -27
  165. package/dist/types.d.ts.map +1 -1
  166. package/dist/types.js.map +1 -1
  167. package/dist/web-editor/client-script.generated.d.ts.map +1 -1
  168. package/dist/web-editor/client-script.generated.js +1 -1
  169. package/dist/web-editor/client-script.generated.js.map +1 -1
  170. package/dist/web-editor/client-styles.generated.d.ts.map +1 -1
  171. package/dist/web-editor/client-styles.generated.js +1 -1
  172. package/dist/web-editor/client-styles.generated.js.map +1 -1
  173. package/dist/web-editor/server.d.ts.map +1 -1
  174. package/dist/web-editor/server.js +1 -68
  175. package/dist/web-editor/server.js.map +1 -1
  176. package/dist/web-editor/styles.d.ts.map +1 -1
  177. package/dist/web-editor/styles.js +13 -0
  178. package/dist/web-editor/styles.js.map +1 -1
  179. package/dist/web-editor/types.d.ts +0 -35
  180. package/dist/web-editor/types.d.ts.map +1 -1
  181. package/dist/web-host.d.ts +4 -2
  182. package/dist/web-host.d.ts.map +1 -1
  183. package/dist/web-host.js +32 -103
  184. package/dist/web-host.js.map +1 -1
  185. package/dist/workspace.d.ts +74 -0
  186. package/dist/workspace.d.ts.map +1 -0
  187. package/dist/workspace.js +351 -0
  188. package/dist/workspace.js.map +1 -0
  189. package/docs/README.md +6 -4
  190. package/docs/concepts/agent-profiles.md +1 -1
  191. package/docs/concepts/prompt-stacks.md +5 -5
  192. package/docs/design/README.md +21 -3
  193. package/docs/design/architecture-0.5.md +211 -0
  194. package/docs/design/archive/0.5-full-proposal/0.5-consumer-audit.md +62 -0
  195. package/docs/design/archive/0.5-full-proposal/0.5-inventory.md +208 -0
  196. package/docs/design/archive/0.5-full-proposal/0.5-phase0-decision-drafts.md +237 -0
  197. package/docs/design/archive/0.5-full-proposal/README.md +12 -0
  198. package/docs/design/archive/0.5-full-proposal/architecture-0.5.md +423 -0
  199. package/docs/design/archive/0.5-full-proposal/host-discovery-spike.md +103 -0
  200. package/docs/design/archive/0.5-full-proposal/template-language-spike.md +156 -0
  201. package/docs/design/context-diff-plan.md +72 -0
  202. package/docs/design/decision-template.md +33 -0
  203. package/docs/design/roadmap-0.4-archive.md +1 -1
  204. package/docs/design/subagents/interface-design.md +1 -1
  205. package/docs/development/architecture-rules.md +148 -0
  206. package/docs/development/roadmap.md +37 -5
  207. package/docs/development/scoped-global-profiles-stacks.md +1 -1
  208. package/docs/development/setup.md +6 -4
  209. package/docs/getting-started.md +5 -4
  210. package/docs/guides/custom-macros-and-slots.md +8 -7
  211. package/docs/guides/debugging.md +1 -1
  212. package/docs/guides/delegation.md +18 -22
  213. package/docs/guides/migrating-to-0.5.md +107 -0
  214. package/docs/guides/use-cases.md +7 -11
  215. package/docs/guides/web-editor.md +5 -9
  216. package/docs/reference/commands.md +4 -3
  217. package/docs/reference/configuration.md +17 -18
  218. package/docs/reference/features.md +34 -80
  219. package/docs/reference/macros-and-slots.md +70 -49
  220. package/docs/reference/public-api.md +64 -17
  221. package/docs/reference/stack-schema.md +14 -9
  222. package/docs/reference/subagent-host-port.md +49 -0
  223. package/docs/zh-CN/README.md +3 -3
  224. package/docs/zh-CN/concepts/agent-profiles.md +1 -1
  225. package/docs/zh-CN/concepts/prompt-stacks.md +4 -4
  226. package/docs/zh-CN/getting-started.md +3 -2
  227. package/docs/zh-CN/guides/delegation.md +10 -12
  228. package/docs/zh-CN/guides/migrating-to-0.5.md +92 -0
  229. package/docs/zh-CN/guides/web-editor.md +4 -4
  230. package/docs/zh-CN/reference/commands.md +3 -2
  231. package/examples/custom-system-status-extension/README.md +3 -3
  232. package/examples/custom-system-status-extension/index.ts +2 -1
  233. package/examples/custom-system-status-extension/prompt-stack.json +4 -3
  234. package/examples/default-prompt-stack.json +9 -4
  235. package/examples/image-reader-prompt-stack.json +16 -26
  236. package/examples/reviewer-prompt-stack.json +13 -24
  237. package/package.json +101 -120
  238. package/dist/runtime/subagent-runtime.d.ts +0 -45
  239. package/dist/runtime/subagent-runtime.d.ts.map +0 -1
  240. package/dist/runtime/subagent-runtime.js +0 -343
  241. package/dist/runtime/subagent-runtime.js.map +0 -1
  242. package/dist/runtime-state.d.ts +0 -30
  243. package/dist/runtime-state.d.ts.map +0 -1
  244. package/dist/runtime-state.js +0 -17
  245. package/dist/runtime-state.js.map +0 -1
  246. package/dist/sillytavern-importer/items.d.ts +0 -3
  247. package/dist/sillytavern-importer/items.d.ts.map +0 -1
  248. package/dist/sillytavern-importer/items.js +0 -88
  249. package/dist/sillytavern-importer/items.js.map +0 -1
  250. package/dist/sillytavern-importer/macros.d.ts +0 -15
  251. package/dist/sillytavern-importer/macros.d.ts.map +0 -1
  252. package/dist/sillytavern-importer/macros.js +0 -141
  253. package/dist/sillytavern-importer/macros.js.map +0 -1
  254. package/dist/sillytavern-importer/prompt-order.d.ts +0 -6
  255. package/dist/sillytavern-importer/prompt-order.d.ts.map +0 -1
  256. package/dist/sillytavern-importer/prompt-order.js +0 -38
  257. package/dist/sillytavern-importer/prompt-order.js.map +0 -1
  258. package/dist/sillytavern-importer/regex.d.ts +0 -3
  259. package/dist/sillytavern-importer/regex.d.ts.map +0 -1
  260. package/dist/sillytavern-importer/regex.js +0 -275
  261. package/dist/sillytavern-importer/regex.js.map +0 -1
  262. package/dist/sillytavern-importer/report.d.ts +0 -21
  263. package/dist/sillytavern-importer/report.d.ts.map +0 -1
  264. package/dist/sillytavern-importer/report.js +0 -166
  265. package/dist/sillytavern-importer/report.js.map +0 -1
  266. package/dist/sillytavern-importer/types.d.ts +0 -106
  267. package/dist/sillytavern-importer/types.d.ts.map +0 -1
  268. package/dist/sillytavern-importer/types.js +0 -2
  269. package/dist/sillytavern-importer/types.js.map +0 -1
  270. package/dist/sillytavern-importer.d.ts +0 -5
  271. package/dist/sillytavern-importer.d.ts.map +0 -1
  272. package/dist/sillytavern-importer.js +0 -117
  273. package/dist/sillytavern-importer.js.map +0 -1
  274. package/dist/subagent/canonical.d.ts +0 -22
  275. package/dist/subagent/canonical.d.ts.map +0 -1
  276. package/dist/subagent/canonical.js +0 -24
  277. package/dist/subagent/canonical.js.map +0 -1
  278. package/dist/subagent/context.d.ts +0 -8
  279. package/dist/subagent/context.d.ts.map +0 -1
  280. package/dist/subagent/context.js +0 -125
  281. package/dist/subagent/context.js.map +0 -1
  282. package/dist/subagent/contract.d.ts +0 -10
  283. package/dist/subagent/contract.d.ts.map +0 -1
  284. package/dist/subagent/contract.js +0 -10
  285. package/dist/subagent/contract.js.map +0 -1
  286. package/dist/subagent/plan.d.ts +0 -18
  287. package/dist/subagent/plan.d.ts.map +0 -1
  288. package/dist/subagent/plan.js +0 -157
  289. package/dist/subagent/plan.js.map +0 -1
  290. package/dist/subagent/preflight.d.ts +0 -4
  291. package/dist/subagent/preflight.d.ts.map +0 -1
  292. package/dist/subagent/preflight.js +0 -108
  293. package/dist/subagent/preflight.js.map +0 -1
  294. package/dist/subagent/request.d.ts +0 -4
  295. package/dist/subagent/request.d.ts.map +0 -1
  296. package/dist/subagent/request.js +0 -154
  297. package/dist/subagent/request.js.map +0 -1
  298. package/dist/subagent/response.d.ts +0 -8
  299. package/dist/subagent/response.d.ts.map +0 -1
  300. package/dist/subagent/response.js +0 -155
  301. package/dist/subagent/response.js.map +0 -1
  302. package/dist/subagent/tools.d.ts +0 -4
  303. package/dist/subagent/tools.d.ts.map +0 -1
  304. package/dist/subagent/tools.js +0 -42
  305. package/dist/subagent/tools.js.map +0 -1
  306. package/dist/subagent/types.d.ts +0 -272
  307. package/dist/subagent/types.d.ts.map +0 -1
  308. package/dist/subagent/types.js +0 -3
  309. package/dist/subagent/types.js.map +0 -1
  310. package/dist/subagent/validation.d.ts +0 -35
  311. package/dist/subagent/validation.d.ts.map +0 -1
  312. package/dist/subagent/validation.js +0 -314
  313. package/dist/subagent/validation.js.map +0 -1
  314. package/dist/subagent-command.d.ts +0 -5
  315. package/dist/subagent-command.d.ts.map +0 -1
  316. package/dist/subagent-command.js +0 -249
  317. package/dist/subagent-command.js.map +0 -1
  318. package/dist/subagent-profile-tool.d.ts +0 -49
  319. package/dist/subagent-profile-tool.d.ts.map +0 -1
  320. package/dist/subagent-profile-tool.js +0 -125
  321. package/dist/subagent-profile-tool.js.map +0 -1
  322. package/dist/subagent-tool.d.ts +0 -77
  323. package/dist/subagent-tool.d.ts.map +0 -1
  324. package/dist/subagent-tool.js +0 -559
  325. package/dist/subagent-tool.js.map +0 -1
  326. package/docs/guides/sillytavern-import.md +0 -47
  327. package/docs/reference/subagent-adapter.md +0 -204
  328. package/examples/sillytavern-dm-writer-prompt-stack.json +0 -190
@@ -24,6 +24,12 @@ export interface PromptStackMigrationReport {
24
24
  errors: number;
25
25
  deletedLegacy: number;
26
26
  }
27
+ /**
28
+ * Orchestrate the legacy `.pi/prompt-stacks` -> `.pi/forge/prompt-stacks`
29
+ * migration. All filesystem IO (raw byte-preserving reads, copies, deletes)
30
+ * lives in the prompt-stack repository; this command owns only reporting,
31
+ * overwrite policy, dry-run, and deletion ordering.
32
+ */
27
33
  export declare function migrateLegacyPromptStacks(cwd: string, options?: PromptStackMigrationOptions): PromptStackMigrationReport;
28
34
  export declare function renderMigrationReport(report: PromptStackMigrationReport): string;
29
35
  //# sourceMappingURL=stack-migration.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stack-migration.d.ts","sourceRoot":"","sources":["../src/stack-migration.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,2BAA2B;IAC3C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,0BAA0B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,wBAAwB,EAAE,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,2BAAgC,GAAG,0BAA0B,CAqF5H;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,0BAA0B,GAAG,MAAM,CAsChF"}
1
+ {"version":3,"file":"stack-migration.d.ts","sourceRoot":"","sources":["../src/stack-migration.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,2BAA2B;IAC3C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,0BAA0B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,wBAAwB,EAAE,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,2BAAgC,GAAG,0BAA0B,CAgF5H;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,0BAA0B,GAAG,MAAM,CAsChF"}
@@ -1,8 +1,14 @@
1
- import { copyFileSync, existsSync, mkdirSync, readdirSync, unlinkSync } from "node:fs";
2
- import { dirname, join } from "node:path";
3
- import { legacyPromptStacksDir, promptStacksDir } from "./storage.js";
1
+ import { join } from "node:path";
2
+ import { promptStacksDir } from "./storage.js";
3
+ import { copyLegacyPromptStackFile, deleteLegacyPromptStackFile, readLegacyPromptStackSources, } from "./repositories/prompt-stack.js";
4
+ /**
5
+ * Orchestrate the legacy `.pi/prompt-stacks` -> `.pi/forge/prompt-stacks`
6
+ * migration. All filesystem IO (raw byte-preserving reads, copies, deletes)
7
+ * lives in the prompt-stack repository; this command owns only reporting,
8
+ * overwrite policy, dry-run, and deletion ordering.
9
+ */
4
10
  export function migrateLegacyPromptStacks(cwd, options = {}) {
5
- const sourceDir = legacyPromptStacksDir(cwd);
11
+ const sourceDir = join(cwd, ".pi", "prompt-stacks");
6
12
  const targetDir = promptStacksDir(cwd);
7
13
  const report = {
8
14
  sourceDir,
@@ -17,32 +23,25 @@ export function migrateLegacyPromptStacks(cwd, options = {}) {
17
23
  errors: 0,
18
24
  deletedLegacy: 0,
19
25
  };
20
- if (!existsSync(sourceDir))
21
- return report;
22
- let entries;
26
+ let sources;
23
27
  try {
24
- entries = readdirSync(sourceDir).filter((name) => name.endsWith(".json")).sort();
28
+ sources = readLegacyPromptStackSources(cwd);
25
29
  }
26
- catch (error) {
27
- report.files.push({
28
- name: "(legacy directory)",
29
- sourcePath: sourceDir,
30
- targetPath: targetDir,
31
- action: "error",
32
- reason: error instanceof Error ? error.message : String(error),
33
- deleteLegacy: false,
34
- });
35
- report.errors++;
36
- return report;
30
+ catch {
31
+ sources = [];
37
32
  }
38
- for (const name of entries) {
39
- const sourcePath = join(sourceDir, name);
40
- const targetPath = join(targetDir, name);
41
- const targetExists = existsSync(targetPath);
42
- if (targetExists && !report.overwrite) {
33
+ if (sources.length === 0)
34
+ return report;
35
+ for (const source of sources) {
36
+ const targetPath = join(targetDir, source.name);
37
+ const copy = copyLegacyPromptStackFile(cwd, source.sourcePath, targetPath, {
38
+ overwrite: report.overwrite,
39
+ dryRun: report.dryRun,
40
+ });
41
+ if (!copy.ok && copy.reason === "exists") {
43
42
  report.files.push({
44
- name,
45
- sourcePath,
43
+ name: source.name,
44
+ sourcePath: source.sourcePath,
46
45
  targetPath,
47
46
  action: "skip",
48
47
  reason: "target already exists",
@@ -51,39 +50,37 @@ export function migrateLegacyPromptStacks(cwd, options = {}) {
51
50
  report.skipped++;
52
51
  continue;
53
52
  }
54
- const action = targetExists ? "overwrite" : "copy";
55
- try {
56
- if (!report.dryRun) {
57
- mkdirSync(dirname(targetPath), { recursive: true });
58
- copyFileSync(sourcePath, targetPath);
59
- if (report.deleteLegacy) {
60
- unlinkSync(sourcePath);
61
- report.deletedLegacy++;
62
- }
63
- }
64
- if (action === "overwrite")
65
- report.overwritten++;
66
- else
67
- report.copied++;
68
- report.files.push({
69
- name,
70
- sourcePath,
71
- targetPath,
72
- action,
73
- deleteLegacy: report.deleteLegacy,
74
- });
75
- }
76
- catch (error) {
53
+ if (!copy.ok) {
77
54
  report.files.push({
78
- name,
79
- sourcePath,
55
+ name: source.name,
56
+ sourcePath: source.sourcePath,
80
57
  targetPath,
81
58
  action: "error",
82
- reason: error instanceof Error ? error.message : String(error),
59
+ reason: copy.error,
83
60
  deleteLegacy: false,
84
61
  });
85
62
  report.errors++;
63
+ continue;
86
64
  }
65
+ if (copy.action === "overwrite")
66
+ report.overwritten++;
67
+ else
68
+ report.copied++;
69
+ let deletedLegacy = false;
70
+ if (report.deleteLegacy) {
71
+ const deleted = deleteLegacyPromptStackFile(cwd, source.sourcePath, { dryRun: report.dryRun });
72
+ if (deleted.ok) {
73
+ deletedLegacy = true;
74
+ report.deletedLegacy++;
75
+ }
76
+ }
77
+ report.files.push({
78
+ name: source.name,
79
+ sourcePath: source.sourcePath,
80
+ targetPath,
81
+ action: copy.action,
82
+ deleteLegacy: deletedLegacy,
83
+ });
87
84
  }
88
85
  return report;
89
86
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stack-migration.js","sourceRoot":"","sources":["../src/stack-migration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stack-migration.js","sourceRoot":"","sources":["../src/stack-migration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { AgentProfile } from "../agent-profile.ts";
2
+ import type { PromptStack } from "../types.ts";
3
+ /**
4
+ * Forge-owned canonical JSON + `sha256:v1` fingerprints.
5
+ *
6
+ * Vendored from @zihanw/pi-subagent-runtime's canonical implementation so the
7
+ * main package carries no runtime dependency. The algorithm is byte-for-byte
8
+ * identical (key-sorted plain objects, undefined properties omitted, finite
9
+ * numbers only, -0 normalized, no cycles/sparse arrays/non-plain objects), so
10
+ * fingerprints the host issues into profile snapshots stay comparable with
11
+ * values the optional package recomputes through the runtime. Golden vectors
12
+ * are pinned in tests/subagent-host.test.ts.
13
+ *
14
+ * The host never computes conversation/execution fingerprints; those are
15
+ * issued by the runtime during plan sealing in the optional package.
16
+ */
17
+ export declare const SUBAGENT_FINGERPRINT_PREFIX: "sha256:v1:";
18
+ export type SubagentFingerprint = `${typeof SUBAGENT_FINGERPRINT_PREFIX}${string}`;
19
+ export declare function canonicalSubagentJson(value: unknown): string;
20
+ export declare function subagentFingerprint(value: unknown): SubagentFingerprint;
21
+ /** Host-owned source provenance: profile and prompt-stack content fingerprints. */
22
+ export declare function subagentSourceProfileFingerprint(profile: AgentProfile): SubagentFingerprint;
23
+ export declare function subagentPromptStackFingerprint(stack: PromptStack): SubagentFingerprint;
24
+ //# sourceMappingURL=fingerprints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fingerprints.d.ts","sourceRoot":"","sources":["../../src/subagent/fingerprints.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,2BAA2B,EAAG,YAAqB,CAAC;AACjE,MAAM,MAAM,mBAAmB,GAAG,GAAG,OAAO,2BAA2B,GAAG,MAAM,EAAE,CAAC;AAEnF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE5D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAKvE;AAED,mFAAmF;AACnF,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,YAAY,GAAG,mBAAmB,CAE3F;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,WAAW,GAAG,mBAAmB,CAEtF"}
@@ -0,0 +1,81 @@
1
+ import { createHash } from "node:crypto";
2
+ /**
3
+ * Forge-owned canonical JSON + `sha256:v1` fingerprints.
4
+ *
5
+ * Vendored from @zihanw/pi-subagent-runtime's canonical implementation so the
6
+ * main package carries no runtime dependency. The algorithm is byte-for-byte
7
+ * identical (key-sorted plain objects, undefined properties omitted, finite
8
+ * numbers only, -0 normalized, no cycles/sparse arrays/non-plain objects), so
9
+ * fingerprints the host issues into profile snapshots stay comparable with
10
+ * values the optional package recomputes through the runtime. Golden vectors
11
+ * are pinned in tests/subagent-host.test.ts.
12
+ *
13
+ * The host never computes conversation/execution fingerprints; those are
14
+ * issued by the runtime during plan sealing in the optional package.
15
+ */
16
+ export const SUBAGENT_FINGERPRINT_PREFIX = "sha256:v1:";
17
+ export function canonicalSubagentJson(value) {
18
+ return canonicalize(value, "$", new Set());
19
+ }
20
+ export function subagentFingerprint(value) {
21
+ const digest = createHash("sha256")
22
+ .update(canonicalSubagentJson(value))
23
+ .digest("hex");
24
+ return `${SUBAGENT_FINGERPRINT_PREFIX}${digest}`;
25
+ }
26
+ /** Host-owned source provenance: profile and prompt-stack content fingerprints. */
27
+ export function subagentSourceProfileFingerprint(profile) {
28
+ return subagentFingerprint(profile);
29
+ }
30
+ export function subagentPromptStackFingerprint(stack) {
31
+ return subagentFingerprint(stack);
32
+ }
33
+ function canonicalize(value, path, ancestors) {
34
+ if (value === null)
35
+ return "null";
36
+ if (typeof value === "string" || typeof value === "boolean") {
37
+ return JSON.stringify(value);
38
+ }
39
+ if (typeof value === "number") {
40
+ if (!Number.isFinite(value)) {
41
+ throw new TypeError(`Cannot fingerprint non-finite number at ${path}.`);
42
+ }
43
+ return JSON.stringify(Object.is(value, -0) ? 0 : value);
44
+ }
45
+ if (typeof value !== "object" || value === undefined) {
46
+ throw new TypeError(`Cannot fingerprint ${typeof value} at ${path}.`);
47
+ }
48
+ if (ancestors.has(value)) {
49
+ throw new TypeError(`Cannot fingerprint cyclic value at ${path}.`);
50
+ }
51
+ ancestors.add(value);
52
+ try {
53
+ if (Array.isArray(value)) {
54
+ const items = [];
55
+ for (let index = 0; index < value.length; index += 1) {
56
+ if (!Object.hasOwn(value, index)) {
57
+ throw new TypeError(`Cannot fingerprint sparse array item at ${path}[${index}].`);
58
+ }
59
+ items.push(canonicalize(value[index], `${path}[${index}]`, ancestors));
60
+ }
61
+ return `[${items.join(",")}]`;
62
+ }
63
+ const prototype = Object.getPrototypeOf(value);
64
+ if (prototype !== Object.prototype && prototype !== null) {
65
+ throw new TypeError(`Cannot fingerprint non-plain object at ${path}.`);
66
+ }
67
+ const record = value;
68
+ const keys = Object.keys(record)
69
+ .filter((key) => record[key] !== undefined)
70
+ .sort();
71
+ const properties = keys.map((key) => {
72
+ const property = canonicalize(record[key], `${path}.${key}`, ancestors);
73
+ return `${JSON.stringify(key)}:${property}`;
74
+ });
75
+ return `{${properties.join(",")}}`;
76
+ }
77
+ finally {
78
+ ancestors.delete(value);
79
+ }
80
+ }
81
+ //# sourceMappingURL=fingerprints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fingerprints.js","sourceRoot":"","sources":["../../src/subagent/fingerprints.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,296 @@
1
+ import type { ThinkingLevel } from "@earendil-works/pi-agent-core";
2
+ import type { SubagentFingerprint } from "./fingerprints.ts";
3
+ /**
4
+ * Cross-extension Forge host port v1 over the Pi event bus.
5
+ *
6
+ * This is the in-process RPC contract used by the optional subagent package to
7
+ * discover the active main pi-forge host and invoke its three minimal
8
+ * operations (discovery, profile listing, and prompt preparation). Messages
9
+ * are plain, recursively validated, JSON-compatible data only — no functions,
10
+ * live contexts, or internal registries cross the bus. The port itself is not
11
+ * a trust boundary.
12
+ *
13
+ * Ownership: the main pi-forge host owns profiles, stacks, and prompt
14
+ * compilation. The optional package sends resource selectors + task + backend
15
+ * facts and receives immutable preparation artifacts back.
16
+ */
17
+ export declare const FORGE_HOST_PORT_VERSION = 1;
18
+ export declare const FORGE_HOST_PORT_NAMESPACE = "@zihanw/pi-forge/host/v1";
19
+ export declare const FORGE_HOST_PORT_OPERATIONS: readonly ["listProfiles", "resolveProfile", "prepare"];
20
+ export type ForgeHostPortOperation = (typeof FORGE_HOST_PORT_OPERATIONS)[number];
21
+ export declare const FORGE_HOST_CHANNEL: {
22
+ readonly discover: "@zihanw/pi-forge/host/v1/discover";
23
+ readonly available: "@zihanw/pi-forge/host/v1/available";
24
+ readonly request: "@zihanw/pi-forge/host/v1/request";
25
+ readonly reply: "@zihanw/pi-forge/host/v1/reply";
26
+ readonly unavailable: "@zihanw/pi-forge/host/v1/unavailable";
27
+ };
28
+ export interface ForgeHostTransport {
29
+ emit(channel: string, data: unknown): void;
30
+ on(channel: string, handler: (data: unknown) => void): () => void;
31
+ }
32
+ export type ForgeHostWireMessage = {
33
+ type: "discover";
34
+ protocolVersion: number;
35
+ minVersion: number;
36
+ maxVersion: number;
37
+ clientId: string;
38
+ } | {
39
+ type: "available";
40
+ hostId: string;
41
+ protocolVersion: number;
42
+ minVersion: number;
43
+ maxVersion: number;
44
+ capabilities: string[];
45
+ generation: number;
46
+ } | {
47
+ type: "request";
48
+ requestId: string;
49
+ hostId: string;
50
+ generation: number;
51
+ operation: string;
52
+ payload: unknown;
53
+ } | {
54
+ type: "reply";
55
+ requestId: string;
56
+ hostId: string;
57
+ generation: number;
58
+ ok: boolean;
59
+ data?: unknown;
60
+ error?: string;
61
+ } | {
62
+ type: "unavailable";
63
+ hostId: string;
64
+ generation: number;
65
+ };
66
+ export type ForgeHostPortResult = {
67
+ ok: true;
68
+ data: unknown;
69
+ } | {
70
+ ok: false;
71
+ error: string;
72
+ };
73
+ export interface ForgeHostOptions {
74
+ hostId?: string;
75
+ capabilities?: readonly string[];
76
+ minVersion?: number;
77
+ maxVersion?: number;
78
+ /** Operation handler; must never throw across the bus. */
79
+ handle(operation: string, payload: unknown): ForgeHostPortResult;
80
+ }
81
+ export interface ForgeHostConnection {
82
+ hostId: string;
83
+ protocolVersion: number;
84
+ capabilities: readonly string[];
85
+ generation: number;
86
+ }
87
+ export interface ForgeProfileSummary {
88
+ profileId: string;
89
+ scope: "project" | "global";
90
+ name?: string;
91
+ description?: string;
92
+ autoActivate?: boolean;
93
+ model: {
94
+ provider: string;
95
+ id: string;
96
+ };
97
+ thinkingLevel: string;
98
+ promptStack: string | null;
99
+ usable: boolean;
100
+ diagnostics: Array<{
101
+ level: string;
102
+ message: string;
103
+ field?: string;
104
+ }>;
105
+ }
106
+ export interface ForgeListProfilesResponse {
107
+ profiles: ForgeProfileSummary[];
108
+ }
109
+ /**
110
+ * Wire diagnostic shape for delegation resolution and preparation.
111
+ * Structurally compatible with the optional package's `SubagentDiagnostic`.
112
+ */
113
+ export interface ForgeDelegationDiagnostic {
114
+ level: "error" | "warning" | "info";
115
+ code: string;
116
+ message: string;
117
+ path?: string;
118
+ }
119
+ /** Host-compiled delegation message as carried over the wire (text-only). */
120
+ export interface ForgeDelegationMessage {
121
+ role: "user" | "assistant" | "custom";
122
+ content: Array<{
123
+ type: "text";
124
+ text: string;
125
+ }>;
126
+ protectedTask?: boolean;
127
+ source?: "prompt-stack" | "delegated-task";
128
+ }
129
+ export type ForgePromptDependencyKind = "macro" | "slot";
130
+ export interface ForgePromptDependency {
131
+ kind: ForgePromptDependencyKind;
132
+ name: string;
133
+ identity: string;
134
+ source?: string;
135
+ }
136
+ /**
137
+ * Minimal structural mirror of the host-owned agent profile carried over the
138
+ * wire. The host owns the schema: at runtime extra fields may pass through for
139
+ * forward compatibility, but consumers must only rely on the fields below.
140
+ */
141
+ export interface ForgeWireAgentProfile {
142
+ schemaVersion: 1;
143
+ type: string;
144
+ id: string;
145
+ name?: string;
146
+ description?: string;
147
+ autoActivate?: boolean;
148
+ model: {
149
+ provider: string;
150
+ id: string;
151
+ };
152
+ thinkingLevel: ThinkingLevel;
153
+ promptStack: string | null;
154
+ }
155
+ /**
156
+ * Minimal structural mirror of the host-owned prompt stack carried over the
157
+ * wire. Same forward-compat rule as ForgeWireAgentProfile.
158
+ */
159
+ export interface ForgeWirePromptStack {
160
+ id: string;
161
+ tools?: {
162
+ allow?: string[];
163
+ deny?: never;
164
+ } | {
165
+ allow?: never;
166
+ deny?: string[];
167
+ };
168
+ }
169
+ /**
170
+ * Immutable host-owned profile snapshot artifact returned by `resolveProfile`
171
+ * and embedded in `prepare` responses. The wire schema version is shared with
172
+ * the optional package's `AgentProfileSnapshot` by design.
173
+ */
174
+ export interface ForgeProfileSnapshot {
175
+ schemaVersion: 1;
176
+ /** Canonical scoped selector of the resolved profile (`project:<id>` or `global:<id>`). */
177
+ profileId: string;
178
+ profile: ForgeWireAgentProfile;
179
+ /** Canonical scoped selector of the resolved prompt stack, or null. */
180
+ promptStackId: string | null;
181
+ promptStack: ForgeWirePromptStack | null;
182
+ dependencies: ForgePromptDependency[];
183
+ profileFingerprint: SubagentFingerprint;
184
+ promptStackFingerprint: SubagentFingerprint | null;
185
+ }
186
+ export interface ForgeResolveProfileRequest {
187
+ profile: string;
188
+ }
189
+ export interface ForgeResolveProfileResponse {
190
+ /** Immutable host-owned AgentProfileSnapshot artifact (profile + stack + fingerprints). */
191
+ snapshot: ForgeProfileSnapshot;
192
+ }
193
+ /**
194
+ * Prompt-compilation access facts only — what Forge's tool negotiation reads.
195
+ * This intentionally is NOT the runtime `AgentRequest.access`; the optional
196
+ * package projects its own runtime access request onto these three facts.
197
+ */
198
+ export interface ForgePromptAccessFacts {
199
+ level: "none" | "read-only" | "workspace-write";
200
+ network: "deny" | "allow";
201
+ allowProcess: boolean;
202
+ }
203
+ export interface ForgeBackendTool {
204
+ id: string;
205
+ name?: string;
206
+ effects?: string[];
207
+ }
208
+ export interface ForgeBackendFacts {
209
+ model: {
210
+ provider: string;
211
+ id: string;
212
+ };
213
+ thinkingLevel: string;
214
+ toolCatalog: ForgeBackendTool[];
215
+ }
216
+ export interface ForgePrepareRequest {
217
+ profile: string;
218
+ task: {
219
+ text: string;
220
+ };
221
+ access: ForgePromptAccessFacts;
222
+ backend: ForgeBackendFacts;
223
+ }
224
+ export interface ForgePrepareResponse {
225
+ profileId: string;
226
+ model: {
227
+ provider: string;
228
+ id: string;
229
+ };
230
+ thinkingLevel: string;
231
+ systemPrompt: string;
232
+ messages: ForgeDelegationMessage[];
233
+ effectiveToolIds: string[];
234
+ effectiveToolNames: string[];
235
+ diagnostics: ForgeDelegationDiagnostic[];
236
+ profileSnapshot: ForgeProfileSnapshot;
237
+ preparedAt: string;
238
+ }
239
+ export declare class ForgeHostPortError extends Error {
240
+ readonly code: "timeout" | "duplicate" | "unavailable" | "protocol" | "invalid";
241
+ constructor(code: ForgeHostPortError["code"], message: string);
242
+ }
243
+ export type ValidationResult<T = unknown> = {
244
+ ok: true;
245
+ data: T;
246
+ } | {
247
+ ok: false;
248
+ error: string;
249
+ };
250
+ export declare function validateListProfilesRequest(value: unknown): ValidationResult<Record<string, never>>;
251
+ export declare function validateListProfilesResponse(value: unknown): ValidationResult<ForgeListProfilesResponse>;
252
+ export declare function validateResolveProfileRequest(value: unknown): ValidationResult<ForgeResolveProfileRequest>;
253
+ export declare function validateResolveProfileResponse(value: unknown): ValidationResult<ForgeResolveProfileResponse>;
254
+ export declare function validatePrepareRequest(value: unknown): ValidationResult<ForgePrepareRequest>;
255
+ export declare function validatePrepareResponse(value: unknown): ValidationResult<ForgePrepareResponse>;
256
+ export declare class ForgeHost {
257
+ private readonly transport;
258
+ private readonly options;
259
+ readonly hostId: string;
260
+ private generationId;
261
+ private started;
262
+ private unsubscribers;
263
+ constructor(transport: ForgeHostTransport, options: ForgeHostOptions);
264
+ get generation(): number;
265
+ get isLive(): boolean;
266
+ private availableMessage;
267
+ start(): void;
268
+ stop(): void;
269
+ private onDiscover;
270
+ private onRequest;
271
+ }
272
+ export interface ForgeHostClientOptions {
273
+ clientId?: string;
274
+ defaultTimeoutMs?: number;
275
+ /** How long after the first compatible host reply to keep collecting others before deciding. */
276
+ discoverSettleMs?: number;
277
+ }
278
+ export declare class ForgeHostClient {
279
+ private readonly transport;
280
+ readonly clientId: string;
281
+ private readonly defaultTimeoutMs;
282
+ private readonly discoverSettleMs;
283
+ private connectionUnsubscribe?;
284
+ private unavailableHandlers;
285
+ private activeConnection?;
286
+ constructor(transport: ForgeHostTransport, options?: ForgeHostClientOptions);
287
+ onUnavailable(handler: () => void): () => void;
288
+ private teardownPersistentListener;
289
+ private onUnavailableMessage;
290
+ discover(timeoutMs?: number): Promise<ForgeHostConnection>;
291
+ connect(connection: ForgeHostConnection): ForgeHostConnection;
292
+ request(connection: ForgeHostConnection, operation: string, payload: unknown, timeoutMs?: number): Promise<ForgeHostPortResult>;
293
+ disconnect(): void;
294
+ get subscriptionCount(): number;
295
+ }
296
+ //# sourceMappingURL=host-port.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-port.d.ts","sourceRoot":"","sources":["../../src/subagent/host-port.ts"],"names":[],"mappings":"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"}