@nanonets/graft 0.23.0 → 0.24.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 (287) hide show
  1. package/README.md +4 -4
  2. package/dist/ai/crux.d.ts +31 -3
  3. package/dist/ai/crux.d.ts.map +1 -1
  4. package/dist/ai/crux.js +88 -10
  5. package/dist/ai/crux.js.map +1 -1
  6. package/dist/ai/llm/openai.d.ts +101 -0
  7. package/dist/ai/llm/openai.d.ts.map +1 -1
  8. package/dist/ai/llm/openai.js +396 -6
  9. package/dist/ai/llm/openai.js.map +1 -1
  10. package/dist/ai/llm/recover-tool.d.ts +2 -0
  11. package/dist/ai/llm/recover-tool.d.ts.map +1 -1
  12. package/dist/ai/llm/recover-tool.js +1 -1
  13. package/dist/ai/llm/recover-tool.js.map +1 -1
  14. package/dist/ai/synthesize.d.ts.map +1 -1
  15. package/dist/ai/synthesize.js +100 -1
  16. package/dist/ai/synthesize.js.map +1 -1
  17. package/dist/claude/format.d.ts +21 -0
  18. package/dist/claude/format.d.ts.map +1 -1
  19. package/dist/claude/format.js +46 -1
  20. package/dist/claude/format.js.map +1 -1
  21. package/dist/claude/hooks.d.ts +5 -9
  22. package/dist/claude/hooks.d.ts.map +1 -1
  23. package/dist/claude/hooks.js +71 -58
  24. package/dist/claude/hooks.js.map +1 -1
  25. package/dist/claude/init.js +3 -3
  26. package/dist/claude/init.js.map +1 -1
  27. package/dist/claude/note-signals.d.ts +28 -0
  28. package/dist/claude/note-signals.d.ts.map +1 -0
  29. package/dist/claude/note-signals.js +325 -0
  30. package/dist/claude/note-signals.js.map +1 -0
  31. package/dist/claude/shim-template.d.ts.map +1 -1
  32. package/dist/claude/shim-template.js +17 -6
  33. package/dist/claude/shim-template.js.map +1 -1
  34. package/dist/claude/skill-template.d.ts.map +1 -1
  35. package/dist/claude/skill-template.js +49 -18
  36. package/dist/claude/skill-template.js.map +1 -1
  37. package/dist/claude/state.d.ts +4 -3
  38. package/dist/claude/state.d.ts.map +1 -1
  39. package/dist/claude/state.js.map +1 -1
  40. package/dist/claude/sync-run.js +1 -1
  41. package/dist/claude/sync-run.js.map +1 -1
  42. package/dist/cli-picker.d.ts +12 -5
  43. package/dist/cli-picker.d.ts.map +1 -1
  44. package/dist/cli-picker.js +24 -8
  45. package/dist/cli-picker.js.map +1 -1
  46. package/dist/cli.d.ts +2 -0
  47. package/dist/cli.d.ts.map +1 -1
  48. package/dist/cli.js +149 -43
  49. package/dist/cli.js.map +1 -1
  50. package/dist/context/batches.d.ts +29 -0
  51. package/dist/context/batches.d.ts.map +1 -0
  52. package/dist/context/batches.js +130 -0
  53. package/dist/context/batches.js.map +1 -0
  54. package/dist/context/build.d.ts +7 -2
  55. package/dist/context/build.d.ts.map +1 -1
  56. package/dist/context/build.js +84 -50
  57. package/dist/context/build.js.map +1 -1
  58. package/dist/context/node-file.d.ts.map +1 -1
  59. package/dist/context/node-file.js +41 -4
  60. package/dist/context/node-file.js.map +1 -1
  61. package/dist/engine.d.ts +2 -0
  62. package/dist/engine.d.ts.map +1 -1
  63. package/dist/engine.js +1 -0
  64. package/dist/engine.js.map +1 -1
  65. package/dist/graph/cards.d.ts.map +1 -1
  66. package/dist/graph/cards.js +9 -4
  67. package/dist/graph/cards.js.map +1 -1
  68. package/dist/graph/enrich.d.ts.map +1 -1
  69. package/dist/graph/enrich.js +8 -3
  70. package/dist/graph/enrich.js.map +1 -1
  71. package/dist/graph/generic.d.ts.map +1 -1
  72. package/dist/graph/generic.js +207 -6
  73. package/dist/graph/generic.js.map +1 -1
  74. package/dist/graph/lsp/client.d.ts +18 -0
  75. package/dist/graph/lsp/client.d.ts.map +1 -1
  76. package/dist/graph/lsp/client.js +40 -2
  77. package/dist/graph/lsp/client.js.map +1 -1
  78. package/dist/graph/lsp/enrich.d.ts.map +1 -1
  79. package/dist/graph/lsp/enrich.js +9 -1
  80. package/dist/graph/lsp/enrich.js.map +1 -1
  81. package/dist/graph/lsp/registry.d.ts +7 -0
  82. package/dist/graph/lsp/registry.d.ts.map +1 -1
  83. package/dist/graph/lsp/registry.js +27 -2
  84. package/dist/graph/lsp/registry.js.map +1 -1
  85. package/dist/graph/queries/gleam.scm +51 -0
  86. package/dist/graph/resolve.d.ts.map +1 -1
  87. package/dist/graph/resolve.js +65 -3
  88. package/dist/graph/resolve.js.map +1 -1
  89. package/dist/graph/workspace-cli.d.ts +2 -0
  90. package/dist/graph/workspace-cli.d.ts.map +1 -1
  91. package/dist/graph/workspace-cli.js +1 -1
  92. package/dist/graph/workspace-cli.js.map +1 -1
  93. package/dist/init-guard.d.ts +11 -0
  94. package/dist/init-guard.d.ts.map +1 -0
  95. package/dist/init-guard.js +21 -0
  96. package/dist/init-guard.js.map +1 -0
  97. package/dist/mcp/tools.d.ts.map +1 -1
  98. package/dist/mcp/tools.js +2 -1
  99. package/dist/mcp/tools.js.map +1 -1
  100. package/dist/notes/branches.d.ts +7 -1
  101. package/dist/notes/branches.d.ts.map +1 -1
  102. package/dist/notes/branches.js +31 -3
  103. package/dist/notes/branches.js.map +1 -1
  104. package/dist/notes/cold-start.d.ts +12 -2
  105. package/dist/notes/cold-start.d.ts.map +1 -1
  106. package/dist/notes/cold-start.js +46 -5
  107. package/dist/notes/cold-start.js.map +1 -1
  108. package/dist/notes/credit.d.ts +37 -0
  109. package/dist/notes/credit.d.ts.map +1 -0
  110. package/dist/notes/credit.js +78 -0
  111. package/dist/notes/credit.js.map +1 -0
  112. package/dist/notes/find-notes.d.ts +17 -0
  113. package/dist/notes/find-notes.d.ts.map +1 -0
  114. package/dist/notes/find-notes.js +48 -0
  115. package/dist/notes/find-notes.js.map +1 -0
  116. package/dist/notes/flatten.d.ts +31 -0
  117. package/dist/notes/flatten.d.ts.map +1 -0
  118. package/dist/notes/flatten.js +73 -0
  119. package/dist/notes/flatten.js.map +1 -0
  120. package/dist/notes/git-facts.d.ts +7 -1
  121. package/dist/notes/git-facts.d.ts.map +1 -1
  122. package/dist/notes/git-facts.js +12 -2
  123. package/dist/notes/git-facts.js.map +1 -1
  124. package/dist/notes/home.d.ts +24 -6
  125. package/dist/notes/home.d.ts.map +1 -1
  126. package/dist/notes/home.js +82 -15
  127. package/dist/notes/home.js.map +1 -1
  128. package/dist/notes/learning-fields.d.ts +102 -0
  129. package/dist/notes/learning-fields.d.ts.map +1 -0
  130. package/dist/notes/learning-fields.js +214 -0
  131. package/dist/notes/learning-fields.js.map +1 -0
  132. package/dist/notes/memory-notes.d.ts +71 -0
  133. package/dist/notes/memory-notes.d.ts.map +1 -0
  134. package/dist/notes/memory-notes.js +239 -0
  135. package/dist/notes/memory-notes.js.map +1 -0
  136. package/dist/notes/note-gate.d.ts +42 -0
  137. package/dist/notes/note-gate.d.ts.map +1 -0
  138. package/dist/notes/note-gate.js +181 -0
  139. package/dist/notes/note-gate.js.map +1 -0
  140. package/dist/notes/notes.d.ts +29 -77
  141. package/dist/notes/notes.d.ts.map +1 -1
  142. package/dist/notes/notes.js +69 -228
  143. package/dist/notes/notes.js.map +1 -1
  144. package/dist/notes/pr-reviews.d.ts +35 -7
  145. package/dist/notes/pr-reviews.d.ts.map +1 -1
  146. package/dist/notes/pr-reviews.js +156 -46
  147. package/dist/notes/pr-reviews.js.map +1 -1
  148. package/dist/notes/secrets.d.ts +28 -0
  149. package/dist/notes/secrets.d.ts.map +1 -0
  150. package/dist/notes/secrets.js +362 -0
  151. package/dist/notes/secrets.js.map +1 -0
  152. package/dist/notes/session-cost.d.ts +2 -0
  153. package/dist/notes/session-cost.d.ts.map +1 -1
  154. package/dist/notes/session-cost.js +8 -3
  155. package/dist/notes/session-cost.js.map +1 -1
  156. package/dist/notes/targets.d.ts +37 -0
  157. package/dist/notes/targets.d.ts.map +1 -0
  158. package/dist/notes/targets.js +108 -0
  159. package/dist/notes/targets.js.map +1 -0
  160. package/dist/notes/team-check.d.ts +22 -0
  161. package/dist/notes/team-check.d.ts.map +1 -0
  162. package/dist/notes/team-check.js +130 -0
  163. package/dist/notes/team-check.js.map +1 -0
  164. package/dist/notes/trail-home.d.ts +3 -0
  165. package/dist/notes/trail-home.d.ts.map +1 -0
  166. package/dist/notes/trail-home.js +12 -0
  167. package/dist/notes/trail-home.js.map +1 -0
  168. package/dist/search/grep-cli.d.ts +5 -2
  169. package/dist/search/grep-cli.d.ts.map +1 -1
  170. package/dist/search/grep-cli.js +11 -4
  171. package/dist/search/grep-cli.js.map +1 -1
  172. package/dist/search/ignored-code.d.ts +9 -0
  173. package/dist/search/ignored-code.d.ts.map +1 -0
  174. package/dist/search/ignored-code.js +73 -0
  175. package/dist/search/ignored-code.js.map +1 -0
  176. package/dist/skills/answers-prompt.d.ts +13 -0
  177. package/dist/skills/answers-prompt.d.ts.map +1 -0
  178. package/dist/skills/answers-prompt.js +83 -0
  179. package/dist/skills/answers-prompt.js.map +1 -0
  180. package/dist/skills/never-save.d.ts +5 -0
  181. package/dist/skills/never-save.d.ts.map +1 -0
  182. package/dist/skills/never-save.js +158 -0
  183. package/dist/skills/never-save.js.map +1 -0
  184. package/dist/skills/params.d.ts +39 -0
  185. package/dist/skills/params.d.ts.map +1 -0
  186. package/dist/skills/params.js +275 -0
  187. package/dist/skills/params.js.map +1 -0
  188. package/dist/skills/ran-less.d.ts +5 -0
  189. package/dist/skills/ran-less.d.ts.map +1 -0
  190. package/dist/skills/ran-less.js +51 -0
  191. package/dist/skills/ran-less.js.map +1 -0
  192. package/dist/skills/risk-delta.d.ts +32 -0
  193. package/dist/skills/risk-delta.d.ts.map +1 -0
  194. package/dist/skills/risk-delta.js +56 -0
  195. package/dist/skills/risk-delta.js.map +1 -0
  196. package/dist/skills/risk.d.ts +73 -0
  197. package/dist/skills/risk.d.ts.map +1 -0
  198. package/dist/skills/risk.js +396 -0
  199. package/dist/skills/risk.js.map +1 -0
  200. package/dist/skills/types.d.ts +422 -0
  201. package/dist/skills/types.d.ts.map +1 -0
  202. package/dist/skills/types.js +2 -0
  203. package/dist/skills/types.js.map +1 -0
  204. package/dist/telemetry/contract.d.ts.map +1 -1
  205. package/dist/telemetry/contract.js +8 -6
  206. package/dist/telemetry/contract.js.map +1 -1
  207. package/dist/telemetry/notice.d.ts.map +1 -1
  208. package/dist/telemetry/notice.js +3 -1
  209. package/dist/telemetry/notice.js.map +1 -1
  210. package/dist/trace/check-reads.d.ts +36 -0
  211. package/dist/trace/check-reads.d.ts.map +1 -0
  212. package/dist/trace/check-reads.js +57 -0
  213. package/dist/trace/check-reads.js.map +1 -0
  214. package/dist/trace/host.d.ts +40 -0
  215. package/dist/trace/host.d.ts.map +1 -0
  216. package/dist/trace/host.js +84 -0
  217. package/dist/trace/host.js.map +1 -0
  218. package/dist/trace/redact.d.ts +8 -0
  219. package/dist/trace/redact.d.ts.map +1 -0
  220. package/dist/trace/redact.js +63 -0
  221. package/dist/trace/redact.js.map +1 -0
  222. package/dist/trace/seen-cache.d.ts +9 -0
  223. package/dist/trace/seen-cache.d.ts.map +1 -0
  224. package/dist/trace/seen-cache.js +46 -0
  225. package/dist/trace/seen-cache.js.map +1 -0
  226. package/dist/trace/shell-scan.d.ts +52 -0
  227. package/dist/trace/shell-scan.d.ts.map +1 -0
  228. package/dist/trace/shell-scan.js +318 -0
  229. package/dist/trace/shell-scan.js.map +1 -0
  230. package/dist/trace/shell-words.d.ts +91 -0
  231. package/dist/trace/shell-words.d.ts.map +1 -0
  232. package/dist/trace/shell-words.js +558 -0
  233. package/dist/trace/shell-words.js.map +1 -0
  234. package/dist/trace/shell.d.ts +91 -0
  235. package/dist/trace/shell.d.ts.map +1 -0
  236. package/dist/trace/shell.js +435 -0
  237. package/dist/trace/shell.js.map +1 -0
  238. package/dist/trace/state.d.ts +27 -0
  239. package/dist/trace/state.d.ts.map +1 -0
  240. package/dist/trace/state.js +98 -0
  241. package/dist/trace/state.js.map +1 -0
  242. package/dist/trace/tamper-code.d.ts +9 -0
  243. package/dist/trace/tamper-code.d.ts.map +1 -0
  244. package/dist/trace/tamper-code.js +174 -0
  245. package/dist/trace/tamper-code.js.map +1 -0
  246. package/dist/trace/tamper-git.d.ts +12 -0
  247. package/dist/trace/tamper-git.d.ts.map +1 -0
  248. package/dist/trace/tamper-git.js +77 -0
  249. package/dist/trace/tamper-git.js.map +1 -0
  250. package/dist/trace/types.d.ts +477 -0
  251. package/dist/trace/types.d.ts.map +1 -0
  252. package/dist/trace/types.js +12 -0
  253. package/dist/trace/types.js.map +1 -0
  254. package/dist/trace/walls-glob.d.ts +11 -0
  255. package/dist/trace/walls-glob.d.ts.map +1 -0
  256. package/dist/trace/walls-glob.js +264 -0
  257. package/dist/trace/walls-glob.js.map +1 -0
  258. package/dist/trace/walls-quoted.d.ts +25 -0
  259. package/dist/trace/walls-quoted.d.ts.map +1 -0
  260. package/dist/trace/walls-quoted.js +81 -0
  261. package/dist/trace/walls-quoted.js.map +1 -0
  262. package/dist/upkeep.d.ts +1 -1
  263. package/dist/upkeep.d.ts.map +1 -1
  264. package/dist/upkeep.js +4 -1
  265. package/dist/upkeep.js.map +1 -1
  266. package/dist/util/actions-folder.d.ts +2 -0
  267. package/dist/util/actions-folder.d.ts.map +1 -0
  268. package/dist/util/actions-folder.js +9 -0
  269. package/dist/util/actions-folder.js.map +1 -0
  270. package/dist/util/front-matter.d.ts +31 -4
  271. package/dist/util/front-matter.d.ts.map +1 -1
  272. package/dist/util/front-matter.js +95 -3
  273. package/dist/util/front-matter.js.map +1 -1
  274. package/dist/util/private-file.d.ts +14 -0
  275. package/dist/util/private-file.d.ts.map +1 -0
  276. package/dist/util/private-file.js +82 -0
  277. package/dist/util/private-file.js.map +1 -0
  278. package/dist/util/private-fs.d.ts +25 -0
  279. package/dist/util/private-fs.d.ts.map +1 -0
  280. package/dist/util/private-fs.js +253 -0
  281. package/dist/util/private-fs.js.map +1 -0
  282. package/dist/util/state.d.ts.map +1 -1
  283. package/dist/util/state.js +3 -0
  284. package/dist/util/state.js.map +1 -1
  285. package/dist/viewer/app.js +2 -2
  286. package/package.json +5 -5
  287. package/scripts/run-tests.mjs +14 -2
