@neottia/cli 0.2.0 → 0.4.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 +19 -3
- package/dist/catalog.d.ts +8 -0
- package/dist/catalog.d.ts.map +1 -0
- package/dist/catalog.js +18 -0
- package/dist/catalog.js.map +1 -0
- package/dist/cli.spec.js +253 -2
- package/dist/cli.spec.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +358 -23
- package/dist/index.js.map +1 -1
- package/package.json +13 -2
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @neottia/cli
|
|
2
2
|
|
|
3
|
-
`@neottia/cli` publishes the `neottia` command for
|
|
3
|
+
`@neottia/cli` publishes the `neottia` command for initializing project configuration, compiling the SDLC lifecycle from that configuration, and installing it into the selected harnesses.
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
@@ -8,7 +8,21 @@
|
|
|
8
8
|
pnpm add --global @neottia/cli
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## Workflow commands
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
neottia init [--harness pi|opencode]... [--project DIR]
|
|
15
|
+
neottia apply [--harness ID]... [--scope project|global] [--project DIR]
|
|
16
|
+
neottia doctor [--project DIR]
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
`init` writes the minimal `.neottia/config.yml` for the selected harnesses. `--harness` is repeatable and accepts `pi` and `opencode`. When the file already exists and no `--harness` is given, `init` validates it and leaves every value untouched. See the [configuration guide](../../docs/configuration.md) for the generated values.
|
|
20
|
+
|
|
21
|
+
`apply` validates the project configuration, compiles the six lifecycle commands plus the shared operating-protocol skill for every configured harness (or the ones selected with repeatable `--harness`), resolves exact runtime package versions from the built-in compatibility catalog for the enabled modules, and installs everything in one run. No plan file is produced. Conflicting files (present but unowned, or modified after a previous install) are not overwritten: each one is reported as a `WARN` line with its path and reason, skipped, and everything else still installs. The command exits non-zero when files were skipped, prints a remediation summary, and never resolves package versions from a registry.
|
|
22
|
+
|
|
23
|
+
`doctor` validates the configuration and statically reports, per enabled module, whether the catalog has a compatible runtime package, and per harness whether the lifecycle is installed. It changes nothing and requires no manifest.
|
|
24
|
+
|
|
25
|
+
## Advanced manifest commands
|
|
12
26
|
|
|
13
27
|
```sh
|
|
14
28
|
neottia plan --manifest manifest.json --output install.plan.json
|
|
@@ -19,7 +33,9 @@ neottia doctor --manifest manifest.json
|
|
|
19
33
|
neottia recover --receipt .neottia/install/default.receipt.json
|
|
20
34
|
```
|
|
21
35
|
|
|
22
|
-
`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.
|
|
36
|
+
These commands drive the release pipeline, where a compiler-produced `AssetManifest` already exists. `plan` prints the complete plan and can save the same JSON. `apply --plan` 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.
|
|
37
|
+
|
|
38
|
+
## Paths
|
|
23
39
|
|
|
24
40
|
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.
|
|
25
41
|
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { NeottiaRuntimePackageId } from '@neottia/harness-adapter';
|
|
2
|
+
export interface CatalogEntry {
|
|
3
|
+
readonly logicalId: NeottiaRuntimePackageId;
|
|
4
|
+
readonly version: string;
|
|
5
|
+
}
|
|
6
|
+
export declare const RUNTIME_PACKAGE_CATALOG: Readonly<Record<string, readonly CatalogEntry[]>>;
|
|
7
|
+
export declare function catalogEntry(harnessId: string, logicalId: NeottiaRuntimePackageId): CatalogEntry | undefined;
|
|
8
|
+
//# sourceMappingURL=catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAGxE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,uBAAuB,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAMD,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC,CAapF,CAAC;AAGH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,uBAAuB,GAAG,YAAY,GAAG,SAAS,CAE5G"}
|
package/dist/catalog.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const RUNTIME_PACKAGE_CATALOG = Object.freeze({
|
|
2
|
+
pi: Object.freeze([
|
|
3
|
+
{ logicalId: 'memory', version: '0.1.1' },
|
|
4
|
+
{ logicalId: 'issues', version: '0.2.0' },
|
|
5
|
+
{ logicalId: 'design-docs', version: '0.2.0' },
|
|
6
|
+
{ logicalId: 'searchable', version: '0.2.0' },
|
|
7
|
+
]),
|
|
8
|
+
opencode: Object.freeze([
|
|
9
|
+
{ logicalId: 'memory', version: '0.1.1' },
|
|
10
|
+
{ logicalId: 'issues', version: '0.2.0' },
|
|
11
|
+
{ logicalId: 'design-docs', version: '0.2.0' },
|
|
12
|
+
{ logicalId: 'searchable', version: '0.2.0' },
|
|
13
|
+
]),
|
|
14
|
+
});
|
|
15
|
+
export function catalogEntry(harnessId, logicalId) {
|
|
16
|
+
return RUNTIME_PACKAGE_CATALOG[harnessId]?.find((entry) => entry.logicalId === logicalId);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,uBAAuB,GAAsD,MAAM,CAAC,MAAM,CAAC;IACtG,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC;QAChB,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE;QACzC,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE;QACzC,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE;QAC9C,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE;KACrC,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;QACtB,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE;QACzC,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE;QACzC,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE;QAC9C,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE;KACrC,CAAC;CACZ,CAAC,CAAC;AAGH,MAAM,UAAU,YAAY,CAAC,SAAiB,EAAE,SAAkC;IAChF,OAAO,uBAAuB,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;AAC5F,CAAC"}
|
package/dist/cli.spec.js
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { access, mkdir, mkdtemp, readFile, readdir, rm, stat, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { tmpdir } from 'node:os';
|
|
3
|
+
import { dirname, 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,254 @@ 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([`Created ${configPath}`, 'Harnesses: pi', 'Next: neottia apply']);
|
|
76
|
+
expect(resolveGeneratedConfig(root).toJSON()).toMatchObject({
|
|
77
|
+
version: 1,
|
|
78
|
+
modules: {
|
|
79
|
+
issues: { enabled: true },
|
|
80
|
+
design_docs: { enabled: true },
|
|
81
|
+
},
|
|
82
|
+
capabilities: {
|
|
83
|
+
issues: { provider: 'filesystem' },
|
|
84
|
+
documents: { provider: 'filesystem' },
|
|
85
|
+
source_control: { local: 'git', remote: false, workspaces: false },
|
|
86
|
+
},
|
|
87
|
+
harnesses: { install: { targets: [{ id: 'pi', scope: 'project' }] } },
|
|
88
|
+
agents: {
|
|
89
|
+
sdlc: {
|
|
90
|
+
pi: requiredRoleAssignments(),
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
it.skipIf(process.platform === 'win32')('writes the configuration with owner-only permissions', async () => {
|
|
96
|
+
const root = await fixture();
|
|
97
|
+
expect(await main(['init', '--harness', 'pi', '--project', root], capture().output)).toBe(0);
|
|
98
|
+
expect((await stat(join(root, '.neottia', 'config.yml'))).mode & 0o777).toBe(0o600);
|
|
99
|
+
});
|
|
100
|
+
it('writes canonical multi-harness output independent of argument order', async () => {
|
|
101
|
+
const first = await fixture();
|
|
102
|
+
const second = await fixture();
|
|
103
|
+
expect(await main(['init', '--harness', 'pi', '--harness', 'opencode', '--project', first], capture().output)).toBe(0);
|
|
104
|
+
expect(await main(['init', '--harness', 'opencode', '--harness', 'pi', '--project', second], capture().output)).toBe(0);
|
|
105
|
+
const firstContent = await readFile(join(first, '.neottia', 'config.yml'), 'utf8');
|
|
106
|
+
const secondContent = await readFile(join(second, '.neottia', 'config.yml'), 'utf8');
|
|
107
|
+
expect(firstContent).toBe(secondContent);
|
|
108
|
+
expect(resolveGeneratedConfig(first).toJSON()).toMatchObject({
|
|
109
|
+
harnesses: {
|
|
110
|
+
install: {
|
|
111
|
+
targets: [
|
|
112
|
+
{ id: 'opencode', scope: 'project' },
|
|
113
|
+
{ id: 'pi', scope: 'project' },
|
|
114
|
+
],
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
agents: {
|
|
118
|
+
sdlc: {
|
|
119
|
+
opencode: requiredRoleAssignments(),
|
|
120
|
+
pi: requiredRoleAssignments(),
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
it('deduplicates repeated harness values', async () => {
|
|
126
|
+
const root = await fixture();
|
|
127
|
+
expect(await main(['init', '--harness', 'pi', '--harness', 'pi', '--project', root], capture().output)).toBe(0);
|
|
128
|
+
expect(resolveGeneratedConfig(root).toJSON()).toMatchObject({
|
|
129
|
+
harnesses: { install: { targets: [{ id: 'pi', scope: 'project' }] } },
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
it('validates an existing configuration when init runs without harness arguments', async () => {
|
|
133
|
+
const root = await fixture();
|
|
134
|
+
await main(['init', '--harness', 'pi', '--project', root], capture().output);
|
|
135
|
+
const result = capture();
|
|
136
|
+
expect(await main(['init', '--project', root], result.output)).toBe(0);
|
|
137
|
+
expect(result.logs).toEqual([`Validated ${join(root, '.neottia', 'config.yml')}`, 'Next: neottia apply']);
|
|
138
|
+
expect(result.errors).toEqual([]);
|
|
139
|
+
});
|
|
140
|
+
it('fails validation of a corrupt existing configuration without rewriting it', async () => {
|
|
141
|
+
const root = await fixture();
|
|
142
|
+
const configPath = join(root, '.neottia', 'config.yml');
|
|
143
|
+
await mkdir(join(root, '.neottia'), { recursive: true });
|
|
144
|
+
const invalid = 'version: 1\nbogus_root_key: true\n';
|
|
145
|
+
await writeFile(configPath, invalid, 'utf8');
|
|
146
|
+
const result = capture();
|
|
147
|
+
expect(await main(['init', '--project', root], result.output)).toBe(1);
|
|
148
|
+
expect(result.errors.join('\n')).toContain('Configuration resolution failed');
|
|
149
|
+
expect(await readFile(configPath, 'utf8')).toBe(invalid);
|
|
150
|
+
});
|
|
151
|
+
it('installs the configured lifecycle for every configured harness', async () => {
|
|
152
|
+
const root = await fixture();
|
|
153
|
+
await main(['init', '--harness', 'pi', '--harness', 'opencode', '--project', root], capture().output);
|
|
154
|
+
const result = capture();
|
|
155
|
+
expect(await main(['apply', '--project', root], result.output)).toBe(0);
|
|
156
|
+
expect(result.errors).toEqual([]);
|
|
157
|
+
expect(result.logs.some((line) => line.includes('Installed pi project lifecycle'))).toBe(true);
|
|
158
|
+
expect(result.logs.some((line) => line.includes('Installed opencode project lifecycle'))).toBe(true);
|
|
159
|
+
expect(result.logs.some((line) => line.includes('Reload'))).toBe(true);
|
|
160
|
+
for (const harness of ['pi', 'opencode']) {
|
|
161
|
+
expect(await exists(join(root, '.neottia', 'install', `sdlc-${harness}.receipt.json`))).toBe(true);
|
|
162
|
+
}
|
|
163
|
+
expect(await exists(join(root, '.pi', 'prompts', 'plan.md'))).toBe(true);
|
|
164
|
+
expect(await exists(join(root, '.opencode', 'commands', 'plan.md'))).toBe(true);
|
|
165
|
+
expect(await exists(join(root, '.pi', 'skills', 'neottia-sdlc', 'SKILL.md'))).toBe(true);
|
|
166
|
+
expect(await readFile(join(root, '.pi', 'prompts', 'plan.md'), 'utf8')).toContain('They do not grant host permissions.');
|
|
167
|
+
}, 30000);
|
|
168
|
+
it('produces deterministic compiler output and a no-op second install', async () => {
|
|
169
|
+
const root = await fixture();
|
|
170
|
+
await main(['init', '--harness', 'pi', '--project', root], capture().output);
|
|
171
|
+
const first = capture();
|
|
172
|
+
await main(['apply', '--project', root], first.output);
|
|
173
|
+
const planPath = await readFile(join(root, '.neottia', 'install', 'sdlc-pi.receipt.json'), 'utf8');
|
|
174
|
+
const second = capture();
|
|
175
|
+
expect(await main(['apply', '--project', root], second.output)).toBe(0);
|
|
176
|
+
expect(second.logs.some((line) => line.includes('0 mutation(s)'))).toBe(true);
|
|
177
|
+
expect(await readFile(join(root, '.neottia', 'install', 'sdlc-pi.receipt.json'), 'utf8')).toBe(planPath);
|
|
178
|
+
}, 30000);
|
|
179
|
+
it('installs a globally scoped target under the caller home and reports it from doctor', async () => {
|
|
180
|
+
if (process.platform === 'win32')
|
|
181
|
+
return;
|
|
182
|
+
const root = await fixture();
|
|
183
|
+
await main(['init', '--harness', 'pi', '--project', root], capture().output);
|
|
184
|
+
const configPath = join(root, '.neottia', 'config.yml');
|
|
185
|
+
await writeFile(configPath, (await readFile(configPath, 'utf8')).replace('scope: project', 'scope: global'), 'utf8');
|
|
186
|
+
const home = join(root, 'home');
|
|
187
|
+
const xdgState = join(root, 'xdg-state');
|
|
188
|
+
await mkdir(home, { recursive: true });
|
|
189
|
+
await mkdir(xdgState, { recursive: true });
|
|
190
|
+
process.env.HOME = home;
|
|
191
|
+
process.env.XDG_STATE_HOME = xdgState;
|
|
192
|
+
try {
|
|
193
|
+
const result = capture();
|
|
194
|
+
expect(await main(['apply', '--project', root], result.output)).toBe(0);
|
|
195
|
+
expect(await exists(join(xdgState, 'neottia', 'install', 'sdlc-pi.receipt.json'))).toBe(true);
|
|
196
|
+
expect(await exists(join(home, '.pi', 'agent', 'skills', 'neottia-sdlc', 'SKILL.md'))).toBe(true);
|
|
197
|
+
expect(await exists(join(root, '.neottia', 'install', 'sdlc-pi.receipt.json'))).toBe(false);
|
|
198
|
+
const doctor = capture();
|
|
199
|
+
expect(await main(['doctor', '--project', root], doctor.output)).toBe(0);
|
|
200
|
+
expect(doctor.logs.join('\n')).toContain('No missing modules or installs detected.');
|
|
201
|
+
}
|
|
202
|
+
finally {
|
|
203
|
+
delete process.env.HOME;
|
|
204
|
+
delete process.env.XDG_STATE_HOME;
|
|
205
|
+
}
|
|
206
|
+
}, 30000);
|
|
207
|
+
it('skips conflicting files with warnings, installs the rest, and exits non-zero', async () => {
|
|
208
|
+
const root = await fixture();
|
|
209
|
+
await main(['init', '--harness', 'pi', '--project', root], capture().output);
|
|
210
|
+
const contested = join(root, '.pi', 'prompts', 'plan.md');
|
|
211
|
+
await mkdir(dirname(contested), { recursive: true });
|
|
212
|
+
await writeFile(contested, 'user-owned\n', 'utf8');
|
|
213
|
+
const result = capture();
|
|
214
|
+
const code = await main(['apply', '--project', root], result.output);
|
|
215
|
+
expect(code).toBe(2);
|
|
216
|
+
expect(result.errors.some((line) => line.includes('WARN:') && line.includes(contested))).toBe(true);
|
|
217
|
+
expect(result.errors.some((line) => line.includes('1 file(s) skipped'))).toBe(true);
|
|
218
|
+
expect(await readFile(contested, 'utf8')).toBe('user-owned\n');
|
|
219
|
+
expect(await exists(join(root, '.pi', 'prompts', 'build.md'))).toBe(true);
|
|
220
|
+
}, 30000);
|
|
221
|
+
it('fails closed when apply runs without a configuration', async () => {
|
|
222
|
+
const root = await fixture();
|
|
223
|
+
const result = capture();
|
|
224
|
+
expect(await main(['apply', '--project', root], result.output)).toBe(1);
|
|
225
|
+
expect(result.errors).toEqual(['Run neottia init first. Missing project configuration.']);
|
|
226
|
+
});
|
|
227
|
+
it('reports missing installs and unknown modules through doctor', async () => {
|
|
228
|
+
const root = await fixture();
|
|
229
|
+
await main(['init', '--harness', 'pi', '--project', root], capture().output);
|
|
230
|
+
const result = capture();
|
|
231
|
+
expect(await main(['doctor', '--project', root], result.output)).toBe(2);
|
|
232
|
+
expect(result.logs[0]).toContain('Configuration valid. Harnesses: pi');
|
|
233
|
+
expect(result.errors.some((line) => line.includes('pi lifecycle is not installed. Run neottia apply.'))).toBe(true);
|
|
234
|
+
});
|
|
235
|
+
it('reports healthy state through doctor after a successful apply', async () => {
|
|
236
|
+
const root = await fixture();
|
|
237
|
+
await main(['init', '--harness', 'pi', '--project', root], capture().output);
|
|
238
|
+
await main(['apply', '--project', root], capture().output);
|
|
239
|
+
const result = capture();
|
|
240
|
+
expect(await main(['doctor', '--project', root], result.output)).toBe(0);
|
|
241
|
+
expect(result.logs.join('\n')).toContain('No missing modules or installs detected.');
|
|
242
|
+
}, 30000);
|
|
243
|
+
it('refuses to replace an existing configuration', async () => {
|
|
244
|
+
const root = await fixture();
|
|
245
|
+
const directory = join(root, '.neottia');
|
|
246
|
+
const configPath = join(directory, 'config.yml');
|
|
247
|
+
await mkdir(directory);
|
|
248
|
+
await writeFile(configPath, 'version: 1\n# user-owned\n', 'utf8');
|
|
249
|
+
const result = capture();
|
|
250
|
+
expect(await main(['init', '--harness', 'pi', '--project', root], result.output)).toBe(1);
|
|
251
|
+
expect(await readFile(configPath, 'utf8')).toBe('version: 1\n# user-owned\n');
|
|
252
|
+
expect(result.errors).toEqual([`Configuration already exists: ${configPath}`]);
|
|
253
|
+
expect(await readdir(directory)).toEqual(['config.yml']);
|
|
254
|
+
});
|
|
255
|
+
it('reports registry validation failure without writing the configuration', async () => {
|
|
256
|
+
const root = await fixture();
|
|
257
|
+
const result = capture();
|
|
258
|
+
vi.mocked(resolveConfig).mockImplementationOnce(() => {
|
|
259
|
+
throw new ConfigResolutionError([
|
|
260
|
+
{ code: 'VERSION', message: 'configuration version must be the supported integer version 1' },
|
|
261
|
+
]);
|
|
262
|
+
});
|
|
263
|
+
expect(await main(['init', '--harness', 'pi', '--project', root], result.output)).toBe(1);
|
|
264
|
+
expect(result.errors.join('\n')).toContain('Configuration resolution failed');
|
|
265
|
+
expect(await exists(join(root, '.neottia'))).toBe(false);
|
|
266
|
+
});
|
|
267
|
+
it.each([
|
|
268
|
+
[['init'], 'At least one --harness is required.'],
|
|
269
|
+
[['init', '--harness', 'claude-code'], 'Unsupported harness: claude-code. Expected one of: opencode, pi.'],
|
|
270
|
+
])('rejects invalid harness selection before mutation', async (arguments_, message) => {
|
|
271
|
+
const root = await fixture();
|
|
272
|
+
const result = capture();
|
|
273
|
+
expect(await main([...arguments_, '--project', root], result.output)).toBe(1);
|
|
274
|
+
expect(result.errors).toEqual([message]);
|
|
275
|
+
expect(await exists(join(root, '.neottia'))).toBe(false);
|
|
276
|
+
});
|
|
26
277
|
it('returns a failure for an unknown command', async () => {
|
|
27
278
|
const result = capture();
|
|
28
279
|
expect(await main(['unknown'], result.output)).toBe(1);
|
package/dist/cli.spec.js.map
CHANGED
|
@@ -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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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgDA,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,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { link, lstat, mkdir, open, readFile, unlink, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { createRequire } from 'node:module';
|
|
2
4
|
import { homedir } from 'node:os';
|
|
3
|
-
import { resolve } from 'node:path';
|
|
5
|
+
import { dirname, join, resolve } from 'node:path';
|
|
4
6
|
import { parseArgs } from 'node:util';
|
|
5
|
-
import {
|
|
7
|
+
import { resolveConfig } from '@neottia/config';
|
|
8
|
+
import { harnessInstallConfigContribution, officialConfigRegistry } from '@neottia/config-registry';
|
|
9
|
+
import { designDocsConfigContribution } from '@neottia/design-docs';
|
|
10
|
+
import { applyInstallationPlan, authorizePlan, canonicalJson, createInstallationPlan, decodeInstallationPlan, diagnoseSnapshot, inspectInstallation, inspectUninstall, receiptPath as distributionReceiptPath, recoverInstallation, runDoctor, validateManifest, } from '@neottia/distribution';
|
|
11
|
+
import { issueConfigContribution } from '@neottia/issues';
|
|
12
|
+
import { memoryConfigContribution } from '@neottia/memory-core';
|
|
13
|
+
import { opencodeHarnessAdapter } from '@neottia/opencode-adapter';
|
|
14
|
+
import { piHarnessAdapter } from '@neottia/pi-adapter';
|
|
15
|
+
import { compileSdlc, createSdlcCompilerInput, loadSdlcTemplateLayers } from '@neottia/sdlc';
|
|
16
|
+
import { searchableConfigContribution } from '@neottia/searchable-core';
|
|
17
|
+
import { catalogEntry } from './catalog.js';
|
|
18
|
+
const SUPPORTED_HARNESSES = Object.freeze(['opencode', 'pi']);
|
|
19
|
+
const HARNESS_ADAPTERS = Object.freeze({ pi: piHarnessAdapter, opencode: opencodeHarnessAdapter });
|
|
20
|
+
const WARN_PREFIX = 'WARN: ';
|
|
6
21
|
export async function main(argv = process.argv.slice(2), output = console, env = process.env) {
|
|
7
22
|
try {
|
|
8
23
|
const [command, ...arguments_] = argv;
|
|
@@ -11,15 +26,17 @@ export async function main(argv = process.argv.slice(2), output = console, env =
|
|
|
11
26
|
return 0;
|
|
12
27
|
}
|
|
13
28
|
if (command === 'apply')
|
|
14
|
-
return applyCommand(arguments_, output);
|
|
29
|
+
return await applyCommand(arguments_, output, env);
|
|
30
|
+
if (command === 'init')
|
|
31
|
+
return await initCommand(arguments_, output, env);
|
|
15
32
|
if (command === 'recover')
|
|
16
|
-
return recoverCommand(arguments_, output);
|
|
33
|
+
return await recoverCommand(arguments_, output);
|
|
17
34
|
if (command === 'doctor')
|
|
18
|
-
return doctorCommand(arguments_, output, env);
|
|
35
|
+
return await doctorCommand(arguments_, output, env);
|
|
19
36
|
if (command === 'uninstall')
|
|
20
|
-
return uninstallCommand(arguments_, output, env);
|
|
37
|
+
return await uninstallCommand(arguments_, output, env);
|
|
21
38
|
if (command === 'plan')
|
|
22
|
-
return planCommand(arguments_, output, env);
|
|
39
|
+
return await planCommand(arguments_, output, env);
|
|
23
40
|
throw new TypeError(`Unknown command: ${command}`);
|
|
24
41
|
}
|
|
25
42
|
catch (error) {
|
|
@@ -27,6 +44,39 @@ export async function main(argv = process.argv.slice(2), output = console, env =
|
|
|
27
44
|
return 1;
|
|
28
45
|
}
|
|
29
46
|
}
|
|
47
|
+
async function initCommand(arguments_, output, env) {
|
|
48
|
+
const { values } = parseArgs({
|
|
49
|
+
args: [...arguments_],
|
|
50
|
+
strict: true,
|
|
51
|
+
allowPositionals: false,
|
|
52
|
+
options: {
|
|
53
|
+
harness: { type: 'string', multiple: true, default: [] },
|
|
54
|
+
project: { type: 'string' },
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
const project = resolve(values.project ?? process.cwd());
|
|
58
|
+
const configPath = join(project, '.neottia', 'config.yml');
|
|
59
|
+
if (values.harness.length === 0 && (await isRegularFile(configPath))) {
|
|
60
|
+
resolveConfig(officialConfigRegistry, { cwd: project, env });
|
|
61
|
+
output.log(`Validated ${configPath}`);
|
|
62
|
+
output.log('Next: neottia apply');
|
|
63
|
+
return 0;
|
|
64
|
+
}
|
|
65
|
+
const harnesses = normalizeInitHarnesses(values.harness);
|
|
66
|
+
const document = createInitDocument(harnesses);
|
|
67
|
+
resolveConfig(officialConfigRegistry, {
|
|
68
|
+
cwd: project,
|
|
69
|
+
env: {},
|
|
70
|
+
globalFile: false,
|
|
71
|
+
projectFile: false,
|
|
72
|
+
overrides: document,
|
|
73
|
+
});
|
|
74
|
+
await publishNewConfig(configPath, renderInitConfig(harnesses));
|
|
75
|
+
output.log(`Created ${configPath}`);
|
|
76
|
+
output.log(`Harnesses: ${harnesses.join(', ')}`);
|
|
77
|
+
output.log('Next: neottia apply');
|
|
78
|
+
return 0;
|
|
79
|
+
}
|
|
30
80
|
async function planCommand(arguments_, output, env) {
|
|
31
81
|
const values = parseCommon(arguments_);
|
|
32
82
|
if (values.manifest === undefined)
|
|
@@ -48,30 +98,196 @@ async function uninstallCommand(arguments_, output, env) {
|
|
|
48
98
|
await emitPlan(plan, values.output, output);
|
|
49
99
|
return plan.conflicts.some((conflict) => !conflict.approved) ? 2 : 0;
|
|
50
100
|
}
|
|
51
|
-
async function applyCommand(arguments_, output) {
|
|
101
|
+
async function applyCommand(arguments_, output, env) {
|
|
52
102
|
const { values } = parseArgs({
|
|
53
103
|
args: [...arguments_],
|
|
54
104
|
strict: true,
|
|
55
105
|
allowPositionals: false,
|
|
56
|
-
options: {
|
|
106
|
+
options: {
|
|
107
|
+
plan: { type: 'string' },
|
|
108
|
+
harness: { type: 'string', multiple: true, default: [] },
|
|
109
|
+
scope: { type: 'string' },
|
|
110
|
+
project: { type: 'string' },
|
|
111
|
+
},
|
|
57
112
|
});
|
|
58
|
-
if (values.plan
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
113
|
+
if (values.plan !== undefined) {
|
|
114
|
+
const plan = decodeInstallationPlan(JSON.parse(await readFile(values.plan, 'utf8')));
|
|
115
|
+
const result = await applyInstallationPlan(plan);
|
|
116
|
+
output.log(canonicalJson(result));
|
|
117
|
+
return 0;
|
|
118
|
+
}
|
|
119
|
+
const project = resolve(values.project ?? process.cwd());
|
|
120
|
+
if (!(await isRegularFile(join(project, '.neottia', 'config.yml')))) {
|
|
121
|
+
throw new TypeError('Run neottia init first. Missing project configuration.');
|
|
122
|
+
}
|
|
123
|
+
const harnesses = selectHarnesses(values.harness, project, env);
|
|
124
|
+
const override = values.scope === undefined ? undefined : parseScope(values.scope);
|
|
125
|
+
const configuredScopes = new Map(resolveConfig(officialConfigRegistry, { cwd: project, env })
|
|
126
|
+
.get(harnessInstallConfigContribution)
|
|
127
|
+
.targets.map((target) => [target.id, target.scope]));
|
|
128
|
+
let skipped = 0;
|
|
129
|
+
for (const harnessId of harnesses) {
|
|
130
|
+
const scope = override ?? configuredScopes.get(harnessId) ?? 'project';
|
|
131
|
+
skipped += await installHarness(harnessId, { project, env, scope }, output);
|
|
132
|
+
}
|
|
133
|
+
if (skipped > 0) {
|
|
134
|
+
output.error(`${skipped} file(s) skipped. Resolve the warnings above, then run neottia apply again.`);
|
|
135
|
+
return 2;
|
|
136
|
+
}
|
|
137
|
+
output.log('Done. Reload the harness so generated assets are picked up.');
|
|
63
138
|
return 0;
|
|
64
139
|
}
|
|
140
|
+
async function installHarness(harnessId, context, output) {
|
|
141
|
+
const adapter = HARNESS_ADAPTERS[harnessId];
|
|
142
|
+
const snapshot = resolveConfig(officialConfigRegistry, { cwd: context.project, env: context.env });
|
|
143
|
+
const templateLayers = await loadSdlcTemplateLayers({ projectRoot: context.project });
|
|
144
|
+
const runtimePackages = selectedRuntimePackages(harnessId, snapshot);
|
|
145
|
+
const input = createSdlcCompilerInput(snapshot, {
|
|
146
|
+
compilerVersion: CLI_VERSION,
|
|
147
|
+
harnessId,
|
|
148
|
+
harnessDeclaration: adapter.declaration,
|
|
149
|
+
scope: context.scope,
|
|
150
|
+
templateLayers,
|
|
151
|
+
runtimePackages,
|
|
152
|
+
});
|
|
153
|
+
const compiled = compileSdlc(input, adapter);
|
|
154
|
+
const installRoots = installRootsFor(context.project, context.env);
|
|
155
|
+
const inspected = await inspectInstallation(compiled.assets, installRoots);
|
|
156
|
+
const action = inspected.receipt === undefined ? 'install' : 'update';
|
|
157
|
+
const plan = createInstallationPlan(inspected, action);
|
|
158
|
+
const conflicts = plan.conflicts.filter((conflict) => !conflict.approved);
|
|
159
|
+
for (const conflict of conflicts) {
|
|
160
|
+
output.error(`${WARN_PREFIX}skipped ${conflict.path} (${conflict.reason}). Resolve or remove the file, then rerun neottia apply.`);
|
|
161
|
+
}
|
|
162
|
+
const conflictedAssets = new Set(conflicts.map((conflict) => conflict.assetId));
|
|
163
|
+
const filtered = {
|
|
164
|
+
...inspected,
|
|
165
|
+
units: inspected.units.filter((unit) => !conflictedAssets.has(unit.assetId)),
|
|
166
|
+
};
|
|
167
|
+
const partial = createInstallationPlan(filtered, action);
|
|
168
|
+
const result = await applyInstallationPlan(authorizePlan(partial, []));
|
|
169
|
+
output.log(`Installed ${harnessId} ${context.scope} lifecycle (${result.appliedMutations.length} mutation(s), ${conflicts.length} skipped).`);
|
|
170
|
+
if (result.reloadNotice !== undefined)
|
|
171
|
+
output.log(result.reloadNotice.message);
|
|
172
|
+
return conflicts.length;
|
|
173
|
+
}
|
|
174
|
+
const CLI_VERSION = createRequire(import.meta.url)('../package.json').version;
|
|
175
|
+
void CLI_VERSION;
|
|
176
|
+
function selectHarnesses(requested, project, env) {
|
|
177
|
+
if (requested.length > 0)
|
|
178
|
+
return normalizeInitHarnesses(requested);
|
|
179
|
+
const configured = resolveConfig(officialConfigRegistry, { cwd: project, env })
|
|
180
|
+
.get(harnessInstallConfigContribution)
|
|
181
|
+
.targets.map((target) => target.id);
|
|
182
|
+
const unsupported = configured.find((id) => !SUPPORTED_HARNESSES.includes(id));
|
|
183
|
+
if (unsupported !== undefined)
|
|
184
|
+
throw new TypeError(`Unsupported configured harness: ${unsupported}.`);
|
|
185
|
+
if (configured.length === 0)
|
|
186
|
+
throw new TypeError('No configured harnesses. Add harnesses.install.targets first.');
|
|
187
|
+
return Object.freeze([...new Set(configured)].sort((left, right) => left.localeCompare(right)));
|
|
188
|
+
}
|
|
189
|
+
function selectedRuntimePackages(harnessId, snapshot) {
|
|
190
|
+
const packages = [];
|
|
191
|
+
const candidates = [
|
|
192
|
+
['memory', snapshot.get(memoryConfigContribution).enabled],
|
|
193
|
+
['issues', snapshot.get(issueConfigContribution).enabled],
|
|
194
|
+
['design-docs', snapshot.get(designDocsConfigContribution).enabled],
|
|
195
|
+
['searchable', snapshot.get(searchableConfigContribution).enabled],
|
|
196
|
+
];
|
|
197
|
+
for (const [logicalId, enabled] of candidates) {
|
|
198
|
+
if (!enabled)
|
|
199
|
+
continue;
|
|
200
|
+
const entry = catalogEntry(harnessId, logicalId);
|
|
201
|
+
if (entry === undefined) {
|
|
202
|
+
throw new TypeError(`No compatible runtime package for ${harnessId} ${logicalId}.`);
|
|
203
|
+
}
|
|
204
|
+
packages.push({ logicalId, version: entry.version });
|
|
205
|
+
}
|
|
206
|
+
return Object.freeze(packages);
|
|
207
|
+
}
|
|
208
|
+
function parseScope(value) {
|
|
209
|
+
if (value === undefined)
|
|
210
|
+
return 'project';
|
|
211
|
+
if (value === 'project' || value === 'global')
|
|
212
|
+
return value;
|
|
213
|
+
throw new TypeError('apply --scope must be project or global.');
|
|
214
|
+
}
|
|
215
|
+
function installRootsFor(project, env) {
|
|
216
|
+
const home = resolve(env.HOME ?? homedir());
|
|
217
|
+
return {
|
|
218
|
+
project,
|
|
219
|
+
home,
|
|
220
|
+
xdgConfig: resolve(env.XDG_CONFIG_HOME ?? `${home}/.config`),
|
|
221
|
+
xdgState: resolve(env.XDG_STATE_HOME ?? `${home}/.local/state`),
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
async function isRegularFile(path) {
|
|
225
|
+
try {
|
|
226
|
+
return (await lstat(path)).isFile();
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
65
232
|
async function doctorCommand(arguments_, output, env) {
|
|
66
233
|
const values = parseCommon(arguments_);
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
234
|
+
const project = resolve(values.project ?? process.cwd());
|
|
235
|
+
if (values.manifest !== undefined) {
|
|
236
|
+
const manifest = await readManifest(values.manifest);
|
|
237
|
+
const rootValues = roots(values, env);
|
|
238
|
+
const snapshot = await inspectInstallation(manifest, rootValues);
|
|
239
|
+
const results = [...(await runDoctor(manifest, rootValues, env)), ...diagnoseSnapshot(snapshot)];
|
|
240
|
+
output.log(canonicalJson(results));
|
|
241
|
+
return results.some((result) => result.status === 'error') ? 2 : 0;
|
|
242
|
+
}
|
|
243
|
+
if (!(await isRegularFile(join(project, '.neottia', 'config.yml')))) {
|
|
244
|
+
output.error(`${WARN_PREFIX}Missing project configuration. Run neottia init first.`);
|
|
245
|
+
return 2;
|
|
246
|
+
}
|
|
247
|
+
const snapshot = resolveConfig(officialConfigRegistry, { cwd: project, env });
|
|
248
|
+
const modules = [
|
|
249
|
+
['memory', 'modules.memory.enabled', snapshot.get(memoryConfigContribution).enabled],
|
|
250
|
+
['issues', 'modules.issues.enabled', snapshot.get(issueConfigContribution).enabled],
|
|
251
|
+
['design-docs', 'modules.design_docs.enabled', snapshot.get(designDocsConfigContribution).enabled],
|
|
252
|
+
['searchable', 'modules.searchable.enabled', snapshot.get(searchableConfigContribution).enabled],
|
|
253
|
+
];
|
|
254
|
+
const harnesses = selectHarnesses([], project, env);
|
|
255
|
+
let failures = 0;
|
|
256
|
+
output.log(`Configuration valid. Harnesses: ${harnesses.join(', ')}`);
|
|
257
|
+
for (const harnessId of harnesses) {
|
|
258
|
+
for (const [logicalId, configPath, enabled] of modules) {
|
|
259
|
+
if (!enabled)
|
|
260
|
+
continue;
|
|
261
|
+
void configPath;
|
|
262
|
+
const entry = catalogEntry(harnessId, logicalId);
|
|
263
|
+
if (entry === undefined) {
|
|
264
|
+
output.error(`${WARN_PREFIX}No compatible runtime package for ${harnessId} ${logicalId}. Remove the module or extend the catalog.`);
|
|
265
|
+
failures += 1;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
const configuredScopes = new Map(snapshot.get(harnessInstallConfigContribution).targets.map((target) => [target.id, target.scope]));
|
|
270
|
+
for (const harnessId of harnesses) {
|
|
271
|
+
const scope = configuredScopes.get(harnessId) ?? 'project';
|
|
272
|
+
const installRoots = installRootsFor(project, env);
|
|
273
|
+
const receiptPath = receiptPathFor(harnessId, scope, installRoots);
|
|
274
|
+
if (await isRegularFile(receiptPath)) {
|
|
275
|
+
const inspected = await inspectUninstall(receiptPath, installRoots);
|
|
276
|
+
if (!diagnoseSnapshot(inspected).some((result) => result.status === 'error'))
|
|
277
|
+
continue;
|
|
278
|
+
output.error(`${WARN_PREFIX}${harnessId} lifecycle is installed but drifted. Rerun neottia apply.`);
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
output.error(`${WARN_PREFIX}${harnessId} lifecycle is not installed. Run neottia apply.`);
|
|
282
|
+
}
|
|
283
|
+
failures += 1;
|
|
284
|
+
}
|
|
285
|
+
if (failures === 0)
|
|
286
|
+
output.log('No missing modules or installs detected.');
|
|
287
|
+
return failures > 0 ? 2 : 0;
|
|
288
|
+
}
|
|
289
|
+
function receiptPathFor(harnessId, scope, installRoots) {
|
|
290
|
+
return distributionReceiptPath(`sdlc-${harnessId}`, scope, installRoots);
|
|
75
291
|
}
|
|
76
292
|
async function recoverCommand(arguments_, output) {
|
|
77
293
|
const { values } = parseArgs({
|
|
@@ -113,6 +329,122 @@ function roots(values, env) {
|
|
|
113
329
|
xdgState: resolve(typeof values['xdg-state'] === 'string' ? values['xdg-state'] : (env.XDG_STATE_HOME ?? `${home}/.local/state`)),
|
|
114
330
|
};
|
|
115
331
|
}
|
|
332
|
+
function normalizeInitHarnesses(values) {
|
|
333
|
+
if (values.length === 0)
|
|
334
|
+
throw new TypeError('At least one --harness is required.');
|
|
335
|
+
const unsupported = values.find((value) => !SUPPORTED_HARNESSES.includes(value));
|
|
336
|
+
if (unsupported !== undefined) {
|
|
337
|
+
throw new TypeError(`Unsupported harness: ${unsupported}. Expected one of: ${SUPPORTED_HARNESSES.join(', ')}.`);
|
|
338
|
+
}
|
|
339
|
+
return Object.freeze([...new Set(values)].sort((left, right) => left.localeCompare(right)));
|
|
340
|
+
}
|
|
341
|
+
function createInitDocument(harnesses) {
|
|
342
|
+
const assignments = Object.fromEntries(harnesses.map((harness) => [
|
|
343
|
+
harness,
|
|
344
|
+
{
|
|
345
|
+
planner: { agent: 'current' },
|
|
346
|
+
implementer: { agent: 'current' },
|
|
347
|
+
verifier: { agent: 'current' },
|
|
348
|
+
'release-coordinator': { agent: 'current' },
|
|
349
|
+
},
|
|
350
|
+
]));
|
|
351
|
+
return Object.freeze({
|
|
352
|
+
modules: {
|
|
353
|
+
issues: { enabled: true },
|
|
354
|
+
design_docs: { enabled: true },
|
|
355
|
+
},
|
|
356
|
+
capabilities: {
|
|
357
|
+
issues: { provider: 'filesystem' },
|
|
358
|
+
documents: { provider: 'filesystem' },
|
|
359
|
+
source_control: { local: 'git', remote: false, workspaces: false },
|
|
360
|
+
},
|
|
361
|
+
harnesses: {
|
|
362
|
+
install: { targets: harnesses.map((id) => ({ id, scope: 'project' })) },
|
|
363
|
+
},
|
|
364
|
+
agents: { sdlc: assignments },
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
function renderInitConfig(harnesses) {
|
|
368
|
+
const targets = harnesses.flatMap((harness) => [` - id: ${harness}`, ' scope: project']);
|
|
369
|
+
const assignments = harnesses.flatMap((harness) => [
|
|
370
|
+
` ${harness}:`,
|
|
371
|
+
' planner: {agent: current}',
|
|
372
|
+
' implementer: {agent: current}',
|
|
373
|
+
' verifier: {agent: current}',
|
|
374
|
+
' release-coordinator: {agent: current}',
|
|
375
|
+
]);
|
|
376
|
+
return [
|
|
377
|
+
'version: 1',
|
|
378
|
+
'modules:',
|
|
379
|
+
' issues:',
|
|
380
|
+
' enabled: true',
|
|
381
|
+
' design_docs:',
|
|
382
|
+
' enabled: true',
|
|
383
|
+
'capabilities:',
|
|
384
|
+
' issues:',
|
|
385
|
+
' provider: filesystem',
|
|
386
|
+
' documents:',
|
|
387
|
+
' provider: filesystem',
|
|
388
|
+
' source_control:',
|
|
389
|
+
' local: git',
|
|
390
|
+
' remote: false',
|
|
391
|
+
' workspaces: false',
|
|
392
|
+
'harnesses:',
|
|
393
|
+
' install:',
|
|
394
|
+
' targets:',
|
|
395
|
+
...targets,
|
|
396
|
+
'agents:',
|
|
397
|
+
' sdlc:',
|
|
398
|
+
...assignments,
|
|
399
|
+
'',
|
|
400
|
+
].join('\n');
|
|
401
|
+
}
|
|
402
|
+
async function publishNewConfig(path, content) {
|
|
403
|
+
const directory = dirname(path);
|
|
404
|
+
await ensureConfigDirectory(directory);
|
|
405
|
+
const temporary = join(directory, `.config.yml.${process.pid}.${randomUUID()}.tmp`);
|
|
406
|
+
let handle;
|
|
407
|
+
try {
|
|
408
|
+
handle = await open(temporary, 'wx', 0o600);
|
|
409
|
+
await handle.writeFile(content, 'utf8');
|
|
410
|
+
await handle.sync();
|
|
411
|
+
await handle.close();
|
|
412
|
+
handle = undefined;
|
|
413
|
+
await link(temporary, path);
|
|
414
|
+
}
|
|
415
|
+
catch (error) {
|
|
416
|
+
if (hasErrorCode(error, 'EEXIST'))
|
|
417
|
+
throw new TypeError(`Configuration already exists: ${path}`);
|
|
418
|
+
throw error;
|
|
419
|
+
}
|
|
420
|
+
finally {
|
|
421
|
+
await handle?.close().catch(() => undefined);
|
|
422
|
+
await unlink(temporary).catch((error) => {
|
|
423
|
+
if (!hasErrorCode(error, 'ENOENT'))
|
|
424
|
+
throw error;
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
async function ensureConfigDirectory(path) {
|
|
429
|
+
try {
|
|
430
|
+
const metadata = await lstat(path);
|
|
431
|
+
if (!metadata.isDirectory() || metadata.isSymbolicLink()) {
|
|
432
|
+
throw new TypeError(`Configuration parent is not a regular directory: ${path}`);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
catch (error) {
|
|
436
|
+
if (!hasErrorCode(error, 'ENOENT'))
|
|
437
|
+
throw error;
|
|
438
|
+
await mkdir(path, { recursive: true, mode: 0o700 });
|
|
439
|
+
const metadata = await lstat(path);
|
|
440
|
+
if (!metadata.isDirectory() || metadata.isSymbolicLink()) {
|
|
441
|
+
throw new TypeError(`Configuration parent is not a regular directory: ${path}`);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
function hasErrorCode(error, code) {
|
|
446
|
+
return error instanceof Error && 'code' in error && error.code === code;
|
|
447
|
+
}
|
|
116
448
|
async function readManifest(path) {
|
|
117
449
|
const manifest = JSON.parse(await readFile(path, 'utf8'));
|
|
118
450
|
validateManifest(manifest);
|
|
@@ -127,6 +459,9 @@ async function emitPlan(plan, path, output) {
|
|
|
127
459
|
function help() {
|
|
128
460
|
return [
|
|
129
461
|
'Usage:',
|
|
462
|
+
' neottia init [--harness pi|opencode]... [--project DIR] # create, or validate if present',
|
|
463
|
+
' neottia apply [--harness ID]... [--scope project|global] [--project DIR]',
|
|
464
|
+
' neottia doctor [--project DIR] # static config + install report',
|
|
130
465
|
' neottia plan --manifest FILE [--action install|update] [--output FILE] [--approve ID]...',
|
|
131
466
|
' neottia apply --plan FILE',
|
|
132
467
|
' 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.
|
|
3
|
+
"version": "0.4.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,7 +38,17 @@
|
|
|
38
38
|
"node": ">=22.20.0"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@neottia/
|
|
41
|
+
"@neottia/config": "^0.2.0",
|
|
42
|
+
"@neottia/config-registry": "^0.2.1",
|
|
43
|
+
"@neottia/design-docs": "^0.2.0",
|
|
44
|
+
"@neottia/distribution": "^0.2.0",
|
|
45
|
+
"@neottia/issues": "^0.2.0",
|
|
46
|
+
"@neottia/harness-adapter": "^0.2.0",
|
|
47
|
+
"@neottia/memory-core": "^0.2.0",
|
|
48
|
+
"@neottia/opencode-adapter": "^0.2.0",
|
|
49
|
+
"@neottia/pi-adapter": "^0.2.0",
|
|
50
|
+
"@neottia/sdlc": "^0.3.0",
|
|
51
|
+
"@neottia/searchable-core": "^0.2.0"
|
|
42
52
|
},
|
|
43
53
|
"devDependencies": {
|
|
44
54
|
"@templ-project/tsconfig": "^0.2.2",
|
|
@@ -48,6 +58,7 @@
|
|
|
48
58
|
},
|
|
49
59
|
"scripts": {
|
|
50
60
|
"build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.build.json",
|
|
61
|
+
"pretest": "node ../../scripts/run-unless-workspace-prebuilt.mjs pnpm --filter @neottia/cli... run build",
|
|
51
62
|
"test": "vitest run --root ../.. packages/cli/src",
|
|
52
63
|
"typecheck": "tsc --noEmit"
|
|
53
64
|
}
|