@eldrforge/kodrdriv 0.0.51 → 1.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 (85) hide show
  1. package/README.md +3 -1
  2. package/dist/application.js +29 -5
  3. package/dist/application.js.map +1 -1
  4. package/dist/arguments.js +187 -75
  5. package/dist/arguments.js.map +1 -1
  6. package/dist/commands/audio-commit.js +35 -14
  7. package/dist/commands/audio-commit.js.map +1 -1
  8. package/dist/commands/audio-review.js +41 -20
  9. package/dist/commands/audio-review.js.map +1 -1
  10. package/dist/commands/clean.js +2 -2
  11. package/dist/commands/clean.js.map +1 -1
  12. package/dist/commands/commit.js +369 -47
  13. package/dist/commands/commit.js.map +1 -1
  14. package/dist/commands/development.js +264 -0
  15. package/dist/commands/development.js.map +1 -0
  16. package/dist/commands/link.js +357 -182
  17. package/dist/commands/link.js.map +1 -1
  18. package/dist/commands/publish.js +419 -306
  19. package/dist/commands/publish.js.map +1 -1
  20. package/dist/commands/release.js +240 -18
  21. package/dist/commands/release.js.map +1 -1
  22. package/dist/commands/review.js +56 -40
  23. package/dist/commands/review.js.map +1 -1
  24. package/dist/commands/select-audio.js +4 -4
  25. package/dist/commands/select-audio.js.map +1 -1
  26. package/dist/commands/tree.js +779 -40
  27. package/dist/commands/tree.js.map +1 -1
  28. package/dist/commands/unlink.js +267 -372
  29. package/dist/commands/unlink.js.map +1 -1
  30. package/dist/commands/versions.js +224 -0
  31. package/dist/commands/versions.js.map +1 -0
  32. package/dist/constants.js +50 -12
  33. package/dist/constants.js.map +1 -1
  34. package/dist/content/diff.js +122 -1
  35. package/dist/content/diff.js.map +1 -1
  36. package/dist/content/files.js +192 -0
  37. package/dist/content/files.js.map +1 -0
  38. package/dist/content/issues.js +17 -46
  39. package/dist/content/issues.js.map +1 -1
  40. package/dist/content/log.js +16 -0
  41. package/dist/content/log.js.map +1 -1
  42. package/dist/logging.js +3 -3
  43. package/dist/logging.js.map +1 -1
  44. package/dist/main.js +0 -0
  45. package/dist/prompt/commit.js +11 -4
  46. package/dist/prompt/commit.js.map +1 -1
  47. package/dist/prompt/instructions/commit.md +20 -2
  48. package/dist/prompt/instructions/release.md +27 -10
  49. package/dist/prompt/instructions/review.md +75 -8
  50. package/dist/prompt/release.js +15 -7
  51. package/dist/prompt/release.js.map +1 -1
  52. package/dist/prompt/review.js +2 -2
  53. package/dist/prompt/review.js.map +1 -1
  54. package/dist/types.js +36 -7
  55. package/dist/types.js.map +1 -1
  56. package/dist/util/child.js +146 -4
  57. package/dist/util/child.js.map +1 -1
  58. package/dist/util/countdown.js +215 -0
  59. package/dist/util/countdown.js.map +1 -0
  60. package/dist/util/general.js +157 -13
  61. package/dist/util/general.js.map +1 -1
  62. package/dist/util/git.js +587 -0
  63. package/dist/util/git.js.map +1 -0
  64. package/dist/util/github.js +531 -11
  65. package/dist/util/github.js.map +1 -1
  66. package/dist/util/interactive.js +463 -0
  67. package/dist/util/interactive.js.map +1 -0
  68. package/dist/util/openai.js +152 -25
  69. package/dist/util/openai.js.map +1 -1
  70. package/dist/util/performance.js +5 -73
  71. package/dist/util/performance.js.map +1 -1
  72. package/dist/util/safety.js +4 -4
  73. package/dist/util/safety.js.map +1 -1
  74. package/dist/util/storage.js +30 -3
  75. package/dist/util/storage.js.map +1 -1
  76. package/dist/util/validation.js +1 -25
  77. package/dist/util/validation.js.map +1 -1
  78. package/package.json +12 -10
  79. package/test-increment.js +0 -0
  80. package/test-multiline/cli/package.json +8 -0
  81. package/test-multiline/core/package.json +5 -0
  82. package/test-multiline/mobile/package.json +8 -0
  83. package/test-multiline/web/package.json +8 -0
  84. package/dist/util/npmOptimizations.js +0 -174
  85. package/dist/util/npmOptimizations.js.map +0 -1
@@ -1,9 +1,9 @@
1
1
  import { recipe } from '@riotprompt/riotprompt';
2
- import path from 'path';
2
+ import path__default from 'path';
3
3
  import { fileURLToPath } from 'url';
4
4
 
5
5
  const __filename = fileURLToPath(import.meta.url);
