@namzu/cli 0.5.1 → 0.7.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 (218) hide show
  1. package/dist/__tests__/permission-rules-reach-the-turn.test.d.ts +31 -0
  2. package/dist/__tests__/permission-rules-reach-the-turn.test.d.ts.map +1 -0
  3. package/dist/__tests__/permission-rules-reach-the-turn.test.js +132 -0
  4. package/dist/__tests__/permission-rules-reach-the-turn.test.js.map +1 -0
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +16 -3
  7. package/dist/cli.js.map +1 -1
  8. package/dist/cli.test.js +7 -1
  9. package/dist/cli.test.js.map +1 -1
  10. package/dist/commands/__tests__/resume.test.d.ts +15 -0
  11. package/dist/commands/__tests__/resume.test.d.ts.map +1 -0
  12. package/dist/commands/__tests__/resume.test.js +116 -0
  13. package/dist/commands/__tests__/resume.test.js.map +1 -0
  14. package/dist/commands/__tests__/run-flags.test.d.ts +11 -0
  15. package/dist/commands/__tests__/run-flags.test.d.ts.map +1 -0
  16. package/dist/commands/__tests__/run-flags.test.js +189 -0
  17. package/dist/commands/__tests__/run-flags.test.js.map +1 -0
  18. package/dist/commands/__tests__/run-stream-flags.test.js +160 -11
  19. package/dist/commands/__tests__/run-stream-flags.test.js.map +1 -1
  20. package/dist/commands/doctor.js.map +1 -1
  21. package/dist/commands/resume.d.ts +60 -0
  22. package/dist/commands/resume.d.ts.map +1 -0
  23. package/dist/commands/resume.js +107 -0
  24. package/dist/commands/resume.js.map +1 -0
  25. package/dist/commands/run-flags.d.ts +76 -0
  26. package/dist/commands/run-flags.d.ts.map +1 -0
  27. package/dist/commands/run-flags.js +163 -0
  28. package/dist/commands/run-flags.js.map +1 -0
  29. package/dist/commands/run-stream.d.ts +3 -39
  30. package/dist/commands/run-stream.d.ts.map +1 -1
  31. package/dist/commands/run-stream.js +74 -101
  32. package/dist/commands/run-stream.js.map +1 -1
  33. package/dist/commands/run.d.ts +25 -0
  34. package/dist/commands/run.d.ts.map +1 -1
  35. package/dist/commands/run.js +189 -16
  36. package/dist/commands/run.js.map +1 -1
  37. package/dist/commands/stubs.d.ts +10 -0
  38. package/dist/commands/stubs.d.ts.map +1 -1
  39. package/dist/commands/stubs.js +12 -2
  40. package/dist/commands/stubs.js.map +1 -1
  41. package/dist/config/load.d.ts.map +1 -1
  42. package/dist/config/load.js +20 -4
  43. package/dist/config/load.js.map +1 -1
  44. package/dist/config/schema.d.ts +9 -12
  45. package/dist/config/schema.d.ts.map +1 -1
  46. package/dist/config/schema.js.map +1 -1
  47. package/dist/doctor/checks/credentials.d.ts +20 -0
  48. package/dist/doctor/checks/credentials.d.ts.map +1 -0
  49. package/dist/doctor/checks/credentials.js +58 -0
  50. package/dist/doctor/checks/credentials.js.map +1 -0
  51. package/dist/doctor/checks/credentials.test.d.ts +10 -0
  52. package/dist/doctor/checks/credentials.test.d.ts.map +1 -0
  53. package/dist/doctor/checks/credentials.test.js +47 -0
  54. package/dist/doctor/checks/credentials.test.js.map +1 -0
  55. package/dist/doctor/checks/index.d.ts +2 -1
  56. package/dist/doctor/checks/index.d.ts.map +1 -1
  57. package/dist/doctor/checks/index.js +3 -1
  58. package/dist/doctor/checks/index.js.map +1 -1
  59. package/dist/index.d.ts +1 -1
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +1 -1
  62. package/dist/index.js.map +1 -1
  63. package/dist/integrations/providers/discover.d.ts +3 -8
  64. package/dist/integrations/providers/discover.d.ts.map +1 -1
  65. package/dist/integrations/providers/discover.js +2 -12
  66. package/dist/integrations/providers/discover.js.map +1 -1
  67. package/dist/integrations/providers/discover.test.js +1 -28
  68. package/dist/integrations/providers/discover.test.js.map +1 -1
  69. package/dist/integrations/providers/index.d.ts +0 -1
  70. package/dist/integrations/providers/index.d.ts.map +1 -1
  71. package/dist/integrations/providers/index.js +0 -1
  72. package/dist/integrations/providers/index.js.map +1 -1
  73. package/dist/integrations/providers/oauth.d.ts +1 -1
  74. package/dist/integrations/providers/oauth.js +1 -1
  75. package/dist/integrations/providers/preferences.d.ts +2 -2
  76. package/dist/integrations/providers/preferences.js +2 -2
  77. package/dist/integrations/sessions/store.js +1 -1
  78. package/dist/integrations/sessions/store.js.map +1 -1
  79. package/dist/integrations/updates.d.ts +4 -12
  80. package/dist/integrations/updates.d.ts.map +1 -1
  81. package/dist/integrations/updates.js +6 -53
  82. package/dist/integrations/updates.js.map +1 -1
  83. package/dist/permissions/__tests__/mode.test.d.ts +10 -0
  84. package/dist/permissions/__tests__/mode.test.d.ts.map +1 -0
  85. package/dist/permissions/__tests__/mode.test.js +115 -0
  86. package/dist/permissions/__tests__/mode.test.js.map +1 -0
  87. package/dist/permissions/__tests__/rules.test.d.ts +10 -0
  88. package/dist/permissions/__tests__/rules.test.d.ts.map +1 -0
  89. package/dist/permissions/__tests__/rules.test.js +196 -0
  90. package/dist/permissions/__tests__/rules.test.js.map +1 -0
  91. package/dist/permissions/mode.d.ts +64 -0
  92. package/dist/permissions/mode.d.ts.map +1 -0
  93. package/dist/permissions/mode.js +32 -0
  94. package/dist/permissions/mode.js.map +1 -0
  95. package/dist/permissions/rules.d.ts +105 -0
  96. package/dist/permissions/rules.d.ts.map +1 -0
  97. package/dist/permissions/rules.js +163 -0
  98. package/dist/permissions/rules.js.map +1 -0
  99. package/dist/tui/App.d.ts.map +1 -1
  100. package/dist/tui/App.js +29 -133
  101. package/dist/tui/App.js.map +1 -1
  102. package/dist/tui/Picker.d.ts +4 -4
  103. package/dist/tui/Picker.d.ts.map +1 -1
  104. package/dist/tui/Picker.js +6 -8
  105. package/dist/tui/Picker.js.map +1 -1
  106. package/dist/tui/__tests__/deferred-tool-discovery.test.d.ts +24 -0
  107. package/dist/tui/__tests__/deferred-tool-discovery.test.d.ts.map +1 -0
  108. package/dist/tui/__tests__/deferred-tool-discovery.test.js +111 -0
  109. package/dist/tui/__tests__/deferred-tool-discovery.test.js.map +1 -0
  110. package/dist/tui/__tests__/to-agent-event.test.js +88 -0
  111. package/dist/tui/__tests__/to-agent-event.test.js.map +1 -1
  112. package/dist/tui/__tests__/working-directory.test.d.ts +13 -0
  113. package/dist/tui/__tests__/working-directory.test.d.ts.map +1 -0
  114. package/dist/tui/__tests__/working-directory.test.js +109 -0
  115. package/dist/tui/__tests__/working-directory.test.js.map +1 -0
  116. package/dist/tui/agent.d.ts +46 -5
  117. package/dist/tui/agent.d.ts.map +1 -1
  118. package/dist/tui/agent.js +140 -43
  119. package/dist/tui/agent.js.map +1 -1
  120. package/dist/tui/slashCommands.d.ts +0 -6
  121. package/dist/tui/slashCommands.d.ts.map +1 -1
  122. package/dist/tui/slashCommands.js +1 -21
  123. package/dist/tui/slashCommands.js.map +1 -1
  124. package/dist/tui/types.d.ts +12 -0
  125. package/dist/tui/types.d.ts.map +1 -1
  126. package/package.json +4 -5
  127. package/dist/commands/tools.d.ts +0 -16
  128. package/dist/commands/tools.d.ts.map +0 -1
  129. package/dist/commands/tools.js +0 -161
  130. package/dist/commands/tools.js.map +0 -1
  131. package/dist/integrations/clawtool/agents.d.ts +0 -31
  132. package/dist/integrations/clawtool/agents.d.ts.map +0 -1
  133. package/dist/integrations/clawtool/agents.js +0 -30
  134. package/dist/integrations/clawtool/agents.js.map +0 -1
  135. package/dist/integrations/clawtool/agents.test.d.ts +0 -2
  136. package/dist/integrations/clawtool/agents.test.d.ts.map +0 -1
  137. package/dist/integrations/clawtool/agents.test.js +0 -79
  138. package/dist/integrations/clawtool/agents.test.js.map +0 -1
  139. package/dist/integrations/clawtool/auth.d.ts +0 -26
  140. package/dist/integrations/clawtool/auth.d.ts.map +0 -1
  141. package/dist/integrations/clawtool/auth.js +0 -56
  142. package/dist/integrations/clawtool/auth.js.map +0 -1
  143. package/dist/integrations/clawtool/auth.test.d.ts +0 -2
  144. package/dist/integrations/clawtool/auth.test.d.ts.map +0 -1
  145. package/dist/integrations/clawtool/auth.test.js +0 -40
  146. package/dist/integrations/clawtool/auth.test.js.map +0 -1
  147. package/dist/integrations/clawtool/binary.d.ts +0 -25
  148. package/dist/integrations/clawtool/binary.d.ts.map +0 -1
  149. package/dist/integrations/clawtool/binary.js +0 -50
  150. package/dist/integrations/clawtool/binary.js.map +0 -1
  151. package/dist/integrations/clawtool/binary.test.d.ts +0 -2
  152. package/dist/integrations/clawtool/binary.test.d.ts.map +0 -1
  153. package/dist/integrations/clawtool/binary.test.js +0 -50
  154. package/dist/integrations/clawtool/binary.test.js.map +0 -1
  155. package/dist/integrations/clawtool/daemon.d.ts +0 -37
  156. package/dist/integrations/clawtool/daemon.d.ts.map +0 -1
  157. package/dist/integrations/clawtool/daemon.js +0 -109
  158. package/dist/integrations/clawtool/daemon.js.map +0 -1
  159. package/dist/integrations/clawtool/daemon.test.d.ts +0 -11
  160. package/dist/integrations/clawtool/daemon.test.d.ts.map +0 -1
  161. package/dist/integrations/clawtool/daemon.test.js +0 -118
  162. package/dist/integrations/clawtool/daemon.test.js.map +0 -1
  163. package/dist/integrations/clawtool/dispatch.d.ts +0 -33
  164. package/dist/integrations/clawtool/dispatch.d.ts.map +0 -1
  165. package/dist/integrations/clawtool/dispatch.js +0 -155
  166. package/dist/integrations/clawtool/dispatch.js.map +0 -1
  167. package/dist/integrations/clawtool/dispatch.test.d.ts +0 -2
  168. package/dist/integrations/clawtool/dispatch.test.d.ts.map +0 -1
  169. package/dist/integrations/clawtool/dispatch.test.js +0 -138
  170. package/dist/integrations/clawtool/dispatch.test.js.map +0 -1
  171. package/dist/integrations/clawtool/index.d.ts +0 -11
  172. package/dist/integrations/clawtool/index.d.ts.map +0 -1
  173. package/dist/integrations/clawtool/index.js +0 -10
  174. package/dist/integrations/clawtool/index.js.map +0 -1
  175. package/dist/integrations/clawtool/mcp.d.ts +0 -51
  176. package/dist/integrations/clawtool/mcp.d.ts.map +0 -1
  177. package/dist/integrations/clawtool/mcp.js +0 -174
  178. package/dist/integrations/clawtool/mcp.js.map +0 -1
  179. package/dist/integrations/clawtool/mcp.test.d.ts +0 -2
  180. package/dist/integrations/clawtool/mcp.test.d.ts.map +0 -1
  181. package/dist/integrations/clawtool/mcp.test.js +0 -126
  182. package/dist/integrations/clawtool/mcp.test.js.map +0 -1
  183. package/dist/integrations/clawtool/paths.d.ts +0 -8
  184. package/dist/integrations/clawtool/paths.d.ts.map +0 -1
  185. package/dist/integrations/clawtool/paths.js +0 -19
  186. package/dist/integrations/clawtool/paths.js.map +0 -1
  187. package/dist/integrations/clawtool/peers.d.ts +0 -67
  188. package/dist/integrations/clawtool/peers.d.ts.map +0 -1
  189. package/dist/integrations/clawtool/peers.js +0 -150
  190. package/dist/integrations/clawtool/peers.js.map +0 -1
  191. package/dist/integrations/clawtool/plugin.d.ts +0 -42
  192. package/dist/integrations/clawtool/plugin.d.ts.map +0 -1
  193. package/dist/integrations/clawtool/plugin.js +0 -38
  194. package/dist/integrations/clawtool/plugin.js.map +0 -1
  195. package/dist/integrations/clawtool/state.d.ts +0 -11
  196. package/dist/integrations/clawtool/state.d.ts.map +0 -1
  197. package/dist/integrations/clawtool/state.js +0 -41
  198. package/dist/integrations/clawtool/state.js.map +0 -1
  199. package/dist/integrations/clawtool/state.test.d.ts +0 -2
  200. package/dist/integrations/clawtool/state.test.d.ts.map +0 -1
  201. package/dist/integrations/clawtool/state.test.js +0 -38
  202. package/dist/integrations/clawtool/state.test.js.map +0 -1
  203. package/dist/integrations/clawtool/tooling.d.ts +0 -52
  204. package/dist/integrations/clawtool/tooling.d.ts.map +0 -1
  205. package/dist/integrations/clawtool/tooling.js +0 -91
  206. package/dist/integrations/clawtool/tooling.js.map +0 -1
  207. package/dist/integrations/clawtool/tooling.test.d.ts +0 -2
  208. package/dist/integrations/clawtool/tooling.test.d.ts.map +0 -1
  209. package/dist/integrations/clawtool/tooling.test.js +0 -58
  210. package/dist/integrations/clawtool/tooling.test.js.map +0 -1
  211. package/dist/integrations/clawtool/types.d.ts +0 -41
  212. package/dist/integrations/clawtool/types.d.ts.map +0 -1
  213. package/dist/integrations/clawtool/types.js +0 -9
  214. package/dist/integrations/clawtool/types.js.map +0 -1
  215. package/dist/integrations/providers/secrets.d.ts +0 -37
  216. package/dist/integrations/providers/secrets.d.ts.map +0 -1
  217. package/dist/integrations/providers/secrets.js +0 -69
  218. package/dist/integrations/providers/secrets.js.map +0 -1
