cli-jaw 2.17.43 → 2.17.44

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 (223) hide show
  1. package/README.md +13 -2
  2. package/dist/bin/commands/slack.js +73 -7
  3. package/dist/bin/commands/slack.js.map +1 -1
  4. package/dist/server.js +46 -1
  5. package/dist/server.js.map +1 -1
  6. package/dist/src/agent/calendar-context.js +23 -0
  7. package/dist/src/agent/calendar-context.js.map +1 -0
  8. package/dist/src/agent/claude-runtime-run.js +10 -1
  9. package/dist/src/agent/claude-runtime-run.js.map +1 -1
  10. package/dist/src/agent/cursor-acp-models.js +139 -0
  11. package/dist/src/agent/cursor-acp-models.js.map +1 -0
  12. package/dist/src/agent/events/cursor.js +28 -4
  13. package/dist/src/agent/events/cursor.js.map +1 -1
  14. package/dist/src/agent/lifecycle-handler.js +8 -2
  15. package/dist/src/agent/lifecycle-handler.js.map +1 -1
  16. package/dist/src/agent/native-runtime-run.js +22 -1
  17. package/dist/src/agent/native-runtime-run.js.map +1 -1
  18. package/dist/src/agent/runtime/acp/config.js +76 -11
  19. package/dist/src/agent/runtime/acp/config.js.map +1 -1
  20. package/dist/src/agent/runtime/acp/cursor-session.js +6 -1
  21. package/dist/src/agent/runtime/acp/cursor-session.js.map +1 -1
  22. package/dist/src/agent/runtime/liveness.js +24 -0
  23. package/dist/src/agent/runtime/liveness.js.map +1 -0
  24. package/dist/src/agent/runtime/start-failure.js +61 -0
  25. package/dist/src/agent/runtime/start-failure.js.map +1 -0
  26. package/dist/src/agent/spawn/queue.js +11 -6
  27. package/dist/src/agent/spawn/queue.js.map +1 -1
  28. package/dist/src/agent/spawn.js +59 -17
  29. package/dist/src/agent/spawn.js.map +1 -1
  30. package/dist/src/cli/api-auth.js +6 -0
  31. package/dist/src/cli/api-auth.js.map +1 -1
  32. package/dist/src/manager/design/watcher.js +10 -2
  33. package/dist/src/manager/design/watcher.js.map +1 -1
  34. package/dist/src/memory/heartbeat.js +6 -0
  35. package/dist/src/memory/heartbeat.js.map +1 -1
  36. package/dist/src/messaging/channel-validate.js +5 -3
  37. package/dist/src/messaging/channel-validate.js.map +1 -1
  38. package/dist/src/messaging/redact.js +30 -8
  39. package/dist/src/messaging/redact.js.map +1 -1
  40. package/dist/src/messaging/send.js +7 -0
  41. package/dist/src/messaging/send.js.map +1 -1
  42. package/dist/src/orchestrator/collect.js +5 -3
  43. package/dist/src/orchestrator/collect.js.map +1 -1
  44. package/dist/src/orchestrator/gateway.js +10 -3
  45. package/dist/src/orchestrator/gateway.js.map +1 -1
  46. package/dist/src/orchestrator/pipeline.js +21 -9
  47. package/dist/src/orchestrator/pipeline.js.map +1 -1
  48. package/dist/src/orchestrator/request-registry.js +2 -0
  49. package/dist/src/orchestrator/request-registry.js.map +1 -1
  50. package/dist/src/prompt/builder.js +74 -6
  51. package/dist/src/prompt/builder.js.map +1 -1
  52. package/dist/src/prompt/templates/a1-system.md +22 -5
  53. package/dist/src/routes/messaging.js +105 -27
  54. package/dist/src/routes/messaging.js.map +1 -1
  55. package/dist/src/routes/settings.js +20 -8
  56. package/dist/src/routes/settings.js.map +1 -1
  57. package/dist/src/routes/slack-tools.js +176 -0
  58. package/dist/src/routes/slack-tools.js.map +1 -0
  59. package/dist/src/slack/action-rate.js +43 -0
  60. package/dist/src/slack/action-rate.js.map +1 -0
  61. package/dist/src/slack/action-runtime.js +243 -0
  62. package/dist/src/slack/action-runtime.js.map +1 -0
  63. package/dist/src/slack/action-store.js +84 -0
  64. package/dist/src/slack/action-store.js.map +1 -0
  65. package/dist/src/slack/action-types.js +6 -0
  66. package/dist/src/slack/action-types.js.map +1 -0
  67. package/dist/src/slack/actions-canvas.js +108 -0
  68. package/dist/src/slack/actions-canvas.js.map +1 -0
  69. package/dist/src/slack/actions-channel.js +88 -0
  70. package/dist/src/slack/actions-channel.js.map +1 -0
  71. package/dist/src/slack/actions-interactions.js +204 -0
  72. package/dist/src/slack/actions-interactions.js.map +1 -0
  73. package/dist/src/slack/actions-lists.js +308 -0
  74. package/dist/src/slack/actions-lists.js.map +1 -0
  75. package/dist/src/slack/actions-message.js +117 -0
  76. package/dist/src/slack/actions-message.js.map +1 -0
  77. package/dist/src/slack/actions-resources.js +62 -0
  78. package/dist/src/slack/actions-resources.js.map +1 -0
  79. package/dist/src/slack/actions-rts.js +88 -0
  80. package/dist/src/slack/actions-rts.js.map +1 -0
  81. package/dist/src/slack/actions-schedule.js +214 -0
  82. package/dist/src/slack/actions-schedule.js.map +1 -0
  83. package/dist/src/slack/actions.js +17 -0
  84. package/dist/src/slack/actions.js.map +1 -0
  85. package/dist/src/slack/api.js +56 -9
  86. package/dist/src/slack/api.js.map +1 -1
  87. package/dist/src/slack/blocks.js +162 -0
  88. package/dist/src/slack/blocks.js.map +1 -0
  89. package/dist/src/slack/bot.js +562 -378
  90. package/dist/src/slack/bot.js.map +1 -1
  91. package/dist/src/slack/commands.js +24 -5
  92. package/dist/src/slack/commands.js.map +1 -1
  93. package/dist/src/slack/context.js +15 -4
  94. package/dist/src/slack/context.js.map +1 -1
  95. package/dist/src/slack/conversation.js +135 -33
  96. package/dist/src/slack/conversation.js.map +1 -1
  97. package/dist/src/slack/events.js +41 -17
  98. package/dist/src/slack/events.js.map +1 -1
  99. package/dist/src/slack/format.js +181 -0
  100. package/dist/src/slack/format.js.map +1 -1
  101. package/dist/src/slack/history.js +133 -8
  102. package/dist/src/slack/history.js.map +1 -1
  103. package/dist/src/slack/ingress.js +26 -9
  104. package/dist/src/slack/ingress.js.map +1 -1
  105. package/dist/src/slack/interaction-store.js +56 -0
  106. package/dist/src/slack/interaction-store.js.map +1 -0
  107. package/dist/src/slack/manifest.js +3 -0
  108. package/dist/src/slack/manifest.js.map +1 -1
  109. package/dist/src/slack/message-content.js +132 -0
  110. package/dist/src/slack/message-content.js.map +1 -0
  111. package/dist/src/slack/message.js +58 -0
  112. package/dist/src/slack/message.js.map +1 -0
  113. package/dist/src/slack/notice-transport.js +49 -19
  114. package/dist/src/slack/notice-transport.js.map +1 -1
  115. package/dist/src/slack/operator-auth.js +62 -0
  116. package/dist/src/slack/operator-auth.js.map +1 -0
  117. package/dist/src/slack/progress-activity.js +210 -0
  118. package/dist/src/slack/progress-activity.js.map +1 -0
  119. package/dist/src/slack/progress-detail.js +473 -0
  120. package/dist/src/slack/progress-detail.js.map +1 -0
  121. package/dist/src/slack/progress-files.js +70 -0
  122. package/dist/src/slack/progress-files.js.map +1 -0
  123. package/dist/src/slack/progress-lifecycle.js +223 -0
  124. package/dist/src/slack/progress-lifecycle.js.map +1 -0
  125. package/dist/src/slack/progress-restore.js +81 -0
  126. package/dist/src/slack/progress-restore.js.map +1 -0
  127. package/dist/src/slack/progress.js +325 -143
  128. package/dist/src/slack/progress.js.map +1 -1
  129. package/dist/src/slack/quote.js +227 -0
  130. package/dist/src/slack/quote.js.map +1 -0
  131. package/dist/src/slack/render-features.js +105 -0
  132. package/dist/src/slack/render-features.js.map +1 -0
  133. package/dist/src/slack/reply-delivery.js +110 -0
  134. package/dist/src/slack/reply-delivery.js.map +1 -0
  135. package/dist/src/slack/rts-output-store.js +143 -0
  136. package/dist/src/slack/rts-output-store.js.map +1 -0
  137. package/dist/src/slack/scope-status.js +17 -3
  138. package/dist/src/slack/scope-status.js.map +1 -1
  139. package/dist/src/slack/search-quote.js +70 -0
  140. package/dist/src/slack/search-quote.js.map +1 -0
  141. package/dist/src/slack/search.js +54 -0
  142. package/dist/src/slack/search.js.map +1 -0
  143. package/dist/src/slack/send-handler.js +11 -7
  144. package/dist/src/slack/send-handler.js.map +1 -1
  145. package/dist/src/slack/send-only-client.js +116 -79
  146. package/dist/src/slack/send-only-client.js.map +1 -1
  147. package/dist/src/slack/table-content.js +253 -0
  148. package/dist/src/slack/table-content.js.map +1 -0
  149. package/dist/src/slack/table-verification.js +64 -0
  150. package/dist/src/slack/table-verification.js.map +1 -0
  151. package/dist/src/slack/task-input.js +55 -0
  152. package/dist/src/slack/task-input.js.map +1 -0
  153. package/dist/src/slack/tool-access.js +127 -0
  154. package/dist/src/slack/tool-access.js.map +1 -0
  155. package/dist/src/slack/tool-capabilities.js +47 -0
  156. package/dist/src/slack/tool-capabilities.js.map +1 -0
  157. package/dist/src/slack/tool-context.js +91 -0
  158. package/dist/src/slack/tool-context.js.map +1 -0
  159. package/dist/src/slack/verified-workspace.js +17 -6
  160. package/dist/src/slack/verified-workspace.js.map +1 -1
  161. package/dist/src/trace/redact.js +2 -1
  162. package/dist/src/trace/redact.js.map +1 -1
  163. package/package.json +1 -1
  164. package/public/dist/.vite/manifest.json +102 -102
  165. package/public/dist/assets/{Agent-CQ4EBgY8.js → Agent-CNad_A6t.js} +1 -1
  166. package/public/dist/assets/{ChannelEnablementControl-JsYvNMlM.js → ChannelEnablementControl-DwUDKjX9.js} +4 -4
  167. package/public/dist/assets/{ChannelSetupEntry-BpyRWEUE.js → ChannelSetupEntry-DH0AuNNX.js} +1 -1
  168. package/public/dist/assets/{ChannelsDiscord-DNfvz1jn.js → ChannelsDiscord-7NmoTjR7.js} +1 -1
  169. package/public/dist/assets/{ChannelsSlack-DzpxIdgW.js → ChannelsSlack-Ba0ax6iT.js} +1 -1
  170. package/public/dist/assets/{ChannelsTelegram-CUhFc5s6.js → ChannelsTelegram-DKA9atf2.js} +1 -1
  171. package/public/dist/assets/{app-Q0prKOFx.js → app-9OQNfmqw.js} +4 -4
  172. package/public/dist/assets/{bgtask-badge-DAcWaUfS.js → bgtask-badge-BvxHqMGi.js} +1 -1
  173. package/public/dist/assets/bgtask-badge-DeSZJGNN.js +1 -0
  174. package/public/dist/assets/{employees-CWS3Juca.js → employees-CkUqN4oh.js} +1 -1
  175. package/public/dist/assets/{iframe-renderer-DCDKBMb7.js → iframe-renderer-C2gchtOj.js} +2 -2
  176. package/public/dist/assets/iframe-renderer-DfvACXIn.js +1 -0
  177. package/public/dist/assets/{manager-v6GYfoPB.js → manager-rb5X-4DJ.js} +1 -1
  178. package/public/dist/assets/{memory-DhNdKZLO.js → memory-BiWzpoBq.js} +1 -1
  179. package/public/dist/assets/memory-Ckp1Eq5a.js +1 -0
  180. package/public/dist/assets/message-history-Bv0l_t7O.js +1 -0
  181. package/public/dist/assets/{message-history-DbRTl1P0.js → message-history-CuFefS02.js} +1 -1
  182. package/public/dist/assets/{render-DP8SJtdZ.js → render-DUGqq9Mu.js} +1 -1
  183. package/public/dist/assets/{settings-85n9NjvX.js → settings-BqUHavbH.js} +1 -1
  184. package/public/dist/assets/settings-C81Kf9uX.js +1 -0
  185. package/public/dist/assets/{settings-C9_D-pn0.js → settings-DQ1fLygB.js} +31 -30
  186. package/public/dist/assets/{settings-core-BcVD2FgV.js → settings-core-CzdXfoOK.js} +1 -1
  187. package/public/dist/assets/settings-core-DO_5M7Lv.js +1 -0
  188. package/public/dist/assets/{settings-embedding-BSpq785l.js → settings-embedding-BAKFrVLV.js} +1 -1
  189. package/public/dist/assets/{settings-types-B09BmpYe.js → settings-types-D3cd6SWy.js} +1 -1
  190. package/public/dist/assets/{sidebar-BVhLb5Ft.js → sidebar-CvGbp9x5.js} +3 -3
  191. package/public/dist/assets/skills-DFpPmMUR.js +1 -0
  192. package/public/dist/assets/{skills-X7qxmHka.js → skills-abLMqY5_.js} +1 -1
  193. package/public/dist/assets/slash-commands-BU58xYih.js +1 -0
  194. package/public/dist/assets/{slash-commands-BnDH4IU_.js → slash-commands-D8o9pqOS.js} +1 -1
  195. package/public/dist/assets/{trace-drawer-DasaS1z4.js → trace-drawer-C6RvkUAd.js} +1 -1
  196. package/public/dist/assets/{ui-BtiBTXng.js → ui-Bxapl_Eu.js} +1 -1
  197. package/public/dist/assets/ui-CUB4iwz3.js +1 -0
  198. package/public/dist/index.html +1 -1
  199. package/public/dist/manager/index.html +1 -1
  200. package/public/dist/settings/index.html +1 -1
  201. package/public/js/features/settings-cli-status.ts +11 -1
  202. package/public/js/features/settings-types.ts +21 -0
  203. package/public/locales/en.json +34 -1
  204. package/public/locales/ja.json +34 -1
  205. package/public/locales/ko.json +34 -1
  206. package/public/locales/zh.json +34 -1
  207. package/scripts/check-native-load.cjs +17 -4
  208. package/scripts/release-gates.mjs +84 -3
  209. package/scripts/service-artifact.mjs +157 -0
  210. package/scripts/service-shell/zsh/.zlogin +23 -0
  211. package/scripts/service-shell/zsh/.zlogout +23 -0
  212. package/scripts/service-shell/zsh/.zprofile +23 -0
  213. package/scripts/service-shell/zsh/.zshenv +23 -0
  214. package/scripts/service-shell/zsh/.zshrc +23 -0
  215. package/public/dist/assets/bgtask-badge-DHA2OQm8.js +0 -1
  216. package/public/dist/assets/iframe-renderer-RpvBly2x.js +0 -1
  217. package/public/dist/assets/memory-4YH8sz0L.js +0 -1
  218. package/public/dist/assets/message-history-lVcLpAw8.js +0 -1
  219. package/public/dist/assets/settings--EGy3_B9.js +0 -1
  220. package/public/dist/assets/settings-core-8wBl1mg-.js +0 -1
  221. package/public/dist/assets/skills-6GFkHTlQ.js +0 -1
  222. package/public/dist/assets/slash-commands-qu8fPAZ3.js +0 -1
  223. package/public/dist/assets/ui-BucJ1zMA.js +0 -1
