@hachej/boring-agent 0.1.89 → 0.1.91

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 (39) hide show
  1. package/dist/{chunk-GOM3VJOJ.js → chunk-2GBHYJVC.js} +31 -1
  2. package/dist/{chunk-I7UEASPG.js → chunk-BHH5NH7P.js} +5534 -8253
  3. package/dist/{chunk-M32FXCIN.js → chunk-CJ2BW2W2.js} +23 -8
  4. package/dist/{chunk-WZCTVT57.js → chunk-IWBC6SF7.js} +94 -112
  5. package/dist/chunk-NITBKFG6.js +1246 -0
  6. package/dist/{chunk-BDYXKHWY.js → chunk-PZC76CIA.js} +7 -1
  7. package/dist/core/index.d.ts +5 -5
  8. package/dist/core/index.js +2 -2
  9. package/dist/{createHarness-CCQLHKUF.js → createHarness-PMYRKDE4.js} +2 -2
  10. package/dist/errors-BEmw9HMp.d.ts +200 -0
  11. package/dist/front/index.d.ts +30 -5
  12. package/dist/front/index.js +230 -44
  13. package/dist/{harness-VvP0l5Mj.d.ts → harness-Bt_GMNYR.d.ts} +2 -2
  14. package/dist/{workspaceAgentDispatcher-CKEeNPjW.d.ts → lease-2aXepSBL.d.ts} +254 -59
  15. package/dist/{protocol-B_OQKfbI.d.ts → middleware-CzW8n7B7.d.ts} +20 -18
  16. package/dist/piChatEvent-DBO3M5lu.d.ts +367 -0
  17. package/dist/{piChatSessionService-DPjJ0g71.d.ts → piChatSessionService-BaaVWke7.d.ts} +5 -1
  18. package/dist/{sandbox-DthfJaOB.d.ts → sandbox-DAD8cWQR.d.ts} +14 -1
  19. package/dist/server/agent-host/testing/gatewayConformance.d.ts +41 -0
  20. package/dist/server/agent-host/testing/gatewayConformance.js +465 -0
  21. package/dist/server/index.d.ts +507 -708
  22. package/dist/server/index.js +53 -50
  23. package/dist/server/worker/index.d.ts +9 -7
  24. package/dist/server/worker/index.js +19 -28
  25. package/dist/shared/index.d.ts +119 -27
  26. package/dist/shared/index.js +65 -282
  27. package/dist/types-jcMapYr9.d.ts +759 -0
  28. package/docs/ACCESSIBILITY.md +4 -5
  29. package/docs/API.md +3 -0
  30. package/docs/AUTHORING.md +68 -0
  31. package/docs/ERROR_CODES.md +29 -0
  32. package/docs/README.md +1 -0
  33. package/docs/RISKS-MULTI-TAB.md +1 -1
  34. package/docs/runtime-provisioning.md +1 -1
  35. package/docs/runtime.md +9 -6
  36. package/package.json +18 -9
  37. package/dist/chunk-DGRKMMXO.js +0 -8
  38. package/dist/chunk-XPQEF32D.js +0 -385
  39. package/dist/piChatEvent-nmOBSNU9.d.ts +0 -367
@@ -37,9 +37,8 @@ This runs in CI automatically through the existing `pnpm e2e` job.
37
37
 
38
38
  ## Known Gaps
39
39
 
40
- 1. Storybook a11y pipeline is not present yet.
41
- There is no `.storybook` config, no `@storybook/addon-a11y`, and no
42
- story-level axe scan.
40
+ 1. A registered agent-component UI-review spec is not present yet, so there is
41
+ no fixture-level axe scan for agent primitives.
43
42
  2. Current automated axe gate targets the shipped chat surface only.
44
43
  Workspace pane-level a11y checks (file tree, editor panes, dock tabs) are
45
44
  outside this package and need dedicated coverage in `@hachej/boring-workspace`.
@@ -47,7 +46,7 @@ This runs in CI automatically through the existing `pnpm e2e` job.
47
46
 
48
47
  ## Next Increment
49
48
 
50
- 1. Stand up Storybook for `@hachej/boring-agent` primitives.
51
- 2. Enable addon-a11y and add story-level CI checks.
49
+ 1. Register deterministic agent-primitive checkpoints in `tools/ui-review`.
50
+ 2. Add fixture-level axe hard gates to that registered spec.
52
51
  3. Extend browser axe checks to `workspace-playground` once pane a11y owners
