@context-forge/core 0.13.2 → 0.14.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/config/ConfigKeys.d.ts.map +1 -1
- package/dist/config/ConfigKeys.js +4 -1
- package/dist/config/ConfigKeys.js.map +1 -1
- package/dist/guides/GuideDetector.d.ts +20 -2
- package/dist/guides/GuideDetector.d.ts.map +1 -1
- package/dist/guides/GuideDetector.js +41 -7
- package/dist/guides/GuideDetector.js.map +1 -1
- package/dist/guides/GuideManager.d.ts +58 -5
- package/dist/guides/GuideManager.d.ts.map +1 -1
- package/dist/guides/GuideManager.js +125 -28
- package/dist/guides/GuideManager.js.map +1 -1
- package/dist/guides/branchGuard.d.ts.map +1 -1
- package/dist/guides/branchGuard.js +32 -1
- package/dist/guides/branchGuard.js.map +1 -1
- package/dist/guides/gitExec.d.ts +13 -1
- package/dist/guides/gitExec.d.ts.map +1 -1
- package/dist/guides/gitExec.js +19 -3
- package/dist/guides/gitExec.js.map +1 -1
- package/dist/guides/index.d.ts +1 -1
- package/dist/guides/index.d.ts.map +1 -1
- package/dist/guides/index.js +1 -1
- package/dist/guides/index.js.map +1 -1
- package/dist/guides/strategies/SubmoduleStrategy.d.ts +17 -0
- package/dist/guides/strategies/SubmoduleStrategy.d.ts.map +1 -1
- package/dist/guides/strategies/SubmoduleStrategy.js +21 -2
- package/dist/guides/strategies/SubmoduleStrategy.js.map +1 -1
- package/dist/guides/strategies/TarballStrategy.js +4 -4
- package/dist/guides/strategies/TarballStrategy.js.map +1 -1
- package/dist/guides/types.d.ts +81 -1
- package/dist/guides/types.d.ts.map +1 -1
- package/dist/guides/types.js +76 -0
- package/dist/guides/types.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigKeys.d.ts","sourceRoot":"","sources":["../../src/config/ConfigKeys.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW;;;CAGd,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAEzE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CAChE;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"ConfigKeys.d.ts","sourceRoot":"","sources":["../../src/config/ConfigKeys.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW;;;CAGd,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAEzE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CAChE;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAwH3D,CAAC"}
|
|
@@ -19,7 +19,10 @@ export const CONFIG_KEYS = {
|
|
|
19
19
|
type: 'string',
|
|
20
20
|
default: 'submodule',
|
|
21
21
|
description: 'Strategy for managing the AI project guide via git',
|
|
22
|
-
|
|
22
|
+
// 'manual' is a deprecated alias for 'tarball'. It stays in the enum so
|
|
23
|
+
// existing shared config files keep validating; normalizeGuideMethod()
|
|
24
|
+
// maps it to 'tarball' when the value is read.
|
|
25
|
+
enum: ['submodule', 'clone', 'tarball', 'manual'],
|
|
23
26
|
scope: ConfigScope.Shared,
|
|
24
27
|
},
|
|
25
28
|
'workflow.auto_advance': {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigKeys.js","sourceRoot":"","sources":["../../src/config/ConfigKeys.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;CACZ,CAAC;AAaX,MAAM,CAAC,MAAM,WAAW,GAAwC;IAC9D,mBAAmB,EAAE;QACnB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,sDAAsD;QACnE,KAAK,EAAE,WAAW,CAAC,MAAM;KAC1B;IACD,cAAc,EAAE;QACd,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,4CAA4C;QACzD,KAAK,EAAE,WAAW,CAAC,MAAM;KAC1B;IACD,oBAAoB,EAAE;QACpB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,WAAW;QACpB,WAAW,EAAE,oDAAoD;QACjE,IAAI,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"ConfigKeys.js","sourceRoot":"","sources":["../../src/config/ConfigKeys.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type GuideInfo } from './types.js';
|
|
1
|
+
import { type GuideInfo, type SubmoduleCheckoutState } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Compare two semver version strings. Returns true if latest > current.
|
|
4
4
|
*/
|
|
@@ -11,12 +11,30 @@ export declare class GuideDetector {
|
|
|
11
11
|
* @param operationPath - worktree path for filesystem checks (defaults to projectPath)
|
|
12
12
|
*/
|
|
13
13
|
detect(projectPath: string, source?: string, operationPath?: string): Promise<GuideInfo>;
|
|
14
|
+
/**
|
|
15
|
+
* Everything detect() reports except the remote's latest version, answered
|
|
16
|
+
* from the filesystem and local git alone — no `git ls-remote`. Read
|
|
17
|
+
* commands (`cf build`, `context_build`, ...) reach this through
|
|
18
|
+
* GuideManager.ensureCheckout() so a routine build never waits on the
|
|
19
|
+
* network (D10); status commands keep using detect().
|
|
20
|
+
*/
|
|
21
|
+
detectLocal(projectPath: string, source?: string, operationPath?: string): Promise<GuideInfo>;
|
|
22
|
+
/**
|
|
23
|
+
* Checkout state for a submodule install, or null for other methods.
|
|
24
|
+
*
|
|
25
|
+
* Read-only: this reports what `git submodule status` says and never runs
|
|
26
|
+
* `git submodule update` (D1). An 'error' result means git is unavailable or
|
|
27
|
+
* the path is not a repository — surfaced rather than swallowed (D7),
|
|
28
|
+
* because silently reporting "in sync" would hide the very condition the
|
|
29
|
+
* caller needs to act on.
|
|
30
|
+
*/
|
|
31
|
+
private resolveCheckout;
|
|
14
32
|
/** Determine installation method by inspecting filesystem */
|
|
15
33
|
private detectMethod;
|
|
16
34
|
/** Detect current version based on method */
|
|
17
35
|
private detectVersion;
|
|
18
36
|
/** Check whether a worktree's submodule checkout is in sync with the committed pointer */
|
|
19
|
-
checkSyncStatus(worktreePath: string): Promise<
|
|
37
|
+
checkSyncStatus(worktreePath: string): Promise<SubmoduleCheckoutState | 'error'>;
|
|
20
38
|
/** Fetch latest version from remote. Returns null on any failure. */
|
|
21
39
|
private fetchLatestVersion;
|
|
22
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GuideDetector.d.ts","sourceRoot":"","sources":["../../src/guides/GuideDetector.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"GuideDetector.d.ts","sourceRoot":"","sources":["../../src/guides/GuideDetector.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,sBAAsB,EAI5B,MAAM,YAAY,CAAC;AAiCpB;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CASrF;AAED,qBAAa,aAAa;IACxB;;;;;OAKG;IACG,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAU9F;;;;;;OAMG;IACG,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,SAAS,CAAC;IAuCrB;;;;;;;;OAQG;YACW,eAAe;IAe7B,6DAA6D;IAC7D,OAAO,CAAC,YAAY;IAuBpB,6CAA6C;YAC/B,aAAa;IAmB3B,0FAA0F;IACpF,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,OAAO,CAAC;IAetF,qEAAqE;YACvD,kBAAkB;CAWjC"}
|
|
@@ -54,12 +54,29 @@ export class GuideDetector {
|
|
|
54
54
|
* @param operationPath - worktree path for filesystem checks (defaults to projectPath)
|
|
55
55
|
*/
|
|
56
56
|
async detect(projectPath, source, operationPath) {
|
|
57
|
+
const info = await this.detectLocal(projectPath, source, operationPath);
|
|
58
|
+
const latestVersion = await this.fetchLatestVersion(info.source);
|
|
59
|
+
return {
|
|
60
|
+
...info,
|
|
61
|
+
latestVersion,
|
|
62
|
+
updateAvailable: isNewerVersion(info.version, latestVersion),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Everything detect() reports except the remote's latest version, answered
|
|
67
|
+
* from the filesystem and local git alone — no `git ls-remote`. Read
|
|
68
|
+
* commands (`cf build`, `context_build`, ...) reach this through
|
|
69
|
+
* GuideManager.ensureCheckout() so a routine build never waits on the
|
|
70
|
+
* network (D10); status commands keep using detect().
|
|
71
|
+
*/
|
|
72
|
+
async detectLocal(projectPath, source, operationPath) {
|
|
57
73
|
const resolvedSource = source || DEFAULT_SOURCE_GIT;
|
|
58
74
|
const effectivePath = operationPath || projectPath;
|
|
59
75
|
const guidePath = join(effectivePath, GUIDE_RELATIVE_PATH);
|
|
60
76
|
const baseInfo = {
|
|
61
77
|
installed: false,
|
|
62
78
|
method: null,
|
|
79
|
+
checkout: null,
|
|
63
80
|
version: null,
|
|
64
81
|
path: guidePath,
|
|
65
82
|
source: resolvedSource,
|
|
@@ -68,26 +85,43 @@ export class GuideDetector {
|
|
|
68
85
|
usingBundledPrompt: true,
|
|
69
86
|
};
|
|
70
87
|
if (!existsSync(guidePath)) {
|
|
71
|
-
// Check latest version even when not installed
|
|
72
|
-
baseInfo.latestVersion = await this.fetchLatestVersion(resolvedSource);
|
|
73
88
|
return baseInfo;
|
|
74
89
|
}
|
|
75
90
|
// Guide directory exists — determine method (use projectPath for .gitmodules check)
|
|
76
91
|
const method = this.detectMethod(projectPath, guidePath);
|
|
92
|
+
const checkout = await this.resolveCheckout(method, effectivePath);
|
|
77
93
|
const version = await this.detectVersion(guidePath, method);
|
|
78
|
-
const latestVersion = await this.fetchLatestVersion(resolvedSource);
|
|
79
|
-
const updateAvailable = isNewerVersion(version, latestVersion);
|
|
80
94
|
return {
|
|
81
95
|
installed: true,
|
|
82
96
|
method,
|
|
97
|
+
checkout,
|
|
83
98
|
version,
|
|
84
99
|
path: guidePath,
|
|
85
100
|
source: resolvedSource,
|
|
86
|
-
latestVersion,
|
|
87
|
-
updateAvailable,
|
|
101
|
+
latestVersion: null,
|
|
102
|
+
updateAvailable: false,
|
|
88
103
|
usingBundledPrompt: false,
|
|
89
104
|
};
|
|
90
105
|
}
|
|
106
|
+
/**
|
|
107
|
+
* Checkout state for a submodule install, or null for other methods.
|
|
108
|
+
*
|
|
109
|
+
* Read-only: this reports what `git submodule status` says and never runs
|
|
110
|
+
* `git submodule update` (D1). An 'error' result means git is unavailable or
|
|
111
|
+
* the path is not a repository — surfaced rather than swallowed (D7),
|
|
112
|
+
* because silently reporting "in sync" would hide the very condition the
|
|
113
|
+
* caller needs to act on.
|
|
114
|
+
*/
|
|
115
|
+
async resolveCheckout(method, effectivePath) {
|
|
116
|
+
if (method !== 'submodule')
|
|
117
|
+
return null;
|
|
118
|
+
const state = await this.checkSyncStatus(effectivePath);
|
|
119
|
+
if (state === 'error') {
|
|
120
|
+
throw new Error(`Unable to read guide submodule status in ${effectivePath}. ` +
|
|
121
|
+
'Ensure git is installed and the directory is a git repository.');
|
|
122
|
+
}
|
|
123
|
+
return state;
|
|
124
|
+
}
|
|
91
125
|
/** Determine installation method by inspecting filesystem */
|
|
92
126
|
detectMethod(projectPath, guidePath) {
|
|
93
127
|
// Check .gitmodules first — submodules also have a .git entry inside
|
|
@@ -108,7 +142,7 @@ export class GuideDetector {
|
|
|
108
142
|
if (existsSync(join(guidePath, '.git'))) {
|
|
109
143
|
return 'clone';
|
|
110
144
|
}
|
|
111
|
-
return '
|
|
145
|
+
return 'tarball';
|
|
112
146
|
}
|
|
113
147
|
/** Detect current version based on method */
|
|
114
148
|
async detectVersion(guidePath, method) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GuideDetector.js","sourceRoot":"","sources":["../../src/guides/GuideDetector.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,
|
|
1
|
+
{"version":3,"file":"GuideDetector.js","sourceRoot":"","sources":["../../src/guides/GuideDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import type { ConfigManager } from '../config/ConfigManager.js';
|
|
2
|
-
import type { GuideInfo, GuideMethod, InstallResult, UpdateResult, UninstallResult, SyncResult } from './types.js';
|
|
2
|
+
import type { GuideInfo, GuideMethod, InstallResult, UpdateResult, UninstallResult, SyncResult, EnsureCheckoutResult } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* A strategy resolved from an input boundary, plus the original spelling when
|
|
5
|
+
* that input used a deprecated alias (D5). Used for both the config path and
|
|
6
|
+
* the explicit `--strategy` flag so callers warn identically for each.
|
|
7
|
+
*/
|
|
8
|
+
export interface ResolvedStrategy {
|
|
9
|
+
method: GuideMethod;
|
|
10
|
+
deprecatedAlias?: string;
|
|
11
|
+
}
|
|
3
12
|
export declare class GuideManager {
|
|
4
13
|
private readonly projectPath;
|
|
5
14
|
private readonly configManager?;
|
|
@@ -8,8 +17,39 @@ export declare class GuideManager {
|
|
|
8
17
|
constructor(projectPath: string, configManager?: ConfigManager, operationPath?: string);
|
|
9
18
|
/** Get current guide installation status */
|
|
10
19
|
status(): Promise<GuideInfo>;
|
|
11
|
-
/**
|
|
12
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Install the guide into the project.
|
|
22
|
+
*
|
|
23
|
+
* `strategyOverride` is a raw string from an input boundary (a `--strategy`
|
|
24
|
+
* flag or an MCP parameter), normalized here so the flag and the config path
|
|
25
|
+
* share one validation and one deprecation report. When either path supplied
|
|
26
|
+
* a deprecated alias, the returned result carries it in `deprecatedAlias` so
|
|
27
|
+
* the caller can warn (D5).
|
|
28
|
+
*/
|
|
29
|
+
install(strategyOverride?: string, sourceOverride?: string): Promise<InstallResult>;
|
|
30
|
+
/**
|
|
31
|
+
* Normalize a strategy name supplied explicitly by a caller (CLI flag, MCP
|
|
32
|
+
* parameter). Same validation and same alias reporting as the config path.
|
|
33
|
+
*/
|
|
34
|
+
private resolveStrategyOverride;
|
|
35
|
+
/**
|
|
36
|
+
* Make the guide readable before a command consumes it.
|
|
37
|
+
*
|
|
38
|
+
* Auto-acts on exactly one state: an uninitialized submodule, which has a
|
|
39
|
+
* single correct resolution — check out the commit the host pins (#80). An
|
|
40
|
+
* out-of-sync checkout may be deliberate, so it is reported and left alone
|
|
41
|
+
* rather than reset (D2). Every other case is a no-op, including a missing
|
|
42
|
+
* install, which the calling command still reports as it does today.
|
|
43
|
+
*
|
|
44
|
+
* Read-only for clone and tarball installs.
|
|
45
|
+
*/
|
|
46
|
+
ensureCheckout(): Promise<EnsureCheckoutResult>;
|
|
47
|
+
/**
|
|
48
|
+
* Check out an uninitialized guide submodule, bounded so a read command
|
|
49
|
+
* cannot hang on an unresponsive remote (D10), and append the shared offline
|
|
50
|
+
* remediation text when the fetch cannot complete.
|
|
51
|
+
*/
|
|
52
|
+
private initGuideCheckout;
|
|
13
53
|
/** Update an existing guide installation */
|
|
14
54
|
update(opts?: {
|
|
15
55
|
confirmed?: boolean;
|
|
@@ -18,9 +58,22 @@ export declare class GuideManager {
|
|
|
18
58
|
uninstall(): Promise<UninstallResult>;
|
|
19
59
|
/** Sync guide submodule checkout in multiple worktrees */
|
|
20
60
|
syncWorktrees(worktreePaths: string[]): Promise<SyncResult[]>;
|
|
21
|
-
/**
|
|
61
|
+
/**
|
|
62
|
+
* Resolve the guide source URL from config.
|
|
63
|
+
*
|
|
64
|
+
* Config read errors propagate (D7): a malformed config file must fail the
|
|
65
|
+
* command rather than silently installing from the default source. Without a
|
|
66
|
+
* ConfigManager there is no config to read, so the module default applies.
|
|
67
|
+
*/
|
|
22
68
|
private resolveSource;
|
|
23
|
-
/**
|
|
69
|
+
/**
|
|
70
|
+
* Resolve the install strategy from config.
|
|
71
|
+
*
|
|
72
|
+
* An unset key already yields the ConfigKeys default, so there is no
|
|
73
|
+
* fallback branch here. Config read errors propagate (D7). `deprecatedAlias`
|
|
74
|
+
* carries the original spelling when the config value was a deprecated name,
|
|
75
|
+
* so the caller can print the D5 deprecation warning.
|
|
76
|
+
*/
|
|
24
77
|
private resolveStrategy;
|
|
25
78
|
/** Create user artifact directories alongside the guide */
|
|
26
79
|
private createUserDirectories;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GuideManager.d.ts","sourceRoot":"","sources":["../../src/guides/GuideManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAmB,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"GuideManager.d.ts","sourceRoot":"","sources":["../../src/guides/GuideManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAmB,UAAU,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAgB1J;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,WAAW,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAS;gBAE5B,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa,EAAE,aAAa,CAAC,EAAE,MAAM;IAOtF,4CAA4C;IACtC,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC;IAKlC;;;;;;;;OAQG;IACG,OAAO,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA2BzF;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAO/B;;;;;;;;;;OAUG;IACG,cAAc,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAqCrD;;;;OAIG;YACW,iBAAiB;IAmB/B,4CAA4C;IACtC,MAAM,CAAC,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAgCnE,2CAA2C;IACrC,SAAS,IAAI,OAAO,CAAC,eAAe,CAAC;IAuD3C,0DAA0D;IACpD,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAwBnE;;;;;;OAMG;YACW,aAAa;IAW3B;;;;;;;OAOG;YACW,eAAe;IAgB7B,2DAA2D;IAC3D,OAAO,CAAC,qBAAqB;IAa7B,2CAA2C;IAC3C,OAAO,CAAC,WAAW;CAUpB"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
// Orchestration layer for guide lifecycle management
|
|
2
2
|
import { join } from 'path';
|
|
3
3
|
import { mkdirSync, rmSync, existsSync } from 'fs';
|
|
4
|
-
import { DEFAULT_SOURCE_GIT, GUIDE_RELATIVE_PATH } from './types.js';
|
|
4
|
+
import { DEFAULT_SOURCE_GIT, GUIDE_RELATIVE_PATH, GUIDE_INIT_TIMEOUT_MS, normalizeGuideMethod, isDeprecatedGuideMethodAlias, } from './types.js';
|
|
5
|
+
import { GUIDE_OFFLINE_REMEDIATION } from './gitExec.js';
|
|
6
|
+
import { CONFIG_KEYS } from '../config/ConfigKeys.js';
|
|
5
7
|
import { GuideDetector } from './GuideDetector.js';
|
|
6
8
|
import { SubmoduleStrategy } from './strategies/SubmoduleStrategy.js';
|
|
7
9
|
import { CloneStrategy } from './strategies/CloneStrategy.js';
|
|
@@ -23,10 +25,21 @@ export class GuideManager {
|
|
|
23
25
|
const source = await this.resolveSource();
|
|
24
26
|
return this.detector.detect(this.projectPath, source, this.operationPath);
|
|
25
27
|
}
|
|
26
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Install the guide into the project.
|
|
30
|
+
*
|
|
31
|
+
* `strategyOverride` is a raw string from an input boundary (a `--strategy`
|
|
32
|
+
* flag or an MCP parameter), normalized here so the flag and the config path
|
|
33
|
+
* share one validation and one deprecation report. When either path supplied
|
|
34
|
+
* a deprecated alias, the returned result carries it in `deprecatedAlias` so
|
|
35
|
+
* the caller can warn (D5).
|
|
36
|
+
*/
|
|
27
37
|
async install(strategyOverride, sourceOverride) {
|
|
28
38
|
const source = sourceOverride || (await this.resolveSource());
|
|
29
|
-
const
|
|
39
|
+
const resolved = strategyOverride
|
|
40
|
+
? this.resolveStrategyOverride(strategyOverride)
|
|
41
|
+
: await this.resolveStrategy();
|
|
42
|
+
const method = resolved.method;
|
|
30
43
|
const targetDir = join(this.projectPath, GUIDE_RELATIVE_PATH);
|
|
31
44
|
// Check if already installed
|
|
32
45
|
const info = await this.detector.detect(this.projectPath, source);
|
|
@@ -37,7 +50,83 @@ export class GuideManager {
|
|
|
37
50
|
const result = await strategy.install(this.projectPath, source, targetDir);
|
|
38
51
|
// Create user artifact directories so the project is ready to use
|
|
39
52
|
this.createUserDirectories();
|
|
40
|
-
return
|
|
53
|
+
return resolved.deprecatedAlias
|
|
54
|
+
? { ...result, deprecatedAlias: resolved.deprecatedAlias }
|
|
55
|
+
: result;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Normalize a strategy name supplied explicitly by a caller (CLI flag, MCP
|
|
59
|
+
* parameter). Same validation and same alias reporting as the config path.
|
|
60
|
+
*/
|
|
61
|
+
resolveStrategyOverride(input) {
|
|
62
|
+
const method = normalizeGuideMethod(input);
|
|
63
|
+
return isDeprecatedGuideMethodAlias(input)
|
|
64
|
+
? { method, deprecatedAlias: input.trim() }
|
|
65
|
+
: { method };
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Make the guide readable before a command consumes it.
|
|
69
|
+
*
|
|
70
|
+
* Auto-acts on exactly one state: an uninitialized submodule, which has a
|
|
71
|
+
* single correct resolution — check out the commit the host pins (#80). An
|
|
72
|
+
* out-of-sync checkout may be deliberate, so it is reported and left alone
|
|
73
|
+
* rather than reset (D2). Every other case is a no-op, including a missing
|
|
74
|
+
* install, which the calling command still reports as it does today.
|
|
75
|
+
*
|
|
76
|
+
* Read-only for clone and tarball installs.
|
|
77
|
+
*/
|
|
78
|
+
async ensureCheckout() {
|
|
79
|
+
const source = await this.resolveSource();
|
|
80
|
+
// Local detection only: this runs inside every read command, and the
|
|
81
|
+
// remote's latest version is not needed to decide whether to init (D10).
|
|
82
|
+
const info = await this.detector.detectLocal(this.projectPath, source, this.operationPath);
|
|
83
|
+
if (!info.installed || info.method !== 'submodule') {
|
|
84
|
+
return { action: 'none' };
|
|
85
|
+
}
|
|
86
|
+
// checkout was resolved by detect(); do not ask git a second time.
|
|
87
|
+
switch (info.checkout) {
|
|
88
|
+
case 'in_sync':
|
|
89
|
+
case null:
|
|
90
|
+
return { action: 'none' };
|
|
91
|
+
case 'out_of_sync':
|
|
92
|
+
return {
|
|
93
|
+
action: 'warned',
|
|
94
|
+
message: `The guide submodule at ${GUIDE_RELATIVE_PATH} is checked out at a different ` +
|
|
95
|
+
'commit than this project pins. It was left unchanged. Run cf guides update ' +
|
|
96
|
+
'(or git submodule update) to match the pinned commit.',
|
|
97
|
+
};
|
|
98
|
+
case 'not_initialized': {
|
|
99
|
+
const operationPath = this.operationPath || this.projectPath;
|
|
100
|
+
const { commit } = await this.initGuideCheckout(operationPath);
|
|
101
|
+
return {
|
|
102
|
+
action: 'initialized',
|
|
103
|
+
commit,
|
|
104
|
+
message: `Initialized the guide submodule at ${GUIDE_RELATIVE_PATH} (${commit}).`,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Check out an uninitialized guide submodule, bounded so a read command
|
|
111
|
+
* cannot hang on an unresponsive remote (D10), and append the shared offline
|
|
112
|
+
* remediation text when the fetch cannot complete.
|
|
113
|
+
*/
|
|
114
|
+
async initGuideCheckout(operationPath) {
|
|
115
|
+
const strategy = new SubmoduleStrategy();
|
|
116
|
+
try {
|
|
117
|
+
return await strategy.init(operationPath, { timeoutMs: GUIDE_INIT_TIMEOUT_MS });
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
// Re-thrown with remediation, never swallowed: proceeding against an
|
|
121
|
+
// empty guide tree would fail later with a far less useful message.
|
|
122
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
123
|
+
// gitExec already appends the remediation for recognizable network
|
|
124
|
+
// failures (including our own timeout); add it only when it did not,
|
|
125
|
+
// so the user never reads the same guidance twice.
|
|
126
|
+
throw new Error(message.includes(GUIDE_OFFLINE_REMEDIATION)
|
|
127
|
+
? message
|
|
128
|
+
: `${message}\n ${GUIDE_OFFLINE_REMEDIATION}`);
|
|
129
|
+
}
|
|
41
130
|
}
|
|
42
131
|
/** Update an existing guide installation */
|
|
43
132
|
async update(opts) {
|
|
@@ -132,35 +221,43 @@ export class GuideManager {
|
|
|
132
221
|
}
|
|
133
222
|
return results;
|
|
134
223
|
}
|
|
135
|
-
/**
|
|
224
|
+
/**
|
|
225
|
+
* Resolve the guide source URL from config.
|
|
226
|
+
*
|
|
227
|
+
* Config read errors propagate (D7): a malformed config file must fail the
|
|
228
|
+
* command rather than silently installing from the default source. Without a
|
|
229
|
+
* ConfigManager there is no config to read, so the module default applies.
|
|
230
|
+
*/
|
|
136
231
|
async resolveSource() {
|
|
137
|
-
if (this.configManager) {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
}
|
|
144
|
-
catch {
|
|
145
|
-
// Fall through to default
|
|
146
|
-
}
|
|
232
|
+
if (!this.configManager) {
|
|
233
|
+
return DEFAULT_SOURCE_GIT;
|
|
234
|
+
}
|
|
235
|
+
const result = await this.configManager.get('guide.source');
|
|
236
|
+
if (typeof result.value === 'string' && result.value.length > 0) {
|
|
237
|
+
return result.value;
|
|
147
238
|
}
|
|
148
239
|
return DEFAULT_SOURCE_GIT;
|
|
149
240
|
}
|
|
150
|
-
/**
|
|
241
|
+
/**
|
|
242
|
+
* Resolve the install strategy from config.
|
|
243
|
+
*
|
|
244
|
+
* An unset key already yields the ConfigKeys default, so there is no
|
|
245
|
+
* fallback branch here. Config read errors propagate (D7). `deprecatedAlias`
|
|
246
|
+
* carries the original spelling when the config value was a deprecated name,
|
|
247
|
+
* so the caller can print the D5 deprecation warning.
|
|
248
|
+
*/
|
|
151
249
|
async resolveStrategy() {
|
|
152
|
-
if (this.configManager) {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
}
|
|
159
|
-
catch {
|
|
160
|
-
// Fall through to default
|
|
161
|
-
}
|
|
250
|
+
if (!this.configManager) {
|
|
251
|
+
return { method: normalizeGuideMethod(CONFIG_KEYS['guide.git_strategy'].default) };
|
|
252
|
+
}
|
|
253
|
+
const result = await this.configManager.get('guide.git_strategy');
|
|
254
|
+
if (typeof result.value !== 'string') {
|
|
255
|
+
throw new Error(`Config key 'guide.git_strategy' must be a string, got ${typeof result.value}.`);
|
|
162
256
|
}
|
|
163
|
-
|
|
257
|
+
const method = normalizeGuideMethod(result.value);
|
|
258
|
+
return isDeprecatedGuideMethodAlias(result.value)
|
|
259
|
+
? { method, deprecatedAlias: result.value.trim() }
|
|
260
|
+
: { method };
|
|
164
261
|
}
|
|
165
262
|
/** Create user artifact directories alongside the guide */
|
|
166
263
|
createUserDirectories() {
|
|
@@ -182,7 +279,7 @@ export class GuideManager {
|
|
|
182
279
|
return new SubmoduleStrategy();
|
|
183
280
|
case 'clone':
|
|
184
281
|
return new CloneStrategy();
|
|
185
|
-
case '
|
|
282
|
+
case 'tarball':
|
|
186
283
|
return new TarballStrategy();
|
|
187
284
|
}
|
|
188
285
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GuideManager.js","sourceRoot":"","sources":["../../src/guides/GuideManager.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAGnD,OAAO,
|
|
1
|
+
{"version":3,"file":"GuideManager.js","sourceRoot":"","sources":["../../src/guides/GuideManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branchGuard.d.ts","sourceRoot":"","sources":["../../src/guides/branchGuard.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAGhE,MAAM,MAAM,kBAAkB,GAC1B;IAAE,OAAO,EAAE,SAAS,CAAA;CAAE,GACtB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,UAAU,GAAG,WAAW,CAAA;CAAE,CAAC;AAE5F;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBvE;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEb,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAU3C;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,WAAW,CAAC;gBAEhC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,GAAG,WAAW;CAW/E;
|
|
1
|
+
{"version":3,"file":"branchGuard.d.ts","sourceRoot":"","sources":["../../src/guides/branchGuard.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAGhE,MAAM,MAAM,kBAAkB,GAC1B;IAAE,OAAO,EAAE,SAAS,CAAA;CAAE,GACtB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,UAAU,GAAG,WAAW,CAAA;CAAE,CAAC;AAE5F;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBvE;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEb,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAU3C;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,WAAW,CAAC;gBAEhC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,GAAG,WAAW;CAW/E;AA2BD;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAqC7B"}
|
|
@@ -52,6 +52,32 @@ export class BranchGuardWarnError extends Error {
|
|
|
52
52
|
this.ancestry = ancestry;
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Name the current branch, including one that has no commits yet.
|
|
57
|
+
*
|
|
58
|
+
* `rev-parse --abbrev-ref HEAD` fails in a repository straight after
|
|
59
|
+
* `git init` (an "unborn" branch: HEAD names a ref that does not exist), which
|
|
60
|
+
* is exactly the state `cf init` leaves a new project in. `symbolic-ref` still
|
|
61
|
+
* reads the branch name there. Any other rev-parse failure is re-thrown as is.
|
|
62
|
+
*/
|
|
63
|
+
async function currentBranch(projectPath) {
|
|
64
|
+
try {
|
|
65
|
+
const { stdout } = await gitExec(['rev-parse', '--abbrev-ref', 'HEAD'], projectPath);
|
|
66
|
+
return { name: stdout, unborn: false };
|
|
67
|
+
}
|
|
68
|
+
catch (revParseError) {
|
|
69
|
+
let name;
|
|
70
|
+
try {
|
|
71
|
+
({ stdout: name } = await gitExec(['symbolic-ref', '--short', '-q', 'HEAD'], projectPath));
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// symbolic-ref failing too means the original failure was not an unborn
|
|
75
|
+
// branch (not a repository, git missing); surface that error, not this one.
|
|
76
|
+
throw revParseError;
|
|
77
|
+
}
|
|
78
|
+
return { name, unborn: true };
|
|
79
|
+
}
|
|
80
|
+
}
|
|
55
81
|
/**
|
|
56
82
|
* Resolves the configured trunk branch and the current branch, then applies the
|
|
57
83
|
* guard decision table to determine whether a guide-update commit should proceed,
|
|
@@ -73,7 +99,7 @@ export async function evaluateBranchGuard(projectPath, configManager) {
|
|
|
73
99
|
// resolveStrategy() fallback pattern for the same config source.
|
|
74
100
|
}
|
|
75
101
|
}
|
|
76
|
-
const {
|
|
102
|
+
const { name: current, unborn } = await currentBranch(projectPath);
|
|
77
103
|
if (current === 'HEAD') {
|
|
78
104
|
return { outcome: 'block', trunk, current: 'HEAD' };
|
|
79
105
|
}
|
|
@@ -83,6 +109,11 @@ export async function evaluateBranchGuard(projectPath, configManager) {
|
|
|
83
109
|
if (current === 'main' && trunk !== 'main') {
|
|
84
110
|
return { outcome: 'block', trunk, current };
|
|
85
111
|
}
|
|
112
|
+
if (unborn) {
|
|
113
|
+
// No commits yet, so there is no ancestry to test; the caller asks for
|
|
114
|
+
// confirmation exactly as it does for a branch with no common history.
|
|
115
|
+
return { outcome: 'warn', trunk, current, ancestry: 'unrelated' };
|
|
116
|
+
}
|
|
86
117
|
const descends = await isAncestor(trunk, projectPath);
|
|
87
118
|
return descends
|
|
88
119
|
? { outcome: 'warn', trunk, current, ancestry: 'descends' }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branchGuard.js","sourceRoot":"","sources":["../../src/guides/branchGuard.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"branchGuard.js","sourceRoot":"","sources":["../../src/guides/branchGuard.ts"],"names":[],"mappings":"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"}
|
package/dist/guides/gitExec.d.ts
CHANGED
|
@@ -10,12 +10,24 @@ export interface GitExecResult {
|
|
|
10
10
|
export declare const GUIDE_OFFLINE_REMEDIATION: string;
|
|
11
11
|
/** Append remediation guidance when a message looks like a network/DNS failure. */
|
|
12
12
|
export declare function withNetworkErrorHint(message: string): string;
|
|
13
|
+
export interface GitExecOptions {
|
|
14
|
+
/**
|
|
15
|
+
* Kill the command after this many milliseconds. Omit for no bound.
|
|
16
|
+
*
|
|
17
|
+
* Only automatic operations inside a read command set this: a credential
|
|
18
|
+
* prompt is already prevented by GIT_NONINTERACTIVE_ENV, but a proxy that
|
|
19
|
+
* accepts a connection and never answers would otherwise block for the OS
|
|
20
|
+
* TCP timeout. User-initiated install and update stay unbounded (D10).
|
|
21
|
+
*/
|
|
22
|
+
timeoutMs?: number;
|
|
23
|
+
}
|
|
13
24
|
/**
|
|
14
25
|
* Execute a git command safely using execFile (no shell injection).
|
|
15
26
|
* @param args - arguments to pass to git (e.g., ['clone', url, dir])
|
|
16
27
|
* @param cwd - working directory for the command
|
|
28
|
+
* @param opts - optional execution bounds
|
|
17
29
|
*/
|
|
18
|
-
export declare function gitExec(args: string[], cwd: string): Promise<GitExecResult>;
|
|
30
|
+
export declare function gitExec(args: string[], cwd: string, opts?: GitExecOptions): Promise<GitExecResult>;
|
|
19
31
|
/** Check whether git is available on the system */
|
|
20
32
|
export declare function isGitAvailable(): Promise<boolean>;
|
|
21
33
|
/** Check whether a directory is inside a git repository */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitExec.d.ts","sourceRoot":"","sources":["../../src/guides/gitExec.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;
|
|
1
|
+
{"version":3,"file":"gitExec.d.ts","sourceRoot":"","sources":["../../src/guides/gitExec.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AA4BD;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,QAE4B,CAAC;AAEnE,mFAAmF;AACnF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQ5D;AAED,MAAM,WAAW,cAAc;IAC7B;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,aAAa,CAAC,CA+BxB;AAED,mDAAmD;AACnD,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAOvD;AAED,2DAA2D;AAC3D,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO7D"}
|
package/dist/guides/gitExec.js
CHANGED
|
@@ -13,6 +13,9 @@ const NETWORK_ERROR_PATTERNS = [
|
|
|
13
13
|
/could not resolve host/i,
|
|
14
14
|
/could not connect to/i,
|
|
15
15
|
/connection timed out/i,
|
|
16
|
+
// Our own timeout message (see GitExecOptions.timeoutMs). The existing
|
|
17
|
+
// 'connection timed out' pattern is git's wording and does not match it.
|
|
18
|
+
/timed out after \d+s/i,
|
|
16
19
|
/network is unreachable/i,
|
|
17
20
|
/ssl certificate problem/i,
|
|
18
21
|
/failed to connect/i,
|
|
@@ -39,12 +42,25 @@ export function withNetworkErrorHint(message) {
|
|
|
39
42
|
* Execute a git command safely using execFile (no shell injection).
|
|
40
43
|
* @param args - arguments to pass to git (e.g., ['clone', url, dir])
|
|
41
44
|
* @param cwd - working directory for the command
|
|
45
|
+
* @param opts - optional execution bounds
|
|
42
46
|
*/
|
|
43
|
-
export function gitExec(args, cwd) {
|
|
47
|
+
export function gitExec(args, cwd, opts) {
|
|
44
48
|
return new Promise((resolve, reject) => {
|
|
45
|
-
|
|
49
|
+
const timeoutMs = opts?.timeoutMs;
|
|
50
|
+
execFile('git', args, {
|
|
51
|
+
cwd,
|
|
52
|
+
env: { ...process.env, ...GIT_NONINTERACTIVE_ENV },
|
|
53
|
+
...(timeoutMs ? { timeout: timeoutMs, killSignal: 'SIGTERM' } : {}),
|
|
54
|
+
}, (error, stdout, stderr) => {
|
|
46
55
|
if (error) {
|
|
47
|
-
|
|
56
|
+
// execFile reports a timeout kill via `killed`; surface it as a
|
|
57
|
+
// timeout so withNetworkErrorHint's /timed out/i pattern appends the
|
|
58
|
+
// offline remediation text.
|
|
59
|
+
const killedByTimeout = timeoutMs !== undefined &&
|
|
60
|
+
error.killed === true;
|
|
61
|
+
const detail = killedByTimeout
|
|
62
|
+
? `timed out after ${Math.round(timeoutMs / 1000)}s`
|
|
63
|
+
: stderr.trim() || error.message;
|
|
48
64
|
reject(new Error(withNetworkErrorHint(`git ${redactCredentials(args)} failed in ${cwd}: ${detail}`)));
|
|
49
65
|
return;
|
|
50
66
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitExec.js","sourceRoot":"","sources":["../../src/guides/gitExec.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAOzC,oFAAoF;AACpF,kFAAkF;AAClF,mFAAmF;AACnF,MAAM,sBAAsB,GAAG,EAAE,mBAAmB,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC;AAEtF,6GAA6G;AAC7G,SAAS,iBAAiB,CAAC,IAAc;IACvC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChF,CAAC;AAED,2EAA2E;AAC3E,MAAM,sBAAsB,GAAG;IAC7B,yBAAyB;IACzB,uBAAuB;IACvB,uBAAuB;IACvB,yBAAyB;IACzB,0BAA0B;IAC1B,oBAAoB;IACpB,YAAY;IACZ,eAAe;IACf,YAAY;CACb,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GACpC,+EAA+E;IAC/E,gEAAgE,CAAC;AAEnE,mFAAmF;AACnF,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACrE,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,CACL,GAAG,OAAO,IAAI;QACd,gEAAgE,yBAAyB,EAAE,CAC5F,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"gitExec.js","sourceRoot":"","sources":["../../src/guides/gitExec.ts"],"names":[],"mappings":"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"}
|
package/dist/guides/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { GuideManager } from './GuideManager.js';
|
|
2
2
|
export { GuideDetector } from './GuideDetector.js';
|
|
3
|
-
export { type GuideInfo, type GuideMethod, type InstallResult, type UpdateResult, type DetectionResult, type InstallStrategy, DEFAULT_SOURCE_GIT, DEFAULT_SOURCE_API, GUIDE_RELATIVE_PATH, VERSION_MARKER_FILE, } from './types.js';
|
|
3
|
+
export { type GuideInfo, type GuideMethod, type InstallResult, type UpdateResult, type DetectionResult, type InstallStrategy, type SubmoduleCheckoutState, type EnsureCheckoutResult, CHECKOUT_STATE_LABELS, GUIDE_INIT_TIMEOUT_MS, GUIDE_MANAGED_NOTICE, GUIDE_METHODS, GUIDE_METHOD_DEPRECATED_ALIASES, normalizeGuideMethod, isDeprecatedGuideMethodAlias, DEFAULT_SOURCE_GIT, DEFAULT_SOURCE_API, GUIDE_RELATIVE_PATH, VERSION_MARKER_FILE, GUIDE_STRATEGIES, guideMethodDeprecationMessage, } from './types.js';
|
|
4
4
|
export { GUIDE_OFFLINE_REMEDIATION } from './gitExec.js';
|
|
5
5
|
export { type BranchGuardVerdict, evaluateBranchGuard, BranchGuardBlockedError, BranchGuardWarnError, } from './branchGuard.js';
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/guides/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/guides/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,+BAA+B,EAC/B,oBAAoB,EACpB,4BAA4B,EAC5B,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,6BAA6B,GAC9B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EACL,KAAK,kBAAkB,EACvB,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC"}
|
package/dist/guides/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Guide management — public exports
|
|
2
2
|
export { GuideManager } from './GuideManager.js';
|
|
3
3
|
export { GuideDetector } from './GuideDetector.js';
|
|
4
|
-
export { DEFAULT_SOURCE_GIT, DEFAULT_SOURCE_API, GUIDE_RELATIVE_PATH, VERSION_MARKER_FILE, } from './types.js';
|
|
4
|
+
export { CHECKOUT_STATE_LABELS, GUIDE_INIT_TIMEOUT_MS, GUIDE_MANAGED_NOTICE, GUIDE_METHODS, GUIDE_METHOD_DEPRECATED_ALIASES, normalizeGuideMethod, isDeprecatedGuideMethodAlias, DEFAULT_SOURCE_GIT, DEFAULT_SOURCE_API, GUIDE_RELATIVE_PATH, VERSION_MARKER_FILE, GUIDE_STRATEGIES, guideMethodDeprecationMessage, } from './types.js';
|
|
5
5
|
// gitExec itself stays internal; only the shared remediation text is public (#78).
|
|
6
6
|
export { GUIDE_OFFLINE_REMEDIATION } from './gitExec.js';
|
|
7
7
|
export { evaluateBranchGuard, BranchGuardBlockedError, BranchGuardWarnError, } from './branchGuard.js';
|
package/dist/guides/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/guides/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/guides/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EASL,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,+BAA+B,EAC/B,oBAAoB,EACpB,4BAA4B,EAC5B,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,6BAA6B,GAC9B,MAAM,YAAY,CAAC;AACpB,mFAAmF;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAEL,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC"}
|
|
@@ -10,5 +10,22 @@ export declare class SubmoduleStrategy implements InstallStrategy {
|
|
|
10
10
|
* where `git submodule update` would only sync to the worktree's own index.
|
|
11
11
|
*/
|
|
12
12
|
sync(worktreePath: string, projectPath: string): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Check out an uninitialized guide submodule at the commit the host repo
|
|
15
|
+
* pins, and report that commit.
|
|
16
|
+
*
|
|
17
|
+
* Only touches the submodule working tree: it runs no `git add` and makes no
|
|
18
|
+
* host commit, so it cannot trip the branch guard. Safe to call when the
|
|
19
|
+
* submodule is already initialized, in which case git does nothing.
|
|
20
|
+
*
|
|
21
|
+
* @param operationPath - repo (or worktree) whose submodule to initialize
|
|
22
|
+
* @param opts.timeoutMs - bound the fetch; callers on a read path set this,
|
|
23
|
+
* install and update leave it unset (D10)
|
|
24
|
+
*/
|
|
25
|
+
init(operationPath: string, opts?: {
|
|
26
|
+
timeoutMs?: number;
|
|
27
|
+
}): Promise<{
|
|
28
|
+
commit: string;
|
|
29
|
+
}>;
|
|
13
30
|
}
|
|
14
31
|
//# sourceMappingURL=SubmoduleStrategy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubmoduleStrategy.d.ts","sourceRoot":"","sources":["../../../src/guides/strategies/SubmoduleStrategy.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAIjG,qBAAa,iBAAkB,YAAW,eAAe;IACjD,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IA2B/E,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAkCvF,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAsC3E;;;;;OAKG;IACG,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"SubmoduleStrategy.d.ts","sourceRoot":"","sources":["../../../src/guides/strategies/SubmoduleStrategy.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAIjG,qBAAa,iBAAkB,YAAW,eAAe;IACjD,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IA2B/E,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAkCvF,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAsC3E;;;;;OAKG;IACG,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBpE;;;;;;;;;;;OAWG;IACG,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAW9F"}
|
|
@@ -100,12 +100,31 @@ export class SubmoduleStrategy {
|
|
|
100
100
|
throw new Error('Could not read submodule commit from project HEAD');
|
|
101
101
|
}
|
|
102
102
|
const targetCommit = match[1];
|
|
103
|
-
// Ensure submodule is initialized in the worktree
|
|
104
|
-
|
|
103
|
+
// Ensure submodule is initialized in the worktree. No timeout: sync() is
|
|
104
|
+
// reached from user-initiated update, which stays unbounded (D10).
|
|
105
|
+
await this.init(worktreePath);
|
|
105
106
|
// Fetch latest objects so the target commit is available, then checkout
|
|
106
107
|
const guidePath = join(worktreePath, GUIDE_RELATIVE_PATH);
|
|
107
108
|
await gitExec(['fetch', 'origin'], guidePath);
|
|
108
109
|
await gitExec(['checkout', targetCommit], guidePath);
|
|
109
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* Check out an uninitialized guide submodule at the commit the host repo
|
|
113
|
+
* pins, and report that commit.
|
|
114
|
+
*
|
|
115
|
+
* Only touches the submodule working tree: it runs no `git add` and makes no
|
|
116
|
+
* host commit, so it cannot trip the branch guard. Safe to call when the
|
|
117
|
+
* submodule is already initialized, in which case git does nothing.
|
|
118
|
+
*
|
|
119
|
+
* @param operationPath - repo (or worktree) whose submodule to initialize
|
|
120
|
+
* @param opts.timeoutMs - bound the fetch; callers on a read path set this,
|
|
121
|
+
* install and update leave it unset (D10)
|
|
122
|
+
*/
|
|
123
|
+
async init(operationPath, opts) {
|
|
124
|
+
await gitExec(['submodule', 'update', '--init', GUIDE_RELATIVE_PATH], operationPath, opts?.timeoutMs ? { timeoutMs: opts.timeoutMs } : undefined);
|
|
125
|
+
const guidePath = join(operationPath, GUIDE_RELATIVE_PATH);
|
|
126
|
+
const { stdout } = await gitExec(['rev-parse', '--short', 'HEAD'], guidePath);
|
|
127
|
+
return { commit: stdout };
|
|
128
|
+
}
|
|
110
129
|
}
|
|
111
130
|
//# sourceMappingURL=SubmoduleStrategy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubmoduleStrategy.js","sourceRoot":"","sources":["../../../src/guides/strategies/SubmoduleStrategy.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"SubmoduleStrategy.js","sourceRoot":"","sources":["../../../src/guides/strategies/SubmoduleStrategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,7 @@ export class TarballStrategy {
|
|
|
25
25
|
return null;
|
|
26
26
|
try {
|
|
27
27
|
const version = readFileSync(markerPath, 'utf-8').trim() || null;
|
|
28
|
-
return { method: '
|
|
28
|
+
return { method: 'tarball', version, source: null };
|
|
29
29
|
}
|
|
30
30
|
catch {
|
|
31
31
|
return null;
|
|
@@ -39,7 +39,7 @@ export class TarballStrategy {
|
|
|
39
39
|
}
|
|
40
40
|
await this.downloadAndExtract(resolvedSource, latestTag, targetDir);
|
|
41
41
|
writeFileSync(join(targetDir, VERSION_MARKER_FILE), latestTag, 'utf-8');
|
|
42
|
-
return { success: true, version: latestTag, method: '
|
|
42
|
+
return { success: true, version: latestTag, method: 'tarball', path: targetDir };
|
|
43
43
|
}
|
|
44
44
|
async update(_projectPath, targetDir) {
|
|
45
45
|
const markerPath = join(targetDir, VERSION_MARKER_FILE);
|
|
@@ -57,13 +57,13 @@ export class TarballStrategy {
|
|
|
57
57
|
throw new Error('Could not determine latest version from remote.');
|
|
58
58
|
}
|
|
59
59
|
if (previousVersion === latestTag) {
|
|
60
|
-
return { success: true, previousVersion, newVersion: latestTag, method: '
|
|
60
|
+
return { success: true, previousVersion, newVersion: latestTag, method: 'tarball' };
|
|
61
61
|
}
|
|
62
62
|
// Remove existing contents and re-download
|
|
63
63
|
rmSync(targetDir, { recursive: true, force: true });
|
|
64
64
|
await this.downloadAndExtract(source, latestTag, targetDir);
|
|
65
65
|
writeFileSync(join(targetDir, VERSION_MARKER_FILE), latestTag, 'utf-8');
|
|
66
|
-
return { success: true, previousVersion, newVersion: latestTag, method: '
|
|
66
|
+
return { success: true, previousVersion, newVersion: latestTag, method: 'tarball' };
|
|
67
67
|
}
|
|
68
68
|
/**
|
|
69
69
|
* Fetch latest tag from remote using git ls-remote. Real failures (network,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TarballStrategy.js","sourceRoot":"","sources":["../../../src/guides/strategies/TarballStrategy.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAChF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAE9B,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE9D;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,MAAM,KAAK,GAAG,gCAAgC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,mDAAmD,MAAM,EAAE,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,OAAO,eAAe;IAC1B,KAAK,CAAC,MAAM,CAAC,YAAoB,EAAE,SAAiB;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;QACxD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QAEzC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;YACjE,OAAO,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"TarballStrategy.js","sourceRoot":"","sources":["../../../src/guides/strategies/TarballStrategy.ts"],"names":[],"mappings":"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"}
|
package/dist/guides/types.d.ts
CHANGED
|
@@ -1,9 +1,64 @@
|
|
|
1
1
|
/** Installation method used for the ai-project-guide */
|
|
2
|
-
export type GuideMethod = 'submodule' | 'clone' | '
|
|
2
|
+
export type GuideMethod = 'submodule' | 'clone' | 'tarball';
|
|
3
|
+
/** Canonical guide methods, in the order they are presented to users. */
|
|
4
|
+
export declare const GUIDE_METHODS: readonly GuideMethod[];
|
|
5
|
+
/**
|
|
6
|
+
* Deprecated strategy names accepted on input, mapped to their canonical
|
|
7
|
+
* replacement. Callers check this to emit a deprecation warning without
|
|
8
|
+
* re-comparing strings. This is the only place an alias is spelled in core
|
|
9
|
+
* source outside the ConfigKeys enum (which keeps `manual` so existing
|
|
10
|
+
* shared config files still validate).
|
|
11
|
+
*/
|
|
12
|
+
export declare const GUIDE_METHOD_DEPRECATED_ALIASES: Readonly<Record<string, GuideMethod>>;
|
|
13
|
+
/**
|
|
14
|
+
* Normalize a strategy name from any input boundary (config value, CLI
|
|
15
|
+
* `--strategy` flag, MCP tool parameter) into a canonical GuideMethod.
|
|
16
|
+
* Throws when the input is neither canonical nor a known deprecated alias.
|
|
17
|
+
*/
|
|
18
|
+
export declare function normalizeGuideMethod(input: string): GuideMethod;
|
|
19
|
+
/**
|
|
20
|
+
* True when `input` is a deprecated alias rather than a canonical method.
|
|
21
|
+
* Lets a boundary decide whether to print the D5 deprecation warning.
|
|
22
|
+
*/
|
|
23
|
+
export declare function isDeprecatedGuideMethodAlias(input: string): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* The one spelling of the D5 deprecation warning. The CLI prints it to stderr
|
|
26
|
+
* and the MCP server returns it as a notice, so the sentence lives here rather
|
|
27
|
+
* than at each boundary.
|
|
28
|
+
*/
|
|
29
|
+
export declare function guideMethodDeprecationMessage(alias: string, method: GuideMethod): string;
|
|
30
|
+
/**
|
|
31
|
+
* The installation strategies offered to users, with the one-line trade-off
|
|
32
|
+
* shown for each. `cf init --help`, `cf guides install --help` and the MCP
|
|
33
|
+
* `guide_install` description all render from this single descriptor (D8),
|
|
34
|
+
* so the wording cannot drift between surfaces. Adding a GuideMethod without
|
|
35
|
+
* an entry here is a compile error.
|
|
36
|
+
*/
|
|
37
|
+
export declare const GUIDE_STRATEGIES: Record<GuideMethod, {
|
|
38
|
+
summary: string;
|
|
39
|
+
}>;
|
|
40
|
+
/**
|
|
41
|
+
* Checkout state of a submodule-installed guide, as `git submodule status`
|
|
42
|
+
* reports it. Only meaningful for the submodule method.
|
|
43
|
+
*/
|
|
44
|
+
export type SubmoduleCheckoutState = 'in_sync' | 'out_of_sync' | 'not_initialized';
|
|
45
|
+
/** Human-readable labels for each checkout state, used in CLI and tool output. */
|
|
46
|
+
export declare const CHECKOUT_STATE_LABELS: Record<SubmoduleCheckoutState, string>;
|
|
47
|
+
/**
|
|
48
|
+
* Upper bound on the automatic `git submodule update --init` performed by a
|
|
49
|
+
* read command. A blackholed proxy would otherwise block for the OS TCP
|
|
50
|
+
* timeout. User-initiated install and update stay unbounded (D10).
|
|
51
|
+
*/
|
|
52
|
+
export declare const GUIDE_INIT_TIMEOUT_MS = 60000;
|
|
3
53
|
/** Full status of a guide installation */
|
|
4
54
|
export interface GuideInfo {
|
|
5
55
|
installed: boolean;
|
|
6
56
|
method: GuideMethod | null;
|
|
57
|
+
/**
|
|
58
|
+
* Submodule checkout state; null for clone/tarball installs and when no
|
|
59
|
+
* guide is installed.
|
|
60
|
+
*/
|
|
61
|
+
checkout: SubmoduleCheckoutState | null;
|
|
7
62
|
version: string | null;
|
|
8
63
|
path: string;
|
|
9
64
|
source: string;
|
|
@@ -11,12 +66,32 @@ export interface GuideInfo {
|
|
|
11
66
|
updateAvailable: boolean;
|
|
12
67
|
usingBundledPrompt: boolean;
|
|
13
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* Outcome of GuideManager.ensureCheckout().
|
|
71
|
+
*
|
|
72
|
+
* `none` means nothing needed doing; `initialized` means an uninitialized
|
|
73
|
+
* submodule was checked out; `warned` means the checkout differs from the
|
|
74
|
+
* pinned commit and was deliberately left alone (D2).
|
|
75
|
+
*/
|
|
76
|
+
export interface EnsureCheckoutResult {
|
|
77
|
+
action: 'none' | 'initialized' | 'warned';
|
|
78
|
+
/** Short SHA of the checked-out guide commit, when action is 'initialized'. */
|
|
79
|
+
commit?: string;
|
|
80
|
+
/** Human-readable notice, present whenever action is not 'none'. */
|
|
81
|
+
message?: string;
|
|
82
|
+
}
|
|
14
83
|
/** Result of a guide installation */
|
|
15
84
|
export interface InstallResult {
|
|
16
85
|
success: boolean;
|
|
17
86
|
version: string | null;
|
|
18
87
|
method: GuideMethod;
|
|
19
88
|
path: string;
|
|
89
|
+
/**
|
|
90
|
+
* Set when the requested strategy was named by a deprecated alias (e.g.
|
|
91
|
+
* `manual`), carrying the original spelling. Callers print a deprecation
|
|
92
|
+
* warning; absent when the canonical name was used (D5).
|
|
93
|
+
*/
|
|
94
|
+
deprecatedAlias?: string;
|
|
20
95
|
}
|
|
21
96
|
/** Result of a guide update */
|
|
22
97
|
export interface UpdateResult {
|
|
@@ -55,6 +130,11 @@ export interface InstallStrategy {
|
|
|
55
130
|
update(projectPath: string, targetDir: string): Promise<UpdateResult>;
|
|
56
131
|
detect(projectPath: string, targetDir: string): Promise<DetectionResult | null>;
|
|
57
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* Stated wherever the guide directory is described, so a user learns the rule
|
|
135
|
+
* before `cf guides update` overwrites an edit they made in place (D9, #82).
|
|
136
|
+
*/
|
|
137
|
+
export declare const GUIDE_MANAGED_NOTICE: string;
|
|
58
138
|
export declare const DEFAULT_SOURCE_GIT = "https://github.com/ecorkran/ai-project-guide.git";
|
|
59
139
|
export declare const DEFAULT_SOURCE_API = "https://api.github.com/repos/ecorkran/ai-project-guide";
|
|
60
140
|
export declare const GUIDE_RELATIVE_PATH = "project-documents/ai-project-guide";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/guides/types.ts"],"names":[],"mappings":"AAEA,wDAAwD;AACxD,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/guides/types.ts"],"names":[],"mappings":"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"}
|
package/dist/guides/types.js
CHANGED
|
@@ -1,5 +1,81 @@
|
|
|
1
1
|
// Guide management types and strategy interface
|
|
2
|
+
/** Canonical guide methods, in the order they are presented to users. */
|
|
3
|
+
export const GUIDE_METHODS = ['submodule', 'clone', 'tarball'];
|
|
4
|
+
/**
|
|
5
|
+
* Deprecated strategy names accepted on input, mapped to their canonical
|
|
6
|
+
* replacement. Callers check this to emit a deprecation warning without
|
|
7
|
+
* re-comparing strings. This is the only place an alias is spelled in core
|
|
8
|
+
* source outside the ConfigKeys enum (which keeps `manual` so existing
|
|
9
|
+
* shared config files still validate).
|
|
10
|
+
*/
|
|
11
|
+
export const GUIDE_METHOD_DEPRECATED_ALIASES = {
|
|
12
|
+
manual: 'tarball',
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Normalize a strategy name from any input boundary (config value, CLI
|
|
16
|
+
* `--strategy` flag, MCP tool parameter) into a canonical GuideMethod.
|
|
17
|
+
* Throws when the input is neither canonical nor a known deprecated alias.
|
|
18
|
+
*/
|
|
19
|
+
export function normalizeGuideMethod(input) {
|
|
20
|
+
const candidate = input.trim();
|
|
21
|
+
const canonical = GUIDE_METHODS.find((method) => method === candidate);
|
|
22
|
+
if (canonical) {
|
|
23
|
+
return canonical;
|
|
24
|
+
}
|
|
25
|
+
const aliased = GUIDE_METHOD_DEPRECATED_ALIASES[candidate];
|
|
26
|
+
if (aliased) {
|
|
27
|
+
return aliased;
|
|
28
|
+
}
|
|
29
|
+
throw new Error(`Invalid guide strategy '${input}'. Valid values: ${GUIDE_METHODS.join(', ')}.`);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* True when `input` is a deprecated alias rather than a canonical method.
|
|
33
|
+
* Lets a boundary decide whether to print the D5 deprecation warning.
|
|
34
|
+
*/
|
|
35
|
+
export function isDeprecatedGuideMethodAlias(input) {
|
|
36
|
+
return input.trim() in GUIDE_METHOD_DEPRECATED_ALIASES;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The one spelling of the D5 deprecation warning. The CLI prints it to stderr
|
|
40
|
+
* and the MCP server returns it as a notice, so the sentence lives here rather
|
|
41
|
+
* than at each boundary.
|
|
42
|
+
*/
|
|
43
|
+
export function guideMethodDeprecationMessage(alias, method) {
|
|
44
|
+
return `Strategy '${alias}' is deprecated; use '${method}' instead.`;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The installation strategies offered to users, with the one-line trade-off
|
|
48
|
+
* shown for each. `cf init --help`, `cf guides install --help` and the MCP
|
|
49
|
+
* `guide_install` description all render from this single descriptor (D8),
|
|
50
|
+
* so the wording cannot drift between surfaces. Adding a GuideMethod without
|
|
51
|
+
* an entry here is a compile error.
|
|
52
|
+
*/
|
|
53
|
+
export const GUIDE_STRATEGIES = {
|
|
54
|
+
submodule: {
|
|
55
|
+
summary: 'version-pinned and updatable, but teammates must run git submodule update',
|
|
56
|
+
},
|
|
57
|
+
clone: { summary: 'a full working copy you can commit to, larger checkout' },
|
|
58
|
+
tarball: { summary: 'plain files with no git wiring, simplest for teams' },
|
|
59
|
+
};
|
|
60
|
+
/** Human-readable labels for each checkout state, used in CLI and tool output. */
|
|
61
|
+
export const CHECKOUT_STATE_LABELS = {
|
|
62
|
+
in_sync: 'in sync',
|
|
63
|
+
out_of_sync: 'out of sync',
|
|
64
|
+
not_initialized: 'not initialized',
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Upper bound on the automatic `git submodule update --init` performed by a
|
|
68
|
+
* read command. A blackholed proxy would otherwise block for the OS TCP
|
|
69
|
+
* timeout. User-initiated install and update stay unbounded (D10).
|
|
70
|
+
*/
|
|
71
|
+
export const GUIDE_INIT_TIMEOUT_MS = 60_000;
|
|
2
72
|
// Constants
|
|
73
|
+
/**
|
|
74
|
+
* Stated wherever the guide directory is described, so a user learns the rule
|
|
75
|
+
* before `cf guides update` overwrites an edit they made in place (D9, #82).
|
|
76
|
+
*/
|
|
77
|
+
export const GUIDE_MANAGED_NOTICE = 'This directory is managed by cf and overwritten on `cf guides update`. ' +
|
|
78
|
+
'Put project-specific customizations under `project-documents/user/`.';
|
|
3
79
|
export const DEFAULT_SOURCE_GIT = 'https://github.com/ecorkran/ai-project-guide.git';
|
|
4
80
|
export const DEFAULT_SOURCE_API = 'https://api.github.com/repos/ecorkran/ai-project-guide';
|
|
5
81
|
export const GUIDE_RELATIVE_PATH = 'project-documents/ai-project-guide';
|
package/dist/guides/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/guides/types.ts"],"names":[],"mappings":"AAAA,gDAAgD;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/guides/types.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAKhD,yEAAyE;AACzE,MAAM,CAAC,MAAM,aAAa,GAA2B,CAAC,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAEvF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAA0C;IACpF,MAAM,EAAE,SAAS;CAClB,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IACvE,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,+BAA+B,CAAC,SAAS,CAAC,CAAC;IAC3D,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,IAAI,KAAK,CACb,2BAA2B,KAAK,oBAAoB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAChF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAAa;IACxD,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,+BAA+B,CAAC;AACzD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAAC,KAAa,EAAE,MAAmB;IAC9E,OAAO,aAAa,KAAK,yBAAyB,MAAM,YAAY,CAAC;AACvE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA6C;IACxE,SAAS,EAAE;QACT,OAAO,EAAE,2EAA2E;KACrF;IACD,KAAK,EAAE,EAAE,OAAO,EAAE,wDAAwD,EAAE;IAC5E,OAAO,EAAE,EAAE,OAAO,EAAE,oDAAoD,EAAE;CAC3E,CAAC;AAQF,kFAAkF;AAClF,MAAM,CAAC,MAAM,qBAAqB,GAA2C;IAC3E,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,aAAa;IAC1B,eAAe,EAAE,iBAAiB;CACnC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AA0F5C,YAAY;AAEZ;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAC/B,yEAAyE;IACzE,sEAAsE,CAAC;AAEzE,MAAM,CAAC,MAAM,kBAAkB,GAAG,kDAAkD,CAAC;AACrF,MAAM,CAAC,MAAM,kBAAkB,GAAG,wDAAwD,CAAC;AAC3F,MAAM,CAAC,MAAM,mBAAmB,GAAG,oCAAoC,CAAC;AACxE,MAAM,CAAC,MAAM,mBAAmB,GAAG,8BAA8B,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,8 @@ export * from './types/index.js';
|
|
|
2
2
|
export * from './services/index.js';
|
|
3
3
|
export type { IProjectStore, IStorageService, StorageReadResult } from './storage/interfaces.js';
|
|
4
4
|
export * from './introspection/index.js';
|
|
5
|
-
export type { GuideInfo, GuideMethod, InstallResult, UninstallResult, UpdateResult, SyncResult } from './guides/types.js';
|
|
5
|
+
export type { GuideInfo, GuideMethod, InstallResult, UninstallResult, UpdateResult, SyncResult, SubmoduleCheckoutState, EnsureCheckoutResult } from './guides/types.js';
|
|
6
|
+
export { CHECKOUT_STATE_LABELS, GUIDE_MANAGED_NOTICE, GUIDE_METHODS, GUIDE_METHOD_DEPRECATED_ALIASES, GUIDE_STRATEGIES, guideMethodDeprecationMessage, } from './guides/types.js';
|
|
6
7
|
export * from './schema/projectSchema.js';
|
|
7
8
|
export { FRONTMATTER_SCHEMAS, VALID_STATUSES, validateFrontmatter, inferDocTypeFromPath, inferFieldsFromPath, type FrontmatterFieldDef, type DocTypeSchema, type FrontmatterFinding, } from './schema/frontmatterSchema.js';
|
|
8
9
|
export { GitWorktreeDiscovery, parseWorktreeListOutput } from './git/index.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AAGpC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAGjG,cAAc,0BAA0B,CAAC;AAGzC,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AAGpC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAGjG,cAAc,0BAA0B,CAAC;AAGzC,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACxK,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,+BAA+B,EAC/B,gBAAgB,EAChB,6BAA6B,GAC9B,MAAM,mBAAmB,CAAC;AAG3B,cAAc,2BAA2B,CAAC;AAG1C,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,kBAAkB,GACxB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAI/E,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,iBAAiB,EACjB,4BAA4B,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,aAAa,GACnB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,6BAA6B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,7 @@ export * from './types/index.js';
|
|
|
3
3
|
export * from './services/index.js';
|
|
4
4
|
// Introspection types and interfaces (browser-safe — no fs dependencies)
|
|
5
5
|
export * from './introspection/index.js';
|
|
6
|
+
export { CHECKOUT_STATE_LABELS, GUIDE_MANAGED_NOTICE, GUIDE_METHODS, GUIDE_METHOD_DEPRECATED_ALIASES, GUIDE_STRATEGIES, guideMethodDeprecationMessage, } from './guides/types.js';
|
|
6
7
|
// Project schema (field metadata, aliases, phase maps)
|
|
7
8
|
export * from './schema/projectSchema.js';
|
|
8
9
|
// Frontmatter schema registry (per-docType field validation)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AAKpC,yEAAyE;AACzE,cAAc,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AAKpC,yEAAyE;AACzE,cAAc,0BAA0B,CAAC;AAIzC,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,+BAA+B,EAC/B,gBAAgB,EAChB,6BAA6B,GAC9B,MAAM,mBAAmB,CAAC;AAE3B,uDAAuD;AACvD,cAAc,2BAA2B,CAAC;AAE1C,6DAA6D;AAC7D,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,GAIpB,MAAM,+BAA+B,CAAC;AAEvC,gBAAgB;AAChB,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAE/E,iEAAiE;AACjE,4FAA4F;AAC5F,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,iBAAiB,EACjB,4BAA4B,GAG7B,MAAM,uBAAuB,CAAC;AAE/B,oEAAoE;AACpE,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,6BAA6B,CAAC"}
|
package/package.json
CHANGED