ctxr-cli 0.1.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/LICENSE +201 -0
- package/README.md +25 -0
- package/dist/adapter.d.ts +18 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +4 -0
- package/dist/adapter.js.map +1 -0
- package/dist/adapters/builtin/index.d.ts +10 -0
- package/dist/adapters/builtin/index.d.ts.map +1 -0
- package/dist/adapters/builtin/index.js +11 -0
- package/dist/adapters/builtin/index.js.map +1 -0
- package/dist/adapters/forge/github.d.ts +9 -0
- package/dist/adapters/forge/github.d.ts.map +1 -0
- package/dist/adapters/forge/github.js +36 -0
- package/dist/adapters/forge/github.js.map +1 -0
- package/dist/adapters/forge/types.d.ts +23 -0
- package/dist/adapters/forge/types.d.ts.map +1 -0
- package/dist/adapters/forge/types.js +2 -0
- package/dist/adapters/forge/types.js.map +1 -0
- package/dist/adapters/harness/claude-code.d.ts +9 -0
- package/dist/adapters/harness/claude-code.d.ts.map +1 -0
- package/dist/adapters/harness/claude-code.js +42 -0
- package/dist/adapters/harness/claude-code.js.map +1 -0
- package/dist/adapters/identity/claude-code.d.ts +11 -0
- package/dist/adapters/identity/claude-code.d.ts.map +1 -0
- package/dist/adapters/identity/claude-code.js +18 -0
- package/dist/adapters/identity/claude-code.js.map +1 -0
- package/dist/adapters/registry.d.ts +16 -0
- package/dist/adapters/registry.d.ts.map +1 -0
- package/dist/adapters/registry.js +29 -0
- package/dist/adapters/registry.js.map +1 -0
- package/dist/adapters/types.d.ts +65 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +12 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +6 -0
- package/dist/bin.js.map +1 -0
- package/dist/commands/adapters-generate.d.ts +23 -0
- package/dist/commands/adapters-generate.d.ts.map +1 -0
- package/dist/commands/adapters-generate.js +59 -0
- package/dist/commands/adapters-generate.js.map +1 -0
- package/dist/commands/archive.d.ts +28 -0
- package/dist/commands/archive.d.ts.map +1 -0
- package/dist/commands/archive.js +66 -0
- package/dist/commands/archive.js.map +1 -0
- package/dist/commands/catalog-build.d.ts +7 -0
- package/dist/commands/catalog-build.d.ts.map +1 -0
- package/dist/commands/catalog-build.js +15 -0
- package/dist/commands/catalog-build.js.map +1 -0
- package/dist/commands/catalog-check.d.ts +22 -0
- package/dist/commands/catalog-check.d.ts.map +1 -0
- package/dist/commands/catalog-check.js +49 -0
- package/dist/commands/catalog-check.js.map +1 -0
- package/dist/commands/catalog-show.d.ts +13 -0
- package/dist/commands/catalog-show.d.ts.map +1 -0
- package/dist/commands/catalog-show.js +19 -0
- package/dist/commands/catalog-show.js.map +1 -0
- package/dist/commands/check.d.ts +22 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +43 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/doctor.d.ts +27 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +53 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/graph-build.d.ts +24 -0
- package/dist/commands/graph-build.d.ts.map +1 -0
- package/dist/commands/graph-build.js +36 -0
- package/dist/commands/graph-build.js.map +1 -0
- package/dist/commands/graph-query.d.ts +41 -0
- package/dist/commands/graph-query.d.ts.map +1 -0
- package/dist/commands/graph-query.js +63 -0
- package/dist/commands/graph-query.js.map +1 -0
- package/dist/commands/ingest.d.ts +28 -0
- package/dist/commands/ingest.d.ts.map +1 -0
- package/dist/commands/ingest.js +60 -0
- package/dist/commands/ingest.js.map +1 -0
- package/dist/commands/init.d.ts +28 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +203 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/lint.d.ts +30 -0
- package/dist/commands/lint.d.ts.map +1 -0
- package/dist/commands/lint.js +48 -0
- package/dist/commands/lint.js.map +1 -0
- package/dist/commands/migrate.d.ts +30 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +56 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/note-resolve.d.ts +14 -0
- package/dist/commands/note-resolve.d.ts.map +1 -0
- package/dist/commands/note-resolve.js +24 -0
- package/dist/commands/note-resolve.js.map +1 -0
- package/dist/commands/rollup-gather.d.ts +21 -0
- package/dist/commands/rollup-gather.d.ts.map +1 -0
- package/dist/commands/rollup-gather.js +40 -0
- package/dist/commands/rollup-gather.js.map +1 -0
- package/dist/commands/rollup-write.d.ts +25 -0
- package/dist/commands/rollup-write.d.ts.map +1 -0
- package/dist/commands/rollup-write.js +43 -0
- package/dist/commands/rollup-write.js.map +1 -0
- package/dist/commands/session-abandon.d.ts +13 -0
- package/dist/commands/session-abandon.d.ts.map +1 -0
- package/dist/commands/session-abandon.js +22 -0
- package/dist/commands/session-abandon.js.map +1 -0
- package/dist/commands/session-list.d.ts +14 -0
- package/dist/commands/session-list.d.ts.map +1 -0
- package/dist/commands/session-list.js +19 -0
- package/dist/commands/session-list.js.map +1 -0
- package/dist/commands/session-reap.d.ts +22 -0
- package/dist/commands/session-reap.d.ts.map +1 -0
- package/dist/commands/session-reap.js +47 -0
- package/dist/commands/session-reap.js.map +1 -0
- package/dist/commands/session-start.d.ts +18 -0
- package/dist/commands/session-start.d.ts.map +1 -0
- package/dist/commands/session-start.js +36 -0
- package/dist/commands/session-start.js.map +1 -0
- package/dist/commands/session-submit.d.ts +27 -0
- package/dist/commands/session-submit.d.ts.map +1 -0
- package/dist/commands/session-submit.js +68 -0
- package/dist/commands/session-submit.js.map +1 -0
- package/dist/commands/source-check.d.ts +21 -0
- package/dist/commands/source-check.d.ts.map +1 -0
- package/dist/commands/source-check.js +54 -0
- package/dist/commands/source-check.js.map +1 -0
- package/dist/commands/source-hash.d.ts +14 -0
- package/dist/commands/source-hash.d.ts.map +1 -0
- package/dist/commands/source-hash.js +34 -0
- package/dist/commands/source-hash.js.map +1 -0
- package/dist/commands/update.d.ts +17 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +25 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/verify.d.ts +23 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +126 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/config/defaults.d.ts +69 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +71 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/load.d.ts +11 -0
- package/dist/config/load.d.ts.map +1 -0
- package/dist/config/load.js +49 -0
- package/dist/config/load.js.map +1 -0
- package/dist/config/render.d.ts +9 -0
- package/dist/config/render.d.ts.map +1 -0
- package/dist/config/render.js +15 -0
- package/dist/config/render.js.map +1 -0
- package/dist/config/schema.d.ts +124 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +142 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/core/agents-doc.d.ts +80 -0
- package/dist/core/agents-doc.d.ts.map +1 -0
- package/dist/core/agents-doc.js +207 -0
- package/dist/core/agents-doc.js.map +1 -0
- package/dist/core/catalog/build.d.ts +49 -0
- package/dist/core/catalog/build.d.ts.map +1 -0
- package/dist/core/catalog/build.js +113 -0
- package/dist/core/catalog/build.js.map +1 -0
- package/dist/core/catalog/model.d.ts +33 -0
- package/dist/core/catalog/model.d.ts.map +1 -0
- package/dist/core/catalog/model.js +58 -0
- package/dist/core/catalog/model.js.map +1 -0
- package/dist/core/checks/catalog-checks.d.ts +4 -0
- package/dist/core/checks/catalog-checks.d.ts.map +1 -0
- package/dist/core/checks/catalog-checks.js +65 -0
- package/dist/core/checks/catalog-checks.js.map +1 -0
- package/dist/core/checks/identity-checks.d.ts +11 -0
- package/dist/core/checks/identity-checks.d.ts.map +1 -0
- package/dist/core/checks/identity-checks.js +39 -0
- package/dist/core/checks/identity-checks.js.map +1 -0
- package/dist/core/checks/integrity-checks.d.ts +23 -0
- package/dist/core/checks/integrity-checks.d.ts.map +1 -0
- package/dist/core/checks/integrity-checks.js +132 -0
- package/dist/core/checks/integrity-checks.js.map +1 -0
- package/dist/core/checks/manifest.d.ts +7 -0
- package/dist/core/checks/manifest.d.ts.map +1 -0
- package/dist/core/checks/manifest.js +20 -0
- package/dist/core/checks/manifest.js.map +1 -0
- package/dist/core/checks/organize-checks.d.ts +18 -0
- package/dist/core/checks/organize-checks.d.ts.map +1 -0
- package/dist/core/checks/organize-checks.js +97 -0
- package/dist/core/checks/organize-checks.js.map +1 -0
- package/dist/core/checks/registry.d.ts +24 -0
- package/dist/core/checks/registry.d.ts.map +1 -0
- package/dist/core/checks/registry.js +33 -0
- package/dist/core/checks/registry.js.map +1 -0
- package/dist/core/checks/types.d.ts +72 -0
- package/dist/core/checks/types.d.ts.map +1 -0
- package/dist/core/checks/types.js +4 -0
- package/dist/core/checks/types.js.map +1 -0
- package/dist/core/checks/write-lifecycle-checks.d.ts +24 -0
- package/dist/core/checks/write-lifecycle-checks.d.ts.map +1 -0
- package/dist/core/checks/write-lifecycle-checks.js +205 -0
- package/dist/core/checks/write-lifecycle-checks.js.map +1 -0
- package/dist/core/command.d.ts +23 -0
- package/dist/core/command.d.ts.map +1 -0
- package/dist/core/command.js +2 -0
- package/dist/core/command.js.map +1 -0
- package/dist/core/content/canonicalize.d.ts +14 -0
- package/dist/core/content/canonicalize.d.ts.map +1 -0
- package/dist/core/content/canonicalize.js +34 -0
- package/dist/core/content/canonicalize.js.map +1 -0
- package/dist/core/conventions.d.ts +21 -0
- package/dist/core/conventions.d.ts.map +1 -0
- package/dist/core/conventions.js +73 -0
- package/dist/core/conventions.js.map +1 -0
- package/dist/core/disclosure/model.d.ts +18 -0
- package/dist/core/disclosure/model.d.ts.map +1 -0
- package/dist/core/disclosure/model.js +45 -0
- package/dist/core/disclosure/model.js.map +1 -0
- package/dist/core/env.d.ts +40 -0
- package/dist/core/env.d.ts.map +1 -0
- package/dist/core/env.js +24 -0
- package/dist/core/env.js.map +1 -0
- package/dist/core/envelope.d.ts +46 -0
- package/dist/core/envelope.d.ts.map +1 -0
- package/dist/core/envelope.js +21 -0
- package/dist/core/envelope.js.map +1 -0
- package/dist/core/errors.d.ts +96 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +267 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/exit-codes.d.ts +32 -0
- package/dist/core/exit-codes.d.ts.map +1 -0
- package/dist/core/exit-codes.js +31 -0
- package/dist/core/exit-codes.js.map +1 -0
- package/dist/core/fs/atomic.d.ts +10 -0
- package/dist/core/fs/atomic.d.ts.map +1 -0
- package/dist/core/fs/atomic.js +31 -0
- package/dist/core/fs/atomic.js.map +1 -0
- package/dist/core/fs/fenced-region.d.ts +47 -0
- package/dist/core/fs/fenced-region.d.ts.map +1 -0
- package/dist/core/fs/fenced-region.js +122 -0
- package/dist/core/fs/fenced-region.js.map +1 -0
- package/dist/core/git/exec.d.ts +28 -0
- package/dist/core/git/exec.d.ts.map +1 -0
- package/dist/core/git/exec.js +21 -0
- package/dist/core/git/exec.js.map +1 -0
- package/dist/core/git/repo.d.ts +63 -0
- package/dist/core/git/repo.d.ts.map +1 -0
- package/dist/core/git/repo.js +91 -0
- package/dist/core/git/repo.js.map +1 -0
- package/dist/core/git/staged.d.ts +10 -0
- package/dist/core/git/staged.d.ts.map +1 -0
- package/dist/core/git/staged.js +49 -0
- package/dist/core/git/staged.js.map +1 -0
- package/dist/core/git/worktree.d.ts +29 -0
- package/dist/core/git/worktree.d.ts.map +1 -0
- package/dist/core/git/worktree.js +61 -0
- package/dist/core/git/worktree.js.map +1 -0
- package/dist/core/graph/model.d.ts +43 -0
- package/dist/core/graph/model.d.ts.map +1 -0
- package/dist/core/graph/model.js +60 -0
- package/dist/core/graph/model.js.map +1 -0
- package/dist/core/graph/persist.d.ts +7 -0
- package/dist/core/graph/persist.d.ts.map +1 -0
- package/dist/core/graph/persist.js +23 -0
- package/dist/core/graph/persist.js.map +1 -0
- package/dist/core/graph/query.d.ts +16 -0
- package/dist/core/graph/query.d.ts.map +1 -0
- package/dist/core/graph/query.js +91 -0
- package/dist/core/graph/query.js.map +1 -0
- package/dist/core/graph/visibility-filter.d.ts +13 -0
- package/dist/core/graph/visibility-filter.d.ts.map +1 -0
- package/dist/core/graph/visibility-filter.js +26 -0
- package/dist/core/graph/visibility-filter.js.map +1 -0
- package/dist/core/hooks.d.ts +34 -0
- package/dist/core/hooks.d.ts.map +1 -0
- package/dist/core/hooks.js +89 -0
- package/dist/core/hooks.js.map +1 -0
- package/dist/core/identity.d.ts +14 -0
- package/dist/core/identity.d.ts.map +1 -0
- package/dist/core/identity.js +36 -0
- package/dist/core/identity.js.map +1 -0
- package/dist/core/ingest/identity.d.ts +15 -0
- package/dist/core/ingest/identity.d.ts.map +1 -0
- package/dist/core/ingest/identity.js +17 -0
- package/dist/core/ingest/identity.js.map +1 -0
- package/dist/core/ingest/model.d.ts +17 -0
- package/dist/core/ingest/model.d.ts.map +1 -0
- package/dist/core/ingest/model.js +24 -0
- package/dist/core/ingest/model.js.map +1 -0
- package/dist/core/json-config-merge.d.ts +13 -0
- package/dist/core/json-config-merge.d.ts.map +1 -0
- package/dist/core/json-config-merge.js +43 -0
- package/dist/core/json-config-merge.js.map +1 -0
- package/dist/core/markers.d.ts +17 -0
- package/dist/core/markers.d.ts.map +1 -0
- package/dist/core/markers.js +16 -0
- package/dist/core/markers.js.map +1 -0
- package/dist/core/migrations/registry.d.ts +6 -0
- package/dist/core/migrations/registry.d.ts.map +1 -0
- package/dist/core/migrations/registry.js +8 -0
- package/dist/core/migrations/registry.js.map +1 -0
- package/dist/core/migrations/rename-visibility-field.d.ts +3 -0
- package/dist/core/migrations/rename-visibility-field.d.ts.map +1 -0
- package/dist/core/migrations/rename-visibility-field.js +62 -0
- package/dist/core/migrations/rename-visibility-field.js.map +1 -0
- package/dist/core/migrations/types.d.ts +27 -0
- package/dist/core/migrations/types.d.ts.map +1 -0
- package/dist/core/migrations/types.js +2 -0
- package/dist/core/migrations/types.js.map +1 -0
- package/dist/core/notes/checks.d.ts +20 -0
- package/dist/core/notes/checks.d.ts.map +1 -0
- package/dist/core/notes/checks.js +58 -0
- package/dist/core/notes/checks.js.map +1 -0
- package/dist/core/notes/list.d.ts +26 -0
- package/dist/core/notes/list.d.ts.map +1 -0
- package/dist/core/notes/list.js +84 -0
- package/dist/core/notes/list.js.map +1 -0
- package/dist/core/notes/parse.d.ts +12 -0
- package/dist/core/notes/parse.d.ts.map +1 -0
- package/dist/core/notes/parse.js +36 -0
- package/dist/core/notes/parse.js.map +1 -0
- package/dist/core/notes/render.d.ts +7 -0
- package/dist/core/notes/render.d.ts.map +1 -0
- package/dist/core/notes/render.js +13 -0
- package/dist/core/notes/render.js.map +1 -0
- package/dist/core/notes/visibility.d.ts +26 -0
- package/dist/core/notes/visibility.d.ts.map +1 -0
- package/dist/core/notes/visibility.js +41 -0
- package/dist/core/notes/visibility.js.map +1 -0
- package/dist/core/procedures.d.ts +44 -0
- package/dist/core/procedures.d.ts.map +1 -0
- package/dist/core/procedures.js +154 -0
- package/dist/core/procedures.js.map +1 -0
- package/dist/core/queue.d.ts +16 -0
- package/dist/core/queue.d.ts.map +1 -0
- package/dist/core/queue.js +75 -0
- package/dist/core/queue.js.map +1 -0
- package/dist/core/reconcile.d.ts +18 -0
- package/dist/core/reconcile.d.ts.map +1 -0
- package/dist/core/reconcile.js +49 -0
- package/dist/core/reconcile.js.map +1 -0
- package/dist/core/records.d.ts +16 -0
- package/dist/core/records.d.ts.map +1 -0
- package/dist/core/records.js +36 -0
- package/dist/core/records.js.map +1 -0
- package/dist/core/reporter.d.ts +20 -0
- package/dist/core/reporter.d.ts.map +1 -0
- package/dist/core/reporter.js +25 -0
- package/dist/core/reporter.js.map +1 -0
- package/dist/core/root.d.ts +24 -0
- package/dist/core/root.d.ts.map +1 -0
- package/dist/core/root.js +51 -0
- package/dist/core/root.js.map +1 -0
- package/dist/core/security/secrets.d.ts +17 -0
- package/dist/core/security/secrets.d.ts.map +1 -0
- package/dist/core/security/secrets.js +21 -0
- package/dist/core/security/secrets.js.map +1 -0
- package/dist/core/session.d.ts +15 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +27 -0
- package/dist/core/session.js.map +1 -0
- package/dist/core/store.d.ts +15 -0
- package/dist/core/store.d.ts.map +1 -0
- package/dist/core/store.js +19 -0
- package/dist/core/store.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/prompt/inquirer-prompter.d.ts +14 -0
- package/dist/prompt/inquirer-prompter.d.ts.map +1 -0
- package/dist/prompt/inquirer-prompter.js +27 -0
- package/dist/prompt/inquirer-prompter.js.map +1 -0
- package/dist/prompt/prompter.d.ts +24 -0
- package/dist/prompt/prompter.d.ts.map +1 -0
- package/dist/prompt/prompter.js +2 -0
- package/dist/prompt/prompter.js.map +1 -0
- package/dist/run.d.ts +16 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +464 -0
- package/dist/run.js.map +1 -0
- package/dist/taxonomy/profiles.d.ts +31 -0
- package/dist/taxonomy/profiles.d.ts.map +1 -0
- package/dist/taxonomy/profiles.js +45 -0
- package/dist/taxonomy/profiles.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/package.json +56 -0
- package/templates/.gitkeep +0 -0
- package/templates/hooks/pre-commit.sh +21 -0
- package/templates/hooks/pre-push.sh +24 -0
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { ExitCode } from './exit-codes.js';
|
|
2
|
+
/**
|
|
3
|
+
* Base for every error contexture raises deliberately (as opposed to a bug,
|
|
4
|
+
* which throws something else and is mapped to ExitCode.Internal). Each
|
|
5
|
+
* carries the finding that explains, in the fail-loud contract's terms,
|
|
6
|
+
* exactly what could not be determined — never a guessed fallback.
|
|
7
|
+
*/
|
|
8
|
+
export class ContextureError extends Error {
|
|
9
|
+
exitCode;
|
|
10
|
+
finding;
|
|
11
|
+
constructor(exitCode, finding) {
|
|
12
|
+
super(finding.message);
|
|
13
|
+
this.name = new.target.name;
|
|
14
|
+
this.exitCode = exitCode;
|
|
15
|
+
this.finding = finding;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export class NoStoreRootError extends ContextureError {
|
|
19
|
+
constructor(checked) {
|
|
20
|
+
super(ExitCode.Usage, {
|
|
21
|
+
code: 'root.not_found',
|
|
22
|
+
severity: 'error',
|
|
23
|
+
message: 'No store root found: checked --root, CONTEXTURE_ROOT, and walking up ' +
|
|
24
|
+
`from "${checked.cwd}" looking for contexture.yaml.`,
|
|
25
|
+
details: { checkedFlag: checked.flag, checkedEnv: checked.env, cwd: checked.cwd },
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export class NotAGitRepositoryError extends ContextureError {
|
|
30
|
+
constructor(root) {
|
|
31
|
+
super(ExitCode.Usage, {
|
|
32
|
+
code: 'root.not_a_git_repository',
|
|
33
|
+
severity: 'error',
|
|
34
|
+
message: `"${root}" is not inside a git repository.`,
|
|
35
|
+
subject: root,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export class SchemaVersionNewerError extends ContextureError {
|
|
40
|
+
constructor(storeVersion, supportedVersion) {
|
|
41
|
+
super(ExitCode.Usage, {
|
|
42
|
+
code: 'config.schema_version.newer',
|
|
43
|
+
severity: 'error',
|
|
44
|
+
message: `This store's schema_version (${storeVersion}) is newer than the ` +
|
|
45
|
+
`version this contexture release supports (${supportedVersion}).`,
|
|
46
|
+
details: { storeVersion, supportedVersion },
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export class SchemaVersionMissingError extends ContextureError {
|
|
51
|
+
constructor(configPath) {
|
|
52
|
+
super(ExitCode.Usage, {
|
|
53
|
+
code: 'config.schema_version.missing',
|
|
54
|
+
severity: 'error',
|
|
55
|
+
message: `"${configPath}" has no schema_version field — this store predates ` +
|
|
56
|
+
'the schema-version requirement and must be migrated with an explicit tool.',
|
|
57
|
+
subject: configPath,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export class InvalidConfigError extends ContextureError {
|
|
62
|
+
constructor(configPath, issues) {
|
|
63
|
+
super(ExitCode.Usage, {
|
|
64
|
+
code: 'config.invalid',
|
|
65
|
+
severity: 'error',
|
|
66
|
+
message: `"${configPath}" failed validation: ${issues.map((i) => `${i.path}: ${i.message}`).join('; ')}`,
|
|
67
|
+
subject: configPath,
|
|
68
|
+
details: { issues },
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export class InvalidNoteFrontmatterError extends ContextureError {
|
|
73
|
+
constructor(notePath, detail) {
|
|
74
|
+
super(ExitCode.Usage, {
|
|
75
|
+
code: 'note.invalid_frontmatter',
|
|
76
|
+
severity: 'error',
|
|
77
|
+
message: `"${notePath}" has a frontmatter block that is not valid: ${detail}.`,
|
|
78
|
+
subject: notePath,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export class SessionNotFoundError extends ContextureError {
|
|
83
|
+
constructor(branch) {
|
|
84
|
+
super(ExitCode.Usage, {
|
|
85
|
+
code: 'session.not_found',
|
|
86
|
+
severity: 'error',
|
|
87
|
+
message: `No session found for branch "${branch}".`,
|
|
88
|
+
subject: branch,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
export class SessionValidationFailedError extends ContextureError {
|
|
93
|
+
constructor(findings) {
|
|
94
|
+
super(ExitCode.CheckFailed, {
|
|
95
|
+
code: 'session.validation_failed',
|
|
96
|
+
severity: 'error',
|
|
97
|
+
message: `Session validation failed: ${findings.map((f) => f.message).join('; ')}`,
|
|
98
|
+
details: { findings },
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
export class NoRemoteConfiguredError extends ContextureError {
|
|
103
|
+
constructor() {
|
|
104
|
+
super(ExitCode.Usage, {
|
|
105
|
+
code: 'session.no_remote',
|
|
106
|
+
severity: 'error',
|
|
107
|
+
message: 'No "origin" remote is configured; add one before submitting a session.',
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
export class CatalogSectionNotFoundError extends ContextureError {
|
|
112
|
+
constructor(sectionId) {
|
|
113
|
+
super(ExitCode.Usage, {
|
|
114
|
+
code: 'catalog.section_not_found',
|
|
115
|
+
severity: 'error',
|
|
116
|
+
message: `No catalog section named "${sectionId}".`,
|
|
117
|
+
subject: sectionId,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
export class GraphIdentityCollisionError extends ContextureError {
|
|
122
|
+
constructor(ids) {
|
|
123
|
+
super(ExitCode.CheckFailed, {
|
|
124
|
+
code: 'graph.identity_collision',
|
|
125
|
+
severity: 'error',
|
|
126
|
+
message: `Two or more notes resolve to the same graph node identity: ${ids.join(', ')}. No graph artifact was written.`,
|
|
127
|
+
details: { ids },
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
export class NoteNotFoundError extends ContextureError {
|
|
132
|
+
constructor(notePath) {
|
|
133
|
+
super(ExitCode.Usage, {
|
|
134
|
+
code: 'note.not_found',
|
|
135
|
+
severity: 'error',
|
|
136
|
+
message: `"${notePath}" does not exist in this store.`,
|
|
137
|
+
subject: notePath,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
export class AlreadyIngestedError extends ContextureError {
|
|
142
|
+
constructor(notePath) {
|
|
143
|
+
super(ExitCode.Usage, {
|
|
144
|
+
code: 'ingest.already_ingested',
|
|
145
|
+
severity: 'error',
|
|
146
|
+
message: `"${notePath}" already carries source-identity fields; ingest never re-stamps an already-ingested file.`,
|
|
147
|
+
subject: notePath,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
export class NoteNotTrackedError extends ContextureError {
|
|
152
|
+
constructor(notePath) {
|
|
153
|
+
super(ExitCode.Usage, {
|
|
154
|
+
code: 'archive.not_tracked',
|
|
155
|
+
severity: 'error',
|
|
156
|
+
message: `Cannot archive "${notePath}": it is not yet tracked by git. Commit it first, then archive.`,
|
|
157
|
+
subject: notePath,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
export class ArchiveDestinationExistsError extends ContextureError {
|
|
162
|
+
constructor(destinationPath) {
|
|
163
|
+
super(ExitCode.Usage, {
|
|
164
|
+
code: 'archive.destination_exists',
|
|
165
|
+
severity: 'error',
|
|
166
|
+
message: `Cannot archive: "${destinationPath}" already exists.`,
|
|
167
|
+
subject: destinationPath,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
export class AdapterNotFoundError extends ContextureError {
|
|
172
|
+
constructor(kind, id) {
|
|
173
|
+
super(ExitCode.Usage, {
|
|
174
|
+
code: 'adapter.not_found',
|
|
175
|
+
severity: 'error',
|
|
176
|
+
message: `Configured adapter "${id}" (kind: ${kind}) is not a known adapter.`,
|
|
177
|
+
subject: id,
|
|
178
|
+
details: { kind },
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
export class AdapterVersionMismatchError extends ContextureError {
|
|
183
|
+
constructor(kind, id, declaredVersion, supportedVersion) {
|
|
184
|
+
super(ExitCode.Usage, {
|
|
185
|
+
code: 'adapter.version_mismatch',
|
|
186
|
+
severity: 'error',
|
|
187
|
+
message: `Adapter "${id}" (kind: ${kind}) declares interface version ${declaredVersion}, but this contexture release supports version ${supportedVersion}.`,
|
|
188
|
+
subject: id,
|
|
189
|
+
details: { kind, declaredVersion, supportedVersion },
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
export class GraphNotBuiltError extends ContextureError {
|
|
194
|
+
constructor() {
|
|
195
|
+
super(ExitCode.Usage, {
|
|
196
|
+
code: 'graph.not_built',
|
|
197
|
+
severity: 'error',
|
|
198
|
+
message: 'No graph artifact exists yet. Run "ctxr graph build" first.',
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
export class GraphNodeNotFoundError extends ContextureError {
|
|
203
|
+
constructor(nodeId) {
|
|
204
|
+
super(ExitCode.Usage, {
|
|
205
|
+
code: 'graph.node_not_found',
|
|
206
|
+
severity: 'error',
|
|
207
|
+
message: `"${nodeId}" is not a node in the graph.`,
|
|
208
|
+
subject: nodeId,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
export class MarkerMismatchError extends ContextureError {
|
|
213
|
+
constructor(filePath, detail) {
|
|
214
|
+
super(ExitCode.Usage, {
|
|
215
|
+
code: 'fenced_region.marker_mismatch',
|
|
216
|
+
severity: 'error',
|
|
217
|
+
message: `"${filePath}" has a mismatched marker pair: ${detail}. No bytes were written.`,
|
|
218
|
+
subject: filePath,
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
export class GitIdentityMissingError extends ContextureError {
|
|
223
|
+
constructor() {
|
|
224
|
+
super(ExitCode.Usage, {
|
|
225
|
+
code: 'git.identity_missing',
|
|
226
|
+
severity: 'error',
|
|
227
|
+
message: 'git has no configured author identity. Run:\n' +
|
|
228
|
+
' git config user.email "you@example.com"\n' +
|
|
229
|
+
' git config user.name "Your Name"\n' +
|
|
230
|
+
'then re-run init.',
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
export class TaxonomySelectionConflictError extends ContextureError {
|
|
235
|
+
constructor() {
|
|
236
|
+
super(ExitCode.Usage, {
|
|
237
|
+
code: 'taxonomy.selection_conflict',
|
|
238
|
+
severity: 'error',
|
|
239
|
+
message: '--profile and --taxonomy were both given; pass exactly one.',
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
export class InvalidTaxonomyFileError extends ContextureError {
|
|
244
|
+
constructor(filePath, issues) {
|
|
245
|
+
super(ExitCode.Usage, {
|
|
246
|
+
code: 'taxonomy.invalid_file',
|
|
247
|
+
severity: 'error',
|
|
248
|
+
message: `"${filePath}" is not a valid taxonomy definition: ${issues
|
|
249
|
+
.map((i) => `${i.path}: ${i.message}`)
|
|
250
|
+
.join('; ')}`,
|
|
251
|
+
subject: filePath,
|
|
252
|
+
details: { issues },
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
export class UnknownTaxonomyProfileError extends ContextureError {
|
|
257
|
+
constructor(given, knownIds) {
|
|
258
|
+
super(ExitCode.Usage, {
|
|
259
|
+
code: 'taxonomy.unknown_profile',
|
|
260
|
+
severity: 'error',
|
|
261
|
+
message: `Unknown taxonomy profile "${given}". Known profiles: ${knownIds.join(', ')}.`,
|
|
262
|
+
subject: given,
|
|
263
|
+
details: { knownIds },
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The exit-code taxonomy every contexture command shares (cli-contract spec).
|
|
3
|
+
*
|
|
4
|
+
* `0` and `1` follow a deliberate split from plain "success vs failure":
|
|
5
|
+
* Node itself exits a process with `1` on an uncaught exception, so `1` is
|
|
6
|
+
* reserved for exactly that class of failure (a bug, a crash) and nothing
|
|
7
|
+
* else. That keeps `1` from ever being confused with "the command ran
|
|
8
|
+
* correctly and found a real problem" — which is `CheckFailed`, not `Internal`.
|
|
9
|
+
*
|
|
10
|
+
* `4` and `5` are reserved now, unused until Phase 5's disclosure-policy
|
|
11
|
+
* tri-state (ALLOW/DENY/ASK) needs codes distinct from `CheckFailed` — ALLOW
|
|
12
|
+
* must be `Ok` (0), so DENY/ASK can't reuse `CheckFailed` (3).
|
|
13
|
+
*
|
|
14
|
+
* This table is allocated once, here, and is never extended by guessing a
|
|
15
|
+
* number under pressure in a later phase.
|
|
16
|
+
*/
|
|
17
|
+
export declare const ExitCode: {
|
|
18
|
+
/** The command ran and found nothing wrong. */
|
|
19
|
+
readonly Ok: 0;
|
|
20
|
+
/** An unexpected internal error (a bug) — never a real, expected finding. */
|
|
21
|
+
readonly Internal: 1;
|
|
22
|
+
/** Bad arguments, no store root, not a git repo, invalid/mismatched schema version. */
|
|
23
|
+
readonly Usage: 2;
|
|
24
|
+
/** The command ran correctly and determined a real problem exists. */
|
|
25
|
+
readonly CheckFailed: 3;
|
|
26
|
+
/** Reserved for Phase 5's disclosure-policy tri-state: DENY. */
|
|
27
|
+
readonly DisclosureDeny: 4;
|
|
28
|
+
/** Reserved for Phase 5's disclosure-policy tri-state: ASK. */
|
|
29
|
+
readonly DisclosureAsk: 5;
|
|
30
|
+
};
|
|
31
|
+
export type ExitCode = (typeof ExitCode)[keyof typeof ExitCode];
|
|
32
|
+
//# sourceMappingURL=exit-codes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exit-codes.d.ts","sourceRoot":"","sources":["../../src/core/exit-codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,QAAQ;IACnB,+CAA+C;aAC/C,EAAE,EAAE,CAAC;IACL,6EAA6E;aAC7E,QAAQ,EAAE,CAAC;IACX,uFAAuF;aACvF,KAAK,EAAE,CAAC;IACR,sEAAsE;aACtE,WAAW,EAAE,CAAC;IACd,gEAAgE;aAChE,cAAc,EAAE,CAAC;IACjB,+DAA+D;aAC/D,aAAa,EAAE,CAAC;CACR,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The exit-code taxonomy every contexture command shares (cli-contract spec).
|
|
3
|
+
*
|
|
4
|
+
* `0` and `1` follow a deliberate split from plain "success vs failure":
|
|
5
|
+
* Node itself exits a process with `1` on an uncaught exception, so `1` is
|
|
6
|
+
* reserved for exactly that class of failure (a bug, a crash) and nothing
|
|
7
|
+
* else. That keeps `1` from ever being confused with "the command ran
|
|
8
|
+
* correctly and found a real problem" — which is `CheckFailed`, not `Internal`.
|
|
9
|
+
*
|
|
10
|
+
* `4` and `5` are reserved now, unused until Phase 5's disclosure-policy
|
|
11
|
+
* tri-state (ALLOW/DENY/ASK) needs codes distinct from `CheckFailed` — ALLOW
|
|
12
|
+
* must be `Ok` (0), so DENY/ASK can't reuse `CheckFailed` (3).
|
|
13
|
+
*
|
|
14
|
+
* This table is allocated once, here, and is never extended by guessing a
|
|
15
|
+
* number under pressure in a later phase.
|
|
16
|
+
*/
|
|
17
|
+
export const ExitCode = {
|
|
18
|
+
/** The command ran and found nothing wrong. */
|
|
19
|
+
Ok: 0,
|
|
20
|
+
/** An unexpected internal error (a bug) — never a real, expected finding. */
|
|
21
|
+
Internal: 1,
|
|
22
|
+
/** Bad arguments, no store root, not a git repo, invalid/mismatched schema version. */
|
|
23
|
+
Usage: 2,
|
|
24
|
+
/** The command ran correctly and determined a real problem exists. */
|
|
25
|
+
CheckFailed: 3,
|
|
26
|
+
/** Reserved for Phase 5's disclosure-policy tri-state: DENY. */
|
|
27
|
+
DisclosureDeny: 4,
|
|
28
|
+
/** Reserved for Phase 5's disclosure-policy tri-state: ASK. */
|
|
29
|
+
DisclosureAsk: 5,
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=exit-codes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exit-codes.js","sourceRoot":"","sources":["../../src/core/exit-codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,+CAA+C;IAC/C,EAAE,EAAE,CAAC;IACL,6EAA6E;IAC7E,QAAQ,EAAE,CAAC;IACX,uFAAuF;IACvF,KAAK,EAAE,CAAC;IACR,sEAAsE;IACtE,WAAW,EAAE,CAAC;IACd,gEAAgE;IAChE,cAAc,EAAE,CAAC;IACjB,+DAA+D;IAC/D,aAAa,EAAE,CAAC;CACR,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Writes `contents` to `filePath` atomically: write to a temp file in the
|
|
3
|
+
* SAME directory (so rename() is same-filesystem and therefore atomic on
|
|
4
|
+
* POSIX), fsync it, then rename over the target. A process killed mid-write
|
|
5
|
+
* leaves either the old complete file or nothing on disk — never a
|
|
6
|
+
* truncated target. Used for every authored file contexture writes,
|
|
7
|
+
* starting with `contexture.yaml` and `.gitignore` in `init`.
|
|
8
|
+
*/
|
|
9
|
+
export declare function writeFileAtomic(filePath: string, contents: string): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=atomic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomic.d.ts","sourceRoot":"","sources":["../../../src/core/fs/atomic.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBvF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { randomBytes } from 'node:crypto';
|
|
2
|
+
import { open, rename, unlink } from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
/**
|
|
5
|
+
* Writes `contents` to `filePath` atomically: write to a temp file in the
|
|
6
|
+
* SAME directory (so rename() is same-filesystem and therefore atomic on
|
|
7
|
+
* POSIX), fsync it, then rename over the target. A process killed mid-write
|
|
8
|
+
* leaves either the old complete file or nothing on disk — never a
|
|
9
|
+
* truncated target. Used for every authored file contexture writes,
|
|
10
|
+
* starting with `contexture.yaml` and `.gitignore` in `init`.
|
|
11
|
+
*/
|
|
12
|
+
export async function writeFileAtomic(filePath, contents) {
|
|
13
|
+
const dir = path.dirname(filePath);
|
|
14
|
+
const tempPath = path.join(dir, `.${path.basename(filePath)}.${randomBytes(6).toString('hex')}.tmp`);
|
|
15
|
+
const handle = await open(tempPath, 'w');
|
|
16
|
+
try {
|
|
17
|
+
await handle.writeFile(contents, 'utf8');
|
|
18
|
+
await handle.sync();
|
|
19
|
+
}
|
|
20
|
+
finally {
|
|
21
|
+
await handle.close();
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
await rename(tempPath, filePath);
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
await unlink(tempPath).catch(() => undefined);
|
|
28
|
+
throw err;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=atomic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomic.js","sourceRoot":"","sources":["../../../src/core/fs/atomic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,QAAgB;IACtE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { Fence } from '../markers.js';
|
|
2
|
+
/**
|
|
3
|
+
* The marker-fence primitive (context-store spec), pulled forward from
|
|
4
|
+
* Phase 1.3 into its final home: `.gitignore`'s derived-path block is the
|
|
5
|
+
* first consumer, and every later generated-region writer (catalog, rollup,
|
|
6
|
+
* adapters) uses the same mechanism. The primitive only does exact-line
|
|
7
|
+
* matching — it knows nothing about comment syntax, which is why `Fence` is
|
|
8
|
+
* a parameter rather than hardcoded `#` markers.
|
|
9
|
+
*/
|
|
10
|
+
export interface UpsertFencedRegionResult {
|
|
11
|
+
text: string;
|
|
12
|
+
changed: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Idempotently inserts or replaces the body strictly between `fence.start`
|
|
16
|
+
* and `fence.end` in `text`, preserving everything outside byte-for-byte.
|
|
17
|
+
*
|
|
18
|
+
* - No markers found → appends the block (a blank line first, if the
|
|
19
|
+
* existing text is non-empty and doesn't already end in one).
|
|
20
|
+
* - Exactly one start and one end, start before end → replaces the body
|
|
21
|
+
* between them.
|
|
22
|
+
* - Anything else (unpaired, duplicated, out of order) → throws before
|
|
23
|
+
* returning, so a caller writing atomically writes zero bytes.
|
|
24
|
+
*
|
|
25
|
+
* Returns `changed: false` (with byte-identical text) when nothing actually
|
|
26
|
+
* changes, so a caller can skip reopening the file entirely — no rewrite, no
|
|
27
|
+
* mtime churn.
|
|
28
|
+
*/
|
|
29
|
+
export declare function upsertFencedRegion(text: string, fence: Fence, body: readonly string[]): UpsertFencedRegionResult;
|
|
30
|
+
/**
|
|
31
|
+
* Reads `filePath` (a missing file is treated as empty text), upserts the
|
|
32
|
+
* fenced region, and writes atomically — but only if the content actually
|
|
33
|
+
* changed, so a no-op re-run never touches the file's mtime. This is what
|
|
34
|
+
* makes re-init convergent: identical inputs produce zero writes.
|
|
35
|
+
*/
|
|
36
|
+
export declare function upsertFencedRegionInFile(filePath: string, fence: Fence, body: readonly string[]): Promise<{
|
|
37
|
+
changed: boolean;
|
|
38
|
+
}>;
|
|
39
|
+
/**
|
|
40
|
+
* Pure validation, comment-syntax-agnostic (matches the `contexture:<region>`
|
|
41
|
+
* token regardless of whether it's wrapped in `#`, `<!-- -->`, or anything
|
|
42
|
+
* else) — used by the pre-commit `fence_integrity` check to reject a staged
|
|
43
|
+
* file with an unpaired or duplicated marker, without needing to know or
|
|
44
|
+
* reconstruct the region's intended body content.
|
|
45
|
+
*/
|
|
46
|
+
export declare function validateFenceIntegrity(text: string): string[];
|
|
47
|
+
//# sourceMappingURL=fenced-region.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fenced-region.d.ts","sourceRoot":"","sources":["../../../src/core/fs/fenced-region.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAI3C;;;;;;;GAOG;AACH,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,SAAS,MAAM,EAAE,GACtB,wBAAwB,CA6B1B;AAeD;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,SAAS,MAAM,EAAE,GACtB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAsB/B;AAKD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CA0B7D"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { MarkerMismatchError } from '../errors.js';
|
|
3
|
+
import { writeFileAtomic } from './atomic.js';
|
|
4
|
+
class FenceMismatch extends Error {
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Idempotently inserts or replaces the body strictly between `fence.start`
|
|
8
|
+
* and `fence.end` in `text`, preserving everything outside byte-for-byte.
|
|
9
|
+
*
|
|
10
|
+
* - No markers found → appends the block (a blank line first, if the
|
|
11
|
+
* existing text is non-empty and doesn't already end in one).
|
|
12
|
+
* - Exactly one start and one end, start before end → replaces the body
|
|
13
|
+
* between them.
|
|
14
|
+
* - Anything else (unpaired, duplicated, out of order) → throws before
|
|
15
|
+
* returning, so a caller writing atomically writes zero bytes.
|
|
16
|
+
*
|
|
17
|
+
* Returns `changed: false` (with byte-identical text) when nothing actually
|
|
18
|
+
* changes, so a caller can skip reopening the file entirely — no rewrite, no
|
|
19
|
+
* mtime churn.
|
|
20
|
+
*/
|
|
21
|
+
export function upsertFencedRegion(text, fence, body) {
|
|
22
|
+
const trailingNewline = text.endsWith('\n');
|
|
23
|
+
const lines = text.length === 0 ? [] : text.split('\n');
|
|
24
|
+
if (trailingNewline)
|
|
25
|
+
lines.pop(); // split on a trailing \n leaves a spurious trailing ''
|
|
26
|
+
const startIndices = indicesOf(lines, fence.start);
|
|
27
|
+
const endIndices = indicesOf(lines, fence.end);
|
|
28
|
+
if (startIndices.length === 0 && endIndices.length === 0) {
|
|
29
|
+
const out = [...lines];
|
|
30
|
+
if (out.length > 0 && out[out.length - 1] !== '')
|
|
31
|
+
out.push('');
|
|
32
|
+
out.push(fence.start, ...body, fence.end);
|
|
33
|
+
return finish(out, text);
|
|
34
|
+
}
|
|
35
|
+
if (startIndices.length === 1 &&
|
|
36
|
+
endIndices.length === 1 &&
|
|
37
|
+
startIndices[0] < endIndices[0]) {
|
|
38
|
+
const startIdx = startIndices[0];
|
|
39
|
+
const endIdx = endIndices[0];
|
|
40
|
+
const out = [...lines.slice(0, startIdx + 1), ...body, ...lines.slice(endIdx)];
|
|
41
|
+
return finish(out, text);
|
|
42
|
+
}
|
|
43
|
+
throw new FenceMismatch(`found ${startIndices.length} start marker(s) and ${endIndices.length} end marker(s)`);
|
|
44
|
+
}
|
|
45
|
+
function indicesOf(lines, needle) {
|
|
46
|
+
const result = [];
|
|
47
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
48
|
+
if (lines[i] === needle)
|
|
49
|
+
result.push(i);
|
|
50
|
+
}
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
function finish(lines, original) {
|
|
54
|
+
const text = lines.length === 0 ? '' : `${lines.join('\n')}\n`;
|
|
55
|
+
return { text, changed: text !== original };
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Reads `filePath` (a missing file is treated as empty text), upserts the
|
|
59
|
+
* fenced region, and writes atomically — but only if the content actually
|
|
60
|
+
* changed, so a no-op re-run never touches the file's mtime. This is what
|
|
61
|
+
* makes re-init convergent: identical inputs produce zero writes.
|
|
62
|
+
*/
|
|
63
|
+
export async function upsertFencedRegionInFile(filePath, fence, body) {
|
|
64
|
+
let existing = '';
|
|
65
|
+
try {
|
|
66
|
+
existing = await readFile(filePath, 'utf8');
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
if (err.code !== 'ENOENT')
|
|
70
|
+
throw err;
|
|
71
|
+
}
|
|
72
|
+
let result;
|
|
73
|
+
try {
|
|
74
|
+
result = upsertFencedRegion(existing, fence, body);
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
if (err instanceof FenceMismatch) {
|
|
78
|
+
throw new MarkerMismatchError(filePath, err.message);
|
|
79
|
+
}
|
|
80
|
+
throw err;
|
|
81
|
+
}
|
|
82
|
+
if (result.changed) {
|
|
83
|
+
await writeFileAtomic(filePath, result.text);
|
|
84
|
+
}
|
|
85
|
+
return { changed: result.changed };
|
|
86
|
+
}
|
|
87
|
+
const GENERIC_START_RE = />>>\s*contexture:(\S+)/;
|
|
88
|
+
const GENERIC_END_RE = /<<<\s*contexture:(\S+)/;
|
|
89
|
+
/**
|
|
90
|
+
* Pure validation, comment-syntax-agnostic (matches the `contexture:<region>`
|
|
91
|
+
* token regardless of whether it's wrapped in `#`, `<!-- -->`, or anything
|
|
92
|
+
* else) — used by the pre-commit `fence_integrity` check to reject a staged
|
|
93
|
+
* file with an unpaired or duplicated marker, without needing to know or
|
|
94
|
+
* reconstruct the region's intended body content.
|
|
95
|
+
*/
|
|
96
|
+
export function validateFenceIntegrity(text) {
|
|
97
|
+
const counts = new Map();
|
|
98
|
+
for (const line of text.split('\n')) {
|
|
99
|
+
const startMatch = GENERIC_START_RE.exec(line);
|
|
100
|
+
if (startMatch) {
|
|
101
|
+
const region = startMatch[1];
|
|
102
|
+
const entry = counts.get(region) ?? { start: 0, end: 0 };
|
|
103
|
+
entry.start += 1;
|
|
104
|
+
counts.set(region, entry);
|
|
105
|
+
}
|
|
106
|
+
const endMatch = GENERIC_END_RE.exec(line);
|
|
107
|
+
if (endMatch) {
|
|
108
|
+
const region = endMatch[1];
|
|
109
|
+
const entry = counts.get(region) ?? { start: 0, end: 0 };
|
|
110
|
+
entry.end += 1;
|
|
111
|
+
counts.set(region, entry);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const problems = [];
|
|
115
|
+
for (const [region, { start, end }] of counts) {
|
|
116
|
+
if (start !== 1 || end !== 1) {
|
|
117
|
+
problems.push(`region "${region}": found ${start} start marker(s) and ${end} end marker(s)`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return problems;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=fenced-region.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fenced-region.js","sourceRoot":"","sources":["../../../src/core/fs/fenced-region.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ONLY module in this codebase that spawns `git`. Every git operation —
|
|
3
|
+
* in Phase 0's `init`, and in every later phase's session/worktree/hook code
|
|
4
|
+
* — goes through this interface, always as an argv array, never a shell
|
|
5
|
+
* string (a store path or branch name containing a space or `;` must never
|
|
6
|
+
* reach a shell).
|
|
7
|
+
*
|
|
8
|
+
* Deliberately not a library (simple-git, isomorphic-git): a library either
|
|
9
|
+
* wraps errors in its own types we'd have to unwrap to produce our findings,
|
|
10
|
+
* or (isomorphic-git) can't do `git worktree` — which Phase 2's session model
|
|
11
|
+
* is built on — or `--follow` rename detection, which Phase 7's archive
|
|
12
|
+
* verifies. Raw `git` via execFile is the boring choice that survives both.
|
|
13
|
+
*/
|
|
14
|
+
export interface GitResult {
|
|
15
|
+
stdout: string;
|
|
16
|
+
stderr: string;
|
|
17
|
+
exitCode: number;
|
|
18
|
+
}
|
|
19
|
+
export interface GitRunOptions {
|
|
20
|
+
cwd: string;
|
|
21
|
+
/** When true, a non-zero exit resolves with the result instead of throwing. */
|
|
22
|
+
allowFailure?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface GitRunner {
|
|
25
|
+
run(args: readonly string[], opts: GitRunOptions): Promise<GitResult>;
|
|
26
|
+
}
|
|
27
|
+
export declare function createExecFileGitRunner(): GitRunner;
|
|
28
|
+
//# sourceMappingURL=exec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../../src/core/git/exec.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,+EAA+E;IAC/E,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CACvE;AAED,wBAAgB,uBAAuB,IAAI,SAAS,CAenD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { promisify } from 'node:util';
|
|
3
|
+
const execFileAsync = promisify(execFile);
|
|
4
|
+
export function createExecFileGitRunner() {
|
|
5
|
+
return {
|
|
6
|
+
async run(args, opts) {
|
|
7
|
+
try {
|
|
8
|
+
const { stdout, stderr } = await execFileAsync('git', [...args], { cwd: opts.cwd });
|
|
9
|
+
return { stdout, stderr, exitCode: 0 };
|
|
10
|
+
}
|
|
11
|
+
catch (err) {
|
|
12
|
+
const e = err;
|
|
13
|
+
if (opts.allowFailure) {
|
|
14
|
+
return { stdout: e.stdout ?? '', stderr: e.stderr ?? '', exitCode: e.code ?? 1 };
|
|
15
|
+
}
|
|
16
|
+
throw err;
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=exec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../src/core/git/exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AA+B1C,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI;YAClB,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBACpF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YACzC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,GAAG,GAA0D,CAAC;gBACrE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtB,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;gBACnF,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|