sandstream-kit 1.3.1 → 1.4.1

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 (43) hide show
  1. package/README.md +62 -0
  2. package/dist/check-security.d.ts +2 -0
  3. package/dist/check-security.js +8 -1
  4. package/dist/check-security.js.map +1 -1
  5. package/dist/cli.js +92 -3
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/hooks.js +5 -0
  8. package/dist/commands/hooks.js.map +1 -1
  9. package/dist/commands/memory.js +23 -4
  10. package/dist/commands/memory.js.map +1 -1
  11. package/dist/config.d.ts +32 -0
  12. package/dist/config.js +25 -1
  13. package/dist/config.js.map +1 -1
  14. package/dist/context-lock.d.ts +81 -0
  15. package/dist/context-lock.js +203 -0
  16. package/dist/context-lock.js.map +1 -0
  17. package/dist/hooks.d.ts +12 -0
  18. package/dist/hooks.js +44 -3
  19. package/dist/hooks.js.map +1 -1
  20. package/dist/install.d.ts +10 -0
  21. package/dist/install.js +34 -1
  22. package/dist/install.js.map +1 -1
  23. package/dist/login.d.ts +1 -1
  24. package/dist/login.js +15 -2
  25. package/dist/login.js.map +1 -1
  26. package/dist/memory/db.js +9 -0
  27. package/dist/memory/db.js.map +1 -1
  28. package/dist/memory/pal.d.ts +19 -2
  29. package/dist/memory/pal.js +67 -27
  30. package/dist/memory/pal.js.map +1 -1
  31. package/dist/memory/types.d.ts +7 -0
  32. package/dist/output.js +4 -2
  33. package/dist/output.js.map +1 -1
  34. package/dist/rules/catalog.d.ts +31 -0
  35. package/dist/rules/catalog.js +49 -0
  36. package/dist/rules/catalog.js.map +1 -0
  37. package/dist/secrets.d.ts +1 -0
  38. package/dist/secrets.js +10 -0
  39. package/dist/secrets.js.map +1 -1
  40. package/dist/utils/redactSecrets.d.ts +11 -0
  41. package/dist/utils/redactSecrets.js +17 -0
  42. package/dist/utils/redactSecrets.js.map +1 -1
  43. package/package.json +1 -1