6
- const __dirname = path.dirname(__filename);
6
+ const __dirname = path__default.dirname(__filename);
7
7
  /**
8
8
  * Build a review prompt using RiotPrompt Recipes.
9
9
  */ const createPrompt = async ({ overridePaths: _overridePaths, overrides: _overrides }, { notes }, { logContext, diffContext, releaseNotesContext, issuesContext, context, directories } = {})=>{
@@ -1 +1 @@
1
- {"version":3,"file":"review.js","sources":["../../src/prompt/review.ts"],"sourcesContent":["import { ContentItem, Prompt, recipe } from '@riotprompt/riotprompt';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nexport type Config = {\n overridePaths?: string[];\n overrides?: boolean;\n}\n\nexport type Content = {\n notes: string;\n};\n\nexport type Context = {\n logContext?: string;\n diffContext?: string;\n releaseNotesContext?: string;\n issuesContext?: string;\n context?: string;\n directories?: string[];\n};\n\n/**\n * Build a review prompt using RiotPrompt Recipes.\n */\nexport const createPrompt = async (\n { overridePaths: _overridePaths, overrides: _overrides }: Config,\n { notes }: Content,\n { logContext, diffContext, releaseNotesContext, issuesContext, context, directories }: Context = {}\n): Promise<Prompt> => {\n const basePath = __dirname;\n\n // Build content items for the prompt\n const contentItems: ContentItem[] = [];\n const contextItems: ContentItem[] = [];\n\n if (notes) {\n contentItems.push({ content: notes, title: 'Review Notes' });\n }\n\n if (logContext) {\n contextItems.push({ content: logContext, title: 'Log Context' });\n }\n if (diffContext) {\n contextItems.push({ content: diffContext, title: 'Diff Context' });\n }\n if (releaseNotesContext) {\n contextItems.push({ content: releaseNotesContext, title: 'Release Notes Context' });\n }\n if (issuesContext) {\n contextItems.push({ content: issuesContext, title: 'Issues Context' });\n }\n if (context) {\n contextItems.push({ content: context, title: 'User Context' });\n }\n if (directories && directories.length > 0) {\n contextItems.push({ directories, title: 'Directories' });\n }\n\n return recipe(basePath)\n .persona({ path: 'personas/you.md' })\n .instructions({ path: 'instructions/review.md' })\n .overridePaths(_overridePaths ?? [])\n .overrides(_overrides ?? true)\n .content(...contentItems)\n .context(...contextItems)\n .cook();\n}; "],"names":["__filename","fileURLToPath","url","__dirname","path","dirname","createPrompt","overridePaths","_overridePaths","overrides","_overrides","notes","logContext","diffContext","releaseNotesContext","issuesContext","context","directories","basePath","contentItems","contextItems","push","content","title","length","recipe","persona","instructions","cook"],"mappings":";;;;AAIA,MAAMA,UAAAA,GAAaC,aAAAA,CAAc,MAAA,CAAA,IAAA,CAAYC,GAAG,CAAA;AAChD,MAAMC,SAAAA,GAAYC,IAAAA,CAAKC,OAAO,CAACL,UAAAA,CAAAA;AAoB/B;;AAEC,IACM,MAAMM,YAAAA,GAAe,OACxB,EAAEC,aAAAA,EAAeC,cAAc,EAAEC,SAAAA,EAAWC,UAAU,EAAU,EAChE,EAAEC,KAAK,EAAW,EAClB,EAAEC,UAAU,EAAEC,WAAW,EAAEC,mBAAmB,EAAEC,aAAa,EAAEC,OAAO,EAAEC,WAAW,EAAW,GAAG,EAAE,GAAA;AAEnG,IAAA,MAAMC,QAAAA,GAAWf,SAAAA;;AAGjB,IAAA,MAAMgB,eAA8B,EAAE;AACtC,IAAA,MAAMC,eAA8B,EAAE;AAEtC,IAAA,IAAIT,KAAAA,EAAO;AACPQ,QAAAA,YAAAA,CAAaE,IAAI,CAAC;YAAEC,OAAAA,EAASX,KAAAA;YAAOY,KAAAA,EAAO;AAAe,SAAA,CAAA;AAC9D,IAAA;AAEA,IAAA,IAAIX,UAAAA,EAAY;AACZQ,QAAAA,YAAAA,CAAaC,IAAI,CAAC;YAAEC,OAAAA,EAASV,UAAAA;YAAYW,KAAAA,EAAO;AAAc,SAAA,CAAA;AAClE,IAAA;AACA,IAAA,IAAIV,WAAAA,EAAa;AACbO,QAAAA,YAAAA,CAAaC,IAAI,CAAC;YAAEC,OAAAA,EAAST,WAAAA;YAAaU,KAAAA,EAAO;AAAe,SAAA,CAAA;AACpE,IAAA;AACA,IAAA,IAAIT,mBAAAA,EAAqB;AACrBM,QAAAA,YAAAA,CAAaC,IAAI,CAAC;YAAEC,OAAAA,EAASR,mBAAAA;YAAqBS,KAAAA,EAAO;AAAwB,SAAA,CAAA;AACrF,IAAA;AACA,IAAA,IAAIR,aAAAA,EAAe;AACfK,QAAAA,YAAAA,CAAaC,IAAI,CAAC;YAAEC,OAAAA,EAASP,aAAAA;YAAeQ,KAAAA,EAAO;AAAiB,SAAA,CAAA;AACxE,IAAA;AACA,IAAA,IAAIP,OAAAA,EAAS;AACTI,QAAAA,YAAAA,CAAaC,IAAI,CAAC;YAAEC,OAAAA,EAASN,OAAAA;YAASO,KAAAA,EAAO;AAAe,SAAA,CAAA;AAChE,IAAA;AACA,IAAA,IAAIN,WAAAA,IAAeA,WAAAA,CAAYO,MAAM,GAAG,CAAA,EAAG;AACvCJ,QAAAA,YAAAA,CAAaC,IAAI,CAAC;AAAEJ,YAAAA,WAAAA;YAAaM,KAAAA,EAAO;AAAc,SAAA,CAAA;AAC1D,IAAA;IAEA,OAAOE,MAAAA,CAAOP,QAAAA,CAAAA,CACTQ,OAAO,CAAC;QAAEtB,IAAAA,EAAM;AAAkB,KAAA,CAAA,CAClCuB,YAAY,CAAC;QAAEvB,IAAAA,EAAM;AAAyB,KAAA,CAAA,CAC9CG,aAAa,CAACC,cAAAA,KAAAA,IAAAA,IAAAA,4BAAAA,cAAAA,GAAkB,EAAE,EAClCC,SAAS,CAACC,uBAAAA,UAAAA,KAAAA,MAAAA,GAAAA,UAAAA,GAAc,MACxBY,OAAO,CAAA,GAAIH,cACXH,OAAO,CAAA,GAAII,cACXQ,IAAI,EAAA;AACb;;;;"}
1
+ {"version":3,"file":"review.js","sources":["../../src/prompt/review.ts"],"sourcesContent":["import { ContentItem, Prompt, recipe } from '@riotprompt/riotprompt';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nexport type Config = {\n overridePaths?: string[];\n overrides?: boolean;\n}\n\nexport type Content = {\n notes: string;\n};\n\nexport type Context = {\n logContext?: string;\n diffContext?: string;\n releaseNotesContext?: string;\n issuesContext?: string;\n context?: string;\n directories?: string[];\n};\n\n/**\n * Build a review prompt using RiotPrompt Recipes.\n */\nexport const createPrompt = async (\n { overridePaths: _overridePaths, overrides: _overrides }: Config,\n { notes }: Content,\n { logContext, diffContext, releaseNotesContext, issuesContext, context, directories }: Context = {}\n): Promise<Prompt> => {\n const basePath = __dirname;\n\n // Build content items for the prompt\n const contentItems: ContentItem[] = [];\n const contextItems: ContentItem[] = [];\n\n if (notes) {\n contentItems.push({ content: notes, title: 'Review Notes' });\n }\n\n if (logContext) {\n contextItems.push({ content: logContext, title: 'Log Context' });\n }\n if (diffContext) {\n contextItems.push({ content: diffContext, title: 'Diff Context' });\n }\n if (releaseNotesContext) {\n contextItems.push({ content: releaseNotesContext, title: 'Release Notes Context' });\n }\n if (issuesContext) {\n contextItems.push({ content: issuesContext, title: 'Issues Context' });\n }\n if (context) {\n contextItems.push({ content: context, title: 'User Context' });\n }\n if (directories && directories.length > 0) {\n contextItems.push({ directories, title: 'Directories' });\n }\n\n return recipe(basePath)\n .persona({ path: 'personas/you.md' })\n .instructions({ path: 'instructions/review.md' })\n .overridePaths(_overridePaths ?? [])\n .overrides(_overrides ?? true)\n .content(...contentItems)\n .context(...contextItems)\n .cook();\n}; "],"names":["__filename","fileURLToPath","url","__dirname","path","dirname","createPrompt","overridePaths","_overridePaths","overrides","_overrides","notes","logContext","diffContext","releaseNotesContext","issuesContext","context","directories","basePath","contentItems","contextItems","push","content","title","length","recipe","persona","instructions","cook"],"mappings":";;;;AAIA,MAAMA,UAAAA,GAAaC,aAAAA,CAAc,MAAA,CAAA,IAAA,CAAYC,GAAG,CAAA;AAChD,MAAMC,SAAAA,GAAYC,aAAAA,CAAKC,OAAO,CAACL,UAAAA,CAAAA;AAoB/B;;AAEC,IACM,MAAMM,YAAAA,GAAe,OACxB,EAAEC,aAAAA,EAAeC,cAAc,EAAEC,SAAAA,EAAWC,UAAU,EAAU,EAChE,EAAEC,KAAK,EAAW,EAClB,EAAEC,UAAU,EAAEC,WAAW,EAAEC,mBAAmB,EAAEC,aAAa,EAAEC,OAAO,EAAEC,WAAW,EAAW,GAAG,EAAE,GAAA;AAEnG,IAAA,MAAMC,QAAAA,GAAWf,SAAAA;;AAGjB,IAAA,MAAMgB,eAA8B,EAAE;AACtC,IAAA,MAAMC,eAA8B,EAAE;AAEtC,IAAA,IAAIT,KAAAA,EAAO;AACPQ,QAAAA,YAAAA,CAAaE,IAAI,CAAC;YAAEC,OAAAA,EAASX,KAAAA;YAAOY,KAAAA,EAAO;AAAe,SAAA,CAAA;AAC9D,IAAA;AAEA,IAAA,IAAIX,UAAAA,EAAY;AACZQ,QAAAA,YAAAA,CAAaC,IAAI,CAAC;YAAEC,OAAAA,EAASV,UAAAA;YAAYW,KAAAA,EAAO;AAAc,SAAA,CAAA;AAClE,IAAA;AACA,IAAA,IAAIV,WAAAA,EAAa;AACbO,QAAAA,YAAAA,CAAaC,IAAI,CAAC;YAAEC,OAAAA,EAAST,WAAAA;YAAaU,KAAAA,EAAO;AAAe,SAAA,CAAA;AACpE,IAAA;AACA,IAAA,IAAIT,mBAAAA,EAAqB;AACrBM,QAAAA,YAAAA,CAAaC,IAAI,CAAC;YAAEC,OAAAA,EAASR,mBAAAA;YAAqBS,KAAAA,EAAO;AAAwB,SAAA,CAAA;AACrF,IAAA;AACA,IAAA,IAAIR,aAAAA,EAAe;AACfK,QAAAA,YAAAA,CAAaC,IAAI,CAAC;YAAEC,OAAAA,EAASP,aAAAA;YAAeQ,KAAAA,EAAO;AAAiB,SAAA,CAAA;AACxE,IAAA;AACA,IAAA,IAAIP,OAAAA,EAAS;AACTI,QAAAA,YAAAA,CAAaC,IAAI,CAAC;YAAEC,OAAAA,EAASN,OAAAA;YAASO,KAAAA,EAAO;AAAe,SAAA,CAAA;AAChE,IAAA;AACA,IAAA,IAAIN,WAAAA,IAAeA,WAAAA,CAAYO,MAAM,GAAG,CAAA,EAAG;AACvCJ,QAAAA,YAAAA,CAAaC,IAAI,CAAC;AAAEJ,YAAAA,WAAAA;YAAaM,KAAAA,EAAO;AAAc,SAAA,CAAA;AAC1D,IAAA;IAEA,OAAOE,MAAAA,CAAOP,QAAAA,CAAAA,CACTQ,OAAO,CAAC;QAAEtB,IAAAA,EAAM;AAAkB,KAAA,CAAA,CAClCuB,YAAY,CAAC;QAAEvB,IAAAA,EAAM;AAAyB,KAAA,CAAA,CAC9CG,aAAa,CAACC,cAAAA,KAAAA,IAAAA,IAAAA,4BAAAA,cAAAA,GAAkB,EAAE,EAClCC,SAAS,CAACC,uBAAAA,UAAAA,KAAAA,MAAAA,GAAAA,UAAAA,GAAc,MACxBY,OAAO,CAAA,GAAIH,cACXH,OAAO,CAAA,GAAII,cACXQ,IAAI,EAAA;AACb;;;;"}
package/dist/types.js CHANGED
@@ -13,10 +13,14 @@ const ConfigSchema = z.object({
13
13
  add: z.boolean().optional(),
14
14
  cached: z.boolean().optional(),
15
15
  sendit: z.boolean().optional(),
16
+ interactive: z.boolean().optional(),
17
+ amend: z.boolean().optional(),
16
18
  messageLimit: z.number().optional(),
17
19
  context: z.string().optional(),
18
20
  direction: z.string().optional(),
19
- skipFileCheck: z.boolean().optional()
21
+ skipFileCheck: z.boolean().optional(),
22
+ maxDiffBytes: z.number().optional(),
23
+ model: z.string().optional()
20
24
  }).optional(),
21
25
  audioCommit: z.object({
22
26
  maxRecordingTime: z.number().optional(),
@@ -29,7 +33,11 @@ const ConfigSchema = z.object({
29
33
  to: z.string().optional(),
30
34
  messageLimit: z.number().optional(),
31
35
  context: z.string().optional(),
32
- focus: z.string().optional()
36
+ interactive: z.boolean().optional(),
37
+ focus: z.string().optional(),
38
+ maxDiffBytes: z.number().optional(),
39
+ model: z.string().optional(),
40
+ noMilestones: z.boolean().optional()
33
41
  }).optional(),
34
42
  review: z.object({
35
43
  includeCommitHistory: z.boolean().optional(),
@@ -44,7 +52,8 @@ const ConfigSchema = z.object({
44
52
  sendit: z.boolean().optional(),
45
53
  note: z.string().optional(),
46
54
  editorTimeout: z.number().optional(),
47
- maxContextErrors: z.number().optional()
55
+ maxContextErrors: z.number().optional(),
56
+ model: z.string().optional()
48
57
  }).optional(),
49
58
  audioReview: z.object({
50
59
  includeCommitHistory: z.boolean().optional(),
@@ -69,34 +78,54 @@ const ConfigSchema = z.object({
69
78
  'squash',
70
79
  'rebase'
71
80
  ]).optional(),
81
+ from: z.string().optional(),
82
+ targetVersion: z.string().optional(),
83
+ interactive: z.boolean().optional(),
72
84
  dependencyUpdatePatterns: z.array(z.string()).optional(),
73
85
  requiredEnvVars: z.array(z.string()).optional(),
74
86
  linkWorkspacePackages: z.boolean().optional(),
75
87
  unlinkWorkspacePackages: z.boolean().optional(),
76
88
  checksTimeout: z.number().optional(),
77
89
  skipUserConfirmation: z.boolean().optional(),
90
+ syncTarget: z.boolean().optional(),
78
91
  sendit: z.boolean().optional(),
79
92
  waitForReleaseWorkflows: z.boolean().optional(),
80
93
  releaseWorkflowsTimeout: z.number().optional(),
81
- releaseWorkflowNames: z.array(z.string()).optional()
94
+ releaseWorkflowNames: z.array(z.string()).optional(),
95
+ targetBranch: z.string().optional(),
96
+ noMilestones: z.boolean().optional()
82
97
  }).optional(),
83
98
  link: z.object({
84
99
  scopeRoots: z.record(z.string(), z.string()).optional(),
85
- dryRun: z.boolean().optional()
100
+ dryRun: z.boolean().optional(),
101
+ packageArgument: z.string().optional()
86
102
  }).optional(),
87
103
  unlink: z.object({
88
104
  scopeRoots: z.record(z.string(), z.string()).optional(),
89
105
  workspaceFile: z.string().optional(),
90
106
  dryRun: z.boolean().optional(),
91
- cleanNodeModules: z.boolean().optional()
107
+ cleanNodeModules: z.boolean().optional(),
108
+ packageArgument: z.string().optional()
92
109
  }).optional(),
93
110
  tree: z.object({
94
111
  directories: z.array(z.string()).optional(),
95
112
  excludedPatterns: z.array(z.string()).optional(),
96
113
  startFrom: z.string().optional(),
114
+ stopAt: z.string().optional(),
97
115
  cmd: z.string().optional(),
98
116
  parallel: z.boolean().optional(),
99
- builtInCommand: z.string().optional()
117
+ builtInCommand: z.string().optional(),
118
+ continue: z.boolean().optional(),
119
+ packageArgument: z.string().optional(),
120
+ cleanNodeModules: z.boolean().optional()
121
+ }).optional(),
122
+ development: z.object({
123
+ targetVersion: z.string().optional(),
124
+ noMilestones: z.boolean().optional()
125
+ }).optional(),
126
+ versions: z.object({
127
+ subcommand: z.string().optional(),
128
+ directories: z.array(z.string()).optional()
100
129
  }).optional(),
101
130
  excludedPatterns: z.array(z.string()).optional()
102
131
  });
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../src/types.ts"],"sourcesContent":["import * as Cardigantime from '@theunwalked/cardigantime';\nimport { z } from \"zod\";\n\nexport const ConfigSchema = z.object({\n dryRun: z.boolean().optional(),\n verbose: z.boolean().optional(),\n debug: z.boolean().optional(),\n overrides: z.boolean().optional(),\n model: z.string().optional(),\n contextDirectories: z.array(z.string()).optional(),\n outputDirectory: z.string().optional(),\n preferencesDirectory: z.string().optional(),\n commit: z.object({\n add: z.boolean().optional(),\n cached: z.boolean().optional(),\n sendit: z.boolean().optional(),\n messageLimit: z.number().optional(),\n context: z.string().optional(),\n direction: z.string().optional(),\n skipFileCheck: z.boolean().optional(),\n }).optional(),\n audioCommit: z.object({\n maxRecordingTime: z.number().optional(),\n audioDevice: z.string().optional(),\n file: z.string().optional(),\n keepTemp: z.boolean().optional(),\n }).optional(),\n release: z.object({\n from: z.string().optional(),\n to: z.string().optional(),\n messageLimit: z.number().optional(),\n context: z.string().optional(),\n focus: z.string().optional(),\n }).optional(),\n review: z.object({\n includeCommitHistory: z.boolean().optional(),\n includeRecentDiffs: z.boolean().optional(),\n includeReleaseNotes: z.boolean().optional(),\n includeGithubIssues: z.boolean().optional(),\n commitHistoryLimit: z.number().optional(),\n diffHistoryLimit: z.number().optional(),\n releaseNotesLimit: z.number().optional(),\n githubIssuesLimit: z.number().optional(),\n context: z.string().optional(),\n sendit: z.boolean().optional(),\n note: z.string().optional(),\n editorTimeout: z.number().optional(),\n maxContextErrors: z.number().optional(),\n }).optional(),\n audioReview: z.object({\n includeCommitHistory: z.boolean().optional(),\n includeRecentDiffs: z.boolean().optional(),\n includeReleaseNotes: z.boolean().optional(),\n includeGithubIssues: z.boolean().optional(),\n commitHistoryLimit: z.number().optional(),\n diffHistoryLimit: z.number().optional(),\n releaseNotesLimit: z.number().optional(),\n githubIssuesLimit: z.number().optional(),\n context: z.string().optional(),\n sendit: z.boolean().optional(),\n maxRecordingTime: z.number().optional(),\n audioDevice: z.string().optional(),\n file: z.string().optional(),\n directory: z.string().optional(),\n keepTemp: z.boolean().optional(),\n }).optional(),\n publish: z.object({\n mergeMethod: z.enum(['merge', 'squash', 'rebase']).optional(),\n dependencyUpdatePatterns: z.array(z.string()).optional(),\n requiredEnvVars: z.array(z.string()).optional(),\n linkWorkspacePackages: z.boolean().optional(),\n unlinkWorkspacePackages: z.boolean().optional(),\n checksTimeout: z.number().optional(),\n skipUserConfirmation: z.boolean().optional(),\n sendit: z.boolean().optional(),\n waitForReleaseWorkflows: z.boolean().optional(),\n releaseWorkflowsTimeout: z.number().optional(),\n releaseWorkflowNames: z.array(z.string()).optional(),\n }).optional(),\n link: z.object({\n scopeRoots: z.record(z.string(), z.string()).optional(),\n dryRun: z.boolean().optional(),\n }).optional(),\n unlink: z.object({\n scopeRoots: z.record(z.string(), z.string()).optional(),\n workspaceFile: z.string().optional(),\n dryRun: z.boolean().optional(),\n cleanNodeModules: z.boolean().optional(),\n }).optional(),\n tree: z.object({\n directories: z.array(z.string()).optional(),\n excludedPatterns: z.array(z.string()).optional(),\n startFrom: z.string().optional(),\n cmd: z.string().optional(),\n parallel: z.boolean().optional(),\n builtInCommand: z.string().optional(),\n }).optional(),\n excludedPatterns: z.array(z.string()).optional(),\n});\n\nexport const SecureConfigSchema = z.object({\n openaiApiKey: z.string().optional(),\n});\n\nexport const CommandConfigSchema = z.object({\n commandName: z.string().optional(),\n});\n\nexport type Config = z.infer<typeof ConfigSchema> & Cardigantime.Config;\nexport type SecureConfig = z.infer<typeof SecureConfigSchema>;\nexport type CommandConfig = z.infer<typeof CommandConfigSchema>;\n\nexport type MergeMethod = 'merge' | 'squash' | 'rebase';\n\nexport interface PullRequest {\n html_url: string;\n number: number;\n labels: {\n name: string;\n }[];\n}\n\nexport type ReleaseSummary = {\n title: string;\n body: string;\n}\n\nexport type ReleaseConfig = {\n from?: string;\n to?: string;\n context?: string;\n focus?: string;\n messageLimit?: number;\n}\n\nexport type ReviewConfig = {\n includeCommitHistory?: boolean;\n includeRecentDiffs?: boolean;\n includeReleaseNotes?: boolean;\n includeGithubIssues?: boolean;\n commitHistoryLimit?: number;\n diffHistoryLimit?: number;\n releaseNotesLimit?: number;\n githubIssuesLimit?: number;\n context?: string;\n sendit?: boolean;\n note?: string;\n editorTimeout?: number;\n maxContextErrors?: number;\n}\n\nexport type AudioReviewConfig = {\n includeCommitHistory?: boolean;\n includeRecentDiffs?: boolean;\n includeReleaseNotes?: boolean;\n includeGithubIssues?: boolean;\n commitHistoryLimit?: number;\n diffHistoryLimit?: number;\n releaseNotesLimit?: number;\n githubIssuesLimit?: number;\n context?: string;\n sendit?: boolean;\n maxRecordingTime?: number;\n audioDevice?: string;\n file?: string;\n directory?: string;\n keepTemp?: boolean;\n}\n\nexport type AudioCommitConfig = {\n maxRecordingTime?: number;\n audioDevice?: string;\n file?: string;\n keepTemp?: boolean;\n}\n\nexport type UnlinkConfig = {\n scopeRoots?: Record<string, string>;\n workspaceFile?: string;\n dryRun?: boolean;\n cleanNodeModules?: boolean;\n}\n\nexport type PublishConfig = {\n from?: string;\n to?: string;\n}\n\nexport type TreeConfig = {\n directories?: string[];\n excludedPatterns?: string[];\n startFrom?: string;\n cmd?: string;\n parallel?: boolean;\n builtInCommand?: string;\n}\n"],"names":["ConfigSchema","z","object","dryRun","boolean","optional","verbose","debug","overrides","model","string","contextDirectories","array","outputDirectory","preferencesDirectory","commit","add","cached","sendit","messageLimit","number","context","direction","skipFileCheck","audioCommit","maxRecordingTime","audioDevice","file","keepTemp","release","from","to","focus","review","includeCommitHistory","includeRecentDiffs","includeReleaseNotes","includeGithubIssues","commitHistoryLimit","diffHistoryLimit","releaseNotesLimit","githubIssuesLimit","note","editorTimeout","maxContextErrors","audioReview","directory","publish","mergeMethod","enum","dependencyUpdatePatterns","requiredEnvVars","linkWorkspacePackages","unlinkWorkspacePackages","checksTimeout","skipUserConfirmation","waitForReleaseWorkflows","releaseWorkflowsTimeout","releaseWorkflowNames","link","scopeRoots","record","unlink","workspaceFile","cleanNodeModules","tree","directories","excludedPatterns","startFrom","cmd","parallel","builtInCommand","openaiApiKey","commandName"],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sources":["../src/types.ts"],"sourcesContent":["import * as Cardigantime from '@theunwalked/cardigantime';\nimport { z } from \"zod\";\n\nexport const ConfigSchema = z.object({\n dryRun: z.boolean().optional(),\n verbose: z.boolean().optional(),\n debug: z.boolean().optional(),\n overrides: z.boolean().optional(),\n model: z.string().optional(),\n contextDirectories: z.array(z.string()).optional(),\n outputDirectory: z.string().optional(),\n preferencesDirectory: z.string().optional(),\n commit: z.object({\n add: z.boolean().optional(),\n cached: z.boolean().optional(),\n sendit: z.boolean().optional(),\n interactive: z.boolean().optional(),\n amend: z.boolean().optional(),\n messageLimit: z.number().optional(),\n context: z.string().optional(),\n direction: z.string().optional(),\n skipFileCheck: z.boolean().optional(),\n maxDiffBytes: z.number().optional(),\n model: z.string().optional(),\n }).optional(),\n audioCommit: z.object({\n maxRecordingTime: z.number().optional(),\n audioDevice: z.string().optional(),\n file: z.string().optional(),\n keepTemp: z.boolean().optional(),\n }).optional(),\n release: z.object({\n from: z.string().optional(),\n to: z.string().optional(),\n messageLimit: z.number().optional(),\n context: z.string().optional(),\n interactive: z.boolean().optional(),\n focus: z.string().optional(),\n maxDiffBytes: z.number().optional(),\n model: z.string().optional(),\n noMilestones: z.boolean().optional(),\n }).optional(),\n review: z.object({\n includeCommitHistory: z.boolean().optional(),\n includeRecentDiffs: z.boolean().optional(),\n includeReleaseNotes: z.boolean().optional(),\n includeGithubIssues: z.boolean().optional(),\n commitHistoryLimit: z.number().optional(),\n diffHistoryLimit: z.number().optional(),\n releaseNotesLimit: z.number().optional(),\n githubIssuesLimit: z.number().optional(),\n context: z.string().optional(),\n sendit: z.boolean().optional(),\n note: z.string().optional(),\n editorTimeout: z.number().optional(),\n maxContextErrors: z.number().optional(),\n model: z.string().optional(),\n }).optional(),\n audioReview: z.object({\n includeCommitHistory: z.boolean().optional(),\n includeRecentDiffs: z.boolean().optional(),\n includeReleaseNotes: z.boolean().optional(),\n includeGithubIssues: z.boolean().optional(),\n commitHistoryLimit: z.number().optional(),\n diffHistoryLimit: z.number().optional(),\n releaseNotesLimit: z.number().optional(),\n githubIssuesLimit: z.number().optional(),\n context: z.string().optional(),\n sendit: z.boolean().optional(),\n maxRecordingTime: z.number().optional(),\n audioDevice: z.string().optional(),\n file: z.string().optional(),\n directory: z.string().optional(),\n keepTemp: z.boolean().optional(),\n }).optional(),\n publish: z.object({\n mergeMethod: z.enum(['merge', 'squash', 'rebase']).optional(),\n from: z.string().optional(),\n targetVersion: z.string().optional(),\n interactive: z.boolean().optional(),\n dependencyUpdatePatterns: z.array(z.string()).optional(),\n requiredEnvVars: z.array(z.string()).optional(),\n linkWorkspacePackages: z.boolean().optional(),\n unlinkWorkspacePackages: z.boolean().optional(),\n checksTimeout: z.number().optional(),\n skipUserConfirmation: z.boolean().optional(),\n syncTarget: z.boolean().optional(),\n sendit: z.boolean().optional(),\n waitForReleaseWorkflows: z.boolean().optional(),\n releaseWorkflowsTimeout: z.number().optional(),\n releaseWorkflowNames: z.array(z.string()).optional(),\n targetBranch: z.string().optional(),\n noMilestones: z.boolean().optional(),\n }).optional(),\n link: z.object({\n scopeRoots: z.record(z.string(), z.string()).optional(),\n dryRun: z.boolean().optional(),\n packageArgument: z.string().optional(),\n }).optional(),\n unlink: z.object({\n scopeRoots: z.record(z.string(), z.string()).optional(),\n workspaceFile: z.string().optional(),\n dryRun: z.boolean().optional(),\n cleanNodeModules: z.boolean().optional(),\n packageArgument: z.string().optional(),\n }).optional(),\n tree: z.object({\n directories: z.array(z.string()).optional(),\n excludedPatterns: z.array(z.string()).optional(),\n startFrom: z.string().optional(),\n stopAt: z.string().optional(),\n cmd: z.string().optional(),\n parallel: z.boolean().optional(),\n builtInCommand: z.string().optional(),\n continue: z.boolean().optional(),\n packageArgument: z.string().optional(),\n cleanNodeModules: z.boolean().optional(),\n }).optional(),\n development: z.object({\n targetVersion: z.string().optional(),\n noMilestones: z.boolean().optional(),\n }).optional(),\n versions: z.object({\n subcommand: z.string().optional(),\n directories: z.array(z.string()).optional(),\n }).optional(),\n excludedPatterns: z.array(z.string()).optional(),\n});\n\nexport const SecureConfigSchema = z.object({\n openaiApiKey: z.string().optional(),\n});\n\nexport const CommandConfigSchema = z.object({\n commandName: z.string().optional(),\n});\n\nexport type Config = z.infer<typeof ConfigSchema> & Cardigantime.Config;\nexport type SecureConfig = z.infer<typeof SecureConfigSchema>;\nexport type CommandConfig = z.infer<typeof CommandConfigSchema>;\n\nexport type MergeMethod = 'merge' | 'squash' | 'rebase';\n\nexport interface PullRequest {\n html_url: string;\n number: number;\n labels: {\n name: string;\n }[];\n}\n\nexport type ReleaseSummary = {\n title: string;\n body: string;\n}\n\nexport type ReleaseConfig = {\n from?: string;\n to?: string;\n context?: string;\n interactive?: boolean;\n focus?: string;\n messageLimit?: number;\n maxDiffBytes?: number;\n model?: string;\n}\n\nexport type ReviewConfig = {\n includeCommitHistory?: boolean;\n includeRecentDiffs?: boolean;\n includeReleaseNotes?: boolean;\n includeGithubIssues?: boolean;\n commitHistoryLimit?: number;\n diffHistoryLimit?: number;\n releaseNotesLimit?: number;\n githubIssuesLimit?: number;\n context?: string;\n sendit?: boolean;\n note?: string;\n editorTimeout?: number;\n maxContextErrors?: number;\n model?: string;\n}\n\nexport type AudioReviewConfig = {\n includeCommitHistory?: boolean;\n includeRecentDiffs?: boolean;\n includeReleaseNotes?: boolean;\n includeGithubIssues?: boolean;\n commitHistoryLimit?: number;\n diffHistoryLimit?: number;\n releaseNotesLimit?: number;\n githubIssuesLimit?: number;\n context?: string;\n sendit?: boolean;\n maxRecordingTime?: number;\n audioDevice?: string;\n file?: string;\n directory?: string;\n keepTemp?: boolean;\n}\n\nexport type CommitConfig = {\n add?: boolean;\n cached?: boolean;\n sendit?: boolean;\n interactive?: boolean;\n messageLimit?: number;\n context?: string;\n direction?: string;\n skipFileCheck?: boolean;\n maxDiffBytes?: number;\n model?: string;\n}\n\nexport type AudioCommitConfig = {\n maxRecordingTime?: number;\n audioDevice?: string;\n file?: string;\n keepTemp?: boolean;\n}\n\nexport type LinkConfig = {\n scopeRoots?: Record<string, string>;\n dryRun?: boolean;\n packageArgument?: string;\n}\n\nexport type UnlinkConfig = {\n scopeRoots?: Record<string, string>;\n workspaceFile?: string;\n dryRun?: boolean;\n cleanNodeModules?: boolean;\n packageArgument?: string;\n}\n\nexport type PublishConfig = {\n mergeMethod?: 'merge' | 'squash' | 'rebase';\n from?: string;\n targetVersion?: string;\n interactive?: boolean;\n dependencyUpdatePatterns?: string[];\n requiredEnvVars?: string[];\n linkWorkspacePackages?: boolean;\n unlinkWorkspacePackages?: boolean;\n checksTimeout?: number;\n skipUserConfirmation?: boolean;\n sendit?: boolean;\n waitForReleaseWorkflows?: boolean;\n releaseWorkflowsTimeout?: number;\n releaseWorkflowNames?: string[];\n targetBranch?: string;\n}\n\nexport type TreeConfig = {\n directories?: string[];\n excludedPatterns?: string[];\n startFrom?: string;\n stopAt?: string;\n cmd?: string;\n parallel?: boolean;\n builtInCommand?: string;\n continue?: boolean; // Continue from previous tree publish execution\n packageArgument?: string; // Package argument for link/unlink commands (e.g., \"@fjell\" or \"@fjell/core\")\n cleanNodeModules?: boolean; // For unlink command: remove node_modules and package-lock.json, then reinstall dependencies\n}\n\nexport type DevelopmentConfig = {\n targetVersion?: string; // 'patch', 'minor', 'major', or explicit version like '2.1.0' (default: 'patch')\n}\n\nexport type VersionsConfig = {\n subcommand?: string; // 'minor' or other versioning strategies\n directories?: string[]; // directories to scan for packages\n}\n"],"names":["ConfigSchema","z","object","dryRun","boolean","optional","verbose","debug","overrides","model","string","contextDirectories","array","outputDirectory","preferencesDirectory","commit","add","cached","sendit","interactive","amend","messageLimit","number","context","direction","skipFileCheck","maxDiffBytes","audioCommit","maxRecordingTime","audioDevice","file","keepTemp","release","from","to","focus","noMilestones","review","includeCommitHistory","includeRecentDiffs","includeReleaseNotes","includeGithubIssues","commitHistoryLimit","diffHistoryLimit","releaseNotesLimit","githubIssuesLimit","note","editorTimeout","maxContextErrors","audioReview","directory","publish","mergeMethod","enum","targetVersion","dependencyUpdatePatterns","requiredEnvVars","linkWorkspacePackages","unlinkWorkspacePackages","checksTimeout","skipUserConfirmation","syncTarget","waitForReleaseWorkflows","releaseWorkflowsTimeout","releaseWorkflowNames","targetBranch","link","scopeRoots","record","packageArgument","unlink","workspaceFile","cleanNodeModules","tree","directories","excludedPatterns","startFrom","stopAt","cmd","parallel","builtInCommand","continue","development","versions","subcommand","openaiApiKey","commandName"],"mappings":"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"}
@@ -1,13 +1,148 @@
1
1
  #!/usr/bin/env node