53
52
  land stable selectors/landmarks.
package/docs/API.md CHANGED
@@ -58,6 +58,9 @@ The Node runtime. Key exports:
58
58
  `createVercelProvisioningAdapter`.
59
59
  - HTTP/CSP: `applyCspHeaders`; `fileRoutes` for mounting file routes alone.
60
60
  - Harness: `createResourceSettingsManager` and the Pi harness option types.
61
+ - Declarative authoring: `compileAgentDirectory()` and
62
+ `materializeAgentDirectory()`; see [AUTHORING](./AUTHORING.md). The materialized
63
+ value contains no tools, plugin selectors, paths, or runtime handles.
61
64
  - `createLogger`.
62
65
 
63
66
  ### Trusted workspace agent dispatch
@@ -0,0 +1,68 @@
1
+ # Declarative agent authoring
2
+
3
+ An authored agent directory describes identity, safe display metadata, and
4
+ instructions. It does not select executable behavior.
5
+
6
+ ```text
7
+ my-agent/
8
+ ├── agent.json
9
+ └── instructions.md
10
+ ```
11
+
12
+ ```json
13
+ {
14
+ "schemaVersion": 1,
15
+ "definitionId": "claims-assistant",
16
+ "version": "2026.07.20",
17
+ "label": "Claims assistant",
18
+ "description": "Helps process insurance claims.",
19
+ "instructionsRef": "instructions.md"
20
+ }
21
+ ```
22
+
23
+ `label` and `description` are optional. Labels are limited to 128 characters;
24
+ descriptions are limited to 1,024 characters. Both must be trimmed, valid
25
+ Unicode without control or bidi-spoofing characters.
26
+
27
+ The loader:
28
+
29
+ - reads only `agent.json` and `instructions.md`;
30
+ - requires regular, non-symlink files contained in the directory;
31
+ - limits the manifest to 64 KiB and instructions to 256 KiB before decoding;
32
+ - requires valid UTF-8 and non-whitespace instructions;
33
+ - returns a frozen `AuthoredAgentSourceV1` from
34
+ `materializeAgentDirectory()` containing only identity, metadata, and
35
+ instructions.
36
+
37
+ ## Executable behavior belongs to trusted host policy
38
+
39
+ Tools, capabilities, skills, MCP servers, packages, models, credentials,
40
+ plugins, runtime modes, and Workspace roots are configured by trusted host and
41
+ plugin code. Authored JSON cannot enable them.
42
+
43
+ Legacy manifests may still contain these keys while being cleaned up:
44
+
45
+ - `capabilityRequirements`
46
+ - `toolRefs`
47
+ - `skillRefs`
48
+ - `mcpServerRefs`
49
+
50
+ Absent or empty arrays are accepted and stripped. A non-empty array fails with
51
+ `AUTHORED_AGENT_REFERENCE_UNSUPPORTED`; move the requested behavior to trusted
52
+ host/plugin configuration.
53
+
54
+ The removed server contracts are `AuthoredAgentToolCatalog`,
55
+ `MaterializeAgentDirectoryInput.toolCatalog`, and the materialized `tools` and
56
+ `declaredToolRefs` fields. This correction removes no HTTP or product endpoint.
57
+
58
+ ## Validation
59
+
60
+ ```bash
61
+ boring-ui agent validate ./my-agent
62
+ boring-ui agent validate ./my-agent --json
63
+ ```
64
+
65
+ Success reports only identity, optional metadata, and instruction byte length.
66
+ It never reports or resolves a tool catalog. Errors are field-specific and
67
+ redacted; unexpected failures return `INTERNAL_ERROR` without local paths or
68
+ secret-like source values.
@@ -39,6 +39,9 @@ All API failures must use the response envelope:
39
39
  | `AGENT_RUNTIME_NOT_READY` | Selected workspace runtime dependencies (`runtime-dependencies` or `runtime:<name>`, e.g. `runtime:python`/`runtime:node`) are still preparing | 503 | retry | warn | stable (public API) |
40
40
  | `AGENT_BINDING_DISPOSED` | A caller retained an agent binding after its host retired it | 410 | resolve a fresh binding | warn | stable (trusted API) |
41
41
  | `AGENT_CONTROL_RECEIPT_INVALID` | The existing agent runtime returned a malformed interrupt/stop receipt through the trusted dispatcher | 500 | report-bug | error | stable (trusted API) |
