@wrongstack/tools 0.287.0 → 0.289.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 (93) hide show
  1. package/dist/_fetch-guard.d.ts.map +1 -1
  2. package/dist/_redact-command.d.ts.map +1 -1
  3. package/dist/_spawn-stream.d.ts.map +1 -1
  4. package/dist/audit.js +61 -14
  5. package/dist/audit.js.map +3 -3
  6. package/dist/bash.d.ts +1 -1
  7. package/dist/bash.d.ts.map +1 -1
  8. package/dist/bash.js +97 -19
  9. package/dist/bash.js.map +3 -3
  10. package/dist/builtin.d.ts +12 -10
  11. package/dist/builtin.d.ts.map +1 -1
  12. package/dist/builtin.js +1620 -803
  13. package/dist/builtin.js.map +3 -3
  14. package/dist/codebase-index/background-indexer.d.ts.map +1 -1
  15. package/dist/codebase-index/bm25.d.ts +1 -2
  16. package/dist/codebase-index/bm25.d.ts.map +1 -1
  17. package/dist/codebase-index/codebase-index-tool.d.ts.map +1 -1
  18. package/dist/codebase-index/codebase-search-tool.d.ts.map +1 -1
  19. package/dist/codebase-index/codebase-stats-tool.d.ts +7 -0
  20. package/dist/codebase-index/codebase-stats-tool.d.ts.map +1 -1
  21. package/dist/codebase-index/index-service.d.ts +11 -1
  22. package/dist/codebase-index/index-service.d.ts.map +1 -1
  23. package/dist/codebase-index/index.d.ts +2 -1
  24. package/dist/codebase-index/index.d.ts.map +1 -1
  25. package/dist/codebase-index/index.js +749 -192
  26. package/dist/codebase-index/index.js.map +3 -3
  27. package/dist/codebase-index/indexer.d.ts.map +1 -1
  28. package/dist/codebase-index/schema.d.ts +43 -1
  29. package/dist/codebase-index/schema.d.ts.map +1 -1
  30. package/dist/codebase-index/ts-parser.d.ts.map +1 -1
  31. package/dist/codebase-index/worker-protocol.d.ts +1 -0
  32. package/dist/codebase-index/worker-protocol.d.ts.map +1 -1
  33. package/dist/codebase-index/worker.js +610 -152
  34. package/dist/codebase-index/worker.js.map +3 -3
  35. package/dist/codebase-index/writer.d.ts +27 -1
  36. package/dist/codebase-index/writer.d.ts.map +1 -1
  37. package/dist/e2e.js +477 -0
  38. package/dist/e2e.js.map +7 -0
  39. package/dist/exec.d.ts +1 -1
  40. package/dist/exec.d.ts.map +1 -1
  41. package/dist/exec.js +60 -5
  42. package/dist/exec.js.map +3 -3
  43. package/dist/fetch.js +2 -2
  44. package/dist/fetch.js.map +2 -2
  45. package/dist/format.js +61 -14
  46. package/dist/format.js.map +3 -3
  47. package/dist/glob.js +2 -2
  48. package/dist/glob.js.map +1 -1
  49. package/dist/grep.d.ts.map +1 -1
  50. package/dist/grep.js +2 -2
  51. package/dist/grep.js.map +2 -2
  52. package/dist/index.d.ts +3 -2
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +1786 -809
  55. package/dist/index.js.map +3 -3
  56. package/dist/install.js +61 -14
  57. package/dist/install.js.map +3 -3
  58. package/dist/kanban.d.ts +11 -2
  59. package/dist/kanban.d.ts.map +1 -1
  60. package/dist/kanban.js +695 -571
  61. package/dist/kanban.js.map +3 -3
  62. package/dist/languages/detect.d.ts.map +1 -1
  63. package/dist/languages/index.js +61 -14
  64. package/dist/languages/index.js.map +3 -3
  65. package/dist/languages/types.d.ts +7 -0
  66. package/dist/languages/types.d.ts.map +1 -1
  67. package/dist/lint.js +61 -14
  68. package/dist/lint.js.map +3 -3
  69. package/dist/outdated.js +61 -14
  70. package/dist/outdated.js.map +3 -3
  71. package/dist/pack.js +1617 -800
  72. package/dist/pack.js.map +3 -3
  73. package/dist/plan.js +4 -0
  74. package/dist/plan.js.map +2 -2
  75. package/dist/process-registry.js +12 -5
  76. package/dist/process-registry.js.map +2 -2
  77. package/dist/search.js +2 -2
  78. package/dist/search.js.map +2 -2
  79. package/dist/session-kanban.d.ts +9 -0
  80. package/dist/session-kanban.d.ts.map +1 -1
  81. package/dist/session-kanban.js +137 -0
  82. package/dist/session-kanban.js.map +2 -2
  83. package/dist/task.js +4 -0
  84. package/dist/task.js.map +2 -2
  85. package/dist/test.js +61 -14
  86. package/dist/test.js.map +3 -3
  87. package/dist/todo.js +4 -0
  88. package/dist/todo.js.map +2 -2
  89. package/dist/tree.js +2 -2
  90. package/dist/tree.js.map +1 -1
  91. package/dist/typecheck.js +61 -14
  92. package/dist/typecheck.js.map +3 -3
  93. package/package.json +7 -3
