@neottia/cli 0.2.0 → 0.3.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.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @neottia/cli
2
2
 
3
- `@neottia/cli` publishes the `neottia` command for reviewing and applying asset installation plans.
3
+ `@neottia/cli` publishes the `neottia` command for initializing project configuration and reviewing and applying asset installation plans.
4
4
 
5
5
  ## Install
6
6
 
@@ -11,6 +11,7 @@ pnpm add --global @neottia/cli
11
11
  ## Commands
12
12
 
13
13
  ```sh
14
+ neottia init --harness pi|opencode [--harness pi|opencode]... [--project DIR]
14
15
  neottia plan --manifest manifest.json --output install.plan.json
15
16
  neottia apply --plan install.plan.json
16
17
  neottia plan --action update --manifest manifest.json --output update.plan.json
@@ -19,6 +20,8 @@ neottia doctor --manifest manifest.json
19
20
  neottia recover --receipt .neottia/install/default.receipt.json
20
21
  ```
21
22
 
23
+ `init` writes the minimal `.neottia/config.yml` for the selected harnesses. `--harness` is repeatable, accepts `pi` and `opencode`, and the command never replaces an existing file. See the [configuration guide](../../docs/configuration.md) for the generated values.
24
+
22
25
  `plan` prints the complete plan and can save the same JSON. `apply` accepts only a saved plan whose digest and checksums still match. If planning reports conflicts, approve each exact ID with a repeated `--approve <id>` option and generate the plan again. The CLI has no force option.
23
26
 
24
27
  The CLI accepts `--project`, `--home`, `--xdg-config`, and `--xdg-state` on commands that inspect an installation. Defaults are resolved in the CLI before it calls the distribution library. Harness adapters receive no machine paths.
package/dist/cli.spec.js CHANGED
@@ -1,5 +1,15 @@
1
- import { describe, expect, it } from 'vitest';
1
+ import { access, mkdir, mkdtemp, readFile, readdir, rm, stat, writeFile } from 'node:fs/promises';
2
+ import { tmpdir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ import { resolveConfig, ConfigResolutionError } from '@neottia/config';
5
+ import { officialConfigRegistry } from '@neottia/config-registry';
6
+ import { afterEach, describe, expect, it, vi } from 'vitest';
2
7
  import { main } from './index.js';
8
+ vi.mock('@neottia/config', async (importOriginal) => {
9
+ const actual = await importOriginal();
10
+ return { ...actual, resolveConfig: vi.fn(actual.resolveConfig) };
11
+ });
12
+ const roots = [];
3
13
  function capture() {
4
14
  const logs = [];
5
15
  const errors = [];
@@ -16,13 +26,147 @@ function capture() {
16
26
  },
17
27
  };
18
28
  }
