looply-cli 0.5.26 → 0.5.28

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 (42) hide show
  1. package/dist/.src-hash +1 -1
  2. package/dist/account-connect.d.ts +66 -0
  3. package/dist/account-connect.d.ts.map +1 -0
  4. package/dist/account-connect.js +271 -0
  5. package/dist/account-connect.js.map +1 -0
  6. package/dist/adaptive-budget.d.ts +20 -0
  7. package/dist/adaptive-budget.d.ts.map +1 -0
  8. package/dist/adaptive-budget.js +33 -0
  9. package/dist/adaptive-budget.js.map +1 -0
  10. package/dist/daemon-cmd.d.ts.map +1 -1
  11. package/dist/daemon-cmd.js +10 -0
  12. package/dist/daemon-cmd.js.map +1 -1
  13. package/dist/daemon.d.ts +5 -0
  14. package/dist/daemon.d.ts.map +1 -1
  15. package/dist/daemon.js +4 -0
  16. package/dist/daemon.js.map +1 -1
  17. package/dist/goal-gap.d.ts +10 -0
  18. package/dist/goal-gap.d.ts.map +1 -1
  19. package/dist/goal-gap.js +15 -2
  20. package/dist/goal-gap.js.map +1 -1
  21. package/dist/machine-secrets.d.ts +6 -1
  22. package/dist/machine-secrets.d.ts.map +1 -1
  23. package/dist/machine-secrets.js +13 -1
  24. package/dist/machine-secrets.js.map +1 -1
  25. package/dist/model-transport.d.ts.map +1 -1
  26. package/dist/model-transport.js +18 -1
  27. package/dist/model-transport.js.map +1 -1
  28. package/dist/provider-accounts-cmd.d.ts.map +1 -1
  29. package/dist/provider-accounts-cmd.js +11 -2
  30. package/dist/provider-accounts-cmd.js.map +1 -1
  31. package/dist/provider-accounts.d.ts +49 -2
  32. package/dist/provider-accounts.d.ts.map +1 -1
  33. package/dist/provider-accounts.js +149 -7
  34. package/dist/provider-accounts.js.map +1 -1
  35. package/dist/run-cmd.d.ts.map +1 -1
  36. package/dist/run-cmd.js +18 -2
  37. package/dist/run-cmd.js.map +1 -1
  38. package/dist/server-client.d.ts +10 -0
  39. package/dist/server-client.d.ts.map +1 -1
  40. package/dist/server-client.js +8 -0
  41. package/dist/server-client.js.map +1 -1
  42. package/package.json +2 -2
