@mnemonik/cli 7.131.1 → 7.132.0

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 (49) hide show
  1. package/dist/auth/claudeCodeSignIn.d.ts +16 -25
  2. package/dist/auth/claudeCodeSignIn.d.ts.map +1 -1
  3. package/dist/auth/claudeCodeSignIn.js +31 -29
  4. package/dist/auth/claudeCodeSignIn.js.map +1 -1
  5. package/dist/auth/codexAuthorization.d.ts +47 -0
  6. package/dist/auth/codexAuthorization.d.ts.map +1 -0
  7. package/dist/auth/codexAuthorization.js +882 -0
  8. package/dist/auth/codexAuthorization.js.map +1 -0
  9. package/dist/auth/cursorAuthorization.d.ts +47 -0
  10. package/dist/auth/cursorAuthorization.d.ts.map +1 -0
  11. package/dist/auth/cursorAuthorization.js +116 -0
  12. package/dist/auth/cursorAuthorization.js.map +1 -0
  13. package/dist/auth/status.d.ts +62 -26
  14. package/dist/auth/status.d.ts.map +1 -1
  15. package/dist/auth/status.js +37 -23
  16. package/dist/auth/status.js.map +1 -1
  17. package/dist/auth/storedAuthorization.d.ts +50 -0
  18. package/dist/auth/storedAuthorization.d.ts.map +1 -0
  19. package/dist/auth/storedAuthorization.js +24 -0
  20. package/dist/auth/storedAuthorization.js.map +1 -0
  21. package/dist/authorizationWords.d.ts +69 -0
  22. package/dist/authorizationWords.d.ts.map +1 -0
  23. package/dist/authorizationWords.js +5275 -0
  24. package/dist/authorizationWords.js.map +1 -0
  25. package/dist/digests.json +47 -31
  26. package/dist/humanReason.js +6 -6
  27. package/dist/humanReason.js.map +1 -1
  28. package/dist/install/hosts.d.ts.map +1 -1
  29. package/dist/install/hosts.js +2 -1
  30. package/dist/install/hosts.js.map +1 -1
  31. package/dist/installation.d.ts +2 -0
  32. package/dist/installation.d.ts.map +1 -1
  33. package/dist/installation.js +12 -0
  34. package/dist/installation.js.map +1 -1
  35. package/dist/output.d.ts +5 -2
  36. package/dist/output.d.ts.map +1 -1
  37. package/dist/output.js +7 -3
  38. package/dist/output.js.map +1 -1
  39. package/dist/router.d.ts +10 -10
  40. package/dist/router.d.ts.map +1 -1
  41. package/dist/router.js +137 -109
  42. package/dist/router.js.map +1 -1
  43. package/dist/sbom.json +21 -21
  44. package/dist/scanner-release.json +18 -18
  45. package/dist/status.d.ts +67 -35
  46. package/dist/status.d.ts.map +1 -1
  47. package/dist/status.js +140 -39
  48. package/dist/status.js.map +1 -1
  49. package/package.json +31 -31
