@zihanw/pi-forge 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/README.md +6 -2
  3. package/README.zh-CN.md +5 -2
  4. package/dist/codecs/prompt-stack.d.ts.map +1 -1
  5. package/dist/codecs/prompt-stack.js +17 -0
  6. package/dist/codecs/prompt-stack.js.map +1 -1
  7. package/dist/compiler.d.ts.map +1 -1
  8. package/dist/compiler.js +81 -0
  9. package/dist/compiler.js.map +1 -1
  10. package/dist/context-diff-history.d.ts +61 -0
  11. package/dist/context-diff-history.d.ts.map +1 -0
  12. package/dist/context-diff-history.js +84 -0
  13. package/dist/context-diff-history.js.map +1 -0
  14. package/dist/context-diff-snapshot.d.ts +19 -0
  15. package/dist/context-diff-snapshot.d.ts.map +1 -0
  16. package/dist/context-diff-snapshot.js +146 -0
  17. package/dist/context-diff-snapshot.js.map +1 -0
  18. package/dist/context-diff.d.ts +70 -0
  19. package/dist/context-diff.d.ts.map +1 -0
  20. package/dist/context-diff.js +259 -0
  21. package/dist/context-diff.js.map +1 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +5 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/lifecycle.d.ts +2 -0
  26. package/dist/lifecycle.d.ts.map +1 -1
  27. package/dist/lifecycle.js +19 -2
  28. package/dist/lifecycle.js.map +1 -1
  29. package/dist/payload-capture.d.ts +10 -0
  30. package/dist/payload-capture.d.ts.map +1 -1
  31. package/dist/payload-capture.js +39 -9
  32. package/dist/payload-capture.js.map +1 -1
  33. package/dist/payload-command.d.ts +2 -0
  34. package/dist/payload-command.d.ts.map +1 -1
  35. package/dist/payload-command.js +36 -6
  36. package/dist/payload-command.js.map +1 -1
  37. package/dist/payload-state.d.ts +3 -0
  38. package/dist/payload-state.d.ts.map +1 -1
  39. package/dist/payload-state.js +5 -0
  40. package/dist/payload-state.js.map +1 -1
  41. package/dist/preview.d.ts.map +1 -1
  42. package/dist/preview.js +43 -9
  43. package/dist/preview.js.map +1 -1
  44. package/dist/regex.d.ts +12 -0
  45. package/dist/regex.d.ts.map +1 -1
  46. package/dist/regex.js +81 -5
  47. package/dist/regex.js.map +1 -1
  48. package/dist/runtime/tool-policy-runtime.d.ts.map +1 -1
  49. package/dist/runtime/tool-policy-runtime.js +13 -3
  50. package/dist/runtime/tool-policy-runtime.js.map +1 -1
  51. package/dist/runtime/web-editor-runtime.d.ts +2 -1
  52. package/dist/runtime/web-editor-runtime.d.ts.map +1 -1
  53. package/dist/runtime/web-editor-runtime.js +8 -3
  54. package/dist/runtime/web-editor-runtime.js.map +1 -1
  55. package/dist/types.d.ts +17 -0
  56. package/dist/types.d.ts.map +1 -1
  57. package/dist/types.js.map +1 -1
  58. package/dist/ui-contribution/contrib-port.d.ts +170 -0
  59. package/dist/ui-contribution/contrib-port.d.ts.map +1 -0
  60. package/dist/ui-contribution/contrib-port.js +640 -0
  61. package/dist/ui-contribution/contrib-port.js.map +1 -0
  62. package/dist/ui-contribution/index.d.ts +3 -0
  63. package/dist/ui-contribution/index.d.ts.map +1 -0
  64. package/dist/ui-contribution/index.js +2 -0
  65. package/dist/ui-contribution/index.js.map +1 -0
  66. package/dist/web-editor/client-script.generated.d.ts.map +1 -1
  67. package/dist/web-editor/client-script.generated.js +1 -1
  68. package/dist/web-editor/client-script.generated.js.map +1 -1
  69. package/dist/web-editor/client-styles.generated.d.ts.map +1 -1
  70. package/dist/web-editor/client-styles.generated.js +1 -1
  71. package/dist/web-editor/client-styles.generated.js.map +1 -1
  72. package/dist/web-editor/contrib-service.d.ts +41 -0
  73. package/dist/web-editor/contrib-service.d.ts.map +1 -0
  74. package/dist/web-editor/contrib-service.js +174 -0
  75. package/dist/web-editor/contrib-service.js.map +1 -0
  76. package/dist/web-editor/line-diff.d.ts +28 -0
  77. package/dist/web-editor/line-diff.d.ts.map +1 -0
  78. package/dist/web-editor/line-diff.js +216 -0
  79. package/dist/web-editor/line-diff.js.map +1 -0
  80. package/dist/web-editor/page.d.ts +1 -1
  81. package/dist/web-editor/page.d.ts.map +1 -1
  82. package/dist/web-editor/page.js +2 -2
  83. package/dist/web-editor/page.js.map +1 -1
  84. package/dist/web-editor/schema-form.d.ts +63 -0
  85. package/dist/web-editor/schema-form.d.ts.map +1 -0
  86. package/dist/web-editor/schema-form.js +213 -0
  87. package/dist/web-editor/schema-form.js.map +1 -0
  88. package/dist/web-editor/server.d.ts.map +1 -1
  89. package/dist/web-editor/server.js +125 -7
  90. package/dist/web-editor/server.js.map +1 -1
  91. package/dist/web-editor/styles.d.ts.map +1 -1
  92. package/dist/web-editor/styles.js +188 -21
  93. package/dist/web-editor/styles.js.map +1 -1
  94. package/dist/web-editor/types.d.ts +19 -0
  95. package/dist/web-editor/types.d.ts.map +1 -1
  96. package/dist/web-host.d.ts +7 -3
  97. package/dist/web-host.d.ts.map +1 -1
  98. package/dist/web-host.js +85 -12
  99. package/dist/web-host.js.map +1 -1
  100. package/docs/README.md +1 -0
  101. package/docs/concepts/agent-profiles.md +1 -1
  102. package/docs/concepts/prompt-stacks.md +4 -0
  103. package/docs/design/0.5.1-plan.md +237 -0
  104. package/docs/design/architecture-0.5.md +22 -1
  105. package/docs/design/context-diff-plan.md +8 -2
  106. package/docs/development/release.md +7 -1
  107. package/docs/development/roadmap.md +14 -0
  108. package/docs/getting-started.md +1 -1
  109. package/docs/guides/delegation.md +3 -3
  110. package/docs/guides/use-cases.md +4 -2
  111. package/docs/guides/web-editor.md +5 -1
  112. package/docs/reference/commands.md +1 -1
  113. package/docs/reference/configuration.md +6 -3
  114. package/docs/reference/features.md +5 -0
  115. package/docs/reference/public-api.md +14 -2
  116. package/docs/reference/stack-schema.md +59 -2
  117. package/docs/reference/ui-contribution-port.md +51 -0
  118. package/docs/zh-CN/concepts/agent-profiles.md +1 -1
  119. package/docs/zh-CN/concepts/prompt-stacks.md +10 -4
  120. package/docs/zh-CN/guides/delegation.md +2 -2
  121. package/docs/zh-CN/guides/web-editor.md +4 -0
  122. package/docs/zh-CN/reference/commands.md +1 -1
  123. package/examples/custom-system-status-extension/README.md +4 -3
  124. package/examples/custom-system-status-extension/index.ts +8 -6
  125. package/examples/hack-prompt-stack.json +118 -0
  126. package/examples/minimal-prompt-stack.json +36 -0
  127. package/package.json +6 -1
  128. package/examples/image-reader-prompt-stack.json +0 -114
  129. package/examples/reviewer-prompt-stack.json +0 -104
