@hachej/boring-agent 0.1.82 → 0.1.84

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.
@@ -5,13 +5,74 @@ import {
5
5
  ErrorCode
6
6
  } from "./chunk-PG2WOJ22.js";
7
7
 
8
+ // src/core/piChatSessionService.ts
9
+ var AgentEffectAdmissionError = class extends Error {
10
+ constructor(code, details) {
11
+ super(code);
12
+ this.code = code;
13
+ this.details = details;
14
+ this.name = "AgentEffectAdmissionError";
15
+ }
16
+ code;
17
+ details;
18
+ statusCode = 500;
19
+ };
20
+ var AGENT_EFFECT_METHODS = {
21
+ createSession: true,
22
+ deleteSession: true,
23
+ prompt: true,
24
+ followUp: true,
25
+ clearQueue: true,
26
+ interrupt: true,
27
+ stop: true
28
+ };
29
+ function withAgentEffectAdmission(service, admit) {
30
+ return {
31
+ ...service.listSessions ? { listSessions: (ctx, options) => service.listSessions(ctx, options) } : {},
32
+ async createSession(ctx, init) {
33
+ await admit(ctx);
34
+ return service.createSession(ctx, init);
35
+ },
36
+ async deleteSession(ctx, sessionId) {
37
+ await admit(ctx);
38
+ return service.deleteSession(ctx, sessionId);
39
+ },
40
+ readState: (ctx, sessionId) => service.readState(ctx, sessionId),
41
+ subscribe: (ctx, sessionId, cursor, subscriber) => service.subscribe(ctx, sessionId, cursor, subscriber),
42
+ async prompt(ctx, sessionId, payload) {
43
+ await admit(ctx);
44
+ return service.prompt(ctx, sessionId, payload);
45
+ },
46
+ async followUp(ctx, sessionId, payload) {
47
+ await admit(ctx);
48
+ return service.followUp(ctx, sessionId, payload);
49
+ },
50
+ async clearQueue(ctx, sessionId, payload) {
51
+ await admit(ctx);
52
+ return service.clearQueue(ctx, sessionId, payload);
53
+ },
54
+ async interrupt(ctx, sessionId, payload) {
55
+ await admit(ctx);
56
+ return service.interrupt(ctx, sessionId, payload);
57
+ },
58
+ async stop(ctx, sessionId, payload) {
59
+ await admit(ctx);
60
+ return service.stop(ctx, sessionId, payload);
61
+ },
62
+ ...service.dispose ? { dispose: () => service.dispose() } : {}
63
+ };
64
+ }
65
+
8
66
  // src/core/createAgent.ts
9
67
  var DEFAULT_LIVE_BUFFER_SIZE = 1e3;
10
68
  function createAgent(config) {
11
69
  return createAgentRuntimeBridge(config).agent;
12
70
  }
13
71
  function createAgentRuntimeBridge(config) {
14
- const runtimeLoader = createRuntimeLoader(config.runtimeFactory);
72
+ const runtimeLoader = createRuntimeLoader(async () => {
73
+ const runtime = await config.runtimeFactory();
74
+ return config.admitEffect ? { ...runtime, service: withAgentEffectAdmission(runtime.service, config.admitEffect) } : runtime;
75
+ });
15
76
  const live = new AgentLiveEventBuffer(DEFAULT_LIVE_BUFFER_SIZE);
16
77
  const sessionContexts = /* @__PURE__ */ new Map();
17
78
  const startedSessions = /* @__PURE__ */ new Map();
@@ -255,7 +316,8 @@ function createFacadeSessionStore(getRuntime, assertActive, live, sessionContext
255
316
  },
256
317
  async create(ctx, init) {
257
318
  assertActive();
258
- const created = await (await store()).create(ctx, init);
319
+ const runtime = await getRuntime();
320
+ const created = await runtime.service.createSession(toPiRequestContext(ctx), init);
259
321
  assertActive();
260
322
  rememberSessionCtx(sessionContexts, created.id, ctx);
261
323
  return created;
@@ -532,6 +594,9 @@ function createLiveIterator(state, startIndex) {
532
594
  }
533
595
 
534
596
  export {
597
+ AgentEffectAdmissionError,
598
+ AGENT_EFFECT_METHODS,
599
+ withAgentEffectAdmission,
535
600
  createAgent,
536
601
  createAgentRuntimeBridge
537
602
  };
@@ -13,8 +13,9 @@ import {
13
13
  validateTool
14
14
  } from "./chunk-WODTQBXR.js";
15
15
  import {
16
+ AgentEffectAdmissionError,
16
17
  createAgentRuntimeBridge
17
- } from "./chunk-TNN3LPXE.js";
18
+ } from "./chunk-2XADUCX7.js";
18
19
  import {
19
20
  sessionStreamPath
20
21
  } from "./chunk-WSQ5QNIY.js";
@@ -8479,6 +8480,7 @@ function createAgentRuntimeBridge2(config, options = {}) {
8479
8480
  }
8480
8481
  return createAgentRuntimeBridge({
8481
8482
  runtimeFactory: () => createRuntime(config, options),
8483
+ admitEffect: options.service?.admitEffect,
8482
8484
  readiness: config.readiness,
8483
8485
  readinessRequirements: config.readinessRequirements
8484
8486
  });
@@ -11874,7 +11876,7 @@ function piChatRoutes(app, opts, done) {
11874
11876
  if (!service.createSession) throw unsupportedServiceMethod("create Pi chat session");
11875
11877
  return reply.code(201).send(await service.createSession(getRequestContext(request), body));
11876
11878
  } catch (err) {
11877
- return sendRouteError(reply, err, "create pi chat session failed");
11879
+ return sendRouteError(reply, err, "create pi chat session failed", true);
11878
11880
  }
11879
11881
  });
11880
11882
  app.delete("/api/v1/agent/pi-chat/sessions/:sessionId", async (request, reply) => {
@@ -11886,7 +11888,7 @@ function piChatRoutes(app, opts, done) {
11886
11888
  await service.deleteSession(getRequestContext(request), params.sessionId);
11887
11889
  return reply.code(204).send();
11888
11890
  } catch (err) {
11889
- return sendRouteError(reply, err, "delete pi chat session failed");
11891
+ return sendRouteError(reply, err, "delete pi chat session failed", true);
11890
11892
  }
11891
11893
  });
