@namzu/cli 32.0.0 → 33.1.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 (175) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/dist/browser/commands.js +11 -7
  3. package/dist/browser/commands.js.map +1 -1
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +21 -1
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/archive.d.ts +4 -0
  8. package/dist/commands/archive.d.ts.map +1 -0
  9. package/dist/commands/archive.js +65 -0
  10. package/dist/commands/archive.js.map +1 -0
  11. package/dist/commands/drain.js +3 -3
  12. package/dist/commands/drain.js.map +1 -1
  13. package/dist/commands/exec.js +1 -1
  14. package/dist/commands/exec.js.map +1 -1
  15. package/dist/commands/login.d.ts +1 -1
  16. package/dist/commands/login.d.ts.map +1 -1
  17. package/dist/commands/login.js +33 -11
  18. package/dist/commands/login.js.map +1 -1
  19. package/dist/commands/mcp-oauth-login.d.ts +19 -0
  20. package/dist/commands/mcp-oauth-login.d.ts.map +1 -0
  21. package/dist/commands/mcp-oauth-login.js +213 -0
  22. package/dist/commands/mcp-oauth-login.js.map +1 -0
  23. package/dist/commands/mcp.d.ts +3 -0
  24. package/dist/commands/mcp.d.ts.map +1 -0
  25. package/dist/commands/mcp.js +288 -0
  26. package/dist/commands/mcp.js.map +1 -0
  27. package/dist/commands/schedule.d.ts.map +1 -1
  28. package/dist/commands/schedule.js +5 -2
  29. package/dist/commands/schedule.js.map +1 -1
  30. package/dist/commands/skills.d.ts.map +1 -1
  31. package/dist/commands/skills.js +60 -5
  32. package/dist/commands/skills.js.map +1 -1
  33. package/dist/commands/types.d.ts +2 -0
  34. package/dist/commands/types.d.ts.map +1 -1
  35. package/dist/commands/worktree.d.ts +6 -0
  36. package/dist/commands/worktree.d.ts.map +1 -0
  37. package/dist/commands/worktree.js +86 -0
  38. package/dist/commands/worktree.js.map +1 -0
  39. package/dist/config/user-config.d.ts +2 -0
  40. package/dist/config/user-config.d.ts.map +1 -1
  41. package/dist/config/user-config.js +76 -6
  42. package/dist/config/user-config.js.map +1 -1
  43. package/dist/doctor/checks/credentials.d.ts.map +1 -1
  44. package/dist/doctor/checks/credentials.js +2 -0
  45. package/dist/doctor/checks/credentials.js.map +1 -1
  46. package/dist/integrations/mcp/oauth-store.d.ts +40 -0
  47. package/dist/integrations/mcp/oauth-store.d.ts.map +1 -0
  48. package/dist/integrations/mcp/oauth-store.js +549 -0
  49. package/dist/integrations/mcp/oauth-store.js.map +1 -0
  50. package/dist/integrations/mcp/servers.d.ts.map +1 -1
  51. package/dist/integrations/mcp/servers.js +155 -2
  52. package/dist/integrations/mcp/servers.js.map +1 -1
  53. package/dist/integrations/mcp/user-config.d.ts +25 -0
  54. package/dist/integrations/mcp/user-config.d.ts.map +1 -0
  55. package/dist/integrations/mcp/user-config.js +92 -0
  56. package/dist/integrations/mcp/user-config.js.map +1 -0
  57. package/dist/integrations/providers/credential-store.d.ts +8 -0
  58. package/dist/integrations/providers/credential-store.d.ts.map +1 -1
  59. package/dist/integrations/providers/credential-store.js +111 -22
  60. package/dist/integrations/providers/credential-store.js.map +1 -1
  61. package/dist/integrations/providers/discover.d.ts +11 -5
  62. package/dist/integrations/providers/discover.d.ts.map +1 -1
  63. package/dist/integrations/providers/discover.js +26 -12
  64. package/dist/integrations/providers/discover.js.map +1 -1
  65. package/dist/integrations/providers/index.d.ts +1 -1
  66. package/dist/integrations/providers/index.d.ts.map +1 -1
  67. package/dist/integrations/providers/index.js +1 -1
  68. package/dist/integrations/providers/index.js.map +1 -1
  69. package/dist/integrations/sessions/display-title.d.ts +3 -0
  70. package/dist/integrations/sessions/display-title.d.ts.map +1 -0
  71. package/dist/integrations/sessions/display-title.js +5 -0
  72. package/dist/integrations/sessions/display-title.js.map +1 -0
  73. package/dist/integrations/sessions/store.d.ts +23 -5
  74. package/dist/integrations/sessions/store.d.ts.map +1 -1
  75. package/dist/integrations/sessions/store.js +164 -24
  76. package/dist/integrations/sessions/store.js.map +1 -1
  77. package/dist/integrations/subagents/runtime.d.ts +4 -2
  78. package/dist/integrations/subagents/runtime.d.ts.map +1 -1
  79. package/dist/integrations/subagents/runtime.js +62 -8
  80. package/dist/integrations/subagents/runtime.js.map +1 -1
  81. package/dist/integrations/subagents/worktree-driver.d.ts +17 -0
  82. package/dist/integrations/subagents/worktree-driver.d.ts.map +1 -0
  83. package/dist/integrations/subagents/worktree-driver.js +72 -0
  84. package/dist/integrations/subagents/worktree-driver.js.map +1 -0
  85. package/dist/integrations/worktrees/managed.d.ts +49 -0
  86. package/dist/integrations/worktrees/managed.d.ts.map +1 -0
  87. package/dist/integrations/worktrees/managed.js +231 -0
  88. package/dist/integrations/worktrees/managed.js.map +1 -0
  89. package/dist/schedule/build.d.ts +2 -0
  90. package/dist/schedule/build.d.ts.map +1 -1
  91. package/dist/schedule/build.js +11 -2
  92. package/dist/schedule/build.js.map +1 -1
  93. package/dist/schedule/commands/add.d.ts +1 -1
  94. package/dist/schedule/commands/add.d.ts.map +1 -1
  95. package/dist/schedule/commands/add.js +12 -2
  96. package/dist/schedule/commands/add.js.map +1 -1
  97. package/dist/schedule/commands/list.d.ts.map +1 -1
  98. package/dist/schedule/commands/list.js +10 -1
  99. package/dist/schedule/commands/list.js.map +1 -1
  100. package/dist/schedule/daemon/daemon.js +1 -1
  101. package/dist/schedule/daemon/daemon.js.map +1 -1
  102. package/dist/schedule/fire/fire.d.ts.map +1 -1
  103. package/dist/schedule/fire/fire.js +6 -1
  104. package/dist/schedule/fire/fire.js.map +1 -1
  105. package/dist/schedule/script-check.d.ts.map +1 -1
  106. package/dist/schedule/script-check.js +2 -1
  107. package/dist/schedule/script-check.js.map +1 -1
  108. package/dist/skills/audit.d.ts +31 -0
  109. package/dist/skills/audit.d.ts.map +1 -0
  110. package/dist/skills/audit.js +75 -0
  111. package/dist/skills/audit.js.map +1 -0
  112. package/dist/tui/App.d.ts.map +1 -1
  113. package/dist/tui/App.js +355 -97
  114. package/dist/tui/App.js.map +1 -1
  115. package/dist/tui/BrandHeader.js +1 -1
  116. package/dist/tui/BrandHeader.js.map +1 -1
  117. package/dist/tui/Composer.d.ts.map +1 -1
  118. package/dist/tui/Composer.js +6 -11
  119. package/dist/tui/Composer.js.map +1 -1
  120. package/dist/tui/Picker.d.ts.map +1 -1
  121. package/dist/tui/Picker.js +18 -3
  122. package/dist/tui/Picker.js.map +1 -1
  123. package/dist/tui/ResumePicker.d.ts +2 -1
  124. package/dist/tui/ResumePicker.d.ts.map +1 -1
  125. package/dist/tui/ResumePicker.js +5 -4
  126. package/dist/tui/ResumePicker.js.map +1 -1
  127. package/dist/tui/SaveSkillOverlay.js +1 -1
  128. package/dist/tui/SaveSkillOverlay.js.map +1 -1
  129. package/dist/tui/ScheduleReviewOverlay.d.ts +27 -0
  130. package/dist/tui/ScheduleReviewOverlay.d.ts.map +1 -0
  131. package/dist/tui/ScheduleReviewOverlay.js +166 -0
  132. package/dist/tui/ScheduleReviewOverlay.js.map +1 -0
  133. package/dist/tui/Transcript.js +2 -2
  134. package/dist/tui/Transcript.js.map +1 -1
  135. package/dist/tui/agent.d.ts +1 -1
  136. package/dist/tui/agent.d.ts.map +1 -1
  137. package/dist/tui/agent.js +15 -6
  138. package/dist/tui/agent.js.map +1 -1
  139. package/dist/tui/browser-notices.d.ts.map +1 -1
  140. package/dist/tui/browser-notices.js +6 -1
  141. package/dist/tui/browser-notices.js.map +1 -1
  142. package/dist/tui/credential-entry.d.ts +4 -29
  143. package/dist/tui/credential-entry.d.ts.map +1 -1
  144. package/dist/tui/credential-entry.js +7 -29
  145. package/dist/tui/credential-entry.js.map +1 -1
  146. package/dist/tui/login-prompt.d.ts +3 -1
  147. package/dist/tui/login-prompt.d.ts.map +1 -1
  148. package/dist/tui/login-prompt.js +11 -0
  149. package/dist/tui/login-prompt.js.map +1 -1
  150. package/dist/tui/provider-list.d.ts.map +1 -1
  151. package/dist/tui/provider-list.js +3 -1
  152. package/dist/tui/provider-list.js.map +1 -1
  153. package/dist/tui/schedule/host-commands.d.ts +3 -0
  154. package/dist/tui/schedule/host-commands.d.ts.map +1 -1
  155. package/dist/tui/schedule/host-commands.js +72 -15
  156. package/dist/tui/schedule/host-commands.js.map +1 -1
  157. package/dist/tui/schedule/integration.d.ts +2 -0
  158. package/dist/tui/schedule/integration.d.ts.map +1 -1
  159. package/dist/tui/schedule/integration.js +3 -0
  160. package/dist/tui/schedule/integration.js.map +1 -1
  161. package/dist/tui/schedule/resume.js +2 -2
  162. package/dist/tui/schedule/resume.js.map +1 -1
  163. package/dist/tui/schedule/tool-host.d.ts +3 -0
  164. package/dist/tui/schedule/tool-host.d.ts.map +1 -1
  165. package/dist/tui/schedule/tool-host.js +34 -9
  166. package/dist/tui/schedule/tool-host.js.map +1 -1
  167. package/dist/tui/slashCommands.d.ts +10 -1
  168. package/dist/tui/slashCommands.d.ts.map +1 -1
  169. package/dist/tui/slashCommands.js +17 -4
  170. package/dist/tui/slashCommands.js.map +1 -1
  171. package/dist/tui/turn-interruption.d.ts.map +1 -1
  172. package/dist/tui/turn-interruption.js +4 -0
  173. package/dist/tui/turn-interruption.js.map +1 -1
  174. package/package.json +6 -5
  175. package/skills/schedule-task/SKILL.md +41 -15
