kyro-ai 3.3.0 → 3.3.2
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/.claude-plugin/plugin.json +1 -1
- package/WORKFLOW.yaml +1 -1
- package/dist/cli/adapters/codex.d.ts.map +1 -1
- package/dist/cli/adapters/codex.js +24 -0
- package/dist/cli/adapters/codex.js.map +1 -1
- package/dist/cli/adapters/command-skills.d.ts +3 -0
- package/dist/cli/adapters/command-skills.d.ts.map +1 -1
- package/dist/cli/adapters/command-skills.js +16 -4
- package/dist/cli/adapters/command-skills.js.map +1 -1
- package/dist/cli/adapters/detection.d.ts +5 -0
- package/dist/cli/adapters/detection.d.ts.map +1 -0
- package/dist/cli/adapters/detection.js +43 -0
- package/dist/cli/adapters/detection.js.map +1 -0
- package/dist/cli/adapters/opencode.d.ts.map +1 -1
- package/dist/cli/adapters/opencode.js +94 -7
- package/dist/cli/adapters/opencode.js.map +1 -1
- package/dist/cli/adapters/registry-types.d.ts +31 -0
- package/dist/cli/adapters/registry-types.d.ts.map +1 -1
- package/dist/cli/adapters/registry.d.ts.map +1 -1
- package/dist/cli/adapters/registry.js +34 -3
- package/dist/cli/adapters/registry.js.map +1 -1
- package/dist/cli/adapters/standard.d.ts.map +1 -1
- package/dist/cli/adapters/standard.js +25 -0
- package/dist/cli/adapters/standard.js.map +1 -1
- package/dist/cli/app.d.ts.map +1 -1
- package/dist/cli/app.js +4 -0
- package/dist/cli/app.js.map +1 -1
- package/dist/cli/commands/detect.d.ts +3 -0
- package/dist/cli/commands/detect.d.ts.map +1 -0
- package/dist/cli/commands/detect.js +39 -0
- package/dist/cli/commands/detect.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +26 -2
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/install.d.ts.map +1 -1
- package/dist/cli/commands/install.js +25 -2
- package/dist/cli/commands/install.js.map +1 -1
- package/dist/cli/commands/preflight.d.ts +11 -0
- package/dist/cli/commands/preflight.d.ts.map +1 -0
- package/dist/cli/commands/preflight.js +50 -0
- package/dist/cli/commands/preflight.js.map +1 -0
- package/dist/cli/commands/tui.d.ts.map +1 -1
- package/dist/cli/commands/tui.js +19 -3
- package/dist/cli/commands/tui.js.map +1 -1
- package/dist/cli/commands/uninstall.d.ts.map +1 -1
- package/dist/cli/commands/uninstall.js +34 -7
- package/dist/cli/commands/uninstall.js.map +1 -1
- package/dist/cli/drift.d.ts +19 -0
- package/dist/cli/drift.d.ts.map +1 -0
- package/dist/cli/drift.js +136 -0
- package/dist/cli/drift.js.map +1 -0
- package/dist/cli/fs.d.ts.map +1 -1
- package/dist/cli/fs.js +6 -70
- package/dist/cli/fs.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +12 -3
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/injectors/json-merge.d.ts +3 -0
- package/dist/cli/injectors/json-merge.d.ts.map +1 -0
- package/dist/cli/injectors/json-merge.js +136 -0
- package/dist/cli/injectors/json-merge.js.map +1 -0
- package/dist/cli/injectors/managed-block.d.ts +7 -0
- package/dist/cli/injectors/managed-block.d.ts.map +1 -0
- package/dist/cli/injectors/managed-block.js +39 -0
- package/dist/cli/injectors/managed-block.js.map +1 -0
- package/dist/cli/options.d.ts.map +1 -1
- package/dist/cli/options.js +20 -0
- package/dist/cli/options.js.map +1 -1
- package/dist/cli/pipeline/operation-steps.d.ts +10 -0
- package/dist/cli/pipeline/operation-steps.d.ts.map +1 -0
- package/dist/cli/pipeline/operation-steps.js +141 -0
- package/dist/cli/pipeline/operation-steps.js.map +1 -0
- package/dist/cli/pipeline/orchestrator.d.ts +12 -0
- package/dist/cli/pipeline/orchestrator.d.ts.map +1 -0
- package/dist/cli/pipeline/orchestrator.js +111 -0
- package/dist/cli/pipeline/orchestrator.js.map +1 -0
- package/dist/cli/pipeline/types.d.ts +40 -0
- package/dist/cli/pipeline/types.d.ts.map +1 -0
- package/dist/cli/pipeline/types.js +3 -0
- package/dist/cli/pipeline/types.js.map +1 -0
- package/dist/cli/types.d.ts +6 -1
- package/dist/cli/types.d.ts.map +1 -1
- package/docs/HOW-TO-USE-OPENCODE.md +10 -6
- package/docs/agent-adapters.md +9 -4
- package/docs/cli.md +48 -2
- package/docs/getting-started.md +8 -0
- package/package.json +3 -2
- package/scripts/check-adapter-fixtures.mjs +595 -0
- package/skills/sprint-forge/assets/modes/ad3c-cycle.md +89 -0
- package/skills/sprint-forge/assets/modes/execute-task.md +5 -3
package/dist/cli/fs.js
CHANGED
|
@@ -17,55 +17,18 @@ const node_fs_1 = require("node:fs");
|
|
|
17
17
|
const node_os_1 = require("node:os");
|
|
18
18
|
const node_path_1 = require("node:path");
|
|
19
19
|
const constants_1 = require("./constants");
|
|
20
|
+
const managed_block_1 = require("./injectors/managed-block");
|
|
21
|
+
const operation_steps_1 = require("./pipeline/operation-steps");
|
|
20
22
|
function applyPlan(plan) {
|
|
21
|
-
|
|
22
|
-
const target = resolveManagedPath(operation.path);
|
|
23
|
-
if (operation.action === 'mkdir') {
|
|
24
|
-
(0, node_fs_1.mkdirSync)(target, { recursive: true });
|
|
25
|
-
}
|
|
26
|
-
else if (operation.action === 'write') {
|
|
27
|
-
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(target), { recursive: true });
|
|
28
|
-
(0, node_fs_1.writeFileSync)(target, operation.content ?? '', 'utf-8');
|
|
29
|
-
}
|
|
30
|
-
else if (operation.action === 'copy') {
|
|
31
|
-
if (!operation.source)
|
|
32
|
-
throw new Error(`Copy operation missing source for ${operation.path}`);
|
|
33
|
-
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(target), { recursive: true });
|
|
34
|
-
(0, node_fs_1.copyFileSync)((0, node_path_1.resolve)(constants_1.PACKAGE_ROOT, operation.source), target);
|
|
35
|
-
}
|
|
36
|
-
else if (operation.action === 'remove') {
|
|
37
|
-
(0, node_fs_1.rmSync)(target, { recursive: true, force: true });
|
|
38
|
-
}
|
|
39
|
-
else if (operation.action === 'symlink') {
|
|
40
|
-
if (!operation.source)
|
|
41
|
-
throw new Error(`Symlink operation missing source for ${operation.path}`);
|
|
42
|
-
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(target), { recursive: true });
|
|
43
|
-
(0, node_fs_1.rmSync)(target, { recursive: true, force: true });
|
|
44
|
-
(0, node_fs_1.symlinkSync)(resolveManagedPath(operation.source), target, 'dir');
|
|
45
|
-
}
|
|
46
|
-
else if (operation.action === 'upsert-block') {
|
|
47
|
-
if (!operation.blockName)
|
|
48
|
-
throw new Error(`Block operation missing blockName for ${operation.path}`);
|
|
49
|
-
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(target), { recursive: true });
|
|
50
|
-
const existing = (0, node_fs_1.existsSync)(target) ? (0, node_fs_1.readFileSync)(target, 'utf-8') : '';
|
|
51
|
-
(0, node_fs_1.writeFileSync)(target, upsertManagedBlock(existing, operation.blockName, operation.content ?? ''), 'utf-8');
|
|
52
|
-
}
|
|
53
|
-
else if (operation.action === 'remove-block') {
|
|
54
|
-
if (!operation.blockName)
|
|
55
|
-
throw new Error(`Block operation missing blockName for ${operation.path}`);
|
|
56
|
-
if ((0, node_fs_1.existsSync)(target)) {
|
|
57
|
-
const existing = (0, node_fs_1.readFileSync)(target, 'utf-8');
|
|
58
|
-
(0, node_fs_1.writeFileSync)(target, removeManagedBlock(existing, operation.blockName), 'utf-8');
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
23
|
+
(0, operation_steps_1.applyOperationPlan)(plan, { packageRoot: constants_1.PACKAGE_ROOT, resolveManagedPath });
|
|
62
24
|
}
|
|
63
25
|
function printPlan(title, plan) {
|
|
64
26
|
console.log(title);
|
|
65
27
|
for (const operation of plan) {
|
|
66
28
|
const source = operation.source ? ` <= ${operation.source}` : '';
|
|
67
29
|
const block = operation.blockName ? ` # ${operation.blockName}` : '';
|
|
68
|
-
|
|
30
|
+
const jsonPath = operation.jsonPath ? ` # ${operation.jsonPath}` : '';
|
|
31
|
+
console.log(`- ${operation.action} ${operation.path}${block}${jsonPath}${source}`);
|
|
69
32
|
}
|
|
70
33
|
}
|
|
71
34
|
function addCopyDirectoryPlan(plan, sourceDir, targetDir) {
|
|
@@ -126,33 +89,6 @@ function hasManagedBlock(file, blockName) {
|
|
|
126
89
|
if (!(0, node_fs_1.existsSync)(path))
|
|
127
90
|
return false;
|
|
128
91
|
const text = (0, node_fs_1.readFileSync)(path, 'utf-8');
|
|
129
|
-
return
|
|
130
|
-
}
|
|
131
|
-
function upsertManagedBlock(existing, blockName, content) {
|
|
132
|
-
const block = formatManagedBlock(blockName, content);
|
|
133
|
-
const pattern = managedBlockPattern(blockName);
|
|
134
|
-
if (pattern.test(existing)) {
|
|
135
|
-
return existing.replace(pattern, block);
|
|
136
|
-
}
|
|
137
|
-
const separator = existing.trim().length === 0 ? '' : '\n\n';
|
|
138
|
-
return `${existing.trimEnd()}${separator}${block}\n`;
|
|
139
|
-
}
|
|
140
|
-
function removeManagedBlock(existing, blockName) {
|
|
141
|
-
return existing.replace(managedBlockPattern(blockName), '').trimEnd() + '\n';
|
|
142
|
-
}
|
|
143
|
-
function formatManagedBlock(blockName, content) {
|
|
144
|
-
return `${startMarker(blockName)}\n${content.trim()}\n${endMarker(blockName)}`;
|
|
145
|
-
}
|
|
146
|
-
function managedBlockPattern(blockName) {
|
|
147
|
-
return new RegExp(`${escapeRegExp(startMarker(blockName))}[\\s\\S]*?${escapeRegExp(endMarker(blockName))}\\n?`, 'm');
|
|
148
|
-
}
|
|
149
|
-
function startMarker(blockName) {
|
|
150
|
-
return `<!-- kyro-ai:${blockName}:start -->`;
|
|
151
|
-
}
|
|
152
|
-
function endMarker(blockName) {
|
|
153
|
-
return `<!-- kyro-ai:${blockName}:end -->`;
|
|
154
|
-
}
|
|
155
|
-
function escapeRegExp(value) {
|
|
156
|
-
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
92
|
+
return (0, managed_block_1.hasManagedBlockContent)(text, blockName);
|
|
157
93
|
}
|
|
158
94
|
//# sourceMappingURL=fs.js.map
|
package/dist/cli/fs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/cli/fs.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/cli/fs.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/help.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAEA,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,SAAS,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAEA,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,SAAS,IAAI,IAAI,CAmChC;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAkBtD"}
|
package/dist/cli/help.js
CHANGED
|
@@ -13,6 +13,7 @@ function printHelp() {
|
|
|
13
13
|
Usage:
|
|
14
14
|
kyro Open interactive TUI
|
|
15
15
|
kyro install Install Kyro standard .agents assets
|
|
16
|
+
kyro detect Detect local agent adapters
|
|
16
17
|
kyro doctor Check package/workspace health
|
|
17
18
|
kyro repair [options] Repair scoped JSON artifacts from Markdown
|
|
18
19
|
kyro scope <subcommand> List, inspect, or set active Kyro scopes
|
|
@@ -25,6 +26,10 @@ Options:
|
|
|
25
26
|
--kyro-scope <scope> Select Kyro artifact scope
|
|
26
27
|
--tokens Include token/context budget audit for doctor
|
|
27
28
|
--artifacts Include Kyro artifact integrity audit for doctor
|
|
29
|
+
--adapters Include adapter inventory for doctor
|
|
30
|
+
--json Print machine-readable output where supported
|
|
31
|
+
--purge-adapter-assets Remove adapter-owned entrypoint files during uninstall
|
|
32
|
+
--prune Clean stale runtime versions and orphaned managed files (sync only)
|
|
28
33
|
--dry-run Preview changes
|
|
29
34
|
--yes, -y Skip confirmation prompts where available
|
|
30
35
|
--help, -h Show help
|
|
@@ -32,6 +37,7 @@ Options:
|
|
|
32
37
|
|
|
33
38
|
Examples:
|
|
34
39
|
kyro install --scope workspace --dry-run
|
|
40
|
+
kyro detect --json
|
|
35
41
|
kyro doctor --tokens --artifacts
|
|
36
42
|
kyro repair --kyro-scope auth-refactor --dry-run
|
|
37
43
|
kyro scope list
|
|
@@ -41,8 +47,11 @@ function printCommandHelp(command) {
|
|
|
41
47
|
if (command === 'install') {
|
|
42
48
|
console.log('Usage: kyro install [--agent standard|opencode|codex] --scope workspace [--dry-run] [--yes]');
|
|
43
49
|
}
|
|
50
|
+
else if (command === 'detect') {
|
|
51
|
+
console.log('Usage: kyro detect [--agent standard|opencode|codex|claude|cursor] [--json]');
|
|
52
|
+
}
|
|
44
53
|
else if (command === 'doctor') {
|
|
45
|
-
console.log('Usage: kyro doctor [--tokens] [--artifacts] [--kyro-scope <scope>]');
|
|
54
|
+
console.log('Usage: kyro doctor [--tokens] [--artifacts] [--adapters] [--kyro-scope <scope>]');
|
|
46
55
|
}
|
|
47
56
|
else if (command === 'repair') {
|
|
48
57
|
console.log('Usage: kyro repair [--kyro-scope <scope>] [--dry-run] [--yes]');
|
|
@@ -51,10 +60,10 @@ function printCommandHelp(command) {
|
|
|
51
60
|
console.log('Usage: kyro scope list | inspect <scope> | set-active <scope>');
|
|
52
61
|
}
|
|
53
62
|
else if (command === 'sync') {
|
|
54
|
-
console.log('Usage: kyro sync [--agent standard|opencode|codex] [--dry-run]');
|
|
63
|
+
console.log('Usage: kyro sync [--agent standard|opencode|codex] [--prune] [--dry-run]');
|
|
55
64
|
}
|
|
56
65
|
else if (command === 'uninstall') {
|
|
57
|
-
console.log('Usage: kyro uninstall [--dry-run] [--yes]');
|
|
66
|
+
console.log('Usage: kyro uninstall [--purge-adapter-assets] [--dry-run] [--yes]');
|
|
58
67
|
}
|
|
59
68
|
else {
|
|
60
69
|
printHelp();
|
package/dist/cli/help.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":";;AAEA,gDAEC;AAED,
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":";;AAEA,gDAEC;AAED,8BAmCC;AAED,4CAkBC;AA7DD,6BAA2C;AAE3C,SAAgB,kBAAkB;IAChC,OAAO,IAAA,wBAAmB,EAAsB,cAAc,CAAC,CAAC,OAAO,CAAC;AAC1E,CAAC;AAED,SAAgB,SAAS;IACvB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCb,CAAC,CAAC;AACH,CAAC;AAED,SAAgB,gBAAgB,CAAC,OAAe;IAC9C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,6FAA6F,CAAC,CAAC;IAC7G,CAAC;SAAM,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;IAC7F,CAAC;SAAM,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,iFAAiF,CAAC,CAAC;IACjG,CAAC;SAAM,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;IAC/E,CAAC;SAAM,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;IAC/E,CAAC;SAAM,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;IAC1F,CAAC;SAAM,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;IACpF,CAAC;SAAM,CAAC;QACN,SAAS,EAAE,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-merge.d.ts","sourceRoot":"","sources":["../../../src/cli/injectors/json-merge.ts"],"names":[],"mappings":"AAEA,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAIrF;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKhF"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mergeJsonObjectContent = mergeJsonObjectContent;
|
|
4
|
+
exports.removeJsonPathContent = removeJsonPathContent;
|
|
5
|
+
function mergeJsonObjectContent(existing, patchContent) {
|
|
6
|
+
const base = existing.trim() === '' ? {} : parseJsonObject(existing);
|
|
7
|
+
const patch = parseJsonObject(patchContent);
|
|
8
|
+
return `${JSON.stringify(deepMerge(base, patch), null, 2)}\n`;
|
|
9
|
+
}
|
|
10
|
+
function removeJsonPathContent(existing, jsonPath) {
|
|
11
|
+
if (existing.trim() === '')
|
|
12
|
+
return `${JSON.stringify({}, null, 2)}\n`;
|
|
13
|
+
const base = parseJsonObject(existing);
|
|
14
|
+
removeJsonPath(base, jsonPath.split('.').filter(Boolean));
|
|
15
|
+
return `${JSON.stringify(base, null, 2)}\n`;
|
|
16
|
+
}
|
|
17
|
+
function parseJsonObject(content) {
|
|
18
|
+
const parsed = JSON.parse(stripJsonCommentsAndTrailingCommas(content));
|
|
19
|
+
if (!isPlainObject(parsed))
|
|
20
|
+
throw new Error('JSON merge target must be an object');
|
|
21
|
+
return parsed;
|
|
22
|
+
}
|
|
23
|
+
function deepMerge(base, patch) {
|
|
24
|
+
const merged = { ...base };
|
|
25
|
+
for (const [key, patchValue] of Object.entries(patch)) {
|
|
26
|
+
const baseValue = merged[key];
|
|
27
|
+
if (isPlainObject(baseValue) && isPlainObject(patchValue)) {
|
|
28
|
+
merged[key] = deepMerge(baseValue, patchValue);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
merged[key] = patchValue;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return merged;
|
|
35
|
+
}
|
|
36
|
+
function isPlainObject(value) {
|
|
37
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
38
|
+
}
|
|
39
|
+
function removeJsonPath(target, path) {
|
|
40
|
+
if (path.length === 0)
|
|
41
|
+
return;
|
|
42
|
+
const [head, ...tail] = path;
|
|
43
|
+
if (tail.length === 0) {
|
|
44
|
+
delete target[head];
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const child = target[head];
|
|
48
|
+
if (isPlainObject(child))
|
|
49
|
+
removeJsonPath(child, tail);
|
|
50
|
+
}
|
|
51
|
+
function stripJsonCommentsAndTrailingCommas(content) {
|
|
52
|
+
return stripTrailingCommas(stripJsonComments(content));
|
|
53
|
+
}
|
|
54
|
+
function stripJsonComments(content) {
|
|
55
|
+
let output = '';
|
|
56
|
+
let inString = false;
|
|
57
|
+
let escaping = false;
|
|
58
|
+
for (let index = 0; index < content.length; index += 1) {
|
|
59
|
+
const char = content[index];
|
|
60
|
+
const next = content[index + 1];
|
|
61
|
+
if (inString) {
|
|
62
|
+
output += char;
|
|
63
|
+
if (escaping) {
|
|
64
|
+
escaping = false;
|
|
65
|
+
}
|
|
66
|
+
else if (char === '\\') {
|
|
67
|
+
escaping = true;
|
|
68
|
+
}
|
|
69
|
+
else if (char === '"') {
|
|
70
|
+
inString = false;
|
|
71
|
+
}
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (char === '"') {
|
|
75
|
+
inString = true;
|
|
76
|
+
output += char;
|
|
77
|
+
}
|
|
78
|
+
else if (char === '/' && next === '/') {
|
|
79
|
+
index += 1;
|
|
80
|
+
while (index + 1 < content.length && content[index + 1] !== '\n')
|
|
81
|
+
index += 1;
|
|
82
|
+
}
|
|
83
|
+
else if (char === '/' && next === '*') {
|
|
84
|
+
index += 1;
|
|
85
|
+
while (index + 1 < content.length && !(content[index] === '*' && content[index + 1] === '/'))
|
|
86
|
+
index += 1;
|
|
87
|
+
index += 1;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
output += char;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return output;
|
|
94
|
+
}
|
|
95
|
+
function stripTrailingCommas(content) {
|
|
96
|
+
let output = '';
|
|
97
|
+
let inString = false;
|
|
98
|
+
let escaping = false;
|
|
99
|
+
for (let index = 0; index < content.length; index += 1) {
|
|
100
|
+
const char = content[index];
|
|
101
|
+
if (inString) {
|
|
102
|
+
output += char;
|
|
103
|
+
if (escaping) {
|
|
104
|
+
escaping = false;
|
|
105
|
+
}
|
|
106
|
+
else if (char === '\\') {
|
|
107
|
+
escaping = true;
|
|
108
|
+
}
|
|
109
|
+
else if (char === '"') {
|
|
110
|
+
inString = false;
|
|
111
|
+
}
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if (char === '"') {
|
|
115
|
+
inString = true;
|
|
116
|
+
output += char;
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
if (char === ',') {
|
|
120
|
+
const nextNonWhitespace = findNextNonWhitespace(content, index + 1);
|
|
121
|
+
if (nextNonWhitespace === '}' || nextNonWhitespace === ']')
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
output += char;
|
|
125
|
+
}
|
|
126
|
+
return output;
|
|
127
|
+
}
|
|
128
|
+
function findNextNonWhitespace(content, start) {
|
|
129
|
+
for (let index = start; index < content.length; index += 1) {
|
|
130
|
+
const char = content[index];
|
|
131
|
+
if (!/\s/.test(char))
|
|
132
|
+
return char;
|
|
133
|
+
}
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=json-merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-merge.js","sourceRoot":"","sources":["../../../src/cli/injectors/json-merge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function upsertManagedBlock(existing: string, blockName: string, content: string): string;
|
|
2
|
+
export declare function removeManagedBlock(existing: string, blockName: string): string;
|
|
3
|
+
export declare function hasManagedBlockContent(existing: string, blockName: string): boolean;
|
|
4
|
+
export declare function formatManagedBlock(blockName: string, content: string): string;
|
|
5
|
+
export declare function startMarker(blockName: string): string;
|
|
6
|
+
export declare function endMarker(blockName: string): string;
|
|
7
|
+
//# sourceMappingURL=managed-block.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-block.d.ts","sourceRoot":"","sources":["../../../src/cli/injectors/managed-block.ts"],"names":[],"mappings":"AAAA,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAQ/F;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAEnF;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEnD"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.upsertManagedBlock = upsertManagedBlock;
|
|
4
|
+
exports.removeManagedBlock = removeManagedBlock;
|
|
5
|
+
exports.hasManagedBlockContent = hasManagedBlockContent;
|
|
6
|
+
exports.formatManagedBlock = formatManagedBlock;
|
|
7
|
+
exports.startMarker = startMarker;
|
|
8
|
+
exports.endMarker = endMarker;
|
|
9
|
+
function upsertManagedBlock(existing, blockName, content) {
|
|
10
|
+
const block = formatManagedBlock(blockName, content);
|
|
11
|
+
const pattern = managedBlockPattern(blockName);
|
|
12
|
+
if (pattern.test(existing)) {
|
|
13
|
+
return existing.replace(pattern, block);
|
|
14
|
+
}
|
|
15
|
+
const separator = existing.trim().length === 0 ? '' : '\n\n';
|
|
16
|
+
return `${existing.trimEnd()}${separator}${block}\n`;
|
|
17
|
+
}
|
|
18
|
+
function removeManagedBlock(existing, blockName) {
|
|
19
|
+
return existing.replace(managedBlockPattern(blockName), '').trimEnd() + '\n';
|
|
20
|
+
}
|
|
21
|
+
function hasManagedBlockContent(existing, blockName) {
|
|
22
|
+
return existing.includes(startMarker(blockName)) && existing.includes(endMarker(blockName));
|
|
23
|
+
}
|
|
24
|
+
function formatManagedBlock(blockName, content) {
|
|
25
|
+
return `${startMarker(blockName)}\n${content.trim()}\n${endMarker(blockName)}`;
|
|
26
|
+
}
|
|
27
|
+
function startMarker(blockName) {
|
|
28
|
+
return `<!-- kyro-ai:${blockName}:start -->`;
|
|
29
|
+
}
|
|
30
|
+
function endMarker(blockName) {
|
|
31
|
+
return `<!-- kyro-ai:${blockName}:end -->`;
|
|
32
|
+
}
|
|
33
|
+
function managedBlockPattern(blockName) {
|
|
34
|
+
return new RegExp(`${escapeRegExp(startMarker(blockName))}[\\s\\S]*?${escapeRegExp(endMarker(blockName))}\\n?`, 'm');
|
|
35
|
+
}
|
|
36
|
+
function escapeRegExp(value) {
|
|
37
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=managed-block.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-block.js","sourceRoot":"","sources":["../../../src/cli/injectors/managed-block.ts"],"names":[],"mappings":";;AAAA,gDAQC;AAED,gDAEC;AAED,wDAEC;AAED,gDAEC;AAED,kCAEC;AAED,8BAEC;AA5BD,SAAgB,kBAAkB,CAAC,QAAgB,EAAE,SAAiB,EAAE,OAAe;IACrF,MAAM,KAAK,GAAG,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC/C,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,OAAO,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7D,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,SAAS,GAAG,KAAK,IAAI,CAAC;AACvD,CAAC;AAED,SAAgB,kBAAkB,CAAC,QAAgB,EAAE,SAAiB;IACpE,OAAO,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;AAC/E,CAAC;AAED,SAAgB,sBAAsB,CAAC,QAAgB,EAAE,SAAiB;IACxE,OAAO,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,SAAgB,kBAAkB,CAAC,SAAiB,EAAE,OAAe;IACnE,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,IAAI,EAAE,KAAK,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;AACjF,CAAC;AAED,SAAgB,WAAW,CAAC,SAAiB;IAC3C,OAAO,gBAAgB,SAAS,YAAY,CAAC;AAC/C,CAAC;AAED,SAAgB,SAAS,CAAC,SAAiB;IACzC,OAAO,gBAAgB,SAAS,UAAU,CAAC;AAC7C,CAAC;AAED,SAAS,mBAAmB,CAAC,SAAiB;IAC5C,OAAO,IAAI,MAAM,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,aAAa,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACvH,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/cli/options.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE/D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/cli/options.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE/D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA4EvD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAQ/C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAItD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAErD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAI9D;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAK7D"}
|
package/dist/cli/options.js
CHANGED
|
@@ -16,7 +16,11 @@ function parseOptions(args) {
|
|
|
16
16
|
let help = false;
|
|
17
17
|
let tokens = false;
|
|
18
18
|
let artifacts = false;
|
|
19
|
+
let adapters = false;
|
|
19
20
|
let kyroScope = null;
|
|
21
|
+
let json = false;
|
|
22
|
+
let purgeAdapterAssets = false;
|
|
23
|
+
let prune = false;
|
|
20
24
|
for (let i = 0; i < args.length; i += 1) {
|
|
21
25
|
const arg = args[i];
|
|
22
26
|
if (arg === '--dry-run') {
|
|
@@ -34,6 +38,18 @@ function parseOptions(args) {
|
|
|
34
38
|
else if (arg === '--artifacts') {
|
|
35
39
|
artifacts = true;
|
|
36
40
|
}
|
|
41
|
+
else if (arg === '--adapters') {
|
|
42
|
+
adapters = true;
|
|
43
|
+
}
|
|
44
|
+
else if (arg === '--json') {
|
|
45
|
+
json = true;
|
|
46
|
+
}
|
|
47
|
+
else if (arg === '--purge-adapter-assets') {
|
|
48
|
+
purgeAdapterAssets = true;
|
|
49
|
+
}
|
|
50
|
+
else if (arg === '--prune') {
|
|
51
|
+
prune = true;
|
|
52
|
+
}
|
|
37
53
|
else if (arg === '--kyro-scope') {
|
|
38
54
|
const value = args[i + 1];
|
|
39
55
|
if (!value)
|
|
@@ -79,7 +95,11 @@ function parseOptions(args) {
|
|
|
79
95
|
help,
|
|
80
96
|
tokens,
|
|
81
97
|
artifacts,
|
|
98
|
+
adapters,
|
|
82
99
|
kyroScope,
|
|
100
|
+
json,
|
|
101
|
+
purgeAdapterAssets,
|
|
102
|
+
prune,
|
|
83
103
|
};
|
|
84
104
|
}
|
|
85
105
|
function parseAgent(value) {
|
package/dist/cli/options.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/cli/options.ts"],"names":[],"mappings":";;AAIA,
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/cli/options.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { OperationPlan } from '../types';
|
|
2
|
+
import type { StagePlan } from './types';
|
|
3
|
+
interface OperationExecutionContext {
|
|
4
|
+
packageRoot: string;
|
|
5
|
+
resolveManagedPath(path: string): string;
|
|
6
|
+
}
|
|
7
|
+
export declare function applyOperationPlan(plan: OperationPlan[], context: OperationExecutionContext): void;
|
|
8
|
+
export declare function operationPlanToStagePlan(plan: OperationPlan[], context: OperationExecutionContext): StagePlan;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=operation-steps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operation-steps.d.ts","sourceRoot":"","sources":["../../../src/cli/pipeline/operation-steps.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,KAAK,EAAkB,SAAS,EAAQ,MAAM,SAAS,CAAC;AAE/D,UAAU,yBAAyB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1C;AAQD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,yBAAyB,GAAG,IAAI,CAGlG;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,yBAAyB,GAAG,SAAS,CAK7G"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyOperationPlan = applyOperationPlan;
|
|
4
|
+
exports.operationPlanToStagePlan = operationPlanToStagePlan;
|
|
5
|
+
const node_fs_1 = require("node:fs");
|
|
6
|
+
const node_os_1 = require("node:os");
|
|
7
|
+
const node_path_1 = require("node:path");
|
|
8
|
+
const managed_block_1 = require("../injectors/managed-block");
|
|
9
|
+
const json_merge_1 = require("../injectors/json-merge");
|
|
10
|
+
const orchestrator_1 = require("./orchestrator");
|
|
11
|
+
function applyOperationPlan(plan, context) {
|
|
12
|
+
const result = new orchestrator_1.PipelineOrchestrator('stop-on-error').execute(operationPlanToStagePlan(plan, context));
|
|
13
|
+
if (result.error)
|
|
14
|
+
throw formatPipelineError(result);
|
|
15
|
+
}
|
|
16
|
+
function operationPlanToStagePlan(plan, context) {
|
|
17
|
+
return {
|
|
18
|
+
prepare: [],
|
|
19
|
+
apply: plan.map((operation, index) => new OperationStep(index, operation, context)),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
class OperationStep {
|
|
23
|
+
operation;
|
|
24
|
+
context;
|
|
25
|
+
id;
|
|
26
|
+
description;
|
|
27
|
+
snapshot = null;
|
|
28
|
+
constructor(index, operation, context) {
|
|
29
|
+
this.operation = operation;
|
|
30
|
+
this.context = context;
|
|
31
|
+
this.id = `${index}:${operation.action}:${operation.path}`;
|
|
32
|
+
this.description = `${operation.action} ${operation.path}`;
|
|
33
|
+
}
|
|
34
|
+
run() {
|
|
35
|
+
const target = this.context.resolveManagedPath(this.operation.path);
|
|
36
|
+
this.snapshot = snapshotTarget(target);
|
|
37
|
+
applyOperation(this.operation, target, this.context);
|
|
38
|
+
}
|
|
39
|
+
rollback() {
|
|
40
|
+
if (!this.snapshot)
|
|
41
|
+
return;
|
|
42
|
+
restoreTarget(this.context.resolveManagedPath(this.operation.path), this.snapshot);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function applyOperation(operation, target, context) {
|
|
46
|
+
if (operation.action === 'mkdir') {
|
|
47
|
+
(0, node_fs_1.mkdirSync)(target, { recursive: true });
|
|
48
|
+
}
|
|
49
|
+
else if (operation.action === 'write') {
|
|
50
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(target), { recursive: true });
|
|
51
|
+
(0, node_fs_1.writeFileSync)(target, operation.content ?? '', 'utf-8');
|
|
52
|
+
}
|
|
53
|
+
else if (operation.action === 'copy') {
|
|
54
|
+
if (!operation.source)
|
|
55
|
+
throw new Error(`Copy operation missing source for ${operation.path}`);
|
|
56
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(target), { recursive: true });
|
|
57
|
+
(0, node_fs_1.copyFileSync)((0, node_path_1.resolve)(context.packageRoot, operation.source), target);
|
|
58
|
+
}
|
|
59
|
+
else if (operation.action === 'remove') {
|
|
60
|
+
(0, node_fs_1.rmSync)(target, { recursive: true, force: true });
|
|
61
|
+
}
|
|
62
|
+
else if (operation.action === 'rmdir-if-empty') {
|
|
63
|
+
if ((0, node_fs_1.existsSync)(target) && (0, node_fs_1.lstatSync)(target).isDirectory() && (0, node_fs_1.readdirSync)(target).length === 0) {
|
|
64
|
+
(0, node_fs_1.rmdirSync)(target);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else if (operation.action === 'symlink') {
|
|
68
|
+
if (!operation.source)
|
|
69
|
+
throw new Error(`Symlink operation missing source for ${operation.path}`);
|
|
70
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(target), { recursive: true });
|
|
71
|
+
(0, node_fs_1.rmSync)(target, { recursive: true, force: true });
|
|
72
|
+
(0, node_fs_1.symlinkSync)(context.resolveManagedPath(operation.source), target, 'dir');
|
|
73
|
+
}
|
|
74
|
+
else if (operation.action === 'upsert-block') {
|
|
75
|
+
if (!operation.blockName)
|
|
76
|
+
throw new Error(`Block operation missing blockName for ${operation.path}`);
|
|
77
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(target), { recursive: true });
|
|
78
|
+
const existing = (0, node_fs_1.existsSync)(target) ? (0, node_fs_1.readFileSync)(target, 'utf-8') : '';
|
|
79
|
+
(0, node_fs_1.writeFileSync)(target, (0, managed_block_1.upsertManagedBlock)(existing, operation.blockName, operation.content ?? ''), 'utf-8');
|
|
80
|
+
}
|
|
81
|
+
else if (operation.action === 'remove-block') {
|
|
82
|
+
if (!operation.blockName)
|
|
83
|
+
throw new Error(`Block operation missing blockName for ${operation.path}`);
|
|
84
|
+
if ((0, node_fs_1.existsSync)(target)) {
|
|
85
|
+
const existing = (0, node_fs_1.readFileSync)(target, 'utf-8');
|
|
86
|
+
(0, node_fs_1.writeFileSync)(target, (0, managed_block_1.removeManagedBlock)(existing, operation.blockName), 'utf-8');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else if (operation.action === 'merge-json') {
|
|
90
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(target), { recursive: true });
|
|
91
|
+
const existing = (0, node_fs_1.existsSync)(target) ? (0, node_fs_1.readFileSync)(target, 'utf-8') : '';
|
|
92
|
+
(0, node_fs_1.writeFileSync)(target, (0, json_merge_1.mergeJsonObjectContent)(existing, operation.content ?? '{}'), 'utf-8');
|
|
93
|
+
}
|
|
94
|
+
else if (operation.action === 'remove-json-key') {
|
|
95
|
+
if (!operation.jsonPath)
|
|
96
|
+
throw new Error(`JSON remove operation missing jsonPath for ${operation.path}`);
|
|
97
|
+
if ((0, node_fs_1.existsSync)(target)) {
|
|
98
|
+
const existing = (0, node_fs_1.readFileSync)(target, 'utf-8');
|
|
99
|
+
(0, node_fs_1.writeFileSync)(target, (0, json_merge_1.removeJsonPathContent)(existing, operation.jsonPath), 'utf-8');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
function snapshotTarget(target) {
|
|
104
|
+
if (!(0, node_fs_1.existsSync)(target))
|
|
105
|
+
return { kind: 'missing' };
|
|
106
|
+
const stat = (0, node_fs_1.lstatSync)(target);
|
|
107
|
+
if (stat.isSymbolicLink()) {
|
|
108
|
+
return { kind: 'symlink', link: (0, node_fs_1.readlinkSync)(target) };
|
|
109
|
+
}
|
|
110
|
+
if (stat.isDirectory()) {
|
|
111
|
+
const backupRoot = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'kyro-pipeline-'));
|
|
112
|
+
const backupPath = (0, node_path_1.join)(backupRoot, 'target');
|
|
113
|
+
(0, node_fs_1.cpSync)(target, backupPath, { recursive: true, verbatimSymlinks: true });
|
|
114
|
+
return { kind: 'directory', backupPath };
|
|
115
|
+
}
|
|
116
|
+
return { kind: 'file', content: (0, node_fs_1.readFileSync)(target), mode: stat.mode };
|
|
117
|
+
}
|
|
118
|
+
function restoreTarget(target, snapshot) {
|
|
119
|
+
(0, node_fs_1.rmSync)(target, { recursive: true, force: true });
|
|
120
|
+
if (snapshot.kind === 'missing')
|
|
121
|
+
return;
|
|
122
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(target), { recursive: true });
|
|
123
|
+
if (snapshot.kind === 'file') {
|
|
124
|
+
(0, node_fs_1.writeFileSync)(target, snapshot.content);
|
|
125
|
+
(0, node_fs_1.chmodSync)(target, snapshot.mode);
|
|
126
|
+
}
|
|
127
|
+
else if (snapshot.kind === 'directory') {
|
|
128
|
+
(0, node_fs_1.cpSync)(snapshot.backupPath, target, { recursive: true, verbatimSymlinks: true });
|
|
129
|
+
(0, node_fs_1.rmSync)((0, node_path_1.dirname)(snapshot.backupPath), { recursive: true, force: true });
|
|
130
|
+
}
|
|
131
|
+
else if (snapshot.kind === 'symlink') {
|
|
132
|
+
(0, node_fs_1.symlinkSync)(snapshot.link, target);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
function formatPipelineError(result) {
|
|
136
|
+
const message = result.rollback && !result.rollback.success
|
|
137
|
+
? `Apply failed and rollback failed: ${result.error?.message ?? 'unknown error'}`
|
|
138
|
+
: `Apply failed and rollback completed: ${result.error?.message ?? 'unknown error'}`;
|
|
139
|
+
return new Error(message);
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=operation-steps.js.map
|