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
package/dist/bin.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
|
package/dist/bin.js
ADDED
package/dist/bin.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AAC7D,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { CommandOutcome, CommandRequires } from '../core/command.js';
|
|
2
|
+
import type { Store } from '../core/store.js';
|
|
3
|
+
export declare const requires: CommandRequires;
|
|
4
|
+
export interface AdaptersGenerateFileResult {
|
|
5
|
+
path: string;
|
|
6
|
+
changed: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface AdaptersGenerateData {
|
|
9
|
+
files: AdaptersGenerateFileResult[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* adapters spec / task 8.3-8.4: every configured harness-generation adapter
|
|
13
|
+
* gets its entry file's fenced region (re)written from `render()`, and,
|
|
14
|
+
* for a harness that supports it, its permission config merged in; every
|
|
15
|
+
* configured identity-injection adapter gets its own, separately-removable
|
|
16
|
+
* fenced region in whatever file it targets. Two adapters targeting the
|
|
17
|
+
* same physical file (the common case: one harness's own entry file) never
|
|
18
|
+
* collide, because each owns a distinctly-named fence.
|
|
19
|
+
*/
|
|
20
|
+
/** The generation itself, shared with `ctxr update`. */
|
|
21
|
+
export declare function generateAdapterOutputs(store: Store): Promise<AdaptersGenerateFileResult[]>;
|
|
22
|
+
export declare function execute(store: Store): Promise<CommandOutcome<AdaptersGenerateData>>;
|
|
23
|
+
//# sourceMappingURL=adapters-generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters-generate.d.ts","sourceRoot":"","sources":["../../src/commands/adapters-generate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAQ1E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,0BAA0B,EAAE,CAAC;CACrC;AAUD;;;;;;;;GAQG;AACH,wDAAwD;AACxD,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,0BAA0B,EAAE,CAAC,CAoChG;AAED,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC,CAWzF"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { configuredAdapters } from '../adapters/registry.js';
|
|
3
|
+
import { agentsMdPath } from '../core/agents-doc.js';
|
|
4
|
+
import { ExitCode } from '../core/exit-codes.js';
|
|
5
|
+
import { upsertFencedRegionInFile } from '../core/fs/fenced-region.js';
|
|
6
|
+
import { identityFilePaths } from '../core/identity.js';
|
|
7
|
+
import { mergeJsonArrayLists } from '../core/json-config-merge.js';
|
|
8
|
+
import { htmlCommentFence } from '../core/markers.js';
|
|
9
|
+
export const requires = { store: 'required' };
|
|
10
|
+
function harnessEntryFence(adapterId) {
|
|
11
|
+
return htmlCommentFence(`adapter:${adapterId}:harness-entry`);
|
|
12
|
+
}
|
|
13
|
+
function identityInjectionFence(adapterId) {
|
|
14
|
+
return htmlCommentFence(`adapter:${adapterId}:identity`);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* adapters spec / task 8.3-8.4: every configured harness-generation adapter
|
|
18
|
+
* gets its entry file's fenced region (re)written from `render()`, and,
|
|
19
|
+
* for a harness that supports it, its permission config merged in; every
|
|
20
|
+
* configured identity-injection adapter gets its own, separately-removable
|
|
21
|
+
* fenced region in whatever file it targets. Two adapters targeting the
|
|
22
|
+
* same physical file (the common case: one harness's own entry file) never
|
|
23
|
+
* collide, because each owns a distinctly-named fence.
|
|
24
|
+
*/
|
|
25
|
+
/** The generation itself, shared with `ctxr update`. */
|
|
26
|
+
export async function generateAdapterOutputs(store) {
|
|
27
|
+
const files = [];
|
|
28
|
+
for (const adapter of configuredAdapters(store.config, 'harness-generation')) {
|
|
29
|
+
const entryPath = path.join(store.root, adapter.entryFileName);
|
|
30
|
+
const { changed } = await upsertFencedRegionInFile(entryPath, harnessEntryFence(adapter.id), adapter.render(agentsMdPath(store.root)));
|
|
31
|
+
files.push({ path: adapter.entryFileName, changed });
|
|
32
|
+
if (adapter.permissionConfig) {
|
|
33
|
+
const permPath = path.join(store.root, adapter.permissionConfig.path);
|
|
34
|
+
const rules = adapter.permissionConfig.render({ worktreesPath: store.config.session.worktrees_path });
|
|
35
|
+
const { changed: permChanged } = await mergeJsonArrayLists(permPath, rules);
|
|
36
|
+
files.push({ path: adapter.permissionConfig.path, changed: permChanged });
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const identityPaths = identityFilePaths(store.config);
|
|
40
|
+
for (const adapter of configuredAdapters(store.config, 'identity-injection')) {
|
|
41
|
+
const entryPath = path.join(store.root, adapter.entryFileName);
|
|
42
|
+
const { changed } = await upsertFencedRegionInFile(entryPath, identityInjectionFence(adapter.id), adapter.render(identityPaths));
|
|
43
|
+
files.push({ path: adapter.entryFileName, changed });
|
|
44
|
+
}
|
|
45
|
+
return files;
|
|
46
|
+
}
|
|
47
|
+
export async function execute(store) {
|
|
48
|
+
const files = await generateAdapterOutputs(store);
|
|
49
|
+
const changedCount = files.filter((f) => f.changed).length;
|
|
50
|
+
return {
|
|
51
|
+
exitCode: ExitCode.Ok,
|
|
52
|
+
data: { files },
|
|
53
|
+
findings: [],
|
|
54
|
+
humanSummary: `adapters generate: ${changedCount} file(s) changed, ${files.length - changedCount} already up to date.`,
|
|
55
|
+
storeRoot: store.root,
|
|
56
|
+
schemaVersion: store.config.schema_version,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=adapters-generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters-generate.js","sourceRoot":"","sources":["../../src/commands/adapters-generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { CommandOutcome, CommandRequires } from '../core/command.js';
|
|
2
|
+
import type { RunEnv } from '../core/env.js';
|
|
3
|
+
import type { Store } from '../core/store.js';
|
|
4
|
+
export declare const requires: CommandRequires;
|
|
5
|
+
export interface ArchiveFlags {
|
|
6
|
+
path: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ArchiveData {
|
|
9
|
+
path: string;
|
|
10
|
+
newPath: string;
|
|
11
|
+
linkingNotes: string[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* context-organize spec: archiving is a single tracked rename (via
|
|
15
|
+
* core/git/repo.ts's movePath, the Phase 1.5 primitive) — never a
|
|
16
|
+
* read+delete+rewrite — so the note's frontmatter (including its
|
|
17
|
+
* visibility field) is untouched by construction, and `git log --follow`
|
|
18
|
+
* on the new path returns its full prior history. The destination lives
|
|
19
|
+
* under `organize.archive_path`, independent of taxonomy layer names, so
|
|
20
|
+
* this works identically under any configured taxonomy (task 7.1).
|
|
21
|
+
*
|
|
22
|
+
* Wikilinks resolve by filename stem (context-retrieval spec), and archive
|
|
23
|
+
* never changes a note's filename — only its directory — so no other
|
|
24
|
+
* note's link actually breaks. `linkingNotes` is reported purely so the
|
|
25
|
+
* operator is aware those notes now point at the archived location.
|
|
26
|
+
*/
|
|
27
|
+
export declare function execute(env: RunEnv, store: Store, flags: ArchiveFlags): Promise<CommandOutcome<ArchiveData>>;
|
|
28
|
+
//# sourceMappingURL=archive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAM7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAOD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CA0ClH"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { mkdir } from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { ArchiveDestinationExistsError, NoteNotFoundError, NoteNotTrackedError } from '../core/errors.js';
|
|
5
|
+
import { ExitCode } from '../core/exit-codes.js';
|
|
6
|
+
import { isTracked, movePath } from '../core/git/repo.js';
|
|
7
|
+
import { extractLinkTargets } from '../core/graph/model.js';
|
|
8
|
+
import { listNotes } from '../core/notes/list.js';
|
|
9
|
+
export const requires = { store: 'required' };
|
|
10
|
+
function toStoreRelativePath(env, store, givenPath) {
|
|
11
|
+
const absolute = path.isAbsolute(givenPath) ? givenPath : path.resolve(env.cwd, givenPath);
|
|
12
|
+
return path.relative(store.root, absolute).split(path.sep).join('/');
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* context-organize spec: archiving is a single tracked rename (via
|
|
16
|
+
* core/git/repo.ts's movePath, the Phase 1.5 primitive) — never a
|
|
17
|
+
* read+delete+rewrite — so the note's frontmatter (including its
|
|
18
|
+
* visibility field) is untouched by construction, and `git log --follow`
|
|
19
|
+
* on the new path returns its full prior history. The destination lives
|
|
20
|
+
* under `organize.archive_path`, independent of taxonomy layer names, so
|
|
21
|
+
* this works identically under any configured taxonomy (task 7.1).
|
|
22
|
+
*
|
|
23
|
+
* Wikilinks resolve by filename stem (context-retrieval spec), and archive
|
|
24
|
+
* never changes a note's filename — only its directory — so no other
|
|
25
|
+
* note's link actually breaks. `linkingNotes` is reported purely so the
|
|
26
|
+
* operator is aware those notes now point at the archived location.
|
|
27
|
+
*/
|
|
28
|
+
export async function execute(env, store, flags) {
|
|
29
|
+
const relativePath = toStoreRelativePath(env, store, flags.path);
|
|
30
|
+
const absolutePath = path.join(store.root, relativePath);
|
|
31
|
+
if (!existsSync(absolutePath))
|
|
32
|
+
throw new NoteNotFoundError(relativePath);
|
|
33
|
+
const stem = path.basename(relativePath, '.md');
|
|
34
|
+
const newRelativePath = path
|
|
35
|
+
.join(store.config.organize.archive_path, path.basename(relativePath))
|
|
36
|
+
.split(path.sep)
|
|
37
|
+
.join('/');
|
|
38
|
+
const newAbsolutePath = path.join(store.root, newRelativePath);
|
|
39
|
+
if (newRelativePath !== relativePath && existsSync(newAbsolutePath)) {
|
|
40
|
+
throw new ArchiveDestinationExistsError(newRelativePath);
|
|
41
|
+
}
|
|
42
|
+
const notes = await listNotes(store.root, store.config);
|
|
43
|
+
const linkingNotes = notes
|
|
44
|
+
.filter((note) => note.path !== relativePath)
|
|
45
|
+
.filter((note) => extractLinkTargets(note.body).includes(stem))
|
|
46
|
+
.map((note) => note.path)
|
|
47
|
+
.sort();
|
|
48
|
+
if (newRelativePath !== relativePath) {
|
|
49
|
+
if (!(await isTracked(env.git, store.root, relativePath))) {
|
|
50
|
+
throw new NoteNotTrackedError(relativePath);
|
|
51
|
+
}
|
|
52
|
+
await mkdir(path.dirname(newAbsolutePath), { recursive: true });
|
|
53
|
+
await movePath(env.git, store.root, relativePath, newRelativePath);
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
exitCode: ExitCode.Ok,
|
|
57
|
+
data: { path: relativePath, newPath: newRelativePath, linkingNotes },
|
|
58
|
+
findings: [],
|
|
59
|
+
humanSummary: newRelativePath === relativePath
|
|
60
|
+
? `"${relativePath}" is already archived.`
|
|
61
|
+
: `Archived "${relativePath}" to "${newRelativePath}"${linkingNotes.length > 0 ? ` (${linkingNotes.length} note(s) link to it)` : ''}.`,
|
|
62
|
+
storeRoot: store.root,
|
|
63
|
+
schemaVersion: store.config.schema_version,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=archive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CommandOutcome, CommandRequires } from '../core/command.js';
|
|
2
|
+
import { type CatalogBuildResult } from '../core/catalog/build.js';
|
|
3
|
+
import type { Store } from '../core/store.js';
|
|
4
|
+
export declare const requires: CommandRequires;
|
|
5
|
+
export type CatalogBuildData = CatalogBuildResult;
|
|
6
|
+
export declare function execute(store: Store): Promise<CommandOutcome<CatalogBuildData>>;
|
|
7
|
+
//# sourceMappingURL=catalog-build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-build.d.ts","sourceRoot":"","sources":["../../src/commands/catalog-build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEjF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AAElD,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAUrF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { buildCatalog } from '../core/catalog/build.js';
|
|
2
|
+
import { ExitCode } from '../core/exit-codes.js';
|
|
3
|
+
export const requires = { store: 'required' };
|
|
4
|
+
export async function execute(store) {
|
|
5
|
+
const result = await buildCatalog(store);
|
|
6
|
+
return {
|
|
7
|
+
exitCode: ExitCode.Ok,
|
|
8
|
+
data: result,
|
|
9
|
+
findings: [],
|
|
10
|
+
humanSummary: `Catalog built: ${result.totalNotes} note(s) across ${result.sections.length} section(s).`,
|
|
11
|
+
storeRoot: store.root,
|
|
12
|
+
schemaVersion: store.config.schema_version,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=catalog-build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-build.js","sourceRoot":"","sources":["../../src/commands/catalog-build.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAA2B,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGjD,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAI/D,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAY;IACxC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,kBAAkB,MAAM,CAAC,UAAU,mBAAmB,MAAM,CAAC,QAAQ,CAAC,MAAM,cAAc;QACxG,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { CommandOutcome, CommandRequires } from '../core/command.js';
|
|
2
|
+
import { type CatalogStaleEntry } from '../core/catalog/build.js';
|
|
3
|
+
import type { Store } from '../core/store.js';
|
|
4
|
+
export declare const requires: CommandRequires;
|
|
5
|
+
export interface CatalogCheckFlags {
|
|
6
|
+
stale?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface CatalogCheckData {
|
|
9
|
+
missing: string[];
|
|
10
|
+
dangling: string[];
|
|
11
|
+
stale?: CatalogStaleEntry[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* context-catalog spec: coverage is a hard invariant in both directions —
|
|
15
|
+
* this exits non-zero if any retrievable note lacks an entry (missing) OR
|
|
16
|
+
* any entry references a note that no longer exists (dangling, e.g.
|
|
17
|
+
* deleted). Staleness (--stale) is a review prompt, not a coverage
|
|
18
|
+
* violation, so it's reported but never fails the exit code on its own —
|
|
19
|
+
* the same doctor/lint severity split applied elsewhere in this codebase.
|
|
20
|
+
*/
|
|
21
|
+
export declare function execute(store: Store, flags: CatalogCheckFlags): Promise<CommandOutcome<CatalogCheckData>>;
|
|
22
|
+
//# sourceMappingURL=catalog-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-check.d.ts","sourceRoot":"","sources":["../../src/commands/catalog-check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAA2C,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG3G,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAwC/G"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { checkCatalogCoverage, checkCatalogStale } from '../core/catalog/build.js';
|
|
2
|
+
import { ExitCode } from '../core/exit-codes.js';
|
|
3
|
+
export const requires = { store: 'required' };
|
|
4
|
+
/**
|
|
5
|
+
* context-catalog spec: coverage is a hard invariant in both directions —
|
|
6
|
+
* this exits non-zero if any retrievable note lacks an entry (missing) OR
|
|
7
|
+
* any entry references a note that no longer exists (dangling, e.g.
|
|
8
|
+
* deleted). Staleness (--stale) is a review prompt, not a coverage
|
|
9
|
+
* violation, so it's reported but never fails the exit code on its own —
|
|
10
|
+
* the same doctor/lint severity split applied elsewhere in this codebase.
|
|
11
|
+
*/
|
|
12
|
+
export async function execute(store, flags) {
|
|
13
|
+
const { missing, dangling } = await checkCatalogCoverage(store);
|
|
14
|
+
const stale = flags.stale ? await checkCatalogStale(store) : undefined;
|
|
15
|
+
const findings = [
|
|
16
|
+
...missing.map((notePath) => ({
|
|
17
|
+
code: 'catalog.coverage.missing',
|
|
18
|
+
severity: 'error',
|
|
19
|
+
message: `"${notePath}" is retrievable but has no catalog entry.`,
|
|
20
|
+
subject: notePath,
|
|
21
|
+
})),
|
|
22
|
+
...dangling.map((notePath) => ({
|
|
23
|
+
code: 'catalog.coverage.dangling',
|
|
24
|
+
severity: 'error',
|
|
25
|
+
message: `A catalog entry references "${notePath}", which no longer exists.`,
|
|
26
|
+
subject: notePath,
|
|
27
|
+
})),
|
|
28
|
+
];
|
|
29
|
+
if (stale) {
|
|
30
|
+
findings.push(...stale.map((entry) => ({
|
|
31
|
+
code: 'catalog.stale',
|
|
32
|
+
severity: 'warning',
|
|
33
|
+
message: `"${entry.path}" in section "${entry.section}" has changed since its gloss was last confirmed.`,
|
|
34
|
+
subject: entry.path,
|
|
35
|
+
})));
|
|
36
|
+
}
|
|
37
|
+
const failed = missing.length > 0 || dangling.length > 0;
|
|
38
|
+
return {
|
|
39
|
+
exitCode: failed ? ExitCode.CheckFailed : ExitCode.Ok,
|
|
40
|
+
data: { missing, dangling, stale },
|
|
41
|
+
findings,
|
|
42
|
+
humanSummary: failed
|
|
43
|
+
? `${missing.length} missing, ${dangling.length} dangling catalog entr(y/ies).`
|
|
44
|
+
: `Catalog coverage is complete.${stale ? ` ${stale.length} entr(y/ies) may need gloss review.` : ''}`,
|
|
45
|
+
storeRoot: store.root,
|
|
46
|
+
schemaVersion: store.config.schema_version,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=catalog-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-check.js","sourceRoot":"","sources":["../../src/commands/catalog-check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAA0B,MAAM,0BAA0B,CAAC;AAE3G,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGjD,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAY/D;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAY,EAAE,KAAwB;IAClE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEvE,MAAM,QAAQ,GAAc;QAC1B,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC5B,IAAI,EAAE,0BAA0B;YAChC,QAAQ,EAAE,OAAgB;YAC1B,OAAO,EAAE,IAAI,QAAQ,4CAA4C;YACjE,OAAO,EAAE,QAAQ;SAClB,CAAC,CAAC;QACH,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC7B,IAAI,EAAE,2BAA2B;YACjC,QAAQ,EAAE,OAAgB;YAC1B,OAAO,EAAE,+BAA+B,QAAQ,4BAA4B;YAC5E,OAAO,EAAE,QAAQ;SAClB,CAAC,CAAC;KACJ,CAAC;IACF,IAAI,KAAK,EAAE,CAAC;QACV,QAAQ,CAAC,IAAI,CACX,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACvB,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,SAAkB;YAC5B,OAAO,EAAE,IAAI,KAAK,CAAC,IAAI,iBAAiB,KAAK,CAAC,OAAO,mDAAmD;YACxG,OAAO,EAAE,KAAK,CAAC,IAAI;SACpB,CAAC,CAAC,CACJ,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACzD,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;QACrD,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE;QAClC,QAAQ;QACR,YAAY,EAAE,MAAM;YAClB,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,aAAa,QAAQ,CAAC,MAAM,gCAAgC;YAC/E,CAAC,CAAC,gCAAgC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,qCAAqC,CAAC,CAAC,CAAC,EAAE,EAAE;QACxG,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CommandOutcome, CommandRequires } from '../core/command.js';
|
|
2
|
+
import type { Store } from '../core/store.js';
|
|
3
|
+
export declare const requires: CommandRequires;
|
|
4
|
+
export interface CatalogShowFlags {
|
|
5
|
+
section: string;
|
|
6
|
+
as?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface CatalogShowData {
|
|
9
|
+
section: string;
|
|
10
|
+
content: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function execute(store: Store, flags: CatalogShowFlags): Promise<CommandOutcome<CatalogShowData>>;
|
|
13
|
+
//# sourceMappingURL=catalog-show.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-show.d.ts","sourceRoot":"","sources":["../../src/commands/catalog-show.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI1E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAa7G"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { readCatalogSection } from '../core/catalog/build.js';
|
|
2
|
+
import { CatalogSectionNotFoundError } from '../core/errors.js';
|
|
3
|
+
import { ExitCode } from '../core/exit-codes.js';
|
|
4
|
+
export const requires = { store: 'required' };
|
|
5
|
+
export async function execute(store, flags) {
|
|
6
|
+
const content = await readCatalogSection(store, flags.section, flags.as);
|
|
7
|
+
if (content === null) {
|
|
8
|
+
throw new CatalogSectionNotFoundError(flags.section);
|
|
9
|
+
}
|
|
10
|
+
return {
|
|
11
|
+
exitCode: ExitCode.Ok,
|
|
12
|
+
data: { section: flags.section, content },
|
|
13
|
+
findings: [],
|
|
14
|
+
humanSummary: content,
|
|
15
|
+
storeRoot: store.root,
|
|
16
|
+
schemaVersion: store.config.schema_version,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=catalog-show.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-show.js","sourceRoot":"","sources":["../../src/commands/catalog-show.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGjD,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAY/D,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAY,EAAE,KAAuB;IACjE,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IACzE,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,2BAA2B,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE;QACzC,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,OAAO;QACrB,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { CommandOutcome, CommandRequires } from '../core/command.js';
|
|
2
|
+
import type { DisclosureRung, DisclosureVerdict } from '../core/disclosure/model.js';
|
|
3
|
+
import type { RunEnv } from '../core/env.js';
|
|
4
|
+
import type { Store } from '../core/store.js';
|
|
5
|
+
export declare const requires: CommandRequires;
|
|
6
|
+
export interface CheckFlags {
|
|
7
|
+
path: string;
|
|
8
|
+
audience: string;
|
|
9
|
+
}
|
|
10
|
+
export interface CheckData {
|
|
11
|
+
path: string;
|
|
12
|
+
audience: string;
|
|
13
|
+
verdict: DisclosureVerdict;
|
|
14
|
+
rung: DisclosureRung;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* disclosure-policy spec: the tri-state ALLOW/DENY/ASK verdict, each with
|
|
18
|
+
* its own documented exit code (cli-contract's reserved 4/5), printing the
|
|
19
|
+
* rung that produced it so a script or a human can see WHY, not just WHAT.
|
|
20
|
+
*/
|
|
21
|
+
export declare function execute(env: RunEnv, store: Store, flags: CheckFlags): Promise<CommandOutcome<CheckData>>;
|
|
22
|
+
//# sourceMappingURL=check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAI7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,IAAI,EAAE,cAAc,CAAC;CACtB;AAaD;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAsB9G"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { evaluateDisclosure } from '../core/disclosure/model.js';
|
|
3
|
+
import { NoteNotFoundError } from '../core/errors.js';
|
|
4
|
+
import { ExitCode } from '../core/exit-codes.js';
|
|
5
|
+
import { parseNote } from '../core/notes/parse.js';
|
|
6
|
+
export const requires = { store: 'required' };
|
|
7
|
+
const VERDICT_EXIT_CODE = {
|
|
8
|
+
allow: ExitCode.Ok,
|
|
9
|
+
deny: ExitCode.DisclosureDeny,
|
|
10
|
+
ask: ExitCode.DisclosureAsk,
|
|
11
|
+
};
|
|
12
|
+
function toStoreRelativePath(env, store, givenPath) {
|
|
13
|
+
const absolute = path.isAbsolute(givenPath) ? givenPath : path.resolve(env.cwd, givenPath);
|
|
14
|
+
return path.relative(store.root, absolute).split(path.sep).join('/');
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* disclosure-policy spec: the tri-state ALLOW/DENY/ASK verdict, each with
|
|
18
|
+
* its own documented exit code (cli-contract's reserved 4/5), printing the
|
|
19
|
+
* rung that produced it so a script or a human can see WHY, not just WHAT.
|
|
20
|
+
*/
|
|
21
|
+
export async function execute(env, store, flags) {
|
|
22
|
+
const relativePath = toStoreRelativePath(env, store, flags.path);
|
|
23
|
+
const absolutePath = path.join(store.root, relativePath);
|
|
24
|
+
let note;
|
|
25
|
+
try {
|
|
26
|
+
note = await parseNote(absolutePath, relativePath);
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
if (err.code === 'ENOENT')
|
|
30
|
+
throw new NoteNotFoundError(relativePath);
|
|
31
|
+
throw err;
|
|
32
|
+
}
|
|
33
|
+
const { verdict, rung } = evaluateDisclosure(store.config, note, flags.audience);
|
|
34
|
+
return {
|
|
35
|
+
exitCode: VERDICT_EXIT_CODE[verdict],
|
|
36
|
+
data: { path: relativePath, audience: flags.audience, verdict, rung },
|
|
37
|
+
findings: [],
|
|
38
|
+
humanSummary: `${relativePath} for audience "${flags.audience}": ${verdict.toUpperCase()} (rung: ${rung})`,
|
|
39
|
+
storeRoot: store.root,
|
|
40
|
+
schemaVersion: store.config.schema_version,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAc/D,MAAM,iBAAiB,GAAsC;IAC3D,KAAK,EAAE,QAAQ,CAAC,EAAE;IAClB,IAAI,EAAE,QAAQ,CAAC,cAAc;IAC7B,GAAG,EAAE,QAAQ,CAAC,aAAa;CAC5B,CAAC;AAEF,SAAS,mBAAmB,CAAC,GAAW,EAAE,KAAY,EAAE,SAAiB;IACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC3F,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvE,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,KAAY,EAAE,KAAiB;IACxE,MAAM,YAAY,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAEzD,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,IAAI,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAChG,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEjF,OAAO;QACL,QAAQ,EAAE,iBAAiB,CAAC,OAAO,CAAa;QAChD,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE;QACrE,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,GAAG,YAAY,kBAAkB,KAAK,CAAC,QAAQ,MAAM,OAAO,CAAC,WAAW,EAAE,WAAW,IAAI,GAAG;QAC1G,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { CommandOutcome, CommandRequires } from '../core/command.js';
|
|
2
|
+
import type { CheckScope, CheckStatus } from '../core/checks/types.js';
|
|
3
|
+
import type { RunEnv } from '../core/env.js';
|
|
4
|
+
import type { Finding } from '../core/envelope.js';
|
|
5
|
+
import type { Store } from '../core/store.js';
|
|
6
|
+
export declare const requires: CommandRequires;
|
|
7
|
+
export interface DoctorFlags {
|
|
8
|
+
staged?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface DoctorCheckSummary {
|
|
11
|
+
id: string;
|
|
12
|
+
title: string;
|
|
13
|
+
result: CheckStatus;
|
|
14
|
+
reason?: string;
|
|
15
|
+
findings?: Finding[];
|
|
16
|
+
}
|
|
17
|
+
export interface DoctorData {
|
|
18
|
+
scope: CheckScope;
|
|
19
|
+
checks: DoctorCheckSummary[];
|
|
20
|
+
summary: {
|
|
21
|
+
pass: number;
|
|
22
|
+
fail: number;
|
|
23
|
+
skip: number;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export declare function execute(env: RunEnv, store: Store, flags?: DoctorFlags): Promise<CommandOutcome<DoctorData>>;
|
|
27
|
+
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1E,OAAO,KAAK,EAAgB,UAAU,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAKnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACvD;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAE,WAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAiDrH"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { CHECKS } from '../core/checks/manifest.js';
|
|
2
|
+
import { overallStatus, runChecks } from '../core/checks/registry.js';
|
|
3
|
+
import { ExitCode } from '../core/exit-codes.js';
|
|
4
|
+
import { getStagedFiles } from '../core/git/staged.js';
|
|
5
|
+
import { readGraph } from '../core/graph/persist.js';
|
|
6
|
+
import { listNotes } from '../core/notes/list.js';
|
|
7
|
+
export const requires = { store: 'required' };
|
|
8
|
+
export async function execute(env, store, flags = {}) {
|
|
9
|
+
const scope = flags.staged ? 'staged' : 'store';
|
|
10
|
+
const staged = scope === 'staged' ? await getStagedFiles(env.git, store.root) : undefined;
|
|
11
|
+
const ctx = {
|
|
12
|
+
storeRoot: store.root,
|
|
13
|
+
config: store.config,
|
|
14
|
+
scope,
|
|
15
|
+
git: env.git,
|
|
16
|
+
staged,
|
|
17
|
+
notes: () => listNotes(store.root, store.config),
|
|
18
|
+
graph: () => readGraph(store),
|
|
19
|
+
catalog: async () => undefined,
|
|
20
|
+
};
|
|
21
|
+
// doctor runs only `invariant` checks — `observation` checks (lint's,
|
|
22
|
+
// Phase 7) are registered in the same manifest but never affect doctor's
|
|
23
|
+
// exit code. This is what makes "no condition double-counted as both a
|
|
24
|
+
// lint finding and a doctor failure" (task 9.4) a type-level fact instead
|
|
25
|
+
// of a later audit.
|
|
26
|
+
const reports = await runChecks(CHECKS, ctx, { scope, severity: 'invariant' });
|
|
27
|
+
const summary = {
|
|
28
|
+
pass: reports.filter((r) => r.result.status === 'pass').length,
|
|
29
|
+
fail: reports.filter((r) => r.result.status === 'fail').length,
|
|
30
|
+
skip: reports.filter((r) => r.result.status === 'skip').length,
|
|
31
|
+
};
|
|
32
|
+
const status = overallStatus(reports);
|
|
33
|
+
const data = {
|
|
34
|
+
scope,
|
|
35
|
+
checks: reports.map((r) => ({
|
|
36
|
+
id: r.id,
|
|
37
|
+
title: r.title,
|
|
38
|
+
result: r.result.status,
|
|
39
|
+
reason: r.result.skipReason,
|
|
40
|
+
findings: r.result.findings.length > 0 ? r.result.findings : undefined,
|
|
41
|
+
})),
|
|
42
|
+
summary,
|
|
43
|
+
};
|
|
44
|
+
return {
|
|
45
|
+
exitCode: status === 'fail' ? ExitCode.CheckFailed : ExitCode.Ok,
|
|
46
|
+
data,
|
|
47
|
+
findings: reports.flatMap((r) => r.result.findings),
|
|
48
|
+
humanSummary: `doctor (${scope}): ${summary.pass} passed, ${summary.fail} failed, ${summary.skip} skipped`,
|
|
49
|
+
storeRoot: store.root,
|
|
50
|
+
schemaVersion: store.config.schema_version,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { CommandOutcome, CommandRequires } from '../core/command.js';
|
|
2
|
+
import { type GraphBuildResult } from '../core/graph/model.js';
|
|
3
|
+
import { type PerNoteRecord } from '../core/records.js';
|
|
4
|
+
import type { Store } from '../core/store.js';
|
|
5
|
+
export declare const requires: CommandRequires;
|
|
6
|
+
export interface GraphBuildFlags {
|
|
7
|
+
emitRecords?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface GraphBuildData {
|
|
10
|
+
nodeCount: number;
|
|
11
|
+
edgeCount: number;
|
|
12
|
+
dangling: GraphBuildResult['dangling'];
|
|
13
|
+
records?: PerNoteRecord[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* context-retrieval spec: node identity is path-based, so a genuine identity
|
|
17
|
+
* collision is structurally unreachable through a real note listing —
|
|
18
|
+
* `buildGraphFromNotes` throwing here is a defensive invariant, not a
|
|
19
|
+
* scenario this command tries to recover from. A dangling link (unresolved
|
|
20
|
+
* or ambiguous wikilink target) is the opposite: expected, non-fatal, and
|
|
21
|
+
* reported as a finding rather than failing the build.
|
|
22
|
+
*/
|
|
23
|
+
export declare function execute(store: Store, flags?: GraphBuildFlags): Promise<CommandOutcome<GraphBuildData>>;
|
|
24
|
+
//# sourceMappingURL=graph-build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-build.d.ts","sourceRoot":"","sources":["../../src/commands/graph-build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1E,OAAO,EAAuB,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAGpF,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACvC,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAuBhH"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ExitCode } from '../core/exit-codes.js';
|
|
2
|
+
import { buildGraphFromNotes } from '../core/graph/model.js';
|
|
3
|
+
import { writeGraph } from '../core/graph/persist.js';
|
|
4
|
+
import { listNotes } from '../core/notes/list.js';
|
|
5
|
+
import { buildPerNoteRecords } from '../core/records.js';
|
|
6
|
+
export const requires = { store: 'required' };
|
|
7
|
+
/**
|
|
8
|
+
* context-retrieval spec: node identity is path-based, so a genuine identity
|
|
9
|
+
* collision is structurally unreachable through a real note listing —
|
|
10
|
+
* `buildGraphFromNotes` throwing here is a defensive invariant, not a
|
|
11
|
+
* scenario this command tries to recover from. A dangling link (unresolved
|
|
12
|
+
* or ambiguous wikilink target) is the opposite: expected, non-fatal, and
|
|
13
|
+
* reported as a finding rather than failing the build.
|
|
14
|
+
*/
|
|
15
|
+
export async function execute(store, flags = {}) {
|
|
16
|
+
const notes = await listNotes(store.root, store.config);
|
|
17
|
+
const graph = buildGraphFromNotes(notes);
|
|
18
|
+
await writeGraph(store, graph);
|
|
19
|
+
const records = flags.emitRecords ? await buildPerNoteRecords(store) : undefined;
|
|
20
|
+
const findings = graph.dangling.map((d) => ({
|
|
21
|
+
code: 'graph.dangling_link',
|
|
22
|
+
severity: 'warning',
|
|
23
|
+
message: `"${d.from}" links to "${d.target}", which is ${d.reason === 'ambiguous' ? 'ambiguous (multiple notes share that name)' : 'not found'}.`,
|
|
24
|
+
subject: d.from,
|
|
25
|
+
details: { target: d.target, reason: d.reason },
|
|
26
|
+
}));
|
|
27
|
+
return {
|
|
28
|
+
exitCode: ExitCode.Ok,
|
|
29
|
+
data: { nodeCount: graph.nodes.length, edgeCount: graph.edges.length, dangling: graph.dangling, records },
|
|
30
|
+
findings,
|
|
31
|
+
humanSummary: `Graph built: ${graph.nodes.length} node(s), ${graph.edges.length} edge(s), ${graph.dangling.length} dangling link(s).`,
|
|
32
|
+
storeRoot: store.root,
|
|
33
|
+
schemaVersion: store.config.schema_version,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=graph-build.js.map
|