42
+ | `AGENT_FLEET_PLUGIN_UNKNOWN` | Agent fleet configuration references a plugin that the app did not load | 500 | fix app configuration | error | stable (trusted API) |
43
+ | `AGENT_FLEET_CONFIG_BINDING_UNKNOWN` | Agent fleet configuration passes a plugin config key outside its declared Agent config contract | 500 | fix app configuration | error | stable (trusted API) |
44
+ | `AGENT_FLEET_MODEL_POLICY_UNCOMPILED` | Agent fleet configuration declares a model policy that the app fleet compiler did not resolve | 500 | configure app fleet compiler | error | stable (trusted API) |
42
45
  | `RUNTIME_PROVISIONING_FAILED` | Agent runtime dependency provisioning failed before Level 3 runtime dependencies became ready | 503 | retry/report | error | stable (public API) |
43
46
  | `RUNTIME_PROVISIONING_LOCKED` | Agent runtime provisioning is locked by another reconciler | 423 | retry | warn | stable (public API) |
44
47
  | `BWRAP_UNAVAILABLE` | `bwrap` binary not found | 500 | report-bug | error | stable (public API) |
@@ -47,6 +50,28 @@ All API failures must use the response envelope:
47
50
  | `SANDBOX_NOT_READY` | Remote sandbox cold start / provisioning | 503 | retry | warn | stable (public API) |
48
51
  | `SANDBOX_EXPIRED` | Remote sandbox TTL elapsed | 410 | retry | warn | stable (public API) |
49
52
  | `VERCEL_API_ERROR` | Generic upstream Vercel SDK/API failure | 502 | retry | error | stable (public API) |
53
+ | `REMOTE_WORKER_CONFIG_INVALID` | Static remote-worker fleet configuration is invalid or incomplete | 500 | report-bug | error | stable (trusted API) |
54
+ | `REMOTE_WORKER_PROTOCOL_MISMATCH` | Worker protocol or provider-contract version differs from the configured V1 cohort | 502 | operator-fix | error | stable (trusted API) |
55
+ | `REMOTE_WORKER_UNAUTHENTICATED` | Worker rejected the per-box capability or authenticated receipt | 401 | operator-fix | warn | stable (trusted API) |
56
+ | `REMOTE_WORKER_UNAVAILABLE` | The statically owning worker cannot serve the request; no fallback is attempted | 503 | retry | warn | stable (public API) |
57
+ | `REMOTE_WORKER_UNQUALIFIED` | Worker qualification or artifact facts do not match static placement config | 503 | operator-fix | error | stable (trusted API) |
58
+ | `REMOTE_WORKER_REQUEST_INVALID` | A strict remote-worker request schema rejected the request | 400 | report-bug | warn | stable (trusted API) |
59
+ | `REMOTE_WORKER_RESPONSE_INVALID` | A strict remote-worker response schema rejected the worker response | 502 | operator-fix | error | stable (trusted API) |
60
+ | `REMOTE_WORKER_CAPABILITY_EXPIRED` | A short-lived worker capability expired or exceeded its maximum lifetime | 401 | retry | warn | stable (trusted API) |
61
+ | `REMOTE_WORKER_AUTHORIZED_WORKSPACE_REQUIRED` | Remote provider creation lacked an authenticated workspace identity | 403 | report-bug | warn | stable (trusted API) |
62
+ | `REMOTE_WORKER_BINDING_RECEIPT_INVALID` | Create returned an unauthenticated or mismatched sandbox/workspace binding receipt | 502 | operator-fix | error | stable (trusted API) |
63
+ | `REMOTE_WORKER_SANDBOX_WORKSPACE_MISMATCH` | Authorized workspace capability does not match the immutable sandbox lease binding | 404 | report-security | warn | stable (trusted API) |
64
+ | `REMOTE_WORKER_SANDBOX_NOT_FOUND` | Addressed remote sandbox lease does not exist | 404 | reacquire | warn | stable (trusted API) |
65
+ | `REMOTE_WORKER_SANDBOX_EXPIRED` | Addressed remote sandbox lease has expired | 410 | reacquire | warn | stable (trusted API) |
66
+ | `REMOTE_WORKER_SANDBOX_DISPOSED` | Addressed remote sandbox lease was already disposed | 410 | reacquire | warn | stable (trusted API) |
67
+ | `REMOTE_WORKER_CREATE_CONCURRENCY_EXHAUSTED` | Worker create concurrency is exhausted | 429 | retry | warn | stable (trusted API) |
68
+ | `REMOTE_WORKER_EXEC_CONCURRENCY_EXHAUSTED` | Worker execution concurrency is exhausted | 429 | retry | warn | stable (trusted API) |
69
+ | `REMOTE_WORKER_IDEMPOTENCY_CONFLICT` | Reused lease/invocation id has a different request digest | 409 | report-bug | warn | stable (trusted API) |
70
+ | `REMOTE_WORKER_EXEC_IN_PROGRESS` | Duplicate invocation is still executing | 409 | retry | warn | stable (trusted API) |
71
+ | `REMOTE_WORKER_SECRET_INVOCATION_NOT_REPLAYABLE` | Completed secret-bearing invocation cannot replay cached output | 409 | start-new-request | warn | stable (trusted API) |
72
+ | `REMOTE_WORKER_OUTCOME_UNKNOWN` | Worker loss left an effectful invocation outcome unknown; no automatic replay is safe | 502 | inspect-before-retry | error | stable (public API) |
73
+ | `REMOTE_WORKER_INCOMPLETE_CLEANUP` | Provider could not prove remote lease teardown after bounded retries | 502 | operator-fix | error | stable (trusted API) |
74
+ | `REMOTE_WORKER_DOCKER_COMMAND_FAILED` | Worker runtime command failed without exposing infrastructure stderr | 502 | operator-fix | error | stable (trusted API) |
50
75
  | `REMOTE_WORKER_TIMEOUT` | Remote worker request exceeded its client-side timeout before a response arrived | 504 | retry | warn | stable (public API) |
