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,56 @@
|
|
|
1
|
+
import { readConfig } from '../config/load.js';
|
|
2
|
+
import { SUPPORTED_SCHEMA_VERSION } from '../config/schema.js';
|
|
3
|
+
import { ExitCode } from '../core/exit-codes.js';
|
|
4
|
+
import { pendingMigrations } from '../core/migrations/registry.js';
|
|
5
|
+
export const requires = { store: 'required' };
|
|
6
|
+
/**
|
|
7
|
+
* store-lifecycle spec: `--dry-run` reports exact deltas with nothing
|
|
8
|
+
* applied; a real run applies each pending migration in order, reloading
|
|
9
|
+
* the store's config after each one so a later migration in the chain
|
|
10
|
+
* (none exist yet, but the mechanism supports it) sees the version it
|
|
11
|
+
* actually needs to start from. Resumability is a property of each
|
|
12
|
+
* migration's own plan()/apply() (see core/migrations/types.ts) — this
|
|
13
|
+
* command does no extra bookkeeping of its own.
|
|
14
|
+
*/
|
|
15
|
+
export async function execute(store, flags) {
|
|
16
|
+
const pending = pendingMigrations(store.config.schema_version);
|
|
17
|
+
const startingVersion = store.config.schema_version;
|
|
18
|
+
if (pending.length === 0) {
|
|
19
|
+
return {
|
|
20
|
+
exitCode: ExitCode.Ok,
|
|
21
|
+
data: { currentVersion: startingVersion, targetVersion: SUPPORTED_SCHEMA_VERSION, applied: false, migrations: [] },
|
|
22
|
+
findings: [],
|
|
23
|
+
humanSummary: `Already at schema_version ${startingVersion}; nothing to migrate.`,
|
|
24
|
+
storeRoot: store.root,
|
|
25
|
+
schemaVersion: store.config.schema_version,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
const results = [];
|
|
29
|
+
let workingStore = store;
|
|
30
|
+
for (const migration of pending) {
|
|
31
|
+
if (flags.dryRun) {
|
|
32
|
+
const deltas = await migration.plan(workingStore);
|
|
33
|
+
results.push({ id: migration.id, fromVersion: migration.fromVersion, toVersion: migration.toVersion, deltas });
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
const deltas = await migration.apply(workingStore);
|
|
37
|
+
results.push({ id: migration.id, fromVersion: migration.fromVersion, toVersion: migration.toVersion, deltas });
|
|
38
|
+
workingStore = { root: workingStore.root, config: await readConfig(workingStore.root) };
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
exitCode: ExitCode.Ok,
|
|
42
|
+
data: {
|
|
43
|
+
currentVersion: startingVersion,
|
|
44
|
+
targetVersion: SUPPORTED_SCHEMA_VERSION,
|
|
45
|
+
applied: !flags.dryRun,
|
|
46
|
+
migrations: results,
|
|
47
|
+
},
|
|
48
|
+
findings: [],
|
|
49
|
+
humanSummary: flags.dryRun
|
|
50
|
+
? `--dry-run: ${results.reduce((n, r) => n + r.deltas.length, 0)} change(s) would be made across ${results.length} migration(s).`
|
|
51
|
+
: `Applied ${results.length} migration(s), now at schema_version ${workingStore.config.schema_version}.`,
|
|
52
|
+
storeRoot: store.root,
|
|
53
|
+
schemaVersion: flags.dryRun ? store.config.schema_version : workingStore.config.schema_version,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
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 NoteResolveFlags {
|
|
6
|
+
path: string;
|
|
7
|
+
}
|
|
8
|
+
export interface NoteResolveData {
|
|
9
|
+
path: string;
|
|
10
|
+
visibility: string;
|
|
11
|
+
reason: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function execute(env: RunEnv, store: Store, flags: NoteResolveFlags): Promise<CommandOutcome<NoteResolveData>>;
|
|
14
|
+
//# sourceMappingURL=note-resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"note-resolve.d.ts","sourceRoot":"","sources":["../../src/commands/note-resolve.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,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,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAOD,wBAAsB,OAAO,CAC3B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAc1C"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { ExitCode } from '../core/exit-codes.js';
|
|
3
|
+
import { parseNote } from '../core/notes/parse.js';
|
|
4
|
+
import { resolveVisibility } from '../core/notes/visibility.js';
|
|
5
|
+
export const requires = { store: 'required' };
|
|
6
|
+
function toStoreRelativePath(env, store, givenPath) {
|
|
7
|
+
const absolute = path.isAbsolute(givenPath) ? givenPath : path.resolve(env.cwd, givenPath);
|
|
8
|
+
return path.relative(store.root, absolute).split(path.sep).join('/');
|
|
9
|
+
}
|
|
10
|
+
export async function execute(env, store, flags) {
|
|
11
|
+
const relativePath = toStoreRelativePath(env, store, flags.path);
|
|
12
|
+
const absolutePath = path.join(store.root, relativePath);
|
|
13
|
+
const note = await parseNote(absolutePath, relativePath);
|
|
14
|
+
const resolution = resolveVisibility(store.config, note);
|
|
15
|
+
return {
|
|
16
|
+
exitCode: ExitCode.Ok,
|
|
17
|
+
data: { path: relativePath, visibility: resolution.value, reason: resolution.reason },
|
|
18
|
+
findings: [],
|
|
19
|
+
humanSummary: `${relativePath}: ${resolution.value} (${resolution.reason})`,
|
|
20
|
+
storeRoot: store.root,
|
|
21
|
+
schemaVersion: store.config.schema_version,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=note-resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"note-resolve.js","sourceRoot":"","sources":["../../src/commands/note-resolve.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGhE,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAY/D,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,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,GAAW,EACX,KAAY,EACZ,KAAuB;IAEvB,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;IACzD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAEzD,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE;QACrF,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,GAAG,YAAY,KAAK,UAAU,CAAC,KAAK,KAAK,UAAU,CAAC,MAAM,GAAG;QAC3E,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
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 RollupGatherFlags {
|
|
6
|
+
entity: string;
|
|
7
|
+
}
|
|
8
|
+
export interface RollupGatherData {
|
|
9
|
+
entity: string;
|
|
10
|
+
candidates: string[];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* context-organize spec (task 7.3): agent-facing enumeration only — this
|
|
14
|
+
* command finds candidate source notes (every note linking to the entity
|
|
15
|
+
* by wikilink), it does not read or synthesize them. The actual judgment
|
|
16
|
+
* of what belongs in a rollup, and the prose itself, stays with the agent;
|
|
17
|
+
* `rollup write` is the separate, deterministic step that commits that
|
|
18
|
+
* agent-authored prose to disk.
|
|
19
|
+
*/
|
|
20
|
+
export declare function execute(env: RunEnv, store: Store, flags: RollupGatherFlags): Promise<CommandOutcome<RollupGatherData>>;
|
|
21
|
+
//# sourceMappingURL=rollup-gather.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rollup-gather.d.ts","sourceRoot":"","sources":["../../src/commands/rollup-gather.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAK7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAOD;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAC3B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAoB3C"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { NoteNotFoundError } from '../core/errors.js';
|
|
4
|
+
import { ExitCode } from '../core/exit-codes.js';
|
|
5
|
+
import { extractLinkTargets } from '../core/graph/model.js';
|
|
6
|
+
import { listNotes } from '../core/notes/list.js';
|
|
7
|
+
export const requires = { store: 'required' };
|
|
8
|
+
function toStoreRelativePath(env, store, givenPath) {
|
|
9
|
+
const absolute = path.isAbsolute(givenPath) ? givenPath : path.resolve(env.cwd, givenPath);
|
|
10
|
+
return path.relative(store.root, absolute).split(path.sep).join('/');
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* context-organize spec (task 7.3): agent-facing enumeration only — this
|
|
14
|
+
* command finds candidate source notes (every note linking to the entity
|
|
15
|
+
* by wikilink), it does not read or synthesize them. The actual judgment
|
|
16
|
+
* of what belongs in a rollup, and the prose itself, stays with the agent;
|
|
17
|
+
* `rollup write` is the separate, deterministic step that commits that
|
|
18
|
+
* agent-authored prose to disk.
|
|
19
|
+
*/
|
|
20
|
+
export async function execute(env, store, flags) {
|
|
21
|
+
const relativePath = toStoreRelativePath(env, store, flags.entity);
|
|
22
|
+
if (!existsSync(path.join(store.root, relativePath)))
|
|
23
|
+
throw new NoteNotFoundError(relativePath);
|
|
24
|
+
const stem = path.basename(relativePath, '.md');
|
|
25
|
+
const notes = await listNotes(store.root, store.config);
|
|
26
|
+
const candidates = notes
|
|
27
|
+
.filter((note) => note.path !== relativePath)
|
|
28
|
+
.filter((note) => extractLinkTargets(note.body).includes(stem))
|
|
29
|
+
.map((note) => note.path)
|
|
30
|
+
.sort();
|
|
31
|
+
return {
|
|
32
|
+
exitCode: ExitCode.Ok,
|
|
33
|
+
data: { entity: relativePath, candidates },
|
|
34
|
+
findings: [],
|
|
35
|
+
humanSummary: `${candidates.length} candidate source note(s) for "${relativePath}".`,
|
|
36
|
+
storeRoot: store.root,
|
|
37
|
+
schemaVersion: store.config.schema_version,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=rollup-gather.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rollup-gather.js","sourceRoot":"","sources":["../../src/commands/rollup-gather.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAW/D,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;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,GAAW,EACX,KAAY,EACZ,KAAwB;IAExB,MAAM,YAAY,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACnE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAAE,MAAM,IAAI,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAEhG,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,KAAK;SACrB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC;SAC5C,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SAC9D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;SACxB,IAAI,EAAE,CAAC;IAEV,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,IAAI,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE;QAC1C,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,GAAG,UAAU,CAAC,MAAM,kCAAkC,YAAY,IAAI;QACpF,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
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 declare const ROLLUP_FENCE: import("../core/markers.js").Fence;
|
|
6
|
+
export interface RollupWriteFlags {
|
|
7
|
+
entity: string;
|
|
8
|
+
contentFile: string;
|
|
9
|
+
}
|
|
10
|
+
export interface RollupWriteData {
|
|
11
|
+
path: string;
|
|
12
|
+
changed: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* context-organize spec (task 7.3): an idempotent fenced write via the
|
|
16
|
+
* Phase 1 marker-fence primitive — identical content on a second run is a
|
|
17
|
+
* true no-op (byte-identical file, no write at all), and a pre-existing
|
|
18
|
+
* mismatched marker pair in the entity note aborts with zero bytes
|
|
19
|
+
* written, exactly like every other generated-region writer in this
|
|
20
|
+
* codebase. The rollup text itself is supplied by the caller (an agent
|
|
21
|
+
* that already did the reading and synthesis via `rollup gather`'s
|
|
22
|
+
* candidates) — this command's only job is the deterministic write.
|
|
23
|
+
*/
|
|
24
|
+
export declare function execute(env: RunEnv, store: Store, flags: RollupWriteFlags): Promise<CommandOutcome<RollupWriteData>>;
|
|
25
|
+
//# sourceMappingURL=rollup-write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rollup-write.d.ts","sourceRoot":"","sources":["../../src/commands/rollup-write.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAK7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,eAAO,MAAM,YAAY,oCAA6B,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAOD;;;;;;;;;GASG;AACH,wBAAsB,OAAO,CAC3B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAmB1C"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { NoteNotFoundError } from '../core/errors.js';
|
|
5
|
+
import { ExitCode } from '../core/exit-codes.js';
|
|
6
|
+
import { upsertFencedRegionInFile } from '../core/fs/fenced-region.js';
|
|
7
|
+
import { htmlCommentFence } from '../core/markers.js';
|
|
8
|
+
export const requires = { store: 'required' };
|
|
9
|
+
export const ROLLUP_FENCE = htmlCommentFence('rollup');
|
|
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 (task 7.3): an idempotent fenced write via the
|
|
16
|
+
* Phase 1 marker-fence primitive — identical content on a second run is a
|
|
17
|
+
* true no-op (byte-identical file, no write at all), and a pre-existing
|
|
18
|
+
* mismatched marker pair in the entity note aborts with zero bytes
|
|
19
|
+
* written, exactly like every other generated-region writer in this
|
|
20
|
+
* codebase. The rollup text itself is supplied by the caller (an agent
|
|
21
|
+
* that already did the reading and synthesis via `rollup gather`'s
|
|
22
|
+
* candidates) — this command's only job is the deterministic write.
|
|
23
|
+
*/
|
|
24
|
+
export async function execute(env, store, flags) {
|
|
25
|
+
const relativePath = toStoreRelativePath(env, store, flags.entity);
|
|
26
|
+
const absolutePath = path.join(store.root, relativePath);
|
|
27
|
+
if (!existsSync(absolutePath))
|
|
28
|
+
throw new NoteNotFoundError(relativePath);
|
|
29
|
+
const contentText = await readFile(flags.contentFile, 'utf8');
|
|
30
|
+
const bodyLines = contentText.split('\n');
|
|
31
|
+
if (bodyLines.length > 0 && bodyLines[bodyLines.length - 1] === '')
|
|
32
|
+
bodyLines.pop();
|
|
33
|
+
const { changed } = await upsertFencedRegionInFile(absolutePath, ROLLUP_FENCE, bodyLines);
|
|
34
|
+
return {
|
|
35
|
+
exitCode: ExitCode.Ok,
|
|
36
|
+
data: { path: relativePath, changed },
|
|
37
|
+
findings: [],
|
|
38
|
+
humanSummary: changed ? `Rollup written into "${relativePath}".` : `Rollup in "${relativePath}" already up to date.`,
|
|
39
|
+
storeRoot: store.root,
|
|
40
|
+
schemaVersion: store.config.schema_version,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=rollup-write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rollup-write.js","sourceRoot":"","sources":["../../src/commands/rollup-write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAE/D,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAYvD,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;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,GAAW,EACX,KAAY,EACZ,KAAuB;IAEvB,MAAM,YAAY,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACzD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,MAAM,IAAI,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAEzE,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;QAAE,SAAS,CAAC,GAAG,EAAE,CAAC;IAEpF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,wBAAwB,CAAC,YAAY,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IAE1F,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE;QACrC,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,wBAAwB,YAAY,IAAI,CAAC,CAAC,CAAC,cAAc,YAAY,uBAAuB;QACpH,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 { RunEnv } from '../core/env.js';
|
|
3
|
+
import type { Store } from '../core/store.js';
|
|
4
|
+
export declare const requires: CommandRequires;
|
|
5
|
+
export interface SessionAbandonFlags {
|
|
6
|
+
branch: string;
|
|
7
|
+
}
|
|
8
|
+
export interface SessionAbandonData {
|
|
9
|
+
branch: string;
|
|
10
|
+
worktree: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function execute(env: RunEnv, store: Store, flags: SessionAbandonFlags): Promise<CommandOutcome<SessionAbandonData>>;
|
|
13
|
+
//# sourceMappingURL=session-abandon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-abandon.d.ts","sourceRoot":"","sources":["../../src/commands/session-abandon.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,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,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,OAAO,CAC3B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,CAkB7C"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { SessionNotFoundError } from '../core/errors.js';
|
|
2
|
+
import { ExitCode } from '../core/exit-codes.js';
|
|
3
|
+
import { deleteBranch, listWorktrees, removeWorktree } from '../core/git/worktree.js';
|
|
4
|
+
export const requires = { store: 'required' };
|
|
5
|
+
export async function execute(env, store, flags) {
|
|
6
|
+
const worktrees = await listWorktrees(env.git, store.root);
|
|
7
|
+
const match = worktrees.find((w) => w.branch === flags.branch);
|
|
8
|
+
if (!match) {
|
|
9
|
+
throw new SessionNotFoundError(flags.branch);
|
|
10
|
+
}
|
|
11
|
+
await removeWorktree(env.git, store.root, match.path, { force: true });
|
|
12
|
+
await deleteBranch(env.git, store.root, flags.branch, { force: true });
|
|
13
|
+
return {
|
|
14
|
+
exitCode: ExitCode.Ok,
|
|
15
|
+
data: { branch: flags.branch, worktree: match.path },
|
|
16
|
+
findings: [],
|
|
17
|
+
humanSummary: `Abandoned session "${flags.branch}" and removed its worktree.`,
|
|
18
|
+
storeRoot: store.root,
|
|
19
|
+
schemaVersion: store.config.schema_version,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=session-abandon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-abandon.js","sourceRoot":"","sources":["../../src/commands/session-abandon.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAGtF,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAW/D,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,GAAW,EACX,KAAY,EACZ,KAA0B;IAE1B,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,MAAM,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvE,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE;QACpD,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,sBAAsB,KAAK,CAAC,MAAM,6BAA6B;QAC7E,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
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 SessionInfo {
|
|
6
|
+
branch: string;
|
|
7
|
+
worktree: string;
|
|
8
|
+
head: string;
|
|
9
|
+
}
|
|
10
|
+
export interface SessionListData {
|
|
11
|
+
sessions: SessionInfo[];
|
|
12
|
+
}
|
|
13
|
+
export declare function execute(env: RunEnv, store: Store): Promise<CommandOutcome<SessionListData>>;
|
|
14
|
+
//# sourceMappingURL=session-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-list.d.ts","sourceRoot":"","sources":["../../src/commands/session-list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,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,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAcjG"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ExitCode } from '../core/exit-codes.js';
|
|
2
|
+
import { listWorktrees } from '../core/git/worktree.js';
|
|
3
|
+
import { isSessionBranch } from '../core/session.js';
|
|
4
|
+
export const requires = { store: 'required' };
|
|
5
|
+
export async function execute(env, store) {
|
|
6
|
+
const worktrees = await listWorktrees(env.git, store.root);
|
|
7
|
+
const sessions = worktrees
|
|
8
|
+
.filter((w) => w.branch !== null && isSessionBranch(store.config, w.branch))
|
|
9
|
+
.map((w) => ({ branch: w.branch, worktree: w.path, head: w.head }));
|
|
10
|
+
return {
|
|
11
|
+
exitCode: ExitCode.Ok,
|
|
12
|
+
data: { sessions },
|
|
13
|
+
findings: [],
|
|
14
|
+
humanSummary: `${sessions.length} session(s).`,
|
|
15
|
+
storeRoot: store.root,
|
|
16
|
+
schemaVersion: store.config.schema_version,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=session-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-list.js","sourceRoot":"","sources":["../../src/commands/session-list.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAY/D,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,KAAY;IACrD,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,SAAS;SACvB,MAAM,CAAC,CAAC,CAAC,EAAsC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;SAC/G,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAEtE,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,IAAI,EAAE,EAAE,QAAQ,EAAE;QAClB,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,GAAG,QAAQ,CAAC,MAAM,cAAc;QAC9C,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 { RunEnv } from '../core/env.js';
|
|
3
|
+
import type { Store } from '../core/store.js';
|
|
4
|
+
export declare const requires: CommandRequires;
|
|
5
|
+
export interface ReapOutcome {
|
|
6
|
+
branch: string;
|
|
7
|
+
worktree: string;
|
|
8
|
+
reason: string;
|
|
9
|
+
}
|
|
10
|
+
export interface SessionReapData {
|
|
11
|
+
reaped: ReapOutcome[];
|
|
12
|
+
skipped: ReapOutcome[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* write-lifecycle spec: reclaims session worktrees whose branch has been
|
|
16
|
+
* merged into the default branch and whose tree is clean — never a branch
|
|
17
|
+
* with unmerged commits, never a dirty worktree. This removes the
|
|
18
|
+
* concurrency race entirely rather than hardening against it: a
|
|
19
|
+
* conservative reap that only ever touches provably-safe sessions.
|
|
20
|
+
*/
|
|
21
|
+
export declare function execute(env: RunEnv, store: Store): Promise<CommandOutcome<SessionReapData>>;
|
|
22
|
+
//# sourceMappingURL=session-reap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-reap.d.ts","sourceRoot":"","sources":["../../src/commands/session-reap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAK7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CA2CjG"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { ExitCode } from '../core/exit-codes.js';
|
|
2
|
+
import { isWorkingTreeClean } from '../core/git/repo.js';
|
|
3
|
+
import { deleteBranch, listWorktrees, removeWorktree } from '../core/git/worktree.js';
|
|
4
|
+
import { isSessionBranch } from '../core/session.js';
|
|
5
|
+
export const requires = { store: 'required' };
|
|
6
|
+
/**
|
|
7
|
+
* write-lifecycle spec: reclaims session worktrees whose branch has been
|
|
8
|
+
* merged into the default branch and whose tree is clean — never a branch
|
|
9
|
+
* with unmerged commits, never a dirty worktree. This removes the
|
|
10
|
+
* concurrency race entirely rather than hardening against it: a
|
|
11
|
+
* conservative reap that only ever touches provably-safe sessions.
|
|
12
|
+
*/
|
|
13
|
+
export async function execute(env, store) {
|
|
14
|
+
const worktrees = await listWorktrees(env.git, store.root);
|
|
15
|
+
const sessions = worktrees.filter((w) => w.branch !== null && isSessionBranch(store.config, w.branch));
|
|
16
|
+
const reaped = [];
|
|
17
|
+
const skipped = [];
|
|
18
|
+
for (const session of sessions) {
|
|
19
|
+
const clean = await isWorkingTreeClean(env.git, session.path);
|
|
20
|
+
if (!clean) {
|
|
21
|
+
skipped.push({ branch: session.branch, worktree: session.path, reason: 'worktree has uncommitted changes' });
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
const aheadResult = await env.git.run(['log', `${store.config.git.default_branch}..${session.branch}`, '--oneline'], { cwd: store.root, allowFailure: true });
|
|
25
|
+
const isMerged = aheadResult.exitCode === 0 && aheadResult.stdout.trim().length === 0;
|
|
26
|
+
if (!isMerged) {
|
|
27
|
+
skipped.push({
|
|
28
|
+
branch: session.branch,
|
|
29
|
+
worktree: session.path,
|
|
30
|
+
reason: 'branch has commits not yet merged into the default branch',
|
|
31
|
+
});
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
await removeWorktree(env.git, store.root, session.path);
|
|
35
|
+
await deleteBranch(env.git, store.root, session.branch);
|
|
36
|
+
reaped.push({ branch: session.branch, worktree: session.path, reason: 'merged and clean' });
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
exitCode: ExitCode.Ok,
|
|
40
|
+
data: { reaped, skipped },
|
|
41
|
+
findings: [],
|
|
42
|
+
humanSummary: `Reaped ${reaped.length} session(s), skipped ${skipped.length}.`,
|
|
43
|
+
storeRoot: store.root,
|
|
44
|
+
schemaVersion: store.config.schema_version,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=session-reap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-reap.js","sourceRoot":"","sources":["../../src/commands/session-reap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAa/D;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,KAAY;IACrD,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAC/B,CAAC,CAAC,EAAsC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CACxG,CAAC;IAEF,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,kCAAkC,EAAE,CAAC,CAAC;YAC7G,SAAS;QACX,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CACnC,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,KAAK,OAAO,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,EAC7E,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CACxC,CAAC;QACF,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;QACtF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,QAAQ,EAAE,OAAO,CAAC,IAAI;gBACtB,MAAM,EAAE,2DAA2D;aACpE,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,MAAM,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;QACzB,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,UAAU,MAAM,CAAC,MAAM,wBAAwB,OAAO,CAAC,MAAM,GAAG;QAC9E,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
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 SessionStartData {
|
|
6
|
+
worktree: string;
|
|
7
|
+
branch: string;
|
|
8
|
+
startPoint: string;
|
|
9
|
+
fetched: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* write-lifecycle spec: "session start (an isolated git worktree off a
|
|
13
|
+
* freshly fetched default branch)." When no remote is configured (a purely
|
|
14
|
+
* local store), this degrades honestly to the local default branch's
|
|
15
|
+
* current tip — fetching is simply not possible without a remote.
|
|
16
|
+
*/
|
|
17
|
+
export declare function execute(env: RunEnv, store: Store): Promise<CommandOutcome<SessionStartData>>;
|
|
18
|
+
//# sourceMappingURL=session-start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-start.d.ts","sourceRoot":"","sources":["../../src/commands/session-start.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,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,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CA4BlG"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ExitCode } from '../core/exit-codes.js';
|
|
2
|
+
import { addWorktree, fetchOrigin, hasRemote } from '../core/git/worktree.js';
|
|
3
|
+
import { generateSessionBranchName, worktreePathFor } from '../core/session.js';
|
|
4
|
+
export const requires = { store: 'required' };
|
|
5
|
+
/**
|
|
6
|
+
* write-lifecycle spec: "session start (an isolated git worktree off a
|
|
7
|
+
* freshly fetched default branch)." When no remote is configured (a purely
|
|
8
|
+
* local store), this degrades honestly to the local default branch's
|
|
9
|
+
* current tip — fetching is simply not possible without a remote.
|
|
10
|
+
*/
|
|
11
|
+
export async function execute(env, store) {
|
|
12
|
+
const git = env.git;
|
|
13
|
+
const defaultBranch = store.config.git.default_branch;
|
|
14
|
+
const remoteExists = await hasRemote(git, store.root);
|
|
15
|
+
let startPoint;
|
|
16
|
+
let fetched = false;
|
|
17
|
+
if (remoteExists) {
|
|
18
|
+
fetched = await fetchOrigin(git, store.root, defaultBranch);
|
|
19
|
+
}
|
|
20
|
+
// Falls back to the local branch both when there's no remote at all, and
|
|
21
|
+
// when the remote exists but doesn't yet have this branch (e.g. nothing
|
|
22
|
+
// has been pushed yet) — both are honest, expected states, not errors.
|
|
23
|
+
startPoint = fetched ? `origin/${defaultBranch}` : defaultBranch;
|
|
24
|
+
const branch = generateSessionBranchName(store.config);
|
|
25
|
+
const worktreeDir = worktreePathFor(store, branch);
|
|
26
|
+
await addWorktree(git, store.root, worktreeDir, branch, startPoint);
|
|
27
|
+
return {
|
|
28
|
+
exitCode: ExitCode.Ok,
|
|
29
|
+
data: { worktree: worktreeDir, branch, startPoint, fetched },
|
|
30
|
+
findings: [],
|
|
31
|
+
humanSummary: `Session worktree at "${worktreeDir}" on branch "${branch}" (from ${startPoint}).`,
|
|
32
|
+
storeRoot: store.root,
|
|
33
|
+
schemaVersion: store.config.schema_version,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=session-start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../src/commands/session-start.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGhF,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAS/D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,KAAY;IACrD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IACpB,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC;IACtD,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAEtD,IAAI,UAAkB,CAAC;IACvB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC9D,CAAC;IACD,yEAAyE;IACzE,wEAAwE;IACxE,uEAAuE;IACvE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,aAAa,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;IAEjE,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAEnD,MAAM,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAEpE,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,IAAI,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE;QAC5D,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,wBAAwB,WAAW,gBAAgB,MAAM,WAAW,UAAU,IAAI;QAChG,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { OpenPullRequestResult } from '../adapters/forge/types.js';
|
|
2
|
+
import type { CommandOutcome, CommandRequires } from '../core/command.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 SessionSubmitFlags {
|
|
7
|
+
message?: string;
|
|
8
|
+
title?: string;
|
|
9
|
+
body?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface SessionSubmitData {
|
|
12
|
+
branch: string;
|
|
13
|
+
commit: string | null;
|
|
14
|
+
pushed: boolean;
|
|
15
|
+
pr: OpenPullRequestResult | null;
|
|
16
|
+
manualPrInstructions: string | null;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* write-lifecycle spec: "runs full validation, commits, pushes the branch,
|
|
20
|
+
* opens a PR via the configured forge adapter (or degrades per 2.5);
|
|
21
|
+
* refuses to run if validation fails." Full validation here means the same
|
|
22
|
+
* store-scope invariant set doctor runs — not just what's currently staged
|
|
23
|
+
* — because a session's job is to leave the store healthy as a whole, not
|
|
24
|
+
* merely to pass each individual commit's pre-commit gate.
|
|
25
|
+
*/
|
|
26
|
+
export declare function execute(env: RunEnv, store: Store, flags: SessionSubmitFlags): Promise<CommandOutcome<SessionSubmitData>>;
|
|
27
|
+
//# sourceMappingURL=session-submit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-submit.d.ts","sourceRoot":"","sources":["../../src/commands/session-submit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAIxE,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAO7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,EAAE,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACjC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAC3B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC,CA0D5C"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { configuredAdapters } from '../adapters/registry.js';
|
|
2
|
+
import { CHECKS } from '../core/checks/manifest.js';
|
|
3
|
+
import { overallStatus, runChecks } from '../core/checks/registry.js';
|
|
4
|
+
import { NoRemoteConfiguredError, SessionValidationFailedError } from '../core/errors.js';
|
|
5
|
+
import { ExitCode } from '../core/exit-codes.js';
|
|
6
|
+
import { commitIfStaged, currentBranch, pushBranch } from '../core/git/repo.js';
|
|
7
|
+
import { hasRemote } from '../core/git/worktree.js';
|
|
8
|
+
import { readGraph } from '../core/graph/persist.js';
|
|
9
|
+
import { listNotes } from '../core/notes/list.js';
|
|
10
|
+
export const requires = { store: 'required' };
|
|
11
|
+
/**
|
|
12
|
+
* write-lifecycle spec: "runs full validation, commits, pushes the branch,
|
|
13
|
+
* opens a PR via the configured forge adapter (or degrades per 2.5);
|
|
14
|
+
* refuses to run if validation fails." Full validation here means the same
|
|
15
|
+
* store-scope invariant set doctor runs — not just what's currently staged
|
|
16
|
+
* — because a session's job is to leave the store healthy as a whole, not
|
|
17
|
+
* merely to pass each individual commit's pre-commit gate.
|
|
18
|
+
*/
|
|
19
|
+
export async function execute(env, store, flags) {
|
|
20
|
+
const branch = await currentBranch(env.git, store.root);
|
|
21
|
+
const ctx = {
|
|
22
|
+
storeRoot: store.root,
|
|
23
|
+
config: store.config,
|
|
24
|
+
scope: 'store',
|
|
25
|
+
git: env.git,
|
|
26
|
+
notes: () => listNotes(store.root, store.config),
|
|
27
|
+
graph: () => readGraph(store),
|
|
28
|
+
catalog: async () => undefined,
|
|
29
|
+
};
|
|
30
|
+
const reports = await runChecks(CHECKS, ctx, { scope: 'store', severity: 'invariant' });
|
|
31
|
+
if (overallStatus(reports) === 'fail') {
|
|
32
|
+
throw new SessionValidationFailedError(reports.flatMap((r) => r.result.findings));
|
|
33
|
+
}
|
|
34
|
+
if (!(await hasRemote(env.git, store.root))) {
|
|
35
|
+
throw new NoRemoteConfiguredError();
|
|
36
|
+
}
|
|
37
|
+
const commitSha = await commitIfStaged(env.git, store.root, { kind: 'session', worktree: store.root, branch }, flags.message ?? `chore: submit session ${branch}`);
|
|
38
|
+
await pushBranch(env.git, store.root, branch);
|
|
39
|
+
let pr = null;
|
|
40
|
+
let manualPrInstructions = null;
|
|
41
|
+
// adapters spec: "No forge adapter configured" is a documented degradation,
|
|
42
|
+
// not a crash — the commit-and-push above still completed either way.
|
|
43
|
+
const [forgeAdapter] = configuredAdapters(store.config, 'forge');
|
|
44
|
+
const forgeAvailable = forgeAdapter ? await forgeAdapter.isAvailable(store.root) : false;
|
|
45
|
+
if (forgeAdapter && forgeAvailable) {
|
|
46
|
+
pr = await forgeAdapter.openPullRequest({
|
|
47
|
+
cwd: store.root,
|
|
48
|
+
branch,
|
|
49
|
+
baseBranch: store.config.git.default_branch,
|
|
50
|
+
title: flags.title ?? `Session: ${branch}`,
|
|
51
|
+
body: flags.body ?? '',
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
manualPrInstructions =
|
|
56
|
+
`No forge adapter is configured or reachable. The branch "${branch}" was pushed successfully — ` +
|
|
57
|
+
`open a pull request manually, comparing it against "${store.config.git.default_branch}".`;
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
exitCode: ExitCode.Ok,
|
|
61
|
+
data: { branch, commit: commitSha, pushed: true, pr, manualPrInstructions },
|
|
62
|
+
findings: [],
|
|
63
|
+
humanSummary: pr ? `Opened PR #${pr.number ?? '?'}: ${pr.url}` : (manualPrInstructions ?? ''),
|
|
64
|
+
storeRoot: store.root,
|
|
65
|
+
schemaVersion: store.config.schema_version,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=session-submit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-submit.js","sourceRoot":"","sources":["../../src/commands/session-submit.ts"],"names":[],"mappings":"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"}
|