@@ -0,0 +1,203 @@
1
+ /**
2
+ * Per-project CLI context lock.
3
+ *
4
+ * Verifies that each tool's LIVE (account, project) pair matches what `.kit.toml`
5
+ * `[context]` declares. The core rule: a logged-in account and a selected project
6
+ * are NEVER assumed to belong together. Only the declared pair is trusted; the
7
+ * ambient CLI state is data to be checked against it. A right account paired with
8
+ * the wrong project (or vice versa) is a mismatch, not a pass.
9
+ *
10
+ * Read-only: this never changes any tool's state (that is `kit context use`).
11
+ */
12
+ import { execFile } from "node:child_process";
13
+ import { promisify } from "node:util";
14
+ import { readFile } from "node:fs/promises";
15
+ import { readFileSync } from "node:fs";
16
+ import { resolve, join } from "node:path";
17
+ import { homedir } from "node:os";
18
+ const exec = promisify(execFile);
19
+ function field(tool, name, expected, actual) {
20
+ if (expected === undefined)
21
+ return null; // not declared -> not checked
22
+ if (actual === null)
23
+ return { tool, field: name, status: "unknown", expected, actual: null };
24
+ return { tool, field: name, status: actual === expected ? "ok" : "mismatch", expected, actual };
25
+ }
26
+ // One row per checkable (tool, field). Adding a CLI to the lock is one row.
27
+ // `declared` returns the expected value (undefined = not declared = not checked);
28
+ // `live` returns the read value (null = unreadable). vercel context = the ids in
29
+ // .vercel/project.json (deterministic + local): team -> orgId, project -> projectId.
30
+ const FIELD_SPECS = [
31
+ { tool: "gcloud", field: "account", declared: (d) => d.gcloud?.account, live: (l) => l.gcloud?.account ?? null },
32
+ { tool: "gcloud", field: "project", declared: (d) => d.gcloud?.project, live: (l) => l.gcloud?.project ?? null },
33
+ { tool: "git", field: "email", declared: (d) => d.git?.email, live: (l) => l.git?.email ?? null },
34
+ { tool: "github", field: "org", declared: (d) => d.github?.org, live: (l) => l.github?.org ?? null },
35
+ { tool: "github", field: "remote", declared: (d) => d.github?.remote, live: (l) => l.github?.remote ?? null },
36
+ { tool: "npm", field: "registry", declared: (d) => d.npm?.registry, live: (l) => l.npm?.registry ?? null },
37
+ { tool: "vercel", field: "team(orgId)", declared: (d) => d.vercel?.team, live: (l) => l.vercel?.orgId ?? null },
38
+ { tool: "vercel", field: "project(projectId)", declared: (d) => d.vercel?.project, live: (l) => l.vercel?.projectId ?? null },
39
+ ];
40
+ /**
41
+ * Compare a declared context against a live snapshot. PURE (no I/O) so the
42
+ * principle is unit-testable: only the exact declared pair passes.
43
+ */
44
+ export function compareContext(declared, live) {
45
+ return FIELD_SPECS.map((s) => field(s.tool, s.field, s.declared(declared), s.live(live))).filter((f) => f !== null);
46
+ }
47
+ /**
48
+ * Build a ready-to-paste `[context]` block from a live snapshot, for the
49
+ * empty-state hint. Every value is what kit DETECTED as the currently-active
50
+ * CLI state — which is exactly what the lock exists to question, not trust.
51
+ * So each field is annotated with its source: git/github/vercel come from
52
+ * repo-local truth (config, origin remote, .vercel/project.json) and are
53
+ * authoritative; gcloud/npm are ambient/global and are flagged to verify.
54
+ * Tools kit could not read are omitted. PURE so it is unit-testable.
55
+ */
56
+ export function suggestContextToml(live) {
57
+ const out = [];
58
+ const emit = (header, rows) => {
59
+ const present = rows.filter(([, v]) => v);
60
+ if (present.length === 0)
61
+ return;
62
+ out.push(header);
63
+ for (const [k, v, note] of present) {
64
+ out.push(`${k} = "${v}"${note ? ` # ${note}` : ""}`);
65
+ }
66
+ out.push("");
67
+ };
68
+ emit("[context.git]", [["email", live.git?.email, "this repo's git config"]]);
69
+ emit("[context.github]", [
70
+ ["org", live.github?.org, "from origin remote — authoritative"],
71
+ ["remote", live.github?.remote, ""],
72
+ ]);
73
+ emit("[context.vercel]", [
74
+ ["team", live.vercel?.orgId, "orgId from .vercel/project.json — authoritative"],
75
+ ["project", live.vercel?.projectId, "projectId"],
76
+ ]);
77
+ emit("[context.gcloud]", [
78
+ ["account", live.gcloud?.account, "⚠ currently-active gcloud — VERIFY it is right for THIS repo"],
79
+ ["project", live.gcloud?.project, "⚠ verify"],
80
+ ]);
81
+ emit("[context.npm]", [["registry", live.npm?.registry, "global npm registry"]]);
82
+ return out.join("\n").trimEnd();
83
+ }
84
+ async function run(cmd, args) {
85
+ try {
86
+ const { stdout } = await exec(cmd, args, { timeout: 8_000 });
87
+ return stdout.trim() || null;
88
+ }
89
+ catch {
90
+ return null;
91
+ }
92
+ }
93
+ /** github.com[:/]org/repo(.git) -> { org, "github.com/org/repo" }. */
94
+ export function parseGithubRemote(url) {
95
+ if (!url)
96
+ return { org: null, remote: null };
97
+ const m = url.match(/github\.com[:/]([^/]+)\/(.+?)(?:\.git)?$/);
98
+ if (!m)
99
+ return { org: null, remote: null };
100
+ return { org: m[1], remote: `github.com/${m[1]}/${m[2]}` };
101
+ }
102
+ /** Read the live context from each tool. Every read fails soft to null. */
103
+ export async function gatherLive(cwd = process.cwd()) {
104
+ const live = {};
105
+ const gcloudJson = await run("gcloud", ["config", "list", "--format=json"]);
106
+ if (gcloudJson !== null) {
107
+ try {
108
+ const c = JSON.parse(gcloudJson);
109
+ live.gcloud = { account: c.core?.account ?? null, project: c.core?.project ?? null };
110
+ }
111
+ catch {
112
+ live.gcloud = { account: null, project: null };
113
+ }
114
+ }
115
+ else {
116
+ live.gcloud = { account: null, project: null };
117
+ }
118
+ live.git = { email: await run("git", ["config", "user.email"]) };
119
+ const remote = await run("git", ["remote", "get-url", "origin"]);
120
+ live.github = parseGithubRemote(remote);
121
+ const registry = await run("npm", ["config", "get", "registry"]);
122
+ live.npm = { registry: registry ? registry.replace(/\/+$/, "") : null };
123
+ try {
124
+ const raw = await readFile(resolve(cwd, ".vercel", "project.json"), "utf8");
125
+ const j = JSON.parse(raw);
126
+ live.vercel = { orgId: j.orgId ?? null, projectId: j.projectId ?? null };
127
+ }
128
+ catch {
129
+ live.vercel = { orgId: null, projectId: null };
130
+ }
131
+ return live;
132
+ }
133
+ /** Verify the declared context against live tool state. Empty if nothing declared. */
134
+ export async function checkContext(ctx, cwd = process.cwd()) {
135
+ if (!ctx)
136
+ return [];
137
+ // Normalize a declared npm registry the same way the live read is normalized.
138
+ const declared = ctx.npm?.registry
139
+ ? { ...ctx, npm: { ...ctx.npm, registry: ctx.npm.registry.replace(/\/+$/, "") } }
140
+ : ctx;
141
+ return compareContext(declared, await gatherLive(cwd));
142
+ }
143
+ /**
144
+ * Plan the commands that would activate the declared context. PURE (no I/O) so
145
+ * the mapping is unit-testable. Only LOCAL CLI config is ever touched (gcloud
146
+ * config, repo git identity) — never an account or a deploy. vercel/npm are not
147
+ * auto-activated (no clean per-repo "active" state); `use` prints guidance.
148
+ */
149
+ export function planContext(ctx) {
150
+ const steps = [];
151
+ const g = ctx.gcloud;
152
+ if (g?.config)
153
+ steps.push({ tool: "gcloud", argv: ["config", "configurations", "activate", g.config], describe: `activate config ${g.config}` });
154
+ if (g?.account)
155
+ steps.push({ tool: "gcloud", argv: ["config", "set", "account", g.account], describe: `account=${g.account}` });
156
+ if (g?.project)
157
+ steps.push({ tool: "gcloud", argv: ["config", "set", "project", g.project], describe: `project=${g.project}` });
158
+ if (g?.region)
159
+ steps.push({ tool: "gcloud", argv: ["config", "set", "run/region", g.region], describe: `run/region=${g.region}` });
160
+ if (ctx.git?.email)
161
+ steps.push({ tool: "git", argv: ["config", "user.email", ctx.git.email], local: true, describe: `git user.email=${ctx.git.email}` });
162
+ return steps;
163
+ }
164
+ /** Execute the activation plan. Each step runs via execFile (no shell). */
165
+ export async function applyContext(ctx, cwd = process.cwd()) {
166
+ const results = [];
167
+ for (const step of planContext(ctx)) {
168
+ let ok = false;
169
+ try {
170
+ await exec(step.tool, step.argv, { timeout: 8_000, cwd: step.local ? cwd : undefined });
171
+ ok = true;
172
+ }
173
+ catch {
174
+ ok = false;
175
+ }
176
+ results.push({ step, ok });
177
+ }
178
+ return results;
179
+ }
180
+ // ── kit context --prompt — a fast, read-only PS1 indicator ───────────────────
181
+ /** Extract `project = <value>` from a gcloud configuration INI. PURE. */
182
+ export function parseGcloudProject(ini) {
183
+ const m = ini.match(/^\s*project\s*=\s*(.+?)\s*$/m);
184
+ return m ? m[1].trim() : null;
185
+ }
186
+ /**
187
+ * A compact indicator of the ACTIVE gcloud context for a shell prompt, read from
188
+ * gcloud's config files (no subprocess, so it is cheap to call per prompt).
189
+ * Returns "" if gcloud config cannot be read. Example: "[gcp:cbd-platform]".
190
+ */
191
+ export function contextPrompt() {
192
+ try {
193
+ const dir = process.env.CLOUDSDK_CONFIG || join(homedir(), ".config", "gcloud");
194
+ const active = readFileSync(join(dir, "active_config"), "utf8").trim();
195
+ const ini = readFileSync(join(dir, "configurations", `config_${active}`), "utf8");
196
+ const project = parseGcloudProject(ini);
197
+ return project ? `[gcp:${project}]` : active ? `[gcp:${active}]` : "";
198
+ }
199
+ catch {
200
+ return "";
201
+ }
202
+ }
203
+ //# sourceMappingURL=context-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-lock.js","sourceRoot":"","sources":["../src/context-lock.ts"],"names":[],"mappings":"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"}
package/dist/hooks.d.ts CHANGED
@@ -1,4 +1,16 @@
1
1
  import type { HooksConfig } from "./config.js";
2
+ /**
3
+ * The directory git ACTUALLY runs hooks from. When `core.hooksPath` is set
4
+ * (husky, lefthook, a committed `.githooks/`), git ignores `.git/hooks`
5
+ * entirely — installing there is a silent no-op, so a security gate like
6
+ * `context-check` would report installed but never run. Honor hooksPath so an
7
+ * installed hook actually fires.
8
+ *
9
+ * Detection is scoped to the target repo (the parent of `gitDir`), not the
10
+ * process cwd, so temp-dir tests that pass an absolute throwaway gitDir fall
11
+ * back to `<gitDir>/hooks` even when the kit repo itself sets hooksPath.
12
+ */
13
+ export declare function resolveHooksDir(gitDir?: string): string;
2
14
  /**
3
15
  * Path (relative to .git) of the sentinel file written by the kit
4
16
  * pre-commit hook. The post-commit detector reads it back; if it's missing
package/dist/hooks.js CHANGED
@@ -1,6 +1,33 @@
1
1
  import { writeFile, chmod, mkdir } from "node:fs/promises";
2
- import { resolve } from "node:path";
2
+ import { resolve, isAbsolute, dirname } from "node:path";
3
3
  import { existsSync } from "node:fs";
4
+ import { execFileSync } from "node:child_process";
5
+ /**
6
+ * The directory git ACTUALLY runs hooks from. When `core.hooksPath` is set
7
+ * (husky, lefthook, a committed `.githooks/`), git ignores `.git/hooks`
8
+ * entirely — installing there is a silent no-op, so a security gate like
9
+ * `context-check` would report installed but never run. Honor hooksPath so an
10
+ * installed hook actually fires.
11
+ *
12
+ * Detection is scoped to the target repo (the parent of `gitDir`), not the
13
+ * process cwd, so temp-dir tests that pass an absolute throwaway gitDir fall
14
+ * back to `<gitDir>/hooks` even when the kit repo itself sets hooksPath.
15
+ */
16
+ export function resolveHooksDir(gitDir = ".git") {
17
+ const repoRoot = isAbsolute(gitDir) ? dirname(gitDir) : process.cwd();
18
+ try {
19
+ const hp = execFileSync("git", ["-C", repoRoot, "config", "--get", "core.hooksPath"], {
20
+ encoding: "utf-8",
21
+ stdio: ["ignore", "pipe", "ignore"],
22
+ }).trim();
23
+ if (hp)
24
+ return isAbsolute(hp) ? hp : resolve(repoRoot, hp);
25
+ }
26
+ catch {
27
+ /* not a git repo, hooksPath unset, or git absent — fall back below */
28
+ }
29
+ return resolve(process.cwd(), gitDir, "hooks");
30
+ }
4
31
  /**
5
32
  * Path (relative to .git) of the sentinel file written by the kit
6
33
  * pre-commit hook. The post-commit detector reads it back; if it's missing
@@ -25,7 +52,7 @@ export async function installHooks(config, gitDir = ".git") {
25
52
  return [{ hookName: "read-only-refusal", action: "failed", detail: refusal.reason }];
26
53
  }
27
54
  const results = [];
28
- const hooksDir = resolve(process.cwd(), gitDir, "hooks");
55
+ const hooksDir = resolveHooksDir(gitDir);
29
56
  // Ensure hooks directory exists
30
57
  try {
31
58
  await mkdir(hooksDir, { recursive: true });
@@ -185,6 +212,20 @@ async function installHook(hooksDir, hookName, commands) {
185
212
  try {
186
213
  // Check if hook already exists
187
214
  const exists = existsSync(hookPath);
215
+ // Never overwrite a hook kit did not generate (e.g. a committed
216
+ // .githooks/pre-push). Clobbering the operator's own gate would silently
217
+ // drop whatever it enforced. Skip and tell them to merge or remove it.
218
+ if (exists) {
219
+ const { readFile } = await import("node:fs/promises");
220
+ const current = await readFile(hookPath, "utf-8").catch(() => "");
221
+ if (current && !current.includes("Generated by kit")) {
222
+ return {
223
+ hookName,
224
+ action: "skipped",
225
+ detail: `existing non-kit ${hookName} at ${hookPath} — left untouched; add \`${commands.join(" && ")}\` to it manually or remove it, then re-run`,
226
+ };
227
+ }
228
+ }
188
229
  const action = exists ? "updated" : "installed";
189
230
  // Write hook file
190
231
  await writeFile(hookPath, hookContent, "utf-8");
@@ -247,7 +288,7 @@ exit 0
247
288
  */
248
289
  export async function uninstallHooks(hookNames, gitDir = ".git") {
249
290
  const results = [];
250
- const hooksDir = resolve(process.cwd(), gitDir, "hooks");
291
+ const hooksDir = resolveHooksDir(gitDir);
251
292
  for (const hookName of hookNames) {
252
293
  const hookPath = resolve(hooksDir, hookName);
253
294
  try {
package/dist/hooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
package/dist/install.d.ts CHANGED
@@ -5,6 +5,16 @@ export interface InstallResult {
5
5
  action: "installed" | "already_ok" | "failed";
6
6
  detail: string;
7
7
  }
8
+ /**
9
+ * Turn a mise exec failure into an actionable message. PURE so it can be
10
+ * unit-tested. `message` is the error's `.message` (often just the generic
11
+ * "Command failed: mise install node@24"); `stderr` is mise's real output,
12
+ * which carries the actionable cause. Common cases:
13
+ * - mise not installed at all (`spawn mise ENOENT`)
14
+ * - the repo's .mise.toml is untrusted (mise refuses to run until `mise trust`)
15
+ * Otherwise prefer the real `mise ERROR` line from stderr over "Command failed".
16
+ */
17
+ export declare function miseErrorDetail(message: string, stderr?: string): string;
8
18
  export interface InstallDeps {
9
19
  checkTools: (tools: ToolConfig) => Promise<ToolStatus[]>;
10
20
  miseInstall: (tool: string, version: string) => Promise<{
package/dist/install.js CHANGED
@@ -1,5 +1,35 @@
1
1
  import { checkTools } from "./check-tools.js";
2
2
  import { exec } from "./utils/exec.js";
3
+ /**
4
+ * Turn a mise exec failure into an actionable message. PURE so it can be
5
+ * unit-tested. `message` is the error's `.message` (often just the generic
6
+ * "Command failed: mise install node@24"); `stderr` is mise's real output,
7
+ * which carries the actionable cause. Common cases:
8
+ * - mise not installed at all (`spawn mise ENOENT`)
9
+ * - the repo's .mise.toml is untrusted (mise refuses to run until `mise trust`)
10
+ * Otherwise prefer the real `mise ERROR` line from stderr over "Command failed".
11
+ */
12
+ export function miseErrorDetail(message, stderr = "") {
13
+ const firstMsg = message.split("\n")[0];
14
+ if (/ENOENT/.test(firstMsg)) {
15
+ return "mise is not installed — kit installs and pins tool versions with it. Install mise (brew install mise, or: curl https://mise.run | sh) and re-run, or install the tool yourself.";
16
+ }
17
+ const combined = `${message}\n${stderr}`;
18
+ if (/not trusted|mise trust/i.test(combined)) {
19
+ return "mise refused this repo's .mise.toml because it is not trusted. Review the file, then run `mise trust` here and re-run kit setup.";
20
+ }
21
+ // Prefer a concrete `mise ERROR ...` line over the generic "Command failed".
22
+ const miseErr = stderr
23
+ .split("\n")
24
+ .map((l) => l.trim())
25
+ .find((l) => /^mise ERROR/.test(l));
26
+ if (miseErr)
27
+ return miseErr.replace(/^mise ERROR\s*/, "");
28
+ const firstStderr = stderr.trim().split("\n")[0];
29
+ if (firstStderr)
30
+ return firstStderr;
31
+ return firstMsg;
32
+ }
3
33
  async function miseInstall(tool, version) {
4
34
  const versionArg = version === "latest" ? "latest" : version;
5
35
  try {
@@ -16,7 +46,10 @@ async function miseInstall(tool, version) {
16
46
  }
17
47
  catch (err) {
18
48
  const message = err instanceof Error ? err.message : String(err);
19
- return { ok: false, detail: message.split("\n")[0] };
49
+ const stderr = typeof err?.stderr === "string"
50
+ ? err.stderr
51
+ : "";
52
+ return { ok: false, detail: miseErrorDetail(message, stderr) };
20
53
  }
21
54
  }
22
55
  const defaultDeps = { checkTools, miseInstall };
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
package/dist/login.d.ts CHANGED
@@ -2,7 +2,7 @@ import type { ServiceConfig } from "./config.js";
2
2
  import { type ServiceStatus } from "./check-services.js";
3
3
  export interface LoginResult {
4
4
  name: string;
5
- action: "already_authenticated" | "logged_in" | "login_unverified" | "failed";
5
+ action: "already_authenticated" | "logged_in" | "login_unverified" | "manual" | "failed";
6
6
  detail: string;
7
7
  }
8
8
  export interface LoginDeps {
package/dist/login.js CHANGED
@@ -3,6 +3,7 @@ import { promisify } from "node:util";
3
3
  import { checkServices } from "./check-services.js";
4
4
  import { isNonInteractive } from "./environment.js";
5
5
  import { parseCommand } from "./utils/parseCommand.js";
6
+ import { safeStatusLine } from "./utils/redactSecrets.js";
6
7
  const exec = promisify(execFile);
7
8
  function runInteractive(command) {
8
9
  const parsed = parseCommand(command);
@@ -69,7 +70,7 @@ export async function loginServices(services, deps = defaultDeps) {
69
70
  results.push({
70
71
  name: status.name,
71
72
  action: "already_authenticated",
72
- detail: status.output,
73
+ detail: safeStatusLine(status.output),
73
74
  });
74
75
  continue;
75
76
  }
@@ -82,6 +83,18 @@ export async function loginServices(services, deps = defaultDeps) {
82
83
  });
83
84
  continue;
84
85
  }
86
+ // A service whose "login" is informational (no CLI login — set an env var,
87
+ // paste a DSN) is expected manual setup, not a failure. Surface it as
88
+ // "manual" so it doesn't fail the step or get pointlessly retried.
89
+ const parsedLogin = parseCommand(config.login);
90
+ if (parsedLogin.kind === "informational") {
91
+ results.push({
92
+ name: status.name,
93
+ action: "manual",
94
+ detail: parsedLogin.message,
95
+ });
96
+ continue;
97
+ }
85
98
  console.log(`\n\x1b[1mLogging in to ${status.name}...\x1b[0m`);
86
99
  const login = await deps.runLogin(config.login);
87
100
  if (!login.ok) {
@@ -108,7 +121,7 @@ export async function loginServices(services, deps = defaultDeps) {
108
121
  results.push({
109
122
  name: status.name,
110
123
  action: "logged_in",
111
- detail: verify.output,
124
+ detail: safeStatusLine(verify.output),
112
125
  });
113
126
  }
114
127
  else {
package/dist/login.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"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"}
package/dist/memory/db.js CHANGED
@@ -82,6 +82,7 @@ CREATE TABLE IF NOT EXISTS pending_actions (
82
82
  scope TEXT,
83
83
  kind TEXT NOT NULL DEFAULT 'manual',
84
84
  verify_cmd TEXT,
85
+ verify_check TEXT,
85
86
  created_at TEXT DEFAULT CURRENT_TIMESTAMP,
86
87
  next_check TEXT,
87
88
  snooze_until TEXT,
@@ -131,6 +132,10 @@ function migrate(db) {
131
132
  // v2: pending_actions.verify_passes (N=2 auto-verify confirmation). Add to
132
133
  // tables created before this column existed.
133
134
  ensureColumn(db, "pending_actions", "verify_passes", "INTEGER NOT NULL DEFAULT 0");
135
+ // v3: pending_actions.verify_check (declarative typed verify replacing raw
136
+ // shell verify_cmd). Legacy verify_cmd rows have a NULL verify_check and are
137
+ // never auto-executed.
138
+ ensureColumn(db, "pending_actions", "verify_check", "TEXT");
134
139
  const row = db.prepare("SELECT version FROM schema_meta LIMIT 1").get();
135
140
  if (!row) {
136
141
  db.prepare("INSERT INTO schema_meta(version) VALUES (?)").run(SCHEMA_VERSION);
@@ -263,6 +268,9 @@ export function getStats(db) {
263
268
  // best-effort: size is informational only
264
269
  }
265
270
  }
271
+ const byHarness = db
272
+ .prepare("SELECT harness, COUNT(*) AS n FROM sessions GROUP BY harness ORDER BY n DESC, harness ASC")
273
+ .all().map((r) => ({ harness: r.harness, sessions: Number(r.n) }));
266
274
  return {
267
275
  sessions: count("SELECT COUNT(*) AS n FROM sessions"),
268
276
  messages: count("SELECT COUNT(*) AS n FROM messages"),
@@ -270,6 +278,7 @@ export function getStats(db) {
270
278
  pendingOpen: count("SELECT COUNT(*) AS n FROM pending_actions WHERE status = 'open'"),
271
279
  dbPath,
272
280
  sizeBytes,
281
+ byHarness,
273
282
  };
274
283
  }
275
284
  //# sourceMappingURL=db.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/memory/db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/memory/db.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,17 @@
1
1
  import type { DatabaseSync } from "node:sqlite";
2
+ /**
3
+ * A declarative verify check. Fixed shapes only, executed natively by kit (no
4
+ * shell, no arbitrary binary). Add a new shape here only if it can be run as a
5
+ * pure data operation that cannot be coerced into command execution.
6
+ */
7
+ export type VerifyCheck = {
8
+ type: "http-status";
9
+ url: string;
10
+ expect: number;
11
+ } | {
12
+ type: "file-exists";
13
+ path: string;
14
+ };
2
15
  export interface PendingAction {
3
16
  id: string;
4
17
  status: string;
@@ -6,7 +19,11 @@ export interface PendingAction {
6
19
  detail: string | null;
7
20
  scope: string | null;
8
21
  kind: string;
22
+ /** Legacy raw shell command from pre-1.4 stores. NEVER executed; kept only so
23
+ * `kit memory scan` can still find secrets leaked into old rows. */
9
24
  verify_cmd: string | null;
25
+ /** JSON-encoded VerifyCheck. The only field auto-verify ever executes. */
26
+ verify_check: string | null;
10
27
  created_at: string | null;
11
28
  next_check: string | null;
12
29
  snooze_until: string | null;
@@ -18,7 +35,7 @@ export interface PalAddInput {
18
35
  detail?: string;
19
36
  scope?: string;
20
37
  kind?: "manual" | "auto";
21
- verifyCmd?: string;
38
+ check?: VerifyCheck;
22
39
  }
23
40
  export declare function palAdd(db: DatabaseSync, input: PalAddInput): string;
24
41
  export interface PalListOptions {
@@ -39,7 +56,7 @@ export interface AutoVerifyResult {
39
56
  * times is closed (a pass increments the streak, a fail resets it). A CLOSED item
40
57
  * whose verify now FAILS is reopened (reopen-on-regress). No-info leaves it alone.
41
58
  */
42
- export declare function palAutoVerify(db: DatabaseSync, confirmPasses?: number): AutoVerifyResult;
59
+ export declare function palAutoVerify(db: DatabaseSync, confirmPasses?: number): Promise<AutoVerifyResult>;
43
60
  export declare function getLegacyLedgerPath(): string;
44
61
  /** Import the old `~/.claude/pal/ledger.jsonl` into pending_actions. Idempotent (by id). */
45
62
  export declare function importLegacyLedger(db: DatabaseSync, path?: string): {