@zihanw/pi-forge 0.3.1 → 0.4.0-beta.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 (255) hide show
  1. package/CHANGELOG.md +160 -0
  2. package/PUBLIC_API.md +28 -0
  3. package/README.md +168 -35
  4. package/README.zh-CN.md +168 -35
  5. package/SUBAGENT_ADAPTER_CONTRACT.md +199 -0
  6. package/dist/agent-profile.d.ts +71 -0
  7. package/dist/agent-profile.d.ts.map +1 -0
  8. package/dist/agent-profile.js +303 -0
  9. package/dist/agent-profile.js.map +1 -0
  10. package/dist/forge-config.d.ts +8 -0
  11. package/dist/forge-config.d.ts.map +1 -0
  12. package/dist/forge-config.js +40 -0
  13. package/dist/forge-config.js.map +1 -0
  14. package/dist/forge-extensions.d.ts +28 -0
  15. package/dist/forge-extensions.d.ts.map +1 -0
  16. package/dist/forge-extensions.js +198 -0
  17. package/dist/forge-extensions.js.map +1 -0
  18. package/dist/index.d.ts +8 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +75 -349
  21. package/dist/index.js.map +1 -1
  22. package/dist/lifecycle.d.ts +11 -3
  23. package/dist/lifecycle.d.ts.map +1 -1
  24. package/dist/lifecycle.js +92 -6
  25. package/dist/lifecycle.js.map +1 -1
  26. package/dist/loader.d.ts.map +1 -1
  27. package/dist/loader.js +116 -5
  28. package/dist/loader.js.map +1 -1
  29. package/dist/payload-capture.d.ts.map +1 -1
  30. package/dist/payload-capture.js +27 -0
  31. package/dist/payload-capture.js.map +1 -1
  32. package/dist/payload-command.d.ts +3 -3
  33. package/dist/payload-command.d.ts.map +1 -1
  34. package/dist/payload-command.js.map +1 -1
  35. package/dist/preset-command.d.ts +1 -1
  36. package/dist/preset-command.d.ts.map +1 -1
  37. package/dist/preset-command.js +12 -3
  38. package/dist/preset-command.js.map +1 -1
  39. package/dist/preview.d.ts +2 -2
  40. package/dist/preview.d.ts.map +1 -1
  41. package/dist/preview.js +2 -3
  42. package/dist/preview.js.map +1 -1
  43. package/dist/profile-command.d.ts +12 -0
  44. package/dist/profile-command.d.ts.map +1 -0
  45. package/dist/profile-command.js +291 -0
  46. package/dist/profile-command.js.map +1 -0
  47. package/dist/profile-service.d.ts +103 -0
  48. package/dist/profile-service.d.ts.map +1 -0
  49. package/dist/profile-service.js +215 -0
  50. package/dist/profile-service.js.map +1 -0
  51. package/dist/runtime/profile-runtime.d.ts +13 -0
  52. package/dist/runtime/profile-runtime.d.ts.map +1 -0
  53. package/dist/runtime/profile-runtime.js +47 -0
  54. package/dist/runtime/profile-runtime.js.map +1 -0
  55. package/dist/runtime/prompt-stack-runtime.d.ts +22 -0
  56. package/dist/runtime/prompt-stack-runtime.d.ts.map +1 -0
  57. package/dist/runtime/prompt-stack-runtime.js +104 -0
  58. package/dist/runtime/prompt-stack-runtime.js.map +1 -0
  59. package/dist/runtime/subagent-runtime.d.ts +30 -0
  60. package/dist/runtime/subagent-runtime.d.ts.map +1 -0
  61. package/dist/runtime/subagent-runtime.js +114 -0
  62. package/dist/runtime/subagent-runtime.js.map +1 -0
  63. package/dist/runtime/tool-policy-runtime.d.ts +15 -0
  64. package/dist/runtime/tool-policy-runtime.d.ts.map +1 -0
  65. package/dist/runtime/tool-policy-runtime.js +170 -0
  66. package/dist/runtime/tool-policy-runtime.js.map +1 -0
  67. package/dist/runtime/web-editor-runtime.d.ts +9 -0
  68. package/dist/runtime/web-editor-runtime.d.ts.map +1 -0
  69. package/dist/runtime/web-editor-runtime.js +131 -0
  70. package/dist/runtime/web-editor-runtime.js.map +1 -0
  71. package/dist/runtime-state.d.ts +6 -0
  72. package/dist/runtime-state.d.ts.map +1 -1
  73. package/dist/runtime-state.js +4 -0
  74. package/dist/runtime-state.js.map +1 -1
  75. package/dist/storage.d.ts +7 -0
  76. package/dist/storage.d.ts.map +1 -1
  77. package/dist/storage.js +22 -0
  78. package/dist/storage.js.map +1 -1
  79. package/dist/subagent/backend-registry.d.ts +75 -0
  80. package/dist/subagent/backend-registry.d.ts.map +1 -0
  81. package/dist/subagent/backend-registry.js +463 -0
  82. package/dist/subagent/backend-registry.js.map +1 -0
  83. package/dist/subagent/canonical.d.ts +10 -0
  84. package/dist/subagent/canonical.d.ts.map +1 -0
  85. package/dist/subagent/canonical.js +52 -0
  86. package/dist/subagent/canonical.js.map +1 -0
  87. package/dist/subagent/context.d.ts +8 -0
  88. package/dist/subagent/context.d.ts.map +1 -0
  89. package/dist/subagent/context.js +125 -0
  90. package/dist/subagent/context.js.map +1 -0
  91. package/dist/subagent/contract.d.ts +11 -0
  92. package/dist/subagent/contract.d.ts.map +1 -0
  93. package/dist/subagent/contract.js +11 -0
  94. package/dist/subagent/contract.js.map +1 -0
  95. package/dist/subagent/diagnostics.d.ts +3 -0
  96. package/dist/subagent/diagnostics.d.ts.map +1 -0
  97. package/dist/subagent/diagnostics.js +5 -0
  98. package/dist/subagent/diagnostics.js.map +1 -0
  99. package/dist/subagent/index.d.ts +13 -0
  100. package/dist/subagent/index.d.ts.map +1 -0
  101. package/dist/subagent/index.js +13 -0
  102. package/dist/subagent/index.js.map +1 -0
  103. package/dist/subagent/pi-model-runtime.d.ts +8 -0
  104. package/dist/subagent/pi-model-runtime.d.ts.map +1 -0
  105. package/dist/subagent/pi-model-runtime.js +22 -0
  106. package/dist/subagent/pi-model-runtime.js.map +1 -0
  107. package/dist/subagent/pi-sdk-backend.d.ts +23 -0
  108. package/dist/subagent/pi-sdk-backend.d.ts.map +1 -0
  109. package/dist/subagent/pi-sdk-backend.js +383 -0
  110. package/dist/subagent/pi-sdk-backend.js.map +1 -0
  111. package/dist/subagent/pi-subprocess-backend.d.ts +72 -0
  112. package/dist/subagent/pi-subprocess-backend.d.ts.map +1 -0
  113. package/dist/subagent/pi-subprocess-backend.js +756 -0
  114. package/dist/subagent/pi-subprocess-backend.js.map +1 -0
  115. package/dist/subagent/plan.d.ts +14 -0
  116. package/dist/subagent/plan.d.ts.map +1 -0
  117. package/dist/subagent/plan.js +160 -0
  118. package/dist/subagent/plan.js.map +1 -0
  119. package/dist/subagent/preflight.d.ts +4 -0
  120. package/dist/subagent/preflight.d.ts.map +1 -0
  121. package/dist/subagent/preflight.js +108 -0
  122. package/dist/subagent/preflight.js.map +1 -0
  123. package/dist/subagent/request.d.ts +4 -0
  124. package/dist/subagent/request.d.ts.map +1 -0
  125. package/dist/subagent/request.js +122 -0
  126. package/dist/subagent/request.js.map +1 -0
  127. package/dist/subagent/response.d.ts +8 -0
  128. package/dist/subagent/response.d.ts.map +1 -0
  129. package/dist/subagent/response.js +155 -0
  130. package/dist/subagent/response.js.map +1 -0
  131. package/dist/subagent/subprocess-bridge.d.ts +21 -0
  132. package/dist/subagent/subprocess-bridge.d.ts.map +1 -0
  133. package/dist/subagent/subprocess-bridge.js +87 -0
  134. package/dist/subagent/subprocess-bridge.js.map +1 -0
  135. package/dist/subagent/subprocess-report.d.ts +4 -0
  136. package/dist/subagent/subprocess-report.d.ts.map +1 -0
  137. package/dist/subagent/subprocess-report.js +55 -0
  138. package/dist/subagent/subprocess-report.js.map +1 -0
  139. package/dist/subagent/tools.d.ts +4 -0
  140. package/dist/subagent/tools.d.ts.map +1 -0
  141. package/dist/subagent/tools.js +42 -0
  142. package/dist/subagent/tools.js.map +1 -0
  143. package/dist/subagent/types.d.ts +384 -0
  144. package/dist/subagent/types.d.ts.map +1 -0
  145. package/dist/subagent/types.js +3 -0
  146. package/dist/subagent/types.js.map +1 -0
  147. package/dist/subagent/validation.d.ts +35 -0
  148. package/dist/subagent/validation.d.ts.map +1 -0
  149. package/dist/subagent/validation.js +500 -0
  150. package/dist/subagent/validation.js.map +1 -0
  151. package/dist/subagent-command.d.ts +4 -0
  152. package/dist/subagent-command.d.ts.map +1 -0
  153. package/dist/subagent-command.js +153 -0
  154. package/dist/subagent-command.js.map +1 -0
  155. package/dist/subagent-contract.d.ts +8 -0
  156. package/dist/subagent-contract.d.ts.map +1 -0
  157. package/dist/subagent-contract.js +8 -0
  158. package/dist/subagent-contract.js.map +1 -0
  159. package/dist/subagent-host.d.ts +44 -0
  160. package/dist/subagent-host.d.ts.map +1 -0
  161. package/dist/subagent-host.js +291 -0
  162. package/dist/subagent-host.js.map +1 -0
  163. package/dist/subagent-profile-tool.d.ts +26 -0
  164. package/dist/subagent-profile-tool.d.ts.map +1 -0
  165. package/dist/subagent-profile-tool.js +93 -0
  166. package/dist/subagent-profile-tool.js.map +1 -0
  167. package/dist/subagent-tool.d.ts +50 -0
  168. package/dist/subagent-tool.d.ts.map +1 -0
  169. package/dist/subagent-tool.js +385 -0
  170. package/dist/subagent-tool.js.map +1 -0
  171. package/dist/web-editor/client/api.d.ts +9 -0
  172. package/dist/web-editor/client/api.d.ts.map +1 -0
  173. package/dist/web-editor/client/api.js +26 -0
  174. package/dist/web-editor/client/api.js.map +1 -0
  175. package/dist/web-editor/client/dom.d.ts +13 -0
  176. package/dist/web-editor/client/dom.d.ts.map +1 -0
  177. package/dist/web-editor/client/dom.js +30 -0
  178. package/dist/web-editor/client/dom.js.map +1 -0
  179. package/dist/web-editor/client/inspector.d.ts +22 -0
  180. package/dist/web-editor/client/inspector.d.ts.map +1 -0
  181. package/dist/web-editor/client/inspector.js +226 -0
  182. package/dist/web-editor/client/inspector.js.map +1 -0
  183. package/dist/web-editor/client/main.d.ts +2 -0
  184. package/dist/web-editor/client/main.d.ts.map +1 -0
  185. package/dist/web-editor/client/main.js +1468 -0
  186. package/dist/web-editor/client/main.js.map +1 -0
  187. package/dist/web-editor/client/policy-editor.d.ts +16 -0
  188. package/dist/web-editor/client/policy-editor.d.ts.map +1 -0
  189. package/dist/web-editor/client/policy-editor.js +330 -0
  190. package/dist/web-editor/client/policy-editor.js.map +1 -0
  191. package/dist/web-editor/client/regex-editor.d.ts +19 -0
  192. package/dist/web-editor/client/regex-editor.d.ts.map +1 -0
  193. package/dist/web-editor/client/regex-editor.js +281 -0
  194. package/dist/web-editor/client/regex-editor.js.map +1 -0
  195. package/dist/web-editor/client/types.d.ts +60 -0
  196. package/dist/web-editor/client/types.d.ts.map +1 -0
  197. package/dist/web-editor/client/types.js +2 -0
  198. package/dist/web-editor/client/types.js.map +1 -0
  199. package/dist/web-editor/client-script.d.ts +2 -0
  200. package/dist/web-editor/client-script.d.ts.map +1 -0
  201. package/dist/web-editor/client-script.generated.d.ts +2 -0
  202. package/dist/web-editor/client-script.generated.d.ts.map +1 -0
  203. package/dist/web-editor/client-script.generated.js +3 -0
  204. package/dist/web-editor/client-script.generated.js.map +1 -0
  205. package/dist/web-editor/client-script.js +2 -0
  206. package/dist/web-editor/client-script.js.map +1 -0
  207. package/dist/web-editor/page.d.ts.map +1 -1
  208. package/dist/web-editor/page.js +6 -3249
  209. package/dist/web-editor/page.js.map +1 -1
  210. package/dist/web-editor/server.js +4 -4
  211. package/dist/web-editor/server.js.map +1 -1
  212. package/dist/web-editor/styles.d.ts +2 -0
  213. package/dist/web-editor/styles.d.ts.map +1 -0
  214. package/dist/web-editor/styles.js +996 -0
  215. package/dist/web-editor/styles.js.map +1 -0
  216. package/dist/web-editor/types.d.ts +8 -8
  217. package/dist/web-editor/types.d.ts.map +1 -1
  218. package/dist/web-host.d.ts +4 -4
  219. package/dist/web-host.d.ts.map +1 -1
  220. package/dist/web-host.js +15 -9
  221. package/dist/web-host.js.map +1 -1
  222. package/examples/custom-system-status-extension/README.md +34 -27
  223. package/examples/custom-system-status-extension/index.ts +71 -111
  224. package/examples/custom-system-status-extension/prompt-stack.json +1 -1
  225. package/package.json +42 -14
  226. package/src/compiler.ts +0 -578
  227. package/src/extension-registry.ts +0 -33
  228. package/src/index.ts +0 -430
  229. package/src/lifecycle.ts +0 -171
  230. package/src/loader.ts +0 -394
  231. package/src/macro-engine.ts +0 -358
  232. package/src/payload-capture.ts +0 -85
  233. package/src/payload-command.ts +0 -138
  234. package/src/policy.ts +0 -42
  235. package/src/preset-command.ts +0 -271
  236. package/src/preview.ts +0 -226
  237. package/src/regex.ts +0 -500
  238. package/src/render-helpers.ts +0 -169
  239. package/src/runtime-state.ts +0 -36
  240. package/src/sillytavern-importer/items.ts +0 -98
  241. package/src/sillytavern-importer/macros.ts +0 -159
  242. package/src/sillytavern-importer/prompt-order.ts +0 -54
  243. package/src/sillytavern-importer/regex.ts +0 -270
  244. package/src/sillytavern-importer/report.ts +0 -202
  245. package/src/sillytavern-importer/types.ts +0 -120
  246. package/src/sillytavern-importer.ts +0 -152
  247. package/src/slot-renderers.ts +0 -414
  248. package/src/stack-migration.ts +0 -159
  249. package/src/storage.ts +0 -28
  250. package/src/types.ts +0 -209
  251. package/src/web-editor/index.ts +0 -2
  252. package/src/web-editor/page.ts +0 -3330
  253. package/src/web-editor/server.ts +0 -294
  254. package/src/web-editor/types.ts +0 -98
  255. package/src/web-host.ts +0 -232
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/web-editor/styles.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAk+BtC,CAAC"}
@@ -20,18 +20,18 @@ export interface WebEditorHost {
20
20
  filePath: string;
21
21
  diagnostics: PromptStackDiagnostic[];
22
22
  } | undefined;
