codeloop 0.1.18 → 0.1.20

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.
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAiFA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAoSnD"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAoFA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAubnD"}
@@ -5,6 +5,9 @@ import { homedir, platform } from "os";
5
5
  import chalk from "chalk";
6
6
  import { BACKEND_URL } from "@codelooptech/shared";
7
7
  import { GLOBAL_CLAUDE_MEMORY_BEGIN, GLOBAL_CLAUDE_MEMORY_END, } from "../templates/global-rules.js";
8
+ import { scanTierBEvidence, summariseCoverage } from "../lib/tier-b-evidence.js";
9
+ import { summariseStripeHealth } from "../lib/stripe-doctor.js";
10
+ import { pathFor, runGeoDoctor } from "../lib/geo-doctor.js";
8
11
  function check(label, ok, detail, fix, optional) {
9
12
  return { label, ok, detail, fix, optional };
10
13
  }
@@ -174,6 +177,118 @@ export async function doctorCommand() {
174
177
  else {
175
178
  console.log(` ${chalk.bold.yellow("Some required checks failed.")} Run the suggested fixes above.`);
176
179
  }
180
+ // ── Tier-B / Claude Code multi-app evidence (Phase 5C) ──────────
181
+ // Surfaces (without PR-blocking) which Test 24 + Test 25 multi-app
182
+ // rows have evidence captured under `tier-b-evidence/` on this host.
183
+ // Honest gating: missing rows are listed but never flip allOk=false
184
+ // because the captures are user-executed on a Windows host / fresh
185
+ // Claude Code installs.
186
+ const tierB = scanTierBEvidence(join(cwd, "tier-b-evidence"));
187
+ const coverage = summariseCoverage(tierB);
188
+ console.log("");
189
+ console.log(sep);
190
+ console.log(` ${chalk.bold.cyan("Tier-B / multi-app evidence")}`);
191
+ console.log(sep);
192
+ if (!tierB.exists) {
193
+ console.log(` ${chalk.dim("No tier-b-evidence/ folder yet. Capture rows with:")}`);
194
+ console.log(` ${chalk.cyan("pwsh -File scripts/windows/capture-evidence.ps1 -RowId 24.6")} (Tier-B)`);
195
+ console.log(` ${chalk.cyan("bash scripts/claude-code-app-pack/clone-fixtures.sh")} (Claude Code)`);
196
+ }
197
+ else {
198
+ if (coverage.tierB.captured.length > 0) {
199
+ console.log(` ${chalk.green("✓")} Tier-B (Test 24) captured: ${coverage.tierB.captured.join(", ")}`);
200
+ }
201
+ if (coverage.tierB.missing.length > 0) {
202
+ console.log(` ${chalk.yellow("!")} Tier-B (Test 24) missing: ${coverage.tierB.missing.join(", ")}`);
203
+ console.log(` ${chalk.dim("Run on the matching host:")} ${chalk.cyan("pwsh -File scripts/windows/capture-evidence.ps1 -RowId <row-id>")}`);
204
+ }
205
+ if (coverage.claudeCode.captured.length > 0) {
206
+ console.log(` ${chalk.green("✓")} Claude Code apps captured: ${coverage.claudeCode.captured.join(", ")}`);
207
+ }
208
+ if (coverage.claudeCode.missing.length > 0) {
209
+ console.log(` ${chalk.yellow("!")} Claude Code apps missing: ${coverage.claudeCode.missing.join(", ")}`);
210
+ console.log(` ${chalk.dim("Open the fixture and follow")} ${chalk.cyan("docs/CLAUDE_CODE_TEST_PACK.md")}`);
211
+ }
212
+ console.log(` ${chalk.dim(`Total captures on this host: ${tierB.rows.length} (under ${tierB.rootDir}/)`)}`);
213
+ }
214
+ console.log(` ${chalk.dim("This list is informational. PR gating only requires Tier-A; Tier-B + Claude Code rows are user-executed.")}`);
215
+ // ── Stripe environment (Phase A7) ──────────────────────────────
216
+ // Optional: only runs when CODELOOP_ADMIN_TOKEN is set, since the
217
+ // /v1/billing/health endpoint is admin-only. We never fail allOk on
218
+ // Stripe — operators surface the real signal in the dashboard badge.
219
+ const adminToken = process.env.CODELOOP_ADMIN_TOKEN;
220
+ if (adminToken) {
221
+ console.log("");
222
+ console.log(sep);
223
+ console.log(` ${chalk.bold.cyan("Stripe environment")}`);
224
+ console.log(sep);
225
+ try {
226
+ const controller = new AbortController();
227
+ const t = setTimeout(() => controller.abort(), 5_000);
228
+ const res = await fetch(`${BACKEND_URL.replace(/\/$/, "")}/v1/billing/health`, {
229
+ headers: { Authorization: `Bearer ${adminToken}` },
230
+ signal: controller.signal,
231
+ });
232
+ clearTimeout(t);
233
+ if (res.status === 403) {
234
+ console.log(` ${chalk.yellow("!")} CODELOOP_ADMIN_TOKEN is not an admin token (403)`);
235
+ }
236
+ else if (!res.ok) {
237
+ console.log(` ${chalk.yellow("!")} ${BACKEND_URL}/v1/billing/health → HTTP ${res.status}`);
238
+ }
239
+ else {
240
+ const json = (await res.json());
241
+ const summary = summariseStripeHealth(json);
242
+ const icon = summary.severity === "ok"
243
+ ? chalk.green("✓")
244
+ : summary.severity === "warn"
245
+ ? chalk.yellow("!")
246
+ : chalk.red("✗");
247
+ for (const line of summary.lines) {
248
+ console.log(` ${icon} ${line}`);
249
+ }
250
+ for (const fix of summary.remediation) {
251
+ console.log(` ${chalk.dim("Fix:")} ${chalk.cyan(fix)}`);
252
+ }
253
+ }
254
+ }
255
+ catch (err) {
256
+ console.log(` ${chalk.yellow("!")} Stripe health probe failed: ${err instanceof Error ? err.message : String(err)}`);
257
+ }
258
+ }
259
+ else {
260
+ console.log("");
261
+ console.log(` ${chalk.dim("(set CODELOOP_ADMIN_TOKEN to surface the Stripe environment subsection)")}`);
262
+ }
263
+ // ── GEO surfaces (Phase F6) ────────────────────────────────────
264
+ // Probes the public LLM- and search-engine-facing endpoints. Pure
265
+ // best-effort; failures are warnings only and never affect allOk.
266
+ // Set CODELOOP_GEO_HOST to override (defaults to https://codeloop.tech).
267
+ console.log("");
268
+ console.log(sep);
269
+ console.log(` ${chalk.bold.cyan("GEO surfaces")} — LLM + search discovery probes`);
270
+ console.log(sep);
271
+ try {
272
+ const geo = await runGeoDoctor();
273
+ console.log(` ${chalk.dim(`Probing ${geo.host} (${geo.probes.length} surfaces)`)}`);
274
+ for (const p of geo.probes) {
275
+ const icon = p.ok
276
+ ? chalk.green("✓")
277
+ : p.important
278
+ ? chalk.yellow("!")
279
+ : chalk.dim("·");
280
+ const path = pathFor(p.url, geo.host);
281
+ console.log(` ${icon} ${path}`);
282
+ console.log(` ${chalk.dim(p.detail)}`);
283
+ }
284
+ console.log(` ${chalk.dim(`Summary: ${geo.okCount} ok, ${geo.warnCount} warn (informational only)`)}`);
285
+ if (geo.warnCount > 0) {
286
+ console.log(` ${chalk.dim("See")} ${chalk.cyan("docs/GEO_RUNBOOK.md")} ${chalk.dim("for the per-surface incident response.")}`);
287
+ }
288
+ }
289
+ catch (err) {
290
+ console.log(` ${chalk.dim(`GEO probes skipped: ${err instanceof Error ? err.message : String(err)}`)}`);
291
+ }
177
292
  console.log("");
178
293
  console.log(` ${chalk.dim("How CodeLoop activates in Cursor (layered redundancy):")}`);
179
294
  console.log(` ${chalk.dim("1.")} MCP server ${chalk.bold("instructions")} field → injected into agent system prompt`);
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Phase F6 — GEO doctor.
3
+ *
4
+ * Probes the public GEO surfaces of codeloop.tech (or whichever host you
5
+ * point at via CODELOOP_GEO_HOST) and returns a structured summary the
6
+ * `codeloop doctor` command can render.
7
+ *
8
+ * All probes are HEAD requests with a 5s timeout. Failures are reported
9
+ * as warnings (never as hard fails) because the CLI is run by users who
10
+ * may legitimately be offline.
11
+ */
12
+ export interface GeoProbe {
13
+ url: string;
14
+ ok: boolean;
15
+ status: number | null;
16
+ detail: string;
17
+ /**
18
+ * If false, a failure is purely informational. If true, failure should
19
+ * surface as a yellow warning. We never emit red errors from this
20
+ * helper because the CLI shouldn't break on remote network state.
21
+ */
22
+ important: boolean;
23
+ }
24
+ export interface GeoDoctorResult {
25
+ host: string;
26
+ probes: GeoProbe[];
27
+ okCount: number;
28
+ warnCount: number;
29
+ }
30
+ export declare function runGeoDoctor(options?: {
31
+ host?: string;
32
+ fetchImpl?: typeof fetch;
33
+ timeoutMs?: number;
34
+ }): Promise<GeoDoctorResult>;
35
+ export declare function pathFor(probeUrl: string, host: string): string;
36
+ //# sourceMappingURL=geo-doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geo-doctor.d.ts","sourceRoot":"","sources":["../../src/lib/geo-doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AA+ED,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,eAAe,CAAC,CAgB3B;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9D"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Phase F6 — GEO doctor.
3
+ *
4
+ * Probes the public GEO surfaces of codeloop.tech (or whichever host you
5
+ * point at via CODELOOP_GEO_HOST) and returns a structured summary the
6
+ * `codeloop doctor` command can render.
7
+ *
8
+ * All probes are HEAD requests with a 5s timeout. Failures are reported
9
+ * as warnings (never as hard fails) because the CLI is run by users who
10
+ * may legitimately be offline.
11
+ */
12
+ const DEFAULT_HOST = "https://codeloop.tech";
13
+ const DEFAULT_TIMEOUT_MS = 5_000;
14
+ // Surfaces that should always 200 if the website is healthy. The order
15
+ // is intentional: cheapest/most-fundamental first.
16
+ const PROBES = [
17
+ { path: "/sitemap.xml", important: true, description: "sitemap (search + GEO)" },
18
+ { path: "/llms.txt", important: true, description: "LLM index" },
19
+ { path: "/llms-full.txt", important: true, description: "LLM long-form bundle" },
20
+ { path: "/tools.json", important: true, description: "MCP tool catalog feed" },
21
+ { path: "/changelog.json", important: true, description: "JSON Feed changelog" },
22
+ { path: "/changelog.atom", important: true, description: "Atom changelog" },
23
+ { path: "/docs/llm-search", important: false, description: "GEO landing page" },
24
+ ];
25
+ async function probe(url, important, fetchImpl = fetch, timeoutMs = DEFAULT_TIMEOUT_MS) {
26
+ const controller = new AbortController();
27
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
28
+ try {
29
+ const res = await fetchImpl(url, {
30
+ method: "HEAD",
31
+ signal: controller.signal,
32
+ // Some hosts return 405 to HEAD on dynamic routes; fall back below.
33
+ });
34
+ clearTimeout(timer);
35
+ if (res.status === 405 || res.status === 403) {
36
+ // Re-try as GET; some Next.js dynamic routes refuse HEAD.
37
+ const controller2 = new AbortController();
38
+ const timer2 = setTimeout(() => controller2.abort(), timeoutMs);
39
+ try {
40
+ const res2 = await fetchImpl(url, {
41
+ method: "GET",
42
+ signal: controller2.signal,
43
+ });
44
+ clearTimeout(timer2);
45
+ return {
46
+ url,
47
+ ok: res2.ok,
48
+ status: res2.status,
49
+ detail: `GET ${res2.status}`,
50
+ important,
51
+ };
52
+ }
53
+ catch (err) {
54
+ clearTimeout(timer2);
55
+ return {
56
+ url,
57
+ ok: false,
58
+ status: null,
59
+ detail: err instanceof Error ? err.message : String(err),
60
+ important,
61
+ };
62
+ }
63
+ }
64
+ return {
65
+ url,
66
+ ok: res.ok,
67
+ status: res.status,
68
+ detail: `HEAD ${res.status}`,
69
+ important,
70
+ };
71
+ }
72
+ catch (err) {
73
+ clearTimeout(timer);
74
+ return {
75
+ url,
76
+ ok: false,
77
+ status: null,
78
+ detail: err instanceof Error ? err.message : String(err),
79
+ important,
80
+ };
81
+ }
82
+ }
83
+ export async function runGeoDoctor(options) {
84
+ const host = (options?.host ?? process.env.CODELOOP_GEO_HOST ?? DEFAULT_HOST)
85
+ .replace(/\/$/, "");
86
+ const fetchImpl = options?.fetchImpl ?? fetch;
87
+ const timeoutMs = options?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
88
+ const probes = await Promise.all(PROBES.map((p) => probe(`${host}${p.path}`, p.important, fetchImpl, timeoutMs)));
89
+ const okCount = probes.filter((p) => p.ok).length;
90
+ const warnCount = probes.filter((p) => !p.ok).length;
91
+ return { host, probes, okCount, warnCount };
92
+ }
93
+ export function pathFor(probeUrl, host) {
94
+ return probeUrl.startsWith(host) ? probeUrl.slice(host.length) : probeUrl;
95
+ }
96
+ //# sourceMappingURL=geo-doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geo-doctor.js","sourceRoot":"","sources":["../../src/lib/geo-doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export type StripeMode = "live" | "test" | "unconfigured";
2
+ export interface StripeDoctorInput {
3
+ stripe_mode: StripeMode;
4
+ key_prefix: string | null;
5
+ webhook_signing_secret_present: boolean;
6
+ prices: Record<string, {
7
+ configured: boolean;
8
+ reachable: boolean | null;
9
+ }>;
10
+ last_event_at: string | null;
11
+ last_event_type: string | null;
12
+ idempotency_cache_size: number;
13
+ }
14
+ export interface StripeDoctorOutput {
15
+ /** "ok" — all green, "warn" — non-fatal anomalies, "error" — live mode without webhook secret etc. */
16
+ severity: "ok" | "warn" | "error";
17
+ lines: string[];
18
+ remediation: string[];
19
+ }
20
+ export declare function summariseStripeHealth(input: StripeDoctorInput): StripeDoctorOutput;
21
+ //# sourceMappingURL=stripe-doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripe-doctor.d.ts","sourceRoot":"","sources":["../../src/lib/stripe-doctor.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,cAAc,CAAC;AAE1D,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,UAAU,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,8BAA8B,EAAE,OAAO,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAC3E,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,sGAAsG;IACtG,QAAQ,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC;IAClC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAYD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,iBAAiB,GACvB,kBAAkB,CAsEpB"}
@@ -0,0 +1,54 @@
1
+ // packages/cli/src/lib/stripe-doctor.ts
2
+ //
3
+ // Phase A7 — Pure helper that turns a /v1/billing/health response into
4
+ // the lines the `codeloop doctor` CLI prints. Extracted from doctor.ts so
5
+ // it can be unit-tested without spinning up a backend.
6
+ const PRICE_LABELS = {
7
+ STRIPE_PRICE_SOLO: "Solo (mo)",
8
+ STRIPE_PRICE_TEAM: "Team (mo)",
9
+ STRIPE_PRICE_ENTERPRISE: "Enterprise (mo)",
10
+ STRIPE_PRICE_SOLO_ANNUAL: "Solo (yr)",
11
+ STRIPE_PRICE_TEAM_ANNUAL: "Team (yr)",
12
+ STRIPE_PRICE_ENTERPRISE_ANNUAL: "Enterprise (yr)",
13
+ STRIPE_LIFETIME_PRICE_ID: "Lifetime",
14
+ };
15
+ export function summariseStripeHealth(input) {
16
+ const lines = [];
17
+ const remediation = [];
18
+ let severity = "ok";
19
+ lines.push(`Stripe mode: ${input.stripe_mode.toUpperCase()}${input.key_prefix ? ` (${input.key_prefix}…)` : ""}`);
20
+ if (input.stripe_mode === "unconfigured") {
21
+ severity = "error";
22
+ remediation.push("Set STRIPE_SECRET_KEY in the backend environment (test or live).");
23
+ }
24
+ lines.push(`Webhook signing secret: ${input.webhook_signing_secret_present ? "present" : "MISSING"}`);
25
+ if (!input.webhook_signing_secret_present) {
26
+ severity = severity === "error" ? "error" : "error";
27
+ remediation.push("Set STRIPE_WEBHOOK_SECRET — without it /v1/billing/webhook will reject every delivery.");
28
+ }
29
+ const missing = Object.entries(input.prices).filter(([, v]) => !v.configured);
30
+ const unreachable = Object.entries(input.prices).filter(([, v]) => v.reachable === false);
31
+ if (missing.length === 0) {
32
+ lines.push("All price IDs configured");
33
+ }
34
+ else {
35
+ severity = severity === "error" ? "error" : input.stripe_mode === "live" ? "error" : "warn";
36
+ lines.push(`${missing.length} price ID(s) not configured: ${missing
37
+ .map(([k]) => PRICE_LABELS[k] ?? k)
38
+ .join(", ")}`);
39
+ remediation.push("Run scripts/stripe-live-bootstrap.sh --apply to provision them idempotently.");
40
+ }
41
+ if (unreachable.length > 0) {
42
+ severity = "error";
43
+ lines.push(`${unreachable.length} configured price(s) DO NOT resolve in Stripe: ${unreachable
44
+ .map(([k]) => PRICE_LABELS[k] ?? k)
45
+ .join(", ")}`);
46
+ remediation.push("Re-run scripts/stripe-live-preflight.sh to identify the broken price IDs.");
47
+ }
48
+ lines.push(`Last webhook: ${input.last_event_at
49
+ ? `${input.last_event_type} @ ${input.last_event_at}`
50
+ : "none received this process"}`);
51
+ lines.push(`Idempotency cache: ${input.idempotency_cache_size} entries`);
52
+ return { severity, lines, remediation };
53
+ }
54
+ //# sourceMappingURL=stripe-doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripe-doctor.js","sourceRoot":"","sources":["../../src/lib/stripe-doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface TierBEvidenceRow {
2
+ rowId: string;
3
+ source: "tier-b" | "claude-code";
4
+ hasVideo: boolean;
5
+ hasMetadata: boolean;
6
+ capturedAt: string | null;
7
+ path: string;
8
+ }
9
+ export interface TierBEvidenceSummary {
10
+ rootDir: string;
11
+ exists: boolean;
12
+ rows: TierBEvidenceRow[];
13
+ }
14
+ export declare function scanTierBEvidence(rootDir?: string): TierBEvidenceSummary;
15
+ export interface TierBCoverage {
16
+ tierB: {
17
+ captured: string[];
18
+ missing: string[];
19
+ };
20
+ claudeCode: {
21
+ captured: string[];
22
+ missing: string[];
23
+ };
24
+ }
25
+ export declare function summariseCoverage(summary: TierBEvidenceSummary): TierBCoverage;
26
+ //# sourceMappingURL=tier-b-evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier-b-evidence.d.ts","sourceRoot":"","sources":["../../src/lib/tier-b-evidence.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,GAAG,aAAa,CAAC;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,gBAAgB,EAAE,CAAC;CAC1B;AAoBD,wBAAgB,iBAAiB,CAC/B,OAAO,SAAoB,GAC1B,oBAAoB,CAiDtB;AAWD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,UAAU,EAAE;QACV,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;CACH;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAuB9E"}
@@ -0,0 +1,92 @@
1
+ import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ const TIER_B_ROW_RE = /^(2[0-9]\.[0-9]+)/;
4
+ function inferRowId(folderName) {
5
+ const m = folderName.match(TIER_B_ROW_RE);
6
+ return m ? m[1] : null;
7
+ }
8
+ function readMetadataTimestamp(path) {
9
+ try {
10
+ const obj = JSON.parse(readFileSync(path, "utf-8"));
11
+ return obj.captured_at ?? null;
12
+ }
13
+ catch {
14
+ return null;
15
+ }
16
+ }
17
+ export function scanTierBEvidence(rootDir = "tier-b-evidence") {
18
+ const summary = {
19
+ rootDir,
20
+ exists: existsSync(rootDir),
21
+ rows: [],
22
+ };
23
+ if (!summary.exists)
24
+ return summary;
25
+ for (const entry of readdirSync(rootDir)) {
26
+ const full = join(rootDir, entry);
27
+ if (!statSync(full).isDirectory())
28
+ continue;
29
+ if (entry === "claude-code") {
30
+ for (const sub of readdirSync(full)) {
31
+ const subFull = join(full, sub);
32
+ if (!statSync(subFull).isDirectory())
33
+ continue;
34
+ const videoPath = join(subFull, "recording.mp4");
35
+ const metaPath = join(subFull, "metadata.json");
36
+ summary.rows.push({
37
+ rowId: sub,
38
+ source: "claude-code",
39
+ hasVideo: existsSync(videoPath) && statSync(videoPath).size > 0,
40
+ hasMetadata: existsSync(metaPath),
41
+ capturedAt: existsSync(metaPath) ? readMetadataTimestamp(metaPath) : null,
42
+ path: subFull,
43
+ });
44
+ }
45
+ continue;
46
+ }
47
+ const rowId = inferRowId(entry);
48
+ if (!rowId)
49
+ continue;
50
+ const videoPath = join(full, "recording.mp4");
51
+ const metaPath = join(full, "metadata.json");
52
+ summary.rows.push({
53
+ rowId,
54
+ source: "tier-b",
55
+ hasVideo: existsSync(videoPath) && statSync(videoPath).size > 0,
56
+ hasMetadata: existsSync(metaPath),
57
+ capturedAt: existsSync(metaPath) ? readMetadataTimestamp(metaPath) : null,
58
+ path: full,
59
+ });
60
+ }
61
+ summary.rows.sort((a, b) => {
62
+ if (a.source !== b.source)
63
+ return a.source.localeCompare(b.source);
64
+ return a.rowId.localeCompare(b.rowId);
65
+ });
66
+ return summary;
67
+ }
68
+ const TIER_B_EXPECTED_ROWS = ["24.6", "24.7", "24.8", "24.9", "24.12"];
69
+ const CLAUDE_EXPECTED_APPS = [
70
+ "nextjs-playwright",
71
+ "flutter-desktop",
72
+ "macos-swift",
73
+ "express-api",
74
+ "django-react",
75
+ ];
76
+ export function summariseCoverage(summary) {
77
+ const tierBCaptured = new Set(summary.rows.filter((r) => r.source === "tier-b").map((r) => r.rowId));
78
+ const claudeRowIds = summary.rows
79
+ .filter((r) => r.source === "claude-code")
80
+ .map((r) => r.rowId);
81
+ return {
82
+ tierB: {
83
+ captured: TIER_B_EXPECTED_ROWS.filter((r) => tierBCaptured.has(r)),
84
+ missing: TIER_B_EXPECTED_ROWS.filter((r) => !tierBCaptured.has(r)),
85
+ },
86
+ claudeCode: {
87
+ captured: CLAUDE_EXPECTED_APPS.filter((app) => claudeRowIds.some((id) => id === app || id.startsWith(`${app}-`))),
88
+ missing: CLAUDE_EXPECTED_APPS.filter((app) => !claudeRowIds.some((id) => id === app || id.startsWith(`${app}-`))),
89
+ },
90
+ };
91
+ }
92
+ //# sourceMappingURL=tier-b-evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier-b-evidence.js","sourceRoot":"","sources":["../../src/lib/tier-b-evidence.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeloop",
3
- "version": "0.1.18",
3
+ "version": "0.1.20",
4
4
  "description": "CLI tool for CodeLoop — automated verification for AI coding agents",
5
5
  "type": "module",
6
6
  "bin": {