poe-code 2.0.3 → 2.0.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.
Files changed (100) hide show
  1. package/README.md +17 -30
  2. package/dist/cli/command-runner.d.ts +1 -1
  3. package/dist/cli/commands/configure.d.ts +0 -2
  4. package/dist/cli/commands/configure.js +99 -34
  5. package/dist/cli/commands/configure.js.map +1 -1
  6. package/dist/cli/commands/doctor.d.ts +4 -0
  7. package/dist/cli/commands/doctor.js +73 -0
  8. package/dist/cli/commands/doctor.js.map +1 -0
  9. package/dist/cli/commands/remove.d.ts +1 -0
  10. package/dist/cli/commands/remove.js +41 -28
  11. package/dist/cli/commands/remove.js.map +1 -1
  12. package/dist/cli/commands/shared.d.ts +9 -12
  13. package/dist/cli/commands/shared.js +26 -24
  14. package/dist/cli/commands/shared.js.map +1 -1
  15. package/dist/cli/commands/spawn.d.ts +1 -0
  16. package/dist/cli/commands/spawn.js +14 -5
  17. package/dist/cli/commands/spawn.js.map +1 -1
  18. package/dist/cli/commands/test.d.ts +4 -0
  19. package/dist/cli/commands/test.js +36 -0
  20. package/dist/cli/commands/test.js.map +1 -0
  21. package/dist/cli/constants.d.ts +12 -9
  22. package/dist/cli/constants.js +15 -9
  23. package/dist/cli/constants.js.map +1 -1
  24. package/dist/cli/container.d.ts +3 -3
  25. package/dist/cli/context.d.ts +4 -13
  26. package/dist/cli/context.js +19 -149
  27. package/dist/cli/context.js.map +1 -1
  28. package/dist/cli/error-logger.js +1 -1
  29. package/dist/cli/error-logger.js.map +1 -1
  30. package/dist/cli/errors.d.ts +0 -10
  31. package/dist/cli/errors.js +0 -12
  32. package/dist/cli/errors.js.map +1 -1
  33. package/dist/cli/logger.js +9 -11
  34. package/dist/cli/logger.js.map +1 -1
  35. package/dist/cli/options.d.ts +13 -4
  36. package/dist/cli/options.js +12 -11
  37. package/dist/cli/options.js.map +1 -1
  38. package/dist/cli/program.js +5 -2
  39. package/dist/cli/program.js.map +1 -1
  40. package/dist/cli/prompts.d.ts +14 -4
  41. package/dist/cli/prompts.js +12 -24
  42. package/dist/cli/prompts.js.map +1 -1
  43. package/dist/cli/service-registry.d.ts +37 -15
  44. package/dist/cli/service-registry.js.map +1 -1
  45. package/dist/cli/telemetry.d.ts +1 -1
  46. package/dist/cli/ui/service-menu.d.ts +2 -2
  47. package/dist/cli/ui/theme.js +6 -6
  48. package/dist/cli/ui/theme.js.map +1 -1
  49. package/dist/providers/claude-code.d.ts +10 -46
  50. package/dist/providers/claude-code.js +94 -224
  51. package/dist/providers/claude-code.js.map +1 -1
  52. package/dist/providers/codex.d.ts +14 -40
  53. package/dist/providers/codex.js +74 -177
  54. package/dist/providers/codex.js.map +1 -1
  55. package/dist/providers/create-provider.d.ts +26 -0
  56. package/dist/providers/create-provider.js +120 -0
  57. package/dist/providers/create-provider.js.map +1 -0
  58. package/dist/providers/index.d.ts +2 -2
  59. package/dist/providers/index.js +4 -10
  60. package/dist/providers/index.js.map +1 -1
  61. package/dist/providers/opencode.d.ts +3 -43
  62. package/dist/providers/opencode.js +112 -173
  63. package/dist/providers/opencode.js.map +1 -1
  64. package/dist/providers/provider-helpers.d.ts +10 -0
  65. package/dist/providers/provider-helpers.js +62 -0
  66. package/dist/providers/provider-helpers.js.map +1 -0
  67. package/dist/providers/versioned-provider.d.ts +3 -0
  68. package/dist/providers/versioned-provider.js +9 -0
  69. package/dist/providers/versioned-provider.js.map +1 -0
  70. package/dist/services/credentials.d.ts +14 -0
  71. package/dist/services/credentials.js +123 -22
  72. package/dist/services/credentials.js.map +1 -1
  73. package/dist/services/model-strategy.d.ts +1 -1
  74. package/dist/services/model-strategy.js +20 -15
  75. package/dist/services/model-strategy.js.map +1 -1
  76. package/dist/services/mutation-events.d.ts +4 -0
  77. package/dist/services/mutation-events.js +56 -0
  78. package/dist/services/mutation-events.js.map +1 -0
  79. package/dist/services/service-install.d.ts +3 -4
  80. package/dist/services/service-install.js +30 -12
  81. package/dist/services/service-install.js.map +1 -1
  82. package/dist/services/service-manifest.d.ts +49 -21
  83. package/dist/services/service-manifest.js +261 -64
  84. package/dist/services/service-manifest.js.map +1 -1
  85. package/dist/tools/label-generator.d.ts +2 -2
  86. package/dist/tools/label-generator.js +1 -1
  87. package/dist/tools/label-generator.js.map +1 -1
  88. package/dist/utils/binary-version.d.ts +6 -0
  89. package/dist/utils/binary-version.js +35 -0
  90. package/dist/utils/binary-version.js.map +1 -0
  91. package/dist/utils/command-checks.d.ts +39 -0
  92. package/dist/utils/command-checks.js +116 -0
  93. package/dist/utils/command-checks.js.map +1 -0
  94. package/package.json +6 -8
  95. package/dist/providers/roo-code.d.ts +0 -41
  96. package/dist/providers/roo-code.js +0 -201
  97. package/dist/providers/roo-code.js.map +0 -1
  98. package/dist/utils/prerequisites.d.ts +0 -41
  99. package/dist/utils/prerequisites.js +0 -92
  100. package/dist/utils/prerequisites.js.map +0 -1
