@usine/agents 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/README.md +35 -6
  2. package/dist/pi/authentication.d.ts +4 -4
  3. package/dist/pi/authentication.d.ts.map +1 -1
  4. package/dist/pi/authentication.js +2 -2
  5. package/dist/pi/authentication.js.map +1 -1
  6. package/dist/pi/children.d.ts +4 -1
  7. package/dist/pi/children.d.ts.map +1 -1
  8. package/dist/pi/children.js +4 -1
  9. package/dist/pi/children.js.map +1 -1
  10. package/dist/pi/claude.d.ts +6 -2
  11. package/dist/pi/claude.d.ts.map +1 -1
  12. package/dist/pi/claude.js +80 -15
  13. package/dist/pi/claude.js.map +1 -1
  14. package/dist/pi/codex/account.d.ts +11 -0
  15. package/dist/pi/codex/account.d.ts.map +1 -0
  16. package/dist/pi/codex/account.js +43 -0
  17. package/dist/pi/codex/account.js.map +1 -0
  18. package/dist/pi/codex/app-server.d.ts +15 -6
  19. package/dist/pi/codex/app-server.d.ts.map +1 -1
  20. package/dist/pi/codex/app-server.js +61 -22
  21. package/dist/pi/codex/app-server.js.map +1 -1
  22. package/dist/pi/codex/codec.d.ts +96 -0
  23. package/dist/pi/codex/codec.d.ts.map +1 -0
  24. package/dist/pi/codex/codec.js +110 -0
  25. package/dist/pi/codex/codec.js.map +1 -0
  26. package/dist/pi/codex/codex.d.ts +2 -0
  27. package/dist/pi/codex/codex.d.ts.map +1 -1
  28. package/dist/pi/codex/codex.js +143 -148
  29. package/dist/pi/codex/codex.js.map +1 -1
  30. package/dist/pi/conversation.d.ts +26 -0
  31. package/dist/pi/conversation.d.ts.map +1 -0
  32. package/dist/pi/conversation.js +93 -0
  33. package/dist/pi/conversation.js.map +1 -0
  34. package/dist/pi/live.d.ts +4 -0
  35. package/dist/pi/live.d.ts.map +1 -0
  36. package/dist/pi/{index.js → live.js} +2 -9
  37. package/dist/pi/live.js.map +1 -0
  38. package/dist/pi/pi.d.ts +3 -1
  39. package/dist/pi/pi.d.ts.map +1 -1
  40. package/dist/pi/pi.js +90 -64
  41. package/dist/pi/pi.js.map +1 -1
  42. package/dist/pi/sdk.d.ts +18 -13
  43. package/dist/pi/sdk.d.ts.map +1 -1
  44. package/dist/pi/sdk.js +15 -10
  45. package/dist/pi/sdk.js.map +1 -1
  46. package/dist/pi/session.d.ts +20 -21
  47. package/dist/pi/session.d.ts.map +1 -1
  48. package/dist/pi/session.js +23 -11
  49. package/dist/pi/session.js.map +1 -1
  50. package/dist/pi/subagents.d.ts +17 -11
  51. package/dist/pi/subagents.d.ts.map +1 -1
  52. package/dist/pi/subagents.js +81 -44
  53. package/dist/pi/subagents.js.map +1 -1
  54. package/dist/pi/thinking.d.ts +8 -0
  55. package/dist/pi/thinking.d.ts.map +1 -0
  56. package/dist/pi/thinking.js +15 -0
  57. package/dist/pi/thinking.js.map +1 -0
  58. package/dist/pi/turns.d.ts +28 -0
  59. package/dist/pi/turns.d.ts.map +1 -0
  60. package/dist/pi/turns.js +54 -0
  61. package/dist/pi/turns.js.map +1 -0
  62. package/dist/pi/usage.d.ts +25 -0
  63. package/dist/pi/usage.d.ts.map +1 -0
  64. package/dist/pi/usage.js +72 -0
  65. package/dist/pi/usage.js.map +1 -0
  66. package/dist/preflight/command.d.ts +7 -0
  67. package/dist/preflight/command.d.ts.map +1 -0
  68. package/dist/preflight/command.js +42 -0
  69. package/dist/preflight/command.js.map +1 -0
  70. package/dist/preflight/preflight.d.ts +13 -0
  71. package/dist/preflight/preflight.d.ts.map +1 -0
  72. package/dist/preflight/preflight.js +100 -0
  73. package/dist/preflight/preflight.js.map +1 -0
  74. package/dist/prompt.d.ts +15 -11
  75. package/dist/prompt.d.ts.map +1 -1
  76. package/dist/prompt.js +14 -11
  77. package/dist/prompt.js.map +1 -1
  78. package/dist/protocol/codex.d.ts +20 -6
  79. package/dist/protocol/codex.d.ts.map +1 -1
  80. package/dist/protocol/codex.js +7 -1
  81. package/dist/protocol/codex.js.map +1 -1
  82. package/dist/runtime.d.ts +59 -25
  83. package/dist/runtime.d.ts.map +1 -1
  84. package/dist/runtime.js +47 -34
  85. package/dist/runtime.js.map +1 -1
  86. package/package.json +34 -10
  87. package/dist/index.d.ts +0 -4
  88. package/dist/index.d.ts.map +0 -1
  89. package/dist/index.js +0 -4
  90. package/dist/index.js.map +0 -1
  91. package/dist/pi/index.d.ts +0 -11
  92. package/dist/pi/index.d.ts.map +0 -1
  93. package/dist/pi/index.js.map +0 -1
