@zihanw/pi-forge 0.3.2 → 0.4.0-beta.1

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