@nervekit/tools 0.2.0 → 0.4.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 (78) hide show
  1. package/dist/catalog/core/jira.tools.d.ts +111 -0
  2. package/dist/catalog/core/jira.tools.d.ts.map +1 -0
  3. package/dist/catalog/core/jira.tools.js +151 -0
  4. package/dist/catalog/core/jira.tools.js.map +1 -0
  5. package/dist/catalog/core/shell.tools.js +3 -3
  6. package/dist/catalog/core/shell.tools.js.map +1 -1
  7. package/dist/catalog/index.d.ts +1 -0
  8. package/dist/catalog/index.d.ts.map +1 -1
  9. package/dist/catalog/index.js +3 -0
  10. package/dist/catalog/index.js.map +1 -1
  11. package/dist/catalog/orchestration/task.tools.d.ts.map +1 -1
  12. package/dist/catalog/orchestration/task.tools.js +8 -4
  13. package/dist/catalog/orchestration/task.tools.js.map +1 -1
  14. package/dist/catalog/risk.d.ts.map +1 -1
  15. package/dist/catalog/risk.js +7 -0
  16. package/dist/catalog/risk.js.map +1 -1
  17. package/dist/execution/common/output-budget.d.ts +5 -0
  18. package/dist/execution/common/output-budget.d.ts.map +1 -1
  19. package/dist/execution/common/output-budget.js +26 -0
  20. package/dist/execution/common/output-budget.js.map +1 -1
  21. package/dist/execution/common/process-result.d.ts.map +1 -1
  22. package/dist/execution/common/process-result.js +55 -1
  23. package/dist/execution/common/process-result.js.map +1 -1
  24. package/dist/execution/core-dispatch.d.ts.map +1 -1
  25. package/dist/execution/core-dispatch.js +15 -0
  26. package/dist/execution/core-dispatch.js.map +1 -1
  27. package/dist/execution/filesystem/find.d.ts.map +1 -1
  28. package/dist/execution/filesystem/find.js +5 -2
  29. package/dist/execution/filesystem/find.js.map +1 -1
  30. package/dist/execution/filesystem/list.d.ts.map +1 -1
  31. package/dist/execution/filesystem/list.js +5 -2
  32. package/dist/execution/filesystem/list.js.map +1 -1
  33. package/dist/execution/filesystem/read.d.ts.map +1 -1
  34. package/dist/execution/filesystem/read.js +19 -2
  35. package/dist/execution/filesystem/read.js.map +1 -1
  36. package/dist/execution/filesystem/search.d.ts.map +1 -1
  37. package/dist/execution/filesystem/search.js +12 -2
  38. package/dist/execution/filesystem/search.js.map +1 -1
  39. package/dist/execution/index.d.ts +2 -1
  40. package/dist/execution/index.d.ts.map +1 -1
  41. package/dist/execution/index.js +2 -1
  42. package/dist/execution/index.js.map +1 -1
  43. package/dist/execution/jira/adf.d.ts +15 -0
  44. package/dist/execution/jira/adf.d.ts.map +1 -0
  45. package/dist/execution/jira/adf.js +105 -0
  46. package/dist/execution/jira/adf.js.map +1 -0
  47. package/dist/execution/jira/client.d.ts +19 -0
  48. package/dist/execution/jira/client.d.ts.map +1 -0
  49. package/dist/execution/jira/client.js +104 -0
  50. package/dist/execution/jira/client.js.map +1 -0
  51. package/dist/execution/jira/format.d.ts +43 -0
  52. package/dist/execution/jira/format.d.ts.map +1 -0
  53. package/dist/execution/jira/format.js +174 -0
  54. package/dist/execution/jira/format.js.map +1 -0
  55. package/dist/execution/jira/jira.d.ts +9 -0
  56. package/dist/execution/jira/jira.d.ts.map +1 -0
  57. package/dist/execution/jira/jira.js +471 -0
  58. package/dist/execution/jira/jira.js.map +1 -0
  59. package/dist/execution/shell/bash.d.ts.map +1 -1
  60. package/dist/execution/shell/bash.js +6 -2
  61. package/dist/execution/shell/bash.js.map +1 -1
  62. package/dist/execution/shell/shell-config.d.ts +16 -0
  63. package/dist/execution/shell/shell-config.d.ts.map +1 -0
  64. package/dist/execution/shell/shell-config.js +74 -0
  65. package/dist/execution/shell/shell-config.js.map +1 -0
  66. package/dist/execution/web/web-fetch.d.ts.map +1 -1
  67. package/dist/execution/web/web-fetch.js +39 -0
  68. package/dist/execution/web/web-fetch.js.map +1 -1
  69. package/dist/execution/web/web-search.d.ts.map +1 -1
  70. package/dist/execution/web/web-search.js +9 -2
  71. package/dist/execution/web/web-search.js.map +1 -1
  72. package/dist/index.d.ts +1 -1
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +1 -1
  75. package/dist/index.js.map +1 -1
  76. package/dist/types.d.ts +3 -0
  77. package/dist/types.d.ts.map +1 -1
  78. package/package.json +2 -2
