@alpacakit/agents 0.1.0-beta.39 → 0.2.0-beta.3

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 (134) hide show
  1. package/README.md +142 -1
  2. package/dist/agents/builtin.d.ts +2 -2
  3. package/dist/agents/builtin.d.ts.map +1 -1
  4. package/dist/agents/builtin.js +6 -4
  5. package/dist/agents/claude/cli.d.ts +133 -0
  6. package/dist/agents/claude/cli.d.ts.map +1 -0
  7. package/dist/agents/claude/cli.js +182 -0
  8. package/dist/agents/claude/host.d.ts +14 -0
  9. package/dist/agents/claude/host.d.ts.map +1 -0
  10. package/dist/agents/claude/host.js +319 -0
  11. package/dist/agents/{claude.d.ts → claude/index.d.ts} +11 -11
  12. package/dist/agents/claude/index.d.ts.map +1 -0
  13. package/dist/agents/claude/index.js +134 -0
  14. package/dist/agents/claude/session.d.ts +25 -0
  15. package/dist/agents/claude/session.d.ts.map +1 -0
  16. package/dist/agents/claude/session.js +321 -0
  17. package/dist/agents/codex/cli.d.ts +132 -0
  18. package/dist/agents/codex/cli.d.ts.map +1 -0
  19. package/dist/agents/codex/cli.js +110 -0
  20. package/dist/agents/codex/host.d.ts +14 -0
  21. package/dist/agents/codex/host.d.ts.map +1 -0
  22. package/dist/agents/codex/host.js +221 -0
  23. package/dist/agents/codex/index.d.ts +14 -0
  24. package/dist/agents/codex/index.d.ts.map +1 -0
  25. package/dist/agents/codex/index.js +127 -0
  26. package/dist/agents/codex/session.d.ts +21 -0
  27. package/dist/agents/codex/session.d.ts.map +1 -0
  28. package/dist/agents/codex/session.js +390 -0
  29. package/dist/agents/openai-compatible/fetch-engine.d.ts.map +1 -1
  30. package/dist/agents/openai-compatible/fetch-engine.js +3 -2
  31. package/dist/agents/openai-compatible/pi/engine.js +1 -1
  32. package/dist/agents/openai-compatible/pi/{session.d.ts → run.d.ts} +1 -1
  33. package/dist/agents/openai-compatible/pi/run.d.ts.map +1 -0
  34. package/dist/agents/openai-compatible/pi/sandbox.d.ts.map +1 -1
  35. package/dist/auth/login-probe.d.ts +6 -4
  36. package/dist/auth/login-probe.d.ts.map +1 -1
  37. package/dist/auth/login-probe.js +19 -13
  38. package/dist/auth/material.d.ts +1 -1
  39. package/dist/auth/material.d.ts.map +1 -1
  40. package/dist/codex/app-server.d.ts +50 -1
  41. package/dist/codex/app-server.d.ts.map +1 -1
  42. package/dist/codex/app-server.js +140 -66
  43. package/dist/codex/index.d.ts +3 -2
  44. package/dist/codex/index.d.ts.map +1 -1
  45. package/dist/codex/index.js +2 -1
  46. package/dist/codex/protocol.d.ts +101 -0
  47. package/dist/codex/protocol.d.ts.map +1 -1
  48. package/dist/codex/protocol.js +78 -0
  49. package/dist/config/agent-config-validation.d.ts +1 -1
  50. package/dist/config/agent-config-validation.d.ts.map +1 -1
  51. package/dist/config/agent-configs.d.ts.map +1 -1
  52. package/dist/config/agent-configs.js +3 -3
  53. package/dist/config/compose.d.ts.map +1 -1
  54. package/dist/config/config.d.ts +1 -1
  55. package/dist/config/config.d.ts.map +1 -1
  56. package/dist/config/index.d.ts +2 -2
  57. package/dist/config/index.d.ts.map +1 -1
  58. package/dist/config/index.js +1 -1
  59. package/dist/config/model.d.ts +0 -1
  60. package/dist/config/model.d.ts.map +1 -1
  61. package/dist/config/schema.d.ts.map +1 -1
  62. package/dist/config/schema.js +1 -1
  63. package/dist/config/store.d.ts.map +1 -1
  64. package/dist/config/store.js +6 -24
  65. package/dist/config/support.d.ts +0 -1
  66. package/dist/config/support.d.ts.map +1 -1
  67. package/dist/config/support.js +0 -9
  68. package/dist/core/cli-child.d.ts +56 -0
  69. package/dist/core/cli-child.d.ts.map +1 -0
  70. package/dist/core/cli-child.js +105 -0
  71. package/dist/core/fs.d.ts +1 -1
  72. package/dist/core/fs.d.ts.map +1 -1
  73. package/dist/core/fs.js +10 -2
  74. package/dist/core/node-ports.d.ts.map +1 -1
  75. package/dist/core/node-ports.js +1 -5
  76. package/dist/core/session.d.ts +104 -0
  77. package/dist/core/session.d.ts.map +1 -0
  78. package/dist/core/session.js +29 -0
  79. package/dist/fleet/store.d.ts.map +1 -1
  80. package/dist/fleet/store.js +4 -3
  81. package/dist/host/availability.d.ts +2 -1
  82. package/dist/host/availability.d.ts.map +1 -1
  83. package/dist/host/github-dir.d.ts.map +1 -1
  84. package/dist/host/github-dir.js +2 -1
  85. package/dist/host/mcp-list.d.ts.map +1 -1
  86. package/dist/host/mcp-list.js +5 -6
  87. package/dist/host/run-command.d.ts +2 -1
  88. package/dist/host/run-command.d.ts.map +1 -1
  89. package/dist/host/run-command.js +10 -19
  90. package/dist/host/session-files.d.ts +23 -0
  91. package/dist/host/session-files.d.ts.map +1 -0
  92. package/dist/host/session-files.js +92 -0
  93. package/dist/index.d.ts +9 -4
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/index.js +5 -2
  96. package/dist/internal/controlled-process/supervisor-runtime.js +27 -1
  97. package/dist/kernel/classify.d.ts +1 -2
  98. package/dist/kernel/classify.d.ts.map +1 -1
  99. package/dist/kernel/classify.js +1 -1
  100. package/dist/kernel/cli-agent.d.ts.map +1 -1
  101. package/dist/kernel/cli-agent.js +26 -85
  102. package/dist/kernel/cli-login.d.ts.map +1 -1
  103. package/dist/kernel/cli-login.js +9 -30
  104. package/dist/kernel/definition.d.ts +11 -2
  105. package/dist/kernel/definition.d.ts.map +1 -1
  106. package/dist/kernel/facets.d.ts +38 -1
  107. package/dist/kernel/facets.d.ts.map +1 -1
  108. package/dist/kernel/facets.js +20 -0
  109. package/dist/kernel/login.d.ts.map +1 -1
  110. package/dist/kernel/login.js +2 -1
  111. package/dist/kernel/options.d.ts +1 -1
  112. package/dist/kernel/options.d.ts.map +1 -1
  113. package/dist/kernel/run.d.ts.map +1 -1
  114. package/dist/kernel/run.js +2 -1
  115. package/dist/kernel/runtime.d.ts +10 -6
  116. package/dist/kernel/runtime.d.ts.map +1 -1
  117. package/dist/kernel/runtime.js +4 -1
  118. package/dist/kernel/session.d.ts +104 -0
  119. package/dist/kernel/session.d.ts.map +1 -0
  120. package/dist/kernel/session.js +314 -0
  121. package/dist/testing/fake-exec.d.ts +10 -5
  122. package/dist/testing/fake-exec.d.ts.map +1 -1
  123. package/dist/testing/fake-exec.js +17 -2
  124. package/dist/testing/index.d.ts +1 -1
  125. package/dist/testing/index.d.ts.map +1 -1
  126. package/dist/testing/index.js +1 -1
  127. package/package.json +2 -2
  128. package/dist/agents/claude.d.ts.map +0 -1
  129. package/dist/agents/claude.js +0 -543
  130. package/dist/agents/codex.d.ts +0 -19
  131. package/dist/agents/codex.d.ts.map +0 -1
  132. package/dist/agents/codex.js +0 -377
  133. package/dist/agents/openai-compatible/pi/session.d.ts.map +0 -1
  134. /package/dist/agents/openai-compatible/pi/{session.js → run.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"cli-login.d.ts","sourceRoot":"","sources":["../../src/kernel/cli-login.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EAIjB,KAAK,YAAY,EACjB,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAC;AAM1B,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AA8B9D,KAAK,sBAAsB,GAAG;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAC/C,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAkGF,wBAAuB,eAAe,CACpC,OAAO,EAAE,sBAAsB,GAC9B,QAAQ,CAqHV"}
1
+ {"version":3,"file":"cli-login.d.ts","sourceRoot":"","sources":["../../src/kernel/cli-login.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EAIjB,KAAK,YAAY,EACjB,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAC;AAa1B,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAsB9D,KAAK,sBAAsB,GAAG;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAC/C,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAuFF,wBAAuB,eAAe,CACpC,OAAO,EAAE,sBAAsB,GAC9B,QAAQ,CA6GV"}
@@ -1,14 +1,12 @@
1
1
  import { LOGIN_EVENT_TYPE, LOGIN_METHOD, } from "../auth/login.js";
2
2
  import { AUTH_MATERIAL_KIND, AUTH_STATUS, } from "../auth/material.js";
3
+ import { appendTail, escalateTermination, failureEvidence, RAW_OUTPUT_CAP_CHARS, resolveCommand, } from "../core/cli-child.js";
3
4
  import { applyEnvPatch } from "../core/env.js";
4
- import { AGENT_ERROR_CODE, AgentError, NOT_AVAILABLE_CAUSE, TIMEOUT_KIND, } from "../core/error.js";
5
+ import { AGENT_ERROR_CODE, AgentError, TIMEOUT_KIND } from "../core/error.js";
5
6
  import { redactSecrets } from "../core/redact.js";
6
- import { OUTPUT_CHANNEL, PROCESS_SIGNAL } from "../core/values.js";
7
+ import { OUTPUT_CHANNEL } from "../core/values.js";
7
8
  import { classifyFailure, sharedFailureMatchers } from "./classify.js";
8
9
  const DEFAULT_CLI_LOGIN_TIMEOUT_MS = 20 * 60 * 1_000;
9
- const SIGKILL_ESCALATION_MS = 5_000;
10
- const RAW_OUTPUT_CAP_CHARS = 10 * 1024 * 1024;
11
- const OUTPUT_TAIL_CHARS = 2_000;
12
10
  const SCAN_BUFFER_CHARS = 12_000;
13
11
  const MINUTE_MS = 60_000;
14
12
  // Best-effort scanners over the accumulated (ANSI-stripped) CLI output, matching
@@ -21,12 +19,6 @@ const DEVICE_CODE_PATTERN = /\b[A-Z0-9]{4,}(?:-[A-Z0-9]{4,})+\b/u;
21
19
  const URL_PATTERN = /https?:\/\/[^\s)]+/u;
22
20
  // biome-ignore lint/suspicious/noControlCharactersInRegex: strips ANSI/CSI escape sequences from colorized CLI output.
23
21
  const ANSI_PATTERN = /\x1b\[[0-?]*[ -/]*[@-~]/gu;
24
- function boundedTail(current, text, capChars) {
25
- const combined = current + text;
26
- return combined.length > capChars
27
- ? combined.slice(combined.length - capChars)
28
- : combined;
29
- }
30
22
  function stripAnsi(text) {
31
23
  return text.replace(ANSI_PATTERN, "");
32
24
  }
@@ -78,11 +70,7 @@ function loginExitError(input) {
78
70
  code: AGENT_ERROR_CODE.failed,
79
71
  classification: AgentError.agentFailure(AGENT_ERROR_CODE.failed),
80
72
  message: redactSecrets(`Login command "${command}" exited with code ${exit.code ?? "null"}${signal}`),
81
- data: {
82
- exitCode: exit.code,
83
- stdoutTail: redactSecrets(stdout.slice(-OUTPUT_TAIL_CHARS)) || null,
84
- stderrTail: redactSecrets(stderr.slice(-OUTPUT_TAIL_CHARS)) || null,
85
- },
73
+ data: failureEvidence({ stdout, stderr, exitCode: exit.code }),
86
74
  });
87
75
  }
