@aperant/framework 0.8.0 → 0.8.4
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/CHANGELOG.md +311 -1
- package/README.md +12 -0
- package/agents/apt-planner.md +5 -4
- package/dist/cli/commands/adr.mjs +1 -1
- package/dist/cli/commands/audit-branch-current.d.mts +25 -0
- package/dist/cli/commands/audit-branch-current.d.mts.map +1 -0
- package/dist/cli/commands/audit-branch-current.mjs +252 -0
- package/dist/cli/commands/audit-branch-current.mjs.map +1 -0
- package/dist/cli/commands/audit.d.mts.map +1 -1
- package/dist/cli/commands/audit.mjs +13 -2
- package/dist/cli/commands/audit.mjs.map +1 -1
- package/dist/cli/commands/check-version.d.mts.map +1 -1
- package/dist/cli/commands/check-version.mjs +19 -1
- package/dist/cli/commands/check-version.mjs.map +1 -1
- package/dist/cli/commands/context.mjs +3 -3
- package/dist/cli/commands/context.mjs.map +1 -1
- package/dist/cli/commands/detect-runtime.d.mts +6 -0
- package/dist/cli/commands/detect-runtime.d.mts.map +1 -0
- package/dist/cli/commands/detect-runtime.mjs +136 -0
- package/dist/cli/commands/detect-runtime.mjs.map +1 -0
- package/dist/cli/commands/driver-doctor.d.mts +29 -0
- package/dist/cli/commands/driver-doctor.d.mts.map +1 -0
- package/dist/cli/commands/driver-doctor.mjs +291 -0
- package/dist/cli/commands/driver-doctor.mjs.map +1 -0
- package/dist/cli/commands/gate.mjs +14 -0
- package/dist/cli/commands/gate.mjs.map +1 -1
- package/dist/cli/commands/init.d.mts.map +1 -1
- package/dist/cli/commands/init.mjs +76 -33
- package/dist/cli/commands/init.mjs.map +1 -1
- package/dist/cli/commands/install-from-source.d.mts +2 -0
- package/dist/cli/commands/install-from-source.d.mts.map +1 -0
- package/dist/cli/commands/install-from-source.mjs +2 -0
- package/dist/cli/commands/install-from-source.mjs.map +1 -0
- package/dist/cli/commands/modes.mjs +1 -1
- package/dist/cli/commands/route.d.mts.map +1 -1
- package/dist/cli/commands/route.mjs +38 -1
- package/dist/cli/commands/route.mjs.map +1 -1
- package/dist/cli/commands/triage.mjs +1 -1
- package/dist/cli/config/load.d.mts.map +1 -1
- package/dist/cli/config/load.mjs +9 -3
- package/dist/cli/config/load.mjs.map +1 -1
- package/dist/cli/coordination/auto-emit-artifact-ready.mjs +1 -1
- package/dist/cli/coordination/event-schema.d.mts.map +1 -1
- package/dist/cli/coordination/event-schema.mjs +18 -0
- package/dist/cli/coordination/event-schema.mjs.map +1 -1
- package/dist/cli/design/frontmatter-schema.d.mts +4 -4
- package/dist/cli/dispatch.d.mts.map +1 -1
- package/dist/cli/dispatch.mjs +18 -1
- package/dist/cli/dispatch.mjs.map +1 -1
- package/dist/cli/gate/context.d.mts +1 -0
- package/dist/cli/gate/context.d.mts.map +1 -1
- package/dist/cli/gate/context.mjs +14 -1
- package/dist/cli/gate/context.mjs.map +1 -1
- package/dist/cli/gate/gates/consistency-check.d.mts +1 -0
- package/dist/cli/gate/gates/consistency-check.d.mts.map +1 -1
- package/dist/cli/gate/gates/consistency-check.mjs +1 -0
- package/dist/cli/gate/gates/consistency-check.mjs.map +1 -1
- package/dist/cli/gate/gates/review-clean.d.mts +1 -0
- package/dist/cli/gate/gates/review-clean.d.mts.map +1 -1
- package/dist/cli/gate/gates/review-clean.mjs +1 -0
- package/dist/cli/gate/gates/review-clean.mjs.map +1 -1
- package/dist/cli/gate/gates/verify-approved.d.mts +1 -0
- package/dist/cli/gate/gates/verify-approved.d.mts.map +1 -1
- package/dist/cli/gate/gates/verify-approved.mjs +1 -0
- package/dist/cli/gate/gates/verify-approved.mjs.map +1 -1
- package/dist/cli/gate/registry.d.mts.map +1 -1
- package/dist/cli/gate/registry.mjs +9 -1
- package/dist/cli/gate/registry.mjs.map +1 -1
- package/dist/cli/install/cli-to-install-root.d.mts.map +1 -1
- package/dist/cli/install/cli-to-install-root.mjs +0 -2
- package/dist/cli/install/cli-to-install-root.mjs.map +1 -1
- package/dist/cli/install/find-workspace-framework-version.d.mts +16 -0
- package/dist/cli/install/find-workspace-framework-version.d.mts.map +1 -0
- package/dist/cli/install/find-workspace-framework-version.mjs +85 -0
- package/dist/cli/install/find-workspace-framework-version.mjs.map +1 -0
- package/dist/cli/install/install-from-source.d.mts +10 -0
- package/dist/cli/install/install-from-source.d.mts.map +1 -0
- package/dist/cli/install/install-from-source.mjs +271 -0
- package/dist/cli/install/install-from-source.mjs.map +1 -0
- package/dist/cli/install/install-kernel.d.mts.map +1 -1
- package/dist/cli/install/install-kernel.mjs +24 -0
- package/dist/cli/install/install-kernel.mjs.map +1 -1
- package/dist/cli/install/legacy-paths.d.mts +33 -11
- package/dist/cli/install/legacy-paths.d.mts.map +1 -1
- package/dist/cli/install/legacy-paths.mjs +161 -39
- package/dist/cli/install/legacy-paths.mjs.map +1 -1
- package/dist/cli/install/runtime-detect.d.mts +2 -6
- package/dist/cli/install/runtime-detect.d.mts.map +1 -1
- package/dist/cli/install/runtime-detect.mjs +9 -4
- package/dist/cli/install/runtime-detect.mjs.map +1 -1
- package/dist/cli/install/runtime-migrate.d.mts +34 -14
- package/dist/cli/install/runtime-migrate.d.mts.map +1 -1
- package/dist/cli/install/runtime-migrate.mjs +63 -30
- package/dist/cli/install/runtime-migrate.mjs.map +1 -1
- package/dist/cli/install/transforms/codex.d.mts.map +1 -1
- package/dist/cli/install/transforms/codex.mjs +28 -17
- package/dist/cli/install/transforms/codex.mjs.map +1 -1
- package/dist/cli/install/transforms/pi.d.mts +6 -0
- package/dist/cli/install/transforms/pi.d.mts.map +1 -0
- package/dist/cli/install/transforms/pi.mjs +37 -0
- package/dist/cli/install/transforms/pi.mjs.map +1 -0
- package/dist/cli/personas/sidecar.d.mts +1 -1
- package/dist/cli/roadmap/lifecycle.d.mts +1 -1
- package/dist/cli/roadmap/rollup.d.mts +2 -2
- package/dist/cli/skill-author/contract.mjs +2 -2
- package/dist/cli/skill-author/contract.mjs.map +1 -1
- package/dist/cli/verify-proof/audit.d.mts +34 -0
- package/dist/cli/verify-proof/audit.d.mts.map +1 -0
- package/dist/cli/verify-proof/audit.mjs +53 -0
- package/dist/cli/verify-proof/audit.mjs.map +1 -0
- package/dist/cli/verify-proof/exec.d.mts +20 -0
- package/dist/cli/verify-proof/exec.d.mts.map +1 -0
- package/dist/cli/verify-proof/exec.mjs +74 -0
- package/dist/cli/verify-proof/exec.mjs.map +1 -0
- package/dist/cli/verify-proof/idl/index.d.mts +2 -0
- package/dist/cli/verify-proof/idl/index.d.mts.map +1 -0
- package/dist/cli/verify-proof/idl/index.mjs +14 -0
- package/dist/cli/verify-proof/idl/index.mjs.map +1 -0
- package/dist/cli/verify-proof/idl/types.d.ts +9 -0
- package/dist/cli/verify-proof/idl/types.d.ts.map +1 -0
- package/dist/cli/verify-proof/idl/types.js +9 -0
- package/dist/cli/verify-proof/idl/types.js.map +1 -0
- package/dist/cli/verify-proof/manifest-validator.d.mts +19 -0
- package/dist/cli/verify-proof/manifest-validator.d.mts.map +1 -0
- package/dist/cli/verify-proof/manifest-validator.mjs +182 -0
- package/dist/cli/verify-proof/manifest-validator.mjs.map +1 -0
- package/dist/cli/verify-proof/resolver.d.mts +43 -0
- package/dist/cli/verify-proof/resolver.d.mts.map +1 -0
- package/dist/cli/verify-proof/resolver.mjs +160 -0
- package/dist/cli/verify-proof/resolver.mjs.map +1 -0
- package/dist/cli/verify-proof/runtime-detect.d.mts +27 -0
- package/dist/cli/verify-proof/runtime-detect.d.mts.map +1 -0
- package/dist/cli/verify-proof/runtime-detect.mjs +116 -0
- package/dist/cli/verify-proof/runtime-detect.mjs.map +1 -0
- package/dist/cli/verify-proof/trust.d.mts +70 -0
- package/dist/cli/verify-proof/trust.d.mts.map +1 -0
- package/dist/cli/verify-proof/trust.mjs +174 -0
- package/dist/cli/verify-proof/trust.mjs.map +1 -0
- package/dist/plugin/.claude-plugin/plugin.json +4 -1
- package/dist/plugin/agents/apt-executor.md +12 -0
- package/dist/plugin/agents/apt-planner.md +5 -4
- package/dist/plugin/agents/apt-team-docs-narrator.md +11 -0
- package/dist/plugin/skills/apt/SKILL.md +78 -8
- package/dist/plugin/skills/apt-caveman/SKILL.md +64 -0
- package/dist/plugin/skills/apt-debug/SKILL.md +36 -4
- package/dist/plugin/skills/apt-debug/appendices/diagnose-discipline.md +2 -11
- package/dist/plugin/skills/apt-discuss/SKILL.md +4 -4
- package/dist/plugin/skills/apt-discuss/appendices/grill-discipline.md +2 -11
- package/dist/plugin/skills/apt-discuss/appendices/zoom-out-helper.md +0 -8
- package/dist/plugin/skills/apt-execute/SKILL.md +40 -4
- package/dist/plugin/skills/apt-execute/appendices/tdd-mode.md +2 -10
- package/dist/plugin/skills/apt-fan-out/SKILL.md +159 -0
- package/dist/plugin/skills/apt-handoff/SKILL.md +228 -0
- package/dist/plugin/skills/apt-improve/DEEPENING.md +0 -8
- package/dist/plugin/skills/apt-improve/INTERFACE-DESIGN.md +0 -8
- package/dist/plugin/skills/apt-improve/LANGUAGE.md +0 -8
- package/dist/plugin/skills/apt-improve/SKILL.md +4 -4
- package/dist/plugin/skills/apt-plan/SKILL.md +23 -5
- package/dist/plugin/skills/apt-plan/adapters/conductor.md +1 -1
- package/dist/plugin/skills/apt-pr-review/SKILL.md +8 -1
- package/dist/plugin/skills/apt-prototype/LOGIC.md +0 -8
- package/dist/plugin/skills/apt-prototype/SKILL.md +4 -4
- package/dist/plugin/skills/apt-prototype/UI.md +0 -8
- package/dist/plugin/skills/apt-quick/SKILL.md +31 -1
- package/dist/plugin/skills/apt-resume/SKILL.md +54 -31
- package/dist/plugin/skills/apt-review/SKILL.md +4 -0
- package/dist/plugin/skills/apt-run/SKILL.md +134 -21
- package/dist/plugin/skills/apt-setup/SKILL.md +97 -8
- package/dist/plugin/skills/apt-ship/SKILL.md +165 -9
- package/dist/plugin/skills/apt-spar/SKILL.md +77 -25
- package/dist/plugin/skills/apt-triage/AGENT-BRIEF.md +0 -8
- package/dist/plugin/skills/apt-triage/OUT-OF-SCOPE.md +0 -7
- package/dist/plugin/skills/apt-triage/SKILL.md +2 -2
- package/dist/plugin/skills/apt-update/SKILL.md +74 -17
- package/dist/plugin/skills/apt-verify/SKILL.md +11 -0
- package/dist/plugin/skills/apt-verify-proof/SKILL.md +48 -1
- package/dist/plugin/skills/apt-watch-ci/SKILL.md +2 -2
- package/dist/plugin/skills/apt-zoom-out/SKILL.md +3 -3
- package/dist/schemas/quick-task.d.ts +17 -17
- package/dist/schemas/quick-task.d.ts.map +1 -1
- package/dist/schemas/quick-task.js +2 -2
- package/dist/schemas/quick-task.js.map +1 -1
- package/dist/types/config.d.ts +33 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/state.d.ts +1 -1
- package/dist/types/state.d.ts.map +1 -1
- package/dist/types/task-record.d.ts +1 -1
- package/dist/types/task-record.d.ts.map +1 -1
- package/package.json +134 -133
- package/prompts/planner.md +1 -1
- package/prompts/spec_writer.md +1 -1
- package/skills/apt/SKILL.md +78 -8
- package/skills/apt-caveman/SKILL.md +64 -0
- package/skills/apt-debug/SKILL.md +36 -4
- package/skills/apt-debug/appendices/diagnose-discipline.md +2 -11
- package/skills/apt-discuss/SKILL.md +4 -4
- package/skills/apt-discuss/appendices/grill-discipline.md +2 -11
- package/skills/apt-discuss/appendices/zoom-out-helper.md +0 -8
- package/skills/apt-execute/SKILL.md +27 -4
- package/skills/apt-execute/appendices/tdd-mode.md +2 -10
- package/skills/apt-fan-out/SKILL.md +36 -1
- package/skills/apt-handoff/SKILL.md +228 -0
- package/skills/apt-improve/DEEPENING.md +0 -8
- package/skills/apt-improve/INTERFACE-DESIGN.md +0 -8
- package/skills/apt-improve/LANGUAGE.md +0 -8
- package/skills/apt-improve/SKILL.md +4 -4
- package/skills/apt-plan/SKILL.md +23 -5
- package/skills/apt-plan/adapters/conductor.md +1 -1
- package/skills/apt-planner.md +1 -1
- package/skills/apt-prototype/LOGIC.md +0 -8
- package/skills/apt-prototype/SKILL.md +4 -4
- package/skills/apt-prototype/UI.md +0 -8
- package/skills/apt-quick/SKILL.md +31 -1
- package/skills/apt-resume/SKILL.md +54 -31
- package/skills/apt-run/SKILL.md +114 -16
- package/skills/apt-setup/SKILL.md +97 -8
- package/skills/apt-ship/SKILL.md +165 -9
- package/skills/apt-spar/SKILL.md +65 -16
- package/skills/apt-triage/AGENT-BRIEF.md +0 -8
- package/skills/apt-triage/OUT-OF-SCOPE.md +0 -7
- package/skills/apt-triage/SKILL.md +2 -2
- package/skills/apt-update/SKILL.md +74 -17
- package/skills/apt-verify-proof/SKILL.md +48 -1
- package/skills/apt-zoom-out/SKILL.md +3 -3
- package/src/cli/commands/adr.mjs +1 -1
- package/src/cli/commands/audit-branch-current.mjs +250 -0
- package/src/cli/commands/audit.mjs +13 -2
- package/src/cli/commands/check-version.mjs +20 -1
- package/src/cli/commands/context.mjs +3 -3
- package/src/cli/commands/detect-runtime.mjs +134 -0
- package/src/cli/commands/driver-doctor.mjs +294 -0
- package/src/cli/commands/gate.mjs +15 -0
- package/src/cli/commands/init.mjs +75 -33
- package/src/cli/commands/install-from-source.mjs +1 -0
- package/src/cli/commands/modes.mjs +1 -1
- package/src/cli/commands/route.mjs +42 -1
- package/src/cli/commands/triage.mjs +1 -1
- package/src/cli/config/load.mjs +9 -3
- package/src/cli/coordination/auto-emit-artifact-ready.mjs +1 -1
- package/src/cli/coordination/event-schema.mjs +19 -0
- package/src/cli/dispatch.mjs +17 -1
- package/src/cli/gate/context.mjs +20 -1
- package/src/cli/gate/gates/consistency-check.mjs +1 -0
- package/src/cli/gate/gates/review-clean.mjs +1 -0
- package/src/cli/gate/gates/verify-approved.mjs +1 -0
- package/src/cli/gate/registry.mjs +11 -1
- package/src/cli/install/cli-to-install-root.mjs +0 -2
- package/src/cli/install/find-workspace-framework-version.mjs +88 -0
- package/src/cli/install/install-from-source.mjs +276 -0
- package/src/cli/install/install-kernel.mjs +24 -0
- package/src/cli/install/legacy-paths.mjs +162 -39
- package/src/cli/install/runtime-detect.mjs +9 -4
- package/src/cli/install/runtime-migrate.mjs +63 -30
- package/src/cli/install/transforms/codex.mjs +26 -17
- package/src/cli/install/transforms/pi.mjs +37 -0
- package/src/cli/skill-author/contract.mjs +2 -2
- package/src/cli/verify-proof/.gitkeep +0 -0
- package/src/cli/verify-proof/audit.mjs +55 -0
- package/src/cli/verify-proof/exec.mjs +74 -0
- package/src/cli/verify-proof/idl/index.mjs +24 -0
- package/src/cli/verify-proof/idl/types.ts +41 -0
- package/src/cli/verify-proof/manifest-schema.json +211 -0
- package/src/cli/verify-proof/manifest-validator.mjs +184 -0
- package/src/cli/verify-proof/resolver.mjs +163 -0
- package/src/cli/verify-proof/runtime-detect.mjs +122 -0
- package/src/cli/verify-proof/trust.mjs +187 -0
- package/templates/adr-format.md +0 -8
- package/templates/aperant-claude-md-appendix.md +1 -1
- package/templates/context-format.md +1 -9
- package/templates/proof-verification.md +19 -5
- package/workflows/verify-proof.md +56 -14
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* install/install-from-source.mjs — Bundle D part 1.
|
|
3
|
+
*
|
|
4
|
+
* `apt-tools install-from-source <project-dir>` for the Aperant-contributor
|
|
5
|
+
* self-host case. Resolves the workspace `@aperant/framework` chain — packs
|
|
6
|
+
* the framework itself AND every `workspace:*` dependency (currently
|
|
7
|
+
* `@aperant/driver-sdk`, but the walker is general). Hands the full tarball
|
|
8
|
+
* list to a single `npm install --prefix` invocation so the same-PR
|
|
9
|
+
* unpublished-pair case stops blowing up with `EUNSUPPORTEDPROTOCOL`.
|
|
10
|
+
*
|
|
11
|
+
* Stable envelope:
|
|
12
|
+
* { status: 'ok', tarballs: string[], kernel_path: string }
|
|
13
|
+
* { status: 'error', error: string, ...optional context }
|
|
14
|
+
*
|
|
15
|
+
* Test seams: `APT_PNPM_BIN` + `APT_NPM_BIN` mirror the existing
|
|
16
|
+
* `install-kernel.mjs` + worker patterns.
|
|
17
|
+
*/
|
|
18
|
+
import { spawnSync } from 'node:child_process';
|
|
19
|
+
import { existsSync, mkdirSync, mkdtempSync, readdirSync, readFileSync, rmSync } from 'node:fs';
|
|
20
|
+
import { tmpdir } from 'node:os';
|
|
21
|
+
import { dirname, isAbsolute, join, resolve } from 'node:path';
|
|
22
|
+
import { err, ok } from '../util/result.mjs';
|
|
23
|
+
import { findWorkspaceFrameworkVersion } from './find-workspace-framework-version.mjs';
|
|
24
|
+
import { KERNEL_BIN_REL_PATH } from './install-kernel.mjs';
|
|
25
|
+
/**
|
|
26
|
+
* Locate the monorepo root given the workspace framework package.json path.
|
|
27
|
+
* `<root>/packages/framework/package.json` → `<root>`.
|
|
28
|
+
*
|
|
29
|
+
* @param {string} frameworkPkgPath
|
|
30
|
+
* @returns {string}
|
|
31
|
+
*/
|
|
32
|
+
function monorepoRootFrom(frameworkPkgPath) {
|
|
33
|
+
// `<root>/packages/framework/package.json` — go up THREE levels.
|
|
34
|
+
return dirname(dirname(dirname(frameworkPkgPath)));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Scan `<monorepoRoot>/packages/` for a directory whose `package.json:name`
|
|
38
|
+
* matches `pkgName`. Returns the directory path (containing package.json),
|
|
39
|
+
* or null if no match.
|
|
40
|
+
*
|
|
41
|
+
* @param {string} monorepoRoot
|
|
42
|
+
* @param {string} pkgName
|
|
43
|
+
* @returns {string|null}
|
|
44
|
+
*/
|
|
45
|
+
function findWorkspacePackage(monorepoRoot, pkgName) {
|
|
46
|
+
const packagesDir = join(monorepoRoot, 'packages');
|
|
47
|
+
if (!existsSync(packagesDir))
|
|
48
|
+
return null;
|
|
49
|
+
let entries;
|
|
50
|
+
try {
|
|
51
|
+
entries = readdirSync(packagesDir, { withFileTypes: true });
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
for (const entry of entries) {
|
|
57
|
+
if (!entry.isDirectory())
|
|
58
|
+
continue;
|
|
59
|
+
const candidate = join(packagesDir, entry.name, 'package.json');
|
|
60
|
+
if (!existsSync(candidate))
|
|
61
|
+
continue;
|
|
62
|
+
try {
|
|
63
|
+
const pkg = JSON.parse(readFileSync(candidate, 'utf-8'));
|
|
64
|
+
if (pkg?.name === pkgName)
|
|
65
|
+
return join(packagesDir, entry.name);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// Skip unreadable package.json files.
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* pnpm-pack a workspace package into `tmpDir` and return the resulting
|
|
75
|
+
* tarball path. Uses `pnpm --filter <name> pack --pack-destination <tmp>`
|
|
76
|
+
* so workspace protocols resolve to concrete versions inside the tarball.
|
|
77
|
+
*
|
|
78
|
+
* `knownBefore` is the set of .tgz filenames already present in `tmpDir`
|
|
79
|
+
* before this call; the mtime fallback uses it to find only the NEW file,
|
|
80
|
+
* avoiding coarse-timestamp ambiguity when multiple packs land in the same
|
|
81
|
+
* directory.
|
|
82
|
+
*
|
|
83
|
+
* @param {string} monorepoRoot
|
|
84
|
+
* @param {string} pkgName
|
|
85
|
+
* @param {string} tmpDir
|
|
86
|
+
* @param {Set<string>} knownBefore Filenames (not paths) present before this pack.
|
|
87
|
+
* @returns {{ tarball: string } | { error: string }}
|
|
88
|
+
*/
|
|
89
|
+
function packWorkspace(monorepoRoot, pkgName, tmpDir, knownBefore) {
|
|
90
|
+
const pnpmBin = process.env.APT_PNPM_BIN || 'pnpm';
|
|
91
|
+
const result = spawnSync(pnpmBin, ['--filter', pkgName, 'pack', '--pack-destination', tmpDir], {
|
|
92
|
+
cwd: monorepoRoot,
|
|
93
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
94
|
+
encoding: 'utf-8',
|
|
95
|
+
timeout: 120_000,
|
|
96
|
+
});
|
|
97
|
+
if (result.error) {
|
|
98
|
+
return { error: `pnpm spawn failed for ${pkgName}: ${result.error.message}` };
|
|
99
|
+
}
|
|
100
|
+
if (result.status !== 0) {
|
|
101
|
+
const stderr = (result.stderr || '').trim().slice(-600);
|
|
102
|
+
return { error: `pnpm pack ${pkgName} exited with ${result.status}: ${stderr || 'no stderr'}` };
|
|
103
|
+
}
|
|
104
|
+
// pnpm pack prints the resulting tarball path on stdout. Take the last
|
|
105
|
+
// `.tgz` line (pnpm sometimes emits warnings above the path line).
|
|
106
|
+
const tarballLine = (result.stdout || '')
|
|
107
|
+
.split('\n')
|
|
108
|
+
.map((s) => s.trim())
|
|
109
|
+
.reverse()
|
|
110
|
+
.find((s) => s.endsWith('.tgz'));
|
|
111
|
+
if (tarballLine) {
|
|
112
|
+
// `tarballLine` may be a bare filename (older pnpm) or an absolute path.
|
|
113
|
+
// Use `isAbsolute` so Windows backslash + drive-letter paths are also
|
|
114
|
+
// recognized — `startsWith('/')` was POSIX-only.
|
|
115
|
+
const tarball = isAbsolute(tarballLine) ? tarballLine : join(tmpDir, tarballLine);
|
|
116
|
+
// SEC-001: containment check — tarball must resolve to a child of tmpDir.
|
|
117
|
+
const resolvedTmpDir = resolve(tmpDir);
|
|
118
|
+
const resolvedTarball = resolve(tarball);
|
|
119
|
+
if (!resolvedTarball.startsWith(`${resolvedTmpDir}/`) && resolvedTarball !== resolvedTmpDir) {
|
|
120
|
+
return { error: `pnpm pack ${pkgName}: tarball path escapes tmpDir: ${tarball}` };
|
|
121
|
+
}
|
|
122
|
+
return { tarball };
|
|
123
|
+
}
|
|
124
|
+
// Fall back to scanning tmpDir for the NEW tgz when stdout was
|
|
125
|
+
// uninformative (some pnpm builds print only progress to stderr).
|
|
126
|
+
// Use `knownBefore` to find only files added by this pack, avoiding
|
|
127
|
+
// mtime coarse-timestamp ambiguity on FAT32/network filesystems.
|
|
128
|
+
try {
|
|
129
|
+
for (const f of readdirSync(tmpDir)) {
|
|
130
|
+
if (!f.endsWith('.tgz'))
|
|
131
|
+
continue;
|
|
132
|
+
if (knownBefore.has(f))
|
|
133
|
+
continue;
|
|
134
|
+
return { tarball: join(tmpDir, f) };
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
// fall through
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
error: `pnpm pack ${pkgName}: no .tgz produced (stdout: ${result.stdout?.slice(-200)})`,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* `apt-tools install-from-source <project-dir>` — pack the workspace
|
|
146
|
+
* framework + every `workspace:*` dep, then npm-install the full tarball
|
|
147
|
+
* list into `<project-dir>/.aperant/deps/`.
|
|
148
|
+
*
|
|
149
|
+
* @param {string} projectDir
|
|
150
|
+
* @returns {import('../util/result.mjs').CommandResult}
|
|
151
|
+
*/
|
|
152
|
+
export function cmdInstallFromSource(projectDir) {
|
|
153
|
+
if (!projectDir) {
|
|
154
|
+
return err('Usage: apt-tools install-from-source <project-dir>');
|
|
155
|
+
}
|
|
156
|
+
const targetDir = resolve(projectDir);
|
|
157
|
+
const workspace = findWorkspaceFrameworkVersion(targetDir);
|
|
158
|
+
if (!workspace) {
|
|
159
|
+
return err('install-from-source: no @aperant/framework workspace found above project-dir');
|
|
160
|
+
}
|
|
161
|
+
const monorepoRoot = monorepoRootFrom(workspace.source_path);
|
|
162
|
+
// QUA-001: re-read the workspace package.json with a try/catch — the file
|
|
163
|
+
// was validated by findWorkspaceFrameworkVersion but could change between
|
|
164
|
+
// the two reads (active monorepo, contributor machine).
|
|
165
|
+
let frameworkPkg;
|
|
166
|
+
try {
|
|
167
|
+
frameworkPkg = JSON.parse(readFileSync(workspace.source_path, 'utf-8'));
|
|
168
|
+
}
|
|
169
|
+
catch (e) {
|
|
170
|
+
return err(`install-from-source: failed to read ${workspace.source_path}: ${e instanceof Error ? e.message : String(e)}`);
|
|
171
|
+
}
|
|
172
|
+
// Enumerate workspace:* deps from dependencies + peerDependencies.
|
|
173
|
+
const depSources = [frameworkPkg.dependencies, frameworkPkg.peerDependencies];
|
|
174
|
+
const workspaceDeps = [];
|
|
175
|
+
for (const block of depSources) {
|
|
176
|
+
if (!block || typeof block !== 'object')
|
|
177
|
+
continue;
|
|
178
|
+
for (const [name, spec] of Object.entries(block)) {
|
|
179
|
+
if (typeof spec === 'string' && spec.startsWith('workspace:')) {
|
|
180
|
+
if (!workspaceDeps.includes(name))
|
|
181
|
+
workspaceDeps.push(name);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// Resolve each workspace dep to its `packages/<dir>` path. Reject hard
|
|
186
|
+
// when any dep cannot be located — we cannot pack what we cannot find.
|
|
187
|
+
const missingDeps = [];
|
|
188
|
+
const resolvedDeps = [];
|
|
189
|
+
for (const depName of workspaceDeps) {
|
|
190
|
+
const pkgDir = findWorkspacePackage(monorepoRoot, depName);
|
|
191
|
+
if (!pkgDir) {
|
|
192
|
+
missingDeps.push(depName);
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
resolvedDeps.push({ name: depName, dir: pkgDir });
|
|
196
|
+
}
|
|
197
|
+
if (missingDeps.length > 0) {
|
|
198
|
+
return err(`install-from-source: workspace:* dep(s) not found in packages/: ${missingDeps.join(', ')}`);
|
|
199
|
+
}
|
|
200
|
+
// PRF-001: include framework in the same pack loop — eliminates structural
|
|
201
|
+
// duplication and ensures per-pack knownBefore snapshots work uniformly.
|
|
202
|
+
const packTargets = [...resolvedDeps.map((d) => d.name), '@aperant/framework'];
|
|
203
|
+
// Pack everything into a fresh tmp dir so accumulated stale tarballs
|
|
204
|
+
// from prior runs don't sneak in.
|
|
205
|
+
const tmpDir = mkdtempSync(join(tmpdir(), 'apt-install-from-source-'));
|
|
206
|
+
const tarballs = [];
|
|
207
|
+
// QUA-002: wrap pack+install in try/finally so tmpDir is always removed.
|
|
208
|
+
try {
|
|
209
|
+
for (const pkgName of packTargets) {
|
|
210
|
+
// LOG-003: snapshot existing tgz filenames before each pack so the
|
|
211
|
+
// fallback can identify exactly the new file, even on coarse-timestamp
|
|
212
|
+
// filesystems (FAT32, some network mounts).
|
|
213
|
+
const knownBefore = new Set();
|
|
214
|
+
try {
|
|
215
|
+
for (const f of readdirSync(tmpDir)) {
|
|
216
|
+
if (f.endsWith('.tgz'))
|
|
217
|
+
knownBefore.add(f);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
// tmpDir unreadable — proceed with empty set; fallback will still work.
|
|
222
|
+
}
|
|
223
|
+
const packResult = packWorkspace(monorepoRoot, pkgName, tmpDir, knownBefore);
|
|
224
|
+
if ('error' in packResult)
|
|
225
|
+
return err(packResult.error);
|
|
226
|
+
tarballs.push(packResult.tarball);
|
|
227
|
+
}
|
|
228
|
+
// npm install --prefix .aperant/deps <tarball1> <tarball2> ...
|
|
229
|
+
const depsDir = join(targetDir, '.aperant', 'deps');
|
|
230
|
+
mkdirSync(depsDir, { recursive: true });
|
|
231
|
+
const npmBin = process.env.APT_NPM_BIN || 'npm';
|
|
232
|
+
const args = [
|
|
233
|
+
'install',
|
|
234
|
+
'--prefix',
|
|
235
|
+
depsDir,
|
|
236
|
+
...tarballs,
|
|
237
|
+
'--no-save',
|
|
238
|
+
'--no-package-lock',
|
|
239
|
+
'--no-audit',
|
|
240
|
+
'--no-fund',
|
|
241
|
+
'--silent',
|
|
242
|
+
];
|
|
243
|
+
const npmResult = spawnSync(npmBin, args, {
|
|
244
|
+
cwd: targetDir,
|
|
245
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
246
|
+
encoding: 'utf-8',
|
|
247
|
+
timeout: 180_000,
|
|
248
|
+
});
|
|
249
|
+
if (npmResult.error) {
|
|
250
|
+
return err(`install-from-source: npm spawn failed: ${npmResult.error.message}`);
|
|
251
|
+
}
|
|
252
|
+
if (npmResult.status !== 0) {
|
|
253
|
+
const stderr = (npmResult.stderr || '').trim().slice(-600);
|
|
254
|
+
return err(`install-from-source: npm install --prefix exited with ${npmResult.status}: ${stderr || 'no stderr'}`);
|
|
255
|
+
}
|
|
256
|
+
const kernelPath = join(targetDir, KERNEL_BIN_REL_PATH);
|
|
257
|
+
if (!existsSync(kernelPath)) {
|
|
258
|
+
return err(`install-from-source: npm reported success but kernel not found at ${kernelPath}`);
|
|
259
|
+
}
|
|
260
|
+
return ok({
|
|
261
|
+
status: 'ok',
|
|
262
|
+
command: 'install-from-source',
|
|
263
|
+
tarballs,
|
|
264
|
+
kernel_path: kernelPath,
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
finally {
|
|
268
|
+
rmSync(tmpDir, { recursive: true, force: true });
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=install-from-source.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-from-source.mjs","sourceRoot":"","sources":["../../../src/cli/install/install-from-source.mjs"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-kernel.d.mts","sourceRoot":"","sources":["../../../src/cli/install/install-kernel.mjs"],"names":[],"mappings":"AA2FA;;;;;;GAMG;AAEH;;;;;;;;;;;;GAYG;AACH,yCARW,MAAM,WACN,MAAM,SAGd;IAAsB,SAAS;IACR,MAAM;CAC7B,GAAU,mBAAmB,
|
|
1
|
+
{"version":3,"file":"install-kernel.d.mts","sourceRoot":"","sources":["../../../src/cli/install/install-kernel.mjs"],"names":[],"mappings":"AA2FA;;;;;;GAMG;AAEH;;;;;;;;;;;;GAYG;AACH,yCARW,MAAM,WACN,MAAM,SAGd;IAAsB,SAAS;IACR,MAAM;CAC7B,GAAU,mBAAmB,CA6F/B;AA5KD;;;;GAIG;AACH,kCAAmC,iEAAiE,CAAA;;YAyDtF,WAAW,GAAG,SAAS,GAAG,QAAQ;;;;gBAClC,MAAM"}
|
|
@@ -115,6 +115,30 @@ export function installKernel(targetDir, version, opts = {}) {
|
|
|
115
115
|
mkdirSync(depsDir, { recursive: true });
|
|
116
116
|
const kernelPath = join(targetDir, KERNEL_BIN_REL_PATH);
|
|
117
117
|
const npmBin = resolveNpmBin();
|
|
118
|
+
// Bundle B — idempotency short-circuit. When the kernel package.json
|
|
119
|
+
// already reports the requested version AND the kernel binary exists,
|
|
120
|
+
// skip the npm spawn entirely. Returns the same `status: 'installed'`
|
|
121
|
+
// envelope shape that downstream consumers branch on (init.mjs:1441,
|
|
122
|
+
// init.mjs:1735, apt-update/SKILL.md Scenario D) — no new enum value
|
|
123
|
+
// per D-02.
|
|
124
|
+
const installedPkgPath = join(depsDir, 'node_modules', '@aperant', 'framework', 'package.json');
|
|
125
|
+
if (existsSync(installedPkgPath) && existsSync(kernelPath)) {
|
|
126
|
+
try {
|
|
127
|
+
const installedPkg = JSON.parse(readFileSync(installedPkgPath, 'utf-8'));
|
|
128
|
+
if (installedPkg?.version === version) {
|
|
129
|
+
return {
|
|
130
|
+
status: 'installed',
|
|
131
|
+
kernelPath,
|
|
132
|
+
reason: 'already at target version',
|
|
133
|
+
durationMs: 0,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
// Malformed package.json — fall through to the npm install path
|
|
139
|
+
// (npm will reconcile / repair).
|
|
140
|
+
}
|
|
141
|
+
}
|
|
118
142
|
const t0 = Date.now();
|
|
119
143
|
const args = [
|
|
120
144
|
'install',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-kernel.mjs","sourceRoot":"","sources":["../../../src/cli/install/install-kernel.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAElD;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,iEAAiE,CAAA;AAEpG;;;;;;GAMG;AACH,SAAS,aAAa;IACrB,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,KAAK,CAAA;AACxC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,yBAAyB,CAAC,QAAQ;IAC1C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE,CAAA;IACzB,uBAAuB;IACvB,MAAM,UAAU,GAAG,EAAE,CAAA;IACrB,IAAI,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC3B,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAChB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA;QACpC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAK;QACzB,GAAG,GAAG,MAAM,CAAA;IACb,CAAC;IACD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAA,CAAC,oBAAoB;IAE/D,MAAM,EAAE,GAAG,wCAAwC,CAAA;IACnD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAQ;QAC/B,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YACxC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YACxB,IAAI,CAAC;gBAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC;QAAC,MAAM,CAAC;YACR,4CAA4C;QAC7C,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAA;AACZ,CAAC;AAED;;;;;;GAMG;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,OAAO,CAAA;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,KAAK,CAAA;IACpC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IACxC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAEvC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAA;IACvD,MAAM,MAAM,GAAG,aAAa,EAAE,CAAA;IAE9B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACrB,MAAM,IAAI,GAAG;QACZ,SAAS;QACT,sBAAsB,OAAO,EAAE;QAC/B,UAAU;QACV,OAAO;QACP,WAAW;QACX,mBAAmB;QACnB,YAAY;QACZ,WAAW;KACX,CAAA;IACD,IAAI,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAEjC,yEAAyE;IACzE,2EAA2E;IAC3E,wDAAwD;IACxD,MAAM,cAAc,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAA;IAC3D,IAAI,cAAc,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,uBAAuB,cAAc,EAAE,CAAC,CAAA;IACnD,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE;QACtC,GAAG,EAAE,SAAS,EAAE,6CAA6C;QAC7D,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACtD,OAAO,EAAE,SAAS;QAClB,QAAQ,EAAE,OAAO;KACjB,CAAC,CAAA;IAEF,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAA;IAElC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO;YACN,MAAM,EAAE,QAAQ;YAChB,UAAU;YACV,MAAM,EAAE,qBAAqB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;YACnD,UAAU;SACV,CAAA;IACF,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAA,CAAC,iBAAiB;QACzE,OAAO;YACN,MAAM,EAAE,QAAQ;YAChB,UAAU;YACV,MAAM,EAAE,oCAAoC,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,WAAW,EAAE;YACrF,UAAU;SACV,CAAA;IACF,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,OAAO;YACN,MAAM,EAAE,QAAQ;YAChB,UAAU;YACV,MAAM,EAAE,wDAAwD,UAAU,EAAE;YAC5E,UAAU;SACV,CAAA;IACF,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,CAAA;AACvD,CAAC"}
|
|
1
|
+
{"version":3,"file":"install-kernel.mjs","sourceRoot":"","sources":["../../../src/cli/install/install-kernel.mjs"],"names":[],"mappings":"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"}
|
|
@@ -11,28 +11,50 @@
|
|
|
11
11
|
* pre-manifest install still surfaces as "installed" rather than
|
|
12
12
|
* "missing-skills".
|
|
13
13
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* codex
|
|
20
|
-
*
|
|
14
|
+
* Codex evolution: v0.7/v0.8 retargeted the codex transform to write
|
|
15
|
+
* markdown skills under `.codex/agents/` + `.codex/commands/` (with the
|
|
16
|
+
* apt-file-manifest.json next to them). Codex CLI 0.132.0 does not
|
|
17
|
+
* discover skills at either path — its documented surface is
|
|
18
|
+
* `.agents/skills/<folder>/SKILL.md` (per
|
|
19
|
+
* https://developers.openai.com/codex/skills). The v0.8.2 fix inverts
|
|
20
|
+
* this registry: the dead `.codex/` markdown tree becomes the legacy
|
|
21
|
+
* target so `runLegacyCleanup` GCs it on the next `apt-tools init`.
|
|
21
22
|
*
|
|
22
23
|
* Schema:
|
|
23
24
|
* { [runtimeId]: {
|
|
24
25
|
* install_root: relative path the runtime once wrote into,
|
|
25
|
-
* version_file: relative path of the legacy `.apt-version` stamp
|
|
26
|
+
* version_file: relative path of the legacy `.apt-version` stamp
|
|
27
|
+
* (or a path known to never exist, when no version
|
|
28
|
+
* stamp was ever written for the legacy topology),
|
|
29
|
+
* honor_manifest: when true (default), a present apt-file-manifest.json
|
|
30
|
+
* at install_root signals a managed install and the
|
|
31
|
+
* cleanup no-ops (`reason: 'managed'`). When false,
|
|
32
|
+
* the legacy root is known-dead so the manifest is
|
|
33
|
+
* removed alongside framework files (used for surfaces
|
|
34
|
+
* like the v0.7/v0.8 codex misdirect that will never
|
|
35
|
+
* again be a managed install root).
|
|
26
36
|
* framework_files: array of relative paths the installer once owned
|
|
27
37
|
* (under install_root).
|
|
28
38
|
* } }
|
|
29
39
|
*
|
|
30
40
|
* Frozen via Object.freeze so callers cannot mutate the shared registry.
|
|
31
41
|
*/
|
|
32
|
-
/**
|
|
33
|
-
|
|
42
|
+
/**
|
|
43
|
+
* @typedef {Object} LegacyInstallPath
|
|
44
|
+
* @property {string} install_root
|
|
45
|
+
* @property {string} version_file
|
|
46
|
+
* @property {boolean} [honor_manifest] default true; false for known-dead surfaces
|
|
47
|
+
* @property {ReadonlyArray<string>} framework_files
|
|
48
|
+
*/
|
|
49
|
+
/** @type {Record<string, LegacyInstallPath>} */
|
|
50
|
+
export const LEGACY_INSTALL_PATHS: Record<string, LegacyInstallPath>;
|
|
51
|
+
export type LegacyInstallPath = {
|
|
34
52
|
install_root: string;
|
|
35
53
|
version_file: string;
|
|
54
|
+
/**
|
|
55
|
+
* default true; false for known-dead surfaces
|
|
56
|
+
*/
|
|
57
|
+
honor_manifest?: boolean | undefined;
|
|
36
58
|
framework_files: ReadonlyArray<string>;
|
|
37
|
-
}
|
|
59
|
+
};
|
|
38
60
|
//# sourceMappingURL=legacy-paths.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legacy-paths.d.mts","sourceRoot":"","sources":["../../../src/cli/install/legacy-paths.mjs"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"legacy-paths.d.mts","sourceRoot":"","sources":["../../../src/cli/install/legacy-paths.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH;;;;;;GAMG;AAEH,gDAAgD;AAChD,mCADW,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CA6I1C;;kBAnJY,MAAM;kBACN,MAAM;;;;;qBAEN,aAAa,CAAC,MAAM,CAAC"}
|
|
@@ -11,58 +11,180 @@
|
|
|
11
11
|
* pre-manifest install still surfaces as "installed" rather than
|
|
12
12
|
* "missing-skills".
|
|
13
13
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* codex
|
|
20
|
-
*
|
|
14
|
+
* Codex evolution: v0.7/v0.8 retargeted the codex transform to write
|
|
15
|
+
* markdown skills under `.codex/agents/` + `.codex/commands/` (with the
|
|
16
|
+
* apt-file-manifest.json next to them). Codex CLI 0.132.0 does not
|
|
17
|
+
* discover skills at either path — its documented surface is
|
|
18
|
+
* `.agents/skills/<folder>/SKILL.md` (per
|
|
19
|
+
* https://developers.openai.com/codex/skills). The v0.8.2 fix inverts
|
|
20
|
+
* this registry: the dead `.codex/` markdown tree becomes the legacy
|
|
21
|
+
* target so `runLegacyCleanup` GCs it on the next `apt-tools init`.
|
|
21
22
|
*
|
|
22
23
|
* Schema:
|
|
23
24
|
* { [runtimeId]: {
|
|
24
25
|
* install_root: relative path the runtime once wrote into,
|
|
25
|
-
* version_file: relative path of the legacy `.apt-version` stamp
|
|
26
|
+
* version_file: relative path of the legacy `.apt-version` stamp
|
|
27
|
+
* (or a path known to never exist, when no version
|
|
28
|
+
* stamp was ever written for the legacy topology),
|
|
29
|
+
* honor_manifest: when true (default), a present apt-file-manifest.json
|
|
30
|
+
* at install_root signals a managed install and the
|
|
31
|
+
* cleanup no-ops (`reason: 'managed'`). When false,
|
|
32
|
+
* the legacy root is known-dead so the manifest is
|
|
33
|
+
* removed alongside framework files (used for surfaces
|
|
34
|
+
* like the v0.7/v0.8 codex misdirect that will never
|
|
35
|
+
* again be a managed install root).
|
|
26
36
|
* framework_files: array of relative paths the installer once owned
|
|
27
37
|
* (under install_root).
|
|
28
38
|
* } }
|
|
29
39
|
*
|
|
30
40
|
* Frozen via Object.freeze so callers cannot mutate the shared registry.
|
|
31
41
|
*/
|
|
32
|
-
/**
|
|
42
|
+
/**
|
|
43
|
+
* @typedef {Object} LegacyInstallPath
|
|
44
|
+
* @property {string} install_root
|
|
45
|
+
* @property {string} version_file
|
|
46
|
+
* @property {boolean} [honor_manifest] default true; false for known-dead surfaces
|
|
47
|
+
* @property {ReadonlyArray<string>} framework_files
|
|
48
|
+
*/
|
|
49
|
+
/** @type {Record<string, LegacyInstallPath>} */
|
|
33
50
|
export const LEGACY_INSTALL_PATHS = Object.freeze({
|
|
34
51
|
codex: Object.freeze({
|
|
35
|
-
|
|
36
|
-
|
|
52
|
+
// The v0.7/v0.8 misdirect lived under `.codex/agents/` + `.codex/commands/`
|
|
53
|
+
// (with the orphan apt-file-manifest.json at `.codex/apt-file-manifest.json`).
|
|
54
|
+
// Codex CLI 0.132.0 does not consume any of those paths — see header.
|
|
55
|
+
install_root: '.codex',
|
|
56
|
+
// No `.apt-version` was ever written under `.codex/`; point at a path
|
|
57
|
+
// that doesn't exist so `existsSync` returns false in
|
|
58
|
+
// skill-installs.mjs:67-68 (legacy version_file fallback). The bare
|
|
59
|
+
// apt-file-manifest.json (handled by framework_files) is enough to
|
|
60
|
+
// signal the legacy install.
|
|
61
|
+
version_file: '.codex/.apt-version',
|
|
62
|
+
// Known-dead surface: this `.codex/` topology will never again be
|
|
63
|
+
// a managed Aperant install root, so a manifest sitting here is
|
|
64
|
+
// always stale. Skip the no-op-on-manifest safety and remove the
|
|
65
|
+
// manifest alongside framework_files. Default-true elsewhere
|
|
66
|
+
// preserves the safety for legacy roots that could legitimately
|
|
67
|
+
// re-host a managed install.
|
|
68
|
+
honor_manifest: false,
|
|
69
|
+
// Enumerated from BOTH canonical sources (drift-checked at test time
|
|
70
|
+
// by legacy-cleanup-codex.test.ts):
|
|
71
|
+
// - For each `packages/framework/skills/apt-*/` directory: the v0.7/v0.8
|
|
72
|
+
// transform emitted BOTH `agents/<dir>.md` AND `commands/<dir>.md`.
|
|
73
|
+
// - For each top-level `packages/framework/skills/apt-*.md` file
|
|
74
|
+
// (fileType=agent in the pipeline): the transform emitted
|
|
75
|
+
// `agents/<basename>.md`.
|
|
76
|
+
// - For each `packages/framework/agents/apt-*.md` file: the transform
|
|
77
|
+
// emitted `agents/<basename>.md` (last-write-wins de-dupe applied
|
|
78
|
+
// by the pipeline for overlapping outputs).
|
|
79
|
+
// - Plus the orphan apt-file-manifest.json the install pipeline
|
|
80
|
+
// stamps at install_root.
|
|
81
|
+
// TODO: follow-up — derive this programmatically per spec ID-06 so
|
|
82
|
+
// new apt-* skills auto-extend the legacy set without an edit here.
|
|
37
83
|
framework_files: Object.freeze([
|
|
38
|
-
'
|
|
39
|
-
|
|
40
|
-
'apt
|
|
41
|
-
'apt-
|
|
42
|
-
'apt-
|
|
43
|
-
'apt-
|
|
44
|
-
'apt-
|
|
45
|
-
'apt-
|
|
46
|
-
'apt-
|
|
47
|
-
'apt-
|
|
48
|
-
'apt-
|
|
49
|
-
'apt-
|
|
50
|
-
'apt-
|
|
51
|
-
'apt-
|
|
52
|
-
'apt-
|
|
53
|
-
'apt-
|
|
54
|
-
'apt-
|
|
55
|
-
'apt-
|
|
56
|
-
'apt-
|
|
57
|
-
'apt-
|
|
58
|
-
'apt-
|
|
59
|
-
'apt-
|
|
60
|
-
'apt-
|
|
61
|
-
'apt-
|
|
62
|
-
'apt-
|
|
63
|
-
'apt-
|
|
64
|
-
'apt-
|
|
65
|
-
'apt-
|
|
84
|
+
'apt-file-manifest.json',
|
|
85
|
+
// agents/<dir>.md — one per skill directory (39 dirs)
|
|
86
|
+
'agents/apt.md',
|
|
87
|
+
'agents/apt-author-skill.md',
|
|
88
|
+
'agents/apt-bootstrap.md',
|
|
89
|
+
'agents/apt-caveman.md',
|
|
90
|
+
'agents/apt-classify.md',
|
|
91
|
+
'agents/apt-close-task.md',
|
|
92
|
+
'agents/apt-create-docs.md',
|
|
93
|
+
'agents/apt-debug.md',
|
|
94
|
+
'agents/apt-design.md',
|
|
95
|
+
'agents/apt-diagram.md',
|
|
96
|
+
'agents/apt-discuss.md',
|
|
97
|
+
'agents/apt-docs.md',
|
|
98
|
+
'agents/apt-execute.md',
|
|
99
|
+
'agents/apt-fan-out.md',
|
|
100
|
+
'agents/apt-handoff.md',
|
|
101
|
+
'agents/apt-improve.md',
|
|
102
|
+
'agents/apt-mockup.md',
|
|
103
|
+
'agents/apt-pause.md',
|
|
104
|
+
'agents/apt-personas.md',
|
|
105
|
+
'agents/apt-plan.md',
|
|
106
|
+
'agents/apt-pr-review.md',
|
|
107
|
+
'agents/apt-prototype.md',
|
|
108
|
+
'agents/apt-quick.md',
|
|
109
|
+
'agents/apt-release-notes.md',
|
|
110
|
+
'agents/apt-resume.md',
|
|
111
|
+
'agents/apt-review.md',
|
|
112
|
+
'agents/apt-roadmap.md',
|
|
113
|
+
'agents/apt-roundtable.md',
|
|
114
|
+
'agents/apt-run.md',
|
|
115
|
+
'agents/apt-scan.md',
|
|
116
|
+
'agents/apt-setup.md',
|
|
117
|
+
'agents/apt-ship.md',
|
|
118
|
+
'agents/apt-spar.md',
|
|
119
|
+
'agents/apt-stress-test.md',
|
|
120
|
+
'agents/apt-terminal.md',
|
|
121
|
+
'agents/apt-triage.md',
|
|
122
|
+
'agents/apt-update.md',
|
|
123
|
+
'agents/apt-verify.md',
|
|
124
|
+
'agents/apt-verify-proof.md',
|
|
125
|
+
'agents/apt-watch-ci.md',
|
|
126
|
+
'agents/apt-zoom-out.md',
|
|
127
|
+
// commands/<dir>.md — one per skill directory (mirrors agents/)
|
|
128
|
+
'commands/apt.md',
|
|
129
|
+
'commands/apt-author-skill.md',
|
|
130
|
+
'commands/apt-bootstrap.md',
|
|
131
|
+
'commands/apt-caveman.md',
|
|
132
|
+
'commands/apt-classify.md',
|
|
133
|
+
'commands/apt-close-task.md',
|
|
134
|
+
'commands/apt-create-docs.md',
|
|
135
|
+
'commands/apt-debug.md',
|
|
136
|
+
'commands/apt-design.md',
|
|
137
|
+
'commands/apt-diagram.md',
|
|
138
|
+
'commands/apt-discuss.md',
|
|
139
|
+
'commands/apt-docs.md',
|
|
140
|
+
'commands/apt-execute.md',
|
|
141
|
+
'commands/apt-fan-out.md',
|
|
142
|
+
'commands/apt-handoff.md',
|
|
143
|
+
'commands/apt-improve.md',
|
|
144
|
+
'commands/apt-mockup.md',
|
|
145
|
+
'commands/apt-pause.md',
|
|
146
|
+
'commands/apt-personas.md',
|
|
147
|
+
'commands/apt-plan.md',
|
|
148
|
+
'commands/apt-pr-review.md',
|
|
149
|
+
'commands/apt-prototype.md',
|
|
150
|
+
'commands/apt-quick.md',
|
|
151
|
+
'commands/apt-release-notes.md',
|
|
152
|
+
'commands/apt-resume.md',
|
|
153
|
+
'commands/apt-review.md',
|
|
154
|
+
'commands/apt-roadmap.md',
|
|
155
|
+
'commands/apt-roundtable.md',
|
|
156
|
+
'commands/apt-run.md',
|
|
157
|
+
'commands/apt-scan.md',
|
|
158
|
+
'commands/apt-setup.md',
|
|
159
|
+
'commands/apt-ship.md',
|
|
160
|
+
'commands/apt-spar.md',
|
|
161
|
+
'commands/apt-stress-test.md',
|
|
162
|
+
'commands/apt-terminal.md',
|
|
163
|
+
'commands/apt-triage.md',
|
|
164
|
+
'commands/apt-update.md',
|
|
165
|
+
'commands/apt-verify.md',
|
|
166
|
+
'commands/apt-verify-proof.md',
|
|
167
|
+
'commands/apt-watch-ci.md',
|
|
168
|
+
'commands/apt-zoom-out.md',
|
|
169
|
+
// agents/<basename>.md — packages/framework/agents/apt-*.md (17 files)
|
|
170
|
+
// (overlap with skills/apt-*.md top-level — same outputPath, de-dupe)
|
|
171
|
+
'agents/apt-docs-author.md',
|
|
172
|
+
'agents/apt-executor.md',
|
|
173
|
+
'agents/apt-improver.md',
|
|
174
|
+
'agents/apt-planner.md',
|
|
175
|
+
'agents/apt-pr-review-codebase-fit.md',
|
|
176
|
+
'agents/apt-pr-review-fixer.md',
|
|
177
|
+
'agents/apt-pr-review-logic.md',
|
|
178
|
+
'agents/apt-pr-review-performance.md',
|
|
179
|
+
'agents/apt-pr-review-quality.md',
|
|
180
|
+
'agents/apt-pr-review-security.md',
|
|
181
|
+
'agents/apt-pr-review-self-reviewer.md',
|
|
182
|
+
'agents/apt-pr-review-test-integrity.md',
|
|
183
|
+
'agents/apt-pr-review-validator.md',
|
|
184
|
+
'agents/apt-researcher.md',
|
|
185
|
+
'agents/apt-reviewer.md',
|
|
186
|
+
'agents/apt-team-docs-narrator.md',
|
|
187
|
+
'agents/apt-verifier.md',
|
|
66
188
|
]),
|
|
67
189
|
}),
|
|
68
190
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legacy-paths.mjs","sourceRoot":"","sources":["../../../src/cli/install/legacy-paths.mjs"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"legacy-paths.mjs","sourceRoot":"","sources":["../../../src/cli/install/legacy-paths.mjs"],"names":[],"mappings":"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"}
|