@geneverse/workctl 0.2.5
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/LICENSE +21 -0
- package/README.md +340 -0
- package/dist/packages/capabilities/assistant/src/commands.d.ts +10 -0
- package/dist/packages/capabilities/assistant/src/commands.js +33 -0
- package/dist/packages/capabilities/assistant/src/commands.js.map +1 -0
- package/dist/packages/capabilities/assistant/src/index.d.ts +2 -0
- package/dist/packages/capabilities/assistant/src/index.js +3 -0
- package/dist/packages/capabilities/assistant/src/index.js.map +1 -0
- package/dist/packages/capabilities/assistant/src/status.d.ts +18 -0
- package/dist/packages/capabilities/assistant/src/status.js +48 -0
- package/dist/packages/capabilities/assistant/src/status.js.map +1 -0
- package/dist/packages/capabilities/jenkins/src/commands.d.ts +9 -0
- package/dist/packages/capabilities/jenkins/src/commands.js +43 -0
- package/dist/packages/capabilities/jenkins/src/commands.js.map +1 -0
- package/dist/packages/capabilities/jenkins/src/definition.d.ts +10 -0
- package/dist/packages/capabilities/jenkins/src/definition.js +59 -0
- package/dist/packages/capabilities/jenkins/src/definition.js.map +1 -0
- package/dist/packages/capabilities/jenkins/src/index.d.ts +2 -0
- package/dist/packages/capabilities/jenkins/src/index.js +3 -0
- package/dist/packages/capabilities/jenkins/src/index.js.map +1 -0
- package/dist/packages/capabilities/jira/src/adapters/filesystem/config.store.d.ts +2 -0
- package/dist/packages/capabilities/jira/src/adapters/filesystem/config.store.js +43 -0
- package/dist/packages/capabilities/jira/src/adapters/filesystem/config.store.js.map +1 -0
- package/dist/packages/capabilities/jira/src/adapters/filesystem/local.paths.d.ts +16 -0
- package/dist/packages/capabilities/jira/src/adapters/filesystem/local.paths.js +46 -0
- package/dist/packages/capabilities/jira/src/adapters/filesystem/local.paths.js.map +1 -0
- package/dist/packages/capabilities/jira/src/adapters/filesystem/sync-lock.d.ts +2 -0
- package/dist/packages/capabilities/jira/src/adapters/filesystem/sync-lock.js +120 -0
- package/dist/packages/capabilities/jira/src/adapters/filesystem/sync-lock.js.map +1 -0
- package/dist/packages/capabilities/jira/src/adapters/jira/jira.client.d.ts +31 -0
- package/dist/packages/capabilities/jira/src/adapters/jira/jira.client.js +344 -0
- package/dist/packages/capabilities/jira/src/adapters/jira/jira.client.js.map +1 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/catalog.d.ts +9 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/catalog.js +17 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/catalog.js.map +1 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/orchestrator.d.ts +14 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/orchestrator.js +116 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/orchestrator.js.map +1 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/scraper.d.ts +32 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/scraper.js +2 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/scraper.js.map +1 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/v1/detect.d.ts +2 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/v1/detect.js +45 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/v1/detect.js.map +1 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/v1/extract.d.ts +3 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/v1/extract.js +115 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/v1/extract.js.map +1 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/v1/index.d.ts +2 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/v1/index.js +27 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/v1/index.js.map +1 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/v1/navigation.d.ts +3 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/v1/navigation.js +104 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/v1/navigation.js.map +1 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/v1/ready.d.ts +2 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/v1/ready.js +47 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/v1/ready.js.map +1 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/v1/shared.d.ts +4 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/v1/shared.js +5 -0
- package/dist/packages/capabilities/jira/src/adapters/kawari/v1/shared.js.map +1 -0
- package/dist/packages/capabilities/jira/src/adapters/terminal/node-cli.io.d.ts +2 -0
- package/dist/packages/capabilities/jira/src/adapters/terminal/node-cli.io.js +40 -0
- package/dist/packages/capabilities/jira/src/adapters/terminal/node-cli.io.js.map +1 -0
- package/dist/packages/capabilities/jira/src/batch-interaction.d.ts +53 -0
- package/dist/packages/capabilities/jira/src/batch-interaction.js +201 -0
- package/dist/packages/capabilities/jira/src/batch-interaction.js.map +1 -0
- package/dist/packages/capabilities/jira/src/capability.d.ts +16 -0
- package/dist/packages/capabilities/jira/src/capability.js +56 -0
- package/dist/packages/capabilities/jira/src/capability.js.map +1 -0
- package/dist/packages/capabilities/jira/src/cli/contracts.d.ts +42 -0
- package/dist/packages/capabilities/jira/src/cli/contracts.js +2 -0
- package/dist/packages/capabilities/jira/src/cli/contracts.js.map +1 -0
- package/dist/packages/capabilities/jira/src/cli/errors.d.ts +3 -0
- package/dist/packages/capabilities/jira/src/cli/errors.js +7 -0
- package/dist/packages/capabilities/jira/src/cli/errors.js.map +1 -0
- package/dist/packages/capabilities/jira/src/cli/program.d.ts +6 -0
- package/dist/packages/capabilities/jira/src/cli/program.js +48 -0
- package/dist/packages/capabilities/jira/src/cli/program.js.map +1 -0
- package/dist/packages/capabilities/jira/src/cli/run-cli.d.ts +2 -0
- package/dist/packages/capabilities/jira/src/cli/run-cli.js +72 -0
- package/dist/packages/capabilities/jira/src/cli/run-cli.js.map +1 -0
- package/dist/packages/capabilities/jira/src/commands/audit-links/audit-links.command.d.ts +2 -0
- package/dist/packages/capabilities/jira/src/commands/audit-links/audit-links.command.js +165 -0
- package/dist/packages/capabilities/jira/src/commands/audit-links/audit-links.command.js.map +1 -0
- package/dist/packages/capabilities/jira/src/commands/audit-links/audit-links.service.d.ts +30 -0
- package/dist/packages/capabilities/jira/src/commands/audit-links/audit-links.service.js +174 -0
- package/dist/packages/capabilities/jira/src/commands/audit-links/audit-links.service.js.map +1 -0
- package/dist/packages/capabilities/jira/src/commands/command-context.d.ts +10 -0
- package/dist/packages/capabilities/jira/src/commands/command-context.js +2 -0
- package/dist/packages/capabilities/jira/src/commands/command-context.js.map +1 -0
- package/dist/packages/capabilities/jira/src/commands/config-show/config-show.command.d.ts +2 -0
- package/dist/packages/capabilities/jira/src/commands/config-show/config-show.command.js +26 -0
- package/dist/packages/capabilities/jira/src/commands/config-show/config-show.command.js.map +1 -0
- package/dist/packages/capabilities/jira/src/commands/configure/configure.command.d.ts +2 -0
- package/dist/packages/capabilities/jira/src/commands/configure/configure.command.js +26 -0
- package/dist/packages/capabilities/jira/src/commands/configure/configure.command.js.map +1 -0
- package/dist/packages/capabilities/jira/src/commands/configure/configure.service.d.ts +42 -0
- package/dist/packages/capabilities/jira/src/commands/configure/configure.service.js +205 -0
- package/dist/packages/capabilities/jira/src/commands/configure/configure.service.js.map +1 -0
- package/dist/packages/capabilities/jira/src/commands/doctor/doctor.command.d.ts +2 -0
- package/dist/packages/capabilities/jira/src/commands/doctor/doctor.command.js +17 -0
- package/dist/packages/capabilities/jira/src/commands/doctor/doctor.command.js.map +1 -0
- package/dist/packages/capabilities/jira/src/commands/doctor/doctor.service.d.ts +18 -0
- package/dist/packages/capabilities/jira/src/commands/doctor/doctor.service.js +84 -0
- package/dist/packages/capabilities/jira/src/commands/doctor/doctor.service.js.map +1 -0
- package/dist/packages/capabilities/jira/src/commands/rollback/rollback.command.d.ts +2 -0
- package/dist/packages/capabilities/jira/src/commands/rollback/rollback.command.js +198 -0
- package/dist/packages/capabilities/jira/src/commands/rollback/rollback.command.js.map +1 -0
- package/dist/packages/capabilities/jira/src/commands/rollback/rollback.service.d.ts +37 -0
- package/dist/packages/capabilities/jira/src/commands/rollback/rollback.service.js +112 -0
- package/dist/packages/capabilities/jira/src/commands/rollback/rollback.service.js.map +1 -0
- package/dist/packages/capabilities/jira/src/commands/sync/audit-export.service.d.ts +18 -0
- package/dist/packages/capabilities/jira/src/commands/sync/audit-export.service.js +96 -0
- package/dist/packages/capabilities/jira/src/commands/sync/audit-export.service.js.map +1 -0
- package/dist/packages/capabilities/jira/src/commands/sync/preview.service.d.ts +23 -0
- package/dist/packages/capabilities/jira/src/commands/sync/preview.service.js +201 -0
- package/dist/packages/capabilities/jira/src/commands/sync/preview.service.js.map +1 -0
- package/dist/packages/capabilities/jira/src/commands/sync/sync.command.d.ts +2 -0
- package/dist/packages/capabilities/jira/src/commands/sync/sync.command.js +537 -0
- package/dist/packages/capabilities/jira/src/commands/sync/sync.command.js.map +1 -0
- package/dist/packages/capabilities/jira/src/commands/sync/verification.service.d.ts +34 -0
- package/dist/packages/capabilities/jira/src/commands/sync/verification.service.js +164 -0
- package/dist/packages/capabilities/jira/src/commands/sync/verification.service.js.map +1 -0
- package/dist/packages/capabilities/jira/src/config.d.ts +37 -0
- package/dist/packages/capabilities/jira/src/config.js +217 -0
- package/dist/packages/capabilities/jira/src/config.js.map +1 -0
- package/dist/packages/capabilities/jira/src/dependencies.d.ts +2 -0
- package/dist/packages/capabilities/jira/src/dependencies.js +92 -0
- package/dist/packages/capabilities/jira/src/dependencies.js.map +1 -0
- package/dist/packages/capabilities/jira/src/domain/date-range.d.ts +10 -0
- package/dist/packages/capabilities/jira/src/domain/date-range.js +63 -0
- package/dist/packages/capabilities/jira/src/domain/date-range.js.map +1 -0
- package/dist/packages/capabilities/jira/src/domain/marker.d.ts +20 -0
- package/dist/packages/capabilities/jira/src/domain/marker.js +100 -0
- package/dist/packages/capabilities/jira/src/domain/marker.js.map +1 -0
- package/dist/packages/capabilities/jira/src/domain/timesheet-entry.d.ts +45 -0
- package/dist/packages/capabilities/jira/src/domain/timesheet-entry.js +117 -0
- package/dist/packages/capabilities/jira/src/domain/timesheet-entry.js.map +1 -0
- package/dist/packages/capabilities/jira/src/index.d.ts +5 -0
- package/dist/packages/capabilities/jira/src/index.js +4 -0
- package/dist/packages/capabilities/jira/src/index.js.map +1 -0
- package/dist/packages/capabilities/jira/src/ports/jira.d.ts +49 -0
- package/dist/packages/capabilities/jira/src/ports/jira.js +11 -0
- package/dist/packages/capabilities/jira/src/ports/jira.js.map +1 -0
- package/dist/packages/capabilities/jira/src/ports/sync-lock.d.ts +6 -0
- package/dist/packages/capabilities/jira/src/ports/sync-lock.js +7 -0
- package/dist/packages/capabilities/jira/src/ports/sync-lock.js.map +1 -0
- package/dist/packages/capabilities/jira/src/ports/timesheet.d.ts +11 -0
- package/dist/packages/capabilities/jira/src/ports/timesheet.js +7 -0
- package/dist/packages/capabilities/jira/src/ports/timesheet.js.map +1 -0
- package/dist/packages/capabilities/jira/src/presentation.d.ts +37 -0
- package/dist/packages/capabilities/jira/src/presentation.js +111 -0
- package/dist/packages/capabilities/jira/src/presentation.js.map +1 -0
- package/dist/packages/cli/src/bin.d.ts +2 -0
- package/dist/packages/cli/src/bin.js +4 -0
- package/dist/packages/cli/src/bin.js.map +1 -0
- package/dist/packages/cli/src/commands/browsers/browsers.command.d.ts +7 -0
- package/dist/packages/cli/src/commands/browsers/browsers.command.js +22 -0
- package/dist/packages/cli/src/commands/browsers/browsers.command.js.map +1 -0
- package/dist/packages/cli/src/commands/browsers/browsers.service.d.ts +16 -0
- package/dist/packages/cli/src/commands/browsers/browsers.service.js +37 -0
- package/dist/packages/cli/src/commands/browsers/browsers.service.js.map +1 -0
- package/dist/packages/cli/src/commands/setup/setup.command.d.ts +4 -0
- package/dist/packages/cli/src/commands/setup/setup.command.js +41 -0
- package/dist/packages/cli/src/commands/setup/setup.command.js.map +1 -0
- package/dist/packages/cli/src/commands/setup/setup.service.d.ts +23 -0
- package/dist/packages/cli/src/commands/setup/setup.service.js +32 -0
- package/dist/packages/cli/src/commands/setup/setup.service.js.map +1 -0
- package/dist/packages/cli/src/commands/update/update.command.d.ts +7 -0
- package/dist/packages/cli/src/commands/update/update.command.js +34 -0
- package/dist/packages/cli/src/commands/update/update.command.js.map +1 -0
- package/dist/packages/cli/src/commands/update/update.service.d.ts +35 -0
- package/dist/packages/cli/src/commands/update/update.service.js +134 -0
- package/dist/packages/cli/src/commands/update/update.service.js.map +1 -0
- package/dist/packages/cli/src/index.d.ts +1 -0
- package/dist/packages/cli/src/index.js +2 -0
- package/dist/packages/cli/src/index.js.map +1 -0
- package/dist/packages/cli/src/program.d.ts +21 -0
- package/dist/packages/cli/src/program.js +74 -0
- package/dist/packages/cli/src/program.js.map +1 -0
- package/dist/packages/cli/src/release-version.d.ts +1 -0
- package/dist/packages/cli/src/release-version.js +2 -0
- package/package.json +57 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browsers.command.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/commands/browsers/browsers.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAgB,MAAM,WAAW,CAAC;AACzD,OAAO,EACL,iCAAiC,EACjC,iBAAiB,GAGlB,MAAM,uBAAuB,CAAC;AAM/B,MAAM,UAAU,iCAAiC,CAC/C,EAAoB,EACpB,sBAAkD,iCAAiC,EAAE;IAErF,OAAO;QACL,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,mBAAmB,CAAC;KAC1D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,OAAgB,EAChB,YAAyC;IAEzC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;SACzC,WAAW,CAAC,qCAAqC,CAAC,CAAC;IAEtD,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC;SACxB,WAAW,CAAC,yCAAyC,CAAC;SACtD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,cAAc,CACtB,CAAC,EACD,yBAAyB,EACzB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,8BAA8B,CACxE,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { spawn, type SpawnOptions } from "node:child_process";
|
|
2
|
+
export interface BrowserInstallIO {
|
|
3
|
+
stdout(message: string): void;
|
|
4
|
+
}
|
|
5
|
+
export interface BrowserInstallDependencies {
|
|
6
|
+
installChromium(): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export declare class BrowserInstallError extends Error {
|
|
9
|
+
constructor(message: string);
|
|
10
|
+
}
|
|
11
|
+
type SpawnProcess = (command: string, args: readonly string[], options: SpawnOptions) => ReturnType<typeof spawn>;
|
|
12
|
+
export declare function playwrightCliPath(): string;
|
|
13
|
+
export declare function installPlaywrightChromium(spawnProcess?: SpawnProcess, cliPath?: string): Promise<void>;
|
|
14
|
+
export declare function defaultBrowserInstallDependencies(): BrowserInstallDependencies;
|
|
15
|
+
export declare function runBrowserInstall(io: BrowserInstallIO, dependencies?: BrowserInstallDependencies): Promise<void>;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
export class BrowserInstallError extends Error {
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "BrowserInstallError";
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export function playwrightCliPath() {
|
|
11
|
+
const require = createRequire(import.meta.url);
|
|
12
|
+
return path.join(path.dirname(require.resolve("playwright/package.json")), "cli.js");
|
|
13
|
+
}
|
|
14
|
+
export async function installPlaywrightChromium(spawnProcess = spawn, cliPath = playwrightCliPath()) {
|
|
15
|
+
await new Promise((resolve, reject) => {
|
|
16
|
+
const child = spawnProcess(process.execPath, [cliPath, "install", "chromium"], { shell: false, stdio: "inherit" });
|
|
17
|
+
child.once("error", () => reject(new BrowserInstallError("Could not start the Playwright browser installer.")));
|
|
18
|
+
child.once("exit", (code, signal) => {
|
|
19
|
+
if (code === 0) {
|
|
20
|
+
resolve();
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const detail = signal ? `signal ${signal}` : `exit code ${code ?? "unknown"}`;
|
|
24
|
+
reject(new BrowserInstallError(`Playwright Chromium installation failed (${detail}).`));
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
export function defaultBrowserInstallDependencies() {
|
|
29
|
+
return {
|
|
30
|
+
installChromium: installPlaywrightChromium,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export async function runBrowserInstall(io, dependencies = defaultBrowserInstallDependencies()) {
|
|
34
|
+
await dependencies.installChromium();
|
|
35
|
+
io.stdout("Playwright Chromium installed.\n");
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=browsers.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browsers.service.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/commands/browsers/browsers.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAU7B,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAQD,MAAM,UAAU,iBAAiB;IAC/B,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,eAA6B,KAAK,EAClC,UAAkB,iBAAiB,EAAE;IAErC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,KAAK,GAAG,YAAY,CACxB,OAAO,CAAC,QAAQ,EAChB,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,EAChC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CACnC,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAC9B,IAAI,mBAAmB,CACrB,mDAAmD,CACpD,CACF,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAClC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC,CAAC,aAAa,IAAI,IAAI,SAAS,EAAE,CAAC;YAC9E,MAAM,CAAC,IAAI,mBAAmB,CAC5B,4CAA4C,MAAM,IAAI,CACvD,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iCAAiC;IAC/C,OAAO;QACL,eAAe,EAAE,yBAAyB;KAC3C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,EAAoB,EACpB,eAA2C,iCAAiC,EAAE;IAE9E,MAAM,YAAY,CAAC,eAAe,EAAE,CAAC;IACrC,EAAE,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type Command } from "commander";
|
|
2
|
+
import { type SetupCapability, type SetupCommandDependencies, type SetupCommandIO } from "./setup.service.js";
|
|
3
|
+
export declare function createSetupCommandDependencies(capabilities: readonly SetupCapability[]): SetupCommandDependencies;
|
|
4
|
+
export declare function registerSetupCommand(program: Command, io: SetupCommandIO, dependencies: SetupCommandDependencies): void;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as clack from "@clack/prompts";
|
|
2
|
+
import { CommanderError } from "commander";
|
|
3
|
+
import { runSetup, } from "./setup.service.js";
|
|
4
|
+
function unwrap(value) {
|
|
5
|
+
if (clack.isCancel(value)) {
|
|
6
|
+
clack.cancel("Setup cancelled; no additional capabilities were configured.");
|
|
7
|
+
return [];
|
|
8
|
+
}
|
|
9
|
+
return value;
|
|
10
|
+
}
|
|
11
|
+
export function createSetupCommandDependencies(capabilities) {
|
|
12
|
+
return {
|
|
13
|
+
interactive: () => process.stdin.isTTY === true && process.stdout.isTTY === true,
|
|
14
|
+
capabilities,
|
|
15
|
+
select: async (options) => unwrap(await clack.multiselect({
|
|
16
|
+
message: "Select capabilities to set up",
|
|
17
|
+
options: options.map(({ value, label }) => ({ value, label })),
|
|
18
|
+
initialValues: options.filter(({ selected }) => selected).map(({ value }) => value),
|
|
19
|
+
required: true,
|
|
20
|
+
})),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function registerSetupCommand(program, io, dependencies) {
|
|
24
|
+
program.command("setup")
|
|
25
|
+
.description("interactively configure and verify workctl capabilities")
|
|
26
|
+
.action(async () => {
|
|
27
|
+
try {
|
|
28
|
+
const exitCode = await runSetup(io, dependencies);
|
|
29
|
+
if (exitCode !== 0) {
|
|
30
|
+
throw new CommanderError(exitCode, "setup.failed", "Setup completed with failures.");
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
if (error instanceof CommanderError)
|
|
35
|
+
throw error;
|
|
36
|
+
io.stderr(`${error instanceof Error ? error.message : "Unknown setup error"}\n`);
|
|
37
|
+
throw new CommanderError(1, "setup.failed", "Setup failed.");
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=setup.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.command.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/commands/setup/setup.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAgB,MAAM,WAAW,CAAC;AACzD,OAAO,EACL,QAAQ,GAIT,MAAM,oBAAoB,CAAC;AAE5B,SAAS,MAAM,CAAI,KAAiB;IAClC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,MAAM,CAAC,8DAA8D,CAAC,CAAC;QAC7E,OAAO,EAAO,CAAC;IACjB,CAAC;IACD,OAAO,KAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,YAAwC;IAExC,OAAO;QACL,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI;QAChF,YAAY;QACZ,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CACxB,MAAM,CAAC,MAAM,KAAK,CAAC,WAAW,CAAC;YAC7B,OAAO,EAAE,+BAA+B;YACxC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9D,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC;YACnF,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;KACN,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,OAAgB,EAChB,EAAkB,EAClB,YAAsC;IAEtC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;SACrB,WAAW,CAAC,yDAAyD,CAAC;SACtE,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;YAClD,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACnB,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,gCAAgC,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,cAAc;gBAAE,MAAM,KAAK,CAAC;YACjD,EAAE,CAAC,MAAM,CAAC,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,IAAI,CAAC,CAAC;YACjF,MAAM,IAAI,cAAc,CAAC,CAAC,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type SetupCapabilityStatus = "Ready" | "Failed" | "Cancelled";
|
|
2
|
+
export interface SetupCapability {
|
|
3
|
+
id: string;
|
|
4
|
+
title: string;
|
|
5
|
+
defaultSelected: boolean;
|
|
6
|
+
isReady(): Promise<boolean>;
|
|
7
|
+
configure(): Promise<SetupCapabilityStatus>;
|
|
8
|
+
verify(): Promise<boolean>;
|
|
9
|
+
}
|
|
10
|
+
export interface SetupCommandDependencies {
|
|
11
|
+
interactive(): boolean;
|
|
12
|
+
capabilities: readonly SetupCapability[];
|
|
13
|
+
select(options: readonly {
|
|
14
|
+
value: string;
|
|
15
|
+
label: string;
|
|
16
|
+
selected: boolean;
|
|
17
|
+
}[]): Promise<string[]>;
|
|
18
|
+
}
|
|
19
|
+
export interface SetupCommandIO {
|
|
20
|
+
stdout(message: string): void;
|
|
21
|
+
stderr(message: string): void;
|
|
22
|
+
}
|
|
23
|
+
export declare function runSetup(io: SetupCommandIO, dependencies: SetupCommandDependencies): Promise<number>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export async function runSetup(io, dependencies) {
|
|
2
|
+
if (!dependencies.interactive()) {
|
|
3
|
+
throw new Error("workctl setup requires an interactive terminal.");
|
|
4
|
+
}
|
|
5
|
+
const selected = await dependencies.select(dependencies.capabilities.map((capability) => ({
|
|
6
|
+
value: capability.id,
|
|
7
|
+
label: capability.title,
|
|
8
|
+
selected: capability.defaultSelected,
|
|
9
|
+
})));
|
|
10
|
+
if (selected.length === 0)
|
|
11
|
+
return 0;
|
|
12
|
+
const results = [];
|
|
13
|
+
for (const capability of dependencies.capabilities) {
|
|
14
|
+
if (!selected.includes(capability.id))
|
|
15
|
+
continue;
|
|
16
|
+
try {
|
|
17
|
+
const configured = await capability.isReady()
|
|
18
|
+
? "Ready"
|
|
19
|
+
: await capability.configure();
|
|
20
|
+
const status = configured === "Cancelled" || configured === "Failed"
|
|
21
|
+
? configured
|
|
22
|
+
: await capability.verify() ? "Ready" : "Failed";
|
|
23
|
+
results.push({ title: capability.title, status });
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
results.push({ title: capability.title, status: "Failed" });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
io.stdout(`Setup summary\n${results.map(({ title, status }) => `- ${status} ${title}`).join("\n")}\n`);
|
|
30
|
+
return results.some(({ status }) => status === "Failed") ? 1 : 0;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=setup.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.service.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/commands/setup/setup.service.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,EAAkB,EAClB,YAAsC;IAEtC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACxF,KAAK,EAAE,UAAU,CAAC,EAAE;QACpB,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,QAAQ,EAAE,UAAU,CAAC,eAAe;KACrC,CAAC,CAAC,CAAC,CAAC;IACL,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEpC,MAAM,OAAO,GAAuD,EAAE,CAAC;IACvE,KAAK,MAAM,UAAU,IAAI,YAAY,CAAC,YAAY,EAAE,CAAC;QACnD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAAE,SAAS;QAChD,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE;gBAC3C,CAAC,CAAC,OAAgB;gBAClB,CAAC,CAAC,MAAM,UAAU,CAAC,SAAS,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,UAAU,KAAK,WAAW,IAAI,UAAU,KAAK,QAAQ;gBAClE,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,OAAgB,CAAC,CAAC,CAAC,QAAiB,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,EAAE,CAAC,MAAM,CAAC,kBAAkB,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,KAAK,MAAM,KAAK,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxG,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type Command } from "commander";
|
|
2
|
+
import { type UpdateDependencies, type UpdateOutcome } from "./update.service.js";
|
|
3
|
+
export interface UpdateCommandDependencies {
|
|
4
|
+
run(): Promise<UpdateOutcome>;
|
|
5
|
+
}
|
|
6
|
+
export declare function createUpdateCommandDependencies(currentVersion: string, write: (message: string) => void, updateDependencies?: UpdateDependencies): UpdateCommandDependencies;
|
|
7
|
+
export declare function registerUpdateCommand(program: Command, dependencies: UpdateCommandDependencies): void;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { createInterface } from "node:readline/promises";
|
|
2
|
+
import { stdin, stdout } from "node:process";
|
|
3
|
+
import { updateWorkctl, } from "./update.service.js";
|
|
4
|
+
export function createUpdateCommandDependencies(currentVersion, write, updateDependencies) {
|
|
5
|
+
return {
|
|
6
|
+
run: async () => {
|
|
7
|
+
const interactive = stdin.isTTY === true && stdout.isTTY === true;
|
|
8
|
+
return updateWorkctl(currentVersion, {
|
|
9
|
+
stdout: write,
|
|
10
|
+
...(interactive
|
|
11
|
+
? {
|
|
12
|
+
requestApproval: async (prompt) => {
|
|
13
|
+
const readline = createInterface({ input: stdin, output: stdout });
|
|
14
|
+
try {
|
|
15
|
+
return await readline.question(prompt);
|
|
16
|
+
}
|
|
17
|
+
finally {
|
|
18
|
+
readline.close();
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
}
|
|
22
|
+
: {}),
|
|
23
|
+
}, updateDependencies);
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export function registerUpdateCommand(program, dependencies) {
|
|
28
|
+
program.command("update")
|
|
29
|
+
.description("update workctl to the latest stable release")
|
|
30
|
+
.action(async () => {
|
|
31
|
+
await dependencies.run();
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=update.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.command.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/commands/update/update.command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EACL,aAAa,GAGd,MAAM,qBAAqB,CAAC;AAM7B,MAAM,UAAU,+BAA+B,CAC7C,cAAsB,EACtB,KAAgC,EAChC,kBAAuC;IAEvC,OAAO;QACL,GAAG,EAAE,KAAK,IAAI,EAAE;YACd,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;YAClE,OAAO,aAAa,CAAC,cAAc,EAAE;gBACnC,MAAM,EAAE,KAAK;gBACb,GAAG,CAAC,WAAW;oBACb,CAAC,CAAC;wBACA,eAAe,EAAE,KAAK,EAAE,MAAc,EAAE,EAAE;4BACxC,MAAM,QAAQ,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;4BACnE,IAAI,CAAC;gCACH,OAAO,MAAM,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;4BACzC,CAAC;oCAAS,CAAC;gCACT,QAAQ,CAAC,KAAK,EAAE,CAAC;4BACnB,CAAC;wBACH,CAAC;qBACF;oBACD,CAAC,CAAC,EAAE,CAAC;aACR,EAAE,kBAAkB,CAAC,CAAC;QACzB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,OAAgB,EAChB,YAAuC;IAEvC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;SACtB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,YAAY,CAAC,GAAG,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { spawn, type SpawnOptions } from "node:child_process";
|
|
2
|
+
export declare const NPM_PACKAGE = "@geneverse/workctl";
|
|
3
|
+
export interface NpmRelease {
|
|
4
|
+
version: string;
|
|
5
|
+
packageName: string;
|
|
6
|
+
packageUrl: string;
|
|
7
|
+
}
|
|
8
|
+
export type UpdateOutcome = {
|
|
9
|
+
status: "up-to-date";
|
|
10
|
+
latestVersion: string;
|
|
11
|
+
} | {
|
|
12
|
+
status: "cancelled";
|
|
13
|
+
latestVersion: string;
|
|
14
|
+
} | {
|
|
15
|
+
status: "updated";
|
|
16
|
+
latestVersion: string;
|
|
17
|
+
};
|
|
18
|
+
export interface UpdateIO {
|
|
19
|
+
stdout: (message: string) => void;
|
|
20
|
+
requestApproval?: (prompt: string) => Promise<string>;
|
|
21
|
+
}
|
|
22
|
+
export interface UpdateDependencies {
|
|
23
|
+
getLatestRelease: () => Promise<unknown>;
|
|
24
|
+
install: (packageName: string) => Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
export declare class UpdateError extends Error {
|
|
27
|
+
constructor(message: string);
|
|
28
|
+
}
|
|
29
|
+
export declare function compareStableVersions(left: string, right: string): number;
|
|
30
|
+
export declare function parseNpmRelease(value: unknown): NpmRelease;
|
|
31
|
+
type SpawnProcess = (command: string, args: readonly string[], options: SpawnOptions) => ReturnType<typeof spawn>;
|
|
32
|
+
export declare function installGlobalPackage(packageName: string, spawnProcess?: SpawnProcess): Promise<void>;
|
|
33
|
+
export declare function defaultUpdateDependencies(): UpdateDependencies;
|
|
34
|
+
export declare function updateWorkctl(currentVersion: string, io: UpdateIO, dependencies?: UpdateDependencies): Promise<UpdateOutcome>;
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
export const NPM_PACKAGE = "@geneverse/workctl";
|
|
3
|
+
const NPM_REGISTRY_METADATA = `https://registry.npmjs.org/${encodeURIComponent(NPM_PACKAGE)}`;
|
|
4
|
+
const STABLE_VERSION = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/;
|
|
5
|
+
export class UpdateError extends Error {
|
|
6
|
+
constructor(message) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.name = "UpdateError";
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
function parseVersion(version) {
|
|
12
|
+
const match = STABLE_VERSION.exec(version);
|
|
13
|
+
if (!match)
|
|
14
|
+
throw new UpdateError(`Invalid stable version: ${version}.`);
|
|
15
|
+
const parts = match.slice(1).map(Number);
|
|
16
|
+
if (parts.some((part) => !Number.isSafeInteger(part))) {
|
|
17
|
+
throw new UpdateError(`Invalid stable version: ${version}.`);
|
|
18
|
+
}
|
|
19
|
+
return [parts[0], parts[1], parts[2]];
|
|
20
|
+
}
|
|
21
|
+
export function compareStableVersions(left, right) {
|
|
22
|
+
const leftParts = parseVersion(left);
|
|
23
|
+
const rightParts = parseVersion(right);
|
|
24
|
+
for (let index = 0; index < leftParts.length; index += 1) {
|
|
25
|
+
const difference = leftParts[index] - rightParts[index];
|
|
26
|
+
if (difference !== 0)
|
|
27
|
+
return Math.sign(difference);
|
|
28
|
+
}
|
|
29
|
+
return 0;
|
|
30
|
+
}
|
|
31
|
+
function record(value) {
|
|
32
|
+
return typeof value === "object" && value !== null
|
|
33
|
+
? value
|
|
34
|
+
: undefined;
|
|
35
|
+
}
|
|
36
|
+
function requireHttpsUrl(value, description) {
|
|
37
|
+
try {
|
|
38
|
+
const url = new URL(value);
|
|
39
|
+
if (url.protocol !== "https:")
|
|
40
|
+
throw new Error();
|
|
41
|
+
return url;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
throw new UpdateError(`${description} must be a valid HTTPS URL.`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export function parseNpmRelease(value) {
|
|
48
|
+
const metadata = record(value);
|
|
49
|
+
const distTags = record(metadata?.["dist-tags"]);
|
|
50
|
+
const latestVersion = distTags?.latest;
|
|
51
|
+
const versions = record(metadata?.versions);
|
|
52
|
+
if (typeof latestVersion !== "string" || !versions) {
|
|
53
|
+
throw new UpdateError("The npm package metadata is invalid.");
|
|
54
|
+
}
|
|
55
|
+
parseVersion(latestVersion);
|
|
56
|
+
const latest = record(versions[latestVersion]);
|
|
57
|
+
const dist = record(latest?.dist);
|
|
58
|
+
if (!latest || latest.name !== NPM_PACKAGE || typeof dist?.tarball !== "string") {
|
|
59
|
+
throw new UpdateError(`The latest ${NPM_PACKAGE} package metadata is invalid.`);
|
|
60
|
+
}
|
|
61
|
+
const packageUrl = requireHttpsUrl(dist.tarball, "The npm package tarball URL");
|
|
62
|
+
if (packageUrl.hostname !== "registry.npmjs.org") {
|
|
63
|
+
throw new UpdateError(`The latest ${NPM_PACKAGE} tarball must come from the npm registry.`);
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
version: latestVersion,
|
|
67
|
+
packageName: `${NPM_PACKAGE}@${latestVersion}`,
|
|
68
|
+
packageUrl: packageUrl.toString(),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
async function fetchJson(url) {
|
|
72
|
+
let response;
|
|
73
|
+
try {
|
|
74
|
+
response = await fetch(url, {
|
|
75
|
+
headers: {
|
|
76
|
+
Accept: "application/vnd.npm.install-v1+json, application/json",
|
|
77
|
+
"User-Agent": "workctl-updater",
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
throw new UpdateError("Could not check npm for the latest workctl release.");
|
|
83
|
+
}
|
|
84
|
+
if (!response.ok) {
|
|
85
|
+
throw new UpdateError(`npm release check failed with HTTP ${response.status}.`);
|
|
86
|
+
}
|
|
87
|
+
try {
|
|
88
|
+
return await response.json();
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
throw new UpdateError("npm returned invalid package metadata.");
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
export async function installGlobalPackage(packageName, spawnProcess = spawn) {
|
|
95
|
+
const npmCommand = process.platform === "win32" ? "npm.cmd" : "npm";
|
|
96
|
+
await new Promise((resolve, reject) => {
|
|
97
|
+
const child = spawnProcess(npmCommand, ["install", "--global", packageName], { shell: false, stdio: "ignore" });
|
|
98
|
+
child.once("error", () => reject(new UpdateError("Could not start npm. Ensure npm is installed and available in PATH.")));
|
|
99
|
+
child.once("exit", (code, signal) => {
|
|
100
|
+
if (code === 0) {
|
|
101
|
+
resolve();
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const detail = signal ? `signal ${signal}` : `exit code ${code ?? "unknown"}`;
|
|
105
|
+
reject(new UpdateError(`npm could not install the update (${detail}). Check global npm permissions and retry.`));
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
export function defaultUpdateDependencies() {
|
|
110
|
+
return {
|
|
111
|
+
getLatestRelease: () => fetchJson(NPM_REGISTRY_METADATA),
|
|
112
|
+
install: installGlobalPackage,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
export async function updateWorkctl(currentVersion, io, dependencies = defaultUpdateDependencies()) {
|
|
116
|
+
const release = parseNpmRelease(await dependencies.getLatestRelease());
|
|
117
|
+
if (compareStableVersions(currentVersion, release.version) >= 0) {
|
|
118
|
+
io.stdout(`workctl ${currentVersion} is already up to date.\n`);
|
|
119
|
+
return { status: "up-to-date", latestVersion: release.version };
|
|
120
|
+
}
|
|
121
|
+
io.stdout(`Update available: ${currentVersion} -> ${release.version}\nPackage: ${release.packageName}\n`);
|
|
122
|
+
if (!io.requestApproval) {
|
|
123
|
+
throw new UpdateError("workctl update requires an interactive terminal.");
|
|
124
|
+
}
|
|
125
|
+
const answer = await io.requestApproval("Type yes to install the update: ");
|
|
126
|
+
if (answer.trim().toLowerCase() !== "yes") {
|
|
127
|
+
io.stdout("Update cancelled; nothing was installed.\n");
|
|
128
|
+
return { status: "cancelled", latestVersion: release.version };
|
|
129
|
+
}
|
|
130
|
+
await dependencies.install(release.packageName);
|
|
131
|
+
io.stdout(`Updated workctl to ${release.version}.\n`);
|
|
132
|
+
return { status: "updated", latestVersion: release.version };
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=update.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.service.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/commands/update/update.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./program.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/cli/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { type AssistantDependencies } from "../../capabilities/assistant/src/index.js";
|
|
3
|
+
import { type JenkinsDependencies } from "../../capabilities/jenkins/src/index.js";
|
|
4
|
+
import { type JiraCommandDependencies } from "../../capabilities/jira/src/index.js";
|
|
5
|
+
import type { SetupCommandDependencies } from "./commands/setup/setup.service.js";
|
|
6
|
+
import { type BrowsersCommandDependencies } from "./commands/browsers/browsers.command.js";
|
|
7
|
+
import { type UpdateCommandDependencies } from "./commands/update/update.command.js";
|
|
8
|
+
export interface WorkctlIO {
|
|
9
|
+
stdout(message: string): void;
|
|
10
|
+
stderr(message: string): void;
|
|
11
|
+
}
|
|
12
|
+
export interface WorkctlDependencies {
|
|
13
|
+
assistant?: AssistantDependencies;
|
|
14
|
+
jenkins?: JenkinsDependencies;
|
|
15
|
+
setup?: SetupCommandDependencies;
|
|
16
|
+
jira?: JiraCommandDependencies;
|
|
17
|
+
update?: UpdateCommandDependencies;
|
|
18
|
+
browsers?: BrowsersCommandDependencies;
|
|
19
|
+
}
|
|
20
|
+
export declare function createWorkctlProgram(env: NodeJS.ProcessEnv, io?: WorkctlIO, dependencies?: WorkctlDependencies): Command;
|
|
21
|
+
export declare function runWorkctl(argv: readonly string[], env: NodeJS.ProcessEnv, io?: WorkctlIO, dependencies?: WorkctlDependencies): Promise<number>;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Command, CommanderError } from "commander";
|
|
2
|
+
import { registerAssistantCommands, } from "../../capabilities/assistant/src/index.js";
|
|
3
|
+
import { registerJenkinsCommands, } from "../../capabilities/jenkins/src/index.js";
|
|
4
|
+
import { createJiraCommandDependencies, registerJiraCommands, } from "../../capabilities/jira/src/index.js";
|
|
5
|
+
import { RELEASE_VERSION } from "./release-version.js";
|
|
6
|
+
import { createSetupCommandDependencies, registerSetupCommand, } from "./commands/setup/setup.command.js";
|
|
7
|
+
import { createBrowsersCommandDependencies, registerBrowsersCommand, } from "./commands/browsers/browsers.command.js";
|
|
8
|
+
import { createUpdateCommandDependencies, registerUpdateCommand, } from "./commands/update/update.command.js";
|
|
9
|
+
const defaultIO = {
|
|
10
|
+
stdout: (message) => process.stdout.write(message),
|
|
11
|
+
stderr: (message) => process.stderr.write(message),
|
|
12
|
+
};
|
|
13
|
+
export function createWorkctlProgram(env, io = defaultIO, dependencies = {}) {
|
|
14
|
+
const program = new Command()
|
|
15
|
+
.name("workctl")
|
|
16
|
+
.description("Deterministic internal developer-workflow CLI")
|
|
17
|
+
.version(RELEASE_VERSION);
|
|
18
|
+
const jira = dependencies.jira ?? createJiraCommandDependencies();
|
|
19
|
+
const update = dependencies.update ?? createUpdateCommandDependencies(RELEASE_VERSION, io.stdout);
|
|
20
|
+
const browsers = dependencies.browsers ?? createBrowsersCommandDependencies(io);
|
|
21
|
+
const runJira = async (args, commandEnv, deprecatedJlogAlias) => {
|
|
22
|
+
if (deprecatedJlogAlias) {
|
|
23
|
+
io.stderr("Deprecated: `workctl jlog` will be removed in the next minor release; use `workctl jira`.\n");
|
|
24
|
+
}
|
|
25
|
+
if (args[0] === "update") {
|
|
26
|
+
io.stderr(deprecatedJlogAlias
|
|
27
|
+
? "Deprecated: capability-scoped update will be removed in the next minor release; use `workctl update`.\n"
|
|
28
|
+
: "Deprecated: `workctl jira update` will be removed in the next minor release; use `workctl update`.\n");
|
|
29
|
+
await update.run();
|
|
30
|
+
return 0;
|
|
31
|
+
}
|
|
32
|
+
return jira.run(args, commandEnv);
|
|
33
|
+
};
|
|
34
|
+
const jiraCommands = {
|
|
35
|
+
...jira,
|
|
36
|
+
run: async (args, commandEnv) => runJira(args, commandEnv, false),
|
|
37
|
+
};
|
|
38
|
+
registerJiraCommands(program, env, jiraCommands);
|
|
39
|
+
registerUpdateCommand(program, update);
|
|
40
|
+
registerBrowsersCommand(program, browsers);
|
|
41
|
+
program.command("jlog [args...]")
|
|
42
|
+
.description("deprecated alias for workctl jira")
|
|
43
|
+
.helpOption(false)
|
|
44
|
+
.allowUnknownOption(true)
|
|
45
|
+
.allowExcessArguments(true)
|
|
46
|
+
.action(async (args) => {
|
|
47
|
+
const exitCode = await runJira(args, env, true);
|
|
48
|
+
if (exitCode !== 0) {
|
|
49
|
+
throw new CommanderError(exitCode, "jira.failed", "jira command failed");
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
registerSetupCommand(program, io, dependencies.setup ?? createSetupCommandDependencies([jira.setupCapability(env)]));
|
|
53
|
+
registerJenkinsCommands(program, io, dependencies.jenkins);
|
|
54
|
+
registerAssistantCommands(program, io, dependencies.assistant);
|
|
55
|
+
return program;
|
|
56
|
+
}
|
|
57
|
+
export async function runWorkctl(argv, env, io = defaultIO, dependencies = {}) {
|
|
58
|
+
try {
|
|
59
|
+
await createWorkctlProgram(env, io, dependencies).parseAsync([...argv], { from: "user" });
|
|
60
|
+
return 0;
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
if (error instanceof CommanderError) {
|
|
64
|
+
if (error.code === "commander.helpDisplayed" || error.code === "commander.version")
|
|
65
|
+
return 0;
|
|
66
|
+
if (error.message !== "jira command failed")
|
|
67
|
+
io.stderr(`${error.message}\n`);
|
|
68
|
+
return error.exitCode;
|
|
69
|
+
}
|
|
70
|
+
io.stderr(`${error instanceof Error ? error.message : "Unknown workctl error"}\n`);
|
|
71
|
+
return 1;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=program.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../../../../packages/cli/src/program.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const RELEASE_VERSION: string;
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@geneverse/workctl",
|
|
3
|
+
"version": "0.2.5",
|
|
4
|
+
"description": "Deterministic internal developer-workflow CLI",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/geneverse/workctl.git"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/geneverse/workctl#readme",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/geneverse/workctl/issues"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"cli",
|
|
17
|
+
"jira",
|
|
18
|
+
"timesheet",
|
|
19
|
+
"workflow"
|
|
20
|
+
],
|
|
21
|
+
"workspaces": [
|
|
22
|
+
"packages/cli",
|
|
23
|
+
"packages/capabilities/*"
|
|
24
|
+
],
|
|
25
|
+
"files": [
|
|
26
|
+
"dist/packages",
|
|
27
|
+
"README.md",
|
|
28
|
+
"LICENSE"
|
|
29
|
+
],
|
|
30
|
+
"bin": {
|
|
31
|
+
"workctl": "dist/packages/cli/src/bin.js"
|
|
32
|
+
},
|
|
33
|
+
"engines": {
|
|
34
|
+
"node": ">=22"
|
|
35
|
+
},
|
|
36
|
+
"scripts": {
|
|
37
|
+
"bootstrap": "npm ci && playwright install chromium && npm run dev -- setup",
|
|
38
|
+
"build": "node scripts/build.mjs",
|
|
39
|
+
"dev": "tsx packages/cli/src/bin.ts",
|
|
40
|
+
"test": "vitest run",
|
|
41
|
+
"test:architecture": "vitest run packages/cli/test/architecture.test.ts",
|
|
42
|
+
"test:package": "node scripts/test-package.mjs",
|
|
43
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
44
|
+
"validate:release": "node scripts/validate-release.mjs"
|
|
45
|
+
},
|
|
46
|
+
"dependencies": {
|
|
47
|
+
"@clack/prompts": "^1.7.0",
|
|
48
|
+
"commander": "^14.0.2",
|
|
49
|
+
"playwright": "^1.61.1"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@types/node": "^22.19.7",
|
|
53
|
+
"tsx": "^4.23.0",
|
|
54
|
+
"typescript": "^5.9.3",
|
|
55
|
+
"vitest": "^4.0.18"
|
|
56
|
+
}
|
|
57
|
+
}
|