11892
11894
  app.get("/api/v1/agent/pi-chat/:sessionId/state", async (request, reply) => {
@@ -11977,7 +11979,7 @@ function piChatRoutes(app, opts, done) {
11977
11979
  const receipt = await service.prompt(getRequestContext(request), params.sessionId, body);
11978
11980
  return reply.code(202).send(receipt);
11979
11981
  } catch (err) {
11980
- return sendRouteError(reply, err, "prompt rejected");
11982
+ return sendRouteError(reply, err, "prompt rejected", true);
11981
11983
  }
11982
11984
  });
11983
11985
  app.post("/api/v1/agent/pi-chat/:sessionId/followup", async (request, reply) => {
@@ -11990,7 +11992,7 @@ function piChatRoutes(app, opts, done) {
11990
11992
  const receipt = await service.followUp(getRequestContext(request), params.sessionId, body);
11991
11993
  return reply.code(202).send(receipt);
11992
11994
  } catch (err) {
11993
- return sendRouteError(reply, err, "follow-up rejected");
11995
+ return sendRouteError(reply, err, "follow-up rejected", true);
11994
11996
  }
11995
11997
  });
11996
11998
  app.post("/api/v1/agent/pi-chat/:sessionId/queue/clear", async (request, reply) => {
@@ -12003,7 +12005,7 @@ function piChatRoutes(app, opts, done) {
12003
12005
  const receipt = await service.clearQueue(getRequestContext(request), params.sessionId, body);
12004
12006
  return reply.code(202).send(receipt);
12005
12007
  } catch (err) {
12006
- return sendRouteError(reply, err, "queue clear rejected");
12008
+ return sendRouteError(reply, err, "queue clear rejected", true);
12007
12009
  }
12008
12010
  });
12009
12011
  app.post("/api/v1/agent/pi-chat/:sessionId/interrupt", async (request, reply) => {
@@ -12016,7 +12018,7 @@ function piChatRoutes(app, opts, done) {
12016
12018
  const receipt = await service.interrupt(getRequestContext(request), params.sessionId, body);
12017
12019
  return reply.code(202).send(receipt);
12018
12020
  } catch (err) {
12019
- return sendRouteError(reply, err, "interrupt rejected");
12021
+ return sendRouteError(reply, err, "interrupt rejected", true);
12020
12022
  }
12021
12023
  });
12022
12024
  app.post("/api/v1/agent/pi-chat/:sessionId/stop", async (request, reply) => {
@@ -12029,7 +12031,7 @@ function piChatRoutes(app, opts, done) {
12029
12031
  const receipt = await service.stop(getRequestContext(request), params.sessionId, body);
12030
12032
  return reply.code(202).send(receipt);
12031
12033
  } catch (err) {
12032
- return sendRouteError(reply, err, "stop rejected");
12034
+ return sendRouteError(reply, err, "stop rejected", true);
12033
12035
  }
12034
12036
  });
12035
12037
  done();
@@ -12115,17 +12117,19 @@ function sendReplayRangeError(reply, error) {
12115
12117
  }
12116
12118
  });
12117
12119
  }
