@zihanw/pi-forge 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/CHANGELOG.md +196 -0
  2. package/PUBLIC_API.md +5 -0
  3. package/README.md +93 -478
  4. package/README.zh-CN.md +88 -461
  5. package/SUBAGENT_ADAPTER_CONTRACT.md +5 -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 +88 -0
  11. package/dist/forge-config.d.ts.map +1 -0
  12. package/dist/forge-config.js +290 -0
  13. package/dist/forge-config.js.map +1 -0
  14. package/dist/forge-extensions.d.ts.map +1 -1
  15. package/dist/forge-extensions.js +19 -3
  16. package/dist/forge-extensions.js.map +1 -1
  17. package/dist/index.d.ts +4 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +97 -358
  20. package/dist/index.js.map +1 -1
  21. package/dist/lifecycle.d.ts +11 -3
  22. package/dist/lifecycle.d.ts.map +1 -1
  23. package/dist/lifecycle.js +90 -4
  24. package/dist/lifecycle.js.map +1 -1
  25. package/dist/loader.d.ts.map +1 -1
  26. package/dist/loader.js +116 -5
  27. package/dist/loader.js.map +1 -1
  28. package/dist/payload-capture.d.ts.map +1 -1
  29. package/dist/payload-capture.js +27 -0
  30. package/dist/payload-capture.js.map +1 -1
  31. package/dist/payload-command.d.ts +3 -3
  32. package/dist/payload-command.d.ts.map +1 -1
  33. package/dist/payload-command.js.map +1 -1
  34. package/dist/preview.d.ts +2 -2
  35. package/dist/preview.d.ts.map +1 -1
  36. package/dist/preview.js +2 -3
  37. package/dist/preview.js.map +1 -1
  38. package/dist/profile-command.d.ts +12 -0
  39. package/dist/profile-command.d.ts.map +1 -0
  40. package/dist/profile-command.js +291 -0
  41. package/dist/profile-command.js.map +1 -0
  42. package/dist/profile-service.d.ts +103 -0
  43. package/dist/profile-service.d.ts.map +1 -0
  44. package/dist/profile-service.js +220 -0
  45. package/dist/profile-service.js.map +1 -0
  46. package/dist/runtime/profile-runtime.d.ts +13 -0
  47. package/dist/runtime/profile-runtime.d.ts.map +1 -0
  48. package/dist/runtime/profile-runtime.js +47 -0
  49. package/dist/runtime/profile-runtime.js.map +1 -0
  50. package/dist/runtime/prompt-stack-runtime.d.ts +22 -0
  51. package/dist/runtime/prompt-stack-runtime.d.ts.map +1 -0
  52. package/dist/runtime/prompt-stack-runtime.js +104 -0
  53. package/dist/runtime/prompt-stack-runtime.js.map +1 -0
  54. package/dist/runtime/subagent-runtime.d.ts +45 -0
  55. package/dist/runtime/subagent-runtime.d.ts.map +1 -0
  56. package/dist/runtime/subagent-runtime.js +335 -0
  57. package/dist/runtime/subagent-runtime.js.map +1 -0
  58. package/dist/runtime/tool-policy-runtime.d.ts +15 -0
  59. package/dist/runtime/tool-policy-runtime.d.ts.map +1 -0
  60. package/dist/runtime/tool-policy-runtime.js +170 -0
  61. package/dist/runtime/tool-policy-runtime.js.map +1 -0
  62. package/dist/runtime/web-editor-runtime.d.ts +9 -0
  63. package/dist/runtime/web-editor-runtime.d.ts.map +1 -0
  64. package/dist/runtime/web-editor-runtime.js +131 -0
  65. package/dist/runtime/web-editor-runtime.js.map +1 -0
  66. package/dist/runtime-state.d.ts +4 -0
  67. package/dist/runtime-state.d.ts.map +1 -1
  68. package/dist/runtime-state.js +2 -0
  69. package/dist/runtime-state.js.map +1 -1
  70. package/dist/storage.d.ts +4 -0
  71. package/dist/storage.d.ts.map +1 -1
  72. package/dist/storage.js +24 -1
  73. package/dist/storage.js.map +1 -1
  74. package/dist/subagent/canonical.d.ts +22 -0
  75. package/dist/subagent/canonical.d.ts.map +1 -0
  76. package/dist/subagent/canonical.js +24 -0
  77. package/dist/subagent/canonical.js.map +1 -0
  78. package/dist/subagent/context.d.ts +8 -0
  79. package/dist/subagent/context.d.ts.map +1 -0
  80. package/dist/subagent/context.js +125 -0
  81. package/dist/subagent/context.js.map +1 -0
  82. package/dist/subagent/contract.d.ts +10 -0
  83. package/dist/subagent/contract.d.ts.map +1 -0
  84. package/dist/subagent/contract.js +10 -0
  85. package/dist/subagent/contract.js.map +1 -0
  86. package/dist/subagent/index.d.ts +14 -0
  87. package/dist/subagent/index.d.ts.map +1 -0
  88. package/dist/subagent/index.js +14 -0
  89. package/dist/subagent/index.js.map +1 -0
  90. package/dist/subagent/plan.d.ts +18 -0
  91. package/dist/subagent/plan.d.ts.map +1 -0
  92. package/dist/subagent/plan.js +157 -0
  93. package/dist/subagent/plan.js.map +1 -0
  94. package/dist/subagent/preflight.d.ts +4 -0
  95. package/dist/subagent/preflight.d.ts.map +1 -0
  96. package/dist/subagent/preflight.js +108 -0
  97. package/dist/subagent/preflight.js.map +1 -0
  98. package/dist/subagent/request.d.ts +4 -0
  99. package/dist/subagent/request.d.ts.map +1 -0
  100. package/dist/subagent/request.js +122 -0
  101. package/dist/subagent/request.js.map +1 -0
  102. package/dist/subagent/response.d.ts +8 -0
  103. package/dist/subagent/response.d.ts.map +1 -0
  104. package/dist/subagent/response.js +155 -0
  105. package/dist/subagent/response.js.map +1 -0
  106. package/dist/subagent/tools.d.ts +4 -0
  107. package/dist/subagent/tools.d.ts.map +1 -0
  108. package/dist/subagent/tools.js +42 -0
  109. package/dist/subagent/tools.js.map +1 -0
  110. package/dist/subagent/types.d.ts +268 -0
  111. package/dist/subagent/types.d.ts.map +1 -0
  112. package/dist/subagent/types.js +3 -0
  113. package/dist/subagent/types.js.map +1 -0
  114. package/dist/subagent/validation.d.ts +35 -0
  115. package/dist/subagent/validation.d.ts.map +1 -0
  116. package/dist/subagent/validation.js +314 -0
  117. package/dist/subagent/validation.js.map +1 -0
  118. package/dist/subagent-command.d.ts +4 -0
  119. package/dist/subagent-command.d.ts.map +1 -0
  120. package/dist/subagent-command.js +246 -0
  121. package/dist/subagent-command.js.map +1 -0
  122. package/dist/subagent-host.d.ts +44 -0
  123. package/dist/subagent-host.d.ts.map +1 -0
  124. package/dist/subagent-host.js +292 -0
  125. package/dist/subagent-host.js.map +1 -0
  126. package/dist/subagent-profile-tool.d.ts +49 -0
  127. package/dist/subagent-profile-tool.d.ts.map +1 -0
  128. package/dist/subagent-profile-tool.js +124 -0
  129. package/dist/subagent-profile-tool.js.map +1 -0
  130. package/dist/subagent-tool.d.ts +53 -0
  131. package/dist/subagent-tool.d.ts.map +1 -0
  132. package/dist/subagent-tool.js +456 -0
  133. package/dist/subagent-tool.js.map +1 -0
  134. package/dist/web-editor/client-script.d.ts +2 -0
  135. package/dist/web-editor/client-script.d.ts.map +1 -0
  136. package/dist/web-editor/client-script.generated.d.ts +2 -0
  137. package/dist/web-editor/client-script.generated.d.ts.map +1 -0
  138. package/dist/web-editor/client-script.generated.js +3 -0
  139. package/dist/web-editor/client-script.generated.js.map +1 -0
  140. package/dist/web-editor/client-script.js +2 -0
  141. package/dist/web-editor/client-script.js.map +1 -0
  142. package/dist/web-editor/client-styles.d.ts +2 -0
  143. package/dist/web-editor/client-styles.d.ts.map +1 -0
  144. package/dist/web-editor/client-styles.generated.d.ts +2 -0
  145. package/dist/web-editor/client-styles.generated.d.ts.map +1 -0
  146. package/dist/web-editor/client-styles.generated.js +3 -0
  147. package/dist/web-editor/client-styles.generated.js.map +1 -0
  148. package/dist/web-editor/client-styles.js +2 -0
  149. package/dist/web-editor/client-styles.js.map +1 -0
  150. package/dist/web-editor/page.d.ts +2 -0
  151. package/dist/web-editor/page.d.ts.map +1 -1
  152. package/dist/web-editor/page.js +14 -3319
  153. package/dist/web-editor/page.js.map +1 -1
  154. package/dist/web-editor/server.d.ts.map +1 -1
  155. package/dist/web-editor/server.js +148 -0
  156. package/dist/web-editor/server.js.map +1 -1
  157. package/dist/web-editor/styles.d.ts +2 -0
  158. package/dist/web-editor/styles.d.ts.map +1 -0
  159. package/dist/web-editor/styles.js +1053 -0
  160. package/dist/web-editor/styles.js.map +1 -0
  161. package/dist/web-editor/types.d.ts +79 -0
  162. package/dist/web-editor/types.d.ts.map +1 -1
  163. package/dist/web-host.d.ts +16 -5
  164. package/dist/web-host.d.ts.map +1 -1
  165. package/dist/web-host.js +307 -0
  166. package/dist/web-host.js.map +1 -1
  167. package/docs/README.md +41 -0
  168. package/docs/concepts/agent-profiles.md +60 -0
  169. package/docs/concepts/prompt-stacks.md +90 -0
  170. package/docs/design/README.md +17 -0
  171. package/docs/design/roadmap-0.4-archive.md +216 -0
  172. package/docs/design/subagents/design-review.md +220 -0
  173. package/docs/design/subagents/interface-design.md +274 -0
  174. package/docs/design/subagents/sdk-spike-findings.md +117 -0
  175. package/docs/development/complexity-review.md +86 -0
  176. package/docs/development/release.md +31 -0
  177. package/docs/development/roadmap.md +42 -0
  178. package/docs/development/setup.md +75 -0
  179. package/docs/getting-started.md +93 -0
  180. package/docs/guides/custom-macros-and-slots.md +68 -0
  181. package/docs/guides/debugging.md +39 -0
  182. package/docs/guides/delegation.md +99 -0
  183. package/docs/guides/sillytavern-import.md +47 -0
  184. package/docs/guides/use-cases.md +65 -0
  185. package/docs/guides/web-editor.md +75 -0
  186. package/docs/reference/commands.md +60 -0
  187. package/docs/reference/configuration.md +64 -0
  188. package/docs/reference/features.md +279 -0
  189. package/docs/reference/macros-and-slots.md +82 -0
  190. package/docs/reference/public-api.md +28 -0
  191. package/docs/reference/stack-schema.md +167 -0
  192. package/docs/reference/subagent-adapter.md +204 -0
  193. package/docs/zh-CN/README.md +37 -0
  194. package/docs/zh-CN/concepts/agent-profiles.md +44 -0
  195. package/docs/zh-CN/concepts/prompt-stacks.md +40 -0
  196. package/docs/zh-CN/getting-started.md +79 -0
  197. package/docs/zh-CN/guides/delegation.md +66 -0
  198. package/docs/zh-CN/guides/web-editor.md +45 -0
  199. package/docs/zh-CN/reference/commands.md +58 -0
  200. package/package.json +55 -13
  201. package/src/compiler.ts +0 -578
  202. package/src/extension-registry.ts +0 -33
  203. package/src/forge-extensions.ts +0 -223
  204. package/src/index.ts +0 -445
  205. package/src/lifecycle.ts +0 -171
  206. package/src/loader.ts +0 -394
  207. package/src/macro-engine.ts +0 -358
  208. package/src/payload-capture.ts +0 -85
  209. package/src/payload-command.ts +0 -138
  210. package/src/policy.ts +0 -42
  211. package/src/preset-command.ts +0 -280
  212. package/src/preview.ts +0 -226
  213. package/src/regex.ts +0 -500
  214. package/src/render-helpers.ts +0 -169
  215. package/src/runtime-state.ts +0 -40
  216. package/src/sillytavern-importer/items.ts +0 -98
  217. package/src/sillytavern-importer/macros.ts +0 -159
  218. package/src/sillytavern-importer/prompt-order.ts +0 -54
  219. package/src/sillytavern-importer/regex.ts +0 -270
  220. package/src/sillytavern-importer/report.ts +0 -202
  221. package/src/sillytavern-importer/types.ts +0 -120
  222. package/src/sillytavern-importer.ts +0 -152
  223. package/src/slot-renderers.ts +0 -414
  224. package/src/stack-migration.ts +0 -159
  225. package/src/storage.ts +0 -45
  226. package/src/types.ts +0 -209
  227. package/src/web-editor/index.ts +0 -2
  228. package/src/web-editor/page.ts +0 -3330
  229. package/src/web-editor/server.ts +0 -294
  230. package/src/web-editor/types.ts +0 -98
  231. package/src/web-host.ts +0 -232
