looply-cli 0.5.27 → 0.5.29

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 (102) hide show
  1. package/dist/account-connect.d.ts +66 -0
  2. package/dist/account-connect.d.ts.map +1 -0
  3. package/dist/account-connect.js +279 -0
  4. package/dist/account-connect.js.map +1 -0
  5. package/dist/bin.d.ts.map +1 -1
  6. package/dist/bin.js +5 -3
  7. package/dist/bin.js.map +1 -1
  8. package/dist/branch-delivery-wiring.d.ts.map +1 -1
  9. package/dist/branch-delivery-wiring.js +2 -0
  10. package/dist/branch-delivery-wiring.js.map +1 -1
  11. package/dist/branch-delivery.d.ts +43 -0
  12. package/dist/branch-delivery.d.ts.map +1 -1
  13. package/dist/branch-delivery.js +106 -3
  14. package/dist/branch-delivery.js.map +1 -1
  15. package/dist/config.d.ts +5 -0
  16. package/dist/config.d.ts.map +1 -1
  17. package/dist/config.js +1 -0
  18. package/dist/config.js.map +1 -1
  19. package/dist/connect-node.d.ts.map +1 -1
  20. package/dist/connect-node.js +23 -1
  21. package/dist/connect-node.js.map +1 -1
  22. package/dist/connect.d.ts +2 -0
  23. package/dist/connect.d.ts.map +1 -1
  24. package/dist/connect.js +13 -5
  25. package/dist/connect.js.map +1 -1
  26. package/dist/daemon-cmd.d.ts +3 -0
  27. package/dist/daemon-cmd.d.ts.map +1 -1
  28. package/dist/daemon-cmd.js +15 -1
  29. package/dist/daemon-cmd.js.map +1 -1
  30. package/dist/daemon.d.ts +5 -0
  31. package/dist/daemon.d.ts.map +1 -1
  32. package/dist/daemon.js +4 -0
  33. package/dist/daemon.js.map +1 -1
  34. package/dist/effective-gates.d.ts +58 -0
  35. package/dist/effective-gates.d.ts.map +1 -0
  36. package/dist/effective-gates.js +153 -0
  37. package/dist/effective-gates.js.map +1 -0
  38. package/dist/environment-hold.d.ts.map +1 -1
  39. package/dist/environment-hold.js +10 -0
  40. package/dist/environment-hold.js.map +1 -1
  41. package/dist/feature-report.d.ts +10 -3
  42. package/dist/feature-report.d.ts.map +1 -1
  43. package/dist/feature-report.js +44 -1
  44. package/dist/feature-report.js.map +1 -1
  45. package/dist/gate-draft.d.ts +16 -0
  46. package/dist/gate-draft.d.ts.map +1 -1
  47. package/dist/gate-draft.js +86 -4
  48. package/dist/gate-draft.js.map +1 -1
  49. package/dist/gate-health.d.ts +157 -0
  50. package/dist/gate-health.d.ts.map +1 -0
  51. package/dist/gate-health.js +432 -0
  52. package/dist/gate-health.js.map +1 -0
  53. package/dist/github-api.d.ts +2 -0
  54. package/dist/github-api.d.ts.map +1 -1
  55. package/dist/github-api.js +1 -0
  56. package/dist/github-api.js.map +1 -1
  57. package/dist/init-detect.d.ts +2 -0
  58. package/dist/init-detect.d.ts.map +1 -1
  59. package/dist/init-detect.js +4 -0
  60. package/dist/init-detect.js.map +1 -1
  61. package/dist/integration-deps.d.ts.map +1 -1
  62. package/dist/integration-deps.js +17 -6
  63. package/dist/integration-deps.js.map +1 -1
  64. package/dist/machine-secrets.d.ts +6 -1
  65. package/dist/machine-secrets.d.ts.map +1 -1
  66. package/dist/machine-secrets.js +13 -1
  67. package/dist/machine-secrets.js.map +1 -1
  68. package/dist/model-transport.d.ts.map +1 -1
  69. package/dist/model-transport.js +18 -1
  70. package/dist/model-transport.js.map +1 -1
  71. package/dist/pair-cmd.d.ts +13 -1
  72. package/dist/pair-cmd.d.ts.map +1 -1
  73. package/dist/pair-cmd.js +30 -13
  74. package/dist/pair-cmd.js.map +1 -1
  75. package/dist/provider-accounts-cmd.d.ts.map +1 -1
  76. package/dist/provider-accounts-cmd.js +11 -2
  77. package/dist/provider-accounts-cmd.js.map +1 -1
  78. package/dist/provider-accounts.d.ts +49 -2
  79. package/dist/provider-accounts.d.ts.map +1 -1
  80. package/dist/provider-accounts.js +149 -7
  81. package/dist/provider-accounts.js.map +1 -1
  82. package/dist/provider-cmd.d.ts +5 -0
  83. package/dist/provider-cmd.d.ts.map +1 -1
  84. package/dist/provider-cmd.js +21 -1
  85. package/dist/provider-cmd.js.map +1 -1
  86. package/dist/provider-ready.js +1 -1
  87. package/dist/provider-ready.js.map +1 -1
  88. package/dist/run-cmd.d.ts.map +1 -1
  89. package/dist/run-cmd.js +104 -7
  90. package/dist/run-cmd.js.map +1 -1
  91. package/dist/server-client.d.ts +10 -0
  92. package/dist/server-client.d.ts.map +1 -1
  93. package/dist/server-client.js +8 -0
  94. package/dist/server-client.js.map +1 -1
  95. package/dist/setup.d.ts.map +1 -1
  96. package/dist/setup.js +5 -1
  97. package/dist/setup.js.map +1 -1
  98. package/dist/workspace-provisioner.d.ts +8 -0
  99. package/dist/workspace-provisioner.d.ts.map +1 -1
  100. package/dist/workspace-provisioner.js +9 -1
  101. package/dist/workspace-provisioner.js.map +1 -1
  102. package/package.json +2 -2
