@interopio/iocd-cli 1.0.2 → 1.1.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 +28 -2
- package/changelog.md +16 -0
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/apps.command.js +83 -0
- package/dist/commands/apps.command.js.map +1 -1
- package/dist/commands/index.js +3 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/skills.command.js +56 -0
- package/dist/commands/skills.command.js.map +1 -0
- package/dist/services/dev.service.js +5 -1
- package/dist/services/dev.service.js.map +1 -1
- package/dist/services/skills.service.js +178 -0
- package/dist/services/skills.service.js.map +1 -0
- package/dist/services/template.service.js +141 -9
- package/dist/services/template.service.js.map +1 -1
- package/dist/services/test-infrastructure.service.js +7 -17
- package/dist/services/test-infrastructure.service.js.map +1 -1
- package/dist/services/test.service.js +21 -8
- package/dist/services/test.service.js.map +1 -1
- package/dist/templates/ioconnect-desktop/README.md +28 -2
- package/dist/templates/launchpad/apps/launchpad/.gitignore.template +23 -1
- package/dist/templates/launchpad/apps/launchpad/.prettierignore +3 -0
- package/dist/templates/launchpad/apps/launchpad/.prettierrc +6 -0
- package/dist/templates/launchpad/apps/launchpad/README.md +220 -0
- package/dist/templates/launchpad/apps/launchpad/config/iocd.app.def.dev.json +1 -1
- package/dist/templates/launchpad/apps/launchpad/index.html +13 -14
- package/dist/templates/launchpad/apps/launchpad/package.json +17 -9
- package/dist/templates/launchpad/apps/launchpad/src/app/app.tsx +31 -37
- package/dist/templates/launchpad/apps/launchpad/src/components/launchpad.tsx +37 -0
- package/dist/templates/launchpad/apps/launchpad/src/{app → constants}/constants.ts +2 -1
- package/dist/templates/launchpad/apps/launchpad/src/main.tsx +1 -3
- package/dist/templates/launchpad/apps/launchpad/src/styles.css +2 -17
- package/dist/templates/launchpad/apps/launchpad/tsconfig.json +10 -8
- package/dist/templates/launchpad/apps/launchpad/vite-env.d.ts +1 -0
- package/dist/templates/launchpad/apps/launchpad/vite.config.ts +8 -3
- package/dist/templates/tests/.agents/skills/iocd-wdio-testing/references/configuration.md +3 -2
- package/dist/templates/tests/.agents/skills/iocd-wdio-testing/references/models.md +1 -1
- package/dist/templates/tests/.agents/skills/iocd-wdio-testing/references/troubleshooting.md +8 -9
- package/dist/templates/tests/tests/package.json +1 -1
- package/dist/utils/template-update.js +6 -0
- package/dist/utils/template-update.js.map +1 -0
- package/package.json +3 -1
- package/dist/templates/launchpad/apps/launchpad/package-lock.json +0 -2778
- package/dist/templates/launchpad/apps/launchpad/src/components/logo.tsx +0 -11
- package/dist/templates/launchpad/apps/launchpad/src/components/main-context-menu.tsx +0 -212
- package/dist/templates/launchpad/apps/launchpad/src/components/notifications-button.tsx +0 -51
- package/dist/templates/tests/tests/package-lock.json +0 -8441
package/README.md
CHANGED
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
- [Testing](#testing)
|
|
28
28
|
- [Running Tests](#running-tests)
|
|
29
29
|
- [Writing Tests](#writing-tests)
|
|
30
|
+
- [Updating Coding Agent Skills](#updating-coding-agent-skills)
|
|
30
31
|
- [Building for Production](#building-for-production-1)
|
|
31
32
|
- [Build Commands](#build-commands)
|
|
32
33
|
- [Build Output](#build-output)
|
|
@@ -336,8 +337,22 @@ Template applications can be selected during project creation or added later:
|
|
|
336
337
|
# Add template application
|
|
337
338
|
iocd apps add workspaces
|
|
338
339
|
|
|
339
|
-
# List available templates
|
|
340
|
-
iocd apps list
|
|
340
|
+
# List installed and available templates
|
|
341
|
+
iocd apps list
|
|
342
|
+
|
|
343
|
+
# Update one template application
|
|
344
|
+
iocd apps update workspaces
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
Updating a template application permanently deletes its existing app directory and
|
|
348
|
+
copies the current template shipped by the CLI. This removes all customizations and
|
|
349
|
+
other files in that directory. Commit or copy your work before running the command.
|
|
350
|
+
The CLI displays this warning and asks for confirmation before deleting anything.
|
|
351
|
+
|
|
352
|
+
For an intentional non-interactive update, use `--yes` to skip the confirmation:
|
|
353
|
+
|
|
354
|
+
```bash
|
|
355
|
+
iocd apps update workspaces --yes
|
|
341
356
|
```
|
|
342
357
|
|
|
343
358
|
**Available templates:**
|
|
@@ -480,6 +495,17 @@ describe('io.Connect Desktop Application', () => {
|
|
|
480
495
|
|
|
481
496
|
Add your test files to the `tests/` directory. They'll run automatically in CI/CD pipelines.
|
|
482
497
|
|
|
498
|
+
### Updating Coding Agent Skills
|
|
499
|
+
|
|
500
|
+
The CLI ships coding agent skills in `.agents/skills/`. After updating
|
|
501
|
+
`@interopio/iocd-cli`, replace all CLI-managed skills with their current versions:
|
|
502
|
+
|
|
503
|
+
```bash
|
|
504
|
+
npx iocd skills update
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
The command overwrites skills shipped by the CLI and preserves other skills in the project.
|
|
508
|
+
|
|
483
509
|
---
|
|
484
510
|
|
|
485
511
|
## Building for Production
|
package/changelog.md
CHANGED
|
@@ -5,6 +5,22 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.1.0](https://github.com/InteropIO/iocd-cli/compare/iocd-cli-v1.0.3...iocd-cli-v1.1.0) (2026-08-26)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* **apps:** add template update command ([#102](https://github.com/InteropIO/iocd-cli/issues/102)) ([41ce13e](https://github.com/InteropIO/iocd-cli/commit/41ce13e117a2d4948412a4a4d9add9d5dce3745b))
|
|
14
|
+
* **skills:** add update command ([#100](https://github.com/InteropIO/iocd-cli/issues/100)) ([6736c5c](https://github.com/InteropIO/iocd-cli/commit/6736c5c6585ac19739d8abfc92d64f27c747bdba))
|
|
15
|
+
* **templates:** refresh launchpad and test scaffolds ([#99](https://github.com/InteropIO/iocd-cli/issues/99)) ([2f03c6c](https://github.com/InteropIO/iocd-cli/commit/2f03c6c860443b9d9d432b660fd6f7cf49198282))
|
|
16
|
+
|
|
17
|
+
## [1.0.3](https://github.com/InteropIO/iocd-cli/compare/iocd-cli-v1.0.2...iocd-cli-v1.0.3) (2026-08-19)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* **test:** prepare seed before running generated tests ([#97](https://github.com/InteropIO/iocd-cli/issues/97)) ([4baded9](https://github.com/InteropIO/iocd-cli/commit/4baded957c1e4afeb73d15cf98db9e2afd1f3464))
|
|
23
|
+
|
|
8
24
|
## [1.0.2](https://github.com/InteropIO/iocd-cli/compare/iocd-cli-v1.0.1...iocd-cli-v1.0.2) (2026-08-18)
|
|
9
25
|
|
|
10
26
|
|
package/dist/cli.js
CHANGED
|
@@ -47,6 +47,7 @@ const build_command_1 = require("./commands/build.command");
|
|
|
47
47
|
const dev_command_1 = require("./commands/dev.command");
|
|
48
48
|
const test_command_1 = require("./commands/test.command");
|
|
49
49
|
const setup_command_1 = require("./commands/setup.command");
|
|
50
|
+
const skills_command_1 = require("./commands/skills.command");
|
|
50
51
|
const clack = __importStar(require("@clack/prompts"));
|
|
51
52
|
const colors_1 = require("./utils/colors");
|
|
52
53
|
const pacakge_json_helper_1 = require("./utils/pacakge.json.helper");
|
|
@@ -91,6 +92,7 @@ program.addCommand(components_command_1.componentsCommand);
|
|
|
91
92
|
program.addCommand(apps_command_1.appsCommand);
|
|
92
93
|
program.addCommand(modifications_command_1.modificationsCommand);
|
|
93
94
|
program.addCommand(license_command_1.licenseCommand);
|
|
95
|
+
program.addCommand(skills_command_1.skillsCommand);
|
|
94
96
|
// global hook runs for all subcommands
|
|
95
97
|
program.hook("preAction", (_thisCommand, actionCommand) => {
|
|
96
98
|
const cmdPath = actionCommand.name(); // e.g. "init" or "build"
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAE1D,yCAAoC;AACpC,2CAAwC;AACxC,yDAAqD;AACrD,8DAA0D;AAC1D,sEAAkE;AAClE,0DAAsD;AACtD,gEAA4D;AAC5D,4EAAwE;AACxE,4DAAwD;AACxD,wDAAoD;AACpD,0DAAsD;AACtD,4DAAwD;AACxD,sDAAwC;AACxC,2CAA6C;AAC7C,qEAAgE;AAChE,qEAAiE;AACjE,yCAAgD;AAChD,yDAAwD;AAExD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAC9B,MAAM,MAAM,GAAG,eAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAEzC,KAAK,CAAC,KAAK,CACT,IAAA,oBAAW,EACT,2BAA2B,uCAAiB,CAAC,iBAAiB,EAAE,CAAC,OAAO,GAAG,CAC5E,CACF,CAAC;AACF,MAAM,CAAC,KAAK,CACV,0BAA0B,uCAAiB,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,CAC1E,CAAC;AACF,wFAAwF;AACxF,IAAA,uBAAe,GAAE,CAAC;AAClB,MAAM,CAAC,KAAK,CAAC,oBAAoB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AACpD,MAAM,CAAC,KAAK,CAAC,qBAAqB,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AACtE,MAAM,CAAC,KAAK,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxE,MAAM,CAAC,gBAAgB,EAAE,CAAC;AAC1B,MAAM,CAAC,KAAK,CAAC,aAAa,8BAAa,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;AAE3E,6EAA6E;AAC7E,IAAI,8BAAa,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IAChC,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC5B,CAAC;AAED,OAAO;KACJ,IAAI,CAAC,qBAAqB,CAAC;KAC3B,WAAW,CACV,6EAA6E,CAC9E;KACA,OAAO,CAAC,uCAAiB,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC;KACtD,MAAM,CAAC,WAAW,EAAE,0CAA0C,CAAC;KAC/D,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE;IAC/B,yCAAyC;IACzC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACpB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,+BAA+B;AAC/B,OAAO,CAAC,UAAU,CAAC,8BAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,4BAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,wBAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,0BAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,4BAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,sCAAiB,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,0BAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,4CAAoB,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,gCAAc,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
@@ -9,6 +42,9 @@ const logger_1 = require("../utils/logger");
|
|
|
9
42
|
const error_handler_1 = require("../utils/error.handler");
|
|
10
43
|
const app_service_1 = __importDefault(require("../services/app.service"));
|
|
11
44
|
const template_service_1 = require("../services/template.service");
|
|
45
|
+
const error_handler_2 = require("../utils/error.handler");
|
|
46
|
+
const clack = __importStar(require("@clack/prompts"));
|
|
47
|
+
const template_update_1 = require("../utils/template-update");
|
|
12
48
|
const logger = logger_1.Logger.getInstance("apps.command");
|
|
13
49
|
exports.appsCommand = new commander_1.Command("apps").description("Application management commands");
|
|
14
50
|
exports.appsCommand
|
|
@@ -84,6 +120,53 @@ exports.appsCommand
|
|
|
84
120
|
error_handler_1.ErrorHandler.handle(error);
|
|
85
121
|
}
|
|
86
122
|
});
|
|
123
|
+
exports.appsCommand
|
|
124
|
+
.command("update <appName>")
|
|
125
|
+
.description("Delete and recreate an installed template application")
|
|
126
|
+
.option("-y, --yes", "Skip the destructive update confirmation")
|
|
127
|
+
.action(async (appName, options) => {
|
|
128
|
+
try {
|
|
129
|
+
const templateService = new template_service_1.TemplateService();
|
|
130
|
+
const installedAppNames = await getInstalledTemplateApplicationNames(templateService);
|
|
131
|
+
if (!installedAppNames.includes(appName)) {
|
|
132
|
+
throw new error_handler_2.CLIError(`Template application '${appName}' is not installed in this project`, {
|
|
133
|
+
code: error_handler_2.ErrorCode.NOT_FOUND,
|
|
134
|
+
suggestions: [`Add it first with: iocd apps add ${appName}`],
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
logger.warn((0, template_update_1.getTemplateUpdateWarning)([appName]));
|
|
138
|
+
if (!options.yes) {
|
|
139
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
|
140
|
+
throw new error_handler_2.CLIError("Template application update requires confirmation in an interactive terminal", {
|
|
141
|
+
code: error_handler_2.ErrorCode.VALIDATION_ERROR,
|
|
142
|
+
suggestions: [
|
|
143
|
+
`After saving your work, run: iocd apps update ${appName} --yes`,
|
|
144
|
+
],
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
const confirmed = await clack.confirm({
|
|
148
|
+
message: `Delete and replace the template application files for ${appName}?`,
|
|
149
|
+
initialValue: false,
|
|
150
|
+
});
|
|
151
|
+
if (clack.isCancel(confirmed) || !confirmed) {
|
|
152
|
+
logger.info("Template application update cancelled.");
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
await templateService.updateTemplateApplication(appName);
|
|
157
|
+
await app_service_1.default.installAppByName(appName);
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
error_handler_1.ErrorHandler.handle(error);
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
const getInstalledTemplateApplicationNames = async (templateService) => {
|
|
164
|
+
const installedApps = await app_service_1.default.getAllApps();
|
|
165
|
+
const availableNames = new Set(templateService.getAvailableApplicationTemplates().map(app => app.name));
|
|
166
|
+
return installedApps
|
|
167
|
+
.map(app => app.name)
|
|
168
|
+
.filter(name => availableNames.has(name));
|
|
169
|
+
};
|
|
87
170
|
const printApps = async () => {
|
|
88
171
|
const apps = await app_service_1.default.getAllApps();
|
|
89
172
|
if (apps.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apps.command.js","sourceRoot":"","sources":["../../src/commands/apps.command.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"apps.command.js","sourceRoot":"","sources":["../../src/commands/apps.command.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.setupCommand = exports.testCommand = exports.devCommand = exports.buildCommand = exports.modificationsCommand = exports.licenseCommand = exports.appsCommand = exports.componentsCommand = exports.createCommand = void 0;
|
|
3
|
+
exports.skillsCommand = exports.setupCommand = exports.testCommand = exports.devCommand = exports.buildCommand = exports.modificationsCommand = exports.licenseCommand = exports.appsCommand = exports.componentsCommand = exports.createCommand = void 0;
|
|
4
4
|
var create_command_1 = require("./create.command");
|
|
5
5
|
Object.defineProperty(exports, "createCommand", { enumerable: true, get: function () { return create_command_1.createCommand; } });
|
|
6
6
|
var components_command_1 = require("./components.command");
|
|
@@ -19,4 +19,6 @@ var test_command_1 = require("./test.command");
|
|
|
19
19
|
Object.defineProperty(exports, "testCommand", { enumerable: true, get: function () { return test_command_1.testCommand; } });
|
|
20
20
|
var setup_command_1 = require("./setup.command");
|
|
21
21
|
Object.defineProperty(exports, "setupCommand", { enumerable: true, get: function () { return setup_command_1.setupCommand; } });
|
|
22
|
+
var skills_command_1 = require("./skills.command");
|
|
23
|
+
Object.defineProperty(exports, "skillsCommand", { enumerable: true, get: function () { return skills_command_1.skillsCommand; } });
|
|
22
24
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":";;;AAAA,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAC1B,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,iEAA+D;AAAtD,6HAAA,oBAAoB,OAAA;AAC7B,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,iDAA+C;AAAtC,6GAAA,YAAY,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":";;;AAAA,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAC1B,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,iEAA+D;AAAtD,6HAAA,oBAAoB,OAAA;AAC7B,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.skillsCommand = void 0;
|
|
37
|
+
const clack = __importStar(require("@clack/prompts"));
|
|
38
|
+
const commander_1 = require("commander");
|
|
39
|
+
const skills_service_1 = require("../services/skills.service");
|
|
40
|
+
const error_handler_1 = require("../utils/error.handler");
|
|
41
|
+
exports.skillsCommand = new commander_1.Command("skills").description("Manage coding agent skills");
|
|
42
|
+
exports.skillsCommand
|
|
43
|
+
.command("update")
|
|
44
|
+
.description("Update all coding agent skills shipped by the CLI")
|
|
45
|
+
.action(() => {
|
|
46
|
+
try {
|
|
47
|
+
const updatedSkills = new skills_service_1.SkillsService().update();
|
|
48
|
+
clack.note(updatedSkills.length > 0
|
|
49
|
+
? updatedSkills.join("\n")
|
|
50
|
+
: "No skills are currently shipped by the CLI.", "Updated IOCD Skills");
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
error_handler_1.ErrorHandler.handle(error);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=skills.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.command.js","sourceRoot":"","sources":["../../src/commands/skills.command.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sDAAwC;AACxC,yCAAoC;AACpC,+DAA2D;AAC3D,0DAAsD;AAEzC,QAAA,aAAa,GAAG,IAAI,mBAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAC5D,4BAA4B,CAC7B,CAAC;AAEF,qBAAa;KACV,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,mDAAmD,CAAC;KAChE,MAAM,CAAC,GAAG,EAAE;IACX,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,IAAI,8BAAa,EAAE,CAAC,MAAM,EAAE,CAAC;QACnD,KAAK,CAAC,IAAI,CACR,aAAa,CAAC,MAAM,GAAG,CAAC;YACtB,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1B,CAAC,CAAC,6CAA6C,EACjD,qBAAqB,CACtB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,4BAAY,CAAC,MAAM,CAAC,KAAc,CAAC,CAAC;IACtC,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.startDevMode = startDevMode;
|
|
7
|
+
exports.prepareIocdForDev = prepareIocdForDev;
|
|
7
8
|
const modifications_service_1 = require("./modifications/modifications.service");
|
|
8
9
|
const child_process_1 = require("child_process");
|
|
9
10
|
const logger_1 = require("../utils/logger");
|
|
@@ -15,6 +16,10 @@ const license_file_service_1 = require("./license-file.service");
|
|
|
15
16
|
const logger = logger_1.Logger.getInstance("dev.service");
|
|
16
17
|
async function startDevMode(extraArgs) {
|
|
17
18
|
logger.info("Will start io.cd in dev mode....");
|
|
19
|
+
await prepareIocdForDev();
|
|
20
|
+
await launchIocdComponent(extraArgs);
|
|
21
|
+
}
|
|
22
|
+
async function prepareIocdForDev() {
|
|
18
23
|
(0, ensure_iocd_exists_1.ensureIOCDComponentExists)();
|
|
19
24
|
// some applications have base modifications
|
|
20
25
|
await app_service_1.default.copyBaseModifications();
|
|
@@ -24,7 +29,6 @@ async function startDevMode(extraArgs) {
|
|
|
24
29
|
await license_file_service_1.LicenseFileService.copyLicenseFile();
|
|
25
30
|
// sign ioconnect desktop if MacOS
|
|
26
31
|
await signIocdAppIfMacOs();
|
|
27
|
-
await launchIocdComponent(extraArgs);
|
|
28
32
|
}
|
|
29
33
|
async function signIocdAppIfMacOs() {
|
|
30
34
|
// Code signing is only needed on macOS
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.service.js","sourceRoot":"","sources":["../../src/services/dev.service.ts"],"names":[],"mappings":";;;;;AAWA,
|
|
1
|
+
{"version":3,"file":"dev.service.js","sourceRoot":"","sources":["../../src/services/dev.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SkillsService = void 0;
|
|
7
|
+
const fs_1 = require("fs");
|
|
8
|
+
const path_1 = require("path");
|
|
9
|
+
const proper_lockfile_1 = __importDefault(require("proper-lockfile"));
|
|
10
|
+
const logger_1 = require("../utils/logger");
|
|
11
|
+
const path_2 = require("../utils/path");
|
|
12
|
+
const LOCK_STALE_MS = 60_000;
|
|
13
|
+
const LOCK_UPDATE_MS = 20_000;
|
|
14
|
+
class SkillsService {
|
|
15
|
+
logger = logger_1.Logger.getInstance("skills.service");
|
|
16
|
+
rootDir;
|
|
17
|
+
sourceDir;
|
|
18
|
+
copyDirectory;
|
|
19
|
+
renamePath;
|
|
20
|
+
constructor(options = {}) {
|
|
21
|
+
this.rootDir = options.rootDir ?? path_2.PathUtils.getRootDir();
|
|
22
|
+
this.sourceDir =
|
|
23
|
+
options.sourceDir ?? (0, path_1.join)(__dirname, "../templates/tests/.agents/skills");
|
|
24
|
+
this.copyDirectory =
|
|
25
|
+
options.copyDirectory ??
|
|
26
|
+
((source, destination) => (0, fs_1.cpSync)(source, destination, { recursive: true }));
|
|
27
|
+
this.renamePath = options.renamePath ?? fs_1.renameSync;
|
|
28
|
+
}
|
|
29
|
+
update() {
|
|
30
|
+
this.logger.info("Updating coding agent skills...");
|
|
31
|
+
try {
|
|
32
|
+
const updatedSkills = this.copySkills(true);
|
|
33
|
+
this.logger.info(`Coding agent skills updated successfully: ${this.formatSkills(updatedSkills)}`);
|
|
34
|
+
return updatedSkills;
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
this.logger.error("Failed to update coding agent skills.", error);
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
installMissing() {
|
|
42
|
+
this.logger.info("Installing missing coding agent skills...");
|
|
43
|
+
try {
|
|
44
|
+
const installedSkills = this.copySkills(false);
|
|
45
|
+
this.logger.info(`Missing coding agent skills installed successfully: ${this.formatSkills(installedSkills)}`);
|
|
46
|
+
return installedSkills;
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
this.logger.error("Failed to install missing coding agent skills.", error);
|
|
50
|
+
throw error;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
copySkills(overwrite) {
|
|
54
|
+
if (!(0, fs_1.existsSync)(this.sourceDir)) {
|
|
55
|
+
throw new Error(`CLI skills directory not found at '${this.sourceDir}'.`);
|
|
56
|
+
}
|
|
57
|
+
const destinationRoot = (0, path_1.join)(this.rootDir, ".agents", "skills");
|
|
58
|
+
this.logger.debug(`Copying coding agent skills from '${this.sourceDir}' to '${destinationRoot}' (overwrite: ${overwrite}).`);
|
|
59
|
+
(0, fs_1.mkdirSync)(destinationRoot, { recursive: true });
|
|
60
|
+
const lockPath = (0, path_1.join)(destinationRoot, ".iocd-update.lock");
|
|
61
|
+
const releaseLock = this.acquireLock(destinationRoot, lockPath);
|
|
62
|
+
const copiedSkills = [];
|
|
63
|
+
let copyError;
|
|
64
|
+
try {
|
|
65
|
+
const skillDirectories = (0, fs_1.readdirSync)(this.sourceDir, {
|
|
66
|
+
withFileTypes: true,
|
|
67
|
+
}).filter(entry => entry.isDirectory());
|
|
68
|
+
this.logger.debug(`Found ${skillDirectories.length} shipped coding agent skills: ${this.formatSkills(skillDirectories.map(entry => entry.name))}`);
|
|
69
|
+
for (const skillDirectory of skillDirectories) {
|
|
70
|
+
const source = (0, path_1.join)(this.sourceDir, skillDirectory.name);
|
|
71
|
+
const destination = (0, path_1.join)(destinationRoot, skillDirectory.name);
|
|
72
|
+
if (!overwrite && (0, fs_1.existsSync)(destination)) {
|
|
73
|
+
this.logger.debug(`Keeping existing coding agent skill '${skillDirectory.name}' at '${destination}'.`);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (this.installSkill(source, destination, destinationRoot, overwrite)) {
|
|
77
|
+
copiedSkills.push(skillDirectory.name);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
copyError = error;
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
releaseLock();
|
|
86
|
+
this.logger.debug(`Released coding agent skills lock '${lockPath}'.`);
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
this.logger.error(`Failed to release coding agent skills lock '${lockPath}'.`, error);
|
|
90
|
+
if (!copyError) {
|
|
91
|
+
throw error;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (copyError) {
|
|
95
|
+
throw copyError;
|
|
96
|
+
}
|
|
97
|
+
return copiedSkills;
|
|
98
|
+
}
|
|
99
|
+
acquireLock(destinationRoot, lockPath) {
|
|
100
|
+
try {
|
|
101
|
+
const releaseLock = proper_lockfile_1.default.lockSync(destinationRoot, {
|
|
102
|
+
lockfilePath: lockPath,
|
|
103
|
+
realpath: false,
|
|
104
|
+
retries: 0,
|
|
105
|
+
stale: LOCK_STALE_MS,
|
|
106
|
+
update: LOCK_UPDATE_MS,
|
|
107
|
+
onCompromised: error => {
|
|
108
|
+
this.logger.error(`Coding agent skills lock '${lockPath}' was compromised.`, error);
|
|
109
|
+
throw error;
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
this.logger.debug(`Acquired coding agent skills lock '${lockPath}'.`);
|
|
113
|
+
return releaseLock;
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
if (error.code === "ELOCKED") {
|
|
117
|
+
this.logger.warn(`Coding agent skills operation blocked by active lock '${lockPath}'.`);
|
|
118
|
+
throw new Error(`Another IOCD skills operation is already in progress at '${lockPath}'.`);
|
|
119
|
+
}
|
|
120
|
+
throw error;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
installSkill(source, destination, destinationRoot, overwrite) {
|
|
124
|
+
const stagingRoot = (0, fs_1.mkdtempSync)((0, path_1.join)(destinationRoot, ".iocd-skill-"));
|
|
125
|
+
const stagedSkill = (0, path_1.join)(stagingRoot, "next");
|
|
126
|
+
const previousSkill = (0, path_1.join)(stagingRoot, "previous");
|
|
127
|
+
let previousSkillMoved = false;
|
|
128
|
+
let preserveStaging = false;
|
|
129
|
+
try {
|
|
130
|
+
this.logger.debug(`Staging coding agent skill from '${source}' in '${stagedSkill}'.`);
|
|
131
|
+
this.copyDirectory(source, stagedSkill);
|
|
132
|
+
if (!overwrite && (0, fs_1.existsSync)(destination)) {
|
|
133
|
+
this.logger.debug(`Coding agent skill destination '${destination}' appeared during staging; keeping it unchanged.`);
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
if ((0, fs_1.existsSync)(destination)) {
|
|
137
|
+
this.logger.debug(`Moving existing coding agent skill '${destination}' to temporary backup '${previousSkill}'.`);
|
|
138
|
+
this.renamePath(destination, previousSkill);
|
|
139
|
+
previousSkillMoved = true;
|
|
140
|
+
}
|
|
141
|
+
this.renamePath(stagedSkill, destination);
|
|
142
|
+
this.logger.debug(`Published coding agent skill to '${destination}' successfully.`);
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
if (previousSkillMoved) {
|
|
147
|
+
preserveStaging = true;
|
|
148
|
+
if ((0, fs_1.existsSync)(destination)) {
|
|
149
|
+
this.logger.error(`Coding agent skill publication failed after '${destination}' changed. Keeping the current destination and backup '${previousSkill}'.`, error);
|
|
150
|
+
throw new Error(`Skill update failed after the destination changed. The current destination was left untouched and the previous skill remains at '${previousSkill}'. Update error: ${error.message}`);
|
|
151
|
+
}
|
|
152
|
+
try {
|
|
153
|
+
this.renamePath(previousSkill, destination);
|
|
154
|
+
preserveStaging = false;
|
|
155
|
+
this.logger.warn(`Coding agent skill publication failed. Restored the previous skill at '${destination}'.`);
|
|
156
|
+
}
|
|
157
|
+
catch (restoreError) {
|
|
158
|
+
this.logger.error(`Coding agent skill publication failed and backup '${previousSkill}' could not be restored.`, restoreError);
|
|
159
|
+
throw new Error(`Skill update failed and the previous skill could not be restored. Its backup remains at '${previousSkill}'. Update error: ${error.message}. Restore error: ${restoreError.message}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
throw error;
|
|
163
|
+
}
|
|
164
|
+
finally {
|
|
165
|
+
if (!preserveStaging) {
|
|
166
|
+
(0, fs_1.rmSync)(stagingRoot, { recursive: true, force: true });
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
this.logger.warn(`Preserving coding agent skill staging directory '${stagingRoot}' for recovery.`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
formatSkills(skills) {
|
|
174
|
+
return skills.length > 0 ? skills.join(", ") : "none";
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
exports.SkillsService = SkillsService;
|
|
178
|
+
//# sourceMappingURL=skills.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.service.js","sourceRoot":"","sources":["../../src/services/skills.service.ts"],"names":[],"mappings":"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"}
|