@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.
Files changed (48) hide show
  1. package/README.md +28 -2
  2. package/changelog.md +16 -0
  3. package/dist/cli.js +2 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/apps.command.js +83 -0
  6. package/dist/commands/apps.command.js.map +1 -1
  7. package/dist/commands/index.js +3 -1
  8. package/dist/commands/index.js.map +1 -1
  9. package/dist/commands/skills.command.js +56 -0
  10. package/dist/commands/skills.command.js.map +1 -0
  11. package/dist/services/dev.service.js +5 -1
  12. package/dist/services/dev.service.js.map +1 -1
  13. package/dist/services/skills.service.js +178 -0
  14. package/dist/services/skills.service.js.map +1 -0
  15. package/dist/services/template.service.js +141 -9
  16. package/dist/services/template.service.js.map +1 -1
  17. package/dist/services/test-infrastructure.service.js +7 -17
  18. package/dist/services/test-infrastructure.service.js.map +1 -1
  19. package/dist/services/test.service.js +21 -8
  20. package/dist/services/test.service.js.map +1 -1
  21. package/dist/templates/ioconnect-desktop/README.md +28 -2
  22. package/dist/templates/launchpad/apps/launchpad/.gitignore.template +23 -1
  23. package/dist/templates/launchpad/apps/launchpad/.prettierignore +3 -0
  24. package/dist/templates/launchpad/apps/launchpad/.prettierrc +6 -0
  25. package/dist/templates/launchpad/apps/launchpad/README.md +220 -0
  26. package/dist/templates/launchpad/apps/launchpad/config/iocd.app.def.dev.json +1 -1
  27. package/dist/templates/launchpad/apps/launchpad/index.html +13 -14
  28. package/dist/templates/launchpad/apps/launchpad/package.json +17 -9
  29. package/dist/templates/launchpad/apps/launchpad/src/app/app.tsx +31 -37
  30. package/dist/templates/launchpad/apps/launchpad/src/components/launchpad.tsx +37 -0
  31. package/dist/templates/launchpad/apps/launchpad/src/{app → constants}/constants.ts +2 -1
  32. package/dist/templates/launchpad/apps/launchpad/src/main.tsx +1 -3
  33. package/dist/templates/launchpad/apps/launchpad/src/styles.css +2 -17
  34. package/dist/templates/launchpad/apps/launchpad/tsconfig.json +10 -8
  35. package/dist/templates/launchpad/apps/launchpad/vite-env.d.ts +1 -0
  36. package/dist/templates/launchpad/apps/launchpad/vite.config.ts +8 -3
  37. package/dist/templates/tests/.agents/skills/iocd-wdio-testing/references/configuration.md +3 -2
  38. package/dist/templates/tests/.agents/skills/iocd-wdio-testing/references/models.md +1 -1
  39. package/dist/templates/tests/.agents/skills/iocd-wdio-testing/references/troubleshooting.md +8 -9
  40. package/dist/templates/tests/tests/package.json +1 -1
  41. package/dist/utils/template-update.js +6 -0
  42. package/dist/utils/template-update.js.map +1 -0
  43. package/package.json +3 -1
  44. package/dist/templates/launchpad/apps/launchpad/package-lock.json +0 -2778
  45. package/dist/templates/launchpad/apps/launchpad/src/components/logo.tsx +0 -11
  46. package/dist/templates/launchpad/apps/launchpad/src/components/main-context-menu.tsx +0 -212
  47. package/dist/templates/launchpad/apps/launchpad/src/components/notifications-button.tsx +0 -51
  48. 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 --available
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":"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"}
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":"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"}
1
+ {"version":3,"file":"apps.command.js","sourceRoot":"","sources":["../../src/commands/apps.command.ts"],"names":[],"mappings":"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"}
@@ -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,oCAkBC;AA7BD,iFAA2E;AAC3E,iDAAoD;AACpD,4CAAyC;AACzC,wCAA0C;AAC1C,2BAAgC;AAChC,oEAAwE;AACxE,gEAAuC;AACvC,iEAA4D;AAE5D,MAAM,MAAM,GAAG,eAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAE1C,KAAK,UAAU,YAAY,CAAC,SAAmB;IACpD,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAEhD,IAAA,8CAAyB,GAAE,CAAC;IAE5B,4CAA4C;IAC5C,MAAM,qBAAU,CAAC,qBAAqB,EAAE,CAAC;IAEzC,qCAAqC;IACrC,MAAM,IAAA,0CAAkB,EAAC,KAAK,CAAC,CAAC;IAEhC,qDAAqD;IACrD,MAAM,yCAAkB,CAAC,eAAe,EAAE,CAAC;IAE3C,kCAAkC;IAClC,MAAM,kBAAkB,EAAE,CAAC;IAE3B,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC;AAED,KAAK,UAAU,kBAAkB;IAC/B,uCAAuC;IACvC,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAE7D,MAAM,aAAa,GAAG,gBAAS,CAAC,oBAAoB,EAAE,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;QAEhD,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;QAEpC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,wBAAwB,KAAK,EAAE,CAAC,CAAC;QAC9C,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,SAAmB;IACpD,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAE/C,IAAI,CAAC;QACH,IAAI,cAAc,GAAG,gBAAS,CAAC,cAAc,EAAE,CAAC;QAChD,IAAI,CAAC,IAAA,eAAU,EAAC,cAAc,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,iCAAiC,cAAc,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,eAAe,GAAG,uBAAuB,cAAc,EAAE,CAAC;QAC9D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;YACtB,eAAe,IAAI,oBAAoB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAE9B,IAAA,yBAAS,EAAC,cAAc,EAAE,SAAS,EAAE;YACnC,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,gBAAS,CAAC,eAAe,CAAC,MAAM,CAAC;SACvC,CAAC,CAAC;QAEH,MAAM,CAAC,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,gDAAgD,EAAE,KAAK,CAAC,CAAC;QACtE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,OAAe;IAC3C,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,WAAW,OAAO,KAAK,CAAC,CAAC;QAEtC,uEAAuE;QACvE,uCAAuC;QACvC,0CAA0C;QAC1C,gDAAgD;QAChD,MAAM,OAAO,GAAG,qCAAqC,OAAO,GAAG,CAAC;QAEhE,MAAM,CAAC,KAAK,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;QACtC,IAAA,wBAAQ,EAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAErC,MAAM,CAAC,KAAK,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,kBAAkB,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC;QACpD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"dev.service.js","sourceRoot":"","sources":["../../src/services/dev.service.ts"],"names":[],"mappings":";;;;;AAWA,oCAMC;AAED,8CAcC;AAjCD,iFAA2E;AAC3E,iDAAoD;AACpD,4CAAyC;AACzC,wCAA0C;AAC1C,2BAAgC;AAChC,oEAAwE;AACxE,gEAAuC;AACvC,iEAA4D;AAE5D,MAAM,MAAM,GAAG,eAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAE1C,KAAK,UAAU,YAAY,CAAC,SAAmB;IACpD,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAEhD,MAAM,iBAAiB,EAAE,CAAC;IAE1B,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC;AAEM,KAAK,UAAU,iBAAiB;IACrC,IAAA,8CAAyB,GAAE,CAAC;IAE5B,4CAA4C;IAC5C,MAAM,qBAAU,CAAC,qBAAqB,EAAE,CAAC;IAEzC,qCAAqC;IACrC,MAAM,IAAA,0CAAkB,EAAC,KAAK,CAAC,CAAC;IAEhC,qDAAqD;IACrD,MAAM,yCAAkB,CAAC,eAAe,EAAE,CAAC;IAE3C,kCAAkC;IAClC,MAAM,kBAAkB,EAAE,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,kBAAkB;IAC/B,uCAAuC;IACvC,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAE7D,MAAM,aAAa,GAAG,gBAAS,CAAC,oBAAoB,EAAE,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;QAEhD,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;QAEpC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,wBAAwB,KAAK,EAAE,CAAC,CAAC;QAC9C,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,SAAmB;IACpD,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAE/C,IAAI,CAAC;QACH,IAAI,cAAc,GAAG,gBAAS,CAAC,cAAc,EAAE,CAAC;QAChD,IAAI,CAAC,IAAA,eAAU,EAAC,cAAc,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,iCAAiC,cAAc,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,eAAe,GAAG,uBAAuB,cAAc,EAAE,CAAC;QAC9D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;YACtB,eAAe,IAAI,oBAAoB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAE9B,IAAA,yBAAS,EAAC,cAAc,EAAE,SAAS,EAAE;YACnC,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,gBAAS,CAAC,eAAe,CAAC,MAAM,CAAC;SACvC,CAAC,CAAC;QAEH,MAAM,CAAC,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,gDAAgD,EAAE,KAAK,CAAC,CAAC;QACtE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,OAAe;IAC3C,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,WAAW,OAAO,KAAK,CAAC,CAAC;QAEtC,uEAAuE;QACvE,uCAAuC;QACvC,0CAA0C;QAC1C,gDAAgD;QAChD,MAAM,OAAO,GAAG,qCAAqC,OAAO,GAAG,CAAC;QAEhE,MAAM,CAAC,KAAK,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;QACtC,IAAA,wBAAQ,EAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAErC,MAAM,CAAC,KAAK,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,kBAAkB,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC;QACpD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -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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"}