51
76
  | `REMOTE_WORKER_STREAM_CLOSED` | Remote worker filesystem event stream closed unexpectedly | 502 | retry | warn | stable (public API) |
52
77
  | `CIRCUIT_OPEN` | Circuit breaker open; request fast-failed | 503 | retry | warn | stable (public API) |
@@ -62,6 +87,10 @@ All API failures must use the response envelope:
62
87
  | `TOOL_NOT_FOUND` | Requested tool name not present in catalog | 404 | user-fix | warn | stable (public API) |
63
88
  | `TOOL_INVALID_INPUT` | Tool input fails schema validation | 400 | user-fix | warn | stable (public API) |
64
89
  | `TOOL_EXECUTION_ERROR` | Tool threw or returned execution failure | 500 | report-bug | error | stable (public API) |
90
+ | `AUTHORED_AGENT_ID_INVALID` | Authored agent materialization received an agent type id outside the product-safe grammar | 400 | user-fix | warn | stable (trusted API) |
91
+ | `AUTHORED_AGENT_TYPE_MISMATCH` | Trusted host expected one authored agent type but the directory declares another | 409 | user-fix | warn | stable (trusted API) |
92
+ | `AUTHORED_AGENT_REFERENCE_UNSUPPORTED` | Authored source contains a non-empty legacy capability/tool/skill/MCP selector; move behavior to trusted host plugins | 400 | user-fix | warn | stable migration error |
93
+ | `AUTHORED_AGENT_TOOL_COLLISION` | Normal trusted tool composition produced duplicate or colliding tool names | 409 | user-fix | warn | stable (trusted API) |
65
94
  | `MCP_AGENT_ARTIFACT_INVALID` | Managed MCP delivery artifact is path-shaped, non-Markdown, binary, malformed UTF-8, or otherwise invalid | 400 | user-fix | warn | stable (public API) |
66
95
  | `MCP_AGENT_ARTIFACT_TOO_LARGE` | Managed MCP final text, inline Markdown artifact, or serialized result exceeds the delivery v0 byte cap | 413 | user-fix | warn | stable (public API) |
67
96
  | `MCP_AGENT_ARTIFACT_UNAVAILABLE` | Managed MCP artifact is missing, unreadable through the authorized workspace, or changed during read | 409 | retry | warn | stable (public API) |
package/docs/README.md CHANGED
@@ -67,6 +67,7 @@ the agent ↔ workspace boundary is in
67
67
  **Surfaces & integration**
68
68
 
69
69
  - [API](./API.md) — the four entry points and what each exports.
70
+ - [AUTHORING](./AUTHORING.md) — declarative agent directories, bounds, validation, and legacy catalog migration.
70
71
  - [STYLING](./STYLING.md) — CSS-variable theming contract and public selectors.
71
72
  - [UI-SHADCN](./UI-SHADCN.md) — `ChatPanel` styling model and tool-renderer overrides.
72
73
  - [tools](./tools.md) — built-in tools, package-added tools, and how to add custom tools.