@@ -1,15 +1,15 @@
1
1
  {
2
- "version": "7.131.1",
3
- "digestsSha256": "fddaf939143a69caeb71d682739c9bd1036cc1149fda878c9358ff3bae996770",
2
+ "version": "7.132.0",
3
+ "digestsSha256": "843daf7483f1c9697b3bb176f25bd5c7eb86c16f9cd408eee3414addbc426eb7",
4
4
  "platforms": {
5
5
  "darwin-arm64": {
6
6
  "schemaVersion": 1,
7
7
  "artifact": "scanner",
8
- "version": "7.131.1",
8
+ "version": "7.132.0",
9
9
  "entry": "scanner-darwin-arm64",
10
10
  "files": {
11
11
  "scanner-darwin-arm64": {
12
- "sha256": "16c5ccfc823be45fa11bce9860915cfeb7bd11fd1d360bd4d4ac1e390a3b3252",
12
+ "sha256": "cb5afa5922c38a27f75e48972a854b9493a7db55ae064771aad4d332df323ba5",
13
13
  "size": 154586464,
14
14
  "executable": true
15
15
  }
@@ -17,7 +17,7 @@
17
17
  "totalSize": 154586464,
18
18
  "source": {
19
19
  "kind": "release",
20
- "url": "https://github.com/JayDeeCo-Limited/mnemonik-cli/releases/download/scanner-v7.131.1/"
20
+ "url": "https://github.com/JayDeeCo-Limited/mnemonik-cli/releases/download/scanner-v7.132.0/"
21
21
  },
22
22
  "signer": {
23
23
  "platform": "darwin",
@@ -29,16 +29,16 @@
29
29
  "linux-arm64": {
30
30
  "schemaVersion": 1,
31
31
  "artifact": "scanner",
32
- "version": "7.131.1",
32
+ "version": "7.132.0",
33
33
  "entry": "scanner-linux-arm64",
34
34
  "files": {
35
35
  "scanner-linux-arm64": {
36
- "sha256": "af5fdd9a6b330ad77e6ad0f1fc15afcdecd5d045c4cdea604300bd3e55c8d25b",
36
+ "sha256": "d58df75fb113b8073de04447701e43d875b6d637f5fde12fa8696d8f4e5d31c3",
37
37
  "size": 156961920,
38
38
  "executable": true
39
39
  },
40
40
  "scanner-linux-arm64.minisig": {
41
- "sha256": "acf46407e6e724247d4938b47fe535705b451af5048460abe8df1578fdfd5747",
41
+ "sha256": "365c96b9bca1136e03c052e679401ad55ad8908d715e0cf6ab474f12eb12c9df",
42
42
  "size": 314,
43
43
  "executable": false
44
44
  }
@@ -46,7 +46,7 @@
46
46
  "totalSize": 156962234,
47
47
  "source": {
48
48
  "kind": "release",
49
- "url": "https://github.com/JayDeeCo-Limited/mnemonik-cli/releases/download/scanner-v7.131.1/"
49
+ "url": "https://github.com/JayDeeCo-Limited/mnemonik-cli/releases/download/scanner-v7.132.0/"
50
50
  },
51
51
  "signer": {
52
52
  "platform": "linux",
@@ -59,16 +59,16 @@
59
59
  "linux-x64": {
60
60
  "schemaVersion": 1,
61
61
  "artifact": "scanner",
62
- "version": "7.131.1",
62
+ "version": "7.132.0",
63
63
  "entry": "scanner-linux-x64",
64
64
  "files": {
65
65
  "scanner-linux-x64": {
66
- "sha256": "b9072be9d861a5483a8b52b802ce9444d15d446cffe3dfdcfc3add7b7930a6b7",
66
+ "sha256": "da4b839814ab7bb5fdc3a01d19233552b13e78ec35c7a4c28a05c92eaa70967a",
67
67
  "size": 155192512,
68
68
  "executable": true
69
69
  },
70
70
  "scanner-linux-x64.minisig": {
71
- "sha256": "acf74fda903cab6659a9de60629f3a6e80f07c603ec0ea641f273fc51f9c7d93",
71
+ "sha256": "b7edc0866d2567ed9a470bb493ebfaa5a46b07c9cb44ea24c7e7e6c029e86969",
72
72
  "size": 312,
73
73
  "executable": false
74
74
  }
@@ -76,7 +76,7 @@
76
76
  "totalSize": 155192824,
77
77
  "source": {
78
78
  "kind": "release",
79
- "url": "https://github.com/JayDeeCo-Limited/mnemonik-cli/releases/download/scanner-v7.131.1/"
79
+ "url": "https://github.com/JayDeeCo-Limited/mnemonik-cli/releases/download/scanner-v7.132.0/"
80
80
  },
81
81
  "signer": {
82
82
  "platform": "linux",
@@ -89,19 +89,19 @@
89
89
  "win-x64": {
90
90
  "schemaVersion": 1,
91
91
  "artifact": "scanner",
92
- "version": "7.131.1",
92
+ "version": "7.132.0",
93
93
  "entry": "scanner-win-x64.exe",
94
94
  "files": {
95
95
  "scanner-win-x64.exe": {
96
- "sha256": "961338b19f6db635a4d96d236f46005b5cf4538006e4950fcfd680e0931c8d42",
97
- "size": 127677952,
96
+ "sha256": "090592373a694c44e24cfaafb1ee592b684ca0638055c504f52174024cf1dd7d",
97
+ "size": 127678464,
98
98
  "executable": true
99
99
  }
100
100
  },
101
- "totalSize": 127677952,
101
+ "totalSize": 127678464,
102
102
  "source": {
103
103
  "kind": "release",
104
- "url": "https://github.com/JayDeeCo-Limited/mnemonik-cli/releases/download/scanner-v7.131.1/"
104
+ "url": "https://github.com/JayDeeCo-Limited/mnemonik-cli/releases/download/scanner-v7.132.0/"
105
105
  },
106
106
  "signingStatus": "unsigned",
107
107
  "disclosureVersion": "2026.09.1"
package/dist/status.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { CODEX_TRUST_MESSAGE } from './humanReason.js';
2
2
  import { cliCredentialStatus } from './auth/credentials.js';
3
- import type { CodingToolSignInResult, CodingToolSignInState } from './auth/status.js';
4
- import type { StoredSignIn } from './auth/claudeCodeSignIn.js';
3
+ import { type McpAuthorization, type McpState } from './auth/status.js';
4
+ import { type CliSignIn, type HooksState, type ScannerAuthorizationState } from './authorizationWords.js';
5
5
  import { type ScannerReceipt } from './scanner/control.js';
6
6
  import { type ScannerServiceOptions } from './scanner/service.js';
7
7
  import type { Readable } from 'node:stream';
@@ -17,6 +17,7 @@ export declare function localEditorStatus(home: string): Promise<{
17
17
  name: "Claude Code" | "Codex" | "Cursor";
18
18
  marked: boolean;
19
19
  hooks: boolean;
20
+ credentialFamily?: string | undefined;
20
21
  mcp: string;
21
22
  }[]>;
22
23
  /** What a person can really do to switch a declared connection back on. */
@@ -78,13 +79,12 @@ export declare function buildStatusDocument(input: StatusDocumentInput): Readine
78
79
  conditions: ReadinessCondition[];
79
80
  };
80
81
  /**
81
- * `status` could not tell the console about this machine because this
82
- * computer's sign-in is unusable (L-166). Wording decided 2026-09-25; the fix
83
- * is the approved renew step.
82
+ * `status` could not tell the console about this machine because the CLI's own
83
+ * sign-in could not be used (L-166): expired, revoked, or locked in the macOS
84
+ * Keychain over SSH. The CLI line of the authorization block gives the step.
84
85
  */
85
86
  export declare const REPORT_NOT_SENT: {
86
87
  sentence: string;
87
- nextStep: string;
88
88
  };
89
89
  export declare function renderStatusSummaries(document: ReadinessDocument & {
90
90
  cliCredential?: Awaited<ReturnType<typeof cliCredentialStatus>>;
@@ -125,60 +125,92 @@ export declare function collectStatusDocument(input: CollectStatusInput): Promis
125
125
  export interface CodingToolStatus {
126
126
  host: string;
127
127
  name: string;
128
- /** From this machine's own files and the tool's own trust records. */
129
- hooks: 'installed' | 'missing' | 'approval_pending';
130
- /**
131
- * From the server, by the console's rule. `unknown` when it could not be
132
- * read (Mnemonik unreachable, or this computer's own sign-in unusable).
133
- */
134
- signIn: CodingToolSignInState | 'unknown';
135
- /** When the tool last renewed its sign-in; dates use, never decides it. */
136
- lastUsedAt: string | null;
137
- /**
138
- * What the coding tool itself stores for Mnemonik on this machine, when it
139
- * was read (Claude Code only). Token values are never read out.
140
- */
141
- stored?: StoredSignIn;
128
+ /** Its MCP connection's authorization; the evidence is in `authorizations`. */
129
+ mcp: McpState;
130
+ /** Its hooks' own authorization, from this machine's files and the tool's own trust records. */
131
+ hooks: HooksState;
142
132
  /** Commands the agent runs to fix what is wrong with this tool, in order; empty when none. */
143
133
  actions: string[];
144
134
  /**
145
135
  * Steps only the person can take, inside the coding tool, in plain words
146
- * (Claude Code and Cursor sign in only there); empty when none.
136
+ * (Claude Code and Cursor authorize MCP only there); empty when none.
147
137
  */
148
138
  personSteps: string[];
149
139
  }
140
+ /** One line of the authorization block, with the evidence behind it. */
141
+ export type AuthorizationEntry = ({
142
+ component: 'mcp';
143
+ host: string;
144
+ line: string;
145
+ } & McpAuthorization) | {
146
+ component: 'hooks';
147
+ host: string;
148
+ state: HooksState;
149
+ line: string;
150
+ } | {
151
+ component: 'scanner';
152
+ state: ScannerAuthorizationState;
153
+ line: string;
154
+ } | ({
155
+ component: 'cli';
156
+ line: string;
157
+ } & CliSignIn);
150
158
  /** The coding tools installed on this machine: chosen at install or marked in their own settings. */
151
159
  export declare function installedCodingTools(home: string, stateDir: string): Promise<{
152
160
  host: "claude-code" | "codex" | "cursor";
153
161
  name: "Claude Code" | "Codex" | "Cursor";
154
162
  marked: boolean;
155
163
  hooks: boolean;
164
+ credentialFamily?: string | undefined;
156
165
  mcp: string;
157
166
  }[]>;
167
+ /** The hooks' own authorization, as hookAuthorizations reads it. */
168
+ export type HookCredentialState = 'authorized' | 'not_authorized' | 'unchecked';
169
+ /**
170
+ * Each tool's hooks' own authorization: the credential the installer recorded
171
+ * for them (or their command names), stored here and inside its refresh
172
+ * window. Hooks that name none sign in some other way, which is not read here.
173
+ */
174
+ export declare function hookAuthorizations(stateDir: string, editors: ReadonlyArray<{
175
+ host: string;
176
+ credentialFamily?: string;
177
+ }>, now?: number): Promise<Map<string, HookCredentialState>>;
158
178
  export declare function codingToolStatuses(editors: ReadonlyArray<{
159
179
  host: string;
160
180
  name: string;
161
181
  hooks: boolean;
162
- }>, conditions: readonly ReadinessCondition[], signIns: ReadonlyMap<string, CodingToolSignInResult> | undefined): CodingToolStatus[];
182
+ }>, conditions: readonly ReadinessCondition[], mcp: ReadonlyMap<string, McpAuthorization>, hookCredentials?: ReadonlyMap<string, HookCredentialState>): CodingToolStatus[];
163
183
  /**
164
- * The status document with each tool's sign-in added. A tool signed out on
165
- * this machine is a condition of the installation: status never says the
166
- * machine is working while one is. A tool never signed in here is not (it may
167
- * simply be unused); its line says how to sign in.
184
+ * The status document with each tool's state added. A tool whose MCP
185
+ * authorization here was revoked, expired, or is no longer held by the tool,
186
+ * hooks or a scanner whose own authorization is missing, expired or refused,
187
+ * is a condition of the installation: status never says the machine is
188
+ * working while one is. A tool never authorized here is not (it may simply be
189
+ * unused); its line says how to authorize it.
168
190
  */
169
191
  export declare function withCodingTools<T extends ReadinessDocument & {
170
192
  conditions?: readonly ReadinessCondition[];
171
- }>(document: T, tools: readonly CodingToolStatus[]): T & {
193
+ }>(document: T, tools: readonly CodingToolStatus[], mcp: ReadonlyMap<string, McpAuthorization>,
194
+ /** The scanner's own authorization; one that is gone is a condition too, said once. */
195
+ scanner?: ScannerAuthorizationState): T & {
172
196
  codingTools: CodingToolStatus[];
173
197
  };
174
- /** A stored sign-in whose access has expired and that the tool renews by itself. */
175
- export declare const renewsMessage: (tool: string) => string;
176
198
  /**
177
- * One line per tool, for a person, at a glance: signed in or not, and the one
178
- * short command when there is something to do. Hooks, last use and the rest
179
- * are in `--json`. A signed-out tool is already the installation's attention
180
- * line, with its command, so it is not said twice; a tool whose sign-in could
181
- * not be read gets no line.
199
+ * Background indexing's own authorization on this computer: set up, its
200
+ * credential stored here and inside its refresh window, and no refusal
201
+ * reported by the running scanner. The server's record of it is not asked.
202
+ */
203
+ export declare function scannerAuthorization(stateDir: string, now?: number): Promise<ScannerAuthorizationState>;
204
+ /**
205
+ * The authorization block of `status`: each tool's MCP connection and hooks,
206
+ * then the scanner and the CLI, one line each, never dropped. A state the
207
+ * installation's attention lines already give a step for says only what is wrong.
182
208
  */
183
- export declare function codingToolLines(tools: readonly CodingToolStatus[]): string[];
209
+ export declare function authorizationEntries(input: {
210
+ tools: readonly CodingToolStatus[];
211
+ mcp: ReadonlyMap<string, McpAuthorization>;
212
+ conditions: readonly ReadinessCondition[];
213
+ scanner: ScannerAuthorizationState;
214
+ cli: CliSignIn;
215
+ }): AuthorizationEntry[];
184
216
  //# sourceMappingURL=status.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"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"}
package/dist/status.js CHANGED
@@ -2707,6 +2707,16 @@ import {
2707
2707
  } from "./humanReason.js";
2708
2708
  import { CODEX_TRUST_MESSAGE } from "./humanReason.js";
2709
2709
  import { cliCredentialStatus } from "./auth/credentials.js";
2710
+ import { createCliCredentials } from "./auth/credentials.js";
2711
+ import { mcpAuthorization } from "./auth/status.js";
2712
+ import {
2713
+ cliLine,
2714
+ hooksLine,
2715
+ mcpLine,
2716
+ hooksNotAuthorizedReason,
2717
+ mcpNotAuthorizedReason,
2718
+ scannerLine
2719
+ } from "./authorizationWords.js";
2710
2720
  import { readOwnership } from "./install/ownership.js";
2711
2721
  import {
2712
2722
  pausedForConsent,
@@ -8196,6 +8206,7 @@ async function localEditorStatus(home) {
8196
8206
  declaration = object(config.mcp_servers) ? config.mcp_servers.mnemonik : object(config.mcpServers) ? config.mcpServers.mnemonik : void 0;
8197
8207
  } catch {
8198
8208
  }
8209
+ const credentialFamily = commands.map((command) => /--credential-family (\S+)/u.exec(command)?.[1]).find((id) => !!id);
8199
8210
  return {
8200
8211
  host,
8201
8212
  name: name2,
@@ -8203,6 +8214,7 @@ async function localEditorStatus(home) {
8203
8214
  // presence of ~/.codex or a project-local .cursor is not a choice.
8204
8215
  marked: commands.length > 0 || object(declaration),
8205
8216
  hooks,
8217
+ ...credentialFamily ? { credentialFamily } : {},
8206
8218
  mcp: !object(declaration) ? "missing" : declaration.enabled === false || declaration.disabled === true ? "disabled" : "ready"
8207
8219
  };
8208
8220
  })
@@ -8407,8 +8419,7 @@ ${message.nextStep}`;
8407
8419
  return lines;
8408
8420
  }
8409
8421
  var REPORT_NOT_SENT = {
8410
- sentence: "The console has not heard from this machine because its sign-in no longer works.",
8411
- nextStep: humanMessageFor("renew").nextStep
8422
+ sentence: "The console has not heard from this computer because the CLI sign-in could not be used."
8412
8423
  };
8413
8424
  function renderStatusSummaries(document, output, options = {}) {
8414
8425
  if (options.diagnostics && document.cliCredential)
@@ -8477,7 +8488,7 @@ function refusalLines(batches, withPaths = false) {
8477
8488
  function scannerFailureCause(failure) {
8478
8489
  switch (failure.kind) {
8479
8490
  case "credential_refused":
8480
- return "The server refused this computer's indexing sign-in. Run mnemonik repair.";
8491
+ return "Mnemonik no longer accepts the scanner authorization on this computer. Run mnemonik repair.";
8481
8492
  case "push_rejected":
8482
8493
  return `The server rejected an upload from this computer.${failure.reason ? ` The server said: ${failure.reason}.` : ""}`;
8483
8494
  case "watcher_error":
@@ -8722,30 +8733,70 @@ async function installedCodingTools(home, stateDir) {
8722
8733
  (editor) => editor.marked || owned.includes(editor.host)
8723
8734
  );
8724
8735
  }
8725
- function codingToolStatuses(editors, conditions, signIns) {
8736
+ var hookConditionKinds = /* @__PURE__ */ new Set([
8737
+ "hooks_missing",
8738
+ "hook_not_verified",
8739
+ "host_trust_pending",
8740
+ "selected_component_failed"
8741
+ ]);
8742
+ async function hookAuthorizations(stateDir, editors, now = Date.now()) {
8743
+ const owned = (await readOwnership(stateDir)).targets;
8744
+ const credentials = createCliCredentials({ stateDir });
8745
+ return new Map(
8746
+ await Promise.all(
8747
+ editors.map(async (editor) => {
8748
+ const id = owned.find((target) => target.host === editor.host && target.component === "hooks")?.credentialFamily || editor.credentialFamily;
8749
+ if (!id) return [editor.host, "unchecked"];
8750
+ const family = await credentials.readFamily(id).catch(() => null);
8751
+ return [
8752
+ editor.host,
8753
+ family && Date.parse(family.refreshExpiresAt) > now ? "authorized" : "not_authorized"
8754
+ ];
8755
+ })
8756
+ )
8757
+ );
8758
+ }
8759
+ function hooksState(host, installed, credential, conditions) {
8760
+ const mine = conditions.filter(
8761
+ (condition) => condition.component === host && hookConditionKinds.has(condition.kind)
8762
+ );
8763
+ if (mine.some((condition) => condition.kind === "host_trust_pending")) return "trust_pending";
8764
+ const missing = mine.find(
8765
+ (condition) => condition.kind === "hooks_missing" || condition.kind === "selected_component_failed" && /hooks/u.test(condition.reason)
8766
+ );
8767
+ if (missing && !/sign-in/u.test(missing.reason)) return "not_installed";
8768
+ if (!installed) return "not_installed";
8769
+ if (missing || credential === "not_authorized") return "not_authorized";
8770
+ const unverified = mine.find((condition) => condition.kind === "hook_not_verified");
8771
+ if (unverified) return /not installed/u.test(unverified.reason) ? "not_installed" : "unchecked";
8772
+ return credential === "unchecked" ? "unchecked" : "authorized";
8773
+ }
8774
+ var ended = (mcp) => mcp?.state === "not_authorized" && (mcp.reason === "revoked_or_expired" || mcp.reason === "not_held");
8775
+ function codingToolStatuses(editors, conditions, mcp, hookCredentials = /* @__PURE__ */ new Map()) {
8726
8776
  return editors.map((editor) => {
8777
+ const hooks = hooksState(
8778
+ editor.host,
8779
+ editor.hooks,
8780
+ hookCredentials.get(editor.host),
8781
+ conditions
8782
+ );
8727
8783
  const trust = conditions.find(
8728
8784
  (condition) => condition.kind === "host_trust_pending" && condition.component === editor.host
8729
8785
  );
8730
- const hooks = trust ? "approval_pending" : editor.hooks && !conditions.some(
8731
- (condition) => condition.kind === "hooks_missing" && condition.component === editor.host
8732
- ) ? "installed" : "missing";
8733
- const signIn = signIns?.get(editor.host);
8734
- const signInNeeded = signIn?.state === "signed_out" || signIn?.state === "not_set_up";
8786
+ const authorization = mcp.get(editor.host);
8787
+ const authorizeNeeded = authorization?.state === "not_authorized";
8735
8788
  const fix = signInFix(editor.host);
8736
8789
  return {
8737
8790
  host: editor.host,
8738
8791
  name: editor.name,
8792
+ mcp: authorization?.state ?? "unchecked",
8739
8793
  hooks,
8740
- signIn: signIn?.state ?? "unknown",
8741
- lastUsedAt: signIn?.lastUsedAt ?? null,
8742
- ...signIn?.stored ? { stored: signIn.stored } : {},
8743
8794
  actions: [
8744
- ...hooks === "missing" ? ["mnemonik repair"] : [],
8745
- ...hooks === "approval_pending" && trust?.action ? [trust.action] : [],
8746
- ...signInNeeded && "command" in fix ? [fix.command] : []
8795
+ ...hooks === "not_installed" || hooks === "not_authorized" ? ["mnemonik repair"] : [],
8796
+ ...hooks === "trust_pending" && trust?.action ? [trust.action] : [],
8797
+ ...authorizeNeeded && "command" in fix ? [fix.command] : []
8747
8798
  ],
8748
- personSteps: signInNeeded && "step" in fix ? [fix.step] : []
8799
+ personSteps: authorizeNeeded && "step" in fix ? [fix.step] : []
8749
8800
  };
8750
8801
  });
8751
8802
  }
@@ -8755,16 +8806,39 @@ var stateRank = {
8755
8806
  ACTION_REQUIRED: 2,
8756
8807
  FAILED: 3
8757
8808
  };
8758
- function withCodingTools(document, tools) {
8759
- const signedOut = tools.filter((tool) => tool.signIn === "signed_out").map((tool) => {
8760
- const fix = signInFix(tool.host);
8761
- return {
8762
- kind: "login_pending",
8809
+ function withCodingTools(document, tools, mcp, scanner) {
8810
+ const scannerSaid = (document.conditions ?? []).some(
8811
+ (condition) => condition.component === "scanner" && condition.kind === "login_pending"
8812
+ );
8813
+ const signedOut = [
8814
+ ...(scanner === "not_authorized" || scanner === "refused") && !scannerSaid ? [
8815
+ {
8816
+ kind: "login_pending",
8817
+ component: "scanner",
8818
+ reason: "scanner_signed_out",
8819
+ action: "mnemonik repair"
8820
+ }
8821
+ ] : [],
8822
+ ...tools.filter((tool) => ended(mcp.get(tool.host))).map((tool) => {
8823
+ const fix = signInFix(tool.host);
8824
+ return {
8825
+ kind: "login_pending",
8826
+ component: tool.host,
8827
+ reason: mcpNotAuthorizedReason(tool.name),
8828
+ action: "step" in fix ? fix.step : fix.command
8829
+ };
8830
+ }),
8831
+ ...tools.filter(
8832
+ (tool) => tool.hooks === "not_authorized" && !(document.conditions ?? []).some(
8833
+ (condition) => condition.component === tool.host && condition.kind === "hooks_missing"
8834
+ )
8835
+ ).map((tool) => ({
8836
+ kind: "hooks_missing",
8763
8837
  component: tool.host,
8764
- reason: `${tool.name} is signed out of Mnemonik.`,
8765
- action: "step" in fix ? fix.step : fix.command
8766
- };
8767
- });
8838
+ reason: hooksNotAuthorizedReason(tool.name),
8839
+ action: "mnemonik repair"
8840
+ }))
8841
+ ];
8768
8842
  if (!signedOut.length) return { ...document, codingTools: [...tools] };
8769
8843
  const added = reduceReadiness(signedOut);
8770
8844
  const installation = document.installation;
@@ -8779,27 +8853,54 @@ function withCodingTools(document, tools) {
8779
8853
  codingTools: [...tools]
8780
8854
  };
8781
8855
  }
8782
- var renewsMessage = (tool) => `The sign-in renews automatically the next time ${tool} connects.`;
8783
- function codingToolLines(tools) {
8784
- return tools.flatMap((tool) => {
8785
- if (tool.signIn === "signed_in")
8786
- return [
8787
- tool.stored?.state === "refreshable" ? `${tool.name}: signed in. ${renewsMessage(tool.name)}` : `${tool.name}: signed in.`
8788
- ];
8789
- if (tool.signIn === "signed_in_elsewhere")
8790
- return [`${tool.name}: signed in on another of your machines.`];
8791
- if (tool.signIn !== "not_set_up") return [];
8792
- const fix = signInFix(tool.host);
8793
- return [`${tool.name}: not signed in. ${"step" in fix ? fix.step : `Run ${fix.command}.`}`];
8856
+ async function scannerAuthorization(stateDir, now = Date.now()) {
8857
+ const state = JSON.parse(
8858
+ await readFile2(join6(stateDir, "scanner/state.json"), "utf8").catch(() => "null")
8859
+ );
8860
+ if (!state) return "not_set_up";
8861
+ const receipt = await scannerReceipt(stateDir).catch(() => null);
8862
+ if (receipt?.snapshot?.lifecycle?.reason === "credential_revoked") return "refused";
8863
+ const id = state.config?.credentialFamilyId;
8864
+ if (typeof id !== "string") return "unchecked";
8865
+ const family = await createCliCredentials({ stateDir }).readFamily(id).catch(() => null);
8866
+ return family && Date.parse(family.refreshExpiresAt) > now ? "authorized" : "not_authorized";
8867
+ }
8868
+ function authorizationEntries(input) {
8869
+ const stepped = (component, kinds) => input.conditions.some(
8870
+ (condition) => condition.component === component && kinds.has(condition.kind)
8871
+ );
8872
+ const entries = [];
8873
+ for (const tool of input.tools) {
8874
+ const mcp = input.mcp.get(tool.host) ?? mcpAuthorization(void 0, void 0);
8875
+ entries.push({
8876
+ component: "mcp",
8877
+ host: tool.host,
8878
+ ...mcp,
8879
+ line: mcpLine(tool.name, tool.host, mcp)
8880
+ });
8881
+ entries.push({
8882
+ component: "hooks",
8883
+ host: tool.host,
8884
+ state: tool.hooks,
8885
+ line: hooksLine(tool.name, tool.hooks, stepped(tool.host, hookConditionKinds))
8886
+ });
8887
+ }
8888
+ entries.push({
8889
+ component: "scanner",
8890
+ state: input.scanner,
8891
+ line: scannerLine(input.scanner, stepped("scanner", /* @__PURE__ */ new Set(["login_pending"])))
8794
8892
  });
8893
+ entries.push({ component: "cli", ...input.cli, line: cliLine(input.cli) });
8894
+ return entries;
8795
8895
  }
8796
8896
  export {
8797
8897
  CODEX_TRUST_MESSAGE,
8798
8898
  REPORT_NOT_SENT,
8899
+ authorizationEntries,
8799
8900
  buildStatusDocument,
8800
- codingToolLines,
8801
8901
  codingToolStatuses,
8802
8902
  collectStatusDocument,
8903
+ hookAuthorizations,
8803
8904
  installedCodingTools,
8804
8905
  localEditorStatus,
8805
8906
  localInstallationConditions,
@@ -8809,7 +8910,7 @@ export {
8809
8910
  renderRefusals,
8810
8911
  renderScannerFailure,
8811
8912
  renderStatusSummaries,
8812
- renewsMessage,
8913
+ scannerAuthorization,
8813
8914
  scannerFailureCause,
8814
8915
  statusExitCode,
8815
8916
  withCodingTools