@usine/agents 0.2.0 → 0.4.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 (94) hide show
  1. package/README.md +93 -29
  2. package/dist/child-host/child-host.d.ts +60 -0
  3. package/dist/child-host/child-host.d.ts.map +1 -0
  4. package/dist/child-host/child-host.js +84 -0
  5. package/dist/child-host/child-host.js.map +1 -0
  6. package/dist/child-host/command.d.ts +11 -0
  7. package/dist/child-host/command.d.ts.map +1 -0
  8. package/dist/child-host/command.js +26 -0
  9. package/dist/child-host/command.js.map +1 -0
  10. package/dist/pi/authentication.d.ts +11 -2
  11. package/dist/pi/authentication.d.ts.map +1 -1
  12. package/dist/pi/authentication.js +15 -2
  13. package/dist/pi/authentication.js.map +1 -1
  14. package/dist/pi/children.d.ts +1 -4
  15. package/dist/pi/children.d.ts.map +1 -1
  16. package/dist/pi/children.js +1 -4
  17. package/dist/pi/children.js.map +1 -1
  18. package/dist/pi/claude.d.ts +8 -9
  19. package/dist/pi/claude.d.ts.map +1 -1
  20. package/dist/pi/claude.js +413 -39
  21. package/dist/pi/claude.js.map +1 -1
  22. package/dist/pi/codex/account.d.ts +3 -3
  23. package/dist/pi/codex/account.d.ts.map +1 -1
  24. package/dist/pi/codex/account.js +5 -5
  25. package/dist/pi/codex/account.js.map +1 -1
  26. package/dist/pi/codex/app-server.d.ts +19 -7
  27. package/dist/pi/codex/app-server.d.ts.map +1 -1
  28. package/dist/pi/codex/app-server.js +41 -36
  29. package/dist/pi/codex/app-server.js.map +1 -1
  30. package/dist/pi/codex/codec.d.ts +118 -0
  31. package/dist/pi/codex/codec.d.ts.map +1 -0
  32. package/dist/pi/codex/codec.js +137 -0
  33. package/dist/pi/codex/codec.js.map +1 -0
  34. package/dist/pi/codex/codex.d.ts +0 -1
  35. package/dist/pi/codex/codex.d.ts.map +1 -1
  36. package/dist/pi/codex/codex.js +169 -133
  37. package/dist/pi/codex/codex.js.map +1 -1
  38. package/dist/pi/conversation.d.ts +43 -0
  39. package/dist/pi/conversation.d.ts.map +1 -0
  40. package/dist/pi/conversation.js +129 -0
  41. package/dist/pi/conversation.js.map +1 -0
  42. package/dist/pi/pi.d.ts +1 -4
  43. package/dist/pi/pi.d.ts.map +1 -1
  44. package/dist/pi/pi.js +38 -201
  45. package/dist/pi/pi.js.map +1 -1
  46. package/dist/pi/sdk.d.ts +11 -15
  47. package/dist/pi/sdk.d.ts.map +1 -1
  48. package/dist/pi/sdk.js +35 -53
  49. package/dist/pi/sdk.js.map +1 -1
  50. package/dist/pi/session.d.ts +13 -14
  51. package/dist/pi/session.d.ts.map +1 -1
  52. package/dist/pi/session.js +68 -16
  53. package/dist/pi/session.js.map +1 -1
  54. package/dist/pi/turns.d.ts +28 -0
  55. package/dist/pi/turns.d.ts.map +1 -0
  56. package/dist/pi/turns.js +67 -0
  57. package/dist/pi/turns.js.map +1 -0
  58. package/dist/pi/usage.d.ts +39 -0
  59. package/dist/pi/usage.d.ts.map +1 -0
  60. package/dist/pi/usage.js +96 -0
  61. package/dist/pi/usage.js.map +1 -0
  62. package/dist/preflight/command.d.ts +16 -3
  63. package/dist/preflight/command.d.ts.map +1 -1
  64. package/dist/preflight/command.js +30 -17
  65. package/dist/preflight/command.js.map +1 -1
  66. package/dist/preflight/preflight.d.ts +10 -5
  67. package/dist/preflight/preflight.d.ts.map +1 -1
  68. package/dist/preflight/preflight.js +52 -25
  69. package/dist/preflight/preflight.js.map +1 -1
  70. package/dist/prompt.d.ts +12 -9
  71. package/dist/prompt.d.ts.map +1 -1
  72. package/dist/prompt.js +33 -4
  73. package/dist/prompt.js.map +1 -1
  74. package/dist/protocol/codex.d.ts +4 -7
  75. package/dist/protocol/codex.d.ts.map +1 -1
  76. package/dist/protocol/codex.js +1 -1
  77. package/dist/protocol/codex.js.map +1 -1
  78. package/dist/runtime.d.ts +101 -40
  79. package/dist/runtime.d.ts.map +1 -1
  80. package/dist/runtime.js +108 -27
  81. package/dist/runtime.js.map +1 -1
  82. package/package.json +22 -10
  83. package/dist/pi/live.d.ts +0 -4
  84. package/dist/pi/live.d.ts.map +0 -1
  85. package/dist/pi/live.js +0 -11
  86. package/dist/pi/live.js.map +0 -1
  87. package/dist/pi/subagents.d.ts +0 -27
  88. package/dist/pi/subagents.d.ts.map +0 -1
  89. package/dist/pi/subagents.js +0 -113
  90. package/dist/pi/subagents.js.map +0 -1
  91. package/dist/pi/thinking.d.ts +0 -8
  92. package/dist/pi/thinking.d.ts.map +0 -1
  93. package/dist/pi/thinking.js +0 -15
  94. package/dist/pi/thinking.js.map +0 -1