@@ -0,0 +1,1053 @@
1
+ export const EDITOR_STYLES = String.raw `
2
+ :root {
3
+ color-scheme: light;
4
+ --bg: #f7f8fb;
5
+ --pane: #ffffff;
6
+ --line: #d8dee8;
7
+ --line-strong: #aeb8c7;
8
+ --text: #18202c;
9
+ --muted: #647083;
10
+ --accent: #146b5f;
11
+ --accent-bg: #e5f3ef;
12
+ --warning: #9b6200;
13
+ --warning-bg: #fff4d8;
14
+ --error: #b42318;
15
+ --error-bg: #fde8e7;
16
+ --success: #1f7a3a;
17
+ --control: #ffffff;
18
+ --control-muted: #f3f5f8;
19
+ --pane-soft: #fbfcfe;
20
+ --row: #ffffff;
21
+ --code-bg: #111827;
22
+ --code-text: #e5e7eb;
23
+ --shadow: rgba(15, 23, 42, .24);
24
+ }
25
+ body[data-theme="dark"] {
26
+ color-scheme: dark;
27
+ --bg: #111315;
28
+ --pane: #181a1d;
29
+ --line: #32363b;
30
+ --line-strong: #525a63;
31
+ --text: #edf0f2;
32
+ --muted: #a0a8b2;
33
+ --accent: #2aa889;
34
+ --accent-bg: #15362f;
35
+ --warning: #e4b75f;
36
+ --warning-bg: #3a2d13;
37
+ --error: #f06f64;
38
+ --error-bg: #3c1d1a;
39
+ --success: #69c98c;
40
+ --control: #202327;
41
+ --control-muted: #25292e;
42
+ --pane-soft: #151719;
43
+ --row: #1c1f23;
44
+ --code-bg: #0b0d10;
45
+ --code-text: #e8edf2;
46
+ --shadow: rgba(0, 0, 0, .42);
47
+ }
48
+ * { box-sizing: border-box; }
49
+ body {
50
+ margin: 0;
51
+ background: var(--bg);
52
+ color: var(--text);
53
+ font: 14px/1.45 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
54
+ letter-spacing: 0;
55
+ }
56
+ button, input, select, textarea {
57
+ font: inherit;
58
+ letter-spacing: 0;
59
+ }
60
+ button {
61
+ border: 1px solid var(--line-strong);
62
+ background: var(--control);
63
+ color: var(--text);
64
+ min-height: 32px;
65
+ padding: 5px 10px;
66
+ border-radius: 6px;
67
+ cursor: pointer;
68
+ }
69
+ button[data-icon]::before {
70
+ content: attr(data-icon);
71
+ display: inline-block;
72
+ min-width: 1em;
73
+ margin-right: 6px;
74
+ text-align: center;
75
+ color: currentColor;
76
+ }
77
+ button.icon[data-icon]::before {
78
+ margin-right: 0;
79
+ }
80
+ button.primary {
81
+ border-color: var(--accent);
82
+ background: var(--accent);
83
+ color: white;
84
+ }
85
+ button.danger {
86
+ border-color: var(--error);
87
+ color: var(--error);
88
+ }
89
+ button.icon {
90
+ width: 34px;
91
+ padding: 5px 0;
92
+ }
93
+ button:disabled {
94
+ cursor: default;
95
+ opacity: .55;
96
+ }
97
+ input, select, textarea {
98
+ border: 1px solid var(--line-strong);
99
+ border-radius: 6px;
100
+ background: var(--control);
101
+ color: var(--text);
102
+ padding: 6px 8px;
103
+ width: 100%;
104
+ }
105
+ textarea {
106
+ min-height: 140px;
107
+ resize: vertical;
108
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
109
+ font-size: 13px;
110
+ }
111
+ html, body {
112
+ height: 100%;
113
+ overflow: hidden;
114
+ }
115
+ #app {
116
+ height: 100%;
117
+ min-height: 0;
118
+ }
119
+ @media (max-width: 900px) {
120
+ #app {
121
+ height: auto;
122
+ min-height: 100%;
123
+ }
124
+ }
125
+ .topbar {
126
+ display: flex;
127
+ align-items: center;
128
+ flex-wrap: wrap;
129
+ gap: 10px;
130
+ min-height: 48px;
131
+ padding: 8px 12px;
132
+ border-bottom: 1px solid var(--line);
133
+ background: var(--pane);
134
+ }
135
+ .brand {
136
+ font-weight: 700;
137
+ margin-right: 8px;
138
+ white-space: nowrap;
139
+ }
140
+ .status {
141
+ color: var(--muted);
142
+ flex: 1;
143
+ min-width: 0;
144
+ overflow: hidden;
145
+ text-overflow: ellipsis;
146
+ white-space: nowrap;
147
+ }
148
+ .dirty-badge {
149
+ display: none;
150
+ flex: 0 0 auto;
151
+ border: 1px solid var(--warning);
152
+ color: var(--warning);
153
+ background: var(--warning-bg);
154
+ border-radius: 999px;
155
+ padding: 2px 8px;
156
+ font-size: 12px;
157
+ }
158
+ .dirty-badge.visible {
159
+ display: inline-block;
160
+ }
161
+ .shell {
162
+ display: grid;
163
+ grid-template-columns: minmax(220px, 300px) minmax(0, 1fr);
164
+ height: calc(100vh - 48px);
165
+ min-height: 0;
166
+ transition: grid-template-columns .16s ease;
167
+ }
168
+ .shell.sidebar-collapsed {
169
+ grid-template-columns: 0 minmax(0, 1fr);
170
+ }
171
+ .sidebar {
172
+ border-right: 1px solid var(--line);
173
+ background: var(--pane);
174
+ min-width: 0;
175
+ overflow: hidden;
176
+ }
177
+ .shell.sidebar-collapsed .sidebar {
178
+ border-right: 0;
179
+ }
180
+ .side-head {
181
+ padding: 12px;
182
+ border-bottom: 1px solid var(--line);
183
+ }
184
+ .side-title {
185
+ font-weight: 650;
186
+ }
187
+ .cwd {
188
+ margin-top: 4px;
189
+ color: var(--muted);
190
+ font-size: 12px;
191
+ overflow-wrap: anywhere;
192
+ }
193
+ .stack-list {
194
+ padding: 8px;
195
+ overflow: auto;
196
+ height: calc(100% - 74px);
197
+ }
198
+ .side-empty {
199
+ color: var(--muted);
200
+ font-size: 12px;
201
+ padding: 8px;
202
+ }
203
+ .stack-row {
204
+ display: block;
205
+ width: 100%;
206
+ text-align: left;
207
+ border: 1px solid transparent;
208
+ background: transparent;
209
+ border-radius: 6px;
210
+ padding: 8px;
211
+ margin-bottom: 4px;
212
+ }
213
+ .stack-row.active {
214
+ background: var(--accent-bg);
215
+ border-color: #9dccbf;
216
+ }
217
+ .stack-row.selected {
218
+ border-color: var(--accent);
219
+ }
220
+ .stack-name {
221
+ font-weight: 650;
222
+ overflow-wrap: anywhere;
223
+ }
224
+ .stack-meta {
225
+ color: var(--muted);
226
+ font-size: 12px;
227
+ margin-top: 2px;
228
+ }
229
+ .badge {
230
+ display: inline-block;
231
+ border-radius: 999px;
232
+ padding: 1px 7px;
233
+ margin-left: 5px;
234
+ font-size: 12px;
235
+ border: 1px solid var(--line);
236
+ color: var(--muted);
237
+ }
238
+ .badge.error {
239
+ color: var(--error);
240
+ background: var(--error-bg);
241
+ border-color: #f2b8b5;
242
+ }
243
+ .badge.warning {
244
+ color: var(--warning);
245
+ background: var(--warning-bg);
246
+ border-color: #efd28b;
247
+ }
248
+ .main {
249
+ min-width: 0;
250
+ min-height: 0;
251
+ display: flex;
252
+ flex-direction: column;
253
+ }
254
+ .main-actions {
255
+ display: flex;
256
+ gap: 8px;
257
+ flex-wrap: wrap;
258
+ padding: 10px 12px;
259
+ border-bottom: 1px solid var(--line);
260
+ background: var(--pane);
261
+ }
262
+ .view-tabs {
263
+ display: flex;
264
+ gap: 6px;
265
+ padding: 8px 12px;
266
+ border-bottom: 1px solid var(--line);
267
+ background: var(--pane);
268
+ flex-wrap: wrap;
269
+ }
270
+ .view-tabs button.active {
271
+ border-color: var(--accent);
272
+ background: var(--accent-bg);
273
+ color: var(--accent);
274
+ }
275
+ .action-spacer {
276
+ flex: 1 1 auto;
277
+ min-width: 12px;
278
+ }
279
+ .metadata-panel {
280
+ border-bottom: 1px solid var(--line);
281
+ background: var(--pane-soft);
282
+ }
283
+ .metadata-head {
284
+ display: flex;
285
+ align-items: center;
286
+ gap: 10px;
287
+ padding: 8px 12px;
288
+ }
289
+ .metadata-title {
290
+ font-weight: 650;
291
+ }
292
+ .metadata-summary {
293
+ color: var(--muted);
294
+ font-size: 12px;
295
+ min-width: 0;
296
+ overflow: hidden;
297
+ text-overflow: ellipsis;
298
+ white-space: nowrap;
299
+ }
300
+ .settings {
301
+ display: grid;
302
+ grid-template-columns: repeat(4, minmax(130px, 1fr));
303
+ gap: 10px;
304
+ padding: 12px;
305
+ flex: 0 0 auto;
306
+ }
307
+ .settings textarea {
308
+ min-height: 48px;
309
+ max-height: 72px;
310
+ resize: vertical;
311
+ }
312
+ .field label {
313
+ display: block;
314
+ color: var(--muted);
315
+ font-size: 12px;
316
+ margin-bottom: 4px;
317
+ }
318
+ .checkline {
319
+ display: flex;
320
+ align-items: center;
321
+ gap: 8px;
322
+ min-height: 32px;
323
+ }
324
+ .checkline input {
325
+ width: auto;
326
+ }
327
+ .workspace {
328
+ display: grid;
329
+ grid-template-columns: minmax(230px, 340px) minmax(0, 1fr);
330
+ flex: 1;
331
+ min-height: 0;
332
+ }
333
+ .tab-panel {
334
+ display: none;
335
+ flex: 1;
336
+ min-height: 0;
337
+ overflow: auto;
338
+ padding: 12px;
339
+ background: var(--pane-soft);
340
+ }
341
+ .tab-panel.open {
342
+ display: block;
343
+ }
344
+ .tab-section {
345
+ border: 1px solid var(--line);
346
+ border-radius: 6px;
347
+ background: var(--pane);
348
+ padding: 10px;
349
+ margin-bottom: 12px;
350
+ }
351
+ .tab-section-title {
352
+ font-weight: 650;
353
+ margin-bottom: 4px;
354
+ }
355
+ .tab-section-meta {
356
+ color: var(--muted);
357
+ font-size: 12px;
358
+ margin-bottom: 10px;
359
+ }
360
+ .items-pane {
361
+ border-right: 1px solid var(--line);
362
+ background: var(--pane);
363
+ min-width: 0;
364
+ min-height: 0;
365
+ display: flex;
366
+ flex-direction: column;
367
+ }
368
+ .pane-head {
369
+ display: flex;
370
+ align-items: center;
371
+ justify-content: space-between;
372
+ gap: 8px;
373
+ padding: 10px 12px;
374
+ border-bottom: 1px solid var(--line);
375
+ font-weight: 650;
376
+ }
377
+ .item-tools {
378
+ display: flex;
379
+ gap: 6px;
380
+ padding: 8px 12px;
381
+ border-bottom: 1px solid var(--line);
382
+ flex: 0 0 auto;
383
+ }
384
+ .item-tools-spacer {
385
+ flex: 1 1 auto;
386
+ min-width: 8px;
387
+ }
388
+ .item-list {
389
+ padding: 8px;
390
+ overflow: auto;
391
+ flex: 1;
392
+ min-height: 0;
393
+ }
394
+ .item-list.drag-active {
395
+ background: var(--accent-bg);
396
+ }
397
+ .item-row {
398
+ width: 100%;
399
+ text-align: left;
400
+ border: 1px solid var(--line);
401
+ background: var(--row);
402
+ border-radius: 6px;
403
+ padding: 8px;
404
+ margin-bottom: 6px;
405
+ display: grid;
406
+ grid-template-columns: 18px minmax(0, 1fr) 48px;
407
+ gap: 8px;
408
+ align-items: center;
409
+ cursor: grab;
410
+ position: relative;
411
+ }
412
+ .item-row:active {
413
+ cursor: grabbing;
414
+ }
415
+ .item-row.selected {
416
+ border-color: var(--accent);
417
+ background: var(--accent-bg);
418
+ }
419
+ .item-row.disabled {
420
+ opacity: .62;
421
+ }
422
+ .item-row.dragging {
423
+ border-style: dashed;
424
+ opacity: .58;
425
+ }
426
+ .item-row.drop-before::before,
427
+ .item-row.drop-after::after {
428
+ content: "";
429
+ position: absolute;
430
+ left: 6px;
431
+ right: 6px;
432
+ height: 4px;
433
+ border-radius: 999px;
434
+ background: var(--accent);
435
+ box-shadow: 0 0 0 3px var(--accent-bg);
436
+ pointer-events: none;
437
+ z-index: 2;
438
+ }
439
+ .item-row.drop-before::before {
440
+ top: -6px;
441
+ }
442
+ .item-row.drop-after::after {
443
+ bottom: -6px;
444
+ }
445
+ .drag-handle {
446
+ color: var(--muted);
447
+ font-size: 20px;
448
+ line-height: 1;
449
+ text-align: center;
450
+ user-select: none;
451
+ }
452
+ .item-toggle {
453
+ width: 44px;
454
+ min-height: 26px;
455
+ padding: 2px 0;
456
+ border-radius: 999px;
457
+ font-size: 12px;
458
+ cursor: pointer;
459
+ }
460
+ .item-toggle.enabled {
461
+ border-color: var(--accent);
462
+ background: var(--accent);
463
+ color: white;
464
+ }
465
+ .item-toggle.disabled {
466
+ border-color: var(--line-strong);
467
+ background: var(--control-muted);
468
+ color: var(--muted);
469
+ }
470
+ .item-badge {
471
+ display: inline-block;
472
+ border-radius: 999px;
473
+ padding: 0 6px;
474
+ margin-left: 6px;
475
+ font-size: 11px;
476
+ line-height: 18px;
477
+ border: 1px solid var(--line);
478
+ }
479
+ .item-badge.error {
480
+ color: var(--error);
481
+ background: var(--error-bg);
482
+ border-color: var(--error);
483
+ }
484
+ .item-badge.warning {
485
+ color: var(--warning);
486
+ background: var(--warning-bg);
487
+ border-color: var(--warning);
488
+ }
489
+ .item-title {
490
+ font-weight: 650;
491
+ overflow-wrap: anywhere;
492
+ }
493
+ .item-meta {
494
+ color: var(--muted);
495
+ font-size: 12px;
496
+ margin-top: 2px;
497
+ }
498
+ .editor-pane {
499
+ min-width: 0;
500
+ min-height: 0;
501
+ display: flex;
502
+ flex-direction: column;
503
+ background: var(--pane-soft);
504
+ }
505
+ .item-editor {
506
+ flex: 1;
507
+ min-height: 0;
508
+ overflow: hidden;
509
+ }
510
+ .item-form {
511
+ display: flex;
512
+ flex-direction: column;
513
+ gap: 10px;
514
+ padding: 12px;
515
+ border-bottom: 1px solid var(--line);
516
+ height: 100%;
517
+ min-height: 0;
518
+ overflow: hidden;
519
+ }
520
+ .item-fields {
521
+ display: grid;
522
+ grid-template-columns: repeat(4, minmax(120px, 1fr));
523
+ gap: 10px;
524
+ flex: 0 0 auto;
525
+ }
526
+ .item-body {
527
+ flex: 1;
528
+ min-height: 0;
529
+ display: flex;
530
+ }
531
+ .item-body > .field {
532
+ width: 100%;
533
+ }
534
+ .wide {
535
+ grid-column: 1 / -1;
536
+ }
537
+ .content-field {
538
+ display: flex;
539
+ flex-direction: column;
540
+ min-height: 0;
541
+ }
542
+ .content-field textarea {
543
+ flex: 1;
544
+ min-height: 0;
545
+ height: 100%;
546
+ resize: none;
547
+ }
548
+ .slot-options {
549
+ display: flex;
550
+ flex-direction: column;
551
+ min-height: 0;
552
+ }
553
+ .segmented {
554
+ display: inline-flex;
555
+ gap: 4px;
556
+ margin-bottom: 8px;
557
+ }
558
+ .segmented button {
559
+ min-height: 28px;
560
+ padding: 3px 9px;
561
+ }
562
+ .segmented button.active {
563
+ border-color: var(--accent);
564
+ background: var(--accent-bg);
565
+ color: var(--accent);
566
+ }
567
+ .options-grid {
568
+ display: grid;
569
+ grid-template-columns: repeat(3, minmax(150px, 1fr));
570
+ gap: 10px;
571
+ overflow: auto;
572
+ padding-right: 4px;
573
+ flex: 1;
574
+ min-height: 0;
575
+ }
576
+ .option-note {
577
+ color: var(--muted);
578
+ font-size: 12px;
579
+ }
580
+ .json-options {
581
+ flex: 1;
582
+ min-height: 0;
583
+ height: 100%;
584
+ resize: none;
585
+ }
586
+ .empty {
587
+ color: var(--muted);
588
+ padding: 24px;
589
+ }
590
+ .empty-title {
591
+ color: var(--text);
592
+ font-weight: 650;
593
+ margin-bottom: 4px;
594
+ }
595
+ .empty-actions {
596
+ display: flex;
597
+ gap: 8px;
598
+ flex-wrap: wrap;
599
+ margin-top: 14px;
600
+ }
601
+ .diagnostics {
602
+ border-top: 1px solid var(--line);
603
+ background: var(--pane);
604
+ flex: none;
605
+ min-height: 0;
606
+ }
607
+ .diagnostics-head {
608
+ display: flex;
609
+ align-items: center;
610
+ gap: 8px;
611
+ width: 100%;
612
+ padding: 6px 12px;
613
+ border: 0;
614
+ background: transparent;
615
+ color: var(--muted);
616
+ font-size: 12px;
617
+ text-align: left;
618
+ }
619
+ .diagnostics-head:hover {
620
+ background: var(--control-muted);
621
+ }
622
+ .diagnostics-title {
623
+ flex: 1;
624
+ font-weight: 650;
625
+ }
626
+ .diagnostics-chevron {
627
+ transition: transform .12s ease;
628
+ }
629
+ .diagnostics.collapsed .diagnostics-chevron {
630
+ transform: rotate(-90deg);
631
+ }
632
+ .diagnostics-body {
633
+ max-height: 128px;
634
+ overflow: auto;
635
+ border-top: 1px solid var(--line);
636
+ }
637
+ .diagnostics.collapsed .diagnostics-body {
638
+ display: none;
639
+ }
640
+ .diagnostic {
641
+ padding: 6px 12px;
642
+ border-bottom: 1px solid var(--line);
643
+ }
644
+ .diagnostic.error {
645
+ color: var(--error);
646
+ background: var(--error-bg);
647
+ }
648
+ .diagnostic.warning {
649
+ color: var(--warning);
650
+ background: var(--warning-bg);
651
+ }
652
+ .diagnostic.info {
653
+ color: var(--muted);
654
+ }
655
+ .preview {
656
+ display: none;
657
+ position: fixed;
658
+ inset: 0;
659
+ z-index: 100;
660
+ align-items: stretch;
661
+ justify-content: center;
662
+ background: rgba(15, 23, 42, .38);
663
+ color: var(--text);
664
+ margin: 0;
665
+ padding: 24px;
666
+ overflow: hidden;
667
+ }
668
+ .preview.open {
669
+ display: flex;
670
+ }
671
+ .preview-dialog {
672
+ width: min(1220px, calc(100vw - 48px));
673
+ height: min(900px, calc(100vh - 48px));
674
+ border: 1px solid var(--line-strong);
675
+ border-radius: 8px;
676
+ background: var(--pane-soft);
677
+ box-shadow: 0 18px 60px var(--shadow);
678
+ display: flex;
679
+ flex-direction: column;
680
+ overflow: hidden;
681
+ }
682
+ .preview-head {
683
+ display: flex;
684
+ align-items: center;
685
+ gap: 8px;
686
+ padding: 10px 12px;
687
+ border-bottom: 1px solid var(--line);
688
+ background: var(--pane);
689
+ flex: 0 0 auto;
690
+ }
691
+ .preview-body {
692
+ padding: 10px 12px 14px;
693
+ overflow: auto;
694
+ flex: 1;
695
+ min-height: 0;
696
+ }
697
+ .preview-actions {
698
+ margin-left: auto;
699
+ display: flex;
700
+ align-items: center;
701
+ gap: 8px;
702
+ }
703
+ .preview-title {
704
+ font-weight: 650;
705
+ }
706
+ .preview-meta {
707
+ color: var(--muted);
708
+ font-size: 12px;
709
+ }
710
+ .preview-section {
711
+ border: 1px solid var(--line);
712
+ border-radius: 6px;
713
+ background: var(--row);
714
+ margin-bottom: 8px;
715
+ overflow: hidden;
716
+ }
717
+ .preview-section summary {
718
+ display: flex;
719
+ align-items: center;
720
+ gap: 8px;
721
+ padding: 8px 10px;
722
+ cursor: pointer;
723
+ list-style: none;
724
+ border-bottom: 1px solid transparent;
725
+ }
726
+ .preview-section[open] summary {
727
+ border-bottom-color: var(--line);
728
+ }
729
+ .preview-section summary::-webkit-details-marker {
730
+ display: none;
731
+ }
732
+ .preview-section summary::before {
733
+ content: "▶";
734
+ color: var(--muted);
735
+ font-size: 10px;
736
+ }
737
+ .preview-section[open] summary::before {
738
+ content: "▼";
739
+ }
740
+ .preview-text {
741
+ margin: 0;
742
+ padding: 10px;
743
+ background: var(--code-bg);
744
+ color: var(--code-text);
745
+ overflow: auto;
746
+ max-height: min(62vh, 680px);
747
+ white-space: pre-wrap;
748
+ font: 12px/1.45 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
749
+ }
750
+ .preview-copy {
751
+ min-height: 26px;
752
+ padding: 2px 8px;
753
+ font-size: 12px;
754
+ }
755
+ .modal {
756
+ display: none;
757
+ position: fixed;
758
+ inset: 0;
759
+ z-index: 95;
760
+ align-items: stretch;
761
+ justify-content: center;
762
+ background: rgba(15, 23, 42, .34);
763
+ padding: 24px;
764
+ }
765
+ .modal.open {
766
+ display: flex;
767
+ }
768
+ .modal-dialog {
769
+ width: min(1280px, calc(100vw - 48px));
770
+ height: min(860px, calc(100vh - 48px));
771
+ border: 1px solid var(--line-strong);
772
+ border-radius: 8px;
773
+ background: var(--pane);
774
+ box-shadow: 0 18px 60px var(--shadow);
775
+ display: flex;
776
+ flex-direction: column;
777
+ overflow: hidden;
778
+ }
779
+ .modal-head {
780
+ display: flex;
781
+ align-items: center;
782
+ gap: 8px;
783
+ padding: 10px 12px;
784
+ border-bottom: 1px solid var(--line);
785
+ }
786
+ .modal-title {
787
+ font-weight: 650;
788
+ }
789
+ .modal-meta {
790
+ color: var(--muted);
791
+ font-size: 12px;
792
+ }
793
+ .modal-actions {
794
+ margin-left: auto;
795
+ display: flex;
796
+ align-items: center;
797
+ gap: 8px;
798
+ }
799
+ .modal-body {
800
+ flex: 1;
801
+ min-height: 0;
802
+ overflow: auto;
803
+ padding: 12px;
804
+ background: var(--pane-soft);
805
+ }
806
+ .modal-toolbar {
807
+ display: flex;
808
+ gap: 8px;
809
+ align-items: center;
810
+ margin-bottom: 10px;
811
+ }
812
+ .modal-body.json-modal {
813
+ display: flex;
814
+ flex-direction: column;
815
+ }
816
+ .modal-spacer {
817
+ flex: 1;
818
+ }
819
+ .data-table {
820
+ display: flex;
821
+ flex-direction: column;
822
+ gap: 6px;
823
+ }
824
+ .data-row {
825
+ display: grid;
826
+ gap: 8px;
827
+ align-items: start;
828
+ padding: 8px;
829
+ border: 1px solid var(--line);
830
+ border-radius: 6px;
831
+ background: var(--row);
832
+ }
833
+ .data-row.header {
834
+ color: var(--muted);
835
+ font-size: 12px;
836
+ font-weight: 650;
837
+ background: transparent;
838
+ border-color: transparent;
839
+ padding-top: 0;
840
+ padding-bottom: 0;
841
+ }
842
+ .variable-row {
843
+ grid-template-columns: minmax(160px, 260px) minmax(220px, 1fr) 86px;
844
+ }
845
+ .definition-row {
846
+ grid-template-columns: minmax(150px, 210px) minmax(100px, 140px) minmax(90px, 120px) minmax(180px, 1fr) minmax(190px, 260px) minmax(110px, 130px) minmax(110px, 130px) 86px;
847
+ }
848
+ .session-row {
849
+ grid-template-columns: minmax(160px, 240px) minmax(220px, 1fr) minmax(180px, 260px) 168px;
850
+ }
851
+ .policy-row {
852
+ grid-template-columns: minmax(110px, 150px) minmax(230px, 290px) minmax(220px, 1fr) minmax(220px, 1fr) minmax(150px, 220px);
853
+ }
854
+ .policy-title {
855
+ font-weight: 650;
856
+ margin-bottom: 3px;
857
+ }
858
+ .policy-mode {
859
+ display: flex;
860
+ flex-wrap: wrap;
861
+ margin-bottom: 0;
862
+ }
863
+ .policy-patterns {
864
+ min-height: 96px;
865
+ }
866
+ .selected-patterns {
867
+ display: flex;
868
+ flex-wrap: wrap;
869
+ gap: 6px;
870
+ margin-bottom: 8px;
871
+ }
872
+ .selected-pattern-chip {
873
+ min-height: 26px;
874
+ padding: 2px 7px;
875
+ font-size: 12px;
876
+ border-color: var(--accent);
877
+ background: var(--accent-bg);
878
+ color: var(--accent);
879
+ overflow-wrap: anywhere;
880
+ }
881
+ .selected-pattern-chip span {
882
+ margin-left: 6px;
883
+ color: var(--muted);
884
+ }
885
+ .selected-pattern-empty {
886
+ color: var(--muted);
887
+ font-size: 12px;
888
+ min-height: 26px;
889
+ display: inline-flex;
890
+ align-items: center;
891
+ }
892
+ .policy-summary {
893
+ color: var(--muted);
894
+ font-size: 12px;
895
+ overflow-wrap: anywhere;
896
+ }
897
+ .resource-picker label {
898
+ display: block;
899
+ color: var(--muted);
900
+ font-size: 12px;
901
+ margin-bottom: 4px;
902
+ }
903
+ .resource-list {
904
+ display: flex;
905
+ flex-wrap: wrap;
906
+ gap: 6px;
907
+ max-height: 132px;
908
+ overflow: auto;
909
+ padding-right: 2px;
910
+ }
911
+ .resource-filter {
912
+ margin-bottom: 8px;
913
+ }
914
+ .resource-chip {
915
+ max-width: 100%;
916
+ min-height: 26px;
917
+ padding: 2px 7px;
918
+ font-size: 12px;
919
+ overflow-wrap: anywhere;
920
+ }
921
+ .resource-chip.active {
922
+ border-color: var(--accent);
923
+ background: var(--accent-bg);
924
+ color: var(--accent);
925
+ }
926
+ .resource-chip.hidden {
927
+ border-style: dashed;
928
+ opacity: .72;
929
+ }
930
+ .resource-empty {
931
+ color: var(--muted);
932
+ font-size: 12px;
933
+ border: 1px dashed var(--line);
934
+ border-radius: 6px;
935
+ padding: 8px;
936
+ }
937
+ .regex-row {
938
+ grid-template-columns: 72px minmax(0, 1fr) 86px;
939
+ }
940
+ .regex-controls {
941
+ display: flex;
942
+ flex-direction: column;
943
+ gap: 6px;
944
+ }
945
+ .regex-fields {
946
+ display: grid;
947
+ grid-template-columns: repeat(6, minmax(110px, 1fr));
948
+ gap: 8px;
949
+ }
950
+ .regex-fields .span-2 {
951
+ grid-column: span 2;
952
+ }
953
+ .regex-fields .span-3 {
954
+ grid-column: span 3;
955
+ }
956
+ .regex-fields .wide {
957
+ grid-column: 1 / -1;
958
+ }
959
+ .regex-checks {
960
+ display: flex;
961
+ flex-wrap: wrap;
962
+ gap: 8px 12px;
963
+ min-height: 32px;
964
+ align-items: center;
965
+ }
966
+ .regex-checks label {
967
+ color: var(--text);
968
+ font-size: 13px;
969
+ margin: 0;
970
+ }
971
+ .regex-checks input {
972
+ width: auto;
973
+ }
974
+ .regex-warning {
975
+ color: var(--warning);
976
+ background: var(--warning-bg);
977
+ border: 1px solid var(--warning);
978
+ border-radius: 6px;
979
+ padding: 6px 8px;
980
+ font-size: 12px;
981
+ }
982
+ .data-row textarea {
983
+ min-height: 56px;
984
+ resize: vertical;
985
+ }
986
+ .row-actions {
987
+ display: flex;
988
+ gap: 6px;
989
+ }
990
+ .raw-json-editor {
991
+ flex: 1;
992
+ min-height: 0;
993
+ height: 100%;
994
+ resize: none;
995
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
996
+ font-size: 12px;
997
+ }
998
+ .tab-section .raw-json-editor {
999
+ height: min(48vh, 520px);
1000
+ min-height: 280px;
1001
+ }
1002
+ @media (max-width: 900px) {
1003
+ .shell, .settings {
1004
+ grid-template-columns: 1fr;
1005
+ }
1006
+ .workspace {
1007
+ display: block;
1008
+ }
1009
+ .item-form {
1010
+ height: auto;
1011
+ overflow: visible;
1012
+ }
1013
+ .item-fields {
1014
+ grid-template-columns: repeat(2, minmax(120px, 1fr));
1015
+ }
1016
+ .content-field textarea {
1017
+ height: auto;
1018
+ min-height: 220px;
1019
+ resize: vertical;
1020
+ }
1021
+ html, body {
1022
+ overflow: auto;
1023
+ }
1024
+ .shell {
1025
+ height: auto;
1026
+ min-height: calc(100vh - 92px);
1027
+ }
1028
+ .sidebar, .items-pane {
1029
+ border-right: 0;
1030
+ border-bottom: 1px solid var(--line);
1031
+ }
1032
+ .metadata-head {
1033
+ align-items: flex-start;
1034
+ flex-direction: column;
1035
+ }
1036
+ .metadata-summary {
1037
+ white-space: normal;
1038
+ }
1039
+ .item-list {
1040
+ max-height: 260px;
1041
+ }
1042
+ .variable-row, .definition-row, .session-row, .policy-row, .regex-row {
1043
+ grid-template-columns: 1fr;
1044
+ }
1045
+ .regex-fields {
1046
+ grid-template-columns: 1fr;
1047
+ }
1048
+ .regex-fields .span-2, .regex-fields .span-3 {
1049
+ grid-column: 1 / -1;
1050
+ }
1051
+ }
1052
+ `;
1053
+ //# sourceMappingURL=styles.js.map