ctxr-cli 0.5.0 → 0.6.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/dist/adapter.d.ts +0 -1
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js.map +1 -1
- package/dist/adapters/builtin/index.d.ts.map +1 -1
- package/dist/adapters/builtin/index.js +2 -2
- package/dist/adapters/builtin/index.js.map +1 -1
- package/dist/adapters/harness/claude-code.d.ts.map +1 -1
- package/dist/adapters/harness/claude-code.js +30 -14
- package/dist/adapters/harness/claude-code.js.map +1 -1
- package/dist/adapters/harness/hermes-agent.d.ts +9 -0
- package/dist/adapters/harness/hermes-agent.d.ts.map +1 -0
- package/dist/adapters/harness/hermes-agent.js +13 -0
- package/dist/adapters/harness/hermes-agent.js.map +1 -0
- package/dist/adapters/types.d.ts +39 -18
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js +3 -3
- package/dist/adapters/types.js.map +1 -1
- package/dist/commands/adapters-generate.d.ts +4 -2
- package/dist/commands/adapters-generate.d.ts.map +1 -1
- package/dist/commands/adapters-generate.js +14 -6
- package/dist/commands/adapters-generate.js.map +1 -1
- package/dist/commands/archive.d.ts +4 -2
- package/dist/commands/archive.d.ts.map +1 -1
- package/dist/commands/archive.js +5 -3
- package/dist/commands/archive.js.map +1 -1
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +1 -6
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +84 -18
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/publish-check.d.ts +23 -0
- package/dist/commands/publish-check.d.ts.map +1 -0
- package/dist/commands/publish-check.js +116 -0
- package/dist/commands/publish-check.js.map +1 -0
- package/dist/commands/publish-gather.d.ts +37 -0
- package/dist/commands/publish-gather.d.ts.map +1 -0
- package/dist/commands/publish-gather.js +92 -0
- package/dist/commands/publish-gather.js.map +1 -0
- package/dist/commands/publish-new.d.ts +18 -0
- package/dist/commands/publish-new.d.ts.map +1 -0
- package/dist/commands/publish-new.js +86 -0
- package/dist/commands/publish-new.js.map +1 -0
- package/dist/commands/serve.d.ts +32 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +170 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/update.js +3 -3
- package/dist/commands/update.js.map +1 -1
- package/dist/config/defaults.d.ts +39 -17
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +40 -21
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/schema.d.ts +36 -9
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +71 -15
- package/dist/config/schema.js.map +1 -1
- package/dist/core/browse/link-resolver.d.ts +12 -0
- package/dist/core/browse/link-resolver.d.ts.map +1 -0
- package/dist/core/browse/link-resolver.js +12 -0
- package/dist/core/browse/link-resolver.js.map +1 -0
- package/dist/core/browse/render.d.ts +5 -0
- package/dist/core/browse/render.d.ts.map +1 -0
- package/dist/core/browse/render.js +66 -0
- package/dist/core/browse/render.js.map +1 -0
- package/dist/core/browse/routes.d.ts +31 -0
- package/dist/core/browse/routes.d.ts.map +1 -0
- package/dist/core/browse/routes.js +56 -0
- package/dist/core/browse/routes.js.map +1 -0
- package/dist/core/browse/templates.d.ts +4 -0
- package/dist/core/browse/templates.d.ts.map +1 -0
- package/dist/core/browse/templates.js +26 -0
- package/dist/core/browse/templates.js.map +1 -0
- package/dist/core/checks/integrity-checks.d.ts +18 -2
- package/dist/core/checks/integrity-checks.d.ts.map +1 -1
- package/dist/core/checks/integrity-checks.js +55 -10
- package/dist/core/checks/integrity-checks.js.map +1 -1
- package/dist/core/checks/organize-checks.d.ts +9 -1
- package/dist/core/checks/organize-checks.d.ts.map +1 -1
- package/dist/core/checks/organize-checks.js +13 -3
- package/dist/core/checks/organize-checks.js.map +1 -1
- package/dist/core/convention-doc.d.ts +8 -9
- package/dist/core/convention-doc.d.ts.map +1 -1
- package/dist/core/convention-doc.js +45 -18
- package/dist/core/convention-doc.js.map +1 -1
- package/dist/core/conventions.d.ts +2 -2
- package/dist/core/conventions.js +2 -2
- package/dist/core/disclosure/model.d.ts +11 -0
- package/dist/core/disclosure/model.d.ts.map +1 -1
- package/dist/core/disclosure/model.js +24 -0
- package/dist/core/disclosure/model.js.map +1 -1
- package/dist/core/errors.d.ts +27 -41
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +76 -119
- package/dist/core/errors.js.map +1 -1
- package/dist/core/git/repo.d.ts +0 -6
- package/dist/core/git/repo.d.ts.map +1 -1
- package/dist/core/git/repo.js +0 -13
- package/dist/core/git/repo.js.map +1 -1
- package/dist/core/git/worktree.d.ts +4 -7
- package/dist/core/git/worktree.d.ts.map +1 -1
- package/dist/core/git/worktree.js +4 -10
- package/dist/core/git/worktree.js.map +1 -1
- package/dist/core/graph/model.d.ts +14 -0
- package/dist/core/graph/model.d.ts.map +1 -1
- package/dist/core/graph/model.js +30 -14
- package/dist/core/graph/model.js.map +1 -1
- package/dist/core/harness/bridge.d.ts +30 -0
- package/dist/core/harness/bridge.d.ts.map +1 -0
- package/dist/core/harness/bridge.js +178 -0
- package/dist/core/harness/bridge.js.map +1 -0
- package/dist/core/json-config-merge.d.ts.map +1 -1
- package/dist/core/json-config-merge.js +30 -7
- package/dist/core/json-config-merge.js.map +1 -1
- package/dist/core/migrations/archive-destination-from-taxonomy.d.ts +35 -0
- package/dist/core/migrations/archive-destination-from-taxonomy.d.ts.map +1 -0
- package/dist/core/migrations/archive-destination-from-taxonomy.js +109 -0
- package/dist/core/migrations/archive-destination-from-taxonomy.js.map +1 -0
- package/dist/core/migrations/drop-forge-and-workspaces-external.d.ts +19 -0
- package/dist/core/migrations/drop-forge-and-workspaces-external.d.ts.map +1 -0
- package/dist/core/migrations/drop-forge-and-workspaces-external.js +49 -0
- package/dist/core/migrations/drop-forge-and-workspaces-external.js.map +1 -0
- package/dist/core/migrations/registry.d.ts.map +1 -1
- package/dist/core/migrations/registry.js +4 -0
- package/dist/core/migrations/registry.js.map +1 -1
- package/dist/core/notes/list.d.ts.map +1 -1
- package/dist/core/notes/list.js +5 -1
- package/dist/core/notes/list.js.map +1 -1
- package/dist/core/publish/script-check.d.ts +12 -0
- package/dist/core/publish/script-check.d.ts.map +1 -0
- package/dist/core/publish/script-check.js +39 -0
- package/dist/core/publish/script-check.js.map +1 -0
- package/dist/core/reconcile.d.ts +3 -0
- package/dist/core/reconcile.d.ts.map +1 -1
- package/dist/core/reconcile.js +15 -5
- package/dist/core/reconcile.js.map +1 -1
- package/dist/core/session.d.ts +9 -9
- package/dist/core/session.js +9 -9
- package/dist/core/skills.d.ts +36 -0
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +154 -29
- package/dist/core/skills.js.map +1 -1
- package/dist/core/write-lifecycle/path-gate.d.ts.map +1 -1
- package/dist/core/write-lifecycle/path-gate.js +4 -2
- package/dist/core/write-lifecycle/path-gate.js.map +1 -1
- package/dist/prompt/inquirer-prompter.d.ts.map +1 -1
- package/dist/prompt/inquirer-prompter.js +11 -1
- package/dist/prompt/inquirer-prompter.js.map +1 -1
- package/dist/prompt/prompter.d.ts +16 -0
- package/dist/prompt/prompter.d.ts.map +1 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +61 -55
- package/dist/run.js.map +1 -1
- package/dist/taxonomy/profiles.d.ts +11 -0
- package/dist/taxonomy/profiles.d.ts.map +1 -1
- package/dist/taxonomy/profiles.js +1 -0
- package/dist/taxonomy/profiles.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -1
- package/templates/agents/canonical.md +1 -1
- package/templates/conventions/{baseline-convention.md → baseline-conventions.md} +4 -4
- package/templates/conventions/{custom-convention-seed.md → house-conventions-seed.md} +15 -2
- package/templates/hooks/pre-push.sh +1 -1
- package/templates/serve/shell.html +15 -0
- package/templates/serve/style.css +88 -0
- package/templates/skills/ctxr-land.md +32 -18
- package/templates/skills/ctxr-organize-audit.md +1 -1
- package/templates/skills/ctxr-publish.md +79 -0
- package/templates/skills/ctxr-session-capture.md +44 -1
- package/templates/skills/ctxr-session-lifecycle.md +20 -1
- package/templates/skills/ctxr-submit.md +15 -11
- package/templates/vendor/frontend-design/LICENSE.txt +177 -0
- package/templates/vendor/frontend-design/SKILL.md +55 -0
- package/templates/vendor/frontend-design/provenance.json +7 -0
- package/dist/adapters/forge/github.d.ts +0 -12
- package/dist/adapters/forge/github.d.ts.map +0 -1
- package/dist/adapters/forge/github.js +0 -76
- package/dist/adapters/forge/github.js.map +0 -1
- package/dist/adapters/forge/types.d.ts +0 -46
- package/dist/adapters/forge/types.d.ts.map +0 -1
- package/dist/adapters/forge/types.js +0 -2
- package/dist/adapters/forge/types.js.map +0 -1
- package/dist/commands/session-abandon.d.ts +0 -13
- package/dist/commands/session-abandon.d.ts.map +0 -1
- package/dist/commands/session-abandon.js +0 -22
- package/dist/commands/session-abandon.js.map +0 -1
- package/dist/commands/session-land.d.ts +0 -45
- package/dist/commands/session-land.d.ts.map +0 -1
- package/dist/commands/session-land.js +0 -171
- package/dist/commands/session-land.js.map +0 -1
- package/dist/commands/session-reap.d.ts +0 -22
- package/dist/commands/session-reap.d.ts.map +0 -1
- package/dist/commands/session-reap.js +0 -52
- package/dist/commands/session-reap.js.map +0 -1
- package/dist/commands/session-submit.d.ts +0 -29
- package/dist/commands/session-submit.d.ts.map +0 -1
- package/dist/commands/session-submit.js +0 -72
- package/dist/commands/session-submit.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/adapters/forge/github.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import type { Adapter } from '../types.js';
|
|
2
|
-
/**
|
|
3
|
-
* write-lifecycle/adapters spec: the forge adapter interface — one of the
|
|
4
|
-
* three v1 adapter kinds. `isAvailable` is what lets `session submit`
|
|
5
|
-
* degrade to manual-PR instructions rather than failing when no forge is
|
|
6
|
-
* configured or reachable.
|
|
7
|
-
*/
|
|
8
|
-
export interface OpenPullRequestInput {
|
|
9
|
-
cwd: string;
|
|
10
|
-
branch: string;
|
|
11
|
-
baseBranch: string;
|
|
12
|
-
title: string;
|
|
13
|
-
body: string;
|
|
14
|
-
}
|
|
15
|
-
export interface OpenPullRequestResult {
|
|
16
|
-
url: string;
|
|
17
|
-
number: number | null;
|
|
18
|
-
}
|
|
19
|
-
/** session-submit-and-land spec (D5): the forge's own vocabulary, normalized to one small union per axis. */
|
|
20
|
-
export type PullRequestLifecycleState = 'open' | 'merged' | 'closed';
|
|
21
|
-
export type PullRequestMergeability = 'mergeable' | 'conflicting' | 'unknown';
|
|
22
|
-
export type MergeMethod = 'squash' | 'merge' | 'rebase';
|
|
23
|
-
export interface PullRequestState {
|
|
24
|
-
number: number;
|
|
25
|
-
url: string;
|
|
26
|
-
title: string;
|
|
27
|
-
state: PullRequestLifecycleState;
|
|
28
|
-
mergeable: PullRequestMergeability;
|
|
29
|
-
headBranch: string;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* session-submit-and-land spec (D5): interface version 2 — `pullRequest`
|
|
33
|
-
* and `mergePullRequest` join availability and pull-request opening, so
|
|
34
|
-
* `ctxr session land` can read a pull request's state and merge it. A v1
|
|
35
|
-
* forge adapter (this interface's prior shape) cannot land; the adapters
|
|
36
|
-
* capability's compatibility check reports that mismatch before any session
|
|
37
|
-
* command relies on it.
|
|
38
|
-
*/
|
|
39
|
-
export interface ForgeAdapter extends Adapter<'forge'> {
|
|
40
|
-
isAvailable(cwd: string): Promise<boolean>;
|
|
41
|
-
openPullRequest(input: OpenPullRequestInput): Promise<OpenPullRequestResult>;
|
|
42
|
-
/** `ref` is a branch name or a pull-request number as a string; either resolves the same pull request. */
|
|
43
|
-
pullRequest(cwd: string, ref: string): Promise<PullRequestState>;
|
|
44
|
-
mergePullRequest(cwd: string, number: number, method: MergeMethod): Promise<void>;
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adapters/forge/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,6GAA6G;AAC7G,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACrE,MAAM,MAAM,uBAAuB,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;AAE9E,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,yBAAyB,CAAC;IACjC,SAAS,EAAE,uBAAuB,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,YAAa,SAAQ,OAAO,CAAC,OAAO,CAAC;IACpD,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC7E,0GAA0G;IAC1G,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACjE,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/adapters/forge/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,13 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,22 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import type { MergeMethod } from '../adapters/forge/types.js';
|
|
2
|
-
import type { Adapter } from '../adapters/types.js';
|
|
3
|
-
import type { CommandOutcome, CommandRequires } from '../core/command.js';
|
|
4
|
-
import { type RunEnv } from '../core/env.js';
|
|
5
|
-
import type { Store } from '../core/store.js';
|
|
6
|
-
export declare const requires: CommandRequires;
|
|
7
|
-
export interface SessionLandFlags {
|
|
8
|
-
pr?: number;
|
|
9
|
-
branch?: string;
|
|
10
|
-
yes?: boolean;
|
|
11
|
-
mergeMethod?: MergeMethod;
|
|
12
|
-
reap?: boolean;
|
|
13
|
-
}
|
|
14
|
-
export interface SyncOutcome {
|
|
15
|
-
attempted: boolean;
|
|
16
|
-
synced: boolean;
|
|
17
|
-
reason?: string;
|
|
18
|
-
}
|
|
19
|
-
export interface ReapOutcome {
|
|
20
|
-
attempted: boolean;
|
|
21
|
-
reaped: boolean;
|
|
22
|
-
reason?: string;
|
|
23
|
-
}
|
|
24
|
-
export interface SessionLandData {
|
|
25
|
-
branch: string;
|
|
26
|
-
pr: {
|
|
27
|
-
number: number;
|
|
28
|
-
url: string;
|
|
29
|
-
title: string;
|
|
30
|
-
state: string;
|
|
31
|
-
mergeable: string;
|
|
32
|
-
};
|
|
33
|
-
gate: 'confirmed' | 'declined' | 'not_required';
|
|
34
|
-
merged: boolean;
|
|
35
|
-
sync: SyncOutcome;
|
|
36
|
-
reap: ReapOutcome;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* session-submit-and-land spec (D1): every step re-reads live state (the
|
|
40
|
-
* pull request's state, the root checkout's branch, the worktree list), so
|
|
41
|
-
* a retry after a partial failure is just running the command again — it
|
|
42
|
-
* naturally skips whatever already happened rather than replaying it.
|
|
43
|
-
*/
|
|
44
|
-
export declare function execute(env: RunEnv, store: Store, flags: SessionLandFlags, registry?: readonly Adapter[]): Promise<CommandOutcome<SessionLandData>>;
|
|
45
|
-
//# sourceMappingURL=session-land.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-land.d.ts","sourceRoot":"","sources":["../../src/commands/session-land.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAoB,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAGhF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAe5D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACrF,IAAI,EAAE,WAAW,GAAG,UAAU,GAAG,cAAc,CAAC;IAChD,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,CAC3B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,gBAAgB,EACvB,QAAQ,GAAE,SAAS,OAAO,EAAqB,GAC9C,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAwE1C"}
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import { configuredAdapters } from '../adapters/registry.js';
|
|
3
|
-
import { BUILTIN_ADAPTERS } from '../adapters/builtin/index.js';
|
|
4
|
-
import { isInteractive } from '../core/env.js';
|
|
5
|
-
import { MergeNotConfirmedError, NoForgeConfiguredError, PullRequestClosedError, PullRequestHeadMismatchError, PullRequestNotMergeableError, SessionLandConsentRequiredError, SessionLandOnDefaultBranchError, } from '../core/errors.js';
|
|
6
|
-
import { ExitCode } from '../core/exit-codes.js';
|
|
7
|
-
import { currentBranch } from '../core/git/repo.js';
|
|
8
|
-
import { fetchOrigin, listWorktrees, mainWorktreePath, removeWorktree, deleteBranch, hasRemote } from '../core/git/worktree.js';
|
|
9
|
-
import { isWorkingTreeClean } from '../core/git/repo.js';
|
|
10
|
-
import { isSessionBranch, isSessionWorktreePath } from '../core/session.js';
|
|
11
|
-
export const requires = { store: 'required' };
|
|
12
|
-
/**
|
|
13
|
-
* session-submit-and-land spec (D1): every step re-reads live state (the
|
|
14
|
-
* pull request's state, the root checkout's branch, the worktree list), so
|
|
15
|
-
* a retry after a partial failure is just running the command again — it
|
|
16
|
-
* naturally skips whatever already happened rather than replaying it.
|
|
17
|
-
*/
|
|
18
|
-
export async function execute(env, store, flags, registry = BUILTIN_ADAPTERS) {
|
|
19
|
-
// D1 / the non-interactive-consent scenario: fails before reading or
|
|
20
|
-
// changing anything on the forge — checked first, before any git or
|
|
21
|
-
// network call at all.
|
|
22
|
-
if (!flags.yes && !isInteractive(env)) {
|
|
23
|
-
throw new SessionLandConsentRequiredError();
|
|
24
|
-
}
|
|
25
|
-
const defaultBranch = store.config.git.default_branch;
|
|
26
|
-
// The target comes from exactly one source: --branch names it outright,
|
|
27
|
-
// --pr defers to the pull request's head branch, and with neither it is the
|
|
28
|
-
// branch checked out where the command was invoked. Only the first two are
|
|
29
|
-
// knowable without the forge, so only they can be refused before contacting it.
|
|
30
|
-
const requested = flags.branch ?? (flags.pr === undefined ? await currentBranch(env.git, store.root) : undefined);
|
|
31
|
-
if (requested === defaultBranch) {
|
|
32
|
-
throw new SessionLandOnDefaultBranchError(requested);
|
|
33
|
-
}
|
|
34
|
-
const [forgeAdapter] = configuredAdapters(store.config, 'forge', registry);
|
|
35
|
-
if (!forgeAdapter || !(await forgeAdapter.isAvailable(store.root))) {
|
|
36
|
-
throw new NoForgeConfiguredError();
|
|
37
|
-
}
|
|
38
|
-
const ref = flags.pr !== undefined ? String(flags.pr) : requested;
|
|
39
|
-
let pr = await forgeAdapter.pullRequest(store.root, ref);
|
|
40
|
-
if (requested === undefined) {
|
|
41
|
-
// The target IS the head branch, so there is nothing to mismatch — but the
|
|
42
|
-
// default branch is still refused, now on the branch the forge reported.
|
|
43
|
-
if (pr.headBranch === defaultBranch) {
|
|
44
|
-
throw new SessionLandOnDefaultBranchError(pr.headBranch);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
else if (pr.headBranch !== requested) {
|
|
48
|
-
throw new PullRequestHeadMismatchError(requested, pr.headBranch);
|
|
49
|
-
}
|
|
50
|
-
const branch = requested ?? pr.headBranch;
|
|
51
|
-
let merged = pr.state === 'merged';
|
|
52
|
-
let gate = 'not_required';
|
|
53
|
-
if (pr.state === 'closed') {
|
|
54
|
-
throw new PullRequestClosedError(pr.number);
|
|
55
|
-
}
|
|
56
|
-
if (pr.state === 'open') {
|
|
57
|
-
if (pr.mergeable === 'unknown') {
|
|
58
|
-
pr = await forgeAdapter.pullRequest(store.root, ref); // D1: re-query once before stopping
|
|
59
|
-
}
|
|
60
|
-
if (pr.mergeable === 'conflicting' || pr.mergeable === 'unknown') {
|
|
61
|
-
throw new PullRequestNotMergeableError(pr.number, pr.mergeable);
|
|
62
|
-
}
|
|
63
|
-
// pr.mergeable === 'mergeable' from here on.
|
|
64
|
-
const confirmed = flags.yes ? true : await env.prompter.confirm({ message: gateMessage(pr) });
|
|
65
|
-
gate = confirmed ? 'confirmed' : 'declined';
|
|
66
|
-
if (!confirmed) {
|
|
67
|
-
return outcome(store, branch, pr, gate, false, { attempted: false, synced: false }, { attempted: false, reaped: false });
|
|
68
|
-
}
|
|
69
|
-
await forgeAdapter.mergePullRequest(store.root, pr.number, flags.mergeMethod ?? 'squash');
|
|
70
|
-
const after = await forgeAdapter.pullRequest(store.root, ref);
|
|
71
|
-
if (after.state !== 'merged') {
|
|
72
|
-
throw new MergeNotConfirmedError(pr.number);
|
|
73
|
-
}
|
|
74
|
-
pr = after;
|
|
75
|
-
merged = true;
|
|
76
|
-
}
|
|
77
|
-
const clone = await mainWorktreePath(env.git, store.root);
|
|
78
|
-
const sync = await syncCanonicalClone(env, clone, defaultBranch);
|
|
79
|
-
const reap = await reapWorktree(env, store, clone, branch, flags.reap ?? false);
|
|
80
|
-
return outcome(store, branch, pr, gate, merged, sync, reap);
|
|
81
|
-
}
|
|
82
|
-
function gateMessage(pr) {
|
|
83
|
-
return `PR #${pr.number} "${pr.title}" (${pr.url}) — OPEN, MERGEABLE. Merge?`;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* D2: fast-forward only, in the store's canonical clone — the checkout the
|
|
87
|
-
* default branch lives in, whichever checkout the command was invoked from
|
|
88
|
-
* (a session worktree, most often). Never checked out, reset, or discarded.
|
|
89
|
-
*/
|
|
90
|
-
async function syncCanonicalClone(env, clone, defaultBranch) {
|
|
91
|
-
const branch = await currentBranch(env.git, clone);
|
|
92
|
-
if (branch !== defaultBranch) {
|
|
93
|
-
return { attempted: false, synced: false, reason: `the canonical clone (${clone}) is not on the default branch` };
|
|
94
|
-
}
|
|
95
|
-
if (!(await hasRemote(env.git, clone))) {
|
|
96
|
-
return { attempted: false, synced: false, reason: 'no remote configured' };
|
|
97
|
-
}
|
|
98
|
-
const fetched = await fetchOrigin(env.git, clone, defaultBranch);
|
|
99
|
-
if (!fetched) {
|
|
100
|
-
return { attempted: true, synced: false, reason: 'fetch failed' };
|
|
101
|
-
}
|
|
102
|
-
const merge = await env.git.run(['merge', '--ff-only', `origin/${defaultBranch}`], { cwd: clone, allowFailure: true });
|
|
103
|
-
if (merge.exitCode !== 0) {
|
|
104
|
-
return { attempted: true, synced: false, reason: 'cannot fast-forward (diverged from origin)' };
|
|
105
|
-
}
|
|
106
|
-
return { attempted: true, synced: true };
|
|
107
|
-
}
|
|
108
|
-
/** D3: opt-in, and scoped to a worktree `session start` made — never the one this command is currently running from. */
|
|
109
|
-
async function reapWorktree(env, store, clone, branch, requested) {
|
|
110
|
-
if (!requested) {
|
|
111
|
-
return { attempted: false, reaped: false, reason: 'pass --reap, or run `ctxr session reap`' };
|
|
112
|
-
}
|
|
113
|
-
const worktrees = await listWorktrees(env.git, clone);
|
|
114
|
-
const target = worktrees.find((w) => w.branch === branch);
|
|
115
|
-
if (!target) {
|
|
116
|
-
return { attempted: true, reaped: false, reason: 'no worktree found for this branch' };
|
|
117
|
-
}
|
|
118
|
-
if (!isSessionBranch(store.config, branch) && !isSessionWorktreePath(store.config, target.path)) {
|
|
119
|
-
return { attempted: true, reaped: false, reason: 'not a session worktree' };
|
|
120
|
-
}
|
|
121
|
-
// The hazard is the INVOKING directory, not the resolved store root: removing
|
|
122
|
-
// the worktree this process stands in pulls the caller's cwd out from under it.
|
|
123
|
-
if (isInside(env.cwd, target.path)) {
|
|
124
|
-
return {
|
|
125
|
-
attempted: true,
|
|
126
|
-
reaped: false,
|
|
127
|
-
reason: `cannot remove the worktree this command is running from; re-run from the canonical clone (${clone}), or run \`ctxr session reap\` there`,
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
if (!(await isWorkingTreeClean(env.git, target.path))) {
|
|
131
|
-
return { attempted: true, reaped: false, reason: 'worktree has uncommitted changes' };
|
|
132
|
-
}
|
|
133
|
-
await removeWorktree(env.git, clone, target.path);
|
|
134
|
-
await deleteBranch(env.git, clone, branch);
|
|
135
|
-
return { attempted: true, reaped: true };
|
|
136
|
-
}
|
|
137
|
-
/** True when `dir` IS `parent` or lies anywhere beneath it. */
|
|
138
|
-
function isInside(dir, parent) {
|
|
139
|
-
const resolved = path.resolve(dir);
|
|
140
|
-
const root = path.resolve(parent);
|
|
141
|
-
return resolved === root || resolved.startsWith(root + path.sep);
|
|
142
|
-
}
|
|
143
|
-
/** A step that did not happen names why, whether or not it was attempted — `attempted` stays on the JSON outcome for callers that distinguish the two. */
|
|
144
|
-
function stepSummary(done, reason) {
|
|
145
|
-
if (done)
|
|
146
|
-
return 'ok';
|
|
147
|
-
return reason ? `skipped: ${reason}` : 'not attempted';
|
|
148
|
-
}
|
|
149
|
-
function outcome(store, branch, pr, gate, merged, sync, reap) {
|
|
150
|
-
const summary = gate === 'declined'
|
|
151
|
-
? `Merge declined for PR #${pr.number}; nothing landed.`
|
|
152
|
-
: `PR #${pr.number} ${merged ? 'merged' : 'not merged'}` +
|
|
153
|
-
`; sync ${stepSummary(sync.synced, sync.reason)}` +
|
|
154
|
-
`; reap ${stepSummary(reap.reaped, reap.reason)}.`;
|
|
155
|
-
return {
|
|
156
|
-
exitCode: ExitCode.Ok,
|
|
157
|
-
data: {
|
|
158
|
-
branch,
|
|
159
|
-
pr: { number: pr.number, url: pr.url, title: pr.title, state: pr.state, mergeable: pr.mergeable },
|
|
160
|
-
gate,
|
|
161
|
-
merged,
|
|
162
|
-
sync,
|
|
163
|
-
reap,
|
|
164
|
-
},
|
|
165
|
-
findings: [],
|
|
166
|
-
humanSummary: summary,
|
|
167
|
-
storeRoot: store.root,
|
|
168
|
-
schemaVersion: store.config.schema_version,
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
//# sourceMappingURL=session-land.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-land.js","sourceRoot":"","sources":["../../src/commands/session-land.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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;AAM7C,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,CAiDjG"}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { SessionReapWorkspacesExternalError } from '../core/errors.js';
|
|
2
|
-
import { ExitCode } from '../core/exit-codes.js';
|
|
3
|
-
import { isWorkingTreeClean } from '../core/git/repo.js';
|
|
4
|
-
import { deleteBranch, listWorktrees, removeWorktree } from '../core/git/worktree.js';
|
|
5
|
-
import { isSessionBranch, isSessionWorktreePath } from '../core/session.js';
|
|
6
|
-
export const requires = { store: 'required' };
|
|
7
|
-
/**
|
|
8
|
-
* write-lifecycle spec: reclaims session worktrees whose branch has been
|
|
9
|
-
* merged into the default branch and whose tree is clean — never a branch
|
|
10
|
-
* with unmerged commits, never a dirty worktree. This removes the
|
|
11
|
-
* concurrency race entirely rather than hardening against it: a
|
|
12
|
-
* conservative reap that only ever touches provably-safe sessions.
|
|
13
|
-
*/
|
|
14
|
-
export async function execute(env, store) {
|
|
15
|
-
if (store.config.session.workspaces_external) {
|
|
16
|
-
throw new SessionReapWorkspacesExternalError();
|
|
17
|
-
}
|
|
18
|
-
const worktrees = await listWorktrees(env.git, store.root);
|
|
19
|
-
const sessions = worktrees.filter((w) => w.branch !== null &&
|
|
20
|
-
(isSessionBranch(store.config, w.branch) || isSessionWorktreePath(store.config, w.path)));
|
|
21
|
-
const reaped = [];
|
|
22
|
-
const skipped = [];
|
|
23
|
-
for (const session of sessions) {
|
|
24
|
-
const clean = await isWorkingTreeClean(env.git, session.path);
|
|
25
|
-
if (!clean) {
|
|
26
|
-
skipped.push({ branch: session.branch, worktree: session.path, reason: 'worktree has uncommitted changes' });
|
|
27
|
-
continue;
|
|
28
|
-
}
|
|
29
|
-
const aheadResult = await env.git.run(['log', `${store.config.git.default_branch}..${session.branch}`, '--oneline'], { cwd: store.root, allowFailure: true });
|
|
30
|
-
const isMerged = aheadResult.exitCode === 0 && aheadResult.stdout.trim().length === 0;
|
|
31
|
-
if (!isMerged) {
|
|
32
|
-
skipped.push({
|
|
33
|
-
branch: session.branch,
|
|
34
|
-
worktree: session.path,
|
|
35
|
-
reason: 'branch has commits not yet merged into the default branch',
|
|
36
|
-
});
|
|
37
|
-
continue;
|
|
38
|
-
}
|
|
39
|
-
await removeWorktree(env.git, store.root, session.path);
|
|
40
|
-
await deleteBranch(env.git, store.root, session.branch);
|
|
41
|
-
reaped.push({ branch: session.branch, worktree: session.path, reason: 'merged and clean' });
|
|
42
|
-
}
|
|
43
|
-
return {
|
|
44
|
-
exitCode: ExitCode.Ok,
|
|
45
|
-
data: { reaped, skipped },
|
|
46
|
-
findings: [],
|
|
47
|
-
humanSummary: `Reaped ${reaped.length} session(s), skipped ${skipped.length}.`,
|
|
48
|
-
storeRoot: store.root,
|
|
49
|
-
schemaVersion: store.config.schema_version,
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
//# sourceMappingURL=session-reap.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-reap.js","sourceRoot":"","sources":["../../src/commands/session-reap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +0,0 @@
|
|
|
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
|
-
/** session-submit-and-land spec: renames the session branch before pushing, so a generated name never reaches the forge. */
|
|
11
|
-
branch?: string;
|
|
12
|
-
}
|
|
13
|
-
export interface SessionSubmitData {
|
|
14
|
-
branch: string;
|
|
15
|
-
commit: string | null;
|
|
16
|
-
pushed: boolean;
|
|
17
|
-
pr: OpenPullRequestResult | null;
|
|
18
|
-
manualPrInstructions: string | null;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* write-lifecycle spec: "runs full validation, commits, pushes the branch,
|
|
22
|
-
* opens a PR via the configured forge adapter (or degrades per 2.5);
|
|
23
|
-
* refuses to run if validation fails." Full validation here means the same
|
|
24
|
-
* store-scope invariant set doctor runs — not just what's currently staged
|
|
25
|
-
* — because a session's job is to leave the store healthy as a whole, not
|
|
26
|
-
* merely to pass each individual commit's pre-commit gate.
|
|
27
|
-
*/
|
|
28
|
-
export declare function execute(env: RunEnv, store: Store, flags: SessionSubmitFlags): Promise<CommandOutcome<SessionSubmitData>>;
|
|
29
|
-
//# sourceMappingURL=session-submit.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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;IACd,4HAA4H;IAC5H,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;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,CA8D5C"}
|
|
@@ -1,72 +0,0 @@
|
|
|
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, renameCurrentBranch } 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
|
-
let branch = await currentBranch(env.git, store.root);
|
|
21
|
-
if (flags.branch && flags.branch !== branch) {
|
|
22
|
-
await renameCurrentBranch(env.git, store.root, flags.branch);
|
|
23
|
-
branch = flags.branch;
|
|
24
|
-
}
|
|
25
|
-
const ctx = {
|
|
26
|
-
storeRoot: store.root,
|
|
27
|
-
config: store.config,
|
|
28
|
-
scope: 'store',
|
|
29
|
-
git: env.git,
|
|
30
|
-
notes: () => listNotes(store.root, store.config),
|
|
31
|
-
graph: () => readGraph(store),
|
|
32
|
-
catalog: async () => undefined,
|
|
33
|
-
};
|
|
34
|
-
const reports = await runChecks(CHECKS, ctx, { scope: 'store', severity: 'invariant' });
|
|
35
|
-
if (overallStatus(reports) === 'fail') {
|
|
36
|
-
throw new SessionValidationFailedError(reports.flatMap((r) => r.result.findings));
|
|
37
|
-
}
|
|
38
|
-
if (!(await hasRemote(env.git, store.root))) {
|
|
39
|
-
throw new NoRemoteConfiguredError();
|
|
40
|
-
}
|
|
41
|
-
const commitSha = await commitIfStaged(env.git, store.root, { kind: 'session', worktree: store.root, branch }, flags.message ?? `chore: submit session ${branch}`);
|
|
42
|
-
await pushBranch(env.git, store.root, branch);
|
|
43
|
-
let pr = null;
|
|
44
|
-
let manualPrInstructions = null;
|
|
45
|
-
// adapters spec: "No forge adapter configured" is a documented degradation,
|
|
46
|
-
// not a crash — the commit-and-push above still completed either way.
|
|
47
|
-
const [forgeAdapter] = configuredAdapters(store.config, 'forge');
|
|
48
|
-
const forgeAvailable = forgeAdapter ? await forgeAdapter.isAvailable(store.root) : false;
|
|
49
|
-
if (forgeAdapter && forgeAvailable) {
|
|
50
|
-
pr = await forgeAdapter.openPullRequest({
|
|
51
|
-
cwd: store.root,
|
|
52
|
-
branch,
|
|
53
|
-
baseBranch: store.config.git.default_branch,
|
|
54
|
-
title: flags.title ?? `Session: ${branch}`,
|
|
55
|
-
body: flags.body ?? '',
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
manualPrInstructions =
|
|
60
|
-
`No forge adapter is configured or reachable. The branch "${branch}" was pushed successfully — ` +
|
|
61
|
-
`open a pull request manually, comparing it against "${store.config.git.default_branch}".`;
|
|
62
|
-
}
|
|
63
|
-
return {
|
|
64
|
-
exitCode: ExitCode.Ok,
|
|
65
|
-
data: { branch, commit: commitSha, pushed: true, pr, manualPrInstructions },
|
|
66
|
-
findings: [],
|
|
67
|
-
humanSummary: pr ? `Opened PR #${pr.number ?? '?'}: ${pr.url}` : (manualPrInstructions ?? ''),
|
|
68
|
-
storeRoot: store.root,
|
|
69
|
-
schemaVersion: store.config.schema_version,
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=session-submit.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-submit.js","sourceRoot":"","sources":["../../src/commands/session-submit.ts"],"names":[],"mappings":"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"}
|