package/dist/.src-hash CHANGED
@@ -1 +1 @@
1
- 7caee21c345cb186acd2f120fe2b5b475269ff16d7e0d8495e282c88b8d5d3a4
1
+ 2d1a4956c2c51742e436ea379eeedd8aac1e2ba5271d6119924aa8b99c8fb7a9
@@ -0,0 +1,66 @@
1
+ import { type AccountsCmdDeps } from './provider-accounts-cmd';
2
+ /**
3
+ * CONNECT A CLAUDE ACCOUNT STARTED IN AUTORYN (core `account-connect.ts`).
4
+ *
5
+ * The heartbeat says a sign-in waits for this machine. One daemon on the machine
6
+ * (a lock file; many daemons serve one machine) runs Claude Code's own sign-in,
7
+ * `claude auth login`, in the account's profile, with no terminal: Claude Code
8
+ * then prints its sign-in link and reads the code from its input. The link goes
9
+ * back to AutoRyn; the code the person pastes there comes back sealed to this
10
+ * machine, is opened here and typed into the waiting sign-in. On success the
11
+ * account is added (or, for an existing sign-in, refreshed) and checked.
12
+ *
13
+ * 🔴 THE CODE IS NEVER LOGGED OR REPORTED, and no browser is opened on this PC:
14
+ * the person signs in wherever they are looking at AutoRyn.
15
+ */
16
+ export declare const CONNECT_LOCK_FILE = "account-connect.lock";
17
+ /** How often the daemon running a sign-in looks for the code, or for a person cancelling it. */
18
+ export declare const CONNECT_POLL_MS = 3000;
19
+ /** Claude Code prints its link at once; this long without one is a failure. */
20
+ export declare const CONNECT_LINK_TIMEOUT_MS = 60000;
21
+ export interface ConnectClient {
22
+ accountConnect(): Promise<{
23
+ session: unknown;
24
+ sealedCode: string | null;
25
+ }>;
26
+ reportAccountConnect(body: Record<string, unknown>): Promise<{
27
+ session: unknown;
28
+ }>;
29
+ }
30
+ export interface ConnectChild {
31
+ stdin: {
32
+ write(s: string): unknown;
33
+ end(): unknown;
34
+ } | null;
35
+ stdout: {
36
+ on(ev: 'data', fn: (b: Buffer | string) => void): unknown;
37
+ } | null;
38
+ stderr: {
39
+ on(ev: 'data', fn: (b: Buffer | string) => void): unknown;
40
+ } | null;
41
+ on(ev: 'exit', fn: (code: number | null) => void): unknown;
42
+ on(ev: 'error', fn: (e: Error) => void): unknown;
43
+ kill(): unknown;
44
+ }
45
+ export interface ConnectDeps {
46
+ client: ConnectClient;
47
+ log: (line: string) => void;
48
+ /** The accounts commands' dependencies: Claude Code's executable and the readiness check. */
49
+ accounts: () => AccountsCmdDeps | undefined;
50
+ home?: string;
51
+ spawn?: (exe: string, argv: readonly string[], env: Record<string, string>) => ConnectChild;
52
+ sleep?: (ms: number) => Promise<void>;
53
+ now?: () => number;
54
+ pollMs?: number;
55
+ linkTimeoutMs?: number;
56
+ }
57
+ /** The environment Claude Code's sign-in runs with: this profile, no browser, and no credential from this shell. */
58
+ export declare function connectEnv(profileDir: string, base?: NodeJS.ProcessEnv): Record<string, string>;
59
+ /** The plain sentence Claude Code ended with ("Login failed: …"), without any link. */
60
+ export declare function connectProblemOf(output: string): string | null;
61
+ /**
62
+ * Called with the session id the heartbeat named. Returns at once when another
63
+ * daemon (or this one) already runs it, or when there is nothing to start.
64
+ */
65
+ export declare function makeAccountConnect(deps: ConnectDeps): (turnId: string) => Promise<void>;
66
+ //# sourceMappingURL=account-connect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-connect.d.ts","sourceRoot":"","sources":["../src/account-connect.ts"],"names":[],"mappings":"AAOA,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE7E;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,iBAAiB,yBAAyB,CAAC;AACxD,gGAAgG;AAChG,eAAO,MAAM,eAAe,OAAO,CAAC;AACpC,+EAA+E;AAC/E,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAI9C,MAAM,WAAW,aAAa;IAC5B,cAAc,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAC3E,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACpF;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE;QAAE,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,GAAG,IAAI,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5D,MAAM,EAAE;QAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,GAAG,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7E,MAAM,EAAE;QAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,GAAG,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7E,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC;IAC3D,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC;IACjD,IAAI,IAAI,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,aAAa,CAAC;IACtB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,6FAA6F;IAC7F,QAAQ,EAAE,MAAM,eAAe,GAAG,SAAS,CAAC;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,YAAY,CAAC;IAC5F,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,oHAAoH;AACpH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAU5G;AAED,uFAAuF;AACvF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG9D;AAsCD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAoKvF"}
@@ -0,0 +1,271 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CONNECT_LINK_TIMEOUT_MS = exports.CONNECT_POLL_MS = exports.CONNECT_LOCK_FILE = void 0;
4
+ exports.connectEnv = connectEnv;
5
+ exports.connectProblemOf = connectProblemOf;
6
+ exports.makeAccountConnect = makeAccountConnect;
7
+ const node_child_process_1 = require("node:child_process");
8
+ const node_fs_1 = require("node:fs");
9
+ const node_os_1 = require("node:os");
10
+ const node_path_1 = require("node:path");
11
+ const core_1 = require("@looply/core");
12
+ const machine_secrets_1 = require("./machine-secrets");
13
+ const provider_accounts_1 = require("./provider-accounts");
14
+ const provider_accounts_cmd_1 = require("./provider-accounts-cmd");
15
+ /**
16
+ * CONNECT A CLAUDE ACCOUNT STARTED IN AUTORYN (core `account-connect.ts`).
17
+ *
18
+ * The heartbeat says a sign-in waits for this machine. One daemon on the machine
19
+ * (a lock file; many daemons serve one machine) runs Claude Code's own sign-in,
20
+ * `claude auth login`, in the account's profile, with no terminal: Claude Code
21
+ * then prints its sign-in link and reads the code from its input. The link goes
22
+ * back to AutoRyn; the code the person pastes there comes back sealed to this
23
+ * machine, is opened here and typed into the waiting sign-in. On success the
24
+ * account is added (or, for an existing sign-in, refreshed) and checked.
25
+ *
26
+ * 🔴 THE CODE IS NEVER LOGGED OR REPORTED, and no browser is opened on this PC:
27
+ * the person signs in wherever they are looking at AutoRyn.
28
+ */
29
+ exports.CONNECT_LOCK_FILE = 'account-connect.lock';
30
+ /** How often the daemon running a sign-in looks for the code, or for a person cancelling it. */
31
+ exports.CONNECT_POLL_MS = 3000;
32
+ /** Claude Code prints its link at once; this long without one is a failure. */
33
+ exports.CONNECT_LINK_TIMEOUT_MS = 60_000;
34
+ /** Claude Code reads BROWSER: a program that does not exist, so it prints the link instead of opening one here. */
35
+ const NO_BROWSER = 'looply-no-browser';
36
+ /** The environment Claude Code's sign-in runs with: this profile, no browser, and no credential from this shell. */
37
+ function connectEnv(profileDir, base = process.env) {
38
+ const env = {};
39
+ for (const [k, v] of Object.entries(base)) {
40
+ if (v === undefined)
41
+ continue;
42
+ if (k === 'ANTHROPIC_API_KEY' || k === 'CLAUDE_CODE_OAUTH_TOKEN' || k === 'ANTHROPIC_AUTH_TOKEN')
43
+ continue;
44
+ env[k] = v;
45
+ }
46
+ env['CLAUDE_CONFIG_DIR'] = profileDir;
47
+ env['BROWSER'] = NO_BROWSER;
48
+ return env;
49
+ }
50
+ /** The plain sentence Claude Code ended with ("Login failed: …"), without any link. */
51
+ function connectProblemOf(output) {
52
+ const line = output.split(/\r?\n/).map((l) => l.replace(/Paste code here if prompted >\s*/g, '').trim()).find((l) => /^Login failed/i.test(l));
53
+ return line ? line.replace(/https?:\/\/\S+/g, '[link]').slice(0, 300) : null;
54
+ }
55
+ function takeLock(home, id, ttlMs, now) {
56
+ const dir = (0, node_path_1.join)(home, '.looply');
57
+ const file = (0, node_path_1.join)(dir, exports.CONNECT_LOCK_FILE);
58
+ (0, node_fs_1.mkdirSync)(dir, { recursive: true });
59
+ try {
60
+ if (now - (0, node_fs_1.statSync)(file).mtimeMs > ttlMs)
61
+ (0, node_fs_1.rmSync)(file, { force: true });
62
+ }
63
+ catch {
64
+ /* no lock yet */
65
+ }
66
+ try {
67
+ (0, node_fs_1.writeFileSync)(file, JSON.stringify({ id, pid: process.pid, at: new Date(now).toISOString() }), { flag: 'wx' });
68
+ return true;
69
+ }
70
+ catch {
71
+ return false;
72
+ }
73
+ }
74
+ function dropLock(home, id) {
75
+ const file = (0, node_path_1.join)(home, '.looply', exports.CONNECT_LOCK_FILE);
76
+ try {
77
+ if (JSON.parse((0, node_fs_1.readFileSync)(file, 'utf8')).id === id)
78
+ (0, node_fs_1.rmSync)(file, { force: true });
79
+ }
80
+ catch {
81
+ /* already gone */
82
+ }
83
+ }
84
+ /* istanbul ignore next — a real process; the flow is tested with a fake */
85
+ function defaultSpawn(exe, argv, env) {
86
+ return (0, node_child_process_1.spawn)(exe, [...argv], {
87
+ env,
88
+ stdio: ['pipe', 'pipe', 'pipe'],
89
+ windowsHide: true,
90
+ shell: process.platform === 'win32' && exe.toLowerCase().endsWith('.cmd'),
91
+ });
92
+ }
93
+ /**
94
+ * Called with the session id the heartbeat named. Returns at once when another
95
+ * daemon (or this one) already runs it, or when there is nothing to start.
96
+ */
97
+ function makeAccountConnect(deps) {
98
+ const home = deps.home ?? (0, node_os_1.homedir)();
99
+ const sleep = deps.sleep ?? ((ms) => new Promise((r) => setTimeout(r, ms)));
100
+ const now = deps.now ?? (() => Date.now());
101
+ const pollMs = deps.pollMs ?? exports.CONNECT_POLL_MS;
102
+ const linkTimeoutMs = deps.linkTimeoutMs ?? exports.CONNECT_LINK_TIMEOUT_MS;
103
+ let running = null;
104
+ const report = async (s, body) => {
105
+ try {
106
+ return (0, core_1.accountConnectOf)((await deps.client.reportAccountConnect({ id: s.id, ...body })).session);
107
+ }
108
+ catch (e) {
109
+ deps.log(`accounts: could not tell AutoRyn how the sign-in goes — ${e.message}`);
110
+ return null;
111
+ }
112
+ };
113
+ return async (turnId) => {
114
+ if (running !== null)
115
+ return;
116
+ let listed;
117
+ try {
118
+ listed = await deps.client.accountConnect();
119
+ }
120
+ catch {
121
+ return;
122
+ }
123
+ const session = (0, core_1.accountConnectOf)(listed.session);
124
+ if (session === null || session.id !== turnId || session.state !== 'requested')
125
+ return;
126
+ const ttl = Math.max(Date.parse(session.expiresAt) - now(), 60_000);
127
+ if (!takeLock(home, session.id, ttl, now()))
128
+ return;
129
+ running = session.id;
130
+ try {
131
+ await run(session, Date.parse(session.expiresAt));
132
+ }
133
+ finally {
134
+ running = null;
135
+ dropLock(home, session.id);
136
+ }
137
+ };
138
+ async function run(s, deadline) {
139
+ const accountsDeps = deps.accounts();
140
+ const exe = accountsDeps?.claudeExecutable() ?? null;
141
+ if (accountsDeps === undefined || exe === null) {
142
+ await report(s, { state: 'failed', problem: 'Claude Code is not installed on this PC — run `looply provider install` there' });
143
+ return;
144
+ }
145
+ const before = (0, provider_accounts_1.readAccounts)(home).find((a) => a.name === s.name);
146
+ if (before?.source === 'token') {
147
+ await report(s, { state: 'failed', problem: `"${s.name}" is an account added with a token on this PC; pick another name` });
148
+ return;
149
+ }
150
+ if (before !== undefined && before.provider !== 'claude') {
151
+ await report(s, { state: 'failed', problem: `"${s.name}" is a ${before.provider} account on this PC; pick another name` });
152
+ return;
153
+ }
154
+ await report(s, { state: 'starting' });
155
+ const profileDir = (0, provider_accounts_1.accountProfileDir)(s.name, home);
156
+ (0, node_fs_1.mkdirSync)(profileDir, { recursive: true });
157
+ deps.log(`accounts: signing "${s.name}" in for AutoRyn (Claude Code's own sign-in)`);
158
+ let output = '';
159
+ let exitCode;
160
+ let child;
161
+ try {
162
+ child = (deps.spawn ?? defaultSpawn)(exe, ['auth', 'login', s.method === 'console' ? '--console' : '--claudeai'], connectEnv(profileDir));
163
+ }
164
+ catch (e) {
165
+ await report(s, { state: 'failed', problem: `Claude Code could not start: ${e.message}`.slice(0, 300) });
166
+ return;
167
+ }
168
+ const take = (b) => {
169
+ output = (output + b.toString()).slice(-20_000);
170
+ };
171
+ child.stdout?.on('data', take);
172
+ child.stderr?.on('data', take);
173
+ child.on('exit', (code) => {
174
+ exitCode = code;
175
+ });
176
+ child.on('error', (e) => {
177
+ take(`\nLogin failed: ${e.message}\n`);
178
+ exitCode = exitCode ?? 1;
179
+ });
180
+ const stop = () => {
181
+ try {
182
+ child.kill();
183
+ }
184
+ catch {
185
+ /* already gone */
186
+ }
187
+ };
188
+ const startedAt = now();
189
+ let linkSent = false;
190
+ let codeSent = false;
191
+ for (;;) {
192
+ if (exitCode !== undefined)
193
+ break;
194
+ if (!linkSent) {
195
+ const url = (0, core_1.signInUrlOf)(output);
196
+ if (url !== null) {
197
+ const after = await report(s, { state: 'waiting_for_code', signInUrl: url });
198
+ if (after !== null && core_1.ACCOUNT_CONNECT_ENDED.includes(after.state)) {
199
+ stop();
200
+ return;
201
+ }
202
+ linkSent = true;
203
+ }
204
+ else if (now() - startedAt > linkTimeoutMs) {
205
+ stop();
206
+ await report(s, { state: 'failed', problem: 'Claude Code did not give a sign-in link; update it with `looply provider update` and try again' });
207
+ return;
208
+ }
209
+ }
210
+ if (now() > deadline) {
211
+ stop();
212
+ await report(s, { state: 'expired', problem: 'the sign-in was not finished in time; start again' });
213
+ return;
214
+ }
215
+ await sleep(pollMs);
216
+ if (exitCode !== undefined)
217
+ break;
218
+ if (!linkSent || codeSent)
219
+ continue;
220
+ let listed;
221
+ try {
222
+ listed = await deps.client.accountConnect();
223
+ }
224
+ catch {
225
+ continue;
226
+ }
227
+ const cur = (0, core_1.accountConnectOf)(listed.session);
228
+ if (cur === null || cur.id !== s.id || core_1.ACCOUNT_CONNECT_ENDED.includes(cur.state)) {
229
+ // A person cancelled it, or started another.
230
+ stop();
231
+ deps.log(`accounts: the sign-in of "${s.name}" was stopped in AutoRyn`);
232
+ return;
233
+ }
234
+ if (cur.state === 'code_sent' && typeof listed.sealedCode === 'string') {
235
+ let code;
236
+ try {
237
+ code = (0, core_1.openSealed)((0, machine_secrets_1.ensureSealKey)(home).privateKey, listed.sealedCode).trim();
238
+ }
239
+ catch {
240
+ stop();
241
+ await report(s, { state: 'failed', problem: 'this PC could not open the code (it was sealed to another key); start again' });
242
+ return;
243
+ }
244
+ child.stdin?.write(`${code}\n`);
245
+ child.stdin?.end();
246
+ codeSent = true;
247
+ await report(s, { state: 'signing_in' });
248
+ }
249
+ }
250
+ // Claude Code ended: signed in, or not.
251
+ if (exitCode !== 0) {
252
+ await report(s, {
253
+ state: 'failed',
254
+ problem: connectProblemOf(output) ?? (codeSent ? 'Claude did not accept the sign-in; start again' : 'the sign-in stopped before it finished'),
255
+ });
256
+ return;
257
+ }
258
+ const isNew = before === undefined && s.name !== 'default';
259
+ const entry = isNew ? (0, provider_accounts_1.addAccount)({ name: s.name, provider: 'claude' }, home) : (0, provider_accounts_1.readAccounts)(home).find((a) => a.name === s.name);
260
+ const auth = (0, provider_accounts_cmd_1.checkAccount)(entry, { ...accountsDeps, home });
261
+ if (!auth.ok) {
262
+ if (isNew)
263
+ (0, provider_accounts_1.removeAccount)(s.name, home);
264
+ await report(s, { state: 'failed', problem: `the sign-in finished but Claude Code does not see it: ${auth.because}`.slice(0, 300) });
265
+ return;
266
+ }
267
+ deps.log(`accounts: "${s.name}" signed in from AutoRyn`);
268
+ await report(s, { state: 'connected', authMethod: auth.authMethod, plan: auth.plan });
269
+ }
270
+ }
271
+ //# sourceMappingURL=account-connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-connect.js","sourceRoot":"","sources":["../src/account-connect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type CompileTier } from './goal-compile';
2
+ /**
3
+ * WHAT AN ADAPTIVE START MAY SPEND BEFORE THE RUN, in one place: the goal check, then a compile,
4
+ * then a verify pass over at most `compile.maxSteps` steps — together never more than
5
+ * {@link ADAPTIVE_BUDGET_MS}, a third of the sixty-minute command window spare
6
+ * (`goal-gap.spec.ts`).
7
+ *
8
+ * Each limit grows with its own timeouts (`planner-timeouts.ts`, keyed apart). When the check has
9
+ * grown, the plan after it gets fewer steps first and, only if one step still does not fit, a
10
+ * shorter compile: a longer check is bought by the plan that follows it, never by the window.
11
+ */
12
+ export declare const ADAPTIVE_BUDGET_MS: number;
13
+ export interface AdaptiveBudget {
14
+ readonly checkMs: number;
15
+ readonly compile: CompileTier;
16
+ }
17
+ export declare function adaptiveBudgetFor(checkTimeouts: number, planTimeouts: number): AdaptiveBudget;
18
+ /** The key a goal version's timed-out CHECKS are counted under — apart from its timed-out plannings. */
19
+ export declare function goalCheckTimeoutKey(goalId: string, version: number): string;
20
+ //# sourceMappingURL=adaptive-budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adaptive-budget.d.ts","sourceRoot":"","sources":["../src/adaptive-budget.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0C,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAI1F;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,QAAiB,CAAC;AAEjD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;CAC/B;AAED,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,cAAc,CAO7F;AAED,wGAAwG;AACxG,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3E"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ADAPTIVE_BUDGET_MS = void 0;
4
+ exports.adaptiveBudgetFor = adaptiveBudgetFor;
5
+ exports.goalCheckTimeoutKey = goalCheckTimeoutKey;
6
+ const goal_compile_1 = require("./goal-compile");
7
+ const goal_gap_1 = require("./goal-gap");
8
+ const verify_cmd_1 = require("./verify-cmd");
9
+ /**
10
+ * WHAT AN ADAPTIVE START MAY SPEND BEFORE THE RUN, in one place: the goal check, then a compile,
11
+ * then a verify pass over at most `compile.maxSteps` steps — together never more than
12
+ * {@link ADAPTIVE_BUDGET_MS}, a third of the sixty-minute command window spare
13
+ * (`goal-gap.spec.ts`).
14
+ *
15
+ * Each limit grows with its own timeouts (`planner-timeouts.ts`, keyed apart). When the check has
16
+ * grown, the plan after it gets fewer steps first and, only if one step still does not fit, a
17
+ * shorter compile: a longer check is bought by the plan that follows it, never by the window.
18
+ */
19
+ exports.ADAPTIVE_BUDGET_MS = 40 * 60 * 1000;
20
+ function adaptiveBudgetFor(checkTimeouts, planTimeouts) {
21
+ const checkMs = (0, goal_gap_1.goalCheckTimeoutFor)(checkTimeouts);
22
+ const tier = (0, goal_compile_1.compileTierFor)(planTimeouts, goal_compile_1.ADAPTIVE_COMPILE_TIERS);
23
+ let maxSteps = tier.maxSteps;
24
+ while (maxSteps > 1 && checkMs + tier.timeoutMs + maxSteps * verify_cmd_1.VERIFIER_TIMEOUT_MS > exports.ADAPTIVE_BUDGET_MS)
25
+ maxSteps--;
26
+ const timeoutMs = Math.min(tier.timeoutMs, exports.ADAPTIVE_BUDGET_MS - checkMs - maxSteps * verify_cmd_1.VERIFIER_TIMEOUT_MS);
27
+ return { checkMs, compile: { timeoutMs, maxSteps } };
28
+ }
29
+ /** The key a goal version's timed-out CHECKS are counted under — apart from its timed-out plannings. */
30
+ function goalCheckTimeoutKey(goalId, version) {
31
+ return `${goalId}@${version}#goal-check`;
32
+ }
33
+ //# sourceMappingURL=adaptive-budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adaptive-budget.js","sourceRoot":"","sources":["../src/adaptive-budget.ts"],"names":[],"mappings":";;;AAqBA,8CAOC;AAGD,kDAEC;AAjCD,iDAA0F;AAC1F,yCAAiD;AACjD,6CAAmD;AAEnD;;;;;;;;;GASG;AACU,QAAA,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAOjD,SAAgB,iBAAiB,CAAC,aAAqB,EAAE,YAAoB;IAC3E,MAAM,OAAO,GAAG,IAAA,8BAAmB,EAAC,aAAa,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,IAAA,6BAAc,EAAC,YAAY,EAAE,qCAAsB,CAAC,CAAC;IAClE,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC7B,OAAO,QAAQ,GAAG,CAAC,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,QAAQ,GAAG,gCAAmB,GAAG,0BAAkB;QAAE,QAAQ,EAAE,CAAC;IAClH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,0BAAkB,GAAG,OAAO,GAAG,QAAQ,GAAG,gCAAmB,CAAC,CAAC;IAC1G,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC;AACvD,CAAC;AAED,wGAAwG;AACxG,SAAgB,mBAAmB,CAAC,MAAc,EAAE,OAAe;IACjE,OAAO,GAAG,MAAM,IAAI,OAAO,aAAa,CAAC;AAC3C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"daemon-cmd.d.ts","sourceRoot":"","sources":["../src/daemon-cmd.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon-cmd.d.ts","sourceRoot":"","sources":["../src/daemon-cmd.ts"],"names":[],"mappings":"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"}
@@ -46,6 +46,7 @@ const feature_report_1 = require("./feature-report");
46
46
  const machine_secrets_1 = require("./machine-secrets");