@@ -1 +1 @@
1
- {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAU7C,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AA8J1E;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;CAAO,GAAG,IAAI,CAQpI;AAED,2EAA2E;AAC3E,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAkBD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;CAAO,GAAG,IAAI,CAOjG;AAED,8DAA8D;AAC9D,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,WAAW,CAAC,MAAM,CAAC,CAErD;AAED,kEAAkE;AAClE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C;AA4GD,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;;;;;OASG;IACH,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAID,eAAO,MAAM,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CA0IhD,CAAC"}
1
+ {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,IAAI,EACV,MAAM,kBAAkB,CAAC;AAU1B,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AA8J1E;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;CAAO,GAAG,IAAI,CAQpI;AAED,2EAA2E;AAC3E,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAkBD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;CAAO,GAAG,IAAI,CAOjG;AAED,8DAA8D;AAC9D,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,WAAW,CAAC,MAAM,CAAC,CAErD;AAED,kEAAkE;AAClE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C;AA4GD,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;;;;;OASG;IACH,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAID,eAAO,MAAM,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CA0IhD,CAAC"}
package/dist/exec.js CHANGED
@@ -1,5 +1,10 @@
1
1
  // src/exec.ts
2
2
  import { spawn as spawn2 } from "node:child_process";
3
+ import {
4
+ emitProcessCompleted,
5
+ emitProcessOutput,
6
+ emitProcessStarted
7
+ } from "@wrongstack/core";
3
8
  import { toErrorMessage } from "@wrongstack/core/utils/error";
4
9
 
5
10
  // src/_env.ts
@@ -439,9 +444,14 @@ import { expectDefined } from "@wrongstack/core";
439
444
  var SENSITIVE_FLAG_PATTERNS = [
440
445
  // --flag=value or --flag "value" (value captured up to next space or comma)
441
446
  /--(?:token|password|passwd|pwd|secret|api[-_]?key|api[-_]?secret|auth|credential|private[-_]?key|access[-_]?key|github[-_]?token|gh[-_]?token|bearer|jwt|oauth|pin|pincode|passphrase|access[-_]?token)(?:[=\s,][^\s]*)?/gi,
442
- // -f "value" style short flags
443
- /(?<!\w)-t(?:\s+|\s*=\s*)[^\s,]+/,
444
- /(?<!\w)-(?:p|password)(?:\s+|\s*=\s*)[^\s,]+/gi,
447
+ // -t short flag (token): attached (-tVALUE), separated (-t VALUE), or -t=VALUE.
448
+ // (?<![-\w]) anchors to a token start so we don't match the `-t` inside `--token`.
449
+ // NOTE: synced with @wrongstack/core observability/redact-command.ts.
450
+ /(?<![-\w])-t(?:[=\s]+)?[^\s,-]+/,
451
+ // -p|-password|-a (redis auth) short flags: attached + separated + =value.
452
+ // Same token-start anchor; over-redaction is an accepted tradeoff for a
453
+ // redaction function. Synced with core copy.
454
+ /(?<![-\w])-(?:password|p|a)(?:[=\s]+)?[^\s,-]+/gi,
445
455
  // env var–style secrets: TOKEN=x, API_KEY=y, etc.
446
456
  /(?:TOKEN|API_KEY|API_SECRET|AUTH_TOKEN|GITHUB_TOKEN|GH_TOKEN|BEARER|JWT|OAUTH|CREDENTIAL|SECRET|PRIVATE_KEY|PASSWORD|PASSWD)\s*[=:]\s*[^\s,]+/gi,
447
457
  // Generic high-entropy look: base64 strings >32 chars or hex strings >32 digits — but only
@@ -459,8 +469,10 @@ function redactCommand(cmd) {
459
469
  const flag = match.slice(0, match.indexOf(expectDefined(delim)) + 1);
460
470
  return `${flag}[REDACTED]`;
461
471
  }
462
- const flagEnd = match.match(/^--?[a-zA-Z][a-zA-Z0-9_-]*/)?.[0] ?? match;
463
- return `${flagEnd}=**redacted**`;
472
+ if (match.startsWith("--")) {
473
+ return match;
474
+ }
475
+ return `${match.slice(0, 2)}[REDACTED]`;
464
476
  });
465
477
  }
466
478
  return result;
@@ -2002,12 +2014,30 @@ function runCommand(cmd, args, cwd, timeout, signal, sessionId, danger) {
2002
2014
  resolve2(result);
2003
2015
  };
2004
2016
  const startedAt = Date.now();
2017
+ let stdoutBytes = 0;
2018
+ let stderrBytes = 0;
2019
+ let telemetryCompleted = false;
2020
+ let timedOut = false;
2005
2021
  const spool = createOutputSpool({ tool: `exec-${cmd}`, thresholdBytes: MAX_OUTPUT });
2006
2022
  const resolved = resolveWin32Command(cmd);
2007
2023
  const needsShell = isWin && (resolved.endsWith(".cmd") || resolved.endsWith(".bat"));
