@tayo-dev/rtl 1.0.0 → 1.3.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +110 -112
- package/assets/claude/commands/@tayo-dev/rtl/generate.md +15 -0
- package/assets/claude/commands/@tayo-dev/rtl/help.md +16 -0
- package/assets/codex/@tayo-dev/rtl-conventions/SKILL.md +19 -0
- package/assets/codex/@tayo-dev/rtl-generate/SKILL.md +27 -0
- package/assets/codex/@tayo-dev/rtl-help/SKILL.md +25 -0
- package/assets/codex/@tayo-dev/rtl-mocks/SKILL.md +22 -0
- package/assets/gemini/commands/@tayo-dev/rtl/generate.toml +10 -0
- package/assets/gemini/commands/@tayo-dev/rtl/help.toml +11 -0
- package/assets/opencode/commands/@tayo-dev/rtl-generate.md +11 -0
- package/assets/opencode/commands/@tayo-dev/rtl-help.md +12 -0
- package/dist/cli/commands/generate.d.ts +1 -1
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +88 -149
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/install.d.ts +22 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +69 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/core/baseline-normalizer.d.ts +3 -0
- package/dist/core/baseline-normalizer.d.ts.map +1 -0
- package/dist/core/baseline-normalizer.js +65 -0
- package/dist/core/baseline-normalizer.js.map +1 -0
- package/dist/core/generator.d.ts.map +1 -1
- package/dist/core/generator.js +15 -0
- package/dist/core/generator.js.map +1 -1
- package/dist/core/input-loader.d.ts +4 -0
- package/dist/core/input-loader.d.ts.map +1 -0
- package/dist/core/input-loader.js +78 -0
- package/dist/core/input-loader.js.map +1 -0
- package/dist/core/js-parser.d.ts +6 -2
- package/dist/core/js-parser.d.ts.map +1 -1
- package/dist/core/js-parser.js +329 -72
- package/dist/core/js-parser.js.map +1 -1
- package/dist/core/parser.d.ts.map +1 -1
- package/dist/core/parser.js +11 -1
- package/dist/core/parser.js.map +1 -1
- package/dist/core/recording-intelligence.d.ts.map +1 -1
- package/dist/core/recording-intelligence.js +31 -5
- package/dist/core/recording-intelligence.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +11 -5
- package/dist/index.js.map +1 -1
- package/dist/install/assets.d.ts +5 -0
- package/dist/install/assets.d.ts.map +1 -0
- package/dist/install/assets.js +23 -0
- package/dist/install/assets.js.map +1 -0
- package/dist/install/executor.d.ts +4 -0
- package/dist/install/executor.d.ts.map +1 -0
- package/dist/install/executor.js +26 -0
- package/dist/install/executor.js.map +1 -0
- package/dist/install/manifest.d.ts +21 -0
- package/dist/install/manifest.d.ts.map +1 -0
- package/dist/install/manifest.js +45 -0
- package/dist/install/manifest.js.map +1 -0
- package/dist/install/options.d.ts +13 -0
- package/dist/install/options.d.ts.map +1 -0
- package/dist/install/options.js +87 -0
- package/dist/install/options.js.map +1 -0
- package/dist/install/planner.d.ts +8 -0
- package/dist/install/planner.d.ts.map +1 -0
- package/dist/install/planner.js +31 -0
- package/dist/install/planner.js.map +1 -0
- package/dist/install/prompts.d.ts +9 -0
- package/dist/install/prompts.d.ts.map +1 -0
- package/dist/install/prompts.js +98 -0
- package/dist/install/prompts.js.map +1 -0
- package/dist/install/registry.d.ts +3 -0
- package/dist/install/registry.d.ts.map +1 -0
- package/dist/install/registry.js +47 -0
- package/dist/install/registry.js.map +1 -0
- package/dist/install/resolver.d.ts +8 -0
- package/dist/install/resolver.d.ts.map +1 -0
- package/dist/install/resolver.js +20 -0
- package/dist/install/resolver.js.map +1 -0
- package/dist/install/runtimes/claude.d.ts +3 -0
- package/dist/install/runtimes/claude.d.ts.map +1 -0
- package/dist/install/runtimes/claude.js +8 -0
- package/dist/install/runtimes/claude.js.map +1 -0
- package/dist/install/runtimes/codex.d.ts +3 -0
- package/dist/install/runtimes/codex.d.ts.map +1 -0
- package/dist/install/runtimes/codex.js +51 -0
- package/dist/install/runtimes/codex.js.map +1 -0
- package/dist/install/runtimes/gemini.d.ts +3 -0
- package/dist/install/runtimes/gemini.d.ts.map +1 -0
- package/dist/install/runtimes/gemini.js +8 -0
- package/dist/install/runtimes/gemini.js.map +1 -0
- package/dist/install/runtimes/opencode.d.ts +3 -0
- package/dist/install/runtimes/opencode.d.ts.map +1 -0
- package/dist/install/runtimes/opencode.js +8 -0
- package/dist/install/runtimes/opencode.js.map +1 -0
- package/dist/install/runtimes/prompt-runtimes.d.ts +3 -0
- package/dist/install/runtimes/prompt-runtimes.d.ts.map +1 -0
- package/dist/install/runtimes/prompt-runtimes.js +74 -0
- package/dist/install/runtimes/prompt-runtimes.js.map +1 -0
- package/dist/install/summary.d.ts +12 -0
- package/dist/install/summary.d.ts.map +1 -0
- package/dist/install/summary.js +112 -0
- package/dist/install/summary.js.map +1 -0
- package/dist/install/types.d.ts +119 -0
- package/dist/install/types.d.ts.map +1 -0
- package/dist/install/types.js +5 -0
- package/dist/install/types.js.map +1 -0
- package/dist/install/verification.d.ts +3 -0
- package/dist/install/verification.d.ts.map +1 -0
- package/dist/install/verification.js +34 -0
- package/dist/install/verification.js.map +1 -0
- package/dist/install/writer.d.ts +11 -0
- package/dist/install/writer.d.ts.map +1 -0
- package/dist/install/writer.js +99 -0
- package/dist/install/writer.js.map +1 -0
- package/dist/types/recording.d.ts +50 -2
- package/dist/types/recording.d.ts.map +1 -1
- package/dist/types/recording.js +3 -1
- package/dist/types/recording.js.map +1 -1
- package/package.json +14 -2
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { createInterface } from 'node:readline/promises';
|
|
2
|
+
import { stdin, stdout } from 'node:process';
|
|
3
|
+
import pc from 'picocolors';
|
|
4
|
+
import { SUPPORTED_RUNTIMES } from './types.js';
|
|
5
|
+
import { RUNTIME_REGISTRY } from './registry.js';
|
|
6
|
+
const ALL_RUNTIMES_CHOICE = SUPPORTED_RUNTIMES.length + 1;
|
|
7
|
+
function runtimeMenu() {
|
|
8
|
+
const lines = SUPPORTED_RUNTIMES.map((runtime, index) => {
|
|
9
|
+
return ` ${index + 1}. ${RUNTIME_REGISTRY[runtime].displayName}`;
|
|
10
|
+
});
|
|
11
|
+
lines.push(` ${ALL_RUNTIMES_CHOICE}. All runtimes`);
|
|
12
|
+
return lines.join('\n');
|
|
13
|
+
}
|
|
14
|
+
function parseRuntimeSelection(answer) {
|
|
15
|
+
const selections = answer
|
|
16
|
+
.split(',')
|
|
17
|
+
.map((part) => Number(part.trim()))
|
|
18
|
+
.filter((value) => !Number.isNaN(value));
|
|
19
|
+
if (selections.length === 0) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
if (selections.includes(ALL_RUNTIMES_CHOICE)) {
|
|
23
|
+
return [...SUPPORTED_RUNTIMES];
|
|
24
|
+
}
|
|
25
|
+
const runtimes = Array.from(new Set(selections
|
|
26
|
+
.filter((value) => value >= 1 && value <= SUPPORTED_RUNTIMES.length)
|
|
27
|
+
.map((value) => SUPPORTED_RUNTIMES[value - 1])));
|
|
28
|
+
return runtimes.length > 0 ? runtimes : null;
|
|
29
|
+
}
|
|
30
|
+
function parseLocation(answer) {
|
|
31
|
+
const normalized = answer.trim().toLowerCase();
|
|
32
|
+
if (normalized === '1' || normalized === 'g' || normalized === 'global') {
|
|
33
|
+
return 'global';
|
|
34
|
+
}
|
|
35
|
+
if (normalized === '2' || normalized === 'l' || normalized === 'local') {
|
|
36
|
+
return 'local';
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
function deriveSelectionSource(normalized) {
|
|
41
|
+
if (normalized.source === 'flags' && normalized.mode === 'non-interactive') {
|
|
42
|
+
return 'flags';
|
|
43
|
+
}
|
|
44
|
+
if (normalized.source === 'prompt') {
|
|
45
|
+
return 'prompt';
|
|
46
|
+
}
|
|
47
|
+
return 'mixed';
|
|
48
|
+
}
|
|
49
|
+
export async function promptForInstallChoices(normalized, io = { input: stdin, output: stdout }) {
|
|
50
|
+
const rl = createInterface({
|
|
51
|
+
input: io.input ?? stdin,
|
|
52
|
+
output: io.output ?? stdout,
|
|
53
|
+
});
|
|
54
|
+
try {
|
|
55
|
+
let runtimes = [...normalized.runtimes];
|
|
56
|
+
if (normalized.needsRuntimePrompt) {
|
|
57
|
+
while (runtimes.length === 0) {
|
|
58
|
+
console.log(pc.bold('Choose the runtimes to install:'));
|
|
59
|
+
console.log(runtimeMenu());
|
|
60
|
+
const answer = await rl.question('Enter one or more numbers separated by commas: ');
|
|
61
|
+
const selectedRuntimes = parseRuntimeSelection(answer);
|
|
62
|
+
if (selectedRuntimes) {
|
|
63
|
+
runtimes = selectedRuntimes;
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
console.log(pc.yellow('Select at least one runtime to continue.\n'));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const locations = { ...normalized.locations };
|
|
70
|
+
for (const runtime of runtimes) {
|
|
71
|
+
if (locations[runtime]) {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
let location = null;
|
|
75
|
+
while (!location) {
|
|
76
|
+
console.log(`\n${pc.bold(RUNTIME_REGISTRY[runtime].displayName)} installation location:`);
|
|
77
|
+
console.log(' 1. Global');
|
|
78
|
+
console.log(' 2. Local');
|
|
79
|
+
const answer = await rl.question('Choose 1 or 2: ');
|
|
80
|
+
location = parseLocation(answer);
|
|
81
|
+
if (!location) {
|
|
82
|
+
console.log(pc.yellow('Choose `1` for global or `2` for local.'));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
locations[runtime] = location;
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
mode: 'interactive',
|
|
89
|
+
runtimes,
|
|
90
|
+
locations: locations,
|
|
91
|
+
source: deriveSelectionSource(normalized),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
finally {
|
|
95
|
+
rl.close();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/install/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/install/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAElE,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,aAAa,EAAE,iBAAiB,CA6CrE,CAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export const RUNTIME_REGISTRY = {
|
|
2
|
+
claude: {
|
|
3
|
+
id: 'claude',
|
|
4
|
+
displayName: 'Claude Code',
|
|
5
|
+
family: 'prompt',
|
|
6
|
+
globalDirectorySegments: ['.claude'],
|
|
7
|
+
localDirectoryName: '.claude',
|
|
8
|
+
packageContainerSegments: ['commands', '@tayo-dev', 'rtl'],
|
|
9
|
+
verificationCommand: '/@tayo-dev/rtl:help',
|
|
10
|
+
ownershipMarkerFileName: 'install-manifest.json',
|
|
11
|
+
assets: [],
|
|
12
|
+
},
|
|
13
|
+
opencode: {
|
|
14
|
+
id: 'opencode',
|
|
15
|
+
displayName: 'OpenCode',
|
|
16
|
+
family: 'prompt',
|
|
17
|
+
globalDirectorySegments: ['.config', 'opencode'],
|
|
18
|
+
localDirectoryName: '.opencode',
|
|
19
|
+
packageContainerSegments: ['commands', '@tayo-dev', 'rtl'],
|
|
20
|
+
verificationCommand: '/@tayo-dev/rtl-help',
|
|
21
|
+
ownershipMarkerFileName: 'install-manifest.json',
|
|
22
|
+
assets: [],
|
|
23
|
+
},
|
|
24
|
+
gemini: {
|
|
25
|
+
id: 'gemini',
|
|
26
|
+
displayName: 'Gemini CLI',
|
|
27
|
+
family: 'prompt',
|
|
28
|
+
globalDirectorySegments: ['.gemini'],
|
|
29
|
+
localDirectoryName: '.gemini',
|
|
30
|
+
packageContainerSegments: ['commands', '@tayo-dev', 'rtl'],
|
|
31
|
+
verificationCommand: '/@tayo-dev/rtl:help',
|
|
32
|
+
ownershipMarkerFileName: 'install-manifest.json',
|
|
33
|
+
assets: [],
|
|
34
|
+
},
|
|
35
|
+
codex: {
|
|
36
|
+
id: 'codex',
|
|
37
|
+
displayName: 'Codex',
|
|
38
|
+
family: 'skill',
|
|
39
|
+
globalDirectorySegments: ['.codex'],
|
|
40
|
+
localDirectoryName: '.codex',
|
|
41
|
+
packageContainerSegments: ['skills'],
|
|
42
|
+
verificationCommand: '$@tayo-dev/rtl-help',
|
|
43
|
+
ownershipMarkerFileName: '@tayo-dev-rtl-manifest.json',
|
|
44
|
+
assets: [],
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/install/registry.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAA6C;IACxE,MAAM,EAAE;QACN,EAAE,EAAE,QAAQ;QACZ,WAAW,EAAE,aAAa;QAC1B,MAAM,EAAE,QAAQ;QAChB,uBAAuB,EAAE,CAAC,SAAS,CAAC;QACpC,kBAAkB,EAAE,SAAS;QAC7B,wBAAwB,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,CAAC;QAC1D,mBAAmB,EAAE,qBAAqB;QAC1C,uBAAuB,EAAE,uBAAuB;QAChD,MAAM,EAAE,EAAE;KACX;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,UAAU;QACd,WAAW,EAAE,UAAU;QACvB,MAAM,EAAE,QAAQ;QAChB,uBAAuB,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;QAChD,kBAAkB,EAAE,WAAW;QAC/B,wBAAwB,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,CAAC;QAC1D,mBAAmB,EAAE,qBAAqB;QAC1C,uBAAuB,EAAE,uBAAuB;QAChD,MAAM,EAAE,EAAE;KACX;IACD,MAAM,EAAE;QACN,EAAE,EAAE,QAAQ;QACZ,WAAW,EAAE,YAAY;QACzB,MAAM,EAAE,QAAQ;QAChB,uBAAuB,EAAE,CAAC,SAAS,CAAC;QACpC,kBAAkB,EAAE,SAAS;QAC7B,wBAAwB,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,CAAC;QAC1D,mBAAmB,EAAE,qBAAqB;QAC1C,uBAAuB,EAAE,uBAAuB;QAChD,MAAM,EAAE,EAAE;KACX;IACD,KAAK,EAAE;QACL,EAAE,EAAE,OAAO;QACX,WAAW,EAAE,OAAO;QACpB,MAAM,EAAE,OAAO;QACf,uBAAuB,EAAE,CAAC,QAAQ,CAAC;QACnC,kBAAkB,EAAE,QAAQ;QAC5B,wBAAwB,EAAE,CAAC,QAAQ,CAAC;QACpC,mBAAmB,EAAE,qBAAqB;QAC1C,uBAAuB,EAAE,6BAA6B;QACtD,MAAM,EAAE,EAAE;KACX;CACF,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { InstallSelection, ResolvedInstallTarget } from './types.js';
|
|
2
|
+
interface ResolveInstallTargetsContext {
|
|
3
|
+
cwd?: string;
|
|
4
|
+
home?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function resolveInstallTargets(selection: InstallSelection, context?: ResolveInstallTargetsContext): ResolvedInstallTarget[];
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/install/resolver.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAGzE,UAAU,4BAA4B;IACpC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,gBAAgB,EAC3B,OAAO,GAAE,4BAAiC,GACzC,qBAAqB,EAAE,CAkBzB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { homedir } from 'node:os';
|
|
2
|
+
import { join, resolve } from 'node:path';
|
|
3
|
+
import { RUNTIME_REGISTRY } from './registry.js';
|
|
4
|
+
export function resolveInstallTargets(selection, context = {}) {
|
|
5
|
+
const currentWorkingDirectory = context.cwd ?? process.cwd();
|
|
6
|
+
const homeDirectory = context.home ?? homedir();
|
|
7
|
+
return selection.runtimes.map((runtime) => {
|
|
8
|
+
const metadata = RUNTIME_REGISTRY[runtime];
|
|
9
|
+
const location = selection.locations[runtime];
|
|
10
|
+
const destinationDirectory = location === 'global'
|
|
11
|
+
? join(homeDirectory, ...metadata.globalDirectorySegments)
|
|
12
|
+
: resolve(currentWorkingDirectory, metadata.localDirectoryName);
|
|
13
|
+
return {
|
|
14
|
+
...metadata,
|
|
15
|
+
location,
|
|
16
|
+
destinationDirectory,
|
|
17
|
+
};
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/install/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAOhD,MAAM,UAAU,qBAAqB,CACnC,SAA2B,EAC3B,UAAwC,EAAE;IAE1C,MAAM,uBAAuB,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IAC5D,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,EAAE,CAAA;IAE/C,OAAO,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACxC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;QAC1C,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QAC7C,MAAM,oBAAoB,GACxB,QAAQ,KAAK,QAAQ;YACnB,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,QAAQ,CAAC,uBAAuB,CAAC;YAC1D,CAAC,CAAC,OAAO,CAAC,uBAAuB,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAA;QAEnE,OAAO;YACL,GAAG,QAAQ;YACX,QAAQ;YACR,oBAAoB;SACrB,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../../src/install/runtimes/claude.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAG9E,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,qBAAqB,EAC7B,aAAa,GAAE,MAAwB,GACtC,oBAAoB,EAAE,CAMxB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { buildPromptRuntimeOperations } from './prompt-runtimes.js';
|
|
2
|
+
export function buildClaudeRuntimeOperations(target, fromModuleUrl = import.meta.url) {
|
|
3
|
+
if (target.id !== 'claude') {
|
|
4
|
+
throw new Error(`Claude runtime builder received ${target.id}.`);
|
|
5
|
+
}
|
|
6
|
+
return buildPromptRuntimeOperations(target, fromModuleUrl);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=claude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/install/runtimes/claude.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAA;AAEnE,MAAM,UAAU,4BAA4B,CAC1C,MAA6B,EAC7B,gBAAwB,MAAM,CAAC,IAAI,CAAC,GAAG;IAEvC,IAAI,MAAM,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAA;IAClE,CAAC;IAED,OAAO,4BAA4B,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;AAC5D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/install/runtimes/codex.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAA0B,MAAM,aAAa,CAAA;AAiCtG,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,qBAAqB,EAC7B,aAAa,GAAE,MAAwB,GACtC,oBAAoB,EAAE,CAmBxB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { resolveAssetSource } from '../assets.js';
|
|
3
|
+
const CODEX_SKILL_ASSETS = [
|
|
4
|
+
{
|
|
5
|
+
id: 'help',
|
|
6
|
+
kind: 'skill',
|
|
7
|
+
sourceSegments: ['@tayo-dev', 'rtl-help', 'SKILL.md'],
|
|
8
|
+
destinationSegments: ['skills', '@tayo-dev', 'rtl-help', 'SKILL.md'],
|
|
9
|
+
entrypoint: '$@tayo-dev/rtl-help',
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
id: 'generate',
|
|
13
|
+
kind: 'skill',
|
|
14
|
+
sourceSegments: ['@tayo-dev', 'rtl-generate', 'SKILL.md'],
|
|
15
|
+
destinationSegments: ['skills', '@tayo-dev', 'rtl-generate', 'SKILL.md'],
|
|
16
|
+
entrypoint: '$@tayo-dev/rtl-generate',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
id: 'conventions',
|
|
20
|
+
kind: 'skill',
|
|
21
|
+
sourceSegments: ['@tayo-dev', 'rtl-conventions', 'SKILL.md'],
|
|
22
|
+
destinationSegments: ['skills', '@tayo-dev', 'rtl-conventions', 'SKILL.md'],
|
|
23
|
+
entrypoint: '$@tayo-dev/rtl-conventions',
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
id: 'mocks',
|
|
27
|
+
kind: 'skill',
|
|
28
|
+
sourceSegments: ['@tayo-dev', 'rtl-mocks', 'SKILL.md'],
|
|
29
|
+
destinationSegments: ['skills', '@tayo-dev', 'rtl-mocks', 'SKILL.md'],
|
|
30
|
+
entrypoint: '$@tayo-dev/rtl-mocks',
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
export function buildCodexOperations(target, fromModuleUrl = import.meta.url) {
|
|
34
|
+
if (target.id !== 'codex') {
|
|
35
|
+
throw new Error(`Codex runtime builder received ${target.id}.`);
|
|
36
|
+
}
|
|
37
|
+
return CODEX_SKILL_ASSETS.map((asset) => {
|
|
38
|
+
const relativeDestinationPath = join(...asset.destinationSegments);
|
|
39
|
+
return {
|
|
40
|
+
assetId: asset.id,
|
|
41
|
+
runtime: target.id,
|
|
42
|
+
location: target.location,
|
|
43
|
+
kind: asset.kind,
|
|
44
|
+
sourcePath: resolveAssetSource(target.id, asset.sourceSegments, fromModuleUrl),
|
|
45
|
+
relativeDestinationPath,
|
|
46
|
+
targetPath: join(target.destinationDirectory, relativeDestinationPath),
|
|
47
|
+
entrypoint: asset.entrypoint,
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/install/runtimes/codex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAGjD,MAAM,kBAAkB,GAA6B;IACnD;QACE,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,OAAO;QACb,cAAc,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC;QACrD,mBAAmB,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC;QACpE,UAAU,EAAE,qBAAqB;KAClC;IACD;QACE,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,OAAO;QACb,cAAc,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,UAAU,CAAC;QACzD,mBAAmB,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,CAAC;QACxE,UAAU,EAAE,yBAAyB;KACtC;IACD;QACE,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,OAAO;QACb,cAAc,EAAE,CAAC,WAAW,EAAE,iBAAiB,EAAE,UAAU,CAAC;QAC5D,mBAAmB,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,UAAU,CAAC;QAC3E,UAAU,EAAE,4BAA4B;KACzC;IACD;QACE,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,OAAO;QACb,cAAc,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC;QACtD,mBAAmB,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC;QACrE,UAAU,EAAE,sBAAsB;KACnC;CACF,CAAA;AAED,MAAM,UAAU,oBAAoB,CAClC,MAA6B,EAC7B,gBAAwB,MAAM,CAAC,IAAI,CAAC,GAAG;IAEvC,IAAI,MAAM,CAAC,EAAE,KAAK,OAAO,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,kCAAkC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAA;IACjE,CAAC;IAED,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACtC,MAAM,uBAAuB,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,mBAAmB,CAAC,CAAA;QAElE,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,OAAO,EAAE,MAAM,CAAC,EAAE;YAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,cAAc,EAAE,aAAa,CAAC;YAC9E,uBAAuB;YACvB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC;YACtE,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/install/runtimes/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAG9E,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,qBAAqB,EAC7B,aAAa,GAAE,MAAwB,GACtC,oBAAoB,EAAE,CAMxB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { buildPromptRuntimeOperations } from './prompt-runtimes.js';
|
|
2
|
+
export function buildGeminiRuntimeOperations(target, fromModuleUrl = import.meta.url) {
|
|
3
|
+
if (target.id !== 'gemini') {
|
|
4
|
+
throw new Error(`Gemini runtime builder received ${target.id}.`);
|
|
5
|
+
}
|
|
6
|
+
return buildPromptRuntimeOperations(target, fromModuleUrl);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=gemini.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../src/install/runtimes/gemini.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAA;AAEnE,MAAM,UAAU,4BAA4B,CAC1C,MAA6B,EAC7B,gBAAwB,MAAM,CAAC,IAAI,CAAC,GAAG;IAEvC,IAAI,MAAM,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAA;IAClE,CAAC;IAED,OAAO,4BAA4B,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;AAC5D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../src/install/runtimes/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAG9E,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,qBAAqB,EAC7B,aAAa,GAAE,MAAwB,GACtC,oBAAoB,EAAE,CAMxB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { buildPromptRuntimeOperations } from './prompt-runtimes.js';
|
|
2
|
+
export function buildOpenCodeRuntimeOperations(target, fromModuleUrl = import.meta.url) {
|
|
3
|
+
if (target.id !== 'opencode') {
|
|
4
|
+
throw new Error(`OpenCode runtime builder received ${target.id}.`);
|
|
5
|
+
}
|
|
6
|
+
return buildPromptRuntimeOperations(target, fromModuleUrl);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=opencode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/install/runtimes/opencode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAA;AAEnE,MAAM,UAAU,8BAA8B,CAC5C,MAA6B,EAC7B,gBAAwB,MAAM,CAAC,IAAI,CAAC,GAAG;IAEvC,IAAI,MAAM,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,qCAAqC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAA;IACpE,CAAC;IAED,OAAO,4BAA4B,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;AAC5D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-runtimes.d.ts","sourceRoot":"","sources":["../../../src/install/runtimes/prompt-runtimes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EAGtB,MAAM,aAAa,CAAA;AA2DpB,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,qBAAqB,EAC7B,aAAa,GAAE,MAAwB,GACtC,oBAAoB,EAAE,CAmBxB"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { resolveAssetSource } from '../assets.js';
|
|
3
|
+
const PROMPT_RUNTIME_ASSETS = {
|
|
4
|
+
claude: [
|
|
5
|
+
{
|
|
6
|
+
id: 'help',
|
|
7
|
+
kind: 'command',
|
|
8
|
+
sourceSegments: ['commands', '@tayo-dev', 'rtl', 'help.md'],
|
|
9
|
+
destinationSegments: ['commands', '@tayo-dev', 'rtl', 'help.md'],
|
|
10
|
+
entrypoint: '/@tayo-dev/rtl:help',
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
id: 'generate',
|
|
14
|
+
kind: 'command',
|
|
15
|
+
sourceSegments: ['commands', '@tayo-dev', 'rtl', 'generate.md'],
|
|
16
|
+
destinationSegments: ['commands', '@tayo-dev', 'rtl', 'generate.md'],
|
|
17
|
+
entrypoint: '/@tayo-dev/rtl:generate',
|
|
18
|
+
},
|
|
19
|
+
],
|
|
20
|
+
gemini: [
|
|
21
|
+
{
|
|
22
|
+
id: 'help',
|
|
23
|
+
kind: 'command',
|
|
24
|
+
sourceSegments: ['commands', '@tayo-dev', 'rtl', 'help.toml'],
|
|
25
|
+
destinationSegments: ['commands', '@tayo-dev', 'rtl', 'help.toml'],
|
|
26
|
+
entrypoint: '/@tayo-dev/rtl:help',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
id: 'generate',
|
|
30
|
+
kind: 'command',
|
|
31
|
+
sourceSegments: ['commands', '@tayo-dev', 'rtl', 'generate.toml'],
|
|
32
|
+
destinationSegments: ['commands', '@tayo-dev', 'rtl', 'generate.toml'],
|
|
33
|
+
entrypoint: '/@tayo-dev/rtl:generate',
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
opencode: [
|
|
37
|
+
{
|
|
38
|
+
id: 'help',
|
|
39
|
+
kind: 'command',
|
|
40
|
+
sourceSegments: ['commands', '@tayo-dev', 'rtl-help.md'],
|
|
41
|
+
destinationSegments: ['commands', '@tayo-dev', 'rtl-help.md'],
|
|
42
|
+
entrypoint: '/@tayo-dev/rtl-help',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
id: 'generate',
|
|
46
|
+
kind: 'command',
|
|
47
|
+
sourceSegments: ['commands', '@tayo-dev', 'rtl-generate.md'],
|
|
48
|
+
destinationSegments: ['commands', '@tayo-dev', 'rtl-generate.md'],
|
|
49
|
+
entrypoint: '/@tayo-dev/rtl-generate',
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
};
|
|
53
|
+
function isPromptRuntime(runtime) {
|
|
54
|
+
return runtime === 'claude' || runtime === 'gemini' || runtime === 'opencode';
|
|
55
|
+
}
|
|
56
|
+
export function buildPromptRuntimeOperations(target, fromModuleUrl = import.meta.url) {
|
|
57
|
+
if (!isPromptRuntime(target.id)) {
|
|
58
|
+
throw new Error(`Prompt runtime operations do not support ${target.id}.`);
|
|
59
|
+
}
|
|
60
|
+
return PROMPT_RUNTIME_ASSETS[target.id].map((asset) => {
|
|
61
|
+
const relativeDestinationPath = join(...asset.destinationSegments);
|
|
62
|
+
return {
|
|
63
|
+
assetId: asset.id,
|
|
64
|
+
runtime: target.id,
|
|
65
|
+
location: target.location,
|
|
66
|
+
kind: asset.kind,
|
|
67
|
+
sourcePath: resolveAssetSource(target.id, asset.sourceSegments, fromModuleUrl),
|
|
68
|
+
relativeDestinationPath,
|
|
69
|
+
targetPath: join(target.destinationDirectory, relativeDestinationPath),
|
|
70
|
+
entrypoint: asset.entrypoint,
|
|
71
|
+
};
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=prompt-runtimes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-runtimes.js","sourceRoot":"","sources":["../../../src/install/runtimes/prompt-runtimes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { stdin, stdout } from 'node:process';
|
|
2
|
+
import type { InstallExecutionResult, InstallPlan } from './types.js';
|
|
3
|
+
interface PromptIO {
|
|
4
|
+
input?: typeof stdin;
|
|
5
|
+
output?: typeof stdout;
|
|
6
|
+
}
|
|
7
|
+
export declare function renderInstallSummary(plan: InstallPlan): string;
|
|
8
|
+
export declare function confirmInstallPlan(plan: InstallPlan, io?: PromptIO): Promise<boolean>;
|
|
9
|
+
export declare function renderInstallCancelledMessage(): string;
|
|
10
|
+
export declare function renderInstallExecutionResult(result: InstallExecutionResult): string;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=summary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../src/install/summary.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE5C,OAAO,KAAK,EACV,sBAAsB,EACtB,WAAW,EAEZ,MAAM,YAAY,CAAA;AAEnB,UAAU,QAAQ;IAChB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;IACpB,MAAM,CAAC,EAAE,OAAO,MAAM,CAAA;CACvB;AAkBD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAa9D;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,WAAW,EACjB,EAAE,GAAE,QAA2C,GAC9C,OAAO,CAAC,OAAO,CAAC,CA0BlB;AAED,wBAAgB,6BAA6B,IAAI,MAAM,CAEtD;AAgCD,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAsCnF"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { homedir } from 'node:os';
|
|
2
|
+
import { relative } from 'node:path';
|
|
3
|
+
import { createInterface } from 'node:readline/promises';
|
|
4
|
+
import { stdin, stdout } from 'node:process';
|
|
5
|
+
import pc from 'picocolors';
|
|
6
|
+
function formatTargetDirectory(target) {
|
|
7
|
+
const homeDirectory = homedir();
|
|
8
|
+
if (target.location === 'global' && target.destinationDirectory.startsWith(homeDirectory)) {
|
|
9
|
+
const suffix = relative(homeDirectory, target.destinationDirectory);
|
|
10
|
+
return suffix.length > 0 ? `~/${suffix}` : '~';
|
|
11
|
+
}
|
|
12
|
+
if (target.location === 'local') {
|
|
13
|
+
const suffix = relative(process.cwd(), target.destinationDirectory);
|
|
14
|
+
return suffix.length > 0 ? `./${suffix}` : '.';
|
|
15
|
+
}
|
|
16
|
+
return target.destinationDirectory;
|
|
17
|
+
}
|
|
18
|
+
export function renderInstallSummary(plan) {
|
|
19
|
+
const lines = plan.targets.map((target) => {
|
|
20
|
+
const assetCount = target.operations.length;
|
|
21
|
+
const label = assetCount === 1 ? 'asset' : 'assets';
|
|
22
|
+
return `- ${target.displayName}: ${target.location} (${formatTargetDirectory(target)}) — ${assetCount} ${label}`;
|
|
23
|
+
});
|
|
24
|
+
return [
|
|
25
|
+
pc.bold(`Install plan for ${plan.packageName}`),
|
|
26
|
+
...lines,
|
|
27
|
+
'',
|
|
28
|
+
pc.dim('No files will be written until confirmation completes.'),
|
|
29
|
+
].join('\n');
|
|
30
|
+
}
|
|
31
|
+
export async function confirmInstallPlan(plan, io = { input: stdin, output: stdout }) {
|
|
32
|
+
const rl = createInterface({
|
|
33
|
+
input: io.input ?? stdin,
|
|
34
|
+
output: io.output ?? stdout,
|
|
35
|
+
});
|
|
36
|
+
try {
|
|
37
|
+
while (true) {
|
|
38
|
+
const answer = await rl.question(`Proceed with the ${plan.targets.length}-target install plan? [y/N]: `);
|
|
39
|
+
const normalized = answer.trim().toLowerCase();
|
|
40
|
+
if (normalized === '' || normalized === 'n' || normalized === 'no') {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
if (normalized === 'y' || normalized === 'yes') {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
console.log(pc.yellow('Answer `y` to continue or `n` to cancel.'));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
rl.close();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export function renderInstallCancelledMessage() {
|
|
54
|
+
return 'Install cancelled. Nothing changed.';
|
|
55
|
+
}
|
|
56
|
+
function renderResultLine(target) {
|
|
57
|
+
if (target.status === 'installed') {
|
|
58
|
+
return `- ${target.displayName}: wrote ${target.writtenFiles.length} asset(s) to ${target.destinationDirectory} (${target.verificationCommand})`;
|
|
59
|
+
}
|
|
60
|
+
if (target.status === 'updated') {
|
|
61
|
+
return `- ${target.displayName}: updated ${target.writtenFiles.length} owned asset(s) in ${target.destinationDirectory} (${target.verificationCommand})`;
|
|
62
|
+
}
|
|
63
|
+
if (target.status === 'repaired') {
|
|
64
|
+
return `- ${target.displayName}: repaired ${target.writtenFiles.length} owned asset(s) in ${target.destinationDirectory} (${target.verificationCommand})`;
|
|
65
|
+
}
|
|
66
|
+
const blockedReasons = target.conflicts
|
|
67
|
+
.map((conflict) => {
|
|
68
|
+
if (conflict.kind === 'installer-owned-modified') {
|
|
69
|
+
return `protected manual edit at ${conflict.targetPath}`;
|
|
70
|
+
}
|
|
71
|
+
if (conflict.kind === 'external-collision') {
|
|
72
|
+
return `external collision at ${conflict.targetPath}`;
|
|
73
|
+
}
|
|
74
|
+
return `${conflict.kind} at ${conflict.targetPath}`;
|
|
75
|
+
})
|
|
76
|
+
.join('; ');
|
|
77
|
+
return `- ${target.displayName}: blocked by ${blockedReasons}`;
|
|
78
|
+
}
|
|
79
|
+
export function renderInstallExecutionResult(result) {
|
|
80
|
+
const heading = result.status === 'installed'
|
|
81
|
+
? pc.green('Install complete.')
|
|
82
|
+
: result.status === 'partial'
|
|
83
|
+
? pc.yellow('Install finished with conflicts.')
|
|
84
|
+
: pc.red('Install blocked.');
|
|
85
|
+
const verificationLines = result.targets
|
|
86
|
+
.filter((target) => target.status !== 'blocked')
|
|
87
|
+
.map((target) => {
|
|
88
|
+
if (target.verification?.status === 'verified') {
|
|
89
|
+
return `- ${target.displayName}: ${target.verificationCommand} (verified at ${target.verification.checkedPath})`;
|
|
90
|
+
}
|
|
91
|
+
if (target.verification?.status === 'missing-installed-assets') {
|
|
92
|
+
return `- ${target.displayName}: ${target.verificationCommand} (missing ${target.verification.missingPaths.join(', ')})`;
|
|
93
|
+
}
|
|
94
|
+
return `- ${target.displayName}: ${target.verificationCommand} (verification metadata missing)`;
|
|
95
|
+
});
|
|
96
|
+
const manifestLines = result.targets
|
|
97
|
+
.filter((target) => target.status !== 'blocked' && target.manifestPath)
|
|
98
|
+
.map((target) => `- ${target.displayName}: ${target.manifestPath}`);
|
|
99
|
+
return [
|
|
100
|
+
heading,
|
|
101
|
+
...result.targets.map(renderResultLine),
|
|
102
|
+
verificationLines.length > 0 ? '' : null,
|
|
103
|
+
verificationLines.length > 0 ? 'Verification commands:' : null,
|
|
104
|
+
...verificationLines,
|
|
105
|
+
manifestLines.length > 0 ? '' : null,
|
|
106
|
+
manifestLines.length > 0 ? 'Ownership markers:' : null,
|
|
107
|
+
...manifestLines,
|
|
108
|
+
]
|
|
109
|
+
.filter((line) => Boolean(line))
|
|
110
|
+
.join('\n');
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary.js","sourceRoot":"","sources":["../../src/install/summary.ts"],"names":[],"mappings":"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"}
|