package/dist/pi/sdk.js CHANGED
@@ -1,35 +1,28 @@
1
- import { createAgentSession, DefaultResourceLoader, getAgentDir, ModelRuntime, SessionManager, SettingsManager, } from "@earendil-works/pi-coding-agent";
1
+ import { getSupportedThinkingLevels } from "@earendil-works/pi-ai";
2
+ import { createAgentSession, createBashToolDefinition, DefaultResourceLoader, defineTool, getAgentDir, ModelRuntime, SessionManager, SettingsManager, } from "@earendil-works/pi-coding-agent";
2
3
  import { Effort, ModelId } from "@usine/core/agent/brain";
3
4
  import { Context, Effect, Exit, Layer, Option } from "effect";
4
- import { requiredPiPool, resolvePiPool, } from "./authentication.js";
5
- import { supportedThinkingLevels } from "./thinking.js";
6
- /** The parent works only through usine extensions; repository tools belong to the harness children. */
7
- export const piParentSessionToolPolicy = { noTools: "builtin" };
8
- /** Opens a Pi session with the selected model and the tools allowed for its parent or child role. */
5
+ import { piAuthentication, resolvePiPool, splitPiModel, } from "./authentication.js";
6
+ /** Returns a bash tool whose commands run with exactly `environment`; Pi's `PI_*` variables are not added. */
7
+ export const environmentBashTool = (cwd, environment) => {
8
+ const exact = (context) => ({ ...context, env: { ...environment } });
9
+ return defineTool(createBashToolDefinition(cwd, { exposeSessionEnvironment: false, spawnHook: exact }));
10
+ };
11
+ /** The service that starts a Pi session with the selected model and its repository tools. */
9
12
  export class PiSdk extends Context.Service()("@usine/agents/pi/PiSdk") {
10
13
  }