88
76
  function homeDirOutcome(request, status) {
@@ -94,15 +82,7 @@ function homeDirOutcome(request, status) {
94
82
  export async function* cliLoginCommand(options) {
95
83
  const timeoutMs = options.timeoutMs ?? DEFAULT_CLI_LOGIN_TIMEOUT_MS;
96
84
  const env = applyEnvPatch(options.ctx.env, options.envPatch);
97
- const command = await options.ctx.exec.which(options.command, env);
98
- if (command === null) {
99
- throw new AgentError({
100
- code: AGENT_ERROR_CODE.notAvailable,
101
- classification: AgentError.agentFailure(AGENT_ERROR_CODE.notAvailable),
102
- message: `Login command "${options.command}" was not found on PATH`,
103
- data: { cause: NOT_AVAILABLE_CAUSE.notInstalled },
104
- });
105
- }
85
+ const command = await resolveCommand(options.ctx.exec, options.command, env, null);
106
86
  const child = options.ctx.exec.spawn({
107
87
  command,
108
88
  args: [...options.args],
@@ -130,8 +110,7 @@ export async function* cliLoginCommand(options) {
130
110
  return;
131
111
  }
132
112
  killed = true;
133
- child.kill(PROCESS_SIGNAL.sigterm);
134
- cancelKill.current = options.ctx.clock.setTimeout(() => child.kill(PROCESS_SIGNAL.sigkill), SIGKILL_ESCALATION_MS);
113
+ cancelKill.current = escalateTermination(child, options.ctx.clock);
135
114
  };
136
115
  const onAbort = () => escalateKill();
137
116
  const cancelTimeout = options.ctx.clock.setTimeout(() => {
@@ -147,10 +126,10 @@ export async function* cliLoginCommand(options) {
147
126
  try {
148
127
  for await (const chunk of child.chunks) {
149
128
  if (chunk.channel === OUTPUT_CHANNEL.stdout) {
150
- stdout = boundedTail(stdout, chunk.text, RAW_OUTPUT_CAP_CHARS);
129
+ stdout = appendTail(stdout, chunk.text, RAW_OUTPUT_CAP_CHARS);
151
130
  }
152
131
  else {
153
- stderr = boundedTail(stderr, chunk.text, RAW_OUTPUT_CAP_CHARS);
132
+ stderr = appendTail(stderr, chunk.text, RAW_OUTPUT_CAP_CHARS);
154
133
  }
155
134
  yield {
156
135
  type: LOGIN_EVENT_TYPE.output,
@@ -158,7 +137,7 @@ export async function* cliLoginCommand(options) {
158
137
  chunk: chunk.text,
159
138
  };
160
139
  if (!emitted) {
161
- scanBuffer = boundedTail(scanBuffer, stripAnsi(chunk.text), SCAN_BUFFER_CHARS);
140
+ scanBuffer = appendTail(scanBuffer, stripAnsi(chunk.text), SCAN_BUFFER_CHARS);
162
141
  const event = parseEvent(scanBuffer, options.ctx.clock.now());
163
142
  if (event !== null) {
164
143
  emitted = true;
@@ -11,6 +11,7 @@ import type { AgentEvent, AgentRunOutcome } from "../core/run.js";
11
11
  import type { AgentAvailabilityCapability } from "../host/availability.js";
12
12
  import type { DoctorCapability, McpCapability, SkillsCapability } from "../host/capabilities.js";
13
13
  import type { ResolvedRunOptions } from "./options.js";
14
+ import type { SessionCapability } from "./session.js";
14
15
  /** Resolved (rule 2): the adapter's whole world. */
15
16
  export type RunContext = {
16
17
  /** The ONE stop channel — caller abort, timeout, and guard violations. */
@@ -25,7 +26,12 @@ export type RunContext = {
25
26
  logger: Logger;
26
27
  };
27
28
  export type AgentRun = AsyncGenerator<AgentEvent, AgentRunOutcome, void>;
28
- export interface AgentDefinition<Id extends string = string> {
29
+ /**
30
+ * `SessionPermissions` is the host-specific permission shape a session is
31
+ * opened with (`ClaudeSessionPermissions`, `CodexSessionPermissions`); it
32
+ * stays a type parameter so the neutral `Sandbox` never learns host words.
33
+ */
34
+ export interface AgentDefinition<Id extends string = string, SessionPermissions = unknown> {
29
35
  id: Id;
30
36
  run(options: ResolvedRunOptions, ctx: RunContext): AgentRun;
31
37
  availability?: AgentAvailabilityCapability;
@@ -34,10 +40,13 @@ export interface AgentDefinition<Id extends string = string> {
34
40
  doctor?: DoctorCapability;
35
41
  skills?: SkillsCapability;
36
42
  mcp?: McpCapability;
43
+ session?: SessionCapability<SessionPermissions>;
37
44
  }
45
+ /** The session permission type a definition declares (`unknown` when it has no session facet). */
46
+ export type SessionPermissionsOf<Definition> = Definition extends AgentDefinition<string, infer Permissions> ? Permissions : unknown;
38
47
  /**
39
48
  * Identity helper for hand-rolled agents: pins the `Id` literal and
40
49
  * type-checks the definition in place. No runtime behavior.
41
50
  */
42
- export declare function defineAgent<const Id extends string>(definition: AgentDefinition<Id>): AgentDefinition<Id>;
51
+ export declare function defineAgent<const Id extends string, SessionPermissions = unknown>(definition: AgentDefinition<Id, SessionPermissions>): AgentDefinition<Id, SessionPermissions>;
43
52
  //# sourceMappingURL=definition.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/kernel/definition.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,oDAAoD;AACpD,MAAM,MAAM,UAAU,GAAG;IACvB,0EAA0E;IAC1E,MAAM,EAAE,WAAW,CAAC;IACpB,yDAAyD;IACzD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,2EAA2E;IAC3E,KAAK,EAAE,KAAK,CAAC;IACb,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,cAAc,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;AAEzE,MAAM,WAAW,eAAe,CAAC,EAAE,SAAS,MAAM,GAAG,MAAM;IACzD,EAAE,EAAE,EAAE,CAAC;IACP,GAAG,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC5D,YAAY,CAAC,EAAE,2BAA2B,CAAC;IAC3C,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,GAAG,CAAC,EAAE,aAAa,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EACjD,UAAU,EAAE,eAAe,CAAC,EAAE,CAAC,GAC9B,eAAe,CAAC,EAAE,CAAC,CAErB"}
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/kernel/definition.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,oDAAoD;AACpD,MAAM,MAAM,UAAU,GAAG;IACvB,0EAA0E;IAC1E,MAAM,EAAE,WAAW,CAAC;IACpB,yDAAyD;IACzD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,2EAA2E;IAC3E,KAAK,EAAE,KAAK,CAAC;IACb,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,cAAc,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;AAEzE;;;;GAIG;AACH,MAAM,WAAW,eAAe,CAC9B,EAAE,SAAS,MAAM,GAAG,MAAM,EAC1B,kBAAkB,GAAG,OAAO;IAE5B,EAAE,EAAE,EAAE,CAAC;IACP,GAAG,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC5D,YAAY,CAAC,EAAE,2BAA2B,CAAC;IAC3C,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,OAAO,CAAC,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;CACjD;AAED,kGAAkG;AAClG,MAAM,MAAM,oBAAoB,CAAC,UAAU,IACzC,UAAU,SAAS,eAAe,CAAC,MAAM,EAAE,MAAM,WAAW,CAAC,GACzD,WAAW,GACX,OAAO,CAAC;AAEd;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,CAAC,EAAE,SAAS,MAAM,EACvB,kBAAkB,GAAG,OAAO,EAE5B,UAAU,EAAE,eAAe,CAAC,EAAE,EAAE,kBAAkB,CAAC,GAClD,eAAe,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAEzC"}
@@ -6,11 +6,13 @@
6
6
  */
7
7
  import { type LoginCapability, type LoginHandle, type LoginMethod, type LoginRequest } from "../auth/login.js";
8
8
  import type { AuthCapability, AuthMaterial, AuthMaterialDescriptor, AuthMaterialKind, AuthStatus } from "../auth/material.js";
9
- import type { EnvPatch } from "../core/env.js";
9
+ import { type EnvPatch } from "../core/env.js";
10
10
  import type { Clock, Exec, HttpClient, Logger, SecretResolvers } from "../core/ports.js";
11
+ import type { Session, SessionFacts } from "../core/session.js";
11
12
  import type { AgentAvailability, AgentAvailabilityCapability } from "../host/availability.js";
12
13
  import type { DoctorCapability, DoctorReport, InstalledSkill, InstallOptions, InstallOutcome, McpCapability, McpScope, McpServerSpec, McpServerState, SkillSource, SkillsCapability } from "../host/capabilities.js";
13
14
  import type { HostLocation } from "../host/context.js";
15
+ import type { SessionCapability } from "./session.js";
14
16
  export type AgentAuth = {
15
17
  supports(kind: AuthMaterialKind): boolean;
16
18
  /** Supported material kinds in canonical order (empty if none). */
@@ -45,6 +47,40 @@ export type AgentMcp = {
45
47
  scope: McpScope;
46
48
  }): Promise<void>;
47
49
  };
50
+ /** Call-site input (rule 1): `env` patches the runtime's base environment. */
51
+ export type SessionOpenOptions<Permissions> = {
52
+ workspace: string;
53
+ permissions: Permissions;
54
+ env?: EnvPatch;
55
+ };
56
+ export type SessionResumeOptions<Permissions> = SessionOpenOptions<Permissions> & {
57
+ /**
58
+ * Codex only (Claude has no archive): when `true`, an archived thread is
59
+ * `thread/unarchive`d before `thread/resume`, which also moves it back into
60
+ * the ChatGPT app's active list. Default `false`: resuming an archived
61
+ * thread fails with the server's "is archived" message; check
62
+ * `inspect(id).archived` first.
63
+ */
64
+ unarchive?: boolean;
65
+ };
66
+ export type AgentSessions<Permissions> = {
67
+ /**
68
+ * Start a new conversation in `workspace`. Codex note: `thread/start`
69
+ * with a writable sandbox (`workspace-write`, `danger-full-access`) makes
70
+ * Codex append a `trust_level` entry for the workspace to
71
+ * `~/.codex/config.toml`; `read-only` does not (T53/T57, codex 0.153.4).
72
+ */
73
+ open(options: SessionOpenOptions<Permissions>): Promise<Session>;
74
+ /**
75
+ * Take over an existing conversation by the host's id. Permissions are
76
+ * always passed explicitly — hosts do not reliably restore the original
77
+ * ones (Codex `thread/resume` without `sandbox` ran as danger-full-access).
78
+ * An archived Codex thread is unarchived only when `unarchive: true`.
79
+ */
80
+ resume(id: string, options: SessionResumeOptions<Permissions>): Promise<Session>;
81
+ /** Read the host's own files about a conversation; `null` when it has none. */
82
+ inspect(id: string, location: HostLocation): Promise<SessionFacts<Permissions> | null>;
83
+ };
48
84
  export type FacetBinding = {
49
85
  agentId: string;
50
86
  env: Record<string, string>;
@@ -59,5 +95,6 @@ export declare function bindAvailability(capability: AgentAvailabilityCapability
59
95
  export declare function bindLogin(capability: LoginCapability, binding: FacetBinding): AgentLogin;
60
96
  export declare function bindDoctor(capability: DoctorCapability, binding: FacetBinding): AgentDoctor;
61
97
  export declare function bindSkills(capability: SkillsCapability, binding: FacetBinding): AgentSkills;
98
+ export declare function bindSessions<Permissions>(capability: SessionCapability<Permissions>, binding: FacetBinding): AgentSessions<Permissions>;
62
99
  export declare function bindMcp(capability: McpCapability, binding: FacetBinding): AgentMcp;
63
100
  //# sourceMappingURL=facets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"facets.d.ts","sourceRoot":"","sources":["../../src/kernel/facets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"facets.d.ts","sourceRoot":"","sources":["../../src/kernel/facets.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@
6
6
  */
7
7
  import { LOGIN_METHOD, } from "../auth/login.js";
8
8
  import { AUTH_MATERIAL_KIND, AUTH_STATUS, authMaterialRequiresSecret, } from "../auth/material.js";
9
+ import { applyEnvPatch, EMPTY_ENV_PATCH } from "../core/env.js";
9
10
  import { AGENT_ERROR_CODE, AgentError } from "../core/error.js";
10
11
  import { resolveHostLocation } from "../host/context.js";
11
12
  import { validateSpecSecrets } from "../host/validate-spec.js";
@@ -83,6 +84,25 @@ export function bindSkills(capability, binding) {
83
84
  },
84
85
  };
85
86
  }
87
+ export function bindSessions(capability, binding) {
88
+ const context = (options) => ({
89
+ env: applyEnvPatch(binding.env, options.env ?? EMPTY_ENV_PATCH),
90
+ exec: binding.exec,
91
+ clock: binding.clock,
92
+ logger: {
93
+ log: (level, message, data) => binding.logger.log(level, `[session ${binding.agentId}] ${message}`, data),
94
+ },
95
+ });
96
+ const resolved = (options) => ({
97
+ workspace: options.workspace,
98
+ permissions: options.permissions,
99
+ });
100
+ return {
101
+ open: (options) => capability.open(resolved(options), context(options)),
102
+ resume: (id, options) => capability.resume(id, { ...resolved(options), unarchive: options.unarchive ?? false }, context(options)),
103
+ inspect: (id, location) => capability.inspect(id, hostContext(binding, location)),
104
+ };
105
+ }
86
106
  export function bindMcp(capability, binding) {
87
107
  return {
88
108
  list: (location) => capability.list(hostContext(binding, location)),
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/kernel/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,WAAW,EACX,YAAY,EAEZ,YAAY,EACb,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,KAAK,eAAe,GAAG;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,oEAAoE;IACpE,QAAQ,CAAC,YAAY,EAAE,WAAW,GAAG,IAAI,CAAC;CAC3C,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,WAAW,CAW9D"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/kernel/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,WAAW,EACX,YAAY,EAEZ,YAAY,EACb,MAAM,kBAAkB,CAAC;AAI1B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,KAAK,eAAe,GAAG;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,oEAAoE;IACpE,QAAQ,CAAC,YAAY,EAAE,WAAW,GAAG,IAAI,CAAC;CAC3C,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,WAAW,CAW9D"}
@@ -1,3 +1,4 @@
1
+ import { NO_FAILURE_EVIDENCE } from "../core/cli-child.js";
1
2
  import { AGENT_ERROR_CODE, AgentError, isAgentError } from "../core/error.js";
2
3
  import { redactSecrets } from "../core/redact.js";
3
4
  import { EventBroadcast } from "./handle.js";
@@ -59,7 +60,7 @@ function toLoginError(agentId, thrown) {
59
60
  code: AGENT_ERROR_CODE.failed,
60
61
  classification: AgentError.agentFailure(AGENT_ERROR_CODE.failed),
61
62
  message: redactSecrets(message),
62
- data: { exitCode: null, stdoutTail: null, stderrTail: null },
63
+ data: NO_FAILURE_EVIDENCE,
63
64
  cause: thrown,
64
65
  agentId,
65
66
  });
@@ -3,8 +3,8 @@
3
3
  * normalized exactly once into the resolved twins (rule 2) — agent
4
4
  * definitions only ever see the resolved types.
5
5
  */
6
- import { type EnvPatch } from "../core/env.js";
7
6
  import type { ChildProcessLifecycle, ControlledExec } from "../core/controlled-process.js";
7
+ import { type EnvPatch } from "../core/env.js";
8
8
  import type { GuardFactory } from "./guard.js";
9
9
  export declare const GRANT_KIND: {
10
10
  readonly shell: "shell";
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/kernel/options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/kernel/options.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/kernel/run.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,OAAO,KAAK,EAAU,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,KAAK,EAIV,SAAS,EAEV,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,eAAe,EAAc,MAAM,iBAAiB,CAAC;AAGnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAUvD,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,eAAe,CAAC;IAC5B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,YAAY,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AA0RF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,CAExD"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/kernel/run.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,OAAO,KAAK,EAAU,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,KAAK,EAIV,SAAS,EAEV,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,eAAe,EAAc,MAAM,iBAAiB,CAAC;AAGnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAUvD,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,eAAe,CAAC;IAC5B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,YAAY,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AA0RF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,CAExD"}
@@ -6,6 +6,7 @@
6
6
  * stop on abort.
7
7
  */
8
8
  import { randomUUID } from "node:crypto";
9
+ import { NO_FAILURE_EVIDENCE } from "../core/cli-child.js";
9
10
  import { AGENT_ERROR_CODE, AgentError, isAgentError, TIMEOUT_KIND, withRunIdentity, } from "../core/error.js";
10
11
  import { redactSecrets } from "../core/redact.js";
11
12
  import { RUN_EVENT_TYPE, RUN_OUTCOME } from "../core/run.js";
@@ -245,7 +246,7 @@ class RunDriver {
245
246
  code: AGENT_ERROR_CODE.failed,
246
247
  classification: AgentError.agentFailure(AGENT_ERROR_CODE.failed),
247
248
  message: redactSecrets(message),
248
- data: { exitCode: null, stdoutTail: null, stderrTail: null },
249
+ data: NO_FAILURE_EVIDENCE,
249
250
  cause: thrown,
250
251
  ...this.identity(),
251
252
  });
@@ -7,10 +7,10 @@
7
7
  import { type Ports } from "../core/ports.js";
8
8
  import type { RunHandle } from "../core/run.js";
9
9
  import { type StructuredHandle, type StructuredRunOptions } from "../structured/run-structured.js";
10
- import type { AgentDefinition } from "./definition.js";
11
- import { type AgentAuth, type AgentAvailabilityProbe, type AgentDoctor, type AgentLogin, type AgentMcp, type AgentSkills } from "./facets.js";
10
+ import type { AgentDefinition, SessionPermissionsOf } from "./definition.js";
11
+ import { type AgentAuth, type AgentAvailabilityProbe, type AgentDoctor, type AgentLogin, type AgentMcp, type AgentSessions, type AgentSkills } from "./facets.js";
12
12
  import { type RunOptions } from "./options.js";
13
- export interface Agent<Id extends string = string> {
13
+ export interface Agent<Id extends string = string, SessionPermissions = unknown> {
14
14
  readonly id: Id;
15
15
  run<T>(options: StructuredRunOptions<T>): StructuredHandle<T>;
16
16
  run(options: RunOptions): RunHandle;
@@ -21,9 +21,13 @@ export interface Agent<Id extends string = string> {
21
21
  skills: AgentSkills | null;
22
22
  mcp: AgentMcp | null;
23
23
  doctor: AgentDoctor | null;
24
+ /** Long-lived conversations; `null` when the definition has no session facet. */
25
+ session: AgentSessions<SessionPermissions> | null;
24
26
  }
25
- export interface AgentRuntime<Id extends string = string> {
26
- agent<I extends Id>(id: I): Agent<I>;
27
+ export interface AgentRuntime<Id extends string = string, Defs extends readonly AgentDefinition[] = readonly AgentDefinition<Id>[]> {
28
+ agent<I extends Id>(id: I): Agent<I, SessionPermissionsOf<Extract<Defs[number], {
29
+ id: I;
30
+ }>>>;
27
31
  agents(): Agent<Id>[];
28
32
  /** The resolved ports — composition layers (fleet) reuse these. */
29
33
  readonly ports: Ports;
@@ -45,5 +49,5 @@ export type AgentRuntimeOptions<Defs extends readonly AgentDefinition[]> = {
45
49
  * resolver, so registering "keychain" never silently drops "env".
46
50
  */
47
51
  export declare function resolvePorts(ports?: Partial<Ports>): Ports;
48
- export declare function createAgentRuntime<const Defs extends readonly AgentDefinition[]>(options: AgentRuntimeOptions<Defs>): AgentRuntime<Defs[number]["id"]>;
52
+ export declare function createAgentRuntime<const Defs extends readonly AgentDefinition[]>(options: AgentRuntimeOptions<Defs>): AgentRuntime<Defs[number]["id"], Defs>;
49
53
  //# sourceMappingURL=runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/kernel/runtime.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAA6B,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EAE1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EACL,KAAK,SAAS,EACd,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,WAAW,EAQjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,UAAU,EAAqB,MAAM,cAAc,CAAC;AAGlE,MAAM,WAAW,KAAK,CAAC,EAAE,SAAS,MAAM,GAAG,MAAM;IAC/C,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAChB,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC9D,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,CAAC;IACpC,GAAG,CAAC,CAAC,EACH,OAAO,EAAE,UAAU,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAC5C,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACnC,YAAY,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC5C,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY,CAAC,EAAE,SAAS,MAAM,GAAG,MAAM;IACtD,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IACtB,mEAAmE;IACnE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB;AAED,MAAM,MAAM,mBAAmB,CAAC,IAAI,SAAS,SAAS,eAAe,EAAE,IAAI;IACzE,MAAM,EAAE,IAAI,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACvB;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAS1D;AAyED,wBAAgB,kBAAkB,CAChC,KAAK,CAAC,IAAI,SAAS,SAAS,eAAe,EAAE,EAC7C,OAAO,EAAE,mBAAmB,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAoCtE"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/kernel/runtime.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAA6B,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EAE1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EACL,KAAK,SAAS,EACd,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,WAAW,EASjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,UAAU,EAAqB,MAAM,cAAc,CAAC;AAGlE,MAAM,WAAW,KAAK,CACpB,EAAE,SAAS,MAAM,GAAG,MAAM,EAC1B,kBAAkB,GAAG,OAAO;IAE5B,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAChB,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC9D,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,CAAC;IACpC,GAAG,CAAC,CAAC,EACH,OAAO,EAAE,UAAU,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAC5C,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACnC,YAAY,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC5C,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,iFAAiF;IACjF,OAAO,EAAE,aAAa,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC;CACnD;AAED,MAAM,WAAW,YAAY,CAC3B,EAAE,SAAS,MAAM,GAAG,MAAM,EAC1B,IAAI,SAAS,SAAS,eAAe,EAAE,GAAG,SAAS,eAAe,CAAC,EAAE,CAAC,EAAE;IAExE,KAAK,CAAC,CAAC,SAAS,EAAE,EAChB,EAAE,EAAE,CAAC,GACJ,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,EAAE,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IACtB,mEAAmE;IACnE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB;AAED,MAAM,MAAM,mBAAmB,CAAC,IAAI,SAAS,SAAS,eAAe,EAAE,IAAI;IACzE,MAAM,EAAE,IAAI,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACvB;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAS1D;AA6ED,wBAAgB,kBAAkB,CAChC,KAAK,CAAC,IAAI,SAAS,SAAS,eAAe,EAAE,EAC7C,OAAO,EAAE,mBAAmB,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAwC5E"}
@@ -10,7 +10,7 @@ import { AGENT_ERROR_CODE, AgentError } from "../core/error.js";
10
10
  import { fetchHttp, nodeExec, systemClock } from "../core/node-ports.js";
11
11
  import { noopLogger, noopTelemetry } from "../core/ports.js";
12
12
  import { isStructuredRunOptions, resolveStructuredRunOptions, startStructuredRun, } from "../structured/run-structured.js";
13
- import { bindAuth, bindAvailability, bindDoctor, bindLogin, bindMcp, bindSkills, } from "./facets.js";
13
+ import { bindAuth, bindAvailability, bindDoctor, bindLogin, bindMcp, bindSessions, bindSkills, } from "./facets.js";
14
14
  import { resolveRunOptions } from "./options.js";
15
15
  import { startRun } from "./run.js";
16
16
  /**
@@ -77,6 +77,9 @@ function bindAgent(definition, ports, baseEnv) {
77
77
  doctor: definition.doctor === undefined
78
78
  ? null
79
79
  : bindDoctor(definition.doctor, binding),
80
+ session: definition.session === undefined
81
+ ? null
82
+ : bindSessions(definition.session, binding),
80
83
  };
81
84
  }
82
85
  export function createAgentRuntime(options) {
@@ -0,0 +1,104 @@
1
+ /**
2
+ * The session driver (design "Kernel", session plane): as `RunDriver`
3
+ * drives an adapter's generator, `driveSession` drives a host's
4
+ * `SessionProtocol`. The driver owns the conversation's lifecycle — one
5
+ * turn at a time, the approval registry and its lifetime, the event
6
+ * stream, and the end of it all when the child is gone. A protocol only
7
+ * encodes the five verbs for its host and decodes one incoming item into
8
+ * the neutral session signals; it never keeps turn or approval state.
9
+ */
10
+ import { AGENT_ERROR_CODE, AgentError } from "../core/error.js";
11
+ import type { Clock, Exec, ExecExit, Logger } from "../core/ports.js";
12
+ import { type ApprovalDecision, type Session, type SessionFacts, type TurnOutcome } from "../core/session.js";
13
+ import type { HostContext } from "../host/context.js";
14
+ /** Resolved (rule 2): what a session adapter gets to open or resume. */
15
+ export type SessionContext = {
16
+ /** Fully layered: baseEnv → options.env. */
17
+ env: Record<string, string>;
18
+ exec: Exec;
19
+ clock: Clock;
20
+ /** Pre-scoped to the session by the kernel. */
21
+ logger: Logger;
22
+ };
23
+ export type ResolvedSessionOpenOptions<Permissions> = {
24
+ workspace: string;
25
+ permissions: Permissions;
26
+ };
27
+ export type ResolvedSessionResumeOptions<Permissions> = ResolvedSessionOpenOptions<Permissions> & {
28
+ /** Codex only: unarchive an archived thread before resuming it. */
29
+ unarchive: boolean;
30
+ };
31
+ /** Definition-side session capability; absent = `Agent.session` is `null`. */
32
+ export type SessionCapability<Permissions> = {
33
+ open(options: ResolvedSessionOpenOptions<Permissions>, ctx: SessionContext): Promise<Session>;
34
+ resume(id: string, options: ResolvedSessionResumeOptions<Permissions>, ctx: SessionContext): Promise<Session>;
35
+ inspect(id: string, ctx: HostContext): Promise<SessionFacts<Permissions> | null>;
36
+ };
37
+ /** What a protocol's `decode` may tell the driver about the running turn. */
38
+ export type SessionSink<Payload> = {
39
+ /** The turn the driver currently holds; `null` between turns. */
40
+ readonly activeTurnId: string | null;
41
+ message(text: string): void;
42
+ tool(name: string): void;
43
+ /** `payload` is whatever the host needs back to answer this request. */
44
+ approvalRequested(requestId: string, summary: string, payload: Payload): void;
45
+ /** `text === null` falls back to the turn's collected messages. */
46
+ endTurn(outcome: TurnOutcome, text: string | null): void;
47
+ };
48
+ /**
49
+ * A host's side of a Session: the encoding of each verb and the decoding
50
+ * of one incoming item. `incoming` ends when the child is gone; a
51
+ * protocol that correlates its own request/response pairs (Claude control
52
+ * requests) settles them inside `incoming`, before it ends.
53
+ */
54
+ export interface SessionProtocol<Incoming, Payload> {
55
+ readonly incoming: AsyncIterable<Incoming>;
56
+ /** Settles when the child is gone; a rejection counts as an exit without code or signal. */
57
+ readonly exit: Promise<ExecExit>;
58
+ readonly stderrTail: string;
59
+ /** Ask the host to take a turn; resolves with the turn id once it has. */
60
+ startTurn(text: string): Promise<string>;
61
+ steer(turnId: string, text: string): Promise<void>;
62
+ interrupt(turnId: string): Promise<void>;
63
+ respond(payload: Payload, decision: ApprovalDecision): void;
64
+ decode(item: Incoming, sink: SessionSink<Payload>): void;
65
+ /** End the child: stdin EOF first, then signals. */
66
+ close(): Promise<void>;
67
+ }
68
+ export declare function assertHostSessionId(id: string, agentId: string): void;
69
+ export declare function sessionStateError(agentId: string, reason: string): AgentError<typeof AGENT_ERROR_CODE.invalidInput>;
70
+ export declare function sessionExitedError(agentId: string, exit: ExecExit | null, stderrTail: string): AgentError<typeof AGENT_ERROR_CODE.failed>;
71
+ /**
72
+ * One interactive child held for the life of a Session: stdout is read as
73
+ * NDJSON lines, stdin stays open for incremental writes, and `close()`
74
+ * ends stdin first (both hosts exit on EOF) before escalating to signals.
75
+ */
76
+ export declare class SessionProcess {
77
+ private readonly process;
78
+ private readonly clock;
79
+ private exitValue;
80
+ private stderrTail;
81
+ private constructor();
82
+ static spawn(input: {
83
+ command: string;
84
+ args: readonly string[];
85
+ cwd: string;
86
+ ctx: SessionContext;
87
+ agentId: string;
88
+ }): Promise<SessionProcess>;
89
+ get exit(): Promise<ExecExit>;
90
+ get exited(): ExecExit | null;
91
+ get stderr(): string;
92
+ writeLine(line: string): void;
93
+ /** Non-empty stdout lines in order; stderr is kept as a tail for errors. */
94
+ lines(): AsyncGenerator<string, void, void>;
95
+ close(): Promise<ExecExit>;
96
+ }
97
+ /** Bind a host protocol to the one Session lifecycle. */
98
+ export declare function driveSession<Incoming, Payload>(input: {
99
+ id: string;
100
+ agentId: string;
101
+ protocol: SessionProtocol<Incoming, Payload>;
102
+ logger: Logger;
103
+ }): Session;
104
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/kernel/session.ts"],"names":[],"mappings":"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"}