@@ -1,45 +1,44 @@
1
- import { Agent } from "@usine/core";
1
+ import { AgentSession, AgentSessionEvent, AgentSessionId, SessionFinished, SessionTokensUpdated, TextOutput, ToolFinished, ToolStarted } from "@usine/core/agent/session";
2
2
  import { Cause, Deferred, Effect, Queue } from "effect";
3
3
  import { type AgentSessionError, SessionResult } from "../runtime.ts";
4
4
  import type { PiMessage, PiSession } from "./sdk.ts";
5
5
  export interface SessionChannelOptions {
6
- /** Human-readable adapter name used in the terminal log lines. */
6
+ /** Adapter name printed in the terminal log lines. */
7
7
  readonly label: string;
8
- readonly sessionId: Agent.SessionId;
8
+ readonly sessionId: AgentSessionId;
9
9
  }
10
10
  /**
11
- * Terminal-once state every session adapter shares: one event queue, one
12
- * result, and a latch guaranteeing exactly one terminal transition. Cleanups
13
- * registered through `onTerminal` run on whichever transition wins.
11
+ * Shared session state: one event queue, one result, and a latch so exactly
12
+ * one terminal transition wins. Cleanups registered through `onTerminal` run
13
+ * on that transition.
14
14
  */
15
15
  export interface SessionChannel {
16
- readonly events: Queue.Queue<Agent.SessionEvent, AgentSessionError | Cause.Done>;
16
+ readonly events: Queue.Queue<AgentSessionEvent, AgentSessionError | Cause.Done>;
17
17
  readonly result: Deferred.Deferred<SessionResult, AgentSessionError>;
18
18
  readonly isTerminal: Effect.Effect<boolean>;
19
19
  readonly onTerminal: (cleanup: () => void) => void;
20
- /** Offers one event, logging instead of silently dropping it after the terminal transition. */
21
- readonly emit: (event: Agent.SessionEvent) => Effect.Effect<void>;
20
+ /** Queues one event; after the terminal transition the event is logged and dropped. */
21
+ readonly emit: (event: AgentSessionEvent) => Effect.Effect<void>;
22
22
  readonly fail: (error: AgentSessionError) => Effect.Effect<void>;
23
- readonly finish: (session: Agent.Session, message: string) => Effect.Effect<void>;
23
+ readonly finish: (session: AgentSession, message: string) => Effect.Effect<void>;
24
24
  }
25
25
  export declare const sessionChannel: (options: SessionChannelOptions) => Effect.Effect<{
26
- events: Queue.Queue<Agent.PoolRateLimitsUpdated | Agent.SessionFinished | Agent.SessionStarted | Agent.TextOutput | Agent.ToolFinished | Agent.ToolStarted, import("../runtime.ts").AgentResultError | Cause.Done<void> | import("../runtime.ts").PoolUnavailableError | import("../runtime.ts").SessionOperationError | import("../runtime.ts").UnknownModelError | import("../runtime.ts").UnsupportedEffortError>;
27
- result: Deferred.Deferred<SessionResult, import("../runtime.ts").AgentResultError | import("../runtime.ts").PoolUnavailableError | import("../runtime.ts").SessionOperationError | import("../runtime.ts").UnknownModelError | import("../runtime.ts").UnsupportedEffortError>;
26
+ events: Queue.Queue<import("@usine/core/agent/session").PoolRateLimitsUpdated | SessionFinished | import("@usine/core/agent/session").SessionIdle | import("@usine/core/agent/session").SessionResumed | import("@usine/core/agent/session").SessionStarted | SessionTokensUpdated | TextOutput | ToolFinished | ToolStarted, import("../runtime.ts").AgentResultError | import("../runtime.ts").ChildSessionBudgetExceededError | Cause.Done<void> | import("../runtime.ts").PoolUnavailableError | import("../runtime.ts").SessionOperationError | import("../runtime.ts").UnknownModelError | import("../runtime.ts").UnsupportedEffortError>;
27
+ result: Deferred.Deferred<SessionResult, import("../runtime.ts").AgentResultError | import("../runtime.ts").ChildSessionBudgetExceededError | import("../runtime.ts").PoolUnavailableError | import("../runtime.ts").SessionOperationError | import("../runtime.ts").UnknownModelError | import("../runtime.ts").UnsupportedEffortError>;
28
28
  isTerminal: Effect.Effect<boolean, never, never>;
29
29
  onTerminal: (cleanup: () => void) => void;
30
- emit: (event: Agent.SessionEvent) => Effect.Effect<void, never, never>;
31
- fail: (error: import("../runtime.ts").AgentResultError | import("../runtime.ts").PoolUnavailableError | import("../runtime.ts").SessionOperationError | import("../runtime.ts").UnknownModelError | import("../runtime.ts").UnsupportedEffortError) => Effect.Effect<void, never, never>;
32
- finish: (session: Agent.ChildSession | Agent.ParentSession, message: string) => Effect.Effect<void, never, never>;
30
+ emit: (event: AgentSessionEvent) => Effect.Effect<void, never, never>;
31
+ fail: (error: import("../runtime.ts").AgentResultError | import("../runtime.ts").ChildSessionBudgetExceededError | import("../runtime.ts").PoolUnavailableError | import("../runtime.ts").SessionOperationError | import("../runtime.ts").UnknownModelError | import("../runtime.ts").UnsupportedEffortError) => Effect.Effect<void, never, never>;
32
+ finish: (session: import("@usine/core/agent/session").ChildSession | import("@usine/core/agent/session").ParentSession, message: string) => Effect.Effect<void, never, never>;
33
33
  }, never, never>;
