@ticatec/omniflow-core 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +112 -54
  3. package/README_CN.md +113 -55
  4. package/dist/index.d.ts +5 -4
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +2 -2
  7. package/dist/index.js.map +1 -1
  8. package/dist/plugin/PluginContext.d.ts +39 -0
  9. package/dist/plugin/PluginContext.d.ts.map +1 -0
  10. package/dist/plugin/PluginContext.js +8 -0
  11. package/dist/plugin/PluginContext.js.map +1 -0
  12. package/dist/primitives/docker.d.ts.map +1 -1
  13. package/dist/primitives/docker.js +9 -0
  14. package/dist/primitives/docker.js.map +1 -1
  15. package/dist/primitives/git.d.ts +58 -16
  16. package/dist/primitives/git.d.ts.map +1 -1
  17. package/dist/primitives/git.js +91 -33
  18. package/dist/primitives/git.js.map +1 -1
  19. package/dist/primitives/shell.d.ts +4 -0
  20. package/dist/primitives/shell.d.ts.map +1 -1
  21. package/dist/primitives/shell.js +20 -60
  22. package/dist/primitives/shell.js.map +1 -1
  23. package/dist/primitives/ssh.d.ts +8 -5
  24. package/dist/primitives/ssh.d.ts.map +1 -1
  25. package/dist/primitives/ssh.js +49 -14
  26. package/dist/primitives/ssh.js.map +1 -1
  27. package/dist/primitives/subprocess.d.ts +52 -0
  28. package/dist/primitives/subprocess.d.ts.map +1 -0
  29. package/dist/primitives/subprocess.js +353 -0
  30. package/dist/primitives/subprocess.js.map +1 -0
  31. package/dist/toolchain/providers/GradleToolchain.d.ts +1 -1
  32. package/dist/toolchain/providers/GradleToolchain.d.ts.map +1 -1
  33. package/dist/toolchain/providers/GradleToolchain.js +4 -3
  34. package/dist/toolchain/providers/GradleToolchain.js.map +1 -1
  35. package/dist/toolchain/providers/MavenToolchain.d.ts +1 -1
  36. package/dist/toolchain/providers/MavenToolchain.d.ts.map +1 -1
  37. package/dist/toolchain/providers/MavenToolchain.js +3 -3
  38. package/dist/toolchain/providers/MavenToolchain.js.map +1 -1
  39. package/dist/toolchain/providers/NodeToolchain.d.ts +1 -1
  40. package/dist/toolchain/providers/NodeToolchain.d.ts.map +1 -1
  41. package/dist/toolchain/providers/NodeToolchain.js +61 -0
  42. package/dist/toolchain/providers/NodeToolchain.js.map +1 -1
  43. package/dist/toolchain/providers/pom.d.ts.map +1 -1
  44. package/dist/toolchain/providers/pom.js +13 -0
  45. package/dist/toolchain/providers/pom.js.map +1 -1
  46. package/dist/toolchain/registry.d.ts +11 -3
  47. package/dist/toolchain/registry.d.ts.map +1 -1
  48. package/dist/toolchain/registry.js +33 -8
  49. package/dist/toolchain/registry.js.map +1 -1
  50. package/dist/utils/mask.d.ts.map +1 -1
  51. package/dist/utils/mask.js +30 -5
  52. package/dist/utils/mask.js.map +1 -1
  53. package/docs/toolchain-extension.md +301 -0
  54. package/docs/toolchain-extension_CN.md +304 -0
  55. package/package.json +23 -1
  56. package/src/context/index.ts +74 -0
  57. package/src/context/storage.ts +8 -0
  58. package/src/context/types.ts +69 -0
  59. package/src/index.ts +97 -0
  60. package/src/plugin/PluginContext.ts +57 -0
  61. package/src/primitives/docker.ts +164 -0
  62. package/src/primitives/git.ts +172 -0
  63. package/src/primitives/index.ts +4 -0
  64. package/src/primitives/shell.ts +157 -0
  65. package/src/primitives/ssh.ts +249 -0
  66. package/src/primitives/subprocess.ts +389 -0
  67. package/src/toolchain/index.ts +6 -0
  68. package/src/toolchain/providers/GradleToolchain.ts +137 -0
  69. package/src/toolchain/providers/MavenToolchain.ts +64 -0
  70. package/src/toolchain/providers/NodeToolchain.ts +172 -0
  71. package/src/toolchain/providers/pom.ts +145 -0
  72. package/src/toolchain/registry.ts +161 -0
  73. package/src/toolchain/types.ts +40 -0
  74. package/src/utils/mask.ts +73 -0
  75. package/src/utils/template.ts +62 -0
