@hachej/boring-agent 0.1.109 → 0.1.110
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/{errors-CEU4iujR.d.ts → admin-DORVQfLn.d.ts} +80 -3
- package/dist/{chunk-GS4ADE34.js → chunk-42D6KAQV.js} +36 -12
- package/dist/{chunk-6OANSUEI.js → chunk-72KT6VWV.js} +59 -2
- package/dist/{chunk-3JFPS2O6.js → chunk-KJIEMSQP.js} +10 -1
- package/dist/{chunk-MVKXLMH3.js → chunk-KN72XWP7.js} +1 -1
- package/dist/{chunk-KDXIXVF6.js → chunk-V3H5A3BR.js} +12410 -5047
- package/dist/core/index.d.ts +5 -5
- package/dist/core/index.js +2 -1
- package/dist/{createHarness-AHWSC36D.js → createHarness-DOLOHA62.js} +2 -2
- package/dist/file-search-BUgMSKZE.d.ts +289 -0
- package/dist/front/index.d.ts +89 -4
- package/dist/front/index.js +508 -47
- package/dist/front/styles.css +55 -55
- package/dist/{harness-Ct0e4RWc.d.ts → harness-qHlMJhZo.d.ts} +1 -1
- package/dist/{piChatEvent-BUWIzw5l.d.ts → piChatEvent-DpE0lIb9.d.ts} +49 -17
- package/dist/{piChatSessionService-nvroRAVk.d.ts → piChatSessionService-CBct-hmz.d.ts} +4 -1
- package/dist/server/agent-host/testing/gatewayConformance.d.ts +7 -6
- package/dist/server/agent-host/testing/gatewayConformance.js +14 -7
- package/dist/server/index.d.ts +890 -56
- package/dist/server/index.js +73 -7
- package/dist/server/worker/index.js +5 -5
- package/dist/{lease-nASWv2tU.d.ts → share-entry-CxS6UJ_L.d.ts} +77 -179
- package/dist/shared/index.d.ts +118 -222
- package/dist/shared/index.js +17 -5
- package/dist/{types-B7-PN5jV.d.ts → types-DcWoQMn8.d.ts} +346 -10
- package/docs/AGENT_GATEWAY_V0.md +22 -2
- package/docs/AGENT_PACKAGES.md +15 -5
- package/docs/ERROR_CODES.md +14 -0
- package/package.json +10 -18
- package/dist/file-search-BGUHnW9o.d.ts +0 -87
package/docs/AGENT_PACKAGES.md
CHANGED
|
@@ -37,7 +37,10 @@ seats:
|
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
Restart a single-workspace host with `BORING_AGENT_FLEET=1`. A valid seated
|
|
40
|
-
package appears in the agent catalog
|
|
40
|
+
package appears in the agent catalog with its exact declared
|
|
41
|
+
`boring.agent.version` and computed definition digest. The Host `describe()`
|
|
42
|
+
inventory exposes the same values as `definitionVersion` and
|
|
43
|
+
`definitionDigest`. An installed package without a matching
|
|
41
44
|
seat remains inert and reports `AGENT_DEFINITION_UNSEATED` during fleet
|
|
42
45
|
composition. The shared CLI workspaces hub never admits the local agent
|
|
43
46
|
contribution, even when the global roster names its definition id.
|
|
@@ -52,8 +55,13 @@ contribution, even when the global roster names its definition id.
|
|
|
52
55
|
Digest refresh is intentionally repository-local in v1. The script reads only
|
|
53
56
|
`.agents/personas/`; it does not rewrite pins for agent packages installed from
|
|
54
57
|
another local directory. Such packages must already have matching
|
|
55
|
-
seat-authoritative skill pins. A
|
|
56
|
-
|
|
58
|
+
seat-authoritative skill pins. A package with a schema, preflight, conflict,
|
|
59
|
+
materialization, or digest mismatch is excluded with its stable diagnostic (for
|
|
60
|
+
example `AGENT_FLEET_SEAT_SKILL_DIGEST_MISMATCH`) while valid sibling seats
|
|
61
|
+
continue to boot. Invalid unseated discovery is likewise excluded because it
|
|
62
|
+
has no activation authority. A missing fleet file means no authored roster and
|
|
63
|
+
boots only the regular default Agent; a present but malformed fleet or policy
|
|
64
|
+
file remains a whole-fleet configuration error.
|
|
57
65
|
|
|
58
66
|
## Unseat or remove
|
|
59
67
|
|
|
@@ -66,8 +74,10 @@ To remove its workspace registration as well:
|
|
|
66
74
|
boring-ui-plugin remove --local --workspace . my-agent-plugin-id
|
|
67
75
|
```
|
|
68
76
|
|
|
69
|
-
Then restart.
|
|
70
|
-
|
|
77
|
+
Then restart. Remove the roster seat before removing its registration. If the
|
|
78
|
+
roster still names the removed definition, that Agent is excluded with
|
|
79
|
+
`AGENT_FLEET_SEAT_PERSONA_INVALID` while the default and valid sibling seats
|
|
80
|
+
continue to boot.
|
|
71
81
|
|
|
72
82
|
## v1 distribution boundary
|
|
73
83
|
|
package/docs/ERROR_CODES.md
CHANGED
|
@@ -147,6 +147,15 @@ All API failures must use the response envelope:
|
|
|
147
147
|
| `RUNTIME_READONLY_FILESYSTEM_POLICY_INVALID` | A readonly primary-workspace path is not a normalized workspace-relative path | 400 | user-fix | warn | stable (public API) |
|
|
148
148
|
| `EVENT_STORE_OPEN_FAILED` | `BORING_CHAT_DURABLE_STREAM=1` but the SQLite event-stream store could not be opened: either no host-resolvable root exists (no `sessionRoot` and no host storage root — this deliberately never falls back to an in-sandbox/guest path) or `openDatabase` failed at the resolved path (bad path/permissions); reported via telemetry alongside `DURABLE_STREAM_UNAVAILABLE` | n/a (boot-time diagnostic, not an HTTP response) | report-bug | error | stable (public API) |
|
|
149
149
|
| `DURABLE_STREAM_UNAVAILABLE` | `BORING_CHAT_DURABLE_STREAM=1` but the durable event-stream store could not be opened; boot fails loudly with the underlying cause instead of silently falling back to in-memory streaming (flag off = in-memory, unchanged) | n/a (boot-time failure, not an HTTP response) | user-fix | error | stable (public API) |
|
|
150
|
+
| `CHANNEL_DURABLE_STREAM_REQUIRED` | `BORING_AGENT_CHANNELS=1` was set without durable chat streaming; boot fails rather than accepting channel traffic that cannot resume | n/a (boot-time failure) | user-fix | error | stable (public API) |
|
|
151
|
+
| `CHANNEL_INBOUND_ACCEPTED` | The provider message was durably deduplicated/enqueued and asynchronous channel processing may begin | 200 | none | info | stable (public API) |
|
|
152
|
+
| `CHANNEL_UNKNOWN_BINDING` | Channel inbound did not match an active provisioned binding; no session or identity was created | 200 | user-fix | warn | stable (public API) |
|
|
153
|
+
| `CHANNEL_INBOUND_PARKED` | Channel inbound exhausted bounded delivery retries and was parked so later messages are not wedged | n/a (worker diagnostic) | retry | warn | stable (public API) |
|
|
154
|
+
| `CHANNEL_OUTBOUND_PARKED` | A completed channel turn exhausted bounded send retries and was parked so later turns are not wedged | n/a (worker diagnostic) | retry | warn | stable (public API) |
|
|
155
|
+
| `CHANNEL_TURN_STALLED` | A channel turn did not reach a terminal event before its configured deadline; a notice was sent and the observed range was parked | n/a (worker diagnostic) | retry | warn | stable (public API) |
|
|
156
|
+
| `CHANNEL_BINDING_BUSY` | Provisioning could not replace a binding while its current generation held a live outbound-delivery lease | n/a (admin operation) | retry | warn | stable (public API) |
|
|
157
|
+
| `CHANNEL_BINDING_REVOKED` | A channel binding was revoked while queued work was being resolved | n/a (worker diagnostic) | user-fix | warn | stable (public API) |
|
|
158
|
+
| `SESSION_CREATE_TIMEOUT` | The owner-token channel session reservation did not reach ready state within bounded reservation cycles | n/a (worker diagnostic) | retry | warn | stable (public API) |
|
|
150
159
|
| `ERR_NOT_IMPLEMENTED_UNTIL_T1` | Headless core method exists but the durable T1 implementation has not landed yet | 501 | retry-after-upgrade | warn | stable (public API) |
|
|
151
160
|
| `INTERNAL_ERROR` | Catch-all internal failure | 500 | report-bug | error | internal (may change) |
|
|
152
161
|
| `AR1_SHARE_NOT_FOUND` | `GET /a/:id` deep link: no such Lane W share entry, or the entry belongs to a workspace the requester is not authorized/scoped to (identical response either way — no existence oracle) | 404 | user-fix | warn | stable (public API) |
|
|
@@ -177,6 +186,11 @@ credential value, a workspace DEK, or KEK material.
|
|
|
177
186
|
| `CREDENTIAL_LEASE_EXPIRED` | A resolved credential lease was used after disposal or expiry | 410 | resolve a fresh lease | warn | stable (trusted API) |
|
|
178
187
|
| `CREDENTIAL_OAUTH_STATE_INVALID` | A one-use OAuth state transaction was unknown, replayed, or expired | 400 | restart the connect flow | warn | stable (trusted API) |
|
|
179
188
|
| `CREDENTIAL_OAUTH_REFRESH_FAILED` | Upstream refused a refresh-token exchange | 401 | re-auth | warn | stable (trusted API) |
|
|
189
|
+
| `CREDENTIAL_VALIDATION_UNAUTHORIZED` | Provider rejected a pending API key before persistence | 401 | correct the key and retry | warn | stable (trusted API) |
|
|
190
|
+
| `CREDENTIAL_VALIDATION_RATE_LIMITED` | Provider rate-limited pending API-key validation | 429 | retry later | warn | stable (trusted API) |
|
|
191
|
+
| `CREDENTIAL_VALIDATION_UNAVAILABLE` | Provider validation transport was unavailable | 503 | retry later | warn | stable (trusted API) |
|
|
192
|
+
| `CREDENTIAL_VALIDATION_TIMEOUT` | Provider validation exceeded the bounded timeout | 504 | retry later | warn | stable (trusted API) |
|
|
193
|
+
| `CREDENTIAL_VALIDATION_UNSUPPORTED` | Provider lacks a trusted API-key validation probe | 400 | use a supported provider/auth method | warn | stable (trusted API) |
|
|
180
194
|
|
|
181
195
|
## Readiness error details
|
|
182
196
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hachej/boring-agent",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.110",
|
|
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.",
|
|
@@ -71,47 +71,39 @@
|
|
|
71
71
|
"dependencies": {
|
|
72
72
|
"@mariozechner/pi-coding-agent": "npm:@earendil-works/pi-coding-agent@0.84.3",
|
|
73
73
|
"@modelcontextprotocol/sdk": "1.30.0",
|
|
74
|
-
"@radix-ui/react-collapsible": "^1.1.20",
|
|
75
|
-
"@radix-ui/react-dialog": "^1.1.23",
|
|
76
|
-
"@radix-ui/react-dropdown-menu": "^2.1.24",
|
|
77
|
-
"@radix-ui/react-hover-card": "^1.1.23",
|
|
78
|
-
"@radix-ui/react-select": "^2.3.7",
|
|
79
|
-
"@radix-ui/react-separator": "^1.1.15",
|
|
80
|
-
"@radix-ui/react-slot": "^1.3.3",
|
|
81
|
-
"@radix-ui/react-tooltip": "^1.2.16",
|
|
82
74
|
"@radix-ui/react-use-controllable-state": "^1.2.6",
|
|
83
75
|
"@streamdown/cjk": "^1.0.3",
|
|
84
76
|
"@streamdown/code": "^1.1.1",
|
|
85
77
|
"@streamdown/math": "^1.0.2",
|
|
86
78
|
"@streamdown/mermaid": "^1.0.2",
|
|
87
|
-
"@tanstack/react-query": "^5.101.4",
|
|
88
79
|
"ai": "^7.0.68",
|
|
89
|
-
"class-variance-authority": "^0.7.1",
|
|
90
80
|
"clsx": "^2.1.1",
|
|
91
|
-
"cmdk": "^1.1.1",
|
|
92
81
|
"diff": "^9.0.0",
|
|
93
82
|
"fastify": "^5.12.1",
|
|
94
83
|
"lucide-react": "^1.31.0",
|
|
95
84
|
"motion": "^13.1.0",
|
|
96
85
|
"nanoid": "^6.0.0",
|
|
86
|
+
"postgres": "^3.4.9",
|
|
87
|
+
"proper-lockfile": "^4.1.2",
|
|
97
88
|
"shiki": "^4.4.2",
|
|
98
89
|
"streamdown": "^2.5.0",
|
|
99
90
|
"tailwind-merge": "^3.5.0",
|
|
100
91
|
"use-stick-to-bottom": "^1.1.6",
|
|
101
92
|
"yaml": "^2.9.0",
|
|
102
93
|
"zod": "^3.25.76",
|
|
103
|
-
"@hachej/boring-
|
|
104
|
-
"@hachej/boring-ui-kit": "0.1.
|
|
105
|
-
"@hachej/boring-
|
|
94
|
+
"@hachej/boring-sandbox": "0.1.110",
|
|
95
|
+
"@hachej/boring-ui-kit": "0.1.110",
|
|
96
|
+
"@hachej/boring-bash": "0.1.110"
|
|
106
97
|
},
|
|
107
98
|
"devDependencies": {
|
|
108
99
|
"@vercel/sandbox": "3.0.0",
|
|
109
|
-
"@antithesishq/bombadil": "0.7.
|
|
100
|
+
"@antithesishq/bombadil": "0.7.2",
|
|
110
101
|
"@opentelemetry/api": "^1.9.1",
|
|
111
102
|
"@tailwindcss/postcss": "^4.3.3",
|
|
112
103
|
"@types/node": "^22.20.0",
|
|
104
|
+
"@types/proper-lockfile": "^4.1.4",
|
|
113
105
|
"@types/react": "^19.2.18",
|
|
114
|
-
"@types/react-dom": "^19.2.
|
|
106
|
+
"@types/react-dom": "^19.2.5",
|
|
115
107
|
"@vitejs/plugin-react": "^4.7.0",
|
|
116
108
|
"ajv": "^8.20.0",
|
|
117
109
|
"esbuild": "^0.28.2",
|
|
@@ -119,7 +111,7 @@
|
|
|
119
111
|
"react": "^19.2.8",
|
|
120
112
|
"react-dom": "^19.2.8",
|
|
121
113
|
"tsup": "^8.4.0",
|
|
122
|
-
"tsx": "^4.23.
|
|
114
|
+
"tsx": "^4.23.13",
|
|
123
115
|
"typescript": "^6.0.3",
|
|
124
116
|
"vite": "^8.2.1",
|
|
125
117
|
"@earendil-works/pi-ai": "0.84.3",
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { k as InterruptReceipt, j as StopReceipt } from './piChatEvent-BUWIzw5l.js';
|
|
2
|
-
import { p as AgentSendInput, j as AgentEvent } from './harness-Ct0e4RWc.js';
|
|
3
|
-
import { b as Workspace } from './sandbox-BMhut3kh.js';
|
|
4
|
-
import { b as AgentSessionRef, d as AgentSendReceipt, A as AgentGateway, a as AuthorizedAgentScope } from './errors-CEU4iujR.js';
|
|
5
|
-
|
|
6
|
-
interface WorkspaceAgentDispatcherContext {
|
|
7
|
-
workspaceId: string;
|
|
8
|
-
userId: string;
|
|
9
|
-
}
|
|
10
|
-
type WorkspaceAgentDispatcherSendInput = Omit<AgentSendInput, 'ctx'>;
|
|
11
|
-
interface WorkspaceAgentDispatcherDispatchInput extends WorkspaceAgentDispatcherSendInput {
|
|
12
|
-
/** Optional user-visible presentation when content carries hidden instructions. */
|
|
13
|
-
displayMessage?: string;
|
|
14
|
-
/** Optional title for a newly created addressed session. */
|
|
15
|
-
title?: string;
|
|
16
|
-
/** Durable caller-owned idempotency key. */
|
|
17
|
-
requestId: string;
|
|
18
|
-
/** Defaults to requestId. */
|
|
19
|
-
clientNonce?: string;
|
|
20
|
-
/** Defaults to prompt; follow-up requires a non-negative clientSeq. */
|
|
21
|
-
kind?: 'prompt' | 'followup';
|
|
22
|
-
clientSeq?: number;
|
|
23
|
-
}
|
|
24
|
-
interface WorkspaceAgentDispatch {
|
|
25
|
-
ref: AgentSessionRef;
|
|
26
|
-
receipt: AgentSendReceipt;
|
|
27
|
-
events: AsyncIterable<AgentEvent>;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Callback-scoped direct Agent capability. The Workspace and operations are
|
|
31
|
-
* lease guarded by the Host and must not be retained after the callback.
|
|
32
|
-
*/
|
|
33
|
-
interface LeaseBoundWorkspaceAgent {
|
|
34
|
-
readonly workspace: Workspace;
|
|
35
|
-
readonly signal: AbortSignal;
|
|
36
|
-
dispatch(input: WorkspaceAgentDispatcherDispatchInput, onEvent: (event: AgentEvent) => void | Promise<void>, onAccepted?: (accepted: {
|
|
37
|
-
readonly ref: AgentSessionRef;
|
|
38
|
-
readonly receipt: AgentSendReceipt;
|
|
39
|
-
}) => void | Promise<void>): Promise<{
|
|
40
|
-
readonly ref: AgentSessionRef;
|
|
41
|
-
readonly receipt: AgentSendReceipt;
|
|
42
|
-
}>;
|
|
43
|
-
interrupt(sessionId: string, requestId: string): Promise<InterruptReceipt>;
|
|
44
|
-
stop(sessionId: string, requestId: string): Promise<StopReceipt>;
|
|
45
|
-
}
|
|
46
|
-
interface WorkspaceAgentDirectRunInput {
|
|
47
|
-
readonly agentTypeId: string;
|
|
48
|
-
readonly context: WorkspaceAgentDispatcherContext;
|
|
49
|
-
readonly requestId: string;
|
|
50
|
-
}
|
|
51
|
-
type WorkspaceAgentDirectRunCallback = (binding: LeaseBoundWorkspaceAgent) => Promise<void>;
|
|
52
|
-
/** Addressed gateway binding minted by the trusted composition root. */
|
|
53
|
-
interface WorkspaceAgentGatewayBinding {
|
|
54
|
-
gateway: AgentGateway;
|
|
55
|
-
scope: AuthorizedAgentScope;
|
|
56
|
-
agentTypeId: string;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Compatibility-facing delegation surface. New durable callers use dispatch so
|
|
60
|
-
* the addressed ref and accepted Gateway receipt can be persisted before they
|
|
61
|
-
* consume events. send remains for callers that only need the legacy stream.
|
|
62
|
-
*/
|
|
63
|
-
interface WorkspaceAgentDispatcher {
|
|
64
|
-
/** Optional only for source compatibility with pre-Gateway injected resolvers. */
|
|
65
|
-
dispatch?(input: WorkspaceAgentDispatcherDispatchInput): Promise<WorkspaceAgentDispatch>;
|
|
66
|
-
send(input: WorkspaceAgentDispatcherSendInput): AsyncIterable<AgentEvent>;
|
|
67
|
-
interrupt(sessionId: string): Promise<InterruptReceipt>;
|
|
68
|
-
stop(sessionId: string): Promise<StopReceipt>;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
declare const AGENT_RESOURCES_FILESYSTEM_ID: "agent_resources";
|
|
72
|
-
/**
|
|
73
|
-
* Agent-scoped readonly filesystem carrying the knowledge/ folder shipped
|
|
74
|
-
* inside an agent definition package (gh-1107 slice 2). Generic id only —
|
|
75
|
-
* never tenant-named. The binding exists only for the owning agent.
|
|
76
|
-
*/
|
|
77
|
-
declare const AGENT_KNOWLEDGE_FILESYSTEM_ID: "agent_knowledge";
|
|
78
|
-
interface AgentSkillResource {
|
|
79
|
-
readonly filesystem: 'user' | typeof AGENT_RESOURCES_FILESYSTEM_ID | (string & {});
|
|
80
|
-
readonly path: string;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
interface FileSearch {
|
|
84
|
-
search(glob: string, limit?: number): Promise<string[]>;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
export { AGENT_KNOWLEDGE_FILESYSTEM_ID as A, type FileSearch as F, type LeaseBoundWorkspaceAgent as L, type WorkspaceAgentDirectRunCallback as W, AGENT_RESOURCES_FILESYSTEM_ID as a, type AgentSkillResource as b, type WorkspaceAgentDirectRunInput as c, type WorkspaceAgentDispatch as d, type WorkspaceAgentDispatcher as e, type WorkspaceAgentDispatcherContext as f, type WorkspaceAgentDispatcherDispatchInput as g, type WorkspaceAgentDispatcherSendInput as h, type WorkspaceAgentGatewayBinding as i };
|