@zihanw/pi-forge 0.5.4 → 0.5.6

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 (237) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/README.md +67 -103
  3. package/README.zh-CN.md +67 -95
  4. package/assets/pi-forge-header-concept-1.png +0 -0
  5. package/assets/readme/PROVENANCE.md +95 -0
  6. package/assets/readme/en/capability-tools.gif +0 -0
  7. package/assets/readme/en/context-composition.gif +0 -0
  8. package/assets/readme/en/context-toggle.gif +0 -0
  9. package/assets/readme/en/draft-diff.png +0 -0
  10. package/assets/readme/en/edit-draft-diff.gif +0 -0
  11. package/assets/readme/en/editor-overview-v3.png +0 -0
  12. package/assets/readme/en/editor-overview.png +0 -0
  13. package/assets/readme/en/mode-tools.gif +0 -0
  14. package/assets/readme/en/regex-transforms.gif +0 -0
  15. package/assets/readme/en/tool-selection.gif +0 -0
  16. package/assets/readme/tui-quickstart.gif +0 -0
  17. package/assets/readme/zh-CN/capability-tools.gif +0 -0
  18. package/assets/readme/zh-CN/context-composition.gif +0 -0
  19. package/assets/readme/zh-CN/context-toggle.gif +0 -0
  20. package/assets/readme/zh-CN/draft-diff.png +0 -0
  21. package/assets/readme/zh-CN/edit-draft-diff.gif +0 -0
  22. package/assets/readme/zh-CN/editor-overview-v3.png +0 -0
  23. package/assets/readme/zh-CN/editor-overview.png +0 -0
  24. package/assets/readme/zh-CN/mode-tools.gif +0 -0
  25. package/assets/readme/zh-CN/regex-transforms.gif +0 -0
  26. package/assets/readme/zh-CN/tool-selection.gif +0 -0
  27. package/dist/active-state.d.ts +148 -0
  28. package/dist/active-state.d.ts.map +1 -0
  29. package/dist/active-state.js +374 -0
  30. package/dist/active-state.js.map +1 -0
  31. package/dist/agent-profile.d.ts +1 -0
  32. package/dist/agent-profile.d.ts.map +1 -1
  33. package/dist/agent-profile.js +20 -14
  34. package/dist/agent-profile.js.map +1 -1
  35. package/dist/capabilities.d.ts +39 -0
  36. package/dist/capabilities.d.ts.map +1 -0
  37. package/dist/capabilities.js +160 -0
  38. package/dist/capabilities.js.map +1 -0
  39. package/dist/capability-anchors.d.ts +45 -0
  40. package/dist/capability-anchors.d.ts.map +1 -0
  41. package/dist/capability-anchors.js +263 -0
  42. package/dist/capability-anchors.js.map +1 -0
  43. package/dist/capability-command.d.ts +4 -0
  44. package/dist/capability-command.d.ts.map +1 -0
  45. package/dist/capability-command.js +164 -0
  46. package/dist/capability-command.js.map +1 -0
  47. package/dist/capability-events.d.ts +79 -0
  48. package/dist/capability-events.d.ts.map +1 -0
  49. package/dist/capability-events.js +478 -0
  50. package/dist/capability-events.js.map +1 -0
  51. package/dist/capability-projection.d.ts +22 -0
  52. package/dist/capability-projection.d.ts.map +1 -0
  53. package/dist/capability-projection.js +273 -0
  54. package/dist/capability-projection.js.map +1 -0
  55. package/dist/capability-protocol.d.ts +21 -0
  56. package/dist/capability-protocol.d.ts.map +1 -0
  57. package/dist/capability-protocol.js +15 -0
  58. package/dist/capability-protocol.js.map +1 -0
  59. package/dist/capability-state.d.ts +74 -0
  60. package/dist/capability-state.d.ts.map +1 -0
  61. package/dist/capability-state.js +43 -0
  62. package/dist/capability-state.js.map +1 -0
  63. package/dist/capability-tool.d.ts +11 -0
  64. package/dist/capability-tool.d.ts.map +1 -0
  65. package/dist/capability-tool.js +25 -0
  66. package/dist/capability-tool.js.map +1 -0
  67. package/dist/capability-web-host.d.ts +11 -0
  68. package/dist/capability-web-host.d.ts.map +1 -0
  69. package/dist/capability-web-host.js +105 -0
  70. package/dist/capability-web-host.js.map +1 -0
  71. package/dist/codecs/capability.d.ts +71 -0
  72. package/dist/codecs/capability.d.ts.map +1 -0
  73. package/dist/codecs/capability.js +363 -0
  74. package/dist/codecs/capability.js.map +1 -0
  75. package/dist/codecs/prompt-stack.d.ts +1 -1
  76. package/dist/codecs/prompt-stack.d.ts.map +1 -1
  77. package/dist/codecs/prompt-stack.js +140 -13
  78. package/dist/codecs/prompt-stack.js.map +1 -1
  79. package/dist/command-contribution/index.d.ts +21 -0
  80. package/dist/command-contribution/index.d.ts.map +1 -0
  81. package/dist/command-contribution/index.js +14 -0
  82. package/dist/command-contribution/index.js.map +1 -0
  83. package/dist/compile-cycle.d.ts +1 -0
  84. package/dist/compile-cycle.d.ts.map +1 -1
  85. package/dist/compile-cycle.js.map +1 -1
  86. package/dist/compiler.d.ts.map +1 -1
  87. package/dist/compiler.js +81 -17
  88. package/dist/compiler.js.map +1 -1
  89. package/dist/forge-command.d.ts +10 -0
  90. package/dist/forge-command.d.ts.map +1 -0
  91. package/dist/forge-command.js +106 -0
  92. package/dist/forge-command.js.map +1 -0
  93. package/dist/index.d.ts +2 -2
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/index.js +58 -5
  96. package/dist/index.js.map +1 -1
  97. package/dist/json-fingerprint.d.ts +11 -0
  98. package/dist/json-fingerprint.d.ts.map +1 -0
  99. package/dist/json-fingerprint.js +66 -0
  100. package/dist/json-fingerprint.js.map +1 -0
  101. package/dist/lifecycle.d.ts +14 -0
  102. package/dist/lifecycle.d.ts.map +1 -1
  103. package/dist/lifecycle.js +167 -67
  104. package/dist/lifecycle.js.map +1 -1
  105. package/dist/payload-command.d.ts +2 -2
  106. package/dist/payload-command.d.ts.map +1 -1
  107. package/dist/payload-command.js +80 -26
  108. package/dist/payload-command.js.map +1 -1
  109. package/dist/payload-state.d.ts +1 -0
  110. package/dist/payload-state.d.ts.map +1 -1
  111. package/dist/payload-state.js +1 -0
  112. package/dist/payload-state.js.map +1 -1
  113. package/dist/policy.d.ts +2 -1
  114. package/dist/policy.d.ts.map +1 -1
  115. package/dist/policy.js +3 -0
  116. package/dist/policy.js.map +1 -1
  117. package/dist/preset-command.d.ts +1 -0
  118. package/dist/preset-command.d.ts.map +1 -1
  119. package/dist/preset-command.js +94 -36
  120. package/dist/preset-command.js.map +1 -1
  121. package/dist/preview-text.d.ts +5 -0
  122. package/dist/preview-text.d.ts.map +1 -0
  123. package/dist/preview-text.js +27 -0
  124. package/dist/preview-text.js.map +1 -0
  125. package/dist/preview.d.ts +18 -1
  126. package/dist/preview.d.ts.map +1 -1
  127. package/dist/preview.js +132 -97
  128. package/dist/preview.js.map +1 -1
  129. package/dist/profile-command.js +68 -9
  130. package/dist/profile-command.js.map +1 -1
  131. package/dist/regex.d.ts.map +1 -1
  132. package/dist/regex.js +5 -0
  133. package/dist/regex.js.map +1 -1
  134. package/dist/render-helpers.d.ts.map +1 -1
  135. package/dist/render-helpers.js +2 -0
  136. package/dist/render-helpers.js.map +1 -1
  137. package/dist/repositories/capability.d.ts +53 -0
  138. package/dist/repositories/capability.d.ts.map +1 -0
  139. package/dist/repositories/capability.js +294 -0
  140. package/dist/repositories/capability.js.map +1 -0
  141. package/dist/runtime/capability-runtime.d.ts +93 -0
  142. package/dist/runtime/capability-runtime.d.ts.map +1 -0
  143. package/dist/runtime/capability-runtime.js +987 -0
  144. package/dist/runtime/capability-runtime.js.map +1 -0
  145. package/dist/runtime/profile-runtime.d.ts.map +1 -1
  146. package/dist/runtime/profile-runtime.js +10 -9
  147. package/dist/runtime/profile-runtime.js.map +1 -1
  148. package/dist/runtime/prompt-stack-runtime.d.ts +7 -4
  149. package/dist/runtime/prompt-stack-runtime.d.ts.map +1 -1
  150. package/dist/runtime/prompt-stack-runtime.js +47 -11
  151. package/dist/runtime/prompt-stack-runtime.js.map +1 -1
  152. package/dist/runtime/tool-policy-runtime.d.ts +10 -0
  153. package/dist/runtime/tool-policy-runtime.d.ts.map +1 -1
  154. package/dist/runtime/tool-policy-runtime.js +171 -30
  155. package/dist/runtime/tool-policy-runtime.js.map +1 -1
  156. package/dist/session-adapter.d.ts +13 -0
  157. package/dist/session-adapter.d.ts.map +1 -1
  158. package/dist/session-adapter.js +110 -0
  159. package/dist/session-adapter.js.map +1 -1
  160. package/dist/session-usage.d.ts +65 -0
  161. package/dist/session-usage.d.ts.map +1 -0
  162. package/dist/session-usage.js +134 -0
  163. package/dist/session-usage.js.map +1 -0
  164. package/dist/subagent/fingerprints.d.ts +3 -15
  165. package/dist/subagent/fingerprints.d.ts.map +1 -1
  166. package/dist/subagent/fingerprints.js +5 -69
  167. package/dist/subagent/fingerprints.js.map +1 -1
  168. package/dist/subagent/index.d.ts +2 -0
  169. package/dist/subagent/index.d.ts.map +1 -1
  170. package/dist/subagent/index.js +2 -0
  171. package/dist/subagent/index.js.map +1 -1
  172. package/dist/subagent-host.d.ts +2 -2
  173. package/dist/subagent-host.d.ts.map +1 -1
  174. package/dist/subagent-host.js +13 -1
  175. package/dist/subagent-host.js.map +1 -1
  176. package/dist/types.d.ts +6 -1
  177. package/dist/types.d.ts.map +1 -1
  178. package/dist/types.js.map +1 -1
  179. package/dist/web-editor/client-script.generated.d.ts.map +1 -1
  180. package/dist/web-editor/client-script.generated.js +1 -1
  181. package/dist/web-editor/client-script.generated.js.map +1 -1
  182. package/dist/web-editor/client-styles.generated.d.ts.map +1 -1
  183. package/dist/web-editor/client-styles.generated.js +1 -1
  184. package/dist/web-editor/client-styles.generated.js.map +1 -1
  185. package/dist/web-editor/server.d.ts.map +1 -1
  186. package/dist/web-editor/server.js +152 -4
  187. package/dist/web-editor/server.js.map +1 -1
  188. package/dist/web-editor/styles.d.ts.map +1 -1
  189. package/dist/web-editor/styles.js +573 -165
  190. package/dist/web-editor/styles.js.map +1 -1
  191. package/dist/web-editor/types.d.ts +81 -1
  192. package/dist/web-editor/types.d.ts.map +1 -1
  193. package/dist/web-host.d.ts +9 -0
  194. package/dist/web-host.d.ts.map +1 -1
  195. package/dist/web-host.js +210 -11
  196. package/dist/web-host.js.map +1 -1
  197. package/dist/workspace.d.ts +11 -0
  198. package/dist/workspace.d.ts.map +1 -1
  199. package/dist/workspace.js +63 -5
  200. package/dist/workspace.js.map +1 -1
  201. package/docs/README.md +4 -0
  202. package/docs/design/README.md +3 -1
  203. package/docs/design/architecture-0.5.md +22 -0
  204. package/docs/design/archive/2026-09-12-system-update-design.md +229 -0
  205. package/docs/design/pi-forge-system-update-design-notes.md +157 -229
  206. package/docs/development/release.md +20 -20
  207. package/docs/development/roadmap.md +21 -2
  208. package/docs/development/scoped-global-profiles-stacks.md +1 -1
  209. package/docs/development/setup.md +1 -1
  210. package/docs/getting-started.md +1 -1
  211. package/docs/guides/delegation.md +22 -20
  212. package/docs/guides/migrating-to-0.5.md +29 -0
  213. package/docs/guides/use-cases.md +6 -2
  214. package/docs/guides/web-editor.md +74 -5
  215. package/docs/reference/active-state.md +77 -0
  216. package/docs/reference/capabilities.md +259 -0
  217. package/docs/reference/commands.md +52 -24
  218. package/docs/reference/configuration.md +4 -2
  219. package/docs/reference/features.md +70 -4
  220. package/docs/reference/provider-support.md +67 -0
  221. package/docs/reference/public-api.md +49 -3
  222. package/docs/reference/session-cache.md +112 -0
  223. package/docs/reference/stack-schema.md +18 -4
  224. package/docs/reference/subagent-host-port.md +8 -0
  225. package/docs/zh-CN/README.md +3 -0
  226. package/docs/zh-CN/getting-started.md +1 -1
  227. package/docs/zh-CN/guides/delegation.md +22 -10
  228. package/docs/zh-CN/guides/migrating-to-0.5.md +29 -0
  229. package/docs/zh-CN/guides/web-editor.md +75 -7
  230. package/docs/zh-CN/reference/capabilities.md +259 -0
  231. package/docs/zh-CN/reference/commands.md +61 -33
  232. package/docs/zh-CN/reference/provider-support.md +67 -0
  233. package/docs/zh-CN/reference/session-cache.md +112 -0
  234. package/examples/capabilities/review.json +12 -0
  235. package/examples/capabilities/write-tools.json +15 -0
  236. package/examples/read-first-worker-prompt-stack.json +49 -0
  237. package/package.json +16 -9
