@interopio/iocd-cli 1.0.3 → 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 +9 -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/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/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/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
|
@@ -11,6 +11,8 @@ const error_handler_1 = require("../utils/error.handler");
|
|
|
11
11
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
12
12
|
const config_service_1 = require("./config/config.service");
|
|
13
13
|
const path_1 = require("../utils/path");
|
|
14
|
+
class TemplateRestoreError extends Error {
|
|
15
|
+
}
|
|
14
16
|
/**
|
|
15
17
|
* TemplateService handles the generation of io.Connect Desktop projects using a modular template system.
|
|
16
18
|
*
|
|
@@ -42,9 +44,14 @@ const path_1 = require("../utils/path");
|
|
|
42
44
|
*/
|
|
43
45
|
class TemplateService {
|
|
44
46
|
logger = logger_1.Logger.getInstance("template.service");
|
|
47
|
+
rootDir;
|
|
45
48
|
templatesPath;
|
|
46
|
-
|
|
47
|
-
|
|
49
|
+
renamePath;
|
|
50
|
+
constructor(options = {}) {
|
|
51
|
+
this.rootDir = options.rootDir ?? path_1.PathUtils.getRootDir();
|
|
52
|
+
this.templatesPath =
|
|
53
|
+
options.templatesPath ?? (0, node_path_1.join)(__dirname, "../templates");
|
|
54
|
+
this.renamePath = options.renamePath ?? node_fs_1.renameSync;
|
|
48
55
|
}
|
|
49
56
|
/**
|
|
50
57
|
* Get the path to embedded templates
|
|
@@ -124,7 +131,8 @@ class TemplateService {
|
|
|
124
131
|
});
|
|
125
132
|
}
|
|
126
133
|
const templatePath = (0, node_path_1.join)(this.templatesPath, templateName);
|
|
127
|
-
const autoIncludedApplications = this.
|
|
134
|
+
const autoIncludedApplications = this.getAvailableTemplates()
|
|
135
|
+
.map(templateName => this.getTemplateInfo(templateName))
|
|
128
136
|
.filter(template => template.autoInclude === true)
|
|
129
137
|
.map(template => template.name);
|
|
130
138
|
const templateApplications = [
|
|
@@ -181,9 +189,132 @@ class TemplateService {
|
|
|
181
189
|
templateApplications: [appName],
|
|
182
190
|
initialComponents: [],
|
|
183
191
|
});
|
|
184
|
-
await this.processApplicationsTemplates(
|
|
192
|
+
await this.processApplicationsTemplates(this.rootDir, variables, [appName]);
|
|
185
193
|
this.logger.info(`Template application ${appName} added successfully`);
|
|
186
194
|
}
|
|
195
|
+
async updateTemplateApplication(appName) {
|
|
196
|
+
this.logger.info(`Updating template application: ${appName}`);
|
|
197
|
+
try {
|
|
198
|
+
if (!this.templateExists(appName)) {
|
|
199
|
+
throw new error_handler_1.CLIError(`Template '${appName}' not found`, {
|
|
200
|
+
code: error_handler_1.ErrorCode.NOT_FOUND,
|
|
201
|
+
suggestions: ["Check available templates with: iocd apps list"],
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
const templateInfo = this.getTemplateInfo(appName);
|
|
205
|
+
if (templateInfo.type !== "application") {
|
|
206
|
+
throw new error_handler_1.CLIError(`Template '${appName}' is not an application template`, { code: error_handler_1.ErrorCode.VALIDATION_ERROR });
|
|
207
|
+
}
|
|
208
|
+
const templateAppsRoot = (0, node_path_1.join)(this.templatesPath, appName, "apps");
|
|
209
|
+
if (!(0, node_fs_1.existsSync)(templateAppsRoot)) {
|
|
210
|
+
throw new error_handler_1.CLIError(`Template application '${appName}' doesn't contain an apps directory`, { code: error_handler_1.ErrorCode.FILE_SYSTEM_ERROR });
|
|
211
|
+
}
|
|
212
|
+
const appDirectories = (0, node_fs_1.readdirSync)(templateAppsRoot, {
|
|
213
|
+
withFileTypes: true,
|
|
214
|
+
})
|
|
215
|
+
.filter(entry => entry.isDirectory())
|
|
216
|
+
.map(entry => entry.name);
|
|
217
|
+
if (appDirectories.length === 0) {
|
|
218
|
+
throw new error_handler_1.CLIError(`Template application '${appName}' doesn't contain an app`, { code: error_handler_1.ErrorCode.FILE_SYSTEM_ERROR });
|
|
219
|
+
}
|
|
220
|
+
const destinations = appDirectories.map(directory => (0, node_path_1.join)(this.rootDir, "apps", directory));
|
|
221
|
+
const missingDestination = destinations.find(destination => !(0, node_fs_1.existsSync)(destination));
|
|
222
|
+
if (missingDestination) {
|
|
223
|
+
throw new error_handler_1.CLIError(`Template application '${appName}' is not installed at '${missingDestination}'`, {
|
|
224
|
+
code: error_handler_1.ErrorCode.NOT_FOUND,
|
|
225
|
+
suggestions: [`Add it first with: iocd apps add ${appName}`],
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
const variables = this.getProjectTemplateVariables(appName);
|
|
229
|
+
const stagingParent = (0, node_path_1.join)(this.rootDir, ".iocd-cli", "temp");
|
|
230
|
+
(0, node_fs_1.mkdirSync)(stagingParent, { recursive: true });
|
|
231
|
+
const stagingRoot = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)(stagingParent, `template-${appName}-`));
|
|
232
|
+
const nextRoot = (0, node_path_1.join)(stagingRoot, "next");
|
|
233
|
+
const previousRoot = (0, node_path_1.join)(stagingRoot, "previous");
|
|
234
|
+
(0, node_fs_1.mkdirSync)(nextRoot, { recursive: true });
|
|
235
|
+
(0, node_fs_1.mkdirSync)(previousRoot, { recursive: true });
|
|
236
|
+
let preserveStaging = false;
|
|
237
|
+
try {
|
|
238
|
+
for (const directory of appDirectories) {
|
|
239
|
+
const source = (0, node_path_1.join)(templateAppsRoot, directory);
|
|
240
|
+
const stagedApp = (0, node_path_1.join)(nextRoot, directory);
|
|
241
|
+
this.logger.debug(`Staging template application from '${source}' to '${stagedApp}'.`);
|
|
242
|
+
(0, node_fs_1.mkdirSync)(stagedApp, { recursive: true });
|
|
243
|
+
await this.copyTemplateFiles(source, stagedApp, variables);
|
|
244
|
+
}
|
|
245
|
+
this.publishTemplateApplications(appDirectories, destinations, nextRoot, previousRoot);
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
preserveStaging = error instanceof TemplateRestoreError;
|
|
249
|
+
throw error;
|
|
250
|
+
}
|
|
251
|
+
finally {
|
|
252
|
+
if (preserveStaging) {
|
|
253
|
+
this.logger.warn(`Preserving template update staging directory for recovery: ${stagingRoot}`);
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
(0, node_fs_1.rmSync)(stagingRoot, { recursive: true, force: true });
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
this.logger.info(`Template application ${appName} updated successfully`);
|
|
260
|
+
}
|
|
261
|
+
catch (error) {
|
|
262
|
+
this.logger.error(`Failed to update template application '${appName}'.`, error);
|
|
263
|
+
throw error;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
publishTemplateApplications(appDirectories, destinations, nextRoot, previousRoot) {
|
|
267
|
+
const movedPrevious = [];
|
|
268
|
+
const publishedDestinations = [];
|
|
269
|
+
try {
|
|
270
|
+
for (let index = 0; index < appDirectories.length; index += 1) {
|
|
271
|
+
const directory = appDirectories[index];
|
|
272
|
+
const destination = destinations[index];
|
|
273
|
+
const previous = (0, node_path_1.join)(previousRoot, directory);
|
|
274
|
+
this.logger.debug(`Moving existing template application directory from '${destination}' to '${previous}'.`);
|
|
275
|
+
this.renamePath(destination, previous);
|
|
276
|
+
movedPrevious.push({ previous, destination });
|
|
277
|
+
}
|
|
278
|
+
for (let index = 0; index < appDirectories.length; index += 1) {
|
|
279
|
+
const directory = appDirectories[index];
|
|
280
|
+
const destination = destinations[index];
|
|
281
|
+
this.renamePath((0, node_path_1.join)(nextRoot, directory), destination);
|
|
282
|
+
publishedDestinations.push(destination);
|
|
283
|
+
this.logger.debug(`Published updated template application directory: ${destination}`);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
catch (error) {
|
|
287
|
+
this.logger.warn("Template application publication failed; restoring the previous application files.");
|
|
288
|
+
for (const destination of publishedDestinations.reverse()) {
|
|
289
|
+
(0, node_fs_1.rmSync)(destination, { recursive: true, force: true });
|
|
290
|
+
}
|
|
291
|
+
try {
|
|
292
|
+
for (const { previous, destination } of movedPrevious.reverse()) {
|
|
293
|
+
if ((0, node_fs_1.existsSync)(previous)) {
|
|
294
|
+
this.renamePath(previous, destination);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
catch (restoreError) {
|
|
299
|
+
throw new TemplateRestoreError(`Template application update failed and the previous application could not be restored. Previous files remain under '${previousRoot}'. Update error: ${error.message}. Restore error: ${restoreError.message}`);
|
|
300
|
+
}
|
|
301
|
+
throw error;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
getProjectTemplateVariables(appName) {
|
|
305
|
+
const config = config_service_1.ConfigManager.config;
|
|
306
|
+
return this.prepareTemplateVariables({
|
|
307
|
+
productSlug: config.productSlug,
|
|
308
|
+
productName: config.productName,
|
|
309
|
+
productDescription: config.productDescription,
|
|
310
|
+
company: config.company,
|
|
311
|
+
copyright: config.copyright,
|
|
312
|
+
version: config.version,
|
|
313
|
+
targetDirectory: this.rootDir,
|
|
314
|
+
templateApplications: [appName],
|
|
315
|
+
initialComponents: [],
|
|
316
|
+
});
|
|
317
|
+
}
|
|
187
318
|
/** Adds initialComponents to the iocd.cli.config.json -> components.list object in the target directory */
|
|
188
319
|
updateComponentsConfig(targetDirectory, initialComponents, componentSource) {
|
|
189
320
|
// Try root directory first
|
|
@@ -317,8 +448,8 @@ class TemplateService {
|
|
|
317
448
|
(0, node_fs_1.writeFileSync)(targetPath, targetContent, "utf-8");
|
|
318
449
|
this.logger.debug(`Copied and processed: ${(0, node_path_1.relative)(process.cwd(), targetPath)}`);
|
|
319
450
|
}
|
|
320
|
-
copyFileNoReplacement(source, destination) {
|
|
321
|
-
fs_extra_1.default.copyFile(source, destination);
|
|
451
|
+
async copyFileNoReplacement(source, destination) {
|
|
452
|
+
await fs_extra_1.default.copyFile(source, destination);
|
|
322
453
|
}
|
|
323
454
|
/**
|
|
324
455
|
* Process feature-specific templates
|
|
@@ -330,10 +461,11 @@ class TemplateService {
|
|
|
330
461
|
this.logger.warn(`Application template '${application}' not found in templates directory`);
|
|
331
462
|
continue;
|
|
332
463
|
}
|
|
333
|
-
// Verify it's a
|
|
464
|
+
// Verify it's a project feature template.
|
|
334
465
|
const templateInfo = this.getTemplateInfo(application);
|
|
335
|
-
if (templateInfo.type !== "application"
|
|
336
|
-
|
|
466
|
+
if (templateInfo.type !== "application" &&
|
|
467
|
+
templateInfo.type !== "tests") {
|
|
468
|
+
this.logger.warn(`Template '${application}' is not a project feature template, skipping`);
|
|
337
469
|
continue;
|
|
338
470
|
}
|
|
339
471
|
this.logger.debug(`Processing application template: ${application}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.service.js","sourceRoot":"","sources":["../../src/services/template.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"template.service.js","sourceRoot":"","sources":["../../src/services/template.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,16 +5,22 @@ const fs_1 = require("fs");
|
|
|
5
5
|
const path_1 = require("path");
|
|
6
6
|
const child_process_1 = require("child_process");
|
|
7
7
|
const path_2 = require("../utils/path");
|
|
8
|
+
const skills_service_1 = require("./skills.service");
|
|
8
9
|
class TestInfrastructureService {
|
|
9
10
|
rootDir;
|
|
10
11
|
testsDir;
|
|
11
12
|
templateDir;
|
|
13
|
+
skillsService;
|
|
12
14
|
runNpm;
|
|
13
15
|
constructor(options = {}) {
|
|
14
16
|
this.rootDir = options.rootDir ?? path_2.PathUtils.getRootDir();
|
|
15
17
|
this.testsDir = options.testsDir ?? path_2.PathUtils.getTestsDir();
|
|
16
18
|
this.templateDir =
|
|
17
19
|
options.templateDir ?? (0, path_1.join)(__dirname, "../templates/tests");
|
|
20
|
+
this.skillsService = new skills_service_1.SkillsService({
|
|
21
|
+
rootDir: this.rootDir,
|
|
22
|
+
sourceDir: options.skillsSourceDir ?? (0, path_1.join)(this.templateDir, ".agents", "skills"),
|
|
23
|
+
});
|
|
18
24
|
this.runNpm = options.runNpm ?? this.runNpmCommand.bind(this);
|
|
19
25
|
}
|
|
20
26
|
async setup() {
|
|
@@ -22,19 +28,14 @@ class TestInfrastructureService {
|
|
|
22
28
|
if ((0, fs_1.existsSync)(this.testsDir)) {
|
|
23
29
|
throw new Error(`The tests directory already exists at '${this.testsDir}'. Back up or remove it, then run 'iocd test setup' again.`);
|
|
24
30
|
}
|
|
25
|
-
const skillDir = this.getSkillDir();
|
|
26
|
-
const skillAlreadyExists = (0, fs_1.existsSync)(skillDir);
|
|
27
31
|
try {
|
|
28
32
|
(0, fs_1.mkdirSync)(this.testsDir, { recursive: true });
|
|
29
33
|
this.copyDirectory((0, path_1.join)(this.templateDir, "tests"), this.testsDir, true);
|
|
30
|
-
this.copySkill(false);
|
|
31
34
|
await this.validateInstallation();
|
|
35
|
+
this.skillsService.installMissing();
|
|
32
36
|
}
|
|
33
37
|
catch (error) {
|
|
34
38
|
(0, fs_1.rmSync)(this.testsDir, { recursive: true, force: true });
|
|
35
|
-
if (!skillAlreadyExists) {
|
|
36
|
-
(0, fs_1.rmSync)(skillDir, { recursive: true, force: true });
|
|
37
|
-
}
|
|
38
39
|
throw new Error(`Test infrastructure setup failed and the created files were removed: ${error.message}`);
|
|
39
40
|
}
|
|
40
41
|
}
|
|
@@ -61,17 +62,6 @@ class TestInfrastructureService {
|
|
|
61
62
|
throw new Error(`The tests directory must resolve inside the seed root. '${this.testsDir}' escapes '${this.rootDir}'. Set 'testsDirectory' to a path within the project.`);
|
|
62
63
|
}
|
|
63
64
|
}
|
|
64
|
-
getSkillDir() {
|
|
65
|
-
return (0, path_1.join)(this.rootDir, ".agents", "skills", "iocd-wdio-testing");
|
|
66
|
-
}
|
|
67
|
-
copySkill(overwrite) {
|
|
68
|
-
const source = (0, path_1.join)(this.templateDir, ".agents", "skills", "iocd-wdio-testing");
|
|
69
|
-
const destination = this.getSkillDir();
|
|
70
|
-
if (!(0, fs_1.existsSync)(source) || (!overwrite && (0, fs_1.existsSync)(destination))) {
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
this.copyDirectory(source, destination, overwrite);
|
|
74
|
-
}
|
|
75
65
|
copyDirectory(source, destination, overwrite) {
|
|
76
66
|
(0, fs_1.mkdirSync)(destination, { recursive: true });
|
|
77
67
|
for (const entry of (0, fs_1.readdirSync)(source, { withFileTypes: true })) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-infrastructure.service.js","sourceRoot":"","sources":["../../src/services/test-infrastructure.service.ts"],"names":[],"mappings":";;;AAAA,2BAOY;AACZ,+BAA6D;AAC7D,iDAAsC;AACtC,wCAA0C;
|
|
1
|
+
{"version":3,"file":"test-infrastructure.service.js","sourceRoot":"","sources":["../../src/services/test-infrastructure.service.ts"],"names":[],"mappings":";;;AAAA,2BAOY;AACZ,+BAA6D;AAC7D,iDAAsC;AACtC,wCAA0C;AAC1C,qDAAiD;AAUjD,MAAa,yBAAyB;IAC5B,OAAO,CAAS;IAChB,QAAQ,CAAS;IACjB,WAAW,CAAS;IACpB,aAAa,CAAgB;IAC7B,MAAM,CAAiD;IAE/D,YAAY,UAA4C,EAAE;QACxD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,gBAAS,CAAC,UAAU,EAAE,CAAC;QACzD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,gBAAS,CAAC,WAAW,EAAE,CAAC;QAC5D,IAAI,CAAC,WAAW;YACd,OAAO,CAAC,WAAW,IAAI,IAAA,WAAI,EAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;QAC/D,IAAI,CAAC,aAAa,GAAG,IAAI,8BAAa,CAAC;YACrC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EACP,OAAO,CAAC,eAAe,IAAI,IAAA,WAAI,EAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC;SACzE,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAEhC,IAAI,IAAA,eAAU,EAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACb,0CAA0C,IAAI,CAAC,QAAQ,4DAA4D,CACpH,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,IAAA,cAAS,EAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,aAAa,CAAC,IAAA,WAAI,EAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACzE,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAClC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,WAAM,EAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACxD,MAAM,IAAI,KAAK,CACb,wEAAyE,KAAe,CAAC,OAAO,EAAE,CACnG,CAAC;QACJ,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,6EAA6E;IACrE,wBAAwB;QAC9B,MAAM,QAAQ,GAAG,IAAA,iBAAY,EAAC,IAAA,cAAO,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEtC,sEAAsE;QACtE,gEAAgE;QAChE,IAAI,gBAAgB,GAAG,MAAM,CAAC;QAC9B,OAAO,CAAC,IAAA,eAAU,EAAC,gBAAgB,CAAC,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,IAAA,cAAO,EAAC,gBAAgB,CAAC,CAAC;YACzC,IAAI,MAAM,KAAK,gBAAgB,EAAE,CAAC;gBAChC,MAAM;YACR,CAAC;YACD,gBAAgB,GAAG,MAAM,CAAC;QAC5B,CAAC;QACD,MAAM,MAAM,GAAG,IAAA,eAAQ,EAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,MAAM;YACvB,CAAC,CAAC,IAAA,WAAI,EAAC,IAAA,iBAAY,EAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAC9C,CAAC,CAAC,IAAA,iBAAY,EAAC,gBAAgB,CAAC,CAAC;QAEnC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,GAAG,UAAG,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CACb,2DAA2D,IAAI,CAAC,QAAQ,cAAc,IAAI,CAAC,OAAO,uDAAuD,CAC1J,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,aAAa,CACnB,MAAc,EACd,WAAmB,EACnB,SAAkB;QAElB,IAAA,cAAS,EAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,KAAK,MAAM,KAAK,IAAI,IAAA,gBAAW,EAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACjE,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,eAAe,GAAG,IAAA,WAAI,EAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACtD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;YAC7D,CAAC;iBAAM,IAAI,SAAS,IAAI,CAAC,IAAA,eAAU,EAAC,eAAe,CAAC,EAAE,CAAC;gBACrD,IAAA,WAAM,EAAC,UAAU,EAAE,eAAe,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,oBAAoB;QAChC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;IAEO,aAAa,CAAC,IAAc,EAAE,GAAW;QAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;YACpE,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,UAAU,EAAE,IAAI,EAAE;gBACpC,GAAG;gBACH,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;YACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;gBACvB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AA9GD,8DA8GC"}
|
|
@@ -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
|
|
@@ -1 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
|
2
|
+
|
|
3
|
+
# dependencies
|
|
4
|
+
/node_modules
|
|
5
|
+
/.pnp
|
|
6
|
+
.pnp.js
|
|
7
|
+
|
|
8
|
+
# testing
|
|
9
|
+
/coverage
|
|
10
|
+
|
|
11
|
+
# production
|
|
12
|
+
/build
|
|
13
|
+
|
|
14
|
+
# misc
|
|
15
|
+
.DS_Store
|
|
16
|
+
.env.local
|
|
17
|
+
.env.development.local
|
|
18
|
+
.env.test.local
|
|
19
|
+
.env.production.local
|
|
20
|
+
|
|
21
|
+
npm-debug.log*
|
|
22
|
+
yarn-debug.log*
|
|
23
|
+
yarn-error.log*
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# Launchpad App for io.Connect Desktop
|
|
2
|
+
|
|
3
|
+
Template for creating a custom desktop Launchpad app for **io.Connect Desktop**, built on top of the
|
|
4
|
+
`IOLaunchpadDesktop` feature exported by [`@interopio/components-react`](https://www.npmjs.com/package/@interopio/components-react). Clone
|
|
5
|
+
this app and customize only the pieces you need — everything else keeps working out of the box.
|
|
6
|
+
|
|
7
|
+
## Prerequisites
|
|
8
|
+
|
|
9
|
+
**io.Connect Desktop** is required, since this app only configures the `desktop` factory (see
|
|
10
|
+
[src/constants/constants.ts](src/constants/constants.ts)).
|
|
11
|
+
|
|
12
|
+
## Setup
|
|
13
|
+
|
|
14
|
+
- Run `npm install` to install all dependencies.
|
|
15
|
+
- Run `npm run start` to start the app (dev server runs on `http://localhost:4242` by default, see
|
|
16
|
+
[vite.config.ts](vite.config.ts)).
|
|
17
|
+
- Point your io.Connect Desktop configuration's Launchpad/System application entry to this app's URL, then start
|
|
18
|
+
io.Connect Desktop to see your customized Launchpad. Refer to your io.Connect Desktop version's documentation for
|
|
19
|
+
the exact application-definition file and property to update.
|
|
20
|
+
- Run `npm run build` to produce a production build in `dist/`.
|
|
21
|
+
- Start **io.Connect Desktop** to start using and modifying your Launchpad App.
|
|
22
|
+
|
|
23
|
+
## How it's wired
|
|
24
|
+
|
|
25
|
+
`src/components/launchpad.tsx` wires up the required providers around a single `<Launchpad />` component. You
|
|
26
|
+
don't need to pass a `components` prop at all - `<Launchpad />` already renders a fully working default header
|
|
27
|
+
(`DragHandle` + `LogoButton` before search, `ExtendedArea` + `NotificationsButton` + `MainContextMenu` after
|
|
28
|
+
search) out of the box:
|
|
29
|
+
|
|
30
|
+
```tsx
|
|
31
|
+
import {
|
|
32
|
+
ThemeProvider,
|
|
33
|
+
PlatformPrefsProvider,
|
|
34
|
+
IOActivePanelRenderer,
|
|
35
|
+
IODownloadManager,
|
|
36
|
+
IOLaunchpadDesktop,
|
|
37
|
+
IONotifications,
|
|
38
|
+
} from "@interopio/components-react";
|
|
39
|
+
|
|
40
|
+
const { LaunchpadProvider, LaunchpadBodyPopupProvider, PanelPopupProvider, Launchpad } = IOLaunchpadDesktop;
|
|
41
|
+
const { NotificationsProvider } = IONotifications;
|
|
42
|
+
const { DownloadManagerProvider } = IODownloadManager;
|
|
43
|
+
const { PanelManagerProvider } = IOActivePanelRenderer;
|
|
44
|
+
|
|
45
|
+
function LaunchpadWrapper() {
|
|
46
|
+
return (
|
|
47
|
+
<ThemeProvider>
|
|
48
|
+
<PlatformPrefsProvider>
|
|
49
|
+
<NotificationsProvider>
|
|
50
|
+
<DownloadManagerProvider>
|
|
51
|
+
<PanelManagerProvider>
|
|
52
|
+
<LaunchpadProvider>
|
|
53
|
+
<LaunchpadBodyPopupProvider>
|
|
54
|
+
<PanelPopupProvider>
|
|
55
|
+
<Launchpad />
|
|
56
|
+
</PanelPopupProvider>
|
|
57
|
+
</LaunchpadBodyPopupProvider>
|
|
58
|
+
</LaunchpadProvider>
|
|
59
|
+
</PanelManagerProvider>
|
|
60
|
+
</DownloadManagerProvider>
|
|
61
|
+
</NotificationsProvider>
|
|
62
|
+
</PlatformPrefsProvider>
|
|
63
|
+
</ThemeProvider>
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
All customization happens through the `components` prop of `<Launchpad />` - you shouldn't need to touch the
|
|
69
|
+
provider chain above.
|
|
70
|
+
|
|
71
|
+
## Customization
|
|
72
|
+
|
|
73
|
+
### 1. Replacing the default io.Connect Desktop Launchpad with a custom implementation
|
|
74
|
+
|
|
75
|
+
For details on how io.Connect Desktop discovers and loads a custom Launchpad app, see the
|
|
76
|
+
[Launchpad documentation](https://docs.interop.io/desktop/capabilities/launcher/index.html#launchpad).
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
### 2. The `components` prop
|
|
80
|
+
|
|
81
|
+
`<Launchpad components={{ ... }} />` forwards straight to the native `IOLaunchpad.ContentsContainer`, so it only
|
|
82
|
+
accepts `header` (`BeforeSearch` / `AfterSearch`) and `sections` - there's no per-piece override system.
|
|
83
|
+
`DragHandle`, `LogoButton`, `NotificationsButton`, `MainContextMenu`, `ExtendedArea` are exported standalone so you
|
|
84
|
+
compose them yourself into `header.BeforeSearch` / `AfterSearch`, as shown above.
|
|
85
|
+
|
|
86
|
+
> **Tip:** define `BeforeSearch` / `AfterSearch` (and the `components` object) **outside** your component's render
|
|
87
|
+
> function (module scope), or memoize them. Passing a brand-new inline function on every render forces
|
|
88
|
+
> `<Launchpad />` to remount that zone on every render - wasteful in general, and it can also break in-flight
|
|
89
|
+
> async work started by a piece inside it (e.g. opening the docked search popup).
|
|
90
|
+
|
|
91
|
+
### 3. Default `BeforeSearch` / `AfterSearch`
|
|
92
|
+
|
|
93
|
+
`<Launchpad />` fills in `header.BeforeSearch` / `AfterSearch` with its own defaults whenever you don't specify
|
|
94
|
+
them, so there are 3 possible outcomes per zone:
|
|
95
|
+
|
|
96
|
+
1. **Omitted** (key not present, or `undefined`) - the library default renders (`DragHandle` + `LogoButton` for
|
|
97
|
+
`BeforeSearch`; `ExtendedArea` + `NotificationsButton` + `MainContextMenu` for `AfterSearch`).
|
|
98
|
+
2. **Explicitly empty** (e.g. `BeforeSearch: () => null`) - the default is overridden and nothing renders in that
|
|
99
|
+
zone.
|
|
100
|
+
3. **A real custom component** - that component renders in place of the default.
|
|
101
|
+
|
|
102
|
+
```tsx
|
|
103
|
+
// 1. Omitted - renders the library defaults
|
|
104
|
+
<Launchpad />;
|
|
105
|
+
|
|
106
|
+
// 2. Explicitly empty - hides the zone entirely
|
|
107
|
+
<Launchpad components={{ header: { AfterSearch: () => null } }} />;
|
|
108
|
+
|
|
109
|
+
// 3. Custom component - fully replaces the zone
|
|
110
|
+
function CustomBeforeSearch() {
|
|
111
|
+
return <MyCustomLogo />;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
<Launchpad components={{ header: { BeforeSearch: CustomBeforeSearch } }} />;
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### 4. Removing a piece
|
|
118
|
+
|
|
119
|
+
Since `header.BeforeSearch` / `AfterSearch` **fully replace** the zone, just omit a piece from your composition to
|
|
120
|
+
hide it - e.g. hide the notifications bell:
|
|
121
|
+
|
|
122
|
+
```tsx
|
|
123
|
+
function AfterSearch() {
|
|
124
|
+
return (
|
|
125
|
+
<>
|
|
126
|
+
<ExtendedArea />
|
|
127
|
+
<MainContextMenu />
|
|
128
|
+
</>
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### 5. Passing your own component
|
|
134
|
+
|
|
135
|
+
Compose your own implementation alongside (or instead of) the default pieces:
|
|
136
|
+
|
|
137
|
+
```tsx
|
|
138
|
+
function MyMainContextMenu() {
|
|
139
|
+
return <button onClick={() => console.log("clicked!")}>⋮</button>;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function AfterSearch() {
|
|
143
|
+
return (
|
|
144
|
+
<>
|
|
145
|
+
<ExtendedArea />
|
|
146
|
+
<NotificationsButton />
|
|
147
|
+
<MyMainContextMenu />
|
|
148
|
+
</>
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### 6. Overriding `BeforeSearch` / `AfterSearch`
|
|
154
|
+
|
|
155
|
+
Pass `components.header` to fully replace either zone with something entirely custom:
|
|
156
|
+
|
|
157
|
+
```tsx
|
|
158
|
+
function CustomBeforeSearch() {
|
|
159
|
+
return <MyCustomLogo />;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function CustomAfterSearch() {
|
|
163
|
+
return <MyCustomButton />;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const launchpadComponents = { header: { BeforeSearch: CustomBeforeSearch, AfterSearch: CustomAfterSearch } };
|
|
167
|
+
|
|
168
|
+
<Launchpad components={launchpadComponents} />;
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
Since `header.BeforeSearch` / `AfterSearch` **fully replace** the zone, if you just want to add something
|
|
172
|
+
alongside the defaults, import the default pieces (they're also exported standalone) and compose them yourself:
|
|
173
|
+
|
|
174
|
+
```tsx
|
|
175
|
+
import { IOLaunchpadDesktop } from "@interopio/components-react";
|
|
176
|
+
|
|
177
|
+
const { DragHandle, LogoButton } = IOLaunchpadDesktop;
|
|
178
|
+
|
|
179
|
+
function CustomBeforeSearch() {
|
|
180
|
+
return (
|
|
181
|
+
<>
|
|
182
|
+
<DragHandle />
|
|
183
|
+
<LogoButton />
|
|
184
|
+
<MyExtraBadge />
|
|
185
|
+
</>
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const launchpadComponents = { header: { BeforeSearch: CustomBeforeSearch } };
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### 7. Customizing the `LogoButton`
|
|
193
|
+
|
|
194
|
+
`LogoButton` itself accepts `icon`, `iconSrc`, and `onClick` props, so you don't need to replace it entirely just
|
|
195
|
+
to change the logo or its click behavior:
|
|
196
|
+
|
|
197
|
+
```tsx
|
|
198
|
+
import { IOLaunchpadDesktop } from "@interopio/components-react";
|
|
199
|
+
|
|
200
|
+
const { DragHandle, LogoButton } = IOLaunchpadDesktop;
|
|
201
|
+
|
|
202
|
+
function BeforeSearch() {
|
|
203
|
+
return (
|
|
204
|
+
<>
|
|
205
|
+
<DragHandle />
|
|
206
|
+
<LogoButton iconSrc="/my-logo.png" onClick={() => console.log("logo clicked")} />
|
|
207
|
+
</>
|
|
208
|
+
);
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
- `icon` — an icon variant name (ignored if `iconSrc` is set); defaults to `"logo"`.
|
|
213
|
+
- `iconSrc` — a custom image URL/data-URI to render instead of `icon`.
|
|
214
|
+
- `onClick` — replaces the default collapse/popup-toggle behavior; drag-to-move still works either way.
|
|
215
|
+
|
|
216
|
+
### 7. `ExtendedArea` visibility
|
|
217
|
+
|
|
218
|
+
`ExtendedArea` self-guards: it renders `null` unless the Launchpad is both docked and the
|
|
219
|
+
`LAUNCHPAD_SHOW_EXTENDED_AREA` platform pref is enabled, so it's safe to always include it in `AfterSearch` - it
|
|
220
|
+
simply won't render anything otherwise.
|