12118
- function sendRouteError(reply, err, fallbackMessage) {
12120
+ function sendRouteError(reply, err, fallbackMessage, preserveAdmissionError = false) {
12119
12121
  const statusCode = statusCodeFromError(err);
12120
12122
  const parsedCode = ErrorCode.safeParse(err?.code);
12121
- const code = parsedCode.success ? parsedCode.data : ErrorCode.enum.INTERNAL_ERROR;
12122
- const message = err instanceof Error ? err.message : fallbackMessage;
12123
+ const admissionError = preserveAdmissionError && err instanceof AgentEffectAdmissionError;
12124
+ const rejectedAdmissionError = !preserveAdmissionError && err instanceof AgentEffectAdmissionError;
12125
+ const code = admissionError ? err.code : parsedCode.success ? parsedCode.data : ErrorCode.enum.INTERNAL_ERROR;
12126
+ const message = !rejectedAdmissionError && err instanceof Error ? err.message : fallbackMessage;
12123
12127
  return reply.code(statusCode).send({
12124
12128
  error: {
12125
12129
  code,
12126
12130
  message,
12127
12131
  retryable: err?.retryable === true ? true : void 0,
12128
- details: err?.details
12132
+ details: rejectedAdmissionError ? void 0 : err?.details
12129
12133
  }
12130
12134
  });
12131
12135
  }
@@ -12364,7 +12368,7 @@ function meteredCommandBlocked(command) {
12364
12368
  }
12365
12369
  function stableErrorPayload(error, message) {
12366
12370
  const code = error?.code;
12367
- if (!isErrorCode(code)) return void 0;
12371
+ if (!isErrorCode(code) && !(error instanceof AgentEffectAdmissionError)) return void 0;
12368
12372
  const details = error?.details;
12369
12373
  return {
12370
12374
  error: {
@@ -12412,6 +12416,7 @@ function commandsRoutes(app, opts, done) {
12412
12416
  if (meteringActive) {
12413
12417
  return reply.code(409).send(meteredCommandBlocked(name));
12414
12418
  }
12419
+ await opts.admitEffect?.({ workspaceId: getRequestWorkspaceId(request), requestId: request.id });
12415
12420
  await harness.executeSlashCommand(sessionId, name, args, runContext);
12416
12421
  return reply.code(200).send({ ok: true });
12417
12422
  } catch (error) {
@@ -14039,6 +14044,7 @@ var registerAgentRoutes = async (app, opts) => {
14039
14044
  workdir: root
14040
14045
  }, {
14041
14046
  service: {
14047
+ admitEffect: opts.admitEffect,
14042
14048
  workdir: runtimeBundle.workspace.root,
14043
14049
  workspace: runtimeBundle.workspace
14044
14050
  }
@@ -14427,6 +14433,7 @@ var registerAgentRoutes = async (app, opts) => {
14427
14433
  return reply.status(501).send({ ok: false, error: "Agent harness does not support reload" });
14428
14434
  }
14429
14435
  try {
14436
+ await opts.admitEffect?.({ workspaceId, requestId: request.id });
14430
14437
  await binding.reprovision(request);
14431
14438
  binding.assertActive();
14432
14439
  const hookResult = await opts.beforeReload?.({
@@ -14464,6 +14471,9 @@ var registerAgentRoutes = async (app, opts) => {
14464
14471
  };
14465
14472
  } catch (error) {
14466
14473
  const message = error instanceof Error ? error.message : String(error);
14474
+ if (error instanceof AgentEffectAdmissionError) {
14475
+ return reply.status(error.statusCode).send({ ok: false, error: { code: error.code, message } });
14476
+ }
14467
14477
  return reply.status(422).send({ ok: false, error: message });
14468
14478
  }
14469
14479
  });
@@ -14477,12 +14487,14 @@ var registerAgentRoutes = async (app, opts) => {
14477
14487
  harness: staticBinding.harness,
14478
14488
  defaultSessionId: sessionId,
14479
14489
  workdir: staticBinding.runtimeBundle.workspace.root,
14480
- metering: opts.metering
14490
+ metering: opts.metering,
14491
+ admitEffect: opts.admitEffect
14481
14492
  } : {
14482
14493
  defaultSessionId: sessionId,
14483
14494
  getHarness: async (request) => (await getBindingForRequest(request)).harness,
14484
14495
  getWorkdir: async (request) => (await getBindingForRequest(request)).runtimeBundle.workspace.root,
14485
- metering: opts.metering
14496
+ metering: opts.metering,
14497
+ admitEffect: opts.admitEffect
14486
14498
  }
14487
14499
  );
14488
14500
  await app.register(
@@ -1,56 +1,11 @@
1
- import { A as AgentHarness, a as AgentReadiness, b as Agent } from '../harness-C53mjCcq.js';
2
- export { c as AGENT_NOT_IMPLEMENTED_UNTIL_T1, d as AgentActor, e as AgentCoreHarness, f as AgentCoreHarnessFactory, g as AgentCorePromptInput, h as AgentCoreSessionAdapter, i as AgentCoreSessionSnapshot, j as AgentEvent, k as AgentMessageContent, l as AgentMessagePart, m as AgentNotImplementedError, n as AgentReadinessStatus, o as AgentResolveInputResponse, p as AgentSendInput, q as AgentStartReceipt, r as AgentStreamOptions } from '../harness-C53mjCcq.js';
3
- import { S as SessionListOptions, a as SessionSummary, C as ChatModelSelection, P as PiChatSnapshot, b as PiChatEvent, c as PromptPayload, d as PromptReceipt, F as FollowUpPayload, e as FollowUpReceipt, Q as QueueClearPayload, f as QueueClearReceipt, I as InterruptPayload, g as CommandReceipt, h as StopPayload, i as StopReceipt, j as SessionStore } from '../piChatEvent-3pFPXYPx.js';
1
+ import { A as AgentHarness, a as AgentReadiness, b as Agent } from '../harness-Dtu-WAXy.js';
2
+ export { c as AGENT_NOT_IMPLEMENTED_UNTIL_T1, d as AgentActor, e as AgentCoreHarness, f as AgentCoreHarnessFactory, g as AgentCorePromptInput, h as AgentCoreSessionAdapter, i as AgentCoreSessionSnapshot, j as AgentEvent, k as AgentMessageContent, l as AgentMessagePart, m as AgentNotImplementedError, n as AgentReadinessStatus, o as AgentResolveInputResponse, p as AgentSendInput, q as AgentStartReceipt, r as AgentStreamOptions } from '../harness-Dtu-WAXy.js';
3
+ import { S as SessionStore } from '../piChatEvent-DLa8CgFa.js';
4
+ import { A as AgentCoreSessionService, a as AgentEffectAdmission } from '../piChatSessionService-BuPaMB7k.js';
5
+ export { b as AGENT_EFFECT_METHODS, c as AgentEffectAdmissionError, P as PiChatEventStreamResult, d as PiChatEventStreamSubscription, e as PiChatEventSubscriber, f as PiChatReplayRangeError, g as PiChatSessionService, h as PiSessionCreateInit, i as PiSessionRequestContext, w as withAgentEffectAdmission } from '../piChatSessionService-BuPaMB7k.js';
4
6
  import '@mariozechner/pi-coding-agent';
5
7
  import 'zod';
6
8
 
7
- interface PiSessionRequestContext {
8
- workspaceId?: string;
9
- storageScope?: string;
10
- authSubject?: string;
11
- authEmail?: string;
12
- authEmailVerified?: boolean;
13
- requestId: string;
14
- }
15
- interface PiSessionCreateInit {
16
- title?: string;
17
- modelDefault?: ChatModelSelection;
18
- }
19
- type PiChatReplayRangeError = {
20
- type: 'replay_gap';
21
- latestSeq: number;
22
- minReplaySeq: number;
23
- } | {
24
- type: 'cursor_ahead';
25
- latestSeq: number;
26
- minReplaySeq: number;
27
- };
28
- interface PiChatEventStreamSubscription {
29
- type: 'ok';
30
- unsubscribe: () => void;
31
- /** Optional test/service completion hook. Real live streams normally omit it. */
32
- closed?: Promise<void>;
33
- }
34
- type PiChatEventStreamResult = PiChatEventStreamSubscription | PiChatReplayRangeError;
35
- type PiChatEventSubscriber = (event: PiChatEvent) => void;
36
- interface PiChatSessionService {
37
- listSessions?(ctx: PiSessionRequestContext, options?: SessionListOptions): Promise<SessionSummary[]>;
38
- createSession?(ctx: PiSessionRequestContext, init?: PiSessionCreateInit): Promise<SessionSummary>;
39
- deleteSession?(ctx: PiSessionRequestContext, sessionId: string): Promise<void>;
40
- readState(ctx: PiSessionRequestContext, sessionId: string): Promise<PiChatSnapshot>;
41
- subscribe(ctx: PiSessionRequestContext, sessionId: string, cursor: number, subscriber: PiChatEventSubscriber): Promise<PiChatEventStreamResult>;
42
- prompt(ctx: PiSessionRequestContext, sessionId: string, payload: PromptPayload): Promise<PromptReceipt>;
43
- followUp(ctx: PiSessionRequestContext, sessionId: string, payload: FollowUpPayload): Promise<FollowUpReceipt>;
44
- clearQueue(ctx: PiSessionRequestContext, sessionId: string, payload: QueueClearPayload): Promise<QueueClearReceipt>;
45
- interrupt(ctx: PiSessionRequestContext, sessionId: string, payload: InterruptPayload): Promise<CommandReceipt>;
46
- stop(ctx: PiSessionRequestContext, sessionId: string, payload: StopPayload): Promise<StopReceipt>;
47
- }
48
- interface AgentCoreSessionService extends PiChatSessionService {
49
- createSession(ctx: PiSessionRequestContext, init?: PiSessionCreateInit): Promise<SessionSummary>;
50
- deleteSession(ctx: PiSessionRequestContext, sessionId: string): Promise<void>;
51
- dispose?(): Promise<void>;
52
- }
53
-
54
9
  interface AgentCoreRuntime {
55
10
  harness: AgentHarness;
56
11
  sessionStore: SessionStore;
@@ -59,6 +14,7 @@ interface AgentCoreRuntime {
59
14
  type AgentCoreRuntimeFactory = () => AgentCoreRuntime | Promise<AgentCoreRuntime>;
60
15
  interface AgentCoreConfig {
61
16
  runtimeFactory: AgentCoreRuntimeFactory;
17
+ admitEffect?: AgentEffectAdmission;
62
18
  readiness?: AgentReadiness;
63
19
  readinessRequirements?: string[];
64
20
  }
@@ -69,4 +25,4 @@ interface AgentCoreRuntimeView {
69
25
  }
70
26
  declare function createAgent(config: AgentCoreConfig): Agent;
71
27
 
72
- export { Agent, type AgentCoreConfig, type AgentCoreRuntime, type AgentCoreRuntimeFactory, type AgentCoreRuntimeView, type AgentCoreSessionService, AgentReadiness, type PiChatEventStreamResult, type PiChatEventStreamSubscription, type PiChatEventSubscriber, type PiChatReplayRangeError, type PiChatSessionService, type PiSessionCreateInit, type PiSessionRequestContext, createAgent };
28
+ export { Agent, type AgentCoreConfig, type AgentCoreRuntime, type AgentCoreRuntimeFactory, type AgentCoreRuntimeView, AgentCoreSessionService, AgentEffectAdmission, AgentReadiness, createAgent };
@@ -1,13 +1,19 @@
1
1
  import {
2
- createAgent
3
- } from "../chunk-TNN3LPXE.js";
2
+ AGENT_EFFECT_METHODS,
3
+ AgentEffectAdmissionError,
4
+ createAgent,
5
+ withAgentEffectAdmission
6
+ } from "../chunk-2XADUCX7.js";
4
7
  import {
5
8
  AGENT_NOT_IMPLEMENTED_UNTIL_T1,
6
9
  AgentNotImplementedError
7
10
  } from "../chunk-WSQ5QNIY.js";
8
11
  import "../chunk-PG2WOJ22.js";
9
12
  export {
13
+ AGENT_EFFECT_METHODS,
10
14
  AGENT_NOT_IMPLEMENTED_UNTIL_T1,
15
+ AgentEffectAdmissionError,
11
16
  AgentNotImplementedError,
12
- createAgent
17
+ createAgent,
18
+ withAgentEffectAdmission
13
19
  };
@@ -1,7 +1,7 @@
1
1
  import * as react from 'react';
2
2
  import { ComponentProps, HTMLAttributes, FormEvent, ReactNode, ComponentType } from 'react';
3
3
  import { FileUIPart, ChatStatus, UIMessage } from 'ai';
4
- import { T as ToolUiMetadata, B as BoringChatPart, k as BoringChatMessage, l as PiChatStatus, m as QueuedUserMessage, n as ChatError, b as PiChatEvent, c as PromptPayload, d as PromptReceipt, F as FollowUpPayload, e as FollowUpReceipt, Q as QueueClearPayload, f as QueueClearReceipt, I as InterruptPayload, g as CommandReceipt, h as StopPayload, i as StopReceipt, a as SessionSummary } from '../piChatEvent-3pFPXYPx.js';
4
+ import { T as ToolUiMetadata, B as BoringChatPart, a as BoringChatMessage, P as PiChatStatus, Q as QueuedUserMessage, C as ChatError, b as PiChatEvent, c as PromptPayload, d as PromptReceipt, F as FollowUpPayload, e as FollowUpReceipt, f as QueueClearPayload, g as QueueClearReceipt, I as InterruptPayload, h as CommandReceipt, i as StopPayload, j as StopReceipt, k as SessionSummary } from '../piChatEvent-DLa8CgFa.js';
5
5
  import { InputGroupAddon, InputGroupButton, InputGroupTextarea, Button, Collapsible, CollapsibleContent, CollapsibleTrigger } from '@hachej/boring-ui-kit';
6
6
  import { Streamdown } from 'streamdown';
7
7
  import { StickToBottom } from 'use-stick-to-bottom';
@@ -42,7 +42,6 @@
42
42
  --radius-md: var(--radius-md);
43
43
  --radius-lg: var(--radius-lg);
44
44
  --radius-xl: var(--radius-xl);
45
- --ease-out: cubic-bezier(0, 0, 0.2, 1);
46
45
  --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
47
46
  --animate-spin: spin 1s linear infinite;
48
47
  --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
@@ -2828,7 +2827,6 @@
2828
2827
  --tracking-widest: 0.1em;
2829
2828
  --leading-snug: 1.375;
2830
2829
  --radius-xs: 0.125rem;
2831
- --ease-out: cubic-bezier(0, 0, 0.2, 1);
2832
2830
  --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
2833
2831
  --animate-spin: spin 1s linear infinite;
2834
2832
  --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
@@ -2972,6 +2970,9 @@
2972
2970
  .grid {
2973
2971
  display: grid;
2974
2972
  }
2973
+ .inline {
2974
+ display: inline;
2975
+ }
2975
2976
  .inline-block {
2976
2977
  display: inline-block;
2977
2978
  }
@@ -3514,9 +3515,6 @@
3514
3515
  .bg-\[color\:var\(--boring-success-soft\,var\(--secondary\)\)\] {
3515
3516
  background-color: var(--boring-success-soft,var(--secondary));
3516
3517
  }
3517
- .bg-\[color\:var\(--boring-warning\,var\(--accent-foreground\)\)\] {
3518
- background-color: var(--boring-warning,var(--accent-foreground));
3519
- }
3520
3518
  .bg-\[color\:var\(--boring-warning-soft\,var\(--accent\)\)\] {
3521
3519
  background-color: var(--boring-warning-soft,var(--accent));
3522
3520
  }
@@ -3934,11 +3932,6 @@
3934
3932
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
3935
3933
  transition-duration: var(--tw-duration, var(--default-transition-duration));
3936
3934
  }
3937
- .transition-\[width\] {
3938
- transition-property: width;
3939
- transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
3940
- transition-duration: var(--tw-duration, var(--default-transition-duration));
3941
- }
3942
3935
  .transition-all {
3943
3936
  transition-property: all;
3944
3937
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@@ -3975,18 +3968,10 @@
3975
3968
  --tw-duration: 200ms;
3976
3969
  transition-duration: 200ms;
3977
3970
  }
3978
- .duration-300 {
3979
- --tw-duration: 300ms;
3980
- transition-duration: 300ms;
3981
- }
3982
3971
  .ease-in-out {
3983
3972
  --tw-ease: var(--ease-in-out);
3984
3973
  transition-timing-function: var(--ease-in-out);
3985
3974
  }
3986
- .ease-out {
3987
- --tw-ease: var(--ease-out);
3988
- transition-timing-function: var(--ease-out);
3989
- }
3990
3975
  .outline-none {
3991
3976
  --tw-outline-style: none;
3992
3977
  outline-style: none;
@@ -5244,6 +5229,64 @@
5244
5229
  height: calc(var(--spacing) * 4);
5245
5230
  }
5246
5231
  }
5232
+ .\[\&\:\:-moz-progress-bar\]\:rounded-full {
5233
+ &::-moz-progress-bar {
5234
+ border-radius: calc(infinity * 1px);
5235
+ }
5236
+ }
5237
+ .\[\&\:\:-moz-progress-bar\]\:bg-\[color\:var\(--boring-warning\,var\(--accent-foreground\)\)\] {
5238
+ &::-moz-progress-bar {
5239
+ background-color: var(--boring-warning,var(--accent-foreground));
5240
+ }
5241
+ }
5242
+ .\[\&\:\:-moz-progress-bar\]\:bg-destructive {
5243
+ &::-moz-progress-bar {
5244
+ background-color: var(--boring-destructive);
5245
+ }
5246
+ }
5247
+ .\[\&\:\:-moz-progress-bar\]\:bg-primary {
5248
+ &::-moz-progress-bar {
5249
+ background-color: var(--boring-primary);
5250
+ }
5251
+ }
5252
+ .\[\&\:\:-webkit-progress-bar\]\:bg-muted {
5253
+ &::-webkit-progress-bar {
5254
+ background-color: var(--boring-muted);
5255
+ }
5256
+ }
5257
+ .\[\&\:\:-webkit-progress-value\]\:rounded-full {
5258
+ &::-webkit-progress-value {
5259
+ border-radius: calc(infinity * 1px);
5260
+ }
5261
+ }
5262
+ .\[\&\:\:-webkit-progress-value\]\:bg-\[color\:var\(--boring-warning\,var\(--accent-foreground\)\)\] {
5263
+ &::-webkit-progress-value {
5264
+ background-color: var(--boring-warning,var(--accent-foreground));
5265
+ }
5266
+ }
5267
+ .\[\&\:\:-webkit-progress-value\]\:bg-destructive {
5268
+ &::-webkit-progress-value {
5269
+ background-color: var(--boring-destructive);
5270
+ }
5271
+ }
5272
+ .\[\&\:\:-webkit-progress-value\]\:bg-primary {
5273
+ &::-webkit-progress-value {
5274
+ background-color: var(--boring-primary);
5275
+ }
5276
+ }
5277
+ .\[\&\:\:-webkit-progress-value\]\:transition-all {
5278
+ &::-webkit-progress-value {
5279
+ transition-property: all;
5280
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
5281
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
5282
+ }
5283
+ }
5284
+ .\[\&\:\:-webkit-progress-value\]\:duration-300 {
5285
+ &::-webkit-progress-value {
5286
+ --tw-duration: 300ms;
5287
+ transition-duration: 300ms;
5288
+ }
5289
+ }
5247
5290
  .\[\&\:\:-webkit-scrollbar\]\:hidden {
5248
5291
  &::-webkit-scrollbar {
5249
5292
  display: none;
@@ -1,4 +1,4 @@
1
- import { o as SessionCtx, b as PiChatEvent, j as SessionStore } from './piChatEvent-3pFPXYPx.js';
1
+ import { l as SessionCtx, b as PiChatEvent, S as SessionStore } from './piChatEvent-DLa8CgFa.js';
2
2
  import { AgentSessionEvent, PromptOptions } from '@mariozechner/pi-coding-agent';
3
3
 
4
4
  interface TelemetrySink {
@@ -364,4 +364,4 @@ interface PiChatHeartbeatFrame {
364
364
  }
365
365
  type PiChatStreamFrame = PiChatEvent | PiChatHeartbeatFrame;
366
366
 
367
- export { AgentConsumptionErrorCode as A, type BoringChatPart as B, type ChatModelSelection as C, type InterruptReceipt as D, ErrorCode as E, type FollowUpPayload as F, type PiChatHeartbeatFrame as G, type PiChatStreamFrame as H, type InterruptPayload as I, type SessionDetail as J, type ThinkingLevel as K, extractToolUiMetadata as L, isToolUiMetadata as M, type PiChatSnapshot as P, type QueueClearPayload as Q, type SessionListOptions as S, type ToolUiMetadata as T, type SessionSummary as a, type PiChatEvent as b, type PromptPayload as c, type PromptReceipt as d, type FollowUpReceipt as e, type QueueClearReceipt as f, type CommandReceipt as g, type StopPayload as h, type StopReceipt as i, type SessionStore as j, type BoringChatMessage as k, type PiChatStatus as l, type QueuedUserMessage as m, type ChatError as n, type SessionCtx as o, AgentDefinitionErrorCode as p, AgentDeploymentErrorCode as q, type ApiErrorPayload as r, ApiErrorPayloadSchema as s, type ApiErrorResponse as t, ApiErrorResponseSchema as u, type ChatAttachmentPayload as v, type ChatSubmitPayload as w, ERROR_CODES as x, type ErrorLogFields as y, ErrorLogFieldsSchema as z };
367
+ export { AgentConsumptionErrorCode as A, type BoringChatPart as B, type ChatError as C, type InterruptReceipt as D, ErrorCode as E, type FollowUpPayload as F, type PiChatHeartbeatFrame as G, type PiChatStreamFrame as H, type InterruptPayload as I, type SessionDetail as J, type ThinkingLevel as K, extractToolUiMetadata as L, isToolUiMetadata as M, type PiChatStatus as P, type QueuedUserMessage as Q, type SessionStore as S, type ToolUiMetadata as T, type BoringChatMessage as a, type PiChatEvent as b, type PromptPayload as c, type PromptReceipt as d, type FollowUpReceipt as e, type QueueClearPayload as f, type QueueClearReceipt as g, type CommandReceipt as h, type StopPayload as i, type StopReceipt as j, type SessionSummary as k, type SessionCtx as l, type ChatModelSelection as m, type SessionListOptions as n, type PiChatSnapshot as o, AgentDefinitionErrorCode as p, AgentDeploymentErrorCode as q, type ApiErrorPayload as r, ApiErrorPayloadSchema as s, type ApiErrorResponse as t, ApiErrorResponseSchema as u, type ChatAttachmentPayload as v, type ChatSubmitPayload as w, ERROR_CODES as x, type ErrorLogFields as y, ErrorLogFieldsSchema as z };
@@ -0,0 +1,67 @@
1
+ import { n as SessionListOptions, k as SessionSummary, m as ChatModelSelection, o as PiChatSnapshot, b as PiChatEvent, c as PromptPayload, d as PromptReceipt, F as FollowUpPayload, e as FollowUpReceipt, f as QueueClearPayload, g as QueueClearReceipt, I as InterruptPayload, h as CommandReceipt, i as StopPayload, j as StopReceipt } from './piChatEvent-DLa8CgFa.js';
2
+
3
+ interface PiSessionRequestContext {
4
+ workspaceId?: string;
5
+ storageScope?: string;
6
+ authSubject?: string;
7
+ authEmail?: string;
8
+ authEmailVerified?: boolean;
9
+ requestId: string;
10
+ }
11
+ interface PiSessionCreateInit {
12
+ title?: string;
13
+ modelDefault?: ChatModelSelection;
14
+ }
15
+ type PiChatReplayRangeError = {
16
+ type: 'replay_gap';
17
+ latestSeq: number;
18
+ minReplaySeq: number;
19
+ } | {
20
+ type: 'cursor_ahead';
21
+ latestSeq: number;
22
+ minReplaySeq: number;
23
+ };
24
+ interface PiChatEventStreamSubscription {
25
+ type: 'ok';
26
+ unsubscribe: () => void;
27
+ /** Optional test/service completion hook. Real live streams normally omit it. */
28
+ closed?: Promise<void>;
29
+ }
30
+ type PiChatEventStreamResult = PiChatEventStreamSubscription | PiChatReplayRangeError;
31
+ type PiChatEventSubscriber = (event: PiChatEvent) => void;
32
+ interface PiChatSessionService {
33
+ listSessions?(ctx: PiSessionRequestContext, options?: SessionListOptions): Promise<SessionSummary[]>;
34
+ createSession?(ctx: PiSessionRequestContext, init?: PiSessionCreateInit): Promise<SessionSummary>;
35
+ deleteSession?(ctx: PiSessionRequestContext, sessionId: string): Promise<void>;
36
+ readState(ctx: PiSessionRequestContext, sessionId: string): Promise<PiChatSnapshot>;
37
+ subscribe(ctx: PiSessionRequestContext, sessionId: string, cursor: number, subscriber: PiChatEventSubscriber): Promise<PiChatEventStreamResult>;
38
+ prompt(ctx: PiSessionRequestContext, sessionId: string, payload: PromptPayload): Promise<PromptReceipt>;
39
+ followUp(ctx: PiSessionRequestContext, sessionId: string, payload: FollowUpPayload): Promise<FollowUpReceipt>;
40
+ clearQueue(ctx: PiSessionRequestContext, sessionId: string, payload: QueueClearPayload): Promise<QueueClearReceipt>;
41
+ interrupt(ctx: PiSessionRequestContext, sessionId: string, payload: InterruptPayload): Promise<CommandReceipt>;
42
+ stop(ctx: PiSessionRequestContext, sessionId: string, payload: StopPayload): Promise<StopReceipt>;
43
+ }
44
+ interface AgentCoreSessionService extends PiChatSessionService {
45
+ createSession(ctx: PiSessionRequestContext, init?: PiSessionCreateInit): Promise<SessionSummary>;
46
+ deleteSession(ctx: PiSessionRequestContext, sessionId: string): Promise<void>;
47
+ dispose?(): Promise<void>;
48
+ }
49
+ type AgentEffectAdmission = (ctx: Pick<PiSessionRequestContext, 'workspaceId' | 'requestId'>) => Promise<void>;
50
+ declare class AgentEffectAdmissionError extends Error {
51
+ readonly code: string;
52
+ readonly details?: unknown | undefined;
53
+ readonly statusCode = 500;
54
+ constructor(code: string, details?: unknown | undefined);
55
+ }
56
+ declare const AGENT_EFFECT_METHODS: {
57
+ readonly createSession: true;
58
+ readonly deleteSession: true;
59
+ readonly prompt: true;
60
+ readonly followUp: true;
61
+ readonly clearQueue: true;
62
+ readonly interrupt: true;
63
+ readonly stop: true;
64
+ };
65
+ declare function withAgentEffectAdmission(service: AgentCoreSessionService, admit: AgentEffectAdmission): AgentCoreSessionService;
66
+
67
+ export { type AgentCoreSessionService as A, type PiChatEventStreamResult as P, type AgentEffectAdmission as a, AGENT_EFFECT_METHODS as b, AgentEffectAdmissionError as c, type PiChatEventStreamSubscription as d, type PiChatEventSubscriber as e, type PiChatReplayRangeError as f, type PiChatSessionService as g, type PiSessionCreateInit as h, type PiSessionRequestContext as i, withAgentEffectAdmission as w };
@@ -1,15 +1,16 @@
1
1
  import { W as WorkspaceRuntimeContext, S as Sandbox, a as Workspace, E as ExecOptions, b as ExecResult, c as WorkspaceChangeEvent } from '../sandbox-DthfJaOB.js';
2
2
  import { R as RemoteWorkerWorkspaceOp, a as RemoteWorkerWorkspaceResult, b as RemoteWorkerExecRequest } from '../protocol-B_OQKfbI.js';
3
3
  export { B as BwrapResourceLimits, C as CreateBwrapSandboxOptions, c as REMOTE_WORKER_PROVIDER, d as REMOTE_WORKER_RUNTIME_CWD, e as RemoteWorkerErrorPayload, f as RemoteWorkerExecResponse, g as RemoteWorkerFsEventEnvelope, W as WORKER_INTERNAL_TOKEN_HEADER, h as WORKER_REQUEST_ID_HEADER, i as WORKER_WORKSPACE_ID_HEADER, j as createBwrapSandbox } from '../protocol-B_OQKfbI.js';
4
- import { S as SandboxHandleStore, a as SandboxHandleRecord, F as FileSearch, C as CompiledAgentBundle, b as Sha256Digest, A as AgentDeployment, P as PluginRestartWarning, W as WorkspaceAgentDispatcherContext, c as WorkspaceAgentDispatcher } from '../workspaceAgentDispatcher-p4tlVvbM.js';
4
+ import { S as SandboxHandleStore, a as SandboxHandleRecord, F as FileSearch, C as CompiledAgentBundle, b as Sha256Digest, A as AgentDeployment, P as PluginRestartWarning, W as WorkspaceAgentDispatcherContext, c as WorkspaceAgentDispatcher } from '../workspaceAgentDispatcher-CBN2xxaH.js';
5
5
  import { Sandbox as Sandbox$1 } from '@vercel/sandbox';
6
- import { T as TelemetrySink, s as ToolReadinessRequirement, t as AgentConfig, b as Agent, d as AgentActor, j as AgentEvent, u as AgentTool, v as AgentHarnessFactory } from '../harness-C53mjCcq.js';
7
- export { w as AgentHarnessFactoryInput } from '../harness-C53mjCcq.js';
6
+ import { T as TelemetrySink, s as ToolReadinessRequirement, t as AgentConfig, b as Agent, d as AgentActor, j as AgentEvent, u as AgentTool, v as AgentHarnessFactory } from '../harness-Dtu-WAXy.js';
7
+ export { w as AgentHarnessFactoryInput } from '../harness-Dtu-WAXy.js';
8
8
  import { FastifyInstance, FastifyRequest, FastifyPluginAsync } from 'fastify';
9
- import { E as ErrorCode, o as SessionCtx, C as ChatModelSelection } from '../piChatEvent-3pFPXYPx.js';
9
+ import { E as ErrorCode, l as SessionCtx, m as ChatModelSelection } from '../piChatEvent-DLa8CgFa.js';
10
10
  import { IncomingMessage, ServerResponse } from 'node:http';
11
11
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
12
12
  import { PackageSource, ExtensionFactory, SettingsManager } from '@mariozechner/pi-coding-agent';
13
+ import { a as AgentEffectAdmission } from '../piChatSessionService-BuPaMB7k.js';
13
14
  import 'zod';
14
15
 
15
16
  interface CreateDirectSandboxOptions {
@@ -1282,6 +1283,8 @@ interface RegisterAgentRoutesOptions {
1282
1283
  sessionRoot?: string;
1283
1284
  /** Optional best-effort telemetry sink supplied by an embedding host. */
1284
1285
  telemetry?: TelemetrySink;
1286
+ /** Optional host admission called immediately before each agent effect. */
1287
+ admitEffect?: AgentEffectAdmission;
1285
1288
  /** Generic request-aware model filtering seam. Hosts may filter per user/workspace. */
1286
1289
  filterModels?: ModelsRoutesOptions['filterModels'];
1287
1290
  /** Generic per-request/per-run filesystem binding seam. Hosts may return user/session-filtered bindings. */
@@ -54,9 +54,9 @@ import {
54
54
  resolveAgentDeployment,
55
55
  resolveMode,
56
56
  resolveSandboxHandle
57
- } from "../chunk-7V3E6KHX.js";
57
+ } from "../chunk-5IRFVKV7.js";
58
58
  import "../chunk-WODTQBXR.js";
59
- import "../chunk-TNN3LPXE.js";
59
+ import "../chunk-2XADUCX7.js";
60
60
  import "../chunk-WSQ5QNIY.js";
61
61
  import "../chunk-DC3S7SZG.js";
62
62
  import {
@@ -4,9 +4,9 @@ import {
4
4
  constantTimeTokenEqual,
5
5
  createBwrapSandbox,
6
6
  createNodeWorkspace
7
- } from "../../chunk-7V3E6KHX.js";
7
+ } from "../../chunk-5IRFVKV7.js";
8
8
  import "../../chunk-WODTQBXR.js";
9
- import "../../chunk-TNN3LPXE.js";
9
+ import "../../chunk-2XADUCX7.js";
10
10
  import "../../chunk-WSQ5QNIY.js";
11
11
  import "../../chunk-DC3S7SZG.js";
12
12
  import "../../chunk-5NAN3TAR.js";
@@ -1,11 +1,11 @@
1
- import { u as AgentTool } from '../harness-C53mjCcq.js';
2
- export { c as AGENT_NOT_IMPLEMENTED_UNTIL_T1, b as Agent, d as AgentActor, e as AgentCoreHarness, f as AgentCoreHarnessFactory, g as AgentCorePromptInput, h as AgentCoreSessionAdapter, i as AgentCoreSessionSnapshot, j as AgentEvent, A as AgentHarness, k as AgentMessageContent, l as AgentMessagePart, m as AgentNotImplementedError, a as AgentReadiness, n as AgentReadinessStatus, o as AgentResolveInputResponse, x as AgentRuntimeAdapter, p as AgentSendInput, q as AgentStartReceipt, r as AgentStreamOptions, t as CoreAgentConfig, J as JSONSchema, M as MessageAttachment, R as RunContext, S as SendMessageInput, y as TelemetryEvent, T as TelemetrySink, z as ToolExecContext, B as ToolResult, C as noopTelemetry, D as safeCapture, E as sessionStreamPath } from '../harness-C53mjCcq.js';
3
- import { F as FileSearch, d as SchemaValidationError, e as AgentSchemaIssue, f as AgentSchemaValidationResult } from '../workspaceAgentDispatcher-p4tlVvbM.js';
4
- export { g as AgentDefinition, h as AgentDefinitionDigestAsset, i as AgentDefinitionReference, j as AgentDefinitionValidationError, A as AgentDeployment, k as AgentDeploymentValidationError, l as CommandNotifyPayload, C as CompiledAgentBundle, m as CompiledAgentDefinition, O as OpaqueRefSchema, a as SandboxHandleRecord, S as SandboxHandleStore, b as Sha256Digest, n as Sha256DigestSchema, o as WORKSPACE_AGENT_PLUGINS_RELOADED_EVENT, p as WORKSPACE_COMMAND_NOTIFY_EVENT, c as WorkspaceAgentDispatcher, W as WorkspaceAgentDispatcherContext, q as WorkspaceAgentDispatcherSendInput, r as createAgentAssetDigest, s as createAgentDefinitionDigest, t as createAgentDeploymentDigest, v as validateAgentDefinition, u as validateAgentDeployment } from '../workspaceAgentDispatcher-p4tlVvbM.js';
1
+ import { u as AgentTool } from '../harness-Dtu-WAXy.js';
2
+ export { c as AGENT_NOT_IMPLEMENTED_UNTIL_T1, b as Agent, d as AgentActor, e as AgentCoreHarness, f as AgentCoreHarnessFactory, g as AgentCorePromptInput, h as AgentCoreSessionAdapter, i as AgentCoreSessionSnapshot, j as AgentEvent, A as AgentHarness, k as AgentMessageContent, l as AgentMessagePart, m as AgentNotImplementedError, a as AgentReadiness, n as AgentReadinessStatus, o as AgentResolveInputResponse, x as AgentRuntimeAdapter, p as AgentSendInput, q as AgentStartReceipt, r as AgentStreamOptions, t as CoreAgentConfig, J as JSONSchema, M as MessageAttachment, R as RunContext, S as SendMessageInput, y as TelemetryEvent, T as TelemetrySink, z as ToolExecContext, B as ToolResult, C as noopTelemetry, D as safeCapture, E as sessionStreamPath } from '../harness-Dtu-WAXy.js';
3
+ import { F as FileSearch, d as SchemaValidationError, e as AgentSchemaIssue, f as AgentSchemaValidationResult } from '../workspaceAgentDispatcher-CBN2xxaH.js';
4
+ export { g as AgentDefinition, h as AgentDefinitionDigestAsset, i as AgentDefinitionReference, j as AgentDefinitionValidationError, A as AgentDeployment, k as AgentDeploymentValidationError, l as CommandNotifyPayload, C as CompiledAgentBundle, m as CompiledAgentDefinition, O as OpaqueRefSchema, a as SandboxHandleRecord, S as SandboxHandleStore, b as Sha256Digest, n as Sha256DigestSchema, o as WORKSPACE_AGENT_PLUGINS_RELOADED_EVENT, p as WORKSPACE_COMMAND_NOTIFY_EVENT, c as WorkspaceAgentDispatcher, W as WorkspaceAgentDispatcherContext, q as WorkspaceAgentDispatcherSendInput, r as createAgentAssetDigest, s as createAgentDefinitionDigest, t as createAgentDeploymentDigest, v as validateAgentDefinition, u as validateAgentDeployment } from '../workspaceAgentDispatcher-CBN2xxaH.js';
5
5
  import { a as Workspace, S as Sandbox } from '../sandbox-DthfJaOB.js';
6
6
  export { e as Entry, E as ExecOptions, b as ExecResult, I as IsolatedCodeInput, f as IsolatedCodeOutput, g as SandboxCapability, d as Stat, W as WorkspaceRuntimeContext } from '../sandbox-DthfJaOB.js';
7
- import { B as BoringChatPart, T as ToolUiMetadata, A as AgentConsumptionErrorCode } from '../piChatEvent-3pFPXYPx.js';
8
- export { p as AgentDefinitionErrorCode, q as AgentDeploymentErrorCode, r as ApiErrorPayload, s as ApiErrorPayloadSchema, t as ApiErrorResponse, u as ApiErrorResponseSchema, k as BoringChatMessage, v as ChatAttachmentPayload, n as ChatError, C as ChatModelSelection, w as ChatSubmitPayload, g as CommandReceipt, x as ERROR_CODES, E as ErrorCode, y as ErrorLogFields, z as ErrorLogFieldsSchema, F as FollowUpPayload, e as FollowUpReceipt, I as InterruptPayload, D as InterruptReceipt, b as PiChatEvent, G as PiChatHeartbeatFrame, P as PiChatSnapshot, l as PiChatStatus, H as PiChatStreamFrame, c as PromptPayload, d as PromptReceipt, Q as QueueClearPayload, f as QueueClearReceipt, m as QueuedUserMessage, o as SessionCtx, J as SessionDetail, j as SessionStore, a as SessionSummary, h as StopPayload, i as StopReceipt, K as ThinkingLevel, L as extractToolUiMetadata, M as isToolUiMetadata } from '../piChatEvent-3pFPXYPx.js';
7
+ import { B as BoringChatPart, T as ToolUiMetadata, A as AgentConsumptionErrorCode } from '../piChatEvent-DLa8CgFa.js';
8
+ export { p as AgentDefinitionErrorCode, q as AgentDeploymentErrorCode, r as ApiErrorPayload, s as ApiErrorPayloadSchema, t as ApiErrorResponse, u as ApiErrorResponseSchema, a as BoringChatMessage, v as ChatAttachmentPayload, C as ChatError, m as ChatModelSelection, w as ChatSubmitPayload, h as CommandReceipt, x as ERROR_CODES, E as ErrorCode, y as ErrorLogFields, z as ErrorLogFieldsSchema, F as FollowUpPayload, e as FollowUpReceipt, I as InterruptPayload, D as InterruptReceipt, b as PiChatEvent, G as PiChatHeartbeatFrame, o as PiChatSnapshot, P as PiChatStatus, H as PiChatStreamFrame, c as PromptPayload, d as PromptReceipt, f as QueueClearPayload, g as QueueClearReceipt, Q as QueuedUserMessage, l as SessionCtx, J as SessionDetail, S as SessionStore, k as SessionSummary, i as StopPayload, j as StopReceipt, K as ThinkingLevel, L as extractToolUiMetadata, M as isToolUiMetadata } from '../piChatEvent-DLa8CgFa.js';
9
9
  import { z } from 'zod';
10
10
  import '@mariozechner/pi-coding-agent';
11
11
 
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
- import { p as AgentDefinitionErrorCode, q as AgentDeploymentErrorCode, D as InterruptReceipt, i as StopReceipt } from './piChatEvent-3pFPXYPx.js';
3
- import { p as AgentSendInput, j as AgentEvent } from './harness-C53mjCcq.js';
2
+ import { p as AgentDefinitionErrorCode, q as AgentDeploymentErrorCode, D as InterruptReceipt, j as StopReceipt } from './piChatEvent-DLa8CgFa.js';
3
+ import { p as AgentSendInput, j as AgentEvent } from './harness-Dtu-WAXy.js';
4
4
 
5
5
  interface SandboxHandleRecord {
6
6
  workspaceId: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hachej/boring-agent",
3
- "version": "0.1.82",
3
+ "version": "0.1.84",
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.",
@@ -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.82"
87
+ "@hachej/boring-ui-kit": "0.1.84"
88
88
  },
89
89
  "devDependencies": {
90
90
  "@antithesishq/bombadil": "0.6.1",