47
47
  const machine_settings_1 = require("./machine-settings");
48
48
  const provider_accounts_1 = require("./provider-accounts");
49
+ const account_connect_1 = require("./account-connect");
49
50
  const provider_accounts_cmd_1 = require("./provider-accounts-cmd");
50
51
  const serve_1 = require("./serve");
51
52
  const branch_delivery_wiring_1 = require("./branch-delivery-wiring");
@@ -1262,6 +1263,13 @@ async function daemonCommand(opts) {
1262
1263
  await pullModels();
1263
1264
  await pullFeatures();
1264
1265
  await pullSecrets().catch(() => undefined);
1266
+ // AI accounts added from AutoRyn arrive as sealed tokens: make them (or let them go) right after.
1267
+ try {
1268
+ (0, provider_accounts_1.syncTokenAccounts)({ log: opts.log });
1269
+ }
1270
+ catch (e) {
1271
+ opts.log(`accounts: could not update the accounts added from AutoRyn — ${e.message}`);
1272
+ }
1265
1273
  await reportFeatures();
1266
1274
  /**
1267
1275
  * On the same five-minute cadence: the project's delivery choice (pr |
@@ -1311,6 +1319,8 @@ async function daemonCommand(opts) {
1311
1319
  * page and for picking a machine of a repository group.
1312
1320
  */
1313
1321
  accounts: () => (0, provider_accounts_1.accountReports)(),
1322
+ // "Connect Claude account" in AutoRyn: Claude Code's own sign-in, run here, the code relayed sealed.
1323
+ accountConnect: (0, account_connect_1.makeAccountConnect)({ client, log: opts.log, accounts: () => (0, provider_cmd_1.nodeProviderDeps)({}).accounts }),
1314
1324
  slots: () => ({ running: machineSlots.inUse(), max: machineSlots.cap }),
1315
1325
  pullAccountPolicies: async () => {
1316
1326
  const pulled = await makeAccountPoliciesPullOnce();