@@ -0,0 +1,471 @@
1
+ import { ToolExecutionError } from "../common/tool-error.js";
2
+ import { adfFromEither } from "./adf.js";
3
+ import { jiraRequest, pathSegment, requireJiraConnection, } from "./client.js";
4
+ import { buildJiraTextResult, displayLimitNotice, formatIssueSummaryLine, formatTransitionSummaryLine, issueLine, JIRA_FIELD_DISPLAY_LIMIT, nameOf, summarizeJiraIssue, summarizeJiraProject, summarizeJiraTransition, takeDisplayItems, transitionLine, writeJiraArtifact, } from "./format.js";
5
+ const DEFAULT_SEARCH_FIELDS = [
6
+ "summary",
7
+ "status",
8
+ "assignee",
9
+ "issuetype",
10
+ "priority",
11
+ "updated",
12
+ ];
13
+ export async function executeJiraSearchIssues(args, context) {
14
+ const connection = await requireJiraConnection(context);
15
+ const jql = requiredString(args.jql, "jql");
16
+ const maxResults = boundedNumber(args.max_results, 25, 1, 100);
17
+ const fields = optionalStringArray(args.fields) ?? DEFAULT_SEARCH_FIELDS;
18
+ const expand = optionalStringArray(args.expand);
19
+ const body = {
20
+ jql,
21
+ maxResults,
22
+ fields,
23
+ };
24
+ const nextPageToken = optionalString(args.next_page_token);
25
+ if (nextPageToken)
26
+ body.nextPageToken = nextPageToken;
27
+ if (expand && expand.length > 0)
28
+ body.expand = expand;
29
+ const data = await jiraRequest(connection, {
30
+ method: "POST",
31
+ path: "/search/jql",
32
+ body,
33
+ signal: context.signal,
34
+ });
35
+ const artifact = await maybeArtifact(context, "search-issues", data, args.save_to_file);
36
+ const issues = Array.isArray(data.issues) ? data.issues : [];
37
+ const summarizedIssues = issues.flatMap((issue) => {
38
+ const summary = summarizeJiraIssue(issue);
39
+ return summary ? [summary] : [];
40
+ });
41
+ const displayed = takeDisplayItems(summarizedIssues);
42
+ const total = typeof data.total === "number" ? data.total : undefined;
43
+ const lines = [
44
+ `Jira search returned ${issues.length} issue${issues.length === 1 ? "" : "s"}${total !== undefined ? ` (total ${total})` : ""}.`,
45
+ ];
46
+ if (data.nextPageToken)
47
+ lines.push(`Next page token: ${data.nextPageToken}`);
48
+ const limitNotice = displayLimitNotice({
49
+ noun: "issue",
50
+ total: summarizedIssues.length,
51
+ displayed: displayed.displayed,
52
+ artifactPath: artifact?.path,
53
+ });
54
+ if (limitNotice)
55
+ lines.push(limitNotice);
56
+ if (artifact)
57
+ lines.push(`Raw JSON saved to: ${artifact.path}`);
58
+ if (displayed.items.length > 0) {
59
+ lines.push("", ...displayed.items.map(formatIssueSummaryLine));
60
+ }
61
+ return buildJiraTextResult({
62
+ text: lines.join("\n").trimEnd(),
63
+ context,
64
+ artifact,
65
+ details: {
66
+ jql,
67
+ issueCount: issues.length,
68
+ displayedIssueCount: displayed.displayed,
69
+ total,
70
+ nextPageToken: data.nextPageToken,
71
+ issues: displayed.items,
72
+ },
73
+ });
74
+ }
75
+ export async function executeJiraGetIssue(args, context) {
76
+ const connection = await requireJiraConnection(context);
77
+ const issueKey = requiredString(args.issue_key, "issue_key");
78
+ const fields = optionalStringArray(args.fields) ?? DEFAULT_SEARCH_FIELDS;
79
+ const expand = optionalStringArray(args.expand);
80
+ const issue = await jiraRequest(connection, {
81
+ path: `/issue/${pathSegment(issueKey)}`,
82
+ query: { fields, expand },
83
+ signal: context.signal,
84
+ });
85
+ const result = { issue };
86
+ if (args.include_comments === true) {
87
+ result.comments = await jiraRequest(connection, {
88
+ path: `/issue/${pathSegment(issueKey)}/comment`,
89
+ signal: context.signal,
90
+ });
91
+ }
92
+ if (args.include_transitions === true) {
93
+ result.transitions = await getTransitions(connection, issueKey, context);
94
+ }
95
+ const artifact = await maybeArtifact(context, "get-issue", result, args.save_to_file);
96
+ const issueSummary = summarizeJiraIssue(issue);
97
+ const lines = [
98
+ issueSummary ? formatIssueSummaryLine(issueSummary) : issueLine(issue),
99
+ ];
100
+ const includedCounts = {};
101
+ if (result.comments && typeof result.comments === "object") {
102
+ const comments = result.comments.comments;
103
+ if (Array.isArray(comments)) {
104
+ includedCounts.comments = comments.length;
105
+ lines.push(`Comments: ${comments.length}`);
106
+ }
107
+ }
108
+ let transitionSummaries = [];
109
+ let displayedTransitionCount;
110
+ let transitionCount;
111
+ if (result.transitions && typeof result.transitions === "object") {
112
+ const transitions = result.transitions
113
+ .transitions;
114
+ if (Array.isArray(transitions)) {
115
+ transitionSummaries = transitions.flatMap((transition) => {
116
+ const summary = summarizeJiraTransition(transition);
117
+ return summary ? [summary] : [];
118
+ });
119
+ const displayed = takeDisplayItems(transitionSummaries);
120
+ transitionCount = transitionSummaries.length;
121
+ displayedTransitionCount = displayed.displayed;
122
+ includedCounts.transitions = transitionSummaries.length;
123
+ lines.push("Available transitions:", ...displayed.items.map(formatTransitionSummaryLine));
124
+ const limitNotice = displayLimitNotice({
125
+ noun: "transition",
126
+ total: transitionSummaries.length,
127
+ displayed: displayed.displayed,
128
+ artifactPath: artifact?.path,
129
+ });
130
+ if (limitNotice)
131
+ lines.push(limitNotice);
132
+ transitionSummaries = displayed.items;
133
+ }
134
+ }
135
+ if (artifact)
136
+ lines.push(`Raw JSON saved to: ${artifact.path}`);
137
+ return buildJiraTextResult({
138
+ text: lines.join("\n"),
139
+ context,
140
+ artifact,
141
+ details: {
142
+ issueKey,
143
+ issue: issueSummary,
144
+ includedCounts,
145
+ transitions: transitionSummaries.length > 0 ? transitionSummaries : undefined,
146
+ transitionCount,
147
+ displayedTransitionCount,
148
+ },
149
+ });
150
+ }
151
+ export async function executeJiraGetProject(args, context) {
152
+ const connection = await requireJiraConnection(context);
153
+ const projectKey = optionalString(args.project_key) ?? connection.defaultProjectKey;
154
+ if (!projectKey) {
155
+ throw new ToolExecutionError("JIRA_PROJECT_REQUIRED", "project_key is required because no default Jira project key is configured.");
156
+ }
157
+ const project = await jiraRequest(connection, {
158
+ path: `/project/${pathSegment(projectKey)}`,
159
+ signal: context.signal,
160
+ });
161
+ const result = { project };
162
+ if (args.include_statuses === true) {
163
+ result.statuses = await jiraRequest(connection, {
164
+ path: `/project/${pathSegment(projectKey)}/statuses`,
165
+ signal: context.signal,
166
+ });
167
+ }
168
+ if (args.include_components === true) {
169
+ result.components = await jiraRequest(connection, {
170
+ path: `/project/${pathSegment(projectKey)}/components`,
171
+ signal: context.signal,
172
+ });
173
+ }
174
+ if (args.include_versions === true) {
175
+ result.versions = await jiraRequest(connection, {
176
+ path: `/project/${pathSegment(projectKey)}/versions`,
177
+ signal: context.signal,
178
+ });
179
+ }
180
+ const artifact = await maybeArtifact(context, "get-project", result, args.save_to_file);
181
+ const projectSummary = summarizeJiraProject(project, projectKey);
182
+ const name = projectSummary?.name ?? projectKey;
183
+ const lines = [`Jira project ${projectKey}: ${name}`];
184
+ const includedCounts = {};
185
+ for (const key of ["statuses", "components", "versions"]) {
186
+ const value = result[key];
187
+ if (Array.isArray(value)) {
188
+ includedCounts[key] = value.length;
189
+ lines.push(`${key}: ${value.length}`);
190
+ }
191
+ }
192
+ if (artifact)
193
+ lines.push(`Raw JSON saved to: ${artifact.path}`);
194
+ return buildJiraTextResult({
195
+ text: lines.join("\n"),
196
+ context,
197
+ artifact,
198
+ details: { projectKey, project: projectSummary, includedCounts },
199
+ });
200
+ }
201
+ export async function executeJiraCreateIssue(args, context) {
202
+ const connection = await requireJiraConnection(context);
203
+ const projectKey = optionalString(args.project_key) ?? connection.defaultProjectKey;
204
+ if (!projectKey)
205
+ throw new ToolExecutionError("JIRA_PROJECT_REQUIRED", "project_key is required because no default Jira project key is configured.");
206
+ const issueType = requiredString(args.issue_type, "issue_type");
207
+ const summary = requiredString(args.summary, "summary");
208
+ const fields = rawFields(args.fields);
209
+ fields.project = { key: projectKey };
210
+ fields.issuetype = { name: issueType };
211
+ fields.summary = summary;
212
+ const description = adfFromEither({
213
+ text: args.description,
214
+ adf: args.description_adf,
215
+ textName: "description",
216
+ adfName: "description_adf",
217
+ });
218
+ if (description)
219
+ fields.description = description;
220
+ const parentKey = optionalString(args.parent_key);
221
+ if (parentKey)
222
+ fields.parent = { key: parentKey };
223
+ applyCommonFields(fields, args);
224
+ const data = await jiraRequest(connection, {
225
+ method: "POST",
226
+ path: "/issue",
227
+ body: { fields },
228
+ signal: context.signal,
229
+ });
230
+ const key = typeof data.key === "string" ? data.key : "(unknown)";
231
+ return buildJiraTextResult({
232
+ text: `Created Jira issue ${key}.`,
233
+ context,
234
+ details: {
235
+ issueKey: data.key,
236
+ id: data.id,
237
+ self: data.self,
238
+ projectKey,
239
+ issueType,
240
+ summary,
241
+ },
242
+ });
243
+ }
244
+ export async function executeJiraUpdateIssue(args, context) {
245
+ const connection = await requireJiraConnection(context);
246
+ const issueKey = requiredString(args.issue_key, "issue_key");
247
+ const fields = rawFields(args.fields);
248
+ if (typeof args.summary === "string" && args.summary.trim().length > 0)
249
+ fields.summary = args.summary;
250
+ const description = adfFromEither({
251
+ text: args.description,
252
+ adf: args.description_adf,
253
+ textName: "description",
254
+ adfName: "description_adf",
255
+ });
256
+ if (description)
257
+ fields.description = description;
258
+ applyCommonFields(fields, args);
259
+ if (Object.keys(fields).length === 0) {
260
+ throw new ToolExecutionError("JIRA_EMPTY_UPDATE", "jira_update_issue requires at least one field to update.");
261
+ }
262
+ await jiraRequest(connection, {
263
+ method: "PUT",
264
+ path: `/issue/${pathSegment(issueKey)}`,
265
+ body: { fields },
266
+ signal: context.signal,
267
+ });
268
+ const updatedFields = Object.keys(fields);
269
+ const displayedFields = updatedFields.slice(0, JIRA_FIELD_DISPLAY_LIMIT);
270
+ const fieldNotice = updatedFields.length > displayedFields.length
271
+ ? ` Showing first ${displayedFields.length} of ${updatedFields.length} updated fields.`
272
+ : "";
273
+ return buildJiraTextResult({
274
+ text: `Updated Jira issue ${issueKey}.${fieldNotice}`,
275
+ context,
276
+ details: {
277
+ issueKey,
278
+ updatedFields: displayedFields,
279
+ updatedFieldCount: updatedFields.length,
280
+ },
281
+ });
282
+ }
283
+ export async function executeJiraAddComment(args, context) {
284
+ const connection = await requireJiraConnection(context);
285
+ const issueKey = requiredString(args.issue_key, "issue_key");
286
+ const body = adfFromEither({
287
+ text: args.body,
288
+ adf: args.body_adf,
289
+ textName: "body",
290
+ adfName: "body_adf",
291
+ });
292
+ if (!body)
293
+ throw new ToolExecutionError("JIRA_COMMENT_REQUIRED", "Provide body or body_adf.");
294
+ const data = await jiraRequest(connection, {
295
+ method: "POST",
296
+ path: `/issue/${pathSegment(issueKey)}/comment`,
297
+ body: { body },
298
+ signal: context.signal,
299
+ });
300
+ return buildJiraTextResult({
301
+ text: `Added comment to Jira issue ${issueKey}.`,
302
+ context,
303
+ details: { issueKey, commentId: data.id },
304
+ });
305
+ }
306
+ export async function executeJiraTransitionIssue(args, context) {
307
+ const connection = await requireJiraConnection(context);
308
+ const issueKey = requiredString(args.issue_key, "issue_key");
309
+ const transitionsResponse = await getTransitions(connection, issueKey, context);
310
+ const transitions = Array.isArray(transitionsResponse.transitions)
311
+ ? transitionsResponse.transitions
312
+ : [];
313
+ const transitionArg = optionalString(args.transition);
314
+ if (args.dry_run === true || !transitionArg) {
315
+ const transitionSummaries = transitions.flatMap((transition) => {
316
+ const summary = summarizeJiraTransition(transition);
317
+ return summary ? [summary] : [];
318
+ });
319
+ const displayed = takeDisplayItems(transitionSummaries);
320
+ const lines = [
321
+ `Available transitions for ${issueKey}:`,
322
+ ...displayed.items.map(formatTransitionSummaryLine),
323
+ ];
324
+ const limitNotice = displayLimitNotice({
325
+ noun: "transition",
326
+ total: transitionSummaries.length,
327
+ displayed: displayed.displayed,
328
+ });
329
+ if (limitNotice)
330
+ lines.push(limitNotice);
331
+ return buildJiraTextResult({
332
+ text: lines.join("\n"),
333
+ context,
334
+ details: {
335
+ issueKey,
336
+ transitions: displayed.items,
337
+ transitionCount: transitionSummaries.length,
338
+ displayedTransitionCount: displayed.displayed,
339
+ },
340
+ });
341
+ }
342
+ const transition = matchTransition(transitions, transitionArg);
343
+ if (!transition) {
344
+ throw new ToolExecutionError("JIRA_TRANSITION_NOT_FOUND", `No Jira transition matched "${transitionArg}" for ${issueKey}.`, { availableTransitions: transitions.map(transitionSummary) });
345
+ }
346
+ const transitionRecord = transition;
347
+ const fields = rawFields(args.fields);
348
+ const resolution = optionalString(args.resolution);
349
+ if (resolution)
350
+ fields.resolution = { name: resolution };
351
+ const body = {
352
+ transition: { id: String(transitionRecord.id) },
353
+ };
354
+ if (Object.keys(fields).length > 0)
355
+ body.fields = fields;
356
+ const comment = optionalString(args.comment);
357
+ if (comment)
358
+ body.update = {
359
+ comment: [
360
+ {
361
+ add: {
362
+ body: adfFromEither({
363
+ text: comment,
364
+ adf: undefined,
365
+ textName: "comment",
366
+ adfName: "comment_adf",
367
+ }),
368
+ },
369
+ },
370
+ ],
371
+ };
372
+ await jiraRequest(connection, {
373
+ method: "POST",
374
+ path: `/issue/${pathSegment(issueKey)}/transitions`,
375
+ body,
376
+ signal: context.signal,
377
+ });
378
+ const transitionSummaryDetails = summarizeJiraTransition(transition);
379
+ return buildJiraTextResult({
380
+ text: `Transitioned Jira issue ${issueKey} via ${transitionSummaryDetails ? formatTransitionSummaryLine(transitionSummaryDetails) : transitionLine(transition)}.`,
381
+ context,
382
+ details: { issueKey, transition: transitionSummaryDetails },
383
+ });
384
+ }
385
+ async function getTransitions(connection, issueKey, context) {
386
+ return jiraRequest(connection, {
387
+ path: `/issue/${pathSegment(issueKey)}/transitions`,
388
+ query: { expand: "transitions.fields" },
389
+ signal: context.signal,
390
+ });
391
+ }
392
+ async function maybeArtifact(context, kind, payload, saveToFile) {
393
+ if (saveToFile === false)
394
+ return undefined;
395
+ return writeJiraArtifact(context, kind, payload);
396
+ }
397
+ function requiredString(value, name) {
398
+ if (typeof value !== "string" || value.trim().length === 0) {
399
+ throw new Error(`${name} must be a non-empty string.`);
400
+ }
401
+ return value.trim();
402
+ }
403
+ function optionalString(value) {
404
+ return typeof value === "string" && value.trim().length > 0
405
+ ? value.trim()
406
+ : undefined;
407
+ }
408
+ function optionalStringArray(value) {
409
+ if (value === undefined)
410
+ return undefined;
411
+ if (!Array.isArray(value))
412
+ throw new Error("Expected an array of strings.");
413
+ return value
414
+ .filter((item) => typeof item === "string" && item.trim().length > 0)
415
+ .map((item) => item.trim());
416
+ }
417
+ function boundedNumber(value, fallback, min, max) {
418
+ if (typeof value !== "number" || !Number.isFinite(value))
419
+ return fallback;
420
+ return Math.min(max, Math.max(min, Math.floor(value)));
421
+ }
422
+ function rawFields(value) {
423
+ if (value === undefined)
424
+ return {};
425
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
426
+ throw new Error("fields must be an object.");
427
+ }
428
+ return { ...value };
429
+ }
430
+ function applyCommonFields(fields, args) {
431
+ const labels = optionalStringArray(args.labels);
432
+ if (labels)
433
+ fields.labels = labels;
434
+ const priority = optionalString(args.priority);
435
+ if (priority)
436
+ fields.priority = { name: priority };
437
+ const assignee = optionalString(args.assignee_account_id);
438
+ if (assignee)
439
+ fields.assignee = { accountId: assignee };
440
+ const components = optionalStringArray(args.components);
441
+ if (components)
442
+ fields.components = components.map((name) => ({ name }));
443
+ }
444
+ function matchTransition(transitions, query) {
445
+ const normalized = normalize(query);
446
+ return transitions.find((transition) => {
447
+ if (!transition || typeof transition !== "object")
448
+ return false;
449
+ const record = transition;
450
+ const id = String(record.id ?? "");
451
+ const name = typeof record.name === "string" ? record.name : "";
452
+ const to = nameOf(record.to) ?? "";
453
+ return (id === query ||
454
+ normalize(name) === normalized ||
455
+ normalize(to) === normalized);
456
+ });
457
+ }
458
+ function transitionSummary(transition) {
459
+ if (!transition || typeof transition !== "object")
460
+ return { value: transition };
461
+ const record = transition;
462
+ return {
463
+ id: record.id,
464
+ name: record.name,
465
+ to: nameOf(record.to),
466
+ };
467
+ }
468
+ function normalize(value) {
469
+ return value.trim().toLowerCase();
470
+ }
471
+ //# sourceMappingURL=jira.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jira.js","sourceRoot":"","sources":["../../../src/execution/jira/jira.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../../src/execution/shell/bash.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAkBhF,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAuH9B"}
1
+ {"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../../src/execution/shell/bash.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAmBhF,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CA8H9B"}
@@ -2,6 +2,7 @@ import { spawn } from "node:child_process";
2
2
  import { numberArg } from "../common/args.js";