@@ -0,0 +1,31 @@
1
+ /**
2
+ * An operator's `permissions` config reaches the turn that enforces it.
3
+ *
4
+ * There was no test that started from a real config FILE and ended at a real
5
+ * turn, and that gap is the whole reason this shipped: the chain is broken in
6
+ * two independent places, in series, and every existing test sits on one side
7
+ * or the other of a break.
8
+ *
9
+ * config file → loadConfig() → compilePermissions() → createAgentSession()
10
+ * ↑ break 1 → query()
11
+ * ↑ break 2
12
+ *
13
+ * - **Break 1.** `sanitize()` in `config/load.ts` copies exactly `format` and
14
+ * `quiet` off a parsed config, so `permissions` is dropped from every file
15
+ * namzu reads. `compilePermissions(ctx.config.permissions)` in `run.ts` and
16
+ * `run-stream.ts` is therefore always compiling `undefined`.
17
+ * - **Break 2.** `runTurn` destructures `rules` and passes the module-level
18
+ * `VERIFICATION_GATE` — whose `rules` is a hardcoded `[]` — to `query()`.
19
+ * So even a caller that hands rules in explicitly has them dropped.
20
+ *
21
+ * Either break alone is enough to make a configured rule do nothing, which is
22
+ * why this test is end-to-end: fixing one and testing that one would report
23
+ * success while the feature stayed broken.
24
+ *
25
+ * The failure is silent by construction. `ask` compiles to no rule because the
26
+ * gate's fallback is already to ask, so a dropped `deny` looks exactly like a
27
+ * config that was honoured — the tool prompts instead of refusing, and a user
28
+ * who clicks approve never learns their `deny` was ignored.
29
+ */
30
+ export {};
31
+ //# sourceMappingURL=permission-rules-reach-the-turn.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-rules-reach-the-turn.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/permission-rules-reach-the-turn.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * An operator's `permissions` config reaches the turn that enforces it.
3
+ *
4
+ * There was no test that started from a real config FILE and ended at a real
5
+ * turn, and that gap is the whole reason this shipped: the chain is broken in
6
+ * two independent places, in series, and every existing test sits on one side
7
+ * or the other of a break.
8
+ *
9
+ * config file → loadConfig() → compilePermissions() → createAgentSession()
10
+ * ↑ break 1 → query()
11
+ * ↑ break 2
12
+ *
13
+ * - **Break 1.** `sanitize()` in `config/load.ts` copies exactly `format` and
14
+ * `quiet` off a parsed config, so `permissions` is dropped from every file
15
+ * namzu reads. `compilePermissions(ctx.config.permissions)` in `run.ts` and
16
+ * `run-stream.ts` is therefore always compiling `undefined`.
17
+ * - **Break 2.** `runTurn` destructures `rules` and passes the module-level
18
+ * `VERIFICATION_GATE` — whose `rules` is a hardcoded `[]` — to `query()`.
19
+ * So even a caller that hands rules in explicitly has them dropped.
20
+ *
21
+ * Either break alone is enough to make a configured rule do nothing, which is
22
+ * why this test is end-to-end: fixing one and testing that one would report
23
+ * success while the feature stayed broken.
24
+ *
25
+ * The failure is silent by construction. `ask` compiles to no rule because the
26
+ * gate's fallback is already to ask, so a dropped `deny` looks exactly like a
27
+ * config that was honoured — the tool prompts instead of refusing, and a user
28
+ * who clicks approve never learns their `deny` was ignored.
29
+ */
30
+ import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
31
+ import { tmpdir } from 'node:os';
32
+ import { join } from 'node:path';
33
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
34
+ import { loadConfig } from '../config/load.js';
35
+ import { compilePermissions } from '../permissions/rules.js';
36
+ const queryCalls = [];
37
+ vi.mock('@namzu/sdk', async (importOriginal) => {
38
+ const actual = await importOriginal();
39
+ return {
40
+ ...actual,
41
+ query: (params) => {
42
+ queryCalls.push(params);
43
+ return (async function* () { })();
44
+ },
45
+ };
46
+ });
47
+ let workDir;
48
+ beforeEach(() => {
49
+ queryCalls.length = 0;
50
+ workDir = mkdtempSync(join(tmpdir(), 'namzu-perms-'));
51
+ });
52
+ afterEach(() => {
53
+ rmSync(workDir, { recursive: true, force: true });
54
+ });
55
+ /** A real config file, in the real project-config location and format. */
56
+ function writeProjectConfig(permissions) {
57
+ writeFileSync(join(workDir, 'namzu.config.json'), JSON.stringify({ permissions }, null, 2));
58
+ }
59
+ const prefs = {
60
+ version: 2,
61
+ provider: 'anthropic',
62
+ subagents: { active: [] },
63
+ };
64
+ function detectedAnthropic() {
65
+ return [
66
+ {
67
+ entry: {
68
+ id: 'anthropic',
69
+ label: 'Anthropic',
70
+ defaultModel: 'claude-sonnet-4-5',
71
+ requiresApiKey: true,
72
+ envVars: ['ANTHROPIC_API_KEY'],
73
+ },
74
+ source: 'env',
75
+ apiKey: 'sk-ant-not-a-real-key',
76
+ alternatives: [],
77
+ },
78
+ ];
79
+ }
80
+ describe('a permissions rule written in a config file', () => {
81
+ it('survives loadConfig', () => {
82
+ writeProjectConfig({ bash: 'deny' });
83
+ const cfg = loadConfig({ cwd: workDir, home: workDir, env: {} });
84
+ expect(cfg.permissions, 'the loader dropped the permissions table off a config file it parsed').toBeDefined();
85
+ expect(cfg.permissions?.bash).toBe('deny');
86
+ });
87
+ it('reaches the gate of the turn that has to enforce it', async () => {
88
+ writeProjectConfig({ bash: 'deny' });
89
+ // Exactly what `run.ts` does, from the same starting point a user has.
90
+ const cfg = loadConfig({ cwd: workDir, home: workDir, env: {} });
91
+ const compiled = compilePermissions(cfg.permissions);
92
+ const { createAgentSession } = await import('../tui/agent.js');
93
+ const session = await createAgentSession(prefs, detectedAnthropic(), {
94
+ cwd: workDir,
95
+ rules: compiled.rules,
96
+ });
97
+ for await (const _ of session.send([{ role: 'user', content: 'hi', timestamp: 0 }])) {
98
+ // drain
99
+ }
100
+ expect(queryCalls.length, 'the turn must have reached query()').toBe(1);
101
+ const gate = queryCalls[0]?.verificationGate;
102
+ expect(gate?.rules).toEqual([{ type: 'deny_by_name', toolNames: ['bash'] }]);
103
+ });
104
+ it('is not silently replaced by the empty default when handed in directly', async () => {
105
+ // DO NOT DELETE THIS AS REDUNDANT WITH THE TEST ABOVE. It looks like a
106
+ // subset of it and it is the opposite: it is the only test that isolates
107
+ // the turn path from the loader.
108
+ //
109
+ // There were two faults, in series. Rules were dropped by the loader AND
110
+ // again by the turn, and either one alone makes a configured rule do
111
+ // nothing. A suite with only the end-to-end test above would go green the
112
+ // moment ONE of them was fixed — reporting success on a feature that was
113
+ // still dead — and a suite with only a loader test would never have looked
114
+ // at the turn at all.
115
+ //
116
+ // So: no config file here, rules handed straight to the session. When this
117
+ // fails and the end-to-end one fails, the turn drops them. When only the
118
+ // end-to-end one fails, the loader is the sole fault. The pair of results
119
+ // is the diagnosis; neither test gives it alone.
120
+ const { createAgentSession } = await import('../tui/agent.js');
121
+ const session = await createAgentSession(prefs, detectedAnthropic(), {
122
+ cwd: workDir,
123
+ rules: [{ type: 'deny_by_name', toolNames: ['bash'] }],
124
+ });
125
+ for await (const _ of session.send([{ role: 'user', content: 'hi', timestamp: 0 }])) {
126
+ // drain
127
+ }
128
+ const gate = queryCalls[0]?.verificationGate;
129
+ expect(gate?.rules).toEqual([{ type: 'deny_by_name', toolNames: ['bash'] }]);
130
+ });
131
+ });
132
+ //# sourceMappingURL=permission-rules-reach-the-turn.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-rules-reach-the-turn.test.js","sourceRoot":"","sources":["../../src/__tests__/permission-rules-reach-the-turn.test.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgDH,MAAM,WAAW,aAAa;IAC7B,iFAAiF;IACjF,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAChC;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CA2FjE"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgDH,MAAM,WAAW,aAAa;IAC7B,iFAAiF;IACjF,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAChC;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAwGjE"}
package/dist/cli.js CHANGED
@@ -17,10 +17,10 @@ import { registerAll } from './commands/registry.js';
17
17
  import { historyCommand, providersJSONCommand, runStreamCommand, skillsJSONCommand, } from './commands/run-stream.js';