@@ -1,58 +1,150 @@
1
1
  import path from "node:path";
2
2
  export async function saveCredentials(options) {
3
3
  const { fs, filePath, apiKey } = options;
4
- await fs.mkdir(path.dirname(filePath), { recursive: true });
5
- const payload = JSON.stringify({ apiKey }, null, 2);
6
- await fs.writeFile(`${filePath}`, `${payload}\n`, { encoding: "utf8" });
4
+ const document = await readCredentialsDocument(fs, filePath);
5
+ document.apiKey = apiKey;
6
+ await writeCredentialsDocument(fs, filePath, document);
7
7
  }
8
8
  export async function loadCredentials(options) {
9
+ const { fs, filePath } = options;
10
+ const document = await readCredentialsDocument(fs, filePath);
11
+ return typeof document.apiKey === "string" && document.apiKey.length > 0
12
+ ? document.apiKey
13
+ : null;
14
+ }
15
+ export async function deleteCredentials(options) {
9
16
  const { fs, filePath } = options;
10
17
  try {
11
- const raw = await fs.readFile(filePath, "utf8");
12
- return await parseCredentialsContent(fs, filePath, raw);
18
+ await fs.unlink(filePath);
19
+ return true;
13
20
  }
14
21
  catch (error) {
15
22
  if (isNotFound(error)) {
16
- return null;
23
+ return false;
17
24
  }
18
25
  throw error;
19
26
  }
20
27
  }
