ctxr-cli 0.33.0 → 0.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -1
- package/dist/commands/archive.d.ts +5 -4
- package/dist/commands/archive.d.ts.map +1 -1
- package/dist/commands/archive.js +7 -7
- package/dist/commands/archive.js.map +1 -1
- package/dist/commands/catalog-show.d.ts +8 -0
- package/dist/commands/catalog-show.d.ts.map +1 -1
- package/dist/commands/catalog-show.js +29 -2
- package/dist/commands/catalog-show.js.map +1 -1
- package/dist/commands/context-gather.d.ts.map +1 -1
- package/dist/commands/context-gather.js +3 -2
- package/dist/commands/context-gather.js.map +1 -1
- package/dist/commands/doctor.d.ts +5 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +4 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/graph-build.d.ts +4 -1
- package/dist/commands/graph-build.d.ts.map +1 -1
- package/dist/commands/graph-build.js +14 -5
- package/dist/commands/graph-build.js.map +1 -1
- package/dist/commands/land.d.ts +27 -7
- package/dist/commands/land.d.ts.map +1 -1
- package/dist/commands/land.js +307 -32
- package/dist/commands/land.js.map +1 -1
- package/dist/commands/publish-gather.d.ts.map +1 -1
- package/dist/commands/publish-gather.js +2 -3
- package/dist/commands/publish-gather.js.map +1 -1
- package/dist/commands/review-list.d.ts +19 -5
- package/dist/commands/review-list.d.ts.map +1 -1
- package/dist/commands/review-list.js +55 -6
- package/dist/commands/review-list.js.map +1 -1
- package/dist/commands/rollup-gather.d.ts.map +1 -1
- package/dist/commands/rollup-gather.js +2 -3
- package/dist/commands/rollup-gather.js.map +1 -1
- package/dist/commands/second-opinion.d.ts +33 -0
- package/dist/commands/second-opinion.d.ts.map +1 -0
- package/dist/commands/second-opinion.js +56 -0
- package/dist/commands/second-opinion.js.map +1 -0
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +4 -0
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/session-discard.d.ts +18 -0
- package/dist/commands/session-discard.d.ts.map +1 -0
- package/dist/commands/session-discard.js +31 -0
- package/dist/commands/session-discard.js.map +1 -0
- package/dist/commands/session-list.d.ts +17 -6
- package/dist/commands/session-list.d.ts.map +1 -1
- package/dist/commands/session-list.js +31 -11
- package/dist/commands/session-list.js.map +1 -1
- package/dist/commands/session-rebase.d.ts +18 -0
- package/dist/commands/session-rebase.d.ts.map +1 -0
- package/dist/commands/session-rebase.js +43 -0
- package/dist/commands/session-rebase.js.map +1 -0
- package/dist/commands/session-start.d.ts +8 -0
- package/dist/commands/session-start.d.ts.map +1 -1
- package/dist/commands/session-start.js +45 -5
- package/dist/commands/session-start.js.map +1 -1
- package/dist/commands/session-status.d.ts +17 -0
- package/dist/commands/session-status.d.ts.map +1 -0
- package/dist/commands/session-status.js +38 -0
- package/dist/commands/session-status.js.map +1 -0
- package/dist/commands/session-submit.d.ts +23 -0
- package/dist/commands/session-submit.d.ts.map +1 -0
- package/dist/commands/session-submit.js +42 -0
- package/dist/commands/session-submit.js.map +1 -0
- package/dist/commands/shared-stores-status.d.ts +24 -0
- package/dist/commands/shared-stores-status.d.ts.map +1 -0
- package/dist/commands/shared-stores-status.js +51 -0
- package/dist/commands/shared-stores-status.js.map +1 -0
- package/dist/commands/shared-stores-sync.d.ts +27 -0
- package/dist/commands/shared-stores-sync.d.ts.map +1 -0
- package/dist/commands/shared-stores-sync.js +115 -0
- package/dist/commands/shared-stores-sync.js.map +1 -0
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +2 -4
- package/dist/commands/verify.js.map +1 -1
- package/dist/config/schema.d.ts +16 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +32 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/core/agents-doc.d.ts +10 -0
- package/dist/core/agents-doc.d.ts.map +1 -1
- package/dist/core/agents-doc.js +26 -1
- package/dist/core/agents-doc.js.map +1 -1
- package/dist/core/approval/decision.d.ts +39 -1
- package/dist/core/approval/decision.d.ts.map +1 -1
- package/dist/core/approval/decision.js +53 -6
- package/dist/core/approval/decision.js.map +1 -1
- package/dist/core/approval/session-group.d.ts +156 -0
- package/dist/core/approval/session-group.d.ts.map +1 -0
- package/dist/core/approval/session-group.js +359 -0
- package/dist/core/approval/session-group.js.map +1 -0
- package/dist/core/approval/session-marker.d.ts +79 -0
- package/dist/core/approval/session-marker.d.ts.map +1 -0
- package/dist/core/approval/session-marker.js +146 -0
- package/dist/core/approval/session-marker.js.map +1 -0
- package/dist/core/approval/store-forges.d.ts +15 -0
- package/dist/core/approval/store-forges.d.ts.map +1 -0
- package/dist/core/approval/store-forges.js +33 -0
- package/dist/core/approval/store-forges.js.map +1 -0
- package/dist/core/browse/approve.d.ts +8 -0
- package/dist/core/browse/approve.d.ts.map +1 -1
- package/dist/core/browse/approve.js +366 -48
- package/dist/core/browse/approve.js.map +1 -1
- package/dist/core/browse/link-resolver.d.ts +9 -4
- package/dist/core/browse/link-resolver.d.ts.map +1 -1
- package/dist/core/browse/link-resolver.js +12 -7
- package/dist/core/browse/link-resolver.js.map +1 -1
- package/dist/core/browse/review.d.ts +5 -0
- package/dist/core/browse/review.d.ts.map +1 -1
- package/dist/core/browse/review.js +8 -0
- package/dist/core/browse/review.js.map +1 -1
- package/dist/core/checks/integrity-checks.d.ts.map +1 -1
- package/dist/core/checks/integrity-checks.js +7 -1
- package/dist/core/checks/integrity-checks.js.map +1 -1
- package/dist/core/checks/manifest.d.ts.map +1 -1
- package/dist/core/checks/manifest.js +2 -0
- package/dist/core/checks/manifest.js.map +1 -1
- package/dist/core/checks/shared-stores-checks.d.ts +17 -0
- package/dist/core/checks/shared-stores-checks.d.ts.map +1 -0
- package/dist/core/checks/shared-stores-checks.js +84 -0
- package/dist/core/checks/shared-stores-checks.js.map +1 -0
- package/dist/core/errors.d.ts +17 -0
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +21 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/core/forge/github.d.ts +14 -0
- package/dist/core/forge/github.d.ts.map +1 -1
- package/dist/core/forge/github.js +17 -0
- package/dist/core/forge/github.js.map +1 -1
- package/dist/core/git/fast-forward.d.ts +23 -0
- package/dist/core/git/fast-forward.d.ts.map +1 -0
- package/dist/core/git/fast-forward.js +38 -0
- package/dist/core/git/fast-forward.js.map +1 -0
- package/dist/core/git/repo.d.ts +11 -0
- package/dist/core/git/repo.d.ts.map +1 -1
- package/dist/core/git/repo.js +25 -0
- package/dist/core/git/repo.js.map +1 -1
- package/dist/core/graph/model.d.ts +27 -0
- package/dist/core/graph/model.d.ts.map +1 -1
- package/dist/core/graph/model.js +68 -2
- package/dist/core/graph/model.js.map +1 -1
- package/dist/core/graph/persist.d.ts.map +1 -1
- package/dist/core/graph/persist.js +3 -2
- package/dist/core/graph/persist.js.map +1 -1
- package/dist/core/mcp/sessions.d.ts +11 -14
- package/dist/core/mcp/sessions.d.ts.map +1 -1
- package/dist/core/mcp/sessions.js +23 -43
- package/dist/core/mcp/sessions.js.map +1 -1
- package/dist/core/notes/list.d.ts.map +1 -1
- package/dist/core/notes/list.js +5 -0
- package/dist/core/notes/list.js.map +1 -1
- package/dist/core/reconcile.d.ts.map +1 -1
- package/dist/core/reconcile.js +2 -1
- package/dist/core/reconcile.js.map +1 -1
- package/dist/core/retrieval/pass.d.ts.map +1 -1
- package/dist/core/retrieval/pass.js +5 -4
- package/dist/core/retrieval/pass.js.map +1 -1
- package/dist/core/rollup.d.ts.map +1 -1
- package/dist/core/rollup.js +2 -3
- package/dist/core/rollup.js.map +1 -1
- package/dist/core/root.d.ts.map +1 -1
- package/dist/core/root.js +33 -2
- package/dist/core/root.js.map +1 -1
- package/dist/core/second-opinion/environment.d.ts +21 -0
- package/dist/core/second-opinion/environment.d.ts.map +1 -0
- package/dist/core/second-opinion/environment.js +70 -0
- package/dist/core/second-opinion/environment.js.map +1 -0
- package/dist/core/second-opinion/judge.d.ts +29 -0
- package/dist/core/second-opinion/judge.d.ts.map +1 -0
- package/dist/core/second-opinion/judge.js +55 -0
- package/dist/core/second-opinion/judge.js.map +1 -0
- package/dist/core/second-opinion/launch.d.ts +16 -0
- package/dist/core/second-opinion/launch.d.ts.map +1 -0
- package/dist/core/second-opinion/launch.js +75 -0
- package/dist/core/second-opinion/launch.js.map +1 -0
- package/dist/core/second-opinion/lineup.d.ts +82 -0
- package/dist/core/second-opinion/lineup.d.ts.map +1 -0
- package/dist/core/second-opinion/lineup.js +113 -0
- package/dist/core/second-opinion/lineup.js.map +1 -0
- package/dist/core/second-opinion/modes.d.ts +98 -0
- package/dist/core/second-opinion/modes.d.ts.map +1 -0
- package/dist/core/second-opinion/modes.js +224 -0
- package/dist/core/second-opinion/modes.js.map +1 -0
- package/dist/core/second-opinion/prompts.d.ts +18 -0
- package/dist/core/second-opinion/prompts.d.ts.map +1 -0
- package/dist/core/second-opinion/prompts.js +65 -0
- package/dist/core/second-opinion/prompts.js.map +1 -0
- package/dist/core/session/commit.d.ts +29 -0
- package/dist/core/session/commit.d.ts.map +1 -0
- package/dist/core/session/commit.js +22 -0
- package/dist/core/session/commit.js.map +1 -0
- package/dist/core/session/discard.d.ts +24 -0
- package/dist/core/session/discard.d.ts.map +1 -0
- package/dist/core/session/discard.js +68 -0
- package/dist/core/session/discard.js.map +1 -0
- package/dist/core/session/list.d.ts +48 -0
- package/dist/core/session/list.d.ts.map +1 -0
- package/dist/core/session/list.js +55 -0
- package/dist/core/session/list.js.map +1 -0
- package/dist/core/session/rebase.d.ts +34 -0
- package/dist/core/session/rebase.d.ts.map +1 -0
- package/dist/core/session/rebase.js +87 -0
- package/dist/core/session/rebase.js.map +1 -0
- package/dist/core/session/remote.d.ts +80 -0
- package/dist/core/session/remote.d.ts.map +1 -0
- package/dist/core/session/remote.js +102 -0
- package/dist/core/session/remote.js.map +1 -0
- package/dist/core/session/resolve.d.ts +41 -0
- package/dist/core/session/resolve.d.ts.map +1 -0
- package/dist/core/session/resolve.js +109 -0
- package/dist/core/session/resolve.js.map +1 -0
- package/dist/core/session/status.d.ts +47 -0
- package/dist/core/session/status.d.ts.map +1 -0
- package/dist/core/session/status.js +55 -0
- package/dist/core/session/status.js.map +1 -0
- package/dist/core/session/submit.d.ts +67 -0
- package/dist/core/session/submit.d.ts.map +1 -0
- package/dist/core/session/submit.js +254 -0
- package/dist/core/session/submit.js.map +1 -0
- package/dist/core/shared-stores-location.d.ts +17 -0
- package/dist/core/shared-stores-location.d.ts.map +1 -0
- package/dist/core/shared-stores-location.js +22 -0
- package/dist/core/shared-stores-location.js.map +1 -0
- package/dist/core/shared-stores.d.ts +69 -0
- package/dist/core/shared-stores.d.ts.map +1 -0
- package/dist/core/shared-stores.js +100 -0
- package/dist/core/shared-stores.js.map +1 -0
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +14 -10
- package/dist/core/skills.js.map +1 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +122 -6
- package/dist/run.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/templates/agents/shared-stores.md +11 -0
- package/templates/approve/copies-missing.md +1 -0
- package/templates/approve/elsewhere-heading.md +1 -0
- package/templates/approve/elsewhere-intro.md +1 -0
- package/templates/approve/homed-elsewhere.md +1 -0
- package/templates/approve/not-decider.md +1 -0
- package/templates/approve/part-heading.md +1 -0
- package/templates/approve/parts-changed.md +1 -0
- package/templates/approve/session-decision-note.md +1 -0
- package/templates/approve/session-intro.md +1 -0
- package/templates/approve/session-no-decision.md +1 -0
- package/templates/approve/store-unreachable.md +1 -0
- package/templates/land/resolver.md +2 -0
- package/templates/second-opinion/poll-answer.md +7 -0
- package/templates/second-opinion/taste-panel.md +14 -0
- package/templates/session/pages/bare-route.md +2 -0
- package/templates/session/pages/block.md +8 -0
- package/templates/session/pages/condition-preview.md +1 -0
- package/templates/session/pages/condition.md +1 -0
- package/templates/session/pages/moved.md +1 -0
- package/templates/session/pages/stops-working.md +1 -0
- package/templates/session/pages/table-head-preview.md +2 -0
- package/templates/session/pages/table-head.md +2 -0
- package/templates/skills/ctxr-connection-finding.md +4 -1
- package/templates/skills/ctxr-land.md +26 -7
- package/templates/skills/ctxr-placement.md +10 -0
- package/templates/skills/ctxr-rollup.md +3 -0
- package/templates/skills/ctxr-second-opinion.md +52 -36
- package/templates/skills/ctxr-session-lifecycle.md +60 -33
- package/templates/skills/ctxr-submit.md +65 -56
- package/templates/skills/ctxr-second-opinion/run.mjs +0 -542
- /package/templates/{skills/ctxr-second-opinion → second-opinion}/critic-contract.md +0 -0
- /package/templates/{skills/ctxr-second-opinion → second-opinion}/lenses.md +0 -0
- /package/templates/{skills/ctxr-second-opinion → second-opinion}/personas/architect.md +0 -0
- /package/templates/{skills/ctxr-second-opinion → second-opinion}/personas/pragmatist.md +0 -0
- /package/templates/{skills/ctxr-second-opinion → second-opinion}/personas/skeptic.md +0 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { mountingStoreOf } from '../shared-stores.js';
|
|
2
|
+
import { githubRepositoryOf } from '../forge/credentials.js';
|
|
3
|
+
import { worktreeDirNameFor } from '../session.js';
|
|
4
|
+
import { marker, parseMarker } from './decision.js';
|
|
5
|
+
/**
|
|
6
|
+
* approve-sessions-across-stores (design.md D1, D2; the second critique's
|
|
7
|
+
* revisions 2 and 3): a session's identity is its home store's forge slug
|
|
8
|
+
* (`owner/repo`) and the home session's branch. It is derived from the
|
|
9
|
+
* session's own branch, worktree and repository alone — no identity file.
|
|
10
|
+
*
|
|
11
|
+
* A joined session (one started inside a mount with `ctxr session start
|
|
12
|
+
* --joins`) carries its home in its branch, `<prefix><owner>/<repo>/<home
|
|
13
|
+
* branch without its prefix>`, and in its worktree directory, where `/` cannot
|
|
14
|
+
* appear: `<prefix as a directory name><owner>--<repo>--<home branch without
|
|
15
|
+
* its prefix>`. A GitHub owner never contains `--`, and a generated session
|
|
16
|
+
* name never does, so the directory name splits back unambiguously. The
|
|
17
|
+
* directory keeps the identity after `ctxr session submit --branch` renames
|
|
18
|
+
* the branch.
|
|
19
|
+
*
|
|
20
|
+
* The pull request marker, appended by `ctxr session submit`, is what groups a
|
|
21
|
+
* session's pull requests across stores; branch names never are.
|
|
22
|
+
*/
|
|
23
|
+
export const SESSION_MARKER = 'ctxr-session';
|
|
24
|
+
const SLUG = /^[^/\s]+\/[^/\s]+$/;
|
|
25
|
+
const NO_SPACE = /^\S+$/;
|
|
26
|
+
/** One string per session, for grouping and comparison. Branches cannot contain `:`, so it is unambiguous. */
|
|
27
|
+
export function sessionKey(identity) {
|
|
28
|
+
return `${identity.home}:${identity.branch}`;
|
|
29
|
+
}
|
|
30
|
+
export function parseSessionKey(key) {
|
|
31
|
+
const at = key.lastIndexOf(':');
|
|
32
|
+
if (at <= 0)
|
|
33
|
+
return null;
|
|
34
|
+
const home = key.slice(0, at);
|
|
35
|
+
const branch = key.slice(at + 1);
|
|
36
|
+
return SLUG.test(home) && branch !== '' && NO_SPACE.test(branch) ? { home, branch } : null;
|
|
37
|
+
}
|
|
38
|
+
export function sessionsEqual(a, b) {
|
|
39
|
+
return a !== null && b !== null && a.home === b.home && a.branch === b.branch;
|
|
40
|
+
}
|
|
41
|
+
/** The marker `ctxr session submit` appends to a pull request body. */
|
|
42
|
+
export function sessionMarker(identity) {
|
|
43
|
+
return marker(SESSION_MARKER, { home: identity.home, branch: identity.branch });
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The session a pull request body names, or null — a body with no well-formed
|
|
47
|
+
* marker ending it is a session of its own (write-lifecycle spec). Like the
|
|
48
|
+
* decision marker, only a marker that ends the body counts.
|
|
49
|
+
*/
|
|
50
|
+
export function parseSessionMarker(body) {
|
|
51
|
+
const fields = parseMarker(SESSION_MARKER, body);
|
|
52
|
+
if (fields === null)
|
|
53
|
+
return null;
|
|
54
|
+
const { home, branch } = fields;
|
|
55
|
+
if (home === undefined || !SLUG.test(home) || branch === undefined || branch === '' || !NO_SPACE.test(branch))
|
|
56
|
+
return null;
|
|
57
|
+
return { home, branch };
|
|
58
|
+
}
|
|
59
|
+
/** Any session marker anywhere in `body`, well-formed or not — what `ctxr session submit` refuses in an agent's body. */
|
|
60
|
+
export function findSessionMarker(body) {
|
|
61
|
+
const found = new RegExp(`<!--\\s*${SESSION_MARKER}\\b[^>]*?-->`).exec(body);
|
|
62
|
+
return found === null ? null : found[0];
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The forge slug of a remote URL: GitHub's `owner/repo` for a github.com URL,
|
|
66
|
+
* and otherwise the URL's last two path segments without `.git` — the same
|
|
67
|
+
* shape for a mirror, a proxy, or a test's bare repository.
|
|
68
|
+
*/
|
|
69
|
+
export function forgeSlugOf(remoteUrl) {
|
|
70
|
+
const github = githubRepositoryOf(remoteUrl);
|
|
71
|
+
if (github !== null)
|
|
72
|
+
return github;
|
|
73
|
+
const segments = remoteUrl
|
|
74
|
+
.trim()
|
|
75
|
+
.replace(/\/+$/, '')
|
|
76
|
+
.replace(/\.git$/, '')
|
|
77
|
+
.split(/[/:\\]/)
|
|
78
|
+
.filter((s) => s !== '');
|
|
79
|
+
if (segments.length < 2)
|
|
80
|
+
return null;
|
|
81
|
+
const slug = `${segments[segments.length - 2]}/${segments[segments.length - 1]}`;
|
|
82
|
+
return SLUG.test(slug) ? slug : null;
|
|
83
|
+
}
|
|
84
|
+
/** The forge slug of the repository `cwd` is in, from its `origin`; null without one. */
|
|
85
|
+
export async function repositorySlug(git, cwd) {
|
|
86
|
+
const remote = await git.run(['remote', 'get-url', 'origin'], { cwd, allowFailure: true });
|
|
87
|
+
return remote.exitCode === 0 ? forgeSlugOf(remote.stdout) : null;
|
|
88
|
+
}
|
|
89
|
+
function withoutPrefix(branch, prefix) {
|
|
90
|
+
return branch.startsWith(prefix) ? branch.slice(prefix.length) : branch;
|
|
91
|
+
}
|
|
92
|
+
/** write-lifecycle spec: the joined session's branch — this store's prefix, the home slug, the home branch without its prefix. */
|
|
93
|
+
export function joinedBranchName(prefix, home, homePrefix) {
|
|
94
|
+
return `${prefix}${home.home}/${withoutPrefix(home.branch, homePrefix)}`;
|
|
95
|
+
}
|
|
96
|
+
/** The joined session's worktree directory name, which splits back into its home (see the module comment). */
|
|
97
|
+
export function joinedWorktreeName(prefix, home, homePrefix) {
|
|
98
|
+
const [owner, repo] = home.home.split('/');
|
|
99
|
+
return `${worktreeDirNameFor(prefix)}${owner}--${repo}--${worktreeDirNameFor(withoutPrefix(home.branch, homePrefix))}`;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* A session's identity, derived from its worktree and branch alone. The
|
|
103
|
+
* worktree name decides first, because `ctxr session submit --branch` can
|
|
104
|
+
* rename the branch to anything, including a name shaped like a joined one,
|
|
105
|
+
* while the worktree keeps the name it was started with: a joined worktree
|
|
106
|
+
* name carries its home, and any other session worktree is its own home. Only
|
|
107
|
+
* a worktree whose name ctxr did not give falls back to the branch.
|
|
108
|
+
*/
|
|
109
|
+
export function sessionIdentityFor(input) {
|
|
110
|
+
const dirPrefix = worktreeDirNameFor(input.prefix);
|
|
111
|
+
if (input.worktreeName.startsWith(dirPrefix) && input.worktreeName.length > dirPrefix.length) {
|
|
112
|
+
const rest = input.worktreeName.slice(dirPrefix.length);
|
|
113
|
+
const first = rest.indexOf('--');
|
|
114
|
+
const last = rest.lastIndexOf('--');
|
|
115
|
+
if (first > 0 && last > first + 2 && last + 2 < rest.length) {
|
|
116
|
+
return { home: `${rest.slice(0, first)}/${rest.slice(first + 2, last)}`, branch: `${input.homePrefix}${rest.slice(last + 2)}` };
|
|
117
|
+
}
|
|
118
|
+
if (input.ownSlug === null)
|
|
119
|
+
return null;
|
|
120
|
+
return { home: input.ownSlug, branch: `${input.prefix}${rest}` };
|
|
121
|
+
}
|
|
122
|
+
if (input.branch.startsWith(input.prefix)) {
|
|
123
|
+
const joined = /^([^/]+)\/([^/]+)\/(.+)$/.exec(input.branch.slice(input.prefix.length));
|
|
124
|
+
if (joined !== null)
|
|
125
|
+
return { home: `${joined[1]}/${joined[2]}`, branch: `${input.homePrefix}${joined[3]}` };
|
|
126
|
+
}
|
|
127
|
+
if (input.ownSlug === null)
|
|
128
|
+
return null;
|
|
129
|
+
return { home: input.ownSlug, branch: input.branch };
|
|
130
|
+
}
|
|
131
|
+
/** The identity of the session checked out in `worktreePath`, reading only its repository and, for a mount, the mounting store's configuration. */
|
|
132
|
+
export async function identityOfWorktree(git, config, worktreePath, worktreeName, branch) {
|
|
133
|
+
const mounting = await mountingStoreOf(worktreePath);
|
|
134
|
+
return sessionIdentityFor({
|
|
135
|
+
prefix: config.session.branch_prefix,
|
|
136
|
+
homePrefix: mounting?.config.session.branch_prefix ?? config.session.branch_prefix,
|
|
137
|
+
ownSlug: await repositorySlug(git, worktreePath),
|
|
138
|
+
worktreeName,
|
|
139
|
+
branch,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/** The approval route name of a session homed in a store: its home branch as a worktree directory name. */
|
|
143
|
+
export function sessionRouteName(identity) {
|
|
144
|
+
return worktreeDirNameFor(identity.branch);
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=session-marker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-marker.js","sourceRoot":"","sources":["../../../src/core/approval/session-marker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { RunEnv } from '../env.js';
|
|
2
|
+
import { type ForgeClient } from '../forge/github.js';
|
|
3
|
+
import type { ForgeFor } from './session-group.js';
|
|
4
|
+
/**
|
|
5
|
+
* approve-sessions-across-stores (proposal Impact): every store a session
|
|
6
|
+
* touches is read and written with the same recording identity — the same
|
|
7
|
+
* credential source, addressed at the mount's own repository through its
|
|
8
|
+
* clone's `origin`. `CONTEXTURE_GITHUB_REPOSITORY` names the home store's
|
|
9
|
+
* repository only, so it is not passed on to a mount.
|
|
10
|
+
*
|
|
11
|
+
* When a command was handed a forge client (a test's), mounts get a plain
|
|
12
|
+
* `gh` client in their own clone, so they are still addressed by their origin.
|
|
13
|
+
*/
|
|
14
|
+
export declare function storeForges(env: Pick<RunEnv, 'env' | 'git' | 'now'>, injected?: ForgeClient): ForgeFor;
|
|
15
|
+
//# sourceMappingURL=store-forges.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-forges.d.ts","sourceRoot":"","sources":["../../../src/core/approval/store-forges.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,EAAE,QAAQ,CAAC,EAAE,WAAW,GAAG,QAAQ,CAmBtG"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { APP_REPOSITORY_VAR, credentialsFor, ghCredentials } from '../forge/credentials.js';
|
|
2
|
+
import { createGhForgeClient } from '../forge/github.js';
|
|
3
|
+
/**
|
|
4
|
+
* approve-sessions-across-stores (proposal Impact): every store a session
|
|
5
|
+
* touches is read and written with the same recording identity — the same
|
|
6
|
+
* credential source, addressed at the mount's own repository through its
|
|
7
|
+
* clone's `origin`. `CONTEXTURE_GITHUB_REPOSITORY` names the home store's
|
|
8
|
+
* repository only, so it is not passed on to a mount.
|
|
9
|
+
*
|
|
10
|
+
* When a command was handed a forge client (a test's), mounts get a plain
|
|
11
|
+
* `gh` client in their own clone, so they are still addressed by their origin.
|
|
12
|
+
*/
|
|
13
|
+
export function storeForges(env, injected) {
|
|
14
|
+
const cache = new Map();
|
|
15
|
+
return (root, mount) => {
|
|
16
|
+
let client = cache.get(root);
|
|
17
|
+
if (client === undefined) {
|
|
18
|
+
client = (async () => {
|
|
19
|
+
if (injected !== undefined) {
|
|
20
|
+
const credentials = ghCredentials(env.env);
|
|
21
|
+
return { forge: createGhForgeClient(root, credentials), credentials };
|
|
22
|
+
}
|
|
23
|
+
const scoped = mount ? { ...env, env: { ...env.env, [APP_REPOSITORY_VAR]: undefined } } : env;
|
|
24
|
+
const credentials = await credentialsFor(scoped, root);
|
|
25
|
+
return { forge: createGhForgeClient(root, credentials), credentials };
|
|
26
|
+
})();
|
|
27
|
+
cache.set(root, client);
|
|
28
|
+
client.catch(() => cache.delete(root));
|
|
29
|
+
}
|
|
30
|
+
return client;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=store-forges.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-forges.js","sourceRoot":"","sources":["../../../src/core/approval/store-forges.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,aAAa,EAAyB,MAAM,yBAAyB,CAAC;AACnH,OAAO,EAAE,mBAAmB,EAAoB,MAAM,oBAAoB,CAAC;AAG3E;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAAC,GAAwC,EAAE,QAAsB;IAC1F,MAAM,KAAK,GAAG,IAAI,GAAG,EAA0E,CAAC;IAChG,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACrB,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;gBACnB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAC3B,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC3C,OAAO,EAAE,KAAK,EAAE,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC;gBACxE,CAAC;gBACD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC9F,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACvD,OAAO,EAAE,KAAK,EAAE,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC;YACxE,CAAC,CAAC,EAAE,CAAC;YACL,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { IncomingMessage } from 'node:http';
|
|
2
2
|
import type { ChangeApprovalConfig } from '../../config/schema.js';
|
|
3
3
|
import type { IdentityVerifier } from '../approval/identity.js';
|
|
4
|
+
import { type ForgeFor } from '../approval/session-group.js';
|
|
4
5
|
import type { ForgeCredentials } from '../forge/credentials.js';
|
|
5
6
|
import type { ForgeClient } from '../forge/github.js';
|
|
6
7
|
import type { GitRunner } from '../git/exec.js';
|
|
@@ -24,6 +25,13 @@ export interface ApprovalServer {
|
|
|
24
25
|
verifier: IdentityVerifier;
|
|
25
26
|
git: GitRunner;
|
|
26
27
|
now(): Date;
|
|
28
|
+
/**
|
|
29
|
+
* approve-sessions-across-stores D8: the forge client and credential for a mounted store's clone, with the same
|
|
30
|
+
* recording identity. Omitted, mounts are read with `gh`'s own credential in their clone.
|
|
31
|
+
*/
|
|
32
|
+
forgeFor?: ForgeFor;
|
|
33
|
+
/** The process environment, for an authenticated fetch of a mounted part's head and for a mount's forge calls. */
|
|
34
|
+
env?: Readonly<Record<string, string | undefined>>;
|
|
27
35
|
}
|
|
28
36
|
/** What a route needs from the browsing surface once the requester is known: the shell, and note links. */
|
|
29
37
|
export interface PageKit {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approve.d.ts","sourceRoot":"","sources":["../../../src/core/browse/approve.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAInE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"approve.d.ts","sourceRoot":"","sources":["../../../src/core/browse/approve.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAInE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,OAAO,EAQL,KAAK,QAAQ,EAOd,MAAM,8BAA8B,CAAC;AAOtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,oBAAoB,CAAC;AAEnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAA8B,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAO5E;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,cAAc,CAAC;AAOhD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,oGAAoG;IACpG,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;IACnB,qHAAqH;IACrH,WAAW,EAAE,gBAAgB,CAAC;IAC9B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,GAAG,EAAE,SAAS,CAAC;IACf,GAAG,IAAI,IAAI,CAAC;IACZ;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,kHAAkH;IAClH,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;CACpD;AAED,2GAA2G;AAC3G,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACzC,WAAW,EAAE,YAAY,CAAC;CAC3B;AAED,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,mGAAmG;IACnG,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAQD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEzD;AAqmBD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,cAAc,GAAG,IAAI,EAC7B,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,EAC/B,WAAW,GAAE,MAAM,GAAG,IAAW,GAChC,OAAO,CAAC,KAAK,CAAC,CAkBhB"}
|