@@ -2,9 +2,11 @@ export interface SshServerConfig {
2
2
  host?: string;
3
3
  server?: string;
4
4
  user: string;
5
- private_key_file?: string;
5
+ privateKeyFile?: string;
6
+ privateKey?: string;
6
7
  port?: number;
7
8
  tty?: boolean;
9
+ connectTimeout?: number;
8
10
  }
9
11
  export interface SshAuthConfig {
10
12
  user: string;
@@ -22,10 +24,8 @@ export interface SshResult {
22
24
  stdout: string;
23
25
  stderr: string;
24
26
  exitCode: number;
25
- }
26
- export interface SshOptions {
27
- keyFile?: string;
28
- remoteDir?: string;
27
+ failed?: boolean;
28
+ signal?: string;
29
29
  }
30
30
  export declare class SshClient {
31
31
  private readonly configMap;
@@ -37,5 +37,8 @@ export declare const ssh: {
37
37
  exec: (target: SshTarget, command: string, remoteDir?: string) => Promise<SshResult>;
38
38
  cp: (target: SshTarget, srcFile: string, targetFolder: string) => Promise<void>;
39
39
  createClient: (configMap: Record<string, SshServerConfig>) => SshClient;
40
+ configure: (nameOrMap: string | Record<string, SshServerConfig>, config?: SshServerConfig) => void;
41
+ /** Reset/clear all configured SSH targets on the singleton instance */
42
+ reset: () => void;
40
43
  };
41
44
  //# sourceMappingURL=ssh.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ssh.d.ts","sourceRoot":"","sources":["../../src/primitives/ssh.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,mBAAmB,CAAA;AAEpD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAiED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;gBAE/C,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAM;IAIrD,IAAI,CACR,MAAM,EAAE,SAAS,EACjB,aAAa,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,CAAC;IA6Cf,EAAE,CACN,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;CA6BjB;AAKD,eAAO,MAAM,GAAG;mBACC,SAAS,WAAW,MAAM,cAAc,MAAM;iBAEhD,SAAS,WAAW,MAAM,gBAAgB,MAAM;8BAEnC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;CAE1D,CAAA"}
1
+ {"version":3,"file":"ssh.d.ts","sourceRoot":"","sources":["../../src/primitives/ssh.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,mBAAmB,CAAA;AAEpD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAmED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;gBAE/C,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAM;IAIrD,IAAI,CACR,MAAM,EAAE,SAAS,EACjB,aAAa,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,CAAC;IAoDf,EAAE,CACN,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;CAyCjB;AAMD,eAAO,MAAM,GAAG;mBACC,SAAS,WAAW,MAAM,cAAc,MAAM;iBAEhD,SAAS,WAAW,MAAM,gBAAgB,MAAM;8BAEnC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;2BAG5C,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,WAC1C,eAAe;IAQ1B,uEAAuE;;CAMxE,CAAA"}
@@ -3,6 +3,8 @@ import * as path from 'node:path';
3
3
  import { tmpdir } from 'node:os';
4
4
  import { execa } from 'execa';
5
5
  import { tryGetContext } from '../context/index.js';
6
+ import { maskString } from '../utils/mask.js';
7
+ import { getSecretValues, resolveEnv, runSubprocess } from './subprocess.js';
6
8
  function resolveTarget(target, configMap = {}) {
7
9
  if (typeof target !== 'string') {
8
10
  if (!target.host || !target.user) {
@@ -23,8 +25,10 @@ function resolveTarget(target, configMap = {}) {
23
25
  return {
24
26
  host,
25
27
  user: config.user,
26
- privateKeyFile: config.private_key_file,
28
+ privateKeyFile: config.privateKeyFile,
29
+ privateKey: config.privateKey,
27
30
  port: config.port,
31
+ connectTimeout: config.connectTimeout,
28
32
  tty: config.tty
29
33
  };
30
34
  }
@@ -59,9 +63,11 @@ export class SshClient {
59
63
  async exec(target, remoteCommand, remoteDir) {
60
64
  const ctx = tryGetContext();
61
65
  const config = resolveTarget(target, this.configMap);
66
+ const secrets = getSecretValues();
67
+ const maskedCmd = maskString(remoteCommand, secrets);
62
68
  if (ctx?.dryRun) {
63
- ctx.logger.info(`[DRY-RUN] SSH to ${config.user}@${config.host}: ${remoteCommand} (remoteDir: ${remoteDir ?? '~'})`);
64
- return { stdout: '[DRY-RUN] Remote command executed', stderr: '', exitCode: 0 };
69
+ ctx.logger.info(`[DRY-RUN] SSH to ${config.user}@${config.host}: ${maskedCmd} (remoteDir: ${remoteDir ?? '~'})`);
70
+ return { stdout: '', stderr: '', exitCode: 0, failed: false };
65
71
  }
66
72
  let tempKeyFile;
67
73
  try {
@@ -78,13 +84,17 @@ export class SshClient {
78
84
  ? `cd ${shellQuote(remoteDir)} || exit 1\n${remoteCommand}`
79
85
  : remoteCommand;
80
86
  args.push(script);
81
- ctx?.logger.info(`SSH (${config.user}@${config.host}) $ ${remoteCommand}`);
82
- const result = await execa('ssh', args, { reject: true });
83
- return {
84
- stdout: result.stdout ?? '',
85
- stderr: result.stderr ?? '',
86
- exitCode: result.exitCode ?? 0
87
- };
87
+ const displayCmd = `SSH (${config.user}@${config.host}) $ ${maskedCmd}`;
88
+ ctx?.logger?.info?.(displayCmd);
89
+ const subprocess = execa('ssh', args, { reject: true, env: resolveEnv() });
90
+ return await runSubprocess({
91
+ subprocess,
92
+ displayCmd,
93
+ cmdText: maskedCmd,
94
+ errorPrefix: 'SSH command',
95
+ reject: true,
96
+ secrets
97
+ });
88
98
  }
89
99
  finally {
90
100
  if (tempKeyFile) {
@@ -95,6 +105,7 @@ export class SshClient {
95
105
  async cp(target, srcFile, targetFolder) {
96
106
  const ctx = tryGetContext();
97
107
  const config = resolveTarget(target, this.configMap);
108
+ const secrets = getSecretValues();
98
109
  if (ctx?.dryRun) {
99
110
  ctx.logger.info(`[DRY-RUN] SCP: Copy ${srcFile} -> ${config.user}@${config.host}:${targetFolder}`);
100
111
  return;
@@ -108,8 +119,17 @@ export class SshClient {
108
119
  const args = connectionArgs(config, keyFile, '-P');
109
120
  args.push(srcFile);
110
121
  args.push(`${config.user}@${config.host}:${targetFolder}`);
111
- ctx?.logger.info(`SCP ${srcFile} -> ${config.user}@${config.host}:${targetFolder}`);
112
- await execa('scp', args, { reject: true });
122
+ const displayCmd = `SCP ${srcFile} -> ${config.user}@${config.host}:${targetFolder}`;
123
+ ctx?.logger?.info?.(displayCmd);
124
+ const subprocess = execa('scp', args, { reject: true, env: resolveEnv() });
125
+ await runSubprocess({
126
+ subprocess,
127
+ displayCmd,
128
+ cmdText: displayCmd,
129
+ errorPrefix: 'SCP',
130
+ reject: true,
131
+ secrets
132
+ });
113
133
  }
114
134
  finally {
115
135
  if (tempKeyFile) {
@@ -119,10 +139,25 @@ export class SshClient {
119
139
  }
120
140
  }
121
141
  /** Default singleton instance helper */
122
- const defaultClient = new SshClient();
142
+ const defaultClientConfigMap = {};
143
+ const defaultClient = new SshClient(defaultClientConfigMap);
123
144
  export const ssh = {
124
145
  exec: (target, command, remoteDir) => defaultClient.exec(target, command, remoteDir),
125
146
  cp: (target, srcFile, targetFolder) => defaultClient.cp(target, srcFile, targetFolder),
126
- createClient: (configMap) => new SshClient(configMap)
147
+ createClient: (configMap) => new SshClient(configMap),
148
+ configure: (nameOrMap, config) => {
149
+ if (typeof nameOrMap === 'string' && config) {
150
+ defaultClientConfigMap[nameOrMap] = config;
151
+ }
152
+ else if (typeof nameOrMap === 'object' && nameOrMap !== null) {
153
+ Object.assign(defaultClientConfigMap, nameOrMap);
154
+ }
155
+ },
156
+ /** Reset/clear all configured SSH targets on the singleton instance */
157
+ reset: () => {
158
+ for (const key of Object.keys(defaultClientConfigMap)) {
159
+ delete defaultClientConfigMap[key];
160
+ }
161
+ }
127
162
  };
128
163
  //# sourceMappingURL=ssh.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ssh.js","sourceRoot":"","sources":["../../src/primitives/ssh.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ssh.js","sourceRoot":"","sources":["../../src/primitives/ssh.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import fs from 'node:fs';
2
+ import { Transform } from 'node:stream';
3
+ import type { execa } from 'execa';
4
+ export interface SubprocessResult {
5
+ stdout: string;
6
+ stderr: string;
7
+ exitCode: number;
8
+ failed: boolean;
9
+ signal?: string;
10
+ }
11
+ export interface SubprocessRunOptions {
12
+ subprocess: ReturnType<typeof execa>;
13
+ displayCmd: string;
14
+ cmdText?: string;
15
+ errorPrefix?: string;
16
+ reject?: boolean;
17
+ secrets?: string[];
18
+ }
19
+ /**
20
+ * Resolve process.env merged with context.env and any explicit overrides.
21
+ */
22
+ export declare function resolveEnv(explicitEnv?: Record<string, string>): Record<string, string>;
23
+ /**
24
+ * Extract active secret values from execution context.
25
+ */
26
+ export declare function getSecretValues(): string[];
27
+ /**
28
+ * Create a stateful Transform stream that masks secrets across chunk boundaries.
29
+ * Retains up to maxSecretLen - 1 bytes in tail buffer to prevent boundary leaks.
30
+ */
31
+ export declare function createMaskTransform(secrets: string[]): Transform;
32
+ /**
33
+ * Prefix every line in the stream with a tag (e.g. PID).
34
+ */
35
+ export declare function createLinePrefixTransform(prefix: string): Transform;
36
+ /**
37
+ * Open appendable write stream to the log file, auto-creating directories.
38
+ */
39
+ export declare function openLogStream(logFile: string, logger?: {
40
+ warn?: (msg: string) => void;
41
+ }): fs.WriteStream | undefined;
42
+ /**
43
+ * Mask all known string and stdio properties on an ExecaError.
44
+ */
45
+ export declare function maskExecaError(thrownError: any, secrets: string[]): any;
46
+ export declare function resetCmdCounter(): void;
47
+ /**
48
+ * Unified subprocess runner: pipes stdout/stderr to logFile with PID prefix and masking,
49
+ * manages stream flushing, exit code logging, failure log level downgrade, and ExecaError masking.
50
+ */
51
+ export declare function runSubprocess(options: SubprocessRunOptions): Promise<SubprocessResult>;
52
+ //# sourceMappingURL=subprocess.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subprocess.d.ts","sourceRoot":"","sources":["../../src/primitives/subprocess.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAIlC,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,CAAA;IACpC,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUvF;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAU1C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,CA6ChE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CA0BnE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GAAG,EAAE,CAAC,WAAW,GAAG,SAAS,CAmBpH;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,GAAG,CAsBvE;AAID,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+L5F"}
@@ -0,0 +1,353 @@
1
+ import path from 'node:path';
2
+ import fs from 'node:fs';
3
+ import { Transform } from 'node:stream';
4
+ import { tryGetContext } from '../context/index.js';
5
+ import { isSecretKey, maskString } from '../utils/mask.js';
6
+ /**
7
+ * Resolve process.env merged with context.env and any explicit overrides.
8
+ */
9
+ export function resolveEnv(explicitEnv) {
10
+ const ctx = tryGetContext();
11
+ const base = { ...process.env };
12
+ if (ctx?.env) {
13
+ Object.assign(base, ctx.env);
14
+ }
15
+ if (explicitEnv) {
16
+ Object.assign(base, explicitEnv);
17
+ }
18
+ return base;
19
+ }
20
+ /**
21
+ * Extract active secret values from execution context.
22
+ */
23
+ export function getSecretValues() {
24
+ const ctx = tryGetContext();
25
+ if (!ctx?.env)
26
+ return [];
27
+ const secrets = [];
28
+ for (const [k, v] of Object.entries(ctx.env)) {
29
+ if (isSecretKey(k) && typeof v === 'string' && v.length >= 3) {
30
+ secrets.push(v);
31
+ }
32
+ }
33
+ return secrets;
34
+ }
35
+ /**
36
+ * Create a stateful Transform stream that masks secrets across chunk boundaries.
37
+ * Retains up to maxSecretLen - 1 bytes in tail buffer to prevent boundary leaks.
38
+ */
39
+ export function createMaskTransform(secrets) {
40
+ const activeSecrets = secrets
41
+ .filter(s => typeof s === 'string' && s.length >= 3)
42
+ .flatMap(s => s.includes('\n') ? s.split(/\r?\n/).map(l => l.trim()).filter(l => l.length >= 3) : [s]);
43
+ if (activeSecrets.length === 0) {
44
+ return new Transform({
45
+ transform(chunk, _encoding, callback) {
46
+ callback(null, chunk);
47
+ }
48
+ });
49
+ }
50
+ // Sort descending by length so longer matches are prioritized
51
+ activeSecrets.sort((a, b) => b.length - a.length);
52
+ const maxSecretLen = Math.max(...activeSecrets.map(s => s.length));
53
+ const keepLen = Math.max(0, maxSecretLen - 1);
54
+ let tail = '';
55
+ return new Transform({
56
+ transform(chunk, _encoding, callback) {
57
+ const text = tail + chunk.toString('utf8');
58
+ const masked = maskString(text, activeSecrets);
59
+ if (masked.length > keepLen) {
60
+ const emitLen = masked.length - keepLen;
61
+ const toEmit = masked.slice(0, emitLen);
62
+ tail = masked.slice(emitLen);
63
+ callback(null, Buffer.from(toEmit, 'utf8'));
64
+ }
65
+ else {
66
+ tail = masked;
67
+ callback();
68
+ }
69
+ },
70
+ flush(callback) {
71
+ if (tail.length > 0) {
72
+ const finalMasked = maskString(tail, activeSecrets);
73
+ tail = '';
74
+ callback(null, Buffer.from(finalMasked, 'utf8'));
75
+ }
76
+ else {
77
+ callback();
78
+ }
79
+ }
80
+ });
81
+ }
82
+ /**
83
+ * Prefix every line in the stream with a tag (e.g. PID).
84
+ */
85
+ export function createLinePrefixTransform(prefix) {
86
+ if (!prefix) {
87
+ return new Transform({
88
+ transform(chunk, _encoding, callback) {
89
+ callback(null, chunk);
90
+ }
91
+ });
92
+ }
93
+ let remainder = '';
94
+ return new Transform({
95
+ transform(chunk, _encoding, callback) {
96
+ const text = remainder + chunk.toString('utf8');
97
+ const lines = text.split('\n');
98
+ remainder = lines.pop() ?? '';
99
+ const out = lines.map(l => `${prefix}${l}\n`).join('');
100
+ callback(null, Buffer.from(out, 'utf8'));
101
+ },
102
+ flush(callback) {
103
+ if (remainder.length > 0) {
104
+ callback(null, Buffer.from(`${prefix}${remainder}\n`, 'utf8'));
105
+ }
106
+ else {
107
+ callback();
108
+ }
109
+ }
110
+ });
111
+ }
112
+ /**
113
+ * Open appendable write stream to the log file, auto-creating directories.
114
+ */
115
+ export function openLogStream(logFile, logger) {
116
+ try {
117
+ const logDir = path.dirname(logFile);
118
+ if (!fs.existsSync(logDir)) {
119
+ fs.mkdirSync(logDir, { recursive: true });
120
+ }
121
+ if (fs.existsSync(logFile) && fs.statSync(logFile).isDirectory()) {
122
+ logger?.warn?.(`Failed to open logFile ${logFile}: path is a directory`);
123
+ return undefined;
124
+ }
125
+ const logStream = fs.createWriteStream(logFile, { flags: 'a' });
126
+ logStream.on('error', (err) => {
127
+ logger?.warn?.(`Failed to write to logFile ${logFile}: ${err.message}`);
128
+ });
129
+ return logStream;
130
+ }
131
+ catch (err) {
132
+ logger?.warn?.(`Failed to open logFile ${logFile}: ${err?.message}`);
133
+ return undefined;
134
+ }
135
+ }
136
+ /**
137
+ * Mask all known string and stdio properties on an ExecaError.
138
+ */
139
+ export function maskExecaError(thrownError, secrets) {
140
+ if (!thrownError)
141
+ return thrownError;
142
+ if (secrets.length > 0) {
143
+ const props = ['message', 'shortMessage', 'originalMessage', 'command', 'escapedCommand', 'stack', 'all'];
144
+ for (const prop of props) {
145
+ if (typeof thrownError[prop] === 'string') {
146
+ thrownError[prop] = maskString(thrownError[prop], secrets);
147
+ }
148
+ }
149
+ if (Array.isArray(thrownError.stdio)) {
150
+ thrownError.stdio = thrownError.stdio.map((item) => {
151
+ if (typeof item === 'string') {
152
+ return maskString(item, secrets);
153
+ }
154
+ if (item && typeof item.toString === 'function' && Buffer.isBuffer(item)) {
155
+ return Buffer.from(maskString(item.toString('utf-8'), secrets));
156
+ }
157
+ return item;
158
+ });
159
+ }
160
+ }
161
+ return thrownError;
162
+ }
163
+ let cmdCounter = 0;
164
+ export function resetCmdCounter() {
165
+ cmdCounter = 0;
166
+ }
167
+ /**
168
+ * Unified subprocess runner: pipes stdout/stderr to logFile with PID prefix and masking,
169
+ * manages stream flushing, exit code logging, failure log level downgrade, and ExecaError masking.
170
+ */
171
+ export async function runSubprocess(options) {
172
+ const { subprocess, displayCmd, reject = true } = options;
173
+ const ctx = tryGetContext();
174
+ const secrets = options.secrets ?? getSecretValues();
175
+ const pid = subprocess.pid;
176
+ const pidTag = pid ? `[PID ${pid}] ` : `[CMD ${++cmdCounter}] `;
177
+ const cmdText = options.cmdText ?? displayCmd;
178
+ const errorPrefix = options.errorPrefix ?? 'Command';
179
+ let logStream;
180
+ if (ctx?.logFile) {
181
+ logStream = openLogStream(ctx.logFile, ctx.logger);
182
+ }
183
+ if (logStream && !logStream.destroyed && logStream.writable) {
184
+ try {
185
+ logStream.write(`${pidTag}${displayCmd}\n`);
186
+ }
187
+ catch { }
188
+ }
189
+ let lineStdout;
190
+ let lineStderr;
191
+ const streamDone = [];
192
+ const unpipeAndDrain = () => {
193
+ if (lineStdout && logStream) {
194
+ try {
195
+ lineStdout.unpipe(logStream);
196
+ lineStdout.resume();
197
+ }
198
+ catch { }
199
+ }
200
+ if (lineStderr && logStream) {
201
+ try {
202
+ lineStderr.unpipe(logStream);
203
+ lineStderr.resume();
204
+ }
205
+ catch { }
206
+ }
207
+ };
208
+ if (logStream) {
209
+ logStream.on('error', unpipeAndDrain);
210
+ logStream.on('close', unpipeAndDrain);
211
+ }
212
+ if (subprocess.stdout && logStream) {
213
+ const maskStdout = createMaskTransform(secrets);
214
+ lineStdout = createLinePrefixTransform(pidTag);
215
+ maskStdout.pipe(lineStdout).pipe(logStream, { end: false });
216
+ subprocess.stdout.pipe(maskStdout);
217
+ streamDone.push(new Promise(resolve => {
218
+ let resolved = false;
219
+ const done = () => {
220
+ if (!resolved) {
221
+ resolved = true;
222
+ resolve();
223
+ }
224
+ };
225
+ lineStdout.once('end', done);
226
+ lineStdout.once('close', done);
227
+ lineStdout.once('error', done);
228
+ if (logStream) {
229
+ logStream.once('error', done);
230
+ logStream.once('close', done);
231
+ }
232
+ }));
233
+ }
234
+ if (subprocess.stderr && logStream) {
235
+ const maskStderr = createMaskTransform(secrets);
236
+ lineStderr = createLinePrefixTransform(pidTag);
237
+ maskStderr.pipe(lineStderr).pipe(logStream, { end: false });
238
+ subprocess.stderr.pipe(maskStderr);
239
+ streamDone.push(new Promise(resolve => {
240
+ let resolved = false;
241
+ const done = () => {
242
+ if (!resolved) {
243
+ resolved = true;
244
+ resolve();
245
+ }
246
+ };
247
+ lineStderr.once('end', done);
248
+ lineStderr.once('close', done);
249
+ lineStderr.once('error', done);
250
+ if (logStream) {
251
+ logStream.once('error', done);
252
+ logStream.once('close', done);
253
+ }
254
+ }));
255
+ }
256
+ let execResult;
257
+ let thrownError;
258
+ try {
259
+ execResult = await subprocess;
260
+ }
261
+ catch (err) {
262
+ thrownError = err;
263
+ execResult = err;
264
+ }
265
+ // Always wait for stream completion regardless of subprocess exit status, with timeout safety
266
+ if (streamDone.length > 0) {
267
+ let timeoutId;
268
+ const drainTimeout = new Promise(resolve => {
269
+ timeoutId = setTimeout(resolve, 3000);
270
+ timeoutId.unref?.();
271
+ });
272
+ await Promise.race([Promise.all(streamDone), drainTimeout]);
273
+ if (timeoutId) {
274
+ clearTimeout(timeoutId);
275
+ }
276
+ }
277
+ try {
278
+ const isFailed = Boolean(execResult.failed || (execResult.exitCode !== undefined && execResult.exitCode !== 0));
279
+ let exitCode = execResult.exitCode;
280
+ if (exitCode === undefined) {
281
+ exitCode = isFailed ? -1 : 0;
282
+ }
283
+ if (logStream && !logStream.destroyed && logStream.writable) {
284
+ try {
285
+ logStream.write(`${pidTag}[Process exited with code ${exitCode}]\n`);
286
+ }
287
+ catch { }
288
+ }
289
+ if (isFailed) {
290
+ if (reject === false) {
291
+ ctx?.logger?.debug?.(`${errorPrefix} exited with code ${exitCode} (reject: false): ${cmdText}`);
292
+ }
293
+ else {
294
+ ctx?.logger?.error?.(`${errorPrefix} failed with exit code ${exitCode}: ${cmdText}`);
295
+ }
296
+ }
297
+ const rawStdout = typeof execResult.stdout === 'string' ? execResult.stdout : (execResult.stdout ? String(execResult.stdout) : '');
298
+ const rawStderr = typeof execResult.stderr === 'string' ? execResult.stderr : (execResult.stderr ? String(execResult.stderr) : '');
299
+ const stdout = secrets.length > 0 ? maskString(rawStdout, secrets) : rawStdout;
300
+ const stderr = secrets.length > 0 ? maskString(rawStderr, secrets) : rawStderr;
301
+ if (thrownError) {
302
+ maskExecaError(thrownError, secrets);
303
+ thrownError.stdout = stdout;
304
+ thrownError.stderr = stderr;
305
+ thrownError.exitCode = exitCode;
306
+ thrownError.failed = true;
307
+ if (reject === false) {
308
+ return {
309
+ stdout,
310
+ stderr,
311
+ exitCode,
312
+ failed: true,
313
+ signal: execResult.signal
314
+ };
315
+ }
316
+ throw thrownError;
317
+ }
318
+ return {
319
+ stdout,
320
+ stderr,
321
+ exitCode,
322
+ failed: isFailed,
323
+ signal: execResult.signal
324
+ };
325
+ }
326
+ finally {
327
+ if (logStream) {
328
+ await new Promise(resolve => {
329
+ if (logStream.destroyed || logStream.closed || !logStream.writable) {
330
+ resolve();
331
+ return;
332
+ }
333
+ let settled = false;
334
+ let timer;
335
+ const done = () => {
336
+ if (!settled) {
337
+ settled = true;
338
+ if (timer) {
339
+ clearTimeout(timer);
340
+ }
341
+ resolve();
342
+ }
343
+ };
344
+ timer = setTimeout(done, 1000);
345
+ timer.unref?.();
346
+ logStream.once('error', done);
347
+ logStream.once('close', done);
348
+ logStream.end(done);
349
+ });
350
+ }
351
+ }
352
+ }
353
+ //# sourceMappingURL=subprocess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subprocess.js","sourceRoot":"","sources":["../../src/primitives/subprocess.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { ToolchainProvider, DetectionResult, ProjectInfo } from '../types.js';
2
2
  export declare class GradleToolchain implements ToolchainProvider {
3
3
  readonly name = "gradle";
4
- readonly priority = 10;
4
+ readonly priority: number;
5
5
  detect(projectDir: string): Promise<DetectionResult | null>;
6
6
  projectInfo(projectDir: string): Promise<ProjectInfo>;
7
7
  install(projectDir: string, _flags?: string[]): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"GradleToolchain.d.ts","sourceRoot":"","sources":["../../../src/toolchain/providers/GradleToolchain.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AA8BlF,qBAAa,eAAgB,YAAW,iBAAiB;IACvD,QAAQ,CAAC,IAAI,YAAW;IACxB,QAAQ,CAAC,QAAQ,MAAK;IAEhB,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAY3D,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAkBrD,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9D,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAKlE,UAAU;YAUV,aAAa;YAgBb,WAAW;YAgBX,UAAU;CAUzB"}
1
+ {"version":3,"file":"GradleToolchain.d.ts","sourceRoot":"","sources":["../../../src/toolchain/providers/GradleToolchain.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AA8BlF,qBAAa,eAAgB,YAAW,iBAAiB;IACvD,QAAQ,CAAC,IAAI,YAAW;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAK;IAExB,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAY3D,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAqBrD,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9D,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAKlE,UAAU;YAUV,aAAa;YAgBb,WAAW;YAgBX,UAAU;CAUzB"}