18
18
  import { runCommand } from './commands/run.js';
19
19
  import { stubCommands } from './commands/stubs.js';
20
- import { toolsCommand } from './commands/tools.js';
21
20
  import { loadConfig } from './config/load.js';
22
21
  import { EXIT_INTERNAL_ERROR } from './exit-codes.js';
23
22
  import { createFormatter, isFormatName } from './output/index.js';
23
+ import { compilePermissions } from './permissions/rules.js';
24
24
  /** sysexits EX_USAGE — command-line argument error. */
25
25
  const EX_USAGE = 64;
26
26
  // Read the version straight from the package manifest so the `--version`
@@ -75,7 +75,6 @@ export async function runCli(opts) {
75
75
  };
76
76
  registerAll(program, [
77
77
  doctorCommand,
78
- toolsCommand,
79
78
  providersCommand,
80
79
  runCommand,
81
80
  evalCommand,
@@ -96,8 +95,22 @@ export async function runCli(opts) {
96
95
  if (process.stdout.isTTY) {
97
96
  const launchOpts = program.opts();
98
97
  const skipPermissions = Boolean(launchOpts.dangerouslySkipPermissions || launchOpts.yolo);
98
+ // The same three lines `run` and `run-stream` use. The TUI compiled
99
+ // nothing at all, so a `permissions` table in a config file did nothing
100
+ // in the mode most people actually use.
101
+ const tuiCtx = getContext();
102
+ const permissions = compilePermissions(tuiCtx.config.permissions);
103
+ for (const d of permissions.diagnostics) {
104
+ const where = d.pattern ? `permissions.${d.tool}."${d.pattern}"` : `permissions.${d.tool}`;
105
+ tuiCtx.formatter.error({ message: `${where}: ${d.message}` });
106
+ }
99
107
  const { launchTui } = await import('./tui/index.js');
100
- await launchTui({ cwd: process.cwd(), version: CLI_VERSION, skipPermissions });
108
+ await launchTui({
109
+ cwd: process.cwd(),
110
+ version: CLI_VERSION,
111
+ skipPermissions,
112
+ rules: permissions.rules,
113
+ });
101
114
  const code = await Promise.resolve(0);
102
115
  setExitCode(code);
103
116
  return;
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/cli.test.js CHANGED
@@ -30,10 +30,16 @@ describe('runCli', () => {
30
30
  // Commander prints help to stdout.
31
31
  expect(stdout).toContain('namzu');
32
32
  expect(stdout).toContain('doctor');
33
- expect(stdout).toContain('tools');
34
33
  expect(stdout).toContain('providers');
35
34
  expect(stdout).toContain('skills');
36
35
  expect(stdout).toContain('serve');
36
+ // `tools` was asserted here until the peer-daemon removal deleted the
37
+ // command. The assertion kept passing, because "tools" also occurs in
38
+ // the --dangerously-skip-permissions description ("Run tools without
39
+ // asking…") — a substring match on whole help output cannot tell a
40
+ // command from a word in a sentence. Anchored to the command column so
41
+ // it means what it says.
42
+ expect(stdout).not.toMatch(/^\s+tools\b/m);
37
43
  // `chat` was a misread of the product shape — the TUI IS the chat,
38
44
  // not a separate subcommand. `chat` must not appear in help.
39
45
  expect(stdout).not.toContain('chat');
@@ -1 +1 @@
1
- {"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../src/cli.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../src/cli.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Resuming a conversation, and — mostly — refusing to.
3
+ *
4
+ * The rule under test: when the named conversation cannot be resumed, this
5
+ * REFUSES and names the cause. It never falls back to a fresh session, and it
6
+ * never resumes with a partial history.
7
+ *
8
+ * Both fallbacks would be invisible from outside. The user asked for a specific
9
+ * conversation, would get something that looks like one, and would find out
10
+ * several turns later having already acted on it. A half-context is the worse
11
+ * of the two: it is not a degraded context, it is a different context that lies
12
+ * about being complete.
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=resume.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/resume.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Resuming a conversation, and — mostly — refusing to.
3
+ *
4
+ * The rule under test: when the named conversation cannot be resumed, this
5
+ * REFUSES and names the cause. It never falls back to a fresh session, and it
6
+ * never resumes with a partial history.
7
+ *
8
+ * Both fallbacks would be invisible from outside. The user asked for a specific
9
+ * conversation, would get something that looks like one, and would find out
10
+ * several turns later having already acted on it. A half-context is the worse
11
+ * of the two: it is not a degraded context, it is a different context that lies
12
+ * about being complete.
13
+ */
14
+ import { describe, expect, it, vi } from 'vitest';
15
+ import { listRecent, loadConversation } from '../../integrations/sessions/store.js';
16
+ import { resolveResume } from '../resume.js';
17
+ vi.mock('../../integrations/sessions/store.js', () => ({
18
+ listRecent: vi.fn(),
19
+ loadConversation: vi.fn(),
20
+ }));
21
+ const sessions = {};
22
+ const CWD = '/projects/foo';
23
+ function recent(...ids) {
24
+ vi.mocked(listRecent).mockResolvedValue(ids.map((id, i) => ({
25
+ id: id,
26
+ title: id,
27
+ updatedAt: `2026-08-0${i + 1}T00:00:00Z`,
28
+ count: 2,
29
+ })));
30
+ }
31
+ describe('asking for nothing', () => {
32
+ it('is a fresh run, not an error', async () => {
33
+ const out = await resolveResume(sessions, { continueLast: false, sessionId: null }, CWD);
34
+ expect(out.kind).toBe('fresh');
35
+ });
36
+ });
37
+ describe('--continue', () => {
38
+ it('takes the most recent conversation', async () => {
39
+ recent('ses_new', 'ses_old');
40
+ vi.mocked(loadConversation).mockResolvedValue([
41
+ { role: 'user', content: 'hi', timestamp: 0 },
42
+ ]);
43
+ const out = await resolveResume(sessions, { continueLast: true, sessionId: null }, CWD);
44
+ expect(out).toMatchObject({ kind: 'resumed', sessionId: 'ses_new' });
45
+ });
46
+ it('refuses with its OWN sentence when there is nothing here', async () => {
47
+ // Not "cannot resume" — the cause is different and so is the fix. Someone
48
+ // with no conversation here is usually standing in the wrong directory,
49
+ // so the message has to point at --cwd rather than at a broken store.
50
+ recent();
51
+ const out = await resolveResume(sessions, { continueLast: true, sessionId: null }, CWD);
52
+ expect(out.kind).toBe('error');
53
+ expect(out).toMatchObject({ message: expect.stringContaining('no previous conversation') });
54
+ expect(out).toMatchObject({ message: expect.stringContaining(CWD) });
55
+ expect(out).toMatchObject({ message: expect.stringContaining('--cwd') });
56
+ });
57
+ });
58
+ describe('--resume <id>', () => {
59
+ it('takes the conversation it was given, not the most recent', async () => {
60
+ recent('ses_new', 'ses_wanted');
61
+ vi.mocked(loadConversation).mockResolvedValue([
62
+ { role: 'user', content: 'hi', timestamp: 0 },
63
+ ]);
64
+ const out = await resolveResume(sessions, { continueLast: false, sessionId: 'ses_wanted' }, CWD);
65
+ expect(out).toMatchObject({ kind: 'resumed', sessionId: 'ses_wanted' });
66
+ });
67
+ it('refuses an id that is not here, and says how many are', async () => {
68
+ // THE case. Starting fresh would hand back something indistinguishable
69
+ // from what was asked for.
70
+ recent('ses_a', 'ses_b');
71
+ const out = await resolveResume(sessions, { continueLast: false, sessionId: 'ses_gone' }, CWD);
72
+ expect(out.kind).toBe('error');
73
+ expect(out).toMatchObject({ message: expect.stringContaining('ses_gone') });
74
+ expect(out).toMatchObject({ message: expect.stringContaining('2 others') });
75
+ });
76
+ it('points at --cwd when the directory has nothing at all', async () => {
77
+ recent();
78
+ const out = await resolveResume(sessions, { continueLast: false, sessionId: 'ses_gone' }, CWD);
79
+ expect(out).toMatchObject({ message: expect.stringContaining('--cwd') });
80
+ });
81
+ it('refuses rather than resuming with a partial history', async () => {
82
+ // The half-context case. Carrying on with an empty transcript would look
83
+ // exactly like a resumed session to the user and to the model.
84
+ recent('ses_a');
85
+ vi.mocked(loadConversation).mockRejectedValue(new Error('transcript is corrupt'));
86
+ const out = await resolveResume(sessions, { continueLast: false, sessionId: 'ses_a' }, CWD);
87
+ expect(out.kind).toBe('error');
88
+ expect(out).toMatchObject({ message: expect.stringContaining('transcript is corrupt') });
89
+ });
90
+ it('refuses an empty transcript rather than calling it resumed', async () => {
91
+ recent('ses_a');
92
+ vi.mocked(loadConversation).mockResolvedValue([]);
93
+ const out = await resolveResume(sessions, { continueLast: false, sessionId: 'ses_a' }, CWD);
94
+ expect(out.kind).toBe('error');
95
+ expect(out).toMatchObject({ message: expect.stringContaining('no messages') });
96
+ });
97
+ });
98
+ describe('the two flags together', () => {
99
+ it('refuses, because they name different conversations', async () => {
100
+ const out = await resolveResume(sessions, { continueLast: true, sessionId: 'ses_a' }, CWD);
101
+ expect(out.kind).toBe('error');
102
+ expect(out).toMatchObject({ message: expect.stringContaining('Pass one') });
103
+ });
104
+ });
105
+ describe('no store at all', () => {
106
+ it('refuses instead of quietly starting fresh', async () => {
107
+ const out = await resolveResume(null, { continueLast: true, sessionId: null }, CWD);
108
+ expect(out.kind).toBe('error');
109
+ expect(out).toMatchObject({ message: expect.stringContaining('nothing to resume') });
110
+ });
111
+ it('still runs fresh when nothing was asked for', async () => {
112
+ const out = await resolveResume(null, { continueLast: false, sessionId: null }, CWD);
113
+ expect(out.kind).toBe('fresh');
114
+ });
115
+ });
116
+ //# sourceMappingURL=resume.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/resume.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * `namzu run` accepts what `namzu run-stream` accepts.
3
+ *
4
+ * The two are the same headless one-shot and differ only in how they print, so
5
+ * an option one takes and the other reads aloud to the model is a defect, not a
6
+ * design. `run` joined every argument into the prompt, which is the exact shape
7
+ * already fixed once in the streaming sibling — `--cwd` was documented there,
8
+ * unparsed, and silently ran in the process's own directory.
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=run-flags.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-flags.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/run-flags.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}