@@ -0,0 +1,558 @@
1
+ import { ASSIGN, OPEN_KW, base, scan, unquote, words } from './shell-scan.js';
2
+ /** Deeper than any real command: past it, a reader gives its safe answer. */
3
+ export const MAX_DEPTH = 24;
4
+ export const RUNNERS = new Set([
5
+ 'npx', 'npm', 'pnpm', 'yarn', 'bun', 'bunx', 'deno', 'node', 'uv', 'uvx', 'python', 'python3', 'pip', 'pip3',
6
+ 'poetry', 'cargo', 'go', 'make', 'just', 'bundle', 'rake', 'mvn', 'gradle', 'gradlew', 'dotnet', 'docker', 'kubectl',
7
+ 'gh', 'git', 'terraform', 'aws', 'gcloud', 'az',
8
+ ]);
9
+ /** cd export source . echo printf sleep true false pwd clear set unset alias wait */
10
+ export const PLUMBING = new Set(['cd', 'export', 'source', '.', 'echo', 'printf', 'sleep', 'true', 'false', 'pwd', 'clear', 'set', 'unset', 'alias', 'wait']);
11
+ /** Builtins that only steer the shell itself: kinds and programOf treat them like PLUMBING (the exported list stays the design's). */
12
+ const SHELL_ONLY = new Set(['exit', 'return', ':', 'trap', 'shopt', 'setopt', 'local', 'declare', 'typeset', 'readonly']);
13
+ export const shellOnly = (prog) => PLUMBING.has(prog) || SHELL_ONLY.has(prog);
14
+ /** Flags that take the next word as their value, per runner. */
15
+ export const VALUE_FLAGS = {
16
+ git: new Set(['-C', '-c', '--git-dir', '--work-tree', '--namespace']),
17
+ npm: new Set(['--prefix', '-C', '-w', '--workspace']),
18
+ pnpm: new Set(['-C', '--dir', '--filter', '-F', '-w']),
19
+ yarn: new Set(['--cwd']),
20
+ docker: new Set(['-f', '--file', '-p', '--project-name', '-H', '--context']),
21
+ };
22
+ const DURATION = /^\d+(?:\.\d+)?[smhd]?$/;
23
+ /** The words after `timeout [options] DURATION`, or null when `w` doesn't start that way. One pass over the words. */
24
+ export function afterTimeout(w) {
25
+ if (w[0] !== 'timeout' && w[0] !== 'gtimeout')
26
+ return null;
27
+ let i = 1;
28
+ for (; i < w.length; i++) {
29
+ const a = w[i];
30
+ if (/^(?:--preserve-status|--foreground|-v|--verbose)$/.test(a) || /^(?:-[ks]|--kill-after|--signal)=\S/.test(a))
31
+ continue;
32
+ if (/^(?:-[ks]|--kill-after|--signal)$/.test(a)) {
33
+ i++;
34
+ continue;
35
+ }
36
+ break;
37
+ }
38
+ return i < w.length && DURATION.test(w[i]) ? w.slice(i + 1) : null;
39
+ }
40
+ /** `env [-i] [-u NAME] [NAME=V]... cmd` and `sudo|doas [-u user] [-flags] [--] cmd`: the words of cmd, or null. */
41
+ function afterEnvOrSudo(w) {
42
+ const p = w[0];
43
+ let i = 1;
44
+ if (p === 'env') {
45
+ while (i < w.length) {
46
+ const a = w[i];
47
+ if (/^(?:-u|--unset|-C|--chdir|-S|--split-string)$/.test(a))
48
+ i += 2;
49
+ else if (a.startsWith('-') || ASSIGN.test(a))
50
+ i++;
51
+ else
52
+ break;
53
+ }
54
+ }
55
+ else if (p === 'sudo' || p === 'doas') {
56
+ while (i < w.length) {
57
+ const a = w[i];
58
+ if (a === '--') {
59
+ i++;
60
+ break;
61
+ }
62
+ if (/^-[ugCDhprtUT]$/.test(a))
63
+ i += 2;
64
+ else if (a.startsWith('-'))
65
+ i++;
66
+ else
67
+ break;
68
+ }
69
+ }
70
+ else
71
+ return null;
72
+ return i < w.length ? w.slice(i) : null;
73
+ }
74
+ /** The program words of one simple command: env prefixes and wrappers (time, nice, command, nohup, env, sudo, timeout, script -q /dev/null, !) gone. */
75
+ export function programWords(head) {
76
+ let w = words(head);
77
+ for (;;) {
78
+ while (w.length && ASSIGN.test(w[0]))
79
+ w = w.slice(1);
80
+ const p = w[0];
81
+ if (p === 'time' || p === 'nohup' || p === '!' || p === 'exec')
82
+ w = w.slice(p === 'time' && w[1] === '-p' ? 2 : 1);
83
+ else if (p === 'command' && w[1] && !w[1].startsWith('-'))
84
+ w = w.slice(1);
85
+ else if (p === 'nice')
86
+ w = w.slice(w[1] === '-n' ? 3 : w[1]?.startsWith('-') ? 2 : 1);
87
+ else if (p === 'timeout' || p === 'gtimeout') {
88
+ const rest = afterTimeout(w);
89
+ if (!rest)
90
+ return w;
91
+ w = rest;
92
+ }
93
+ else if (p === 'env' || p === 'sudo' || p === 'doas') {
94
+ const rest = afterEnvOrSudo(w);
95
+ if (!rest)
96
+ return w;
97
+ w = rest;
98
+ }
99
+ else if (p === 'script') {
100
+ const dev = w.indexOf('/dev/null');
101
+ if (dev < 0 || !w.slice(1, dev).every((x) => x.startsWith('-')))
102
+ return w;
103
+ w = w.slice(dev + 1);
104
+ }
105
+ else
106
+ return w;
107
+ }
108
+ }
109
+ /** `bash -c 'script'` (also sh, zsh, dash, `-lc`, `-ec`): the script, unquoted; else null. */
110
+ export function shellScript(w) {
111
+ return /^(?:ba|z|da)?sh$/.test(base(w[0] ?? '')) && /^-[a-zA-Z]*c$/.test(w[1] ?? '') && w[2] ? unquote(w[2]) : null;
112
+ }
113
+ /** A top-level `>`, `>>`, `&>`, `N>` or `>|` into a file other than /dev/null (quoted text and comments are not redirects). */
114
+ export function writesFile(head) {
115
+ return /(?:^|[^<>&\d])(?:&|\d)?>>?\|?\s*(?!&|\/dev\/null\b)[^\s&|;]/.test(words(head).join(' ').replace(/(["'])(?:\\.|(?!\1)[\s\S])*\1/g, '""'));
116
+ }
117
+ /* --------------------------------------------- scripts run by an interpreter (D51, D58 e) */
118
+ /** Interpreters whose program can come inline (`-e`, `-c`) or from a heredoc. */
119
+ export const INTERPRETERS = /^(?:python[\d.]*|node|ruby|perl|deno|bun|tsx|php)$/;
120
+ /** Code that starts a program: a child process, or the repo's own code loaded (`require('./scripts/x.js')`, `runpy`). */
121
+ const SCRIPT_STARTS = /\b(?:subprocess|pty\.spawn|os\.(?:system|popen|exec\w*|spawn\w*)\s*\(|Popen\b|child_process|(?:execSync|execFileSync|spawnSync|execFile|spawn|exec)\s*\(|system\s*\(|IO\.popen|Process\.(?:spawn|run)|Deno\.(?:run|Command)|Bun\.(?:spawn|\$))|require\(\s*['"]\.{1,2}\/(?![^'"]*\.json['"])|\bimport\s*\(\s*['"]\.{1,2}\/|\bexec\s*\(\s*open|\brunpy\b/;
122
+ /** Code that writes files. */
123
+ const SCRIPT_WRITES = /\bopen\([^)]*,\s*(?:mode\s*=\s*)?['"][^'"]*[wax]|\.write_(?:text|bytes)\(|\bshutil\.(?:copy\w*|move|rmtree)\(|\bos\.(?:rename|replace|remove|unlink|makedirs|mkdir|rmdir)\(|\.(?:mkdir|touch|unlink|rmdir)\(|\.to_(?:csv|json|parquet|excel)\(|\b(?:write|append)File(?:Sync)?\(|\b(?:rename|copyFile|mkdir|rmdir|unlink|mkdtemp|rm|cp)Sync\(|\bfs\.(?:rm|cp|rename|copyFile|mkdir|unlink|write)\w*\(|createWriteStream\(|\bFile\.(?:write|open\([^)]*['"][wa])|\bFileUtils\.|\bopen\s*\(?\s*(?:my\s+)?\$?\w+\s*,\s*['"]?\s*>/;
124
+ /** Code that sends to the network (a POST, a body, a socket): work. A plain GET that prints is a look. */
125
+ const SCRIPT_SENDS = /\b(?:requests|httpx|session|client|axios)\.(?:post|put|patch|delete)\s*\(|\bmethod\s*[:=]\s*['"](?:POST|PUT|PATCH|DELETE)|\b(?:data|json|body)\s*[:=]\s*(?!None\b|null\b)|\bsocket\b|\bsmtplib\b/i;
126
+ /**
127
+ * D51, D58 e: what an interpreter's script does. One line that starts a program is a step
128
+ * (`node -e "require('./scripts/release.js')"`); any other script is work when it writes files, starts
129
+ * programs or sends to the network, and a look when it only reads or prints (a GET that prints is a look). A script over several lines
130
+ * (a heredoc, a multi-line `-e`) is never a step: no one can run it from a skill line.
131
+ */
132
+ export function scriptKind(code, prog = '') {
133
+ const starts = SCRIPT_STARTS.test(code) || (/^(?:ruby|perl|php)$/.test(prog) && /`[^`]*`/.test(code));
134
+ if (starts && !code.includes('\n'))
135
+ return 'step';
136
+ return starts || SCRIPT_WRITES.test(code) || SCRIPT_SENDS.test(code) ? 'work' : 'look';
137
+ }
138
+ /** The code of `node -e CODE`, `python3 -c CODE`, `perl -ne CODE`, `php -r CODE`, `deno eval CODE` (unquoted); else null. */
139
+ export function inlineScript(w) {
140
+ const prog = base(w[0] ?? '');
141
+ if (!INTERPRETERS.test(prog))
142
+ return null;
143
+ const inline = /^python/.test(prog) ? /^-[a-zA-Z]*c$/ : prog === 'perl' ? /^-[a-zA-Z]*[eE]$/ : prog === 'php' ? /^-r$/
144
+ : /^(?:-[a-zA-Z]*[ep]|--eval|--print)$/;
145
+ for (let i = 1; i < w.length; i++) {
146
+ const a = w[i];
147
+ if (prog === 'deno' && i === 1 && a === 'eval')
148
+ return w[2] === undefined ? null : unquote(w[2]);
149
+ if (inline.test(a))
150
+ return w[i + 1] === undefined ? null : unquote(w[i + 1]);
151
+ // A flag that takes a value (`python3 -W ignore`, `node -r ts-node/register`), else a script file: not inline.
152
+ if (/^-(?:W|X|r|-require|-import|-loader)$/.test(a)) {
153
+ i++;
154
+ continue;
155
+ }
156
+ if (!a.startsWith('-'))
157
+ return null;
158
+ }
159
+ return null;
160
+ }
161
+ /** An interpreter fed its program by a heredoc (`python3 - <<'EOF'`, `node <<EOF`), not data for a script file. */
162
+ export function heredocInterpreter(w) {
163
+ const prog = base(w[0] ?? '');
164
+ if (!INTERPRETERS.test(prog))
165
+ return null;
166
+ for (const a of w.slice(1)) {
167
+ if (/^(?:\d*[<>]|&>)/.test(a))
168
+ break; // the heredoc opener or a redirect: the arguments end
169
+ // `-` reads the program from stdin; the words after it are the program's own arguments.
170
+ if (a === '-')
171
+ return prog;
172
+ if (!a.startsWith('-'))
173
+ return null;
174
+ }
175
+ return prog;
176
+ }
177
+ const KW_LEAD = /^(?:(?:for|select|case)\b.*|(?:while|until|if|elif|do|then|else|!)(?:\s+|$))/;
178
+ /** A loop or if, as the simple commands it runs (headers and closing words gone). */
179
+ export function keywordFree(text) {
180
+ return scan(text, false).segs.map((p) => {
181
+ let t = text.slice(p.start, p.end);
182
+ for (let n = 0; n < 8 && KW_LEAD.test(t); n++)
183
+ t = t.replace(KW_LEAD, '');
184
+ return t.replace(/^(?:done|fi|esac)$/, '');
185
+ }).filter(Boolean);
186
+ }
187
+ export const stripKeywords = (text) => keywordFree(text).join('; ');
188
+ /** The text inside a piece that is a subshell or group. */
189
+ export const groupInner = (s, p) => s.slice(p.group.open + 1, p.group.close < 0 ? p.end : p.group.close);
190
+ /** One segment's program, and whether it is only plumbing. Subshells, groups, loops and `sh -c` are read inside. */
191
+ function segProgram(s, p, depth) {
192
+ if (p.group)
193
+ return programOfText(groupInner(s, p), depth + 1);
194
+ const head = s.slice(p.start, p.end);
195
+ const w = programWords(head);
196
+ const first = w[0];
197
+ if (!first)
198
+ return { prog: null, plumbing: true };
199
+ if (OPEN_KW.has(first)) {
200
+ const inner = stripKeywords(head);
201
+ if (inner !== head)
202
+ return programOfText(inner, depth + 1);
203
+ }
204
+ const script = shellScript(w);
205
+ if (script !== null)
206
+ return programOfText(script, depth + 1);
207
+ const prog = base(first);
208
+ if (/^['"$`(]/.test(first) && !/^(['"])[^'"$`]+\1$/.test(first))
209
+ return { prog: null, plumbing: false };
210
+ if (shellOnly(prog))
211
+ return { prog, plumbing: true };
212
+ if (!RUNNERS.has(prog))
213
+ return { prog, plumbing: false };
214
+ const takes = VALUE_FLAGS[prog];
215
+ for (let i = 1; i < w.length; i++) {
216
+ const a = w[i];
217
+ if (a.startsWith('-')) {
218
+ if (takes?.has(a))
219
+ i++;
220
+ continue;
221
+ }
222
+ // Quotes, a heredoc opener or a redirect: no second word.
223
+ if (/^(?:['"$`]|\d*[<>]|&>)/.test(a))
224
+ break;
225
+ return { prog: `${prog} ${base(a).slice(0, 24)}`, plumbing: false };
226
+ }
227
+ return { prog, plumbing: false };
228
+ }
229
+ /** The first segment's program that isn't plumbing (else the first plumbing one). */
230
+ export function programOfText(text, depth = 0) {
231
+ if (depth > MAX_DEPTH)
232
+ return { prog: null, plumbing: false };
233
+ const { segs } = scan(text);
234
+ let firstPlumbing = null;
235
+ for (const p of segs) {
236
+ const r = segProgram(text, p, depth);
237
+ if (!r.plumbing)
238
+ return r;
239
+ firstPlumbing ??= r.prog;
240
+ }
241
+ return { prog: firstPlumbing, plumbing: true };
242
+ }
243
+ /** Every simple command in `cmd`, in order: subshells, groups, loops and ifs opened up; heredoc bodies left out. */
244
+ export function simpleCommands(cmd, depth = 0) {
245
+ const s = String(cmd ?? '');
246
+ if (depth > MAX_DEPTH)
247
+ return [s];
248
+ const out = [];
249
+ for (const p of scan(s).segs) {
250
+ if (p.group) {
251
+ out.push(...simpleCommands(groupInner(s, p), depth + 1));
252
+ continue;
253
+ }
254
+ const head = s.slice(p.start, p.end);
255
+ if (OPEN_KW.has(words(head)[0] ?? '')) {
256
+ for (const inner of keywordFree(head))
257
+ if (inner !== head)
258
+ out.push(...simpleCommands(inner, depth + 1));
259
+ continue;
260
+ }
261
+ out.push(head);
262
+ }
263
+ return out;
264
+ }
265
+ /** One simple command with its env prefixes and wrappers (time, nice, command, nohup, env, sudo, timeout, script -q /dev/null, !) dropped. */
266
+ export function bareCommand(simple) {
267
+ return programWords(String(simple ?? '')).join(' ');
268
+ }
269
+ /* --------------------------------------------- words only quoted text carries (the agent guard, D89) */
270
+ /** Programs that only read or print the text they are given (or read from a pipe), by their bare name: a path or a copy could be anything. No pager (`!` runs a shell). */
271
+ const TEXT_PROGRAMS = /^(?:grep|egrep|fgrep|rg|ag|echo|printf|cat|sed|awk|gawk|mawk|nawk|git|head|tail|wc|sort|uniq|cut|tr|nl|column)$/;
272
+ /** Words that change what a bare program name runs: an alias, a function, PATH. */
273
+ const RENAMES = /^(?:alias|function|hash|enable|builtin)$|^[\w.-]+\(\)|^PATH\+?=/;
274
+ /** awk that runs a command (`system(…)`, a pipe, getline, an extension), sed's `e` command or `s///e` flag; flags that run a program. */
275
+ const AWK_RUNS = /system|getline|\||@load/;
276
+ const RUNS_FLAG = {
277
+ rg: /^--(?:pre|hostname-bin)/,
278
+ git: /^(?:-O|--open-files-in-pager)/,
279
+ sort: /^--compress/,
280
+ printf: /^-v/,
281
+ };
282
+ const SED_RUNS = /(?:^|[;\n{}])\s*[\d$,/]*\s*e(?:[\s;}]|$)|[/|#:,@!%][gpIiMmw\d]{0,8}e[gpIiMm\d]{0,8}\s*(?:[;}\n]|$)/;
283
+ const CAT_HEREDOC = /^\$\(\s*cat\s+<<-?[ \t]*(?:'(\w{1,64})'|"(\w{1,64})"|(\w{1,64}))[ \t]*\n/;
284
+ /**
285
+ * `head` with each `$(cat <<'EOF' … EOF)` (the shape agents write commit
286
+ * messages in) turned into `""`; null when any other substitution is left
287
+ * (`$(…)`, a backtick, `<(…)`, `>(…)`) or a body would expand one. One pass.
288
+ */
289
+ function withoutCatHeredocs(head) {
290
+ let out = '';
291
+ let i = 0;
292
+ for (;;) {
293
+ const j = head.indexOf('$(', i);
294
+ if (j < 0) {
295
+ out += head.slice(i);
296
+ break;
297
+ }
298
+ const m = CAT_HEREDOC.exec(head.slice(j, j + 160));
299
+ if (!m)
300
+ return null;
301
+ const delim = (m[1] ?? m[2] ?? m[3]);
302
+ const bodyStart = j + m[0].length;
303
+ let k = bodyStart;
304
+ let end = -1;
305
+ for (;;) {
306
+ const nl = head.indexOf('\n', k);
307
+ const lineEnd = nl < 0 ? head.length : nl;
308
+ if (head.slice(k, lineEnd).replace(/^\t+/, '') === delim) {
309
+ end = lineEnd;
310
+ break;
311
+ }
312
+ if (nl < 0)
313
+ break;
314
+ k = nl + 1;
315
+ }
316
+ if (end < 0)
317
+ return null;
318
+ if (m[3] !== undefined && /\$\(|`/.test(head.slice(bodyStart, k)))
319
+ return null;
320
+ const close = /^\s*\)/.exec(head.slice(end, end + 64));
321
+ if (!close)
322
+ return null;
323
+ out += `${head.slice(i, j)}""`;
324
+ i = end + close[0].length;
325
+ }
326
+ return /`|[<>]\(/.test(out) ? null : out;
327
+ }
328
+ /** `head` with its quoted text ('…', "…", $'…') blanked: the words the shell splits on its own. One pass. */
329
+ function unquotedText(head) {
330
+ let out = '';
331
+ for (let i = 0; i < head.length; i++) {
332
+ const c = head[i];
333
+ if (c === '\\') {
334
+ out += head.slice(i, i + 2);
335
+ i++;
336
+ continue;
337
+ }
338
+ let j = -1;
339
+ if (c === "'")
340
+ j = head.indexOf("'", i + 1);
341
+ else if (c === '$' && head[i + 1] === "'") {
342
+ j = i + 2;
343
+ while (j < head.length && head[j] !== "'")
344
+ j += head[j] === '\\' ? 2 : 1;
345
+ }
346
+ else if (c === '"') {
347
+ j = i + 1;
348
+ while (j < head.length && head[j] !== '"')
349
+ j += head[j] === '\\' ? 2 : 1;
350
+ }
351
+ else {
352
+ out += c;
353
+ continue;
354
+ }
355
+ out += ' ';
356
+ i = j < 0 ? head.length : j;
357
+ }
358
+ return out;
359
+ }
360
+ /**
361
+ * A segment's heredoc bodies run nothing: every opener quotes its word (`<<'EOF'`, so the body is literal text, its
362
+ * backticks and `$(…)` too), or no body holds a substitution (fix-lab5).
363
+ */
364
+ function literalBodies(head, bodies) {
365
+ if (!bodies.length)
366
+ return true;
367
+ const quoted = /<<-?\s*(['"])\w{1,64}\1/g;
368
+ if (quoted.test(head) && !/<<-?\s*\w/.test(head.replace(quoted, '')))
369
+ return true;
370
+ return !bodies.some((b) => /\$\(|`/.test(b));
371
+ }
372
+ /** The command without its literal heredoc bodies. */
373
+ function outsideLiterals(s, segs) {
374
+ let out = '';
375
+ let at = 0;
376
+ for (const p of segs) {
377
+ if (!literalBodies(s.slice(p.start, p.end), p.bodies.length ? ['$('] : []))
378
+ continue;
379
+ for (const [a, b] of p.bodies) {
380
+ out += s.slice(at, a);
381
+ at = b;
382
+ }
383
+ }
384
+ return out + s.slice(at);
385
+ }
386
+ /** One simple command that only reads or prints its quoted text, with nothing it is given run. */
387
+ function textProgram(head, bodies, hitOf) {
388
+ const plain = withoutCatHeredocs(head);
389
+ if (plain === null || !literalBodies(plain, bodies))
390
+ return false;
391
+ const w = words(plain);
392
+ const prog = w[0] ?? '';
393
+ if (!TEXT_PROGRAMS.test(prog))
394
+ return false;
395
+ if (prog === 'git' && !/^(?:commit|log|grep)$/.test(w[1] ?? ''))
396
+ return false;
397
+ const runs = RUNS_FLAG[prog];
398
+ if (runs && w.some((x) => runs.test(unquote(x))))
399
+ return false;
400
+ if (/awk$/.test(prog) && AWK_RUNS.test(plain))
401
+ return false;
402
+ if (prog === 'sed' && w.slice(1).some((x) => SED_RUNS.test(unquote(x))))
403
+ return false;
404
+ return hitOf(unquotedText(plain)) === null;
405
+ }
406
+ /**
407
+ * D89: where a word the agent may not run (`skills on`) sits in `cmd`.
408
+ * `hitOf` says whether a piece of text carries it. Returns the hit of the
409
+ * first simple command that runs it: the program or a word the shell splits
410
+ * on its own (after `;`, `&&`, `|`, a wrapper, a renamed binary, a
411
+ * variable), text given to a shell or an interpreter (`sh -c`, `eval`,
412
+ * `| sh`, `python -c`, a heredoc into a shell), a substitution inside the
413
+ * quotes, or anything a carrying command pipes into that isn't itself a
414
+ * text program. Null when it sits only inside quoted arguments of text
415
+ * programs (grep, rg, ag, git commit/log/grep, echo, printf, sed, awk
416
+ * patterns, cat) or in a `$(cat <<'EOF' …)` body. `whole` is the answer
417
+ * when no single command carries it, or past `MAX_DEPTH`. Linear: one scan
418
+ * per nesting level.
419
+ */
420
+ export function quotedTextHit(cmd, hitOf, whole, depth = 0, quiet = textProgram) {
421
+ if (depth > MAX_DEPTH)
422
+ return whole;
423
+ const s = String(cmd ?? '');
424
+ const { segs } = scan(s);
425
+ // A process substitution anywhere can be where the text goes (`exec > >(sh); echo "…"`); not one inside a literal
426
+ // heredoc body (`<<'EOF'`: source text an interpreter edits, fix-lab5).
427
+ if (/[<>]\(/.test(s) && /[<>]\(/.test(outsideLiterals(s, segs)))
428
+ return whole;
429
+ let fed = false;
430
+ let carried = false;
431
+ for (const p of segs) {
432
+ const head = s.slice(p.start, p.end);
433
+ const w = words(head);
434
+ if (w.some((x) => RENAMES.test(x)))
435
+ return whole;
436
+ const bodies = p.bodies.map(([a, b]) => s.slice(a, b));
437
+ const own = hitOf([head, ...bodies].join('\n'));
438
+ if (own !== null || fed) {
439
+ carried ||= own !== null;
440
+ if (p.group) {
441
+ const tail = s.slice(p.group.close < 0 ? p.end : p.group.close + 1, p.end);
442
+ if (fed || (tail && hitOf(tail) !== null))
443
+ return own ?? whole;
444
+ const inner = quotedTextHit(groupInner(s, p), hitOf, own ?? whole, depth + 1, quiet);
445
+ if (inner !== null)
446
+ return inner;
447
+ }
448
+ else if (!quiet(head, bodies, hitOf))
449
+ return own ?? whole;
450
+ }
451
+ fed = p.sep === '|' && (own !== null || fed);
452
+ }
453
+ return carried ? null : whole;
454
+ }
455
+ /* --------------------------------------------- files a command only reads (the hook-script guard, D116 item 2) */
456
+ /** Programs that only read the files they are named, by their bare name. Pagers too: what runs a shell there is typed at a terminal. */
457
+ const FILE_READERS = /^(?:grep|egrep|fgrep|rg|ag|cat|sed|less|more|head|tail|wc|nl|file|stat|ls|diff|cmp|shasum|sha1sum|sha256sum|md5|md5sum|od|hexdump|xxd|strings|sort|uniq|cut|tr|column|git)$/;
458
+ const GIT_READS = /^(?:log|show|diff|blame|grep|ls-files|status)$/;
459
+ /** An output redirect to anything but /dev/null or another descriptor: the read becomes a copy. */
460
+ const COPIES = /(?:^|[^<>&\d])\d*(?:&>>?|>>?\|?)\s*(?!\s|\/dev\/null(?:\s|$)|&\d)/;
461
+ /**
462
+ * D116 item 2: one simple command that only reads the files it names (grep, sed without -i or `e`, cat, a pager,
463
+ * head, tail, wc, git log/show/diff), with no substitution, no copy to a file and no flag that runs a program.
464
+ * Given to `quotedTextHit` as its `quiet`, a name sits unrun as such a command's argument or in what it reads.
465
+ */
466
+ export function readsFiles(head, bodies, _hitOf) {
467
+ const plain = withoutCatHeredocs(head);
468
+ if (plain === null || !literalBodies(plain, bodies))
469
+ return false;
470
+ const w = words(plain);
471
+ const prog = w[0] ?? '';
472
+ if (!FILE_READERS.test(prog))
473
+ return false;
474
+ if (prog === 'git' && !GIT_READS.test(w[1] ?? ''))
475
+ return false;
476
+ if (prog === 'git' && w.some((x) => /^--(?:ext-diff|textconv)$/.test(unquote(x))))
477
+ return false;
478
+ const runs = RUNS_FLAG[prog];
479
+ if (runs && w.some((x) => runs.test(unquote(x))))
480
+ return false;
481
+ if (prog === 'sed' && w.slice(1).some((x) => /^-[a-zA-Z]*i|^--in-place/.test(unquote(x)) || SED_RUNS.test(unquote(x))))
482
+ return false;
483
+ if (prog === 'sort' && w.some((x) => /^(?:-[a-zA-Z]*o|--output)/.test(unquote(x))))
484
+ return false;
485
+ if ((prog === 'less' || prog === 'more') && w.slice(1).some((x) => unquote(x).startsWith('+')))
486
+ return false;
487
+ return !COPIES.test(unquotedText(plain));
488
+ }
489
+ /* --------------------------------------------- a hook script named, not run (the hook-script guard, fix-lab5) */
490
+ /** A hook script's name as code or prose writes it (`join(dir, '.claude', 'helpers', 'graft-hooks.cjs')`). */
491
+ const HOOK_IN_CODE = String.raw `(?:(?:trail|graft)-hooks?[\w-]{0,64}\.cjs|hooks?\.cjs|claude\/[\w-]{1,64}\.js)`;
492
+ const HOOK_NAMED = new RegExp(HOOK_IN_CODE, 'i');
493
+ /** Code that runs it: loaded (a require or a dynamic import of it), or handed to a child process or eval, inside the same call. */
494
+ const CODE_RUNS_HOOK = [
495
+ new RegExp(String.raw `\b(?:require|import)\s*\(\s*[^)]{0,300}?${HOOK_IN_CODE}`, 'i'),
496
+ new RegExp(String.raw `\b(?:spawn|spawnSync|exec|execSync|execFile|execFileSync|fork|execa|Popen|run|call|check_call|check_output|getoutput|system|popen|eval|run_path)\s*\(\s*[^)]{0,300}?${HOOK_IN_CODE}`, 'i'),
497
+ ];
498
+ /** A shell line inside code (`'node .claude/helpers/trail-hooks.cjs stop'`): it runs when the code starts programs. */
499
+ const SHELL_LINE_RUNS_HOOK = new RegExp(String.raw `\b(?:node|nodejs|bun|deno|sh|bash|zsh|source)\s+[^\n;|&]{0,200}?${HOOK_IN_CODE}`, 'i');
500
+ /** Deleting, an existence test, git bookkeeping: what these do with a file never runs it. */
501
+ const NEVER_RUNS = /^(?:rm|unlink|rmdir|test|\[|\[\[)$/;
502
+ const GIT_KEEPS = /^(?:add|rm|checkout|restore|commit|check-ignore|ls-files|ls-tree|status|log|show|diff|blame|grep)$/;
503
+ /** `node --check`/`-c` only parses; any of these makes it run code too. */
504
+ const NODE_RUNS = /^(?:-e|-p|--eval|--print|-r|--require|--import|--loader|--experimental-loader)$/;
505
+ /** Text with its '…' parts removed: a `$(…)` or backtick left in it is a substitution the shell runs. */
506
+ function substitutes(text) {
507
+ return /\$\(|`|[<>]\(/.test(text.replace(/'[^']*'/g, "''"));
508
+ }
509
+ /** Whether code an interpreter is given (`node -e`, `python3 - <<EOF`) runs a hook script it names. */
510
+ function codeRunsHook(code) {
511
+ if (!HOOK_NAMED.test(code))
512
+ return false;
513
+ return CODE_RUNS_HOOK.some((re) => re.test(code)) || (SCRIPT_STARTS.test(code) && SHELL_LINE_RUNS_HOOK.test(code));
514
+ }
515
+ /**
516
+ * fix-lab5: one simple command that names a Trail hook script and leaves it unrun, as `quotedTextHit`'s quiet for the
517
+ * hook-script guard. A read (readsFiles); deleting it or a stale copy (`rm`), an existence test, `node --check`, git
518
+ * bookkeeping (add, checkout, commit …); code an interpreter is given that only edits text naming it (a python
519
+ * heredoc that rewrites a source file); a heredoc written to another file (`cat >> notes.md <<EOF`). Never when the
520
+ * shell substitutes something, a file is written to the hook (`cat > trail-hooks.cjs <<EOF`), or the code loads it or
521
+ * hands it to a child process. `hookNamed` is how the guard names one (risk.ts HOOK_SCRIPT).
522
+ */
523
+ export function hookUnrun(head, bodies, hitOf, hookNamed) {
524
+ if (readsFiles(head, bodies, hitOf))
525
+ return true;
526
+ const plain = withoutCatHeredocs(head);
527
+ if (plain === null || substitutes(plain))
528
+ return false;
529
+ const w = programWords(plain);
530
+ const prog = base(w[0] ?? '');
531
+ const args = w.slice(1).map((x) => unquote(x));
532
+ const quietBodies = literalBodies(plain, bodies);
533
+ if (NEVER_RUNS.test(prog) || (prog === 'git' && GIT_KEEPS.test(args[0] ?? '')))
534
+ return !bodies.length && !writesFile(plain);
535
+ if (/^node(?:js)?$/.test(prog) && args.some((a) => a === '--check' || a === '-c'))
536
+ return !args.some((a) => NODE_RUNS.test(a)) && !bodies.length && !writesFile(plain);
537
+ const inline = inlineScript(w);
538
+ if (inline !== null) {
539
+ // The code is text, unless it runs the hook; the interpreter's other words must not name one (a script, a -r).
540
+ const others = w.filter((x) => unquote(x) !== inline).join(' ');
541
+ return !hookNamed(others) && !codeRunsHook(inline) && !bodies.length && !writesFile(plain);
542
+ }
543
+ // Its program from a heredoc only: from a pipe (`cat trail-hooks.cjs | node -`) the program is the hook.
544
+ if (bodies.length && heredocInterpreter(w))
545
+ return quietBodies && !hookNamed(plain) && !codeRunsHook(bodies.join('\n'));
546
+ // A heredoc only written to a file that isn't a hook script: prose, a JSON config, source text. One that writes a
547
+ // script running it (`cat > run.sh <<EOF` with `node …/trail-hooks.cjs stop` in it) is the run itself.
548
+ if ((prog === 'cat' || prog === 'tee') && bodies.length) {
549
+ const body = bodies.join('\n');
550
+ const runs = HOOK_NAMED.test(body) && (CODE_RUNS_HOOK.some((re) => re.test(body)) || SHELL_LINE_RUNS_HOOK.test(body));
551
+ const into = /(?:^|\s)(?:\d?>>?|tee(?:\s+-a)?)\s*(['"]?)([^\s'"]{1,400})\1/.exec(plain)?.[2] ?? '';
552
+ return quietBodies && !hookNamed(plain) && (!runs || TEXT_FILE.test(into));
553
+ }
554
+ return false;
555
+ }
556
+ /** Files that hold text, never run as a script: what a heredoc writes into them only names a hook. */
557
+ const TEXT_FILE = /\.(?:md|txt|json|jsonl|ya?ml|toml|ts|tsx|html|csv|log)$/i;
558
+ //# sourceMappingURL=shell-words.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-words.js","sourceRoot":"","sources":["../../src/trace/shell-words.ts"],"names":[],"mappings":"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"}