23
- createStack(stack: PromptStack, options: WebEditorCreateStackOptions): WebEditorOperationResult<{
23
+ createStack(stack: PromptStack, options: WebEditorCreateStackOptions): Promise<WebEditorOperationResult<{
24
24
  stack: WebEditorStackSummary;
25
25
  stacks: WebEditorStackSummary[];
26
- }>;
27
- saveStack(id: string, stack: PromptStack): WebEditorOperationResult<{
26
+ }>>;
27
+ saveStack(id: string, stack: PromptStack): Promise<WebEditorOperationResult<{
28
28
  stack: WebEditorStackSummary;
29
29
  stacks: WebEditorStackSummary[];
30
- }>;
31
- deleteStack(id: string): WebEditorOperationResult<{
30
+ }>>;
31
+ deleteStack(id: string): Promise<WebEditorOperationResult<{
32
32
  activeId?: string;
33
33
  stacks: WebEditorStackSummary[];
34
- }>;
34
+ }>>;
35
35
  validateStack(stack: PromptStack): PromptStackDiagnostic[];
36
36
  previewStack(id: string, stack: PromptStack): WebEditorOperationResult<{
37
37
  text: string;
@@ -49,10 +49,10 @@ export interface WebEditorHost {
49
49
  activeId?: string;
50
50
  stacks: WebEditorStackSummary[];
51
51
  }>;
52
- reloadStacks(): WebEditorOperationResult<{
52
+ reloadStacks(): Promise<WebEditorOperationResult<{
53
53
  activeId?: string;
54
54
  stacks: WebEditorStackSummary[];
55
- }>;
55
+ }>>;
56
56
  }