@@ -126,9 +126,9 @@ html, body {
126
126
  display: flex;
127
127
  align-items: center;
128
128
  flex-wrap: wrap;
129
- gap: 10px;
130
- min-height: 48px;
131
- padding: 8px 12px;
129
+ gap: 8px;
130
+ min-height: 40px;
131
+ padding: 4px 10px;
132
132
  border-bottom: 1px solid var(--line);
133
133
  background: var(--pane);
134
134
  }
@@ -160,7 +160,7 @@ html, body {
160
160
  }
161
161
  .shell {
162
162
  display: grid;
163
- grid-template-columns: minmax(220px, 300px) minmax(0, 1fr);
163
+ grid-template-columns: minmax(210px, 260px) minmax(0, 1fr);
164
164
  height: calc(100vh - 48px);
165
165
  min-height: 0;
166
166
  transition: grid-template-columns .16s ease;
@@ -173,12 +173,14 @@ html, body {
173
173
  background: var(--pane);
174
174
  min-width: 0;
175
175
  overflow: hidden;
176
+ display: flex;
177
+ flex-direction: column;
176
178
  }
177
179
  .shell.sidebar-collapsed .sidebar {
178
180
  border-right: 0;
179
181
  }
180
182
  .side-head {
181
- padding: 12px;
183
+ padding: 9px 10px;
182
184
  border-bottom: 1px solid var(--line);
183
185
  }
184
186
  .side-title {
@@ -193,7 +195,8 @@ html, body {
193
195
  .stack-list {
194
196
  padding: 8px;
195
197
  overflow: auto;
196
- height: calc(100% - 74px);
198
+ flex: 1;
199
+ min-height: 0;
197
200
  }
198
201
  .side-empty {
199
202
  color: var(--muted);
@@ -253,16 +256,89 @@ html, body {
253
256
  }
254
257
  .main-actions {
255
258
  display: flex;
256
- gap: 8px;
257
- flex-wrap: wrap;
258
- padding: 10px 12px;
259
+ align-items: center;
260
+ gap: 6px;
261
+ flex-wrap: nowrap;
262
+ min-height: 42px;
263
+ padding: 5px 10px;
259
264
  border-bottom: 1px solid var(--line);
260
265
  background: var(--pane);
266
+ position: relative;
267
+ z-index: 3;
268
+ }
269
+ .new-stack-control {
270
+ display: flex;
271
+ min-width: 0;
272
+ flex: 0 0 auto;
273
+ }
274
+ .new-stack-control select {
275
+ width: auto;
276
+ min-width: 88px;
277
+ min-height: 30px;
278
+ padding: 4px 8px;
279
+ border-radius: 6px 0 0 6px;
280
+ }
281
+ .new-stack-control button {
282
+ margin-left: -1px;
283
+ border-radius: 0 6px 6px 0;
284
+ }
285
+ .main-actions button,
286
+ .main-actions .action-menu summary {
287
+ min-height: 30px;
288
+ padding: 4px 9px;
289
+ }
290
+ .action-menu {
291
+ position: relative;
292
+ flex: 0 0 auto;
293
+ }
294
+ .action-menu summary {
295
+ display: flex;
296
+ align-items: center;
297
+ list-style: none;
298
+ border: 1px solid var(--line-strong);
299
+ border-radius: 6px;
300
+ background: var(--control);
301
+ color: var(--text);
302
+ cursor: pointer;
303
+ user-select: none;
304
+ }
305
+ .action-menu summary::-webkit-details-marker {
306
+ display: none;
307
+ }
308
+ .action-menu summary[data-icon]::before {
309
+ content: attr(data-icon);
310
+ display: inline-block;
311
+ min-width: 1em;
312
+ margin-right: 6px;
313
+ text-align: center;
314
+ }
315
+ .action-menu[open] summary {
316
+ border-color: var(--accent);
317
+ background: var(--accent-bg);
318
+ color: var(--accent);
319
+ }
320
+ .action-menu-popover {
321
+ position: absolute;
322
+ top: calc(100% + 6px);
323
+ right: 0;
324
+ width: 170px;
325
+ display: grid;
326
+ gap: 5px;
327
+ padding: 7px;
328
+ border: 1px solid var(--line);
329
+ border-radius: 7px;
330
+ background: var(--pane);
331
+ box-shadow: 0 10px 26px var(--shadow);
332
+ }
333
+ .action-menu-popover button {
334
+ width: 100%;
335
+ justify-self: stretch;
336
+ text-align: left;
261
337
  }
262
338
  .view-tabs {
263
339
  display: flex;
264
- gap: 6px;
265
- padding: 8px 12px;
340
+ gap: 5px;
341
+ padding: 4px 10px;
266
342
  border-bottom: 1px solid var(--line);
267
343
  background: var(--pane);
268
344
  flex-wrap: wrap;
@@ -283,11 +359,17 @@ html, body {
283
359
  .metadata-head {
284
360
  display: flex;
285
361
  align-items: center;
286
- gap: 10px;
287
- padding: 8px 12px;
362
+ gap: 8px;
363
+ padding: 4px 10px;
288
364
  }
289
- .metadata-title {
290
- font-weight: 650;
365
+ .metadata-head button,
366
+ .view-tabs button {
367
+ min-height: 30px;
368
+ padding: 4px 9px;
369
+ }
370
+ .metadata-head button {
371
+ flex: 0 0 auto;
372
+ white-space: nowrap;
291
373
  }
292
374
  .metadata-summary {
293
375
  color: var(--muted);
@@ -326,7 +408,7 @@ html, body {
326
408
  }
327
409
  .workspace {
328
410
  display: grid;
329
- grid-template-columns: minmax(230px, 340px) minmax(0, 1fr);
411
+ grid-template-columns: minmax(220px, 300px) minmax(0, 1fr);
330
412
  flex: 1;
331
413
  min-height: 0;
332
414
  }
@@ -341,6 +423,50 @@ html, body {
341
423
  .tab-panel.open {
342
424
  display: block;
343
425
  }
426
+ .context-diff-panel {
427
+ display: none;
428
+ min-width: 0;
429
+ min-height: 0;
430
+ overflow: auto;
431
+ padding: 12px;
432
+ background: var(--pane-soft);
433
+ }
434
+ .context-diff-panel.open {
435
+ display: block;
436
+ }
437
+ .editor-dock-area {
438
+ flex: 1;
439
+ min-height: 0;
440
+ display: grid;
441
+ grid-template-columns: minmax(0, 1fr);
442
+ }
443
+ .editor-dock-area.dock-open {
444
+ grid-template-columns: minmax(0, 1fr) minmax(440px, 48%);
445
+ }
446
+ .editor-dock-area .workspace,
447
+ .editor-dock-area .tab-panel,
448
+ .editor-dock-area .context-diff-panel {
449
+ min-width: 0;
450
+ min-height: 0;
451
+ }
452
+ .editor-dock-area.dock-open .workspace {
453
+ display: grid;
454
+ grid-template-columns: minmax(200px, 260px) minmax(0, 1fr);
455
+ border-right: 1px solid var(--line);
456
+ }
457
+ .editor-dock-area.dock-open .context-diff-panel {
458
+ display: block;
459
+ border-left: 1px solid var(--line);
460
+ }
461
+ .editor-dock-area.dock-open.dock-focus {
462
+ grid-template-columns: minmax(0, 1fr);
463
+ }
464
+ .editor-dock-area.dock-open.dock-focus .workspace {
465
+ display: none;
466
+ }
467
+ .editor-dock-area.dock-open.dock-focus .context-diff-panel {
468
+ border-left: 0;
469
+ }
344
470
  .tab-section {
345
471
  border: 1px solid var(--line);
346
472
  border-radius: 6px;
@@ -1008,6 +1134,11 @@ html, body {
1008
1134
  height: min(48vh, 520px);
1009
1135
  min-height: 280px;
1010
1136
  }
1137
+ @media (max-width: 960px) {
1138
+ .main-actions {
1139
+ flex-wrap: wrap;
1140
+ }
1141
+ }
1011
1142
  @media (max-width: 900px) {
1012
1143
  .shell, .settings {
1013
1144
  grid-template-columns: 1fr;
@@ -1015,6 +1146,16 @@ html, body {
1015
1146
  .workspace {
1016
1147
  display: block;
1017
1148
  }
1149
+ .editor-dock-area.dock-open,
1150
+ .editor-dock-area.dock-open.dock-focus {
1151
+ grid-template-columns: minmax(0, 1fr);
1152
+ }
1153
+ .editor-dock-area.dock-open .workspace {
1154
+ display: none;
1155
+ }
1156
+ .editor-dock-area.dock-open .context-diff-panel {
1157
+ border-left: 0;
1158
+ }
1018
1159
  .item-form {
1019
1160
  height: auto;
1020
1161
  overflow: visible;
@@ -1032,18 +1173,25 @@ html, body {
1032
1173
  }
1033
1174
  .shell {
1034
1175
  height: auto;
1035
- min-height: calc(100vh - 92px);
1176
+ min-height: calc(100vh - 80px);
1036
1177
  }
1037
1178
  .sidebar, .items-pane {
1038
1179
  border-right: 0;
1039
1180
  border-bottom: 1px solid var(--line);
1040
1181
  }
1182
+ .sidebar {
1183
+ min-height: 180px;
1184
+ max-height: 240px;
1185
+ }
1041
1186
  .metadata-head {
1042
- align-items: flex-start;
1043
- flex-direction: column;
1187
+ align-items: center;
1188
+ flex-direction: row;
1189
+ }
1190
+ .new-stack-control {
1191
+ flex: 1 1 180px;
1044
1192
  }
1045
- .metadata-summary {
1046
- white-space: normal;
1193
+ .new-stack-control select {
1194
+ flex: 1 1 auto;
1047
1195
  }
1048
1196
  .item-list {
1049
1197
  max-height: 260px;
@@ -1062,5 +1210,24 @@ html, body {
1062
1210
  grid-column: 1 / -1;
1063
1211
  }
1064
1212
  }
1213
+ @media (max-width: 700px) {
1214
+ .topbar .brand {
1215
+ display: none;
1216
+ }
1217
+ .topbar #reloadBtn,
1218
+ .topbar #disableBtn {
1219
+ width: 34px;
1220
+ padding-inline: 0;
1221
+ overflow: hidden;
1222
+ color: transparent;
1223
+ font-size: 0;
1224
+ }
1225
+ .topbar #reloadBtn::before,
1226
+ .topbar #disableBtn::before {
1227
+ margin-right: 0;
1228
+ color: var(--text);
1229
+ font-size: 14px;
1230
+ }
1231
+ }
1065
1232
  `;
1066
1233
  //# sourceMappingURL=styles.js.map
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwiCtC,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+sCtC,CAAC"}
@@ -1,5 +1,7 @@
1
1
  import type { AgentProfile, AgentProfileDiagnostic } from "../agent-profile.ts";
2
2
  import type { AgentProfilePreview, AgentProfileRuntimeStatus } from "../profile-service.ts";
3
+ import type { UiContributionTransport } from "../ui-contribution/contrib-port.ts";
4
+ import type { ContextDiffView } from "../context-diff-history.ts";
3
5
  import type { PromptStack, PromptStackDiagnostic } from "../types.ts";
4
6
  export interface WebEditorStackSummary {
5
7
  id: string;
@@ -15,8 +17,15 @@ export interface WebEditorStackSummary {
15
17
  warnings: number;
16
18
  diagnostics: PromptStackDiagnostic[];
17
19
  }
20
+ export type WebEditorLocale = "en" | "zh-CN" | "auto";
18
21
  export interface WebEditorHost {
19
22
  cwd: string;
23
+ getEditorConfig(): {
24
+ locale: WebEditorLocale;
25
+ };
26
+ setEditorLocale(locale: WebEditorLocale): WebEditorOperationResult<{
27
+ locale: WebEditorLocale;
28
+ }>;
20
29
  listStacks(): WebEditorStackSummary[];
21
30
  listProfiles(): WebEditorProfileCollection;
22
31
  reloadProfiles(): Promise<WebEditorOperationResult<WebEditorProfileCollection>>;
@@ -52,6 +61,7 @@ export interface WebEditorHost {
52
61
  getPayload(): WebEditorOperationResult<WebEditorPayloadSnapshot>;
53
62
  armPayload(savePath?: string): WebEditorOperationResult<WebEditorPayloadSnapshot>;
54
63
  clearPayload(): WebEditorOperationResult<WebEditorPayloadSnapshot>;
64
+ getContextDiff(): WebEditorOperationResult<ContextDiffView>;
55
65
  activateStack(id: string): WebEditorOperationResult<{
56
66
  activeId?: string;
57
67
  stacks: WebEditorStackSummary[];
@@ -106,6 +116,8 @@ export interface WebEditorProfileMutation {
106
116
  }
107
117
  export interface WebEditorPreviewSection {
108
118
  id: string;
119
+ /** Stable compiled-source identity used to align draft diffs across insertions. */
120
+ diffKey?: string;
109
121
  title: string;
110
122
  role?: string;
111
123
  content: string;
@@ -173,5 +185,12 @@ export interface WebEditorServer {
173
185
  }
174
186
  export interface WebEditorServerOptions {
175
187
  port?: number;
188
+ /**
189
+ * Optional Pi event bus used to discover UI contribution providers. When
190
+ * omitted the editor returns an empty contribution list and rejects writes.
191
+ */
192
+ contributionTransport?: UiContributionTransport;
193
+ /** Timeout used for provider discovery at server start / lazy reconnect. */
194
+ contributionDiscoverTimeoutMs?: number;
176
195
  }
177
196
  //# sourceMappingURL=types.d.ts.map
@@ -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,8 +1,9 @@
1
1
  import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
2
2
  import { type AgentProfileProvenance, type LoadedAgentProfile, type ResolvedAgentProfile } from "./agent-profile.ts";
3
3
  import { type AgentProfileApplicationResult, type AgentProfileCurrentRuntime } from "./profile-service.ts";
4
+ import type { ContextDiffView } from "./context-diff-history.ts";
4
5
  import type { LoadedPromptStack, PromptStack, PromptStackDiagnostic } from "./types.ts";
5
- import type { WebEditorHost, WebEditorOperationResult, WebEditorPayloadSnapshot, WebEditorPolicyResources, WebEditorPreview, WebEditorStackSummary } from "./web-editor/index.ts";
6
+ import type { WebEditorLocale, WebEditorHost, WebEditorOperationResult, WebEditorPayloadSnapshot, WebEditorPolicyResources, WebEditorPreview, WebEditorStackSummary } from "./web-editor/index.ts";
6
7
  export interface WebHostRuntime {
7
8
  getStacks(): LoadedPromptStack[];
8
9
  getActive(): LoadedPromptStack | undefined;
@@ -27,15 +28,18 @@ export interface WebHostRuntime {
27
28
  getPayload(): WebEditorOperationResult<WebEditorPayloadSnapshot>;
28
29
  armPayload(savePath?: string): WebEditorOperationResult<WebEditorPayloadSnapshot>;
29
30
  clearPayload(): WebEditorOperationResult<WebEditorPayloadSnapshot>;
31
+ getContextDiff(): WebEditorOperationResult<ContextDiffView>;
30
32
  }
31
33
  export declare function createWebEditorHost(ctx: ExtensionContext, runtime: WebHostRuntime): WebEditorHost;
32
34
  export declare function stackSummary(loaded: LoadedPromptStack, active: LoadedPromptStack | undefined): WebEditorStackSummary;
33
35
  export declare function stackSummaries(stacks: LoadedPromptStack[], active: LoadedPromptStack | undefined): WebEditorStackSummary[];
34
- export declare function loadWebEditorSettings(ctx: ExtensionContext): {
36
+ export interface WebEditorSettings {
35
37
  preferredPort?: number;
38
+ locale?: WebEditorLocale;
36
39
  configPath: string;
37
40
  warnings: string[];
38
- };
41
+ }
42
+ export declare function loadWebEditorSettings(ctx: ExtensionContext): WebEditorSettings;
39
43
  export type StackMutationFailureReason = "invalid-path" | "exists" | "missing" | "io";
40
44
  /** HTTP status mapping for repository write/delete failures surfaced to the web editor. */
41
45
  export declare function stackMutationStatus(reason: StackMutationFailureReason): number;
@@ -1 +1 @@
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;AACxE,OAAO,EAON,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,MAAM,oBAAoB,CAAC;AAa5B,OAAO,EAKN,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,EAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,KAAK,EAEX,aAAa,EACb,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,gBAAgB,EAIhB,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,WAAW,IAAI,kBAAkB,EAAE,CAAC;IACpC,qBAAqB,IAAI,sBAAsB,GAAG,SAAS,CAAC;IAC5D,wBAAwB,IAAI,0BAA0B,CAAC;IACvD,cAAc,CAAC,MAAM,EAAE,kBAAkB,GAAG,oBAAoB,CAAC;IACjE,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,EAAE,CAAC;IAC3D,cAAc,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,IAAI,OAAO,CAAC;IAClB,YAAY,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;IACnF,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,CA8CjG;AAoRD,wBAAgB,YAAY,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,GAAG,SAAS,GAAG,qBAAqB,CAiBpH;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;AAkGD,MAAM,MAAM,0BAA0B,GAAG,cAAc,GAAG,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC;AAEtF,2FAA2F;AAC3F,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,0BAA0B,GAAG,MAAM,CAW9E"}
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,5 +1,6 @@
1
- import { existsSync, readFileSync } from "node:fs";
2
- import { join } from "node:path";
1
+ import { randomUUID } from "node:crypto";
2
+ import { closeSync, existsSync, fsyncSync, mkdirSync, openSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
3
+ import { basename, dirname, join } from "node:path";
3
4
  import { agentProfilePath, agentProfilesDir, isResolvedAgentProfileUsable, validateAgentProfile, validateAgentProfilePromptStackScope, } from "./agent-profile.js";
4
5
  import { isValidPromptStackId, validatePromptStack, } from "./loader.js";
5
6
  import { deletePromptStackFile, promptStackTargetPath, writePromptStackFile, } from "./repositories/prompt-stack.js";
@@ -10,6 +11,8 @@ import { createAgentProfilePreview, deleteAgentProfile, getAgentProfileRuntimeSt
10
11
  export function createWebEditorHost(ctx, runtime) {
11
12
  return {
12
13
  cwd: ctx.cwd,
14
+ getEditorConfig: () => ({ locale: loadWebEditorSettings(ctx).locale ?? "auto" }),
15
+ setEditorLocale: (locale) => saveWebEditorLocale(ctx, locale),
13
16
  listStacks: () => stackSummaries(runtime.getStacks(), runtime.getActive()),
14
17
  listProfiles: () => profileCollection(ctx, runtime),
15
18
  reloadProfiles: async () => {
@@ -41,6 +44,7 @@ export function createWebEditorHost(ctx, runtime) {
41
44
  getPayload: () => runtime.getPayload(),
42
45
  armPayload: (savePath) => runtime.armPayload(savePath),
43
46
  clearPayload: () => runtime.clearPayload(),
47
+ getContextDiff: () => runtime.getContextDiff(),
44
48
  activateStack: (selector) => {
45
49
  if (!runtime.setActive(selector))
46
50
  return { ok: false, status: 404, error: `Unknown prompt stack: ${selector}` };
@@ -314,6 +318,7 @@ export function stackSummary(loaded, active) {
314
318
  export function stackSummaries(stacks, active) {
315
319
  return stacks.map((loaded) => stackSummary(loaded, active));
316
320
  }
321
+ const WEB_EDITOR_LOCALES = new Set(["en", "zh-CN", "auto"]);
317
322
  export function loadWebEditorSettings(ctx) {
318
323
  const configPath = join(ctx.cwd, ".pi", "forge", "config.json");
319
324
  if (!ctx.isProjectTrusted() || !existsSync(configPath)) {
@@ -326,26 +331,94 @@ export function loadWebEditorSettings(ctx) {
326
331
  catch (error) {
327
332
  return {
328
333
  configPath,
329
- warnings: [`pi-forge: failed to read ${configPath}; using an available editor port. ${error instanceof Error ? error.message : String(error)}`],
334
+ warnings: [`pi-forge: failed to read ${configPath}; using editor defaults. ${error instanceof Error ? error.message : String(error)}`],
330
335
  };
331
336
  }
332
337
  if (!isPlainObject(raw)) {
333
338
  return {
334
339
  configPath,
335
- warnings: [`pi-forge: ${configPath} must be a JSON object; using an available editor port.`],
340
+ warnings: [`pi-forge: ${configPath} must be a JSON object; using editor defaults.`],
336
341
  };
337
342
  }
343
+ const settings = { configPath, warnings: [] };
338
344
  const webEditorConfig = isPlainObject(raw.webEditor) ? raw.webEditor : undefined;
339
345
  const rawPort = webEditorConfig?.port ?? raw.webEditorPort;
340
- if (rawPort === undefined)
341
- return { configPath, warnings: [] };
342
- if (typeof rawPort === "number" && Number.isInteger(rawPort) && rawPort >= 1 && rawPort <= 65535) {
343
- return { preferredPort: rawPort, configPath, warnings: [] };
346
+ if (rawPort !== undefined) {
347
+ if (typeof rawPort === "number" && Number.isInteger(rawPort) && rawPort >= 1 && rawPort <= 65535) {
348
+ settings.preferredPort = rawPort;
349
+ }
350
+ else {
351
+ settings.warnings.push(`pi-forge: ${configPath} webEditor.port must be an integer from 1 to 65535; using an available editor port.`);
352
+ }
353
+ }
354
+ const rawLocale = webEditorConfig?.locale;
355
+ if (rawLocale !== undefined) {
356
+ if (typeof rawLocale === "string" && WEB_EDITOR_LOCALES.has(rawLocale)) {
357
+ settings.locale = rawLocale;
358
+ }
359
+ else {
360
+ settings.warnings.push(`pi-forge: ${configPath} webEditor.locale must be "en", "zh-CN", or "auto"; using "auto".`);
361
+ }
362
+ }
363
+ return settings;
364
+ }
365
+ function saveWebEditorLocale(ctx, locale) {
366
+ if (!ctx.isProjectTrusted()) {
367
+ return { ok: false, status: 403, error: "Project is not trusted; refusing to change editor settings." };
368
+ }
369
+ if (!WEB_EDITOR_LOCALES.has(locale)) {
370
+ return { ok: false, status: 400, error: 'webEditor.locale must be "en", "zh-CN", or "auto".' };
371
+ }
372
+ const configPath = join(ctx.cwd, ".pi", "forge", "config.json");
373
+ let raw = {};
374
+ if (existsSync(configPath)) {
375
+ try {
376
+ const parsed = JSON.parse(readFileSync(configPath, "utf8"));
377
+ if (!isPlainObject(parsed)) {
378
+ return { ok: false, status: 400, error: `pi-forge: ${configPath} must be a JSON object; fix it before changing editor settings.` };
379
+ }
380
+ raw = parsed;
381
+ }
382
+ catch (error) {
383
+ return { ok: false, status: 400, error: `pi-forge: failed to read ${configPath}; fix it before changing editor settings. ${error instanceof Error ? error.message : String(error)}` };
384
+ }
385
+ }
386
+ const webEditor = isPlainObject(raw.webEditor) ? { ...raw.webEditor } : {};
387
+ if (locale === "auto")
388
+ delete webEditor.locale;
389
+ else
390
+ webEditor.locale = locale;
391
+ if (Object.keys(webEditor).length > 0)
392
+ raw.webEditor = webEditor;
393
+ else
394
+ delete raw.webEditor;
395
+ try {
396
+ mkdirSync(dirname(configPath), { recursive: true });
397
+ writeTextFileAtomically(configPath, `${JSON.stringify(raw, null, 2)}\n`);
398
+ }
399
+ catch (error) {
400
+ return { ok: false, status: 500, error: `pi-forge: failed to write ${configPath}: ${error instanceof Error ? error.message : String(error)}` };
401
+ }
402
+ return { ok: true, locale };
403
+ }
404
+ function writeTextFileAtomically(filePath, content) {
405
+ const tempPath = join(dirname(filePath), `.${basename(filePath)}.${process.pid}.${randomUUID()}.tmp`);
406
+ let descriptor;
407
+ try {
408
+ descriptor = openSync(tempPath, "wx", 0o600);
409
+ writeFileSync(descriptor, content, "utf8");
410
+ fsyncSync(descriptor);
411
+ closeSync(descriptor);
412
+ descriptor = undefined;
413
+ renameSync(tempPath, filePath);
414
+ }
415
+ catch (error) {
416
+ if (descriptor !== undefined)
417
+ closeSync(descriptor);
418
+ if (existsSync(tempPath))
419
+ unlinkSync(tempPath);
420
+ throw error;
344
421
  }
345
- return {
346
- configPath,
347
- warnings: [`pi-forge: ${configPath} webEditor.port must be an integer from 1 to 65535; using an available editor port.`],
348
- };
349
422
  }
350
423
  async function saveStackFile(ctx, runtime, id, stack) {
351
424
  if (!ctx.isProjectTrusted()) {