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.
- package/README.md +13 -2
- package/dist/bin/commands/slack.js +73 -7
- package/dist/bin/commands/slack.js.map +1 -1
- package/dist/server.js +46 -1
- package/dist/server.js.map +1 -1
- package/dist/src/agent/calendar-context.js +23 -0
- package/dist/src/agent/calendar-context.js.map +1 -0
- package/dist/src/agent/claude-runtime-run.js +10 -1
- package/dist/src/agent/claude-runtime-run.js.map +1 -1
- package/dist/src/agent/cursor-acp-models.js +139 -0
- package/dist/src/agent/cursor-acp-models.js.map +1 -0
- package/dist/src/agent/events/cursor.js +28 -4
- package/dist/src/agent/events/cursor.js.map +1 -1
- package/dist/src/agent/lifecycle-handler.js +8 -2
- package/dist/src/agent/lifecycle-handler.js.map +1 -1
- package/dist/src/agent/native-runtime-run.js +22 -1
- package/dist/src/agent/native-runtime-run.js.map +1 -1
- package/dist/src/agent/runtime/acp/config.js +76 -11
- package/dist/src/agent/runtime/acp/config.js.map +1 -1
- package/dist/src/agent/runtime/acp/cursor-session.js +6 -1
- package/dist/src/agent/runtime/acp/cursor-session.js.map +1 -1
- package/dist/src/agent/runtime/liveness.js +24 -0
- package/dist/src/agent/runtime/liveness.js.map +1 -0
- package/dist/src/agent/runtime/start-failure.js +61 -0
- package/dist/src/agent/runtime/start-failure.js.map +1 -0
- package/dist/src/agent/spawn/queue.js +11 -6
- package/dist/src/agent/spawn/queue.js.map +1 -1
- package/dist/src/agent/spawn.js +59 -17
- package/dist/src/agent/spawn.js.map +1 -1
- package/dist/src/cli/api-auth.js +6 -0
- package/dist/src/cli/api-auth.js.map +1 -1
- package/dist/src/manager/design/watcher.js +10 -2
- package/dist/src/manager/design/watcher.js.map +1 -1
- package/dist/src/memory/heartbeat.js +6 -0
- package/dist/src/memory/heartbeat.js.map +1 -1
- package/dist/src/messaging/channel-validate.js +5 -3
- package/dist/src/messaging/channel-validate.js.map +1 -1
- package/dist/src/messaging/redact.js +30 -8
- package/dist/src/messaging/redact.js.map +1 -1
- package/dist/src/messaging/send.js +7 -0
- package/dist/src/messaging/send.js.map +1 -1
- package/dist/src/orchestrator/collect.js +5 -3
- package/dist/src/orchestrator/collect.js.map +1 -1
- package/dist/src/orchestrator/gateway.js +10 -3
- package/dist/src/orchestrator/gateway.js.map +1 -1
- package/dist/src/orchestrator/pipeline.js +21 -9
- package/dist/src/orchestrator/pipeline.js.map +1 -1
- package/dist/src/orchestrator/request-registry.js +2 -0
- package/dist/src/orchestrator/request-registry.js.map +1 -1
- package/dist/src/prompt/builder.js +74 -6
- package/dist/src/prompt/builder.js.map +1 -1
- package/dist/src/prompt/templates/a1-system.md +22 -5
- package/dist/src/routes/messaging.js +105 -27
- package/dist/src/routes/messaging.js.map +1 -1
- package/dist/src/routes/settings.js +20 -8
- package/dist/src/routes/settings.js.map +1 -1
- package/dist/src/routes/slack-tools.js +176 -0
- package/dist/src/routes/slack-tools.js.map +1 -0
- package/dist/src/slack/action-rate.js +43 -0
- package/dist/src/slack/action-rate.js.map +1 -0
- package/dist/src/slack/action-runtime.js +243 -0
- package/dist/src/slack/action-runtime.js.map +1 -0
- package/dist/src/slack/action-store.js +84 -0
- package/dist/src/slack/action-store.js.map +1 -0
- package/dist/src/slack/action-types.js +6 -0
- package/dist/src/slack/action-types.js.map +1 -0
- package/dist/src/slack/actions-canvas.js +108 -0
- package/dist/src/slack/actions-canvas.js.map +1 -0
- package/dist/src/slack/actions-channel.js +88 -0
- package/dist/src/slack/actions-channel.js.map +1 -0
- package/dist/src/slack/actions-interactions.js +204 -0
- package/dist/src/slack/actions-interactions.js.map +1 -0
- package/dist/src/slack/actions-lists.js +308 -0
- package/dist/src/slack/actions-lists.js.map +1 -0
- package/dist/src/slack/actions-message.js +117 -0
- package/dist/src/slack/actions-message.js.map +1 -0
- package/dist/src/slack/actions-resources.js +62 -0
- package/dist/src/slack/actions-resources.js.map +1 -0
- package/dist/src/slack/actions-rts.js +88 -0
- package/dist/src/slack/actions-rts.js.map +1 -0
- package/dist/src/slack/actions-schedule.js +214 -0
- package/dist/src/slack/actions-schedule.js.map +1 -0
- package/dist/src/slack/actions.js +17 -0
- package/dist/src/slack/actions.js.map +1 -0
- package/dist/src/slack/api.js +56 -9
- package/dist/src/slack/api.js.map +1 -1
- package/dist/src/slack/blocks.js +162 -0
- package/dist/src/slack/blocks.js.map +1 -0
- package/dist/src/slack/bot.js +562 -378
- package/dist/src/slack/bot.js.map +1 -1
- package/dist/src/slack/commands.js +24 -5
- package/dist/src/slack/commands.js.map +1 -1
- package/dist/src/slack/context.js +15 -4
- package/dist/src/slack/context.js.map +1 -1
- package/dist/src/slack/conversation.js +135 -33
- package/dist/src/slack/conversation.js.map +1 -1
- package/dist/src/slack/events.js +41 -17
- package/dist/src/slack/events.js.map +1 -1
- package/dist/src/slack/format.js +181 -0
- package/dist/src/slack/format.js.map +1 -1
- package/dist/src/slack/history.js +133 -8
- package/dist/src/slack/history.js.map +1 -1
- package/dist/src/slack/ingress.js +26 -9
- package/dist/src/slack/ingress.js.map +1 -1
- package/dist/src/slack/interaction-store.js +56 -0
- package/dist/src/slack/interaction-store.js.map +1 -0
- package/dist/src/slack/manifest.js +3 -0
- package/dist/src/slack/manifest.js.map +1 -1
- package/dist/src/slack/message-content.js +132 -0
- package/dist/src/slack/message-content.js.map +1 -0
- package/dist/src/slack/message.js +58 -0
- package/dist/src/slack/message.js.map +1 -0
- package/dist/src/slack/notice-transport.js +49 -19
- package/dist/src/slack/notice-transport.js.map +1 -1
- package/dist/src/slack/operator-auth.js +62 -0
- package/dist/src/slack/operator-auth.js.map +1 -0
- package/dist/src/slack/progress-activity.js +210 -0
- package/dist/src/slack/progress-activity.js.map +1 -0
- package/dist/src/slack/progress-detail.js +473 -0
- package/dist/src/slack/progress-detail.js.map +1 -0
- package/dist/src/slack/progress-files.js +70 -0
- package/dist/src/slack/progress-files.js.map +1 -0
- package/dist/src/slack/progress-lifecycle.js +223 -0
- package/dist/src/slack/progress-lifecycle.js.map +1 -0
- package/dist/src/slack/progress-restore.js +81 -0
- package/dist/src/slack/progress-restore.js.map +1 -0
- package/dist/src/slack/progress.js +325 -143
- package/dist/src/slack/progress.js.map +1 -1
- package/dist/src/slack/quote.js +227 -0
- package/dist/src/slack/quote.js.map +1 -0
- package/dist/src/slack/render-features.js +105 -0
- package/dist/src/slack/render-features.js.map +1 -0
- package/dist/src/slack/reply-delivery.js +110 -0
- package/dist/src/slack/reply-delivery.js.map +1 -0
- package/dist/src/slack/rts-output-store.js +143 -0
- package/dist/src/slack/rts-output-store.js.map +1 -0
- package/dist/src/slack/scope-status.js +17 -3
- package/dist/src/slack/scope-status.js.map +1 -1
- package/dist/src/slack/search-quote.js +70 -0
- package/dist/src/slack/search-quote.js.map +1 -0
- package/dist/src/slack/search.js +54 -0
- package/dist/src/slack/search.js.map +1 -0
- package/dist/src/slack/send-handler.js +11 -7
- package/dist/src/slack/send-handler.js.map +1 -1
- package/dist/src/slack/send-only-client.js +116 -79
- package/dist/src/slack/send-only-client.js.map +1 -1
- package/dist/src/slack/table-content.js +253 -0
- package/dist/src/slack/table-content.js.map +1 -0
- package/dist/src/slack/table-verification.js +64 -0
- package/dist/src/slack/table-verification.js.map +1 -0
- package/dist/src/slack/task-input.js +55 -0
- package/dist/src/slack/task-input.js.map +1 -0
- package/dist/src/slack/tool-access.js +127 -0
- package/dist/src/slack/tool-access.js.map +1 -0
- package/dist/src/slack/tool-capabilities.js +47 -0
- package/dist/src/slack/tool-capabilities.js.map +1 -0
- package/dist/src/slack/tool-context.js +91 -0
- package/dist/src/slack/tool-context.js.map +1 -0
- package/dist/src/slack/verified-workspace.js +17 -6
- package/dist/src/slack/verified-workspace.js.map +1 -1
- package/dist/src/trace/redact.js +2 -1
- package/dist/src/trace/redact.js.map +1 -1
- package/package.json +1 -1
- package/public/dist/.vite/manifest.json +102 -102
- package/public/dist/assets/{Agent-CQ4EBgY8.js → Agent-CNad_A6t.js} +1 -1
- package/public/dist/assets/{ChannelEnablementControl-JsYvNMlM.js → ChannelEnablementControl-DwUDKjX9.js} +4 -4
- package/public/dist/assets/{ChannelSetupEntry-BpyRWEUE.js → ChannelSetupEntry-DH0AuNNX.js} +1 -1
- package/public/dist/assets/{ChannelsDiscord-DNfvz1jn.js → ChannelsDiscord-7NmoTjR7.js} +1 -1
- package/public/dist/assets/{ChannelsSlack-DzpxIdgW.js → ChannelsSlack-Ba0ax6iT.js} +1 -1
- package/public/dist/assets/{ChannelsTelegram-CUhFc5s6.js → ChannelsTelegram-DKA9atf2.js} +1 -1
- package/public/dist/assets/{app-Q0prKOFx.js → app-9OQNfmqw.js} +4 -4
- package/public/dist/assets/{bgtask-badge-DAcWaUfS.js → bgtask-badge-BvxHqMGi.js} +1 -1
- package/public/dist/assets/bgtask-badge-DeSZJGNN.js +1 -0
- package/public/dist/assets/{employees-CWS3Juca.js → employees-CkUqN4oh.js} +1 -1
- package/public/dist/assets/{iframe-renderer-DCDKBMb7.js → iframe-renderer-C2gchtOj.js} +2 -2
- package/public/dist/assets/iframe-renderer-DfvACXIn.js +1 -0
- package/public/dist/assets/{manager-v6GYfoPB.js → manager-rb5X-4DJ.js} +1 -1
- package/public/dist/assets/{memory-DhNdKZLO.js → memory-BiWzpoBq.js} +1 -1
- package/public/dist/assets/memory-Ckp1Eq5a.js +1 -0
- package/public/dist/assets/message-history-Bv0l_t7O.js +1 -0
- package/public/dist/assets/{message-history-DbRTl1P0.js → message-history-CuFefS02.js} +1 -1
- package/public/dist/assets/{render-DP8SJtdZ.js → render-DUGqq9Mu.js} +1 -1
- package/public/dist/assets/{settings-85n9NjvX.js → settings-BqUHavbH.js} +1 -1
- package/public/dist/assets/settings-C81Kf9uX.js +1 -0
- package/public/dist/assets/{settings-C9_D-pn0.js → settings-DQ1fLygB.js} +31 -30
- package/public/dist/assets/{settings-core-BcVD2FgV.js → settings-core-CzdXfoOK.js} +1 -1
- package/public/dist/assets/settings-core-DO_5M7Lv.js +1 -0
- package/public/dist/assets/{settings-embedding-BSpq785l.js → settings-embedding-BAKFrVLV.js} +1 -1
- package/public/dist/assets/{settings-types-B09BmpYe.js → settings-types-D3cd6SWy.js} +1 -1
- package/public/dist/assets/{sidebar-BVhLb5Ft.js → sidebar-CvGbp9x5.js} +3 -3
- package/public/dist/assets/skills-DFpPmMUR.js +1 -0
- package/public/dist/assets/{skills-X7qxmHka.js → skills-abLMqY5_.js} +1 -1
- package/public/dist/assets/slash-commands-BU58xYih.js +1 -0
- package/public/dist/assets/{slash-commands-BnDH4IU_.js → slash-commands-D8o9pqOS.js} +1 -1
- package/public/dist/assets/{trace-drawer-DasaS1z4.js → trace-drawer-C6RvkUAd.js} +1 -1
- package/public/dist/assets/{ui-BtiBTXng.js → ui-Bxapl_Eu.js} +1 -1
- package/public/dist/assets/ui-CUB4iwz3.js +1 -0
- package/public/dist/index.html +1 -1
- package/public/dist/manager/index.html +1 -1
- package/public/dist/settings/index.html +1 -1
- package/public/js/features/settings-cli-status.ts +11 -1
- package/public/js/features/settings-types.ts +21 -0
- package/public/locales/en.json +34 -1
- package/public/locales/ja.json +34 -1
- package/public/locales/ko.json +34 -1
- package/public/locales/zh.json +34 -1
- package/scripts/check-native-load.cjs +17 -4
- package/scripts/release-gates.mjs +84 -3
- package/scripts/service-artifact.mjs +157 -0
- package/scripts/service-shell/zsh/.zlogin +23 -0
- package/scripts/service-shell/zsh/.zlogout +23 -0
- package/scripts/service-shell/zsh/.zprofile +23 -0
- package/scripts/service-shell/zsh/.zshenv +23 -0
- package/scripts/service-shell/zsh/.zshrc +23 -0
- package/public/dist/assets/bgtask-badge-DHA2OQm8.js +0 -1
- package/public/dist/assets/iframe-renderer-RpvBly2x.js +0 -1
- package/public/dist/assets/memory-4YH8sz0L.js +0 -1
- package/public/dist/assets/message-history-lVcLpAw8.js +0 -1
- package/public/dist/assets/settings--EGy3_B9.js +0 -1
- package/public/dist/assets/settings-core-8wBl1mg-.js +0 -1
- package/public/dist/assets/skills-6GFkHTlQ.js +0 -1
- package/public/dist/assets/slash-commands-qu8fPAZ3.js +0 -1
- 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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"}
|