@namzu/cli 1.0.1 → 2.1.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 (211) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +0 -2
  3. package/dist/cli.js.map +1 -1
  4. package/dist/integrations/providers/index.d.ts +0 -3
  5. package/dist/integrations/providers/index.d.ts.map +1 -1
  6. package/dist/integrations/providers/index.js +0 -5
  7. package/dist/integrations/providers/index.js.map +1 -1
  8. package/dist/tui/App.d.ts.map +1 -1
  9. package/dist/tui/App.js +8 -0
  10. package/dist/tui/App.js.map +1 -1
  11. package/dist/tui/agent.d.ts +10 -0
  12. package/dist/tui/agent.d.ts.map +1 -1
  13. package/dist/tui/agent.js +10 -0
  14. package/dist/tui/agent.js.map +1 -1
  15. package/dist/tui/slashCommands.d.ts +46 -0
  16. package/dist/tui/slashCommands.d.ts.map +1 -1
  17. package/dist/tui/slashCommands.js +96 -0
  18. package/dist/tui/slashCommands.js.map +1 -1
  19. package/package.json +11 -6
  20. package/dist/__tests__/environment-reaches-the-turn.test.d.ts +0 -17
  21. package/dist/__tests__/environment-reaches-the-turn.test.d.ts.map +0 -1
  22. package/dist/__tests__/environment-reaches-the-turn.test.js +0 -128
  23. package/dist/__tests__/environment-reaches-the-turn.test.js.map +0 -1
  24. package/dist/__tests__/headless-trust-gate.test.d.ts +0 -23
  25. package/dist/__tests__/headless-trust-gate.test.d.ts.map +0 -1
  26. package/dist/__tests__/headless-trust-gate.test.js +0 -227
  27. package/dist/__tests__/headless-trust-gate.test.js.map +0 -1
  28. package/dist/__tests__/mcp-servers-reach-the-session.test.d.ts +0 -17
  29. package/dist/__tests__/mcp-servers-reach-the-session.test.d.ts.map +0 -1
  30. package/dist/__tests__/mcp-servers-reach-the-session.test.js +0 -171
  31. package/dist/__tests__/mcp-servers-reach-the-session.test.js.map +0 -1
  32. package/dist/__tests__/permission-rules-reach-the-turn.test.d.ts +0 -31
  33. package/dist/__tests__/permission-rules-reach-the-turn.test.d.ts.map +0 -1
  34. package/dist/__tests__/permission-rules-reach-the-turn.test.js +0 -132
  35. package/dist/__tests__/permission-rules-reach-the-turn.test.js.map +0 -1
  36. package/dist/__tests__/project-instructions-reach-the-turn.test.d.ts +0 -24
  37. package/dist/__tests__/project-instructions-reach-the-turn.test.d.ts.map +0 -1
  38. package/dist/__tests__/project-instructions-reach-the-turn.test.js +0 -153
  39. package/dist/__tests__/project-instructions-reach-the-turn.test.js.map +0 -1
  40. package/dist/cli.test.d.ts +0 -2
  41. package/dist/cli.test.d.ts.map +0 -1
  42. package/dist/cli.test.js +0 -100
  43. package/dist/cli.test.js.map +0 -1
  44. package/dist/commands/__tests__/eval.test.d.ts +0 -2
  45. package/dist/commands/__tests__/eval.test.d.ts.map +0 -1
  46. package/dist/commands/__tests__/eval.test.js +0 -165
  47. package/dist/commands/__tests__/eval.test.js.map +0 -1
  48. package/dist/commands/__tests__/passthrough-help.test.d.ts +0 -2
  49. package/dist/commands/__tests__/passthrough-help.test.d.ts.map +0 -1
  50. package/dist/commands/__tests__/passthrough-help.test.js +0 -96
  51. package/dist/commands/__tests__/passthrough-help.test.js.map +0 -1
  52. package/dist/commands/__tests__/resume.test.d.ts +0 -15
  53. package/dist/commands/__tests__/resume.test.d.ts.map +0 -1
  54. package/dist/commands/__tests__/resume.test.js +0 -116
  55. package/dist/commands/__tests__/resume.test.js.map +0 -1
  56. package/dist/commands/__tests__/run-exit-code.test.d.ts +0 -2
  57. package/dist/commands/__tests__/run-exit-code.test.d.ts.map +0 -1
  58. package/dist/commands/__tests__/run-exit-code.test.js +0 -100
  59. package/dist/commands/__tests__/run-exit-code.test.js.map +0 -1
  60. package/dist/commands/__tests__/run-flags.test.d.ts +0 -11
  61. package/dist/commands/__tests__/run-flags.test.d.ts.map +0 -1
  62. package/dist/commands/__tests__/run-flags.test.js +0 -238
  63. package/dist/commands/__tests__/run-flags.test.js.map +0 -1
  64. package/dist/commands/__tests__/run-stream-flags.test.d.ts +0 -2
  65. package/dist/commands/__tests__/run-stream-flags.test.d.ts.map +0 -1
  66. package/dist/commands/__tests__/run-stream-flags.test.js +0 -295
  67. package/dist/commands/__tests__/run-stream-flags.test.js.map +0 -1
  68. package/dist/commands/doctor.test.d.ts +0 -2
  69. package/dist/commands/doctor.test.d.ts.map +0 -1
  70. package/dist/commands/doctor.test.js +0 -82
  71. package/dist/commands/doctor.test.js.map +0 -1
  72. package/dist/commands/providers.d.ts +0 -17
  73. package/dist/commands/providers.d.ts.map +0 -1
  74. package/dist/commands/providers.js +0 -274
  75. package/dist/commands/providers.js.map +0 -1
  76. package/dist/config/load.test.d.ts +0 -2
  77. package/dist/config/load.test.d.ts.map +0 -1
  78. package/dist/config/load.test.js +0 -57
  79. package/dist/config/load.test.js.map +0 -1
  80. package/dist/context/__tests__/environment.test.d.ts +0 -10
  81. package/dist/context/__tests__/environment.test.d.ts.map +0 -1
  82. package/dist/context/__tests__/environment.test.js +0 -84
  83. package/dist/context/__tests__/environment.test.js.map +0 -1
  84. package/dist/context/__tests__/project.test.d.ts +0 -12
  85. package/dist/context/__tests__/project.test.d.ts.map +0 -1
  86. package/dist/context/__tests__/project.test.js +0 -201
  87. package/dist/context/__tests__/project.test.js.map +0 -1
  88. package/dist/doctor/checks/credentials.test.d.ts +0 -10
  89. package/dist/doctor/checks/credentials.test.d.ts.map +0 -1
  90. package/dist/doctor/checks/credentials.test.js +0 -47
  91. package/dist/doctor/checks/credentials.test.js.map +0 -1
  92. package/dist/doctor/checks/sandbox.test.d.ts +0 -2
  93. package/dist/doctor/checks/sandbox.test.d.ts.map +0 -1
  94. package/dist/doctor/checks/sandbox.test.js +0 -59
  95. package/dist/doctor/checks/sandbox.test.js.map +0 -1
  96. package/dist/doctor/registry.test.d.ts +0 -7
  97. package/dist/doctor/registry.test.d.ts.map +0 -1
  98. package/dist/doctor/registry.test.js +0 -379
  99. package/dist/doctor/registry.test.js.map +0 -1
  100. package/dist/integrations/mcp/__tests__/connect.test.d.ts +0 -11
  101. package/dist/integrations/mcp/__tests__/connect.test.d.ts.map +0 -1
  102. package/dist/integrations/mcp/__tests__/connect.test.js +0 -231
  103. package/dist/integrations/mcp/__tests__/connect.test.js.map +0 -1
  104. package/dist/integrations/providers/discover.test.d.ts +0 -2
  105. package/dist/integrations/providers/discover.test.d.ts.map +0 -1
  106. package/dist/integrations/providers/discover.test.js +0 -93
  107. package/dist/integrations/providers/discover.test.js.map +0 -1
  108. package/dist/integrations/providers/keychain.test.d.ts +0 -2
  109. package/dist/integrations/providers/keychain.test.d.ts.map +0 -1
  110. package/dist/integrations/providers/keychain.test.js +0 -21
  111. package/dist/integrations/providers/keychain.test.js.map +0 -1
  112. package/dist/integrations/providers/mask.d.ts +0 -7
  113. package/dist/integrations/providers/mask.d.ts.map +0 -1
  114. package/dist/integrations/providers/mask.js +0 -14
  115. package/dist/integrations/providers/mask.js.map +0 -1
  116. package/dist/integrations/providers/mask.test.d.ts +0 -2
  117. package/dist/integrations/providers/mask.test.d.ts.map +0 -1
  118. package/dist/integrations/providers/mask.test.js +0 -20
  119. package/dist/integrations/providers/mask.test.js.map +0 -1
  120. package/dist/integrations/providers/oauth.test.d.ts +0 -2
  121. package/dist/integrations/providers/oauth.test.d.ts.map +0 -1
  122. package/dist/integrations/providers/oauth.test.js +0 -86
  123. package/dist/integrations/providers/oauth.test.js.map +0 -1
  124. package/dist/integrations/providers/preferences.test.d.ts +0 -2
  125. package/dist/integrations/providers/preferences.test.d.ts.map +0 -1
  126. package/dist/integrations/providers/preferences.test.js +0 -76
  127. package/dist/integrations/providers/preferences.test.js.map +0 -1
  128. package/dist/integrations/providers/schema.d.ts +0 -73
  129. package/dist/integrations/providers/schema.d.ts.map +0 -1
  130. package/dist/integrations/providers/schema.js +0 -70
  131. package/dist/integrations/providers/schema.js.map +0 -1
  132. package/dist/integrations/providers/schema.test.d.ts +0 -2
  133. package/dist/integrations/providers/schema.test.d.ts.map +0 -1
  134. package/dist/integrations/providers/schema.test.js +0 -43
  135. package/dist/integrations/providers/schema.test.js.map +0 -1
  136. package/dist/integrations/providers/store.d.ts +0 -32
  137. package/dist/integrations/providers/store.d.ts.map +0 -1
  138. package/dist/integrations/providers/store.js +0 -133
  139. package/dist/integrations/providers/store.js.map +0 -1
  140. package/dist/integrations/providers/store.test.d.ts +0 -2
  141. package/dist/integrations/providers/store.test.d.ts.map +0 -1
  142. package/dist/integrations/providers/store.test.js +0 -135
  143. package/dist/integrations/providers/store.test.js.map +0 -1
  144. package/dist/integrations/sessions/__tests__/archived-workspace.test.d.ts +0 -21
  145. package/dist/integrations/sessions/__tests__/archived-workspace.test.d.ts.map +0 -1
  146. package/dist/integrations/sessions/__tests__/archived-workspace.test.js +0 -62
  147. package/dist/integrations/sessions/__tests__/archived-workspace.test.js.map +0 -1
  148. package/dist/integrations/subagents/__tests__/delegation-trace.test.d.ts +0 -2
  149. package/dist/integrations/subagents/__tests__/delegation-trace.test.d.ts.map +0 -1
  150. package/dist/integrations/subagents/__tests__/delegation-trace.test.js +0 -114
  151. package/dist/integrations/subagents/__tests__/delegation-trace.test.js.map +0 -1
  152. package/dist/integrations/trust/store.test.d.ts +0 -2
  153. package/dist/integrations/trust/store.test.d.ts.map +0 -1
  154. package/dist/integrations/trust/store.test.js +0 -50
  155. package/dist/integrations/trust/store.test.js.map +0 -1
  156. package/dist/memory/store.test.d.ts +0 -2
  157. package/dist/memory/store.test.d.ts.map +0 -1
  158. package/dist/memory/store.test.js +0 -63
  159. package/dist/memory/store.test.js.map +0 -1
  160. package/dist/output/formatter.test.d.ts +0 -2
  161. package/dist/output/formatter.test.d.ts.map +0 -1
  162. package/dist/output/formatter.test.js +0 -88
  163. package/dist/output/formatter.test.js.map +0 -1
  164. package/dist/output/rendered-payload.test.d.ts +0 -2
  165. package/dist/output/rendered-payload.test.d.ts.map +0 -1
  166. package/dist/output/rendered-payload.test.js +0 -61
  167. package/dist/output/rendered-payload.test.js.map +0 -1
  168. package/dist/permissions/__tests__/mode.test.d.ts +0 -10
  169. package/dist/permissions/__tests__/mode.test.d.ts.map +0 -1
  170. package/dist/permissions/__tests__/mode.test.js +0 -115
  171. package/dist/permissions/__tests__/mode.test.js.map +0 -1
  172. package/dist/permissions/__tests__/rules.test.d.ts +0 -10
  173. package/dist/permissions/__tests__/rules.test.d.ts.map +0 -1
  174. package/dist/permissions/__tests__/rules.test.js +0 -196
  175. package/dist/permissions/__tests__/rules.test.js.map +0 -1
  176. package/dist/skills/store.test.d.ts +0 -2
  177. package/dist/skills/store.test.d.ts.map +0 -1
  178. package/dist/skills/store.test.js +0 -80
  179. package/dist/skills/store.test.js.map +0 -1
  180. package/dist/tui/__tests__/context-gauge.test.d.ts +0 -2
  181. package/dist/tui/__tests__/context-gauge.test.d.ts.map +0 -1
  182. package/dist/tui/__tests__/context-gauge.test.js +0 -83
  183. package/dist/tui/__tests__/context-gauge.test.js.map +0 -1
  184. package/dist/tui/__tests__/deferred-tool-discovery.test.d.ts +0 -24
  185. package/dist/tui/__tests__/deferred-tool-discovery.test.d.ts.map +0 -1
  186. package/dist/tui/__tests__/deferred-tool-discovery.test.js +0 -111
  187. package/dist/tui/__tests__/deferred-tool-discovery.test.js.map +0 -1
  188. package/dist/tui/__tests__/to-agent-event.test.d.ts +0 -2
  189. package/dist/tui/__tests__/to-agent-event.test.d.ts.map +0 -1
  190. package/dist/tui/__tests__/to-agent-event.test.js +0 -230
  191. package/dist/tui/__tests__/to-agent-event.test.js.map +0 -1
  192. package/dist/tui/__tests__/working-directory.test.d.ts +0 -13
  193. package/dist/tui/__tests__/working-directory.test.d.ts.map +0 -1
  194. package/dist/tui/__tests__/working-directory.test.js +0 -109
  195. package/dist/tui/__tests__/working-directory.test.js.map +0 -1
  196. package/dist/tui/agent.test.d.ts +0 -2
  197. package/dist/tui/agent.test.d.ts.map +0 -1
  198. package/dist/tui/agent.test.js +0 -225
  199. package/dist/tui/agent.test.js.map +0 -1
  200. package/dist/tui/markdownParser.test.d.ts +0 -2
  201. package/dist/tui/markdownParser.test.d.ts.map +0 -1
  202. package/dist/tui/markdownParser.test.js +0 -90
  203. package/dist/tui/markdownParser.test.js.map +0 -1
  204. package/dist/tui/mentions.test.d.ts +0 -2
  205. package/dist/tui/mentions.test.d.ts.map +0 -1
  206. package/dist/tui/mentions.test.js +0 -35
  207. package/dist/tui/mentions.test.js.map +0 -1
  208. package/dist/tui/slashCommands.test.d.ts +0 -2
  209. package/dist/tui/slashCommands.test.d.ts.map +0 -1
  210. package/dist/tui/slashCommands.test.js +0 -114
  211. package/dist/tui/slashCommands.test.js.map +0 -1
