ctxr-cli 0.8.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +313 -22
- package/dist/adapters/types.d.ts +0 -5
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/commands/adapters-generate.d.ts.map +1 -1
- package/dist/commands/adapters-generate.js +2 -3
- package/dist/commands/adapters-generate.js.map +1 -1
- package/dist/commands/context-gather.d.ts +22 -0
- package/dist/commands/context-gather.d.ts.map +1 -0
- package/dist/commands/context-gather.js +36 -0
- package/dist/commands/context-gather.js.map +1 -0
- package/dist/commands/graph-query.d.ts.map +1 -1
- package/dist/commands/graph-query.js +6 -8
- package/dist/commands/graph-query.js.map +1 -1
- package/dist/commands/ingest.d.ts +22 -9
- package/dist/commands/ingest.d.ts.map +1 -1
- package/dist/commands/ingest.js +86 -24
- package/dist/commands/ingest.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +22 -5
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/publish-check.d.ts.map +1 -1
- package/dist/commands/publish-check.js +8 -0
- package/dist/commands/publish-check.js.map +1 -1
- package/dist/commands/publish-new.d.ts.map +1 -1
- package/dist/commands/publish-new.js +15 -0
- package/dist/commands/publish-new.js.map +1 -1
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +33 -11
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/session-start.d.ts.map +1 -1
- package/dist/commands/session-start.js +9 -1
- package/dist/commands/session-start.js.map +1 -1
- package/dist/commands/source-check.d.ts.map +1 -1
- package/dist/commands/source-check.js +52 -9
- package/dist/commands/source-check.js.map +1 -1
- package/dist/commands/source-stamp.d.ts +6 -5
- package/dist/commands/source-stamp.d.ts.map +1 -1
- package/dist/commands/source-stamp.js +8 -7
- package/dist/commands/source-stamp.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +7 -1
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/verify.d.ts +11 -2
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +86 -5
- package/dist/commands/verify.js.map +1 -1
- package/dist/commands/version.d.ts +31 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +87 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/config/defaults.d.ts +113 -4
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +83 -4
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/load.d.ts +2 -2
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +13 -3
- package/dist/config/load.js.map +1 -1
- package/dist/config/render.d.ts +5 -0
- package/dist/config/render.d.ts.map +1 -1
- package/dist/config/render.js +62 -3
- package/dist/config/render.js.map +1 -1
- package/dist/config/schema.d.ts +47 -76
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +171 -134
- package/dist/config/schema.js.map +1 -1
- package/dist/core/agents-doc.d.ts.map +1 -1
- package/dist/core/agents-doc.js +4 -1
- package/dist/core/agents-doc.js.map +1 -1
- package/dist/core/browse/nav.d.ts.map +1 -1
- package/dist/core/browse/nav.js +4 -1
- package/dist/core/browse/nav.js.map +1 -1
- package/dist/core/browse/preferences.d.ts +26 -0
- package/dist/core/browse/preferences.d.ts.map +1 -0
- package/dist/core/browse/preferences.js +74 -0
- package/dist/core/browse/preferences.js.map +1 -0
- package/dist/core/browse/routes.d.ts +10 -8
- package/dist/core/browse/routes.d.ts.map +1 -1
- package/dist/core/browse/routes.js +113 -24
- package/dist/core/browse/routes.js.map +1 -1
- package/dist/core/browse/templates.d.ts +14 -4
- package/dist/core/browse/templates.d.ts.map +1 -1
- package/dist/core/browse/templates.js +22 -4
- package/dist/core/browse/templates.js.map +1 -1
- package/dist/core/checks/harness-portability-checks.d.ts +22 -1
- package/dist/core/checks/harness-portability-checks.d.ts.map +1 -1
- package/dist/core/checks/harness-portability-checks.js +48 -4
- package/dist/core/checks/harness-portability-checks.js.map +1 -1
- package/dist/core/checks/integrity-checks.d.ts +0 -2
- package/dist/core/checks/integrity-checks.d.ts.map +1 -1
- package/dist/core/checks/integrity-checks.js +2 -27
- package/dist/core/checks/integrity-checks.js.map +1 -1
- package/dist/core/checks/manifest.d.ts.map +1 -1
- package/dist/core/checks/manifest.js +2 -0
- package/dist/core/checks/manifest.js.map +1 -1
- package/dist/core/checks/organize-checks.d.ts +11 -1
- package/dist/core/checks/organize-checks.d.ts.map +1 -1
- package/dist/core/checks/organize-checks.js +42 -12
- package/dist/core/checks/organize-checks.js.map +1 -1
- package/dist/core/checks/retrieval-checks.d.ts +9 -0
- package/dist/core/checks/retrieval-checks.d.ts.map +1 -0
- package/dist/core/checks/retrieval-checks.js +30 -0
- package/dist/core/checks/retrieval-checks.js.map +1 -0
- package/dist/core/command.d.ts +6 -0
- package/dist/core/command.d.ts.map +1 -1
- package/dist/core/content/canonicalize.d.ts +10 -0
- package/dist/core/content/canonicalize.d.ts.map +1 -1
- package/dist/core/content/canonicalize.js +12 -0
- package/dist/core/content/canonicalize.js.map +1 -1
- package/dist/core/env.d.ts +5 -0
- package/dist/core/env.d.ts.map +1 -1
- package/dist/core/env.js +3 -0
- package/dist/core/env.js.map +1 -1
- package/dist/core/environment/probe.d.ts +12 -0
- package/dist/core/environment/probe.d.ts.map +1 -0
- package/dist/core/environment/probe.js +36 -0
- package/dist/core/environment/probe.js.map +1 -0
- package/dist/core/errors.d.ts +32 -0
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +81 -3
- package/dist/core/errors.js.map +1 -1
- package/dist/core/fs/prefix.d.ts +13 -0
- package/dist/core/fs/prefix.d.ts.map +1 -0
- package/dist/core/fs/prefix.js +22 -0
- package/dist/core/fs/prefix.js.map +1 -0
- package/dist/core/git/worktree.d.ts +22 -0
- package/dist/core/git/worktree.d.ts.map +1 -1
- package/dist/core/git/worktree.js +34 -0
- package/dist/core/git/worktree.js.map +1 -1
- package/dist/core/graph/persist.d.ts +13 -0
- package/dist/core/graph/persist.d.ts.map +1 -1
- package/dist/core/graph/persist.js +24 -0
- package/dist/core/graph/persist.js.map +1 -1
- package/dist/core/harness/isolated-run.d.ts +52 -0
- package/dist/core/harness/isolated-run.d.ts.map +1 -0
- package/dist/core/harness/isolated-run.js +100 -0
- package/dist/core/harness/isolated-run.js.map +1 -0
- package/dist/core/hooks.d.ts +3 -12
- package/dist/core/hooks.d.ts.map +1 -1
- package/dist/core/hooks.js +24 -20
- package/dist/core/hooks.js.map +1 -1
- package/dist/core/ingest/capture-hash.d.ts +16 -0
- package/dist/core/ingest/capture-hash.d.ts.map +1 -0
- package/dist/core/ingest/capture-hash.js +34 -0
- package/dist/core/ingest/capture-hash.js.map +1 -0
- package/dist/core/ingest/identity.d.ts +7 -1
- package/dist/core/ingest/identity.d.ts.map +1 -1
- package/dist/core/ingest/identity.js +16 -1
- package/dist/core/ingest/identity.js.map +1 -1
- package/dist/core/ingest/model.d.ts +17 -2
- package/dist/core/ingest/model.d.ts.map +1 -1
- package/dist/core/ingest/model.js +5 -0
- package/dist/core/ingest/model.js.map +1 -1
- package/dist/core/install-kind.d.ts +25 -0
- package/dist/core/install-kind.d.ts.map +1 -0
- package/dist/core/install-kind.js +56 -0
- package/dist/core/install-kind.js.map +1 -0
- package/dist/core/notes/list.d.ts +20 -0
- package/dist/core/notes/list.d.ts.map +1 -1
- package/dist/core/notes/list.js +27 -6
- package/dist/core/notes/list.js.map +1 -1
- package/dist/core/publish/script-check.d.ts +5 -2
- package/dist/core/publish/script-check.d.ts.map +1 -1
- package/dist/core/publish/script-check.js +5 -2
- package/dist/core/publish/script-check.js.map +1 -1
- package/dist/core/records.d.ts +7 -0
- package/dist/core/records.d.ts.map +1 -1
- package/dist/core/records.js +12 -2
- package/dist/core/records.js.map +1 -1
- package/dist/core/registry.d.ts +40 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +55 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/retrieval/pass.d.ts +66 -0
- package/dist/core/retrieval/pass.d.ts.map +1 -0
- package/dist/core/retrieval/pass.js +171 -0
- package/dist/core/retrieval/pass.js.map +1 -0
- package/dist/core/root.d.ts +11 -5
- package/dist/core/root.d.ts.map +1 -1
- package/dist/core/root.js +20 -8
- package/dist/core/root.js.map +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +7 -0
- package/dist/core/skills.js.map +1 -1
- package/dist/core/version-check.d.ts +63 -0
- package/dist/core/version-check.d.ts.map +1 -0
- package/dist/core/version-check.js +181 -0
- package/dist/core/version-check.js.map +1 -0
- package/dist/core/write-lifecycle/path-gate.d.ts +2 -2
- package/dist/core/write-lifecycle/path-gate.d.ts.map +1 -1
- package/dist/core/write-lifecycle/path-gate.js +9 -10
- package/dist/core/write-lifecycle/path-gate.js.map +1 -1
- package/dist/run.d.ts +1 -6
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +76 -19
- package/dist/run.js.map +1 -1
- package/dist/version.d.ts +8 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +8 -1
- package/dist/version.js.map +1 -1
- package/package.json +12 -4
- package/templates/agents/canonical.md +1 -1
- package/templates/agents/capture-and-ingest.md +27 -8
- package/templates/agents/retrieval-leg-routing.md +34 -8
- package/templates/hooks/_resolve-ctxr.sh +37 -0
- package/templates/hooks/claude-code-write-gate.sh +34 -6
- package/templates/hooks/pre-commit.sh +15 -8
- package/templates/serve/shell.html +16 -2
- package/templates/serve/style.css +145 -3
- package/templates/skills/ctxr-connection-finding.md +7 -5
- package/templates/skills/ctxr-ingest-orchestration.md +15 -9
- package/templates/skills/ctxr-publish.md +7 -8
- package/templates/skills/ctxr-session-lifecycle.md +20 -0
- package/templates/skills/ctxr-upgrade.md +44 -0
- package/dist/commands/migrate.d.ts +0 -30
- package/dist/commands/migrate.d.ts.map +0 -1
- package/dist/commands/migrate.js +0 -56
- package/dist/commands/migrate.js.map +0 -1
- package/dist/core/migrations/add-explanation-craft-skill.d.ts +0 -26
- package/dist/core/migrations/add-explanation-craft-skill.d.ts.map +0 -1
- package/dist/core/migrations/add-explanation-craft-skill.js +0 -94
- package/dist/core/migrations/add-explanation-craft-skill.js.map +0 -1
- package/dist/core/migrations/archive-destination-from-taxonomy.d.ts +0 -35
- package/dist/core/migrations/archive-destination-from-taxonomy.d.ts.map +0 -1
- package/dist/core/migrations/archive-destination-from-taxonomy.js +0 -109
- package/dist/core/migrations/archive-destination-from-taxonomy.js.map +0 -1
- package/dist/core/migrations/drop-access-axes.d.ts +0 -24
- package/dist/core/migrations/drop-access-axes.d.ts.map +0 -1
- package/dist/core/migrations/drop-access-axes.js +0 -54
- package/dist/core/migrations/drop-access-axes.js.map +0 -1
- package/dist/core/migrations/drop-forge-and-workspaces-external.d.ts +0 -19
- package/dist/core/migrations/drop-forge-and-workspaces-external.d.ts.map +0 -1
- package/dist/core/migrations/drop-forge-and-workspaces-external.js +0 -49
- package/dist/core/migrations/drop-forge-and-workspaces-external.js.map +0 -1
- package/dist/core/migrations/registry.d.ts +0 -16
- package/dist/core/migrations/registry.d.ts.map +0 -1
- package/dist/core/migrations/registry.js +0 -30
- package/dist/core/migrations/registry.js.map +0 -1
- package/dist/core/migrations/rename-conventions-path.d.ts +0 -26
- package/dist/core/migrations/rename-conventions-path.d.ts.map +0 -1
- package/dist/core/migrations/rename-conventions-path.js +0 -86
- package/dist/core/migrations/rename-conventions-path.js.map +0 -1
- package/dist/core/migrations/rename-procedures-path.d.ts +0 -17
- package/dist/core/migrations/rename-procedures-path.d.ts.map +0 -1
- package/dist/core/migrations/rename-procedures-path.js +0 -45
- package/dist/core/migrations/rename-procedures-path.js.map +0 -1
- package/dist/core/migrations/types.d.ts +0 -27
- package/dist/core/migrations/types.d.ts.map +0 -1
- package/dist/core/migrations/types.js +0 -2
- package/dist/core/migrations/types.js.map +0 -1
package/dist/core/errors.js
CHANGED
|
@@ -20,12 +20,29 @@ export class NoStoreRootError extends ContextureError {
|
|
|
20
20
|
super(ExitCode.Usage, {
|
|
21
21
|
code: 'root.not_found',
|
|
22
22
|
severity: 'error',
|
|
23
|
-
message: 'No store root found: checked --root,
|
|
23
|
+
message: 'No store root found: checked --root, CONTEXTURE_STORE_ROOT, and walking up ' +
|
|
24
24
|
`from "${checked.cwd}" looking for contexture.yaml.`,
|
|
25
25
|
details: { checkedFlag: checked.flag, checkedEnv: checked.env, cwd: checked.cwd },
|
|
26
26
|
});
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* rename-store-root-env-var D2: CONTEXTURE_ROOT is superseded by
|
|
31
|
+
* CONTEXTURE_STORE_ROOT and is never resolved as a root — only refused, so
|
|
32
|
+
* an environment migrated in part (the CLI renamed, some other reader of the
|
|
33
|
+
* old name not yet updated) fails loudly instead of silently walking up and
|
|
34
|
+
* resolving a different store.
|
|
35
|
+
*/
|
|
36
|
+
export class SupersededStoreRootEnvVarError extends ContextureError {
|
|
37
|
+
constructor() {
|
|
38
|
+
super(ExitCode.Usage, {
|
|
39
|
+
code: 'root.superseded_env_var',
|
|
40
|
+
severity: 'error',
|
|
41
|
+
message: 'CONTEXTURE_ROOT is set, but this release no longer recognizes it — rename it to ' +
|
|
42
|
+
'CONTEXTURE_STORE_ROOT.',
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
29
46
|
export class NotAGitRepositoryError extends ContextureError {
|
|
30
47
|
constructor(root) {
|
|
31
48
|
super(ExitCode.Usage, {
|
|
@@ -47,13 +64,26 @@ export class SchemaVersionNewerError extends ContextureError {
|
|
|
47
64
|
});
|
|
48
65
|
}
|
|
49
66
|
}
|
|
67
|
+
export class SchemaVersionBehindError extends ContextureError {
|
|
68
|
+
constructor(storeVersion, supportedVersion) {
|
|
69
|
+
super(ExitCode.Usage, {
|
|
70
|
+
code: 'config.schema_version.behind',
|
|
71
|
+
severity: 'error',
|
|
72
|
+
message: `This store's schema_version (${storeVersion}) is older than the ` +
|
|
73
|
+
`version this contexture release supports (${supportedVersion}). ` +
|
|
74
|
+
'contexture ships no migration: bring the store forward by hand, ' +
|
|
75
|
+
"following the fixup in the release notes for the version that raised it.",
|
|
76
|
+
details: { storeVersion, supportedVersion },
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
50
80
|
export class SchemaVersionMissingError extends ContextureError {
|
|
51
81
|
constructor(configPath) {
|
|
52
82
|
super(ExitCode.Usage, {
|
|
53
83
|
code: 'config.schema_version.missing',
|
|
54
84
|
severity: 'error',
|
|
55
85
|
message: `"${configPath}" has no schema_version field — this store predates ` +
|
|
56
|
-
'the schema-version requirement and
|
|
86
|
+
'the schema-version requirement and is not supported by this release.',
|
|
57
87
|
subject: configPath,
|
|
58
88
|
});
|
|
59
89
|
}
|
|
@@ -172,6 +202,36 @@ export class ArchiveDestinationExistsError extends ContextureError {
|
|
|
172
202
|
});
|
|
173
203
|
}
|
|
174
204
|
}
|
|
205
|
+
export class CaptureFileMissingError extends ContextureError {
|
|
206
|
+
constructor(sidecarPath, capturePath) {
|
|
207
|
+
super(ExitCode.Usage, {
|
|
208
|
+
code: 'ingest.capture_file_missing',
|
|
209
|
+
severity: 'error',
|
|
210
|
+
message: `"${sidecarPath}" names capture file "${capturePath}", which does not exist.`,
|
|
211
|
+
subject: sidecarPath,
|
|
212
|
+
details: { capturePath },
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
export class CaptureDestinationExistsError extends ContextureError {
|
|
217
|
+
constructor(destinationPath) {
|
|
218
|
+
super(ExitCode.Usage, {
|
|
219
|
+
code: 'ingest.capture_destination_exists',
|
|
220
|
+
severity: 'error',
|
|
221
|
+
message: `Cannot retain the capture: "${destinationPath}" already exists.`,
|
|
222
|
+
subject: destinationPath,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
export class NoCommitToVerifyError extends ContextureError {
|
|
227
|
+
constructor() {
|
|
228
|
+
super(ExitCode.Usage, {
|
|
229
|
+
code: 'verify.no_commit',
|
|
230
|
+
severity: 'error',
|
|
231
|
+
message: 'There is no commit to verify: `verify --portable` checks out the store\'s recorded commit, and this repository has none yet. Commit the store, then re-run.',
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
}
|
|
175
235
|
export class AdapterNotFoundError extends ContextureError {
|
|
176
236
|
constructor(kind, id) {
|
|
177
237
|
super(ExitCode.Usage, {
|
|
@@ -213,6 +273,24 @@ export class GraphNodeNotFoundError extends ContextureError {
|
|
|
213
273
|
});
|
|
214
274
|
}
|
|
215
275
|
}
|
|
276
|
+
/**
|
|
277
|
+
* compose-the-retrieval-pass spec: a persisted graph that carries a note the
|
|
278
|
+
* store no longer admits would serve excluded material to every graph query,
|
|
279
|
+
* so the loader refuses it rather than filtering after the fact — a pre-filter
|
|
280
|
+
* cannot be safely retrofitted from a post-filter. A graph merely MISSING a
|
|
281
|
+
* newly added note is under-inclusive, withholds nothing, and still answers.
|
|
282
|
+
*/
|
|
283
|
+
export class GraphCarriesExcludedNoteError extends ContextureError {
|
|
284
|
+
constructor(nodeIds) {
|
|
285
|
+
const named = [...nodeIds].sort();
|
|
286
|
+
super(ExitCode.Usage, {
|
|
287
|
+
code: 'graph.carries_excluded_note',
|
|
288
|
+
severity: 'error',
|
|
289
|
+
message: `The built graph carries ${named.length} note(s) the store no longer admits: ${named.join(', ')}. Run "ctxr graph build" to rebuild it.`,
|
|
290
|
+
details: { nodes: named },
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
}
|
|
216
294
|
export class MarkerMismatchError extends ContextureError {
|
|
217
295
|
constructor(filePath, detail) {
|
|
218
296
|
super(ExitCode.Usage, {
|
|
@@ -286,7 +364,7 @@ export class PublishSelectorRequiredError extends ContextureError {
|
|
|
286
364
|
super(ExitCode.Usage, {
|
|
287
365
|
code: 'publish.selector_required',
|
|
288
366
|
severity: 'error',
|
|
289
|
-
message: '"ctxr publish gather" requires exactly one of --under, --note,
|
|
367
|
+
message: '"ctxr publish gather" requires exactly one of --under, --note, or --entity.',
|
|
290
368
|
});
|
|
291
369
|
}
|
|
292
370
|
}
|
package/dist/core/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C;;;;;GAKG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,QAAQ,CAAW;IACnB,OAAO,CAAU;IAE1B,YAAY,QAAkB,EAAE,OAAgB;QAC9C,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,eAAe;IACnD,YAAY,OAAqD;QAC/D,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE;YACpB,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,OAAO;YACjB,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one place a store-relative path is tested against a directory prefix.
|
|
3
|
+
* Retrieval exclusion (notes/list.ts), the write-path gate
|
|
4
|
+
* (write-lifecycle/path-gate.ts) and the capture tier's nesting rule
|
|
5
|
+
* (config/schema.ts) all have to agree on what "under this directory" means,
|
|
6
|
+
* including how a configured trailing slash is treated — so they call this
|
|
7
|
+
* rather than each carrying their own copy.
|
|
8
|
+
*/
|
|
9
|
+
export declare function isUnderPrefix(relativePath: string, prefix: string): boolean;
|
|
10
|
+
export declare function isUnderAnyPrefix(relativePath: string, prefixes: readonly string[]): boolean;
|
|
11
|
+
/** True only when `relativePath` sits strictly inside `prefix`, never when the two name the same directory. */
|
|
12
|
+
export declare function isStrictlyUnderPrefix(relativePath: string, prefix: string): boolean;
|
|
13
|
+
//# sourceMappingURL=prefix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prefix.d.ts","sourceRoot":"","sources":["../../../src/core/fs/prefix.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAG3E;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAE3F;AAED,+GAA+G;AAC/G,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAInF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one place a store-relative path is tested against a directory prefix.
|
|
3
|
+
* Retrieval exclusion (notes/list.ts), the write-path gate
|
|
4
|
+
* (write-lifecycle/path-gate.ts) and the capture tier's nesting rule
|
|
5
|
+
* (config/schema.ts) all have to agree on what "under this directory" means,
|
|
6
|
+
* including how a configured trailing slash is treated — so they call this
|
|
7
|
+
* rather than each carrying their own copy.
|
|
8
|
+
*/
|
|
9
|
+
export function isUnderPrefix(relativePath, prefix) {
|
|
10
|
+
const trimmed = prefix.replace(/\/+$/, '');
|
|
11
|
+
return relativePath === trimmed || relativePath.startsWith(`${trimmed}/`);
|
|
12
|
+
}
|
|
13
|
+
export function isUnderAnyPrefix(relativePath, prefixes) {
|
|
14
|
+
return prefixes.some((prefix) => isUnderPrefix(relativePath, prefix));
|
|
15
|
+
}
|
|
16
|
+
/** True only when `relativePath` sits strictly inside `prefix`, never when the two name the same directory. */
|
|
17
|
+
export function isStrictlyUnderPrefix(relativePath, prefix) {
|
|
18
|
+
const trimmedPath = relativePath.replace(/\/+$/, '');
|
|
19
|
+
const trimmedPrefix = prefix.replace(/\/+$/, '');
|
|
20
|
+
return trimmedPath !== trimmedPrefix && trimmedPath.startsWith(`${trimmedPrefix}/`);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=prefix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prefix.js","sourceRoot":"","sources":["../../../src/core/fs/prefix.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,YAAoB,EAAE,MAAc;IAChE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC3C,OAAO,YAAY,KAAK,OAAO,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,YAAoB,EAAE,QAA2B;IAChF,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,+GAA+G;AAC/G,MAAM,UAAU,qBAAqB,CAAC,YAAoB,EAAE,MAAc;IACxE,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrD,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjD,OAAO,WAAW,KAAK,aAAa,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,aAAa,GAAG,CAAC,CAAC;AACtF,CAAC"}
|
|
@@ -10,6 +10,28 @@ export declare function hasRemote(git: GitRunner, cwd: string, name?: string): P
|
|
|
10
10
|
*/
|
|
11
11
|
export declare function fetchOrigin(git: GitRunner, cwd: string, branch: string, remote?: string): Promise<boolean>;
|
|
12
12
|
export declare function addWorktree(git: GitRunner, cwd: string, worktreePath: string, newBranch: string, startPoint: string): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* isolate-the-portability-test (D2): a checkout of a recorded commit with no
|
|
15
|
+
* branch attached. `addWorktree` above always passes `-b`, so it cannot
|
|
16
|
+
* produce one — and a branch would be a second name for a commit the caller
|
|
17
|
+
* is about to throw away.
|
|
18
|
+
*/
|
|
19
|
+
export declare function addDetachedWorktree(git: GitRunner, cwd: string, worktreePath: string, commit: string): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Removes a linked worktree. `--force` because the caller owns the checkout
|
|
22
|
+
* outright and a verify run may well have left it dirty (the derived-artifact
|
|
23
|
+
* step writes into it); refusing to reclaim a checkout the tool created would
|
|
24
|
+
* strand it.
|
|
25
|
+
*/
|
|
26
|
+
export declare function removeWorktree(git: GitRunner, cwd: string, worktreePath: string): Promise<void>;
|
|
27
|
+
/** Clears registrations whose directory is already gone, so a failed removal cannot accumulate stale entries. */
|
|
28
|
+
export declare function pruneWorktrees(git: GitRunner, cwd: string): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* The commit HEAD points at, or null on an unborn HEAD. Returning a value
|
|
31
|
+
* rather than throwing is what lets the portability test refuse "there is no
|
|
32
|
+
* commit to verify" as a checked condition instead of a caught git error.
|
|
33
|
+
*/
|
|
34
|
+
export declare function resolveHead(git: GitRunner, cwd: string): Promise<string | null>;
|
|
13
35
|
export interface WorktreeInfo {
|
|
14
36
|
path: string;
|
|
15
37
|
branch: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../../src/core/git/worktree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,wBAAsB,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,SAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAI9F;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,SAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAGlH;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,SAAS,EACd,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,gGAAgG;AAChG,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE,CAkBnE;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAGxF;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGnF"}
|
|
1
|
+
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../../src/core/git/worktree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,wBAAsB,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,SAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAI9F;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,SAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAGlH;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,SAAS,EACd,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1H;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErG;AAED,iHAAiH;AACjH,wBAAsB,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/E;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKrF;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,gGAAgG;AAChG,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE,CAkBnE;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAGxF;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGnF"}
|
|
@@ -19,6 +19,40 @@ export async function fetchOrigin(git, cwd, branch, remote = 'origin') {
|
|
|
19
19
|
export async function addWorktree(git, cwd, worktreePath, newBranch, startPoint) {
|
|
20
20
|
await git.run(['worktree', 'add', '-b', newBranch, worktreePath, startPoint], { cwd });
|
|
21
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* isolate-the-portability-test (D2): a checkout of a recorded commit with no
|
|
24
|
+
* branch attached. `addWorktree` above always passes `-b`, so it cannot
|
|
25
|
+
* produce one — and a branch would be a second name for a commit the caller
|
|
26
|
+
* is about to throw away.
|
|
27
|
+
*/
|
|
28
|
+
export async function addDetachedWorktree(git, cwd, worktreePath, commit) {
|
|
29
|
+
await git.run(['worktree', 'add', '--detach', worktreePath, commit], { cwd });
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Removes a linked worktree. `--force` because the caller owns the checkout
|
|
33
|
+
* outright and a verify run may well have left it dirty (the derived-artifact
|
|
34
|
+
* step writes into it); refusing to reclaim a checkout the tool created would
|
|
35
|
+
* strand it.
|
|
36
|
+
*/
|
|
37
|
+
export async function removeWorktree(git, cwd, worktreePath) {
|
|
38
|
+
await git.run(['worktree', 'remove', '--force', worktreePath], { cwd, allowFailure: true });
|
|
39
|
+
}
|
|
40
|
+
/** Clears registrations whose directory is already gone, so a failed removal cannot accumulate stale entries. */
|
|
41
|
+
export async function pruneWorktrees(git, cwd) {
|
|
42
|
+
await git.run(['worktree', 'prune'], { cwd, allowFailure: true });
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* The commit HEAD points at, or null on an unborn HEAD. Returning a value
|
|
46
|
+
* rather than throwing is what lets the portability test refuse "there is no
|
|
47
|
+
* commit to verify" as a checked condition instead of a caught git error.
|
|
48
|
+
*/
|
|
49
|
+
export async function resolveHead(git, cwd) {
|
|
50
|
+
const result = await git.run(['rev-parse', 'HEAD'], { cwd, allowFailure: true });
|
|
51
|
+
if (result.exitCode !== 0)
|
|
52
|
+
return null;
|
|
53
|
+
const sha = result.stdout.trim();
|
|
54
|
+
return sha === '' ? null : sha;
|
|
55
|
+
}
|
|
22
56
|
/** Parses `git worktree list --porcelain`'s block format (blocks separated by a blank line). */
|
|
23
57
|
export function parseWorktreeList(porcelain) {
|
|
24
58
|
const blocks = porcelain.split('\n\n').map((b) => b.trim()).filter(Boolean);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../../src/core/git/worktree.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../../src/core/git/worktree.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,4 +8,17 @@ export declare function graphDocumentPath(store: Store): string;
|
|
|
8
8
|
export declare function writeGraphDocument(store: Store, text: string): Promise<void>;
|
|
9
9
|
export declare function writeGraph(store: Store, graph: GraphBuildResult): Promise<void>;
|
|
10
10
|
export declare function readGraph(store: Store): Promise<GraphBuildResult | null>;
|
|
11
|
+
/**
|
|
12
|
+
* compose-the-retrieval-pass spec: the one seam through which every graph
|
|
13
|
+
* query and the retrieval pass read the persisted graph, so the exclusion
|
|
14
|
+
* guarantee is enforced in a single place rather than per caller.
|
|
15
|
+
*
|
|
16
|
+
* Refuses an OVER-inclusive graph — one carrying a note the store's own
|
|
17
|
+
* enumeration no longer admits — because answering from it would surface
|
|
18
|
+
* excluded material. Tolerates an UNDER-inclusive one (a note added since the
|
|
19
|
+
* last build): it withholds nothing, and failing there would make every query
|
|
20
|
+
* brittle for a condition with no withholding consequence. `doctor`'s
|
|
21
|
+
* staleness check is what reports that case.
|
|
22
|
+
*/
|
|
23
|
+
export declare function readAdmittedGraph(store: Store): Promise<GraphBuildResult>;
|
|
11
24
|
//# sourceMappingURL=persist.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persist.d.ts","sourceRoot":"","sources":["../../../src/core/graph/persist.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"persist.d.ts","sourceRoot":"","sources":["../../../src/core/graph/persist.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,mHAAmH;AACnH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAElD;AAED,wIAAwI;AACxI,eAAO,MAAM,4BAA4B,+BAA+B,CAAC;AAEzE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAEtD;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIlF;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIrF;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAO9E;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAO/E"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { mkdir, readFile } from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
+
import { GraphCarriesExcludedNoteError, GraphNotBuiltError } from '../errors.js';
|
|
3
4
|
import { writeFileAtomic } from '../fs/atomic.js';
|
|
5
|
+
import { listNotes } from '../notes/list.js';
|
|
4
6
|
/** A derived artifact, atomically written, under the home directory's cache subpath (the default derived path). */
|
|
5
7
|
export function graphFilePath(store) {
|
|
6
8
|
return path.join(store.root, '.contexture', 'cache', 'graph.json');
|
|
@@ -30,4 +32,26 @@ export async function readGraph(store) {
|
|
|
30
32
|
throw err;
|
|
31
33
|
}
|
|
32
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* compose-the-retrieval-pass spec: the one seam through which every graph
|
|
37
|
+
* query and the retrieval pass read the persisted graph, so the exclusion
|
|
38
|
+
* guarantee is enforced in a single place rather than per caller.
|
|
39
|
+
*
|
|
40
|
+
* Refuses an OVER-inclusive graph — one carrying a note the store's own
|
|
41
|
+
* enumeration no longer admits — because answering from it would surface
|
|
42
|
+
* excluded material. Tolerates an UNDER-inclusive one (a note added since the
|
|
43
|
+
* last build): it withholds nothing, and failing there would make every query
|
|
44
|
+
* brittle for a condition with no withholding consequence. `doctor`'s
|
|
45
|
+
* staleness check is what reports that case.
|
|
46
|
+
*/
|
|
47
|
+
export async function readAdmittedGraph(store) {
|
|
48
|
+
const graph = await readGraph(store);
|
|
49
|
+
if (!graph)
|
|
50
|
+
throw new GraphNotBuiltError();
|
|
51
|
+
const admitted = new Set((await listNotes(store.root, store.config)).map((note) => note.path));
|
|
52
|
+
const excluded = graph.nodes.filter((node) => !admitted.has(node.id)).map((node) => node.id);
|
|
53
|
+
if (excluded.length > 0)
|
|
54
|
+
throw new GraphCarriesExcludedNoteError(excluded);
|
|
55
|
+
return graph;
|
|
56
|
+
}
|
|
33
57
|
//# sourceMappingURL=persist.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persist.js","sourceRoot":"","sources":["../../../src/core/graph/persist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"persist.js","sourceRoot":"","sources":["../../../src/core/graph/persist.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { GitRunner } from '../git/exec.js';
|
|
2
|
+
export interface IsolatedVerifyStep {
|
|
3
|
+
operation: string;
|
|
4
|
+
status: string;
|
|
5
|
+
detail?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface IsolatedVerifyResult {
|
|
8
|
+
/** The commit the disposable checkout was made from — what the run actually verified. */
|
|
9
|
+
commit: string;
|
|
10
|
+
steps: IsolatedVerifyStep[];
|
|
11
|
+
exitCode: number;
|
|
12
|
+
/**
|
|
13
|
+
* Whether the scrubbed home was still empty when the child finished. The
|
|
14
|
+
* requirement says it must be; observing it is what makes that a mechanism
|
|
15
|
+
* rather than an assumption about a directory nobody ever looks at.
|
|
16
|
+
*/
|
|
17
|
+
homeWasEmpty: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* isolate-the-portability-test (D1): the environment the child runs under.
|
|
21
|
+
*
|
|
22
|
+
* Built from the injected environment, never `process.env`, so this stays a
|
|
23
|
+
* pure function of its inputs and the source-level guard that no module
|
|
24
|
+
* outside `core/env.ts` reads process state keeps holding.
|
|
25
|
+
*
|
|
26
|
+
* `HOME` and `USERPROFILE` point at an empty directory, `CONTEXTURE_STORE_ROOT`
|
|
27
|
+
* (and the superseded `CONTEXTURE_ROOT` — rename-store-root-env-var: a leaked
|
|
28
|
+
* one would make the child refuse via SupersededStoreRootEnvVarError instead
|
|
29
|
+
* of being properly isolated) and every `XDG_*` key are removed, and git is
|
|
30
|
+
* cut off from a global config. `PATH` is deliberately preserved: the
|
|
31
|
+
* prerequisites step resolves a tool on it, so `PATH` is the subject of that
|
|
32
|
+
* step rather than something the run isolates from.
|
|
33
|
+
*/
|
|
34
|
+
export declare function scrubbedChildEnv(env: Readonly<Record<string, string | undefined>>, homeDir: string): Record<string, string>;
|
|
35
|
+
/**
|
|
36
|
+
* Runs `verify` against a disposable checkout of `commit`, in a child process
|
|
37
|
+
* with no harness state reachable. Isolation is produced by the mechanism
|
|
38
|
+
* rather than asserted of the implementation, which is the property the
|
|
39
|
+
* portability requirement now names.
|
|
40
|
+
*
|
|
41
|
+
* The child is `process.execPath` plus this CLI's own entry script — never a
|
|
42
|
+
* `PATH` lookup for `ctxr`. Under a scrubbed environment a resolved `ctxr`
|
|
43
|
+
* could be a different installation, and the run would silently verify the
|
|
44
|
+
* wrong binary (D1). It runs bare `verify`, so the recursion terminates by
|
|
45
|
+
* construction.
|
|
46
|
+
*
|
|
47
|
+
* The checkout and both temp directories are reclaimed whether the child
|
|
48
|
+
* passes or fails — a failing run is exactly when a stranded worktree would
|
|
49
|
+
* be least welcome.
|
|
50
|
+
*/
|
|
51
|
+
export declare function runIsolatedVerify(git: GitRunner, storeRoot: string, env: Readonly<Record<string, string | undefined>>, commit: string): Promise<IsolatedVerifyResult>;
|
|
52
|
+
//# sourceMappingURL=isolated-run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isolated-run.d.ts","sourceRoot":"","sources":["../../../src/core/harness/isolated-run.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAKhD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,yFAAyF;IACzF,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACjD,OAAO,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAWxB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACjD,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,oBAAoB,CAAC,CAuB/B"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { mkdtemp, readdir, rm } from 'node:fs/promises';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { promisify } from 'node:util';
|
|
6
|
+
import { addDetachedWorktree, mainWorktreePath, pruneWorktrees, removeWorktree } from '../git/worktree.js';
|
|
7
|
+
const execFileAsync = promisify(execFile);
|
|
8
|
+
/**
|
|
9
|
+
* isolate-the-portability-test (D1): the environment the child runs under.
|
|
10
|
+
*
|
|
11
|
+
* Built from the injected environment, never `process.env`, so this stays a
|
|
12
|
+
* pure function of its inputs and the source-level guard that no module
|
|
13
|
+
* outside `core/env.ts` reads process state keeps holding.
|
|
14
|
+
*
|
|
15
|
+
* `HOME` and `USERPROFILE` point at an empty directory, `CONTEXTURE_STORE_ROOT`
|
|
16
|
+
* (and the superseded `CONTEXTURE_ROOT` — rename-store-root-env-var: a leaked
|
|
17
|
+
* one would make the child refuse via SupersededStoreRootEnvVarError instead
|
|
18
|
+
* of being properly isolated) and every `XDG_*` key are removed, and git is
|
|
19
|
+
* cut off from a global config. `PATH` is deliberately preserved: the
|
|
20
|
+
* prerequisites step resolves a tool on it, so `PATH` is the subject of that
|
|
21
|
+
* step rather than something the run isolates from.
|
|
22
|
+
*/
|
|
23
|
+
export function scrubbedChildEnv(env, homeDir) {
|
|
24
|
+
const child = {};
|
|
25
|
+
for (const [key, value] of Object.entries(env)) {
|
|
26
|
+
if (value === undefined)
|
|
27
|
+
continue;
|
|
28
|
+
if (key === 'CONTEXTURE_STORE_ROOT' || key === 'CONTEXTURE_ROOT' || key.startsWith('XDG_'))
|
|
29
|
+
continue;
|
|
30
|
+
child[key] = value;
|
|
31
|
+
}
|
|
32
|
+
child.HOME = homeDir;
|
|
33
|
+
child.USERPROFILE = homeDir;
|
|
34
|
+
child.GIT_CONFIG_GLOBAL = '/dev/null';
|
|
35
|
+
return child;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Runs `verify` against a disposable checkout of `commit`, in a child process
|
|
39
|
+
* with no harness state reachable. Isolation is produced by the mechanism
|
|
40
|
+
* rather than asserted of the implementation, which is the property the
|
|
41
|
+
* portability requirement now names.
|
|
42
|
+
*
|
|
43
|
+
* The child is `process.execPath` plus this CLI's own entry script — never a
|
|
44
|
+
* `PATH` lookup for `ctxr`. Under a scrubbed environment a resolved `ctxr`
|
|
45
|
+
* could be a different installation, and the run would silently verify the
|
|
46
|
+
* wrong binary (D1). It runs bare `verify`, so the recursion terminates by
|
|
47
|
+
* construction.
|
|
48
|
+
*
|
|
49
|
+
* The checkout and both temp directories are reclaimed whether the child
|
|
50
|
+
* passes or fails — a failing run is exactly when a stranded worktree would
|
|
51
|
+
* be least welcome.
|
|
52
|
+
*/
|
|
53
|
+
export async function runIsolatedVerify(git, storeRoot, env, commit) {
|
|
54
|
+
// Register the checkout against the repository's main worktree, so a run
|
|
55
|
+
// launched from inside a linked worktree still works — contexture's own
|
|
56
|
+
// session model makes that the common case, not the exception.
|
|
57
|
+
const repoRoot = await mainWorktreePath(git, storeRoot);
|
|
58
|
+
const checkout = await mkdtemp(path.join(tmpdir(), 'ctxr-portable-'));
|
|
59
|
+
const home = await mkdtemp(path.join(tmpdir(), 'ctxr-portable-home-'));
|
|
60
|
+
// `worktree add` wants to create the directory itself.
|
|
61
|
+
await rm(checkout, { recursive: true, force: true });
|
|
62
|
+
try {
|
|
63
|
+
await addDetachedWorktree(git, repoRoot, checkout, commit);
|
|
64
|
+
const { stdout, exitCode } = await runChild(checkout, scrubbedChildEnv(env, home));
|
|
65
|
+
// Read it before the finally block removes it — afterwards there is
|
|
66
|
+
// nothing left to inspect.
|
|
67
|
+
const homeWasEmpty = (await readdir(home)).length === 0;
|
|
68
|
+
return { commit, steps: parseSteps(stdout), exitCode, homeWasEmpty };
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
await removeWorktree(git, repoRoot, checkout);
|
|
72
|
+
await pruneWorktrees(git, repoRoot);
|
|
73
|
+
await rm(checkout, { recursive: true, force: true });
|
|
74
|
+
await rm(home, { recursive: true, force: true });
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function runChild(checkout, env) {
|
|
78
|
+
const entry = process.argv[1];
|
|
79
|
+
if (entry === undefined)
|
|
80
|
+
throw new Error('cannot resolve this CLI\'s entry script to re-execute');
|
|
81
|
+
try {
|
|
82
|
+
const { stdout } = await execFileAsync(process.execPath, [entry, 'verify', '--json', '--root', checkout], { env });
|
|
83
|
+
return { stdout, exitCode: 0 };
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
const failure = err;
|
|
87
|
+
return { stdout: failure.stdout ?? '', exitCode: typeof failure.code === 'number' ? failure.code : 1 };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/** The child speaks the same JSON envelope every command does; anything else is reported as no steps. */
|
|
91
|
+
function parseSteps(stdout) {
|
|
92
|
+
try {
|
|
93
|
+
const steps = JSON.parse(stdout).data?.steps;
|
|
94
|
+
return Array.isArray(steps) ? steps : [];
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return [];
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=isolated-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isolated-run.js","sourceRoot":"","sources":["../../../src/core/harness/isolated-run.ts"],"names":[],"mappings":"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"}
|
package/dist/core/hooks.d.ts
CHANGED
|
@@ -1,12 +1,4 @@
|
|
|
1
1
|
import type { GitRunner } from './git/exec.js';
|
|
2
|
-
/**
|
|
3
|
-
* Absolute path to THIS installation's built CLI entrypoint, baked into the
|
|
4
|
-
* generated hooks so they invoke the exact contexture that installed them —
|
|
5
|
-
* sidestepping the global/local/npx distribution question entirely. If this
|
|
6
|
-
* install is later replaced, `doctor`'s self-heal (below) regenerates the
|
|
7
|
-
* hook with the new path.
|
|
8
|
-
*/
|
|
9
|
-
export declare function resolveOwnBinPath(): string;
|
|
10
2
|
export interface HookSpec {
|
|
11
3
|
fileName: 'pre-commit' | 'pre-push';
|
|
12
4
|
templateFileName: 'pre-commit.sh' | 'pre-push.sh';
|
|
@@ -25,11 +17,10 @@ export declare function installHooks(root: string, defaultBranch: string): Promi
|
|
|
25
17
|
/**
|
|
26
18
|
* A harness adapter's own generated hook script (e.g. Claude Code's
|
|
27
19
|
* PreToolUse write-gate) — same idempotent render+chmod discipline as git
|
|
28
|
-
* hooks, without assuming
|
|
29
|
-
*
|
|
30
|
-
* find-and-replace, the same convention `renderHook` uses.
|
|
20
|
+
* hooks, without assuming the `.githooks` directory. Shares `renderTemplate`
|
|
21
|
+
* with `renderHook`, so it gets the same `__RESOLVE_CTXR__` inlining.
|
|
31
22
|
*/
|
|
32
|
-
export declare function installTemplatedHookScript(root: string, relativeTargetPath: string, templateFileName: string
|
|
23
|
+
export declare function installTemplatedHookScript(root: string, relativeTargetPath: string, templateFileName: string): Promise<{
|
|
33
24
|
changed: boolean;
|
|
34
25
|
}>;
|
|
35
26
|
export declare function configureHooksPath(git: GitRunner, cwd: string): Promise<void>;
|
package/dist/core/hooks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/core/hooks.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/core/hooks.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAgC/C,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,YAAY,GAAG,UAAU,CAAC;IACpC,gBAAgB,EAAE,eAAe,GAAG,aAAa,CAAC;CACnD;AAgCD,MAAM,WAAW,iBAAiB;IAChC,oFAAoF;IACpF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAclG;AAED;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,MAAM,EACZ,kBAAkB,EAAE,MAAM,EAC1B,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAK/B;AAED,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnF;AAED,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAKrG;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAc7F"}
|