2
- import { exec } from 'child_process';
2
+ import { exec, spawn } from 'child_process';
3
3
  import util from 'util';
4
4
  import { getLogger } from '../logging.js';
5
5
 
6
+ /**
7
+ * Validates git references to prevent injection
8
+ */ function validateGitRef(ref) {
9
+ // Git refs can contain letters, numbers, hyphens, underscores, slashes, and dots
10
+ // But cannot contain certain dangerous characters
11
+ const validRefPattern = /^[a-zA-Z0-9._/-]+$/;
12
+ const invalidPatterns = [
13
+ /\.\./,
14
+ /^-/,
15
+ /[\s;<>|&`$(){}[\]]/ // No shell metacharacters
16
+ ];
17
+ if (!validRefPattern.test(ref)) {
18
+ return false;
19
+ }
20
+ return !invalidPatterns.some((pattern)=>pattern.test(ref));
21
+ }
22
+ /**
23
+ * Securely executes a command with arguments array (no shell injection risk)
24
+ */ async function runSecure(command, args = [], options = {}) {
25
+ const logger = getLogger();
26
+ return new Promise((resolve, reject)=>{
27
+ logger.verbose(`Executing command securely: ${command} ${args.join(' ')}`);
28
+ logger.verbose(`Working directory: ${(options === null || options === void 0 ? void 0 : options.cwd) || process.cwd()}`);
29
+ const child = spawn(command, args, {
30
+ ...options,
31
+ shell: false,
32
+ stdio: 'pipe'
33
+ });
34
+ let stdout = '';
35
+ let stderr = '';
36
+ if (child.stdout) {
37
+ child.stdout.on('data', (data)=>{
38
+ stdout += data.toString();
39
+ });
40
+ }
41
+ if (child.stderr) {
42
+ child.stderr.on('data', (data)=>{
43
+ stderr += data.toString();
44
+ });
45
+ }
46
+ child.on('close', (code)=>{
47
+ if (code === 0) {
48
+ logger.verbose(`Command completed successfully`);
49
+ logger.verbose(`stdout: ${stdout}`);
50
+ if (stderr) {
51
+ logger.verbose(`stderr: ${stderr}`);
52
+ }
53
+ resolve({
54
+ stdout,
55
+ stderr
56
+ });
57
+ } else {
58
+ logger.error(`Command failed with exit code ${code}`);
59
+ logger.error(`stdout: ${stdout}`);
60
+ logger.error(`stderr: ${stderr}`);
61
+ reject(new Error(`Command "${[
62
+ command,
63
+ ...args
64
+ ].join(' ')}" failed with exit code ${code}`));
65
+ }
66
+ });
67
+ child.on('error', (error)=>{
68
+ logger.error(`Command failed to start: ${error.message}`);
69
+ reject(error);
70
+ });
71
+ });
72
+ }
73
+ /**
74
+ * Securely executes a command with inherited stdio (no shell injection risk)
75
+ */ async function runSecureWithInheritedStdio(command, args = [], options = {}) {
76
+ const logger = getLogger();
77
+ return new Promise((resolve, reject)=>{
78
+ logger.verbose(`Executing command securely with inherited stdio: ${command} ${args.join(' ')}`);
79
+ logger.verbose(`Working directory: ${(options === null || options === void 0 ? void 0 : options.cwd) || process.cwd()}`);
80
+ const child = spawn(command, args, {
81
+ ...options,
82
+ shell: false,
83
+ stdio: 'inherit'
84
+ });
85
+ child.on('close', (code)=>{
86
+ if (code === 0) {
87
+ logger.verbose(`Command completed successfully with code ${code}`);
88
+ resolve();
89
+ } else {
90
+ logger.error(`Command failed with exit code ${code}`);
91
+ reject(new Error(`Command "${[
92
+ command,
93
+ ...args
94
+ ].join(' ')}" failed with exit code ${code}`));
95
+ }
96
+ });
97
+ child.on('error', (error)=>{
98
+ logger.error(`Command failed to start: ${error.message}`);
99
+ reject(error);
100
+ });
101
+ });
102
+ }
6
103
  async function run(command, options = {}) {
104
+ const logger = getLogger();
7
105
  const execPromise = util.promisify(exec);
8
- return execPromise(command, options);
106
+ logger.verbose(`Executing command: ${command}`);
107
+ logger.verbose(`Working directory: ${(options === null || options === void 0 ? void 0 : options.cwd) || process.cwd()}`);
108
+ logger.verbose(`Environment variables: ${Object.keys((options === null || options === void 0 ? void 0 : options.env) || process.env).length} variables`);
109
+ try {
110
+ const result = await execPromise(command, options);
111
+ logger.verbose(`Command completed successfully`);
112
+ logger.verbose(`stdout: ${result.stdout}`);
113
+ if (result.stderr) {
114
+ logger.verbose(`stderr: ${result.stderr}`);
115
+ }
116
+ return result;
117
+ } catch (error) {
118
+ logger.error(`Command failed: ${command}`);
119
+ logger.error(`Error: ${error.message}`);
120
+ logger.error(`Exit code: ${error.code}`);
121
+ logger.error(`Signal: ${error.signal}`);
122
+ if (error.stdout) {
123
+ logger.error(`stdout: ${error.stdout}`);
124
+ }
125
+ if (error.stderr) {
126
+ logger.error(`stderr: ${error.stderr}`);
127
+ }
128
+ throw error;
129
+ }
130
+ }
131
+ /**
132
+ * @deprecated Use runSecureWithInheritedStdio instead for better security
133
+ * Legacy function for backward compatibility - parses shell command string
134
+ */ async function runWithInheritedStdio(command, options = {}) {
135
+ // Parse command to extract command and arguments safely
136
+ const parts = command.trim().split(/\s+/);
137
+ if (parts.length === 0) {
138
+ throw new Error('Empty command provided');
139
+ }
140
+ const cmd = parts[0];
141
+ const args = parts.slice(1);
142
+ // Use the secure version
143
+ return runSecureWithInheritedStdio(cmd, args, options);
9
144
  }
