@tokenfactory/acc-runner 0.40.20 → 0.40.22

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.
@@ -119,6 +119,51 @@ export interface ReportProbeDeps {
119
119
  * CompanionRunner's registration-persist catch can log it (best-effort).
120
120
  */
121
121
  export declare function reportIdentityProbe(deps: ReportProbeDeps, payload: ProbeReportPayload): Promise<void>;
122
+ /**
123
+ * AUTO-ENROLL: self-enroll the companion's identity on first
124
+ * start when discovery found NONE. Terminal login IS the setup — a valid ACC
125
+ * session + a working engine credential probe + zero matches ⇒ the companion
126
+ * POSTs to /api/identities/auto-enroll, which (subject to the org
127
+ * auto_enroll_on_login toggle) auto-creates the owner-bound companion identity and
128
+ * returns it. The caller then binds it exactly like a discovered match and reports
129
+ * the chat-auth probe. Pure + fetch-injected like the rest of this module.
130
+ */
131
+ export interface AutoEnrollDeps {
132
+ publicUrl: string;
133
+ accessToken: string;
134
+ fetchImpl?: typeof fetch;
135
+ }
136
+ /** What the runner tells the server about the identity to auto-create. */
137
+ export interface AutoEnrollInput {
138
+ provider: string;
139
+ engine: string;
140
+ runnerId: string;
141
+ /** Probed credential tier (non-secret) — the companion only calls this when ok. */
142
+ tier?: string | null;
143
+ /** Auto-adopt-detected fueling account, for the enrollment notice. */
144
+ accountEmail?: string | null;
145
+ /** The machine (hostname) the companion runs on, for the notice text. */
146
+ machine?: string | null;
147
+ }
148
+ /** The outcome of an auto-enroll attempt. */
149
+ export type AutoEnrollResult = {
150
+ enrolled: true;
151
+ identityId: string;
152
+ identity: DiscoveredIdentity | null;
153
+ /** True when an existing pending/active identity was adopted vs freshly created. */
154
+ adopted: boolean;
155
+ } | {
156
+ enrolled: false;
157
+ /** disabled ⇒ org toggle OFF; unreachable/error ⇒ transient — stay UNBOUND. */
158
+ reason: "disabled" | "unreachable" | "error";
159
+ detail?: string;
160
+ };
161
+ /**
162
+ * POST /api/identities/auto-enroll to self-enroll the companion's identity. Never
163
+ * throws — a network/HTTP error degrades to `{ enrolled: false, reason }` so the
164
+ * companion falls back to the honest UNBOUND banner rather than crashing on start.
165
+ */
166
+ export declare function autoEnrollCompanionIdentity(deps: AutoEnrollDeps, input: AutoEnrollInput): Promise<AutoEnrollResult>;
122
167
  /** The env var whose presence overrides self-discovery with an explicit id. */
123
168
  export declare const COMPANION_IDENTITY_OVERRIDE_HINT = "ACC_RUNNER_COMPANION_IDENTITY";
124
169
  export type BannerTone = "ok" | "warn";
@@ -1 +1 @@
1
- {"version":3,"file":"companion-identity.d.ts","sourceRoot":"","sources":["../src/companion-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,+DAA+D;AAC/D,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,mFAAmF;AACnF,MAAM,WAAW,gBAAgB;IAC/B,wFAAwF;IACxF,SAAS,EAAE,OAAO,CAAC;IACnB,gFAAgF;IAChF,SAAS,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qCAAqC;AACrC,MAAM,MAAM,eAAe,GACvB;IACE,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACpC,MAAM,EAAE,WAAW,GAAG,UAAU,CAAC;CAClC,GACD;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,eAAe,GAAG,UAAU,GAAG,aAAa,CAAC;IACrD,sEAAsE;IACtE,OAAO,EAAE,kBAAkB,EAAE,CAAC;CAC/B,CAAC;AAEN;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAWtE;AAED,wEAAwE;AACxE,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAUD;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAyC/F;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAClC,eAAe,CAiBjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,yEAAyE;AACzE,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED,+EAA+E;AAC/E,eAAO,MAAM,gCAAgC,kCAAkC,CAAC;AAEhF,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,MAAM,CAAC;AAEvC,8EAA8E;AAC9E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAQD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,eAAe,EACxB,GAAG,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GACrB,eAAe,CAqCjB"}
1
+ {"version":3,"file":"companion-identity.d.ts","sourceRoot":"","sources":["../src/companion-identity.ts"],"names":[],"mappings":"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"}
@@ -145,6 +145,60 @@ export async function reportIdentityProbe(deps, payload) {
145
145
  throw new Error(`probe report HTTP ${res.status}`);
146
146
  }
147
147
  }
148
+ /**
149
+ * POST /api/identities/auto-enroll to self-enroll the companion's identity. Never
150
+ * throws — a network/HTTP error degrades to `{ enrolled: false, reason }` so the
151
+ * companion falls back to the honest UNBOUND banner rather than crashing on start.
152
+ */
153
+ export async function autoEnrollCompanionIdentity(deps, input) {
154
+ const url = `${(deps.publicUrl ?? "").replace(/\/+$/, "")}/api/identities/auto-enroll`;
155
+ const f = deps.fetchImpl ?? fetch;
156
+ let res;
157
+ try {
158
+ res = await f(url, {
159
+ method: "POST",
160
+ headers: {
161
+ "Content-Type": "application/json",
162
+ Authorization: `Bearer ${deps.accessToken}`,
163
+ },
164
+ body: JSON.stringify({
165
+ provider: input.provider,
166
+ engine: input.engine,
167
+ runner_id: input.runnerId,
168
+ tier: input.tier ?? undefined,
169
+ account_email: input.accountEmail ?? undefined,
170
+ machine: input.machine ?? undefined,
171
+ }),
172
+ });
173
+ }
174
+ catch (err) {
175
+ return { enrolled: false, reason: "unreachable", detail: err.message };
176
+ }
177
+ if (!res.ok) {
178
+ return { enrolled: false, reason: "error", detail: `auto-enroll HTTP ${res.status}` };
179
+ }
180
+ const json = (await res.json().catch(() => null));
181
+ if (!json || json.ok !== true) {
182
+ return { enrolled: false, reason: "error", detail: "malformed auto-enroll response" };
183
+ }
184
+ if (json.enrolled !== true) {
185
+ const reason = json.reason === "disabled" ? "disabled" : "error";
186
+ return { enrolled: false, reason, detail: json.reason };
187
+ }
188
+ const row = json.identity && typeof json.identity === "object" ? json.identity : null;
189
+ const identityId = String(row?.id ?? "");
190
+ if (!identityId) {
191
+ return { enrolled: false, reason: "error", detail: "auto-enroll returned no identity id" };
192
+ }
193
+ const identity = {
194
+ id: identityId,
195
+ provider: String(row?.provider ?? input.provider),
196
+ engine: String(row?.engine ?? input.engine),
197
+ status: String(row?.status ?? "active"),
198
+ lastProbeAt: typeof row?.last_probe_at === "string" ? row.last_probe_at : null,
199
+ };
200
+ return { enrolled: true, identityId, identity, adopted: json.adopted === true };
201
+ }
148
202
  /** The env var whose presence overrides self-discovery with an explicit id. */
149
203
  export const COMPANION_IDENTITY_OVERRIDE_HINT = "ACC_RUNNER_COMPANION_IDENTITY";
150
204
  function identityLabel(identity) {
@@ -1 +1 @@
1
- {"version":3,"file":"companion-identity.js","sourceRoot":"","sources":["../src/companion-identity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"companion-identity.js","sourceRoot":"","sources":["../src/companion-identity.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"companion-run.d.ts","sourceRoot":"","sources":["../src/companion-run.ts"],"names":[],"mappings":"AAqDA,gFAAgF;AAChF,MAAM,WAAW,eAAe;IAC9B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,kCAAkC,CAAC;AAEtE;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,eAAe,CAAC,CAqUjE;AAED,+DAA+D;AAC/D,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAmB5D;AAED,8DAA8D;AAC9D,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAK7D;AAED,wCAAwC;AACxC,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAK/D"}
1
+ {"version":3,"file":"companion-run.d.ts","sourceRoot":"","sources":["../src/companion-run.ts"],"names":[],"mappings":"AAuDA,gFAAgF;AAChF,MAAM,WAAW,eAAe;IAC9B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,kCAAkC,CAAC;AAEtE;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,eAAe,CAAC,CA2XjE;AAED,+DAA+D;AAC/D,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAmB5D;AAED,8DAA8D;AAC9D,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAK7D;AAED,wCAAwC;AACxC,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAK/D"}
@@ -20,8 +20,9 @@ import { ChatCircuitBreaker, getChatCircuit } from "./runtime/chat-circuit-break
20
20
  import { CompanionMirrorSocket } from "./companion-mirror-socket.js";
21
21
  import { CompanionRunner, OwnerConversationSource, backfillActiveConversations, createConversationListener, createIdentityBroadcaster, deriveMirrorToken, resolveCompanionConfig, } from "./companion.js";
22
22
  import { companionStatusLine, defaultAutostartHost, installAutostart, uninstallAutostart, } from "./companion-autostart.js";
23
- import { companionBanner, discoverCompanionIdentities, providerForEngine, reportIdentityProbe, resolveBinding, } from "./companion-identity.js";
23
+ import { autoEnrollCompanionIdentity, companionBanner, discoverCompanionIdentities, providerForEngine, reportIdentityProbe, resolveBinding, } from "./companion-identity.js";
24
24
  import { PACKAGE_VERSION } from "./pkg-version.js";
25
+ import { hostname } from "node:os";
25
26
  /**
26
27
  * Optional OVERRIDE naming the acc.ai_identities row this companion serves. The
27
28
  * default is self-discovery (see companion-identity.ts) — this env var only
@@ -116,7 +117,46 @@ export async function companionCommand() {
116
117
  "token (likely expired). Run `acc-runner login` again; refusing to come " +
117
118
  "online on a dead session.");
118
119
  }
119
- const binding = resolveBinding(discovery, override);
120
+ let binding = resolveBinding(discovery, override);
121
+ // AUTO-ENROLL: terminal login IS the setup. When discovery
122
+ // found NO enrollment for this owner + engine, and the engine credential probe
123
+ // WORKS, self-enroll the owner-bound companion identity in this one startup —
124
+ // no UI step. Gated server-side by the org auto_enroll_on_login toggle (default
125
+ // ON); OFF ⇒ the server returns enrolled:false and we keep the honest UNBOUND
126
+ // banner (today's "enroll in Admin" behaviour). An override or a `multiple`/
127
+ // `unreachable` unbound state is left untouched — auto-enroll only fills the
128
+ // zero-match gap. Best-effort: any failure keeps the companion coming online
129
+ // UNBOUND rather than blocking start.
130
+ if (binding.kind === "unbound" && binding.reason === "no_enrollment") {
131
+ const probe = await engine.credentialProbe().catch(() => null);
132
+ if (probe?.ok) {
133
+ const account = await engine.accountIdentity?.().catch(() => null);
134
+ const outcome = await autoEnrollCompanionIdentity({ publicUrl: cfg.publicUrl, accessToken: session.access_token }, {
135
+ provider: providerForEngine(engine.id) ?? "",
136
+ engine: engine.id,
137
+ runnerId: session.runner_id,
138
+ tier: probe.tier,
139
+ accountEmail: account?.account_email ?? null,
140
+ machine: hostname(),
141
+ });
142
+ if (outcome.enrolled) {
143
+ binding = {
144
+ kind: "bound",
145
+ identityId: outcome.identityId,
146
+ identity: outcome.identity,
147
+ source: "discovery",
148
+ };
149
+ console.log(chalk.green(`[acc-runner] auto-enrolled companion identity ${outcome.identityId}` +
150
+ `${outcome.adopted ? " (adopted pending enrollment)" : ""} — terminal login is the setup`));
151
+ }
152
+ else if (outcome.reason === "disabled") {
153
+ console.log(chalk.gray("[acc-runner] auto-enroll is off for this org — staying UNBOUND (enroll in Admin ▸ AI providers)"));
154
+ }
155
+ else {
156
+ console.log(chalk.yellow(`[acc-runner] auto-enroll did not complete (${outcome.reason}${outcome.detail ? `: ${outcome.detail}` : ""}) — staying UNBOUND`));
157
+ }
158
+ }
159
+ }
120
160
  const identityId = binding.kind === "bound" ? binding.identityId : undefined;
121
161
  // CHAT-LANE-BRIDGE: when bound, start() persists the runner_ids binding + probe
122
162
  // tier onto the row via POST /api/identities/probe, so provider-status can
@@ -1 +1 @@
1
- {"version":3,"file":"companion-run.js","sourceRoot":"","sources":["../src/companion-run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"companion-run.js","sourceRoot":"","sources":["../src/companion-run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import type { ChatLaneTransport, ChatTurnDriveResult, ClaimedChatTurn } from "../chat-lane.js";
2
+ import { OwnerConversationSource } from "../companion.js";
3
+ import type { ChatCircuitBreaker } from "../runtime/chat-circuit-breaker.js";
4
+ import type { ConformantAgentEngine } from "../engines/types.js";
5
+ import type { ClaimableTurnProbe, FleetClaimDecision } from "./grace-gate.js";
6
+ export interface FleetChatLaneDeps {
7
+ /** This fleet runner's id (claimant of turns). */
8
+ runnerId: string;
9
+ /** The user this fleet runner is bound to — the ONLY user whose turns it serves. */
10
+ boundUserId: string;
11
+ /** The chat-conformant engine driving replies (same as the companion path). */
12
+ engine: ConformantAgentEngine;
13
+ /** The base chat-lane transport; wrapped with the grace gate internally. */
14
+ transport: ChatLaneTransport;
15
+ /** The chat-capability circuit breaker (shared with doctor / boot hydration). */
16
+ breaker: ChatCircuitBreaker;
17
+ /** Runner concurrency ceiling (shared with the code/review pump). */
18
+ concurrencyLimit: number;
19
+ /** Chat-lane max share of that ceiling (0..1); ≥1 still reserves ≥1 code slot. */
20
+ maxShare: number;
21
+ /** Requested per-turn lease (ms). */
22
+ leaseMs: number;
23
+ /**
24
+ * LIVE count of code/review tasks in flight on this runner (from watch.ts pump).
25
+ * This is the crucial difference from a dedicated companion: chat shares slots
26
+ * with the code lane, so the max-share budget keeps chat from starving code.
27
+ */
28
+ activeCodeTasks: () => number;
29
+ /** Probe a conversation's oldest claimable turn (see supabaseFleetProbe). */
30
+ probe: (conversationId: string) => Promise<ClaimableTurnProbe>;
31
+ /** Companion-preference grace window (ms). */
32
+ graceMs: number;
33
+ /**
34
+ * Pre-seeded owner-affinity source; omit to start empty (the watch wiring feeds
35
+ * it from the identity topic + startup backfill, identical to the companion).
36
+ */
37
+ conversations?: OwnerConversationSource;
38
+ /** Per-turn wall-clock runaway cap (ms); omit ⇒ ChatCompanion's default. */
39
+ wallClockMs?: number;
40
+ /** Working directory forwarded to the engine per turn. */
41
+ cwd?: string;
42
+ /** Mint a per-turn delegation token (narrowly-scoped identity) — optional. */
43
+ mintDelegation?: (turn: ClaimedChatTurn) => Promise<string | undefined>;
44
+ /** Observability: every grace-gate decision (claimed or skipped). */
45
+ onDecision?: (info: {
46
+ conversationId: string;
47
+ decision: FleetClaimDecision;
48
+ }) => void;
49
+ /** Best-effort observability sink for terminal turn results. */
50
+ onResult?: (result: ChatTurnDriveResult) => void;
51
+ /** Clock (test seam). */
52
+ now?: () => number;
53
+ /** Best-effort log sink. */
54
+ onLog?: (line: string) => void;
55
+ }
56
+ /**
57
+ * The fleet-fallback chat lane: an owner-scoped, grace-gated `ChatCompanion`. Its
58
+ * public surface mirrors `ChatCompanion` (pumpOnce/start/stop/cancel) so the watch
59
+ * wiring drives it exactly like the companion loop, plus a `conversations` handle
60
+ * the wiring feeds from discovery.
61
+ */
62
+ export declare class FleetChatLane {
63
+ /** The machine-ownership isolation boundary — bound-user conversations only. */
64
+ readonly conversations: OwnerConversationSource;
65
+ private readonly companion;
66
+ constructor(deps: FleetChatLaneDeps);
67
+ /** Chat turns currently in flight on this fleet runner. */
68
+ activeChatTurns(): number;
69
+ /** Turn ids currently in flight (stable snapshot). */
70
+ inFlightTurnIds(): string[];
71
+ /** The chat-lane claim budget right now (concurrency, max-share, code load, breaker). */
72
+ budget(): number;
73
+ /** Claim + launch as many grace-cleared turns as the budget allows this pump. */
74
+ pumpOnce(): Promise<ClaimedChatTurn[]>;
75
+ /** Start the periodic pump (poll cadence between pumps). */
76
+ start(intervalMs?: number): void;
77
+ /** Abort one in-flight turn (operator cancel) — clean requeue, no dup completion. */
78
+ cancel(turnId: string): Promise<ChatTurnDriveResult | null>;
79
+ /** Stop the loop: cancel the timer and requeue every in-flight turn. */
80
+ stop(): Promise<ChatTurnDriveResult[]>;
81
+ }
82
+ //# sourceMappingURL=fleet-chat-lane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fleet-chat-lane.d.ts","sourceRoot":"","sources":["../../src/watch-chat/fleet-chat-lane.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC/F,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAKjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE9E,MAAM,WAAW,iBAAiB;IAChC,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,oFAAoF;IACpF,WAAW,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,MAAM,EAAE,qBAAqB,CAAC;IAC9B,4EAA4E;IAC5E,SAAS,EAAE,iBAAiB,CAAC;IAC7B,iFAAiF;IACjF,OAAO,EAAE,kBAAkB,CAAC;IAC5B,qEAAqE;IACrE,gBAAgB,EAAE,MAAM,CAAC;IACzB,kFAAkF;IAClF,QAAQ,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,eAAe,EAAE,MAAM,MAAM,CAAC;IAC9B,6EAA6E;IAC7E,KAAK,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC/D,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,aAAa,CAAC,EAAE,uBAAuB,CAAC;IACxC,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACxE,qEAAqE;IACrE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,kBAAkB,CAAA;KAAE,KAAK,IAAI,CAAC;IACtF,gEAAgE;IAChE,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACjD,yBAAyB;IACzB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAED;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,gFAAgF;IAChF,QAAQ,CAAC,aAAa,EAAE,uBAAuB,CAAC;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;gBAE9B,IAAI,EAAE,iBAAiB;IA+BnC,2DAA2D;IAC3D,eAAe,IAAI,MAAM;IAIzB,sDAAsD;IACtD,eAAe,IAAI,MAAM,EAAE;IAI3B,yFAAyF;IACzF,MAAM,IAAI,MAAM;IAIhB,iFAAiF;IACjF,QAAQ,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAItC,4DAA4D;IAC5D,KAAK,CAAC,UAAU,SAAQ,GAAG,IAAI;IAI/B,qFAAqF;IACrF,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAI3D,wEAAwE;IACxE,IAAI,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;CAGvC"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * FLEET-SERVE: the fleet-fallback chat lane.
3
+ *
4
+ * A fleet `watch` runner already heartbeats itself online, drains the code/review
5
+ * lanes, and is bound to a user (`bound_user_id`). This module lets it ALSO serve
6
+ * that user's chat turns as the fallback behind their companion — without forking
7
+ * the companion's claim/drive machinery. It is a thin composition of three pieces
8
+ * that already exist:
9
+ *
10
+ * 1. MACHINE-OWNERSHIP ISOLATION — `OwnerConversationSource` (from companion.ts)
11
+ * admits ONLY conversations owned by the bound user, so a fleet runner never
12
+ * presents a fellow org member's conversation to the claim RPC. This is the
13
+ * task's headline guarantee: Deepak's turns are never fuelled by the engine
14
+ * login on Ajay's machine. The DB owner gate (acc.claim_chat_turn, 0271/0273)
15
+ * is the second, independent layer.
16
+ * 2. COMPANION PREFERENCE — a `graceGatedTransport` wrapper defers a fresh
17
+ * queued turn until the companion's window has elapsed (grace-gate.ts), so a
18
+ * live companion always wins; the fleet steps in only on absence/death.
19
+ * 3. SHARED DRIVE — a `ChatCompanion` (the same claim → drive → stream/complete
20
+ * loop the companion uses) drives each claimed turn, so delegation scoping +
21
+ * provenance are byte-for-byte identical to the companion path. Unlike a
22
+ * dedicated companion, the fleet lane passes the LIVE code-task count through
23
+ * `activeCodeTasks`, so the max-share budget keeps chat from ever starving
24
+ * the code/review lanes on a shared runner.
25
+ *
26
+ * The production wiring into `watch.ts` (feeding the owner source from the
27
+ * identity topic + startup backfill, the Supabase probe, and the pump alongside
28
+ * the task pump) is a follow-up — like the AS-3 resume primitives, this ships as
29
+ * an injectable, unit-exercised building block first.
30
+ */
31
+ import { ChatCompanion } from "../chat-companion.js";
32
+ import { OwnerConversationSource } from "../companion.js";
33
+ import { graceGatedTransport, } from "./grace-gated-transport.js";
34
+ /**
35
+ * The fleet-fallback chat lane: an owner-scoped, grace-gated `ChatCompanion`. Its
36
+ * public surface mirrors `ChatCompanion` (pumpOnce/start/stop/cancel) so the watch
37
+ * wiring drives it exactly like the companion loop, plus a `conversations` handle
38
+ * the wiring feeds from discovery.
39
+ */
40
+ export class FleetChatLane {
41
+ /** The machine-ownership isolation boundary — bound-user conversations only. */
42
+ conversations;
43
+ companion;
44
+ constructor(deps) {
45
+ this.conversations = deps.conversations ?? new OwnerConversationSource(deps.boundUserId);
46
+ const gateOpts = {
47
+ probe: deps.probe,
48
+ graceMs: deps.graceMs,
49
+ ...(deps.onDecision ? { onDecision: deps.onDecision } : {}),
50
+ ...(deps.onLog ? { onLog: deps.onLog } : {}),
51
+ };
52
+ const gated = graceGatedTransport(deps.transport, gateOpts);
53
+ const companionOpts = {
54
+ runnerId: deps.runnerId,
55
+ engine: deps.engine,
56
+ transport: gated,
57
+ breaker: deps.breaker,
58
+ concurrencyLimit: deps.concurrencyLimit,
59
+ maxShare: deps.maxShare,
60
+ leaseMs: deps.leaseMs,
61
+ conversations: () => this.conversations.snapshot(),
62
+ activeCodeTasks: deps.activeCodeTasks,
63
+ ...(deps.wallClockMs !== undefined ? { wallClockMs: deps.wallClockMs } : {}),
64
+ ...(deps.cwd !== undefined ? { cwd: deps.cwd } : {}),
65
+ ...(deps.mintDelegation ? { mintDelegation: deps.mintDelegation } : {}),
66
+ ...(deps.now ? { now: deps.now } : {}),
67
+ ...(deps.onResult ? { onResult: deps.onResult } : {}),
68
+ ...(deps.onLog ? { onLog: deps.onLog } : {}),
69
+ };
70
+ this.companion = new ChatCompanion(companionOpts);
71
+ }
72
+ /** Chat turns currently in flight on this fleet runner. */
73
+ activeChatTurns() {
74
+ return this.companion.activeChatTurns();
75
+ }
76
+ /** Turn ids currently in flight (stable snapshot). */
77
+ inFlightTurnIds() {
78
+ return this.companion.inFlightTurnIds();
79
+ }
80
+ /** The chat-lane claim budget right now (concurrency, max-share, code load, breaker). */
81
+ budget() {
82
+ return this.companion.budget();
83
+ }
84
+ /** Claim + launch as many grace-cleared turns as the budget allows this pump. */
85
+ pumpOnce() {
86
+ return this.companion.pumpOnce();
87
+ }
88
+ /** Start the periodic pump (poll cadence between pumps). */
89
+ start(intervalMs = 1_000) {
90
+ this.companion.start(intervalMs);
91
+ }
92
+ /** Abort one in-flight turn (operator cancel) — clean requeue, no dup completion. */
93
+ cancel(turnId) {
94
+ return this.companion.cancel(turnId);
95
+ }
96
+ /** Stop the loop: cancel the timer and requeue every in-flight turn. */
97
+ stop() {
98
+ return this.companion.stop();
99
+ }
100
+ }
101
+ //# sourceMappingURL=fleet-chat-lane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fleet-chat-lane.js","sourceRoot":"","sources":["../../src/watch-chat/fleet-chat-lane.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * FLEET-SERVE: the COMPANION-PREFERENCE grace gate.
3
+ *
4
+ * A user's chat turns may be served by ANY of their online chat-capable runners
5
+ * whose `bound_user_id` = the requesting user — their dedicated companion
6
+ * (PREFERRED) and, as a fallback, their own fleet `watch` runners. This module is
7
+ * the fallback-timing primitive: a fleet runner must give the companion the first
8
+ * ~10s on a freshly-queued turn before it claims, so a live companion always wins
9
+ * the turn and the fleet only steps in when the companion is absent or dead.
10
+ *
11
+ * The gate is a PURE DECISION over what a fleet runner sees when it probes a
12
+ * conversation's oldest claimable turn:
13
+ *
14
+ * - a fresh QUEUED turn → wait until it is `graceMs` old, then
15
+ * claim (the companion had its window).
16
+ * - a claimed/streaming turn whose lease → reclaim immediately (the companion
17
+ * has EXPIRED claimed it then died; the expired
18
+ * lease already served as the wait —
19
+ * acc.claim_chat_turn/0273 reclaims it).
20
+ * - nothing claimable (a live companion → do not claim (the companion is
21
+ * holds a valid lease, or empty queue) serving it right now).
22
+ *
23
+ * Machine-ownership isolation (a fleet runner serves ONLY its bound user's turns,
24
+ * never a fellow org member's) is enforced elsewhere — runner-side by the
25
+ * owner-affinity conversation source and DB-side by the acc.claim_chat_turn owner
26
+ * gate (0271/0273). This module is timing only; it never widens who may serve.
27
+ *
28
+ * No DB migration: the gate reads the same acc.chat_turns columns the claim RPC
29
+ * already exposes (status / created_at / lease_expires_at) and reduces them to a
30
+ * decision, so the fleet fallback ships without touching the frozen claim path.
31
+ */
32
+ /** Default companion-preference window: a fleet runner waits this long on a fresh queued turn. */
33
+ export declare const DEFAULT_FLEET_CHAT_GRACE_MS = 10000;
34
+ /** Env var overriding the fleet companion-preference grace window (ms). */
35
+ export declare const FLEET_CHAT_GRACE_MS_ENV = "ACC_RUNNER_FLEET_CHAT_GRACE_MS";
36
+ /** A grace of 0 disables the wait (a fleet runner falls back immediately). */
37
+ export declare const MIN_FLEET_CHAT_GRACE_MS = 0;
38
+ /** Upper clamp so a fat-fingered env can never park turns for minutes. */
39
+ export declare const MAX_FLEET_CHAT_GRACE_MS = 120000;
40
+ /**
41
+ * Resolve the fleet companion-preference grace window (ms) from a raw env value.
42
+ * Blank/absent/non-numeric ⇒ default; a negative value ⇒ 0 (immediate fallback);
43
+ * anything above the ceiling is clamped so a typo cannot strand turns for minutes.
44
+ */
45
+ export declare function resolveFleetChatGraceMs(raw: string | undefined | null): number;
46
+ /**
47
+ * What a fleet runner sees when it probes a conversation for a claimable turn.
48
+ * A reduction of the conversation's in-flight acc.chat_turns rows onto exactly the
49
+ * signal the grace decision needs — nothing about WHO may serve (that is the
50
+ * owner gate's job), only the timing state of the oldest claimable turn.
51
+ */
52
+ export type ClaimableTurnProbe = {
53
+ kind: "none";
54
+ } | {
55
+ kind: "queued";
56
+ ageMs: number;
57
+ } | {
58
+ kind: "expired_inflight";
59
+ };
60
+ /** The acc.chat_turns columns the probe reduces (a subset of the claim-path row). */
61
+ export interface FleetTurnProbeRow {
62
+ status: string;
63
+ created_at: string;
64
+ lease_expires_at: string | null;
65
+ }
66
+ /**
67
+ * Reduce a conversation's in-flight turn rows to a `ClaimableTurnProbe`, mirroring
68
+ * acc.claim_chat_turn's candidate ordering (0273): a QUEUED turn is the primary
69
+ * candidate (and sorts first in the RPC), so a queued turn takes precedence and
70
+ * carries its age for the grace comparison; otherwise an expired-lease in-flight
71
+ * turn is a reclaim candidate; otherwise there is nothing a fleet runner may take.
72
+ * A negative age (clock skew) is floored at 0 so a skewed row never reads as "old
73
+ * enough to claim" purely from arithmetic.
74
+ */
75
+ export declare function reduceClaimableProbe(rows: readonly FleetTurnProbeRow[], now: number): ClaimableTurnProbe;
76
+ /** Why a fleet runner did / did not claim on this probe (observability + tests). */
77
+ export type FleetClaimReason = "no_turn" | "within_grace" | "grace_elapsed" | "reclaim_expired";
78
+ /** The grace gate's verdict: whether a fleet runner should attempt the claim now. */
79
+ export interface FleetClaimDecision {
80
+ claim: boolean;
81
+ reason: FleetClaimReason;
82
+ }
83
+ /**
84
+ * Decide whether a fleet runner should claim now, given what it probed and the
85
+ * companion-preference window. A live companion (a valid-lease in-flight turn)
86
+ * reduces to `none` ⇒ the fleet never claims it; a fresh queued turn is deferred
87
+ * until it is `graceMs` old ⇒ the companion's 1s pump wins it first; an
88
+ * expired-lease reclaim is taken at once ⇒ the companion tried and died.
89
+ */
90
+ export declare function decideFleetClaim(probe: ClaimableTurnProbe, opts: {
91
+ graceMs: number;
92
+ }): FleetClaimDecision;
93
+ //# sourceMappingURL=grace-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grace-gate.d.ts","sourceRoot":"","sources":["../../src/watch-chat/grace-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,kGAAkG;AAClG,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAClD,2EAA2E;AAC3E,eAAO,MAAM,uBAAuB,mCAAmC,CAAC;AACxE,8EAA8E;AAC9E,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,0EAA0E;AAC1E,eAAO,MAAM,uBAAuB,SAAU,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAO9E;AAED;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAEjC,qFAAqF;AACrF,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAKD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,iBAAiB,EAAE,EAClC,GAAG,EAAE,MAAM,GACV,kBAAkB,CAmBpB;AAED,oFAAoF;AACpF,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,cAAc,GAAG,eAAe,GAAG,iBAAiB,CAAC;AAEhG,qFAAqF;AACrF,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,kBAAkB,EACzB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GACxB,kBAAkB,CAOpB"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * FLEET-SERVE: the COMPANION-PREFERENCE grace gate.
3
+ *
4
+ * A user's chat turns may be served by ANY of their online chat-capable runners
5
+ * whose `bound_user_id` = the requesting user — their dedicated companion
6
+ * (PREFERRED) and, as a fallback, their own fleet `watch` runners. This module is
7
+ * the fallback-timing primitive: a fleet runner must give the companion the first
8
+ * ~10s on a freshly-queued turn before it claims, so a live companion always wins
9
+ * the turn and the fleet only steps in when the companion is absent or dead.
10
+ *
11
+ * The gate is a PURE DECISION over what a fleet runner sees when it probes a
12
+ * conversation's oldest claimable turn:
13
+ *
14
+ * - a fresh QUEUED turn → wait until it is `graceMs` old, then
15
+ * claim (the companion had its window).
16
+ * - a claimed/streaming turn whose lease → reclaim immediately (the companion
17
+ * has EXPIRED claimed it then died; the expired
18
+ * lease already served as the wait —
19
+ * acc.claim_chat_turn/0273 reclaims it).
20
+ * - nothing claimable (a live companion → do not claim (the companion is
21
+ * holds a valid lease, or empty queue) serving it right now).
22
+ *
23
+ * Machine-ownership isolation (a fleet runner serves ONLY its bound user's turns,
24
+ * never a fellow org member's) is enforced elsewhere — runner-side by the
25
+ * owner-affinity conversation source and DB-side by the acc.claim_chat_turn owner
26
+ * gate (0271/0273). This module is timing only; it never widens who may serve.
27
+ *
28
+ * No DB migration: the gate reads the same acc.chat_turns columns the claim RPC
29
+ * already exposes (status / created_at / lease_expires_at) and reduces them to a
30
+ * decision, so the fleet fallback ships without touching the frozen claim path.
31
+ */
32
+ /** Default companion-preference window: a fleet runner waits this long on a fresh queued turn. */
33
+ export const DEFAULT_FLEET_CHAT_GRACE_MS = 10_000;
34
+ /** Env var overriding the fleet companion-preference grace window (ms). */
35
+ export const FLEET_CHAT_GRACE_MS_ENV = "ACC_RUNNER_FLEET_CHAT_GRACE_MS";
36
+ /** A grace of 0 disables the wait (a fleet runner falls back immediately). */
37
+ export const MIN_FLEET_CHAT_GRACE_MS = 0;
38
+ /** Upper clamp so a fat-fingered env can never park turns for minutes. */
39
+ export const MAX_FLEET_CHAT_GRACE_MS = 120_000;
40
+ /**
41
+ * Resolve the fleet companion-preference grace window (ms) from a raw env value.
42
+ * Blank/absent/non-numeric ⇒ default; a negative value ⇒ 0 (immediate fallback);
43
+ * anything above the ceiling is clamped so a typo cannot strand turns for minutes.
44
+ */
45
+ export function resolveFleetChatGraceMs(raw) {
46
+ const trimmed = (raw ?? "").trim();
47
+ if (!trimmed)
48
+ return DEFAULT_FLEET_CHAT_GRACE_MS;
49
+ const n = Number.parseInt(trimmed, 10);
50
+ if (!Number.isFinite(n))
51
+ return DEFAULT_FLEET_CHAT_GRACE_MS;
52
+ if (n <= MIN_FLEET_CHAT_GRACE_MS)
53
+ return MIN_FLEET_CHAT_GRACE_MS;
54
+ return Math.min(MAX_FLEET_CHAT_GRACE_MS, n);
55
+ }
56
+ /** In-flight statuses a lease-expiry reclaim can pick up (mirrors 0273's candidate set). */
57
+ const IN_FLIGHT_STATUSES = ["claimed", "streaming"];
58
+ /**
59
+ * Reduce a conversation's in-flight turn rows to a `ClaimableTurnProbe`, mirroring
60
+ * acc.claim_chat_turn's candidate ordering (0273): a QUEUED turn is the primary
61
+ * candidate (and sorts first in the RPC), so a queued turn takes precedence and
62
+ * carries its age for the grace comparison; otherwise an expired-lease in-flight
63
+ * turn is a reclaim candidate; otherwise there is nothing a fleet runner may take.
64
+ * A negative age (clock skew) is floored at 0 so a skewed row never reads as "old
65
+ * enough to claim" purely from arithmetic.
66
+ */
67
+ export function reduceClaimableProbe(rows, now) {
68
+ let oldestQueuedMs = null;
69
+ let sawExpiredInFlight = false;
70
+ for (const row of rows) {
71
+ if (row.status === "queued") {
72
+ const created = Date.parse(row.created_at);
73
+ if (Number.isFinite(created)) {
74
+ oldestQueuedMs = oldestQueuedMs === null ? created : Math.min(oldestQueuedMs, created);
75
+ }
76
+ }
77
+ else if (IN_FLIGHT_STATUSES.includes(row.status) && row.lease_expires_at) {
78
+ const expires = Date.parse(row.lease_expires_at);
79
+ if (Number.isFinite(expires) && expires < now)
80
+ sawExpiredInFlight = true;
81
+ }
82
+ }
83
+ if (oldestQueuedMs !== null) {
84
+ return { kind: "queued", ageMs: Math.max(0, now - oldestQueuedMs) };
85
+ }
86
+ if (sawExpiredInFlight)
87
+ return { kind: "expired_inflight" };
88
+ return { kind: "none" };
89
+ }
90
+ /**
91
+ * Decide whether a fleet runner should claim now, given what it probed and the
92
+ * companion-preference window. A live companion (a valid-lease in-flight turn)
93
+ * reduces to `none` ⇒ the fleet never claims it; a fresh queued turn is deferred
94
+ * until it is `graceMs` old ⇒ the companion's 1s pump wins it first; an
95
+ * expired-lease reclaim is taken at once ⇒ the companion tried and died.
96
+ */
97
+ export function decideFleetClaim(probe, opts) {
98
+ if (probe.kind === "none")
99
+ return { claim: false, reason: "no_turn" };
100
+ if (probe.kind === "expired_inflight")
101
+ return { claim: true, reason: "reclaim_expired" };
102
+ const graceMs = Math.max(0, opts.graceMs);
103
+ return probe.ageMs >= graceMs
104
+ ? { claim: true, reason: "grace_elapsed" }
105
+ : { claim: false, reason: "within_grace" };
106
+ }
107
+ //# sourceMappingURL=grace-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grace-gate.js","sourceRoot":"","sources":["../../src/watch-chat/grace-gate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * FLEET-SERVE: the grace-gated claim decorator.
3
+ *
4
+ * Wraps any `ChatLaneTransport` so its `claim` first PROBES the conversation and
5
+ * only delegates to the underlying claim when the companion-preference grace gate
6
+ * (grace-gate.ts) says a fleet runner may take the turn now. Everything else —
7
+ * markStreaming / stream / complete / requeue — passes straight through
8
+ * untouched, so a fleet runner drives a claimed turn through the EXACT same
9
+ * transport, driver (driveChatTurn), and per-turn delegation as a companion. That
10
+ * shared path is what makes delegation scoping + provenance (serving runner_id,
11
+ * engine_id, delegation_jti) IDENTICAL across the companion and fleet paths: the
12
+ * only difference the fleet introduces is WHEN it is allowed to claim, never HOW
13
+ * the turn is served.
14
+ *
15
+ * Reusing the decorator seam means the fleet lane is just a `ChatCompanion` (the
16
+ * shared claim/drive loop) fed a grace-gated transport — no forked drive logic.
17
+ */
18
+ import type { ChatLaneTransport } from "../chat-lane.js";
19
+ import { type ClaimableTurnProbe, type FleetClaimDecision } from "./grace-gate.js";
20
+ export interface GraceGateOptions {
21
+ /** Probe a conversation for its oldest claimable turn's timing state. */
22
+ probe: (conversationId: string) => Promise<ClaimableTurnProbe>;
23
+ /** Companion-preference window (ms) a fresh queued turn must age past. */
24
+ graceMs: number;
25
+ /** Observability: every claim decision (claimed or skipped), for logs/tests. */
26
+ onDecision?: (info: {
27
+ conversationId: string;
28
+ decision: FleetClaimDecision;
29
+ }) => void;
30
+ /** Best-effort log sink. */
31
+ onLog?: (line: string) => void;
32
+ }
33
+ /**
34
+ * Decorate `inner` with the companion-preference grace gate on `claim`. On a
35
+ * probe FAILURE the decorator returns null (does NOT claim this pump): claiming
36
+ * blind would undercut companion preference, and the turn is never lost — the
37
+ * next pump re-probes and, worst case, the server lease-expiry reclaim (0273)
38
+ * still drains it. A `claim` the gate allows delegates verbatim, so the claimed
39
+ * turn's lease/runner assignment is exactly the companion's.
40
+ */
41
+ export declare function graceGatedTransport(inner: ChatLaneTransport, opts: GraceGateOptions): ChatLaneTransport;
42
+ /** In-flight statuses the fleet probe reads (queued + reclaimable in-flight). */
43
+ export declare const FLEET_PROBE_STATUSES: readonly string[];
44
+ /**
45
+ * Build a Supabase-backed probe: read the conversation's in-flight acc.chat_turns
46
+ * rows (queued/claimed/streaming) and reduce them to a `ClaimableTurnProbe`. The
47
+ * read is org-scoped by the chat_turns SELECT policy (0254); ownership is already
48
+ * guaranteed upstream because the fleet lane only ever probes conversations its
49
+ * owner-affinity source admitted (bound-user-owned). A query error is surfaced as
50
+ * a throw so the decorator's fail-safe (defer, don't claim) engages.
51
+ */
52
+ export declare function supabaseFleetProbe(client: {
53
+ from: (table: string) => any;
54
+ }, opts?: {
55
+ now?: () => number;
56
+ statuses?: readonly string[];
57
+ }): (conversationId: string) => Promise<ClaimableTurnProbe>;
58
+ //# sourceMappingURL=grace-gated-transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grace-gated-transport.d.ts","sourceRoot":"","sources":["../../src/watch-chat/grace-gated-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EAExB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,KAAK,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC/D,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,kBAAkB,CAAA;KAAE,KAAK,IAAI,CAAC;IACtF,4BAA4B;IAC5B,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,gBAAgB,GACrB,iBAAiB,CAuBnB;AAED,iFAAiF;AACjF,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAAuC,CAAC;AAE1F;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAEhC,MAAM,EAAE;IAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,CAAA;CAAE,EACxC,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAO,GAC9D,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAezD"}
@@ -0,0 +1,62 @@
1
+ import { decideFleetClaim, reduceClaimableProbe, } from "./grace-gate.js";
2
+ /**
3
+ * Decorate `inner` with the companion-preference grace gate on `claim`. On a
4
+ * probe FAILURE the decorator returns null (does NOT claim this pump): claiming
5
+ * blind would undercut companion preference, and the turn is never lost — the
6
+ * next pump re-probes and, worst case, the server lease-expiry reclaim (0273)
7
+ * still drains it. A `claim` the gate allows delegates verbatim, so the claimed
8
+ * turn's lease/runner assignment is exactly the companion's.
9
+ */
10
+ export function graceGatedTransport(inner, opts) {
11
+ return {
12
+ async claim(args) {
13
+ let probe;
14
+ try {
15
+ probe = await opts.probe(args.conversationId);
16
+ }
17
+ catch (err) {
18
+ opts.onLog?.(`[acc-runner] fleet chat grace-probe(${args.conversationId}) failed: ` +
19
+ `${err.message}; deferring claim`);
20
+ return null;
21
+ }
22
+ const decision = decideFleetClaim(probe, { graceMs: opts.graceMs });
23
+ opts.onDecision?.({ conversationId: args.conversationId, decision });
24
+ if (!decision.claim)
25
+ return null;
26
+ return inner.claim(args);
27
+ },
28
+ ...(inner.markStreaming ? { markStreaming: (turn) => inner.markStreaming(turn) } : {}),
29
+ stream: (turn, payload) => inner.stream(turn, payload),
30
+ complete: (turn, payload) => inner.complete(turn, payload),
31
+ requeue: (turn, payload) => inner.requeue(turn, payload),
32
+ };
33
+ }
34
+ /** In-flight statuses the fleet probe reads (queued + reclaimable in-flight). */
35
+ export const FLEET_PROBE_STATUSES = ["queued", "claimed", "streaming"];
36
+ /**
37
+ * Build a Supabase-backed probe: read the conversation's in-flight acc.chat_turns
38
+ * rows (queued/claimed/streaming) and reduce them to a `ClaimableTurnProbe`. The
39
+ * read is org-scoped by the chat_turns SELECT policy (0254); ownership is already
40
+ * guaranteed upstream because the fleet lane only ever probes conversations its
41
+ * owner-affinity source admitted (bound-user-owned). A query error is surfaced as
42
+ * a throw so the decorator's fail-safe (defer, don't claim) engages.
43
+ */
44
+ export function supabaseFleetProbe(
45
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
46
+ client, opts = {}) {
47
+ const now = opts.now ?? Date.now;
48
+ const statuses = opts.statuses ?? FLEET_PROBE_STATUSES;
49
+ return async (conversationId) => {
50
+ const res = await client
51
+ .from("chat_turns")
52
+ .select("status, created_at, lease_expires_at")
53
+ .eq("conversation_id", conversationId)
54
+ .in("status", statuses);
55
+ if (res?.error) {
56
+ throw new Error(res.error.message ?? "chat_turns probe failed");
57
+ }
58
+ const rows = (Array.isArray(res?.data) ? res.data : []);
59
+ return reduceClaimableProbe(rows, now());
60
+ };
61
+ }
62
+ //# sourceMappingURL=grace-gated-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grace-gated-transport.js","sourceRoot":"","sources":["../../src/watch-chat/grace-gated-transport.ts"],"names":[],"mappings":"AAkBA,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GAIrB,MAAM,iBAAiB,CAAC;AAazB;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAwB,EACxB,IAAsB;IAEtB,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,IAAI;YACd,IAAI,KAAyB,CAAC;YAC9B,IAAI,CAAC;gBACH,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAChD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,KAAK,EAAE,CACV,uCAAuC,IAAI,CAAC,cAAc,YAAY;oBACpE,GAAI,GAAa,CAAC,OAAO,mBAAmB,CAC/C,CAAC;gBACF,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACpE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,CAAC,CAAC;YACrE,IAAI,CAAC,QAAQ,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YACjC,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QACD,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,aAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;QACtD,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;QAC1D,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;KACzD,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,MAAM,oBAAoB,GAAsB,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;AAE1F;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB;AAChC,8DAA8D;AAC9D,MAAwC,EACxC,OAA6D,EAAE;IAE/D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,oBAAoB,CAAC;IACvD,OAAO,KAAK,EAAE,cAAsB,EAAE,EAAE;QACtC,MAAM,GAAG,GAAG,MAAM,MAAM;aACrB,IAAI,CAAC,YAAY,CAAC;aAClB,MAAM,CAAC,sCAAsC,CAAC;aAC9C,EAAE,CAAC,iBAAiB,EAAE,cAAc,CAAC;aACrC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1B,IAAI,GAAG,EAAE,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,yBAAyB,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAwB,CAAC;QAC/E,OAAO,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * FLEET-SERVE: the fleet-fallback chat-lane barrel.
3
+ *
4
+ * A fleet `watch` runner may serve its bound user's chat turns as the fallback
5
+ * behind their companion. The pieces:
6
+ * - grace-gate.ts — companion-preference timing decision (pure).
7
+ * - grace-gated-transport.ts — the claim decorator + Supabase probe builder.
8
+ * - fleet-chat-lane.ts — the owner-scoped, grace-gated ChatCompanion.
9
+ *
10
+ * Machine-ownership isolation (bound-user turns only) is enforced by the
11
+ * owner-affinity source (runner-side) + the acc.claim_chat_turn owner gate
12
+ * (DB-side); this module never widens who may serve, only WHEN the fleet claims.
13
+ */
14
+ export { DEFAULT_FLEET_CHAT_GRACE_MS, FLEET_CHAT_GRACE_MS_ENV, MIN_FLEET_CHAT_GRACE_MS, MAX_FLEET_CHAT_GRACE_MS, resolveFleetChatGraceMs, reduceClaimableProbe, decideFleetClaim, type ClaimableTurnProbe, type FleetTurnProbeRow, type FleetClaimReason, type FleetClaimDecision, } from "./grace-gate.js";
15
+ export { graceGatedTransport, supabaseFleetProbe, FLEET_PROBE_STATUSES, type GraceGateOptions, } from "./grace-gated-transport.js";
16
+ export { FleetChatLane, type FleetChatLaneDeps } from "./fleet-chat-lane.js";
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/watch-chat/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,gBAAgB,GACtB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * FLEET-SERVE: the fleet-fallback chat-lane barrel.
3
+ *
4
+ * A fleet `watch` runner may serve its bound user's chat turns as the fallback
5
+ * behind their companion. The pieces:
6
+ * - grace-gate.ts — companion-preference timing decision (pure).
7
+ * - grace-gated-transport.ts — the claim decorator + Supabase probe builder.
8
+ * - fleet-chat-lane.ts — the owner-scoped, grace-gated ChatCompanion.
9
+ *
10
+ * Machine-ownership isolation (bound-user turns only) is enforced by the
11
+ * owner-affinity source (runner-side) + the acc.claim_chat_turn owner gate
12
+ * (DB-side); this module never widens who may serve, only WHEN the fleet claims.
13
+ */
14
+ export { DEFAULT_FLEET_CHAT_GRACE_MS, FLEET_CHAT_GRACE_MS_ENV, MIN_FLEET_CHAT_GRACE_MS, MAX_FLEET_CHAT_GRACE_MS, resolveFleetChatGraceMs, reduceClaimableProbe, decideFleetClaim, } from "./grace-gate.js";
15
+ export { graceGatedTransport, supabaseFleetProbe, FLEET_PROBE_STATUSES, } from "./grace-gated-transport.js";
16
+ export { FleetChatLane } from "./fleet-chat-lane.js";
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/watch-chat/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,GAKjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,GAErB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,aAAa,EAA0B,MAAM,sBAAsB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tokenfactory/acc-runner",
3
- "version": "0.40.20",
3
+ "version": "0.40.22",
4
4
  "description": "Agent Control Center local runner. Spawns Claude Code sessions assigned via ACC.",
5
5
  "license": "UNLICENSED",
6
6
  "private": false,