34
34
  export declare const lastPiMessageText: (messages: ReadonlyArray<PiMessage>) => string | undefined;
35
35
  /**
36
- * Bridges the Pi SDK's synchronous subscriber onto one session channel.
37
- * Normalized events reach the queue on the SDK's own tick — no async hop, so
38
- * nothing can trail the prompt's resolution — while operational events with
39
- * no normalized shape (retry backoffs, compactions) are logged through the
40
- * launch fiber's captured services so a silent wait stays explainable.
36
+ * Subscribes the Pi SDK's synchronous listener to one session channel.
37
+ * Normalized events reach the queue on the SDK's own tick so none can trail
38
+ * the prompt's resolution; operational events with no normalized shape (retry
39
+ * backoffs, compactions) are logged so a silent wait stays explainable.
41
40
  */
42
- export declare const subscribePiSession: (piSession: PiSession, session: Agent.Session, channel: SessionChannel) => Effect.Effect<{
41
+ export declare const subscribePiSession: (piSession: PiSession, session: AgentSession, channel: SessionChannel) => Effect.Effect<{
43
42
  lastText: () => string | undefined;
44
43
  unsubscribe: () => void;
45
44
  }, never, never>;
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/pi/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAe,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,KAAK,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAkB,MAAM,UAAU,CAAC;AAErE,MAAM,WAAW,qBAAqB;IACpC,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;CACrC;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IACjF,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;IACrE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5C,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IACnD,+FAA+F;IAC/F,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClE,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjE,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CACnF;AAED,eAAO,MAAM,cAAc;;;;0BAqDD,MAAM,IAAI;kBA1Cb,KAAK,CAAC,YAAY;;;gBAiDvC,CAAC;AAyCH,eAAO,MAAM,iBAAiB,aAAc,aAAa,CAAC,SAAS,CAAC,KAAG,MAAM,GAAG,SAQ/E,CAAC;AA8BF;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,cAClB,SAAS,WACX,KAAK,CAAC,OAAO,WACb,cAAc;;;gBAsDrB,CAAC"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/pi/session.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,oBAAoB,EAEpB,UAAU,EACV,YAAY,EACZ,WAAW,EACZ,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAU,KAAK,EAAe,MAAM,QAAQ,CAAC;AAE7E,OAAO,EAAE,KAAK,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAkB,MAAM,UAAU,CAAC;AAErE,MAAM,WAAW,qBAAqB;IACpC,sDAAsD;IACtD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;CACpC;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAChF,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;IACrE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5C,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IACnD,uFAAuF;IACvF,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjE,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjE,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAClF;AAED,eAAO,MAAM,cAAc;;;;0BAqDD,MAAM,IAAI;kBA1Cb,iBAAiB;;;gBAiDtC,CAAC;AAyCH,eAAO,MAAM,iBAAiB,aAAc,aAAa,CAAC,SAAS,CAAC,KAAG,MAAM,GAAG,SAQ/E,CAAC;AA8BF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,cAClB,SAAS,WACX,YAAY,WACZ,cAAc;;;gBAyErB,CAAC"}
@@ -1,5 +1,6 @@
1
- import { Agent } from "@usine/core";
2
- import { Cause, Deferred, Effect, Queue, Ref, Schema } from "effect";
1
+ import { AgentSession, AgentSessionEvent, AgentSessionId, SessionFinished, SessionTokensUpdated, TokenCount, TextOutput, ToolFinished, ToolStarted, } from "@usine/core/agent/session";
2
+ import { Cause, Deferred, Effect, Option, Queue, Ref, Schema } from "effect";
3
+ import { piMessageTokens } from "./usage.js";
3
4
  import { SessionResult } from "../runtime.js";