10
- async function runWithDryRunSupport(command, isDryRun, options = {}) {
145
+ async function runWithDryRunSupport(command, isDryRun, options = {}, useInheritedStdio = false) {
11
146
  const logger = getLogger();
12
147
  if (isDryRun) {
13
148
  logger.info(`DRY RUN: Would execute command: ${command}`);
@@ -16,8 +151,15 @@ async function runWithDryRunSupport(command, isDryRun, options = {}) {
16
151
  stderr: ''
17
152
  };
18
153
  }
154
+ if (useInheritedStdio) {
155
+ await runWithInheritedStdio(command, options);
156
+ return {
157
+ stdout: '',
158
+ stderr: ''
159
+ }; // No output captured when using inherited stdio
160
+ }
19
161
  return run(command, options);
20
162
  }
21
163
 
22
- export { run, runWithDryRunSupport };
164
+ export { run, runSecure, runSecureWithInheritedStdio, runWithDryRunSupport, runWithInheritedStdio, validateGitRef };
23
165
  //# sourceMappingURL=child.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"child.js","sources":["../../src/util/child.ts"],"sourcesContent":["#!/usr/bin/env node\nimport child_process, { exec } from 'child_process';\nimport util from 'util';\nimport { getLogger } from '../logging';\n\nexport async function run(command: string, options: child_process.ExecOptions = {}): Promise<{ stdout: string; stderr: string }> {\n const execPromise = util.promisify(exec);\n return execPromise(command, options);\n}\n\nexport async function runWithDryRunSupport(\n command: string,\n isDryRun: boolean,\n options: child_process.ExecOptions = {}\n): Promise<{ stdout: string; stderr: string }> {\n const logger = getLogger();\n\n if (isDryRun) {\n logger.info(`DRY RUN: Would execute command: ${command}`);\n return { stdout: '', stderr: '' };\n }\n\n return run(command, options);\n}"],"names":["run","command","options","execPromise","util","promisify","exec","runWithDryRunSupport","isDryRun","logger","getLogger","info","stdout","stderr"],"mappings":";;;;;AAKO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAeA,GAAAA,CAAIC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAe,EAAEC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAqC,EAAE,CAAA,CAAA,CAAA;IAC9E,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMC,WAAAA,CAAAA,CAAAA,CAAcC,CAAAA,CAAAA,CAAAA,CAAAA,CAAKC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAS,CAACC,IAAAA,CAAAA,CAAAA;AACnC,CAAA,CAAA,CAAA,CAAA,OAAOH,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAYF,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAASC,OAAAA,CAAAA,CAAAA;AAChC,CAAA;AAEO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAeK,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAClBN,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAe,CAAA,CACfO,QAAiB,CAAA,CACjBN,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAqC,CAAA,CAAE,CAAA,CAAA,CAAA;AAEvC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMO,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAASC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAEf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAIF,QAAAA,CAAAA,CAAU,CAAA;AACVC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAOE,CAAAA,CAAAA,CAAAA,CAAI,CAAC,CAAC,gCAAgC,CAAA,CAAEV,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAS,CAAA,CAAA;QACxD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;YAAEW,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAQ,CAAA,CAAA,CAAA;YAAIC,MAAAA,CAAAA,CAAQ,CAAA,CAAA;AAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACpC,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,OAAOb,CAAAA,CAAAA,EAAIC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAASC,OAAAA,CAAAA,CAAAA;AACxB,CAAA;;"}
1
+ {"version":3,"file":"child.js","sources":["../../src/util/child.ts"],"sourcesContent":["#!/usr/bin/env node\nimport child_process, { exec, spawn } from 'child_process';\nimport util from 'util';\nimport { getLogger } from '../logging';\n\n/**\n * Escapes shell arguments to prevent command injection\n */\nfunction escapeShellArg(arg: string): string {\n // For Windows, we need different escaping\n if (process.platform === 'win32') {\n // Escape double quotes and backslashes\n return `\"${arg.replace(/[\\\\\"]/g, '\\\\$&')}\"`;\n } else {\n // For Unix-like systems, escape single quotes\n return `'${arg.replace(/'/g, \"'\\\\''\")}'`;\n }\n}\n\n/**\n * Validates git references to prevent injection\n */\nfunction validateGitRef(ref: string): boolean {\n // Git refs can contain letters, numbers, hyphens, underscores, slashes, and dots\n // But cannot contain certain dangerous characters\n const validRefPattern = /^[a-zA-Z0-9._/-]+$/;\n const invalidPatterns = [\n /\\.\\./, // No double dots (directory traversal)\n /^-/, // Cannot start with dash (flag injection)\n /[\\s;<>|&`$(){}[\\]]/ // No shell metacharacters\n ];\n\n if (!validRefPattern.test(ref)) {\n return false;\n }\n\n return !invalidPatterns.some(pattern => pattern.test(ref));\n}\n\n/**\n * Validates file paths to prevent injection\n */\nfunction validateFilePath(filePath: string): boolean {\n // Basic validation - no shell metacharacters\n const invalidChars = /[;<>|&`$(){}[\\]]/;\n return !invalidChars.test(filePath);\n}\n\n/**\n * Securely executes a command with arguments array (no shell injection risk)\n */\nexport async function runSecure(\n command: string,\n args: string[] = [],\n options: child_process.SpawnOptions = {}\n): Promise<{ stdout: string; stderr: string }> {\n const logger = getLogger();\n\n return new Promise((resolve, reject) => {\n logger.verbose(`Executing command securely: ${command} ${args.join(' ')}`);\n logger.verbose(`Working directory: ${options?.cwd || process.cwd()}`);\n\n const child = spawn(command, args, {\n ...options,\n shell: false, // CRITICAL: Never use shell for user input\n stdio: 'pipe'\n });\n\n let stdout = '';\n let stderr = '';\n\n if (child.stdout) {\n child.stdout.on('data', (data) => {\n stdout += data.toString();\n });\n }\n\n if (child.stderr) {\n child.stderr.on('data', (data) => {\n stderr += data.toString();\n });\n }\n\n child.on('close', (code) => {\n if (code === 0) {\n logger.verbose(`Command completed successfully`);\n logger.verbose(`stdout: ${stdout}`);\n if (stderr) {\n logger.verbose(`stderr: ${stderr}`);\n }\n resolve({ stdout, stderr });\n } else {\n logger.error(`Command failed with exit code ${code}`);\n logger.error(`stdout: ${stdout}`);\n logger.error(`stderr: ${stderr}`);\n reject(new Error(`Command \"${[command, ...args].join(' ')}\" failed with exit code ${code}`));\n }\n });\n\n child.on('error', (error) => {\n logger.error(`Command failed to start: ${error.message}`);\n reject(error);\n });\n });\n}\n\n/**\n * Securely executes a command with inherited stdio (no shell injection risk)\n */\nexport async function runSecureWithInheritedStdio(\n command: string,\n args: string[] = [],\n options: child_process.SpawnOptions = {}\n): Promise<void> {\n const logger = getLogger();\n\n return new Promise((resolve, reject) => {\n logger.verbose(`Executing command securely with inherited stdio: ${command} ${args.join(' ')}`);\n logger.verbose(`Working directory: ${options?.cwd || process.cwd()}`);\n\n const child = spawn(command, args, {\n ...options,\n shell: false, // CRITICAL: Never use shell for user input\n stdio: 'inherit'\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n logger.verbose(`Command completed successfully with code ${code}`);\n resolve();\n } else {\n logger.error(`Command failed with exit code ${code}`);\n reject(new Error(`Command \"${[command, ...args].join(' ')}\" failed with exit code ${code}`));\n }\n });\n\n child.on('error', (error) => {\n logger.error(`Command failed to start: ${error.message}`);\n reject(error);\n });\n });\n}\n\nexport async function run(command: string, options: child_process.ExecOptions = {}): Promise<{ stdout: string; stderr: string }> {\n const logger = getLogger();\n const execPromise = util.promisify(exec);\n\n logger.verbose(`Executing command: ${command}`);\n logger.verbose(`Working directory: ${options?.cwd || process.cwd()}`);\n logger.verbose(`Environment variables: ${Object.keys(options?.env || process.env).length} variables`);\n\n try {\n const result = await execPromise(command, options);\n logger.verbose(`Command completed successfully`);\n logger.verbose(`stdout: ${result.stdout}`);\n if (result.stderr) {\n logger.verbose(`stderr: ${result.stderr}`);\n }\n return result;\n } catch (error: any) {\n logger.error(`Command failed: ${command}`);\n logger.error(`Error: ${error.message}`);\n logger.error(`Exit code: ${error.code}`);\n logger.error(`Signal: ${error.signal}`);\n if (error.stdout) {\n logger.error(`stdout: ${error.stdout}`);\n }\n if (error.stderr) {\n logger.error(`stderr: ${error.stderr}`);\n }\n throw error;\n }\n}\n\n/**\n * @deprecated Use runSecureWithInheritedStdio instead for better security\n * Legacy function for backward compatibility - parses shell command string\n */\nexport async function runWithInheritedStdio(command: string, options: child_process.ExecOptions = {}): Promise<void> {\n\n // Parse command to extract command and arguments safely\n const parts = command.trim().split(/\\s+/);\n if (parts.length === 0) {\n throw new Error('Empty command provided');\n }\n\n const cmd = parts[0];\n const args = parts.slice(1);\n\n // Use the secure version\n return runSecureWithInheritedStdio(cmd, args, options);\n}\n\nexport async function runWithDryRunSupport(\n command: string,\n isDryRun: boolean,\n options: child_process.ExecOptions = {},\n useInheritedStdio: boolean = false\n): Promise<{ stdout: string; stderr: string }> {\n const logger = getLogger();\n\n if (isDryRun) {\n logger.info(`DRY RUN: Would execute command: ${command}`);\n return { stdout: '', stderr: '' };\n }\n\n if (useInheritedStdio) {\n await runWithInheritedStdio(command, options);\n return { stdout: '', stderr: '' }; // No output captured when using inherited stdio\n }\n\n return run(command, options);\n}\n\n/**\n * Secure version of runWithDryRunSupport using argument arrays\n */\nexport async function runSecureWithDryRunSupport(\n command: string,\n args: string[] = [],\n isDryRun: boolean,\n options: child_process.SpawnOptions = {},\n useInheritedStdio: boolean = false\n): Promise<{ stdout: string; stderr: string }> {\n const logger = getLogger();\n\n if (isDryRun) {\n logger.info(`DRY RUN: Would execute command: ${command} ${args.join(' ')}`);\n return { stdout: '', stderr: '' };\n }\n\n if (useInheritedStdio) {\n await runSecureWithInheritedStdio(command, args, options);\n return { stdout: '', stderr: '' }; // No output captured when using inherited stdio\n }\n\n return runSecure(command, args, options);\n}\n\n// Export validation functions for use in other modules\nexport { validateGitRef, validateFilePath, escapeShellArg };\n"],"names":["validateGitRef","ref","validRefPattern","invalidPatterns","test","some","pattern","runSecure","command","args","options","logger","getLogger","Promise","resolve","reject","verbose","join","cwd","process","child","spawn","shell","stdio","stdout","stderr","on","data","toString","code","error","Error","message","runSecureWithInheritedStdio","run","execPromise","util","promisify","exec","Object","keys","env","length","result","signal","runWithInheritedStdio","parts","trim","split","cmd","slice","runWithDryRunSupport","isDryRun","useInheritedStdio","info"],"mappings":"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"}