looply-cli 0.5.2 → 0.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.src-hash +1 -1
- package/dist/agent-contained.d.ts +2 -0
- package/dist/agent-contained.d.ts.map +1 -1
- package/dist/agent-contained.js +22 -5
- package/dist/agent-contained.js.map +1 -1
- package/dist/agent-exec.d.ts.map +1 -1
- package/dist/agent-exec.js +1 -0
- package/dist/agent-exec.js.map +1 -1
- package/dist/autonomy-tick.d.ts +46 -0
- package/dist/autonomy-tick.d.ts.map +1 -1
- package/dist/autonomy-tick.js +44 -2
- package/dist/autonomy-tick.js.map +1 -1
- package/dist/bin.d.ts.map +1 -1
- package/dist/bin.js +131 -93
- package/dist/bin.js.map +1 -1
- package/dist/brain-advice.js +2 -2
- package/dist/brain-advice.js.map +1 -1
- package/dist/command-runner.d.ts.map +1 -1
- package/dist/command-runner.js +1 -0
- package/dist/command-runner.js.map +1 -1
- package/dist/connect-node.d.ts.map +1 -1
- package/dist/connect-node.js +8 -4
- package/dist/connect-node.js.map +1 -1
- package/dist/connect.d.ts +8 -0
- package/dist/connect.d.ts.map +1 -1
- package/dist/connect.js +22 -0
- package/dist/connect.js.map +1 -1
- package/dist/contained-node.d.ts +51 -0
- package/dist/contained-node.d.ts.map +1 -0
- package/dist/contained-node.js +116 -0
- package/dist/contained-node.js.map +1 -0
- package/dist/daemon-cmd.d.ts.map +1 -1
- package/dist/daemon-cmd.js +43 -1
- package/dist/daemon-cmd.js.map +1 -1
- package/dist/daemon.d.ts +9 -0
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +11 -1
- package/dist/daemon.js.map +1 -1
- package/dist/exec-domains.d.ts +4 -0
- package/dist/exec-domains.d.ts.map +1 -1
- package/dist/exec-domains.js +7 -2
- package/dist/exec-domains.js.map +1 -1
- package/dist/gate-draft.d.ts +99 -0
- package/dist/gate-draft.d.ts.map +1 -0
- package/dist/gate-draft.js +544 -0
- package/dist/gate-draft.js.map +1 -0
- package/dist/git-driver.d.ts.map +1 -1
- package/dist/git-driver.js +1 -0
- package/dist/git-driver.js.map +1 -1
- package/dist/init-detect.d.ts +20 -10
- package/dist/init-detect.d.ts.map +1 -1
- package/dist/init-detect.js +27 -85
- package/dist/init-detect.js.map +1 -1
- package/dist/model-transport.d.ts.map +1 -1
- package/dist/model-transport.js +25 -8
- package/dist/model-transport.js.map +1 -1
- package/dist/notify-channel.d.ts.map +1 -1
- package/dist/notify-channel.js +1 -0
- package/dist/notify-channel.js.map +1 -1
- package/dist/provider-cmd.d.ts +56 -0
- package/dist/provider-cmd.d.ts.map +1 -0
- package/dist/provider-cmd.js +260 -0
- package/dist/provider-cmd.js.map +1 -0
- package/dist/provider-discovery.d.ts +75 -0
- package/dist/provider-discovery.d.ts.map +1 -0
- package/dist/provider-discovery.js +235 -0
- package/dist/provider-discovery.js.map +1 -0
- package/dist/provider-identity.d.ts +3 -3
- package/dist/provider-identity.d.ts.map +1 -1
- package/dist/provider-identity.js +4 -5
- package/dist/provider-identity.js.map +1 -1
- package/dist/provider-preflight.d.ts.map +1 -1
- package/dist/provider-preflight.js +1 -0
- package/dist/provider-preflight.js.map +1 -1
- package/dist/provider-ready.d.ts +66 -0
- package/dist/provider-ready.d.ts.map +1 -0
- package/dist/provider-ready.js +105 -0
- package/dist/provider-ready.js.map +1 -0
- package/dist/provider-state.d.ts.map +1 -1
- package/dist/provider-state.js +1 -0
- package/dist/provider-state.js.map +1 -1
- package/dist/refresh-gates.d.ts +47 -0
- package/dist/refresh-gates.d.ts.map +1 -0
- package/dist/refresh-gates.js +128 -0
- package/dist/refresh-gates.js.map +1 -0
- package/dist/repo-init.d.ts +5 -1
- package/dist/repo-init.d.ts.map +1 -1
- package/dist/repo-init.js +19 -3
- package/dist/repo-init.js.map +1 -1
- package/dist/run-cmd.js +4 -4
- package/dist/run-cmd.js.map +1 -1
- package/dist/run-launcher.d.ts.map +1 -1
- package/dist/run-launcher.js +2 -0
- package/dist/run-launcher.js.map +1 -1
- package/dist/serve-cmd.d.ts.map +1 -1
- package/dist/serve-cmd.js +14 -5
- package/dist/serve-cmd.js.map +1 -1
- package/dist/serve.d.ts +19 -7
- package/dist/serve.d.ts.map +1 -1
- package/dist/serve.js +28 -12
- package/dist/serve.js.map +1 -1
- package/dist/server-client.d.ts +12 -1
- package/dist/server-client.d.ts.map +1 -1
- package/dist/server-client.js +10 -2
- package/dist/server-client.js.map +1 -1
- package/dist/session-checkpoint-runtime.d.ts.map +1 -1
- package/dist/session-checkpoint-runtime.js +1 -0
- package/dist/session-checkpoint-runtime.js.map +1 -1
- package/dist/setup.d.ts +7 -1
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +13 -13
- package/dist/setup.js.map +1 -1
- package/dist/shared-grants.js +2 -2
- package/dist/shared-grants.js.map +1 -1
- package/dist/toolchain-mirror.js +1 -1
- package/dist/toolchain-mirror.js.map +1 -1
- package/dist/untrusted-exec.d.ts +23 -0
- package/dist/untrusted-exec.d.ts.map +1 -1
- package/dist/untrusted-exec.js +18 -1
- package/dist/untrusted-exec.js.map +1 -1
- package/dist/untrusted-gate.d.ts.map +1 -1
- package/dist/untrusted-gate.js +4 -0
- package/dist/untrusted-gate.js.map +1 -1
- package/package.json +2 -2
- package/win/appcontainer.ps1 +97 -4
- package/win/contained-node.cjs +530 -0
|
@@ -6,7 +6,6 @@ exports.providerChanged = providerChanged;
|
|
|
6
6
|
exports.providerRecordFor = providerRecordFor;
|
|
7
7
|
const node_crypto_1 = require("node:crypto");
|
|
8
8
|
const node_fs_1 = require("node:fs");
|
|
9
|
-
const node_path_1 = require("node:path");
|
|
10
9
|
const agent_exec_1 = require("./agent-exec");
|
|
11
10
|
/**
|
|
12
11
|
* WHICH BINARY ANSWERED, AND WHETHER IT IS THE ONE THAT ANSWERED LAST TIME.
|
|
@@ -154,13 +153,13 @@ function providerChanged(previous, current) {
|
|
|
154
153
|
/**
|
|
155
154
|
* Who a record says was asked, read from the thing that will run (M3-1/M3-2):
|
|
156
155
|
* the packaged provider's identity digest when the spec names the default
|
|
157
|
-
* command, the configured command's otherwise. `
|
|
158
|
-
*
|
|
156
|
+
* command, the configured command's otherwise. `executable` is the provider
|
|
157
|
+
* executable the caller located (`claudeExecutable()`), or null when it did not.
|
|
159
158
|
*/
|
|
160
|
-
function providerRecordFor(spec,
|
|
159
|
+
function providerRecordFor(spec, executable) {
|
|
161
160
|
const isDefault = spec.command === agent_exec_1.DEFAULT_AGENT.command;
|
|
162
161
|
const identity = identifyProvider(isDefault
|
|
163
|
-
? { kind: 'default', ...(
|
|
162
|
+
? { kind: 'default', ...(executable === null ? {} : { executable }) }
|
|
164
163
|
: { kind: 'configured', command: spec.command });
|
|
165
164
|
return { kind: identity.kind, role: 'brain', command: spec.command, digest: identity.digest };
|
|
166
165
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-identity.js","sourceRoot":"","sources":["../src/provider-identity.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"provider-identity.js","sourceRoot":"","sources":["../src/provider-identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-preflight.d.ts","sourceRoot":"","sources":["../src/provider-preflight.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAM9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,6EAA6E;AAC7E,eAAO,MAAM,eAAe,wBAAwB,CAAC;AAErD,eAAO,MAAM,gBAAgB,uEAAsE,CAAC;AAEpG;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,SAAU,CAAC;AAE5C,MAAM,MAAM,gBAAgB;AAC1B,wDAAwD;AACtD,UAAU;AACZ,iFAAiF;GAC/E,cAAc;AAChB,+DAA+D;GAC7D,SAAS;AACX,oEAAoE;GAClE,SAAS;AACX,2CAA2C;GACzC,MAAM,CAAC;AAEX,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,GAAG,CAAC,KAAK,EAAE;QACT,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACxF,GAAG,IAAI,MAAM,CAAC;IACd;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAQvF;AAyCD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,eAAe,CAAC,CA0G1B;AAED,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG,OAAO,CAM5E;AAID;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,SAAS,MAAM,EAAO,EAC/B,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GACzB,aAAa,
|
|
1
|
+
{"version":3,"file":"provider-preflight.d.ts","sourceRoot":"","sources":["../src/provider-preflight.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAM9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,6EAA6E;AAC7E,eAAO,MAAM,eAAe,wBAAwB,CAAC;AAErD,eAAO,MAAM,gBAAgB,uEAAsE,CAAC;AAEpG;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,SAAU,CAAC;AAE5C,MAAM,MAAM,gBAAgB;AAC1B,wDAAwD;AACtD,UAAU;AACZ,iFAAiF;GAC/E,cAAc;AAChB,+DAA+D;GAC7D,SAAS;AACX,oEAAoE;GAClE,SAAS;AACX,2CAA2C;GACzC,MAAM,CAAC;AAEX,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,GAAG,CAAC,KAAK,EAAE;QACT,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACxF,GAAG,IAAI,MAAM,CAAC;IACd;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAQvF;AAyCD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,eAAe,CAAC,CA0G1B;AAED,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG,OAAO,CAM5E;AAID;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,SAAS,MAAM,EAAO,EAC/B,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GACzB,aAAa,CA+Gf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-preflight.js","sourceRoot":"","sources":["../src/provider-preflight.ts"],"names":[],"mappings":";;;AA2HA,oDAQC;AAyCD,8CA6GC;AAGD,0CAMC;AAuCD,oCAYC;AAeD,
|
|
1
|
+
{"version":3,"file":"provider-preflight.js","sourceRoot":"","sources":["../src/provider-preflight.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { ProviderDiscovery, ProviderSource } from './provider-discovery';
|
|
2
|
+
import type { ProviderAuthState } from './provider-state';
|
|
3
|
+
/**
|
|
4
|
+
* CAN THIS MACHINE'S AI PROVIDER RUN AT ALL?
|
|
5
|
+
*
|
|
6
|
+
* MEASURED ON A REAL MACHINE (2026-10-14/15): Claude Code was not where Looply
|
|
7
|
+
* looked, and Looply's own provider profile was logged out. Autonomous Starts
|
|
8
|
+
* were spent and failed with nothing visible anywhere — not in the daemon's log,
|
|
9
|
+
* not on the server, not in AutoRyn. This is the one answer all three now share:
|
|
10
|
+
*
|
|
11
|
+
* - the daemon HOLDS a Start while it is not ready (`autonomy-tick.ts`),
|
|
12
|
+
* - says so ONCE in its log when it changes (`ProviderReadinessMonitor`),
|
|
13
|
+
* - and carries it on every heartbeat, so the server can show it.
|
|
14
|
+
*
|
|
15
|
+
* Cheap by construction: whether an executable exists, and `auth status` — a
|
|
16
|
+
* local command that costs no model turn.
|
|
17
|
+
*/
|
|
18
|
+
/** The closed set the server stores. */
|
|
19
|
+
export type ProviderNotReadyReason = 'not_installed' | 'not_logged_in' | 'unknown';
|
|
20
|
+
export interface ProviderReadiness {
|
|
21
|
+
readonly ready: boolean;
|
|
22
|
+
readonly reason: ProviderNotReadyReason | null;
|
|
23
|
+
/** One human sentence: what is wrong and what to run. Never a credential. */
|
|
24
|
+
readonly detail: string;
|
|
25
|
+
readonly executable: string | null;
|
|
26
|
+
readonly source: ProviderSource | null;
|
|
27
|
+
}
|
|
28
|
+
/** The fix, in words a person who is not a developer can follow. */
|
|
29
|
+
/** Whether an agent command is the built-in provider (Claude Code), the only one whose readiness Looply can check. */
|
|
30
|
+
export declare function isBuiltInProvider(command: string): boolean;
|
|
31
|
+
export declare function fixFor(reason: ProviderNotReadyReason | null): string;
|
|
32
|
+
/** Fold a discovery and (when there was something to ask) an `auth status` into one answer. */
|
|
33
|
+
export declare function readinessFrom(discovery: ProviderDiscovery, auth: ProviderAuthState | null): ProviderReadiness;
|
|
34
|
+
export interface ReadinessMonitorDeps {
|
|
35
|
+
check(): ProviderReadiness;
|
|
36
|
+
now(): number;
|
|
37
|
+
log(line: string): void;
|
|
38
|
+
/** How long a READY answer is trusted. */
|
|
39
|
+
readyTtlMs?: number;
|
|
40
|
+
/** How long a NOT-READY answer is trusted — shorter, so a fix is noticed soon. */
|
|
41
|
+
notReadyTtlMs?: number;
|
|
42
|
+
}
|
|
43
|
+
export declare const READY_TTL_MS: number;
|
|
44
|
+
export declare const NOT_READY_TTL_MS = 60000;
|
|
45
|
+
/**
|
|
46
|
+
* The daemon's cached view of provider readiness.
|
|
47
|
+
*
|
|
48
|
+
* Checked at start and then at most once per TTL, whoever asks — the heartbeat
|
|
49
|
+
* and the autonomy tick both read `current()`. Logs ONE line when the answer
|
|
50
|
+
* changes (not ready → ready, or a different reason), never per read.
|
|
51
|
+
*/
|
|
52
|
+
export declare class ProviderReadinessMonitor {
|
|
53
|
+
private readonly deps;
|
|
54
|
+
private last;
|
|
55
|
+
private checkedAt;
|
|
56
|
+
constructor(deps: ReadinessMonitorDeps);
|
|
57
|
+
current(): ProviderReadiness;
|
|
58
|
+
/** Ask again now (after `looply provider login`, or at start). */
|
|
59
|
+
refresh(): ProviderReadiness;
|
|
60
|
+
/** What the heartbeat carries. */
|
|
61
|
+
report(): {
|
|
62
|
+
ready: boolean;
|
|
63
|
+
reason: ProviderNotReadyReason | null;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=provider-ready.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-ready.d.ts","sourceRoot":"","sources":["../src/provider-ready.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;;;;;;;;;;;;;GAcG;AAEH,wCAAwC;AACxC,MAAM,MAAM,sBAAsB,GAAG,eAAe,GAAG,eAAe,GAAG,SAAS,CAAC;AAEnF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC/C,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;CACxC;AAED,oEAAoE;AACpE,sHAAsH;AACtH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI,GAAG,MAAM,CAWpE;AAED,+FAA+F;AAC/F,wBAAgB,aAAa,CAAC,SAAS,EAAE,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,GAAG,iBAAiB,CAoB7G;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,IAAI,iBAAiB,CAAC;IAC3B,GAAG,IAAI,MAAM,CAAC;IACd,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,YAAY,QAAa,CAAC;AACvC,eAAO,MAAM,gBAAgB,QAAS,CAAC;AAEvC;;;;;;GAMG;AACH,qBAAa,wBAAwB;IAIvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,IAAI,CAAkC;IAC9C,OAAO,CAAC,SAAS,CAAK;gBAEO,IAAI,EAAE,oBAAoB;IAEvD,OAAO,IAAI,iBAAiB;IAS5B,kEAAkE;IAClE,OAAO,IAAI,iBAAiB;IA2B5B,kCAAkC;IAClC,MAAM,IAAI;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAA;KAAE;CAIpE"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProviderReadinessMonitor = exports.NOT_READY_TTL_MS = exports.READY_TTL_MS = void 0;
|
|
4
|
+
exports.isBuiltInProvider = isBuiltInProvider;
|
|
5
|
+
exports.fixFor = fixFor;
|
|
6
|
+
exports.readinessFrom = readinessFrom;
|
|
7
|
+
const agent_exec_1 = require("./agent-exec");
|
|
8
|
+
/** The fix, in words a person who is not a developer can follow. */
|
|
9
|
+
/** Whether an agent command is the built-in provider (Claude Code), the only one whose readiness Looply can check. */
|
|
10
|
+
function isBuiltInProvider(command) {
|
|
11
|
+
return command === agent_exec_1.DEFAULT_AGENT.command;
|
|
12
|
+
}
|
|
13
|
+
function fixFor(reason) {
|
|
14
|
+
switch (reason) {
|
|
15
|
+
case 'not_installed':
|
|
16
|
+
return 'run `looply provider install` (it installs Claude Code with npm)';
|
|
17
|
+
case 'not_logged_in':
|
|
18
|
+
return 'run `looply provider login` and sign in to your Claude account';
|
|
19
|
+
case 'unknown':
|
|
20
|
+
return 'run `looply provider status` to see what Claude Code answered';
|
|
21
|
+
default:
|
|
22
|
+
return '';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** Fold a discovery and (when there was something to ask) an `auth status` into one answer. */
|
|
26
|
+
function readinessFrom(discovery, auth) {
|
|
27
|
+
const found = discovery.found;
|
|
28
|
+
if (found === null) {
|
|
29
|
+
return {
|
|
30
|
+
ready: false,
|
|
31
|
+
reason: 'not_installed',
|
|
32
|
+
detail: 'Claude Code is not installed where Looply looks',
|
|
33
|
+
executable: null,
|
|
34
|
+
source: null,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const at = { executable: found.executable, source: found.source };
|
|
38
|
+
if (auth === null || (!auth.ok && auth.reason === 'no_executable')) {
|
|
39
|
+
return { ready: false, reason: 'not_installed', detail: `no Claude Code executable at ${found.executable}`, ...at };
|
|
40
|
+
}
|
|
41
|
+
if (auth.ok)
|
|
42
|
+
return { ready: true, reason: null, detail: `logged in (${auth.method})`, ...at };
|
|
43
|
+
if (auth.reason === 'unauthenticated') {
|
|
44
|
+
return { ready: false, reason: 'not_logged_in', detail: "Looply's Claude Code profile is not logged in", ...at };
|
|
45
|
+
}
|
|
46
|
+
return { ready: false, reason: 'unknown', detail: auth.because, ...at };
|
|
47
|
+
}
|
|
48
|
+
exports.READY_TTL_MS = 5 * 60_000;
|
|
49
|
+
exports.NOT_READY_TTL_MS = 60_000;
|
|
50
|
+
/**
|
|
51
|
+
* The daemon's cached view of provider readiness.
|
|
52
|
+
*
|
|
53
|
+
* Checked at start and then at most once per TTL, whoever asks — the heartbeat
|
|
54
|
+
* and the autonomy tick both read `current()`. Logs ONE line when the answer
|
|
55
|
+
* changes (not ready → ready, or a different reason), never per read.
|
|
56
|
+
*/
|
|
57
|
+
class ProviderReadinessMonitor {
|
|
58
|
+
deps;
|
|
59
|
+
last = null;
|
|
60
|
+
checkedAt = 0;
|
|
61
|
+
constructor(deps) {
|
|
62
|
+
this.deps = deps;
|
|
63
|
+
}
|
|
64
|
+
current() {
|
|
65
|
+
const now = this.deps.now();
|
|
66
|
+
const ttl = this.last?.ready
|
|
67
|
+
? this.deps.readyTtlMs ?? exports.READY_TTL_MS
|
|
68
|
+
: this.deps.notReadyTtlMs ?? exports.NOT_READY_TTL_MS;
|
|
69
|
+
if (this.last === null || now - this.checkedAt >= ttl)
|
|
70
|
+
this.refresh();
|
|
71
|
+
return this.last;
|
|
72
|
+
}
|
|
73
|
+
/** Ask again now (after `looply provider login`, or at start). */
|
|
74
|
+
refresh() {
|
|
75
|
+
let next;
|
|
76
|
+
try {
|
|
77
|
+
next = this.deps.check();
|
|
78
|
+
}
|
|
79
|
+
catch (e) {
|
|
80
|
+
next = { ready: false, reason: 'unknown', detail: e.message, executable: null, source: null };
|
|
81
|
+
}
|
|
82
|
+
const before = this.last;
|
|
83
|
+
this.last = next;
|
|
84
|
+
this.checkedAt = this.deps.now();
|
|
85
|
+
const changed = before === null || before.ready !== next.ready || before.reason !== next.reason;
|
|
86
|
+
if (changed) {
|
|
87
|
+
if (next.ready) {
|
|
88
|
+
this.deps.log(before === null
|
|
89
|
+
? `provider: ready — Claude Code at ${next.executable} (${next.detail}).`
|
|
90
|
+
: `provider: ready again — Claude Code at ${next.executable}. Held Starts go ahead.`);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
this.deps.log(`provider: NOT READY (${next.reason}) — ${next.detail}. Autonomous Starts are held until this is fixed: ${fixFor(next.reason)}.`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return next;
|
|
97
|
+
}
|
|
98
|
+
/** What the heartbeat carries. */
|
|
99
|
+
report() {
|
|
100
|
+
const r = this.current();
|
|
101
|
+
return { ready: r.ready, reason: r.ready ? null : r.reason };
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
exports.ProviderReadinessMonitor = ProviderReadinessMonitor;
|
|
105
|
+
//# sourceMappingURL=provider-ready.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-ready.js","sourceRoot":"","sources":["../src/provider-ready.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-state.d.ts","sourceRoot":"","sources":["../src/provider-state.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH;;;;;GAKG;AACH;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAE9E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,iBAAsB,GAAG,MAAM,CAEvE;AAED,MAAM,WAAW,iBAAiB;IAChC,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IACvG,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC1E;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"provider-state.d.ts","sourceRoot":"","sources":["../src/provider-state.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH;;;;;GAKG;AACH;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAE9E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,iBAAsB,GAAG,MAAM,CAEvE;AAED,MAAM,WAAW,iBAAiB;IAChC,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IACvG,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC1E;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAmBzE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,IAAI,GAAE,iBAAsB,GAC3B,iBAAiB,CAqFnB"}
|
package/dist/provider-state.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-state.js","sourceRoot":"","sources":["../src/provider-state.ts"],"names":[],"mappings":";;AA8DA,sDAEC;AAED,gDAEC;
|
|
1
|
+
{"version":3,"file":"provider-state.js","sourceRoot":"","sources":["../src/provider-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { RepoProfile } from './init-detect';
|
|
2
|
+
/**
|
|
3
|
+
* `looply init --refresh-gates`: re-draft only the gates of an existing
|
|
4
|
+
* `.looply/config.yaml`.
|
|
5
|
+
*
|
|
6
|
+
* For everyone who connected before the drafting learned about sub-apps and
|
|
7
|
+
* slow suites: their gates may be a 30-minute integration suite that discards
|
|
8
|
+
* every round, and nothing checking the app they actually work on. Fixing that
|
|
9
|
+
* by hand means editing YAML; this shows the change and writes it on a yes.
|
|
10
|
+
*
|
|
11
|
+
* 🔴 EVERY OTHER SECTION IS KEPT BYTE FOR BYTE. The rest of the file is the
|
|
12
|
+
* person's — rails, scope, publish policy — and a fresh draft would throw it
|
|
13
|
+
* away, which is why plain `init` refuses to overwrite. Only the `gates:` block
|
|
14
|
+
* and the comment block directly above it are replaced.
|
|
15
|
+
*/
|
|
16
|
+
/** Where the gate section sits in the file's lines: [start, end) — end excludes the next section. */
|
|
17
|
+
export declare function gateSectionRange(lines: readonly string[]): {
|
|
18
|
+
start: number;
|
|
19
|
+
end: number;
|
|
20
|
+
} | null;
|
|
21
|
+
export type RefreshResult = {
|
|
22
|
+
readonly kind: 'unchanged';
|
|
23
|
+
} | {
|
|
24
|
+
readonly kind: 'changed';
|
|
25
|
+
readonly next: string;
|
|
26
|
+
readonly diff: string[];
|
|
27
|
+
} | {
|
|
28
|
+
readonly kind: 'refused';
|
|
29
|
+
readonly reason: string;
|
|
30
|
+
};
|
|
31
|
+
/** A line diff of the gate section only: `- ` removed, `+ ` added, ` ` kept. */
|
|
32
|
+
export declare function lineDiff(before: readonly string[], after: readonly string[]): string[];
|
|
33
|
+
export declare function refreshGates(current: string, profile: RepoProfile): RefreshResult;
|
|
34
|
+
export interface RefreshGatesDeps {
|
|
35
|
+
configPath: string;
|
|
36
|
+
profile: RepoProfile;
|
|
37
|
+
readText(path: string): string | null;
|
|
38
|
+
writeText(path: string, text: string): void;
|
|
39
|
+
write(text: string): void;
|
|
40
|
+
/** Write without asking (`--yes`). */
|
|
41
|
+
assumeYes: boolean;
|
|
42
|
+
/** Ask a y/N question; null when there is no terminal to ask on. */
|
|
43
|
+
confirm: ((question: string) => Promise<boolean>) | null;
|
|
44
|
+
}
|
|
45
|
+
/** The command: show the diff, then write on `--yes` or a terminal yes. Exit code. */
|
|
46
|
+
export declare function runRefreshGates(deps: RefreshGatesDeps): Promise<number>;
|
|
47
|
+
//# sourceMappingURL=refresh-gates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh-gates.d.ts","sourceRoot":"","sources":["../src/refresh-gates.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD;;;;;;;;;;;;;GAaG;AAEH,qGAAqG;AACrG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAchG;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAC9B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAC5E;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,iFAAiF;AACjF,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAuBtF;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,aAAa,CAoBjF;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACtC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,sCAAsC;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,oEAAoE;IACpE,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;CAC1D;AAED,sFAAsF;AACtF,wBAAsB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CA+B7E"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.gateSectionRange = gateSectionRange;
|
|
4
|
+
exports.lineDiff = lineDiff;
|
|
5
|
+
exports.refreshGates = refreshGates;
|
|
6
|
+
exports.runRefreshGates = runRefreshGates;
|
|
7
|
+
const config_1 = require("./config");
|
|
8
|
+
const setup_1 = require("./setup");
|
|
9
|
+
/**
|
|
10
|
+
* `looply init --refresh-gates`: re-draft only the gates of an existing
|
|
11
|
+
* `.looply/config.yaml`.
|
|
12
|
+
*
|
|
13
|
+
* For everyone who connected before the drafting learned about sub-apps and
|
|
14
|
+
* slow suites: their gates may be a 30-minute integration suite that discards
|
|
15
|
+
* every round, and nothing checking the app they actually work on. Fixing that
|
|
16
|
+
* by hand means editing YAML; this shows the change and writes it on a yes.
|
|
17
|
+
*
|
|
18
|
+
* 🔴 EVERY OTHER SECTION IS KEPT BYTE FOR BYTE. The rest of the file is the
|
|
19
|
+
* person's — rails, scope, publish policy — and a fresh draft would throw it
|
|
20
|
+
* away, which is why plain `init` refuses to overwrite. Only the `gates:` block
|
|
21
|
+
* and the comment block directly above it are replaced.
|
|
22
|
+
*/
|
|
23
|
+
/** Where the gate section sits in the file's lines: [start, end) — end excludes the next section. */
|
|
24
|
+
function gateSectionRange(lines) {
|
|
25
|
+
const at = lines.findIndex((l) => /^gates\s*:/.test(l));
|
|
26
|
+
if (at < 0)
|
|
27
|
+
return null;
|
|
28
|
+
// The comment block directly above `gates:` (no blank line between) is the
|
|
29
|
+
// section's header, and is re-drafted with it.
|
|
30
|
+
let start = at;
|
|
31
|
+
while (start > 0 && /^#/.test(lines[start - 1]))
|
|
32
|
+
start--;
|
|
33
|
+
// The block runs to the next top-level key...
|
|
34
|
+
let next = at + 1;
|
|
35
|
+
while (next < lines.length && !/^[^\s#]/.test(lines[next]))
|
|
36
|
+
next++;
|
|
37
|
+
// ...minus the blank lines and top-level comments that introduce that key.
|
|
38
|
+
let end = next;
|
|
39
|
+
while (end > at + 1 && (/^#/.test(lines[end - 1]) || lines[end - 1].trim() === ''))
|
|
40
|
+
end--;
|
|
41
|
+
return { start, end };
|
|
42
|
+
}
|
|
43
|
+
/** A line diff of the gate section only: `- ` removed, `+ ` added, ` ` kept. */
|
|
44
|
+
function lineDiff(before, after) {
|
|
45
|
+
const n = before.length;
|
|
46
|
+
const m = after.length;
|
|
47
|
+
const lcs = Array.from({ length: n + 1 }, () => new Array(m + 1).fill(0));
|
|
48
|
+
for (let i = n - 1; i >= 0; i--) {
|
|
49
|
+
for (let j = m - 1; j >= 0; j--) {
|
|
50
|
+
lcs[i][j] = before[i] === after[j] ? lcs[i + 1][j + 1] + 1 : Math.max(lcs[i + 1][j], lcs[i][j + 1]);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const out = [];
|
|
54
|
+
let i = 0;
|
|
55
|
+
let j = 0;
|
|
56
|
+
while (i < n && j < m) {
|
|
57
|
+
if (before[i] === after[j]) {
|
|
58
|
+
out.push(` ${before[i]}`);
|
|
59
|
+
i++;
|
|
60
|
+
j++;
|
|
61
|
+
}
|
|
62
|
+
else if (lcs[i + 1][j] >= lcs[i][j + 1])
|
|
63
|
+
out.push(`- ${before[i++]}`);
|
|
64
|
+
else
|
|
65
|
+
out.push(`+ ${after[j++]}`);
|
|
66
|
+
}
|
|
67
|
+
while (i < n)
|
|
68
|
+
out.push(`- ${before[i++]}`);
|
|
69
|
+
while (j < m)
|
|
70
|
+
out.push(`+ ${after[j++]}`);
|
|
71
|
+
return out;
|
|
72
|
+
}
|
|
73
|
+
function refreshGates(current, profile) {
|
|
74
|
+
const eol = current.includes('\r\n') ? '\r\n' : '\n';
|
|
75
|
+
const lines = current.split(/\r?\n/);
|
|
76
|
+
const range = gateSectionRange(lines);
|
|
77
|
+
if (!range)
|
|
78
|
+
return { kind: 'refused', reason: 'the config has no top-level `gates:` section to re-draft' };
|
|
79
|
+
const drafted = (0, setup_1.gatesSection)(profile).split('\n');
|
|
80
|
+
const before = lines.slice(range.start, range.end);
|
|
81
|
+
if (before.join('\n') === drafted.join('\n'))
|
|
82
|
+
return { kind: 'unchanged' };
|
|
83
|
+
const nextLines = [...lines.slice(0, range.start), ...drafted, ...lines.slice(range.end)];
|
|
84
|
+
const next = nextLines.join(eol);
|
|
85
|
+
try {
|
|
86
|
+
(0, config_1.parseConfig)(next);
|
|
87
|
+
}
|
|
88
|
+
catch (e) {
|
|
89
|
+
// Most often: nothing runnable was detected. Removing the person's gates
|
|
90
|
+
// and leaving none would be worse than leaving the file alone.
|
|
91
|
+
return { kind: 'refused', reason: `the re-drafted config would not load (${e.message}); nothing was written` };
|
|
92
|
+
}
|
|
93
|
+
return { kind: 'changed', next, diff: lineDiff(before, drafted) };
|
|
94
|
+
}
|
|
95
|
+
/** The command: show the diff, then write on `--yes` or a terminal yes. Exit code. */
|
|
96
|
+
async function runRefreshGates(deps) {
|
|
97
|
+
const current = deps.readText(deps.configPath);
|
|
98
|
+
if (current === null) {
|
|
99
|
+
deps.write(`init --refresh-gates: ${deps.configPath} does not exist — run \`looply init\` to draft one\n`);
|
|
100
|
+
return 1;
|
|
101
|
+
}
|
|
102
|
+
const result = refreshGates(current, deps.profile);
|
|
103
|
+
if (result.kind === 'refused') {
|
|
104
|
+
deps.write(`init --refresh-gates: ${result.reason}\n`);
|
|
105
|
+
return 1;
|
|
106
|
+
}
|
|
107
|
+
if (result.kind === 'unchanged') {
|
|
108
|
+
deps.write('init --refresh-gates: the gates already match what this repository drafts — nothing to change\n');
|
|
109
|
+
return 0;
|
|
110
|
+
}
|
|
111
|
+
deps.write(`gates in ${deps.configPath} (every other section is kept as it is):\n\n${result.diff.join('\n')}\n\n`);
|
|
112
|
+
let yes = deps.assumeYes;
|
|
113
|
+
if (!yes) {
|
|
114
|
+
if (!deps.confirm) {
|
|
115
|
+
deps.write('not written: there is no terminal to confirm on — rerun with --yes to write it\n');
|
|
116
|
+
return 0;
|
|
117
|
+
}
|
|
118
|
+
yes = await deps.confirm('write these gates? [y/N] ');
|
|
119
|
+
}
|
|
120
|
+
if (!yes) {
|
|
121
|
+
deps.write('not written\n');
|
|
122
|
+
return 0;
|
|
123
|
+
}
|
|
124
|
+
deps.writeText(deps.configPath, result.next);
|
|
125
|
+
deps.write(`written: ${deps.configPath}\n`);
|
|
126
|
+
return 0;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=refresh-gates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh-gates.js","sourceRoot":"","sources":["../src/refresh-gates.ts"],"names":[],"mappings":"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"}
|
package/dist/repo-init.d.ts
CHANGED
|
@@ -16,10 +16,14 @@ export interface QuietInitFs {
|
|
|
16
16
|
exists(path: string): boolean;
|
|
17
17
|
/** `null` when it cannot be read; detection treats that as absent. */
|
|
18
18
|
readText(path: string): string | null;
|
|
19
|
+
/** Child directory names; optional, so sub-apps outside the common folder names are found too. */
|
|
20
|
+
listDirs?(path: string): string[];
|
|
19
21
|
mkdirp(path: string): void;
|
|
20
22
|
writeText(path: string, text: string): void;
|
|
21
23
|
}
|
|
22
24
|
export declare const nodeQuietInitFs: QuietInitFs;
|
|
25
|
+
/** Child directories of `p`, [] when it cannot be read. */
|
|
26
|
+
export declare function listDirsOf(p: string): string[];
|
|
23
27
|
export type InitOutcome = {
|
|
24
28
|
readonly kind: 'initialised';
|
|
25
29
|
} | {
|
|
@@ -29,7 +33,7 @@ export type InitOutcome = {
|
|
|
29
33
|
readonly reason: string;
|
|
30
34
|
};
|
|
31
35
|
/** What `init` shows before it asks anything; shared so the two read a repository the same way. */
|
|
32
|
-
export declare function profileOf(dir: string, readText: (path: string) => string | null): RepoProfile;
|
|
36
|
+
export declare function profileOf(dir: string, readText: (path: string) => string | null, listDirs?: (path: string) => string[]): RepoProfile;
|
|
33
37
|
/** Why `<dir>/.looply/config.yaml` would not load, or null when it would — the daemon's own parser. */
|
|
34
38
|
export declare function configProblemOf(dir: string, readText?: (path: string) => string | null): string | null;
|
|
35
39
|
export declare function initRepoQuietly(dir: string, fs?: QuietInitFs): InitOutcome;
|
package/dist/repo-init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-init.d.ts","sourceRoot":"","sources":["../src/repo-init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAG7D;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,sEAAsE;IACtE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACtC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED,eAAO,MAAM,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"repo-init.d.ts","sourceRoot":"","sources":["../src/repo-init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAG7D;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,sEAAsE;IACtE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACtC,kGAAkG;IAClG,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAClC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED,eAAO,MAAM,eAAe,EAAE,WAe7B,CAAC;AAEF,2DAA2D;AAC3D,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAQ9C;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAAE,GAChC;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD,mGAAmG;AACnG,wBAAgB,SAAS,CACvB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,EACzC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,GACpC,WAAW,CAQb;AAED,uGAAuG;AACvG,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAA+B,GAAG,MAAM,GAAG,IAAI,CAShI;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,GAAE,WAA6B,GAAG,WAAW,CAY3F"}
|
package/dist/repo-init.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.nodeQuietInitFs = void 0;
|
|
4
|
+
exports.listDirsOf = listDirsOf;
|
|
4
5
|
exports.profileOf = profileOf;
|
|
5
6
|
exports.configProblemOf = configProblemOf;
|
|
6
7
|
exports.initRepoQuietly = initRepoQuietly;
|
|
@@ -19,15 +20,30 @@ exports.nodeQuietInitFs = {
|
|
|
19
20
|
return null;
|
|
20
21
|
}
|
|
21
22
|
},
|
|
23
|
+
listDirs: (p) => listDirsOf(p),
|
|
22
24
|
mkdirp: (p) => {
|
|
23
25
|
(0, node_fs_1.mkdirSync)(p, { recursive: true });
|
|
24
26
|
},
|
|
25
27
|
// `wx`: a config that appeared between the check and the write is kept.
|
|
26
28
|
writeText: (p, text) => (0, node_fs_1.writeFileSync)(p, text, { flag: 'wx' }),
|
|
27
29
|
};
|
|
30
|
+
/** Child directories of `p`, [] when it cannot be read. */
|
|
31
|
+
function listDirsOf(p) {
|
|
32
|
+
try {
|
|
33
|
+
return (0, node_fs_1.readdirSync)(p, { withFileTypes: true })
|
|
34
|
+
.filter((d) => d.isDirectory())
|
|
35
|
+
.map((d) => d.name);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
28
41
|
/** What `init` shows before it asks anything; shared so the two read a repository the same way. */
|
|
29
|
-
function profileOf(dir, readText) {
|
|
30
|
-
return (0, init_detect_1.detectRepo)({
|
|
42
|
+
function profileOf(dir, readText, listDirs) {
|
|
43
|
+
return (0, init_detect_1.detectRepo)({
|
|
44
|
+
readFile: (p) => readText((0, node_path_1.join)(dir, p)),
|
|
45
|
+
...(listDirs ? { listDirs: (p) => listDirs((0, node_path_1.join)(dir, p)) } : {}),
|
|
46
|
+
}, (0, node_path_1.basename)(dir));
|
|
31
47
|
}
|
|
32
48
|
/** Why `<dir>/.looply/config.yaml` would not load, or null when it would — the daemon's own parser. */
|
|
33
49
|
function configProblemOf(dir, readText = exports.nodeQuietInitFs.readText) {
|
|
@@ -47,7 +63,7 @@ function initRepoQuietly(dir, fs = exports.nodeQuietInitFs) {
|
|
|
47
63
|
try {
|
|
48
64
|
if (fs.exists(target))
|
|
49
65
|
return { kind: 'already' };
|
|
50
|
-
const profile = profileOf(dir, (p) => fs.readText(p));
|
|
66
|
+
const profile = profileOf(dir, (p) => fs.readText(p), fs.listDirs ? (p) => fs.listDirs(p) : undefined);
|
|
51
67
|
fs.mkdirp((0, node_path_1.join)(dir, '.looply'));
|
|
52
68
|
fs.writeText(target, (0, setup_1.renderConfig)(profile, { ...setup_1.DEFAULT_ANSWERS }));
|
|
53
69
|
return { kind: 'initialised' };
|
package/dist/repo-init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-init.js","sourceRoot":"","sources":["../src/repo-init.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"repo-init.js","sourceRoot":"","sources":["../src/repo-init.ts"],"names":[],"mappings":"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"}
|