ctxr-cli 0.36.0 → 0.38.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 +21 -201
- package/README.md +28 -12
- package/dist/commands/land.d.ts +5 -0
- package/dist/commands/land.d.ts.map +1 -1
- package/dist/commands/land.js +12 -3
- package/dist/commands/land.js.map +1 -1
- package/dist/commands/plugin-build.d.ts +21 -11
- package/dist/commands/plugin-build.d.ts.map +1 -1
- package/dist/commands/plugin-build.js +45 -24
- package/dist/commands/plugin-build.js.map +1 -1
- package/dist/commands/review-list.d.ts +5 -1
- package/dist/commands/review-list.d.ts.map +1 -1
- package/dist/commands/review-list.js +2 -2
- package/dist/commands/review-list.js.map +1 -1
- package/dist/commands/second-opinion.d.ts +6 -2
- package/dist/commands/second-opinion.d.ts.map +1 -1
- package/dist/commands/second-opinion.js.map +1 -1
- package/dist/commands/serve.d.ts +2 -0
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +1 -1
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/session-list.d.ts +2 -0
- package/dist/commands/session-list.d.ts.map +1 -1
- package/dist/commands/session-list.js +1 -1
- package/dist/commands/session-list.js.map +1 -1
- package/dist/commands/session-start.d.ts.map +1 -1
- package/dist/commands/session-start.js +2 -1
- package/dist/commands/session-start.js.map +1 -1
- package/dist/commands/session-submit.d.ts +9 -1
- package/dist/commands/session-submit.d.ts.map +1 -1
- package/dist/commands/session-submit.js +1 -1
- package/dist/commands/session-submit.js.map +1 -1
- package/dist/commands/shared-stores-status.d.ts +9 -1
- package/dist/commands/shared-stores-status.d.ts.map +1 -1
- package/dist/commands/shared-stores-status.js +13 -7
- package/dist/commands/shared-stores-status.js.map +1 -1
- package/dist/commands/shared-stores-sync.d.ts +13 -0
- package/dist/commands/shared-stores-sync.d.ts.map +1 -1
- package/dist/commands/shared-stores-sync.js +60 -13
- package/dist/commands/shared-stores-sync.js.map +1 -1
- package/dist/commands/sync.d.ts +3 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +9 -7
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +8 -5
- package/dist/commands/update.js.map +1 -1
- package/dist/core/approval/session-group.d.ts +10 -1
- package/dist/core/approval/session-group.d.ts.map +1 -1
- package/dist/core/approval/session-group.js +4 -0
- package/dist/core/approval/session-group.js.map +1 -1
- package/dist/core/command.d.ts +5 -3
- package/dist/core/command.d.ts.map +1 -1
- package/dist/core/errors.d.ts +9 -0
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +11 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/core/forge/credentials.d.ts +23 -3
- package/dist/core/forge/credentials.d.ts.map +1 -1
- package/dist/core/forge/credentials.js +99 -5
- package/dist/core/forge/credentials.js.map +1 -1
- package/dist/core/forge/github.d.ts +2 -0
- package/dist/core/forge/github.d.ts.map +1 -1
- package/dist/core/forge/github.js +1 -0
- package/dist/core/forge/github.js.map +1 -1
- package/dist/core/git/worktree.d.ts +6 -1
- package/dist/core/git/worktree.d.ts.map +1 -1
- package/dist/core/git/worktree.js +7 -2
- package/dist/core/git/worktree.js.map +1 -1
- package/dist/core/mcp/surface.js +1 -1
- package/dist/core/mcp/surface.js.map +1 -1
- package/dist/core/mcp/sync.d.ts +4 -1
- package/dist/core/mcp/sync.d.ts.map +1 -1
- package/dist/core/mcp/sync.js +6 -5
- package/dist/core/mcp/sync.js.map +1 -1
- package/dist/core/mcp/tool-map.d.ts +25 -12
- package/dist/core/mcp/tool-map.d.ts.map +1 -1
- package/dist/core/mcp/tool-map.js +28 -11
- package/dist/core/mcp/tool-map.js.map +1 -1
- package/dist/core/mcp/tools/cli.d.ts +6 -0
- package/dist/core/mcp/tools/cli.d.ts.map +1 -1
- package/dist/core/mcp/tools/cli.js +77 -4
- package/dist/core/mcp/tools/cli.js.map +1 -1
- package/dist/core/mcp/tools/gather.d.ts.map +1 -1
- package/dist/core/mcp/tools/gather.js +5 -4
- package/dist/core/mcp/tools/gather.js.map +1 -1
- package/dist/core/mcp/tools/index.d.ts +11 -1
- package/dist/core/mcp/tools/index.d.ts.map +1 -1
- package/dist/core/mcp/tools/index.js +21 -4
- package/dist/core/mcp/tools/index.js.map +1 -1
- package/dist/core/plugin/build.d.ts +53 -26
- package/dist/core/plugin/build.d.ts.map +1 -1
- package/dist/core/plugin/build.js +153 -50
- package/dist/core/plugin/build.js.map +1 -1
- package/dist/core/plugin/commands.d.ts +11 -0
- package/dist/core/plugin/commands.d.ts.map +1 -0
- package/dist/core/plugin/commands.js +25 -0
- package/dist/core/plugin/commands.js.map +1 -0
- package/dist/core/plugin/routes.d.ts +11 -7
- package/dist/core/plugin/routes.d.ts.map +1 -1
- package/dist/core/plugin/routes.js +27 -24
- package/dist/core/plugin/routes.js.map +1 -1
- package/dist/core/second-opinion/confine.d.ts +50 -0
- package/dist/core/second-opinion/confine.d.ts.map +1 -0
- package/dist/core/second-opinion/confine.js +162 -0
- package/dist/core/second-opinion/confine.js.map +1 -0
- package/dist/core/second-opinion/launch.d.ts +6 -1
- package/dist/core/second-opinion/launch.d.ts.map +1 -1
- package/dist/core/second-opinion/launch.js +31 -3
- package/dist/core/second-opinion/launch.js.map +1 -1
- package/dist/core/second-opinion/lineup.d.ts +11 -0
- package/dist/core/second-opinion/lineup.d.ts.map +1 -1
- package/dist/core/second-opinion/lineup.js +15 -0
- package/dist/core/second-opinion/lineup.js.map +1 -1
- package/dist/core/second-opinion/modes.d.ts +19 -2
- package/dist/core/second-opinion/modes.d.ts.map +1 -1
- package/dist/core/second-opinion/modes.js +103 -29
- package/dist/core/second-opinion/modes.js.map +1 -1
- package/dist/core/session/start.d.ts +2 -2
- package/dist/core/session/submit.d.ts.map +1 -1
- package/dist/core/session/submit.js +6 -3
- package/dist/core/session/submit.js.map +1 -1
- package/dist/core/shared-stores.d.ts +5 -0
- package/dist/core/shared-stores.d.ts.map +1 -1
- package/dist/core/shared-stores.js +10 -0
- package/dist/core/shared-stores.js.map +1 -1
- package/dist/core/skill-placeholders.d.ts +51 -0
- package/dist/core/skill-placeholders.d.ts.map +1 -0
- package/dist/core/skill-placeholders.js +55 -0
- package/dist/core/skill-placeholders.js.map +1 -0
- package/dist/core/skills.d.ts +38 -14
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +81 -91
- package/dist/core/skills.js.map +1 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +29 -7
- package/dist/run.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -2
- package/templates/mcp/ctxr.md +1 -0
- package/templates/mcp/server-instructions.md +16 -0
- package/templates/plugin/README.md +30 -8
- package/templates/plugin/chatgpt-README.md +16 -0
- package/templates/plugin/claude-plugin.json +9 -1
- package/templates/plugin/command.md +7 -0
- package/templates/plugin/page.html +19 -8
- package/templates/second-opinion/critic-contract.md +2 -1
- package/templates/skills/_surfaces.md +30 -0
- package/templates/skills/ctxr-placement.md +1 -1
- package/templates/skills/ctxr-second-opinion.md +34 -13
- package/templates/skills/ctxr-session-lifecycle.md +6 -5
- package/templates/skills/mcp/_layer-step.md +18 -0
- package/templates/skills/mcp/_relation-grouping-step.md +5 -0
- package/templates/plugin/claude-mcp.json +0 -8
- package/templates/skills/mcp/_preamble.md +0 -44
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { CommandOutcome, CommandRequires } from '../core/command.js';
|
|
2
2
|
import type { RunEnv } from '../core/env.js';
|
|
3
|
+
import type { CredentialKind } from '../core/forge/credentials.js';
|
|
3
4
|
import type { Store } from '../core/store.js';
|
|
4
5
|
export declare const requires: CommandRequires;
|
|
5
6
|
export interface MountStatus {
|
|
@@ -15,10 +16,17 @@ export interface MountStatus {
|
|
|
15
16
|
commit: string | null;
|
|
16
17
|
/** Uncommitted changes to tracked files; null when there is no clone to ask. */
|
|
17
18
|
dirty: boolean | null;
|
|
19
|
+
/**
|
|
20
|
+
* reach-each-owner-with-its-own-token D7: the forge credential the mount's repository resolves to, as
|
|
21
|
+
* `shared-stores sync` would use it — resolved offline, never the credential itself.
|
|
22
|
+
*/
|
|
23
|
+
credential: CredentialKind;
|
|
24
|
+
/** For `owner-token`, the GitHub owner whose token it is; null otherwise. */
|
|
25
|
+
credential_owner: string | null;
|
|
18
26
|
}
|
|
19
27
|
export interface SharedStoresStatusData {
|
|
20
28
|
mounts: MountStatus[];
|
|
21
29
|
}
|
|
22
|
-
/** shared-stores spec: each mount's state, from the filesystem and local git only — no writes, no network. */
|
|
30
|
+
/** shared-stores spec: each mount's state and credential, from the filesystem, the environment and local git only — no writes, no network. */
|
|
23
31
|
export declare function execute(env: RunEnv, store: Store): Promise<CommandOutcome<SharedStoresStatusData>>;
|
|
24
32
|
//# sourceMappingURL=shared-stores-status.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-stores-status.d.ts","sourceRoot":"","sources":["../../src/commands/shared-stores-status.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"shared-stores-status.d.ts","sourceRoot":"","sources":["../../src/commands/shared-stores-status.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAG9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,OAAO,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gFAAgF;IAChF,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACtB;;;OAGG;IACH,UAAU,EAAE,cAAc,CAAC;IAC3B,6EAA6E;IAC7E,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAuCD,8IAA8I;AAC9I,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC,CAYxG"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { ExitCode } from '../core/exit-codes.js';
|
|
4
|
-
import { resolveMounts } from '../core/shared-stores.js';
|
|
4
|
+
import { mainWorkingTreeRoot, resolveMounts } from '../core/shared-stores.js';
|
|
5
|
+
import { mountCredentials } from './shared-stores-sync.js';
|
|
5
6
|
export const requires = { store: 'required' };
|
|
6
|
-
async function statusOf(env, mount) {
|
|
7
|
-
|
|
7
|
+
async function statusOf(env, mount, storeRoot) {
|
|
8
|
+
// Resolving a credential reads the environment, a token file and `origin`; it makes no forge call.
|
|
9
|
+
const credentials = await mountCredentials(env, mount, storeRoot);
|
|
10
|
+
const base = { name: mount.name, location: mount.location, url: mount.url, credential: credentials.kind, credential_owner: credentials.owner };
|
|
8
11
|
if (mount.state === 'absent') {
|
|
9
12
|
return { ...base, present: false, isStore: false, reason: null, branch: null, commit: null, dirty: null };
|
|
10
13
|
}
|
|
@@ -26,19 +29,22 @@ async function statusOf(env, mount) {
|
|
|
26
29
|
dirty,
|
|
27
30
|
};
|
|
28
31
|
}
|
|
32
|
+
function credentialText(status) {
|
|
33
|
+
return `credential ${status.credential}${status.credential_owner === null ? '' : ` for ${status.credential_owner}`}`;
|
|
34
|
+
}
|
|
29
35
|
function line(status) {
|
|
30
36
|
if (!status.present)
|
|
31
|
-
return `${status.location}: absent (run \`ctxr shared-stores sync\` to clone it)`;
|
|
37
|
+
return `${status.location}: absent (run \`ctxr shared-stores sync\` to clone it), ${credentialText(status)}`;
|
|
32
38
|
const where = status.commit ? ` on ${status.branch ?? 'a detached HEAD'} at ${status.commit.slice(0, 7)}` : '';
|
|
33
39
|
const store = status.isStore ? '' : `, not a store (${status.reason})`;
|
|
34
|
-
return `${status.location}: present${where}${status.dirty ? ', with uncommitted changes' : ''}${store}`;
|
|
40
|
+
return `${status.location}: present${where}${status.dirty ? ', with uncommitted changes' : ''}${store}, ${credentialText(status)}`;
|
|
35
41
|
}
|
|
36
|
-
/** shared-stores spec: each mount's state, from the filesystem and local git only — no writes, no network. */
|
|
42
|
+
/** shared-stores spec: each mount's state and credential, from the filesystem, the environment and local git only — no writes, no network. */
|
|
37
43
|
export async function execute(env, store) {
|
|
38
44
|
const mounts = await resolveMounts(store.root, store.config);
|
|
39
45
|
const statuses = [];
|
|
40
46
|
for (const mount of mounts)
|
|
41
|
-
statuses.push(await statusOf(env, mount));
|
|
47
|
+
statuses.push(await statusOf(env, mount, mainWorkingTreeRoot(store.root)));
|
|
42
48
|
return {
|
|
43
49
|
exitCode: ExitCode.Ok,
|
|
44
50
|
data: { mounts: statuses },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-stores-status.js","sourceRoot":"","sources":["../../src/commands/shared-stores-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"shared-stores-status.js","sourceRoot":"","sources":["../../src/commands/shared-stores-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { CommandOutcome, CommandRequires } from '../core/command.js';
|
|
2
2
|
import type { RunEnv } from '../core/env.js';
|
|
3
|
+
import { type CredentialKind, type ForgeCredentials } from '../core/forge/credentials.js';
|
|
4
|
+
import { type MountState } from '../core/shared-stores.js';
|
|
3
5
|
import type { Store } from '../core/store.js';
|
|
4
6
|
export declare const requires: CommandRequires;
|
|
5
7
|
export type MountSyncOutcome = 'cloned' | 'fast_forwarded' | 'current' | 'left_alone' | 'failed';
|
|
@@ -11,12 +13,23 @@ export interface MountSyncResult {
|
|
|
11
13
|
to: string | null;
|
|
12
14
|
/** Why the mount was left alone or failed; null otherwise. */
|
|
13
15
|
reason: string | null;
|
|
16
|
+
/** Which kind of forge credential the clone or fetch used; never the credential (reach-each-owner-with-its-own-token D7). */
|
|
17
|
+
credential: CredentialKind;
|
|
18
|
+
/** For `owner-token`, the GitHub owner whose token was used; null otherwise. */
|
|
19
|
+
credential_owner: string | null;
|
|
14
20
|
}
|
|
15
21
|
export interface SharedStoresSyncData {
|
|
16
22
|
mounts: MountSyncResult[];
|
|
17
23
|
/** Whether this run added the `shared/` entry to the repository's local exclude file. */
|
|
18
24
|
excludeAdded: boolean;
|
|
19
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* reach-each-owner-with-its-own-token D2, D4: the mounted repository's forge
|
|
28
|
+
* credential — from its clone's `origin`, or from the declared URL while there
|
|
29
|
+
* is no clone. `CONTEXTURE_GITHUB_REPOSITORY` names the home store's repository
|
|
30
|
+
* only, so it is not passed on to a mount (as `storeForges` does).
|
|
31
|
+
*/
|
|
32
|
+
export declare function mountCredentials(env: RunEnv, mount: MountState, storeRoot: string): Promise<ForgeCredentials>;
|
|
20
33
|
/**
|
|
21
34
|
* shared-stores spec: clone each declared mount that is absent, fast-forward
|
|
22
35
|
* each present one when that is safe, and report every mount. A mount with
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-stores-sync.d.ts","sourceRoot":"","sources":["../../src/commands/shared-stores-sync.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"shared-stores-sync.d.ts","sourceRoot":"","sources":["../../src/commands/shared-stores-sync.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAI7C,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACtB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAyD,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAClH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,gBAAgB,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,CAAC;AAEjG,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,8DAA8D;IAC9D,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,6HAA6H;IAC7H,UAAU,EAAE,cAAc,CAAC;IAC3B,gFAAgF;IAChF,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,yFAAyF;IACzF,YAAY,EAAE,OAAO,CAAC;CACvB;AAuCD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAG7G;AAqED;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC,CA6BtG"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
2
|
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
3
3
|
import path from 'node:path';
|
|
4
|
+
import { ContextureError } from '../core/errors.js';
|
|
4
5
|
import { ExitCode } from '../core/exit-codes.js';
|
|
6
|
+
import { APP_REPOSITORY_VAR, credentialsFor, githubOwnerOf, OWNER_TOKENS_DIR_VAR, runRemoteGit, } from '../core/forge/credentials.js';
|
|
5
7
|
import { fastForwardIfSafe } from '../core/git/fast-forward.js';
|
|
6
8
|
import { mainWorkingTreeRoot, resolveMounts, SHARED_STORES_DIR } from '../core/shared-stores.js';
|
|
7
9
|
export const requires = { store: 'required' };
|
|
@@ -39,24 +41,65 @@ async function mountDefaultBranch(env, mount) {
|
|
|
39
41
|
const ref = remoteHead.stdout.trim();
|
|
40
42
|
return remoteHead.exitCode === 0 && ref.startsWith('origin/') ? ref.slice('origin/'.length) : null;
|
|
41
43
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
+
function isClone(mount) {
|
|
45
|
+
return mount.state !== 'absent' && existsSync(path.join(mount.root, '.git'));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* reach-each-owner-with-its-own-token D2, D4: the mounted repository's forge
|
|
49
|
+
* credential — from its clone's `origin`, or from the declared URL while there
|
|
50
|
+
* is no clone. `CONTEXTURE_GITHUB_REPOSITORY` names the home store's repository
|
|
51
|
+
* only, so it is not passed on to a mount (as `storeForges` does).
|
|
52
|
+
*/
|
|
53
|
+
export function mountCredentials(env, mount, storeRoot) {
|
|
54
|
+
const scoped = { ...env, env: { ...env.env, [APP_REPOSITORY_VAR]: undefined } };
|
|
55
|
+
return isClone(mount) ? credentialsFor(scoped, mount.root) : credentialsFor(scoped, storeRoot, mount.url);
|
|
56
|
+
}
|
|
57
|
+
/** git's ways of saying the forge refused the credential: HTTP 401 or 403, or GitHub's answer for a repository it will not show. */
|
|
58
|
+
const REFUSED = /\b40[13]\b|Authentication failed|Repository not found|could not read Username|Invalid username or password|Permission to \S+ denied/i;
|
|
59
|
+
/**
|
|
60
|
+
* Why a clone or fetch failed: git's first line, and, when the forge refused
|
|
61
|
+
* the credential for a github.com repository, the owner, the credential kind
|
|
62
|
+
* used, and where that owner's token goes (reach-each-owner-with-its-own-token
|
|
63
|
+
* D7). Never the token.
|
|
64
|
+
*/
|
|
65
|
+
function failureReason(step, result, mount, credentials) {
|
|
66
|
+
const reason = `git ${step} failed: ${result.stderr.trim().split('\n')[0] ?? ''}`;
|
|
67
|
+
const owner = credentials.owner ?? githubOwnerOf(mount.url);
|
|
68
|
+
if (owner === null || !REFUSED.test(result.stderr))
|
|
69
|
+
return reason;
|
|
70
|
+
return `${reason}; the forge refused the ${credentials.kind} credential for GitHub owner ${owner}. A token for ${owner} goes in a file named ${owner} in the directory ${OWNER_TOKENS_DIR_VAR} names.`;
|
|
71
|
+
}
|
|
72
|
+
/** A clone or fetch through the mount's credential; a credential that cannot be had (an App not installed there) is a failure like a refused one. */
|
|
73
|
+
async function remote(env, credentials, args, cwd) {
|
|
74
|
+
try {
|
|
75
|
+
return await runRemoteGit(env.git, credentials, env.env, args, { cwd, allowFailure: true });
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
if (!(err instanceof ContextureError))
|
|
79
|
+
throw err;
|
|
80
|
+
return { error: err.message };
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async function syncMount(env, mount, credentials) {
|
|
84
|
+
const base = { name: mount.name, location: mount.location, credential: credentials.kind, credential_owner: credentials.owner };
|
|
44
85
|
if (mount.state === 'absent') {
|
|
45
86
|
await mkdir(path.dirname(mount.root), { recursive: true });
|
|
46
|
-
const cloned = await env
|
|
47
|
-
if (
|
|
48
|
-
return { ...base, outcome: 'failed', from: null, to: null, reason: `git clone failed: ${cloned.
|
|
49
|
-
|
|
87
|
+
const cloned = await remote(env, credentials, ['clone', '--quiet', mount.url, mount.root], path.dirname(mount.root));
|
|
88
|
+
if ('error' in cloned)
|
|
89
|
+
return { ...base, outcome: 'failed', from: null, to: null, reason: `git clone failed: ${cloned.error}` };
|
|
90
|
+
if (cloned.exitCode !== 0)
|
|
91
|
+
return { ...base, outcome: 'failed', from: null, to: null, reason: failureReason('clone', cloned, mount, credentials) };
|
|
50
92
|
const head = await env.git.run(['rev-parse', 'HEAD'], { cwd: mount.root, allowFailure: true });
|
|
51
93
|
return { ...base, outcome: 'cloned', from: null, to: head.exitCode === 0 ? head.stdout.trim() : null, reason: null };
|
|
52
94
|
}
|
|
53
|
-
if (!
|
|
95
|
+
if (!isClone(mount)) {
|
|
54
96
|
return { ...base, outcome: 'left_alone', from: null, to: null, reason: `${mount.location} exists but is not a git clone` };
|
|
55
97
|
}
|
|
56
|
-
const fetched = await env
|
|
57
|
-
if (
|
|
58
|
-
return { ...base, outcome: 'failed', from: null, to: null, reason: `git fetch failed: ${fetched.
|
|
59
|
-
|
|
98
|
+
const fetched = await remote(env, credentials, ['fetch', '--quiet', 'origin'], mount.root);
|
|
99
|
+
if ('error' in fetched)
|
|
100
|
+
return { ...base, outcome: 'failed', from: null, to: null, reason: `git fetch failed: ${fetched.error}` };
|
|
101
|
+
if (fetched.exitCode !== 0)
|
|
102
|
+
return { ...base, outcome: 'failed', from: null, to: null, reason: failureReason('fetch', fetched, mount, credentials) };
|
|
60
103
|
const branch = await mountDefaultBranch(env, mount);
|
|
61
104
|
if (branch === null) {
|
|
62
105
|
return { ...base, outcome: 'left_alone', from: null, to: null, reason: 'its default branch could not be determined' };
|
|
@@ -89,10 +132,14 @@ function line(result) {
|
|
|
89
132
|
export async function execute(env, store) {
|
|
90
133
|
const mainRoot = mainWorkingTreeRoot(store.root);
|
|
91
134
|
const mounts = await resolveMounts(store.root, store.config);
|
|
135
|
+
// reach-each-owner-with-its-own-token D5: an unusable owner token setup is refused before any git command runs.
|
|
136
|
+
const credentials = [];
|
|
137
|
+
for (const mount of mounts)
|
|
138
|
+
credentials.push(await mountCredentials(env, mount, mainRoot));
|
|
92
139
|
const excludeAdded = mounts.length > 0 ? await ensureLocalExclude(env, mainRoot) : false;
|
|
93
140
|
const results = [];
|
|
94
|
-
for (const mount of mounts)
|
|
95
|
-
results.push(await syncMount(env, mount));
|
|
141
|
+
for (const [i, mount] of mounts.entries())
|
|
142
|
+
results.push(await syncMount(env, mount, credentials[i]));
|
|
96
143
|
const findings = [];
|
|
97
144
|
for (const result of results) {
|
|
98
145
|
if (result.outcome === 'left_alone') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-stores-sync.js","sourceRoot":"","sources":["../../src/commands/shared-stores-sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,iBAAiB,EAAmB,MAAM,0BAA0B,CAAC;AAGlH,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"shared-stores-sync.js","sourceRoot":"","sources":["../../src/commands/shared-stores-sync.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/sync.d.ts
CHANGED
|
@@ -12,6 +12,8 @@ export interface SyncFlags {
|
|
|
12
12
|
export interface SyncData {
|
|
13
13
|
/** Which kind of forge credential the fetch used; never the credential. */
|
|
14
14
|
credential: CredentialKind | null;
|
|
15
|
+
/** For `owner-token`, the GitHub owner whose token the fetch used; null otherwise (reach-each-owner-with-its-own-token D7). */
|
|
16
|
+
credential_owner: string | null;
|
|
15
17
|
/** The canonical sync, reported as `ctxr land` reports it; null when another landing held the lock. */
|
|
16
18
|
canonical_sync: FastForwardOutcome | null;
|
|
17
19
|
/** `--every` only: the minutes between rounds. */
|
|
@@ -25,6 +27,7 @@ export interface RoundReport {
|
|
|
25
27
|
lines: string[];
|
|
26
28
|
canonical: FastForwardOutcome | null;
|
|
27
29
|
credential: CredentialKind | null;
|
|
30
|
+
credentialOwner: string | null;
|
|
28
31
|
mounts: sharedStoresSyncCommand.MountSyncResult[];
|
|
29
32
|
}
|
|
30
33
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAI7C,OAAO,EAAgC,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACjG,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAI1F,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,uBAAuB,MAAM,yBAAyB,CAAC;AAEnE,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,SAAS;IACxB,2FAA2F;IAC3F,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,2EAA2E;IAC3E,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;IAClC,uGAAuG;IACvG,cAAc,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC1C,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gGAAgG;IAChG,MAAM,CAAC,EAAE,uBAAuB,CAAC,eAAe,EAAE,CAAC;CACpD;AA0ED,MAAM,WAAW,WAAW;IAC1B,8FAA8F;IAC9F,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACrC,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;IAClC,MAAM,EAAE,uBAAuB,CAAC,eAAe,EAAE,CAAC;CACnD;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAI7C,OAAO,EAAgC,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACjG,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAI1F,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,uBAAuB,MAAM,yBAAyB,CAAC;AAEnE,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,SAAS;IACxB,2FAA2F;IAC3F,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,2EAA2E;IAC3E,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;IAClC,+HAA+H;IAC/H,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,uGAAuG;IACvG,cAAc,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC1C,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gGAAgG;IAChG,MAAM,CAAC,EAAE,uBAAuB,CAAC,eAAe,EAAE,CAAC;CACpD;AA0ED,MAAM,WAAW,WAAW;IAC1B,8FAA8F;IAC9F,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACrC,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;IAClC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,uBAAuB,CAAC,eAAe,EAAE,CAAC;CACnD;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAsC/E;AAED,MAAM,WAAW,QAAQ;IACvB,qFAAqF;IACrF,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAAE,YAAY,SAAa,GAAG,QAAQ,CAgC/I;AAiBD,wBAAsB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAE,SAAc,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAMvH"}
|
package/dist/commands/sync.js
CHANGED
|
@@ -27,8 +27,8 @@ async function canonicalRound(env, store) {
|
|
|
27
27
|
const branch = store.config.git.default_branch;
|
|
28
28
|
const result = await syncCanonicalClone(() => runRemoteGit(env.git, credentials, env.env, ['fetch', '--quiet', 'origin', branch], { cwd: canonical, allowFailure: true }), (args) => env.git.run(args, { cwd: canonical, allowFailure: true }), branch, 'the canonical clone');
|
|
29
29
|
if (!result.fetched)
|
|
30
|
-
return { kind: 'fetch-failed', branch, error: result.error, outcome: result.outcome, credential: credentials.kind };
|
|
31
|
-
return { kind: 'ran', outcome: result.outcome, credential: credentials.kind };
|
|
30
|
+
return { kind: 'fetch-failed', branch, error: result.error, outcome: result.outcome, credential: credentials.kind, owner: credentials.owner };
|
|
31
|
+
return { kind: 'ran', outcome: result.outcome, credential: credentials.kind, owner: credentials.owner };
|
|
32
32
|
}
|
|
33
33
|
finally {
|
|
34
34
|
await lock.release();
|
|
@@ -62,13 +62,13 @@ function envelope(store, exitCode, data, findings, lines, notices) {
|
|
|
62
62
|
async function once(env, store) {
|
|
63
63
|
const round = await canonicalRound(env, store);
|
|
64
64
|
if (round.kind === 'busy') {
|
|
65
|
-
return envelope(store, ExitCode.Ok, { credential: null, canonical_sync: null }, [], [busyLine(round.holder)], [`sync: another landing is running (process ${round.holder.pid} on ${round.holder.host}); stepped aside.`]);
|
|
65
|
+
return envelope(store, ExitCode.Ok, { credential: null, credential_owner: null, canonical_sync: null }, [], [busyLine(round.holder)], [`sync: another landing is running (process ${round.holder.pid} on ${round.holder.host}); stepped aside.`]);
|
|
66
66
|
}
|
|
67
67
|
if (round.kind === 'fetch-failed')
|
|
68
68
|
throw new SyncForgeUnreachableError(round.branch, round.error);
|
|
69
69
|
const finding = leftAloneFinding(round.outcome);
|
|
70
70
|
// A clone left alone is a warning that keeps the success code, as in every landing run.
|
|
71
|
-
return envelope(store, ExitCode.Ok, { credential: round.credential, canonical_sync: round.outcome }, finding === null ? [] : [finding], [syncLine(round.outcome)]);
|
|
71
|
+
return envelope(store, ExitCode.Ok, { credential: round.credential, credential_owner: round.owner, canonical_sync: round.outcome }, finding === null ? [] : [finding], [syncLine(round.outcome)]);
|
|
72
72
|
}
|
|
73
73
|
/**
|
|
74
74
|
* One round of `ctxr sync --every`: the canonical sync, then the mounts as
|
|
@@ -82,12 +82,13 @@ export async function syncRound(env, root) {
|
|
|
82
82
|
store = { root, config: await readConfig(root, env.migrationSteps ?? MIGRATION_STEPS) };
|
|
83
83
|
}
|
|
84
84
|
catch (err) {
|
|
85
|
-
return { failed: true, lines: [`the configuration could not be read: ${err instanceof Error ? err.message : String(err)}`], canonical: null, credential: null, mounts: [] };
|
|
85
|
+
return { failed: true, lines: [`the configuration could not be read: ${err instanceof Error ? err.message : String(err)}`], canonical: null, credential: null, credentialOwner: null, mounts: [] };
|
|
86
86
|
}
|
|
87
87
|
const lines = [];
|
|
88
88
|
let failed = false;
|
|
89
89
|
let canonical = null;
|
|
90
90
|
let credential = null;
|
|
91
|
+
let credentialOwner = null;
|
|
91
92
|
try {
|
|
92
93
|
const round = await canonicalRound(env, store);
|
|
93
94
|
if (round.kind === 'busy') {
|
|
@@ -96,6 +97,7 @@ export async function syncRound(env, root) {
|
|
|
96
97
|
else {
|
|
97
98
|
canonical = round.outcome;
|
|
98
99
|
credential = round.credential;
|
|
100
|
+
credentialOwner = round.owner;
|
|
99
101
|
if (round.kind === 'fetch-failed')
|
|
100
102
|
failed = true;
|
|
101
103
|
lines.push(syncLine(round.outcome));
|
|
@@ -118,7 +120,7 @@ export async function syncRound(env, root) {
|
|
|
118
120
|
failed = true;
|
|
119
121
|
lines.push(`the mounts could not be refreshed: ${err instanceof Error ? err.message : String(err)}`);
|
|
120
122
|
}
|
|
121
|
-
return { failed, lines, canonical, credential, mounts };
|
|
123
|
+
return { failed, lines, canonical, credential, credentialOwner, mounts };
|
|
122
124
|
}
|
|
123
125
|
/**
|
|
124
126
|
* write-lifecycle spec ("The canonical-clone sync can keep running, mounts
|
|
@@ -172,7 +174,7 @@ async function every(env, store, minutes) {
|
|
|
172
174
|
}
|
|
173
175
|
const lines = [...first.lines.map((line) => (first.failed ? `round failed: ${line}` : line)), `Syncing again every ${minutes} minute(s) until stopped.`];
|
|
174
176
|
// The loop is running: a failed first round is a warning, never an exit code that reads as "stopped".
|
|
175
|
-
return envelope(store, ExitCode.Ok, { credential: first.credential, canonical_sync: first.canonical, every_minutes: minutes, mounts: first.mounts }, findings, lines);
|
|
177
|
+
return envelope(store, ExitCode.Ok, { credential: first.credential, credential_owner: first.credentialOwner, canonical_sync: first.canonical, every_minutes: minutes, mounts: first.mounts }, findings, lines);
|
|
176
178
|
}
|
|
177
179
|
export async function execute(callerEnv, store, flags = {}) {
|
|
178
180
|
// serve-keeps-its-clone-current D12: every git command a sync runs ignores the repository's hooks and drivers.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI1D,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC/F,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAuB,MAAM,8BAA8B,CAAC;AACjG,OAAO,EAAE,kBAAkB,EAA2B,MAAM,6BAA6B,CAAC;AAC1F,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,KAAK,uBAAuB,MAAM,yBAAyB,CAAC;AAEnE,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI1D,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC/F,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAuB,MAAM,8BAA8B,CAAC;AACjG,OAAO,EAAE,kBAAkB,EAA2B,MAAM,6BAA6B,CAAC;AAC1F,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,KAAK,uBAAuB,MAAM,yBAAyB,CAAC;AAEnE,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AA0B/D;;;;;;;GAOG;AACH,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,KAAY;IACrD,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IACjE,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,kBAAkB,CACrC,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,EACjI,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,EACnE,MAAM,EACN,qBAAqB,CACtB,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC;QACnK,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC;IAC1G,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,IAAwB;IACxC,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,+BAA+B,IAAI,CAAC,MAAM,EAAE,CAAC;IACtE,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,0BAA0B,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACjJ,CAAC;AAED,SAAS,QAAQ,CAAC,MAAqC;IACrD,OAAO,+DAA+D,MAAM,CAAC,GAAG,OAAO,MAAM,CAAC,IAAI,qEAAqE,CAAC;AAC1K,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAwB;IAChD,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAC7B,OAAO,EAAE,IAAI,EAAE,2BAA2B,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,2CAA2C,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACxI,CAAC;AAED,SAAS,QAAQ,CAAC,KAAY,EAAE,QAAkB,EAAE,IAAc,EAAE,QAAmB,EAAE,KAAe,EAAE,OAAkB;IAC1H,OAAO;QACL,QAAQ;QACR,IAAI;QACJ,QAAQ;QACR,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9B,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;QAC7C,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,KAAK,UAAU,IAAI,CAAC,GAAW,EAAE,KAAY;IAC3C,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,6CAA6C,KAAK,CAAC,MAAM,CAAC,GAAG,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,mBAAmB,CAAC,CAAC,CAAC;IACpP,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;QAAE,MAAM,IAAI,yBAAyB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAClG,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChD,wFAAwF;IACxF,OAAO,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACpM,CAAC;AAYD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,IAAY;IACvD,IAAI,KAAY,CAAC;IACjB,IAAI,CAAC;QACH,KAAK,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,cAAc,IAAI,eAAe,CAAC,EAAE,CAAC;IAC1F,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,wCAAwC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACrM,CAAC;IACD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,SAAS,GAA8B,IAAI,CAAC;IAChD,IAAI,UAAU,GAA0B,IAAI,CAAC;IAC7C,IAAI,eAAe,GAAkB,IAAI,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC;YAC1B,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;YAC9B,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC;YAC9B,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;gBAAE,MAAM,GAAG,IAAI,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,IAAI,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,+BAA+B,GAAG,YAAY,eAAe,IAAI,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClI,CAAC;IACD,IAAI,MAAM,GAA8C,EAAE,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACjE,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC;QACnC,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,EAAE;YAAE,MAAM,GAAG,IAAI,CAAC;QACnD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,IAAI,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,sCAAsC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACvG,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC;AAC3E,CAAC;AAOD;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,IAAY,EAAE,UAAkB,EAAE,KAA6B,EAAE,YAAY,GAAG,UAAU;IACnI,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,OAAO,GAAyB,IAAI,CAAC;IACzC,IAAI,KAAK,GAA0B,IAAI,CAAC;IAExC,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAQ,EAAE;QACvC,IAAI,OAAO;YAAE,OAAO;QACpB,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,KAAK,GAAG,IAAI,CAAC;YACb,OAAO,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC;iBAC3B,IAAI,CACH,CAAC,MAAM,EAAE,EAAE;gBACT,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,QAAQ,CAAC;gBACjE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK;oBAAE,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC;YAC7D,CAAC,EACD,CAAC,GAAY,EAAE,EAAE,CAAC,KAAK,CAAC,uBAAuB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CACnG;iBACA,OAAO,CAAC,GAAG,EAAE;gBACZ,OAAO,GAAG,IAAI,CAAC;gBACf,QAAQ,CAAC,UAAU,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;QACP,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC,CAAC;IACF,QAAQ,CAAC,YAAY,CAAC,CAAC;IAEvB,OAAO;QACL,KAAK,CAAC,IAAI;YACR,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,KAAK,KAAK,IAAI;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YACxC,MAAM,OAAO,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,oGAAoG;AACpG,KAAK,UAAU,KAAK,CAAC,GAAW,EAAE,KAAY,EAAE,OAAe;IAC7D,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/C,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;IAC7F,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,mDAAmD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;SACrK,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,OAAO,KAAK,IAAI;YAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,uBAAuB,OAAO,2BAA2B,CAAC,CAAC;IACzJ,sGAAsG;IACtG,OAAO,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,gBAAgB,EAAE,KAAK,CAAC,eAAe,EAAE,cAAc,EAAE,KAAK,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AACjN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,SAAiB,EAAE,KAAY,EAAE,KAAK,GAAc,EAAE;IAClF,+GAA+G;IAC/G,MAAM,GAAG,GAAW,EAAE,GAAG,SAAS,EAAE,GAAG,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;IACpE,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACvD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC;QAAE,MAAM,IAAI,cAAc,CAAC,mDAAmD,CAAC,CAAC;IACtI,OAAO,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAS7C,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAI9D,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,UAAU;IACzB,uGAAuG;IACvG,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,uFAAuF;IACvF,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,OAAO,CAC3B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,GAAG,cAAc,CAAC,CAAC,GACxE,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAwCrC;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAE5D;AAkBD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CA0D/G"}
|
package/dist/commands/update.js
CHANGED
|
@@ -2,6 +2,7 @@ import { configPathFor, readConfigMigrating } from '../config/load.js';
|
|
|
2
2
|
import { MIGRATION_STEPS } from '../config/migrations.js';
|
|
3
3
|
import { SessionWorktreeRefusedError } from '../core/errors.js';
|
|
4
4
|
import { ExitCode } from '../core/exit-codes.js';
|
|
5
|
+
import { credentialsFor, runRemoteGit } from '../core/forge/credentials.js';
|
|
5
6
|
import { writeFileAtomic } from '../core/fs/atomic.js';
|
|
6
7
|
import { addWorktree, fetchOrigin, hasRemote, removeWorktree } from '../core/git/worktree.js';
|
|
7
8
|
import { reconcileStore } from '../core/reconcile.js';
|
|
@@ -64,18 +65,18 @@ export async function execute(env, store) {
|
|
|
64
65
|
export function updateBranchName(config) {
|
|
65
66
|
return `${config.session.branch_prefix}ctxr-update-${CLI_VERSION}`;
|
|
66
67
|
}
|
|
67
|
-
async function branchExists(env, root, branch,
|
|
68
|
+
async function branchExists(env, root, branch, credentials) {
|
|
68
69
|
const local = await env.git.run(['rev-parse', '--verify', '--quiet', `refs/heads/${branch}`], {
|
|
69
70
|
cwd: root,
|
|
70
71
|
allowFailure: true,
|
|
71
72
|
});
|
|
72
73
|
if (local.exitCode === 0)
|
|
73
74
|
return true;
|
|
74
|
-
if (
|
|
75
|
+
if (credentials === null)
|
|
75
76
|
return false;
|
|
76
77
|
// Exit 0 is "found"; 2 is "no such ref". Anything else — an unreachable remote —
|
|
77
78
|
// is not evidence the branch exists, and the fetch below will fail on its own terms.
|
|
78
|
-
const remote = await env.git.
|
|
79
|
+
const remote = await runRemoteGit(env.git, credentials, env.env, ['ls-remote', '--exit-code', '--heads', 'origin', branch], {
|
|
79
80
|
cwd: root,
|
|
80
81
|
allowFailure: true,
|
|
81
82
|
});
|
|
@@ -99,7 +100,9 @@ export async function executeInWorktree(env, store) {
|
|
|
99
100
|
const git = env.git;
|
|
100
101
|
const branch = updateBranchName(store.config);
|
|
101
102
|
const remoteExists = await hasRemote(git, store.root);
|
|
102
|
-
|
|
103
|
+
// reach-each-owner-with-its-own-token D4: the remote is reached through the repository's forge credential.
|
|
104
|
+
const credentials = remoteExists ? await credentialsFor(env, store.root) : null;
|
|
105
|
+
if (await branchExists(env, store.root, branch, credentials)) {
|
|
103
106
|
return {
|
|
104
107
|
exitCode: ExitCode.Ok,
|
|
105
108
|
data: { changed: [], worktree: null, branch, existing: true },
|
|
@@ -110,7 +113,7 @@ export async function executeInWorktree(env, store) {
|
|
|
110
113
|
};
|
|
111
114
|
}
|
|
112
115
|
const defaultBranch = store.config.git.default_branch;
|
|
113
|
-
const fetched =
|
|
116
|
+
const fetched = credentials !== null ? await fetchOrigin(git, credentials, env.env, store.root, defaultBranch) : false;
|
|
114
117
|
const startPoint = fetched ? `origin/${defaultBranch}` : defaultBranch;
|
|
115
118
|
const worktreeDir = worktreePathFor(store, branch);
|
|
116
119
|
const added = await addWorktree(git, store.root, worktreeDir, branch, startPoint, { allowFailure: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { StoreConfig } from '../../config/schema.js';
|
|
2
|
-
import type { ForgeCredentials } from '../forge/credentials.js';
|
|
2
|
+
import type { CredentialKind, ForgeCredentials } from '../forge/credentials.js';
|
|
3
3
|
import { type ForgeClient, type PullRequest } from '../forge/github.js';
|
|
4
4
|
import type { GitRunner } from '../git/exec.js';
|
|
5
5
|
import { type Decision, type LandingMark, type PartRef, type ReviewStateName, type SessionDecision } from './decision.js';
|
|
@@ -49,6 +49,15 @@ export declare function storeReach(git: GitRunner, home: {
|
|
|
49
49
|
credentials?: ForgeCredentials | null;
|
|
50
50
|
}, forgeFor: ForgeFor): Promise<StoreReach | null>;
|
|
51
51
|
export declare function allStores(reach: StoreReach): SessionStore[];
|
|
52
|
+
/** reach-each-owner-with-its-own-token D7: which credential a store was reached with — never the credential. */
|
|
53
|
+
export interface StoreCredential {
|
|
54
|
+
store: string;
|
|
55
|
+
credential: CredentialKind;
|
|
56
|
+
/** The GitHub owner whose token was used, for `owner-token`; null otherwise. */
|
|
57
|
+
credential_owner: string | null;
|
|
58
|
+
}
|
|
59
|
+
/** The home store's credential, then each mount's, as the envelopes of commands that reach them report it. */
|
|
60
|
+
export declare function storeCredentials(reach: StoreReach): StoreCredential[];
|
|
52
61
|
/** A store's open pull requests, or why they could not be read. */
|
|
53
62
|
export interface StoreListing {
|
|
54
63
|
store: SessionStore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-group.d.ts","sourceRoot":"","sources":["../../../src/core/approval/session-group.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"session-group.d.ts","sourceRoot":"","sources":["../../../src/core/approval/session-group.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,10 @@ export async function storeReach(git, home, forgeFor) {
|
|
|
31
31
|
export function allStores(reach) {
|
|
32
32
|
return [...reach.mounts, reach.home];
|
|
33
33
|
}
|
|
34
|
+
/** The home store's credential, then each mount's, as the envelopes of commands that reach them report it. */
|
|
35
|
+
export function storeCredentials(reach) {
|
|
36
|
+
return [reach.home, ...reach.mounts].map((s) => ({ store: s.slug, credential: s.forge.credential, credential_owner: s.forge.credentialOwner }));
|
|
37
|
+
}
|
|
34
38
|
export async function listOpen(reach, homePulls) {
|
|
35
39
|
return Promise.all(allStores(reach).map(async (store) => {
|
|
36
40
|
try {
|