@@ -0,0 +1,473 @@
1
+ import { posix, win32 } from 'node:path';
2
+ import { redactOutboundText } from '../messaging/redact.js';
3
+ import { projectSlackFilePath, projectSlackToolFile, sanitizeSlackFileLabel } from './progress-files.js';
4
+ const actions = new Set(['Read', 'Write', 'Edit', 'Search', 'List', 'Test', 'Build', 'Run', 'Git', 'HTTP']);
5
+ const shells = new Set(['bash', 'shell', 'exec_command']);
6
+ const scripts = new Set(['node', 'nodejs', 'tsx', 'python', 'python3', 'bash', 'sh']);
7
+ const tasks = new Set(['test', 'build', 'typecheck', 'lint', 'check']);
8
+ const gitTasks = new Set(['status', 'diff', 'log', 'show', 'rev-parse', 'ls-files']);
9
+ const MAX_COMMAND = 8192;
10
+ const inlineFlags = new Set(['-c', '-lc', '-cl', '-e', '--eval', '-p', '--print', '-s', '-']);
11
+ const interpreterFlags = new Set(['--test', '--experimental-test-module-mocks', '--no-warnings', '--experimental-strip-types']);
12
+ function hasInterpreterPrefix(words) {
13
+ const invocation = withoutAssignments(words);
14
+ if (!scripts.has(executable(invocation[0]) ?? ''))
15
+ return false;
16
+ for (const arg of invocation.slice(1)) {
17
+ if (inlineFlags.has(arg))
18
+ return true;
19
+ if (arg.startsWith('-')) {
20
+ if (!interpreterFlags.has(arg))
21
+ return false;
22
+ }
23
+ else
24
+ return Boolean(projectSlackFilePath(arg));
25
+ }
26
+ return false;
27
+ }
28
+ function clip(value, limit) {
29
+ let result = '';
30
+ for (const char of value) {
31
+ if (result.length + char.length > limit)
32
+ break;
33
+ result += char;
34
+ }
35
+ return result;
36
+ }
37
+ function safeText(value, max, identifierContext = false) {
38
+ if (typeof value !== 'string' || !value.trim() || value.length > MAX_COMMAND
39
+ || /[\p{Cc}\p{Cf}\p{Cs}<>`*~|&$\\\[\]{}]/u.test(value)
40
+ || /(?:[a-z][a-z\d+.-]*:\/\/|www\.|@|(?:^|[\s("':=])(?:\/|[a-z]:[\\/]|~\/))/i.test(value)
41
+ || /(?:xox[baprs]-|xapp-|sk-|gh[pousr]_|github_pat_|bearer\s|authorization|password|api[_ -]?key|secret|token\s*[:=])/i.test(value)
42
+ || (!identifierContext && /(?:^|\s)_[^_]+_(?:$|\s)|__/.test(value))
43
+ || /\b[\w.-]+\s*=/.test(value) || /\b\d{1,3}(?:\.\d{1,3}){3}\b/.test(value)
44
+ || redactOutboundText(value) !== value)
45
+ return undefined;
46
+ return clip(value.trim().replace(/\s+/g, ' '), max);
47
+ }
48
+ function identifier(value) {
49
+ return typeof value === 'string' && /^[A-Za-z0-9][A-Za-z0-9_.-]{0,47}$/.test(value) && safeText(value, 48, true) ? value : undefined;
50
+ }
51
+ function qualifier(value) {
52
+ return typeof value === 'string' && /^(?:(?:inline script|lines [1-9]\d{0,5}(?:–[1-9]\d{0,5})?|test|build|typecheck|lint|check|status|diff|log|show|rev-parse|ls-files|GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)(?: · \+[1-7] operations)?|\+[1-7] operations)$/.test(value) ? value : undefined;
53
+ }
54
+ /** Rebuild sparse metadata at the outbound boundary; never retain caller arrays. */
55
+ export function normalizeSlackActivityDetail(value) {
56
+ if (!value || typeof value !== 'object' || Array.isArray(value))
57
+ return undefined;
58
+ const data = value;
59
+ const result = {};
60
+ const purpose = safeText(data['purpose'], 120), tool = identifier(data['tool']), runner = identifier(data['runner']);
61
+ const query = safeText(data['query'], 60), extra = qualifier(data['qualifier']);
62
+ if (purpose)
63
+ result.purpose = purpose;
64
+ if (tool)
65
+ result.tool = tool;
66
+ if (runner)
67
+ result.runner = runner;
68
+ if (typeof data['action'] === 'string' && actions.has(data['action']))
69
+ result.action = data['action'];
70
+ if (Array.isArray(data['targets'])) {
71
+ const targets = data['targets'].slice(0, 2).map(sanitizeSlackFileLabel).filter((v) => Boolean(v))
72
+ .filter(v => result.action !== 'HTTP' || (/^[a-z\d.-]+\.[a-z]{2,}$/i.test(v) && Boolean(safeText(v, 100))));
73
+ if (targets.length)
74
+ result.targets = targets;
75
+ }
76
+ if (query && (!result.action || result.action === 'Search'))
77
+ result.query = query;
78
+ if (extra)
79
+ result.qualifier = extra;
80
+ return Object.keys(result).length ? result : undefined;
81
+ }
82
+ export function formatSlackActivityDetail(value) {
83
+ const d = normalizeSlackActivityDetail(value);
84
+ if (!d)
85
+ return '';
86
+ const parts = [d.action ?? d.tool, d.runner, d.query, d.targets?.join(', '), d.qualifier].filter(Boolean);
87
+ const operation = parts.join(' ');
88
+ return clip([d.purpose, operation].filter(Boolean).join('\n'), 200);
89
+ }
90
+ /** Finite literal lexer, not a shell interpreter. Expansions fail closed; output redirection ends the observable prefix. */
91
+ function lex(command) {
92
+ if (!command || command.length > MAX_COMMAND || /[\p{Cf}\p{Cs}\x00-\x08\x0b-\x1f]/u.test(command))
93
+ return undefined;
94
+ const result = [];
95
+ let words = [], word = '', quote = '', active = false, plainWord = true, count = 0;
96
+ const push = () => { if (active) {
97
+ words.push(word);
98
+ count++;
99
+ word = '';
100
+ active = false;
101
+ plainWord = true;
102
+ } };
103
+ for (let i = 0; i < command.length; i++) {
104
+ const c = command[i];
105
+ if (!quote && !active && c === '#') {
106
+ const newline = command.indexOf('\n', i);
107
+ if (newline < 0)
108
+ break;
109
+ i = newline - 1; // Let the existing separator owner process the newline.
110
+ continue;
111
+ }
112
+ if (!quote && (c === '>' || c === '<')) {
113
+ // Only an adjacent, unquoted IO number belongs to the redirect.
114
+ // Its destination and the entire suffix are deliberately opaque.
115
+ const io = active && plainWord && /^\d+$/.test(word) ? word : undefined;
116
+ if (io !== undefined) {
117
+ word = '';
118
+ active = false;
119
+ }
120
+ push();
121
+ if (words.length)
122
+ result.push({ words, separator: '',
123
+ ...(c === '<' && command[i + 1] === '<' && (io === undefined || io === '0') ? { stdinCode: true } : {}) });
124
+ return count <= 128 && result.length <= 8 ? result : undefined;
125
+ }
126
+ if (c === '$' || c === '`')
127
+ return undefined;
128
+ if (quote) {
129
+ if (c === quote) {
130
+ quote = '';
131
+ continue;
132
+ }
133
+ if (c === '\\' && quote === '"') {
134
+ const next = command[i + 1];
135
+ if (next === undefined)
136
+ return undefined;
137
+ if (next === '"' || next === '\\') {
138
+ word += next;
139
+ i++;
140
+ }
141
+ else
142
+ word += c;
143
+ }
144
+ else
145
+ word += c;
146
+ }
147
+ else if (c === '"' || c === "'") {
148
+ quote = c;
149
+ active = true;
150
+ plainWord = false;
151
+ }
152
+ else if (c === '\\') {
153
+ plainWord = false;
154
+ if (++i >= command.length)
155
+ return undefined;
156
+ word += command[i];
157
+ active = true;
158
+ }
159
+ else if (c === '&' || c === '|' || c === ';' || c === '\n') {
160
+ push();
161
+ const sep = c === '&' && command[i + 1] === '&' ? (i++, '&&') : c;
162
+ if (sep === '&' || (c === '|' && command[i + 1] === '|'))
163
+ return undefined;
164
+ if (words.length)
165
+ result.push({ words, separator: sep });
166
+ words = [];
167
+ }
168
+ else if (/\s/.test(c)) {
169
+ push();
170
+ if (hasInterpreterPrefix(words)) {
171
+ return count <= 128 && result.length < 8 ? [...result, { words, separator: '' }] : undefined; // Never inspect inline bodies or script arguments.
172
+ }
173
+ }
174
+ else {
175
+ word += c;
176
+ active = true;
177
+ }
178
+ if (count > 128 || result.length >= 8)
179
+ return undefined;
180
+ }
181
+ if (quote)
182
+ return undefined;
183
+ push();
184
+ if (words.length)
185
+ result.push({ words, separator: '' });
186
+ return count <= 128 && result.length <= 8 ? result : undefined;
187
+ }
188
+ function executable(raw) {
189
+ if (!raw)
190
+ return undefined;
191
+ return identifier(raw.includes('\\') ? win32.basename(raw) : posix.basename(raw));
192
+ }
193
+ function withoutAssignments(words) {
194
+ let i = 0;
195
+ while (i < words.length && /^[A-Za-z_][A-Za-z0-9_]*=/.test(words[i]))
196
+ i++;
197
+ return words.slice(i);
198
+ }
199
+ function targetList(values, root, displayRoot) {
200
+ return values.slice(0, 2).map(value => {
201
+ if (!projectSlackFilePath(value, root))
202
+ return undefined;
203
+ if (!root)
204
+ return projectSlackFilePath(value);
205
+ const path = /^[A-Za-z]:[\\/]/.test(root) || root.includes('\\') || value.includes('\\') ? win32 : posix;
206
+ return projectSlackFilePath(path.resolve(root, value), displayRoot);
207
+ }).filter((v) => Boolean(v));
208
+ }
209
+ function operation(words, root, displayRoot) {
210
+ const runner = executable(words[0]);
211
+ if (!runner)
212
+ return {};
213
+ const args = words.slice(1), base = { runner };
214
+ if (['cat', 'head', 'tail'].includes(runner)) {
215
+ const paths = [];
216
+ let range;
217
+ let operands = false;
218
+ for (let i = 0; i < args.length; i++) {
219
+ const arg = args[i];
220
+ if (operands) {
221
+ paths.push(arg);
222
+ continue;
223
+ }
224
+ if (arg === '--') {
225
+ operands = true;
226
+ continue;
227
+ }
228
+ if (runner === 'cat' && arg === '-n')
229
+ continue;
230
+ if (arg === '-n' && /^[1-9]\d{0,5}$/.test(args[i + 1] ?? '')) {
231
+ range = `lines ${args[++i]}`;
232
+ continue;
233
+ }
234
+ if (/^-\d+$/.test(arg)) {
235
+ range = `lines ${arg.slice(1)}`;
236
+ continue;
237
+ }
238
+ if (arg.startsWith('-')) {
239
+ if (!['--', '-q', '-v'].includes(arg))
240
+ return base;
241
+ continue;
242
+ }
243
+ paths.push(arg);
244
+ }
245
+ return { action: 'Read', targets: targetList(paths, root, displayRoot), ...(range ? { qualifier: range } : {}) };
246
+ }
247
+ if (runner === 'sed' && args[0] === '-n' && /^([1-9]\d{0,5})(?:,([1-9]\d{0,5}))?p$/.test(args[1] ?? '')) {
248
+ if (args.slice(2).some(arg => arg.startsWith('-')))
249
+ return base;
250
+ const range = args[1].slice(0, -1).replace(',', '–');
251
+ return { action: 'Read', targets: targetList(args.slice(2), root, displayRoot), qualifier: `lines ${range}` };
252
+ }
253
+ if (runner === 'ls') {
254
+ const paths = [];
255
+ let operands = false;
256
+ for (const arg of args) {
257
+ if (!operands && arg === '--') {
258
+ operands = true;
259
+ continue;
260
+ }
261
+ if (!operands && arg.startsWith('-')) {
262
+ if (!/^-[alhAdFprRtS]+$/.test(arg))
263
+ return base;
264
+ }
265
+ else
266
+ paths.push(arg);
267
+ }
268
+ return { action: 'List', targets: targetList(paths, root, displayRoot) };
269
+ }
270
+ if (runner === 'rg' || runner === 'grep') {
271
+ const positional = [];
272
+ let query;
273
+ let list = false, operands = false;
274
+ for (let i = 0; i < args.length; i++) {
275
+ const arg = args[i];
276
+ if (operands) {
277
+ positional.push(arg);
278
+ continue;
279
+ }
280
+ if (arg === '--') {
281
+ operands = true;
282
+ continue;
283
+ }
284
+ if (arg === '--files' && runner === 'rg') {
285
+ list = true;
286
+ continue;
287
+ }
288
+ if (runner === 'rg' && ['-g', '--glob'].includes(arg)) {
289
+ if (args[++i] === undefined)
290
+ return base;
291
+ continue;
292
+ }
293
+ if (runner === 'rg' && arg.startsWith('--glob='))
294
+ continue;
295
+ if (arg === '-e' || arg === '--regexp') {
296
+ query = args[++i];
297
+ continue;
298
+ }
299
+ if (arg.startsWith('-') && arg !== '--') {
300
+ if (!/^-[nirlwsvch]+$/i.test(arg) && !['--hidden', '--fixed-strings', '--line-number'].includes(arg))
301
+ return base;
302
+ continue;
303
+ }
304
+ if (arg !== '--')
305
+ positional.push(arg);
306
+ }
307
+ if (list)
308
+ return { action: 'List', targets: targetList(positional, root, displayRoot) };
309
+ query ??= positional.shift();
310
+ return { action: 'Search', ...(query ? { query } : {}), targets: targetList(positional, root, displayRoot) };
311
+ }
312
+ if (['npm', 'pnpm', 'yarn', 'bun'].includes(runner)) {
313
+ const task = args[0] === 'run' ? args[1] : args[0];
314
+ if (task && tasks.has(task))
315
+ return { action: task === 'test' ? 'Test' : task === 'build' ? 'Build' : 'Run', runner, qualifier: task };
316
+ return base;
317
+ }
318
+ if (scripts.has(runner)) {
319
+ if (args[0] === '-m' && ['pytest', 'unittest'].includes(args[1] ?? '')) {
320
+ const operands = args.slice(2);
321
+ // Unknown test flags may consume values. Keep the known operation,
322
+ // but never reinterpret any of those values as test-file targets.
323
+ return operands.some(arg => arg.startsWith('-')) ? { action: 'Test', runner }
324
+ : { action: 'Test', runner, targets: targetList(operands, root, displayRoot) };
325
+ }
326
+ let testMode = false;
327
+ for (const arg of args) {
328
+ if (inlineFlags.has(arg))
329
+ return { action: 'Run', runner, qualifier: 'inline script' };
330
+ if (arg.startsWith('-')) {
331
+ if (!interpreterFlags.has(arg))
332
+ return base;
333
+ if (arg === '--test')
334
+ testMode = true;
335
+ continue;
336
+ }
337
+ const targets = targetList([arg], root, displayRoot);
338
+ if (!targets.length)
339
+ return base;
340
+ const test = testMode || /(?:^|[/.\-])test(?:[/.\-]|$)|(?:^|\/)tests\//.test(arg);
341
+ return { action: test ? 'Test' : 'Run', runner, targets };
342
+ }
343
+ return base;
344
+ }
345
+ if (runner === 'git' && gitTasks.has(args[0] ?? '')) {
346
+ const end = args.indexOf('--');
347
+ return { action: 'Git', qualifier: args[0], ...(end >= 0 ? { targets: targetList(args.slice(end + 1), root, displayRoot) } : {}) };
348
+ }
349
+ if (runner === 'curl') {
350
+ let method = 'GET';
351
+ let explicitMethod;
352
+ let host;
353
+ for (let i = 0; i < args.length; i++) {
354
+ const arg = args[i];
355
+ if (['-H', '--header', '-d', '--data', '--data-raw', '--data-binary', '--data-urlencode', '--json', '-u', '--user', '-o', '--output'].includes(arg)) {
356
+ if (arg.includes('data') || arg === '-d' || arg === '--json')
357
+ method = 'POST';
358
+ i++;
359
+ continue;
360
+ }
361
+ if (arg === '-X' || arg === '--request') {
362
+ const value = args[++i];
363
+ if (value && ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'].includes(value))
364
+ explicitMethod = value;
365
+ else
366
+ return { action: 'HTTP' };
367
+ continue;
368
+ }
369
+ if (arg === '-I' || arg === '--head') {
370
+ method = 'HEAD';
371
+ continue;
372
+ }
373
+ if (arg.startsWith('-') && !/^-[sSfLf]+$/.test(arg) && !['--silent', '--show-error', '--fail', '--location'].includes(arg))
374
+ return { action: 'HTTP' };
375
+ if (/^https?:\/\//i.test(arg)) {
376
+ try {
377
+ const url = new URL(arg);
378
+ if (/^[a-z\d.-]+\.[a-z]{2,}$/i.test(url.hostname) && safeText(url.hostname, 100))
379
+ host ??= url.hostname;
380
+ }
381
+ catch { /* Invalid URLs grant no host display. */ }
382
+ }
383
+ }
384
+ return { action: 'HTTP', qualifier: explicitMethod ?? method, ...(host ? { targets: [host] } : {}) };
385
+ }
386
+ return base;
387
+ }
388
+ export function projectSlackActivityDetail(data, name, workingDir, source = 'print') {
389
+ let input = data['input'];
390
+ if (typeof input === 'string') {
391
+ try {
392
+ input = input.length <= MAX_COMMAND ? JSON.parse(input) : undefined;
393
+ }
394
+ catch {
395
+ input = undefined;
396
+ }
397
+ }
398
+ const args = input && typeof input === 'object' && !Array.isArray(input) ? input : undefined;
399
+ const toolName = typeof name === 'string' && name.length <= 256 ? name.trim().toLowerCase() : '';
400
+ const purpose = shells.has(toolName)
401
+ ? source === 'native' ? args?.['description'] : data['description'] ?? args?.['description']
402
+ : undefined;
403
+ const result = { tool: identifier(name), purpose };
404
+ if (!shells.has(toolName)) {
405
+ const fileAction = new Map([
406
+ ['read', 'Read'], ['read_file', 'Read'], ['readfile', 'Read'],
407
+ ['write', 'Write'], ['write_file', 'Write'], ['writefile', 'Write'],
408
+ ['edit', 'Edit'], ['edit_file', 'Edit'], ['editfile', 'Edit'],
409
+ ]).get(toolName);
410
+ if (fileAction) {
411
+ result['action'] = fileAction;
412
+ const target = projectSlackToolFile(data, name, workingDir, source === 'print');
413
+ if (target)
414
+ result['targets'] = [target];
415
+ }
416
+ else if (args && ['grep', 'search', 'glob', 'list', 'list_dir'].includes(toolName)) {
417
+ result['action'] = toolName === 'grep' || toolName === 'search' ? 'Search' : 'List';
418
+ result['targets'] = targetList([args['file_path'] ?? args['path'] ?? args['filename']].filter((v) => typeof v === 'string'), workingDir, workingDir);
419
+ if (result['action'] === 'Search')
420
+ result['query'] = args['query'] ?? args['pattern'];
421
+ }
422
+ return normalizeSlackActivityDetail(result);
423
+ }
424
+ const rawCommand = args?.['command'] ?? args?.['cmd'] ?? (source === 'print' ? data['detail'] : undefined);
425
+ if (typeof rawCommand !== 'string' || rawCommand.length > MAX_COMMAND)
426
+ return normalizeSlackActivityDetail(result);
427
+ let command = rawCommand;
428
+ let unresolvedSetup = false;
429
+ // A variable-only cd prefix gives no trusted cwd. Discard that operand,
430
+ // without expanding it, while retaining the following literal operation.
431
+ const setup = command.match(/^\s*cd\s+("[^"\n]*"|'[^'\n]*'|[^\s;&|]+)\s*&&\s*/);
432
+ if (setup && /[$`]/.test(setup[1])) {
433
+ command = command.slice(setup[0].length);
434
+ unresolvedSetup = true;
435
+ }
436
+ const segments = lex(command);
437
+ if (!segments) {
438
+ const first = command.trim().match(/^([A-Za-z0-9_./\\-]+)(?=\s|$)/)?.[1];
439
+ result['runner'] = executable(first);
440
+ return normalizeSlackActivityDetail(result);
441
+ }
442
+ let root = unresolvedSetup ? undefined : workingDir, selected, additional = 0;
443
+ for (const segment of segments) {
444
+ const words = withoutAssignments(segment.words);
445
+ if (!words.length)
446
+ continue;
447
+ if (words[0] === 'cd') {
448
+ if (words.length === 2 && words[1] === '.' && segment.separator !== '|')
449
+ continue;
450
+ if (words.length === 2 && segment.separator !== '|' && projectSlackFilePath(words[1], root)) {
451
+ const path = /^[A-Za-z]:[\\/]/.test(root ?? words[1]) || root?.includes('\\') || words[1].includes('\\') ? win32 : posix;
452
+ root = path.isAbsolute(words[1]) ? words[1] : root ? path.resolve(root, words[1]) : undefined;
453
+ }
454
+ else
455
+ root = undefined;
456
+ continue;
457
+ }
458
+ if (selected) {
459
+ additional++;
460
+ continue;
461
+ }
462
+ selected = operation(words, root, workingDir);
463
+ if (segment.stdinCode && words.length === 1 && scripts.has(executable(words[0]) ?? '')) {
464
+ selected = { action: 'Run', runner: executable(words[0]), qualifier: 'inline script' };
465
+ }
466
+ }
467
+ if (selected)
468
+ Object.assign(result, selected);
469
+ if (additional)
470
+ result['qualifier'] = `${selected?.qualifier ? `${selected.qualifier} · ` : ''}+${Math.min(additional, 7)} operations`;
471
+ return normalizeSlackActivityDetail(result);
472
+ }
473
+ //# sourceMappingURL=progress-detail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress-detail.js","sourceRoot":"","sources":["../../../src/slack/progress-detail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import { posix, win32 } from 'node:path';
2
+ import { redactOutboundText } from '../messaging/redact.js';
3
+ const MAX_PATH_INPUT = 4096;
4
+ const MAX_FILE_LABEL = 100;
5
+ function safePath(value) {
6
+ return typeof value === 'string' && value.length > 0 && value.length <= MAX_PATH_INPUT
7
+ && value === value.trim()
8
+ && value.split(/[\\/]/).every(part => part === part.trim())
9
+ && !/[\p{Cc}\p{Cf}\p{Cs}<>|&`$*?!@#%{}\[\]();="']/u.test(value)
10
+ && !/^[a-z][a-z\d+.-]*:\/\//i.test(value)
11
+ && !/(?:^|[\\/])\.\.(?:[\\/]|$)/.test(value)
12
+ && !/[~]/.test(value)
13
+ && !/[:]/.test(value.replace(/^[A-Za-z]:[\\/]/, ''))
14
+ && !/(?:xox[baprs]-|xapp-|sk-|gh[pousr]_|github_pat_)/i.test(value)
15
+ && redactOutboundText(value) === value;
16
+ }
17
+ /** Already projected labels are rechecked immediately before entering the model. */
18
+ export function sanitizeSlackFileLabel(value) {
19
+ if (!safePath(value) || [...value].length > MAX_FILE_LABEL || posix.isAbsolute(value)
20
+ || win32.isAbsolute(value) || value.includes('\\') || value.split('/').some(part => !part || part === '.' || part === '..'))
21
+ return undefined;
22
+ return value;
23
+ }
24
+ export function projectSlackFilePath(raw, workingDir) {
25
+ if (!safePath(raw))
26
+ return undefined;
27
+ const windows = /^[A-Za-z]:[\\/]/.test(raw) || raw.includes('\\')
28
+ || (typeof workingDir === 'string' && /^[A-Za-z]:[\\/]/.test(workingDir));
29
+ const path = windows ? win32 : posix;
30
+ let label = path.basename(raw);
31
+ if (typeof workingDir === 'string' && path.isAbsolute(workingDir)
32
+ && !/[\p{Cc}\p{Cf}]/u.test(workingDir) && workingDir.length <= MAX_PATH_INPUT) {
33
+ const relative = path.relative(workingDir, path.resolve(workingDir, raw));
34
+ if (relative && !path.isAbsolute(relative) && relative !== '..' && !relative.startsWith(`..${path.sep}`))
35
+ label = relative;
36
+ }
37
+ label = label.replace(/\\/g, '/');
38
+ if ([...label].length > MAX_FILE_LABEL)
39
+ label = `…${[...label].slice(-(MAX_FILE_LABEL - 1)).join('')}`;
40
+ return sanitizeSlackFileLabel(label);
41
+ }
42
+ const fileTools = new Set(['read', 'read_file', 'readfile', 'write', 'write_file', 'writefile', 'edit', 'edit_file', 'editfile']);
43
+ export function projectSlackToolFile(data, name, workingDir, allowPrintDetail = false) {
44
+ if (typeof name !== 'string' || name.length > 256 || !fileTools.has(name.trim().toLowerCase()))
45
+ return undefined;
46
+ let input = data['input'];
47
+ if (typeof input === 'string') {
48
+ if (input.length > MAX_PATH_INPUT)
49
+ return undefined;
50
+ try {
51
+ input = JSON.parse(input);
52
+ }
53
+ catch {
54
+ return undefined;
55
+ }
56
+ }
57
+ const object = input && typeof input === 'object' && !Array.isArray(input) ? input : data;
58
+ const paths = ['file_path', 'path', 'filename'].filter(key => Object.hasOwn(object, key)).map(key => object[key]);
59
+ // Conflicting structured addresses are not evidence of one file.
60
+ const raw = paths.length ? paths.every(path => path === paths[0]) ? paths[0] : undefined
61
+ : allowPrintDetail && data['input'] === undefined ? data['detail'] : undefined;
62
+ if (typeof raw !== 'string')
63
+ return undefined;
64
+ // Spaces need a structured address or an absolute single-path detail;
65
+ // unstructured relative prose is not evidence of a file.
66
+ if (!paths.length && /\s/.test(raw) && !posix.isAbsolute(raw) && !win32.isAbsolute(raw))
67
+ return undefined;
68
+ return projectSlackFilePath(raw, workingDir);
69
+ }
70
+ //# sourceMappingURL=progress-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress-files.js","sourceRoot":"","sources":["../../../src/slack/progress-files.ts"],"names":[],"mappings":"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"}