29
+ async function fixture() {
30
+ const root = await mkdtemp(join(tmpdir(), 'neottia-cli-init-'));
31
+ roots.push(root);
32
+ return root;
33
+ }
34
+ function resolveGeneratedConfig(root) {
35
+ return resolveConfig(officialConfigRegistry, {
36
+ cwd: root,
37
+ env: {},
38
+ globalFile: false,
39
+ });
40
+ }
41
+ function requiredRoleAssignments() {
42
+ return {
43
+ planner: { agent: 'current' },
44
+ implementer: { agent: 'current' },
45
+ verifier: { agent: 'current' },
46
+ 'release-coordinator': { agent: 'current' },
47
+ };
48
+ }
49
+ async function exists(path) {
50
+ try {
51
+ await access(path);
52
+ return true;
53
+ }
54
+ catch {
55
+ return false;
56
+ }
57
+ }
58
+ afterEach(async () => {
59
+ await Promise.all(roots.splice(0).map((root) => rm(root, { recursive: true, force: true })));
60
+ });
19
61
  describe('Neottia CLI', () => {
20
- it('documents the explicit plan and apply workflow', async () => {
62
+ it('documents initialization and the explicit plan and apply workflow', async () => {
21
63
  const result = capture();
22
64
  expect(await main(['help'], result.output)).toBe(0);
65
+ expect(result.logs.join('\n')).toContain('neottia init');
23
66
  expect(result.logs.join('\n')).toContain('neottia plan');
24
67
  expect(result.logs.join('\n')).toContain('neottia apply');
25
68
  });
69
+ it('initializes one project-local Pi configuration and creates the missing config directory', async () => {
70
+ const root = await fixture();
71
+ const result = capture();
72
+ expect(await main(['init', '--harness', 'pi', '--project', root], result.output)).toBe(0);
73
+ const configPath = join(root, '.neottia', 'config.yml');
74
+ expect(result.errors).toEqual([]);
75
+ expect(result.logs).toEqual([
76
+ `Created ${configPath}`,
77
+ 'Harnesses: pi',
78
+ 'Next: neottia plan --manifest <manifest.json> --output install.plan.json',
79
+ ]);
80
+ expect(resolveGeneratedConfig(root).toJSON()).toMatchObject({
81
+ version: 1,
82
+ modules: {
83
+ issues: { enabled: true },
84
+ design_docs: { enabled: true },
85
+ },
86
+ capabilities: {
87
+ issues: { provider: 'filesystem' },
88
+ documents: { provider: 'filesystem' },
89
+ source_control: { local: 'git', remote: false, workspaces: false },
90
+ },
91
+ harnesses: { install: { targets: [{ id: 'pi', scope: 'project' }] } },
92
+ agents: {
93
+ sdlc: {
94
+ pi: requiredRoleAssignments(),
95
+ },
96
+ },
97
+ });
98
+ });
99
+ it.skipIf(process.platform === 'win32')('writes the configuration with owner-only permissions', async () => {
100
+ const root = await fixture();
101
+ expect(await main(['init', '--harness', 'pi', '--project', root], capture().output)).toBe(0);
102
+ expect((await stat(join(root, '.neottia', 'config.yml'))).mode & 0o777).toBe(0o600);
103
+ });
104
+ it('writes canonical multi-harness output independent of argument order', async () => {
105
+ const first = await fixture();
106
+ const second = await fixture();
107
+ expect(await main(['init', '--harness', 'pi', '--harness', 'opencode', '--project', first], capture().output)).toBe(0);
108
+ expect(await main(['init', '--harness', 'opencode', '--harness', 'pi', '--project', second], capture().output)).toBe(0);
109
+ const firstContent = await readFile(join(first, '.neottia', 'config.yml'), 'utf8');
110
+ const secondContent = await readFile(join(second, '.neottia', 'config.yml'), 'utf8');
111
+ expect(firstContent).toBe(secondContent);
112
+ expect(resolveGeneratedConfig(first).toJSON()).toMatchObject({
113
+ harnesses: {
114
+ install: {
115
+ targets: [
116
+ { id: 'opencode', scope: 'project' },
117
+ { id: 'pi', scope: 'project' },
118
+ ],
119
+ },
120
+ },
121
+ agents: {
122
+ sdlc: {
123
+ opencode: requiredRoleAssignments(),
124
+ pi: requiredRoleAssignments(),
125
+ },
126
+ },
127
+ });
128
+ });
129
+ it('deduplicates repeated harness values', async () => {
130
+ const root = await fixture();
131
+ expect(await main(['init', '--harness', 'pi', '--harness', 'pi', '--project', root], capture().output)).toBe(0);
132
+ expect(resolveGeneratedConfig(root).toJSON()).toMatchObject({
133
+ harnesses: { install: { targets: [{ id: 'pi', scope: 'project' }] } },
134
+ });
135
+ });
136
+ it('refuses to replace an existing configuration', async () => {
137
+ const root = await fixture();
138
+ const directory = join(root, '.neottia');
139
+ const configPath = join(directory, 'config.yml');
140
+ await mkdir(directory);
141
+ await writeFile(configPath, 'version: 1\n# user-owned\n', 'utf8');
142
+ const result = capture();
143
+ expect(await main(['init', '--harness', 'pi', '--project', root], result.output)).toBe(1);
144
+ expect(await readFile(configPath, 'utf8')).toBe('version: 1\n# user-owned\n');
145
+ expect(result.errors).toEqual([`Configuration already exists: ${configPath}`]);
146
+ expect(await readdir(directory)).toEqual(['config.yml']);
147
+ });
148
+ it('reports registry validation failure without writing the configuration', async () => {
149
+ const root = await fixture();
150
+ const result = capture();
151
+ vi.mocked(resolveConfig).mockImplementationOnce(() => {
152
+ throw new ConfigResolutionError([
153
+ { code: 'VERSION', message: 'configuration version must be the supported integer version 1' },
154
+ ]);
155
+ });
156
+ expect(await main(['init', '--harness', 'pi', '--project', root], result.output)).toBe(1);
157
+ expect(result.errors.join('\n')).toContain('Configuration resolution failed');
158
+ expect(await exists(join(root, '.neottia'))).toBe(false);
159
+ });
160
+ it.each([
161
+ [['init'], 'init requires at least one --harness.'],
162
+ [['init', '--harness', 'claude-code'], 'Unsupported init harness: claude-code. Expected one of: opencode, pi.'],
163
+ ])('rejects invalid harness selection before mutation', async (arguments_, message) => {
164
+ const root = await fixture();
165
+ const result = capture();
166
+ expect(await main([...arguments_, '--project', root], result.output)).toBe(1);
167
+ expect(result.errors).toEqual([message]);
168
+ expect(await exists(join(root, '.neottia'))).toBe(false);
169
+ });
26
170
  it('returns a failure for an unknown command', async () => {
27
171
  const result = capture();
28
172
  expect(await main(['unknown'], result.output)).toBe(1);
@@ -1 +1 @@
1
- {"version":3,"file":"cli.spec.js","sourceRoot":"","sources":["../src/cli.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,IAAI,EAAkB,MAAM,YAAY,CAAC;AAGlD,SAAS,OAAO;IACd,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,OAAO;QACL,IAAI;QACJ,MAAM;QACN,MAAM,EAAE;YACN,GAAG,CAAC,OAAO;gBACT,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;YACD,KAAK,CAAC,OAAO;gBACX,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;SACF;KACF,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;QACzB,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;QACzB,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.spec.js","sourceRoot":"","sources":["../src/cli.spec.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAGD,wBAAsB,IAAI,CACxB,IAAI,GAAE,SAAS,MAAM,EAA0B,EAC/C,MAAM,GAAE,SAAmB,EAC3B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,MAAM,CAAC,CAiBjB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA6BA,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAGD,wBAAsB,IAAI,CACxB,IAAI,GAAE,SAAS,MAAM,EAA0B,EAC/C,MAAM,GAAE,SAAmB,EAC3B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,MAAM,CAAC,CAkBjB"}
package/dist/index.js CHANGED
@@ -1,8 +1,12 @@
1
- import { readFile, writeFile } from 'node:fs/promises';
1
+ import { randomUUID } from 'node:crypto';
2
+ import { link, lstat, mkdir, open, readFile, unlink, writeFile } from 'node:fs/promises';
2
3
  import { homedir } from 'node:os';
3
- import { resolve } from 'node:path';
4
+ import { dirname, join, resolve } from 'node:path';
4
5
  import { parseArgs } from 'node:util';
6
+ import { resolveConfig } from '@neottia/config';
7
+ import { officialConfigRegistry } from '@neottia/config-registry';
5
8
  import { applyInstallationPlan, authorizePlan, canonicalJson, createInstallationPlan, decodeInstallationPlan, diagnoseSnapshot, inspectInstallation, inspectUninstall, recoverInstallation, runDoctor, validateManifest, } from '@neottia/distribution';
9
+ const SUPPORTED_INIT_HARNESSES = Object.freeze(['opencode', 'pi']);
6
10
  export async function main(argv = process.argv.slice(2), output = console, env = process.env) {
7
11
  try {
8
12
  const [command, ...arguments_] = argv;
@@ -11,15 +15,17 @@ export async function main(argv = process.argv.slice(2), output = console, env =
11
15
  return 0;
12
16
  }
13
17
  if (command === 'apply')
14
- return applyCommand(arguments_, output);
18
+ return await applyCommand(arguments_, output);
19
+ if (command === 'init')
20
+ return await initCommand(arguments_, output);
15
21
  if (command === 'recover')
16
- return recoverCommand(arguments_, output);
22
+ return await recoverCommand(arguments_, output);
17
23
  if (command === 'doctor')
18
- return doctorCommand(arguments_, output, env);
24
+ return await doctorCommand(arguments_, output, env);
19
25
  if (command === 'uninstall')
20
- return uninstallCommand(arguments_, output, env);
26
+ return await uninstallCommand(arguments_, output, env);
21
27
  if (command === 'plan')
22
- return planCommand(arguments_, output, env);
28
+ return await planCommand(arguments_, output, env);
23
29
  throw new TypeError(`Unknown command: ${command}`);
24
30
  }
25
31
  catch (error) {
@@ -27,6 +33,33 @@ export async function main(argv = process.argv.slice(2), output = console, env =
27
33
  return 1;
28
34
  }
29
35
  }
36
+ async function initCommand(arguments_, output) {
37
+ const { values } = parseArgs({
38
+ args: [...arguments_],
39
+ strict: true,
40
+ allowPositionals: false,
41
+ options: {
42
+ harness: { type: 'string', multiple: true, default: [] },
43
+ project: { type: 'string' },
44
+ },
45
+ });
46
+ const harnesses = normalizeInitHarnesses(values.harness);
47
+ const project = resolve(values.project ?? process.cwd());
48
+ const document = createInitDocument(harnesses);
49
+ resolveConfig(officialConfigRegistry, {
50
+ cwd: project,
51
+ env: {},
52
+ globalFile: false,
53
+ projectFile: false,
54
+ overrides: document,
55
+ });
56
+ const configPath = join(project, '.neottia', 'config.yml');
57
+ await publishNewConfig(configPath, renderInitConfig(harnesses));
58
+ output.log(`Created ${configPath}`);
59
+ output.log(`Harnesses: ${harnesses.join(', ')}`);
60
+ output.log('Next: neottia plan --manifest <manifest.json> --output install.plan.json');
61
+ return 0;
62
+ }
30
63
  async function planCommand(arguments_, output, env) {
31
64
  const values = parseCommon(arguments_);
32
65
  if (values.manifest === undefined)
@@ -113,6 +146,122 @@ function roots(values, env) {
113
146
  xdgState: resolve(typeof values['xdg-state'] === 'string' ? values['xdg-state'] : (env.XDG_STATE_HOME ?? `${home}/.local/state`)),
114
147
  };
115
148
  }
149
+ function normalizeInitHarnesses(values) {
150
+ if (values.length === 0)
151
+ throw new TypeError('init requires at least one --harness.');
152
+ const unsupported = values.find((value) => !SUPPORTED_INIT_HARNESSES.includes(value));
153
+ if (unsupported !== undefined) {
154
+ throw new TypeError(`Unsupported init harness: ${unsupported}. Expected one of: ${SUPPORTED_INIT_HARNESSES.join(', ')}.`);
155
+ }
156
+ return Object.freeze([...new Set(values)].sort((left, right) => left.localeCompare(right)));
157
+ }
158
+ function createInitDocument(harnesses) {
159
+ const assignments = Object.fromEntries(harnesses.map((harness) => [
160
+ harness,
161
+ {
162
+ planner: { agent: 'current' },
163
+ implementer: { agent: 'current' },
164
+ verifier: { agent: 'current' },
165
+ 'release-coordinator': { agent: 'current' },
166
+ },
167
+ ]));
168
+ return Object.freeze({
169
+ modules: {
170
+ issues: { enabled: true },
171
+ design_docs: { enabled: true },
172
+ },
173
+ capabilities: {
174
+ issues: { provider: 'filesystem' },
175
+ documents: { provider: 'filesystem' },
176
+ source_control: { local: 'git', remote: false, workspaces: false },
177
+ },
178
+ harnesses: {
179
+ install: { targets: harnesses.map((id) => ({ id, scope: 'project' })) },
180
+ },
181
+ agents: { sdlc: assignments },
182
+ });
183
+ }
184
+ function renderInitConfig(harnesses) {
185
+ const targets = harnesses.flatMap((harness) => [` - id: ${harness}`, ' scope: project']);
186
+ const assignments = harnesses.flatMap((harness) => [
187
+ ` ${harness}:`,
188
+ ' planner: {agent: current}',
189
+ ' implementer: {agent: current}',
190
+ ' verifier: {agent: current}',
191
+ ' release-coordinator: {agent: current}',
192
+ ]);
193
+ return [
194
+ 'version: 1',
195
+ 'modules:',
196
+ ' issues:',
197
+ ' enabled: true',
198
+ ' design_docs:',
199
+ ' enabled: true',
200
+ 'capabilities:',
201
+ ' issues:',
202
+ ' provider: filesystem',
203
+ ' documents:',
204
+ ' provider: filesystem',
205
+ ' source_control:',
206
+ ' local: git',
207
+ ' remote: false',
208
+ ' workspaces: false',
209
+ 'harnesses:',
210
+ ' install:',
211
+ ' targets:',
212
+ ...targets,
213
+ 'agents:',
214
+ ' sdlc:',
215
+ ...assignments,
216
+ '',
217
+ ].join('\n');
218
+ }
219
+ async function publishNewConfig(path, content) {
220
+ const directory = dirname(path);
221
+ await ensureConfigDirectory(directory);
222
+ const temporary = join(directory, `.config.yml.${process.pid}.${randomUUID()}.tmp`);
223
+ let handle;
224
+ try {
225
+ handle = await open(temporary, 'wx', 0o600);
226
+ await handle.writeFile(content, 'utf8');
227
+ await handle.sync();
228
+ await handle.close();
229
+ handle = undefined;
230
+ await link(temporary, path);
231
+ }
232
+ catch (error) {
233
+ if (hasErrorCode(error, 'EEXIST'))
234
+ throw new TypeError(`Configuration already exists: ${path}`);
235
+ throw error;
236
+ }
237
+ finally {
238
+ await handle?.close().catch(() => undefined);
239
+ await unlink(temporary).catch((error) => {
240
+ if (!hasErrorCode(error, 'ENOENT'))
241
+ throw error;
242
+ });
243
+ }
244
+ }
245
+ async function ensureConfigDirectory(path) {
246
+ try {
247
+ const metadata = await lstat(path);
248
+ if (!metadata.isDirectory() || metadata.isSymbolicLink()) {
249
+ throw new TypeError(`Configuration parent is not a regular directory: ${path}`);
250
+ }
251
+ }
252
+ catch (error) {
253
+ if (!hasErrorCode(error, 'ENOENT'))
254
+ throw error;
255
+ await mkdir(path, { recursive: true, mode: 0o700 });
256
+ const metadata = await lstat(path);
257
+ if (!metadata.isDirectory() || metadata.isSymbolicLink()) {
258
+ throw new TypeError(`Configuration parent is not a regular directory: ${path}`);
259
+ }
260
+ }
261
+ }
262
+ function hasErrorCode(error, code) {
263
+ return error instanceof Error && 'code' in error && error.code === code;
264
+ }
116
265
  async function readManifest(path) {
117
266
  const manifest = JSON.parse(await readFile(path, 'utf8'));
118
267
  validateManifest(manifest);
@@ -127,6 +276,7 @@ async function emitPlan(plan, path, output) {
127
276
  function help() {
128
277
  return [
129
278
  'Usage:',
279
+ ' neottia init --harness pi|opencode [--harness pi|opencode]... [--project DIR]',
130
280
  ' neottia plan --manifest FILE [--action install|update] [--output FILE] [--approve ID]...',
131
281
  ' neottia apply --plan FILE',
132
282
  ' neottia uninstall --receipt FILE [--output FILE] [--approve ID]...',
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neottia/cli",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Command-line planner, installer, updater, uninstaller, and doctor for Neottia assets",
5
5
  "author": "Dragos Cirjan",
6
6
  "license": "MIT",
@@ -38,6 +38,8 @@
38
38
  "node": ">=22.20.0"
39
39
  },
40
40
  "dependencies": {
41
+ "@neottia/config": "^0.2.0",
42
+ "@neottia/config-registry": "^0.2.0",
41
43
  "@neottia/distribution": "^0.2.0"
42
44
  },
43
45
  "devDependencies": {
@@ -48,6 +50,7 @@
48
50
  },
49
51
  "scripts": {
50
52
  "build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.build.json",
53
+ "pretest": "node ../../scripts/run-unless-workspace-prebuilt.mjs pnpm --filter @neottia/cli... run build",
51
54
  "test": "vitest run --root ../.. packages/cli/src",
52
55
  "typecheck": "tsc --noEmit"
53
56
  }