@hachej/boring-workspace 0.1.64 → 0.1.65
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.
- package/dist/FileTree-B_fRS4Om.js +230 -0
- package/dist/MarkdownEditor-C55gVDyW.js +743 -0
- package/dist/WorkspaceLoadingState-D3i4X-eH.js +847 -0
- package/dist/WorkspaceProvider-Ddx7GByq.js +8770 -0
- package/dist/app-front.d.ts +79 -2
- package/dist/app-front.js +3110 -2467
- package/dist/app-server.d.ts +2 -2
- package/dist/app-server.js +6 -4
- package/dist/boring-workspace.css +2 -1
- package/dist/charts.d.ts +6 -1
- package/dist/charts.js +131 -138
- package/dist/plugin.d.ts +64 -1
- package/dist/plugin.js +32 -0
- package/dist/rolldown-runtime-Dqa2HsxW.js +20 -0
- package/dist/{runtimeEnv-HolIkcoB.d.ts → runtimeEnv-CU-c4kaV.d.ts} +7 -0
- package/dist/server.d.ts +2 -2
- package/dist/server.js +4 -3
- package/dist/testing-e2e.d.ts +5 -0
- package/dist/testing-e2e.js +33 -42
- package/dist/testing.d.ts +6 -1
- package/dist/testing.js +9474 -10814
- package/dist/utils-BRcxFdrz.js +8 -0
- package/dist/workspace.css +2756 -290
- package/dist/workspace.d.ts +132 -15
- package/dist/workspace.js +568 -734
- package/docs/plans/archive/CODE_OWNERSHIP_CLEANUP_PLAN.md +1 -1
- package/docs/plans/archive/DECLARATIVE_LAYOUT_MIGRATION.md +4 -4
- package/docs/plans/archive/GENERIC_EXPLORER_PLUGIN_PLAN.md +10 -10
- package/docs/plans/archive/PLUGIN_MODEL.md +37 -37
- package/docs/plans/archive/WORKSPACE_V2_PLAN.md +2 -2
- package/package.json +50 -50
- package/dist/FileTree-DjhAzlg3.js +0 -315
- package/dist/MarkdownEditor-CeN7n6mw.js +0 -610
- package/dist/WorkspaceLoadingState-D4SB2awA.js +0 -867
- package/dist/WorkspaceProvider-CEZUOy1M.js +0 -8725
- package/dist/utils-B6yFEsav.js +0 -8
|
@@ -367,7 +367,7 @@ Phase 5 is opportunistic — none of it blocks Phases 1–4.
|
|
|
367
367
|
1. `packages/workspace/e2e/fixture/**` + migrated generic specs.
|
|
368
368
|
2. Reduced `apps/boring-macro-v2/e2e/**` containing only macro-specific specs.
|
|
369
369
|
3. Playground mock backend deduplicated with workspace testing utility.
|
|
370
|
-
4. Follow-up extraction
|
|
370
|
+
4. Follow-up extraction tasks:
|
|
371
371
|
- core server helpers from full-app
|
|
372
372
|
- delete macro `tabBus`; route via existing UI bridge
|
|
373
373
|
- generic queue/rate-limit primitive from macro refresh flow
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> **⚠ SUPERSEDED 2026-04-29 — content merged into [PLUGIN_MODEL.md](./PLUGIN_MODEL.md) §"Phase 1.5: Consumer migration".**
|
|
4
4
|
>
|
|
5
|
-
> Per user decision (v7.4 merger): the two plans had substantial scope overlap (macro migration, ChatCenteredShell removal, plugin extraction). Folded into one mega-plan + one epic (boring-ui-v2-j9p7) with a single acceptance gate. Phase 1.5 in PLUGIN_MODEL.md is the canonical reference; phase
|
|
5
|
+
> Per user decision (v7.4 merger): the two plans had substantial scope overlap (macro migration, ChatCenteredShell removal, plugin extraction). Folded into one mega-plan + one epic (boring-ui-v2-j9p7) with a single acceptance gate. Phase 1.5 in PLUGIN_MODEL.md is the canonical reference; phase tasks are j9p7.24-29 + j9p7.18-20 (the latter reframed under Phase E).
|
|
6
6
|
>
|
|
7
7
|
> Epic boring-ui-v2-zrby closed as merged.
|
|
8
8
|
>
|
|
@@ -203,14 +203,14 @@ export { definePlugin, definePanel, PluginError, ... } from "./plugin"
|
|
|
203
203
|
export { CatalogRegistry, useCommands, useActivePanels, useCatalogs, ... } from "./plugin"
|
|
204
204
|
```
|
|
205
205
|
|
|
206
|
-
## Phase breakdown — 7 child
|
|
206
|
+
## Phase breakdown — 7 child tasks
|
|
207
207
|
|
|
208
208
|
A. **Decompose chat shells into per-pane folders + bridge/**
|
|
209
209
|
- `git mv` `components/chat/{SessionBrowser, ChatStagePlaceholder, SurfaceShell, WorkbenchLeftPane}.tsx` into per-pane folders under `panes/`. Each pane gains a `definition.ts` exporting a `PanelConfig`.
|
|
210
210
|
- Create `panes/chat/ChatPanel.tsx` (thin wrapper around `@boring/agent`'s ChatPanel + workspace integrations) + `definition.ts`.
|
|
211
211
|
- `git mv` `components/chat/{uiCommandStream, uiCommandDispatcher}.ts` → `bridge/`.
|
|
212
212
|
- Update internal imports.
|
|
213
|
-
- **Don't touch `ChatCenteredShell.tsx` or `ChatTopBar.tsx` yet** — they stay in `components/chat/` until later
|
|
213
|
+
- **Don't touch `ChatCenteredShell.tsx` or `ChatTopBar.tsx` yet** — they stay in `components/chat/` until later tasks.
|
|
214
214
|
|
|
215
215
|
B. **Wire core panel registrations in WorkspaceProvider**
|
|
216
216
|
- Create `registry/coreRegistrations.ts` exporting `coreWorkspacePanels: PanelConfig[]` aggregating the 4 core panel defs.
|
|
@@ -270,7 +270,7 @@ A and B can run in parallel. C depends on A. D, E, F can run in parallel after A
|
|
|
270
270
|
|
|
271
271
|
## Ship criteria
|
|
272
272
|
|
|
273
|
-
- All 7 phase
|
|
273
|
+
- All 7 phase tasks closed.
|
|
274
274
|
- Three apps run on declarative layouts in production.
|
|
275
275
|
- `ChatCenteredShell` and `ChatShellContext` deleted from the tree.
|
|
276
276
|
- Public API exposes Tier 1 / Tier 2 / Tier 3 entries with jsdoc.
|
|
@@ -392,9 +392,9 @@ Avoid breaking current consumers in the first pass.
|
|
|
392
392
|
3. `DataCatalog` and `DataCatalogPane` root exports are removed now; use data catalog plugin helpers instead.
|
|
393
393
|
4. Move app/plugin imports to `plugins/data-explorer` or package-root exports.
|
|
394
394
|
|
|
395
|
-
## Implementation
|
|
395
|
+
## Implementation Tasks
|
|
396
396
|
|
|
397
|
-
###
|
|
397
|
+
### Task 1 — Explorer plugin skeleton
|
|
398
398
|
|
|
399
399
|
- Add `plugins/data-explorer/src` with current `DataExplorer` code moved mostly
|
|
400
400
|
intact.
|
|
@@ -403,14 +403,14 @@ Avoid breaking current consumers in the first pass.
|
|
|
403
403
|
`plugins/data-explorer`.
|
|
404
404
|
- Tests: current DataExplorer tests pass unchanged after path update.
|
|
405
405
|
|
|
406
|
-
###
|
|
406
|
+
### Task 2 — Data catalog plugin composition
|
|
407
407
|
|
|
408
408
|
- Change the `@hachej/boring-data-catalog` package to import explorer APIs from `@hachej/boring-data-explorer`.
|
|
409
409
|
- Split data catalog helpers into `catalogs.ts` if useful.
|
|
410
410
|
- Keep `front/components/data-catalog` removed; do not add compatibility wrappers back.
|
|
411
411
|
- Tests: data catalog package tests and public API tests.
|
|
412
412
|
|
|
413
|
-
###
|
|
413
|
+
### Task 3 — Tree adapter design
|
|
414
414
|
|
|
415
415
|
- Add `ExplorerTreeAdapter`, `ExplorerNode`, section/folder node types.
|
|
416
416
|
- Add tree state hook or extend explorer state carefully, including per-section
|
|
@@ -418,7 +418,7 @@ Avoid breaking current consumers in the first pass.
|
|
|
418
418
|
- Do not rewrite filesystem tree yet.
|
|
419
419
|
- Tests: adapter contract, expansion, per-node loading, abort handling.
|
|
420
420
|
|
|
421
|
-
###
|
|
421
|
+
### Task 4 — Feret project tree spike
|
|
422
422
|
|
|
423
423
|
- In Feret v2/app playground, build a project tree using `ExplorerTreeAdapter`.
|
|
424
424
|
- Prove mixed rows and section filters.
|
|
@@ -426,14 +426,14 @@ Avoid breaking current consumers in the first pass.
|
|
|
426
426
|
- Output is either a shippable Feret integration PR or a plan update with the
|
|
427
427
|
gaps found during the spike.
|
|
428
428
|
|
|
429
|
-
###
|
|
429
|
+
### Task 5 — Optional filesystem reuse
|
|
430
430
|
|
|
431
431
|
- Evaluate whether filesystem tree should remain custom or wrap explorer tree.
|
|
432
432
|
- Decision trigger: after the Feret project tree spike, compare required file
|
|
433
433
|
tree behavior (path validation, file events, expand-to-file, selection, editor
|
|
434
434
|
lifecycle) against explorer tree behavior.
|
|
435
435
|
- Exit criteria: record either `keep custom filesystem tree` or `migrate
|
|
436
|
-
filesystem tree to explorer tree` before the legacy data-catalog removal
|
|
436
|
+
filesystem tree to explorer tree` before the legacy data-catalog removal task.
|
|
437
437
|
- Only migrate if benefits outweigh loss of file-tree-specific behavior.
|
|
438
438
|
|
|
439
439
|
## Non-goals
|
|
@@ -441,8 +441,8 @@ filesystem tree to explorer tree` before the legacy data-catalog removal bead.
|
|
|
441
441
|
- Do not make every visual component a plugin. `@boring/ui`, layout,
|
|
442
442
|
chrome hosts, registries, bridge, and provider stay front-owned.
|
|
443
443
|
- Do not force filesystem to depend on data catalog.
|
|
444
|
-
- Do not rewrite file tree in the first
|
|
445
|
-
- Do not remove public exports without an explicit breaking cleanup
|
|
444
|
+
- Do not rewrite file tree in the first task.
|
|
445
|
+
- Do not remove public exports without an explicit breaking cleanup task.
|
|
446
446
|
- Do not allow reverse imports from `@hachej/boring-data-explorer` into domain plugins. Add or
|
|
447
447
|
extend invariant lint so allowed direction is domain plugin -> data explorer package,
|
|
448
448
|
never data explorer package -> data catalog package, filesystemPlugin, or app plugins.
|
|
@@ -453,5 +453,5 @@ filesystem tree to explorer tree` before the legacy data-catalog removal bead.
|
|
|
453
453
|
- Domain-named components do not live under `front/components`.
|
|
454
454
|
- Explorer APIs are reusable by data catalog, filesystem, and Feret without
|
|
455
455
|
cross-domain plugin imports.
|
|
456
|
-
- Existing public API remains source-compatible until an approved breaking
|
|
456
|
+
- Existing public API remains source-compatible until an approved breaking task.
|
|
457
457
|
- Feret Project Tree requirements are representable without forking explorer UI.
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
> `../../INTERFACES.md` and `../../PLUGIN_STRUCTURE.md` for the current concise
|
|
5
5
|
> contract reference.
|
|
6
6
|
|
|
7
|
-
**Status:** v7.7 — round-7 governance: ChatPanel via dependency injection (NOT plugin); baseline protocol uses `git worktree` (NOT `git stash`); systemPrompt ordering reaffirmed (bootstrap first, createAgentApp second); excludeDefaults semantics corrected (UI off; tools stay); j9p7.30 sed→explicit Edits;
|
|
7
|
+
**Status:** v7.7 — round-7 governance: ChatPanel via dependency injection (NOT plugin); baseline protocol uses `git worktree` (NOT `git stash`); systemPrompt ordering reaffirmed (bootstrap first, createAgentApp second); excludeDefaults semantics corrected (UI off; tools stay); j9p7.30 sed→explicit Edits; task-level dep + path fixes integrated.
|
|
8
8
|
|
|
9
9
|
> **2026-04-30 routing update:** any later references in this historical plan
|
|
10
10
|
> to `PanelConfig.filePatterns`, `fileFallback`, or `PanelRegistry.resolve`
|
|
@@ -2111,7 +2111,7 @@ reviewers don't think they were missed.
|
|
|
2111
2111
|
| **Plugin-vs-substrate tool name collision** | A plugin shipping a tool called `read` replaces substrate's. Late-wins logged. Could confuse the LLM if names diverge mid-session. | When agent-authored plugins (Phase 3) make accidental collision likely. |
|
|
2112
2112
|
| **Catalog adapter memory** | If an adapter holds a long-running subscription (e.g., websocket to a remote search service), there's no place to clean up because there's no `onUnmount`. | When a real adapter needs it. Adding a teardown hook on `CatalogConfig` is non-breaking. |
|
|
2113
2113
|
| **Non-React stateful adapters need lifecycle** | Gemini P1: an adapter that wants to subscribe to `events.on('file:moved', …)` to invalidate its cache has nowhere to do it. Module-scope `events.on(...)` fires globally for all hosts. Lazy on-first-call leaks (no unsubscribe). | First plugin that needs it. Re-introduce `Plugin.onMount(ctx) → cleanup` (we cut it in v6 because Phase 1 plugins are all React-component-based or factory-injected; that assumption breaks for stateful adapters). |
|
|
2114
|
-
| **`registerAgentRoutes` lacks `disableDefaultFileTools`** | Codex round-4 P1: `createAgentApp` accepts `disableDefaultFileTools` (verified `createAgentApp.ts:47`) but `registerAgentRoutes` (the embedded-Fastify path used by `apps/full-app/src/server/main.ts:383`) does NOT — it always includes filesystem tools (`registerAgentRoutes.ts:94`). The "harness opt-out" promise only holds for the standalone `createAgentApp` path. | Add `disableDefaultFileTools` option to `registerAgentRoutes` plumbed through to its internal tool-catalog construction. **Out of scope for Phase 1** macro acceptance (macro uses `createWorkspaceAgentApp` which uses `createAgentApp`, not `registerAgentRoutes`). Add a follow-up
|
|
2114
|
+
| **`registerAgentRoutes` lacks `disableDefaultFileTools`** | Codex round-4 P1: `createAgentApp` accepts `disableDefaultFileTools` (verified `createAgentApp.ts:47`) but `registerAgentRoutes` (the embedded-Fastify path used by `apps/full-app/src/server/main.ts:383`) does NOT — it always includes filesystem tools (`registerAgentRoutes.ts:94`). The "harness opt-out" promise only holds for the standalone `createAgentApp` path. | Add `disableDefaultFileTools` option to `registerAgentRoutes` plumbed through to its internal tool-catalog construction. **Out of scope for Phase 1** macro acceptance (macro uses `createWorkspaceAgentApp` which uses `createAgentApp`, not `registerAgentRoutes`). Add a follow-up task under the j9p7 epic OR Phase 2 if a `registerAgentRoutes`-using host needs the opt-out. |
|
|
2115
2115
|
| **Build-time enforcement of client/server split** | Documented invariant; not a custom lint rule. | If accidental cross-imports become common. |
|
|
2116
2116
|
| **Plugin versioning / compat** | `Plugin.version` field cut. No compat negotiation. | Phase 2 npm distribution. |
|
|
2117
2117
|
| **Layout migrations** | Renaming a panel id breaks cached dockview layouts. Same problem as today; not made worse by plugin model. | When layouts become stable enough to merit migration tooling. |
|
|
@@ -2496,7 +2496,7 @@ export { definePlugin, definePanel, PluginError, … } from "./plugin"
|
|
|
2496
2496
|
export { CatalogRegistry, useCommands, useActivePanels, useCatalogs, … } from "./plugin"
|
|
2497
2497
|
```
|
|
2498
2498
|
|
|
2499
|
-
### Phase 1.5 breakdown — 7 phase
|
|
2499
|
+
### Phase 1.5 breakdown — 7 phase tasks (A through G)
|
|
2500
2500
|
|
|
2501
2501
|
A and B can run in parallel. C depends on A. D, E, F can run in parallel after A+B+C. G depends on D+E+F.
|
|
2502
2502
|
|
|
@@ -2519,7 +2519,7 @@ A and B can run in parallel. C depends on A. D, E, F can run in parallel after A
|
|
|
2519
2519
|
│ - Update internal imports │
|
|
2520
2520
|
│ - DON'T touch ChatCenteredShell.tsx or ChatTopBar.tsx yet — │
|
|
2521
2521
|
│ they stay until Phase G/C respectively. │
|
|
2522
|
-
│
|
|
2522
|
+
│ Task: j9p7.24 │
|
|
2523
2523
|
│ │
|
|
2524
2524
|
│ Note: Step 0 already ran the workspace reorg into v7.6 layout, │
|
|
2525
2525
|
│ so source paths use front/ prefix. ArtifactSurfacePane.tsx and │
|
|
@@ -2542,7 +2542,7 @@ A and B can run in parallel. C depends on A. D, E, F can run in parallel after A
|
|
|
2542
2542
|
│ mount, BEFORE bootstrap() runs │
|
|
2543
2543
|
│ - Test: render WorkspaceProvider with no plugins; assert the │
|
|
2544
2544
|
│ panel registry has the 4 core ids │
|
|
2545
|
-
│
|
|
2545
|
+
│ Task: j9p7.25 (depends on j9p7.24 closing for the actual │
|
|
2546
2546
|
│ definition.ts files to import) │
|
|
2547
2547
|
└──────────────────────────────────────────────────────────────────┘
|
|
2548
2548
|
│
|
|
@@ -2557,7 +2557,7 @@ A and B can run in parallel. C depends on A. D, E, F can run in parallel after A
|
|
|
2557
2557
|
│ - Export ResponsiveDockviewShell from package barrel with jsdoc │
|
|
2558
2558
|
│ explaining Tier 2 │
|
|
2559
2559
|
│ - Add §"Three-tier API" to packages/workspace/README.md │
|
|
2560
|
-
│
|
|
2560
|
+
│ Task: j9p7.26 │
|
|
2561
2561
|
└──────────────────────────────────────────────────────────────────┘
|
|
2562
2562
|
│
|
|
2563
2563
|
▼
|
|
@@ -2569,7 +2569,7 @@ A and B can run in parallel. C depends on A. D, E, F can run in parallel after A
|
|
|
2569
2569
|
│ - Confirm e2e tests (apps/workspace-playground/e2e/*.spec.ts) │
|
|
2570
2570
|
│ still pass │
|
|
2571
2571
|
│ - Document any gotchas for the next two app migrations │
|
|
2572
|
-
│
|
|
2572
|
+
│ Task: j9p7.27 │
|
|
2573
2573
|
└──────────────────────────────────────────────────────────────────┘
|
|
2574
2574
|
│
|
|
2575
2575
|
▼
|
|
@@ -2597,7 +2597,7 @@ A and B can run in parallel. C depends on A. D, E, F can run in parallel after A
|
|
|
2597
2597
|
│ - macro's uiBridge.ts is ALREADY deleted in Step 1a (NOT here │
|
|
2598
2598
|
│ — gemini P2 catch). │
|
|
2599
2599
|
│ - Confirm boring-macro e2e tests pass │
|
|
2600
|
-
│
|
|
2600
|
+
│ Tasks: j9p7.18 (plugin module), j9p7.19 (app refactor), │
|
|
2601
2601
|
│ j9p7.20 (e2e gate). Reframed under Phase E. │
|
|
2602
2602
|
└──────────────────────────────────────────────────────────────────┘
|
|
2603
2603
|
│
|
|
@@ -2608,7 +2608,7 @@ A and B can run in parallel. C depends on A. D, E, F can run in parallel after A
|
|
|
2608
2608
|
│ - Rewrite apps/full-app/src/front/main.tsx to use the │
|
|
2609
2609
|
│ appropriate declarative layout │
|
|
2610
2610
|
│ - Confirm e2e tests pass │
|
|
2611
|
-
│
|
|
2611
|
+
│ Task: j9p7.28 │
|
|
2612
2612
|
└──────────────────────────────────────────────────────────────────┘
|
|
2613
2613
|
│
|
|
2614
2614
|
▼
|
|
@@ -2622,7 +2622,7 @@ A and B can run in parallel. C depends on A. D, E, F can run in parallel after A
|
|
|
2622
2622
|
│ - Dropped related exports from src/index.ts │
|
|
2623
2623
|
│ - Removed now-empty components/chat/ folder │
|
|
2624
2624
|
│ - Updated WORKSPACE_V2_PLAN.md and active package docs │
|
|
2625
|
-
│
|
|
2625
|
+
│ Task: j9p7.29 │
|
|
2626
2626
|
└──────────────────────────────────────────────────────────────────┘
|
|
2627
2627
|
```
|
|
2628
2628
|
|
|
@@ -2635,7 +2635,7 @@ A and B can run in parallel. C depends on A. D, E, F can run in parallel after A
|
|
|
2635
2635
|
|
|
2636
2636
|
### Phase 1.5 ship criteria
|
|
2637
2637
|
|
|
2638
|
-
- All 7 phase
|
|
2638
|
+
- All 7 phase tasks (j9p7.24-29 + j9p7.18-20) closed
|
|
2639
2639
|
- Three apps run on declarative layouts in production
|
|
2640
2640
|
- `ChatCenteredShell` and `ChatShellContext` deleted from the tree
|
|
2641
2641
|
- Public API exposes Tier 1 / Tier 2 / Tier 3 entries with jsdoc
|
|
@@ -2648,7 +2648,7 @@ The earlier Phase 1 Step 5b ("ChatCenteredShell drops `data` + `extraPanels` pro
|
|
|
2648
2648
|
- Step 5b's "drop legacy props" becomes "delete the whole shell" (Phase G).
|
|
2649
2649
|
- Step 5c's "registry-driven WorkbenchLeftPane" becomes "WorkbenchLeftPane is just one of the core panels registered by WorkspaceProvider; tab strip is gone" (Phase A + B).
|
|
2650
2650
|
|
|
2651
|
-
|
|
2651
|
+
Tasks j9p7.16 (Step 5b) and j9p7.17 (Step 5c) close as **scope-shifted to Phase 1.5** — see Phase A/B tasks for the new location.
|
|
2652
2652
|
|
|
2653
2653
|
## Phase 2/3 (sketched, deferred)
|
|
2654
2654
|
|
|
@@ -2843,9 +2843,9 @@ pre-migration are not this gate's job.
|
|
|
2843
2843
|
- Superseded plans: `COMMAND_PALETTE_REGISTRY.md` (older); v2-v5.2
|
|
2844
2844
|
of this file (in git history).
|
|
2845
2845
|
|
|
2846
|
-
## Changelog v7.6 → v7.7 (round-7 governance +
|
|
2846
|
+
## Changelog v7.6 → v7.7 (round-7 governance + task-level fixes)
|
|
2847
2847
|
|
|
2848
|
-
Round-6 (codex
|
|
2848
|
+
Round-6 (codex task-level review) returned 2 P0 governance questions, 7 P1s, 3 P2s. The user resolved both P0s; this changelog documents the integrated answers and the task-level patches.
|
|
2849
2849
|
|
|
2850
2850
|
### P0 — ChatPanel resolution: dependency injection (NOT plugin)
|
|
2851
2851
|
|
|
@@ -2859,9 +2859,9 @@ Round-5 used `git stash` to establish a pre-migration baseline. That violates AG
|
|
|
2859
2859
|
|
|
2860
2860
|
Spec edits: §"Acceptance" prepends a "Baseline protocol (v7.7 — worktree-based)" subsection with the canonical script. j9p7.20 (round-7 notes) replaces all `git stash` mentions with the worktree procedure. j9p7.20's dep on j9p7.19 was REMOVED via `br dep remove` — baseline runs BEFORE migration, so the graph edge that implied "baseline blocks on migration" was wrong.
|
|
2861
2861
|
|
|
2862
|
-
### P1 fixes (
|
|
2862
|
+
### P1 fixes (task-level)
|
|
2863
2863
|
|
|
2864
|
-
1. **systemPrompt ordering circularity (j9p7.11 / j9p7.31)** — both
|
|
2864
|
+
1. **systemPrompt ordering circularity (j9p7.11 / j9p7.31)** — both tasks now state the canonical sequence: bootstrap FIRST (computes `systemPromptAppend` + stages agentTools), then `createAgentApp({ systemPromptAppend, extraTools: [...uiTools, ...stagedAgentTools] })`. agentTools are staged into a list during bootstrap, not registered against a live registry.
|
|
2865
2865
|
|
|
2866
2866
|
2. **excludeDefaults semantics correction (j9p7.10)** — the round-1 test "LLM file ops not in agentTool list" was wrong. `excludeDefaults: ['filesystem']` removes filesystemPlugin's UI contributions (panels + catalog). It does NOT remove file tools — those are HARNESS substrate, never in the plugin's `agentTools` (which is undefined). Two switches, two layers: `excludeDefaults` for UI, `disableDefaultFileTools` for tools.
|
|
2867
2867
|
|
|
@@ -2898,7 +2898,7 @@ Codex flagged: `shared/plugin/types.ts` referencing `ExplorerAdapter` from `comp
|
|
|
2898
2898
|
|
|
2899
2899
|
### P1 — Phase 1.5 step text path-updated
|
|
2900
2900
|
|
|
2901
|
-
Codex flagged that Phase A still said `panes/<id>/`, Phase C said `layouts/TopBar.tsx`, Phase E said `src/macroPlugin.ts` — all pre-v7.5. **Fix:** Phase A → `front/chrome/<id>/`; Phase C → `front/layout/TopBar.tsx`; Phase E → `apps/.../src/plugin/{front,server}/` directly.
|
|
2901
|
+
Codex flagged that Phase A still said `panes/<id>/`, Phase C said `layouts/TopBar.tsx`, Phase E said `src/macroPlugin.ts` — all pre-v7.5. **Fix:** Phase A → `front/chrome/<id>/`; Phase C → `front/layout/TopBar.tsx`; Phase E → `apps/.../src/plugin/{front,server}/` directly. Task descriptions to be updated post-commit.
|
|
2902
2902
|
|
|
2903
2903
|
### P2 cleanup pack (applied)
|
|
2904
2904
|
|
|
@@ -2916,7 +2916,7 @@ Codex flagged that Phase A still said `panes/<id>/`, Phase C said `layouts/TopBa
|
|
|
2916
2916
|
|
|
2917
2917
|
After v7.6 patches: both verdicts converge on **implementable as-is**. No reversals from earlier rounds. The architecture stands.
|
|
2918
2918
|
|
|
2919
|
-
###
|
|
2919
|
+
### Tasks needing path updates
|
|
2920
2920
|
|
|
2921
2921
|
- **NEW j9p7.31** — Step 0 workspace reorg (mechanical)
|
|
2922
2922
|
- **j9p7.9** (filesystemPlugin) — paths under `plugins/filesystemPlugin/{index.ts (no server.ts since UI-only), front/}`
|
|
@@ -3004,7 +3004,7 @@ Apps mirror: each app contributes ONE plugin, lives in `apps/<host>/src/plugin/{
|
|
|
3004
3004
|
4. **No category mixing at any level** — workspace own code is in `front/server/shared`; plugins are in `plugins/`; plugin machinery is in singular `plugin/` sub-folders. Zero ambiguity for new contributors.
|
|
3005
3005
|
5. **Plays well with build invariants** — codex round-2 caught a P0 where server-only modules were about to leak into client code. With the explicit split, the lint rule "front/ must not import from server/" is one path-prefix check.
|
|
3006
3006
|
|
|
3007
|
-
###
|
|
3007
|
+
### Task impact
|
|
3008
3008
|
|
|
3009
3009
|
Mostly path-string updates; no semantic changes:
|
|
3010
3010
|
|
|
@@ -3017,7 +3017,7 @@ Mostly path-string updates; no semantic changes:
|
|
|
3017
3017
|
`apps/boring-macro-v2/src/plugin/{index,server}.ts` to
|
|
3018
3018
|
`apps/boring-macro-v2/src/plugin/{index.ts,front/,server/}`
|
|
3019
3019
|
|
|
3020
|
-
A new
|
|
3020
|
+
A new task **j9p7.30** could capture the workspace front/server reorg
|
|
3021
3021
|
itself if it's substantive enough to warrant separate tracking. For
|
|
3022
3022
|
now, fold into Phase A (j9p7.24) since they're both restructuring
|
|
3023
3023
|
the same directory.
|
|
@@ -3032,14 +3032,14 @@ User decision (2026-04-29): **merge into one mega-plan + one epic**. The earlier
|
|
|
3032
3032
|
- Documents three-tier API (Tier 1 declarative pre-shaped layouts; Tier 2 custom LayoutConfig with stock chrome; Tier 3 raw primitives)
|
|
3033
3033
|
- Substrate vs default-plugin vs app-plugin clarification (chat is core, not a plugin)
|
|
3034
3034
|
- File-tree end state (panes/ as canonical home; components/chat/ disappears)
|
|
3035
|
-
- 7 phase
|
|
3035
|
+
- 7 phase tasks breakdown (Phase A → G) with parallelism map
|
|
3036
3036
|
- Risks + ship criteria
|
|
3037
3037
|
|
|
3038
|
-
2. **j9p7.16 (Step 5b) and j9p7.17 (Step 5c) marked obsolete** — scope-shifted to Phase 1.5. Closing them with reason "subsumed by Phase 1.5 Phase A/B." Replacement
|
|
3038
|
+
2. **j9p7.16 (Step 5b) and j9p7.17 (Step 5c) marked obsolete** — scope-shifted to Phase 1.5. Closing them with reason "subsumed by Phase 1.5 Phase A/B." Replacement tasks created for each Phase.
|
|
3039
3039
|
|
|
3040
3040
|
3. **j9p7.18 / .19 / .20** (macro plugin module / app refactor / e2e gate) **reframed under Phase E**, not Step 6. Same work, different grouping.
|
|
3041
3041
|
|
|
3042
|
-
4. **6 new
|
|
3042
|
+
4. **6 new tasks created** for Phase 1.5 phases that don't have direct j9p7 equivalents:
|
|
3043
3043
|
- j9p7.24 (Phase A — decompose shells)
|
|
3044
3044
|
- j9p7.25 (Phase B — wire core panel registrations)
|
|
3045
3045
|
- j9p7.26 (Phase C — lift TopBar chrome)
|
|
@@ -3065,7 +3065,7 @@ Merging gives:
|
|
|
3065
3065
|
|
|
3066
3066
|
- PLUGIN_MODEL.md grows by ~280 lines (Phase 1.5 + this changelog entry)
|
|
3067
3067
|
- DECLARATIVE_LAYOUT_MIGRATION.md gains a SUPERSEDED banner; content preserved in history
|
|
3068
|
-
- j9p7 epic gains 6 new
|
|
3068
|
+
- j9p7 epic gains 6 new tasks, closes 2 obsolete tasks
|
|
3069
3069
|
- zrby epic closes
|
|
3070
3070
|
- Acceptance contract updated: j9p7 closes when Phase 1.5 ship criteria met (declarative apps + ChatCenteredShell deleted + Tier 1/2/3 public API)
|
|
3071
3071
|
|
|
@@ -3129,7 +3129,7 @@ without payoff.
|
|
|
3129
3129
|
`pages` sketch + this changelog entry).
|
|
3130
3130
|
- Contract: unchanged — same 7 fields (id, label, systemPrompt,
|
|
3131
3131
|
panels, commands, catalogs, agentTools).
|
|
3132
|
-
-
|
|
3132
|
+
- Tasks: unchanged. Task descriptions can keep using
|
|
3133
3133
|
`placement: 'left-tab'` / `'center'` etc. as today.
|
|
3134
3134
|
|
|
3135
3135
|
## Changelog v7.1 → v7.2 (planning-workflow review pass)
|
|
@@ -3147,7 +3147,7 @@ cards) is wrapped in `<PluginErrorBoundary pluginId>`. A buggy
|
|
|
3147
3147
|
plugin can no longer crash the workspace shell. Dropped errors
|
|
3148
3148
|
push into `WorkspaceContext.errors[]` for visibility via
|
|
3149
3149
|
`<PluginInspector />`. Implementation sites: PanelHost, CatalogResults,
|
|
3150
|
-
chat-suggestion card list. ~50 LOC. New
|
|
3150
|
+
chat-suggestion card list. ~50 LOC. New task: j9p7.22.
|
|
3151
3151
|
|
|
3152
3152
|
**2. CatalogRegistry search debouncing + AbortSignal propagation.**
|
|
3153
3153
|
New hook: `useDebouncedCatalogSearch(query, opts?)` debounces 150ms,
|
|
@@ -3155,7 +3155,7 @@ aborts in-flight searches per keystroke via the AbortSignal that
|
|
|
3155
3155
|
ExplorerAdapter.search ALREADY accepts (verified
|
|
3156
3156
|
`packages/workspace/src/components/DataExplorer/types.ts:46-55` —
|
|
3157
3157
|
no contract change needed; just consumer-side wiring). Per-catalog
|
|
3158
|
-
errors isolated via try/catch. Updates
|
|
3158
|
+
errors isolated via try/catch. Updates task j9p7.13.
|
|
3159
3159
|
|
|
3160
3160
|
### Compelling-feature addition (selected)
|
|
3161
3161
|
|
|
@@ -3164,7 +3164,7 @@ concatenates across registered plugins (in registration order),
|
|
|
3164
3164
|
prepends to the harness's base system prompt. Lets plugin authors
|
|
3165
3165
|
own their domain framing for the LLM ("you have a FRED database;
|
|
3166
3166
|
use macro_* tools for X"). Concrete LLM-quality improvement;
|
|
3167
|
-
reduces host-author burden. Updates
|
|
3167
|
+
reduces host-author burden. Updates tasks j9p7.4 (contract +
|
|
3168
3168
|
validation), j9p7.7 (bootstrap concat), j9p7.18 (macro plugin sets).
|
|
3169
3169
|
|
|
3170
3170
|
### DX additions (selected)
|
|
@@ -3173,7 +3173,7 @@ validation), j9p7.7 (bootstrap concat), j9p7.18 (macro plugin sets).
|
|
|
3173
3173
|
("console.log is enough"). Reversal justified: plugin authors hit
|
|
3174
3174
|
"why didn't my command appear?" daily; visual check beats
|
|
3175
3175
|
spelunking React DevTools. ~50 LOC, zero production cost
|
|
3176
|
-
(import.meta.env.DEV gated). New
|
|
3176
|
+
(import.meta.env.DEV gated). New task: j9p7.23.
|
|
3177
3177
|
|
|
3178
3178
|
**5. New §"Decisions log".** Single-table summary of locked
|
|
3179
3179
|
architectural decisions with one-line rationale + pointer to the
|
|
@@ -3200,8 +3200,8 @@ harness-owns-tools framing. The two plans now read consistently.
|
|
|
3200
3200
|
|
|
3201
3201
|
### Net impact
|
|
3202
3202
|
|
|
3203
|
-
- New
|
|
3204
|
-
- Updated
|
|
3203
|
+
- New tasks: j9p7.22 (error boundaries) + j9p7.23 (PluginInspector)
|
|
3204
|
+
- Updated tasks: j9p7.4 (systemPrompt validation), j9p7.7 (bootstrap
|
|
3205
3205
|
concat), j9p7.13 (debounced search), j9p7.18 (macro systemPrompt)
|
|
3206
3206
|
- Spec additions: ~250 lines (decisions log + patterns + 3 new
|
|
3207
3207
|
sections + v7.2 changelog)
|
|
@@ -3251,7 +3251,7 @@ implementation gap.
|
|
|
3251
3251
|
path. **Out of scope for Phase 1 macro acceptance** (macro uses
|
|
3252
3252
|
`createWorkspaceAgentApp` → `createAgentApp`, not
|
|
3253
3253
|
`registerAgentRoutes`). Tracked as a known-gap; promote to a
|
|
3254
|
-
|
|
3254
|
+
task if a `registerAgentRoutes`-using host needs the opt-out.
|
|
3255
3255
|
|
|
3256
3256
|
### Cross-plan note (NOT patched in this commit)
|
|
3257
3257
|
|
|
@@ -3270,8 +3270,8 @@ ownership).
|
|
|
3270
3270
|
|
|
3271
3271
|
Macro 260→46 still holds. v7 automatic file tools don't add macro
|
|
3272
3272
|
glue; macro domain tools still fit `Plugin.agentTools`. Current
|
|
3273
|
-
j9p7
|
|
3274
|
-
(pi-tools-migration) docs/
|
|
3273
|
+
j9p7 tasks are v7-aligned (verified post f2d73bc). Old uhwx
|
|
3274
|
+
(pi-tools-migration) docs/tasks are stale relative to v7 — track
|
|
3275
3275
|
separately.
|
|
3276
3276
|
|
|
3277
3277
|
## Changelog v6.3 → v7.0 (separation of concerns: harness owns tools)
|
|
@@ -3345,18 +3345,18 @@ changes is that macro's agentTools come ONLY from
|
|
|
3345
3345
|
File tools come from the harness automatically. No plumbing
|
|
3346
3346
|
difference for macro's host code.
|
|
3347
3347
|
|
|
3348
|
-
###
|
|
3348
|
+
### Task impact
|
|
3349
3349
|
|
|
3350
3350
|
- **B2** (file ops bundle extraction) → reframed as "extract
|
|
3351
3351
|
pi-factory wiring per pi-tools-migration; bundle includes pi
|
|
3352
3352
|
tools + any custom additions." No dual-registration story.
|
|
3353
|
-
- **B9** (filesystemPlugin) → becomes a tiny
|
|
3353
|
+
- **B9** (filesystemPlugin) → becomes a tiny task: plain const
|
|
3354
3354
|
with panels + catalog, no agentTools. ~10 LOC of plugin code.
|
|
3355
3355
|
- **B11** (createWorkspaceAgentApp) → no
|
|
3356
3356
|
`disableDefaultFileTools: true` wiring; just wraps
|
|
3357
3357
|
`createAgentApp` and runs bootstrap.
|
|
3358
3358
|
|
|
3359
|
-
All three
|
|
3359
|
+
All three task descriptions updated to match v7.0 framing.
|
|
3360
3360
|
|
|
3361
3361
|
## Changelog v6.2 → v6.3 (gemini fresh-eyes review patches)
|
|
3362
3362
|
|
|
@@ -32,14 +32,14 @@ Use this section as the live handoff ledger while executing this plan.
|
|
|
32
32
|
- **Phase 2 (Panes):** FileTree (react-arborist) ✓, MarkdownEditor (tiptap, 10 extensions) ✓, CodeEditor (CodeMirror 6) ✓, DataCatalogPane ✓, EmptyPane ✓, DataProvider + useFileContent/useFileList/useFileWrite ✓, useEditorLifecycle shared hook ✓
|
|
33
33
|
- **Phase 3a (Integration):** Bridge SSE client ✓, Bridge command dispatch via Zustand ✓, ArtifactSurfacePane with nested DockviewShell ✓, WorkspaceProvider ✓
|
|
34
34
|
- **Phase 4 (Polish):** useTheme hook ✓, CommandPalette (Cmd+P/K) ✓, ResponsiveDockviewShell with Sheet for mobile ✓, PanelErrorBoundary ✓, Testing module (@boring/workspace/testing) ✓
|
|
35
|
-
- Current assessment: Package is feature-complete per this plan. Remaining work is app-shell migration (tracked in
|
|
35
|
+
- Current assessment: Package is feature-complete per this plan. Remaining work is app-shell migration (tracked in tasks).
|
|
36
36
|
|
|
37
37
|
### Pass 1 — Initial validation (2026-04-24)
|
|
38
38
|
|
|
39
39
|
- Full package verification: `pnpm --dir packages/workspace typecheck && pnpm --dir packages/workspace test` (green: 601 tests passing).
|
|
40
40
|
- Replaced placeholder lint script with real gate: `packages/workspace/package.json` now uses `"lint": "pnpm run typecheck"`.
|
|
41
41
|
- Core plan phases (foundation, panes, bridge integration, responsive behaviors, testing harness) are present and covered by the existing suite.
|
|
42
|
-
- Remaining plan execution is now mostly migration/integration work in app shells (`apps/ide`, `apps/chat`, etc.), tracked in
|
|
42
|
+
- Remaining plan execution is now mostly migration/integration work in app shells (`apps/ide`, `apps/chat`, etc.), tracked in tasks rather than missing package internals.
|
|
43
43
|
|
|
44
44
|
## Vision
|
|
45
45
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hachej/boring-workspace",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.65",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "Workspace UI, plugin, and bridge package for composing chat, files, catalogs, editors, and app-specific panes.",
|
|
@@ -94,77 +94,77 @@
|
|
|
94
94
|
}
|
|
95
95
|
},
|
|
96
96
|
"dependencies": {
|
|
97
|
-
"@codemirror/commands": "^6.10.
|
|
97
|
+
"@codemirror/commands": "^6.10.4",
|
|
98
98
|
"@codemirror/lang-javascript": "^6.2.5",
|
|
99
99
|
"@codemirror/lang-json": "^6.0.2",
|
|
100
100
|
"@codemirror/lang-markdown": "^6.5.0",
|
|
101
101
|
"@codemirror/lang-python": "^6.2.1",
|
|
102
102
|
"@codemirror/lang-sql": "^6.10.0",
|
|
103
103
|
"@codemirror/lang-yaml": "^6.1.3",
|
|
104
|
-
"@codemirror/language": "^6.12.
|
|
105
|
-
"@codemirror/search": "^6.7.
|
|
106
|
-
"@codemirror/state": "^6.
|
|
107
|
-
"@codemirror/view": "^6.
|
|
104
|
+
"@codemirror/language": "^6.12.4",
|
|
105
|
+
"@codemirror/search": "^6.7.1",
|
|
106
|
+
"@codemirror/state": "^6.7.0",
|
|
107
|
+
"@codemirror/view": "^6.43.3",
|
|
108
108
|
"@lezer/highlight": "^1.2.3",
|
|
109
|
-
"@tanstack/react-query": "^5.
|
|
110
|
-
"@tiptap/core": "^3.
|
|
111
|
-
"@tiptap/extension-code-block-lowlight": "^3.
|
|
112
|
-
"@tiptap/extension-highlight": "^3.
|
|
113
|
-
"@tiptap/extension-image": "^3.
|
|
114
|
-
"@tiptap/extension-link": "^3.
|
|
115
|
-
"@tiptap/extension-placeholder": "^3.
|
|
116
|
-
"@tiptap/extension-table": "^3.
|
|
117
|
-
"@tiptap/extension-table-cell": "^3.
|
|
118
|
-
"@tiptap/extension-table-header": "^3.
|
|
119
|
-
"@tiptap/extension-table-row": "^3.
|
|
120
|
-
"@tiptap/extension-task-item": "^3.
|
|
121
|
-
"@tiptap/extension-task-list": "^3.
|
|
122
|
-
"@tiptap/extension-text-align": "^3.
|
|
123
|
-
"@tiptap/extension-underline": "^3.
|
|
124
|
-
"@tiptap/markdown": "^3.
|
|
125
|
-
"@tiptap/pm": "^3.
|
|
126
|
-
"@tiptap/react": "^3.
|
|
127
|
-
"@tiptap/starter-kit": "^3.
|
|
109
|
+
"@tanstack/react-query": "^5.101.1",
|
|
110
|
+
"@tiptap/core": "^3.27.1",
|
|
111
|
+
"@tiptap/extension-code-block-lowlight": "^3.27.1",
|
|
112
|
+
"@tiptap/extension-highlight": "^3.27.1",
|
|
113
|
+
"@tiptap/extension-image": "^3.27.1",
|
|
114
|
+
"@tiptap/extension-link": "^3.27.1",
|
|
115
|
+
"@tiptap/extension-placeholder": "^3.27.1",
|
|
116
|
+
"@tiptap/extension-table": "^3.27.1",
|
|
117
|
+
"@tiptap/extension-table-cell": "^3.27.1",
|
|
118
|
+
"@tiptap/extension-table-header": "^3.27.1",
|
|
119
|
+
"@tiptap/extension-table-row": "^3.27.1",
|
|
120
|
+
"@tiptap/extension-task-item": "^3.27.1",
|
|
121
|
+
"@tiptap/extension-task-list": "^3.27.1",
|
|
122
|
+
"@tiptap/extension-text-align": "^3.27.1",
|
|
123
|
+
"@tiptap/extension-underline": "^3.27.1",
|
|
124
|
+
"@tiptap/markdown": "^3.27.1",
|
|
125
|
+
"@tiptap/pm": "^3.27.1",
|
|
126
|
+
"@tiptap/react": "^3.27.1",
|
|
127
|
+
"@tiptap/starter-kit": "^3.27.1",
|
|
128
128
|
"class-variance-authority": "^0.7.0",
|
|
129
129
|
"clsx": "^2.1.0",
|
|
130
130
|
"cmdk": "^1.1.1",
|
|
131
|
-
"
|
|
132
|
-
"
|
|
133
|
-
"fastify": "^5.
|
|
134
|
-
"jiti": "^2.
|
|
131
|
+
"dnd-core": "^16.0.1",
|
|
132
|
+
"dockview-react": "^7.0.2",
|
|
133
|
+
"fastify": "^5.9.0",
|
|
134
|
+
"jiti": "^2.7.0",
|
|
135
135
|
"lowlight": "^3.3.0",
|
|
136
|
-
"lucide-react": "^1.
|
|
137
|
-
"react-arborist": "^3.
|
|
138
|
-
"react-dnd-html5-backend": "^
|
|
136
|
+
"lucide-react": "^1.21.0",
|
|
137
|
+
"react-arborist": "^3.10.5",
|
|
138
|
+
"react-dnd-html5-backend": "^16.0.1",
|
|
139
139
|
"tailwind-merge": "^2.0.0",
|
|
140
140
|
"zod": "^3.23.0",
|
|
141
|
-
"zustand": "^5.0.
|
|
142
|
-
"@hachej/boring-
|
|
143
|
-
"@hachej/boring-
|
|
144
|
-
"@hachej/boring-ui-
|
|
141
|
+
"zustand": "^5.0.14",
|
|
142
|
+
"@hachej/boring-ui-kit": "0.1.65",
|
|
143
|
+
"@hachej/boring-agent": "0.1.65",
|
|
144
|
+
"@hachej/boring-ui-plugin-cli": "0.1.65"
|
|
145
145
|
},
|
|
146
146
|
"devDependencies": {
|
|
147
|
-
"@tailwindcss/postcss": "^4.
|
|
148
|
-
"@tailwindcss/vite": "^4.
|
|
147
|
+
"@tailwindcss/postcss": "^4.3.1",
|
|
148
|
+
"@tailwindcss/vite": "^4.3.1",
|
|
149
149
|
"@testing-library/jest-dom": "^6.9.1",
|
|
150
150
|
"@testing-library/react": "^16.3.2",
|
|
151
151
|
"@testing-library/user-event": "^14.6.1",
|
|
152
|
-
"@types/node": "^22.
|
|
153
|
-
"@types/react": "^19.
|
|
152
|
+
"@types/node": "^22.20.0",
|
|
153
|
+
"@types/react": "^19.2.17",
|
|
154
154
|
"@types/react-dom": "^19.0.0",
|
|
155
155
|
"@vitejs/plugin-react": "^4.0.0",
|
|
156
|
-
"fast-check": "^4.
|
|
157
|
-
"jsdom": "^29.
|
|
158
|
-
"postcss": "^8.5.
|
|
159
|
-
"react": "^19.
|
|
160
|
-
"react-dom": "^19.
|
|
156
|
+
"fast-check": "^4.8.0",
|
|
157
|
+
"jsdom": "^29.1.1",
|
|
158
|
+
"postcss": "^8.5.15",
|
|
159
|
+
"react": "^19.2.7",
|
|
160
|
+
"react-dom": "^19.2.7",
|
|
161
161
|
"recharts": "^2.15.4",
|
|
162
|
-
"tailwindcss": "^4.
|
|
162
|
+
"tailwindcss": "^4.3.1",
|
|
163
163
|
"tsup": "^8.0.0",
|
|
164
|
-
"typescript": "^
|
|
165
|
-
"vite": "^
|
|
166
|
-
"vite-plugin-dts": "^
|
|
167
|
-
"vitest": "^
|
|
164
|
+
"typescript": "^6.0.3",
|
|
165
|
+
"vite": "^8.1.0",
|
|
166
|
+
"vite-plugin-dts": "^5.0.3",
|
|
167
|
+
"vitest": "^4.1.9",
|
|
168
168
|
"@boring-fixtures/default-plugin": "0.0.0"
|
|
169
169
|
},
|
|
170
170
|
"scripts": {
|