@@ -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,CA6KvF"}
@@ -0,0 +1,279 @@
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, started another, or it ran out of time. Said apart: "stopped" for
230
+ // an expiry sent the owner looking for a cancel nobody pressed.
231
+ stop();
232
+ const why = cur !== null && cur.id === s.id && cur.state === 'expired'
233
+ ? 'expired: no code came back from AutoRyn in time; start it again there'
234
+ : cur !== null && cur.id !== s.id
235
+ ? 'replaced by a newer sign-in started in AutoRyn'
236
+ : cur !== null && cur.state === 'cancelled'
237
+ ? 'stopped in AutoRyn'
238
+ : 'ended in AutoRyn (cancelled there, or not finished within 15 minutes); start it again there';
239
+ deps.log(`accounts: the sign-in of "${s.name}" ${why}`);
240
+ return;
241
+ }
242
+ if (cur.state === 'code_sent' && typeof listed.sealedCode === 'string') {
243
+ let code;
244
+ try {
245
+ code = (0, core_1.openSealed)((0, machine_secrets_1.ensureSealKey)(home).privateKey, listed.sealedCode).trim();
246
+ }
247
+ catch {
248
+ stop();
249
+ await report(s, { state: 'failed', problem: 'this PC could not open the code (it was sealed to another key); start again' });
250
+ return;
251
+ }
252
+ child.stdin?.write(`${code}\n`);
253
+ child.stdin?.end();
254
+ codeSent = true;
255
+ await report(s, { state: 'signing_in' });
256
+ }
257
+ }
258
+ // Claude Code ended: signed in, or not.
259
+ if (exitCode !== 0) {
260
+ await report(s, {
261
+ state: 'failed',
262
+ problem: connectProblemOf(output) ?? (codeSent ? 'Claude did not accept the sign-in; start again' : 'the sign-in stopped before it finished'),
263
+ });
264
+ return;
265
+ }
266
+ const isNew = before === undefined && s.name !== 'default';
267
+ 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);
268
+ const auth = (0, provider_accounts_cmd_1.checkAccount)(entry, { ...accountsDeps, home });
269
+ if (!auth.ok) {
270
+ if (isNew)
271
+ (0, provider_accounts_1.removeAccount)(s.name, home);
272
+ await report(s, { state: 'failed', problem: `the sign-in finished but Claude Code does not see it: ${auth.because}`.slice(0, 300) });
273
+ return;
274
+ }
275
+ deps.log(`accounts: "${s.name}" signed in from AutoRyn`);
276
+ await report(s, { state: 'connected', authMethod: auth.authMethod, plan: auth.plan });
277
+ }
278
+ }
279
+ //# 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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"}
package/dist/bin.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AAg4FA,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAqF1D"}
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AAk4FA,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAqF1D"}
package/dist/bin.js CHANGED
@@ -56,6 +56,7 @@ const serve_cmd_1 = require("./serve-cmd");
56
56
  const connect_1 = require("./connect");
57
57
  const connect_node_1 = require("./connect-node");
58
58
  const repo_init_1 = require("./repo-init");
59
+ const workspace_provisioner_1 = require("./workspace-provisioner");
59
60
  const refresh_gates_1 = require("./refresh-gates");
60
61
  const core_1 = require("@looply/core");
61
62
  const sessions_cmd_1 = require("./sessions-cmd");
@@ -92,7 +93,7 @@ usage:
92
93
  looply connect [--root <dir>]... [--yes] [--no-start]
93
94
  once per machine: pair it (if needed), then set up and serve every git
94
95
  repository under each root; new ones there, and clones you ask for, follow
95
- looply pair [--server <url>] pair this machine with your phone
96
+ looply pair [--server <url>] pair this machine only (AutoRyn: Add machine, or the Looply phone app)
96
97
  looply daemon [--once] [--yes] stay connected: presence, and ship the ledger
97
98
  looply serve add [path] serve this repository (or <path>) from one machine-wide supervisor
98
99
  looply serve remove <path> stop serving a repository
@@ -1896,7 +1897,7 @@ async function runs(argv) {
1896
1897
  */
1897
1898
  let carried = [];
1898
1899
  try {
1899
- carried = loadConfig((0, path_1.join)(process.cwd(), git_driver_1.STATE_DIR, 'config.yaml')).run.carryIntoCheckouts ?? [];
1900
+ carried = (0, workspace_provisioner_1.declaredCarry)(process.cwd());
1900
1901
  }
1901
1902
  catch {
1902
1903
  /* no config, or an unreadable one: nothing is excused, which is the old behaviour */
@@ -2189,7 +2190,8 @@ async function run(argv) {
2189
2190
  * Read from the config the run itself will read, so the two cannot
2190
2191
  * disagree about what this checkout needs.
2191
2192
  */
2192
- const carry = loadConfig((0, path_1.join)(here, git_driver_1.STATE_DIR, 'config.yaml')).run.carryIntoCheckouts ?? [];
2193
+ loadConfig((0, path_1.join)(here, git_driver_1.STATE_DIR, 'config.yaml'));
2194
+ const carry = (0, workspace_provisioner_1.declaredCarry)(here);
2193
2195
  workspace = await (0, workspace_1.createWorkspace)(git, here, tag, `looply/${tag}`, base, (0, node_os_1.homedir)(), carry);
2194
2196
  process.stdout.write(` workspace: ${workspace}\n`);
2195
2197
  /**