@@ -1,274 +0,0 @@
1
- /**
2
- * `namzu providers` — real implementation, replacing the M0 stub.
3
- *
4
- * Subcommands:
5
- * - `ls` List configured profiles (mask secrets by default).
6
- * - `add <name>` Persist a new profile.
7
- * - `remove <name>` Drop a profile from the store.
8
- * - `default <name>` Flip the `default` flag onto one profile.
9
- * - `path` Print the store path (useful for env automation).
10
- *
11
- * Passthrough mode + inner Commander instance — same pattern as `tools`.
12
- * Live provider instantiation (calling `ProviderRegistry.create`) is M3
13
- * work and not done here; M2's job is purely "store + retrieve + display".
14
- */
15
- import { Command, CommanderError } from 'commander';
16
- import { PROVIDER_TYPES, ProfileValidationError, ProvidersStoreError, findDefault, isProviderType, maskSecret, providersPath, readProfiles, resolveApiKey, validateProfile, writeProfiles, } from '../integrations/providers/index.js';
17
- async function runLs(ctx, opts) {
18
- let profiles;
19
- try {
20
- profiles = readProfiles();
21
- }
22
- catch (err) {
23
- ctx.formatter.error({
24
- message: err instanceof Error ? err.message : String(err),
25
- });
26
- return 70;
27
- }
28
- let filtered = profiles;
29
- if (opts.type) {
30
- if (!isProviderType(opts.type)) {
31
- ctx.formatter.error({
32
- message: `--type must be one of: ${PROVIDER_TYPES.join(', ')}`,
33
- });
34
- return 64;
35
- }
36
- filtered = profiles.filter((p) => p.type === opts.type);
37
- }
38
- const rows = filtered.map((p) => {
39
- const apiKey = resolveApiKey(p);
40
- return {
41
- name: p.name,
42
- type: p.type,
43
- model: p.model ?? null,
44
- apiKey: opts.showSecrets ? apiKey : maskSecret(apiKey),
45
- default: p.default === true,
46
- source: keySource(p, apiKey),
47
- };
48
- });
49
- ctx.formatter.print({
50
- path: providersPath(),
51
- count: rows.length,
52
- default: findDefault(profiles)?.name ?? null,
53
- profiles: rows,
54
- });
55
- return 0;
56
- }
57
- async function runAdd(ctx, name, opts) {
58
- if (!isProviderType(opts.type)) {
59
- ctx.formatter.error({
60
- message: `--type must be one of: ${PROVIDER_TYPES.join(', ')}`,
61
- });
62
- return 64;
63
- }
64
- const type = opts.type;
65
- let candidate;
66
- switch (type) {
67
- case 'openai':
68
- candidate = pruneUndefined({
69
- name,
70
- type,
71
- apiKey: opts.apiKey,
72
- baseUrl: opts.baseUrl,
73
- model: opts.model,
74
- organization: opts.organization,
75
- project: opts.project,
76
- default: opts.default,
77
- });
78
- break;
79
- case 'anthropic':
80
- case 'openrouter':
81
- candidate = pruneUndefined({
82
- name,
83
- type,
84
- apiKey: opts.apiKey,
85
- baseUrl: opts.baseUrl,
86
- model: opts.model,
87
- default: opts.default,
88
- });
89
- break;
90
- case 'ollama':
91
- case 'lmstudio':
92
- candidate = pruneUndefined({
93
- name,
94
- type,
95
- host: opts.host,
96
- model: opts.model,
97
- default: opts.default,
98
- });
99
- break;
100
- case 'bedrock':
101
- candidate = pruneUndefined({
102
- name,
103
- type,
104
- region: opts.region,
105
- model: opts.model,
106
- default: opts.default,
107
- });
108
- break;
109
- case 'http':
110
- if (!opts.baseUrl) {
111
- ctx.formatter.error({ message: '--base-url is required for type=http' });
112
- return 64;
113
- }
114
- candidate = pruneUndefined({
115
- name,
116
- type,
117
- baseUrl: opts.baseUrl,
118
- apiKey: opts.apiKey,
119
- model: opts.model,
120
- dialect: opts.dialect,
121
- default: opts.default,
122
- });
123
- break;
124
- }
125
- let profile;
126
- try {
127
- profile = validateProfile(candidate);
128
- }
129
- catch (err) {
130
- if (err instanceof ProfileValidationError) {
131
- ctx.formatter.error({ message: err.message });
132
- return 64;
133
- }
134
- throw err;
135
- }
136
- const existing = readProfiles();
137
- if (existing.some((p) => p.name === name)) {
138
- ctx.formatter.error({
139
- message: `profile "${name}" already exists; use \`namzu providers remove ${name}\` first`,
140
- });
141
- return 64;
142
- }
143
- const merged = opts.default
144
- ? [...existing.map((p) => ({ ...p, default: false })), profile]
145
- : [...existing, profile];
146
- try {
147
- writeProfiles(merged);
148
- }
149
- catch (err) {
150
- if (err instanceof ProvidersStoreError) {
151
- ctx.formatter.error({ message: err.message });
152
- return 70;
153
- }
154
- throw err;
155
- }
156
- ctx.formatter.info(`added profile "${name}" (${type})${opts.default ? ' as default' : ''}`);
157
- return 0;
158
- }
159
- async function runRemove(ctx, name) {
160
- const existing = readProfiles();
161
- if (!existing.some((p) => p.name === name)) {
162
- ctx.formatter.error({ message: `no profile named "${name}"` });
163
- return 64;
164
- }
165
- writeProfiles(existing.filter((p) => p.name !== name));
166
- ctx.formatter.info(`removed profile "${name}"`);
167
- return 0;
168
- }
169
- async function runDefault(ctx, name) {
170
- const existing = readProfiles();
171
- if (!existing.some((p) => p.name === name)) {
172
- ctx.formatter.error({ message: `no profile named "${name}"` });
173
- return 64;
174
- }
175
- const updated = existing.map((p) => ({ ...p, default: p.name === name }));
176
- writeProfiles(updated);
177
- ctx.formatter.info(`default provider set to "${name}"`);
178
- return 0;
179
- }
180
- function runPath(ctx) {
181
- ctx.formatter.print(providersPath());
182
- return 0;
183
- }
184
- function keySource(p, resolved) {
185
- if (resolved === null)
186
- return 'none';
187
- const onDisk = p.apiKey;
188
- if (onDisk && onDisk === resolved)
189
- return 'file';
190
- return 'env';
191
- }
192
- function pruneUndefined(obj) {
193
- const out = {};
194
- for (const [k, v] of Object.entries(obj)) {
195
- if (v !== undefined)
196
- out[k] = v;
197
- }
198
- return out;
199
- }
200
- export const providersCommand = {
201
- name: 'providers',
202
- description: 'Manage LLM provider profiles (stored at ~/.namzu/providers.json)',
203
- passThrough: true,
204
- async handler({ ctx, rawArgs }) {
205
- let exitCode = 0;
206
- const program = new Command('providers')
207
- .description('Manage LLM provider profiles')
208
- .exitOverride()
209
- .helpOption('-h, --help', 'Show this help');
210
- program
211
- .command('ls')
212
- .description('List configured provider profiles')
213
- .option('--show-secrets', 'Print API keys in the clear (default: mask)')
214
- .option('--type <type>', `Filter by provider type (${PROVIDER_TYPES.join('|')})`)
215
- .action(async (opts) => {
216
- exitCode = await runLs(ctx, opts);
217
- });
218
- program
219
- .command('add <name>')
220
- .description('Persist a new provider profile')
221
- .requiredOption('--type <type>', `Provider type (${PROVIDER_TYPES.join('|')})`)
222
- .option('--api-key <key>', 'API key (also reads NAMZU_<NAME>_API_KEY / <TYPE>_API_KEY env)')
223
- .option('--base-url <url>', 'Override base URL (required for type=http)')
224
- .option('--model <model>', 'Default model identifier')
225
- .option('--organization <org>', 'OpenAI organization id')
226
- .option('--project <proj>', 'OpenAI project id')
227
- .option('--host <host>', 'Local server host (ollama, lmstudio)')
228
- .option('--region <region>', 'AWS region (bedrock)')
229
- .option('--dialect <dialect>', "HTTP shim dialect ('openai' | 'anthropic')")
230
- .option('--default', 'Mark as the default profile (unsets any prior default)')
231
- .action(async (name, opts) => {
232
- exitCode = await runAdd(ctx, name, opts);
233
- });
234
- program
235
- .command('remove <name>')
236
- .description('Drop a profile from the store')
237
- .action(async (name) => {
238
- exitCode = await runRemove(ctx, name);
239
- });
240
- program
241
- .command('default <name>')
242
- .description('Mark a profile as the default')
243
- .action(async (name) => {
244
- exitCode = await runDefault(ctx, name);
245
- });
246
- program
247
- .command('path')
248
- .description('Print the profile store path')
249
- .action(() => {
250
- exitCode = runPath(ctx);
251
- });
252
- if (rawArgs.length === 0) {
253
- program.outputHelp();
254
- return 0;
255
- }
256
- try {
257
- await program.parseAsync(rawArgs, { from: 'user' });
258
- return exitCode;
259
- }
260
- catch (err) {
261
- if (err instanceof CommanderError) {
262
- if (err.code === 'commander.help' ||
263
- err.code === 'commander.helpDisplayed' ||
264
- err.code === 'commander.version') {
265
- return 0;
266
- }
267
- return 64;
268
- }
269
- ctx.formatter.error({ message: err instanceof Error ? err.message : String(err) });
270
- return 70;
271
- }
272
- },
273
- };
274
- //# sourceMappingURL=providers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/commands/providers.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=load.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"load.test.d.ts","sourceRoot":"","sources":["../../src/config/load.test.ts"],"names":[],"mappings":""}
@@ -1,57 +0,0 @@
1
- import { mkdirSync, mkdtempSync, writeFileSync } from 'node:fs';
2
- import { tmpdir } from 'node:os';
3
- import { join } from 'node:path';
4
- import { describe, expect, it } from 'vitest';
5
- import { loadConfig } from './load.js';
6
- describe('loadConfig cascade', () => {
7
- it('returns defaults when nothing is configured', () => {
8
- const home = mkdtempSync(join(tmpdir(), 'namzu-home-'));
9
- const cwd = mkdtempSync(join(tmpdir(), 'namzu-cwd-'));
10
- const cfg = loadConfig({ home, cwd, env: {} });
11
- expect(cfg.format).toBe('text');
12
- expect(cfg.quiet).toBe(false);
13
- });
14
- it('reads user config from ~/.namzu/config.yaml', () => {
15
- const home = mkdtempSync(join(tmpdir(), 'namzu-home-'));
16
- mkdirSync(join(home, '.namzu'), { recursive: true });
17
- writeFileSync(join(home, '.namzu', 'config.yaml'), 'format: yaml\nquiet: true\n');
18
- const cfg = loadConfig({ home, cwd: tmpdir(), env: {} });
19
- expect(cfg.format).toBe('yaml');
20
- expect(cfg.quiet).toBe(true);
21
- });
22
- it('project config overrides user config', () => {
23
- const home = mkdtempSync(join(tmpdir(), 'namzu-home-'));
24
- mkdirSync(join(home, '.namzu'), { recursive: true });
25
- writeFileSync(join(home, '.namzu', 'config.yaml'), 'format: yaml\n');
26
- const cwd = mkdtempSync(join(tmpdir(), 'namzu-cwd-'));
27
- writeFileSync(join(cwd, 'namzu.config.json'), JSON.stringify({ format: 'json' }));
28
- const cfg = loadConfig({ home, cwd, env: {} });
29
- expect(cfg.format).toBe('json');
30
- });
31
- it('env vars override file config', () => {
32
- const home = mkdtempSync(join(tmpdir(), 'namzu-home-'));
33
- mkdirSync(join(home, '.namzu'), { recursive: true });
34
- writeFileSync(join(home, '.namzu', 'config.yaml'), 'format: yaml\n');
35
- const cfg = loadConfig({
36
- home,
37
- cwd: tmpdir(),
38
- env: { NAMZU_FORMAT: 'text' },
39
- });
40
- expect(cfg.format).toBe('text');
41
- });
42
- it('ignores invalid format values silently', () => {
43
- const home = mkdtempSync(join(tmpdir(), 'namzu-home-'));
44
- mkdirSync(join(home, '.namzu'), { recursive: true });
45
- writeFileSync(join(home, '.namzu', 'config.yaml'), 'format: xml\n');
46
- const cfg = loadConfig({ home, cwd: tmpdir(), env: {} });
47
- expect(cfg.format).toBe('text');
48
- });
49
- it('ignores malformed yaml gracefully', () => {
50
- const home = mkdtempSync(join(tmpdir(), 'namzu-home-'));
51
- mkdirSync(join(home, '.namzu'), { recursive: true });
52
- writeFileSync(join(home, '.namzu', 'config.yaml'), ': : : not yaml\n');
53
- const cfg = loadConfig({ home, cwd: tmpdir(), env: {} });
54
- expect(cfg.format).toBe('text');
55
- });
56
- });
57
- //# sourceMappingURL=load.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"load.test.js","sourceRoot":"","sources":["../../src/config/load.test.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- /**
2
- * What the block says about a directory, and what it refuses to claim.
3
- *
4
- * The facts here are read from a real repository created in a temp directory
5
- * rather than from a stubbed git: the two calls this makes are the part that
6
- * can be wrong on a real machine, and a fake `git` proves only that the
7
- * composer agrees with itself.
8
- */
9
- export {};
10
- //# sourceMappingURL=environment.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"environment.test.d.ts","sourceRoot":"","sources":["../../../src/context/__tests__/environment.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -1,84 +0,0 @@
1
- /**
2
- * What the block says about a directory, and what it refuses to claim.
3
- *
4
- * The facts here are read from a real repository created in a temp directory
5
- * rather than from a stubbed git: the two calls this makes are the part that
6
- * can be wrong on a real machine, and a fake `git` proves only that the
7
- * composer agrees with itself.
8
- */
9
- import { execFileSync } from 'node:child_process';
10
- import { mkdirSync, mkdtempSync, rmSync } from 'node:fs';
11
- import { tmpdir } from 'node:os';
12
- import { join } from 'node:path';
13
- import { afterEach, beforeEach, describe, expect, it } from 'vitest';
14
- import { composeEnvironmentPrompt, localIsoDate, readEnvironmentFacts, } from '../environment.js';
15
- let root;
16
- beforeEach(() => {
17
- root = mkdtempSync(join(tmpdir(), 'namzu-env-'));
18
- });
19
- afterEach(() => {
20
- rmSync(root, { recursive: true, force: true });
21
- });
22
- function initRepo(dir, branch) {
23
- mkdirSync(dir, { recursive: true });
24
- execFileSync('git', ['init', '--quiet'], { cwd: dir });
25
- // `checkout -b` on an unborn HEAD, so no commit and no identity config are
26
- // needed — and it is the case `rev-parse --abbrev-ref HEAD` cannot answer,
27
- // which is why the reader uses `symbolic-ref`.
28
- execFileSync('git', ['checkout', '-q', '-b', branch], { cwd: dir });
29
- }
30
- describe('the date', () => {
31
- it('is the local calendar date, not the UTC one', () => {
32
- // A machine behind UTC would otherwise be told it is tomorrow, and would
33
- // write tomorrow's date into a changelog — the exact mistake this block
34
- // exists to prevent, made by the block.
35
- const lateEvening = new Date(2026, 7, 6, 23, 30, 0);
36
- expect(localIsoDate(lateEvening)).toBe('2026-08-06');
37
- });
38
- it('zero-pads a single-digit month and day', () => {
39
- expect(localIsoDate(new Date(2026, 0, 5))).toBe('2026-01-05');
40
- });
41
- });
42
- describe('the repository', () => {
43
- it('reports the branch that is checked out', async () => {
44
- const repo = join(root, 'repo');
45
- initRepo(repo, 'feature/parser');
46
- const facts = await readEnvironmentFacts(repo);
47
- expect(facts.isRepository).toBe(true);
48
- expect(facts.branch).toBe('feature/parser');
49
- expect(composeEnvironmentPrompt(facts)).toContain('feature/parser');
50
- });
51
- it('says a directory is not a repository rather than staying quiet', async () => {
52
- const plain = join(root, 'plain');
53
- mkdirSync(plain);
54
- const facts = await readEnvironmentFacts(plain);
55
- expect(facts.isRepository).toBe(false);
56
- expect(facts.branch).toBeNull();
57
- expect(composeEnvironmentPrompt(facts)).toContain('not a git repository');
58
- });
59
- it('distinguishes a detached HEAD from not being a repository at all', async () => {
60
- // The two collapse into one if the reader only asks `symbolic-ref`, and
61
- // the difference is load-bearing: a commit made on a detached HEAD is not
62
- // reachable from any branch, which an agent about to commit should be
63
- // told.
64
- const facts = { today: '2026-08-06', branch: 'detached', isRepository: true };
65
- const prompt = composeEnvironmentPrompt(facts);
66
- expect(prompt).toContain('detached HEAD');
67
- expect(prompt).toContain('not reachable from any branch');
68
- expect(prompt).not.toContain('not a git repository');
69
- });
70
- });
71
- describe('what the block does not claim', () => {
72
- it('says nothing about uncommitted changes', async () => {
73
- // Deliberate. This text is the CACHED prefix of every request, and a
74
- // dirty-file count changes whenever the agent saves a file — carrying it
75
- // would re-key the cache on essentially every turn to say something
76
- // `git status` answers on demand. If a reader adds it, this test is what
77
- // tells them the cost.
78
- const repo = join(root, 'repo');
79
- initRepo(repo, 'main');
80
- const prompt = composeEnvironmentPrompt(await readEnvironmentFacts(repo));
81
- expect(prompt).not.toMatch(/uncommitted|modified file|dirty/i);
82
- });
83
- });
84
- //# sourceMappingURL=environment.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"environment.test.js","sourceRoot":"","sources":["../../../src/context/__tests__/environment.test.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- /**
2
- * The walk, the boundary, the order and the budget.
3
- *
4
- * These are unit tests on the loader and they prove nothing about whether the
5
- * agent receives what the loader returns — that is
6
- * `src/__tests__/project-instructions-reach-the-turn.test.ts`, and it is the
7
- * one that fails if the wiring is deleted. This file exists for the properties
8
- * the front-door test cannot isolate: where the search STOPS, and what the
9
- * block says when a file was cut.
10
- */
11
- export {};
12
- //# sourceMappingURL=project.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project.test.d.ts","sourceRoot":"","sources":["../../../src/context/__tests__/project.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}