@open-agent-toolkit/cli 0.2.36 → 0.2.37
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/assets/bundle-metadata.json +1 -1
- package/assets/docs/cli-utilities/backlog-lifecycle.md +18 -0
- package/assets/docs/cli-utilities/bootstrap.md +6 -3
- package/assets/docs/cli-utilities/config-and-local-state.md +26 -12
- package/assets/docs/cli-utilities/configuration.md +36 -13
- package/assets/docs/cli-utilities/tool-packs.md +423 -51
- package/assets/docs/provider-sync/scope-and-surface.md +4 -1
- package/assets/docs/reference/cli-reference.md +5 -3
- package/assets/docs/reference/file-locations.md +28 -4
- package/assets/docs/reference/troubleshooting.md +132 -2
- package/assets/docs/workflows/projects/lifecycle.md +21 -2
- package/assets/public-package-versions.json +4 -4
- package/assets/scripts/generate-oat-state.sh +441 -0
- package/assets/scripts/generate-thin-index.sh +200 -0
- package/assets/skills/oat-agent-instructions-analyze/SKILL.md +10 -5
- package/assets/skills/oat-agent-instructions-apply/SKILL.md +30 -5
- package/assets/skills/oat-brainstorm/SKILL.md +34 -8
- package/assets/skills/oat-brainstorm/references/destinations.md +6 -1
- package/assets/skills/oat-docs-analyze/SKILL.md +9 -4
- package/assets/skills/oat-docs-apply/SKILL.md +6 -3
- package/assets/skills/oat-pjm-add-backlog-item/SKILL.md +14 -1
- package/assets/skills/oat-pjm-decision/SKILL.md +22 -10
- package/assets/skills/oat-pjm-review-backlog/SKILL.md +20 -3
- package/assets/skills/oat-pjm-update-repo-reference/SKILL.md +20 -10
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +1 -1
- package/assets/skills/oat-project-document/SKILL.md +21 -3
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-summary/SKILL.md +23 -11
- package/assets/skills/oat-repo-knowledge-index/SKILL.md +6 -3
- package/dist/commands/backlog/index.d.ts +2 -0
- package/dist/commands/backlog/index.d.ts.map +1 -1
- package/dist/commands/backlog/index.js +67 -23
- package/dist/commands/backlog/new.d.ts +3 -0
- package/dist/commands/backlog/new.d.ts.map +1 -1
- package/dist/commands/backlog/new.js +8 -21
- package/dist/commands/decision/agents-guidance.d.ts.map +1 -1
- package/dist/commands/decision/agents-guidance.js +2 -1
- package/dist/commands/decision/index.d.ts +2 -0
- package/dist/commands/decision/index.d.ts.map +1 -1
- package/dist/commands/decision/index.js +19 -3
- package/dist/commands/decision/new.d.ts +4 -0
- package/dist/commands/decision/new.d.ts.map +1 -1
- package/dist/commands/decision/new.js +11 -30
- package/dist/commands/doctor/index.d.ts +4 -0
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +254 -9
- package/dist/commands/init/tools/brainstorm/index.d.ts.map +1 -1
- package/dist/commands/init/tools/brainstorm/index.js +20 -6
- package/dist/commands/init/tools/docs/index.d.ts.map +1 -1
- package/dist/commands/init/tools/docs/index.js +4 -1
- package/dist/commands/init/tools/ideas/index.d.ts.map +1 -1
- package/dist/commands/init/tools/ideas/index.js +4 -1
- package/dist/commands/init/tools/index.d.ts +11 -2
- package/dist/commands/init/tools/index.d.ts.map +1 -1
- package/dist/commands/init/tools/index.js +459 -351
- package/dist/commands/init/tools/install-state.d.ts +2 -0
- package/dist/commands/init/tools/install-state.d.ts.map +1 -1
- package/dist/commands/init/tools/install-state.js +11 -0
- package/dist/commands/init/tools/project-management/agents-guidance.d.ts.map +1 -1
- package/dist/commands/init/tools/project-management/agents-guidance.js +3 -1
- package/dist/commands/init/tools/project-management/index.d.ts +1 -0
- package/dist/commands/init/tools/project-management/index.d.ts.map +1 -1
- package/dist/commands/init/tools/project-management/index.js +24 -55
- package/dist/commands/init/tools/project-management/install-project-management.d.ts +4 -0
- package/dist/commands/init/tools/project-management/install-project-management.d.ts.map +1 -1
- package/dist/commands/init/tools/project-management/install-project-management.js +4 -1
- package/dist/commands/init/tools/research/index.d.ts.map +1 -1
- package/dist/commands/init/tools/research/index.js +4 -1
- package/dist/commands/init/tools/shared/copy-helpers.d.ts.map +1 -1
- package/dist/commands/init/tools/shared/copy-helpers.js +10 -0
- package/dist/commands/init/tools/shared/skill-manifest.d.ts +15 -15
- package/dist/commands/init/tools/shared/skill-manifest.d.ts.map +1 -1
- package/dist/commands/init/tools/shared/skill-manifest.js +17 -122
- package/dist/commands/init/tools/utility/index.d.ts.map +1 -1
- package/dist/commands/init/tools/utility/index.js +4 -1
- package/dist/commands/init/tools/workflows/index.d.ts.map +1 -1
- package/dist/commands/init/tools/workflows/index.js +4 -1
- package/dist/commands/init/tools/workflows/install-workflows.d.ts.map +1 -1
- package/dist/commands/init/tools/workflows/install-workflows.js +2 -4
- package/dist/commands/pjm/adoption.d.ts +12 -0
- package/dist/commands/pjm/adoption.d.ts.map +1 -0
- package/dist/commands/pjm/adoption.js +47 -0
- package/dist/commands/pjm/doctor.d.ts +3 -2
- package/dist/commands/pjm/doctor.d.ts.map +1 -1
- package/dist/commands/pjm/doctor.js +28 -13
- package/dist/commands/pjm/index.d.ts +2 -0
- package/dist/commands/pjm/index.d.ts.map +1 -1
- package/dist/commands/pjm/index.js +11 -3
- package/dist/commands/pjm/init.d.ts +3 -0
- package/dist/commands/pjm/init.d.ts.map +1 -1
- package/dist/commands/pjm/init.js +37 -32
- package/dist/commands/pjm/migrate.d.ts +1 -0
- package/dist/commands/pjm/migrate.d.ts.map +1 -1
- package/dist/commands/pjm/migrate.js +1 -0
- package/dist/commands/pjm/template-source.d.ts +14 -0
- package/dist/commands/pjm/template-source.d.ts.map +1 -0
- package/dist/commands/pjm/template-source.js +56 -0
- package/dist/commands/remove/skills/remove-skills.d.ts.map +1 -1
- package/dist/commands/remove/skills/remove-skills.js +10 -19
- package/dist/commands/status/index.d.ts +5 -0
- package/dist/commands/status/index.d.ts.map +1 -1
- package/dist/commands/status/index.js +203 -2
- package/dist/commands/sync/index.d.ts.map +1 -1
- package/dist/commands/sync/index.js +40 -7
- package/dist/commands/sync/sync.types.d.ts +4 -0
- package/dist/commands/sync/sync.types.d.ts.map +1 -1
- package/dist/commands/tools/has/has-pack.d.ts +11 -2
- package/dist/commands/tools/has/has-pack.d.ts.map +1 -1
- package/dist/commands/tools/has/has-pack.js +33 -20
- package/dist/commands/tools/index.d.ts.map +1 -1
- package/dist/commands/tools/index.js +3 -1
- package/dist/commands/tools/info/info-tool.d.ts +3 -0
- package/dist/commands/tools/info/info-tool.d.ts.map +1 -1
- package/dist/commands/tools/info/info-tool.js +29 -4
- package/dist/commands/tools/list/list-tools.d.ts +3 -0
- package/dist/commands/tools/list/list-tools.d.ts.map +1 -1
- package/dist/commands/tools/list/list-tools.js +31 -4
- package/dist/commands/tools/migrate/index.d.ts +26 -0
- package/dist/commands/tools/migrate/index.d.ts.map +1 -0
- package/dist/commands/tools/migrate/index.js +312 -0
- package/dist/commands/tools/migrate/migrate-pack.d.ts +81 -0
- package/dist/commands/tools/migrate/migrate-pack.d.ts.map +1 -0
- package/dist/commands/tools/migrate/migrate-pack.js +324 -0
- package/dist/commands/tools/outdated/outdated-tools.d.ts +11 -0
- package/dist/commands/tools/outdated/outdated-tools.d.ts.map +1 -1
- package/dist/commands/tools/outdated/outdated-tools.js +33 -5
- package/dist/commands/tools/remove/index.d.ts.map +1 -1
- package/dist/commands/tools/remove/index.js +73 -20
- package/dist/commands/tools/remove/remove-tools.d.ts +28 -0
- package/dist/commands/tools/remove/remove-tools.d.ts.map +1 -1
- package/dist/commands/tools/remove/remove-tools.js +156 -26
- package/dist/commands/tools/shared/apply-pack-reconcile.d.ts +41 -0
- package/dist/commands/tools/shared/apply-pack-reconcile.d.ts.map +1 -0
- package/dist/commands/tools/shared/apply-pack-reconcile.js +126 -0
- package/dist/commands/tools/shared/auto-sync.d.ts +5 -2
- package/dist/commands/tools/shared/auto-sync.d.ts.map +1 -1
- package/dist/commands/tools/shared/auto-sync.js +1 -0
- package/dist/commands/tools/shared/content-digest.d.ts +3 -0
- package/dist/commands/tools/shared/content-digest.d.ts.map +1 -0
- package/dist/commands/tools/shared/content-digest.js +57 -0
- package/dist/commands/tools/shared/format-pack-inventory.d.ts +3 -0
- package/dist/commands/tools/shared/format-pack-inventory.d.ts.map +1 -0
- package/dist/commands/tools/shared/format-pack-inventory.js +21 -0
- package/dist/commands/tools/shared/install-sync-context.d.ts.map +1 -1
- package/dist/commands/tools/shared/install-sync-context.js +2 -25
- package/dist/commands/tools/shared/pack-inventory.d.ts +46 -0
- package/dist/commands/tools/shared/pack-inventory.d.ts.map +1 -0
- package/dist/commands/tools/shared/pack-inventory.js +207 -0
- package/dist/commands/tools/shared/pack-lifecycle.d.ts +34 -0
- package/dist/commands/tools/shared/pack-lifecycle.d.ts.map +1 -0
- package/dist/commands/tools/shared/pack-lifecycle.js +67 -0
- package/dist/commands/tools/shared/pack-manifest.d.ts +11 -0
- package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -0
- package/dist/commands/tools/shared/pack-manifest.js +384 -0
- package/dist/commands/tools/shared/pack-paths.d.ts +21 -0
- package/dist/commands/tools/shared/pack-paths.d.ts.map +1 -0
- package/dist/commands/tools/shared/pack-paths.js +35 -0
- package/dist/commands/tools/shared/pack-reconcile.d.ts +64 -0
- package/dist/commands/tools/shared/pack-reconcile.d.ts.map +1 -0
- package/dist/commands/tools/shared/pack-reconcile.js +158 -0
- package/dist/commands/tools/shared/project-tools-config.d.ts.map +1 -1
- package/dist/commands/tools/shared/project-tools-config.js +12 -38
- package/dist/commands/tools/shared/scan-tools.js +2 -2
- package/dist/commands/tools/shared/scoped-pack-intent.d.ts +34 -0
- package/dist/commands/tools/shared/scoped-pack-intent.d.ts.map +1 -0
- package/dist/commands/tools/shared/scoped-pack-intent.js +116 -0
- package/dist/commands/tools/shared/types.d.ts +22 -0
- package/dist/commands/tools/shared/types.d.ts.map +1 -1
- package/dist/commands/tools/update/index.d.ts.map +1 -1
- package/dist/commands/tools/update/index.js +30 -5
- package/dist/commands/tools/update/update-tools.d.ts +9 -1
- package/dist/commands/tools/update/update-tools.d.ts.map +1 -1
- package/dist/commands/tools/update/update-tools.js +176 -64
- package/dist/config/oat-config.d.ts +6 -0
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +49 -20
- package/dist/fs/paths.d.ts +12 -0
- package/dist/fs/paths.d.ts.map +1 -1
- package/dist/fs/paths.js +87 -1
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adoption.d.ts","sourceRoot":"","sources":["../../../src/commands/pjm/adoption.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,gBAAgB,GACxB,UAAU,GACV,iBAAiB,GACjB,wBAAwB,GACxB,MAAM,CAAC;AAEX,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,gBAAgB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAmBD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,WAAW,CAAC,CA8BtB"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { access } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { readOatConfig } from '../../config/oat-config.js';
|
|
4
|
+
import { CANONICAL_REPO_REFERENCE_PATHS } from './init.js';
|
|
5
|
+
async function pathExists(path) {
|
|
6
|
+
try {
|
|
7
|
+
await access(path);
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
if (error &&
|
|
12
|
+
typeof error === 'object' &&
|
|
13
|
+
'code' in error &&
|
|
14
|
+
error.code === 'ENOENT') {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
throw error;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export async function resolvePjmAdoption(options) {
|
|
21
|
+
const config = await readOatConfig(options.projectRoot);
|
|
22
|
+
if (config.pjm?.initialized === true) {
|
|
23
|
+
return {
|
|
24
|
+
state: 'declared',
|
|
25
|
+
repoRoot: options.repoRoot,
|
|
26
|
+
recovery: null,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
let present = 0;
|
|
30
|
+
for (const relativePath of CANONICAL_REPO_REFERENCE_PATHS) {
|
|
31
|
+
if (await pathExists(join(options.repoRoot, relativePath))) {
|
|
32
|
+
present += 1;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (present === CANONICAL_REPO_REFERENCE_PATHS.length) {
|
|
36
|
+
return {
|
|
37
|
+
state: 'inferred-legacy',
|
|
38
|
+
repoRoot: options.repoRoot,
|
|
39
|
+
recovery: null,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
state: present > 0 ? 'partial-initialization' : 'none',
|
|
44
|
+
repoRoot: options.repoRoot,
|
|
45
|
+
recovery: 'oat pjm init',
|
|
46
|
+
};
|
|
47
|
+
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { DoctorCheck } from '../../ui/output.js';
|
|
2
|
+
import { type PjmAdoption } from './adoption.js';
|
|
2
3
|
export interface PjmDoctorOptions {
|
|
3
|
-
|
|
4
|
+
projectRoot?: string;
|
|
5
|
+
adoption?: PjmAdoption;
|
|
4
6
|
}
|
|
5
|
-
export declare function createPjmDisabledCheck(): DoctorCheck;
|
|
6
7
|
export declare function runPjmDoctorChecks(repoRoot: string, options?: PjmDoctorOptions): Promise<DoctorCheck[]>;
|
|
7
8
|
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/commands/pjm/doctor.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/commands/pjm/doctor.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AA4LlE,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,WAAW,CAAC;CACxB;AAED,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,WAAW,EAAE,CAAC,CAiVxB"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { access, readdir, readFile } from 'node:fs/promises';
|
|
2
|
-
import { join } from 'node:path';
|
|
2
|
+
import { basename, dirname, join } from 'node:path';
|
|
3
3
|
import { BACKLOG_ITEM_STATUSES, extractBacklogStatus, isTerminalBacklogStatus, isValidBacklogStatus, } from '../backlog/shared/item-status.js';
|
|
4
4
|
import { getFrontmatterBlock } from '../shared/frontmatter.js';
|
|
5
|
+
import { resolvePjmAdoption } from './adoption.js';
|
|
5
6
|
import { CANONICAL_REPO_REFERENCE_PATHS } from './init.js';
|
|
6
7
|
const ALLOWED_TOP_LEVEL_DIRECTORIES = new Set([
|
|
7
8
|
'pjm',
|
|
@@ -154,20 +155,34 @@ function checkStatus(missing) {
|
|
|
154
155
|
function warnStatus(items) {
|
|
155
156
|
return items.length === 0 ? 'pass' : 'warn';
|
|
156
157
|
}
|
|
157
|
-
export function createPjmDisabledCheck() {
|
|
158
|
-
return {
|
|
159
|
-
name: 'pjm:disabled',
|
|
160
|
-
description: 'Project-management pack enablement',
|
|
161
|
-
status: 'pass',
|
|
162
|
-
message: 'Project-management pack is disabled; PJM checks skipped.',
|
|
163
|
-
fix: 'Run `oat init tools project-management` to install and enable PJM checks.',
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
158
|
export async function runPjmDoctorChecks(repoRoot, options = {}) {
|
|
167
|
-
|
|
168
|
-
|
|
159
|
+
const repoParent = dirname(repoRoot);
|
|
160
|
+
const projectRoot = options.projectRoot ??
|
|
161
|
+
(basename(repoParent) === '.oat' ? dirname(repoParent) : repoParent);
|
|
162
|
+
const adoption = options.adoption ?? (await resolvePjmAdoption({ repoRoot, projectRoot }));
|
|
163
|
+
const adoptionCheck = {
|
|
164
|
+
name: 'pjm:adoption',
|
|
165
|
+
description: 'Repository PJM adoption',
|
|
166
|
+
status: adoption.state === 'none'
|
|
167
|
+
? 'warn'
|
|
168
|
+
: adoption.state === 'partial-initialization'
|
|
169
|
+
? 'fail'
|
|
170
|
+
: 'pass',
|
|
171
|
+
message: adoption.state === 'declared'
|
|
172
|
+
? 'Repository has explicit PJM adoption state.'
|
|
173
|
+
: adoption.state === 'inferred-legacy'
|
|
174
|
+
? 'Repository has a complete legacy PJM scaffold without an explicit marker.'
|
|
175
|
+
: adoption.state === 'partial-initialization'
|
|
176
|
+
? 'Repository has a partial PJM scaffold and is not adopted.'
|
|
177
|
+
: 'Repository has not adopted PJM.',
|
|
178
|
+
fix: adoption.recovery
|
|
179
|
+
? `Run \`${adoption.recovery}\` to initialize this repository.`
|
|
180
|
+
: undefined,
|
|
181
|
+
};
|
|
182
|
+
if (adoption.state === 'none') {
|
|
183
|
+
return [adoptionCheck];
|
|
169
184
|
}
|
|
170
|
-
const checks = [];
|
|
185
|
+
const checks = [adoptionCheck];
|
|
171
186
|
const missingCanonical = [];
|
|
172
187
|
for (const relativePath of CANONICAL_REPO_REFERENCE_PATHS) {
|
|
173
188
|
if (!(await pathExists(join(repoRoot, relativePath)))) {
|
|
@@ -3,6 +3,7 @@ import { readOatConfig } from '../../config/oat-config.js';
|
|
|
3
3
|
import { resolveAssetsRoot } from '../../fs/assets.js';
|
|
4
4
|
import { resolveProjectRoot } from '../../fs/paths.js';
|
|
5
5
|
import { Command } from 'commander';
|
|
6
|
+
import { resolvePjmAdoption } from './adoption.js';
|
|
6
7
|
import { runPjmDoctorChecks } from './doctor.js';
|
|
7
8
|
import { initializeRepoReference } from './init.js';
|
|
8
9
|
import { migratePjmRepo, readPjmMigrationPrompt } from './migrate.js';
|
|
@@ -11,6 +12,7 @@ interface PjmCommandDependencies {
|
|
|
11
12
|
resolveProjectRoot: typeof resolveProjectRoot;
|
|
12
13
|
resolveAssetsRoot: typeof resolveAssetsRoot;
|
|
13
14
|
readOatConfig: typeof readOatConfig;
|
|
15
|
+
resolvePjmAdoption: typeof resolvePjmAdoption;
|
|
14
16
|
initializeRepoReference: typeof initializeRepoReference;
|
|
15
17
|
runPjmDoctorChecks: typeof runPjmDoctorChecks;
|
|
16
18
|
migratePjmRepo: typeof migratePjmRepo;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/pjm/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAuB,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAA0B,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAiBnE,UAAU,sBAAsB;IAC9B,mBAAmB,EAAE,OAAO,mBAAmB,CAAC;IAChD,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;IAC9C,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,uBAAuB,EAAE,OAAO,uBAAuB,CAAC;IACxD,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;IAC9C,cAAc,EAAE,OAAO,cAAc,CAAC;IACtC,sBAAsB,EAAE,OAAO,sBAAsB,CAAC;CACvD;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/pjm/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAuB,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAA0B,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAiBnE,UAAU,sBAAsB;IAC9B,mBAAmB,EAAE,OAAO,mBAAmB,CAAC;IAChD,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;IAC9C,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;IAC9C,uBAAuB,EAAE,OAAO,uBAAuB,CAAC;IACxD,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;IAC9C,cAAc,EAAE,OAAO,cAAc,CAAC;IACtC,sBAAsB,EAAE,OAAO,sBAAsB,CAAC;CACvD;AA8FD,wBAAgB,gBAAgB,CAC9B,SAAS,GAAE,OAAO,CAAC,sBAAsB,CAAM,GAC9C,OAAO,CA4JT"}
|
|
@@ -6,6 +6,7 @@ import { resolveAssetsRoot } from '../../fs/assets.js';
|
|
|
6
6
|
import { resolveProjectRoot } from '../../fs/paths.js';
|
|
7
7
|
import { formatDoctorResults } from '../../ui/output.js';
|
|
8
8
|
import { Command } from 'commander';
|
|
9
|
+
import { resolvePjmAdoption } from './adoption.js';
|
|
9
10
|
import { runPjmDoctorChecks } from './doctor.js';
|
|
10
11
|
import { initializeRepoReference, INSTRUCTIONS_SYNC_HINT } from './init.js';
|
|
11
12
|
import { migratePjmRepo, readPjmMigrationPrompt } from './migrate.js';
|
|
@@ -14,6 +15,7 @@ const DEFAULT_DEPENDENCIES = {
|
|
|
14
15
|
resolveProjectRoot,
|
|
15
16
|
resolveAssetsRoot,
|
|
16
17
|
readOatConfig,
|
|
18
|
+
resolvePjmAdoption,
|
|
17
19
|
initializeRepoReference,
|
|
18
20
|
runPjmDoctorChecks,
|
|
19
21
|
migratePjmRepo,
|
|
@@ -96,9 +98,11 @@ export function createPjmCommand(overrides = {}) {
|
|
|
96
98
|
const repoRoot = await resolveRepoRoot(context, projectRoot, options.repoRoot);
|
|
97
99
|
const assetsRoot = await dependencies.resolveAssetsRoot();
|
|
98
100
|
const result = await dependencies.initializeRepoReference({
|
|
101
|
+
projectRoot,
|
|
99
102
|
repoRoot,
|
|
100
103
|
assetsRoot,
|
|
101
104
|
templatesRoot: resolve(projectRoot, '.oat', 'templates'),
|
|
105
|
+
home: context.home,
|
|
102
106
|
});
|
|
103
107
|
if (context.json) {
|
|
104
108
|
context.logger.json({ status: 'ok', ...result });
|
|
@@ -128,13 +132,16 @@ export function createPjmCommand(overrides = {}) {
|
|
|
128
132
|
try {
|
|
129
133
|
const projectRoot = await dependencies.resolveProjectRoot(context.cwd);
|
|
130
134
|
const repoRoot = await resolveRepoRoot(context, projectRoot, options.repoRoot);
|
|
131
|
-
const
|
|
135
|
+
const adoption = await dependencies.resolvePjmAdoption({
|
|
136
|
+
projectRoot,
|
|
137
|
+
repoRoot,
|
|
138
|
+
});
|
|
132
139
|
const checks = await dependencies.runPjmDoctorChecks(repoRoot, {
|
|
133
|
-
|
|
140
|
+
adoption,
|
|
134
141
|
});
|
|
135
142
|
const status = doctorStatus(checks);
|
|
136
143
|
if (context.json) {
|
|
137
|
-
context.logger.json({ status, repoRoot, checks });
|
|
144
|
+
context.logger.json({ status, repoRoot, adoption, checks });
|
|
138
145
|
}
|
|
139
146
|
else {
|
|
140
147
|
context.logger.info(formatDoctorResults(checks));
|
|
@@ -174,6 +181,7 @@ export function createPjmCommand(overrides = {}) {
|
|
|
174
181
|
repoRoot,
|
|
175
182
|
assetsRoot,
|
|
176
183
|
templatesRoot: resolve(projectRoot, '.oat', 'templates'),
|
|
184
|
+
home: context.home,
|
|
177
185
|
projectManagementEnabled: config.tools?.['project-management'] === true,
|
|
178
186
|
apply: options.dryRun ? false : (options.apply ?? false),
|
|
179
187
|
});
|
|
@@ -2,6 +2,8 @@ export interface InitializeRepoReferenceOptions {
|
|
|
2
2
|
repoRoot: string;
|
|
3
3
|
assetsRoot: string;
|
|
4
4
|
templatesRoot?: string;
|
|
5
|
+
projectRoot?: string;
|
|
6
|
+
home?: string;
|
|
5
7
|
}
|
|
6
8
|
export interface RepoReferenceInitResult {
|
|
7
9
|
repoRoot: string;
|
|
@@ -10,5 +12,6 @@ export interface RepoReferenceInitResult {
|
|
|
10
12
|
}
|
|
11
13
|
export declare const INSTRUCTIONS_SYNC_HINT: string;
|
|
12
14
|
export declare const CANONICAL_REPO_REFERENCE_PATHS: readonly [...("AGENTS.md" | "README.md" | "pjm/AGENTS.md" | "pjm/current-state.md" | "pjm/handoffs/README.md" | "pjm/roadmap.md" | "reference/AGENTS.md")[], "pjm/backlog/index.md", "pjm/backlog/completed.md", "pjm/backlog/items/.gitkeep", "pjm/backlog/archived/.gitkeep", "reference/decisions/AGENTS.md", "reference/decisions/index.md"];
|
|
15
|
+
export declare const PJM_ADOPTION_SCHEMA_VERSION = 1;
|
|
13
16
|
export declare function initializeRepoReference(options: InitializeRepoReferenceOptions): Promise<RepoReferenceInitResult>;
|
|
14
17
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/pjm/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/pjm/init.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAoBD,eAAO,MAAM,sBAAsB,QAEiD,CAAC;AAerF,eAAO,MAAM,8BAA8B,kVAIjC,CAAC;AAEX,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAiC7C,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,uBAAuB,CAAC,CA8GlC"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import { access, mkdir,
|
|
2
|
-
import { dirname, join } from 'node:path';
|
|
1
|
+
import { access, mkdir, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { basename, dirname, join } from 'node:path';
|
|
3
3
|
import { initializeBacklog } from '../backlog/init.js';
|
|
4
|
-
import { initializeScopedDecisionAgentsGuidance } from '../decision/agents-guidance.js';
|
|
4
|
+
import { buildDecisionAgentsSectionBody, DECISION_AGENTS_SECTION_KEY, initializeScopedDecisionAgentsGuidance, } from '../decision/agents-guidance.js';
|
|
5
5
|
import { initializeDecisionRecords } from '../decision/init.js';
|
|
6
|
+
import { buildProjectManagementAgentsSectionBody, PROJECT_MANAGEMENT_AGENTS_SECTION_KEY, } from '../init/tools/project-management/agents-guidance.js';
|
|
7
|
+
import { upsertAgentsMdSection } from '../shared/agents-md.js';
|
|
6
8
|
import { stripTemplateFrontmatter } from '../shared/strip-template-frontmatter.js';
|
|
9
|
+
import { readOatConfig, writeOatConfig } from '../../config/oat-config.js';
|
|
10
|
+
import { resolvePjmTemplate } from './template-source.js';
|
|
7
11
|
const TEMPLATE_TARGETS = [
|
|
8
12
|
{ template: 'repo-agents.md', target: 'AGENTS.md' },
|
|
9
13
|
{ template: 'pjm-agents.md', target: 'pjm/AGENTS.md' },
|
|
@@ -34,6 +38,7 @@ export const CANONICAL_REPO_REFERENCE_PATHS = [
|
|
|
34
38
|
...BACKLOG_PATHS,
|
|
35
39
|
...DECISION_PATHS,
|
|
36
40
|
];
|
|
41
|
+
export const PJM_ADOPTION_SCHEMA_VERSION = 1;
|
|
37
42
|
async function pathExists(path) {
|
|
38
43
|
try {
|
|
39
44
|
await access(path);
|
|
@@ -49,33 +54,6 @@ async function pathExists(path) {
|
|
|
49
54
|
return false;
|
|
50
55
|
}
|
|
51
56
|
}
|
|
52
|
-
async function readIfExists(path) {
|
|
53
|
-
try {
|
|
54
|
-
return await readFile(path, 'utf8');
|
|
55
|
-
}
|
|
56
|
-
catch (error) {
|
|
57
|
-
const code = error && typeof error === 'object' && 'code' in error
|
|
58
|
-
? String(error.code)
|
|
59
|
-
: null;
|
|
60
|
-
if (code !== 'ENOENT') {
|
|
61
|
-
throw error;
|
|
62
|
-
}
|
|
63
|
-
return null;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
async function resolveTemplateContent(name, options) {
|
|
67
|
-
if (options.templatesRoot) {
|
|
68
|
-
const localTemplate = await readIfExists(join(options.templatesRoot, name));
|
|
69
|
-
if (localTemplate !== null) {
|
|
70
|
-
return localTemplate;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
const bundledTemplate = await readIfExists(join(options.assetsRoot, 'templates', name));
|
|
74
|
-
if (bundledTemplate !== null) {
|
|
75
|
-
return bundledTemplate;
|
|
76
|
-
}
|
|
77
|
-
throw new Error(`Template ${name} was not found in repo-local templates or bundled assets.`);
|
|
78
|
-
}
|
|
79
57
|
async function writeFileIfMissing(filePath, content) {
|
|
80
58
|
if (await pathExists(filePath)) {
|
|
81
59
|
return 'skipped';
|
|
@@ -93,8 +71,13 @@ export async function initializeRepoReference(options) {
|
|
|
93
71
|
skipped.push(target.target);
|
|
94
72
|
continue;
|
|
95
73
|
}
|
|
96
|
-
const template = await
|
|
97
|
-
|
|
74
|
+
const template = await resolvePjmTemplate({
|
|
75
|
+
name: target.template,
|
|
76
|
+
assetsRoot: options.assetsRoot,
|
|
77
|
+
templatesRoot: options.templatesRoot,
|
|
78
|
+
home: options.home,
|
|
79
|
+
});
|
|
80
|
+
const status = await writeFileIfMissing(targetPath, stripTemplateFrontmatter(template.content));
|
|
98
81
|
if (status === 'created') {
|
|
99
82
|
created.push(target.target);
|
|
100
83
|
}
|
|
@@ -135,6 +118,28 @@ export async function initializeRepoReference(options) {
|
|
|
135
118
|
created.push(relativePath);
|
|
136
119
|
}
|
|
137
120
|
}
|
|
121
|
+
for (const relativePath of CANONICAL_REPO_REFERENCE_PATHS) {
|
|
122
|
+
if (!(await pathExists(join(options.repoRoot, relativePath)))) {
|
|
123
|
+
throw new Error(`PJM scaffold verification failed: missing ${relativePath}.`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const repoParent = dirname(options.repoRoot);
|
|
127
|
+
const projectRoot = options.projectRoot ??
|
|
128
|
+
(basename(repoParent) === '.oat' ? dirname(repoParent) : repoParent);
|
|
129
|
+
const config = await readOatConfig(projectRoot);
|
|
130
|
+
await writeOatConfig(projectRoot, {
|
|
131
|
+
...config,
|
|
132
|
+
pjm: {
|
|
133
|
+
initialized: true,
|
|
134
|
+
schemaVersion: PJM_ADOPTION_SCHEMA_VERSION,
|
|
135
|
+
},
|
|
136
|
+
});
|
|
137
|
+
// Repository AGENTS guidance belongs to adoption, not to pack placement:
|
|
138
|
+
// it is written here — after scaffold verification and alongside the
|
|
139
|
+
// `pjm.initialized` marker — so installing the capability at any scope never
|
|
140
|
+
// implies that this repository adopted PJM.
|
|
141
|
+
await upsertAgentsMdSection(projectRoot, PROJECT_MANAGEMENT_AGENTS_SECTION_KEY, buildProjectManagementAgentsSectionBody());
|
|
142
|
+
await upsertAgentsMdSection(projectRoot, DECISION_AGENTS_SECTION_KEY, buildDecisionAgentsSectionBody());
|
|
138
143
|
return {
|
|
139
144
|
repoRoot: options.repoRoot,
|
|
140
145
|
created,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/commands/pjm/migrate.ts"],"names":[],"mappings":"AAeA,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,4BAA4B,CAAC;AAMpC,MAAM,MAAM,sBAAsB,GAC9B,MAAM,GACN,QAAQ,GACR,iBAAiB,GACjB,mBAAmB,GACnB,SAAS,CAAC;AAEd,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAEzE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,MAAM,EAAE,wBAAwB,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,kBAAkB,GAAG,UAAU,CAAC;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,eAAe,EAAE,0BAA0B,EAAE,CAAC;IAC9C,gBAAgB,EAAE,wBAAwB,EAAE,CAAC;IAC7C,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wBAAwB,EAAE,OAAO,CAAC;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAoZD,wBAAsB,cAAc,CAClC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/commands/pjm/migrate.ts"],"names":[],"mappings":"AAeA,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,4BAA4B,CAAC;AAMpC,MAAM,MAAM,sBAAsB,GAC9B,MAAM,GACN,QAAQ,GACR,iBAAiB,GACjB,mBAAmB,GACnB,SAAS,CAAC;AAEd,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAEzE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,MAAM,EAAE,wBAAwB,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,kBAAkB,GAAG,UAAU,CAAC;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,eAAe,EAAE,0BAA0B,EAAE,CAAC;IAC9C,gBAAgB,EAAE,wBAAwB,EAAE,CAAC;IAC7C,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wBAAwB,EAAE,OAAO,CAAC;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAoZD,wBAAsB,cAAc,CAClC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAmG7B;AAED,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAEjB"}
|
|
@@ -363,6 +363,7 @@ export async function migratePjmRepo(options) {
|
|
|
363
363
|
repoRoot: options.repoRoot,
|
|
364
364
|
assetsRoot: options.assetsRoot,
|
|
365
365
|
templatesRoot: options.templatesRoot,
|
|
366
|
+
home: options.home,
|
|
366
367
|
});
|
|
367
368
|
const preparedAfterMove = await prepareBacklogMigrations(pjmBacklogRoot);
|
|
368
369
|
written.push(...(await applyBacklogMigrations(preparedAfterMove)));
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type PjmTemplateTier = 'repository' | 'user' | 'bundle';
|
|
2
|
+
export interface ResolvePjmTemplateOptions {
|
|
3
|
+
name: string;
|
|
4
|
+
assetsRoot: string;
|
|
5
|
+
templatesRoot?: string;
|
|
6
|
+
home?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ResolvedPjmTemplate {
|
|
9
|
+
content: string;
|
|
10
|
+
path: string;
|
|
11
|
+
tier: PjmTemplateTier;
|
|
12
|
+
}
|
|
13
|
+
export declare function resolvePjmTemplate(options: ResolvePjmTemplateOptions): Promise<ResolvedPjmTemplate>;
|
|
14
|
+
//# sourceMappingURL=template-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-source.d.ts","sourceRoot":"","sources":["../../../src/commands/pjm/template-source.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE/D,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,eAAe,CAAC;CACvB;AAkBD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CA2C9B"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { basename, join } from 'node:path';
|
|
4
|
+
async function readIfExists(path) {
|
|
5
|
+
try {
|
|
6
|
+
return await readFile(path, 'utf8');
|
|
7
|
+
}
|
|
8
|
+
catch (error) {
|
|
9
|
+
if (error &&
|
|
10
|
+
typeof error === 'object' &&
|
|
11
|
+
'code' in error &&
|
|
12
|
+
error.code === 'ENOENT') {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
throw error;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export async function resolvePjmTemplate(options) {
|
|
19
|
+
if (basename(options.name) !== options.name) {
|
|
20
|
+
throw new Error(`Invalid PJM template name: ${options.name}`);
|
|
21
|
+
}
|
|
22
|
+
// Resolve the same home the installer writes to. `CommandContext.home` is
|
|
23
|
+
// `os.homedir()`, so falling back to `process.env.HOME` would skip the user
|
|
24
|
+
// tier entirely wherever HOME is unset but `homedir()` resolves (Windows
|
|
25
|
+
// derives it from USERPROFILE).
|
|
26
|
+
const home = options.home ?? homedir();
|
|
27
|
+
const candidates = [
|
|
28
|
+
...(options.templatesRoot
|
|
29
|
+
? [
|
|
30
|
+
{
|
|
31
|
+
path: join(options.templatesRoot, options.name),
|
|
32
|
+
tier: 'repository',
|
|
33
|
+
},
|
|
34
|
+
]
|
|
35
|
+
: []),
|
|
36
|
+
...(home
|
|
37
|
+
? [
|
|
38
|
+
{
|
|
39
|
+
path: join(home, '.oat', 'templates', options.name),
|
|
40
|
+
tier: 'user',
|
|
41
|
+
},
|
|
42
|
+
]
|
|
43
|
+
: []),
|
|
44
|
+
{
|
|
45
|
+
path: join(options.assetsRoot, 'templates', options.name),
|
|
46
|
+
tier: 'bundle',
|
|
47
|
+
},
|
|
48
|
+
];
|
|
49
|
+
for (const candidate of candidates) {
|
|
50
|
+
const content = await readIfExists(candidate.path);
|
|
51
|
+
if (content !== null) {
|
|
52
|
+
return { ...candidate, content };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
throw new Error(`Template ${options.name} was not found in repository, user, or bundled PJM templates.`);
|
|
56
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove-skills.d.ts","sourceRoot":"","sources":["../../../../src/commands/remove/skills/remove-skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"remove-skills.d.ts","sourceRoot":"","sources":["../../../../src/commands/remove/skills/remove-skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGlE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAEL,KAAK,uBAAuB,EAE7B,MAAM,uBAAuB,CAAC;AAiB/B,UAAU,wBAAwB;IAChC,mBAAmB,EAAE,CACnB,OAAO,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,KAC1C,cAAc,CAAC;IACpB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,cAAc,EAAE,CACd,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,EACf,YAAY,EAAE,uBAAuB,KAClC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,uBAAuB,EAAE,uBAAuB,CAAC;CAClD;AAeD,wBAAgB,yBAAyB,CACvC,SAAS,GAAE,OAAO,CAAC,wBAAwB,CAAM,GAChD,OAAO,CAsFT"}
|
|
@@ -1,21 +1,16 @@
|
|
|
1
1
|
import { buildCommandContext } from '../../../app/command-context.js';
|
|
2
|
-
import { DOCS_SKILLS } from '../../init/tools/docs/install-docs.js';
|
|
3
|
-
import { IDEA_SKILLS } from '../../init/tools/ideas/install-ideas.js';
|
|
4
|
-
import { RESEARCH_SKILLS } from '../../init/tools/research/install-research.js';
|
|
5
|
-
import { UTILITY_SKILLS } from '../../init/tools/utility/install-utility.js';
|
|
6
|
-
import { WORKFLOW_SKILLS } from '../../init/tools/workflows/install-workflows.js';
|
|
7
2
|
import { withScopeOption } from '../../shared/scope-option.js';
|
|
8
3
|
import { confirmAction, } from '../../shared/shared.prompts.js';
|
|
9
4
|
import { readGlobalOptions } from '../../shared/shared.utils.js';
|
|
5
|
+
import { PACK_MANIFEST } from '../../tools/shared/pack-manifest.js';
|
|
10
6
|
import { Command } from 'commander';
|
|
11
7
|
import { createDefaultRemoveSkillDependencies, runRemoveSkill, } from '../skill/remove-skill.js';
|
|
12
|
-
const PACK_SKILLS = {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
};
|
|
8
|
+
const PACK_SKILLS = PACK_MANIFEST.reduce((packs, { name, assets }) => {
|
|
9
|
+
packs[name] = assets
|
|
10
|
+
.filter(({ kind }) => kind === 'skill')
|
|
11
|
+
.map(({ destination }) => destination.split('/').at(-1));
|
|
12
|
+
return packs;
|
|
13
|
+
}, {});
|
|
19
14
|
function createDependencies() {
|
|
20
15
|
return {
|
|
21
16
|
buildCommandContext,
|
|
@@ -25,11 +20,7 @@ function createDependencies() {
|
|
|
25
20
|
};
|
|
26
21
|
}
|
|
27
22
|
function isPackName(value) {
|
|
28
|
-
return (value
|
|
29
|
-
value === 'docs' ||
|
|
30
|
-
value === 'workflows' ||
|
|
31
|
-
value === 'utility' ||
|
|
32
|
-
value === 'research');
|
|
23
|
+
return Object.hasOwn(PACK_SKILLS, value);
|
|
33
24
|
}
|
|
34
25
|
export function createRemoveSkillsCommand(overrides = {}) {
|
|
35
26
|
const dependencies = {
|
|
@@ -38,14 +29,14 @@ export function createRemoveSkillsCommand(overrides = {}) {
|
|
|
38
29
|
};
|
|
39
30
|
return withScopeOption(new Command('skills'))
|
|
40
31
|
.description('Remove installed skills by pack')
|
|
41
|
-
.requiredOption('--pack <pack>',
|
|
32
|
+
.requiredOption('--pack <pack>', `Skill pack to remove (${PACK_MANIFEST.map(({ name }) => name).join('|')})`)
|
|
42
33
|
.option('--dry-run', 'Preview removal without applying')
|
|
43
34
|
.action(async (options, command) => {
|
|
44
35
|
const context = dependencies.buildCommandContext(readGlobalOptions(command));
|
|
45
36
|
try {
|
|
46
37
|
const rawPack = (options.pack ?? '').toLowerCase();
|
|
47
38
|
if (!isPackName(rawPack)) {
|
|
48
|
-
throw new Error(`Invalid pack: ${options.pack}. Expected one of:
|
|
39
|
+
throw new Error(`Invalid pack: ${options.pack}. Expected one of: ${PACK_MANIFEST.map(({ name }) => name).join(', ')}.`);
|
|
49
40
|
}
|
|
50
41
|
const skills = [...PACK_SKILLS[rawPack]];
|
|
51
42
|
if (context.interactive && skills.length > 3) {
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { type CommandContext, type GlobalOptions } from '../../app/command-context.js';
|
|
2
|
+
import { type PjmAdoption, type ResolvePjmAdoptionOptions } from '../pjm/adoption.js';
|
|
2
3
|
import { type CodexRoleStray } from '../shared/codex-strays.js';
|
|
3
4
|
import { type NativeSkillDisposition } from '../shared/native-skill-disposition.js';
|
|
4
5
|
import { type MultiSelectChoice, type PromptContext, type SelectChoice } from '../shared/shared.prompts.js';
|
|
6
|
+
import { type InventoryPackInput, type PackInventory } from '../tools/shared/pack-inventory.js';
|
|
5
7
|
import { type SyncConfig } from '../../config/index.js';
|
|
6
8
|
import { type CopyTransform, type DriftReport } from '../../drift/index.js';
|
|
7
9
|
import { type CanonicalEntry } from '../../engine/index.js';
|
|
@@ -48,6 +50,9 @@ interface StatusDependencies {
|
|
|
48
50
|
replaceCanonical?: boolean;
|
|
49
51
|
}) => Promise<Manifest>;
|
|
50
52
|
formatStatusTable: (reports: DriftReport[]) => string;
|
|
53
|
+
resolveAssetsRoot: () => Promise<string>;
|
|
54
|
+
inventoryPack: (input: InventoryPackInput) => Promise<PackInventory>;
|
|
55
|
+
resolvePjmAdoption: (options: ResolvePjmAdoptionOptions) => Promise<PjmAdoption>;
|
|
51
56
|
}
|
|
52
57
|
interface StatusStrayCandidate {
|
|
53
58
|
provider: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/status/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/status/index.ts"],"names":[],"mappings":"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"}
|