@hachej/boring-agent 0.1.20 → 0.1.23
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/README.md +16 -0
- package/dist/{chunk-W73RUHY3.js → chunk-6R7O6BHW.js} +24 -0
- package/dist/front/index.d.ts +1 -1
- package/dist/front/index.js +63 -21
- package/dist/front/styles.css +61 -21
- package/dist/{harness-DRrTn_5T.d.ts → harness-BCit36Ha.d.ts} +15 -1
- package/dist/server/index.d.ts +181 -11
- package/dist/server/index.js +1871 -292
- package/dist/shared/index.d.ts +15 -15
- package/dist/shared/index.js +5 -1
- package/docs/ERROR_CODES.md +8 -0
- package/docs/runtime-provisioning.md +153 -0
- package/package.json +2 -2
package/dist/shared/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { A as AgentTool } from '../harness-
|
|
2
|
-
export { a as AgentHarness, J as JSONSchema, R as RunContext, S as SendMessageInput, b as SessionCtx, c as SessionDetail, d as SessionStore, e as SessionSummary, T as
|
|
1
|
+
import { A as AgentTool } from '../harness-BCit36Ha.js';
|
|
2
|
+
export { a as AgentHarness, J as JSONSchema, R as RunContext, S as SendMessageInput, b as SessionCtx, c as SessionDetail, d as SessionStore, e as SessionSummary, T as TelemetryEvent, f as TelemetrySink, g as ToolExecContext, h as ToolResult, n as noopTelemetry, s as safeCapture } from '../harness-BCit36Ha.js';
|
|
3
3
|
import { W as Workspace, S as Sandbox, F as FileSearch } from '../agentPluginEvents-zyIvVjsA.js';
|
|
4
4
|
export { E as Entry, a as ExecOptions, b as ExecResult, I as IsolatedCodeInput, c as IsolatedCodeOutput, d as SandboxCapability, e as SandboxHandleRecord, f as SandboxHandleStore, g as Stat, h as WORKSPACE_AGENT_PLUGINS_RELOADED_EVENT } from '../agentPluginEvents-zyIvVjsA.js';
|
|
5
5
|
export { T as ToolUiMetadata, e as extractToolUiMetadata, i as isToolUiMetadata } from '../tool-ui-DIFNGwYd.js';
|
|
@@ -156,46 +156,46 @@ declare const EnvSchema: z.ZodObject<{
|
|
|
156
156
|
type AgentEnv = z.infer<typeof EnvSchema>;
|
|
157
157
|
declare function validateConfig(config: unknown): AgentConfig;
|
|
158
158
|
|
|
159
|
-
declare const ErrorCode: z.ZodEnum<["MISSING_API_KEY", "INVALID_API_KEY", "OIDC_REFRESH_FAILED", "VERCEL_AUTH_FAILED", "CONFIG_INVALID", "PATH_ESCAPE", "PATH_ABSOLUTE", "PATH_NULL_BYTE", "PATH_SYMLINK_ESCAPE", "PATH_NOT_FOUND", "PATH_NOT_WRITABLE", "WORKSPACE_UNINITIALIZED", "BWRAP_UNAVAILABLE", "BWRAP_TIMEOUT", "OUTPUT_TRUNCATED", "SANDBOX_NOT_READY", "SANDBOX_EXPIRED", "VERCEL_API_ERROR", "CIRCUIT_OPEN", "ABORTED", "SESSION_NOT_FOUND", "SESSION_LOCKED", "STREAM_BUFFER_EVICTED", "CURSOR_OUT_OF_RANGE", "BRIDGE_COMMAND_INVALID", "TOOL_NOT_FOUND", "TOOL_INVALID_INPUT", "TOOL_EXECUTION_ERROR", "PLUGIN_LOAD_FAILED", "PLUGIN_NAME_COLLISION", "INTERNAL_ERROR"]>;
|
|
159
|
+
declare const ErrorCode: z.ZodEnum<["MISSING_API_KEY", "INVALID_API_KEY", "OIDC_REFRESH_FAILED", "VERCEL_AUTH_FAILED", "CONFIG_INVALID", "PATH_ESCAPE", "PATH_ABSOLUTE", "PATH_NULL_BYTE", "PATH_SYMLINK_ESCAPE", "PATH_NOT_FOUND", "PATH_NOT_WRITABLE", "WORKSPACE_UNINITIALIZED", "BWRAP_UNAVAILABLE", "BWRAP_TIMEOUT", "OUTPUT_TRUNCATED", "SANDBOX_NOT_READY", "SANDBOX_EXPIRED", "VERCEL_API_ERROR", "CIRCUIT_OPEN", "ABORTED", "SESSION_NOT_FOUND", "SESSION_LOCKED", "STREAM_BUFFER_EVICTED", "CURSOR_OUT_OF_RANGE", "BRIDGE_COMMAND_INVALID", "TOOL_NOT_FOUND", "TOOL_INVALID_INPUT", "TOOL_EXECUTION_ERROR", "PLUGIN_LOAD_FAILED", "PLUGIN_NAME_COLLISION", "PROVISIONING_LAYOUT_FAILED", "PROVISIONING_SKILLS_FAILED", "PROVISIONING_TEMPLATES_FAILED", "PROVISIONING_NODE_PREFLIGHT_FAILED", "PROVISIONING_NPM_INSTALL_FAILED", "PROVISIONING_UV_BOOTSTRAP_FAILED", "PROVISIONING_UV_INSTALL_FAILED", "PROVISIONING_ARTIFACT_FAILED", "INTERNAL_ERROR"]>;
|
|
160
160
|
type ErrorCode = z.infer<typeof ErrorCode>;
|
|
161
|
-
declare const ERROR_CODES: ["MISSING_API_KEY", "INVALID_API_KEY", "OIDC_REFRESH_FAILED", "VERCEL_AUTH_FAILED", "CONFIG_INVALID", "PATH_ESCAPE", "PATH_ABSOLUTE", "PATH_NULL_BYTE", "PATH_SYMLINK_ESCAPE", "PATH_NOT_FOUND", "PATH_NOT_WRITABLE", "WORKSPACE_UNINITIALIZED", "BWRAP_UNAVAILABLE", "BWRAP_TIMEOUT", "OUTPUT_TRUNCATED", "SANDBOX_NOT_READY", "SANDBOX_EXPIRED", "VERCEL_API_ERROR", "CIRCUIT_OPEN", "ABORTED", "SESSION_NOT_FOUND", "SESSION_LOCKED", "STREAM_BUFFER_EVICTED", "CURSOR_OUT_OF_RANGE", "BRIDGE_COMMAND_INVALID", "TOOL_NOT_FOUND", "TOOL_INVALID_INPUT", "TOOL_EXECUTION_ERROR", "PLUGIN_LOAD_FAILED", "PLUGIN_NAME_COLLISION", "INTERNAL_ERROR"];
|
|
161
|
+
declare const ERROR_CODES: ["MISSING_API_KEY", "INVALID_API_KEY", "OIDC_REFRESH_FAILED", "VERCEL_AUTH_FAILED", "CONFIG_INVALID", "PATH_ESCAPE", "PATH_ABSOLUTE", "PATH_NULL_BYTE", "PATH_SYMLINK_ESCAPE", "PATH_NOT_FOUND", "PATH_NOT_WRITABLE", "WORKSPACE_UNINITIALIZED", "BWRAP_UNAVAILABLE", "BWRAP_TIMEOUT", "OUTPUT_TRUNCATED", "SANDBOX_NOT_READY", "SANDBOX_EXPIRED", "VERCEL_API_ERROR", "CIRCUIT_OPEN", "ABORTED", "SESSION_NOT_FOUND", "SESSION_LOCKED", "STREAM_BUFFER_EVICTED", "CURSOR_OUT_OF_RANGE", "BRIDGE_COMMAND_INVALID", "TOOL_NOT_FOUND", "TOOL_INVALID_INPUT", "TOOL_EXECUTION_ERROR", "PLUGIN_LOAD_FAILED", "PLUGIN_NAME_COLLISION", "PROVISIONING_LAYOUT_FAILED", "PROVISIONING_SKILLS_FAILED", "PROVISIONING_TEMPLATES_FAILED", "PROVISIONING_NODE_PREFLIGHT_FAILED", "PROVISIONING_NPM_INSTALL_FAILED", "PROVISIONING_UV_BOOTSTRAP_FAILED", "PROVISIONING_UV_INSTALL_FAILED", "PROVISIONING_ARTIFACT_FAILED", "INTERNAL_ERROR"];
|
|
162
162
|
declare const ApiErrorPayloadSchema: z.ZodObject<{
|
|
163
|
-
code: z.ZodEnum<["MISSING_API_KEY", "INVALID_API_KEY", "OIDC_REFRESH_FAILED", "VERCEL_AUTH_FAILED", "CONFIG_INVALID", "PATH_ESCAPE", "PATH_ABSOLUTE", "PATH_NULL_BYTE", "PATH_SYMLINK_ESCAPE", "PATH_NOT_FOUND", "PATH_NOT_WRITABLE", "WORKSPACE_UNINITIALIZED", "BWRAP_UNAVAILABLE", "BWRAP_TIMEOUT", "OUTPUT_TRUNCATED", "SANDBOX_NOT_READY", "SANDBOX_EXPIRED", "VERCEL_API_ERROR", "CIRCUIT_OPEN", "ABORTED", "SESSION_NOT_FOUND", "SESSION_LOCKED", "STREAM_BUFFER_EVICTED", "CURSOR_OUT_OF_RANGE", "BRIDGE_COMMAND_INVALID", "TOOL_NOT_FOUND", "TOOL_INVALID_INPUT", "TOOL_EXECUTION_ERROR", "PLUGIN_LOAD_FAILED", "PLUGIN_NAME_COLLISION", "INTERNAL_ERROR"]>;
|
|
163
|
+
code: z.ZodEnum<["MISSING_API_KEY", "INVALID_API_KEY", "OIDC_REFRESH_FAILED", "VERCEL_AUTH_FAILED", "CONFIG_INVALID", "PATH_ESCAPE", "PATH_ABSOLUTE", "PATH_NULL_BYTE", "PATH_SYMLINK_ESCAPE", "PATH_NOT_FOUND", "PATH_NOT_WRITABLE", "WORKSPACE_UNINITIALIZED", "BWRAP_UNAVAILABLE", "BWRAP_TIMEOUT", "OUTPUT_TRUNCATED", "SANDBOX_NOT_READY", "SANDBOX_EXPIRED", "VERCEL_API_ERROR", "CIRCUIT_OPEN", "ABORTED", "SESSION_NOT_FOUND", "SESSION_LOCKED", "STREAM_BUFFER_EVICTED", "CURSOR_OUT_OF_RANGE", "BRIDGE_COMMAND_INVALID", "TOOL_NOT_FOUND", "TOOL_INVALID_INPUT", "TOOL_EXECUTION_ERROR", "PLUGIN_LOAD_FAILED", "PLUGIN_NAME_COLLISION", "PROVISIONING_LAYOUT_FAILED", "PROVISIONING_SKILLS_FAILED", "PROVISIONING_TEMPLATES_FAILED", "PROVISIONING_NODE_PREFLIGHT_FAILED", "PROVISIONING_NPM_INSTALL_FAILED", "PROVISIONING_UV_BOOTSTRAP_FAILED", "PROVISIONING_UV_INSTALL_FAILED", "PROVISIONING_ARTIFACT_FAILED", "INTERNAL_ERROR"]>;
|
|
164
164
|
message: z.ZodString;
|
|
165
165
|
details: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
166
166
|
}, "strip", z.ZodTypeAny, {
|
|
167
|
-
code: "MISSING_API_KEY" | "INVALID_API_KEY" | "OIDC_REFRESH_FAILED" | "VERCEL_AUTH_FAILED" | "CONFIG_INVALID" | "PATH_ESCAPE" | "PATH_ABSOLUTE" | "PATH_NULL_BYTE" | "PATH_SYMLINK_ESCAPE" | "PATH_NOT_FOUND" | "PATH_NOT_WRITABLE" | "WORKSPACE_UNINITIALIZED" | "BWRAP_UNAVAILABLE" | "BWRAP_TIMEOUT" | "OUTPUT_TRUNCATED" | "SANDBOX_NOT_READY" | "SANDBOX_EXPIRED" | "VERCEL_API_ERROR" | "CIRCUIT_OPEN" | "ABORTED" | "SESSION_NOT_FOUND" | "SESSION_LOCKED" | "STREAM_BUFFER_EVICTED" | "CURSOR_OUT_OF_RANGE" | "BRIDGE_COMMAND_INVALID" | "TOOL_NOT_FOUND" | "TOOL_INVALID_INPUT" | "TOOL_EXECUTION_ERROR" | "PLUGIN_LOAD_FAILED" | "PLUGIN_NAME_COLLISION" | "INTERNAL_ERROR";
|
|
167
|
+
code: "MISSING_API_KEY" | "INVALID_API_KEY" | "OIDC_REFRESH_FAILED" | "VERCEL_AUTH_FAILED" | "CONFIG_INVALID" | "PATH_ESCAPE" | "PATH_ABSOLUTE" | "PATH_NULL_BYTE" | "PATH_SYMLINK_ESCAPE" | "PATH_NOT_FOUND" | "PATH_NOT_WRITABLE" | "WORKSPACE_UNINITIALIZED" | "BWRAP_UNAVAILABLE" | "BWRAP_TIMEOUT" | "OUTPUT_TRUNCATED" | "SANDBOX_NOT_READY" | "SANDBOX_EXPIRED" | "VERCEL_API_ERROR" | "CIRCUIT_OPEN" | "ABORTED" | "SESSION_NOT_FOUND" | "SESSION_LOCKED" | "STREAM_BUFFER_EVICTED" | "CURSOR_OUT_OF_RANGE" | "BRIDGE_COMMAND_INVALID" | "TOOL_NOT_FOUND" | "TOOL_INVALID_INPUT" | "TOOL_EXECUTION_ERROR" | "PLUGIN_LOAD_FAILED" | "PLUGIN_NAME_COLLISION" | "PROVISIONING_LAYOUT_FAILED" | "PROVISIONING_SKILLS_FAILED" | "PROVISIONING_TEMPLATES_FAILED" | "PROVISIONING_NODE_PREFLIGHT_FAILED" | "PROVISIONING_NPM_INSTALL_FAILED" | "PROVISIONING_UV_BOOTSTRAP_FAILED" | "PROVISIONING_UV_INSTALL_FAILED" | "PROVISIONING_ARTIFACT_FAILED" | "INTERNAL_ERROR";
|
|
168
168
|
message: string;
|
|
169
169
|
details?: Record<string, unknown> | undefined;
|
|
170
170
|
}, {
|
|
171
|
-
code: "MISSING_API_KEY" | "INVALID_API_KEY" | "OIDC_REFRESH_FAILED" | "VERCEL_AUTH_FAILED" | "CONFIG_INVALID" | "PATH_ESCAPE" | "PATH_ABSOLUTE" | "PATH_NULL_BYTE" | "PATH_SYMLINK_ESCAPE" | "PATH_NOT_FOUND" | "PATH_NOT_WRITABLE" | "WORKSPACE_UNINITIALIZED" | "BWRAP_UNAVAILABLE" | "BWRAP_TIMEOUT" | "OUTPUT_TRUNCATED" | "SANDBOX_NOT_READY" | "SANDBOX_EXPIRED" | "VERCEL_API_ERROR" | "CIRCUIT_OPEN" | "ABORTED" | "SESSION_NOT_FOUND" | "SESSION_LOCKED" | "STREAM_BUFFER_EVICTED" | "CURSOR_OUT_OF_RANGE" | "BRIDGE_COMMAND_INVALID" | "TOOL_NOT_FOUND" | "TOOL_INVALID_INPUT" | "TOOL_EXECUTION_ERROR" | "PLUGIN_LOAD_FAILED" | "PLUGIN_NAME_COLLISION" | "INTERNAL_ERROR";
|
|
171
|
+
code: "MISSING_API_KEY" | "INVALID_API_KEY" | "OIDC_REFRESH_FAILED" | "VERCEL_AUTH_FAILED" | "CONFIG_INVALID" | "PATH_ESCAPE" | "PATH_ABSOLUTE" | "PATH_NULL_BYTE" | "PATH_SYMLINK_ESCAPE" | "PATH_NOT_FOUND" | "PATH_NOT_WRITABLE" | "WORKSPACE_UNINITIALIZED" | "BWRAP_UNAVAILABLE" | "BWRAP_TIMEOUT" | "OUTPUT_TRUNCATED" | "SANDBOX_NOT_READY" | "SANDBOX_EXPIRED" | "VERCEL_API_ERROR" | "CIRCUIT_OPEN" | "ABORTED" | "SESSION_NOT_FOUND" | "SESSION_LOCKED" | "STREAM_BUFFER_EVICTED" | "CURSOR_OUT_OF_RANGE" | "BRIDGE_COMMAND_INVALID" | "TOOL_NOT_FOUND" | "TOOL_INVALID_INPUT" | "TOOL_EXECUTION_ERROR" | "PLUGIN_LOAD_FAILED" | "PLUGIN_NAME_COLLISION" | "PROVISIONING_LAYOUT_FAILED" | "PROVISIONING_SKILLS_FAILED" | "PROVISIONING_TEMPLATES_FAILED" | "PROVISIONING_NODE_PREFLIGHT_FAILED" | "PROVISIONING_NPM_INSTALL_FAILED" | "PROVISIONING_UV_BOOTSTRAP_FAILED" | "PROVISIONING_UV_INSTALL_FAILED" | "PROVISIONING_ARTIFACT_FAILED" | "INTERNAL_ERROR";
|
|
172
172
|
message: string;
|
|
173
173
|
details?: Record<string, unknown> | undefined;
|
|
174
174
|
}>;
|
|
175
175
|
type ApiErrorPayload = z.infer<typeof ApiErrorPayloadSchema>;
|
|
176
176
|
declare const ApiErrorResponseSchema: z.ZodObject<{
|
|
177
177
|
error: z.ZodObject<{
|
|
178
|
-
code: z.ZodEnum<["MISSING_API_KEY", "INVALID_API_KEY", "OIDC_REFRESH_FAILED", "VERCEL_AUTH_FAILED", "CONFIG_INVALID", "PATH_ESCAPE", "PATH_ABSOLUTE", "PATH_NULL_BYTE", "PATH_SYMLINK_ESCAPE", "PATH_NOT_FOUND", "PATH_NOT_WRITABLE", "WORKSPACE_UNINITIALIZED", "BWRAP_UNAVAILABLE", "BWRAP_TIMEOUT", "OUTPUT_TRUNCATED", "SANDBOX_NOT_READY", "SANDBOX_EXPIRED", "VERCEL_API_ERROR", "CIRCUIT_OPEN", "ABORTED", "SESSION_NOT_FOUND", "SESSION_LOCKED", "STREAM_BUFFER_EVICTED", "CURSOR_OUT_OF_RANGE", "BRIDGE_COMMAND_INVALID", "TOOL_NOT_FOUND", "TOOL_INVALID_INPUT", "TOOL_EXECUTION_ERROR", "PLUGIN_LOAD_FAILED", "PLUGIN_NAME_COLLISION", "INTERNAL_ERROR"]>;
|
|
178
|
+
code: z.ZodEnum<["MISSING_API_KEY", "INVALID_API_KEY", "OIDC_REFRESH_FAILED", "VERCEL_AUTH_FAILED", "CONFIG_INVALID", "PATH_ESCAPE", "PATH_ABSOLUTE", "PATH_NULL_BYTE", "PATH_SYMLINK_ESCAPE", "PATH_NOT_FOUND", "PATH_NOT_WRITABLE", "WORKSPACE_UNINITIALIZED", "BWRAP_UNAVAILABLE", "BWRAP_TIMEOUT", "OUTPUT_TRUNCATED", "SANDBOX_NOT_READY", "SANDBOX_EXPIRED", "VERCEL_API_ERROR", "CIRCUIT_OPEN", "ABORTED", "SESSION_NOT_FOUND", "SESSION_LOCKED", "STREAM_BUFFER_EVICTED", "CURSOR_OUT_OF_RANGE", "BRIDGE_COMMAND_INVALID", "TOOL_NOT_FOUND", "TOOL_INVALID_INPUT", "TOOL_EXECUTION_ERROR", "PLUGIN_LOAD_FAILED", "PLUGIN_NAME_COLLISION", "PROVISIONING_LAYOUT_FAILED", "PROVISIONING_SKILLS_FAILED", "PROVISIONING_TEMPLATES_FAILED", "PROVISIONING_NODE_PREFLIGHT_FAILED", "PROVISIONING_NPM_INSTALL_FAILED", "PROVISIONING_UV_BOOTSTRAP_FAILED", "PROVISIONING_UV_INSTALL_FAILED", "PROVISIONING_ARTIFACT_FAILED", "INTERNAL_ERROR"]>;
|
|
179
179
|
message: z.ZodString;
|
|
180
180
|
details: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
181
181
|
}, "strip", z.ZodTypeAny, {
|
|
182
|
-
code: "MISSING_API_KEY" | "INVALID_API_KEY" | "OIDC_REFRESH_FAILED" | "VERCEL_AUTH_FAILED" | "CONFIG_INVALID" | "PATH_ESCAPE" | "PATH_ABSOLUTE" | "PATH_NULL_BYTE" | "PATH_SYMLINK_ESCAPE" | "PATH_NOT_FOUND" | "PATH_NOT_WRITABLE" | "WORKSPACE_UNINITIALIZED" | "BWRAP_UNAVAILABLE" | "BWRAP_TIMEOUT" | "OUTPUT_TRUNCATED" | "SANDBOX_NOT_READY" | "SANDBOX_EXPIRED" | "VERCEL_API_ERROR" | "CIRCUIT_OPEN" | "ABORTED" | "SESSION_NOT_FOUND" | "SESSION_LOCKED" | "STREAM_BUFFER_EVICTED" | "CURSOR_OUT_OF_RANGE" | "BRIDGE_COMMAND_INVALID" | "TOOL_NOT_FOUND" | "TOOL_INVALID_INPUT" | "TOOL_EXECUTION_ERROR" | "PLUGIN_LOAD_FAILED" | "PLUGIN_NAME_COLLISION" | "INTERNAL_ERROR";
|
|
182
|
+
code: "MISSING_API_KEY" | "INVALID_API_KEY" | "OIDC_REFRESH_FAILED" | "VERCEL_AUTH_FAILED" | "CONFIG_INVALID" | "PATH_ESCAPE" | "PATH_ABSOLUTE" | "PATH_NULL_BYTE" | "PATH_SYMLINK_ESCAPE" | "PATH_NOT_FOUND" | "PATH_NOT_WRITABLE" | "WORKSPACE_UNINITIALIZED" | "BWRAP_UNAVAILABLE" | "BWRAP_TIMEOUT" | "OUTPUT_TRUNCATED" | "SANDBOX_NOT_READY" | "SANDBOX_EXPIRED" | "VERCEL_API_ERROR" | "CIRCUIT_OPEN" | "ABORTED" | "SESSION_NOT_FOUND" | "SESSION_LOCKED" | "STREAM_BUFFER_EVICTED" | "CURSOR_OUT_OF_RANGE" | "BRIDGE_COMMAND_INVALID" | "TOOL_NOT_FOUND" | "TOOL_INVALID_INPUT" | "TOOL_EXECUTION_ERROR" | "PLUGIN_LOAD_FAILED" | "PLUGIN_NAME_COLLISION" | "PROVISIONING_LAYOUT_FAILED" | "PROVISIONING_SKILLS_FAILED" | "PROVISIONING_TEMPLATES_FAILED" | "PROVISIONING_NODE_PREFLIGHT_FAILED" | "PROVISIONING_NPM_INSTALL_FAILED" | "PROVISIONING_UV_BOOTSTRAP_FAILED" | "PROVISIONING_UV_INSTALL_FAILED" | "PROVISIONING_ARTIFACT_FAILED" | "INTERNAL_ERROR";
|
|
183
183
|
message: string;
|
|
184
184
|
details?: Record<string, unknown> | undefined;
|
|
185
185
|
}, {
|
|
186
|
-
code: "MISSING_API_KEY" | "INVALID_API_KEY" | "OIDC_REFRESH_FAILED" | "VERCEL_AUTH_FAILED" | "CONFIG_INVALID" | "PATH_ESCAPE" | "PATH_ABSOLUTE" | "PATH_NULL_BYTE" | "PATH_SYMLINK_ESCAPE" | "PATH_NOT_FOUND" | "PATH_NOT_WRITABLE" | "WORKSPACE_UNINITIALIZED" | "BWRAP_UNAVAILABLE" | "BWRAP_TIMEOUT" | "OUTPUT_TRUNCATED" | "SANDBOX_NOT_READY" | "SANDBOX_EXPIRED" | "VERCEL_API_ERROR" | "CIRCUIT_OPEN" | "ABORTED" | "SESSION_NOT_FOUND" | "SESSION_LOCKED" | "STREAM_BUFFER_EVICTED" | "CURSOR_OUT_OF_RANGE" | "BRIDGE_COMMAND_INVALID" | "TOOL_NOT_FOUND" | "TOOL_INVALID_INPUT" | "TOOL_EXECUTION_ERROR" | "PLUGIN_LOAD_FAILED" | "PLUGIN_NAME_COLLISION" | "INTERNAL_ERROR";
|
|
186
|
+
code: "MISSING_API_KEY" | "INVALID_API_KEY" | "OIDC_REFRESH_FAILED" | "VERCEL_AUTH_FAILED" | "CONFIG_INVALID" | "PATH_ESCAPE" | "PATH_ABSOLUTE" | "PATH_NULL_BYTE" | "PATH_SYMLINK_ESCAPE" | "PATH_NOT_FOUND" | "PATH_NOT_WRITABLE" | "WORKSPACE_UNINITIALIZED" | "BWRAP_UNAVAILABLE" | "BWRAP_TIMEOUT" | "OUTPUT_TRUNCATED" | "SANDBOX_NOT_READY" | "SANDBOX_EXPIRED" | "VERCEL_API_ERROR" | "CIRCUIT_OPEN" | "ABORTED" | "SESSION_NOT_FOUND" | "SESSION_LOCKED" | "STREAM_BUFFER_EVICTED" | "CURSOR_OUT_OF_RANGE" | "BRIDGE_COMMAND_INVALID" | "TOOL_NOT_FOUND" | "TOOL_INVALID_INPUT" | "TOOL_EXECUTION_ERROR" | "PLUGIN_LOAD_FAILED" | "PLUGIN_NAME_COLLISION" | "PROVISIONING_LAYOUT_FAILED" | "PROVISIONING_SKILLS_FAILED" | "PROVISIONING_TEMPLATES_FAILED" | "PROVISIONING_NODE_PREFLIGHT_FAILED" | "PROVISIONING_NPM_INSTALL_FAILED" | "PROVISIONING_UV_BOOTSTRAP_FAILED" | "PROVISIONING_UV_INSTALL_FAILED" | "PROVISIONING_ARTIFACT_FAILED" | "INTERNAL_ERROR";
|
|
187
187
|
message: string;
|
|
188
188
|
details?: Record<string, unknown> | undefined;
|
|
189
189
|
}>;
|
|
190
190
|
}, "strip", z.ZodTypeAny, {
|
|
191
191
|
error: {
|
|
192
|
-
code: "MISSING_API_KEY" | "INVALID_API_KEY" | "OIDC_REFRESH_FAILED" | "VERCEL_AUTH_FAILED" | "CONFIG_INVALID" | "PATH_ESCAPE" | "PATH_ABSOLUTE" | "PATH_NULL_BYTE" | "PATH_SYMLINK_ESCAPE" | "PATH_NOT_FOUND" | "PATH_NOT_WRITABLE" | "WORKSPACE_UNINITIALIZED" | "BWRAP_UNAVAILABLE" | "BWRAP_TIMEOUT" | "OUTPUT_TRUNCATED" | "SANDBOX_NOT_READY" | "SANDBOX_EXPIRED" | "VERCEL_API_ERROR" | "CIRCUIT_OPEN" | "ABORTED" | "SESSION_NOT_FOUND" | "SESSION_LOCKED" | "STREAM_BUFFER_EVICTED" | "CURSOR_OUT_OF_RANGE" | "BRIDGE_COMMAND_INVALID" | "TOOL_NOT_FOUND" | "TOOL_INVALID_INPUT" | "TOOL_EXECUTION_ERROR" | "PLUGIN_LOAD_FAILED" | "PLUGIN_NAME_COLLISION" | "INTERNAL_ERROR";
|
|
192
|
+
code: "MISSING_API_KEY" | "INVALID_API_KEY" | "OIDC_REFRESH_FAILED" | "VERCEL_AUTH_FAILED" | "CONFIG_INVALID" | "PATH_ESCAPE" | "PATH_ABSOLUTE" | "PATH_NULL_BYTE" | "PATH_SYMLINK_ESCAPE" | "PATH_NOT_FOUND" | "PATH_NOT_WRITABLE" | "WORKSPACE_UNINITIALIZED" | "BWRAP_UNAVAILABLE" | "BWRAP_TIMEOUT" | "OUTPUT_TRUNCATED" | "SANDBOX_NOT_READY" | "SANDBOX_EXPIRED" | "VERCEL_API_ERROR" | "CIRCUIT_OPEN" | "ABORTED" | "SESSION_NOT_FOUND" | "SESSION_LOCKED" | "STREAM_BUFFER_EVICTED" | "CURSOR_OUT_OF_RANGE" | "BRIDGE_COMMAND_INVALID" | "TOOL_NOT_FOUND" | "TOOL_INVALID_INPUT" | "TOOL_EXECUTION_ERROR" | "PLUGIN_LOAD_FAILED" | "PLUGIN_NAME_COLLISION" | "PROVISIONING_LAYOUT_FAILED" | "PROVISIONING_SKILLS_FAILED" | "PROVISIONING_TEMPLATES_FAILED" | "PROVISIONING_NODE_PREFLIGHT_FAILED" | "PROVISIONING_NPM_INSTALL_FAILED" | "PROVISIONING_UV_BOOTSTRAP_FAILED" | "PROVISIONING_UV_INSTALL_FAILED" | "PROVISIONING_ARTIFACT_FAILED" | "INTERNAL_ERROR";
|
|
193
193
|
message: string;
|
|
194
194
|
details?: Record<string, unknown> | undefined;
|
|
195
195
|
};
|
|
196
196
|
}, {
|
|
197
197
|
error: {
|
|
198
|
-
code: "MISSING_API_KEY" | "INVALID_API_KEY" | "OIDC_REFRESH_FAILED" | "VERCEL_AUTH_FAILED" | "CONFIG_INVALID" | "PATH_ESCAPE" | "PATH_ABSOLUTE" | "PATH_NULL_BYTE" | "PATH_SYMLINK_ESCAPE" | "PATH_NOT_FOUND" | "PATH_NOT_WRITABLE" | "WORKSPACE_UNINITIALIZED" | "BWRAP_UNAVAILABLE" | "BWRAP_TIMEOUT" | "OUTPUT_TRUNCATED" | "SANDBOX_NOT_READY" | "SANDBOX_EXPIRED" | "VERCEL_API_ERROR" | "CIRCUIT_OPEN" | "ABORTED" | "SESSION_NOT_FOUND" | "SESSION_LOCKED" | "STREAM_BUFFER_EVICTED" | "CURSOR_OUT_OF_RANGE" | "BRIDGE_COMMAND_INVALID" | "TOOL_NOT_FOUND" | "TOOL_INVALID_INPUT" | "TOOL_EXECUTION_ERROR" | "PLUGIN_LOAD_FAILED" | "PLUGIN_NAME_COLLISION" | "INTERNAL_ERROR";
|
|
198
|
+
code: "MISSING_API_KEY" | "INVALID_API_KEY" | "OIDC_REFRESH_FAILED" | "VERCEL_AUTH_FAILED" | "CONFIG_INVALID" | "PATH_ESCAPE" | "PATH_ABSOLUTE" | "PATH_NULL_BYTE" | "PATH_SYMLINK_ESCAPE" | "PATH_NOT_FOUND" | "PATH_NOT_WRITABLE" | "WORKSPACE_UNINITIALIZED" | "BWRAP_UNAVAILABLE" | "BWRAP_TIMEOUT" | "OUTPUT_TRUNCATED" | "SANDBOX_NOT_READY" | "SANDBOX_EXPIRED" | "VERCEL_API_ERROR" | "CIRCUIT_OPEN" | "ABORTED" | "SESSION_NOT_FOUND" | "SESSION_LOCKED" | "STREAM_BUFFER_EVICTED" | "CURSOR_OUT_OF_RANGE" | "BRIDGE_COMMAND_INVALID" | "TOOL_NOT_FOUND" | "TOOL_INVALID_INPUT" | "TOOL_EXECUTION_ERROR" | "PLUGIN_LOAD_FAILED" | "PLUGIN_NAME_COLLISION" | "PROVISIONING_LAYOUT_FAILED" | "PROVISIONING_SKILLS_FAILED" | "PROVISIONING_TEMPLATES_FAILED" | "PROVISIONING_NODE_PREFLIGHT_FAILED" | "PROVISIONING_NPM_INSTALL_FAILED" | "PROVISIONING_UV_BOOTSTRAP_FAILED" | "PROVISIONING_UV_INSTALL_FAILED" | "PROVISIONING_ARTIFACT_FAILED" | "INTERNAL_ERROR";
|
|
199
199
|
message: string;
|
|
200
200
|
details?: Record<string, unknown> | undefined;
|
|
201
201
|
};
|
|
@@ -203,17 +203,17 @@ declare const ApiErrorResponseSchema: z.ZodObject<{
|
|
|
203
203
|
type ApiErrorResponse = z.infer<typeof ApiErrorResponseSchema>;
|
|
204
204
|
declare const ErrorLogFieldsSchema: z.ZodObject<{
|
|
205
205
|
level: z.ZodEnum<["warn", "error"]>;
|
|
206
|
-
code: z.ZodEnum<["MISSING_API_KEY", "INVALID_API_KEY", "OIDC_REFRESH_FAILED", "VERCEL_AUTH_FAILED", "CONFIG_INVALID", "PATH_ESCAPE", "PATH_ABSOLUTE", "PATH_NULL_BYTE", "PATH_SYMLINK_ESCAPE", "PATH_NOT_FOUND", "PATH_NOT_WRITABLE", "WORKSPACE_UNINITIALIZED", "BWRAP_UNAVAILABLE", "BWRAP_TIMEOUT", "OUTPUT_TRUNCATED", "SANDBOX_NOT_READY", "SANDBOX_EXPIRED", "VERCEL_API_ERROR", "CIRCUIT_OPEN", "ABORTED", "SESSION_NOT_FOUND", "SESSION_LOCKED", "STREAM_BUFFER_EVICTED", "CURSOR_OUT_OF_RANGE", "BRIDGE_COMMAND_INVALID", "TOOL_NOT_FOUND", "TOOL_INVALID_INPUT", "TOOL_EXECUTION_ERROR", "PLUGIN_LOAD_FAILED", "PLUGIN_NAME_COLLISION", "INTERNAL_ERROR"]>;
|
|
206
|
+
code: z.ZodEnum<["MISSING_API_KEY", "INVALID_API_KEY", "OIDC_REFRESH_FAILED", "VERCEL_AUTH_FAILED", "CONFIG_INVALID", "PATH_ESCAPE", "PATH_ABSOLUTE", "PATH_NULL_BYTE", "PATH_SYMLINK_ESCAPE", "PATH_NOT_FOUND", "PATH_NOT_WRITABLE", "WORKSPACE_UNINITIALIZED", "BWRAP_UNAVAILABLE", "BWRAP_TIMEOUT", "OUTPUT_TRUNCATED", "SANDBOX_NOT_READY", "SANDBOX_EXPIRED", "VERCEL_API_ERROR", "CIRCUIT_OPEN", "ABORTED", "SESSION_NOT_FOUND", "SESSION_LOCKED", "STREAM_BUFFER_EVICTED", "CURSOR_OUT_OF_RANGE", "BRIDGE_COMMAND_INVALID", "TOOL_NOT_FOUND", "TOOL_INVALID_INPUT", "TOOL_EXECUTION_ERROR", "PLUGIN_LOAD_FAILED", "PLUGIN_NAME_COLLISION", "PROVISIONING_LAYOUT_FAILED", "PROVISIONING_SKILLS_FAILED", "PROVISIONING_TEMPLATES_FAILED", "PROVISIONING_NODE_PREFLIGHT_FAILED", "PROVISIONING_NPM_INSTALL_FAILED", "PROVISIONING_UV_BOOTSTRAP_FAILED", "PROVISIONING_UV_INSTALL_FAILED", "PROVISIONING_ARTIFACT_FAILED", "INTERNAL_ERROR"]>;
|
|
207
207
|
prefix: z.ZodString;
|
|
208
208
|
msg: z.ZodString;
|
|
209
209
|
}, "strip", z.ZodUnknown, z.objectOutputType<{
|
|
210
210
|
level: z.ZodEnum<["warn", "error"]>;
|
|
211
|
-
code: z.ZodEnum<["MISSING_API_KEY", "INVALID_API_KEY", "OIDC_REFRESH_FAILED", "VERCEL_AUTH_FAILED", "CONFIG_INVALID", "PATH_ESCAPE", "PATH_ABSOLUTE", "PATH_NULL_BYTE", "PATH_SYMLINK_ESCAPE", "PATH_NOT_FOUND", "PATH_NOT_WRITABLE", "WORKSPACE_UNINITIALIZED", "BWRAP_UNAVAILABLE", "BWRAP_TIMEOUT", "OUTPUT_TRUNCATED", "SANDBOX_NOT_READY", "SANDBOX_EXPIRED", "VERCEL_API_ERROR", "CIRCUIT_OPEN", "ABORTED", "SESSION_NOT_FOUND", "SESSION_LOCKED", "STREAM_BUFFER_EVICTED", "CURSOR_OUT_OF_RANGE", "BRIDGE_COMMAND_INVALID", "TOOL_NOT_FOUND", "TOOL_INVALID_INPUT", "TOOL_EXECUTION_ERROR", "PLUGIN_LOAD_FAILED", "PLUGIN_NAME_COLLISION", "INTERNAL_ERROR"]>;
|
|
211
|
+
code: z.ZodEnum<["MISSING_API_KEY", "INVALID_API_KEY", "OIDC_REFRESH_FAILED", "VERCEL_AUTH_FAILED", "CONFIG_INVALID", "PATH_ESCAPE", "PATH_ABSOLUTE", "PATH_NULL_BYTE", "PATH_SYMLINK_ESCAPE", "PATH_NOT_FOUND", "PATH_NOT_WRITABLE", "WORKSPACE_UNINITIALIZED", "BWRAP_UNAVAILABLE", "BWRAP_TIMEOUT", "OUTPUT_TRUNCATED", "SANDBOX_NOT_READY", "SANDBOX_EXPIRED", "VERCEL_API_ERROR", "CIRCUIT_OPEN", "ABORTED", "SESSION_NOT_FOUND", "SESSION_LOCKED", "STREAM_BUFFER_EVICTED", "CURSOR_OUT_OF_RANGE", "BRIDGE_COMMAND_INVALID", "TOOL_NOT_FOUND", "TOOL_INVALID_INPUT", "TOOL_EXECUTION_ERROR", "PLUGIN_LOAD_FAILED", "PLUGIN_NAME_COLLISION", "PROVISIONING_LAYOUT_FAILED", "PROVISIONING_SKILLS_FAILED", "PROVISIONING_TEMPLATES_FAILED", "PROVISIONING_NODE_PREFLIGHT_FAILED", "PROVISIONING_NPM_INSTALL_FAILED", "PROVISIONING_UV_BOOTSTRAP_FAILED", "PROVISIONING_UV_INSTALL_FAILED", "PROVISIONING_ARTIFACT_FAILED", "INTERNAL_ERROR"]>;
|
|
212
212
|
prefix: z.ZodString;
|
|
213
213
|
msg: z.ZodString;
|
|
214
214
|
}, z.ZodUnknown, "strip">, z.objectInputType<{
|
|
215
215
|
level: z.ZodEnum<["warn", "error"]>;
|
|
216
|
-
code: z.ZodEnum<["MISSING_API_KEY", "INVALID_API_KEY", "OIDC_REFRESH_FAILED", "VERCEL_AUTH_FAILED", "CONFIG_INVALID", "PATH_ESCAPE", "PATH_ABSOLUTE", "PATH_NULL_BYTE", "PATH_SYMLINK_ESCAPE", "PATH_NOT_FOUND", "PATH_NOT_WRITABLE", "WORKSPACE_UNINITIALIZED", "BWRAP_UNAVAILABLE", "BWRAP_TIMEOUT", "OUTPUT_TRUNCATED", "SANDBOX_NOT_READY", "SANDBOX_EXPIRED", "VERCEL_API_ERROR", "CIRCUIT_OPEN", "ABORTED", "SESSION_NOT_FOUND", "SESSION_LOCKED", "STREAM_BUFFER_EVICTED", "CURSOR_OUT_OF_RANGE", "BRIDGE_COMMAND_INVALID", "TOOL_NOT_FOUND", "TOOL_INVALID_INPUT", "TOOL_EXECUTION_ERROR", "PLUGIN_LOAD_FAILED", "PLUGIN_NAME_COLLISION", "INTERNAL_ERROR"]>;
|
|
216
|
+
code: z.ZodEnum<["MISSING_API_KEY", "INVALID_API_KEY", "OIDC_REFRESH_FAILED", "VERCEL_AUTH_FAILED", "CONFIG_INVALID", "PATH_ESCAPE", "PATH_ABSOLUTE", "PATH_NULL_BYTE", "PATH_SYMLINK_ESCAPE", "PATH_NOT_FOUND", "PATH_NOT_WRITABLE", "WORKSPACE_UNINITIALIZED", "BWRAP_UNAVAILABLE", "BWRAP_TIMEOUT", "OUTPUT_TRUNCATED", "SANDBOX_NOT_READY", "SANDBOX_EXPIRED", "VERCEL_API_ERROR", "CIRCUIT_OPEN", "ABORTED", "SESSION_NOT_FOUND", "SESSION_LOCKED", "STREAM_BUFFER_EVICTED", "CURSOR_OUT_OF_RANGE", "BRIDGE_COMMAND_INVALID", "TOOL_NOT_FOUND", "TOOL_INVALID_INPUT", "TOOL_EXECUTION_ERROR", "PLUGIN_LOAD_FAILED", "PLUGIN_NAME_COLLISION", "PROVISIONING_LAYOUT_FAILED", "PROVISIONING_SKILLS_FAILED", "PROVISIONING_TEMPLATES_FAILED", "PROVISIONING_NODE_PREFLIGHT_FAILED", "PROVISIONING_NPM_INSTALL_FAILED", "PROVISIONING_UV_BOOTSTRAP_FAILED", "PROVISIONING_UV_INSTALL_FAILED", "PROVISIONING_ARTIFACT_FAILED", "INTERNAL_ERROR"]>;
|
|
217
217
|
prefix: z.ZodString;
|
|
218
218
|
msg: z.ZodString;
|
|
219
219
|
}, z.ZodUnknown, "strip">>;
|
package/dist/shared/index.js
CHANGED
|
@@ -4,8 +4,10 @@ import {
|
|
|
4
4
|
ERROR_CODES,
|
|
5
5
|
ErrorCode,
|
|
6
6
|
ErrorLogFieldsSchema,
|
|
7
|
+
noopTelemetry,
|
|
8
|
+
safeCapture,
|
|
7
9
|
validateTool
|
|
8
|
-
} from "../chunk-
|
|
10
|
+
} from "../chunk-6R7O6BHW.js";
|
|
9
11
|
import {
|
|
10
12
|
DEFAULT_AGENT_RUNTIME_CAPABILITIES,
|
|
11
13
|
PI_AGENT_RUNTIME_CAPABILITIES,
|
|
@@ -81,6 +83,8 @@ export {
|
|
|
81
83
|
WORKSPACE_AGENT_PLUGINS_RELOADED_EVENT,
|
|
82
84
|
extractToolUiMetadata,
|
|
83
85
|
isToolUiMetadata,
|
|
86
|
+
noopTelemetry,
|
|
87
|
+
safeCapture,
|
|
84
88
|
validateConfig,
|
|
85
89
|
validateTool
|
|
86
90
|
};
|
package/docs/ERROR_CODES.md
CHANGED
|
@@ -51,4 +51,12 @@ All API failures must use the response envelope:
|
|
|
51
51
|
| `TOOL_EXECUTION_ERROR` | Tool threw or returned execution failure | 500 | report-bug | error | stable (public API) |
|
|
52
52
|
| `PLUGIN_LOAD_FAILED` | Plugin failed to load/register | 500 | report-bug | error | stable (public API) |
|
|
53
53
|
| `PLUGIN_NAME_COLLISION` | Plugin name collides with existing tool/plugin | 409 | user-fix | warn | stable (public API) |
|
|
54
|
+
| `PROVISIONING_LAYOUT_FAILED` | Failed to create/write generated `.boring-agent` layout | 500 | report-bug | error | stable (public API) |
|
|
55
|
+
| `PROVISIONING_SKILLS_FAILED` | Failed to mirror plugin skills into `.boring-agent/skills` | 500 | report-bug | error | stable (public API) |
|
|
56
|
+
| `PROVISIONING_TEMPLATES_FAILED` | Failed to seed missing workspace template files | 500 | report-bug | error | stable (public API) |
|
|
57
|
+
| `PROVISIONING_NODE_PREFLIGHT_FAILED` | Node/npm preflight failed before runtime package install | 500 | user-fix | error | stable (public API) |
|
|
58
|
+
| `PROVISIONING_NPM_INSTALL_FAILED` | npm runtime package install failed | 500 | user-fix | error | stable (public API) |
|
|
59
|
+
| `PROVISIONING_UV_BOOTSTRAP_FAILED` | uv bootstrap/preflight failed for Python runtime packages | 500 | user-fix | error | stable (public API) |
|
|
60
|
+
| `PROVISIONING_UV_INSTALL_FAILED` | uv venv or uv pip install failed | 500 | user-fix | error | stable (public API) |
|
|
61
|
+
| `PROVISIONING_ARTIFACT_FAILED` | Runtime-mode adapter failed to prepare/upload install artifact | 500 | retry | error | stable (public API) |
|
|
54
62
|
| `INTERNAL_ERROR` | Catch-all internal failure | 500 | report-bug | error | internal (may change) |
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# Workspace-local runtime provisioning
|
|
2
|
+
|
|
3
|
+
Boring UI provisions runtime resources inside the selected workspace. Opening a
|
|
4
|
+
workspace through the app shell or `npx @hachej/boring-ui-cli` is intended to be
|
|
5
|
+
zero setup: generated skills, package CLIs, SDKs, and starter files appear under
|
|
6
|
+
that workspace before the agent runtime is ready.
|
|
7
|
+
|
|
8
|
+
## Generated layout
|
|
9
|
+
|
|
10
|
+
All generated state lives under:
|
|
11
|
+
|
|
12
|
+
```text
|
|
13
|
+
$BORING_AGENT_WORKSPACE_ROOT/.boring-agent/
|
|
14
|
+
├── .gitignore
|
|
15
|
+
├── skills/ # generated mirror of plugin skills
|
|
16
|
+
├── node/ # npm prefix for runtime Node CLIs
|
|
17
|
+
├── venv/ # Python virtualenv for runtime Python CLIs/SDKs
|
|
18
|
+
├── sdk/uv/ # optional workspace-local uv fallback
|
|
19
|
+
├── cache/ # adapter/package cache
|
|
20
|
+
└── fingerprints/ # runtime skip hints
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
`.boring-agent` is generated and disposable. Do not hand-edit it; delete it to
|
|
24
|
+
force a full local reprovision. The directory writes its own `.gitignore` and
|
|
25
|
+
should not be committed.
|
|
26
|
+
|
|
27
|
+
User-authored skills still belong in `.agents/skills`. Plugin-provided skills
|
|
28
|
+
are copied into `.boring-agent/skills/<plugin-id>/<skill-name>` so normal
|
|
29
|
+
workspace reads can inspect them. Provisioning never overwrites `.agents/skills`.
|
|
30
|
+
|
|
31
|
+
## When provisioning runs
|
|
32
|
+
|
|
33
|
+
Provisioning is synchronous and idempotent:
|
|
34
|
+
|
|
35
|
+
- workspace/app load runs provisioning before declaring the agent runtime ready;
|
|
36
|
+
- CLI project mode provisions the selected project workspace;
|
|
37
|
+
- CLI workspaces/global mode provisions the saved selected workspace, not the
|
|
38
|
+
registry directory or home directory;
|
|
39
|
+
- `POST /api/v1/agent/reload` reruns provisioning, recopies edited skills,
|
|
40
|
+
reseeds missing files, and refreshes prompt/resources;
|
|
41
|
+
- runtime installs are skipped when fingerprints and expected outputs still
|
|
42
|
+
match.
|
|
43
|
+
|
|
44
|
+
Set `provisionWorkspace: false` to opt out. In that mode Boring UI does not write
|
|
45
|
+
`.boring-agent` and no package source copies or installs run.
|
|
46
|
+
|
|
47
|
+
There is no provisioning job/status/doctor endpoint in this first pass. Failures
|
|
48
|
+
surface synchronously with stable `PROVISIONING_*` error codes and structured
|
|
49
|
+
logs. Concurrent first-load/reload calls are not locked yet; avoid intentionally
|
|
50
|
+
starting multiple provisioning runs for the same workspace at once.
|
|
51
|
+
|
|
52
|
+
## Package authoring shape
|
|
53
|
+
|
|
54
|
+
Package metadata uses the existing public namespaces only:
|
|
55
|
+
|
|
56
|
+
```jsonc
|
|
57
|
+
{
|
|
58
|
+
"name": "@example/macro",
|
|
59
|
+
"pi": {
|
|
60
|
+
"skills": ["src/server/workspace-template/.agents/skills/macro-transform"],
|
|
61
|
+
"systemPrompt": "Use bm for macro transforms.",
|
|
62
|
+
"packages": ["npm:pi-web-access"],
|
|
63
|
+
"extensions": []
|
|
64
|
+
},
|
|
65
|
+
"boring": {
|
|
66
|
+
"front": "src/front/index.tsx",
|
|
67
|
+
"server": "src/server/index.ts"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
- `pi.skills` are mirrored into `.boring-agent/skills`.
|
|
73
|
+
- `pi.systemPrompt`, `pi.packages`, `pi.extensions`, and prompts remain Pi
|
|
74
|
+
resources and flow through the Pi loader/prompt builder.
|
|
75
|
+
- `boring.front` discovers UI contributions.
|
|
76
|
+
- `boring.server` discovers trusted server code.
|
|
77
|
+
|
|
78
|
+
There is no third public manifest namespace for provisioning. Future
|
|
79
|
+
workspace-installed plugin declarations are deferred and are not first-pass
|
|
80
|
+
behavior.
|
|
81
|
+
|
|
82
|
+
## Trusted server provisioning
|
|
83
|
+
|
|
84
|
+
Trusted `boring.server` code can declare runtime provisioning for SDKs,
|
|
85
|
+
templates, and environment variables:
|
|
86
|
+
|
|
87
|
+
```ts
|
|
88
|
+
import { defineServerPlugin } from "@hachej/boring-workspace/server"
|
|
89
|
+
|
|
90
|
+
export default defineServerPlugin({
|
|
91
|
+
id: "boring-macro",
|
|
92
|
+
provisioning: {
|
|
93
|
+
python: [{
|
|
94
|
+
id: "macro-sdk",
|
|
95
|
+
packageName: "boring-macro-sdk",
|
|
96
|
+
projectFile: "src/server/sdk/pyproject.toml",
|
|
97
|
+
expectedBins: ["bm"],
|
|
98
|
+
env: { BORING_MACRO_API_URL: "http://localhost:3000/api/macro" },
|
|
99
|
+
}],
|
|
100
|
+
templateDirs: [{
|
|
101
|
+
id: "macro-template",
|
|
102
|
+
path: "src/server/workspace-template",
|
|
103
|
+
}],
|
|
104
|
+
},
|
|
105
|
+
routes(app) {
|
|
106
|
+
// Macro HTTP/API integration.
|
|
107
|
+
},
|
|
108
|
+
agentTools: [
|
|
109
|
+
// Only trusted server-stateful tools that need DB/API clients/auth.
|
|
110
|
+
],
|
|
111
|
+
})
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
After provisioning, a macro-style workspace has:
|
|
115
|
+
|
|
116
|
+
```text
|
|
117
|
+
.boring-agent/skills/boring-macro/macro-transform/SKILL.md
|
|
118
|
+
.boring-agent/venv/bin/bm
|
|
119
|
+
.deck/intro.md # seeded only if missing
|
|
120
|
+
transforms/custom/.gitkeep # seeded only if missing
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
The harness PATH includes `.boring-agent/venv/bin`, and runtime command env
|
|
124
|
+
includes `BORING_MACRO_API_URL`. Existing user files are preserved; templates
|
|
125
|
+
copy only missing files.
|
|
126
|
+
|
|
127
|
+
Regular portable package/runtime plugins should prefer `pi.extensions` or future
|
|
128
|
+
portable sandbox-tool declarations instead of `boring.server.agentTools`.
|
|
129
|
+
|
|
130
|
+
## Runtime-mode consistency
|
|
131
|
+
|
|
132
|
+
`direct`, `local`/bwrap, and `vercel-sandbox` use the same provisioning engine and
|
|
133
|
+
same runtime layout. Mode adapters own transport details:
|
|
134
|
+
|
|
135
|
+
- direct/local can use local package paths directly;
|
|
136
|
+
- Vercel-like adapters turn path-invisible local packages into workspace-visible
|
|
137
|
+
artifact sources;
|
|
138
|
+
- adapters choose cache roots and enforce path-safety for workspace file writes.
|
|
139
|
+
|
|
140
|
+
The shared provisioning engine never calls Vercel APIs, `npm pack`, upload APIs,
|
|
141
|
+
or cloud credentials directly.
|
|
142
|
+
|
|
143
|
+
## Verification commands
|
|
144
|
+
|
|
145
|
+
Useful smoke/unit checks:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
pnpm --filter @hachej/boring-ui-cli exec vitest run src/__tests__/runtimeProvisioning.test.ts
|
|
149
|
+
pnpm --filter @hachej/boring-workspace exec vitest run src/app/server/__tests__/macroRuntimeProvisioning.test.ts
|
|
150
|
+
pnpm --filter @hachej/boring-workspace exec vitest run src/server/__tests__/createWorkspaceAgentServer.test.ts --testNamePattern "runtime provisioning reload"
|
|
151
|
+
pnpm --filter @hachej/boring-agent exec vitest run src/server/sandbox/vercel-sandbox/__tests__/provisioningAdapter.test.ts
|
|
152
|
+
pnpm --filter @hachej/boring-agent exec vitest run src/server/workspace/provisioning/__tests__
|
|
153
|
+
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hachej/boring-agent",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.23",
|
|
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.",
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
"use-stick-to-bottom": "^1.1.3",
|
|
76
76
|
"yaml": "^2.8.3",
|
|
77
77
|
"zod": "^3.25.76",
|
|
78
|
-
"@hachej/boring-ui-kit": "0.1.
|
|
78
|
+
"@hachej/boring-ui-kit": "0.1.23"
|
|
79
79
|
},
|
|
80
80
|
"devDependencies": {
|
|
81
81
|
"@opentelemetry/api": "^1.9.1",
|