@resolveio/server-lib 22.1.5 → 22.1.7

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@resolveio/server-lib",
3
- "version": "22.1.5",
3
+ "version": "22.1.7",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "package": "./build_package.sh",
@@ -93,7 +93,7 @@ function run() {
93
93
  });
94
94
  }
95
95
  function deriveStreamStatus(event) {
96
- var _a;
96
+ var _a, _b;
97
97
  if (!event || !event.type) {
98
98
  return null;
99
99
  }
@@ -112,7 +112,7 @@ function deriveStreamStatus(event) {
112
112
  return 'Calling tool';
113
113
  }
114
114
  if (itemType === 'command_execution') {
115
- return 'Running command';
115
+ return deriveCommandExecutionStatus((_b = event === null || event === void 0 ? void 0 : event.item) === null || _b === void 0 ? void 0 : _b.command);
116
116
  }
117
117
  if (itemType === 'web_search') {
118
118
  return 'Searching references';
@@ -129,6 +129,25 @@ function deriveStreamStatus(event) {
129
129
  }
130
130
  return null;
131
131
  }
132
+ function deriveCommandExecutionStatus(commandValue) {
133
+ var command = String(commandValue || '').trim().toLowerCase();
134
+ if (!command) {
135
+ return 'Running command';
136
+ }
137
+ if (/\b(rg|grep|ripgrep|ag|ack)\b/.test(command)) {
138
+ return 'Searching files';
139
+ }
140
+ if (/\bfind\b/.test(command)) {
141
+ return 'Finding files';
142
+ }
143
+ if (/\b(cat|sed|awk|head|tail|less|more)\b/.test(command)) {
144
+ return 'Opening files';
145
+ }
146
+ if (/\b(ls|tree)\b/.test(command)) {
147
+ return 'Scanning files';
148
+ }
149
+ return 'Running command';
150
+ }
132
151
  function createStreamStatusEmitter(port) {
133
152
  var lastStatus = '';
134
153
  var lastSentAt = 0;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/workers/codex-runner.worker.ts"],"names":[],"mappings":"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","file":"codex-runner.worker.js","sourcesContent":["import { parentPort, workerData } from 'worker_threads';\nimport { CodexClient, CodexConfig, CodexRunOptions } from '../services/codex-client';\n\ntype CodexWorkerInput = {\n\tprompt: string;\n\trunOptions?: CodexRunOptions;\n\tconfig: CodexConfig;\n\tstreamStatus?: boolean;\n};\n\ntype CodexWorkerMessage = {\n\tok: boolean;\n\ttype?: 'stream' | 'final';\n\tresult?: string;\n\terror?: string;\n\tstatus?: string;\n};\n\nasync function run(): Promise<void> {\n\tif (!parentPort) {\n\t\treturn;\n\t}\n\n\tconst data = workerData as CodexWorkerInput;\n\tif (!data || typeof data.prompt !== 'string' || !data.config) {\n\t\tparentPort.postMessage({ ok: false, error: 'Invalid codex worker payload.' } as CodexWorkerMessage);\n\t\treturn;\n\t}\n\n\ttry {\n\t\tconst client = new CodexClient(data.config);\n\t\tconst runOptions = data.runOptions || {};\n\t\tconst streamStatusEnabled = data.streamStatus === true;\n\t\tconst emitStatus = streamStatusEnabled ? createStreamStatusEmitter(parentPort) : null;\n\t\tconst runOptionsWithStream = streamStatusEnabled\n\t\t\t? {\n\t\t\t\t...runOptions,\n\t\t\t\tonStreamEvent: (event: any) => {\n\t\t\t\t\tconst status = deriveStreamStatus(event);\n\t\t\t\t\tif (status && emitStatus) {\n\t\t\t\t\t\temitStatus(status);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t: runOptions;\n\t\tconst result = await client.run(data.prompt, runOptionsWithStream);\n\t\tparentPort.postMessage({ ok: true, result, type: 'final' } as CodexWorkerMessage);\n\t}\n\tcatch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error || 'Unknown error');\n\t\tparentPort.postMessage({ ok: false, error: message, type: 'final' } as CodexWorkerMessage);\n\t}\n}\n\nfunction deriveStreamStatus(event: any): string | null {\n\tif (!event || !event.type) {\n\t\treturn null;\n\t}\n\tif (event.type === 'thread.started' || event.type === 'turn.started') {\n\t\treturn 'Reviewing request';\n\t}\n\tif (event.type === 'turn.completed') {\n\t\treturn 'Drafting response';\n\t}\n\tif (event.type === 'item.started' || event.type === 'item.updated' || event.type === 'item.completed') {\n\t\tconst itemType = String(event?.item?.type || '').trim().toLowerCase();\n\t\tif (!itemType) {\n\t\t\treturn null;\n\t\t}\n\t\tif (itemType === 'mcp_tool_call') {\n\t\t\treturn 'Calling tool';\n\t\t}\n\t\tif (itemType === 'command_execution') {\n\t\t\treturn 'Running command';\n\t\t}\n\t\tif (itemType === 'web_search') {\n\t\t\treturn 'Searching references';\n\t\t}\n\t\tif (itemType === 'file_change') {\n\t\t\treturn 'Drafting response';\n\t\t}\n\t\tif (itemType === 'agent_message') {\n\t\t\treturn 'Drafting response';\n\t\t}\n\t\tif (itemType === 'reasoning') {\n\t\t\treturn 'Analyzing';\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction createStreamStatusEmitter(port: any) {\n\tlet lastStatus = '';\n\tlet lastSentAt = 0;\n\treturn (status: string) => {\n\t\tconst trimmed = String(status || '').trim();\n\t\tif (!trimmed) {\n\t\t\treturn;\n\t\t}\n\t\tconst now = Date.now();\n\t\tif (trimmed === lastStatus && now - lastSentAt < 3000) {\n\t\t\treturn;\n\t\t}\n\t\tlastStatus = trimmed;\n\t\tlastSentAt = now;\n\t\tport.postMessage({ ok: true, type: 'stream', status: trimmed } as CodexWorkerMessage);\n\t};\n}\n\n// eslint-disable-next-line @typescript-eslint/no-floating-promises\nvoid (async () => {\n\ttry {\n\t\tawait run();\n\t}\n\tcatch (error) {\n\t\tif (!parentPort) {\n\t\t\treturn;\n\t\t}\n\t\tconst message = error instanceof Error ? error.message : String(error || 'Unknown error');\n\t\tparentPort.postMessage({ ok: false, error: message, type: 'final' } as CodexWorkerMessage);\n\t}\n})();\n"]}
1
+ {"version":3,"sources":["../../src/workers/codex-runner.worker.ts"],"names":[],"mappings":"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","file":"codex-runner.worker.js","sourcesContent":["import { parentPort, workerData } from 'worker_threads';\nimport { CodexClient, CodexConfig, CodexRunOptions } from '../services/codex-client';\n\ntype CodexWorkerInput = {\n\tprompt: string;\n\trunOptions?: CodexRunOptions;\n\tconfig: CodexConfig;\n\tstreamStatus?: boolean;\n};\n\ntype CodexWorkerMessage = {\n\tok: boolean;\n\ttype?: 'stream' | 'final';\n\tresult?: string;\n\terror?: string;\n\tstatus?: string;\n};\n\nasync function run(): Promise<void> {\n\tif (!parentPort) {\n\t\treturn;\n\t}\n\n\tconst data = workerData as CodexWorkerInput;\n\tif (!data || typeof data.prompt !== 'string' || !data.config) {\n\t\tparentPort.postMessage({ ok: false, error: 'Invalid codex worker payload.' } as CodexWorkerMessage);\n\t\treturn;\n\t}\n\n\ttry {\n\t\tconst client = new CodexClient(data.config);\n\t\tconst runOptions = data.runOptions || {};\n\t\tconst streamStatusEnabled = data.streamStatus === true;\n\t\tconst emitStatus = streamStatusEnabled ? createStreamStatusEmitter(parentPort) : null;\n\t\tconst runOptionsWithStream = streamStatusEnabled\n\t\t\t? {\n\t\t\t\t...runOptions,\n\t\t\t\tonStreamEvent: (event: any) => {\n\t\t\t\t\tconst status = deriveStreamStatus(event);\n\t\t\t\t\tif (status && emitStatus) {\n\t\t\t\t\t\temitStatus(status);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t: runOptions;\n\t\tconst result = await client.run(data.prompt, runOptionsWithStream);\n\t\tparentPort.postMessage({ ok: true, result, type: 'final' } as CodexWorkerMessage);\n\t}\n\tcatch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error || 'Unknown error');\n\t\tparentPort.postMessage({ ok: false, error: message, type: 'final' } as CodexWorkerMessage);\n\t}\n}\n\nfunction deriveStreamStatus(event: any): string | null {\n\tif (!event || !event.type) {\n\t\treturn null;\n\t}\n\tif (event.type === 'thread.started' || event.type === 'turn.started') {\n\t\treturn 'Reviewing request';\n\t}\n\tif (event.type === 'turn.completed') {\n\t\treturn 'Drafting response';\n\t}\n\tif (event.type === 'item.started' || event.type === 'item.updated' || event.type === 'item.completed') {\n\t\tconst itemType = String(event?.item?.type || '').trim().toLowerCase();\n\t\tif (!itemType) {\n\t\t\treturn null;\n\t\t}\n\t\tif (itemType === 'mcp_tool_call') {\n\t\t\treturn 'Calling tool';\n\t\t}\n\t\tif (itemType === 'command_execution') {\n\t\t\treturn deriveCommandExecutionStatus(event?.item?.command);\n\t\t}\n\t\tif (itemType === 'web_search') {\n\t\t\treturn 'Searching references';\n\t\t}\n\t\tif (itemType === 'file_change') {\n\t\t\treturn 'Drafting response';\n\t\t}\n\t\tif (itemType === 'agent_message') {\n\t\t\treturn 'Drafting response';\n\t\t}\n\t\tif (itemType === 'reasoning') {\n\t\t\treturn 'Analyzing';\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction deriveCommandExecutionStatus(commandValue: any): string {\n\tconst command = String(commandValue || '').trim().toLowerCase();\n\tif (!command) {\n\t\treturn 'Running command';\n\t}\n\tif (/\\b(rg|grep|ripgrep|ag|ack)\\b/.test(command)) {\n\t\treturn 'Searching files';\n\t}\n\tif (/\\bfind\\b/.test(command)) {\n\t\treturn 'Finding files';\n\t}\n\tif (/\\b(cat|sed|awk|head|tail|less|more)\\b/.test(command)) {\n\t\treturn 'Opening files';\n\t}\n\tif (/\\b(ls|tree)\\b/.test(command)) {\n\t\treturn 'Scanning files';\n\t}\n\treturn 'Running command';\n}\n\nfunction createStreamStatusEmitter(port: any) {\n\tlet lastStatus = '';\n\tlet lastSentAt = 0;\n\treturn (status: string) => {\n\t\tconst trimmed = String(status || '').trim();\n\t\tif (!trimmed) {\n\t\t\treturn;\n\t\t}\n\t\tconst now = Date.now();\n\t\tif (trimmed === lastStatus && now - lastSentAt < 3000) {\n\t\t\treturn;\n\t\t}\n\t\tlastStatus = trimmed;\n\t\tlastSentAt = now;\n\t\tport.postMessage({ ok: true, type: 'stream', status: trimmed } as CodexWorkerMessage);\n\t};\n}\n\n// eslint-disable-next-line @typescript-eslint/no-floating-promises\nvoid (async () => {\n\ttry {\n\t\tawait run();\n\t}\n\tcatch (error) {\n\t\tif (!parentPort) {\n\t\t\treturn;\n\t\t}\n\t\tconst message = error instanceof Error ? error.message : String(error || 'Unknown error');\n\t\tparentPort.postMessage({ ok: false, error: message, type: 'final' } as CodexWorkerMessage);\n\t}\n})();\n"]}