codeloop-mcp-server 0.1.62 → 0.1.64
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/auth/critical_floors.d.ts.map +1 -1
- package/dist/auth/critical_floors.js +8 -0
- package/dist/auth/critical_floors.js.map +1 -1
- package/dist/auth/key_resolver.d.ts +55 -0
- package/dist/auth/key_resolver.d.ts.map +1 -0
- package/dist/auth/key_resolver.js +41 -0
- package/dist/auth/key_resolver.js.map +1 -0
- package/dist/auth/key_source.d.ts +60 -4
- package/dist/auth/key_source.d.ts.map +1 -1
- package/dist/auth/key_source.js +281 -48
- package/dist/auth/key_source.js.map +1 -1
- package/dist/evidence/observability.d.ts +67 -0
- package/dist/evidence/observability.d.ts.map +1 -0
- package/dist/evidence/observability.js +57 -0
- package/dist/evidence/observability.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +91 -5
- package/dist/index.js.map +1 -1
- package/dist/runners/app_logger.d.ts.map +1 -1
- package/dist/runners/app_logger.js +31 -3
- package/dist/runners/app_logger.js.map +1 -1
- package/dist/runners/logging_readiness.d.ts +72 -0
- package/dist/runners/logging_readiness.d.ts.map +1 -0
- package/dist/runners/logging_readiness.js +419 -0
- package/dist/runners/logging_readiness.js.map +1 -0
- package/dist/runners/modal_close_strategies.d.ts +23 -0
- package/dist/runners/modal_close_strategies.d.ts.map +1 -1
- package/dist/runners/modal_close_strategies.js +59 -0
- package/dist/runners/modal_close_strategies.js.map +1 -1
- package/dist/runners/modal_detector.d.ts +36 -0
- package/dist/runners/modal_detector.d.ts.map +1 -1
- package/dist/runners/modal_detector.js +160 -78
- package/dist/runners/modal_detector.js.map +1 -1
- package/dist/runners/remote_logs.d.ts +105 -0
- package/dist/runners/remote_logs.d.ts.map +1 -0
- package/dist/runners/remote_logs.js +336 -0
- package/dist/runners/remote_logs.js.map +1 -0
- package/dist/runners/win_accessibility.d.ts.map +1 -1
- package/dist/runners/win_accessibility.js +3 -6
- package/dist/runners/win_accessibility.js.map +1 -1
- package/dist/runners/window_manager.d.ts +24 -0
- package/dist/runners/window_manager.d.ts.map +1 -1
- package/dist/runners/window_manager.js +70 -0
- package/dist/runners/window_manager.js.map +1 -1
- package/dist/tools/gate_check.d.ts.map +1 -1
- package/dist/tools/gate_check.js +25 -0
- package/dist/tools/gate_check.js.map +1 -1
- package/dist/tools/interaction_replay.d.ts +18 -0
- package/dist/tools/interaction_replay.d.ts.map +1 -1
- package/dist/tools/interaction_replay.js +102 -1
- package/dist/tools/interaction_replay.js.map +1 -1
- package/dist/tools/verify.d.ts.map +1 -1
- package/dist/tools/verify.js +61 -5
- package/dist/tools/verify.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key_source.js","sourceRoot":"","sources":["../../src/auth/key_source.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"key_source.js","sourceRoot":"","sources":["../../src/auth/key_source.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 0.1.64 — observability.json evidence + the `logging_observability_evidence`
|
|
3
|
+
* gate verdict.
|
|
4
|
+
*
|
|
5
|
+
* CodeLoop scans the project for an ACTUAL logging system instead of only
|
|
6
|
+
* scanning whatever the app happens to emit. The previous design
|
|
7
|
+
* (runtime_log_scan) could only catch faults when the app already logged
|
|
8
|
+
* them; a project with no structured logger, no request logging, and no
|
|
9
|
+
* global error handler swallowed exceptions invisibly and the gate passed
|
|
10
|
+
* as n/a. This evidence makes the ABSENCE of observability a first-class,
|
|
11
|
+
* blockable signal — pushing the agent to build proper logging so root
|
|
12
|
+
* causes are catchable and fixable permanently.
|
|
13
|
+
*
|
|
14
|
+
* The gate verdict is a pure function over the evidence so it's unit-tested
|
|
15
|
+
* without touching the filesystem. The detector
|
|
16
|
+
* (runners/logging_readiness.ts) is what reads the project and fills the
|
|
17
|
+
* `required` flags from config + project kind.
|
|
18
|
+
*
|
|
19
|
+
* Applicable-or-n/a: a missing file or `applicable: false` evidence yields a
|
|
20
|
+
* PASS — the gate only blocks when the project has real app source AND a
|
|
21
|
+
* required logging dimension is missing.
|
|
22
|
+
*/
|
|
23
|
+
export type LoggingDimensionId = "logger" | "request_logging" | "error_handler" | "log_sink";
|
|
24
|
+
export interface LoggingDimension {
|
|
25
|
+
id: LoggingDimensionId;
|
|
26
|
+
/** Human-readable label, e.g. "Structured logger". */
|
|
27
|
+
label: string;
|
|
28
|
+
/** True when the project already satisfies this dimension. */
|
|
29
|
+
present: boolean;
|
|
30
|
+
/** True when this dimension is required for this project (config + kind). */
|
|
31
|
+
required: boolean;
|
|
32
|
+
/** What satisfied it (dependency / file / pattern), when present. */
|
|
33
|
+
evidence?: string;
|
|
34
|
+
/** Concrete, stack-specific "build this" instruction, when missing. */
|
|
35
|
+
recommendation?: string;
|
|
36
|
+
}
|
|
37
|
+
export type ProjectKind = "frontend" | "backend" | "fullstack" | "cli" | "library" | "unknown";
|
|
38
|
+
export interface ObservabilityEvidence {
|
|
39
|
+
generated_at: string;
|
|
40
|
+
/** False when there's no app source to instrument (pure lib / static). */
|
|
41
|
+
applicable: boolean;
|
|
42
|
+
/** Detected stack label, e.g. "node", "python", "dotnet", "flutter". */
|
|
43
|
+
stack: string;
|
|
44
|
+
project_kind: ProjectKind;
|
|
45
|
+
dimensions: LoggingDimension[];
|
|
46
|
+
/** Ids of required dimensions that are missing. */
|
|
47
|
+
missing_required: LoggingDimensionId[];
|
|
48
|
+
/** Gate severity to apply when missing_required is non-empty. */
|
|
49
|
+
severity: "blocker" | "warning";
|
|
50
|
+
reason?: string;
|
|
51
|
+
}
|
|
52
|
+
export declare function writeObservabilityEvidence(runDir: string, ev: ObservabilityEvidence): void;
|
|
53
|
+
export declare function loadObservabilityEvidence(runDir: string): ObservabilityEvidence | null;
|
|
54
|
+
export interface GateVerdict {
|
|
55
|
+
passed: boolean;
|
|
56
|
+
reason: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* logging_observability_evidence — a required logging dimension must not be
|
|
60
|
+
* missing.
|
|
61
|
+
* - No evidence file (legacy run / verify didn't write one) -> pass.
|
|
62
|
+
* - Not applicable (no app source) -> pass (n/a).
|
|
63
|
+
* - All required dimensions present -> pass.
|
|
64
|
+
* - A required dimension missing -> fail (severity from evidence.severity).
|
|
65
|
+
*/
|
|
66
|
+
export declare function evaluateObservabilityGate(ev: ObservabilityEvidence | null): GateVerdict;
|
|
67
|
+
//# sourceMappingURL=observability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../../src/evidence/observability.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,MAAM,kBAAkB,GAC1B,QAAQ,GACR,iBAAiB,GACjB,eAAe,GACf,UAAU,CAAC;AAEf,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,kBAAkB,CAAC;IACvB,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,OAAO,EAAE,OAAO,CAAC;IACjB,6EAA6E;IAC7E,QAAQ,EAAE,OAAO,CAAC;IAClB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,WAAW,GACnB,UAAU,GACV,SAAS,GACT,WAAW,GACX,KAAK,GACL,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,UAAU,EAAE,OAAO,CAAC;IACpB,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,WAAW,CAAC;IAC1B,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,mDAAmD;IACnD,gBAAgB,EAAE,kBAAkB,EAAE,CAAC;IACvC,iEAAiE;IACjE,QAAQ,EAAE,SAAS,GAAG,SAAS,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,qBAAqB,GAAG,IAAI,CAO1F;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAQtF;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,qBAAqB,GAAG,IAAI,GAAG,WAAW,CAyBvF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
const FILE = "observability.json";
|
|
4
|
+
export function writeObservabilityEvidence(runDir, ev) {
|
|
5
|
+
try {
|
|
6
|
+
mkdirSync(runDir, { recursive: true });
|
|
7
|
+
writeFileSync(join(runDir, FILE), JSON.stringify(ev, null, 2), "utf-8");
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
/* best-effort — never throw out of verify */
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function loadObservabilityEvidence(runDir) {
|
|
14
|
+
const p = join(runDir, FILE);
|
|
15
|
+
if (!existsSync(p))
|
|
16
|
+
return null;
|
|
17
|
+
try {
|
|
18
|
+
return JSON.parse(readFileSync(p, "utf-8"));
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* logging_observability_evidence — a required logging dimension must not be
|
|
26
|
+
* missing.
|
|
27
|
+
* - No evidence file (legacy run / verify didn't write one) -> pass.
|
|
28
|
+
* - Not applicable (no app source) -> pass (n/a).
|
|
29
|
+
* - All required dimensions present -> pass.
|
|
30
|
+
* - A required dimension missing -> fail (severity from evidence.severity).
|
|
31
|
+
*/
|
|
32
|
+
export function evaluateObservabilityGate(ev) {
|
|
33
|
+
if (!ev) {
|
|
34
|
+
return { passed: true, reason: "No observability.json (run codeloop_verify to scan logging readiness)" };
|
|
35
|
+
}
|
|
36
|
+
if (!ev.applicable) {
|
|
37
|
+
return { passed: true, reason: `n/a — ${ev.reason ?? "no instrumentable app source detected"}` };
|
|
38
|
+
}
|
|
39
|
+
if (ev.missing_required.length === 0) {
|
|
40
|
+
const have = ev.dimensions.filter((d) => d.present).map((d) => d.id);
|
|
41
|
+
return {
|
|
42
|
+
passed: true,
|
|
43
|
+
reason: `Logging system present (${have.join(", ") || "no required dimensions"}) for ${ev.stack} ${ev.project_kind}`,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
const missing = ev.dimensions.filter((d) => ev.missing_required.includes(d.id));
|
|
47
|
+
const detail = missing
|
|
48
|
+
.map((d) => `${d.label} — ${d.recommendation ?? "add it"}`)
|
|
49
|
+
.join(" | ");
|
|
50
|
+
return {
|
|
51
|
+
passed: false,
|
|
52
|
+
reason: `Missing logging system component(s) for this ${ev.stack} ${ev.project_kind}: ${detail}. ` +
|
|
53
|
+
`Build the logging system, then re-run codeloop_verify. ` +
|
|
54
|
+
`(Tune via .codeloop/config.json -> observability.)`,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=observability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability.js","sourceRoot":"","sources":["../../src/evidence/observability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAoE5B,MAAM,IAAI,GAAG,oBAAoB,CAAC;AAElC,MAAM,UAAU,0BAA0B,CAAC,MAAc,EAAE,EAAyB;IAClF,IAAI,CAAC;QACH,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,6CAA6C;IAC/C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAc;IACtD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAA0B,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAOD;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CAAC,EAAgC;IACxE,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,uEAAuE,EAAE,CAAC;IAC3G,CAAC;IACD,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC;QACnB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,MAAM,IAAI,uCAAuC,EAAE,EAAE,CAAC;IACnG,CAAC;IACD,IAAI,EAAE,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrE,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,2BAA2B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,wBAAwB,SAAS,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,YAAY,EAAE;SACrH,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,OAAO;SACnB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,cAAc,IAAI,QAAQ,EAAE,CAAC;SAC1D,IAAI,CAAC,KAAK,CAAC,CAAC;IACf,OAAO;QACL,MAAM,EAAE,KAAK;QACb,MAAM,EACJ,gDAAgD,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,YAAY,KAAK,MAAM,IAAI;YAC1F,yDAAyD;YACzD,oDAAoD;KACvD,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAylBA,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEjD"}
|
package/dist/index.js
CHANGED
|
@@ -18,8 +18,9 @@ import { join, basename, resolve } from "path";
|
|
|
18
18
|
import { homedir } from "os";
|
|
19
19
|
import { isProjectInitialized } from "./init_state.js";
|
|
20
20
|
import { loadConfig } from "./config.js";
|
|
21
|
-
import {
|
|
21
|
+
import { isActivationRequired } from "./auth/api_key.js";
|
|
22
22
|
import { identifyKeySource, buildRevokedKeyDiagnostic } from "./auth/key_source.js";
|
|
23
|
+
import { resolveActiveApiKey } from "./auth/key_resolver.js";
|
|
23
24
|
import { warmCliCache } from "./auth/cli_cache_warmer.js";
|
|
24
25
|
import { recordInitialisedDir, wasInitialisedAtPath, } from "./auth/init_hint_cache.js";
|
|
25
26
|
import { startUpdateCheck, getUpdateInfo, formatUpdateNotice, getRunningVersion, } from "./auth/update_check.js";
|
|
@@ -146,7 +147,18 @@ if (!process.env.CODELOOP_PROJECT_DIR &&
|
|
|
146
147
|
}
|
|
147
148
|
}
|
|
148
149
|
const config = loadConfig(projectDir);
|
|
150
|
+
// The key as configured (env var injected by mcp.json wins, else config.json).
|
|
149
151
|
const apiKey = process.env.CODELOOP_API_KEY || config.api_key;
|
|
152
|
+
// The key actually used for this process. Starts as the configured key but
|
|
153
|
+
// may be self-healed to an active on-disk key if the configured one is
|
|
154
|
+
// revoked (see resolveActiveApiKey). Cached here so we only scan disk once.
|
|
155
|
+
let effectiveApiKey = apiKey;
|
|
156
|
+
// One-line notice surfaced (throttled) on every tool response after we
|
|
157
|
+
// self-heal away from a revoked configured key, so the user is told which
|
|
158
|
+
// stale file to clean up even though their run was NOT blocked.
|
|
159
|
+
let keyRecoveryNotice = null;
|
|
160
|
+
let lastKeyRecoveryNoticeAt = 0;
|
|
161
|
+
const KEY_RECOVERY_NOTICE_INTERVAL_MS = 5 * 60 * 1000;
|
|
150
162
|
// Pre-warm the npx cache for the `codeloop` CLI in the background so
|
|
151
163
|
// the user's terminal `npx codeloop update` matches the version they
|
|
152
164
|
// just auto-got via Cursor / Claude Code's MCP-server refresh. Fully
|
|
@@ -249,7 +261,29 @@ async function withAuth(fn, tracker) {
|
|
|
249
261
|
outcome = { success: true, result: r };
|
|
250
262
|
return r;
|
|
251
263
|
}
|
|
252
|
-
|
|
264
|
+
// Self-heal: validate the effective key, and if it's revoked, fall
|
|
265
|
+
// back to any ACTIVE key found elsewhere on disk (shell, PowerShell,
|
|
266
|
+
// any mcp.json env block, config.json). This makes the "stale
|
|
267
|
+
// hardcoded mcp.json key overrides my active key" trap non-blocking on
|
|
268
|
+
// every client × OS — as long as the user has one active key anywhere.
|
|
269
|
+
const resolved = await resolveActiveApiKey(effectiveApiKey, projectDir);
|
|
270
|
+
const result = resolved.result;
|
|
271
|
+
if (resolved.recovered) {
|
|
272
|
+
// Adopt the recovered key for the rest of this process and arm the
|
|
273
|
+
// (throttled) recovery notice so the user still cleans up the stale
|
|
274
|
+
// file even though their run wasn't blocked.
|
|
275
|
+
effectiveApiKey = resolved.key;
|
|
276
|
+
const loc = resolved.recovered.line
|
|
277
|
+
? `${resolved.recovered.file} (line ${resolved.recovered.line})`
|
|
278
|
+
: resolved.recovered.file;
|
|
279
|
+
keyRecoveryNotice =
|
|
280
|
+
`⚠ CodeLoop key auto-recovered: your configured key (${resolved.recovered.stale_prefix}…) is REVOKED, ` +
|
|
281
|
+
`so CodeLoop is using an active key (${resolved.recovered.active_prefix}…) found in ${loc}. ` +
|
|
282
|
+
`Your run was NOT blocked, but please remove/replace the revoked key — it's most likely hardcoded in a ` +
|
|
283
|
+
`\`.cursor/mcp.json\` (or Claude/VS Code mcp config) \`env\` block that overrides your shell. ` +
|
|
284
|
+
`Update it to ${resolved.recovered.active_prefix}… (or delete the CODELOOP_API_KEY line) and reload the MCP server.`;
|
|
285
|
+
console.error(`[CodeLoop] ${keyRecoveryNotice}`);
|
|
286
|
+
}
|
|
253
287
|
if (isActivationRequired(result)) {
|
|
254
288
|
outcome = { success: false, result };
|
|
255
289
|
return result;
|
|
@@ -259,11 +293,14 @@ async function withAuth(fn, tracker) {
|
|
|
259
293
|
// key so the agent can tell the user EXACTLY which file +line to
|
|
260
294
|
// edit (e.g. `~/.zshrc line 20`) instead of leaving them to guess.
|
|
261
295
|
// We never include the key value itself, only its first 12 chars.
|
|
262
|
-
const diag = buildRevokedKeyDiagnostic(identifyKeySource(
|
|
296
|
+
const diag = buildRevokedKeyDiagnostic(identifyKeySource(effectiveApiKey, projectDir));
|
|
297
|
+
const triedNote = resolved.tried_count && resolved.tried_count > 0
|
|
298
|
+
? ` CodeLoop also tried ${resolved.tried_count} other key(s) found on disk — none were active.`
|
|
299
|
+
: "";
|
|
263
300
|
const r = {
|
|
264
301
|
error: true,
|
|
265
302
|
status: result.status,
|
|
266
|
-
message: `${result.message || "API key is invalid or expired."} ${diag.message}`,
|
|
303
|
+
message: `${result.message || "API key is invalid or expired."} ${diag.message}${triedNote}`,
|
|
267
304
|
key_source: diag.source,
|
|
268
305
|
fix_steps: diag.fix_steps,
|
|
269
306
|
dashboard_url: "https://codeloop.tech/dashboard/keys",
|
|
@@ -431,6 +468,17 @@ function withInitHint(content, dir) {
|
|
|
431
468
|
const banner = buildVersionBanner();
|
|
432
469
|
const withUpdate = withUpdateNotice(content);
|
|
433
470
|
const head = [];
|
|
471
|
+
// 0.1.64 — key self-heal notice. When CodeLoop recovered from a revoked
|
|
472
|
+
// configured key by using an active on-disk key, surface a throttled
|
|
473
|
+
// one-liner so the user still cleans up the stale config (their run was
|
|
474
|
+
// never blocked). Sits at the very top — it's the most actionable signal.
|
|
475
|
+
if (keyRecoveryNotice) {
|
|
476
|
+
const now = Date.now();
|
|
477
|
+
if (now - lastKeyRecoveryNoticeAt >= KEY_RECOVERY_NOTICE_INTERVAL_MS) {
|
|
478
|
+
lastKeyRecoveryNoticeAt = now;
|
|
479
|
+
head.push({ type: "text", text: keyRecoveryNotice });
|
|
480
|
+
}
|
|
481
|
+
}
|
|
434
482
|
// Candidate dirs in priority order:
|
|
435
483
|
// 1. Explicit `dir` arg from the call site (when the handler
|
|
436
484
|
// bothered to thread it through — the verify / capture /
|
|
@@ -3847,7 +3895,7 @@ Wait 1-2 seconds between interactions so video frames capture state changes.`, {
|
|
|
3847
3895
|
if (!autoClosed) {
|
|
3848
3896
|
const killHint = isStuckFileDialog
|
|
3849
3897
|
? `CodeLoop already attempted the multi-strategy close ladder and it FAILED — call codeloop_kill_modal_window with hwnd ${detection.hwnd ?? "(from codeloop_handle_modal)"} now. `
|
|
3850
|
-
: `Stop sending raw clicks /
|
|
3898
|
+
: `Stop sending raw clicks / keystrokes against it. Call codeloop_handle_modal with the decision the planned journey needs — "confirm" to proceed (approve the delete / save / overwrite), "cancel" to abort, or "dismiss" to close. CodeLoop clicks the matching Yes/OK/Save/Delete or No/Cancel button on the dialog directly via UIA (0.1.63 H12), so it no longer depends on which button happens to be the Enter/Escape default. If codeloop_handle_modal returns escalation: "kill_window_required", call codeloop_kill_modal_window with the returned hwnd. `;
|
|
3851
3899
|
modalPersistenceDirective =
|
|
3852
3900
|
`\n\n[CodeLoop F4] HARD: A ${detection.modal_kind ?? "modal"} dialog (${desc}) is STILL present after this interaction ` +
|
|
3853
3901
|
`(${consecutive} consecutive interactions have not cleared it). ` +
|
|
@@ -4054,6 +4102,44 @@ Returns: detected modal description + result of the chosen decision.`, {
|
|
|
4054
4102
|
`Continue with codeloop_interact against the application.`,
|
|
4055
4103
|
};
|
|
4056
4104
|
}
|
|
4105
|
+
// 0.1.63 H12 — deterministic confirm/cancel for desktop dialogs
|
|
4106
|
+
// (Win32 MessageBox / WPF confirm — the Photometry-DB delete-confirm
|
|
4107
|
+
// class). Walk the dialog's buttons via UIA and INVOKE the affirmative
|
|
4108
|
+
// (confirm ⇒ Yes/OK/Save/Delete/Continue) or negative (cancel ⇒
|
|
4109
|
+
// No/Cancel/Discard) button by name, then re-detect to confirm it
|
|
4110
|
+
// cleared. This avoids depending on which button is the keystroke
|
|
4111
|
+
// default — on a destructive Yes/No box the default is often "No", so
|
|
4112
|
+
// a blind Enter/Escape would silently abort the action. `dismiss`
|
|
4113
|
+
// stays on the Escape path below; an unmatched custom dialog falls
|
|
4114
|
+
// through to the keystroke fallback too.
|
|
4115
|
+
if (detection.target_type === "desktop" &&
|
|
4116
|
+
(params.decision === "confirm" || params.decision === "cancel")) {
|
|
4117
|
+
const { invokeDialogDecisionButton } = await import("./runners/modal_close_strategies.js");
|
|
4118
|
+
const invoke = await invokeDialogDecisionButton({
|
|
4119
|
+
decision: params.decision,
|
|
4120
|
+
hwnd: detection.hwnd,
|
|
4121
|
+
cwd,
|
|
4122
|
+
});
|
|
4123
|
+
if (invoke.ok) {
|
|
4124
|
+
await new Promise((r) => setTimeout(r, 400));
|
|
4125
|
+
const after = await detectModal({
|
|
4126
|
+
target_type: "desktop",
|
|
4127
|
+
app_name: params.app_name,
|
|
4128
|
+
cwd,
|
|
4129
|
+
config,
|
|
4130
|
+
});
|
|
4131
|
+
return {
|
|
4132
|
+
decision_taken: params.decision,
|
|
4133
|
+
detection,
|
|
4134
|
+
invoked_button: invoke.button,
|
|
4135
|
+
modal_cleared: !after.is_modal_present,
|
|
4136
|
+
next_step: after.is_modal_present
|
|
4137
|
+
? `Clicked "${invoke.button ?? params.decision}" but a modal is STILL present (${after.modal_description ?? "unknown"}). It may be a stacked dialog — call codeloop_handle_modal again, or codeloop_kill_modal_window with hwnd="${after.hwnd ?? detection.hwnd ?? ""}" if it is stuck.`
|
|
4138
|
+
: `Clicked the "${invoke.button ?? params.decision}" button and the dialog cleared. Continue the journey with codeloop_interact.`,
|
|
4139
|
+
};
|
|
4140
|
+
}
|
|
4141
|
+
// No matching button found — fall through to the keystroke fallback.
|
|
4142
|
+
}
|
|
4057
4143
|
// For confirm / cancel / dismiss we delegate to codeloop_interact
|
|
4058
4144
|
// semantics by issuing a key press that maps to the right OS
|
|
4059
4145
|
// convention. dismiss ⇒ Escape, cancel ⇒ Escape (most modals
|