@@ -17,7 +17,7 @@ point at the same workspace and edit the same file.
17
17
  This is visible in route code:
18
18
  - [file.ts](../src/server/http/routes/file.ts) calls `workspace.writeFile(...)`
19
19
  directly.
20
- - [createNodeWorkspace.ts](../src/server/workspace/createNodeWorkspace.ts)
20
+ - [createNodeWorkspace.ts](../../boring-sandbox/src/providers/node-workspace/createNodeWorkspace.ts)
21
21
  calls Node `writeFile(...)` without revision guards.
22
22
 
23
23
  Behavior is exercised by:
@@ -152,6 +152,6 @@ Useful smoke/unit checks:
152
152
  pnpm --filter @hachej/boring-ui-cli exec vitest run src/__tests__/runtimeProvisioning.test.ts
153
153
  pnpm --filter @hachej/boring-workspace exec vitest run src/app/server/__tests__/macroRuntimeProvisioning.test.ts
154
154
  pnpm --filter @hachej/boring-workspace exec vitest run src/server/__tests__/createWorkspaceAgentServer.test.ts --testNamePattern "runtime provisioning reload"
155
- pnpm --filter @hachej/boring-agent exec vitest run src/server/sandbox/vercel-sandbox/__tests__/provisioningAdapter.test.ts
155
+ pnpm --filter @hachej/boring-sandbox exec vitest run src/providers/vercel-sandbox/__tests__/provisioningAdapter.test.ts
156
156
  pnpm --filter @hachej/boring-agent exec vitest run src/server/workspace/provisioning/__tests__
157
157
  ```
package/docs/runtime.md CHANGED
@@ -73,7 +73,7 @@ Provisioned runtime artifacts live under the workspace-local `.boring-agent/` di
73
73
 
74
74
  PATH entries exposed to the harness are `node/node_modules/.bin`, `venv/bin`,
75
75
  and `sdk/uv/bin` (see `getBoringAgentPathEntries` in
76
- `src/server/workspace/runtimeLayout.ts`). `.boring-agent/bin` is a managed shim
76
+ `@hachej/boring-sandbox/providers/node-workspace`). `.boring-agent/bin` is a managed shim
77
77
  location written by the provisioner; it is not the canonical PATH source
78
78
  described by `getBoringAgentPathEntries`. The provisioner writes ownership
79
79
  markers (`.boring-agent-owned.json`) for managed runtime directories. Do not
@@ -248,8 +248,8 @@ interface RuntimeModeAdapter {
248
248
  workspaceFsCapability?: Workspace['fsCapability']
249
249
  // describes how much host-side fs access exists before create();
250
250
  // remote backends must not claim strong host visibility
251
+ runtimeHost?: AgentRuntimeHostOperations // host-owned workspace/path/bwrap operations
251
252
  create(ctx: ModeContext): Promise<RuntimeBundle>
252
- createProvisioningAdapter?(runtimeLayout, ctx?): WorkspaceProvisioningAdapter
253
253
  dispose?(): Promise<void>
254
254
  }
255
255
 
@@ -262,15 +262,18 @@ interface RuntimeBundle {
262
262
  sandbox: Sandbox // your exec adapter — MUST share the workspace's
263
263
  // filesystem substrate (invariant 5: mixed pairings = split-brain)
264
264
  fileSearch: FileSearch // createServerFileSearch(workspace, sandbox) usually
265
+ provisioningAdapter?: WorkspaceProvisioningAdapter
266
+ // provisioning bound to this acquired pair
267
+ disposeRuntime?: () => Promise<void> // releases this acquired pair exactly once
265
268
  }
266
269
  ```
267
270
 
268
- Reference implementation to copy: `src/server/runtime/modes/local.ts` (~35
269
- lines: mkdir + template copy + `createNodeWorkspace` + `createBwrapSandbox`,
270
- paired on the same root). Tests to extend:
271
+ Reference composition to copy: `packages/workspace/src/app/server/sandboxRuntimeHost.ts`,
272
+ which creates package-owned providers and injects host operations into the
273
+ generic Agent mode factories. Tests to extend:
271
274
  `src/server/runtime/__tests__/resolveMode.test.ts`.
272
275
 
273
276
  Rules that must hold: the adapter owns path validation (reject `../`,
274
- absolute, symlink escapes — see `src/server/workspace/paths.ts`); Workspace +
277
+ absolute, symlink escapes — see `@hachej/boring-sandbox/providers/node-workspace`); Workspace +
275
278
  Sandbox swap as a pair; consumers receive `Workspace` as a parameter and never