@@ -1 +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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAszCtC,CAAC"}
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8sDtC,CAAC"}
@@ -1,8 +1,11 @@
1
+ import type { Capability, Diagnostic } from "../codecs/capability.ts";
1
2
  import type { AgentProfile, AgentProfileDiagnostic } from "../agent-profile.ts";
2
3
  import type { AgentProfilePreview, AgentProfileRuntimeStatus } from "../profile-service.ts";
3
4
  import type { UiContributionTransport } from "../ui-contribution/contrib-port.ts";
4
5
  import type { ContextDiffView } from "../context-diff-history.ts";
6
+ import type { CapabilityAvailableResult, CapabilityStateResult, CapabilityStateView } from "../capability-state.ts";
5
7
  import type { PromptStack, PromptStackDiagnostic } from "../types.ts";
8
+ import type { LoadedCapability } from "../codecs/capability.ts";
6
9
  export interface WebEditorStackSummary {
7
10
  id: string;
8
11
  selector: string;
@@ -18,8 +21,22 @@ export interface WebEditorStackSummary {
18
21
  diagnostics: PromptStackDiagnostic[];
19
22
  }
20
23
  export type WebEditorLocale = "en" | "zh-CN" | "auto";
24
+ export type WebEditorCapabilityOperation = "list" | "get" | "create" | "save" | "delete" | "effective";
25
+ export interface WebEditorCapabilityMutation {
26
+ changed: string;
27
+ sourceRevision?: string;
28
+ }
29
+ export type WebEditorCapabilityResult = WebEditorOperationResult<WebEditorCapabilityCollection | WebEditorCapabilityEntry | WebEditorEffectiveCapabilityCollection | WebEditorCapabilityMutation>;
21
30
  export interface WebEditorHost {
31
+ capabilityOperation?(action: WebEditorCapabilityOperation, selector?: string, input?: unknown): WebEditorCapabilityResult;
22
32
  cwd: string;
33
+ isProjectTrusted?(): boolean;
34
+ readCapabilities?(): readonly LoadedCapability[];
35
+ readCapabilityState?(): CapabilityStateResult;
36
+ readCapabilityChoices?(): CapabilityAvailableResult;
37
+ mutateCapabilityState?(input: unknown): CapabilityStateResult;
38
+ enableCapability?(input: unknown): CapabilityStateResult;
39
+ previewCapabilities?(): WebEditorOperationResult<WebEditorSessionPreview>;
23
40
  getEditorConfig(): {
24
41
  locale: WebEditorLocale;
25
42
  };
@@ -39,14 +56,18 @@ export interface WebEditorHost {
39
56
  stack: PromptStack;
40
57
  filePath: string;
41
58
  diagnostics: PromptStackDiagnostic[];
59
+ sourceRevision: string;
60
+ selector?: string;
61
+ scope?: "global" | "project";
42
62
  } | undefined;
43
63
  createStack(stack: PromptStack, options: WebEditorCreateStackOptions): Promise<WebEditorOperationResult<{
44
64
  stack: WebEditorStackSummary;
45
65
  stacks: WebEditorStackSummary[];
46
66
  }>>;
47
- saveStack(id: string, stack: PromptStack): Promise<WebEditorOperationResult<{
67
+ saveStack(id: string, stack: PromptStack, expectedSourceRevision?: string): Promise<WebEditorOperationResult<{
48
68
  stack: WebEditorStackSummary;
49
69
  stacks: WebEditorStackSummary[];
70
+ sourceRevision: string;
50
71
  }>>;
51
72
  deleteStack(id: string): Promise<WebEditorOperationResult<{
52
73
  activeId?: string;
@@ -75,6 +96,28 @@ export interface WebEditorHost {
75
96
  stacks: WebEditorStackSummary[];
76
97
  }>>;
77
98
  }
99
+ export interface WebEditorCapabilityEntry {
100
+ selector: string;
101
+ scope: "global" | "project";
102
+ filePath: string;
103
+ capability: Capability;
104
+ sourceRevision: string;
105
+ diagnostics: Diagnostic[];
106
+ }
107
+ export interface WebEditorCapabilityCollection {
108
+ trusted: boolean;
109
+ capabilities: WebEditorCapabilityEntry[];
110
+ }
111
+ export interface WebEditorEffectiveCapabilityBinding {
112
+ id: string;
113
+ ref: string;
114
+ modelCallable: boolean;
115
+ source: Capability;
116
+ effective: Capability;
117
+ }
118
+ export interface WebEditorEffectiveCapabilityCollection {
119
+ bindings: WebEditorEffectiveCapabilityBinding[];
120
+ }
78
121
  export interface WebEditorProfileEntry {
79
122
  profile: AgentProfile;
80
123
  filePath: string;
@@ -120,7 +163,26 @@ export interface WebEditorPreviewSection {
120
163
  diffKey?: string;
121
164
  title: string;
122
165
  role?: string;
166
+ /** Message body only; structural fields are never synthesized into prose. */
123
167
  content: string;
168
+ /** Native named System sections, including explicit removals (null). */
169
+ sections?: Record<string, string | null>;
170
+ /** Read-only instruction projection metadata; not prompt prose or executable state. */
171
+ capabilityUpdate?: {
172
+ activationIds: string[];
173
+ kind: "anchor" | "pending" | "checkpoint";
174
+ throughEventId: string;
175
+ };
176
+ /** Recorded transcript declarations, NOT current executable tool selection. */
177
+ toolChanges?: {
178
+ added: Array<{
179
+ name: string;
180
+ description?: string;
181
+ parameters?: unknown;
182
+ }>;
183
+ removed: string[];
184
+ };
185
+ /** Text-only counts: body plus named section values, excluding tool schemas. */
124
186
  chars: number;
125
187
  approxTokens: number;
126
188
  }
@@ -129,9 +191,21 @@ export interface WebEditorPreview {
129
191
  generatedAt: string;
130
192
  system: WebEditorPreviewSection;
131
193
  messages: WebEditorPreviewSection[];
194
+ /** Evaluated draft policy + current instruction overlays, not historical declarations. */
195
+ selectedTools?: string[];
132
196
  totalChars: number;
133
197
  approxTokens: number;
134
198
  }
199
+ export interface WebEditorSessionPreview {
200
+ state: CapabilityStateView;
201
+ preset: {
202
+ selector: string;
203
+ name?: string;
204
+ };
205
+ text: string;
206
+ preview: WebEditorPreview;
207
+ diagnostics: PromptStackDiagnostic[];
208
+ }
135
209
  export interface WebEditorPayloadCapture {
136
210
  capturedAt: string;
137
211
  stackId?: string;
@@ -163,6 +237,12 @@ export interface WebEditorPolicyResource {
163
237
  name: string;
164
238
  description?: string;
165
239
  source?: string;
240
+ group?: {
241
+ id: string;
242
+ label: string;
243
+ };
244
+ /** Restorable session baseline before Preset/capability selection, for default seeding. */
245
+ baselineActive?: boolean;
166
246
  active?: boolean;
167
247
  hidden?: boolean;
168
248
  }
@@ -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,15 +1,20 @@
1
+ import type { LoadedCapability } from "./codecs/capability.ts";
1
2
  import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
2
3
  import { type AgentProfileProvenance, type LoadedAgentProfile, type ResolvedAgentProfile } from "./agent-profile.ts";
3
4
  import { type AgentProfileApplicationResult, type AgentProfileCurrentRuntime } from "./profile-service.ts";
5
+ import { type CapabilityAvailableResult, type CapabilityStateResult } from "./capability-state.ts";
4
6
  import type { ContextDiffView } from "./context-diff-history.ts";
5
7
  import type { LoadedPromptStack, PromptStack, PromptStackDiagnostic } from "./types.ts";
6
8
  import type { WebEditorLocale, WebEditorHost, WebEditorOperationResult, WebEditorPayloadSnapshot, WebEditorPolicyResources, WebEditorPreview, WebEditorStackSummary } from "./web-editor/index.ts";
7
9
  export interface WebHostRuntime {
10
+ readCapabilities?(): readonly LoadedCapability[];
8
11
  getStacks(): LoadedPromptStack[];
9
12
  getActive(): LoadedPromptStack | undefined;
10
13
  getActiveId(): string | undefined;
11
14
  getSelectedActiveId(): string | undefined;
12
15
  setActive(id: string | undefined): boolean;
16
+ lastActivationError?(): string | undefined;
17
+ validatePresetSwitch?(target: LoadedPromptStack): string | undefined;
13
18
  reloadStacks(preferredId?: string): Promise<void>;
14
19
  buildPreview(target: LoadedPromptStack): {
15
20
  text: string;
@@ -29,6 +34,10 @@ export interface WebHostRuntime {
29
34
  armPayload(savePath?: string): WebEditorOperationResult<WebEditorPayloadSnapshot>;
30
35
  clearPayload(): WebEditorOperationResult<WebEditorPayloadSnapshot>;
31
36
  getContextDiff(): WebEditorOperationResult<ContextDiffView>;
37
+ readCapabilityState?(): CapabilityStateResult;
38
+ readCapabilityChoices?(): CapabilityAvailableResult;
39
+ mutateCapabilityState?(input: unknown): CapabilityStateResult;
40
+ enableCapability?(input: unknown): CapabilityStateResult;
32
41
  }
33
42
  export declare function createWebEditorHost(ctx: ExtensionContext, runtime: WebHostRuntime): WebEditorHost;
34
43
  export declare function stackSummary(loaded: LoadedPromptStack, active: LoadedPromptStack | undefined): WebEditorStackSummary;
@@ -1 +1 @@
1
- {"version":3,"file":"web-host.d.ts","sourceRoot":"","sources":["../src/web-host.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-host.d.ts","sourceRoot":"","sources":["../src/web-host.ts"],"names":[],"mappings":"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"}
package/dist/web-host.js CHANGED
@@ -1,4 +1,6 @@
1
- import { randomUUID } from "node:crypto";
1
+ import { parsePromptStack, serializePromptStack } from "./codecs/prompt-stack.js";
2
+ import { capabilityOperation } from "./capability-web-host.js";
3
+ import { createHash, randomUUID } from "node:crypto";
2
4
  import { closeSync, existsSync, fsyncSync, mkdirSync, openSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
3
5
  import { basename, dirname, join } from "node:path";
4
6
  import { agentProfilePath, agentProfilesDir, isResolvedAgentProfileUsable, validateAgentProfile, validateAgentProfilePromptStackScope, } from "./agent-profile.js";
@@ -10,9 +12,99 @@ import { formatResourceKey, parseResourceSelector } from "./resource-identity.js
10
12
  import { getRegisteredSlots } from "./slot-renderers.js";
11
13
  import { resolveResourceSelector } from "./catalog.js";
12
14
  import { createAgentProfilePreview, deleteAgentProfile, getAgentProfileRuntimeStatus, writeAgentProfile, } from "./profile-service.js";
15
+ import { isCapabilityStateMutation, isCapabilityEnableRequest, } from "./capability-state.js";
13
16
  export function createWebEditorHost(ctx, runtime) {
14
17
  return {
15
18
  cwd: ctx.cwd,
19
+ capabilityOperation: (action, selector, input) => capabilityOperation(ctx, runtime, action, selector, input),
20
+ isProjectTrusted: () => ctx.isProjectTrusted(),
21
+ readCapabilityState: () => {
22
+ if (!runtime.readCapabilityState) {
23
+ return { ok: false, status: 503, error: "Capability runtime is unavailable." };
24
+ }
25
+ return runtime.readCapabilityState();
26
+ },
27
+ previewCapabilities: () => {
28
+ if (!runtime.readCapabilityState) {
29
+ return { ok: false, status: 503, error: "Capability runtime is unavailable." };
30
+ }
31
+ try {
32
+ const initial = runtime.readCapabilityState();
33
+ if (!initial.ok)
34
+ return initial;
35
+ if (!initial.state.trusted)
36
+ return { ok: false, status: 403, error: "Project is not trusted." };
37
+ if (initial.state.restoring)
38
+ return { ok: false, status: 503, error: "Capability session is restoring." };
39
+ if (!capabilityGuardMatchesContext(ctx, initial.state.guard)) {
40
+ return { ok: false, status: 409, error: "Session or branch changed. Refresh and review." };
41
+ }
42
+ const target = runtime.getActive();
43
+ if (!target)
44
+ return { ok: false, status: 409, error: "No active preset is selected for capability preview." };
45
+ const built = runtime.buildPreview(target);
46
+ const final = runtime.readCapabilityState();
47
+ if (!final.ok)
48
+ return final;
49
+ if (!sameCapabilityGuard(initial.state.guard, final.state.guard)
50
+ || initial.state.presetRevision !== final.state.presetRevision
51
+ || !capabilityGuardMatchesContext(ctx, final.state.guard)
52
+ || runtime.getActive() !== target) {
53
+ return { ok: false, status: 409, error: "Session, branch, capability state, or active preset changed during preview. Refresh and review." };
54
+ }
55
+ return {
56
+ ok: true,
57
+ state: final.state,
58
+ preset: {
59
+ selector: formatResourceKey(target.key),
60
+ ...(target.stack.name === undefined ? {} : { name: target.stack.name }),
61
+ },
62
+ text: built.text,
63
+ preview: built.preview,
64
+ diagnostics: built.diagnostics,
65
+ };
66
+ }
67
+ catch (error) {
68
+ return { ok: false, status: 503, error: `Capability preview unavailable: ${error instanceof Error ? error.message : String(error)}` };
69
+ }
70
+ },
71
+ readCapabilityChoices: () => {
72
+ if (!runtime.readCapabilityChoices) {
73
+ return { ok: false, status: 503, error: "Capability runtime is unavailable." };
74
+ }
75
+ return runtime.readCapabilityChoices();
76
+ },
77
+ mutateCapabilityState: (input) => {
78
+ try {
79
+ if (!ctx.isProjectTrusted()) {
80
+ return { ok: false, status: 403, error: "Project is not trusted; refusing to mutate capabilities." };
81
+ }
82
+ }
83
+ catch {
84
+ return { ok: false, status: 503, error: "Capability session is unavailable." };
85
+ }
86
+ if (!runtime.mutateCapabilityState) {
87
+ return { ok: false, status: 503, error: "Capability runtime is unavailable." };
88
+ }
89
+ if (!isCapabilityStateMutation(input)) {
90
+ return { ok: false, status: 400, error: "Invalid capability state mutation payload." };
91
+ }
92
+ return runtime.mutateCapabilityState(input);
93
+ },
94
+ enableCapability: (input) => {
95
+ try {
96
+ if (!ctx.isProjectTrusted())
97
+ return { ok: false, status: 403, error: "Project is not trusted; refusing to activate capabilities." };
98
+ }
99
+ catch {
100
+ return { ok: false, status: 503, error: "Capability session is unavailable." };
101
+ }
102
+ if (!runtime.enableCapability)
103
+ return { ok: false, status: 503, error: "Capability runtime is unavailable." };
104
+ if (!isCapabilityEnableRequest(input))
105
+ return { ok: false, status: 400, error: "Invalid capability activation payload." };
106
+ return runtime.enableCapability(input);
107
+ },
16
108
  getEditorConfig: () => ({ locale: loadWebEditorSettings(ctx).locale ?? "auto" }),
17
109
  setEditorLocale: (locale) => saveWebEditorLocale(ctx, locale),
18
110
  listStacks: () => stackSummaries(runtime.getStacks(), runtime.getActive()),
@@ -29,10 +121,18 @@ export function createWebEditorHost(ctx, runtime) {
29
121
  listResources: () => editorResources(runtime.getPolicyResources()),
30
122
  getStack: (selector) => {
31
123
  const loaded = resolveStack(runtime, selector);
32
- return loaded ? { stack: loaded.stack, filePath: loaded.filePath, diagnostics: loaded.diagnostics } : undefined;
124
+ if (!loaded)
125
+ return undefined;
126
+ // The revision and editable definition must describe the SAME bytes,
127
+ // not cached authorization paired with a newly-read hash.
128
+ const source = readFileSync(loaded.filePath);
129
+ const fresh = parsePromptStack(source.toString("utf8"), loaded.filePath, loaded.scope);
130
+ return { stack: fresh.stack, filePath: loaded.filePath, diagnostics: fresh.diagnostics,
131
+ selector: formatResourceKey(loaded.key), scope: loaded.scope,
132
+ sourceRevision: createHash("sha256").update(source).digest("hex") };
33
133
  },
34
134
  createStack: (stack, options) => createStackFile(ctx, runtime, stack, options),
35
- saveStack: (id, stack) => saveStackFile(ctx, runtime, id, stack),
135
+ saveStack: (id, stack, expectedSourceRevision) => saveStackFile(ctx, runtime, id, stack, expectedSourceRevision),
36
136
  deleteStack: (id) => deleteStackFile(ctx, runtime, id),
37
137
  validateStack: (stack) => validatePromptStack(stack),
38
138
  previewStack: (id, stack) => {
@@ -48,12 +148,19 @@ export function createWebEditorHost(ctx, runtime) {
48
148
  clearPayload: () => runtime.clearPayload(),
49
149
  getContextDiff: () => runtime.getContextDiff(),
50
150
  activateStack: (selector) => {
51
- if (!runtime.setActive(selector))
52
- return { ok: false, status: 404, error: `Unknown preset: ${selector}` };
151
+ if (!runtime.setActive(selector)) {
152
+ const error = runtime.lastActivationError?.() ?? `Unknown preset: ${selector}`;
153
+ const status = !ctx.isProjectTrusted() ? 403 : resolveStack(runtime, selector) ? 409 : 404;
154
+ return { ok: false, status, error };
155
+ }
53
156
  return { ok: true, activeId: runtime.getActiveId(), stacks: stackSummaries(runtime.getStacks(), runtime.getActive()) };
54
157
  },
55
158
  disableStacks: () => {
56
- runtime.setActive("none");
159
+ if (!runtime.setActive("none")) {
160
+ const error = runtime.lastActivationError?.() ?? "Failed to disable preset";
161
+ const status = !ctx.isProjectTrusted() ? 403 : 409;
162
+ return { ok: false, status, error };
163
+ }
57
164
  return { ok: true, activeId: runtime.getActiveId(), stacks: stackSummaries(runtime.getStacks(), runtime.getActive()) };
58
165
  },
59
166
  reloadStacks: async () => {
@@ -307,6 +414,13 @@ function profileWriteError(id, result) {
307
414
  function modelKey(provider, id) {
308
415
  return `${provider}\0${id}`;
309
416
  }
417
+ function sameCapabilityGuard(a, b) {
418
+ return a.sessionId === b.sessionId && a.leafId === b.leafId && a.revision === b.revision;
419
+ }
420
+ function capabilityGuardMatchesContext(ctx, guard) {
421
+ return ctx.sessionManager.getSessionId() === guard.sessionId
422
+ && ctx.sessionManager.getLeafId() === guard.leafId;
423
+ }
310
424
  function resolveStack(runtime, selector) {
311
425
  const parsed = parseResourceSelector(selector);
312
426
  if (!parsed.ok)
@@ -436,7 +550,23 @@ function writeTextFileAtomically(filePath, content) {
436
550
  throw error;
437
551
  }
438
552
  }
439
- async function saveStackFile(ctx, runtime, id, stack) {
553
+ /** Saving the active resource changes live policy just like selecting it. */
554
+ function activePresetWriteConflict(runtime, target, stack) {
555
+ const active = runtime.getActive();
556
+ if (!active || formatResourceKey(active.key) !== formatResourceKey(target.key))
557
+ return undefined;
558
+ try {
559
+ // Validate the same normalized policy that reload will consume, but keep
560
+ // the original authored object for the existing lossless write path.
561
+ const prospective = parsePromptStack(serializePromptStack(stack), target.filePath, target.scope);
562
+ const error = runtime.validatePresetSwitch?.(prospective);
563
+ return error ? `Cannot save active preset "${stack.id}": ${error} Disable conflicting capabilities before saving.` : undefined;
564
+ }
565
+ catch (error) {
566
+ return error instanceof Error ? error.message : String(error);
567
+ }
568
+ }
569
+ async function saveStackFile(ctx, runtime, id, stack, expectedSourceRevision) {
440
570
  if (!ctx.isProjectTrusted()) {
441
571
  return { ok: false, status: 403, error: "Project is not trusted; refusing to save presets." };
442
572
  }
@@ -449,24 +579,62 @@ async function saveStackFile(ctx, runtime, id, stack) {
449
579
  if (stack.id !== target.stack.id) {
450
580
  return { ok: false, status: 400, error: "Preset id is immutable during save; fork the preset to create a new id." };
451
581
  }
582
+ // Binding-bearing stacks use a stale-view check because their authorization
583
+ // can be revoked outside this editor. Keep the check immediately adjacent to
584
+ // the synchronous write; this is deliberately not a cross-process CAS.
585
+ if (hasRejectedLegacyPromptStackKey(stack)) {
586
+ return { ok: false, status: 400, error: rejectedLegacyPromptStackMessage() };
587
+ }
588
+ let diskHasBindings = false;
589
+ try {
590
+ const diskStack = JSON.parse(readFileSync(target.filePath, "utf8"));
591
+ if (hasRejectedLegacyPromptStackKey(diskStack)) {
592
+ return { ok: false, status: 409, error: rejectedLegacyPromptStackMessage() };
593
+ }
594
+ diskHasBindings = isPlainObject(diskStack) && diskStack.capabilities !== undefined;
595
+ }
596
+ catch {
597
+ return { ok: false, status: 409, error: "Preset source unavailable or malformed; reload before saving." };
598
+ }
599
+ const requiresSourceRevision = diskHasBindings || target.stack.capabilities !== undefined || stack.capabilities !== undefined;
600
+ if (expectedSourceRevision !== undefined || requiresSourceRevision) {
601
+ let currentSourceRevision;
602
+ try {
603
+ currentSourceRevision = promptStackSourceRevision(target.filePath);
604
+ }
605
+ catch {
606
+ return { ok: false, status: 409, error: "Preset source changed and could not be verified; reload before saving." };
607
+ }
608
+ if (expectedSourceRevision === undefined || expectedSourceRevision !== currentSourceRevision) {
609
+ return { ok: false, status: 409, error: "Preset source changed; reload before saving to avoid overwriting capability bindings." };
610
+ }
611
+ }
612
+ const policyConflict = activePresetWriteConflict(runtime, target, stack);
613
+ if (policyConflict)
614
+ return { ok: false, status: 409, error: policyConflict };
452
615
  const write = writePromptStackFile(ctx.cwd, target.scope, target.filePath, stack, { overwrite: true });
453
616
  if (!write.ok) {
454
617
  // With overwrite: true the repository can fail on containment (403) or I/O (500).
455
618
  const status = stackMutationStatus(write.reason);
456
619
  return { ok: false, status, error: write.error };
457
620
  }
621
+ // Receipt for precisely this write, not a later read after the asynchronous reload.
622
+ const sourceRevision = createHash("sha256").update(serializePromptStack(stack)).digest("hex");
458
623
  const preferredId = runtime.getActive() === target ? formatResourceKey(target.key) : runtime.getSelectedActiveId();
459
624
  await runtime.reloadStacks(preferredId);
460
625
  const saved = runtime.getStacks().find((candidate) => candidate.scope === target.scope && candidate.stack.id === target.stack.id)
461
626
  ?? runtime.getStacks().find((candidate) => candidate.filePath === target.filePath);
462
627
  if (!saved)
463
628
  return { ok: false, status: 500, error: "Saved preset could not be reloaded." };
464
- return { ok: true, stack: stackSummary(saved, runtime.getActive()), stacks: stackSummaries(runtime.getStacks(), runtime.getActive()) };
629
+ return { ok: true, stack: stackSummary(saved, runtime.getActive()), stacks: stackSummaries(runtime.getStacks(), runtime.getActive()), sourceRevision };
465
630
  }
466
631
  async function createStackFile(ctx, runtime, stack, options) {
467
632
  if (!ctx.isProjectTrusted()) {
468
633
  return { ok: false, status: 403, error: "Project is not trusted; refusing to create presets." };
469
634
  }
635
+ if (hasRejectedLegacyPromptStackKey(stack)) {
636
+ return { ok: false, status: 400, error: rejectedLegacyPromptStackMessage() };
637
+ }
470
638
  const idError = validateWebStackId(stack.id);
471
639
  if (idError)
472
640
  return { ok: false, status: 400, error: idError };
@@ -478,6 +646,23 @@ async function createStackFile(ctx, runtime, stack, options) {
478
646
  const targetPath = existingById && options.overwrite
479
647
  ? existingById.filePath
480
648
  : promptStackTargetPath(ctx.cwd, scope, stack.id);
649
+ // Check the current raw source, not cached diagnostics: normalization intentionally
650
+ // omits rejected legacy fields, and external edits may postdate the catalog.
651
+ if (options.overwrite && existsSync(targetPath)) {
652
+ try {
653
+ if (hasRejectedLegacyPromptStackKey(JSON.parse(readFileSync(targetPath, "utf8")))) {
654
+ return { ok: false, status: 409, error: rejectedLegacyPromptStackMessage() };
655
+ }
656
+ }
657
+ catch {
658
+ return { ok: false, status: 409, error: "Preset source unavailable or malformed; reload before overwriting." };
659
+ }
660
+ }
661
+ if (existingById && options.overwrite) {
662
+ const policyConflict = activePresetWriteConflict(runtime, existingById, stack);
663
+ if (policyConflict)
664
+ return { ok: false, status: 409, error: policyConflict };
665
+ }
481
666
  const write = writePromptStackFile(ctx.cwd, scope, targetPath, stack, { overwrite: options.overwrite ?? false });
482
667
  if (!write.ok) {
483
668
  const status = stackMutationStatus(write.reason);
@@ -485,9 +670,14 @@ async function createStackFile(ctx, runtime, stack, options) {
485
670
  }
486
671
  const previousSelection = runtime.getSelectedActiveId();
487
672
  const createdSelector = formatResourceKey({ scope, id: stack.id });
488
- await runtime.reloadStacks(options.activate ? createdSelector : (previousSelection ?? "none"));
489
- if (options.activate)
490
- runtime.setActive(createdSelector);
673
+ // Discover the new file without selecting it before activation preflight.
674
+ await runtime.reloadStacks(previousSelection ?? "none");
675
+ if (options.activate) {
676
+ if (!runtime.setActive(createdSelector)) {
677
+ const error = `Preset "${createdSelector}" was created, but activation failed: ${runtime.lastActivationError?.() ?? "Could not activate created preset."}`;
678
+ return { ok: false, status: 409, error };
679
+ }
680
+ }
491
681
  const created = runtime.getStacks().find((candidate) => candidate.scope === scope && candidate.filePath === targetPath);
492
682
  if (!created)
493
683
  return { ok: false, status: 500, error: "Created preset could not be reloaded." };
@@ -528,6 +718,9 @@ export function stackMutationStatus(reason) {
528
718
  return 500;
529
719
  }
530
720
  }
721
+ function promptStackSourceRevision(filePath) {
722
+ return createHash("sha256").update(readFileSync(filePath)).digest("hex");
723
+ }
531
724
  function validateWebStackId(id) {
532
725
  if (!id.trim())
533
726
  return "Preset id must not be empty.";
@@ -536,6 +729,12 @@ function validateWebStackId(id) {
536
729
  }
537
730
  return undefined;
538
731
  }
732
+ function hasRejectedLegacyPromptStackKey(value) {
733
+ return isPlainObject(value) && Object.prototype.hasOwnProperty.call(value, "instructionModes");
734
+ }
735
+ function rejectedLegacyPromptStackMessage() {
736
+ return 'Preset key "instructionModes" is no longer supported; convert it to "capabilities" before saving.';
737
+ }
539
738
  function isPlainObject(value) {
540
739
  return !!value && typeof value === "object" && !Array.isArray(value);
541
740
  }