@hachej/boring-agent 0.1.85 → 0.1.87

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.
@@ -1811,6 +1811,14 @@ async function prepareVercelDeploymentSnapshot(opts) {
1811
1811
  });
1812
1812
  }
1813
1813
 
1814
+ // src/server/config/workspaceRoot.ts
1815
+ var WORKSPACE_ROOT_ENV = "BORING_AGENT_WORKSPACE_ROOT";
1816
+ function resolveWorkspaceRoot(defaultRoot = process.cwd()) {
1817
+ const configured = process.env[WORKSPACE_ROOT_ENV]?.trim();
1818
+ if (!configured) return defaultRoot;
1819
+ return configured;
1820
+ }
1821
+
1814
1822
  // src/server/runtime/createServerFileSearch.ts
1815
1823
  var DEFAULT_LIMIT = 500;
1816
1824
  var MAX_LIMIT = 5e3;
@@ -12827,7 +12835,7 @@ function requirePath(value, reply) {
12827
12835
  return value;
12828
12836
  }
12829
12837
  function gitRoutes(app, opts, done) {
12830
- async function resolveWorkspaceRoot(request) {
12838
+ async function resolveWorkspaceRoot2(request) {
12831
12839
  const workspace = opts.getWorkspace ? await opts.getWorkspace(request) : opts.workspace;
12832
12840
  return workspace === void 0 ? void 0 : getNodeWorkspaceHostRoot(workspace);
12833
12841
  }
@@ -12835,7 +12843,7 @@ function gitRoutes(app, opts, done) {
12835
12843
  const query = request.query;
12836
12844
  const path4 = requirePath(query.path, reply);
12837
12845
  if (path4 === null) return;
12838
- const workspaceRoot = await resolveWorkspaceRoot(request);
12846
+ const workspaceRoot = await resolveWorkspaceRoot2(request);
12839
12847
  if (!workspaceRoot) {
12840
12848
  return {
12841
12849
  enabled: false,
@@ -13967,7 +13975,8 @@ var registerAgentRoutes = async (app, opts) => {
13967
13975
  }
13968
13976
  });
13969
13977
  const modelsWorkspaceScoped = Boolean(opts.filterModels);
13970
- const requestScopedRuntime = typeof opts.getWorkspaceId === "function" || typeof opts.getWorkspaceRoot === "function" || typeof opts.getTemplatePath === "function" || typeof opts.getPi === "function" || typeof opts.getExtraTools === "function" || typeof opts.getSessionNamespace === "function" || typeof opts.getSystemPromptDynamic === "function" || typeof opts.getTrustedWorkspaceRoot === "function";
13978
+ const requestScopedRuntime = typeof opts.getWorkspaceId === "function" || typeof opts.getWorkspaceRoot === "function" || typeof opts.getTemplatePath === "function" || typeof opts.getPi === "function" || typeof opts.getExtraTools === "function" || typeof opts.getSessionNamespace === "function" || typeof opts.getSystemPromptDynamic === "function" || typeof opts.getRuntimeScopeContribution === "function" || typeof opts.getTrustedWorkspaceRoot === "function";
13979
+ const runtimeScopeByRequest = /* @__PURE__ */ new WeakMap();
13971
13980
  const sessionChangesTracker = new InMemorySessionChangesTracker();
13972
13981
  const externalPluginsEnabled = opts.externalPlugins !== false;
13973
13982
  async function resolveScopePi(workspaceId, root, request) {
@@ -13990,11 +13999,13 @@ var registerAgentRoutes = async (app, opts) => {
13990
13999
  const pi = await resolveScopePi(workspaceId, root, request);
13991
14000
  const sessionNamespace = normalizeSessionNamespace(opts.getSessionNamespace ? await opts.getSessionNamespace({ workspaceId, workspaceRoot: root, request, userId: trustedCtx?.userId }) : opts.sessionNamespace);
13992
14001
  const extraToolsAuthSubject = opts.getExtraTools ? trustedCtx?.userId ?? getRequestAuthSubject2(request) : void 0;
14002
+ const contribution = await opts.getRuntimeScopeContribution?.({ workspaceId, workspaceRoot: root, request });
13993
14003
  return {
13994
14004
  root,
13995
14005
  templatePath: scopedTemplatePath,
13996
14006
  pi,
13997
14007
  sessionNamespace,
14008
+ loadSystemPromptAppend: contribution?.loadSystemPromptAppend,
13998
14009
  key: JSON.stringify([
13999
14010
  resolvedMode,
14000
14011
  workspaceId,
@@ -14002,10 +14013,26 @@ var registerAgentRoutes = async (app, opts) => {
14002
14013
  scopedTemplatePath ?? null,
14003
14014
  pi,
14004
14015
  sessionNamespace ?? null,
14005
- extraToolsAuthSubject ?? null
14016
+ extraToolsAuthSubject ?? null,
14017
+ contribution?.identity ?? null
14006
14018
  ])
14007
14019
  };
14008
14020
  }
14021
+ function getRuntimeScope(workspaceId, request, trustedCtx) {
14022
+ if (!request) return resolveRuntimeScope(workspaceId, void 0, trustedCtx);
14023
+ let scopes = runtimeScopeByRequest.get(request);
14024
+ if (!scopes) {
14025
+ scopes = /* @__PURE__ */ new Map();
14026
+ runtimeScopeByRequest.set(request, scopes);
14027
+ }
14028
+ const identity = JSON.stringify([workspaceId, trustedCtx?.userId ?? null]);
14029
+ let promise = scopes.get(identity);
14030
+ if (!promise) {
14031
+ promise = resolveRuntimeScope(workspaceId, request, trustedCtx);
14032
+ scopes.set(identity, promise);
14033
+ }
14034
+ return promise;
14035
+ }
14009
14036
  async function resolveSkillScope(workspaceId, request) {
14010
14037
  const root = request && opts.getWorkspaceRoot ? await opts.getWorkspaceRoot(workspaceId, request) : workspaceRoot;
14011
14038
  const pi = await resolveScopePi(workspaceId, root, request);
@@ -14052,6 +14079,7 @@ var registerAgentRoutes = async (app, opts) => {
14052
14079
  }
14053
14080
  async function createRuntimeBinding(workspaceId, scope, request, trustedCtx) {
14054
14081
  const root = scope.root;
14082
+ const scopedSystemPromptAppend = await scope.loadSystemPromptAppend?.();
14055
14083
  const modeCtx = {
14056
14084
  workspaceRoot: root,
14057
14085
  sessionId: workspaceId,
@@ -14265,7 +14293,7 @@ var registerAgentRoutes = async (app, opts) => {
14265
14293
  checkReadiness
14266
14294
  }),
14267
14295
  harnessFactory,
14268
- systemPromptAppend: opts.systemPromptAppend,
14296
+ systemPromptAppend: [opts.systemPromptAppend, scopedSystemPromptAppend].filter(Boolean).join("\n\n") || void 0,
14269
14297
  systemPromptDynamic,
14270
14298
  telemetry: opts.telemetry,
14271
14299
  metering: opts.metering,
@@ -14324,7 +14352,7 @@ var registerAgentRoutes = async (app, opts) => {
14324
14352
  }
14325
14353
  async function resolveRuntimeBinding(workspaceId, request, options = {}) {
14326
14354
  bindingLifecycle.assertAdmission(workspaceId, request);
14327
- const scope = await resolveRuntimeScope(workspaceId, request, options.trustedCtx);
14355
+ const scope = await getRuntimeScope(workspaceId, request, options.trustedCtx);
14328
14356
  bindingLifecycle.assertAdmission(workspaceId, request);
14329
14357
  const existing = bindingLifecycle.getEntry(scope.key);
14330
14358
  if (existing) {
@@ -14746,6 +14774,8 @@ export {
14746
14774
  getBoringAgentPathEntries,
14747
14775
  getBoringAgentRuntimeEnv,
14748
14776
  createDirectSandbox,
14777
+ validatePath,
14778
+ assertRealPathWithinWorkspace,
14749
14779
  createNodeWorkspace,
14750
14780
  createBwrapSandbox,
14751
14781
  FileHandleStore,
@@ -14758,6 +14788,7 @@ export {
14758
14788
  prepareDeploymentSnapshot,
14759
14789
  createVercelDeploymentSnapshotProvider,
14760
14790
  prepareVercelDeploymentSnapshot,
14791
+ resolveWorkspaceRoot,
14761
14792
  REMOTE_WORKER_RUNTIME_CWD,
14762
14793
  REMOTE_WORKER_PROVIDER,
14763
14794
  WORKER_INTERNAL_TOKEN_HEADER,
@@ -5714,7 +5714,7 @@ function sortByUpdatedDesc(a, b) {
5714
5714
  return a.id.localeCompare(b.id);
5715
5715
  }
5716
5716
 
5717
- // ../../node_modules/.pnpm/@earendil-works+pi-tui@0.80.3/node_modules/@earendil-works/pi-tui/dist/fuzzy.js
5717
+ // ../../node_modules/.pnpm/@earendil-works+pi-tui@0.80.7/node_modules/@earendil-works/pi-tui/dist/fuzzy.js
5718
5718
  function fuzzyMatch(query, text) {
5719
5719
  const queryLower = query.toLowerCase();
5720
5720
  const textLower = text.toLowerCase();
@@ -2521,32 +2521,32 @@
2521
2521
  }
2522
2522
  }
2523
2523
  .dark\:bg-background {
2524
- &:is(.dark, .dark *) {
2524
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
2525
2525
  background-color: var(--background);
2526
2526
  }
2527
2527
  }
2528
2528
  .dark\:\!text-\[var\(--shiki-dark\)\] {
2529
- &:is(.dark, .dark *) {
2529
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
2530
2530
  color: var(--shiki-dark) !important;
2531
2531
  }
2532
2532
  }
2533
2533
  .dark\:text-amber-300 {
2534
- &:is(.dark, .dark *) {
2534
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
2535
2535
  color: var(--color-amber-300);
2536
2536
  }
2537
2537
  }
2538
2538
  .dark\:text-zinc-100 {
2539
- &:is(.dark, .dark *) {
2539
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
2540
2540
  color: var(--color-zinc-100);
2541
2541
  }
2542
2542
  }
2543
2543
  .dark\:text-zinc-300 {
2544
- &:is(.dark, .dark *) {
2544
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
2545
2545
  color: var(--color-zinc-300);
2546
2546
  }
2547
2547
  }
2548
2548
  .dark\:hover\:bg-accent\/50 {
2549
- &:is(.dark, .dark *) {
2549
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
2550
2550
  &:hover {
2551
2551
  @media (hover: hover) {
2552
2552
  background-color: var(--accent);
@@ -2558,7 +2558,7 @@
2558
2558
  }
2559
2559
  }
2560
2560
  .dark\:hover\:bg-muted {
2561
- &:is(.dark, .dark *) {
2561
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
2562
2562
  &:hover {
2563
2563
  @media (hover: hover) {
2564
2564
  background-color: var(--muted);
@@ -2674,7 +2674,7 @@
2674
2674
  }
2675
2675
  .\[\&_\[data-slot\=input-group\]\]\:dark\:\!bg-transparent {
2676
2676
  & [data-slot=input-group] {
2677
- &:is(.dark, .dark *) {
2677
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
2678
2678
  background-color: transparent !important;
2679
2679
  }
2680
2680
  }
@@ -4921,12 +4921,12 @@
4921
4921
  }
4922
4922
  }
4923
4923
  .dark\:border-input {
4924
- &:is(.dark *) {
4924
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
4925
4925
  border-color: var(--boring-input);
4926
4926
  }
4927
4927
  }
4928
4928
  .dark\:bg-destructive\/60 {
4929
- &:is(.dark *) {
4929
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
4930
4930
  background-color: var(--boring-destructive);
4931
4931
  @supports (color: color-mix(in lab, red, red)) {
4932
4932
  background-color: color-mix(in oklab, var(--boring-destructive) 60%, transparent);
@@ -4934,7 +4934,7 @@
4934
4934
  }
4935
4935
  }
4936
4936
  .dark\:bg-input\/30 {
4937
- &:is(.dark *) {
4937
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
4938
4938
  background-color: var(--boring-input);
4939
4939
  @supports (color: color-mix(in lab, red, red)) {
4940
4940
  background-color: color-mix(in oklab, var(--boring-input) 30%, transparent);
@@ -4942,17 +4942,17 @@
4942
4942
  }
4943
4943
  }
4944
4944
  .dark\:bg-transparent {
4945
- &:is(.dark *) {
4945
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
4946
4946
  background-color: transparent;
4947
4947
  }
4948
4948
  }
4949
4949
  .dark\:text-muted-foreground {
4950
- &:is(.dark *) {
4950
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
4951
4951
  color: var(--boring-muted-foreground);
4952
4952
  }
4953
4953
  }
4954
4954
  .dark\:hover\:bg-input\/50 {
4955
- &:is(.dark *) {
4955
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
4956
4956
  &:hover {
4957
4957
  @media (hover: hover) {
4958
4958
  background-color: var(--boring-input);
@@ -4964,7 +4964,7 @@
4964
4964
  }
4965
4965
  }
4966
4966
  .dark\:hover\:bg-muted\/40 {
4967
- &:is(.dark *) {
4967
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
4968
4968
  &:hover {
4969
4969
  @media (hover: hover) {
4970
4970
  background-color: var(--boring-muted);
@@ -4976,7 +4976,7 @@
4976
4976
  }
4977
4977
  }
4978
4978
  .dark\:hover\:text-foreground {
4979
- &:is(.dark *) {
4979
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
4980
4980
  &:hover {
4981
4981
  @media (hover: hover) {
4982
4982
  color: var(--boring-foreground);
@@ -4985,7 +4985,7 @@
4985
4985
  }
4986
4986
  }
4987
4987
  .dark\:focus-visible\:ring-destructive\/40 {
4988
- &:is(.dark *) {
4988
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
4989
4989
  &:focus-visible {
4990
4990
  --tw-ring-color: var(--boring-destructive);
4991
4991
  @supports (color: color-mix(in lab, red, red)) {
@@ -4995,7 +4995,7 @@
4995
4995
  }
4996
4996
  }
4997
4997
  .dark\:has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/40 {
4998
- &:is(.dark *) {
4998
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
4999
4999
  &:has(*:is([data-slot][aria-invalid=true])) {
5000
5000
  --tw-ring-color: var(--boring-destructive);
5001
5001
  @supports (color: color-mix(in lab, red, red)) {
@@ -5005,7 +5005,7 @@
5005
5005
  }
5006
5006
  }
5007
5007
  .dark\:aria-invalid\:ring-destructive\/40 {
5008
- &:is(.dark *) {
5008
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
5009
5009
  &[aria-invalid="true"] {
5010
5010
  --tw-ring-color: var(--boring-destructive);
5011
5011
  @supports (color: color-mix(in lab, red, red)) {
@@ -5015,14 +5015,14 @@
5015
5015
  }
5016
5016
  }
5017
5017
  .dark\:data-\[state\=active\]\:border-input {
5018
- &:is(.dark *) {
5018
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
5019
5019
  &[data-state="active"] {
5020
5020
  border-color: var(--boring-input);
5021
5021
  }
5022
5022
  }
5023
5023
  }
5024
5024
  .dark\:data-\[state\=active\]\:bg-input\/30 {
5025
- &:is(.dark *) {
5025
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
5026
5026
  &[data-state="active"] {
5027
5027
  background-color: var(--boring-input);
5028
5028
  @supports (color: color-mix(in lab, red, red)) {
@@ -5032,14 +5032,14 @@
5032
5032
  }
5033
5033
  }
5034
5034
  .dark\:data-\[state\=active\]\:text-foreground {
5035
- &:is(.dark *) {
5035
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
5036
5036
  &[data-state="active"] {
5037
5037
  color: var(--boring-foreground);
5038
5038
  }
5039
5039
  }
5040
5040
  }
5041
5041
  .dark\:group-data-\[variant\=line\]\/tabs-list\:data-\[state\=active\]\:border-transparent {
5042
- &:is(.dark *) {
5042
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
5043
5043
  &:is(:where(.group\/tabs-list)[data-variant="line"] *) {
5044
5044
  &[data-state="active"] {
5045
5045
  border-color: transparent;
@@ -5048,7 +5048,7 @@
5048
5048
  }
5049
5049
  }
5050
5050
  .dark\:group-data-\[variant\=line\]\/tabs-list\:data-\[state\=active\]\:bg-transparent {
5051
- &:is(.dark *) {
5051
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
5052
5052
  &:is(:where(.group\/tabs-list)[data-variant="line"] *) {
5053
5053
  &[data-state="active"] {
5054
5054
  background-color: transparent;
@@ -5057,14 +5057,14 @@
5057
5057
  }
5058
5058
  }
5059
5059
  .dark\:data-\[state\=checked\]\:bg-primary {
5060
- &:is(.dark *) {
5060
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
5061
5061
  &[data-state="checked"] {
5062
5062
  background-color: var(--boring-primary);
5063
5063
  }
5064
5064
  }
5065
5065
  }
5066
5066
  .dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20 {
5067
- &:is(.dark *) {
5067
+ &:is([data-theme="dark"], [data-theme="dark"] *) {
5068
5068
  &[data-variant="destructive"] {
5069
5069
  &:focus {
5070
5070
  background-color: var(--boring-destructive);
@@ -5592,7 +5592,7 @@
5592
5592
  }
5593
5593
  }
5594
5594
  }
5595
- .dark {
5595
+ [data-theme="dark"] {
5596
5596
  --background: oklch(0.145 0.004 285.823);
5597
5597
  --foreground: oklch(0.985 0 0);
5598
5598
  --card: oklch(0.145 0.004 285.823);
@@ -5684,7 +5684,7 @@
5684
5684
  --boring-agent-diff-remove: oklch(from var(--destructive) l c h / 0.14);
5685
5685
  --boring-agent-diff-remove-fg: var(--destructive);
5686
5686
  }
5687
- .dark [data-boring-agent] {
5687
+ [data-theme="dark"] [data-boring-agent] {
5688
5688
  --background: var(--boring-background, oklch(0.145 0.004 285.823));
5689
5689
  --foreground: var(--boring-foreground, oklch(0.985 0 0));
5690
5690
  --card: var(--boring-card, oklch(0.145 0.004 285.823));
@@ -5772,7 +5772,7 @@ pre code span[style*="--sdm-c"] {
5772
5772
  color: var(--sdm-c, inherit);
5773
5773
  background-color: var(--sdm-bg, transparent);
5774
5774
  }
5775
- .dark pre code span[style*="--shiki-dark"] {
5775
+ [data-theme="dark"] pre code span[style*="--shiki-dark"] {
5776
5776
  color: var(--shiki-dark, var(--sdm-c, inherit));
5777
5777
  background-color: var(--shiki-dark-bg, var(--sdm-bg, transparent));
5778
5778
  }
@@ -191,6 +191,17 @@ interface CreateNodeWorkspaceOptions {
191
191
  }
192
192
  declare function createNodeWorkspace(root: string, opts?: CreateNodeWorkspaceOptions): Workspace;
193
193
 
194
+ /**
195
+ * Validate and resolve a user-provided relative path under workspaceRoot.
196
+ */
197
+ declare function validatePath(workspaceRoot: string, relPath: string): string;
198
+ /**
199
+ * Resolve symlinks and ensure candidate path remains under workspaceRoot.
200
+ */
201
+ declare function assertRealPathWithinWorkspace(workspaceRoot: string, absPath: string): Promise<void>;
202
+
203
+ declare function resolveWorkspaceRoot(defaultRoot?: string): string;
204
+
194
205
  interface BoringAgentRuntimePaths {
195
206
  /** Runtime-visible workspace root. This is BORING_AGENT_WORKSPACE_ROOT. */
196
207
  workspaceRoot: string;
@@ -1300,6 +1311,18 @@ interface RegisterAgentRoutesOptions {
1300
1311
  workspaceId: string;
1301
1312
  workspaceRoot: string;
1302
1313
  }) => string | undefined | Promise<string | undefined>;
1314
+ /** Immutable host contribution captured once in the runtime binding scope. */
1315
+ getRuntimeScopeContribution?: (ctx: {
1316
+ workspaceId: string;
1317
+ workspaceRoot: string;
1318
+ request?: FastifyRequest;
1319
+ }) => Readonly<{
1320
+ identity: string;
1321
+ loadSystemPromptAppend?: () => Promise<string | undefined>;
1322
+ }> | Promise<Readonly<{
1323
+ identity: string;
1324
+ loadSystemPromptAppend?: () => Promise<string | undefined>;
1325
+ }>>;
1303
1326
  /** Override the default pi-backed harness with a custom agent runtime. */
1304
1327
  harnessFactory?: AgentHarnessFactory;
1305
1328
  /** Optional pi adapter/runtime knobs used by the default harness. */
@@ -1425,4 +1448,4 @@ interface Logger {
1425
1448
  }
1426
1449
  declare function createLogger(prefix: string): Logger;
1427
1450
 
1428
- export { AgentConfig, AgentDirectoryCompilerError, type AgentDirectoryCompilerErrorCode, type AgentDirectoryCompilerPublicErrorCode, AgentHarnessFactory, type AgentMeteringSink, type BoringAgentRuntimePaths, type BuiltinRuntimeModeId, type CreateAgentAppOptions, type CreateVercelProvisioningAdapterOptions, type DeploymentSnapshotProvider, type DeploymentSnapshotRecipe, type DeploymentSnapshotResult, type DeploymentSnapshotStatus, FileHandleStore, type LogFields, type Logger, MANAGED_AGENT_MCP_DELIVERY_RULE, MANAGED_AGENT_MCP_ORIGIN_SURFACE, type ManagedAgentArtifact, type ManagedAgentArtifactCandidate, type ManagedAgentArtifactRef, type ManagedAgentBoundRunnerWorkspace, type ManagedAgentCollectArtifactsInput, type ManagedAgentDelegateInput, type ManagedAgentDelegateProgress, type ManagedAgentDelegateRequestContext, type ManagedAgentDelegateResult, type ManagedAgentDelegateRunInput, type ManagedAgentDelegateRunner, type ManagedAgentDelegateStatus, type ManagedAgentDelegateStatusResult, ManagedAgentMcpDelegateController, type ManagedAgentMcpDelegateOptions, ManagedAgentMcpError, type ManagedAgentMcpHttpHandlerOptions, type ManagedAgentMcpServerOptions, type ManagedAgentSafeError, type ManagedAgentWorkspaceResolutionInput, type MeteringErrorLogger, type MeteringReleaseInput, type MeteringReleaseReason, type MeteringReservationResult, type MeteringReserveInput, type MeteringRunKind, type MeteringRunScope, type MeteringRunStatus, type MeteringSettleInput, type MeteringUsage, type MeteringUsageInput, type ModeContext, PI_PACKAGE_RESOURCE_FILTERS, type PiExtensionFactory, type PiHarnessOptions, type PiPackageSource, type PluginSkillSource, type ProvisionRuntimeWorkspaceOptions, type ProvisionWorkspaceRuntimeOptions, type ProvisioningArtifactRequest, type RegisterAgentRoutesOptions, RemoteWorkerClient, RemoteWorkerClientError, type RemoteWorkerClientOptions, RemoteWorkerExecRequest, type RemoteWorkerModeAdapterOptions, RemoteWorkerWorkspaceOp, RemoteWorkerWorkspaceResult, type ResolvedAgent, type ResolvedAgentDigestInput, type RuntimeBundle, type RuntimeEnvContribution, type RuntimeEnvContributionContext, type RuntimeFilesystemBinding, type RuntimeFilesystemBindingOperations, type RuntimeModeAdapter, type RuntimeModeId, type RuntimeNodePackageSpec$1 as RuntimeNodePackageSpec, type RuntimeProvisioningContribution$1 as RuntimeProvisioningContribution, type RuntimePythonSpec$1 as RuntimePythonSpec, type RuntimeTemplateContribution$1 as RuntimeTemplateContribution, type RuntimeWorkspaceProvisioningResult, type ShareEntryMcpResourceOptions, type SnapshotBakeOptions, type SnapshotBakeResult, UV_SETUP_COMMANDS, VERCEL_PROVISIONING_CACHE_ROOT, VERCEL_SANDBOX_WORKSPACE_ROOT, UV_SETUP_COMMANDS as VERCEL_UV_SETUP_COMMANDS, type VercelBakeClient, type VercelBakeSandbox, type VercelDeploymentSnapshotOptions, type WorkspaceAgentDispatcherBinding, type WorkspaceAgentDispatcherResolveOptions, type WorkspaceAgentDispatcherResolver, type WorkspaceProvisioningAdapter, type WorkspaceProvisioningExecResult, type WorkspaceProvisioningResult, applyCspHeaders, autoDetectMode, bakeSnapshotIfNeeded, buildDeploymentSnapshotRecipe, buildPackageHash, buildSnapshotRecipeHash, compactPiPackages, compileAgentDirectory, constantTimeTokenEqual, createAgent, createAgentApp, createDirectSandbox, createLogger, createManagedAgentMcpDelegateController, createManagedAgentMcpHttpHandler, createManagedAgentMcpServer, createNodeWorkspace, createRemoteWorkerModeAdapter, createRemoteWorkerSandbox, createRemoteWorkerWorkspace, createResolvedAgentDigest, createResourceSettingsManager, createVercelDeploymentSnapshotProvider, createVercelProvisioningAdapter, createVercelSandboxWorkspace, decodeBytesFromWorker, encodeBytesForWorker, fileRoutes, getBoringAgentPathEntries, getBoringAgentRuntimeEnv, getBoringAgentRuntimePaths, hasBwrap, mergePiPackageSources, normalizeMeteringUsage, piPackageSourceKey, prepareDeploymentSnapshot, prepareVercelDeploymentSnapshot, provisionRuntimeWorkspace, provisionWorkspaceRuntime, registerAgentRoutes, registerShareEntryResources, resolveAgentDeployment, resolveMode, resolveSandboxHandle, shareResourceUri };
1451
+ export { AgentConfig, AgentDirectoryCompilerError, type AgentDirectoryCompilerErrorCode, type AgentDirectoryCompilerPublicErrorCode, AgentHarnessFactory, type AgentMeteringSink, type BoringAgentRuntimePaths, type BuiltinRuntimeModeId, type CreateAgentAppOptions, type CreateVercelProvisioningAdapterOptions, type DeploymentSnapshotProvider, type DeploymentSnapshotRecipe, type DeploymentSnapshotResult, type DeploymentSnapshotStatus, FileHandleStore, type LogFields, type Logger, MANAGED_AGENT_MCP_DELIVERY_RULE, MANAGED_AGENT_MCP_ORIGIN_SURFACE, type ManagedAgentArtifact, type ManagedAgentArtifactCandidate, type ManagedAgentArtifactRef, type ManagedAgentBoundRunnerWorkspace, type ManagedAgentCollectArtifactsInput, type ManagedAgentDelegateInput, type ManagedAgentDelegateProgress, type ManagedAgentDelegateRequestContext, type ManagedAgentDelegateResult, type ManagedAgentDelegateRunInput, type ManagedAgentDelegateRunner, type ManagedAgentDelegateStatus, type ManagedAgentDelegateStatusResult, ManagedAgentMcpDelegateController, type ManagedAgentMcpDelegateOptions, ManagedAgentMcpError, type ManagedAgentMcpHttpHandlerOptions, type ManagedAgentMcpServerOptions, type ManagedAgentSafeError, type ManagedAgentWorkspaceResolutionInput, type MeteringErrorLogger, type MeteringReleaseInput, type MeteringReleaseReason, type MeteringReservationResult, type MeteringReserveInput, type MeteringRunKind, type MeteringRunScope, type MeteringRunStatus, type MeteringSettleInput, type MeteringUsage, type MeteringUsageInput, type ModeContext, PI_PACKAGE_RESOURCE_FILTERS, type PiExtensionFactory, type PiHarnessOptions, type PiPackageSource, type PluginSkillSource, type ProvisionRuntimeWorkspaceOptions, type ProvisionWorkspaceRuntimeOptions, type ProvisioningArtifactRequest, type RegisterAgentRoutesOptions, RemoteWorkerClient, RemoteWorkerClientError, type RemoteWorkerClientOptions, RemoteWorkerExecRequest, type RemoteWorkerModeAdapterOptions, RemoteWorkerWorkspaceOp, RemoteWorkerWorkspaceResult, type ResolvedAgent, type ResolvedAgentDigestInput, type RuntimeBundle, type RuntimeEnvContribution, type RuntimeEnvContributionContext, type RuntimeFilesystemBinding, type RuntimeFilesystemBindingOperations, type RuntimeModeAdapter, type RuntimeModeId, type RuntimeNodePackageSpec$1 as RuntimeNodePackageSpec, type RuntimeProvisioningContribution$1 as RuntimeProvisioningContribution, type RuntimePythonSpec$1 as RuntimePythonSpec, type RuntimeTemplateContribution$1 as RuntimeTemplateContribution, type RuntimeWorkspaceProvisioningResult, type ShareEntryMcpResourceOptions, type SnapshotBakeOptions, type SnapshotBakeResult, UV_SETUP_COMMANDS, VERCEL_PROVISIONING_CACHE_ROOT, VERCEL_SANDBOX_WORKSPACE_ROOT, UV_SETUP_COMMANDS as VERCEL_UV_SETUP_COMMANDS, type VercelBakeClient, type VercelBakeSandbox, type VercelDeploymentSnapshotOptions, type WorkspaceAgentDispatcherBinding, type WorkspaceAgentDispatcherResolveOptions, type WorkspaceAgentDispatcherResolver, type WorkspaceProvisioningAdapter, type WorkspaceProvisioningExecResult, type WorkspaceProvisioningResult, applyCspHeaders, assertRealPathWithinWorkspace, autoDetectMode, bakeSnapshotIfNeeded, buildDeploymentSnapshotRecipe, buildPackageHash, buildSnapshotRecipeHash, compactPiPackages, compileAgentDirectory, constantTimeTokenEqual, createAgent, createAgentApp, createDirectSandbox, createLogger, createManagedAgentMcpDelegateController, createManagedAgentMcpHttpHandler, createManagedAgentMcpServer, createNodeWorkspace, createRemoteWorkerModeAdapter, createRemoteWorkerSandbox, createRemoteWorkerWorkspace, createResolvedAgentDigest, createResourceSettingsManager, createVercelDeploymentSnapshotProvider, createVercelProvisioningAdapter, createVercelSandboxWorkspace, decodeBytesFromWorker, encodeBytesForWorker, fileRoutes, getBoringAgentPathEntries, getBoringAgentRuntimeEnv, getBoringAgentRuntimePaths, hasBwrap, mergePiPackageSources, normalizeMeteringUsage, piPackageSourceKey, prepareDeploymentSnapshot, prepareVercelDeploymentSnapshot, provisionRuntimeWorkspace, provisionWorkspaceRuntime, registerAgentRoutes, registerShareEntryResources, resolveAgentDeployment, resolveMode, resolveSandboxHandle, resolveWorkspaceRoot, shareResourceUri, validatePath };
@@ -16,6 +16,7 @@ import {
16
16
  WORKER_REQUEST_ID_HEADER,
17
17
  WORKER_WORKSPACE_ID_HEADER,
18
18
  applyCspHeaders,
19
+ assertRealPathWithinWorkspace,
19
20
  autoDetectMode,
20
21
  bakeSnapshotIfNeeded,
21
22
  buildDeploymentSnapshotRecipe,
@@ -55,8 +56,10 @@ import {
55
56
  resolveAgentDeployment,
56
57
  resolveMode,
57
58
  resolveSandboxHandle,
58
- shareResourceUri
59
- } from "../chunk-HY7EERLW.js";
59
+ resolveWorkspaceRoot,
60
+ shareResourceUri,
61
+ validatePath
62
+ } from "../chunk-RRVL5JRE.js";
60
63
  import "../chunk-YONTHCD7.js";
61
64
  import "../chunk-LYBTHR7J.js";
62
65
  import "../chunk-WSQ5QNIY.js";
@@ -91,6 +94,7 @@ export {
91
94
  WORKER_REQUEST_ID_HEADER,
92
95
  WORKER_WORKSPACE_ID_HEADER,
93
96
  applyCspHeaders,
97
+ assertRealPathWithinWorkspace,
94
98
  autoDetectMode,
95
99
  bakeSnapshotIfNeeded,
96
100
  buildDeploymentSnapshotRecipe,
@@ -135,5 +139,7 @@ export {
135
139
  resolveAgentDeployment,
136
140
  resolveMode,
137
141
  resolveSandboxHandle,
138
- shareResourceUri
142
+ resolveWorkspaceRoot,
143
+ shareResourceUri,
144
+ validatePath
139
145
  };
@@ -4,7 +4,7 @@ import {
4
4
  constantTimeTokenEqual,
5
5
  createBwrapSandbox,
6
6
  createNodeWorkspace
7
- } from "../../chunk-HY7EERLW.js";
7
+ } from "../../chunk-RRVL5JRE.js";
8
8
  import "../../chunk-YONTHCD7.js";
9
9
  import "../../chunk-LYBTHR7J.js";
10
10
  import "../../chunk-WSQ5QNIY.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hachej/boring-agent",
3
- "version": "0.1.85",
3
+ "version": "0.1.87",
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.",
@@ -50,7 +50,7 @@
50
50
  "docs"
51
51
  ],
52
52
  "dependencies": {
53
- "@mariozechner/pi-coding-agent": "npm:@earendil-works/pi-coding-agent@0.75.5",
53
+ "@mariozechner/pi-coding-agent": "npm:@earendil-works/pi-coding-agent@0.80.7",
54
54
  "@modelcontextprotocol/sdk": "1.29.0",
55
55
  "@radix-ui/react-collapsible": "^1.1.14",
56
56
  "@radix-ui/react-dialog": "^1.1.17",
@@ -84,7 +84,7 @@
84
84
  "use-stick-to-bottom": "^1.1.6",
85
85
  "yaml": "^2.9.0",
86
86
  "zod": "^3.25.76",
87
- "@hachej/boring-ui-kit": "0.1.85"
87
+ "@hachej/boring-ui-kit": "0.1.87"
88
88
  },
89
89
  "devDependencies": {
90
90
  "@antithesishq/bombadil": "0.6.1",