4
5
  export const sessionChannel = Effect.fn("SessionChannel.make")(function* (options) {
5
6
  const events = yield* Queue.make();
@@ -31,7 +32,7 @@ export const sessionChannel = Effect.fn("SessionChannel.make")(function* (option
31
32
  const finish = Effect.fn("SessionChannel.finish")(function* (session, message) {
32
33
  if (yield* Ref.getAndSet(terminal, true))
33
34
  return;
34
- yield* Queue.offer(events, new Agent.SessionFinished({ session }));
35
+ yield* Queue.offer(events, new SessionFinished({ session }));
35
36
  yield* Deferred.succeed(result, new SessionResult({ message }));
36
37
  yield* Queue.end(events);
37
38
  yield* runCleanups;
@@ -102,10 +103,10 @@ export const lastPiMessageText = (messages) => {
102
103
  const sessionEventFrom = (event, session) => {
103
104
  if (event.type === "message_end") {
104
105
  const text = messageText(event.message);
105
- return text === undefined ? undefined : new Agent.TextOutput({ session, text });
106
+ return text === undefined ? undefined : new TextOutput({ session, text });
106
107
  }
107
108
  if (event.type === "tool_execution_start") {
108
- return new Agent.ToolStarted({
109
+ return new ToolStarted({
109
110
  session,
110
111
  callId: event.toolCallId,
111
112
  tool: event.toolName,
@@ -113,7 +114,7 @@ const sessionEventFrom = (event, session) => {
113
114
  });
114
115
  }
115
116
  if (event.type === "tool_execution_end") {
116
- return new Agent.ToolFinished({
117
+ return new ToolFinished({
117
118
  session,
118
119
  callId: event.toolCallId,
119
120
  tool: event.toolName,
@@ -124,17 +125,28 @@ const sessionEventFrom = (event, session) => {
124
125
  return undefined;
125
126
  };
126
127
  /**
127
- * Bridges the Pi SDK's synchronous subscriber onto one session channel.
128
- * Normalized events reach the queue on the SDK's own tick — no async hop, so
129
- * nothing can trail the prompt's resolution — while operational events with
130
- * no normalized shape (retry backoffs, compactions) are logged through the
131
- * launch fiber's captured services so a silent wait stays explainable.
128
+ * Subscribes the Pi SDK's synchronous listener to one session channel.
129
+ * Normalized events reach the queue on the SDK's own tick so none can trail
130
+ * the prompt's resolution; operational events with no normalized shape (retry
131
+ * backoffs, compactions) are logged so a silent wait stays explainable.
132
132
  */
133
133
  export const subscribePiSession = (piSession, session, channel) => Effect.gen(function* () {
134
134
  const context = yield* Effect.context();
135
135
  const log = Effect.runForkWith(context);
136
136
  let lastText;
137
+ let totalTokens = 0;
137
138
  const unsubscribe = piSession.subscribe((event) => {
139
+ if (event.type === "message_end") {
140
+ const usage = piMessageTokens(event.message);
141
+ if (Option.isSome(usage)) {
142
+ totalTokens += usage.value.usage.totalTokens;
143
+ if (!Queue.offerUnsafe(channel.events, new SessionTokensUpdated({ session, totalTokens: TokenCount.make(totalTokens) }))) {
144
+ log(Effect.logWarning("Dropped Pi usage after the terminal transition", {
145
+ sessionId: session.id,
146
+ }));
147
+ }
148
+ }
149
+ }
138
150
  if (event.type === "auto_retry_start") {
139
151
  log(Effect.logWarning("Pi session is backing off before a retry", {
140
152
  attempt: event.attempt,
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/pi/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/pi/session.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,29 @@
1
1
  import { type ExtensionFactory, type InlineExtension } from "@earendil-works/pi-coding-agent";
2
- import { Agent } from "@usine/core";
2
+ import { Agent } from "@usine/core/agent";
3
+ import { AgentSessionEvent, AgentSessionId, ChildSessionBudget } from "@usine/core/agent/session";
3
4
  import { Effect } from "effect";
4
- import { type AgentSessionError, type ChildBackend, type WorkingDirectory } from "../runtime.ts";
5
+ import { type AgentSessionError, type ChildBackend, ChildSessionBudgetExceededError, type ChildSessions, type WorkingDirectory } from "../runtime.ts";
5
6
  export interface SubagentsExtensionOptions {
6
- readonly agent: Agent.Agent;
7
+ readonly agent: Agent;
7
8
  readonly backend: ChildBackend["Service"];
8
9
  readonly cwd: WorkingDirectory;
9
- readonly emit: (event: Agent.SessionEvent) => Effect.Effect<void>;
10
- readonly parentId: Agent.SessionId;
10
+ readonly emit: (event: AgentSessionEvent) => Effect.Effect<void>;
11
+ readonly maxChildren: ChildSessionBudget;
12
+ /** Called on every rejected spawn; the parent decides what a repeat means. */
13
+ readonly onBudgetExceeded: (error: ChildSessionBudgetExceededError) => Effect.Effect<void>;
14
+ readonly parentId: AgentSessionId;
15
+ /** Records a launched child so the run host can address operator input to it by id. */
16
+ readonly register: ChildSessions["register"];
11
17
  /**
12
- * Executes one child program on the parent launch's own services and scope.
13
- * Pi invokes the tool outside any usine fiber, so running through the
14
- * default runtime would lose the stderr log redirect (corrupting the
15
- * protocol stdout) and detach the child from the Attempt's lifetime.
18
+ * Runs one child program on the parent launch's services and scope. Pi
19
+ * calls the tool outside any usine fiber, so the default runtime would lose
20
+ * the stderr log redirect (corrupting the protocol stdout) and detach the
21
+ * child from the Attempt's lifetime.
16
22
  */
17
23
  readonly run: <A>(program: Effect.Effect<A, AgentSessionError>) => Promise<A>;
18
24
  }
19
- /** Pi-owned extension factory. Its single tool can only create first-level child descriptors. */
25
+ /** Builds the subagents extension; its single tool creates first-level child sessions only. */
20
26
  export declare const createSubagentsExtension: (options: SubagentsExtensionOptions) => ExtensionFactory;
21
- /** Named wrapper keeps the extension identifiable in Pi startup diagnostics. */
27
+ /** Names the extension so Pi startup diagnostics can identify it. */
22
28
  export declare const subagentsExtension: (options: SubagentsExtensionOptions) => InlineExtension;
23
29
  //# sourceMappingURL=subagents.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"subagents.d.ts","sourceRoot":"","sources":["../../src/pi/subagents.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,MAAM,EAAiB,MAAM,QAAQ,CAAC;AAG/C,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAEjB,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1C,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,iBAAiB,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CAC/E;AAiBD,iGAAiG;AACjG,eAAO,MAAM,wBAAwB,YAAa,yBAAyB,KAAG,gBA0E7E,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,kBAAkB,YAAa,yBAAyB,KAAG,eAGtE,CAAC"}
1
+ {"version":3,"file":"subagents.d.ts","sourceRoot":"","sources":["../../src/pi/subagents.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EACL,iBAAiB,EACjB,cAAc,EAEd,kBAAkB,EAGnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,MAAM,EAAuB,MAAM,QAAQ,CAAC;AAGrD,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAEjB,+BAA+B,EAC/B,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1C,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjE,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,8EAA8E;IAC9E,QAAQ,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,+BAA+B,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3F,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,uFAAuF;IACvF,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC7C;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,iBAAiB,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CAC/E;AA8BD,+FAA+F;AAC/F,eAAO,MAAM,wBAAwB,YAAa,yBAAyB,KAAG,gBA2G7E,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,kBAAkB,YAAa,yBAAyB,KAAG,eAGtE,CAAC"}
@@ -1,9 +1,17 @@
1
1
  import { defineTool, } from "@earendil-works/pi-coding-agent";
2
- import { Agent } from "@usine/core";
3
- import { Effect, Fiber, Stream } from "effect";
2
+ import { Agent } from "@usine/core/agent";
3
+ import { AgentSessionEvent, AgentSessionId, ChildSession, ChildSessionBudget, ChildSessionCount, SessionFinished, } from "@usine/core/agent/session";
4
+ import { Effect, Exit, Fiber, Stream } from "effect";
4
5
  import { Type } from "typebox";
5
6
  import { assembleChildPrompt } from "../prompt.js";
6
- import { ChildRequest, } from "../runtime.js";
7
+ import { ChildRequest, ChildSessionBudgetExceededError, } from "../runtime.js";
8
+ const TASK_EXCERPT_CHARACTERS = 160;
9
+ const taskExcerpt = (task) => {
10
+ const collapsed = task.replace(/\s+/gu, " ").trim();
11
+ return collapsed.length > TASK_EXCERPT_CHARACTERS
12
+ ? `${collapsed.slice(0, TASK_EXCERPT_CHARACTERS)}…`
13
+ : collapsed;
14
+ };
7
15
  const interrupted = (signal, sessionId) => signal === undefined
8
16
  ? Effect.logWarning("Pi supplied no abort signal; the child outlives only its scope", {
9
17
  sessionId,
@@ -16,9 +24,76 @@ const interrupted = (signal, sessionId) => signal === undefined
16
24
  signal.addEventListener("abort", onAbort, { once: true });
17
25
  return Effect.sync(() => signal.removeEventListener("abort", onAbort));
18
26
  });
19
- /** Pi-owned extension factory. Its single tool can only create first-level child descriptors. */
27
+ /** Builds the subagents extension; its single tool creates first-level child sessions only. */
20
28
  export const createSubagentsExtension = (options) => {
21
29
  let childNumber = 0;
30
+ const spawn = Effect.fn("Subagents.spawn")(function* (attemptedChildren, task, signal, onUpdate) {
31
+ const excerpt = taskExcerpt(task);
32
+ yield* Effect.annotateCurrentSpan({
33
+ attemptedChildren,
34
+ maxChildren: options.maxChildren,
35
+ parentSessionId: options.parentId,
36
+ });
37
+ if (attemptedChildren > options.maxChildren) {
38
+ const error = new ChildSessionBudgetExceededError({
39
+ attemptedChildren,
40
+ maxChildren: options.maxChildren,
41
+ message: `Attempt tried to spawn child ${attemptedChildren} after reaching its ${options.maxChildren}-child budget`,
42
+ });
43
+ yield* Effect.logWarning("Child session budget exceeded", {
44
+ attemptedChildren,
45
+ maxChildren: options.maxChildren,
46
+ parentSessionId: options.parentId,
47
+ taskExcerpt: excerpt,
48
+ });
49
+ yield* options.onBudgetExceeded(error);
50
+ return yield* error;
51
+ }
52
+ const session = new ChildSession({
53
+ id: AgentSessionId.make(`${options.parentId}:child:${attemptedChildren}`),
54
+ parentId: options.parentId,
55
+ agent: options.agent.name,
56
+ brain: options.agent.brain,
57
+ });
58
+ const request = new ChildRequest({
59
+ session,
60
+ cwd: options.cwd,
61
+ prompt: assembleChildPrompt({
62
+ agent: options.agent.name,
63
+ persona: options.agent.persona,
64
+ task,
65
+ }),
66
+ });
67
+ yield* Effect.annotateCurrentSpan({
68
+ agent: request.session.agent,
69
+ sessionId: request.session.id,
70
+ });
71
+ yield* Effect.logInfo("Spawning child session", {
72
+ attemptedChildren,
73
+ maxChildren: options.maxChildren,
74
+ taskExcerpt: excerpt,
75
+ });
76
+ const child = yield* options.backend.launch(request);
77
+ // Registered on the spawn scope, so the child stops being addressable when it returns.
78
+ yield* options.register(child);
79
+ yield* Effect.addFinalizer((exit) => Exit.isFailure(exit)
80
+ ? Effect.logWarning("Child session ended before returning a result", {
81
+ sessionId: session.id,
82
+ }).pipe(Effect.andThen(options.emit(new SessionFinished({ session: child.session }))))
83
+ : Effect.void);
84
+ const forward = yield* child.events.pipe(Stream.runForEach(options.emit), Effect.forkScoped);
85
+ const result = yield* Effect.raceFirst(child.result, interrupted(signal, request.session.id).pipe(Effect.andThen(child.interrupt), Effect.andThen(Effect.interrupt)));
86
+ yield* Fiber.join(forward);
87
+ yield* Effect.logInfo("Child session returned to Pi parent", {
88
+ sessionId: request.session.id,
89
+ });
90
+ const report = {
91
+ content: [{ type: "text", text: result.message }],
92
+ details: { childSessionId: request.session.id },
93
+ };
94
+ onUpdate?.(report);
95
+ return report;
96
+ }, Effect.scoped);
22
97
  return (pi) => {
23
98
  pi.registerTool(defineTool({
24
99
  name: "subagent",
@@ -32,50 +107,12 @@ export const createSubagentsExtension = (options) => {
32
107
  executionMode: "parallel",
33
108
  execute: (_toolCallId, params, signal, onUpdate) => {
34
109
  childNumber += 1;
35
- const session = new Agent.ChildSession({
36
- id: Agent.SessionId.make(`${options.parentId}:child:${childNumber}`),
37
- parentId: options.parentId,
38
- agent: options.agent.name,
39
- brain: options.agent.brain,
40
- });
41
- const request = new ChildRequest({
42
- session,
43
- cwd: options.cwd,
44
- prompt: assembleChildPrompt({
45
- agent: options.agent.name,
46
- persona: options.agent.persona,
47
- task: params.task,
48
- }),
49
- });
50
- const program = Effect.scoped(Effect.gen(function* () {
51
- yield* Effect.annotateCurrentSpan({
52
- agent: request.session.agent,
53
- parentSessionId: request.session.parentId,
54
- sessionId: request.session.id,
55
- });
56
- yield* Effect.logInfo("Delegating task to child session");
57
- const child = yield* options.backend.launch(request);
58
- const forward = yield* child.events.pipe(Stream.runForEach(options.emit), Effect.forkScoped);
59
- const result = yield* Effect.raceFirst(child.result, interrupted(signal, request.session.id).pipe(Effect.andThen(child.interrupt), Effect.andThen(Effect.interrupt)));
60
- yield* Fiber.join(forward);
61
- yield* Effect.logInfo("Child session returned to Pi parent", {
62
- sessionId: request.session.id,
63
- });
64
- onUpdate?.({
65
- content: [{ type: "text", text: result.message }],
66
- details: { childSessionId: session.id },
67
- });
68
- return {
69
- content: [{ type: "text", text: result.message }],
70
- details: { childSessionId: session.id },
71
- };
72
- }));
73
- return options.run(program);
110
+ return options.run(spawn(ChildSessionCount.make(childNumber), params.task, signal, onUpdate));
74
111
  },
75
112
  }));
76
113
  };
77
114
  };
78
- /** Named wrapper keeps the extension identifiable in Pi startup diagnostics. */
115
+ /** Names the extension so Pi startup diagnostics can identify it. */
79
116
  export const subagentsExtension = (options) => ({
80
117
  name: "usine-subagents",
81
118
  factory: createSubagentsExtension(options),
@@ -1 +1 @@
1
- {"version":3,"file":"subagents.js","sourceRoot":"","sources":["../../src/pi/subagents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subagents.js","sourceRoot":"","sources":["../../src/pi/subagents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Effort } from "@usine/core/agent/brain";
2
+ export interface ThinkingCapableModel {
3
+ readonly reasoning: boolean;
4
+ readonly thinkingLevelMap?: Partial<Record<Effort, string | null>> | undefined;
5
+ }
6
+ /** The thinking levels a model supports; the SDK clamps to this set without exposing it. */
7
+ export declare const supportedThinkingLevels: (model: ThinkingCapableModel) => ReadonlyArray<Effort>;
8
+ //# sourceMappingURL=thinking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thinking.d.ts","sourceRoot":"","sources":["../../src/pi/thinking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAW,MAAM,yBAAyB,CAAC;AAE1D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;CAChF;AAED,4FAA4F;AAC5F,eAAO,MAAM,uBAAuB,UAAW,oBAAoB,KAAG,aAAa,CAAC,MAAM,CAQzF,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { Effort, EFFORTS } from "@usine/core/agent/brain";
2
+ /** The thinking levels a model supports; the SDK clamps to this set without exposing it. */
3
+ export const supportedThinkingLevels = (model) => {
4
+ if (!model.reasoning)
5
+ return ["off"];
6
+ return EFFORTS.filter((level) => {
7
+ const mapped = model.thinkingLevelMap?.[level];
8
+ if (mapped === null)
9
+ return false;
10
+ if (level === "xhigh" || level === "max")
11
+ return mapped !== undefined;
12
+ return true;
13
+ });
14
+ };
15
+ //# sourceMappingURL=thinking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thinking.js","sourceRoot":"","sources":["../../src/pi/thinking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAO1D,4FAA4F;AAC5F,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAA2B,EAAyB,EAAE;IAC5F,IAAI,CAAC,KAAK,CAAC,SAAS;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACrC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAClC,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,KAAK;YAAE,OAAO,MAAM,KAAK,SAAS,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { AgentSession } from "@usine/core/agent/session";
2
+ import { Effect } from "effect";
3
+ import { type AgentSessionError } from "../runtime.ts";
4
+ import type { PiSession } from "./sdk.ts";
5
+ import { type SessionChannel } from "./session.ts";
6
+ /** Gates Pi tools and provider requests without aborting a parent's still-live children. */
7
+ export declare const piPauseGate: Effect.Effect<{
8
+ set: (next: Effect.Effect<void>) => void;
9
+ extension: {
10
+ name: string;
11
+ factory: (pi: import("@earendil-works/pi-coding-agent").ExtensionAPI) => void;
12
+ };
13
+ }, never, import("effect/Scope").Scope>;
14
+ /** Runs successive Pi turns in one SDK session while the conversation owns completion. */
15
+ export declare const piTurns: (options: {
16
+ readonly session: AgentSession;
17
+ readonly sdk: PiSession;
18
+ readonly channel: SessionChannel;
19
+ readonly prompt: string;
20
+ readonly lastText: () => string | undefined;
21
+ readonly error: (operation: "stream" | "steer" | "interrupt", cause: unknown) => AgentSessionError;
22
+ readonly gate: Effect.Success<typeof piPauseGate>;
23
+ }) => Effect.Effect<{
24
+ intervene: (action: import("@usine/core/attempt/channel").Interrupt | import("@usine/core/attempt/channel").OperatorMessage | import("@usine/core/attempt/channel").Release | import("@usine/core/attempt/channel").Steer) => Effect.Effect<import("@usine/core/attempt/channel").InterventionState, import("../runtime.ts").AgentResultError | import("../runtime.ts").ChildSessionBudgetExceededError | import("../runtime.ts").PoolUnavailableError | import("../runtime.ts").SessionOperationError | import("../runtime.ts").UnknownModelError | import("../runtime.ts").UnsupportedEffortError, never>;
25
+ steer: (message: string) => Effect.Effect<void, import("../runtime.ts").AgentResultError | import("../runtime.ts").ChildSessionBudgetExceededError | import("../runtime.ts").PoolUnavailableError | import("../runtime.ts").SessionOperationError | import("../runtime.ts").UnknownModelError | import("../runtime.ts").UnsupportedEffortError, never>;
26
+ interrupt: Effect.Effect<void, import("../runtime.ts").AgentResultError | import("../runtime.ts").ChildSessionBudgetExceededError | import("../runtime.ts").PoolUnavailableError | import("../runtime.ts").SessionOperationError | import("../runtime.ts").UnknownModelError | import("../runtime.ts").UnsupportedEffortError, never>;
27
+ }, never, import("effect/Scope").Scope>;
28
+ //# sourceMappingURL=turns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turns.d.ts","sourceRoot":"","sources":["../../src/pi/turns.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAS,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,KAAK,iBAAiB,EAAuB,MAAM,eAAe,CAAC;AAE5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAEtE,4FAA4F;AAC5F,eAAO,MAAM,WAAW;gBASR,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;;;;;uCAWjC,CAAC;AAEH,0FAA0F;AAC1F,eAAO,MAAM,OAAO;sBACA,YAAY;kBAChB,SAAS;sBACL,cAAc;qBACf,MAAM;uBACJ,MAAM,MAAM,GAAG,SAAS;oBAC3B,CACd,SAAS,EAAE,QAAQ,GAAG,OAAO,GAAG,WAAW,EAC3C,KAAK,EAAE,OAAO,KACX,iBAAiB;mBACP,MAAM,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC;;;qBAiBzB,MAAM;;uCAsB9B,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { AgentSession } from "@usine/core/agent/session";
2
+ import { Effect, Fiber } from "effect";
3
+ import {} from "../runtime.js";
4
+ import { sessionConversation } from "./conversation.js";
5
+ import { lastPiMessageText } from "./session.js";
6
+ /** Gates Pi tools and provider requests without aborting a parent's still-live children. */
7
+ export const piPauseGate = Effect.gen(function* () {
8
+ const context = yield* Effect.context();
9
+ const scope = yield* Effect.scope;
10
+ let boundary = Effect.void;
11
+ const wait = () => Effect.runPromiseWith(context)(Effect.suspend(() => boundary).pipe(Effect.forkIn(scope), Effect.flatMap(Fiber.join)));
12
+ return {
13
+ set: (next) => {
14
+ boundary = next;
15
+ },
16
+ extension: {
17
+ name: "usine-session-intervention",
18
+ factory: (pi) => {
19
+ pi.on("tool_call", wait);
20
+ pi.on("before_provider_request", wait);
21
+ },
22
+ },
23
+ };
24
+ });
25
+ /** Runs successive Pi turns in one SDK session while the conversation owns completion. */
26
+ export const piTurns = Effect.fn("PiTurns.start")(function* (options) {
27
+ const scope = yield* Effect.scope;
28
+ const startTurn = (message) => Effect.tryPromise({
29
+ try: () => options.sdk.prompt(message),
30
+ catch: (cause) => options.error("stream", cause),
31
+ }).pipe(Effect.flatMap(() => conversation.finish(options.lastText() ?? lastPiMessageText(options.sdk.messages) ?? "Pi session completed")), Effect.catch(options.channel.fail), Effect.forkIn(scope), Effect.asVoid);
32
+ const steer = (message) => Effect.tryPromise({
33
+ try: () => options.sdk.steer(message),
34
+ catch: (cause) => options.error("steer", cause),
35
+ });
36
+ const conversation = yield* sessionConversation({
37
+ session: options.session,
38
+ channel: options.channel,
39
+ send: (message, activity) => (activity === "idle" ? startTurn(message) : steer(message)),
40
+ pause: Effect.void,
41
+ beforeFinish: Effect.void,
42
+ });
43
+ options.gate.set(conversation.awaitUnpaused);
44
+ yield* startTurn(options.prompt);
45
+ return {
46
+ intervene: conversation.intervene,
47
+ steer,
48
+ interrupt: Effect.tryPromise({
49
+ try: () => options.sdk.abort(),
50
+ catch: (cause) => options.error("interrupt", cause),
51
+ }),
52
+ };
53
+ });
54
+ //# sourceMappingURL=turns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turns.js","sourceRoot":"","sources":["../../src/pi/turns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { TokenCount } from "@usine/core/agent/session";
2
+ import { Option, Schema } from "effect";
3
+ /** Pi assistant usage is per completed message, including cache tokens. */
4
+ export declare const piMessageTokens: (input: unknown, options?: import("effect/SchemaAST").ParseOptions) => Option.Option<{
5
+ readonly role: "assistant";
6
+ readonly usage: {
7
+ readonly totalTokens: number;
8
+ };
9
+ }>;
10
+ /** Tracks Claude's live message usage and reconciles its cumulative query meter at each result.
11
+ * Repeated blocks with the same message id count only their additional tokens.
12
+ * The SDK's result.usage is per-turn and excludes auxiliary work; modelUsage
13
+ * includes that work and stays cumulative across streaming-input turns.
14
+ */
15
+ export declare const claudeTokenMeter: () => (message: Schema.Json) => Option.Option<TokenCount>;
16
+ /** Codex's thread meter is cumulative across turns on the same thread. */
17
+ export declare const CodexTokenUsage: Schema.Struct<{
18
+ readonly threadId: Schema.NonEmptyString;
19
+ readonly tokenUsage: Schema.Struct<{
20
+ readonly total: Schema.Struct<{
21
+ readonly totalTokens: Schema.brand<Schema.Int, "TokenCount">;
22
+ }>;
23
+ }>;
24
+ }>;
25
+ //# sourceMappingURL=usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/pi/usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAQxC,2EAA2E;AAC3E,eAAO,MAAM,eAAe;;;;;EAAsC,CAAC;AA2BnE;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,kBAGV,MAAM,CAAC,IAAI,KAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CA4BxD,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,eAAe;;;;;;;EAG1B,CAAC"}