@firstpick/pi-package-webui 0.1.9 → 0.2.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.
@@ -0,0 +1,666 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "generatedFrom": "WEBUI_TUI_NATIVE_FEATURE_PLAN.md + WEBUI_TUI_NATIVE_FEATURE_GRILL_RESULTS.md",
4
+ "statusTaxonomy": ["implemented", "degraded", "unsupported"],
5
+ "guardTaxonomy": ["none", "confirmation", "localhost", "trusted-context", "feature-flag", "upstream-rpc", "read-only"],
6
+ "surfaces": [
7
+ {
8
+ "id": "/settings",
9
+ "kind": "slash-command",
10
+ "category": "native-command",
11
+ "title": "Settings selector/editor",
12
+ "command": { "name": "settings", "description": "Open settings menu" },
13
+ "webStatus": "degraded",
14
+ "priority": "P1",
15
+ "sensitive": false,
16
+ "guards": ["none"],
17
+ "currentBehavior": "Browser dialog covers high-frequency runtime settings only.",
18
+ "targetBehavior": "Expose all documented settings with runtime/global/project scopes, source visibility, validation, and reload/restart labels."
19
+ },
20
+ {
21
+ "id": "/model",
22
+ "kind": "slash-command",
23
+ "category": "native-command",
24
+ "title": "Model selector",
25
+ "command": { "name": "model", "description": "Select model (opens selector UI)" },
26
+ "webStatus": "implemented",
27
+ "priority": "P1",
28
+ "sensitive": false,
29
+ "guards": ["none"],
30
+ "currentBehavior": "Browser-native selector uses RPC model data and set-model endpoint.",
31
+ "targetBehavior": "Keep browser-native selector in parity with native model switching."
32
+ },
33
+ {
34
+ "id": "/theme",
35
+ "kind": "slash-command",
36
+ "category": "native-command",
37
+ "title": "Theme selector",
38
+ "command": { "name": "theme", "description": "Select Web UI theme" },
39
+ "webStatus": "degraded",
40
+ "priority": "P1",
41
+ "sensitive": false,
42
+ "guards": ["none"],
43
+ "currentBehavior": "Browser theme selection works; Pi terminal theme switching is TUI-only/degraded in RPC mode.",
44
+ "targetBehavior": "Document the browser-vs-terminal theme difference and add native theme API support if upstream RPC exposes it."
45
+ },
46
+ {
47
+ "id": "/scoped-models",
48
+ "kind": "slash-command",
49
+ "category": "native-command",
50
+ "title": "Scoped model editor",
51
+ "command": { "name": "scoped-models", "description": "Enable/disable models for Ctrl+P cycling" },
52
+ "webStatus": "degraded",
53
+ "priority": "P1",
54
+ "sensitive": false,
55
+ "guards": ["none"],
56
+ "currentBehavior": "Informational dialog plus footer scoped picker.",
57
+ "targetBehavior": "Searchable model table, provider toggles, ordered explicit provider/model IDs, advanced patterns, and safe global/project persistence."
58
+ },
59
+ {
60
+ "id": "/export",
61
+ "kind": "slash-command",
62
+ "category": "native-command",
63
+ "title": "Session export",
64
+ "command": { "name": "export", "description": "Export session (HTML default, or specify path: .html/.jsonl)" },
65
+ "webStatus": "degraded",
66
+ "priority": "P1",
67
+ "sensitive": true,
68
+ "guards": ["localhost", "confirmation", "feature-flag"],
69
+ "currentBehavior": "No-path HTML browser download and explicit new .html/.jsonl server paths are implemented; overwrite confirmation UI is still pending.",
70
+ "targetBehavior": "No-path browser download via short-lived opaque token; explicit server paths only from trusted context with overwrite confirmation."
71
+ },
72
+ {
73
+ "id": "/import",
74
+ "kind": "slash-command",
75
+ "category": "native-command",
76
+ "title": "Session import",
77
+ "command": { "name": "import", "description": "Import and resume a session from a JSONL file" },
78
+ "webStatus": "unsupported",
79
+ "priority": "P2",
80
+ "sensitive": true,
81
+ "guards": ["confirmation", "feature-flag"],
82
+ "currentBehavior": "No upload/import command flow exists yet.",
83
+ "targetBehavior": "Validate JSONL before copying, copy into configured session directory, preserve cwd metadata, warn on cwd mismatch, then switch."
84
+ },
85
+ {
86
+ "id": "/share",
87
+ "kind": "slash-command",
88
+ "category": "native-command",
89
+ "title": "Session share/preview",
90
+ "command": { "name": "share", "description": "Share session as a local preview or configured remote provider" },
91
+ "webStatus": "unsupported",
92
+ "priority": "P2",
93
+ "sensitive": true,
94
+ "guards": ["localhost", "confirmation", "feature-flag"],
95
+ "currentBehavior": "Missing in Web UI.",
96
+ "targetBehavior": "Local redacted preview first; remote publishing remains unavailable until explicit provider/config/confirmation exists."
97
+ },
98
+ {
99
+ "id": "/copy",
100
+ "kind": "slash-command",
101
+ "category": "native-command",
102
+ "title": "Copy last assistant message",
103
+ "command": { "name": "copy", "description": "Copy last agent message to clipboard" },
104
+ "webStatus": "implemented",
105
+ "priority": "P1",
106
+ "sensitive": false,
107
+ "guards": ["none"],
108
+ "currentBehavior": "Server retrieves last assistant text; browser copies returned text.",
109
+ "targetBehavior": "Keep clipboard response shape in native-command adapter."
110
+ },
111
+ {
112
+ "id": "/name",
113
+ "kind": "slash-command",
114
+ "category": "native-command",
115
+ "title": "Name session/tab",
116
+ "command": { "name": "name", "description": "Set session display name" },
117
+ "webStatus": "implemented",
118
+ "priority": "P1",
119
+ "sensitive": false,
120
+ "guards": ["none"],
121
+ "currentBehavior": "RPC set_session_name also renames the browser tab.",
122
+ "targetBehavior": "Preserve append-only session metadata behavior and tab refresh."
123
+ },
124
+ {
125
+ "id": "/session",
126
+ "kind": "slash-command",
127
+ "category": "native-command",
128
+ "title": "Session info",
129
+ "command": { "name": "session", "description": "Show session info and stats" },
130
+ "webStatus": "implemented",
131
+ "priority": "P1",
132
+ "sensitive": false,
133
+ "guards": ["read-only"],
134
+ "currentBehavior": "Shows state, tab metadata, cwd, model, queue, session file, and stats.",
135
+ "targetBehavior": "Keep read-only transcript card output stable."
136
+ },
137
+ {
138
+ "id": "/changelog",
139
+ "kind": "slash-command",
140
+ "category": "native-command",
141
+ "title": "Changelog viewer",
142
+ "command": { "name": "changelog", "description": "Show changelog entries" },
143
+ "webStatus": "unsupported",
144
+ "priority": "P2",
145
+ "sensitive": false,
146
+ "guards": ["read-only"],
147
+ "currentBehavior": "Missing in Web UI.",
148
+ "targetBehavior": "Read Pi's canonical changelog source and render new/current entries first with full-history search/toggle."
149
+ },
150
+ {
151
+ "id": "/hotkeys",
152
+ "kind": "slash-command",
153
+ "category": "native-command",
154
+ "title": "Hotkey table",
155
+ "command": { "name": "hotkeys", "description": "Show all keyboard shortcuts" },
156
+ "webStatus": "degraded",
157
+ "priority": "P1",
158
+ "sensitive": false,
159
+ "guards": ["read-only"],
160
+ "currentBehavior": "Returns Web UI-specific help only.",
161
+ "targetBehavior": "Show native action IDs/effective bindings plus separate Web/browser-specific section and TUI-only labels."
162
+ },
163
+ {
164
+ "id": "/fork",
165
+ "kind": "slash-command",
166
+ "category": "native-command",
167
+ "title": "Fork from user message",
168
+ "command": { "name": "fork", "description": "Create a new fork from a previous user message" },
169
+ "webStatus": "degraded",
170
+ "priority": "P1",
171
+ "sensitive": false,
172
+ "guards": ["confirmation"],
173
+ "currentBehavior": "Browser selector can choose fork points and run backend helper.",
174
+ "targetBehavior": "Keep selector parity and document any native branch-summary differences."
175
+ },
176
+ {
177
+ "id": "/clone",
178
+ "kind": "slash-command",
179
+ "category": "native-command",
180
+ "title": "Clone current session",
181
+ "command": { "name": "clone", "description": "Duplicate the current session at the current position" },
182
+ "webStatus": "implemented",
183
+ "priority": "P1",
184
+ "sensitive": false,
185
+ "guards": ["confirmation"],
186
+ "currentBehavior": "Browser command runs backend clone helper and refreshes tab metadata.",
187
+ "targetBehavior": "Keep tab-scoped clone semantics and visible native command result."
188
+ },
189
+ {
190
+ "id": "/tree",
191
+ "kind": "slash-command",
192
+ "category": "native-command",
193
+ "title": "Session tree navigation",
194
+ "command": { "name": "tree", "description": "Navigate session tree (switch branches)" },
195
+ "webStatus": "degraded",
196
+ "priority": "P1",
197
+ "sensitive": false,
198
+ "guards": ["confirmation"],
199
+ "currentBehavior": "Partial browser selector lists tree entries and navigates through Web UI helper command.",
200
+ "targetBehavior": "Add all native filters, fold state, append-only labels, composer restore, and explicit summarization opt-in."
201
+ },
202
+ {
203
+ "id": "/login",
204
+ "kind": "slash-command",
205
+ "category": "native-command",
206
+ "title": "Provider login",
207
+ "command": { "name": "login", "description": "Configure provider authentication" },
208
+ "webStatus": "degraded",
209
+ "priority": "P1",
210
+ "sensitive": true,
211
+ "guards": ["trusted-context", "confirmation", "feature-flag"],
212
+ "currentBehavior": "Browser shows non-secret guidance only.",
213
+ "targetBehavior": "Support OAuth/device-code/API-key providers through server AuthStorage; API keys only over trusted contexts and never browser storage/logs/transcripts."
214
+ },
215
+ {
216
+ "id": "/logout",
217
+ "kind": "slash-command",
218
+ "category": "native-command",
219
+ "title": "Provider logout",
220
+ "command": { "name": "logout", "description": "Remove provider authentication" },
221
+ "webStatus": "degraded",
222
+ "priority": "P1",
223
+ "sensitive": true,
224
+ "guards": ["confirmation", "feature-flag"],
225
+ "currentBehavior": "Browser shows guidance only.",
226
+ "targetBehavior": "List auth.json credentials only, label env/config credentials as not removable here, confirm per provider, and refresh auth/model state."
227
+ },
228
+ {
229
+ "id": "/new",
230
+ "kind": "slash-command",
231
+ "category": "native-command",
232
+ "title": "New session",
233
+ "command": { "name": "new", "description": "Start a new session" },
234
+ "webStatus": "implemented",
235
+ "priority": "P1",
236
+ "sensitive": false,
237
+ "guards": ["confirmation"],
238
+ "currentBehavior": "RPC new_session starts a new session in the active tab.",
239
+ "targetBehavior": "Keep tab-scoped new-session behavior and visible command output."
240
+ },
241
+ {
242
+ "id": "/compact",
243
+ "kind": "slash-command",
244
+ "category": "native-command",
245
+ "title": "Manual compaction",
246
+ "command": { "name": "compact", "description": "Manually compact the session context" },
247
+ "webStatus": "implemented",
248
+ "priority": "P1",
249
+ "sensitive": false,
250
+ "guards": ["confirmation"],
251
+ "currentBehavior": "RPC compact runs optional custom instructions and returns visible output.",
252
+ "targetBehavior": "Keep visible command card and idle/compaction guards."
253
+ },
254
+ {
255
+ "id": "/resume",
256
+ "kind": "slash-command",
257
+ "category": "native-command",
258
+ "title": "Session resume selector",
259
+ "command": { "name": "resume", "description": "Resume a different session" },
260
+ "webStatus": "degraded",
261
+ "priority": "P1",
262
+ "sensitive": true,
263
+ "guards": ["confirmation", "feature-flag"],
264
+ "currentBehavior": "Partial browser selector supports current/all scope and switch.",
265
+ "targetBehavior": "Add sort/path/named toggles, metadata rename, safe trash delete, active/open tab guards, and compact path default."
266
+ },
267
+ {
268
+ "id": "/reload",
269
+ "kind": "slash-command",
270
+ "category": "native-command",
271
+ "title": "Reload Pi resources",
272
+ "command": { "name": "reload", "description": "Reload keybindings, extensions, skills, prompts, and themes" },
273
+ "webStatus": "implemented",
274
+ "priority": "P1",
275
+ "sensitive": false,
276
+ "guards": ["confirmation"],
277
+ "currentBehavior": "Restarts active RPC tab and resumes same session when possible.",
278
+ "targetBehavior": "Keep tab-scoped reload behavior and refresh state/events."
279
+ },
280
+ {
281
+ "id": "/quit",
282
+ "kind": "slash-command",
283
+ "category": "native-command",
284
+ "title": "Quit active tab",
285
+ "command": { "name": "quit", "description": "Quit Pi tab" },
286
+ "webStatus": "unsupported",
287
+ "priority": "P2",
288
+ "sensitive": true,
289
+ "guards": ["confirmation", "feature-flag"],
290
+ "currentBehavior": "Missing/ambiguous in Web UI.",
291
+ "targetBehavior": "Stop/close only active Pi tab, create a fresh idle tab when closing the last tab, and keep whole-server shutdown separate."
292
+ },
293
+ {
294
+ "id": "bash.include-context",
295
+ "kind": "editor-feature",
296
+ "category": "bash",
297
+ "title": "Leading ! shell command",
298
+ "webStatus": "degraded",
299
+ "priority": "P1",
300
+ "sensitive": true,
301
+ "guards": ["trusted-context", "feature-flag"],
302
+ "currentBehavior": "Composer intercepts leading ! commands, runs queued RPC bash one at a time, displays transient bash cards, and keeps output included in the next LLM context; per-item queue cancellation/confirmation UI is still pending.",
303
+ "targetBehavior": "Run RPC bash with output included in next LLM context, visible/abortable bash card, FIFO queue, per-item cancellation, and LAN shell warning."
304
+ },
305
+ {
306
+ "id": "bash.exclude-context",
307
+ "kind": "editor-feature",
308
+ "category": "bash",
309
+ "title": "Leading !! shell command",
310
+ "webStatus": "degraded",
311
+ "priority": "P1",
312
+ "sensitive": true,
313
+ "guards": ["trusted-context", "feature-flag"],
314
+ "currentBehavior": "Composer intercepts leading !! commands, runs queued RPC bash one at a time with excludeFromContext true, and displays transient bash cards; per-item queue cancellation/confirmation UI is still pending.",
315
+ "targetBehavior": "Run RPC bash with excludeFromContext true, visible/abortable card, FIFO queue, per-item cancellation, and LAN shell warning."
316
+ },
317
+ {
318
+ "id": "shortcut.model.selector",
319
+ "kind": "keyboard-shortcut",
320
+ "category": "shortcut",
321
+ "title": "Ctrl+L model selector",
322
+ "webStatus": "implemented",
323
+ "priority": "P1",
324
+ "sensitive": false,
325
+ "guards": ["none"],
326
+ "currentBehavior": "Global Web UI shortcut manager opens the browser-native /model selector with Ctrl/Cmd+L when the app is focused.",
327
+ "targetBehavior": "Open browser-native /model selector through action-ID-based shortcut manager."
328
+ },
329
+ {
330
+ "id": "shortcut.model.cycle-forward",
331
+ "kind": "keyboard-shortcut",
332
+ "category": "shortcut",
333
+ "title": "Ctrl+P scoped model cycle forward",
334
+ "webStatus": "implemented",
335
+ "priority": "P1",
336
+ "sensitive": false,
337
+ "guards": ["none"],
338
+ "currentBehavior": "Web UI intercepts Ctrl/Cmd+P while app-focused and cycles forward through scoped models or all models via server helper.",
339
+ "targetBehavior": "Cycle forward through scoped/all models with server helper and browser focus guard."
340
+ },
341
+ {
342
+ "id": "shortcut.model.cycle-backward",
343
+ "kind": "keyboard-shortcut",
344
+ "category": "shortcut",
345
+ "title": "Shift+Ctrl+P scoped model cycle backward",
346
+ "webStatus": "implemented",
347
+ "priority": "P1",
348
+ "sensitive": false,
349
+ "guards": ["none"],
350
+ "currentBehavior": "Web UI intercepts Shift+Ctrl/Cmd+P while app-focused and cycles backward through scoped models or all models via server helper.",
351
+ "targetBehavior": "Cycle backward through scoped/all models with server helper and browser focus guard."
352
+ },
353
+ {
354
+ "id": "shortcut.thinking.cycle",
355
+ "kind": "keyboard-shortcut",
356
+ "category": "shortcut",
357
+ "title": "Shift+Tab thinking level cycle",
358
+ "webStatus": "implemented",
359
+ "priority": "P1",
360
+ "sensitive": false,
361
+ "guards": ["none"],
362
+ "currentBehavior": "Web UI intercepts Shift+Tab while app-focused and uses RPC cycle_thinking_level.",
363
+ "targetBehavior": "Use RPC cycle_thinking_level outside autocomplete contexts."
364
+ },
365
+ {
366
+ "id": "shortcut.thinking.toggle",
367
+ "kind": "keyboard-shortcut",
368
+ "category": "shortcut",
369
+ "title": "Ctrl+T thinking visibility toggle",
370
+ "webStatus": "implemented",
371
+ "priority": "P1",
372
+ "sensitive": false,
373
+ "guards": ["none"],
374
+ "currentBehavior": "Web UI maps Ctrl/Cmd+T to the browser-local thinking visibility toggle.",
375
+ "targetBehavior": "Map Ctrl+T to existing browser thinking visibility state."
376
+ },
377
+ {
378
+ "id": "shortcut.tools.expand-toggle",
379
+ "kind": "keyboard-shortcut",
380
+ "category": "shortcut",
381
+ "title": "Ctrl+O global tool expansion toggle",
382
+ "webStatus": "implemented",
383
+ "priority": "P1",
384
+ "sensitive": false,
385
+ "guards": ["none"],
386
+ "currentBehavior": "Web UI maps Ctrl/Cmd+O to a browser-local global expansion preference for tool output/details and bash cards.",
387
+ "targetBehavior": "Global browser-local toggle for tool results/executions/user bash cards with per-card override until next global toggle."
388
+ },
389
+ {
390
+ "id": "shortcut.queue.follow-up",
391
+ "kind": "keyboard-shortcut",
392
+ "category": "shortcut",
393
+ "title": "Alt+Enter follow-up queue",
394
+ "webStatus": "implemented",
395
+ "priority": "P1",
396
+ "sensitive": false,
397
+ "guards": ["none"],
398
+ "currentBehavior": "Web UI maps Alt+Enter to send the composer as a follow-up when a composer payload exists.",
399
+ "targetBehavior": "Queue follow-up via shortcut with mobile-accessible fallback."
400
+ },
401
+ {
402
+ "id": "shortcut.queue.restore",
403
+ "kind": "keyboard-shortcut",
404
+ "category": "shortcut",
405
+ "title": "Alt+Up restore queued messages",
406
+ "webStatus": "degraded",
407
+ "priority": "P1",
408
+ "sensitive": false,
409
+ "guards": ["upstream-rpc"],
410
+ "currentBehavior": "Alt+Up restores the latest observed steering/follow-up queue snapshot into the composer with blank-line separators, but RPC queue clearing and attachment restore are pending upstream support.",
411
+ "targetBehavior": "Restore queued steering/follow-up FIFO into composer with separators and best-effort attachment restore."
412
+ },
413
+ {
414
+ "id": "shortcut.abort.escape",
415
+ "kind": "keyboard-shortcut",
416
+ "category": "shortcut",
417
+ "title": "Escape abort/cancel",
418
+ "webStatus": "degraded",
419
+ "priority": "P1",
420
+ "sensitive": false,
421
+ "guards": ["confirmation"],
422
+ "currentBehavior": "Escape aborts active user bash first, then active agent runs, and closes UI surfaces with tab scoping.",
423
+ "targetBehavior": "Abort active bash first where applicable; keep agent/tab scoping and clear UI cancellation rules."
424
+ },
425
+ {
426
+ "id": "shortcut.editor.clear",
427
+ "kind": "keyboard-shortcut",
428
+ "category": "shortcut",
429
+ "title": "Ctrl+C clear editor",
430
+ "webStatus": "implemented",
431
+ "priority": "P1",
432
+ "sensitive": false,
433
+ "guards": ["none"],
434
+ "currentBehavior": "Web UI clears the prompt on Ctrl/Cmd+C only when the prompt is focused and no text is selected.",
435
+ "targetBehavior": "Clear prompt only when no text is selected; no double-Ctrl+C quit initially."
436
+ },
437
+ {
438
+ "id": "editor.external-expanded-modal",
439
+ "kind": "editor-feature",
440
+ "category": "editor",
441
+ "title": "External editor parity",
442
+ "webStatus": "unsupported",
443
+ "priority": "P2",
444
+ "sensitive": false,
445
+ "guards": ["none"],
446
+ "currentBehavior": "No Ctrl+G/$VISUAL/$EDITOR browser equivalent.",
447
+ "targetBehavior": "Use browser-native expanded editor modal; Save replaces composer draft only and never sends automatically."
448
+ },
449
+ {
450
+ "id": "editor.attachments",
451
+ "kind": "editor-feature",
452
+ "category": "editor",
453
+ "title": "File/image attachments",
454
+ "webStatus": "implemented",
455
+ "priority": "P1",
456
+ "sensitive": false,
457
+ "guards": ["confirmation"],
458
+ "currentBehavior": "Picker, drag/drop, paste, and RPC image support exist for supported types.",
459
+ "targetBehavior": "Keep attachment flows covered by browser/mobile tests."
460
+ },
461
+ {
462
+ "id": "editor.slash-autocomplete",
463
+ "kind": "editor-feature",
464
+ "category": "editor",
465
+ "title": "Slash command autocomplete",
466
+ "webStatus": "implemented",
467
+ "priority": "P1",
468
+ "sensitive": false,
469
+ "guards": ["none"],
470
+ "currentBehavior": "Composer shows slash-command suggestions from native and RPC-visible commands.",
471
+ "targetBehavior": "Keep native matrix commands discoverable and label guarded/degraded states."
472
+ },
473
+ {
474
+ "id": "editor.path-suggestions",
475
+ "kind": "editor-feature",
476
+ "category": "editor",
477
+ "title": "@ path suggestions",
478
+ "webStatus": "implemented",
479
+ "priority": "P1",
480
+ "sensitive": false,
481
+ "guards": ["none"],
482
+ "currentBehavior": "Server computes @ file/path suggestions from active tab cwd and fast picks.",
483
+ "targetBehavior": "Keep path suggestions tab-scoped and capped."
484
+ },
485
+ {
486
+ "id": "session.resume.switch",
487
+ "kind": "session-action",
488
+ "category": "session",
489
+ "title": "Resume/switch session",
490
+ "webStatus": "implemented",
491
+ "priority": "P1",
492
+ "sensitive": true,
493
+ "guards": ["confirmation"],
494
+ "currentBehavior": "Switch endpoint validates .jsonl path, opens SessionManager, and sends RPC switch_session.",
495
+ "targetBehavior": "Preserve tab-scoped switch and add richer selector metadata."
496
+ },
497
+ {
498
+ "id": "session.resume.rename",
499
+ "kind": "session-action",
500
+ "category": "session",
501
+ "title": "Resume rename metadata",
502
+ "webStatus": "unsupported",
503
+ "priority": "P1",
504
+ "sensitive": false,
505
+ "guards": ["feature-flag"],
506
+ "currentBehavior": "No Web UI resume rename endpoint.",
507
+ "targetBehavior": "Append-only session_info metadata rename without file rename."
508
+ },
509
+ {
510
+ "id": "session.resume.delete",
511
+ "kind": "session-action",
512
+ "category": "session",
513
+ "title": "Resume safe delete",
514
+ "webStatus": "unsupported",
515
+ "priority": "P1",
516
+ "sensitive": true,
517
+ "guards": ["confirmation", "feature-flag"],
518
+ "currentBehavior": "No Web UI session delete endpoint.",
519
+ "targetBehavior": "Trash/noninvasive delete with active/open-tab guards and confirmation."
520
+ },
521
+ {
522
+ "id": "extension-ui.notify",
523
+ "kind": "extension-ui-method",
524
+ "category": "extension-ui",
525
+ "title": "Extension notify",
526
+ "webStatus": "implemented",
527
+ "priority": "P1",
528
+ "sensitive": false,
529
+ "guards": ["none"],
530
+ "currentBehavior": "Non-blocking extension notifications render event/transcript messages.",
531
+ "targetBehavior": "Scope non-blocking state by tab + extension + run and clear stale state."
532
+ },
533
+ {
534
+ "id": "extension-ui.set-status",
535
+ "kind": "extension-ui-method",
536
+ "category": "extension-ui",
537
+ "title": "Extension setStatus",
538
+ "webStatus": "implemented",
539
+ "priority": "P1",
540
+ "sensitive": false,
541
+ "guards": ["none"],
542
+ "currentBehavior": "Status entries are rendered in browser status area.",
543
+ "targetBehavior": "Version schema and lifecycle cleanup by tab + extension + run."
544
+ },
545
+ {
546
+ "id": "extension-ui.set-widget",
547
+ "kind": "extension-ui-method",
548
+ "category": "extension-ui",
549
+ "title": "Extension setWidget",
550
+ "webStatus": "degraded",
551
+ "priority": "P1",
552
+ "sensitive": false,
553
+ "guards": ["none"],
554
+ "currentBehavior": "Line-based widgets render in browser, with specialized todo-progress handling.",
555
+ "targetBehavior": "Semantic widget schemas before generic custom rendering."
556
+ },
557
+ {
558
+ "id": "extension-ui.set-title",
559
+ "kind": "extension-ui-method",
560
+ "category": "extension-ui",
561
+ "title": "Extension setTitle",
562
+ "webStatus": "implemented",
563
+ "priority": "P1",
564
+ "sensitive": false,
565
+ "guards": ["none"],
566
+ "currentBehavior": "Browser document title updates.",
567
+ "targetBehavior": "Scope title state and restore defaults on run/reload/tab stop."
568
+ },
569
+ {
570
+ "id": "extension-ui.set-editor-text",
571
+ "kind": "extension-ui-method",
572
+ "category": "extension-ui",
573
+ "title": "Extension set_editor_text",
574
+ "webStatus": "implemented",
575
+ "priority": "P1",
576
+ "sensitive": false,
577
+ "guards": ["none"],
578
+ "currentBehavior": "Extension request replaces composer text.",
579
+ "targetBehavior": "Keep tab-scoped composer update semantics."
580
+ },
581
+ {
582
+ "id": "extension-ui.select-confirm-input-editor",
583
+ "kind": "extension-ui-method",
584
+ "category": "extension-ui",
585
+ "title": "Blocking extension dialogs",
586
+ "webStatus": "implemented",
587
+ "priority": "P1",
588
+ "sensitive": false,
589
+ "guards": ["confirmation"],
590
+ "currentBehavior": "select/confirm/input/editor requests queue as browser dialogs and block originating tab.",
591
+ "targetBehavior": "Keep server-side pending blocker state recoverable after reload/reconnect while only originating tab waits."
592
+ },
593
+ {
594
+ "id": "extension-ui.autocomplete-provider",
595
+ "kind": "extension-ui-method",
596
+ "category": "extension-ui",
597
+ "title": "Extension autocomplete provider",
598
+ "webStatus": "unsupported",
599
+ "priority": "P2",
600
+ "sensitive": false,
601
+ "guards": ["upstream-rpc"],
602
+ "currentBehavior": "RPC mode does not expose extension autocomplete providers to Web UI.",
603
+ "targetBehavior": "Add/request semantic RPC autocomplete provider schema."
604
+ },
605
+ {
606
+ "id": "extension-ui.header-footer",
607
+ "kind": "extension-ui-method",
608
+ "category": "extension-ui",
609
+ "title": "Extension header/footer text lines",
610
+ "webStatus": "unsupported",
611
+ "priority": "P2",
612
+ "sensitive": false,
613
+ "guards": ["upstream-rpc"],
614
+ "currentBehavior": "RPC mode does not expose native custom header/footer components.",
615
+ "targetBehavior": "Add/request semantic header/footer text-line bridge before arbitrary rendering."
616
+ },
617
+ {
618
+ "id": "extension-ui.custom-component",
619
+ "kind": "extension-ui-method",
620
+ "category": "extension-ui",
621
+ "title": "Generic custom component rendering",
622
+ "webStatus": "unsupported",
623
+ "priority": "P2",
624
+ "sensitive": true,
625
+ "guards": ["upstream-rpc", "feature-flag"],
626
+ "currentBehavior": "Arbitrary TUI custom components are unavailable/degraded in RPC mode.",
627
+ "targetBehavior": "If needed after semantic methods, allow only sandboxed declarative schemas and never extension-supplied browser JavaScript."
628
+ },
629
+ {
630
+ "id": "adapter.native-command-response",
631
+ "kind": "native-command-adapter",
632
+ "category": "foundation",
633
+ "title": "Native command adapter response shape",
634
+ "webStatus": "unsupported",
635
+ "priority": "P0",
636
+ "sensitive": false,
637
+ "guards": ["none"],
638
+ "currentBehavior": "Native command handling is split between frontend selectors and server switch cases with inconsistent result shape.",
639
+ "targetBehavior": "Central server-authoritative adapter response supporting transcript cards, toasts/events, tab metadata, downloads/open URLs, clipboard text, warnings/confirmations, refresh hints, and degraded/unavailable states."
640
+ },
641
+ {
642
+ "id": "security.trust-boundaries",
643
+ "kind": "security-guard",
644
+ "category": "foundation",
645
+ "title": "Sensitive native feature trust boundaries",
646
+ "webStatus": "degraded",
647
+ "priority": "P0",
648
+ "sensitive": true,
649
+ "guards": ["localhost", "trusted-context", "confirmation"],
650
+ "currentBehavior": "Some endpoints are localhost-gated; native parity features do not yet share a common policy.",
651
+ "targetBehavior": "Shared localhost/trusted-context/confirmation policy for login/logout/share/import/export/quit/bash/optional installs/network exposure."
652
+ },
653
+ {
654
+ "id": "tests.native-parity-harness",
655
+ "kind": "test-harness",
656
+ "category": "foundation",
657
+ "title": "Native parity helper/endpoint tests",
658
+ "webStatus": "degraded",
659
+ "priority": "P0",
660
+ "sensitive": false,
661
+ "guards": ["none"],
662
+ "currentBehavior": "Static tests exist; no focused native parity matrix/helper harness yet.",
663
+ "targetBehavior": "Fixture-driven server helper tests first, lightweight HTTP endpoint tests where request semantics matter, and fake RPC tab adapters in normal CI."
664
+ }
665
+ ]
666
+ }