@aperant/framework 0.13.0 → 0.16.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/CHANGELOG.md +106 -0
- package/README.md +1 -1
- package/agents/apt-pr-review-crossplatform.md +189 -0
- package/agents/apt-pr-review-i18n.md +190 -0
- package/dist/cli/commands/audit-branch-current.d.mts +27 -5
- package/dist/cli/commands/audit-branch-current.d.mts.map +1 -1
- package/dist/cli/commands/audit-branch-current.mjs +3 -3
- package/dist/cli/commands/audit-branch-current.mjs.map +1 -1
- package/dist/cli/commands/event.d.mts.map +1 -1
- package/dist/cli/commands/event.mjs +6 -4
- package/dist/cli/commands/event.mjs.map +1 -1
- package/dist/cli/commands/fan-out.d.mts.map +1 -1
- package/dist/cli/commands/fan-out.mjs +3 -1
- package/dist/cli/commands/fan-out.mjs.map +1 -1
- package/dist/cli/commands/features-audit.d.mts.map +1 -1
- package/dist/cli/commands/features-audit.mjs +6 -1
- package/dist/cli/commands/features-audit.mjs.map +1 -1
- package/dist/cli/commands/followups.d.mts +5 -0
- package/dist/cli/commands/followups.d.mts.map +1 -0
- package/dist/cli/commands/followups.mjs +266 -0
- package/dist/cli/commands/followups.mjs.map +1 -0
- package/dist/cli/commands/health-check.d.mts.map +1 -1
- package/dist/cli/commands/health-check.mjs +3 -1
- package/dist/cli/commands/health-check.mjs.map +1 -1
- package/dist/cli/commands/init.d.mts.map +1 -1
- package/dist/cli/commands/init.mjs +30 -1
- package/dist/cli/commands/init.mjs.map +1 -1
- package/dist/cli/commands/merge-detect.d.mts +29 -0
- package/dist/cli/commands/merge-detect.d.mts.map +1 -0
- package/dist/cli/commands/merge-detect.mjs +196 -0
- package/dist/cli/commands/merge-detect.mjs.map +1 -0
- package/dist/cli/commands/merge-integrate.d.mts +28 -0
- package/dist/cli/commands/merge-integrate.d.mts.map +1 -0
- package/dist/cli/commands/merge-integrate.mjs +383 -0
- package/dist/cli/commands/merge-integrate.mjs.map +1 -0
- package/dist/cli/commands/pr-review/detect-specialists.d.mts +58 -0
- package/dist/cli/commands/pr-review/detect-specialists.d.mts.map +1 -0
- package/dist/cli/commands/pr-review/detect-specialists.mjs +984 -0
- package/dist/cli/commands/pr-review/detect-specialists.mjs.map +1 -0
- package/dist/cli/commands/pr-review.d.mts.map +1 -1
- package/dist/cli/commands/pr-review.mjs +11 -2
- package/dist/cli/commands/pr-review.mjs.map +1 -1
- package/dist/cli/commands/precompact-hook.d.mts.map +1 -1
- package/dist/cli/commands/precompact-hook.mjs +10 -6
- package/dist/cli/commands/precompact-hook.mjs.map +1 -1
- package/dist/cli/commands/roadmap.d.mts.map +1 -1
- package/dist/cli/commands/roadmap.mjs +24 -11
- package/dist/cli/commands/roadmap.mjs.map +1 -1
- package/dist/cli/commands/seed.d.mts.map +1 -1
- package/dist/cli/commands/seed.mjs +3 -1
- package/dist/cli/commands/seed.mjs.map +1 -1
- package/dist/cli/commands/state.d.mts.map +1 -1
- package/dist/cli/commands/state.mjs +9 -3
- package/dist/cli/commands/state.mjs.map +1 -1
- package/dist/cli/commands/statusline.d.mts.map +1 -1
- package/dist/cli/commands/statusline.mjs +5 -1
- package/dist/cli/commands/statusline.mjs.map +1 -1
- package/dist/cli/commands/task.d.mts.map +1 -1
- package/dist/cli/commands/task.mjs +126 -23
- package/dist/cli/commands/task.mjs.map +1 -1
- package/dist/cli/commands/worktree.d.mts +1 -1
- package/dist/cli/commands/worktree.d.mts.map +1 -1
- package/dist/cli/commands/worktree.mjs +282 -83
- package/dist/cli/commands/worktree.mjs.map +1 -1
- package/dist/cli/config/post-merge-sweep.d.mts.map +1 -1
- package/dist/cli/config/post-merge-sweep.mjs +3 -2
- package/dist/cli/config/post-merge-sweep.mjs.map +1 -1
- package/dist/cli/config/share-policy.d.mts +3 -1
- package/dist/cli/config/share-policy.d.mts.map +1 -1
- package/dist/cli/config/share-policy.mjs +16 -3
- package/dist/cli/config/share-policy.mjs.map +1 -1
- package/dist/cli/config/upgrade-gitignore.d.mts.map +1 -1
- package/dist/cli/config/upgrade-gitignore.mjs +27 -5
- package/dist/cli/config/upgrade-gitignore.mjs.map +1 -1
- package/dist/cli/consistency/parse-qa.mjs +12 -1
- package/dist/cli/consistency/parse-qa.mjs.map +1 -1
- package/dist/cli/consistency/parse-review.d.mts +23 -0
- package/dist/cli/consistency/parse-review.d.mts.map +1 -1
- package/dist/cli/consistency/parse-review.mjs +36 -0
- package/dist/cli/consistency/parse-review.mjs.map +1 -1
- package/dist/cli/consistency/parse-spec.d.mts +16 -0
- package/dist/cli/consistency/parse-spec.d.mts.map +1 -1
- package/dist/cli/consistency/parse-spec.mjs +44 -0
- package/dist/cli/consistency/parse-spec.mjs.map +1 -1
- package/dist/cli/coordination/agent-identity.d.mts +5 -2
- package/dist/cli/coordination/agent-identity.d.mts.map +1 -1
- package/dist/cli/coordination/agent-identity.mjs +6 -4
- package/dist/cli/coordination/agent-identity.mjs.map +1 -1
- package/dist/cli/coordination/store.d.mts +1 -1
- package/dist/cli/dispatch.d.mts.map +1 -1
- package/dist/cli/dispatch.mjs +4 -0
- package/dist/cli/dispatch.mjs.map +1 -1
- package/dist/cli/followups/derive.d.mts +63 -0
- package/dist/cli/followups/derive.d.mts.map +1 -0
- package/dist/cli/followups/derive.mjs +115 -0
- package/dist/cli/followups/derive.mjs.map +1 -0
- package/dist/cli/followups/schema.d.mts +165 -0
- package/dist/cli/followups/schema.d.mts.map +1 -0
- package/dist/cli/followups/schema.mjs +251 -0
- package/dist/cli/followups/schema.mjs.map +1 -0
- package/dist/cli/gate/context.d.mts +1 -1
- package/dist/cli/gate/gates/followups-adjudicated.d.mts +69 -0
- package/dist/cli/gate/gates/followups-adjudicated.d.mts.map +1 -0
- package/dist/cli/gate/gates/followups-adjudicated.mjs +141 -0
- package/dist/cli/gate/gates/followups-adjudicated.mjs.map +1 -0
- package/dist/cli/gate/gates/index.mjs +1 -0
- package/dist/cli/gate/gates/index.mjs.map +1 -1
- package/dist/cli/git/materialize-env.d.mts +39 -0
- package/dist/cli/git/materialize-env.d.mts.map +1 -0
- package/dist/cli/git/materialize-env.mjs +217 -0
- package/dist/cli/git/materialize-env.mjs.map +1 -0
- package/dist/cli/help.d.mts.map +1 -1
- package/dist/cli/help.mjs +9 -1
- package/dist/cli/help.mjs.map +1 -1
- package/dist/cli/install/legacy-paths.d.mts.map +1 -1
- package/dist/cli/install/legacy-paths.mjs +5 -0
- package/dist/cli/install/legacy-paths.mjs.map +1 -1
- package/dist/cli/roadmap/lifecycle.d.mts.map +1 -1
- package/dist/cli/roadmap/lifecycle.mjs +4 -1
- package/dist/cli/roadmap/lifecycle.mjs.map +1 -1
- package/dist/cli/task/ids.d.mts +9 -0
- package/dist/cli/task/ids.d.mts.map +1 -1
- package/dist/cli/task/ids.mjs +9 -0
- package/dist/cli/task/ids.mjs.map +1 -1
- package/dist/cli/task/index-md.d.mts +5 -0
- package/dist/cli/task/index-md.d.mts.map +1 -1
- package/dist/cli/task/index-md.mjs +12 -4
- package/dist/cli/task/index-md.mjs.map +1 -1
- package/dist/cli/util/io.d.mts +6 -0
- package/dist/cli/util/io.d.mts.map +1 -1
- package/dist/cli/util/io.mjs +16 -1
- package/dist/cli/util/io.mjs.map +1 -1
- package/dist/cli/util/project.d.mts +7 -2
- package/dist/cli/util/project.d.mts.map +1 -1
- package/dist/cli/util/project.mjs +11 -14
- package/dist/cli/util/project.mjs.map +1 -1
- package/dist/cli/util/state-paths.d.mts +19 -0
- package/dist/cli/util/state-paths.d.mts.map +1 -0
- package/dist/cli/util/state-paths.mjs +45 -0
- package/dist/cli/util/state-paths.mjs.map +1 -0
- package/dist/plugin/.claude-plugin/plugin.json +4 -1
- package/dist/plugin/agents/apt-pr-review-crossplatform.md +189 -0
- package/dist/plugin/agents/apt-pr-review-i18n.md +190 -0
- package/dist/plugin/skills/apt/SKILL.md +9 -3
- package/dist/plugin/skills/apt-close-task/SKILL.md +48 -0
- package/dist/plugin/skills/apt-debug/SKILL.md +19 -9
- package/dist/plugin/skills/apt-execute/SKILL.md +3 -1
- package/dist/plugin/skills/apt-fan-out/SKILL.md +65 -1
- package/dist/plugin/skills/apt-merge-conflict-resolution/SKILL.md +227 -0
- package/dist/plugin/skills/apt-pr-review/SCHEMA.md +4 -2
- package/dist/plugin/skills/apt-pr-review/SKILL.md +117 -29
- package/dist/plugin/skills/apt-quick/SKILL.md +24 -1
- package/dist/plugin/skills/apt-review/SKILL.md +6 -0
- package/dist/plugin/skills/apt-run/SKILL.md +1 -1
- package/dist/plugin/skills/apt-setup/SKILL.md +21 -3
- package/dist/plugin/skills/apt-ship/SKILL.md +32 -11
- package/dist/plugin/skills/apt-terminal/SKILL.md +8 -0
- package/dist/plugin/skills/apt-triage/SKILL.md +4 -0
- package/dist/plugin/skills/apt-verify/SKILL.md +24 -0
- package/dist/plugin/skills/apt-watch-ci/SKILL.md +3 -1
- package/dist/types/config.d.ts +33 -0
- package/dist/types/config.d.ts.map +1 -1
- package/package.json +1 -1
- package/prompts/conductor-framework-context.md +1 -1
- package/prompts/github/pr_crossplatform_agent.md +283 -0
- package/prompts/github/pr_i18n_agent.md +279 -0
- package/prompts/inbox-clarification.md +18 -11
- package/skills/apt/SKILL.md +9 -3
- package/skills/apt-close-task/SKILL.md +48 -0
- package/skills/apt-debug/SKILL.md +19 -9
- package/skills/apt-execute/SKILL.md +3 -1
- package/skills/apt-fan-out/SKILL.md +65 -1
- package/skills/apt-merge-conflict-resolution/SKILL.md +227 -0
- package/skills/apt-pr-review/SCHEMA.md +4 -2
- package/skills/apt-pr-review/SKILL.md +117 -29
- package/skills/apt-quick/SKILL.md +24 -1
- package/skills/apt-review/SKILL.md +6 -0
- package/skills/apt-run/SKILL.md +1 -1
- package/skills/apt-setup/SKILL.md +21 -3
- package/skills/apt-ship/SKILL.md +32 -11
- package/skills/apt-terminal/SKILL.md +8 -0
- package/skills/apt-triage/SKILL.md +4 -0
- package/skills/apt-verify/SKILL.md +24 -0
- package/skills/apt-watch-ci/SKILL.md +3 -1
- package/src/cli/commands/audit-branch-current.mjs +3 -3
- package/src/cli/commands/event.mjs +6 -4
- package/src/cli/commands/fan-out.mjs +3 -1
- package/src/cli/commands/features-audit.mjs +6 -1
- package/src/cli/commands/followups.mjs +303 -0
- package/src/cli/commands/health-check.mjs +3 -1
- package/src/cli/commands/init.mjs +29 -0
- package/src/cli/commands/merge-detect.mjs +203 -0
- package/src/cli/commands/merge-integrate.mjs +392 -0
- package/src/cli/commands/pr-review/__fixtures__/android-strings/app/src/main/res/values-fr/strings.xml +3 -0
- package/src/cli/commands/pr-review/__fixtures__/babel-js/package.json +4 -0
- package/src/cli/commands/pr-review/__fixtures__/c-ifdef/src/main.c +4 -0
- package/src/cli/commands/pr-review/__fixtures__/ci-matrix/.github/workflows/ci.yml +10 -0
- package/src/cli/commands/pr-review/__fixtures__/cmake-win/CMakeLists.txt +5 -0
- package/src/cli/commands/pr-review/__fixtures__/diffs/add-arb.patch +9 -0
- package/src/cli/commands/pr-review/__fixtures__/diffs/ci-single-os-dep.patch +13 -0
- package/src/cli/commands/pr-review/__fixtures__/diffs/ci-single-os-list-item-dep.patch +17 -0
- package/src/cli/commands/pr-review/__fixtures__/diffs/lone-weak-t.patch +8 -0
- package/src/cli/commands/pr-review/__fixtures__/diffs/monorepo-b.patch +7 -0
- package/src/cli/commands/pr-review/__fixtures__/diffs/two-weak-xpl.patch +12 -0
- package/src/cli/commands/pr-review/__fixtures__/dropped-underscore/src/app.js +2 -0
- package/src/cli/commands/pr-review/__fixtures__/electron-app/package.json +4 -0
- package/src/cli/commands/pr-review/__fixtures__/i18n-locale-file/src/locales/fr.json +1 -0
- package/src/cli/commands/pr-review/__fixtures__/monorepo/packages/a/locales/fr.json +1 -0
- package/src/cli/commands/pr-review/__fixtures__/monorepo/packages/b/src/index.ts +1 -0
- package/src/cli/commands/pr-review/__fixtures__/py-babel/pyproject.toml +3 -0
- package/src/cli/commands/pr-review/__fixtures__/qt-i18n-dir/i18n/app_fr.ts +11 -0
- package/src/cli/commands/pr-review/__fixtures__/rust-cli/Cargo.toml +7 -0
- package/src/cli/commands/pr-review/__fixtures__/rust-cli/src/main.rs +1 -0
- package/src/cli/commands/pr-review/__fixtures__/ts-dir/ts/foo.ts +3 -0
- package/src/cli/commands/pr-review/detect-specialists.mjs +1029 -0
- package/src/cli/commands/pr-review.mjs +12 -2
- package/src/cli/commands/precompact-hook.mjs +10 -6
- package/src/cli/commands/roadmap.mjs +24 -11
- package/src/cli/commands/seed.mjs +3 -1
- package/src/cli/commands/state.mjs +9 -3
- package/src/cli/commands/statusline.mjs +5 -1
- package/src/cli/commands/task.mjs +135 -23
- package/src/cli/commands/worktree.mjs +298 -81
- package/src/cli/config/post-merge-sweep.mjs +3 -2
- package/src/cli/config/share-policy.mjs +16 -3
- package/src/cli/config/upgrade-gitignore.mjs +27 -5
- package/src/cli/consistency/parse-qa.mjs +11 -1
- package/src/cli/consistency/parse-review.mjs +36 -0
- package/src/cli/consistency/parse-spec.mjs +43 -0
- package/src/cli/coordination/agent-identity.mjs +6 -4
- package/src/cli/dispatch.mjs +4 -0
- package/src/cli/followups/derive.mjs +123 -0
- package/src/cli/followups/schema.mjs +264 -0
- package/src/cli/gate/gates/followups-adjudicated.mjs +158 -0
- package/src/cli/gate/gates/index.mjs +1 -0
- package/src/cli/git/materialize-env.mjs +212 -0
- package/src/cli/help.mjs +9 -1
- package/src/cli/install/legacy-paths.mjs +5 -0
- package/src/cli/roadmap/lifecycle.mjs +4 -1
- package/src/cli/task/ids.mjs +9 -0
- package/src/cli/task/index-md.mjs +12 -4
- package/src/cli/util/io.mjs +15 -1
- package/src/cli/util/project.mjs +11 -14
- package/src/cli/util/state-paths.mjs +45 -0
- package/prompts/followup_planner.md +0 -399
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* git/materialize-env.mjs — framework-CLI env materialization seam (ID-06).
|
|
3
|
+
*
|
|
4
|
+
* Subtask 2 of `build-unified-per-project-env-secrets-ma_16-06-26` (#354). The
|
|
5
|
+
* third worktree-create seam: after `apt-tools worktree create --task` adds a
|
|
6
|
+
* worktree, write the project's stored env file blobs verbatim into it so a CLI
|
|
7
|
+
* verify-in-worktree run has the same env as the main checkout.
|
|
8
|
+
*
|
|
9
|
+
* This is a standalone `.mjs` mirror of the TS core `materializeProjectEnv`
|
|
10
|
+
* (the framework CLI cannot import the compiled `@aperant/core` helper). It is
|
|
11
|
+
* deliberately self-contained + best-effort: every failure path returns a
|
|
12
|
+
* `{ materialized: 0, ... }` envelope instead of throwing, so worktree creation
|
|
13
|
+
* (the parent op) is never aborted by an env hiccup.
|
|
14
|
+
*
|
|
15
|
+
* libSQL `project_env` schema (subtask 1) — keyed `(project_id, rel_path)`:
|
|
16
|
+
* project_id TEXT, rel_path TEXT, contents TEXT [may be safeStorage-encrypted
|
|
17
|
+
* on the desktop write path], classification TEXT, fingerprint TEXT, updated_at TEXT.
|
|
18
|
+
*
|
|
19
|
+
* Encryption caveat: the desktop write path wraps `contents` with Electron's
|
|
20
|
+
* safeStorage `CryptoProvider`, which a standalone Node CLI cannot decrypt. We
|
|
21
|
+
* write whatever the column holds — plaintext in self-hosted/CLI contexts
|
|
22
|
+
* (`CryptoProvider` absent), opaque otherwise. That mirrors the libSQL
|
|
23
|
+
* backend's own plaintext-fallback robustness and is the documented framework
|
|
24
|
+
* limitation; the desktop seams (pipeline + terminal) decrypt via the store.
|
|
25
|
+
*/
|
|
26
|
+
import { createHash } from 'node:crypto';
|
|
27
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
28
|
+
import { homedir } from 'node:os';
|
|
29
|
+
import { dirname, isAbsolute, join, resolve, sep } from 'node:path';
|
|
30
|
+
/** Resolve the shared libSQL DB path: APERANT_DB_PATH override → ~/.aperant/data.db. */
|
|
31
|
+
function resolveDbPath() {
|
|
32
|
+
const raw = process.env.APERANT_DB_PATH;
|
|
33
|
+
if (raw && raw.trim().length > 0)
|
|
34
|
+
return raw;
|
|
35
|
+
return join(homedir(), '.aperant', 'data.db');
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Reject a rel_path that is absolute or escapes the worktree root BEFORE any
|
|
39
|
+
* write (the traversal guard, mirroring the core `assertPathContained` choke
|
|
40
|
+
* point). Returns the resolved absolute target, or null when unsafe.
|
|
41
|
+
*
|
|
42
|
+
* Exported so the security-sensitive guard can be unit-tested directly: the
|
|
43
|
+
* libSQL-backed `materializeProjectEnvCli` can only no-op in environments where
|
|
44
|
+
* `@libsql/client` is unresolvable (the framework test runner), so the pure
|
|
45
|
+
* guard is the testable load-bearing surface.
|
|
46
|
+
*/
|
|
47
|
+
export function resolveContainedTarget(worktreePath, relPath) {
|
|
48
|
+
if (!relPath || isAbsolute(relPath))
|
|
49
|
+
return null;
|
|
50
|
+
const base = resolve(worktreePath);
|
|
51
|
+
const target = resolve(base, relPath);
|
|
52
|
+
if (target !== base && !target.startsWith(base + sep))
|
|
53
|
+
return null;
|
|
54
|
+
return target;
|
|
55
|
+
}
|
|
56
|
+
/** sha256 hex of a file's verbatim text — drift comparison only (ID-07). */
|
|
57
|
+
function fingerprint(contents) {
|
|
58
|
+
return createHash('sha256').update(contents, 'utf-8').digest('hex');
|
|
59
|
+
}
|
|
60
|
+
/** Lazily open the shared libSQL DB, or null when absent / @libsql unavailable. */
|
|
61
|
+
async function openDb() {
|
|
62
|
+
const dbPath = resolveDbPath();
|
|
63
|
+
if (!existsSync(dbPath))
|
|
64
|
+
return null;
|
|
65
|
+
let createClient;
|
|
66
|
+
try {
|
|
67
|
+
;
|
|
68
|
+
({ createClient } = await import('@libsql/client'));
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// @libsql/client not installed in this consumer — best-effort no-op.
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
return createClient({ url: `file:${dbPath}` });
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Resolve the libSQL `projects.id` for a given project root path. The desktop /
|
|
83
|
+
* self-hosted app keys `project_env` rows by the project's stored id, NOT its
|
|
84
|
+
* path; the framework CLI only knows the path, so we match it against the
|
|
85
|
+
* `projects.path` column. Returns null when the project is unknown to libSQL
|
|
86
|
+
* (e.g. a fresh repo never opened in the app) — the caller treats that as
|
|
87
|
+
* "no env to materialize", never an error.
|
|
88
|
+
*/
|
|
89
|
+
export async function resolveProjectIdFromPath(client, projectPath) {
|
|
90
|
+
if (!client)
|
|
91
|
+
return null;
|
|
92
|
+
const wanted = resolve(projectPath);
|
|
93
|
+
try {
|
|
94
|
+
const result = await client.execute({ sql: 'SELECT id, path FROM projects', args: [] });
|
|
95
|
+
for (const row of result.rows) {
|
|
96
|
+
if (row.path != null && resolve(String(row.path)) === wanted) {
|
|
97
|
+
return String(row.id);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
// projects table absent or unreadable — no project id.
|
|
103
|
+
}
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Read every `project_env` row for a project from an open libSQL client.
|
|
108
|
+
* Returns `[]` (never throws) when the table is absent or projectId is null.
|
|
109
|
+
*
|
|
110
|
+
* @returns Promise<Array<{ relPath, contents, classification, fingerprint }>>
|
|
111
|
+
*/
|
|
112
|
+
async function readProjectEnvRows(client, projectId) {
|
|
113
|
+
if (!client || !projectId)
|
|
114
|
+
return [];
|
|
115
|
+
try {
|
|
116
|
+
const result = await client.execute({
|
|
117
|
+
sql: 'SELECT rel_path, contents, classification, fingerprint FROM project_env WHERE project_id = ? ORDER BY rel_path ASC',
|
|
118
|
+
args: [projectId],
|
|
119
|
+
});
|
|
120
|
+
return result.rows.map((row) => ({
|
|
121
|
+
relPath: String(row.rel_path),
|
|
122
|
+
contents: row.contents == null ? '' : String(row.contents),
|
|
123
|
+
classification: String(row.classification),
|
|
124
|
+
fingerprint: String(row.fingerprint),
|
|
125
|
+
}));
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
// Missing table (project_env never created) or read error — no-op.
|
|
129
|
+
return [];
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/** Close a libSQL client best-effort (never throws). */
|
|
133
|
+
function closeDb(client) {
|
|
134
|
+
try {
|
|
135
|
+
client?.close?.();
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
/* best-effort */
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Materialize the project's stored env blobs verbatim into a worktree.
|
|
143
|
+
*
|
|
144
|
+
* @param worktreePath absolute path of the target worktree
|
|
145
|
+
* @param projectPath absolute path of the main project root (used to resolve
|
|
146
|
+
* the libSQL project id via `projects.path`)
|
|
147
|
+
* @param explicitProjectId optional override when the caller already knows the id
|
|
148
|
+
* @returns { materialized, rejected, errored } counts — never throws.
|
|
149
|
+
*/
|
|
150
|
+
export async function materializeProjectEnvCli(worktreePath, projectPath, explicitProjectId) {
|
|
151
|
+
const client = await openDb();
|
|
152
|
+
try {
|
|
153
|
+
const projectId = explicitProjectId || (await resolveProjectIdFromPath(client, projectPath));
|
|
154
|
+
const rows = await readProjectEnvRows(client, projectId);
|
|
155
|
+
let materialized = 0;
|
|
156
|
+
let rejected = 0;
|
|
157
|
+
let errored = 0;
|
|
158
|
+
for (const row of rows) {
|
|
159
|
+
const target = resolveContainedTarget(worktreePath, row.relPath);
|
|
160
|
+
if (!target) {
|
|
161
|
+
rejected += 1;
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
try {
|
|
165
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
166
|
+
writeFileSync(target, row.contents, 'utf-8');
|
|
167
|
+
materialized += 1;
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
errored += 1;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return { materialized, rejected, errored };
|
|
174
|
+
}
|
|
175
|
+
finally {
|
|
176
|
+
closeDb(client);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Detect drift for an already-materialized worktree (ID-07): compare each
|
|
181
|
+
* stored blob's fingerprint against the on-disk file. Returns per-file verdicts;
|
|
182
|
+
* `sync-env` simply re-runs `materializeProjectEnvCli` to overwrite.
|
|
183
|
+
*
|
|
184
|
+
* @returns { hasDrift, files: [{ relPath, status }] } — never throws.
|
|
185
|
+
*/
|
|
186
|
+
export async function detectEnvDriftCli(worktreePath, projectPath, explicitProjectId) {
|
|
187
|
+
const client = await openDb();
|
|
188
|
+
try {
|
|
189
|
+
const projectId = explicitProjectId || (await resolveProjectIdFromPath(client, projectPath));
|
|
190
|
+
const rows = await readProjectEnvRows(client, projectId);
|
|
191
|
+
const files = [];
|
|
192
|
+
for (const row of rows) {
|
|
193
|
+
const target = resolveContainedTarget(worktreePath, row.relPath);
|
|
194
|
+
if (!target || !existsSync(target)) {
|
|
195
|
+
files.push({ relPath: row.relPath, status: 'missing' });
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
let onDisk;
|
|
199
|
+
try {
|
|
200
|
+
onDisk = readFileSync(target, 'utf-8');
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
files.push({ relPath: row.relPath, status: 'missing' });
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
files.push({
|
|
207
|
+
relPath: row.relPath,
|
|
208
|
+
status: fingerprint(onDisk) === row.fingerprint ? 'in-sync' : 'drifted',
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
return { hasDrift: files.some((f) => f.status !== 'in-sync'), files };
|
|
212
|
+
}
|
|
213
|
+
finally {
|
|
214
|
+
closeDb(client);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=materialize-env.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materialize-env.mjs","sourceRoot":"","sources":["../../../src/cli/git/materialize-env.mjs"],"names":[],"mappings":"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"}
|
package/dist/cli/help.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.d.mts","sourceRoot":"","sources":["../../src/cli/help.mjs"],"names":[],"mappings":"AAMA,
|
|
1
|
+
{"version":3,"file":"help.d.mts","sourceRoot":"","sources":["../../src/cli/help.mjs"],"names":[],"mappings":"AAMA,kCA8IC"}
|
package/dist/cli/help.mjs
CHANGED
|
@@ -17,6 +17,9 @@ Commands:
|
|
|
17
17
|
config upgrade-layout <dir> [--dry-run] Migrate .aperant/ folder layout to C36 shape (moves + rewrites gitignore)
|
|
18
18
|
audit privacy <dir> [--scrub] C35: diff tracked .aperant/* vs share policy (exit 2 on violations; --scrub prints filter-repo commands + checklist, never executes)
|
|
19
19
|
audit visibility-signals <dir> C35: structured JSON signals for /apt:setup's visibility mini-flow
|
|
20
|
+
merge detect <dir> [--base <ref>] [--head <ref>] Trial-merge mergeability probe (reuses audit branch-current detection); emits {mergeable, conflicts_preview?} for apt:merge-conflict-resolution
|
|
21
|
+
merge markers <dir> Read on-disk conflict markers from the unmerged worktree so the agent can resolve them inline; emits {conflicted, files:[{path,content}]}
|
|
22
|
+
merge integrate <dir> --tasks <ids> | --batch <id> [--base <ref>] Serialize a fan-out batch into base: order tasks (topological on depends_on, else stable), probe each PR's mergeability (reuses merge detect), emit an integration report for apt:fan-out §5
|
|
20
23
|
state-update <dir> --field --value Update a state field
|
|
21
24
|
detect-project <project-dir> Scan project for init classification
|
|
22
25
|
init-state <dir> --config <json> Write config + state after init flow
|
|
@@ -72,9 +75,10 @@ Commands:
|
|
|
72
75
|
|
|
73
76
|
standards <project-dir> [--profile <name>] [--json] [--no-color] C20: zero-orchestration read-only bundle (constitution + profile + feature registry + design tokens + taste)
|
|
74
77
|
|
|
75
|
-
worktree create <dir> --subtask <id> --branch <name> Create isolated worktree for a subtask
|
|
78
|
+
worktree create <dir> --subtask <id> --branch <name> Create isolated worktree for a subtask (also materializes the project's stored env blobs into the new worktree, #354)
|
|
76
79
|
worktree remove <dir> --subtask <id> [--force] Remove a subtask worktree
|
|
77
80
|
worktree list <dir> List active worktrees under .aperant/worktrees/
|
|
81
|
+
worktree sync-env <dir> --task <id> [--scope <s>] [--project-id <id>] Re-materialize the project's stored env blobs into an existing task worktree (store is source of truth — overwrites, no merge)
|
|
78
82
|
|
|
79
83
|
detect-worktree <project-dir> Check if running inside a git worktree
|
|
80
84
|
template <name> Output a template (agents-greenfield, agents-brownfield, config, state, gitignore)
|
|
@@ -129,6 +133,10 @@ Commands:
|
|
|
129
133
|
ci-watch start|stop|status|tick <dir> [--pr <N>] [...] /apt:watch-ci primitives — see SKILL.md for full flag matrix
|
|
130
134
|
ci-watch sweep <dir> --orphaned [--dry-run] BUG-027: enumerate ci-watches state files, query gh per PR, remove terminal-state (MERGED|CLOSED) entries (manual GC; rate-limited)
|
|
131
135
|
|
|
136
|
+
followups check <dir> --task-id <id> G45: derive the expected follow-up universe (Out of Scope ∪ raw review rows ∪ qa findings) + report missing/unadjudicated/unfixed/undispositioned rows; exit 1 when the ledger is dishonest
|
|
137
|
+
followups disposition <dir> --task-id <id> --row <row-id> --kind <filed_task|executed_commit|parked_note|dropped_by_user> --ref <ref> [--reason <text>] G45: flip a ledger row to dispositioned (atomic; dropped_by_user requires --reason)
|
|
138
|
+
followups policy <dir> --task-id <id> G45: effective disposition policy (ask|file|chain + max_chain_depth) from config.followups when set, else autonomy-derived
|
|
139
|
+
|
|
132
140
|
Flags:
|
|
133
141
|
--version Print version and exit
|
|
134
142
|
--help Print usage and exit
|
package/dist/cli/help.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.mjs","sourceRoot":"","sources":["../../src/cli/help.mjs"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,MAAM,UAAU,SAAS;IACxB,MAAM,IAAI,GAAG,GAAG,UAAU,EAAE
|
|
1
|
+
{"version":3,"file":"help.mjs","sourceRoot":"","sources":["../../src/cli/help.mjs"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,MAAM,UAAU,SAAS;IACxB,MAAM,IAAI,GAAG,GAAG,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBA0IT,CAAA;IAEnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAA;AAClC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,CAsJ1C;;kBA5JY,MAAM;kBACN,MAAM;;;;;qBAEN,aAAa,CAAC,MAAM,CAAC"}
|
|
@@ -100,6 +100,7 @@ export const LEGACY_INSTALL_PATHS = Object.freeze({
|
|
|
100
100
|
'agents/apt-fan-out.md',
|
|
101
101
|
'agents/apt-handoff.md',
|
|
102
102
|
'agents/apt-improve.md',
|
|
103
|
+
'agents/apt-merge-conflict-resolution.md',
|
|
103
104
|
'agents/apt-mockup.md',
|
|
104
105
|
'agents/apt-pause.md',
|
|
105
106
|
'agents/apt-personas.md',
|
|
@@ -144,6 +145,7 @@ export const LEGACY_INSTALL_PATHS = Object.freeze({
|
|
|
144
145
|
'commands/apt-fan-out.md',
|
|
145
146
|
'commands/apt-handoff.md',
|
|
146
147
|
'commands/apt-improve.md',
|
|
148
|
+
'commands/apt-merge-conflict-resolution.md',
|
|
147
149
|
'commands/apt-mockup.md',
|
|
148
150
|
'commands/apt-pause.md',
|
|
149
151
|
'commands/apt-personas.md',
|
|
@@ -177,7 +179,9 @@ export const LEGACY_INSTALL_PATHS = Object.freeze({
|
|
|
177
179
|
'agents/apt-improver.md',
|
|
178
180
|
'agents/apt-planner.md',
|
|
179
181
|
'agents/apt-pr-review-codebase-fit.md',
|
|
182
|
+
'agents/apt-pr-review-crossplatform.md',
|
|
180
183
|
'agents/apt-pr-review-fixer.md',
|
|
184
|
+
'agents/apt-pr-review-i18n.md',
|
|
181
185
|
'agents/apt-pr-review-logic.md',
|
|
182
186
|
'agents/apt-pr-review-performance.md',
|
|
183
187
|
'agents/apt-pr-review-quality.md',
|
|
@@ -185,6 +189,7 @@ export const LEGACY_INSTALL_PATHS = Object.freeze({
|
|
|
185
189
|
'agents/apt-pr-review-self-reviewer.md',
|
|
186
190
|
'agents/apt-pr-review-test-integrity.md',
|
|
187
191
|
'agents/apt-pr-review-validator.md',
|
|
192
|
+
'agents/apt-pr-review-xplatform.md',
|
|
188
193
|
'agents/apt-researcher.md',
|
|
189
194
|
'agents/apt-reviewer.md',
|
|
190
195
|
'agents/apt-team-docs-narrator.md',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legacy-paths.mjs","sourceRoot":"","sources":["../../../src/cli/install/legacy-paths.mjs"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"legacy-paths.mjs","sourceRoot":"","sources":["../../../src/cli/install/legacy-paths.mjs"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.d.mts","sourceRoot":"","sources":["../../../src/cli/roadmap/lifecycle.mjs"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lifecycle.d.mts","sourceRoot":"","sources":["../../../src/cli/roadmap/lifecycle.mjs"],"names":[],"mappings":"AAmBA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;SAgHC"}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { existsSync, readFileSync } from 'node:fs';
|
|
13
13
|
import { join } from 'node:path';
|
|
14
|
+
import { resolveMainRepoRoot } from '../util/state-paths.mjs';
|
|
14
15
|
import { loadRoadmapForScope, saveRoadmapForScope } from './io.mjs';
|
|
15
16
|
import { applyRollup } from './rollup.mjs';
|
|
16
17
|
import { syncRoadmapInProcess } from './sync.mjs';
|
|
@@ -80,7 +81,9 @@ export function applyLifecyclePhaseSideEffect(targetDir, task, spec, reasonPrefi
|
|
|
80
81
|
if (spec.to === 'completed') {
|
|
81
82
|
let stateBlob = opts.stateBlob;
|
|
82
83
|
if (!stateBlob) {
|
|
83
|
-
|
|
84
|
+
// state-fork-fix: ephemeral sibling-count read resolves to the main
|
|
85
|
+
// board (the committable roadmapDir read above stays worktree-local).
|
|
86
|
+
const statePath = join(resolveMainRepoRoot(targetDir), '.aperant', 'state.json');
|
|
84
87
|
if (existsSync(statePath)) {
|
|
85
88
|
try {
|
|
86
89
|
stateBlob = JSON.parse(readFileSync(statePath, 'utf-8'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.mjs","sourceRoot":"","sources":["../../../src/cli/roadmap/lifecycle.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEjD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,6BAA6B,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,GAAG,EAAE;IAC3F,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAA;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS,CAAA;IACrC,2EAA2E;IAC3E,2EAA2E;IAC3E,wEAAwE;IACxE,qCAAqC;IACrC,EAAE;IACF,sEAAsE;IACtE,0EAA0E;IAC1E,6DAA6D;IAC7D,uCAAuC;IACvC,mDAAmD;IACnD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,IAAI,SAAS,CAAA;IAClD,MAAM,OAAO,GAAG,mBAAmB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;IACtD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IACzB,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,YAAY,CAAC,CAAA;IACpF,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAA;IAC3B,MAAM,KAAK,GAAG,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC1E,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IACvB,uEAAuE;IACvE,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IAE3C,qEAAqE;IACrE,sEAAsE;IACtE,yEAAyE;IACzE,wEAAwE;IACxE,qEAAqE;IACrE,uCAAuC;IACvC,EAAE;IACF,sEAAsE;IACtE,wEAAwE;IACxE,mEAAmE;IACnE,wEAAwE;IACxE,+DAA+D;IAC/D,IAAI,IAAI,CAAC,EAAE,KAAK,WAAW,EAAE,CAAC;QAC7B,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"lifecycle.mjs","sourceRoot":"","sources":["../../../src/cli/roadmap/lifecycle.mjs"],"names":[],"mappings":"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"}
|
package/dist/cli/task/ids.d.mts
CHANGED
|
@@ -14,6 +14,15 @@ export function formatDateForTask(dateFormat: any, now?: Date): string;
|
|
|
14
14
|
* generator never emits a counter or a random hash.
|
|
15
15
|
*/
|
|
16
16
|
export function generateTaskId(description: any, config: any, now?: Date): string;
|
|
17
|
+
/**
|
|
18
|
+
* Build the `.aperant/tasks/<id>/` directory path.
|
|
19
|
+
*
|
|
20
|
+
* state-fork-fix: `tasks/` is EPHEMERAL, so callers pass the resolved main-repo
|
|
21
|
+
* state root (`resolveMainRepoRoot(projectDir)`) as `projectDir` — the redirect
|
|
22
|
+
* stays visible at each call site rather than being hidden inside this builder.
|
|
23
|
+
* `resolve()` is idempotent on an already-absolute root, so passing the resolved
|
|
24
|
+
* root is safe.
|
|
25
|
+
*/
|
|
17
26
|
export function getTaskDir(projectDir: any, taskId: any): string;
|
|
18
27
|
/**
|
|
19
28
|
* C28 — scope-aware proof directory.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ids.d.mts","sourceRoot":"","sources":["../../../src/cli/task/ids.mjs"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,uEAaC;AAED;;;;;;;;GAQG;AACH,kFAUC;AAED,iEAEC;AAED;;;;;GAKG;AACH,8EAGC"}
|
|
1
|
+
{"version":3,"file":"ids.d.mts","sourceRoot":"","sources":["../../../src/cli/task/ids.mjs"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,uEAaC;AAED;;;;;;;;GAQG;AACH,kFAUC;AAED;;;;;;;;GAQG;AACH,iEAEC;AAED;;;;;GAKG;AACH,8EAGC"}
|
package/dist/cli/task/ids.mjs
CHANGED
|
@@ -40,6 +40,15 @@ export function generateTaskId(description, config, now = new Date()) {
|
|
|
40
40
|
const date = formatDateForTask(dateFormat, now);
|
|
41
41
|
return `${slug}_${date}`;
|
|
42
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Build the `.aperant/tasks/<id>/` directory path.
|
|
45
|
+
*
|
|
46
|
+
* state-fork-fix: `tasks/` is EPHEMERAL, so callers pass the resolved main-repo
|
|
47
|
+
* state root (`resolveMainRepoRoot(projectDir)`) as `projectDir` — the redirect
|
|
48
|
+
* stays visible at each call site rather than being hidden inside this builder.
|
|
49
|
+
* `resolve()` is idempotent on an already-absolute root, so passing the resolved
|
|
50
|
+
* root is safe.
|
|
51
|
+
*/
|
|
43
52
|
export function getTaskDir(projectDir, taskId) {
|
|
44
53
|
return join(resolve(projectDir), '.aperant', 'tasks', taskId);
|
|
45
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ids.mjs","sourceRoot":"","sources":["../../../src/cli/task/ids.mjs"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEzC;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAU,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE;IAC7D,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC7C,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACtD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACjD,QAAQ,UAAU,EAAE,CAAC;QACpB,KAAK,UAAU;YACd,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAA;QAC3B,KAAK,UAAU;YACd,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAA;QAC3B,KAAK,UAAU,CAAC;QAChB;YACC,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAA;IAC5B,CAAC;AACF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE;IACnE,MAAM,IAAI,GACT,WAAW;SACT,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,MAAM,CAAA;IAClC,MAAM,UAAU,GAAG,MAAM,EAAE,WAAW,EAAE,WAAW,IAAI,UAAU,CAAA;IACjE,MAAM,IAAI,GAAG,iBAAiB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;IAC/C,OAAO,GAAG,IAAI,IAAI,IAAI,EAAE,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,UAAU,EAAE,MAAM;IAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AAC9D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM;IACpD,MAAM,aAAa,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAA;IAC9D,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,CAAA;AAC7E,CAAC"}
|
|
1
|
+
{"version":3,"file":"ids.mjs","sourceRoot":"","sources":["../../../src/cli/task/ids.mjs"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEzC;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAU,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE;IAC7D,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC7C,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACtD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACjD,QAAQ,UAAU,EAAE,CAAC;QACpB,KAAK,UAAU;YACd,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAA;QAC3B,KAAK,UAAU;YACd,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAA;QAC3B,KAAK,UAAU,CAAC;QAChB;YACC,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAA;IAC5B,CAAC;AACF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE;IACnE,MAAM,IAAI,GACT,WAAW;SACT,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,MAAM,CAAA;IAClC,MAAM,UAAU,GAAG,MAAM,EAAE,WAAW,EAAE,WAAW,IAAI,UAAU,CAAA;IACjE,MAAM,IAAI,GAAG,iBAAiB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;IAC/C,OAAO,GAAG,IAAI,IAAI,IAAI,EAAE,CAAA;AACzB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CAAC,UAAU,EAAE,MAAM;IAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AAC9D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM;IACpD,MAAM,aAAa,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAA;IAC9D,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,CAAA;AAC7E,CAAC"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Regenerate .aperant/tasks/INDEX.md from state.json.
|
|
3
3
|
* One line per task — lightweight project task management view.
|
|
4
|
+
*
|
|
5
|
+
* state-fork-fix: both the state.json READ and the tasks/INDEX.md WRITE are
|
|
6
|
+
* ephemeral, so they resolve to the MAIN repo from any worktree cwd. Config
|
|
7
|
+
* (loadMergedProjectConfig below) stays on the raw targetDir — config.json /
|
|
8
|
+
* config.local.json are committable + per-device, not the ephemeral board.
|
|
4
9
|
*/
|
|
5
10
|
export function regenerateTaskIndex(targetDir: any): void;
|
|
6
11
|
//# sourceMappingURL=index-md.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-md.d.mts","sourceRoot":"","sources":["../../../src/cli/task/index-md.mjs"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index-md.d.mts","sourceRoot":"","sources":["../../../src/cli/task/index-md.mjs"],"names":[],"mappings":"AAWA;;;;;;;;GAQG;AACH,0DA0FC"}
|
|
@@ -5,13 +5,20 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
|
5
5
|
import { join } from 'node:path';
|
|
6
6
|
import { loadMergedProjectConfig } from '../config/load.mjs';
|
|
7
7
|
import { withFileLock } from '../util/fs-lock.mjs';
|
|
8
|
+
import { resolveMainRepoRoot } from '../util/state-paths.mjs';
|
|
8
9
|
import { formatDateDisplay, formatTimeDisplay } from './format.mjs';
|
|
9
10
|
/**
|
|
10
11
|
* Regenerate .aperant/tasks/INDEX.md from state.json.
|
|
11
12
|
* One line per task — lightweight project task management view.
|
|
13
|
+
*
|
|
14
|
+
* state-fork-fix: both the state.json READ and the tasks/INDEX.md WRITE are
|
|
15
|
+
* ephemeral, so they resolve to the MAIN repo from any worktree cwd. Config
|
|
16
|
+
* (loadMergedProjectConfig below) stays on the raw targetDir — config.json /
|
|
17
|
+
* config.local.json are committable + per-device, not the ephemeral board.
|
|
12
18
|
*/
|
|
13
19
|
export function regenerateTaskIndex(targetDir) {
|
|
14
|
-
const
|
|
20
|
+
const stateRoot = resolveMainRepoRoot(targetDir);
|
|
21
|
+
const statePath = join(stateRoot, '.aperant', 'state.json');
|
|
15
22
|
if (!existsSync(statePath))
|
|
16
23
|
return;
|
|
17
24
|
// AUDIT-001: read through the merged loader so per-device
|
|
@@ -87,11 +94,12 @@ export function regenerateTaskIndex(targetDir) {
|
|
|
87
94
|
}
|
|
88
95
|
}
|
|
89
96
|
lines.push('', `*Auto-generated by apt-tools \u2014 ${new Date().toISOString()}*`, '');
|
|
90
|
-
const indexPath = join(
|
|
91
|
-
mkdirSync(join(
|
|
97
|
+
const indexPath = join(stateRoot, '.aperant', 'tasks', 'INDEX.md');
|
|
98
|
+
mkdirSync(join(stateRoot, '.aperant', 'tasks'), { recursive: true });
|
|
92
99
|
// Lock-protected — C28 R4. Concurrent regenerators must not interleave.
|
|
100
|
+
// Lock root moves with the file (state-fork-fix ID-06).
|
|
93
101
|
withFileLock(indexPath, () => {
|
|
94
102
|
writeFileSync(indexPath, lines.join('\n'), 'utf-8');
|
|
95
|
-
}, { projectRoot:
|
|
103
|
+
}, { projectRoot: stateRoot });
|
|
96
104
|
}
|
|
97
105
|
//# sourceMappingURL=index-md.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-md.mjs","sourceRoot":"","sources":["../../../src/cli/task/index-md.mjs"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAEnE
|
|
1
|
+
{"version":3,"file":"index-md.mjs","sourceRoot":"","sources":["../../../src/cli/task/index-md.mjs"],"names":[],"mappings":"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"}
|
package/dist/cli/util/io.d.mts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read + JSON-parse a file if it exists, returning null when the file is
|
|
3
|
+
* absent OR unparseable (malformed JSON is a non-fatal "no document" signal
|
|
4
|
+
* for the callers that use this — gates / followups CLI). Never throws.
|
|
5
|
+
*/
|
|
6
|
+
export function readJsonIfExists(path: any): any;
|
|
1
7
|
/**
|
|
2
8
|
* Read framework package.json and return a "<name> <version>" identity string.
|
|
3
9
|
* Resolves relative to this module's location so the CLI keeps its own
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"io.d.mts","sourceRoot":"","sources":["../../../src/cli/util/io.mjs"],"names":[],"mappings":"AAmBA;;;;GAIG;AACH,qCAKC;AAED;;;GAGG;AACH,wCAEC;AAED;;;GAGG;AACH,yCAGC"}
|
|
1
|
+
{"version":3,"file":"io.d.mts","sourceRoot":"","sources":["../../../src/cli/util/io.mjs"],"names":[],"mappings":"AAmBA;;;;GAIG;AACH,iDAOC;AAED;;;;GAIG;AACH,qCAKC;AAED;;;GAGG;AACH,wCAEC;AAED;;;GAGG;AACH,yCAGC"}
|
package/dist/cli/util/io.mjs
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* These are pure leaf helpers with zero internal dependencies. Behavior must
|
|
5
5
|
* match the originals byte-for-byte; the CLI snapshot harness enforces this.
|
|
6
6
|
*/
|
|
7
|
-
import { readFileSync } from 'node:fs';
|
|
7
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
8
8
|
import { dirname, resolve } from 'node:path';
|
|
9
9
|
import { fileURLToPath } from 'node:url';
|
|
10
10
|
// Re-export the hardened atomic-write primitives so every existing call site
|
|
@@ -13,6 +13,21 @@ import { fileURLToPath } from 'node:url';
|
|
|
13
13
|
export { appendJsonl, atomicWriteJson, atomicWriteText } from './atomic-write.mjs';
|
|
14
14
|
const __filename = fileURLToPath(import.meta.url);
|
|
15
15
|
const __dirname = dirname(__filename);
|
|
16
|
+
/**
|
|
17
|
+
* Read + JSON-parse a file if it exists, returning null when the file is
|
|
18
|
+
* absent OR unparseable (malformed JSON is a non-fatal "no document" signal
|
|
19
|
+
* for the callers that use this — gates / followups CLI). Never throws.
|
|
20
|
+
*/
|
|
21
|
+
export function readJsonIfExists(path) {
|
|
22
|
+
if (!existsSync(path))
|
|
23
|
+
return null;
|
|
24
|
+
try {
|
|
25
|
+
return JSON.parse(readFileSync(path, 'utf-8'));
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
16
31
|
/**
|
|
17
32
|
* Read framework package.json and return a "<name> <version>" identity string.
|
|
18
33
|
* Resolves relative to this module's location so the CLI keeps its own
|
package/dist/cli/util/io.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"io.mjs","sourceRoot":"","sources":["../../../src/cli/util/io.mjs"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"io.mjs","sourceRoot":"","sources":["../../../src/cli/util/io.mjs"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,6EAA6E;AAC7E,wEAAwE;AACxE,uDAAuD;AACvD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAElF,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AAErC;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAI;IACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IAClC,IAAI,CAAC;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;IAC/C,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAA;IACZ,CAAC;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU;IACzB,0EAA0E;IAC1E,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAA;IACpE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;IACtD,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAA;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,IAAI;IAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;AAC3D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,IAAI,CAAC,OAAO;IAC3B,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;IAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAChB,CAAC"}
|
|
@@ -5,8 +5,13 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export function findProjectRootFromPath(filePath: any): string | null;
|
|
7
7
|
/**
|
|
8
|
-
* Get the shared lock directory —
|
|
9
|
-
* across worktrees. Falls back to
|
|
8
|
+
* Get the shared lock directory — resolves to the main repo's .aperant/locks/
|
|
9
|
+
* from any worktree so locks coordinate across worktrees. Falls back to the
|
|
10
|
+
* resolved local .aperant/locks/ if not in git.
|
|
11
|
+
*
|
|
12
|
+
* This is a SEPARATE policy wrapper over the shared resolveMainRepoRoot
|
|
13
|
+
* mechanism (state-fork-fix ID-03) — locks are short-lived and do NOT follow
|
|
14
|
+
* resolveStateDir's Phase-2 home relocation, so the two stay distinct.
|
|
10
15
|
*/
|
|
11
16
|
export function getSharedLockDir(projectDir: any): string;
|
|
12
17
|
//# sourceMappingURL=project.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.mts","sourceRoot":"","sources":["../../../src/cli/util/project.mjs"],"names":[],"mappings":"AAaA;;;;GAIG;AACH,sEASC;AAED
|
|
1
|
+
{"version":3,"file":"project.d.mts","sourceRoot":"","sources":["../../../src/cli/util/project.mjs"],"names":[],"mappings":"AAaA;;;;GAIG;AACH,sEASC;AAED;;;;;;;;GAQG;AACH,0DAIC"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { existsSync, mkdirSync } from 'node:fs';
|
|
10
10
|
import { dirname, join, resolve } from 'node:path';
|
|
11
|
-
import {
|
|
11
|
+
import { resolveMainRepoRoot } from './state-paths.mjs';
|
|
12
12
|
/**
|
|
13
13
|
* Walk upward from the target path until we find a `.aperant/` directory.
|
|
14
14
|
* Returns the containing project root, or null if none is found within
|
|
@@ -27,20 +27,17 @@ export function findProjectRootFromPath(filePath) {
|
|
|
27
27
|
return null;
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
|
-
* Get the shared lock directory —
|
|
31
|
-
* across worktrees. Falls back to
|
|
30
|
+
* Get the shared lock directory — resolves to the main repo's .aperant/locks/
|
|
31
|
+
* from any worktree so locks coordinate across worktrees. Falls back to the
|
|
32
|
+
* resolved local .aperant/locks/ if not in git.
|
|
33
|
+
*
|
|
34
|
+
* This is a SEPARATE policy wrapper over the shared resolveMainRepoRoot
|
|
35
|
+
* mechanism (state-fork-fix ID-03) — locks are short-lived and do NOT follow
|
|
36
|
+
* resolveStateDir's Phase-2 home relocation, so the two stay distinct.
|
|
32
37
|
*/
|
|
33
38
|
export function getSharedLockDir(projectDir) {
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const sharedDir = join(wt.main_repo_root, '.aperant', 'locks');
|
|
38
|
-
mkdirSync(sharedDir, { recursive: true });
|
|
39
|
-
return sharedDir;
|
|
40
|
-
}
|
|
41
|
-
// Not a worktree — use local
|
|
42
|
-
const localDir = join(resolve(projectDir), '.aperant', 'locks');
|
|
43
|
-
mkdirSync(localDir, { recursive: true });
|
|
44
|
-
return localDir;
|
|
39
|
+
const sharedDir = join(resolveMainRepoRoot(projectDir), '.aperant', 'locks');
|
|
40
|
+
mkdirSync(sharedDir, { recursive: true });
|
|
41
|
+
return sharedDir;
|
|
45
42
|
}
|
|
46
43
|
//# sourceMappingURL=project.mjs.map
|