@tokenfactory/acc-runner 0.40.8 → 0.40.9

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.
@@ -62,6 +62,14 @@ export interface SupabaseChatTransportOptions {
62
62
  */
63
63
  export declare function createSupabaseChatTransport(client: RunnerSupabaseClient, opts?: SupabaseChatTransportOptions): ChatLaneTransport & {
64
64
  close: () => Promise<void>;
65
+ /**
66
+ * AUTH-REFRESH: hot-swap the Supabase client (and,
67
+ * optionally, the durable-ingest bearer) after a token refresh. Old
68
+ * per-conversation channels are torn down so the next stream frame re-subscribes
69
+ * on the fresh socket — turn-serving keeps working across a rotation instead of
70
+ * riding the old, soon-to-expire JWT until the process restarts.
71
+ */
72
+ refreshClient: (nextClient: RunnerSupabaseClient, nextIngestToken?: string) => Promise<void>;
65
73
  };
66
74
  export {};
67
75
  //# sourceMappingURL=chat-transport.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-transport.d.ts","sourceRoot":"","sources":["../src/chat-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAEL,KAAK,iBAAiB,EAItB,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AAgBxB,0EAA0E;AAC1E,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,eAAe,CAahE;AAED,MAAM,WAAW,4BAA4B;IAC3C,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,wDAAwD;IACxD,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,oBAAoB,EAC5B,IAAI,GAAE,4BAAiC,GACtC,iBAAiB,GAAG;IAAE,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAmIpD"}
1
+ {"version":3,"file":"chat-transport.d.ts","sourceRoot":"","sources":["../src/chat-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAEL,KAAK,iBAAiB,EAItB,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AAgBxB,0EAA0E;AAC1E,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,eAAe,CAahE;AAED,MAAM,WAAW,4BAA4B;IAC3C,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,wDAAwD;IACxD,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,oBAAoB,EAC5B,IAAI,GAAE,4BAAiC,GACtC,iBAAiB,GAAG;IACrB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B;;;;;;OAMG;IACH,aAAa,EAAE,CAAC,UAAU,EAAE,oBAAoB,EAAE,eAAe,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9F,CAsJA"}
@@ -22,6 +22,10 @@ export function mapClaimedTurn(row) {
22
22
  export function createSupabaseChatTransport(client, opts = {}) {
23
23
  const now = opts.now ?? Date.now;
24
24
  const doFetch = opts.fetchImpl ?? globalThis.fetch;
25
+ // AUTH-REFRESH: the client + ingest bearer are mutable so a token refresh can
26
+ // swap them in place (see refreshClient). Closures below read the live values.
27
+ let liveClient = client;
28
+ let ingestToken = opts.ingest?.token;
25
29
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
30
  const channels = new Map(); // any-allowed: supabase RealtimeChannel type is not re-exported by the schema-scoped client
27
31
  async function channelFor(conversationId) {
@@ -29,7 +33,7 @@ export function createSupabaseChatTransport(client, opts = {}) {
29
33
  const existing = channels.get(conversationId);
30
34
  if (existing)
31
35
  return existing;
32
- const ch = client.channel(topic);
36
+ const ch = liveClient.channel(topic);
33
37
  channels.set(conversationId, ch);
34
38
  await new Promise((resolve) => {
35
39
  ch.subscribe((status) => {
@@ -77,7 +81,7 @@ export function createSupabaseChatTransport(client, opts = {}) {
77
81
  method: "POST",
78
82
  headers: {
79
83
  "Content-Type": "application/json",
80
- Authorization: `Bearer ${opts.ingest.token}`,
84
+ Authorization: `Bearer ${ingestToken ?? opts.ingest.token}`,
81
85
  },
82
86
  body: JSON.stringify({
83
87
  event,
@@ -97,7 +101,7 @@ export function createSupabaseChatTransport(client, opts = {}) {
97
101
  }
98
102
  return {
99
103
  async claim(args) {
100
- const { data, error } = await client.rpc("claim_chat_turn", {
104
+ const { data, error } = await liveClient.rpc("claim_chat_turn", {
101
105
  p_conversation_id: args.conversationId,
102
106
  p_runner_id: args.runnerId,
103
107
  p_engine_id: args.engineId,
@@ -124,7 +128,7 @@ export function createSupabaseChatTransport(client, opts = {}) {
124
128
  async close() {
125
129
  for (const ch of channels.values()) {
126
130
  try {
127
- await client.removeChannel(ch);
131
+ await liveClient.removeChannel(ch);
128
132
  }
129
133
  catch {
130
134
  /* best-effort teardown */
@@ -132,6 +136,22 @@ export function createSupabaseChatTransport(client, opts = {}) {
132
136
  }
133
137
  channels.clear();
134
138
  },
139
+ async refreshClient(nextClient, nextIngestToken) {
140
+ // Tear the old channels down on the OLD client (they carry the stale JWT),
141
+ // then swap. The next stream/complete re-subscribes on the fresh socket.
142
+ for (const ch of channels.values()) {
143
+ try {
144
+ await liveClient.removeChannel(ch);
145
+ }
146
+ catch {
147
+ /* best-effort teardown */
148
+ }
149
+ }
150
+ channels.clear();
151
+ liveClient = nextClient;
152
+ if (nextIngestToken !== undefined)
153
+ ingestToken = nextIngestToken;
154
+ },
135
155
  };
136
156
  }
137
157
  //# sourceMappingURL=chat-transport.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-transport.js","sourceRoot":"","sources":["../src/chat-transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-transport.js","sourceRoot":"","sources":["../src/chat-transport.ts"],"names":[],"mappings":"AAqBA,OAAO,EACL,0BAA0B,GAM3B,MAAM,gBAAgB,CAAC;AA8BxB,sFAAsF;AACtF,MAAM,UAAU,cAAc,CAAC,GAAgB;IAC7C,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,eAAe,EAAE,GAAG,CAAC,eAAe;QACpC,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE;QACxB,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAyB;QAClD,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE;QAC9B,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE;QAC9B,aAAa,EAAE,GAAG,CAAC,aAAa,IAAI,CAAC;QACrC,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;KACvC,CAAC;AACJ,CAAC;AAoBD;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CACzC,MAA4B,EAC5B,OAAqC,EAAE;IAYvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,IAAK,UAAU,CAAC,KAAkC,CAAC;IACjF,8EAA8E;IAC9E,+EAA+E;IAC/E,IAAI,UAAU,GAAG,MAAM,CAAC;IACxB,IAAI,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;IACrC,8DAA8D;IAC9D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAe,CAAC,CAAC,4FAA4F;IAErI,KAAK,UAAU,UAAU,CAAC,cAAsB;QAC9C,MAAM,KAAK,GAAG,QAAQ,cAAc,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC9C,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrC,QAAQ,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACjC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,EAAE,CAAC,SAAS,CAAC,CAAC,MAAc,EAAE,EAAE;gBAC9B,IAAI,MAAM,KAAK,YAAY;oBAAE,OAAO,EAAE,CAAC;YACzC,CAAC,CAAC,CAAC;YACH,yEAAyE;YACzE,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QACvC,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,SAAS,MAAM,CACb,IAAoC,EACpC,cAAsB,EACtB,MAAc,EACd,QAAgB;QAEhB,OAAO;YACL,gBAAgB,EAAE,0BAA0B;YAC5C,IAAI;YACJ,eAAe,EAAE,cAAc;YAC/B,OAAO,EAAE,MAAM;YACf,SAAS,EAAE,QAAQ;YACnB,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE;SAClC,CAAC;IACJ,CAAC;IAED,KAAK,UAAU,SAAS,CACtB,IAAqB,EACrB,KAAqB,EACrB,IAAoC,EACpC,OAAgB;QAEhB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAClD,MAAM,EAAE,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,WAAW;gBACjB,KAAK;gBACL,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE;aACrF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,EAAE,CAAC,+BAA+B,KAAK,KAAK,IAAI,CAAC,EAAE,aAAc,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACtG,CAAC;QACD,4EAA4E;QAC5E,2EAA2E;QAC3E,8EAA8E;QAC9E,6DAA6D;QAC7D,MAAM,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,UAAU,UAAU,CACvB,IAAqB,EACrB,KAAqB,EACrB,OAAgB;QAEhB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO;YAAE,OAAO;QACrC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,uBAAuB,EAAE;gBACvF,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;iBAC5D;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK;oBACL,eAAe,EAAE,IAAI,CAAC,eAAe;oBACrC,OAAO,EAAE,IAAI,CAAC,EAAE;oBAChB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,OAAO;iBACR,CAAC;aACH,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,IAAI,CAAC,KAAK,EAAE,CAAC,4BAA4B,KAAK,KAAK,IAAI,CAAC,EAAE,UAAU,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,EAAE,CAAC,4BAA4B,KAAK,KAAK,IAAI,CAAC,EAAE,aAAc,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACnG,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,IAAI;YACd,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,iBAAiB,EAAE;gBAC9D,iBAAiB,EAAE,IAAI,CAAC,cAAc;gBACtC,WAAW,EAAE,IAAI,CAAC,QAAQ;gBAC1B,WAAW,EAAE,IAAI,CAAC,QAAQ;gBAC1B,MAAM,EAAE,IAAI,CAAC,IAAI;gBACjB,UAAU,EAAE,IAAI,CAAC,OAAO;aACzB,CAAC,CAAC;YACH,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,KAAK,EAAE,CAAC,gCAAgC,IAAI,CAAC,cAAc,aAAa,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC9F,OAAO,IAAI,CAAC;YACd,CAAC;YACD,yEAAyE;YACzE,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAmC,CAAC;YACrF,OAAO,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACpD,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,IAAqB,EAAE,OAA8B;YAChE,MAAM,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;QACpE,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,IAAqB,EAAE,OAAgC;YACpE,MAAM,SAAS,CAAC,IAAI,EAAE,eAAe,EAAE,oBAAoB,EAAE,OAAO,CAAC,CAAC;QACxE,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,IAAqB,EAAE,OAA+B;YAClE,MAAM,SAAS,CAAC,IAAI,EAAE,eAAe,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;QACvE,CAAC;QAED,KAAK,CAAC,KAAK;YACT,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;gBACnC,IAAI,CAAC;oBACH,MAAM,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBACrC,CAAC;gBAAC,MAAM,CAAC;oBACP,0BAA0B;gBAC5B,CAAC;YACH,CAAC;YACD,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE,eAAe;YAC7C,2EAA2E;YAC3E,yEAAyE;YACzE,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;gBACnC,IAAI,CAAC;oBACH,MAAM,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBACrC,CAAC;gBAAC,MAAM,CAAC;oBACP,0BAA0B;gBAC5B,CAAC;YACH,CAAC;YACD,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjB,UAAU,GAAG,UAAU,CAAC;YACxB,IAAI,eAAe,KAAK,SAAS;gBAAE,WAAW,GAAG,eAAe,CAAC;QACnE,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"companion-run.d.ts","sourceRoot":"","sources":["../src/companion-run.ts"],"names":[],"mappings":"AAgCA,gFAAgF;AAChF,MAAM,WAAW,eAAe;IAC9B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,oFAAoF;AACpF,eAAO,MAAM,2BAA2B,uCAAuC,CAAC;AAChF,sFAAsF;AACtF,eAAO,MAAM,sBAAsB,kCAAkC,CAAC;AAEtE;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,eAAe,CAAC,CAwHjE;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":"AAsCA,gFAAgF;AAChF,MAAM,WAAW,eAAe;IAC9B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,oFAAoF;AACpF,eAAO,MAAM,2BAA2B,uCAAuC,CAAC;AAChF,sFAAsF;AACtF,eAAO,MAAM,sBAAsB,kCAAkC,CAAC;AAEtE;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,eAAe,CAAC,CAkLjE;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"}
@@ -11,6 +11,7 @@ import chalk from "chalk";
11
11
  import { applyBootstrapConfig, loadConfig, resolveRunnerConcurrency } from "./config.js";
12
12
  import { getTokenProvider } from "./token-provider.js";
13
13
  import { createRunnerClient } from "./supabase.js";
14
+ import { RefreshReuseDetectedError, expiresSoon, refreshAccessToken, } from "./runtime/auth-lifecycle.js";
14
15
  import { createSupabaseChatTransport } from "./chat-transport.js";
15
16
  import { getChatEngine } from "./engines/registry.js";
16
17
  import { ChatCircuitBreaker, getChatCircuit } from "./runtime/chat-circuit-breaker.js";
@@ -29,12 +30,33 @@ export const COMPANION_IDENTITY_ENV = "ACC_RUNNER_COMPANION_IDENTITY";
29
30
  */
30
31
  export async function companionCommand() {
31
32
  let cfg = loadConfig();
32
- const session = await getTokenProvider().load();
33
- if (!session) {
33
+ const tokenProvider = getTokenProvider();
34
+ // AUTH-REFRESH: session + client are mutable so a token refresh (proactive or
35
+ // reactive) can rotate the JWT in place without tearing the companion down.
36
+ const loaded = await tokenProvider.load();
37
+ if (!loaded) {
34
38
  throw new Error("Not logged in. Run `acc-runner login` first.");
35
39
  }
40
+ let session = loaded;
36
41
  cfg = applyBootstrapConfig(cfg, session);
37
- const supabase = createRunnerClient(cfg, session.access_token, session.realtime_config);
42
+ // AUTH-REFRESH: startup refresh — if the access token expires within the hour,
43
+ // grab a fresh one before coming online (mirrors the fleet `watch` runner) so
44
+ // the companion doesn't start on a token that lapses minutes later.
45
+ if (tokenProvider.canRefresh() && expiresSoon(session)) {
46
+ try {
47
+ session = await refreshAccessToken(cfg, session);
48
+ await tokenProvider.save(session);
49
+ }
50
+ catch (err) {
51
+ if (err instanceof RefreshReuseDetectedError) {
52
+ throw err; // keychain compromised — surface loudly, don't come online
53
+ }
54
+ // A transient startup refresh failure is non-fatal: come online on the
55
+ // existing token; the heartbeat lifecycle refreshes / backs off / exits.
56
+ console.log(chalk.yellow(`[acc-runner] companion startup refresh failed: ${err.message}`));
57
+ }
58
+ }
59
+ let supabase = createRunnerClient(cfg, session.access_token, session.realtime_config);
38
60
  const breaker = new ChatCircuitBreaker();
39
61
  await breaker.load();
40
62
  const engine = getChatEngine();
@@ -92,6 +114,38 @@ export async function companionCommand() {
92
114
  }
93
115
  }
94
116
  : undefined;
117
+ // AUTH-REFRESH: rotate the ACC session in place. Called proactively (token
118
+ // near expiry) and reactively (ONE per auth-failure streak) by CompanionRunner.
119
+ // Rebuilds the Supabase client so the next heartbeat bears the fresh JWT, and
120
+ // hot-swaps the transport's client + ingest bearer so turn-serving keeps
121
+ // working across the rotation. Returns true on success. Best-effort persistence.
122
+ const refreshAuth = async () => {
123
+ if (!tokenProvider.canRefresh())
124
+ return false;
125
+ let next;
126
+ try {
127
+ next = await refreshAccessToken(cfg, session);
128
+ }
129
+ catch (err) {
130
+ if (err instanceof RefreshReuseDetectedError) {
131
+ // No safe recovery from a running loop — surface loudly. The lifecycle
132
+ // then rides the backoff ladder to the offline flip + non-zero exit, and
133
+ // the operator must re-login on a trusted machine.
134
+ console.log(chalk.red.bold(`[acc-runner] CRITICAL: ${err.message}`));
135
+ return false;
136
+ }
137
+ throw err; // caught by CompanionRunner.runRefresh → logged, treated as "not refreshed"
138
+ }
139
+ session = next;
140
+ await tokenProvider.save(session).catch(() => {
141
+ /* env-mode save is in-memory; never fatal */
142
+ });
143
+ supabase = createRunnerClient(cfg, session.access_token, session.realtime_config);
144
+ await transport.refreshClient(supabase, session.access_token).catch(() => {
145
+ /* channel teardown is best-effort; the next frame re-subscribes */
146
+ });
147
+ return true;
148
+ };
95
149
  const runner = new CompanionRunner({
96
150
  runnerId: session.runner_id,
97
151
  boundUserId: session.user_id,
@@ -116,6 +170,12 @@ export async function companionCommand() {
116
170
  if (error)
117
171
  throw new Error(error.message);
118
172
  },
173
+ // AUTH-REFRESH: proactive + reactive re-auth. Only wired when the session can
174
+ // actually rotate; a no-refresh session rides the backoff ladder to a clean
175
+ // offline flip + exit instead of a silent zombie loop.
176
+ ...(tokenProvider.canRefresh()
177
+ ? { refreshAuth, expiresSoon: (leadMs) => expiresSoon(session, leadMs) }
178
+ : {}),
119
179
  cwd: cfg.repoPath,
120
180
  onLog: (line) => console.log(chalk.gray(line)),
121
181
  });
@@ -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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"}
@@ -142,6 +142,37 @@ export interface CompanionRunnerDeps {
142
142
  }) => Promise<void>;
143
143
  /** Keep the runner identity online (typically acc.heartbeat_runner). */
144
144
  heartbeat: () => Promise<void>;
145
+ /**
146
+ * AUTH-REFRESH: re-authenticate the ACC session — rotate
147
+ * the access token via the device-code refresh-token path and rebuild the
148
+ * Supabase client so the NEXT `heartbeat()` bears the fresh JWT. Returns true
149
+ * when the session was refreshed. Called (a) PROACTIVELY once the access token
150
+ * is within `proactiveRefreshLeadMs` of expiry (so a live session never lapses
151
+ * — zero user-visible interruption) and (b) REACTIVELY exactly ONCE per
152
+ * auth-failure streak. Absent ⇒ the companion cannot refresh and rides the
153
+ * backoff ladder down to the offline flip + non-zero exit. Best-effort: a
154
+ * throw is caught, logged, and treated as "not refreshed".
155
+ */
156
+ refreshAuth?: () => Promise<boolean>;
157
+ /**
158
+ * AUTH-REFRESH: probe whether the LIVE session's access token expires within
159
+ * `leadMs`. Paired with `refreshAuth` to drive the proactive refresh. Absent ⇒
160
+ * no proactive refresh (reactive-only recovery). Reads the current session so
161
+ * a just-rotated token reports "not soon" and the proactive path self-limits
162
+ * to one refresh per token lifetime rather than every beat.
163
+ */
164
+ expiresSoon?: (leadMs: number) => boolean;
165
+ /** AUTH-REFRESH: proactive-refresh lead time (ms). Default ONE_HOUR_MS. */
166
+ proactiveRefreshLeadMs?: number;
167
+ /**
168
+ * AUTH-REFRESH: consecutive heartbeat failures tolerated before the companion
169
+ * flips its identity offline and exits non-zero. Default 5 (mirrors the fleet
170
+ * runner's HEARTBEAT_EXIT_AFTER). The exit is what makes an infinite spam loop
171
+ * structurally impossible.
172
+ */
173
+ maxHeartbeatFailures?: number;
174
+ /** AUTH-REFRESH: process-exit hook (test seam). Default process.exit. */
175
+ exit?: (code: number) => void;
145
176
  /** Working directory forwarded to the engine per turn. */
146
177
  cwd?: string;
147
178
  /** Mint a per-turn delegation token (narrowly-scoped identity) — optional. */
@@ -169,6 +200,17 @@ export declare class CompanionRunner {
169
200
  private lastCapacity;
170
201
  private stopped;
171
202
  private readonly now;
203
+ private readonly exit;
204
+ private readonly maxHeartbeatFailures;
205
+ private beatMs;
206
+ /** Consecutive failed heartbeats; drives the backoff ladder + offline exit. */
207
+ private heartbeatFailures;
208
+ /** One reactive re-auth per failure streak (reset on the next healthy beat). */
209
+ private reauthedThisStreak;
210
+ /** One consolidated warning line per streak — never a per-tick wall of noise. */
211
+ private warnedThisStreak;
212
+ /** Single-flight guard so proactive + reactive refresh never overlap. */
213
+ private refreshing;
172
214
  constructor(deps: CompanionRunnerDeps);
173
215
  /** Chat turns currently in flight on this companion. */
174
216
  activeChatTurns(): number;
@@ -180,8 +222,34 @@ export declare class CompanionRunner {
180
222
  * offline so Auto routes to the fleet, and tear the mirror down.
181
223
  */
182
224
  stop(): Promise<void>;
183
- /** One heartbeat: keep the identity online + announce a capacity change. */
184
- private beat;
225
+ /**
226
+ * One production heartbeat cycle: run a beat then arm the next backoff-aware
227
+ * timer (unless the beat exited / stopped the runner).
228
+ */
229
+ private beatCycle;
230
+ /**
231
+ * Test hook: run exactly one beat cycle WITHOUT arming the next timer, so a
232
+ * chaos/fake-clock test drives beats deterministically past the backoff ladder
233
+ * (whose ≥4s delays make real-timer tests impractical).
234
+ */
235
+ beatOnce(): Promise<void>;
236
+ /**
237
+ * One heartbeat: proactively refresh a near-expiry token, beat the identity,
238
+ * and on failure walk the backoff ladder → ONE re-auth → offline flip + exit.
239
+ * Does NOT schedule the next beat — the caller (beatCycle) does. A healthy beat
240
+ * also announces a capacity change.
241
+ */
242
+ private runBeat;
243
+ /** Schedule the next beat on the backoff-aware timer (unref'd; test seam via now/heartbeatMs). */
244
+ private scheduleBeat;
245
+ /** Proactively refresh when the live session is within the lead window of expiry. */
246
+ private maybeProactiveRefresh;
247
+ /** Single-flight refresh wrapper — proactive and reactive share one in-flight call. */
248
+ private runRefresh;
249
+ /** Flip the identity offline (via the shared stop() teardown) and exit non-zero. */
250
+ private flipOfflineAndExit;
251
+ /** Announce a capacity change on a healthy beat (unchanged behaviour). */
252
+ private announceCapacityIfChanged;
185
253
  }
186
254
  /**
187
255
  * Build the identity-topic broadcaster for a companion. Broadcasts on
@@ -1 +1 @@
1
- {"version":3,"file":"companion.d.ts","sourceRoot":"","sources":["../src/companion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"companion.d.ts","sourceRoot":"","sources":["../src/companion.ts"],"names":[],"mappings":"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"}
package/dist/companion.js CHANGED
@@ -37,6 +37,7 @@
37
37
  import { createHash } from "node:crypto";
38
38
  import { ChatCompanion } from "./chat-companion.js";
39
39
  import { resolveChatLaneConfig, } from "./chat-lane.js";
40
+ import { ONE_HOUR_MS, classifyHeartbeatError, nextHeartbeatDelayMs, } from "./runtime/auth-lifecycle.js";
40
41
  /** Build the per-identity capacity Realtime topic (mirror of the web builder). */
41
42
  export function identityTopic(userId) {
42
43
  return `identity:${userId}`;
@@ -187,9 +188,23 @@ export class CompanionRunner {
187
188
  lastCapacity = null;
188
189
  stopped = false;
189
190
  now;
191
+ exit;
192
+ maxHeartbeatFailures;
193
+ beatMs = 4_000;
194
+ // AUTH-REFRESH lifecycle state.
195
+ /** Consecutive failed heartbeats; drives the backoff ladder + offline exit. */
196
+ heartbeatFailures = 0;
197
+ /** One reactive re-auth per failure streak (reset on the next healthy beat). */
198
+ reauthedThisStreak = false;
199
+ /** One consolidated warning line per streak — never a per-tick wall of noise. */
200
+ warnedThisStreak = false;
201
+ /** Single-flight guard so proactive + reactive refresh never overlap. */
202
+ refreshing = null;
190
203
  constructor(deps) {
191
204
  this.deps = deps;
192
205
  this.now = deps.now ?? Date.now;
206
+ this.exit = deps.exit ?? ((code) => process.exit(code));
207
+ this.maxHeartbeatFailures = Math.max(1, deps.maxHeartbeatFailures ?? 5);
193
208
  }
194
209
  /** Chat turns currently in flight on this companion. */
195
210
  activeChatTurns() {
@@ -252,11 +267,13 @@ export class CompanionRunner {
252
267
  });
253
268
  this.companion.start(this.deps.pumpMs ?? 1_000);
254
269
  // Heartbeat keeps the identity online; a lapse (sleep/crash) is what flips
255
- // it offline server-side and fails Auto over to the fleet.
256
- await this.beat();
257
- const beatMs = this.deps.heartbeatMs ?? 4_000;
258
- this.heartbeatTimer = setInterval(() => void this.beat(), beatMs);
259
- this.heartbeatTimer.unref?.();
270
+ // it offline server-side and fails Auto over to the fleet. AUTH-REFRESH:
271
+ // the beat is now a self-scheduling backoff-aware loop (not a fixed-cadence
272
+ // setInterval) so an expired token proactively refreshes, an auth failure
273
+ // triggers ONE re-auth then exponential backoff (max 60s), and N consecutive
274
+ // failures flip the identity offline + exit — never an unbounded spam loop.
275
+ this.beatMs = this.deps.heartbeatMs ?? 4_000;
276
+ await this.beatCycle();
260
277
  }
261
278
  /**
262
279
  * Stop the companion: requeue in-flight turns (clean fail-over — the driver
@@ -268,7 +285,7 @@ export class CompanionRunner {
268
285
  return;
269
286
  this.stopped = true;
270
287
  if (this.heartbeatTimer) {
271
- clearInterval(this.heartbeatTimer);
288
+ clearTimeout(this.heartbeatTimer);
272
289
  this.heartbeatTimer = null;
273
290
  }
274
291
  // Requeue every in-flight turn so a fleet runner can finish it.
@@ -286,13 +303,135 @@ export class CompanionRunner {
286
303
  if (this.deps.mirror)
287
304
  await this.deps.mirror.close().catch(() => undefined);
288
305
  }
289
- /** One heartbeat: keep the identity online + announce a capacity change. */
290
- async beat() {
306
+ /**
307
+ * One production heartbeat cycle: run a beat then arm the next backoff-aware
308
+ * timer (unless the beat exited / stopped the runner).
309
+ */
310
+ async beatCycle() {
311
+ await this.runBeat();
312
+ this.scheduleBeat();
313
+ }
314
+ /**
315
+ * Test hook: run exactly one beat cycle WITHOUT arming the next timer, so a
316
+ * chaos/fake-clock test drives beats deterministically past the backoff ladder
317
+ * (whose ≥4s delays make real-timer tests impractical).
318
+ */
319
+ async beatOnce() {
320
+ await this.runBeat();
321
+ }
322
+ /**
323
+ * One heartbeat: proactively refresh a near-expiry token, beat the identity,
324
+ * and on failure walk the backoff ladder → ONE re-auth → offline flip + exit.
325
+ * Does NOT schedule the next beat — the caller (beatCycle) does. A healthy beat
326
+ * also announces a capacity change.
327
+ */
328
+ async runBeat() {
291
329
  if (this.stopped)
292
330
  return;
293
- await this.deps.heartbeat().catch((err) => {
294
- this.deps.onLog?.(`[acc-runner] companion heartbeat failed: ${err.message}`);
295
- });
331
+ // (1) PROACTIVE refresh: rotate a near-expiry token BEFORE it lapses, so a
332
+ // live session never even produces an auth-failed heartbeat. Single-
333
+ // flight + self-limiting (a rotated token reports "not soon" next beat).
334
+ await this.maybeProactiveRefresh();
335
+ if (this.stopped)
336
+ return;
337
+ // (2) Beat.
338
+ let error = null;
339
+ try {
340
+ await this.deps.heartbeat();
341
+ }
342
+ catch (err) {
343
+ error = err;
344
+ }
345
+ if (this.stopped)
346
+ return;
347
+ if (!error) {
348
+ if (this.heartbeatFailures > 0) {
349
+ this.deps.onLog?.("[acc-runner] companion heartbeat recovered");
350
+ }
351
+ this.heartbeatFailures = 0;
352
+ this.reauthedThisStreak = false;
353
+ this.warnedThisStreak = false;
354
+ await this.announceCapacityIfChanged();
355
+ return;
356
+ }
357
+ // (3) Failed. Bump the streak and classify.
358
+ this.heartbeatFailures += 1;
359
+ const kind = classifyHeartbeatError(error);
360
+ // SINGLE consolidated warning per streak — the fix for the unbounded
361
+ // "companion heartbeat failed: JWT expired" wall the operator hit. The
362
+ // backoff + exit below make the spam loop structurally impossible even
363
+ // without this dedupe; the dedupe keeps a slow multi-failure streak quiet.
364
+ if (!this.warnedThisStreak) {
365
+ this.warnedThisStreak = true;
366
+ this.deps.onLog?.(`[acc-runner] companion heartbeat failing (${kind}): ${(error.message ?? "").trim()}; ` +
367
+ `backing off, will go offline after ${this.maxHeartbeatFailures} consecutive failures`);
368
+ }
369
+ // (4) REACTIVE re-auth: exactly ONCE per streak, only on an auth-shaped
370
+ // failure. A refresh that recovers resets the streak on the next beat's
371
+ // success; a refresh that doesn't lets the ladder run to the exit.
372
+ if (kind === "auth" && !this.reauthedThisStreak && this.deps.refreshAuth) {
373
+ this.reauthedThisStreak = true;
374
+ const ok = await this.runRefresh("heartbeat auth failure");
375
+ if (ok)
376
+ this.deps.onLog?.("[acc-runner] companion re-authenticated; retrying heartbeat");
377
+ if (this.stopped)
378
+ return;
379
+ }
380
+ // (5) Give up after N: flip the identity offline (Auto fails over to the
381
+ // fleet, honest UI states fire) and EXIT non-zero so the autostart login
382
+ // agent relaunches cleanly — never a zombie process spinning forever.
383
+ if (this.heartbeatFailures >= this.maxHeartbeatFailures) {
384
+ await this.flipOfflineAndExit(kind);
385
+ }
386
+ }
387
+ /** Schedule the next beat on the backoff-aware timer (unref'd; test seam via now/heartbeatMs). */
388
+ scheduleBeat() {
389
+ if (this.stopped)
390
+ return;
391
+ const delay = nextHeartbeatDelayMs(this.heartbeatFailures, this.beatMs);
392
+ this.heartbeatTimer = setTimeout(() => void this.beatCycle(), delay);
393
+ this.heartbeatTimer.unref?.();
394
+ }
395
+ /** Proactively refresh when the live session is within the lead window of expiry. */
396
+ async maybeProactiveRefresh() {
397
+ if (!this.deps.refreshAuth || !this.deps.expiresSoon)
398
+ return;
399
+ if (!this.deps.expiresSoon(this.deps.proactiveRefreshLeadMs ?? ONE_HOUR_MS))
400
+ return;
401
+ await this.runRefresh("proactive: token near expiry");
402
+ }
403
+ /** Single-flight refresh wrapper — proactive and reactive share one in-flight call. */
404
+ runRefresh(reason) {
405
+ if (this.refreshing)
406
+ return this.refreshing;
407
+ const refreshAuth = this.deps.refreshAuth;
408
+ if (!refreshAuth)
409
+ return Promise.resolve(false);
410
+ this.refreshing = (async () => {
411
+ try {
412
+ return await refreshAuth();
413
+ }
414
+ catch (err) {
415
+ this.deps.onLog?.(`[acc-runner] companion token refresh failed (${reason}): ${err.message}`);
416
+ return false;
417
+ }
418
+ finally {
419
+ this.refreshing = null;
420
+ }
421
+ })();
422
+ return this.refreshing;
423
+ }
424
+ /** Flip the identity offline (via the shared stop() teardown) and exit non-zero. */
425
+ async flipOfflineAndExit(kind) {
426
+ this.deps.onLog?.(`[acc-runner] companion offline after ${this.maxHeartbeatFailures} consecutive heartbeat ` +
427
+ `failures (${kind}); flipping identity offline and exiting for a clean autostart relaunch`);
428
+ // stop() requeues in-flight turns, announces companion_lost (immediate
429
+ // offline flip → Auto fails over to the fleet), and closes the mirror.
430
+ await this.stop();
431
+ this.exit(1);
432
+ }
433
+ /** Announce a capacity change on a healthy beat (unchanged behaviour). */
434
+ async announceCapacityIfChanged() {
296
435
  const capacity = await this.deps.engine.classifyCapacity().catch(() => this.lastCapacity);
297
436
  if (capacity && capacity !== this.lastCapacity) {
298
437
  this.lastCapacity = capacity;
@@ -1 +1 @@
1
- {"version":3,"file":"companion.js","sourceRoot":"","sources":["../src/companion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"companion.js","sourceRoot":"","sources":["../src/companion.ts"],"names":[],"mappings":"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"}