11
- const splitModel = (model) => {
12
- const separator = model.indexOf("/");
13
- return separator <= 0 || separator === model.length - 1
14
- ? undefined
15
- : [model.slice(0, separator), model.slice(separator + 1)];
16
- };
17
14
  export const piSdkLive = Layer.succeed(PiSdk)({
18
15
  start: async (options) => {
19
16
  const modelRuntime = await ModelRuntime.create({ signal: options.signal });
20
- let selected;
21
- if (Option.isSome(options.model)) {
22
- const parts = splitModel(options.model.value);
23
- if (parts === undefined)
24
- return { _tag: "UnknownModel" };
25
- selected = modelRuntime.getModel(parts[0], parts[1]);
26
- if (selected === undefined)
27
- return { _tag: "UnknownModel" };
28
- }
17
+ const parts = splitPiModel(options.model);
18
+ if (parts === undefined)
19
+ return { _tag: "UnknownModel" };
20
+ const selected = modelRuntime.getModel(parts.provider, parts.modelId);
21
+ if (selected === undefined)
22
+ return { _tag: "UnknownModel" };
29
23
  const agentDir = getAgentDir();
30
- // The worktree is repository-controlled input, so its `.pi/` settings,
31
- // SYSTEM.md, extensions, and skills never load. The subagents tool is an
32
- // inline factory, which the loader registers regardless.
24
+ // The worktree is untrusted, so its `.pi/` settings, SYSTEM.md, extensions, and skills are not
25
+ // loaded; inline extension factories, such as the pause gate, still register.
33
26
  const settingsManager = SettingsManager.create(options.cwd, agentDir, {
34
27
  projectTrusted: false,
35
28
  });
@@ -52,45 +45,35 @@ export const piSdkLive = Layer.succeed(PiSdk)({
52
45
  settingsManager,
53
46
  thinkingLevel: options.thinkingLevel,
54
47
  };
55
- const toolScopedSessionOptions = options.toolMode === "orchestration"
56
- ? { ...sessionOptions, ...piParentSessionToolPolicy }
57
- : sessionOptions;
58
- const { session } = selected === undefined
59
- ? await createAgentSession(toolScopedSessionOptions)
60
- : await createAgentSession({ ...toolScopedSessionOptions, model: selected });
48
+ // A custom tool replaces the built-in tool of the same name.
49
+ const environmentScopedSessionOptions = Option.match(options.environment, {
50
+ onNone: () => sessionOptions,
51
+ onSome: (environment) => ({
52
+ ...sessionOptions,
53
+ customTools: [environmentBashTool(options.cwd, environment)],
54
+ }),
55
+ });
56
+ const { session } = await createAgentSession({
57
+ ...environmentScopedSessionOptions,
58
+ model: selected,
59
+ });
61
60
  let ownershipTransferred = false;
62
61
  try {
63
62
  const active = session.model;
64
63
  if (active === undefined)
65
64
  throw new Error("Pi started without an active model");
66
65
  const model = ModelId.make(`${active.provider}/${active.id}`);
67
- const supported = supportedThinkingLevels(active);
66
+ const supported = getSupportedThinkingLevels(active);
68
67
  if (!supported.includes(options.thinkingLevel)) {
69
68
  return { _tag: "UnsupportedEffort", effort: options.thinkingLevel, model, supported };
70
69
  }
71
- const resolvedAuthentication = await modelRuntime.checkAuth(active.provider, {
72
- signal: options.signal,
73
- });
74
- const authentication = resolvedAuthentication?.type === "api_key"
75
- ? { _tag: "ApiKey" }
76
- : resolvedAuthentication?.type === "oauth"
77
- ? {
78
- _tag: "OAuth",
79
- subscription: modelRuntime.getProvider(active.provider)?.auth.oauth?.isSubscription === true,
80
- }
81
- : undefined;
82
- const requiredPool = requiredPiPool(active.provider);
70
+ const authentication = piAuthentication(await modelRuntime.checkAuth(active.provider, { signal: options.signal }), modelRuntime.getProvider(active.provider)?.auth.oauth?.isSubscription === true);
83
71
  const pool = resolvePiPool(active.provider, authentication);
84
72
  if (authentication === undefined) {
85
- return { _tag: "AuthenticationUnavailable", model, requiredPool };
73
+ return { _tag: "AuthenticationUnavailable", model };
86
74
  }
87
75
  if (pool === undefined && authentication._tag === "OAuth") {
88
- return {
89
- _tag: "UnsupportedAuthentication",
90
- authentication,
91
- model,
92
- requiredPool,
93
- };
76
+ return { _tag: "UnsupportedAuthentication", authentication, model };
94
77
  }
95
78
  if (pool === undefined) {
96
79
  throw new Error("Pi could not map a configured API key to a billing pool");
@@ -110,9 +93,8 @@ export const piSdkLive = Layer.succeed(PiSdk)({
110
93
  },
111
94
  });
112
95
  /**
113
- * Runs SDK startup so an interruption cannot leak a session. A result that
114
- * loses the race with interruption is disposed in its Promise continuation;
115
- * one already handed to `use` is disposed by `onExit`.
96
+ * Runs SDK startup so an interruption cannot leak a session: a result that arrives after the
97
+ * interruption is disposed when its Promise settles, and one passed to `use` is disposed on exit.
116
98
  */
117
99
  export const usePiStart = (start, onError, use) => Effect.suspend(() => {
118
100
  let acquired;
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/pi/sdk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/pi/sdk.ts"],"names":[],"mappings":"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"}
@@ -1,42 +1,41 @@
1
- import { AgentSession, AgentSessionEvent, AgentSessionId, SessionFinished, TextOutput, ToolFinished, ToolStarted } from "@usine/core/agent/session";
2
- import { Cause, Deferred, Effect, Queue } from "effect";
1
+ import { AgentSession, AgentSessionEvent, AgentSessionId, ProviderRecovered, ProviderRetrying, SessionFinished, SessionTokensUpdated, TextOutput, ToolFinished, ToolStarted } from "@usine/core/agent/session";
2
+ import { Cause, Deferred, Effect, Option, 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
- /** Adapter name printed in the terminal log lines. */
6
+ /** The adapter name in log lines. */
7
7
  readonly label: string;
8
8
  readonly sessionId: AgentSessionId;
9
9
  }
10
10
  /**
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.
11
+ * The state of one session: an event queue, a result, and a latch that allows one terminal
12
+ * transition. Cleanups registered with `onTerminal` run on that transition.
14
13
  */
15
14
  export interface SessionChannel {
16
15
  readonly events: Queue.Queue<AgentSessionEvent, AgentSessionError | Cause.Done>;
17
16
  readonly result: Deferred.Deferred<SessionResult, AgentSessionError>;
18
17
  readonly isTerminal: Effect.Effect<boolean>;
19
18
  readonly onTerminal: (cleanup: () => void) => void;
20
- /** Queues one event; after the terminal transition the event is logged and dropped. */
19
+ /** Queues an event; after the terminal transition, logs and drops it. */
21
20
  readonly emit: (event: AgentSessionEvent) => Effect.Effect<void>;
22
21
  readonly fail: (error: AgentSessionError) => Effect.Effect<void>;
23
22
  readonly finish: (session: AgentSession, message: string) => Effect.Effect<void>;
24
23
  }
25
24
  export declare const sessionChannel: (options: SessionChannelOptions) => Effect.Effect<{
26
- events: Queue.Queue<import("@usine/core/agent/session").PoolRateLimitsUpdated | SessionFinished | import("@usine/core/agent/session").SessionStarted | 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>;
25
+ events: Queue.Queue<import("@usine/core/agent/session").PoolRateLimitsUpdated | ProviderRecovered | ProviderRetrying | 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").AgentBlockedError | import("../runtime.ts").AgentQuestionError | 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>;
26
+ result: Deferred.Deferred<SessionResult, import("../runtime.ts").AgentBlockedError | import("../runtime.ts").AgentQuestionError | 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
27
  isTerminal: Effect.Effect<boolean, never, never>;
29
28
  onTerminal: (cleanup: () => void) => void;
30
29
  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>;
30
+ fail: (error: import("../runtime.ts").AgentBlockedError | import("../runtime.ts").AgentQuestionError | 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
31
  finish: (session: import("@usine/core/agent/session").ChildSession | import("@usine/core/agent/session").ParentSession, message: string) => Effect.Effect<void, never, never>;
33
32
  }, never, never>;
33
+ /** Returns the text of a user message as Pi compares it with its queued messages, or `None` for other messages. */
34
+ export declare const piUserMessageText: (message: PiMessage) => Option.Option<string>;
34
35
  export declare const lastPiMessageText: (messages: ReadonlyArray<PiMessage>) => string | undefined;
35
36
  /**
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.
37
+ * Subscribes to `piSession` and queues normalized events synchronously, so none arrive after the
38
+ * prompt resolves. Provider retries are counted per turn and reset on `agent_settled`.
40
39
  */
41
40
  export declare const subscribePiSession: (piSession: PiSession, session: AgentSession, channel: SessionChannel) => Effect.Effect<{
42
41
  lastText: () => string | undefined;
@@ -1 +1 @@
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,UAAU,EACV,YAAY,EACZ,WAAW,EACZ,MAAM,2BAA2B,CAAC;AACnC,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,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;;;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,iBAAiB,EAEjB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EAEpB,UAAU,EACV,YAAY,EACZ,WAAW,EACZ,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAe,MAAM,QAAQ,CAAC;AAE7E,OAAO,EAAE,KAAK,iBAAiB,EAAmB,aAAa,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAkB,MAAM,UAAU,CAAC;AAErE,MAAM,WAAW,qBAAqB;IACpC,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;CACpC;AAED;;;GAGG;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,yEAAyE;IACzE,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;;;;0BAyDD,MAAM,IAAI;kBA9Cb,iBAAiB;;;gBAqDtC,CAAC;AA8CH,mHAAmH;AACnH,eAAO,MAAM,iBAAiB,YAAa,SAAS,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAS1E,CAAC;AAEF,eAAO,MAAM,iBAAiB,aAAc,aAAa,CAAC,SAAS,CAAC,KAAG,MAAM,GAAG,SAQ/E,CAAC;AA8BF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,cAClB,SAAS,WACX,YAAY,WACZ,cAAc;;;gBAyFrB,CAAC"}
@@ -1,6 +1,7 @@
1
- import { AgentSession, AgentSessionEvent, AgentSessionId, SessionFinished, TextOutput, ToolFinished, ToolStarted, } from "@usine/core/agent/session";
2
- import { Cause, Deferred, Effect, Queue, Ref, Schema } from "effect";
3
- import { SessionResult } from "../runtime.js";
1
+ import { AgentSession, AgentSessionEvent, AgentSessionId, ProviderRecovered, ProviderRetries, ProviderRetrying, SessionFinished, SessionTokensUpdated, TokenCount, TextOutput, ToolFinished, ToolStarted, } from "@usine/core/agent/session";
2
+ import { Cause, Deferred, Effect, Option, Queue, Ref, Schema } from "effect";
3
+ import { addUsage, piMessageUsage } from "./usage.js";
4
+ import { reportedOutcome, SessionResult } from "../runtime.js";
4
5
  export const sessionChannel = Effect.fn("SessionChannel.make")(function* (options) {
5
6
  const events = yield* Queue.make();
6
7
  const result = yield* Deferred.make();
@@ -17,6 +18,7 @@ export const sessionChannel = Effect.fn("SessionChannel.make")(function* (option
17
18
  sessionId: options.sessionId,
18
19
  })));
19
20
  const fail = Effect.fn("SessionChannel.fail")(function* (error) {
21
+ yield* Effect.annotateCurrentSpan({ sessionId: options.sessionId });
20
22
  if (yield* Ref.getAndSet(terminal, true))
21
23
  return;
22
24
  yield* Effect.logError(`${options.label} failed`, {
@@ -29,6 +31,10 @@ export const sessionChannel = Effect.fn("SessionChannel.make")(function* (option
29
31
  yield* runCleanups;
30
32
  });
31
33
  const finish = Effect.fn("SessionChannel.finish")(function* (session, message) {
34
+ yield* Effect.annotateCurrentSpan({ sessionId: session.id });
35
+ const own = reportedOutcome(Option.some(session.id), message);
36
+ if (Option.isSome(own))
37
+ return yield* fail(own.value);
32
38
  if (yield* Ref.getAndSet(terminal, true))
33
39
  return;
34
40
  yield* Queue.offer(events, new SessionFinished({ session }));
@@ -88,6 +94,21 @@ const messageText = (message) => {
88
94
  .trim();
89
95
  return text || undefined;
90
96
  };
97
+ const PiUserMessage = Schema.Struct({
98
+ role: Schema.Literal("user"),
99
+ content: Schema.Union([Schema.String, Schema.Array(Schema.Json)]),
100
+ });
101
+ /** Returns the text of a user message as Pi compares it with its queued messages, or `None` for other messages. */
102
+ export const piUserMessageText = (message) => {
103
+ if (!Schema.is(PiUserMessage)(message))
104
+ return Option.none();
105
+ if (Schema.is(Schema.String)(message.content))
106
+ return Option.some(message.content);
107
+ return Option.some(message.content
108
+ .filter(Schema.is(PiTextBlock))
109
+ .map(({ text }) => text)
110
+ .join(""));
111
+ };
91
112
  export const lastPiMessageText = (messages) => {
92
113
  for (let index = messages.length - 1; index >= 0; index -= 1) {
93
114
  const message = messages[index];
@@ -124,28 +145,59 @@ const sessionEventFrom = (event, session) => {
124
145
  return undefined;
125
146
  };
126
147
  /**
127
- * Subscribes the Pi SDK's synchronous listener to one session channel.
128
- * Normalized events reach the queue on the SDK's own tick so none can trail
129
- * the prompt's resolution; operational events with no normalized shape (retry
130
- * backoffs, compactions) are logged so a silent wait stays explainable.
148
+ * Subscribes to `piSession` and queues normalized events synchronously, so none arrive after the
149
+ * prompt resolves. Provider retries are counted per turn and reset on `agent_settled`.
131
150
  */
132
151
  export const subscribePiSession = (piSession, session, channel) => Effect.gen(function* () {
133
152
  const context = yield* Effect.context();
134
153
  const log = Effect.runForkWith(context);
135
154
  let lastText;
155
+ let total = { totalTokens: TokenCount.make(0), costUsd: Option.none() };
156
+ // Provider retries reported in the current turn, and whether the last retry is unresolved.
157
+ let retries = 0;
158
+ let retrying = false;
159
+ const offer = (sessionEvent) => {
160
+ if (!Queue.offerUnsafe(channel.events, sessionEvent)) {
161
+ log(Effect.logWarning("Dropped a Pi session event after the terminal transition", {
162
+ event: sessionEvent._tag,
163
+ sessionId: session.id,
164
+ }));
165
+ }
166
+ };
136
167
  const unsubscribe = piSession.subscribe((event) => {
168
+ if (event.type === "message_end") {
169
+ const usage = piMessageUsage(event.message);
170
+ if (Option.isSome(usage)) {
171
+ total = addUsage(total, usage.value);
172
+ offer(new SessionTokensUpdated({ session, ...total }));
173
+ }
174
+ }
137
175
  if (event.type === "auto_retry_start") {
138
- log(Effect.logWarning("Pi session is backing off before a retry", {
176
+ retries += 1;
177
+ retrying = true;
178
+ const message = event.errorMessage || "Unknown error";
179
+ log(Effect.logWarning("Pi session cannot reach its provider and will retry", {
139
180
  attempt: event.attempt,
140
181
  delayMillis: event.delayMs,
141
- errorMessage: event.errorMessage,
142
182
  maxAttempts: event.maxAttempts,
183
+ message,
184
+ retries,
143
185
  sessionId: session.id,
144
186
  }));
187
+ offer(new ProviderRetrying({ session, message, retries: ProviderRetries.make(retries) }));
145
188
  return;
146
189
  }
147
190
  if (event.type === "auto_retry_end") {
148
- log(Effect.logInfo("Pi session finished retrying", {
191
+ if (event.success && retrying) {
192
+ retrying = false;
193
+ log(Effect.logInfo("Pi session reached its provider again", {
194
+ retries,
195
+ sessionId: session.id,
196
+ }));
197
+ offer(new ProviderRecovered({ session, retries: ProviderRetries.make(retries) }));
198
+ return;
199
+ }
200
+ log(Effect.logInfo("Pi session stopped retrying its provider", {
149
201
  attempt: event.attempt,
150
202
  finalError: event.finalError,
151
203
  sessionId: session.id,
@@ -153,6 +205,11 @@ export const subscribePiSession = (piSession, session, channel) => Effect.gen(fu
153
205
  }));
154
206
  return;
155
207
  }
208
+ if (event.type === "agent_settled") {
209
+ retries = 0;
210
+ retrying = false;
211
+ return;
212
+ }
156
213
  if (event.type === "compaction_start" || event.type === "compaction_end") {
157
214
  log(Effect.logInfo("Pi session context compaction", {
158
215
  phase: event.type,
@@ -166,12 +223,7 @@ export const subscribePiSession = (piSession, session, channel) => Effect.gen(fu
166
223
  return;
167
224
  if (sessionEvent._tag === "TextOutput")
168
225
  lastText = sessionEvent.text;
169
- if (!Queue.offerUnsafe(channel.events, sessionEvent)) {
170
- log(Effect.logWarning("Dropped a Pi session event after the terminal transition", {
171
- event: sessionEvent._tag,
172
- sessionId: session.id,
173
- }));
174
- }
226
+ offer(sessionEvent);
175
227
  });
176
228
  channel.onTerminal(unsubscribe);
177
229
  return { lastText: () => lastText, unsubscribe };
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/pi/session.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAA0B,aAAa,EAAE,MAAM,eAAe,CAAC;AAyBtE,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,EACtE,OAA8B;IAE9B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,EAAqD,CAAC;IACtF,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAoC,CAAC;IACxE,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QACnC,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,CAAC,KAAwB,EAAE,EAAE,CACxC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,CAC7B,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC1B,QAAQ;QACN,CAAC,CAAC,MAAM,CAAC,IAAI;QACb,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,KAAK,iDAAiD,EAAE;YACnF,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CACP,CACF,CAAC;IAEJ,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAwB;QAC/E,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC;YAAE,OAAO;QACjD,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,KAAK,SAAS,EAAE;YAChD,QAAQ,EAAE,KAAK,CAAC,IAAI;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC;QACH,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACjC,KAAK,CAAC,CAAC,WAAW,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,QAAQ,CAAC,EACzD,OAAqB,EACrB,OAAe;QAEf,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC;YAAE,OAAO;QACjD,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7D,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAChE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzB,KAAK,CAAC,CAAC,WAAW,CAAC;QACnB,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,WAAW,EAAE;YACjD,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,MAAM;QACN,MAAM;QACN,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC7B,UAAU,EAAE,CAAC,OAAmB,EAAE,EAAE;YAClC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;QACD,IAAI;QACJ,IAAI;QACJ,MAAM;KACkB,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;CAClE,CAAC,CAAC;AACH,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC,MAAM;CACpB,CAAC,CAAC;AACH,MAAM,oBAAoB,GAAG,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAI1F,MAAM,aAAa,GAAG,CAAC,KAAyB,EAAe,EAAE;IAC/D,IAAI,CAAC;QACH,OAAO,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAA0B,EAAe,EAAE;IACjE,IAAI,CAAC;QACH,OAAO,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,OAAkB,EAAsB,EAAE;IAC7D,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9D,IAAI,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;IAC1F,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO;SACzB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;SAC9B,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC;SACvB,IAAI,CAAC,EAAE,CAAC;SACR,IAAI,EAAE,CAAC;IACV,OAAO,IAAI,IAAI,SAAS,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAkC,EAAsB,EAAE;IAC1F,KAAK,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,OAAO,KAAK,SAAS;YAAE,SAAS;QACpC,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;IACtC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACvB,KAAqB,EACrB,OAAqB,EACU,EAAE;IACjC,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxC,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;QAC1C,OAAO,IAAI,WAAW,CAAC;YACrB,OAAO;YACP,MAAM,EAAE,KAAK,CAAC,UAAU;YACxB,IAAI,EAAE,KAAK,CAAC,QAAQ;YACpB,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC;SAC5B,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;QACxC,OAAO,IAAI,YAAY,CAAC;YACtB,OAAO;YACP,MAAM,EAAE,KAAK,CAAC,UAAU;YACxB,IAAI,EAAE,KAAK,CAAC,QAAQ;YACpB,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC;YAC7B,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,SAAoB,EACpB,OAAqB,EACrB,OAAuB,EACvB,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAS,CAAC;IAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,QAA4B,CAAC;IACjC,MAAM,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;QAChD,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACtC,GAAG,CACD,MAAM,CAAC,UAAU,CAAC,0CAA0C,EAAE;gBAC5D,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,WAAW,EAAE,KAAK,CAAC,OAAO;gBAC1B,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,SAAS,EAAE,OAAO,CAAC,EAAE;aACtB,CAAC,CACH,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YACpC,GAAG,CACD,MAAM,CAAC,OAAO,CAAC,8BAA8B,EAAE;gBAC7C,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CACH,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YACzE,GAAG,CACD,MAAM,CAAC,OAAO,CAAC,+BAA+B,EAAE;gBAC9C,KAAK,EAAE,KAAK,CAAC,IAAI;gBACjB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,SAAS,EAAE,OAAO,CAAC,EAAE;aACtB,CAAC,CACH,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,YAAY,KAAK,SAAS;YAAE,OAAO;QACvC,IAAI,YAAY,CAAC,IAAI,KAAK,YAAY;YAAE,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC;QACrE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC;YACrD,GAAG,CACD,MAAM,CAAC,UAAU,CAAC,0DAA0D,EAAE;gBAC5E,KAAK,EAAE,YAAY,CAAC,IAAI;gBACxB,SAAS,EAAE,OAAO,CAAC,EAAE;aACtB,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAChC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;AACnD,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/pi/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { ChildSession } 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
+ /** Creates a gate that blocks Pi tool calls and provider requests at their next boundary while an operator pause is active. */
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; the conversation decides when the session completes. */
15
+ export declare const piTurns: (options: {
16
+ readonly session: ChildSession;
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, onDelivery: import("../runtime.ts").OnDelivery) => Effect.Effect<import("@usine/core/attempt/channel").InterventionState, import("../runtime.ts").AgentBlockedError | import("../runtime.ts").AgentQuestionError | 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").AgentBlockedError | import("../runtime.ts").AgentQuestionError | 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").AgentBlockedError | import("../runtime.ts").AgentQuestionError | 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,EAAiB,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,KAAK,iBAAiB,EAAuB,MAAM,eAAe,CAAC;AAE5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAwC,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAEzF,+HAA+H;AAC/H,eAAO,MAAM,WAAW;gBASR,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;;;;;uCAWjC,CAAC;AAEH,wGAAwG;AACxG,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;;;qBAgD9B,MAAM;;uCAMzB,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { ChildSession } from "@usine/core/agent/session";
2
+ import { Effect, Fiber, Option } from "effect";
3
+ import {} from "../runtime.js";
4
+ import { sessionConversation } from "./conversation.js";
5
+ import { lastPiMessageText, piUserMessageText } from "./session.js";
6
+ /** Creates a gate that blocks Pi tool calls and provider requests at their next boundary while an operator pause is active. */
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; the conversation decides when the session completes. */
26
+ export const piTurns = Effect.fn("PiTurns.start")(function* (options) {
27
+ const scope = yield* Effect.scope;
28
+ const context = yield* Effect.context();
29
+ const startTurn = (message) => Effect.tryPromise({
30
+ try: () => options.sdk.prompt(message),
31
+ catch: (cause) => options.error("stream", cause),
32
+ }).pipe(Effect.flatMap(() => conversation.finish(options.lastText() ?? lastPiMessageText(options.sdk.messages) ?? "Pi session completed")), Effect.catch(options.channel.fail), Effect.forkIn(scope), Effect.asVoid);
33
+ // Pi delivers a steering message after the running tool calls return, before its next model request.
34
+ const queueSteer = (message) => Effect.tryPromise({
35
+ try: () => options.sdk.steer(message),
36
+ catch: (cause) => options.error("steer", cause),
37
+ }).pipe(Effect.map((disposition) => (disposition === "handled" ? "read" : "queued")));
38
+ const conversation = yield* sessionConversation({
39
+ session: options.session,
40
+ channel: options.channel,
41
+ send: (message, activity) => activity === "idle"
42
+ ? startTurn(message).pipe(Effect.as("read"))
43
+ : queueSteer(message),
44
+ pause: Effect.void,
45
+ beforeFinish: Effect.void,
46
+ });
47
+ // Pi removes a steering message from its queue when the message starts in the conversation.
48
+ const unsubscribe = options.sdk.subscribe((event) => {
49
+ if (event.type !== "message_start")
50
+ return;
51
+ const text = piUserMessageText(event.message);
52
+ if (Option.isSome(text))
53
+ Effect.runForkWith(context)(conversation.read((queued) => queued.indexOf(text.value) + 1));
54
+ });
55
+ yield* Effect.addFinalizer(() => Effect.sync(unsubscribe));
56
+ options.gate.set(conversation.awaitUnpaused);
57
+ yield* startTurn(options.prompt);
58
+ return {
59
+ intervene: conversation.intervene,
60
+ steer: (message) => queueSteer(message).pipe(Effect.asVoid),
61
+ interrupt: Effect.tryPromise({
62
+ try: () => options.sdk.abort(),
63
+ catch: (cause) => options.error("interrupt", cause),
64
+ }),
65
+ };
66
+ });
67
+ //# 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,39 @@
1
+ import { TokenCount, UsdAmount } from "@usine/core/agent/session";
2
+ import { Option, Schema } from "effect";
3
+ /** A session's token count and, if the harness reports one, its cost in dollars. */
4
+ export interface SessionUsage {
5
+ readonly totalTokens: TokenCount;
6
+ readonly costUsd: Option.Option<UsdAmount>;
7
+ }
8
+ /**
9
+ * Returns the usage of one completed Pi assistant message: output plus uncached input, where cache
10
+ * writes count and cache reads do not, and the dollar cost if Pi reports one.
11
+ */
12
+ export declare const piMessageUsage: (input: unknown, options?: import("effect/SchemaAST").ParseOptions | undefined) => Option.Option<SessionUsage>;
13
+ /** Adds a message's usage to a session total; the cost is `Some` once any message has a cost. */
14
+ export declare const addUsage: (total: SessionUsage, message: SessionUsage) => SessionUsage;
15
+ /**
16
+ * Returns a Claude token meter: live message usage between results, reconciled with the cumulative
17
+ * `modelUsage` at each result. Consumption is output plus input plus cache creation, because the
18
+ * SDK's input counts exclude cache reads and writes; repeated blocks with one message ID count only
19
+ * their added tokens. The cost is the SDK's `costUSD` estimate and changes only at a result.
20
+ */
21
+ export declare const claudeTokenMeter: () => (message: Schema.Json) => Option.Option<SessionUsage>;
22
+ /** The Codex thread token usage, cumulative across turns; `inputTokens` includes cached input. */
23
+ export declare const CodexTokenUsage: Schema.Struct<{
24
+ readonly threadId: Schema.NonEmptyString;
25
+ readonly tokenUsage: Schema.Struct<{
26
+ readonly total: Schema.Struct<{
27
+ readonly inputTokens: Schema.Int;
28
+ readonly cachedInputTokens: Schema.Int;
29
+ readonly outputTokens: Schema.Int;
30
+ }>;
31
+ }>;
32
+ }>;
33
+ export type CodexTokenUsage = typeof CodexTokenUsage.Type;
34
+ /**
35
+ * Returns a Codex thread's consumption: output plus uncached input. The thread's `totalTokens` counts
36
+ * the whole context on every turn, so it is not used.
37
+ */
38
+ export declare const codexThreadTokens: (total: CodexTokenUsage["tokenUsage"]["total"]) => TokenCount;
39
+ //# 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,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAQ,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAc9C,oFAAoF;AACpF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;CAC5C;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,gHAM1B,CAAC;AAEF,iGAAiG;AACjG,eAAO,MAAM,QAAQ,UAAW,YAAY,WAAW,YAAY,KAAG,YAKpE,CAAC;AA0BH;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,kBAIV,MAAM,CAAC,IAAI,KAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAwB1D,CAAC;AAEF,kGAAkG;AAClG,eAAO,MAAM,eAAe;;;;;;;;;EAK1B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,iBAAiB,UAAW,eAAe,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,KAAG,UACc,CAAC"}