21
- export async function deleteCredentials(options) {
28
+ export async function loadConfiguredServices(options) {
22
29
  const { fs, filePath } = options;
30
+ const document = await readCredentialsDocument(fs, filePath);
31
+ return { ...(document.configured_services ?? {}) };
32
+ }
33
+ export async function saveConfiguredService(options) {
34
+ const { fs, filePath, service, metadata } = options;
35
+ const document = await readCredentialsDocument(fs, filePath);
36
+ const normalized = normalizeConfiguredServiceMetadata(metadata);
37
+ document.configured_services = {
38
+ ...(document.configured_services ?? {}),
39
+ [service]: normalized
40
+ };
41
+ await writeCredentialsDocument(fs, filePath, document);
42
+ }
43
+ export async function removeConfiguredService(options) {
44
+ const { fs, filePath, service } = options;
45
+ const document = await readCredentialsDocument(fs, filePath);
46
+ const services = document.configured_services;
47
+ if (!services || !(service in services)) {
48
+ return false;
49
+ }
50
+ delete services[service];
51
+ if (Object.keys(services).length === 0) {
52
+ delete document.configured_services;
53
+ }
54
+ await writeCredentialsDocument(fs, filePath, document);
55
+ return true;
56
+ }
57
+ function normalizeConfiguredServiceMetadata(metadata) {
58
+ const version = typeof metadata.version === "string" && metadata.version.length > 0
59
+ ? metadata.version
60
+ : null;
61
+ const seen = new Set();
62
+ const files = [];
63
+ for (const entry of metadata.files ?? []) {
64
+ if (typeof entry !== "string" || entry.length === 0) {
65
+ continue;
66
+ }
67
+ if (!seen.has(entry)) {
68
+ files.push(entry);
69
+ seen.add(entry);
70
+ }
71
+ }
72
+ return {
73
+ version,
74
+ files
75
+ };
76
+ }
77
+ async function readCredentialsDocument(fs, filePath) {
23
78
  try {
24
- await fs.unlink(filePath);
25
- return true;
79
+ const raw = await fs.readFile(filePath, "utf8");
80
+ return await parseCredentialsDocument(fs, filePath, raw);
26
81
  }
27
82
  catch (error) {
28
83
  if (isNotFound(error)) {
29
- return false;
84
+ return {};
30
85
  }
31
86
  throw error;
32
87
  }
33
88
  }
34
- function isNotFound(error) {
35
- return (typeof error === "object" &&
36
- error !== null &&
37
- "code" in error &&
38
- error.code === "ENOENT");
39
- }
40
- async function parseCredentialsContent(fs, filePath, raw) {
89
+ async function parseCredentialsDocument(fs, filePath, raw) {
41
90
  try {
42
91
  const parsed = JSON.parse(raw);
43
- if (typeof parsed.apiKey === "string" && parsed.apiKey.length > 0) {
44
- return parsed.apiKey;
45
- }
46
- return null;
92
+ return normalizeCredentialsDocument(parsed);
47
93
  }
48
94
  catch (error) {
49
95
  if (error instanceof SyntaxError) {
50
96
  await recoverInvalidCredentials(fs, filePath, raw);
51
- return null;
97
+ return {};
52
98
  }
53
99
  throw error;
54
100
  }
55
101
  }
102
+ function normalizeCredentialsDocument(value) {
103
+ if (!isRecord(value)) {
104
+ return {};
105
+ }
106
+ const document = {};
107
+ if (typeof value.apiKey === "string" && value.apiKey.length > 0) {
108
+ document.apiKey = value.apiKey;
109
+ }
110
+ const services = normalizeConfiguredServices(value.configured_services);
111
+ if (Object.keys(services).length > 0) {
112
+ document.configured_services = services;
113
+ }
114
+ return document;
115
+ }
116
+ function normalizeConfiguredServices(value) {
117
+ if (!isRecord(value)) {
118
+ return {};
119
+ }
120
+ const entries = {};
121
+ for (const [key, entry] of Object.entries(value)) {
122
+ if (!isRecord(entry)) {
123
+ continue;
124
+ }
125
+ const normalized = normalizeConfiguredServiceMetadata({
126
+ version: typeof entry.version === "string" && entry.version.length > 0
127
+ ? entry.version
128
+ : null,
129
+ files: Array.isArray(entry.files) ? entry.files : []
130
+ });
131
+ entries[key] = normalized;
132
+ }
133
+ return entries;
134
+ }
135
+ async function writeCredentialsDocument(fs, filePath, document) {
136
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
137
+ const payload = {};
138
+ if (document.apiKey) {
139
+ payload.apiKey = document.apiKey;
140
+ }
141
+ if (document.configured_services) {
142
+ payload.configured_services = document.configured_services;
143
+ }
144
+ await fs.writeFile(filePath, `${JSON.stringify(payload, null, 2)}\n`, {
145
+ encoding: "utf8"
146
+ });
147
+ }
56
148
  async function recoverInvalidCredentials(fs, filePath, content) {
57
149
  const backupPath = createInvalidBackupPath(filePath);
58
150
  await fs.writeFile(backupPath, content, { encoding: "utf8" });
@@ -64,5 +156,14 @@ function createInvalidBackupPath(filePath) {
64
156
  const base = path.basename(filePath);
65
157
  return path.join(dir, `${base}.invalid-${timestamp}.json`);
66
158
  }
159
+ function isRecord(value) {
160
+ return Boolean(value && typeof value === "object" && !Array.isArray(value));
161
+ }
162
+ function isNotFound(error) {
163
+ return (typeof error === "object" &&
164
+ error !== null &&
165
+ "code" in error &&
166
+ error.code === "ENOENT");
167
+ }
67
168
  const EMPTY_DOCUMENT = `${JSON.stringify({}, null, 2)}\n`;
68
169
  //# sourceMappingURL=credentials.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/services/credentials.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/services/credentials.ts"],"names":[],"mappings":"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"}
@@ -33,7 +33,7 @@ export interface ModelContext {
33
33
  previousModel?: string;
34
34
  }
35
35
  /**
36
- * Mixed strategy: alternates between GPT-5.1 and Claude-Sonnet-4.5
36
+ * Mixed strategy: alternates between GPT-5.1 and the default Claude model
37
37
  */
38
38
  export declare class MixedStrategy implements ModelStrategy {
39
39
  private currentIndex;
@@ -1,23 +1,25 @@
1
1
  import * as fs from "fs";
2
2
  import * as path from "path";
3
3
  import * as os from "os";
4
+ import { DEFAULT_CLAUDE_CODE_MODEL, DEFAULT_CODEX_MODEL } from "../cli/constants.js";
5
+ const CLAUDE_DEFAULT_MODEL = DEFAULT_CLAUDE_CODE_MODEL;
4
6
  /**
5
7
  * Available model identifiers
6
8
  */
7
9
  export const AVAILABLE_MODELS = [
8
- "Claude-Sonnet-4.5",
10
+ CLAUDE_DEFAULT_MODEL,
9
11
  "GPT-5.1",
10
12
  "GPT-4o",
11
13
  "Claude-3.5-Sonnet",
12
- "GPT-5.1-Codex",
14
+ DEFAULT_CODEX_MODEL,
13
15
  ];
14
16
  /**
15
- * Mixed strategy: alternates between GPT-5.1 and Claude-Sonnet-4.5
17
+ * Mixed strategy: alternates between GPT-5.1 and the default Claude model
16
18
  */
17
19
  export class MixedStrategy {
18
20
  constructor() {
19
21
  this.currentIndex = 0;
20
- this.models = ["GPT-5.1", "Claude-Sonnet-4.5"];
22
+ this.models = ["GPT-5.1", CLAUDE_DEFAULT_MODEL];
21
23
  }
22
24
  getNextModel() {
23
25
  const model = this.models[this.currentIndex];
@@ -28,7 +30,7 @@ export class MixedStrategy {
28
30
  return "mixed";
29
31
  }
30
32
  getDescription() {
31
- return "Alternates between GPT-5.1 and Claude-Sonnet-4.5 on each call";
33
+ return `Alternates between GPT-5.1 and ${CLAUDE_DEFAULT_MODEL} on each call`;
32
34
  }
33
35
  reset() {
34
36
  this.currentIndex = 0;
@@ -39,11 +41,11 @@ export class MixedStrategy {
39
41
  */
40
42
  export class SmartStrategy {
41
43
  constructor() {
42
- this.lastModel = "Claude-Sonnet-4.5";
44
+ this.lastModel = CLAUDE_DEFAULT_MODEL;
43
45
  }
44
46
  getNextModel(context) {
45
47
  if (!context) {
46
- return "Claude-Sonnet-4.5";
48
+ return CLAUDE_DEFAULT_MODEL;
47
49
  }
48
50
  // Smart selection based on context
49
51
  if (context.messageType === "code" || context.messageType === "reasoning") {
@@ -53,8 +55,8 @@ export class SmartStrategy {
53
55
  return "GPT-5.1";
54
56
  }
55
57
  // Use Claude for medium complexity code
56
- this.lastModel = "Claude-Sonnet-4.5";
57
- return "Claude-Sonnet-4.5";
58
+ this.lastModel = CLAUDE_DEFAULT_MODEL;
59
+ return CLAUDE_DEFAULT_MODEL;
58
60
  }
59
61
  if (context.messageType === "chat") {
60
62
  // Use GPT-4o for general chat
@@ -62,8 +64,8 @@ export class SmartStrategy {
62
64
  return "GPT-4o";
63
65
  }
64
66
  // Default to Claude
65
- this.lastModel = "Claude-Sonnet-4.5";
66
- return "Claude-Sonnet-4.5";
67
+ this.lastModel = CLAUDE_DEFAULT_MODEL;
68
+ return CLAUDE_DEFAULT_MODEL;
67
69
  }
68
70
  getName() {
69
71
  return "smart";
@@ -72,14 +74,14 @@ export class SmartStrategy {
72
74
  return "Intelligently selects model based on task complexity and type";
73
75
  }
74
76
  reset() {
75
- this.lastModel = "Claude-Sonnet-4.5";
77
+ this.lastModel = CLAUDE_DEFAULT_MODEL;
76
78
  }
77
79
  }
78
80
  /**
79
81
  * Fixed strategy: always uses the same model
80
82
  */
81
83
  export class FixedStrategy {
82
- constructor(model = "Claude-Sonnet-4.5") {
84
+ constructor(model = CLAUDE_DEFAULT_MODEL) {
83
85
  this.model = model;
84
86
  }
85
87
  getNextModel() {
@@ -141,7 +143,10 @@ export class ModelStrategyFactory {
141
143
  }
142
144
  static getAvailableStrategies() {
143
145
  return [
144
- { type: "mixed", description: "Alternate between GPT-5.1 and Claude-Sonnet-4.5" },
146
+ {
147
+ type: "mixed",
148
+ description: `Alternate between GPT-5.1 and ${CLAUDE_DEFAULT_MODEL}`
149
+ },
145
150
  { type: "smart", description: "Intelligently select based on task type" },
146
151
  { type: "fixed", description: "Always use the same model" },
147
152
  { type: "round-robin", description: "Cycle through all available models" },
@@ -173,7 +178,7 @@ export class StrategyConfigManager {
173
178
  static getDefaultConfig() {
174
179
  return {
175
180
  type: "fixed",
176
- fixedModel: "Claude-Sonnet-4.5",
181
+ fixedModel: CLAUDE_DEFAULT_MODEL,
177
182
  };
178
183
  }
179
184
  }
@@ -1 +1 @@
1
- {"version":3,"file":"model-strategy.js","sourceRoot":"","sources":["../../src/services/model-strategy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-strategy.js","sourceRoot":"","sources":["../../src/services/model-strategy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ScopedLogger } from "../cli/logger.js";
2
+ import type { ServiceMutationObservers } from "./service-manifest.js";
3
+ export declare function createMutationReporter(logger: ScopedLogger): ServiceMutationObservers;
4
+ export declare function combineMutationObservers(...observers: Array<ServiceMutationObservers | undefined>): ServiceMutationObservers | undefined;
@@ -0,0 +1,56 @@
1
+ export function createMutationReporter(logger) {
2
+ return {
3
+ onStart(details) {
4
+ logger.verbose(`Starting mutation: ${details.label}`);
5
+ },
6
+ onComplete(details, outcome) {
7
+ logger.info(formatMutationMessage(details, outcome));
8
+ },
9
+ onError(details, error) {
10
+ logger.error(`${details.label} failed: ${describeError(error)}`);
11
+ }
12
+ };
13
+ }
14
+ export function combineMutationObservers(...observers) {
15
+ const active = observers.filter((observer) => observer != null);
16
+ if (active.length === 0) {
17
+ return undefined;
18
+ }
19
+ return {
20
+ onStart(details) {
21
+ for (const observer of active) {
22
+ observer.onStart?.(details);
23
+ }
24
+ },
25
+ onComplete(details, outcome) {
26
+ for (const observer of active) {
27
+ observer.onComplete?.(details, outcome);
28
+ }
29
+ },
30
+ onError(details, error) {
31
+ for (const observer of active) {
32
+ observer.onError?.(details, error);
33
+ }
34
+ }
35
+ };
36
+ }
37
+ function formatMutationMessage(details, outcome) {
38
+ const status = describeOutcome(outcome);
39
+ return `${details.label}: ${status}`;
40
+ }
41
+ function describeOutcome(outcome) {
42
+ if (outcome.changed) {
43
+ return outcome.detail ?? outcome.effect;
44
+ }
45
+ if (outcome.detail && outcome.detail !== "noop") {
46
+ return outcome.detail;
47
+ }
48
+ return "no changes";
49
+ }
50
+ function describeError(error) {
51
+ if (error instanceof Error) {
52
+ return error.message;
53
+ }
54
+ return String(error ?? "Unknown error");
55
+ }
56
+ //# sourceMappingURL=mutation-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation-events.js","sourceRoot":"","sources":["../../src/services/mutation-events.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,sBAAsB,CACpC,MAAoB;IAEpB,OAAO;QACL,OAAO,CAAC,OAAO;YACb,MAAM,CAAC,OAAO,CAAC,sBAAsB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,UAAU,CAAC,OAAO,EAAE,OAAO;YACzB,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,CAAC,OAAO,EAAE,KAAK;YACpB,MAAM,CAAC,KAAK,CACV,GAAG,OAAO,CAAC,KAAK,YAAY,aAAa,CAAC,KAAK,CAAC,EAAE,CACnD,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,GAAG,SAAsD;IAEzD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAC7B,CAAC,QAAQ,EAAwC,EAAE,CAAC,QAAQ,IAAI,IAAI,CACrE,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO;QACL,OAAO,CAAC,OAAO;YACb,KAAK,MAAM,QAAQ,IAAI,MAAM,EAAE,CAAC;gBAC9B,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,UAAU,CAAC,OAAO,EAAE,OAAO;YACzB,KAAK,MAAM,QAAQ,IAAI,MAAM,EAAE,CAAC;gBAC9B,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QACD,OAAO,CAAC,OAAO,EAAE,KAAK;YACpB,KAAK,MAAM,QAAQ,IAAI,MAAM,EAAE,CAAC;gBAC9B,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAA2B,EAC3B,OAA+B;IAE/B,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACxC,OAAO,GAAG,OAAO,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,eAAe,CAAC,OAA+B;IACtD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAC1C,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAChD,OAAO,OAAO,CAAC,MAAM,CAAC;IACxB,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC,CAAC;AAC1C,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { CommandRunner, PrerequisiteDefinition } from "../utils/prerequisites.js";
1
+ import type { CommandRunner, CommandCheck } from "../utils/command-checks.js";
2
2
  export interface InstallContext {
3
3
  isDryRun: boolean;
4
4
  runCommand: CommandRunner;
@@ -6,16 +6,15 @@ export interface InstallContext {
6
6
  }
7
7
  export interface InstallCommand {
8
8
  id: string;
9
- description: string;
10
9
  command: string;
11
10
  args: string[];
12
11
  }
13
12
  export interface ServiceInstallDefinition {
14
13
  id: string;
15
14
  summary: string;
16
- check: PrerequisiteDefinition;
15
+ check: CommandCheck;
17
16
  steps: InstallCommand[];
18
- postChecks?: PrerequisiteDefinition[];
17
+ postChecks?: CommandCheck[];
19
18
  successMessage?: string;
20
19
  }
21
20
  export declare function runServiceInstall(definition: ServiceInstallDefinition, context: InstallContext): Promise<boolean>;
@@ -17,20 +17,11 @@ export async function runServiceInstall(definition, context) {
17
17
  return false;
18
18
  }
19
19
  if (context.isDryRun) {
20
- context.logger(`Dry run: would install ${definition.summary}.`);
21
- for (const step of definition.steps) {
22
- context.logger(`Dry run: ${step.description} -> ${formatCommand(step.command, step.args)}`);
23
- }
20
+ logInstallDryRun(definition, context);
24
21
  return true;
25
22
  }
26
23
  for (const step of definition.steps) {
27
- context.logger(`${step.description}...`);
28
- const result = await context.runCommand(step.command, step.args);
29
- if (result.exitCode !== 0) {
30
- const stderr = result.stderr.trim();
31
- const suffix = stderr.length > 0 ? `: ${stderr}` : "";
32
- throw new Error(`${step.description} failed with exit code ${result.exitCode}${suffix}`);
33
- }
24
+ await runInstallStep(step, context);
34
25
  }
35
26
  await definition.check.run(checkContext);
36
27
  if (definition.postChecks) {
@@ -41,7 +32,34 @@ export async function runServiceInstall(definition, context) {
41
32
  context.logger(definition.successMessage ?? `${definition.summary} installed.`);
42
33
  return true;
43
34
  }
35
+ function describeInstallCommand(step) {
36
+ return `[${step.id}] ${formatCommand(step.command, step.args)}`;
37
+ }
44
38
  function formatCommand(command, args) {
45
- return [command, ...args].join(" ");
39
+ return [command, ...args.map(quoteIfNeeded)].join(" ");
40
+ }
41
+ function quoteIfNeeded(value) {
42
+ if (value.length === 0) {
43
+ return '""';
44
+ }
45
+ if (value.includes(" ") || value.includes("\t") || value.includes("\n")) {
46
+ return `"${value.replaceAll('"', '\\"')}"`;
47
+ }
48
+ return value;
49
+ }
50
+ function logInstallDryRun(definition, context) {
51
+ context.logger(`Dry run: would install ${definition.summary}.`);
52
+ for (const step of definition.steps) {
53
+ context.logger(`Dry run: ${describeInstallCommand(step)}`);
54
+ }
55
+ }
56
+ async function runInstallStep(step, context) {
57
+ context.logger(`Running ${describeInstallCommand(step)}`);
58
+ const result = await context.runCommand(step.command, step.args);
59
+ if (result.exitCode !== 0) {
60
+ const stderr = result.stderr.trim();
61
+ const suffix = stderr.length > 0 ? `: ${stderr}` : "";
62
+ throw new Error(`${describeInstallCommand(step)} failed with exit code ${result.exitCode}${suffix}`);
63
+ }
46
64
  }
47
65
  //# sourceMappingURL=service-install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"service-install.js","sourceRoot":"","sources":["../../src/services/service-install.ts"],"names":[],"mappings":"AAwBA,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAAoC,EACpC,OAAuB;IAEvB,MAAM,YAAY,GAAwB;QACxC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC;IAEF,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACzC,OAAO,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GACV,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzD,OAAO,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,OAAO,kBAAkB,MAAM,EAAE,CAAC,CAAC;QAChE,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,MAAM,CAAC,0BAA0B,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC;QAChE,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACpC,OAAO,CAAC,MAAM,CACZ,YAAY,IAAI,CAAC,WAAW,OAAO,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAC5E,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;QACpC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,KAAK,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACjE,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,CAAC,WAAW,0BAA0B,MAAM,CAAC,QAAQ,GAAG,MAAM,EAAE,CACxE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAEzC,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;QAC1B,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;YAC9C,MAAM,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,MAAM,CACZ,UAAU,CAAC,cAAc,IAAI,GAAG,UAAU,CAAC,OAAO,aAAa,CAChE,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,OAAe,EAAE,IAAc;IACpD,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"service-install.js","sourceRoot":"","sources":["../../src/services/service-install.ts"],"names":[],"mappings":"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"}