3
3
  import { boundLiveOutputChunk } from "../common/output-budget.js";
4
4
  import { buildProcessResult } from "../common/process-result.js";
5
+ import { resolveBashShellConfig } from "./shell-config.js";
5
6
  const FORCE_KILL_AFTER_MS = 2000;
6
7
  function nonInteractiveShellEnv() {
7
8
  return {
@@ -29,12 +30,15 @@ export async function executeBash(args, context) {
29
30
  reject(new Error("Command aborted."));
30
31
  return;
31
32
  }
32
- const child = spawn(args.command, {
33
+ const shellConfig = resolveBashShellConfig({
34
+ shellPath: context.shellPath,
35
+ });
36
+ const child = spawn(shellConfig.shell, [...shellConfig.args, args.command], {
33
37
  cwd: context.cwd,
34
- shell: true,
35
38
  detached: process.platform !== "win32",
36
39
  env: nonInteractiveShellEnv(),
37
40
  stdio: ["ignore", "pipe", "pipe"],
41
+ windowsHide: true,
38
42
  });
39
43
  let settled = false;
40
44
  let timedOut = false;
@@ -1 +1 @@
1
- {"version":3,"file":"bash.js","sourceRoot":"","sources":["../../../src/execution/shell/bash.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bash.js","sourceRoot":"","sources":["../../../src/execution/shell/bash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC,SAAS,sBAAsB;IAC7B,OAAO;QACL,GAAG,OAAO,CAAC,GAAG;QACd,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,KAAK;QAChB,mBAAmB,EAAE,GAAG;QACxB,IAAI,EAAE,MAAM;QACZ,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG;KAC1B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAA6B,EAC7B,OAA6B;IAE7B,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,cAAc,GAClB,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;QAC9B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACzC,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAEpC,OAAO,MAAM,IAAI,OAAO,CAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAChE,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,sBAAsB,CAAC;YACzC,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CACjB,WAAW,CAAC,KAAK,EACjB,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,OAAiB,CAAC,EAC7C;YACE,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;YACtC,GAAG,EAAE,sBAAsB,EAAE;YAC7B,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,WAAW,EAAE,IAAI;SAClB,CACF,CAAC;QAEF,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,OAAmC,CAAC;QACxC,IAAI,gBAA4C,CAAC;QACjD,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,OAAO;gBAAE,YAAY,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,gBAAgB;gBAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC;YACrD,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxD,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,CAAC,SAAyB,SAAS,EAAE,EAAE;YAClD,IAAI,CAAC;gBACH,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;oBAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,CAAC;QACH,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,OAAO;gBAAE,OAAO;YACpB,IAAI,EAAE,CAAC;YACP,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC;QAEF,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,IAAI,cAAc,KAAK,SAAS,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;YACvD,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBACxB,IAAI,OAAO;oBAAE,OAAO;gBACpB,QAAQ,GAAG,IAAI,CAAC;gBAChB,aAAa,GAAG,IAAI,CAAC;gBACrB,IAAI,CAAC,SAAS,CAAC,CAAC;gBAChB,gBAAgB,GAAG,UAAU,CAAC,GAAG,EAAE;oBACjC,IAAI,CAAC,OAAO;wBAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBAChC,CAAC,EAAE,mBAAmB,CAAC,CAAC;YAC1B,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC,CAAC;QAC5B,CAAC;QAED,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACzC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACjB,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;aACpD,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACzC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACjB,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;aACpD,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YACjC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,EAAE,CAAC;YACV,KAAK,WAAW,CACd,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,IAAI,EACJ,MAAM,EACN,OAAO,CAAC,OAAO,EACf;gBACE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBACrD,QAAQ;gBACR,aAAa;gBACb,cAAc,EACZ,cAAc,KAAK,SAAS;oBAC1B,CAAC,CAAC,2BAA2B,cAAc,SAAS,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,GAAG;oBACtG,CAAC,CAAC,SAAS;aAChB,CACF;iBACE,IAAI,CAAC,OAAO,CAAC;iBACb,KAAK,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,YAAsB,EACtB,YAAsB,EACtB,cAAwB,EACxB,IAAmB,EACnB,MAA6B,EAC7B,OAA2B,EAC3B,UAKI,EAAE;IAEN,OAAO,kBAAkB,CAAC;QACxB,YAAY;QACZ,YAAY;QACZ,cAAc;QACd,IAAI;QACJ,MAAM;QACN,gBAAgB,EAAE,YAAY;QAC9B,iBAAiB,EAAE,SAAS;QAC5B,OAAO;QACP,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,cAAc,EAAE,OAAO,CAAC,cAAc;KACvC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,16 @@
1
+ export interface ShellConfig {
2
+ shell: string;
3
+ args: string[];
4
+ }
5
+ export interface ResolveBashShellConfigOptions {
6
+ shellPath?: string;
7
+ platform?: NodeJS.Platform;
8
+ env?: NodeJS.ProcessEnv;
9
+ pathExists?: (path: string) => boolean;
10
+ runCommand?: (command: string, args: string[]) => {
11
+ stdout: string;
12
+ status: number | null;
13
+ };
14
+ }
15
+ export declare function resolveBashShellConfig(options?: ResolveBashShellConfigOptions): ShellConfig;
16
+ //# sourceMappingURL=shell-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-config.d.ts","sourceRoot":"","sources":["../../../src/execution/shell/shell-config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,6BAA6B;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,UAAU,CAAC,EAAE,CACX,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,KACX;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CAChD;AA0CD,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,6BAAkC,GAC1C,WAAW,CA6Cb"}
@@ -0,0 +1,74 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { existsSync } from "node:fs";
3
+ function defaultRunCommand(command, args) {
4
+ try {
5
+ const result = spawnSync(command, args, {
6
+ encoding: "utf8",
7
+ timeout: 5000,
8
+ windowsHide: true,
9
+ stdio: ["ignore", "pipe", "ignore"],
10
+ });
11
+ return {
12
+ stdout: typeof result.stdout === "string" ? result.stdout : "",
13
+ status: result.status,
14
+ };
15
+ }
16
+ catch {
17
+ return { stdout: "", status: null };
18
+ }
19
+ }
20
+ function findBashOnPath(platform, pathExists, runCommand) {
21
+ const result = platform === "win32"
22
+ ? runCommand("where", ["bash.exe"])
23
+ : runCommand("which", ["bash"]);
24
+ if (result.status !== 0 || !result.stdout)
25
+ return undefined;
26
+ const firstMatch = result.stdout.trim().split(/\r?\n/)[0];
27
+ if (!firstMatch)
28
+ return undefined;
29
+ return platform === "win32" && !pathExists(firstMatch)
30
+ ? undefined
31
+ : firstMatch;
32
+ }
33
+ export function resolveBashShellConfig(options = {}) {
34
+ const platform = options.platform ?? process.platform;
35
+ const env = options.env ?? process.env;
36
+ const pathExists = options.pathExists ?? existsSync;
37
+ const runCommand = options.runCommand ?? defaultRunCommand;
38
+ const customShellPath = options.shellPath?.trim();
39
+ if (customShellPath) {
40
+ if (pathExists(customShellPath)) {
41
+ return { shell: customShellPath, args: ["-c"] };
42
+ }
43
+ throw new Error(`Custom shell path not found: ${customShellPath}`);
44
+ }
45
+ if (platform === "win32") {
46
+ const candidates = [];
47
+ const programFiles = env.ProgramFiles;
48
+ if (programFiles)
49
+ candidates.push(`${programFiles}\\Git\\bin\\bash.exe`);
50
+ const programFilesX86 = env["ProgramFiles(x86)"];
51
+ if (programFilesX86) {
52
+ candidates.push(`${programFilesX86}\\Git\\bin\\bash.exe`);
53
+ }
54
+ for (const candidate of candidates) {
55
+ if (pathExists(candidate))
56
+ return { shell: candidate, args: ["-c"] };
57
+ }
58
+ const bashOnPath = findBashOnPath(platform, pathExists, runCommand);
59
+ if (bashOnPath)
60
+ return { shell: bashOnPath, args: ["-c"] };
61
+ throw new Error(`No bash shell found. Options:\n` +
62
+ ` 1. Install Git for Windows: https://git-scm.com/download/win\n` +
63
+ ` 2. Add bash.exe to PATH (Git Bash, MSYS2, Cygwin, etc.)\n` +
64
+ ` 3. Set runtime.shellPath in Nerve settings\n\n` +
65
+ `Searched Git Bash in:\n${candidates.map((path) => ` ${path}`).join("\n")}`);
66
+ }
67
+ if (pathExists("/bin/bash"))
68
+ return { shell: "/bin/bash", args: ["-c"] };
69
+ const bashOnPath = findBashOnPath(platform, pathExists, runCommand);
70
+ if (bashOnPath)
71
+ return { shell: bashOnPath, args: ["-c"] };
72
+ return { shell: "sh", args: ["-c"] };
73
+ }
74
+ //# sourceMappingURL=shell-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-config.js","sourceRoot":"","sources":["../../../src/execution/shell/shell-config.ts"],"names":[],"mappings":"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"}