@@ -20,4 +20,6 @@ export declare function userConfigPath(opts?: UserConfigWriteOptions): string;
20
20
  * when it cannot be read as YAML or written.
21
21
  */
22
22
  export declare function setUserConfigValue(path: readonly string[], value: unknown, opts?: UserConfigWriteOptions): string;
23
+ /** Remove one user-owned setting while preserving the rest of the YAML document. */
24
+ export declare function deleteUserConfigValue(path: readonly string[], opts?: UserConfigWriteOptions): boolean;
23
25
  //# sourceMappingURL=user-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"user-config.d.ts","sourceRoot":"","sources":["../../src/config/user-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,MAAM,WAAW,sBAAsB;IACtC,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAChC;AAED,wBAAgB,cAAc,CAAC,IAAI,GAAE,sBAA2B,GAAG,MAAM,CAKxE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CACjC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,KAAK,EAAE,OAAO,EACd,IAAI,GAAE,sBAA2B,GAC/B,MAAM,CA0BR"}
1
+ {"version":3,"file":"user-config.d.ts","sourceRoot":"","sources":["../../src/config/user-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAqBH,MAAM,WAAW,sBAAsB;IACtC,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAChC;AAED,wBAAgB,cAAc,CAAC,IAAI,GAAE,sBAA2B,GAAG,MAAM,CAKxE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CACjC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,KAAK,EAAE,OAAO,EACd,IAAI,GAAE,sBAA2B,GAC/B,MAAM,CAsBR;AAED,oFAAoF;AACpF,wBAAgB,qBAAqB,CACpC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,GAAE,sBAA2B,GAC/B,OAAO,CAwBT"}
@@ -8,9 +8,12 @@
8
8
  * parse is refused rather than rewritten: rewriting it would drop whatever
9
9
  * the operator was in the middle of writing.
10
10
  */
11
- import { existsSync, mkdirSync, readFileSync, renameSync, statSync, writeFileSync } from 'node:fs';
11
+ import { randomUUID } from 'node:crypto';
12
+ import { closeSync, existsSync, lstatSync, mkdirSync, openSync, readFileSync, renameSync, rmSync, writeFileSync, } from 'node:fs';
13
+ import { platform } from 'node:os';
12
14
  import { dirname, join } from 'node:path';
13
15
  import { Document, isMap, parseDocument } from 'yaml';
16
+ import { restrictToOwner } from '../integrations/providers/credential-store.js';
14
17
  import { resolveNamzuHome } from '../integrations/state/home.js';
15
18
  export function userConfigPath(opts = {}) {
16
19
  return join(resolveNamzuHome({ ...(opts.home ? { home: opts.home } : {}), env: opts.env ?? process.env }), 'config.yaml');
@@ -38,11 +41,78 @@ export function setUserConfigValue(path, value, opts = {}) {
38
41
  }
39
42
  }
40
43
  doc.setIn(path, value);
41
- mkdirSync(dirname(file), { recursive: true });
42
- const temp = `${file}.${process.pid}.tmp`;
43
- // The file keeps its own permissions; a new one is the owner's alone.
44
- writeFileSync(temp, doc.toString(), { mode: exists ? statSync(file).mode & 0o777 : 0o600 });
45
- renameSync(temp, file);
44
+ writePrivateUserConfig(file, doc);
46
45
  return file;
47
46
  }