57
57
  export interface WebEditorPreviewSection {
58
58
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/web-editor/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/web-editor/types.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { ExtensionCommandContext } from "@earendil-works/pi-coding-agent";
1
+ import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
2
2
  import type { LoadedPromptStack, PromptStackDiagnostic } from "./types.ts";
3
3
  import type { WebEditorHost, WebEditorOperationResult, WebEditorPayloadSnapshot, WebEditorPolicyResources, WebEditorPreview, WebEditorStackSummary } from "./web-editor/index.ts";
4
4
  export interface WebHostRuntime {
@@ -7,7 +7,7 @@ export interface WebHostRuntime {
7
7
  getActiveId(): string | undefined;
8
8
  getSelectedActiveId(): string | undefined;
9
9
  setActive(id: string | undefined): boolean;
10
- reloadStacks(preferredId?: string): void;
10
+ reloadStacks(preferredId?: string): Promise<void>;
11
11
  buildPreview(target: LoadedPromptStack): {
12
12
  text: string;
13
13
  preview: WebEditorPreview;
@@ -18,10 +18,10 @@ export interface WebHostRuntime {
18
18
  armPayload(savePath?: string): WebEditorOperationResult<WebEditorPayloadSnapshot>;
19
19
  clearPayload(): WebEditorOperationResult<WebEditorPayloadSnapshot>;
20
20
  }
21
- export declare function createWebEditorHost(ctx: ExtensionCommandContext, runtime: WebHostRuntime): WebEditorHost;
21
+ export declare function createWebEditorHost(ctx: ExtensionContext, runtime: WebHostRuntime): WebEditorHost;
22
22
  export declare function stackSummary(loaded: LoadedPromptStack, active: LoadedPromptStack | undefined): WebEditorStackSummary;
23
23
  export declare function stackSummaries(stacks: LoadedPromptStack[], active: LoadedPromptStack | undefined): WebEditorStackSummary[];
24
- export declare function loadWebEditorSettings(ctx: ExtensionCommandContext): {
24
+ export declare function loadWebEditorSettings(ctx: ExtensionContext): {
25
25
  preferredPort?: number;
26
26
  configPath: string;
27
27
  warnings: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"web-host.d.ts","sourceRoot":"","sources":["../src/web-host.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAM/E,OAAO,KAAK,EAAE,iBAAiB,EAAe,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,KAAK,EAEX,aAAa,EACb,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,EACrB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,cAAc;IAC9B,SAAS,IAAI,iBAAiB,EAAE,CAAC;IACjC,SAAS,IAAI,iBAAiB,GAAG,SAAS,CAAC;IAC3C,WAAW,IAAI,MAAM,GAAG,SAAS,CAAC;IAClC,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAAC;IAC1C,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAC3C,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG;QACxC,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,gBAAgB,CAAC;QAC1B,WAAW,EAAE,qBAAqB,EAAE,CAAC;KACrC,CAAC;IACF,kBAAkB,IAAI,wBAAwB,CAAC;IAC/C,UAAU,IAAI,wBAAwB,CAAC,wBAAwB,CAAC,CAAC;IACjE,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,wBAAwB,CAAC,wBAAwB,CAAC,CAAC;IAClF,YAAY,IAAI,wBAAwB,CAAC,wBAAwB,CAAC,CAAC;CACnE;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,uBAAuB,EAAE,OAAO,EAAE,cAAc,GAAG,aAAa,CAoCxG;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,GAAG,SAAS,GAAG,qBAAqB,CAepH;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,EAAE,EAAE,MAAM,EAAE,iBAAiB,GAAG,SAAS,GAAG,qBAAqB,EAAE,CAE1H;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,uBAAuB,GAAG;IAAE,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAmCtI"}
1
+ {"version":3,"file":"web-host.d.ts","sourceRoot":"","sources":["../src/web-host.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAMxE,OAAO,KAAK,EAAE,iBAAiB,EAAe,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,KAAK,EAEX,aAAa,EACb,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,EACrB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,cAAc;IAC9B,SAAS,IAAI,iBAAiB,EAAE,CAAC;IACjC,SAAS,IAAI,iBAAiB,GAAG,SAAS,CAAC;IAC3C,WAAW,IAAI,MAAM,GAAG,SAAS,CAAC;IAClC,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAAC;IAC1C,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAC3C,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG;QACxC,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,gBAAgB,CAAC;QAC1B,WAAW,EAAE,qBAAqB,EAAE,CAAC;KACrC,CAAC;IACF,kBAAkB,IAAI,wBAAwB,CAAC;IAC/C,UAAU,IAAI,wBAAwB,CAAC,wBAAwB,CAAC,CAAC;IACjE,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,wBAAwB,CAAC,wBAAwB,CAAC,CAAC;IAClF,YAAY,IAAI,wBAAwB,CAAC,wBAAwB,CAAC,CAAC;CACnE;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,cAAc,GAAG,aAAa,CAoCjG;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,GAAG,SAAS,GAAG,qBAAqB,CAepH;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,EAAE,EAAE,MAAM,EAAE,iBAAiB,GAAG,SAAS,GAAG,qBAAqB,EAAE,CAE1H;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,gBAAgB,GAAG;IAAE,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAmC/H"}
package/dist/web-host.js CHANGED
@@ -34,8 +34,8 @@ export function createWebEditorHost(ctx, runtime) {
34
34
  runtime.setActive("none");
35
35
  return { ok: true, activeId: runtime.getActiveId(), stacks: stackSummaries(runtime.getStacks(), runtime.getActive()) };
36
36
  },
37
- reloadStacks: () => {
38
- runtime.reloadStacks(runtime.getSelectedActiveId());
37
+ reloadStacks: async () => {
38
+ await runtime.reloadStacks(runtime.getSelectedActiveId());
39
39
  return { ok: true, activeId: runtime.getActiveId(), stacks: stackSummaries(runtime.getStacks(), runtime.getActive()) };
40
40
  },
41
41
  };
@@ -92,25 +92,31 @@ export function loadWebEditorSettings(ctx) {
92
92
  warnings: [`pi-forge: ${configPath} webEditor.port must be an integer from 1 to 65535; using an available editor port.`],
93
93
  };
94
94
  }
95
- function saveStackFile(ctx, runtime, id, stack) {
95
+ async function saveStackFile(ctx, runtime, id, stack) {
96
96
  if (!ctx.isProjectTrusted()) {
97
97
  return { ok: false, status: 403, error: "Project is not trusted; refusing to save prompt stacks." };
98
98
  }
99
99
  const target = runtime.getStacks().find((candidate) => candidate.stack.id === id);
100
100
  if (!target)
101
101
  return { ok: false, status: 404, error: `Unknown prompt stack: ${id}` };
102
+ const idError = validateWebStackId(stack.id);
103
+ if (idError)
104
+ return { ok: false, status: 400, error: idError };
105
+ if (stack.id !== id) {
106
+ return { ok: false, status: 400, error: "Stack id is immutable during save; fork the stack to create a new id." };
107
+ }
102
108
  if (!isInsidePromptStackStorage(ctx.cwd, target.filePath)) {
103
109
  return { ok: false, status: 403, error: "Refusing to save outside prompt-stack storage." };
104
110
  }
105
111
  writeFileSync(target.filePath, `${JSON.stringify(stack, null, 2)}\n`, "utf8");
106
112
  const preferredId = runtime.getActive()?.stack.id === id ? stack.id : runtime.getSelectedActiveId();
107
- runtime.reloadStacks(preferredId);
113
+ await runtime.reloadStacks(preferredId);
108
114
  const saved = runtime.getStacks().find((candidate) => candidate.stack.id === stack.id) ?? runtime.getStacks().find((candidate) => candidate.filePath === target.filePath);
109
115
  if (!saved)
110
116
  return { ok: false, status: 500, error: "Saved stack could not be reloaded." };
111
117
  return { ok: true, stack: stackSummary(saved, runtime.getActive()), stacks: stackSummaries(runtime.getStacks(), runtime.getActive()) };
112
118
  }
113
- function createStackFile(ctx, runtime, stack, options) {
119
+ async function createStackFile(ctx, runtime, stack, options) {
114
120
  if (!ctx.isProjectTrusted()) {
115
121
  return { ok: false, status: 403, error: "Project is not trusted; refusing to create prompt stacks." };
116
122
  }
@@ -131,7 +137,7 @@ function createStackFile(ctx, runtime, stack, options) {
131
137
  const previousSelection = runtime.getSelectedActiveId();
132
138
  mkdirSync(dirname(targetPath), { recursive: true });
133
139
  writeFileSync(targetPath, `${JSON.stringify(stack, null, 2)}\n`, "utf8");
134
- runtime.reloadStacks(options.activate ? stack.id : (previousSelection ?? "none"));
140
+ await runtime.reloadStacks(options.activate ? stack.id : (previousSelection ?? "none"));
135
141
  if (options.activate)
136
142
  runtime.setActive(stack.id);
137
143
  const created = runtime.getStacks().find((candidate) => candidate.stack.id === stack.id);
@@ -139,7 +145,7 @@ function createStackFile(ctx, runtime, stack, options) {
139
145
  return { ok: false, status: 500, error: "Created stack could not be reloaded." };
140
146
  return { ok: true, stack: stackSummary(created, runtime.getActive()), stacks: stackSummaries(runtime.getStacks(), runtime.getActive()) };
141
147
  }
142
- function deleteStackFile(ctx, runtime, id) {
148
+ async function deleteStackFile(ctx, runtime, id) {
143
149
  if (!ctx.isProjectTrusted()) {
144
150
  return { ok: false, status: 403, error: "Project is not trusted; refusing to delete prompt stacks." };
145
151
  }
@@ -153,10 +159,10 @@ function deleteStackFile(ctx, runtime, id) {
153
159
  unlinkSync(target.filePath);
154
160
  if (wasActive) {
155
161
  runtime.setActive("none");
156
- runtime.reloadStacks("none");
162
+ await runtime.reloadStacks("none");
157
163
  }
158
164
  else {
159
- runtime.reloadStacks(runtime.getSelectedActiveId());
165
+ await runtime.reloadStacks(runtime.getSelectedActiveId());
160
166
  }
161
167
  return { ok: true, activeId: runtime.getActiveId(), stacks: stackSummaries(runtime.getStacks(), runtime.getActive()) };
162
168
  }
@@ -1 +1 @@
1
- {"version":3,"file":"web-host.js","sourceRoot":"","sources":["../src/web-host.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-host.js","sourceRoot":"","sources":["../src/web-host.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  # Custom System Status Extension
2
2
 
3
- This example shows how trusted extension code can register a pi-forge custom macro and custom slot.
3
+ This example shows how trusted pi-forge extension modules can register a custom macro and custom slot without importing `@zihanw/pi-forge` from a loose Pi extension file.
4
4
 
5
5
  It registers:
6
6
 
@@ -9,51 +9,58 @@ It registers:
9
9
 
10
10
  The renderers are synchronous, so this example uses Node's OS load average and memory APIs. It is a rough machine-load signal, not an async sampled CPU-utilization profiler.
11
11
 
12
- ## Try It Quickly
12
+ ## Try It
13
13
 
14
- From a project where `@zihanw/pi-forge` is installed:
14
+ Install or load pi-forge, then copy the extension module and stack into a trusted project:
15
15
 
16
16
  ```bash
17
- pi -e ./examples/custom-system-status-extension/index.ts
17
+ mkdir -p .pi/forge/extensions .pi/forge/prompt-stacks
18
+ cp examples/custom-system-status-extension/index.ts .pi/forge/extensions/system-status.ts
19
+ cp examples/custom-system-status-extension/prompt-stack.json .pi/forge/prompt-stacks/custom-system-status.json
18
20
  ```
19
21
 
20
- When developing from a local pi-forge checkout without installing the package, run the example in place from this repository. The extension falls back to `../../src/index.ts`.
21
-
22
- If you copy the extension into another project's `.pi/extensions/` folder while pi-forge itself is loaded from a local checkout, point the extension at that same checkout:
22
+ Start Pi, trust the project if prompted, then run:
23
23
 
24
- ```bash
25
- PI_FORGE_MODULE=/path/to/pi-forge/src/index.ts pi
24
+ ```text
25
+ /preset reload
26
+ /preset use custom-system-status
26
27
  ```
27
28
 
28
- Replace `/path/to/pi-forge` with the local checkout that matches the pi-forge extension you load from `settings.json`.
29
+ Use `/preset diagnostics` to confirm the extension file is listed under loaded pi-forge extensions.
29
30
 
30
- Then copy `prompt-stack.json` into your project's prompt-stack folder:
31
+ ## Where To Put The Extension
31
32
 
32
- ```bash
33
- mkdir -p .pi/forge/prompt-stacks
34
- cp examples/custom-system-status-extension/prompt-stack.json .pi/forge/prompt-stacks/custom-system-status.json
35
- ```
33
+ pi-forge loads trusted registration modules from a global location and the current project:
36
34
 
37
- Use `/preset reload`, then `/preset use custom-system-status`.
35
+ ```text
36
+ ~/.pi/forge/extensions/
37
+ .pi/forge/extensions/
38
+ ```
38
39
 
39
- ## Where To Put The Extension
40
+ Use `~/.pi/forge/extensions/` for personal machine-wide macros and slots. Use `.pi/forge/extensions/` when the customization should travel with the project's prompt stacks.
40
41
 
41
- Use one of Pi's trusted extension locations:
42
+ Supported entries:
42
43
 
43
- - Project-local: `.pi/extensions/system-status/index.ts`
44
- - Global: `~/.pi/agent/extensions/system-status/index.ts`
45
- - Package-managed: a Pi package with a `pi.extensions` entry in `package.json`
44
+ - `~/.pi/forge/extensions/system-status.ts`
45
+ - `.pi/forge/extensions/system-status.ts`
46
+ - `.pi/forge/extensions/system-status.js`
47
+ - `.pi/forge/extensions/system-status.mjs`
48
+ - `.pi/forge/extensions/system-status.cjs`
49
+ - `.pi/forge/extensions/system-status/index.ts`
50
+ - `.pi/forge/extensions/system-status/index.js`
46
51
 
47
- For project-local use:
52
+ Each module exports a default function or named `register` function:
48
53
 
49
- ```bash
50
- mkdir -p .pi/extensions/system-status
51
- cp examples/custom-system-status-extension/index.ts .pi/extensions/system-status/index.ts
54
+ ```ts
55
+ export default function register(api) {
56
+ api.registerMacro({ name: "cpuLoad", render: () => "..." });
57
+ api.registerSlot({ name: "machine-status", render: () => "..." });
58
+ }
52
59
  ```
53
60
 
54
- Project-local extensions load only after the project is trusted. If the extension is not loaded, the stack can still be read, but `machine-status` will validate as an unsupported slot and `{{cpuLoad}}` will remain an unresolved macro.
61
+ pi-forge passes the registration API into the function, tracks unregister callbacks, and unregisters previous definitions before reloading the folder. If the extension is not loaded, the stack can still be read, but `machine-status` will validate as an unsupported slot and `{{cpuLoad}}` will remain an unresolved macro.
55
62
 
56
- If the extension fails with `Cannot find module '@zihanw/pi-forge'`, pi-forge is not installed as a package visible to this extension. Either install/load pi-forge as a package, run the example in place from the pi-forge checkout, or set `PI_FORGE_MODULE` to the local `src/index.ts` path of the checkout that Pi is loading.
63
+ Only use this folder for trusted code. These modules execute with normal local code permissions after the project is trusted.
57
64
 
58
65
  ## Stack Reference
59
66
 
@@ -1,12 +1,26 @@
1
1
  import { cpus, freemem, loadavg, totalmem, uptime } from "node:os";
2
- import { resolve } from "node:path";
3
- import { pathToFileURL } from "node:url";
4
- import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
5
- import type { registerMacro, registerSlot } from "../../src/index.ts";
6
2
 
7
- interface PiForgeRegistrationApi {
8
- registerMacro: typeof registerMacro;
9
- registerSlot: typeof registerSlot;
3
+ interface ForgeRegistrationApi {
4
+ registerMacro(definition: {
5
+ name: string;
6
+ source?: string;
7
+ description?: string;
8
+ render: () => string;
9
+ }): () => void;
10
+ registerSlot(definition: {
11
+ name: string;
12
+ source?: string;
13
+ description?: string;
14
+ options?: Record<string, unknown>;
15
+ render: (ctx: {
16
+ options: Record<string, unknown>;
17
+ format: () => "xml" | "plain" | "json";
18
+ helpers: {
19
+ escapeXml(value: string): string;
20
+ plainBullet(label: string, value: string): string;
21
+ };
22
+ }) => string;
23
+ }): () => void;
10
24
  }
11
25
 
12
26
  interface SystemStatusSnapshot {
@@ -22,117 +36,63 @@ interface SystemStatusSnapshot {
22
36
  uptimeSeconds: number;
23
37
  }
24
38
 
25
- interface ExampleRegistryState {
26
- unregister: Array<() => void>;
27
- }
28
-
29
- type ExampleGlobal = typeof globalThis & {
30
- __piForgeSystemStatusExample?: ExampleRegistryState;
31
- };
32
-
33
- function registryState(): ExampleRegistryState {
34
- const globalScope = globalThis as ExampleGlobal;
35
- globalScope.__piForgeSystemStatusExample ??= { unregister: [] };
36
- return globalScope.__piForgeSystemStatusExample;
37
- }
38
-
39
- function resetRegistrations(): void {
40
- const state = registryState();
41
- for (const unregister of state.unregister.splice(0)) unregister();
42
- }
43
-
44
- export default async function systemStatusExtension(_pi: ExtensionAPI): Promise<void> {
45
- const { registerMacro, registerSlot } = await loadPiForgeRegistrationApi();
46
- resetRegistrations();
47
- const state = registryState();
48
-
49
- state.unregister.push(
50
- registerMacro({
51
- name: "cpuLoad",
52
- source: "pi-forge-example-system-status",
53
- description: "Current machine CPU load as normalized 1-minute OS load average.",
54
- render: () => formatCpuLoad(readSystemStatus()),
55
- }),
56
- registerSlot({
57
- name: "machine-status",
58
- source: "pi-forge-example-system-status",
59
- description: "Current machine CPU, memory, and uptime snapshot.",
60
- options: {
61
- format: { type: "enum", values: ["plain", "xml"], default: "plain" },
62
- heading: { type: "string", default: "Machine status" },
63
- includeMemory: { type: "boolean", default: true },
64
- includeUptime: { type: "boolean", default: true },
65
- },
66
- render: (ctx) => {
67
- const snapshot = readSystemStatus();
68
- const includeMemory = ctx.options.includeMemory !== false;
69
- const includeUptime = ctx.options.includeUptime !== false;
70
- const heading = typeof ctx.options.heading === "string" && ctx.options.heading.trim()
71
- ? ctx.options.heading.trim()
72
- : "Machine status";
73
-
74
- if (ctx.format() === "xml") {
75
- const lines = [
76
- "<machine_status>",
77
- ` <cpu logical_cores=\"${snapshot.logicalCores}\" normalized_load_1m=\"${snapshot.normalizedLoad1.toFixed(3)}\" model=\"${ctx.helpers.escapeXml(snapshot.cpuModel)}\">${ctx.helpers.escapeXml(formatCpuLoad(snapshot))}</cpu>`,
78
- ` <load_average one_minute=\"${snapshot.load1.toFixed(2)}\" five_minutes=\"${snapshot.load5.toFixed(2)}\" fifteen_minutes=\"${snapshot.load15.toFixed(2)}\" />`,
79
- ];
80
- if (includeMemory) {
81
- lines.push(` <memory used_percent=\"${snapshot.usedMemoryPercent.toFixed(1)}\" free_mb=\"${snapshot.freeMemoryMb}\" total_mb=\"${snapshot.totalMemoryMb}\" />`);
82
- }
83
- if (includeUptime) {
84
- lines.push(` <uptime>${ctx.helpers.escapeXml(formatDuration(snapshot.uptimeSeconds))}</uptime>`);
85
- }
86
- lines.push("</machine_status>");
87
- return lines.join("\n");
88
- }
89
-
39
+ export default function registerSystemStatus(api: ForgeRegistrationApi): void {
40
+ api.registerMacro({
41
+ name: "cpuLoad",
42
+ source: "pi-forge-example-system-status",
43
+ description: "Current machine CPU load as normalized 1-minute OS load average.",
44
+ render: () => formatCpuLoad(readSystemStatus()),
45
+ });
46
+
47
+ api.registerSlot({
48
+ name: "machine-status",
49
+ source: "pi-forge-example-system-status",
50
+ description: "Current machine CPU, memory, and uptime snapshot.",
51
+ options: {
52
+ format: { type: "enum", values: ["plain", "xml"], default: "plain" },
53
+ heading: { type: "string", default: "Machine status" },
54
+ includeMemory: { type: "boolean", default: true },
55
+ includeUptime: { type: "boolean", default: true },
56
+ },
57
+ render: (ctx) => {
58
+ const snapshot = readSystemStatus();
59
+ const includeMemory = ctx.options.includeMemory !== false;
60
+ const includeUptime = ctx.options.includeUptime !== false;
61
+ const heading = typeof ctx.options.heading === "string" && ctx.options.heading.trim()
62
+ ? ctx.options.heading.trim()
63
+ : "Machine status";
64
+
65
+ if (ctx.format() === "xml") {
90
66
  const lines = [
91
- `${heading}:`,
92
- ctx.helpers.plainBullet("CPU", `${snapshot.logicalCores} logical cores, ${snapshot.cpuModel}`),
93
- ctx.helpers.plainBullet("CPU load", formatCpuLoad(snapshot)),
94
- ctx.helpers.plainBullet("Load average", `${snapshot.load1.toFixed(2)} / ${snapshot.load5.toFixed(2)} / ${snapshot.load15.toFixed(2)} (1m/5m/15m)`),
67
+ "<machine_status>",
68
+ ` <cpu logical_cores=\"${snapshot.logicalCores}\" normalized_load_1m=\"${snapshot.normalizedLoad1.toFixed(3)}\" model=\"${ctx.helpers.escapeXml(snapshot.cpuModel)}\">${ctx.helpers.escapeXml(formatCpuLoad(snapshot))}</cpu>`,
69
+ ` <load_average one_minute=\"${snapshot.load1.toFixed(2)}\" five_minutes=\"${snapshot.load5.toFixed(2)}\" fifteen_minutes=\"${snapshot.load15.toFixed(2)}\" />`,
95
70
  ];
96
71
  if (includeMemory) {
97
- lines.push(ctx.helpers.plainBullet("Memory", `${snapshot.usedMemoryPercent.toFixed(1)}% used (${snapshot.freeMemoryMb} MB free / ${snapshot.totalMemoryMb} MB total)`));
72
+ lines.push(` <memory used_percent=\"${snapshot.usedMemoryPercent.toFixed(1)}\" free_mb=\"${snapshot.freeMemoryMb}\" total_mb=\"${snapshot.totalMemoryMb}\" />`);
98
73
  }
99
74
  if (includeUptime) {
100
- lines.push(ctx.helpers.plainBullet("Uptime", formatDuration(snapshot.uptimeSeconds)));
75
+ lines.push(` <uptime>${ctx.helpers.escapeXml(formatDuration(snapshot.uptimeSeconds))}</uptime>`);
101
76
  }
77
+ lines.push("</machine_status>");
102
78
  return lines.join("\n");
103
- },
104
- }),
105
- );
106
- }
107
-
108
- async function loadPiForgeRegistrationApi(): Promise<PiForgeRegistrationApi> {
109
- const override = process.env.PI_FORGE_MODULE;
110
- if (override) {
111
- return importPiForgeApi(pathToFileURL(resolve(override)).href);
112
- }
113
-
114
- try {
115
- return await importPiForgeApi("@zihanw/pi-forge");
116
- } catch {
117
- try {
118
- return await importPiForgeApi("../../src/index.ts");
119
- } catch (error) {
120
- const detail = error instanceof Error ? error.message : String(error);
121
- throw new Error(
122
- "Unable to load pi-forge registration API. Install @zihanw/pi-forge, " +
123
- "set PI_FORGE_MODULE=/absolute/path/to/pi-forge/src/index.ts, or run this example in place from the pi-forge checkout. " +
124
- `Last error: ${detail}`,
125
- );
126
- }
127
- }
128
- }
129
-
130
- async function importPiForgeApi(specifier: string): Promise<PiForgeRegistrationApi> {
131
- const mod = await import(specifier) as Partial<PiForgeRegistrationApi>;
132
- if (typeof mod.registerMacro !== "function" || typeof mod.registerSlot !== "function") {
133
- throw new Error(`Module does not export registerMacro/registerSlot: ${specifier}`);
134
- }
135
- return { registerMacro: mod.registerMacro, registerSlot: mod.registerSlot };
79
+ }
80
+
81
+ const lines = [
82
+ `${heading}:`,
83
+ ctx.helpers.plainBullet("CPU", `${snapshot.logicalCores} logical cores, ${snapshot.cpuModel}`),
84
+ ctx.helpers.plainBullet("CPU load", formatCpuLoad(snapshot)),
85
+ ctx.helpers.plainBullet("Load average", `${snapshot.load1.toFixed(2)} / ${snapshot.load5.toFixed(2)} / ${snapshot.load15.toFixed(2)} (1m/5m/15m)`),
86
+ ];
87
+ if (includeMemory) {
88
+ lines.push(ctx.helpers.plainBullet("Memory", `${snapshot.usedMemoryPercent.toFixed(1)}% used (${snapshot.freeMemoryMb} MB free / ${snapshot.totalMemoryMb} MB total)`));
89
+ }
90
+ if (includeUptime) {
91
+ lines.push(ctx.helpers.plainBullet("Uptime", formatDuration(snapshot.uptimeSeconds)));
92
+ }
93
+ return lines.join("\n");
94
+ },
95
+ });
136
96
  }
137
97
 
138
98
  function readSystemStatus(): SystemStatusSnapshot {
@@ -3,7 +3,7 @@
3
3
  "type": "pi-forge.prompt-stack",
4
4
  "id": "custom-system-status",
5
5
  "name": "Custom System Status",
6
- "description": "Example stack that uses a trusted custom macro and custom slot registered by examples/custom-system-status-extension/index.ts.",
6
+ "description": "Example stack that uses a trusted custom macro and custom slot registered from .pi/forge/extensions/system-status.ts.",
7
7
  "mode": "append",
8
8
  "items": [
9
9
  {
package/package.json CHANGED
@@ -1,7 +1,11 @@
1
1
  {
2
2
  "name": "@zihanw/pi-forge",
3
- "version": "0.3.1",
4
- "description": "Pi extension for prompt stack and agent profile management.",
3
+ "version": "0.4.0-beta.1",
4
+ "description": "Pi extension for prompt stacks, one-shot agent profiles, policy, import, and debugging.",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/MacroSony/pi-forge.git"
8
+ },
5
9
  "type": "module",
6
10
  "exports": {
7
11
  ".": {
@@ -9,6 +13,11 @@
9
13
  "import": "./dist/index.js",
10
14
  "default": "./dist/index.js"
11
15
  },
16
+ "./subagent": {
17
+ "types": "./dist/subagent/index.d.ts",
18
+ "import": "./dist/subagent/index.js",
19
+ "default": "./dist/subagent/index.js"
20
+ },
12
21
  "./src/*.ts": {
13
22
  "types": "./dist/*.d.ts",
14
23
  "import": "./dist/*.js",
@@ -29,18 +38,22 @@
29
38
  "keywords": [
30
39
  "pi-package",
31
40
  "pi-extension",
32
- "prompt-stack"
41
+ "prompt-stack",
42
+ "agent-profile"
33
43
  ],
34
44
  "license": "MIT",
45
+ "engines": {
46
+ "node": ">=22.19.0"
47
+ },
35
48
  "pi": {
36
49
  "extensions": [
37
50
  "./dist/index.js"
38
51
  ]
39
52
  },
40
53
  "peerDependencies": {
41
- "@earendil-works/pi-agent-core": "*",
42
- "@earendil-works/pi-ai": "*",
43
- "@earendil-works/pi-coding-agent": "*"
54
+ "@earendil-works/pi-agent-core": "0.80.10",
55
+ "@earendil-works/pi-ai": "0.80.10",
56
+ "@earendil-works/pi-coding-agent": "0.80.10"
44
57
  },
45
58
  "peerDependenciesMeta": {
46
59
  "@earendil-works/pi-agent-core": {
@@ -53,25 +66,40 @@
53
66
  "optional": true
54
67
  }
55
68
  },
69
+ "dependencies": {
70
+ "@earendil-works/pi-tui": "0.80.10",
71
+ "typebox": "^1.1.38"
72
+ },
56
73
  "devDependencies": {
57
- "@earendil-works/pi-agent-core": "*",
58
- "@earendil-works/pi-ai": "*",
59
- "@earendil-works/pi-coding-agent": "*",
60
- "@types/node": "latest",
61
- "typescript": "latest"
74
+ "@earendil-works/pi-agent-core": "0.80.10",
75
+ "@earendil-works/pi-ai": "0.80.10",
76
+ "@earendil-works/pi-coding-agent": "0.80.10",
77
+ "@types/node": "22.20.1",
78
+ "esbuild": "^0.28.1",
79
+ "playwright-core": "1.61.1",
80
+ "typescript": "6.0.3"
62
81
  },
63
82
  "scripts": {
64
- "build": "tsc -p tsconfig.build.json",
83
+ "build": "npm run build:client && tsc -p tsconfig.build.json",
84
+ "build:client": "node scripts/build-web-client.mjs",
85
+ "check:client": "node scripts/build-web-client.mjs --check",
86
+ "check:dist": "node scripts/check-dist.mjs",
87
+ "check:package": "node scripts/check-package.mjs",
65
88
  "prepack": "npm run build",
66
89
  "typecheck": "tsc --noEmit",
67
- "test": "node --test tests/*.test.ts"
90
+ "test": "node --test tests/*.test.ts",
91
+ "test:browser": "node --test tests-browser/*.test.ts",
92
+ "spike:subagent": "node scripts/subagent-sdk-spike.ts",
93
+ "verify": "npm test && npm run test:browser && npm run typecheck && npm run check:client && npm run check:dist && npm run check:package"
68
94
  },
69
95
  "files": [
70
96
  "dist/",
71
- "src/",
72
97
  "examples/",
73
98
  "README.md",
74
99
  "README.zh-CN.md",
100
+ "CHANGELOG.md",
101
+ "SUBAGENT_ADAPTER_CONTRACT.md",
102
+ "PUBLIC_API.md",
75
103
  "LICENSE*"
76
104
  ],
77
105
  "publishConfig": {