chore(cli): typecheck clean (10 → 0)
Some checks failed
CI / Lint (push) Has been cancelled
CI / Typecheck (push) Has been cancelled
CI / Broker tests (Postgres) (push) Has been cancelled
CI / Docker build (linux/amd64) (push) Has been cancelled

- broker-actions: msg-status section header used out-of-scope `id`
  variable; was a real bug (renders "message undefined…" on the JSON
  path). Fixed to use the in-scope lookupId.
- exit-codes: add IO_ERROR (10) — referenced in three places by
  platform-actions but never declared.
- types/text-import.d.ts: declare wildcard `*.md` module so Bun's
  text-import attribute used by skill.ts typechecks.
- ipc/server: cast PeerSummary/SkillSummary through unknown before
  spreading into Record<string, unknown>.
- mcp/server: typed JSON.parse for SSE events.
- bridge/daemon-route: import path with .ts → .js (esm).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Alejandro Gutiérrez
2026-05-04 13:23:55 +01:00
parent f013436541
commit cef246a34a
6 changed files with 15 additions and 5 deletions

View File

@@ -194,7 +194,7 @@ export async function runMsgStatus(id: string | undefined, opts: StateFlags): Pr
console.log(JSON.stringify(result, null, 2));
return EXIT.SUCCESS;
}
render.section(`message ${id.slice(0, 12)}`);
render.section(`message ${lookupId.slice(0, 12)}`);
render.kv([
["target", result.targetSpec],
["delivered", result.delivered ? "yes" : "no"],

View File

@@ -9,6 +9,7 @@ export const EXIT = {
PERMISSION_DENIED: 7,
INTERNAL_ERROR: 8,
CLAUDE_MISSING: 9,
IO_ERROR: 10,
} as const;
export type ExitCode = (typeof EXIT)[keyof typeof EXIT];

View File

@@ -328,7 +328,7 @@ function makeHandler(opts: {
if (filterMesh && filterMesh !== slug) continue;
try {
const peers = await b.listPeers();
for (const p of peers) all.push({ ...(p as Record<string, unknown>), mesh: slug });
for (const p of peers) all.push({ ...(p as unknown as Record<string, unknown>), mesh: slug });
} catch (e) {
opts.log("warn", "ipc_peers_broker_failed", { mesh: slug, err: String(e) });
}
@@ -486,7 +486,7 @@ function makeHandler(opts: {
if (filterMesh && filterMesh !== slug) continue;
try {
const skills = await b.listSkills(query);
for (const s of skills) all.push({ ...(s as Record<string, unknown>), mesh: slug });
for (const s of skills) all.push({ ...(s as unknown as Record<string, unknown>), mesh: slug });
} catch (e) {
opts.log("warn", "ipc_skills_broker_failed", { mesh: slug, err: String(e) });
}

View File

@@ -125,7 +125,7 @@ function subscribeEvents(onEvent: (e: DaemonEvent) => void): { close: () => void
}
if (!dataLine) continue;
try {
const parsed = JSON.parse(dataLine);
const parsed = JSON.parse(dataLine) as Record<string, unknown>;
onEvent({ kind, ts: String(parsed.ts ?? ""), data: parsed });
} catch { /* malformed event; skip */ }
}

View File

@@ -15,7 +15,7 @@
import { ipc } from "~/daemon/ipc/client.js";
import { ensureDaemonReady } from "~/services/daemon/lifecycle.js";
import { getDaemonPolicy } from "~/services/daemon/policy.js";
import { warnDaemonState } from "~/ui/warnings.ts";
import { warnDaemonState } from "~/ui/warnings.js";
function meshQuery(mesh?: string): string {
return mesh ? `?mesh=${encodeURIComponent(mesh)}` : "";

9
apps/cli/src/types/text-import.d.ts vendored Normal file
View File

@@ -0,0 +1,9 @@
/**
* Bun's text-import attribute lets us bake `.md` content into the bundle
* at build time. TypeScript doesn't know about the import attribute
* syntax for non-JS modules, so we declare the wildcard here.
*/
declare module "*.md" {
const content: string;
export default content;
}