47
+ /** Remove one user-owned setting while preserving the rest of the YAML document. */
48
+ export function deleteUserConfigValue(path, opts = {}) {
49
+ const file = userConfigPath(opts);
50
+ if (!existsSync(file))
51
+ return false;
52
+ const text = readFileSync(file, 'utf8');
53
+ const doc = parseDocument(text);
54
+ if (doc.errors.length > 0) {
55
+ throw new Error(`${file} is not valid YAML (${doc.errors[0]?.message ?? 'parse error'}); fix it first`);
56
+ }
57
+ if (doc.contents !== null && !isMap(doc.contents)) {
58
+ throw new Error(`${file} is not a mapping of settings; fix it first`);
59
+ }
60
+ for (let depth = 1; depth < path.length; depth += 1) {
61
+ const parent = doc.getIn(path.slice(0, depth), true);
62
+ if (parent === undefined || parent === null)
63
+ return false;
64
+ if (!isMap(parent)) {
65
+ throw new Error(`${file}: ${path.slice(0, depth).join('.')} is not a mapping; fix it first`);
66
+ }
67
+ }
68
+ if (!doc.hasIn(path))
69
+ return false;
70
+ doc.deleteIn(path);
71
+ writePrivateUserConfig(file, doc);
72
+ return true;
73
+ }
74
+ /** Replacing an old config must never carry its broad mode onto a secret-bearing copy. */
75
+ function writePrivateUserConfig(file, doc) {
76
+ const parent = dirname(file);
77
+ mkdirSync(parent, { recursive: true, mode: 0o700 });
78
+ if (platform() === 'win32') {
79
+ const entry = lstatSync(parent);
80
+ if (entry.isSymbolicLink() || !entry.isDirectory()) {
81
+ throw new Error(`User config directory must be a real directory: ${parent}`);
82
+ }
83
+ // POSIX 0600 has no ACL meaning on Windows. Secure the parent before
84
+ // opening a temp file and prove that file private while it is still empty.
85
+ restrictToOwner(parent);
86
+ }
87
+ const temp = `${file}.${process.pid}.${randomUUID()}.tmp`;
88
+ let fd;
89
+ try {
90
+ fd = openSync(temp, 'wx', 0o600);
91
+ restrictToOwner(temp);
92
+ writeFileSync(fd, doc.toString());
93
+ closeSync(fd);
94
+ fd = undefined;
95
+ restrictToOwner(temp);
96
+ renameSync(temp, file);
97
+ }
98
+ catch (error) {
99
+ if (fd !== undefined) {
100
+ try {
101
+ closeSync(fd);
102
+ }
103
+ catch {
104
+ // The file remains private; still try to remove its name.
105
+ }
106
+ }
107
+ try {
108
+ rmSync(temp, { force: true });
109
+ }
110
+ catch (cleanupError) {
111
+ throw new Error(`Private user-config temporary file could not be removed: ${temp}`, {
112
+ cause: new AggregateError([error, cleanupError]),
113
+ });
114
+ }
115
+ throw error;
116
+ }
117
+ }
48
118
  //# sourceMappingURL=user-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"user-config.js","sourceRoot":"","sources":["../../src/config/user-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user-config.js","sourceRoot":"","sources":["../../src/config/user-config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/doctor/checks/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAqB,MAAM,YAAY,CAAA;AAIhE;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,sBAAsB,EAAE,WAsDpC,CAAA"}
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/doctor/checks/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAqB,MAAM,YAAY,CAAA;AAIhE;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,sBAAsB,EAAE,WAwDpC,CAAA"}
@@ -53,6 +53,8 @@ export const credentialSourcesCheck = {
53
53
  return `${d.entry.id} (Claude session · ${d.source.path})`;
54
54
  case 'gemini-file':
55
55
  return `${d.entry.id} (Gemini session · ${d.source.path})`;
56
+ case 'stored-gemini-key':
57
+ return `${d.entry.id} (saved Gemini API key · ${d.source.path})`;
56
58
  case 'codex-file':
57
59
  return `${d.entry.id} (Codex session · ${d.source.path})`;
58
60
  case 'stored':
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/doctor/checks/credentials.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAA;AAE5E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAgB;IAClD,EAAE,EAAE,uBAAuB;IAC3B,QAAQ,EAAE,WAAW;IACrB,GAAG,EAAE,KAAK,IAAgC,EAAE;QAC3C,IAAI,QAAuD,CAAA;QAC3D,IAAI,CAAC;YACJ,QAAQ,GAAG,MAAM,iBAAiB,EAAE,CAAA;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,oEAAoE;YACpE,sEAAsE;YACtE,OAAO;gBACN,MAAM,EAAE,cAAc;gBACtB,OAAO,EAAE,gCAAgC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;aAC3F,CAAA;QACF,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO;gBACN,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,yBAAyB;gBAClC,WAAW,EACV,kTAAkT;aACnT,CAAA;QACF,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAChC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACvB,KAAK,KAAK;oBACT,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,CAAA;gBACnD,KAAK,QAAQ;oBACZ,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,uDAAuD,CAAA;gBAC5E,KAAK,eAAe;oBACnB,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,wBAAwB,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAA;gBAC7D,KAAK,UAAU;oBACd,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,CAAA;gBACxD,KAAK,aAAa;oBACjB,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,sBAAsB,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAA;gBAC3D,KAAK,aAAa;oBACjB,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,sBAAsB,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAA;gBAC3D,KAAK,YAAY;oBAChB,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,qBAAqB,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAA;gBAC1D,KAAK,QAAQ;oBACZ,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAA;gBACtD,KAAK,OAAO;oBACX,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,GAAG,CAAA;gBAC7E,KAAK,SAAS;oBACb,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,4BAA4B,CAAA;YAClD,CAAC;QACF,CAAC,CAAC,CAAA;QACF,OAAO;YACN,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,GAAG,QAAQ,CAAC,MAAM,kCAAkC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAC/E,CAAA;IACF,CAAC;CACD,CAAA"}
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/doctor/checks/credentials.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAA;AAE5E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAgB;IAClD,EAAE,EAAE,uBAAuB;IAC3B,QAAQ,EAAE,WAAW;IACrB,GAAG,EAAE,KAAK,IAAgC,EAAE;QAC3C,IAAI,QAAuD,CAAA;QAC3D,IAAI,CAAC;YACJ,QAAQ,GAAG,MAAM,iBAAiB,EAAE,CAAA;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,oEAAoE;YACpE,sEAAsE;YACtE,OAAO;gBACN,MAAM,EAAE,cAAc;gBACtB,OAAO,EAAE,gCAAgC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;aAC3F,CAAA;QACF,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO;gBACN,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,yBAAyB;gBAClC,WAAW,EACV,kTAAkT;aACnT,CAAA;QACF,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAChC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACvB,KAAK,KAAK;oBACT,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,CAAA;gBACnD,KAAK,QAAQ;oBACZ,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,uDAAuD,CAAA;gBAC5E,KAAK,eAAe;oBACnB,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,wBAAwB,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAA;gBAC7D,KAAK,UAAU;oBACd,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,CAAA;gBACxD,KAAK,aAAa;oBACjB,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,sBAAsB,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAA;gBAC3D,KAAK,aAAa;oBACjB,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,sBAAsB,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAA;gBAC3D,KAAK,mBAAmB;oBACvB,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,4BAA4B,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAA;gBACjE,KAAK,YAAY;oBAChB,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,qBAAqB,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAA;gBAC1D,KAAK,QAAQ;oBACZ,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAA;gBACtD,KAAK,OAAO;oBACX,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,GAAG,CAAA;gBAC7E,KAAK,SAAS;oBACb,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,4BAA4B,CAAA;YAClD,CAAC;QACF,CAAC,CAAC,CAAA;QACF,OAAO;YACN,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,GAAG,QAAQ,CAAC,MAAM,kCAAkC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAC/E,CAAA;IACF,CAAC;CACD,CAAA"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Namzu-owned MCP OAuth state. Each complete resource endpoint has its own
3
+ * private file: a token for one path or query must never be sent to another.
4
+ * Discovery and PKCE state share that file so a browser round trip cannot
5
+ * accidentally resume against a different authorization server.
6
+ */
7
+ import type { OAuthClientProvider } from '@modelcontextprotocol/client';
8
+ export declare class McpOAuthStoreError extends Error {
9
+ readonly name = "McpOAuthStoreError";
10
+ }
11
+ export declare class McpOAuthLoginRequiredError extends Error {
12
+ readonly name = "McpOAuthLoginRequiredError";
13
+ constructor();
14
+ }
15
+ export interface McpOAuthProviderOptions {
16
+ /** The complete configured MCP URL, including its path and query. */
17
+ readonly endpoint: string;
18
+ /** Existing credential-store test seam: the OS home, not NAMZU_HOME. */
19
+ readonly home?: string;
20
+ /** The loopback callback for an interactive login. Omit in a running agent. */
21
+ readonly redirectUrl?: string;
22
+ /** Only an explicit login may open a browser. */
23
+ readonly onRedirect?: (authorizationUrl: URL) => void | Promise<void>;
24
+ }
25
+ /** Shared network policy for interactive sign-in and background token refresh. */
26
+ export declare function isSecureMcpOAuthUrl(url: URL): boolean;
27
+ /** A hash keeps possibly secret URL path and query values out of file names. */
28
+ export declare function mcpOAuthPath(endpoint: string, home?: string): string;
29
+ /** True only for a private, issuer-stamped token belonging to this exact URL. */
30
+ export declare function hasMcpOAuthTokens(endpoint: string, home?: string): boolean;
31
+ /** Validate and consume state before passing callback parameters to `finishAuth`. */
32
+ export declare function consumeMcpOAuthCallbackState(endpoint: string, state: string | null, home?: string): void;
33
+ export declare function clearMcpOAuthPending(endpoint: string, home?: string): void;
34
+ /** Remove only this URL's credentials; another server on the same host survives. */
35
+ export declare function clearMcpOAuthCredentials(endpoint: string, home?: string): boolean;
36
+ /** The official MCP client consumes this provider for login and token refresh. */
37
+ export declare function createMcpOAuthProvider(options: McpOAuthProviderOptions): OAuthClientProvider;
38
+ /** The authorization-server identity captured before the browser opened. */
39
+ export declare function pendingMcpOAuthIssuer(endpoint: string, home?: string): string | null;
40
+ //# sourceMappingURL=oauth-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-store.d.ts","sourceRoot":"","sources":["../../../src/integrations/mcp/oauth-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmBH,OAAO,KAAK,EAGX,mBAAmB,EAInB,MAAM,8BAA8B,CAAA;AASrC,qBAAa,kBAAmB,SAAQ,KAAK;IAC5C,SAAkB,IAAI,wBAAuB;CAC7C;AAED,qBAAa,0BAA2B,SAAQ,KAAK;IACpD,SAAkB,IAAI,gCAA+B;;CAIrD;AAyBD,MAAM,WAAW,uBAAuB;IACvC,qEAAqE;IACrE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,wEAAwE;IACxE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,+EAA+E;IAC/E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,iDAAiD;IACjD,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,gBAAgB,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACrE;AAkBD,kFAAkF;AAClF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAQrD;AAeD,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAIpE;AA0PD,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAG1E;AAED,qFAAqF;AACrF,wBAAgB,4BAA4B,CAC3C,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,IAAI,CAAC,EAAE,MAAM,GACX,IAAI,CAoBN;AAQD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAM1E;AAED,oFAAoF;AACpF,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAmBjF;AAED,kFAAkF;AAClF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,GAAG,mBAAmB,CA6L5F;AAED,4EAA4E;AAC5E,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKpF"}