276
279
  see raw paths.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hachej/boring-agent",
3
- "version": "0.1.89",
3
+ "version": "0.1.91",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Pane-embeddable coding agent. Ships direct/local/vercel-sandbox execution modes behind one interface.",
@@ -32,6 +32,11 @@
32
32
  "import": "./dist/server/pi-session-readability.js",
33
33
  "default": "./dist/server/pi-session-readability.js"
34
34
  },
35
+ "./server/agent-host/testing/gatewayConformance": {
36
+ "types": "./dist/server/agent-host/testing/gatewayConformance.d.ts",
37
+ "import": "./dist/server/agent-host/testing/gatewayConformance.js",
38
+ "default": "./dist/server/agent-host/testing/gatewayConformance.js"
39
+ },
35
40
  "./server/worker": {
36
41
  "types": "./dist/server/worker/index.d.ts",
37
42
  "import": "./dist/server/worker/index.js",
@@ -71,10 +76,7 @@
71
76
  "@streamdown/math": "^1.0.2",
72
77
  "@streamdown/mermaid": "^1.0.2",
73
78
  "@tanstack/react-query": "^5.101.1",
74
- "@vercel/blob": "^2.5.0",
75
- "@vercel/sandbox": "2.3.0",
76
79
  "ai": "^7.0.9",
77
- "chokidar": "^5.0.0",
78
80
  "class-variance-authority": "^0.7.1",
79
81
  "clsx": "^2.1.1",
80
82
  "cmdk": "^1.1.1",
@@ -89,9 +91,12 @@
89
91
  "use-stick-to-bottom": "^1.1.6",
90
92
  "yaml": "^2.9.0",
91
93
  "zod": "^3.25.76",
92
- "@hachej/boring-ui-kit": "0.1.89"
94
+ "@hachej/boring-sandbox": "0.1.91",
95
+ "@hachej/boring-ui-kit": "0.1.91",
96
+ "@hachej/boring-bash": "0.1.91"
93
97
  },
94
98
  "devDependencies": {
99
+ "@vercel/sandbox": "2.3.0",
95
100
  "@antithesishq/bombadil": "0.6.1",
96
101
  "@opentelemetry/api": "^1.9.1",
97
102
  "@tailwindcss/postcss": "^4.3.1",
@@ -100,12 +105,12 @@
100
105
  "@types/react-dom": "^19.1.3",
101
106
  "@vitejs/plugin-react": "^4.7.0",
102
107
  "ajv": "^8.20.0",
103
- "esbuild": "^0.25.12",
104
- "postcss": "^8.5.15",
108
+ "esbuild": "^0.28.1",
109
+ "postcss": "^8.5.19",
105
110
  "react": "^19.2.7",
106
111
  "react-dom": "^19.2.7",
107
112
  "tsup": "^8.4.0",
108
- "tsx": "^4.22.4",
113
+ "tsx": "^4.23.1",
109
114
  "typescript": "^6.0.3",
110
115
  "vite": "^8.1.2",
111
116
  "vitest": "^4.1.9"
@@ -113,7 +118,8 @@
113
118
  "peerDependencies": {
114
119
  "react": "^18.0.0 || ^19.0.0",
115
120
  "react-dom": "^18.0.0 || ^19.0.0",
116
- "tailwindcss": ">=3.4.0 || >=4.0.0"
121
+ "tailwindcss": ">=3.4.0 || >=4.0.0",
122
+ "vitest": "^4.1.9"
117
123
  },
118
124
  "peerDependenciesMeta": {
119
125
  "react": {
@@ -124,6 +130,9 @@
124
130
  },
125
131
  "tailwindcss": {
126
132
  "optional": true
133
+ },
134
+ "vitest": {
135
+ "optional": true
127
136
  }
128
137
  },
129
138
  "scripts": {
@@ -1,8 +0,0 @@
1
- // src/shared/agentPluginEvents.ts
2
- var WORKSPACE_AGENT_PLUGINS_RELOADED_EVENT = "boring-ui:agent-plugins-reloaded";
3
- var WORKSPACE_COMMAND_NOTIFY_EVENT = "boring-ui:command-notify";
4
-
5
- export {
6
- WORKSPACE_AGENT_PLUGINS_RELOADED_EVENT,
7
- WORKSPACE_COMMAND_NOTIFY_EVENT
8
- };