2008
2024
  const shim = needsShell ? buildWin32CmdShimInvocation(resolved, args) : null;
2009
2025
  const spawnCmd = shim?.command ?? resolved;
2010
2026
  const spawnArgs = shim?.args ?? args;
2027
+ const emitCompletedOnce = (exitCode, pid2, signal2) => {
2028
+ if (telemetryCompleted) return;
2029
+ telemetryCompleted = true;
2030
+ emitProcessCompleted({
2031
+ ...pid2 !== void 0 ? { pid: pid2 } : {},
2032
+ exitCode,
2033
+ ...signal2 ? { signal: signal2 } : {},
2034
+ durationMs: Date.now() - startedAt,
2035
+ stdoutBytes,
2036
+ stderrBytes,
2037
+ timedOut,
2038
+ endedAt: (/* @__PURE__ */ new Date()).toISOString()
2039
+ });
2040
+ };
2011
2041
  let child;
2012
2042
  try {
2013
2043
  child = spawn2(spawnCmd, spawnArgs, {
@@ -2020,6 +2050,15 @@ function runCommand(cmd, args, cwd, timeout, signal, sessionId, danger) {
2020
2050
  });
2021
2051
  } catch (err) {
2022
2052
  spool.finalize();
2053
+ emitProcessStarted({
2054
+ parentPid: process.pid,
2055
+ command: redactCommand(`${cmd} ${args.join(" ")}`),
2056
+ args: redactCommand(args.join(" ")).split(" ").filter(Boolean),
2057
+ cwd,
2058
+ background: false,
2059
+ startedAt: new Date(startedAt).toISOString()
2060
+ });
2061
+ emitCompletedOnce(1, void 0);
2023
2062
  finish({
2024
2063
  command: cmd,
2025
2064
  args,
@@ -2032,6 +2071,15 @@ function runCommand(cmd, args, cwd, timeout, signal, sessionId, danger) {
2032
2071
  });
2033
2072
  return;
2034
2073
  }
2074
+ emitProcessStarted({
2075
+ ...child.pid !== void 0 ? { pid: child.pid } : {},
2076
+ parentPid: process.pid,
2077
+ command: redactCommand(`${cmd} ${args.join(" ")}`),
2078
+ args: redactCommand(args.join(" ")).split(" ").filter(Boolean),
2079
+ cwd,
2080
+ background: false,
2081
+ startedAt: new Date(startedAt).toISOString()
2082
+ });
2035
2083
  child.on("error", (err) => {
2036
2084
  const isAbort = err && err.code === "ABORT_ERR";
2037
2085
  const stderrText = isAbort ? `Aborted: ${err.message}` : err.message;
@@ -2040,6 +2088,7 @@ function runCommand(cmd, args, cwd, timeout, signal, sessionId, danger) {
2040
2088
  if (typeof pid === "number") registry.unregister(pid);
2041
2089
  registry.afterCall(Date.now() - startedAt, true);
2042
2090
  spool.finalize();
2091
+ emitCompletedOnce(isAbort ? 124 : 1, child.pid, isAbort ? "ABORT" : void 0);
2043
2092
  finish({
2044
2093
  command: cmd,
2045
2094
  args,
@@ -2059,6 +2108,7 @@ function runCommand(cmd, args, cwd, timeout, signal, sessionId, danger) {
2059
2108
  }
2060
2109
  const timer = setTimeout(() => {
2061
2110
  killed = true;
2111
+ timedOut = true;
2062
2112
  if (typeof pid === "number") registry.kill(pid);
2063
2113
  else child.kill("SIGTERM");
2064
2114
  }, timeout);
@@ -2073,11 +2123,15 @@ function runCommand(cmd, args, cwd, timeout, signal, sessionId, danger) {
2073
2123
  }
2074
2124
  child.stdout?.on("data", (chunk) => {
2075
2125
  const text = chunk.toString();
2126
+ stdoutBytes += chunk.byteLength;
2127
+ emitProcessOutput({ pid, stream: "stdout", chunk });
2076
2128
  if (stdout.length < MAX_OUTPUT) stdout += text;
2077
2129
  spool.write(text);
2078
2130
  });
2079
2131
  child.stderr?.on("data", (chunk) => {
2080
2132
  const text = chunk.toString();
2133
+ stderrBytes += chunk.byteLength;
2134
+ emitProcessOutput({ pid, stream: "stderr", chunk });
2081
2135
  if (stderr.length < MAX_OUTPUT) stderr += text;
2082
2136
  spool.write(text);
2083
2137
  });
@@ -2087,6 +2141,7 @@ function runCommand(cmd, args, cwd, timeout, signal, sessionId, danger) {
2087
2141
  if (typeof pid === "number") registry.unregister(pid);
2088
2142
  const durationMs = Date.now() - startedAt;
2089
2143
  const exitCode = killed ? 124 : code ?? 1;
2144
+ emitCompletedOnce(exitCode, pid);
2090
2145
  registry.afterCall(durationMs, exitCode !== 0);
2091
2146
  const spooled = spool.finalize();
2092
2147
  finish({