psadk 1.4.8 → 1.5.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.
- package/build/main/index.d.ts +1 -0
- package/build/main/lib/PSAI.js +1 -2
- package/build/main/lib/PSAgent.d.ts +46 -44
- package/build/main/lib/PSAgent.js +176 -961
- package/build/main/lib/PSAgentConfig.d.ts +110 -26
- package/build/main/lib/PSAgentLogger.js +1 -2
- package/build/main/lib/PSAgentTool.d.ts +8 -3
- package/build/main/lib/PSAgentTool.js +3 -3
- package/build/main/lib/agent-core/{agent-loop.d.ts → src/agent-loop.d.ts} +1 -1
- package/build/main/lib/agent-core/src/agent-loop.js +514 -0
- package/build/{module/lib/agent-core → main/lib/agent-core/src}/agent.d.ts +2 -2
- package/build/main/lib/agent-core/src/agent.js +419 -0
- package/build/main/lib/agent-core/{harness → src/harness}/agent-harness.d.ts +36 -26
- package/build/main/lib/agent-core/src/harness/agent-harness.js +1028 -0
- package/build/main/lib/agent-core/src/harness/compaction/branch-summarization.d.ts +52 -0
- package/build/main/lib/agent-core/src/harness/compaction/branch-summarization.js +182 -0
- package/build/main/lib/agent-core/src/harness/compaction/compaction.d.ts +94 -0
- package/build/main/lib/agent-core/src/harness/compaction/compaction.js +550 -0
- package/build/main/lib/agent-core/src/harness/compaction/utils.d.ts +24 -0
- package/build/main/lib/agent-core/src/harness/compaction/utils.js +131 -0
- package/build/main/lib/agent-core/src/harness/env/nodejs.d.ts +50 -0
- package/build/main/lib/agent-core/src/harness/env/nodejs.js +494 -0
- package/build/main/lib/agent-core/{harness → src/harness}/messages.d.ts +2 -2
- package/build/{module/lib/agent-core → main/lib/agent-core/src}/harness/messages.js +1 -1
- package/build/main/lib/agent-core/{harness → src/harness}/prompt-templates.d.ts +4 -1
- package/build/main/lib/agent-core/src/harness/prompt-templates.js +235 -0
- package/build/{module/lib/agent-core/harness/session/repo/jsonl.d.ts → main/lib/agent-core/src/harness/session/jsonl-repo.d.ts} +7 -1
- package/build/main/lib/agent-core/src/harness/session/jsonl-repo.js +106 -0
- package/build/{module/lib/agent-core/harness/session/storage/jsonl.d.ts → main/lib/agent-core/src/harness/session/jsonl-storage.d.ts} +7 -4
- package/build/main/lib/agent-core/src/harness/session/jsonl-storage.js +234 -0
- package/build/main/lib/agent-core/{harness/session/repo/memory.d.ts → src/harness/session/memory-repo.d.ts} +1 -1
- package/build/main/lib/agent-core/src/harness/session/memory-repo.js +45 -0
- package/build/main/lib/agent-core/{harness/session/storage/memory.d.ts → src/harness/session/memory-storage.d.ts} +4 -5
- package/build/main/lib/agent-core/src/harness/session/memory-storage.js +116 -0
- package/build/main/lib/agent-core/{harness/session/repo/shared.d.ts → src/harness/session/repo-utils.d.ts} +3 -2
- package/build/main/lib/agent-core/src/harness/session/repo-utils.js +39 -0
- package/build/{module/lib/agent-core → main/lib/agent-core/src}/harness/session/session.d.ts +3 -2
- package/build/main/lib/agent-core/src/harness/session/session.js +213 -0
- package/build/main/lib/agent-core/src/harness/session/uuid.d.ts +1 -0
- package/build/main/lib/agent-core/src/harness/session/uuid.js +54 -0
- package/build/main/lib/agent-core/{harness → src/harness}/skills.d.ts +4 -1
- package/build/main/lib/agent-core/src/harness/skills.js +353 -0
- package/build/main/lib/agent-core/{harness → src/harness}/system-prompt.d.ts +1 -1
- package/build/main/lib/agent-core/src/harness/system-prompt.js +30 -0
- package/build/{module/lib/agent-core → main/lib/agent-core/src}/harness/types.d.ts +160 -70
- package/build/main/lib/agent-core/src/harness/types.js +94 -0
- package/build/main/lib/agent-core/{harness → src/harness}/utils/shell-output.d.ts +2 -2
- package/build/main/lib/agent-core/src/harness/utils/shell-output.js +134 -0
- package/build/main/lib/agent-core/src/harness/utils/truncate.js +294 -0
- package/build/main/lib/agent-core/src/index.d.ts +19 -0
- package/build/main/lib/agent-core/src/index.js +25 -0
- package/build/main/lib/agent-core/src/node.d.ts +2 -0
- package/build/main/lib/agent-core/src/node.js +3 -0
- package/build/main/lib/agent-core/{proxy.js → src/proxy.js} +3 -2
- package/build/{module/lib/agent-core → main/lib/agent-core/src}/types.d.ts +13 -1
- package/build/{module/lib/agent-core → main/lib/agent-core/src}/types.js +1 -1
- package/build/main/lib/localAgent.d.ts +35 -0
- package/build/main/lib/localAgent.js +329 -0
- package/build/main/lib/remoteAgent.d.ts +25 -0
- package/build/main/lib/remoteAgent.js +311 -0
- package/build/main/lib/tools/BraveWebSearchTool.js +1 -2
- package/build/main/lib/tools/PSArtifactTool.js +1 -2
- package/build/main/lib/tools/PSClarifyTool.js +1 -2
- package/build/main/lib/tools/PSCommandLineTool.js +1 -2
- package/build/main/lib/tools/PSMemoryTool.js +1 -2
- package/build/main/lib/tools/PSReadFileTool.js +1 -2
- package/build/main/lib/tools/PSRetrievalTool.js +1 -2
- package/build/main/lib/tools/PSSkillTool.js +1 -2
- package/build/main/lib/tools/PSSubAgentTool.js +1 -1
- package/build/main/lib/tools/PSWriteFileTool.js +1 -2
- package/build/main/lib/tools/TodoTool.js +1 -2
- package/build/main/lib/utils/debuglogger.js +1 -2
- package/build/main/lib/utils/helpers.js +1 -6
- package/build/module/index.d.ts +1 -0
- package/build/module/lib/PSAI.js +1 -2
- package/build/module/lib/PSAgent.d.ts +46 -44
- package/build/module/lib/PSAgent.js +176 -961
- package/build/module/lib/PSAgentConfig.d.ts +110 -26
- package/build/module/lib/PSAgentLogger.js +1 -2
- package/build/module/lib/PSAgentTool.d.ts +8 -3
- package/build/module/lib/PSAgentTool.js +3 -3
- package/build/module/lib/agent-core/{agent-loop.d.ts → src/agent-loop.d.ts} +1 -1
- package/build/module/lib/agent-core/src/agent-loop.js +514 -0
- package/build/{main/lib/agent-core → module/lib/agent-core/src}/agent.d.ts +2 -2
- package/build/module/lib/agent-core/src/agent.js +419 -0
- package/build/module/lib/agent-core/{harness → src/harness}/agent-harness.d.ts +36 -26
- package/build/module/lib/agent-core/src/harness/agent-harness.js +1028 -0
- package/build/module/lib/agent-core/src/harness/compaction/branch-summarization.d.ts +52 -0
- package/build/module/lib/agent-core/src/harness/compaction/branch-summarization.js +182 -0
- package/build/module/lib/agent-core/src/harness/compaction/compaction.d.ts +94 -0
- package/build/module/lib/agent-core/src/harness/compaction/compaction.js +550 -0
- package/build/module/lib/agent-core/src/harness/compaction/utils.d.ts +24 -0
- package/build/module/lib/agent-core/src/harness/compaction/utils.js +131 -0
- package/build/module/lib/agent-core/src/harness/env/nodejs.d.ts +50 -0
- package/build/module/lib/agent-core/src/harness/env/nodejs.js +494 -0
- package/build/module/lib/agent-core/{harness → src/harness}/messages.d.ts +2 -2
- package/build/{main/lib/agent-core → module/lib/agent-core/src}/harness/messages.js +1 -1
- package/build/module/lib/agent-core/{harness → src/harness}/prompt-templates.d.ts +4 -1
- package/build/module/lib/agent-core/src/harness/prompt-templates.js +235 -0
- package/build/{main/lib/agent-core/harness/session/repo/jsonl.d.ts → module/lib/agent-core/src/harness/session/jsonl-repo.d.ts} +7 -1
- package/build/module/lib/agent-core/src/harness/session/jsonl-repo.js +106 -0
- package/build/{main/lib/agent-core/harness/session/storage/jsonl.d.ts → module/lib/agent-core/src/harness/session/jsonl-storage.d.ts} +7 -4
- package/build/module/lib/agent-core/src/harness/session/jsonl-storage.js +234 -0
- package/build/module/lib/agent-core/{harness/session/repo/memory.d.ts → src/harness/session/memory-repo.d.ts} +1 -1
- package/build/module/lib/agent-core/src/harness/session/memory-repo.js +45 -0
- package/build/module/lib/agent-core/{harness/session/storage/memory.d.ts → src/harness/session/memory-storage.d.ts} +4 -5
- package/build/module/lib/agent-core/src/harness/session/memory-storage.js +116 -0
- package/build/module/lib/agent-core/{harness/session/repo/shared.d.ts → src/harness/session/repo-utils.d.ts} +3 -2
- package/build/module/lib/agent-core/src/harness/session/repo-utils.js +39 -0
- package/build/{main/lib/agent-core → module/lib/agent-core/src}/harness/session/session.d.ts +3 -2
- package/build/module/lib/agent-core/src/harness/session/session.js +213 -0
- package/build/module/lib/agent-core/src/harness/session/uuid.d.ts +1 -0
- package/build/module/lib/agent-core/src/harness/session/uuid.js +54 -0
- package/build/module/lib/agent-core/{harness → src/harness}/skills.d.ts +4 -1
- package/build/module/lib/agent-core/src/harness/skills.js +353 -0
- package/build/module/lib/agent-core/{harness → src/harness}/system-prompt.d.ts +1 -1
- package/build/module/lib/agent-core/src/harness/system-prompt.js +30 -0
- package/build/{main/lib/agent-core → module/lib/agent-core/src}/harness/types.d.ts +160 -70
- package/build/module/lib/agent-core/src/harness/types.js +94 -0
- package/build/module/lib/agent-core/{harness → src/harness}/utils/shell-output.d.ts +2 -2
- package/build/module/lib/agent-core/src/harness/utils/shell-output.js +134 -0
- package/build/module/lib/agent-core/src/harness/utils/truncate.js +294 -0
- package/build/module/lib/agent-core/src/index.d.ts +19 -0
- package/build/module/lib/agent-core/src/index.js +25 -0
- package/build/module/lib/agent-core/src/node.d.ts +2 -0
- package/build/module/lib/agent-core/src/node.js +3 -0
- package/build/module/lib/agent-core/{proxy.js → src/proxy.js} +3 -2
- package/build/{main/lib/agent-core → module/lib/agent-core/src}/types.d.ts +13 -1
- package/build/{main/lib/agent-core → module/lib/agent-core/src}/types.js +1 -1
- package/build/module/lib/localAgent.d.ts +35 -0
- package/build/module/lib/localAgent.js +329 -0
- package/build/module/lib/remoteAgent.d.ts +25 -0
- package/build/module/lib/remoteAgent.js +311 -0
- package/build/module/lib/tools/BraveWebSearchTool.js +1 -2
- package/build/module/lib/tools/PSArtifactTool.js +1 -2
- package/build/module/lib/tools/PSClarifyTool.js +1 -2
- package/build/module/lib/tools/PSCommandLineTool.js +1 -2
- package/build/module/lib/tools/PSMemoryTool.js +1 -2
- package/build/module/lib/tools/PSReadFileTool.js +1 -2
- package/build/module/lib/tools/PSRetrievalTool.js +1 -2
- package/build/module/lib/tools/PSSkillTool.js +1 -2
- package/build/module/lib/tools/PSSubAgentTool.js +1 -1
- package/build/module/lib/tools/PSWriteFileTool.js +1 -2
- package/build/module/lib/tools/TodoTool.js +1 -2
- package/build/module/lib/utils/debuglogger.js +1 -2
- package/build/module/lib/utils/helpers.js +1 -6
- package/package.json +2 -1
- package/build/main/lib/agent-core/agent-loop.js +0 -483
- package/build/main/lib/agent-core/agent.js +0 -419
- package/build/main/lib/agent-core/harness/agent-harness.js +0 -772
- package/build/main/lib/agent-core/harness/compaction/branch-summarization.d.ts +0 -87
- package/build/main/lib/agent-core/harness/compaction/branch-summarization.js +0 -246
- package/build/main/lib/agent-core/harness/compaction/compaction.d.ts +0 -121
- package/build/main/lib/agent-core/harness/compaction/compaction.js +0 -637
- package/build/main/lib/agent-core/harness/compaction/utils.d.ts +0 -37
- package/build/main/lib/agent-core/harness/compaction/utils.js +0 -153
- package/build/main/lib/agent-core/harness/env/nodejs.d.ts +0 -43
- package/build/main/lib/agent-core/harness/env/nodejs.js +0 -353
- package/build/main/lib/agent-core/harness/execution-env.d.ts +0 -3
- package/build/main/lib/agent-core/harness/execution-env.js +0 -3
- package/build/main/lib/agent-core/harness/prompt-templates.js +0 -204
- package/build/main/lib/agent-core/harness/session/repo/jsonl.js +0 -98
- package/build/main/lib/agent-core/harness/session/repo/memory.js +0 -46
- package/build/main/lib/agent-core/harness/session/repo/shared.js +0 -31
- package/build/main/lib/agent-core/harness/session/session.js +0 -199
- package/build/main/lib/agent-core/harness/session/storage/jsonl.js +0 -170
- package/build/main/lib/agent-core/harness/session/storage/memory.js +0 -94
- package/build/main/lib/agent-core/harness/skills.js +0 -266
- package/build/main/lib/agent-core/harness/system-prompt.js +0 -30
- package/build/main/lib/agent-core/harness/types.js +0 -16
- package/build/main/lib/agent-core/harness/utils/shell-output.js +0 -101
- package/build/main/lib/agent-core/harness/utils/truncate.js +0 -208
- package/build/main/lib/agent-core/index.d.ts +0 -19
- package/build/main/lib/agent-core/index.js +0 -25
- package/build/module/lib/agent-core/agent-loop.js +0 -483
- package/build/module/lib/agent-core/agent.js +0 -419
- package/build/module/lib/agent-core/harness/agent-harness.js +0 -772
- package/build/module/lib/agent-core/harness/compaction/branch-summarization.d.ts +0 -87
- package/build/module/lib/agent-core/harness/compaction/branch-summarization.js +0 -246
- package/build/module/lib/agent-core/harness/compaction/compaction.d.ts +0 -121
- package/build/module/lib/agent-core/harness/compaction/compaction.js +0 -637
- package/build/module/lib/agent-core/harness/compaction/utils.d.ts +0 -37
- package/build/module/lib/agent-core/harness/compaction/utils.js +0 -153
- package/build/module/lib/agent-core/harness/env/nodejs.d.ts +0 -43
- package/build/module/lib/agent-core/harness/env/nodejs.js +0 -353
- package/build/module/lib/agent-core/harness/execution-env.d.ts +0 -3
- package/build/module/lib/agent-core/harness/execution-env.js +0 -3
- package/build/module/lib/agent-core/harness/prompt-templates.js +0 -204
- package/build/module/lib/agent-core/harness/session/repo/jsonl.js +0 -98
- package/build/module/lib/agent-core/harness/session/repo/memory.js +0 -46
- package/build/module/lib/agent-core/harness/session/repo/shared.js +0 -31
- package/build/module/lib/agent-core/harness/session/session.js +0 -199
- package/build/module/lib/agent-core/harness/session/storage/jsonl.js +0 -170
- package/build/module/lib/agent-core/harness/session/storage/memory.js +0 -94
- package/build/module/lib/agent-core/harness/skills.js +0 -266
- package/build/module/lib/agent-core/harness/system-prompt.js +0 -30
- package/build/module/lib/agent-core/harness/types.js +0 -16
- package/build/module/lib/agent-core/harness/utils/shell-output.js +0 -101
- package/build/module/lib/agent-core/harness/utils/truncate.js +0 -208
- package/build/module/lib/agent-core/index.d.ts +0 -19
- package/build/module/lib/agent-core/index.js +0 -25
- /package/build/main/lib/agent-core/{harness → src/harness}/utils/truncate.d.ts +0 -0
- /package/build/main/lib/agent-core/{proxy.d.ts → src/proxy.d.ts} +0 -0
- /package/build/module/lib/agent-core/{harness → src/harness}/utils/truncate.d.ts +0 -0
- /package/build/module/lib/agent-core/{proxy.d.ts → src/proxy.d.ts} +0 -0
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared utilities for compaction and branch summarization.
|
|
3
|
-
*/
|
|
4
|
-
import type { Message } from '@earendil-works/pi-ai';
|
|
5
|
-
import type { AgentMessage } from '../../types.js';
|
|
6
|
-
export interface FileOperations {
|
|
7
|
-
read: Set<string>;
|
|
8
|
-
written: Set<string>;
|
|
9
|
-
edited: Set<string>;
|
|
10
|
-
}
|
|
11
|
-
export declare function createFileOps(): FileOperations;
|
|
12
|
-
/**
|
|
13
|
-
* Extract file operations from tool calls in an assistant message.
|
|
14
|
-
*/
|
|
15
|
-
export declare function extractFileOpsFromMessage(message: AgentMessage, fileOps: FileOperations): void;
|
|
16
|
-
/**
|
|
17
|
-
* Compute final file lists from file operations.
|
|
18
|
-
* Returns readFiles (files only read, not modified) and modifiedFiles.
|
|
19
|
-
*/
|
|
20
|
-
export declare function computeFileLists(fileOps: FileOperations): {
|
|
21
|
-
readFiles: string[];
|
|
22
|
-
modifiedFiles: string[];
|
|
23
|
-
};
|
|
24
|
-
/**
|
|
25
|
-
* Format file operations as XML tags for summary.
|
|
26
|
-
*/
|
|
27
|
-
export declare function formatFileOperations(readFiles: string[], modifiedFiles: string[]): string;
|
|
28
|
-
/**
|
|
29
|
-
* Serialize LLM messages to text for summarization.
|
|
30
|
-
* This prevents the model from treating it as a conversation to continue.
|
|
31
|
-
* Call convertToLlm() first to handle custom message types.
|
|
32
|
-
*
|
|
33
|
-
* Tool results are truncated to keep the summarization request within
|
|
34
|
-
* reasonable token budgets. Full content is not needed for summarization.
|
|
35
|
-
*/
|
|
36
|
-
export declare function serializeConversation(messages: Message[]): string;
|
|
37
|
-
export declare const SUMMARIZATION_SYSTEM_PROMPT = "You are a context summarization assistant. Your task is to read a conversation between a user and an AI coding assistant, then produce a structured summary following the exact format specified.\n\nDo NOT continue the conversation. Do NOT respond to any questions in the conversation. ONLY output the structured summary.";
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared utilities for compaction and branch summarization.
|
|
3
|
-
*/
|
|
4
|
-
export function createFileOps() {
|
|
5
|
-
return {
|
|
6
|
-
read: new Set(),
|
|
7
|
-
written: new Set(),
|
|
8
|
-
edited: new Set(),
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Extract file operations from tool calls in an assistant message.
|
|
13
|
-
*/
|
|
14
|
-
export function extractFileOpsFromMessage(message, fileOps) {
|
|
15
|
-
if (message.role !== 'assistant')
|
|
16
|
-
return;
|
|
17
|
-
if (!('content' in message) || !Array.isArray(message.content))
|
|
18
|
-
return;
|
|
19
|
-
for (const block of message.content) {
|
|
20
|
-
if (typeof block !== 'object' || block === null)
|
|
21
|
-
continue;
|
|
22
|
-
if (!('type' in block) || block.type !== 'toolCall')
|
|
23
|
-
continue;
|
|
24
|
-
if (!('arguments' in block) || !('name' in block))
|
|
25
|
-
continue;
|
|
26
|
-
const args = block.arguments;
|
|
27
|
-
if (!args)
|
|
28
|
-
continue;
|
|
29
|
-
const path = typeof args.path === 'string' ? args.path : undefined;
|
|
30
|
-
if (!path)
|
|
31
|
-
continue;
|
|
32
|
-
switch (block.name) {
|
|
33
|
-
case 'read':
|
|
34
|
-
fileOps.read.add(path);
|
|
35
|
-
break;
|
|
36
|
-
case 'write':
|
|
37
|
-
fileOps.written.add(path);
|
|
38
|
-
break;
|
|
39
|
-
case 'edit':
|
|
40
|
-
fileOps.edited.add(path);
|
|
41
|
-
break;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Compute final file lists from file operations.
|
|
47
|
-
* Returns readFiles (files only read, not modified) and modifiedFiles.
|
|
48
|
-
*/
|
|
49
|
-
export function computeFileLists(fileOps) {
|
|
50
|
-
const modified = new Set([...fileOps.edited, ...fileOps.written]);
|
|
51
|
-
const readOnly = [...fileOps.read].filter((f) => !modified.has(f)).sort();
|
|
52
|
-
const modifiedFiles = [...modified].sort();
|
|
53
|
-
return { readFiles: readOnly, modifiedFiles };
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Format file operations as XML tags for summary.
|
|
57
|
-
*/
|
|
58
|
-
export function formatFileOperations(readFiles, modifiedFiles) {
|
|
59
|
-
const sections = [];
|
|
60
|
-
if (readFiles.length > 0) {
|
|
61
|
-
sections.push(`<read-files>\n${readFiles.join('\n')}\n</read-files>`);
|
|
62
|
-
}
|
|
63
|
-
if (modifiedFiles.length > 0) {
|
|
64
|
-
sections.push(`<modified-files>\n${modifiedFiles.join('\n')}\n</modified-files>`);
|
|
65
|
-
}
|
|
66
|
-
if (sections.length === 0)
|
|
67
|
-
return '';
|
|
68
|
-
return `\n\n${sections.join('\n\n')}`;
|
|
69
|
-
}
|
|
70
|
-
// ============================================================================
|
|
71
|
-
// Message Serialization
|
|
72
|
-
// ============================================================================
|
|
73
|
-
/** Maximum characters for a tool result in serialized summaries. */
|
|
74
|
-
const TOOL_RESULT_MAX_CHARS = 2000;
|
|
75
|
-
/**
|
|
76
|
-
* Truncate text to a maximum character length for summarization.
|
|
77
|
-
* Keeps the beginning and appends a truncation marker.
|
|
78
|
-
*/
|
|
79
|
-
function truncateForSummary(text, maxChars) {
|
|
80
|
-
if (text.length <= maxChars)
|
|
81
|
-
return text;
|
|
82
|
-
const truncatedChars = text.length - maxChars;
|
|
83
|
-
return `${text.slice(0, maxChars)}\n\n[... ${truncatedChars} more characters truncated]`;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Serialize LLM messages to text for summarization.
|
|
87
|
-
* This prevents the model from treating it as a conversation to continue.
|
|
88
|
-
* Call convertToLlm() first to handle custom message types.
|
|
89
|
-
*
|
|
90
|
-
* Tool results are truncated to keep the summarization request within
|
|
91
|
-
* reasonable token budgets. Full content is not needed for summarization.
|
|
92
|
-
*/
|
|
93
|
-
export function serializeConversation(messages) {
|
|
94
|
-
const parts = [];
|
|
95
|
-
for (const msg of messages) {
|
|
96
|
-
if (msg.role === 'user') {
|
|
97
|
-
const content = typeof msg.content === 'string'
|
|
98
|
-
? msg.content
|
|
99
|
-
: msg.content
|
|
100
|
-
.filter((c) => c.type === 'text')
|
|
101
|
-
.map((c) => c.text)
|
|
102
|
-
.join('');
|
|
103
|
-
if (content)
|
|
104
|
-
parts.push(`[User]: ${content}`);
|
|
105
|
-
}
|
|
106
|
-
else if (msg.role === 'assistant') {
|
|
107
|
-
const textParts = [];
|
|
108
|
-
const thinkingParts = [];
|
|
109
|
-
const toolCalls = [];
|
|
110
|
-
for (const block of msg.content) {
|
|
111
|
-
if (block.type === 'text') {
|
|
112
|
-
textParts.push(block.text);
|
|
113
|
-
}
|
|
114
|
-
else if (block.type === 'thinking') {
|
|
115
|
-
thinkingParts.push(block.thinking);
|
|
116
|
-
}
|
|
117
|
-
else if (block.type === 'toolCall') {
|
|
118
|
-
const args = block.arguments;
|
|
119
|
-
const argsStr = Object.entries(args)
|
|
120
|
-
.map(([k, v]) => `${k}=${JSON.stringify(v)}`)
|
|
121
|
-
.join(', ');
|
|
122
|
-
toolCalls.push(`${block.name}(${argsStr})`);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
if (thinkingParts.length > 0) {
|
|
126
|
-
parts.push(`[Assistant thinking]: ${thinkingParts.join('\n')}`);
|
|
127
|
-
}
|
|
128
|
-
if (textParts.length > 0) {
|
|
129
|
-
parts.push(`[Assistant]: ${textParts.join('\n')}`);
|
|
130
|
-
}
|
|
131
|
-
if (toolCalls.length > 0) {
|
|
132
|
-
parts.push(`[Assistant tool calls]: ${toolCalls.join('; ')}`);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
else if (msg.role === 'toolResult') {
|
|
136
|
-
const content = msg.content
|
|
137
|
-
.filter((c) => c.type === 'text')
|
|
138
|
-
.map((c) => c.text)
|
|
139
|
-
.join('');
|
|
140
|
-
if (content) {
|
|
141
|
-
parts.push(`[Tool result]: ${truncateForSummary(content, TOOL_RESULT_MAX_CHARS)}`);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
return parts.join('\n\n');
|
|
146
|
-
}
|
|
147
|
-
// ============================================================================
|
|
148
|
-
// Summarization System Prompt
|
|
149
|
-
// ============================================================================
|
|
150
|
-
export const SUMMARIZATION_SYSTEM_PROMPT = `You are a context summarization assistant. Your task is to read a conversation between a user and an AI coding assistant, then produce a structured summary following the exact format specified.
|
|
151
|
-
|
|
152
|
-
Do NOT continue the conversation. Do NOT respond to any questions in the conversation. ONLY output the structured summary.`;
|
|
153
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2FnZW50LWNvcmUvaGFybmVzcy9jb21wYWN0aW9uL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBZ0JILE1BQU0sVUFBVSxhQUFhO0lBQzNCLE9BQU87UUFDTCxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUU7UUFDZixPQUFPLEVBQUUsSUFBSSxHQUFHLEVBQUU7UUFDbEIsTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFO0tBQ2xCLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBQ3ZDLE9BQXFCLEVBQ3JCLE9BQXVCO0lBRXZCLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXO1FBQUUsT0FBTztJQUN6QyxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFBRSxPQUFPO0lBRXZFLEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJO1lBQUUsU0FBUztRQUMxRCxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxVQUFVO1lBQUUsU0FBUztRQUM5RCxJQUFJLENBQUMsQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7WUFBRSxTQUFTO1FBRTVELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxTQUFnRCxDQUFDO1FBQ3BFLElBQUksQ0FBQyxJQUFJO1lBQUUsU0FBUztRQUVwQixNQUFNLElBQUksR0FBRyxPQUFPLElBQUksQ0FBQyxJQUFJ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
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { type ExecutionEnv, type FileInfo } from '../types.js';
|
|
2
|
-
export declare class NodeExecutionEnv implements ExecutionEnv {
|
|
3
|
-
cwd: string;
|
|
4
|
-
private shellPath?;
|
|
5
|
-
private shellEnv?;
|
|
6
|
-
constructor(options: {
|
|
7
|
-
cwd: string;
|
|
8
|
-
shellPath?: string;
|
|
9
|
-
shellEnv?: NodeJS.ProcessEnv;
|
|
10
|
-
});
|
|
11
|
-
exec(command: string, options?: {
|
|
12
|
-
cwd?: string;
|
|
13
|
-
env?: Record<string, string>;
|
|
14
|
-
timeout?: number;
|
|
15
|
-
signal?: AbortSignal;
|
|
16
|
-
onStdout?: (chunk: string) => void;
|
|
17
|
-
onStderr?: (chunk: string) => void;
|
|
18
|
-
}): Promise<{
|
|
19
|
-
stdout: string;
|
|
20
|
-
stderr: string;
|
|
21
|
-
exitCode: number;
|
|
22
|
-
}>;
|
|
23
|
-
readTextFile(path: string): Promise<string>;
|
|
24
|
-
readBinaryFile(path: string): Promise<Uint8Array>;
|
|
25
|
-
writeFile(path: string, content: string | Uint8Array): Promise<void>;
|
|
26
|
-
fileInfo(path: string): Promise<FileInfo>;
|
|
27
|
-
listDir(path: string): Promise<FileInfo[]>;
|
|
28
|
-
realPath(path: string): Promise<string>;
|
|
29
|
-
exists(path: string): Promise<boolean>;
|
|
30
|
-
createDir(path: string, options?: {
|
|
31
|
-
recursive?: boolean;
|
|
32
|
-
}): Promise<void>;
|
|
33
|
-
remove(path: string, options?: {
|
|
34
|
-
recursive?: boolean;
|
|
35
|
-
force?: boolean;
|
|
36
|
-
}): Promise<void>;
|
|
37
|
-
createTempDir(prefix?: string): Promise<string>;
|
|
38
|
-
createTempFile(options?: {
|
|
39
|
-
prefix?: string;
|
|
40
|
-
suffix?: string;
|
|
41
|
-
}): Promise<string>;
|
|
42
|
-
cleanup(): Promise<void>;
|
|
43
|
-
}
|
|
@@ -1,353 +0,0 @@
|
|
|
1
|
-
import { spawn } from 'node:child_process';
|
|
2
|
-
import { randomUUID } from 'node:crypto';
|
|
3
|
-
import { constants } from 'node:fs';
|
|
4
|
-
import { access, lstat, mkdir, mkdtemp, readdir, readFile, realpath, rm, writeFile, } from 'node:fs/promises';
|
|
5
|
-
import { tmpdir } from 'node:os';
|
|
6
|
-
import { isAbsolute, join, resolve } from 'node:path';
|
|
7
|
-
import { FileError, } from '../types.js';
|
|
8
|
-
function resolvePath(cwd, path) {
|
|
9
|
-
return isAbsolute(path) ? path : resolve(cwd, path);
|
|
10
|
-
}
|
|
11
|
-
function fileKindFromStats(stats) {
|
|
12
|
-
if (stats.isFile())
|
|
13
|
-
return 'file';
|
|
14
|
-
if (stats.isDirectory())
|
|
15
|
-
return 'directory';
|
|
16
|
-
if (stats.isSymbolicLink())
|
|
17
|
-
return 'symlink';
|
|
18
|
-
throw new FileError('invalid', 'Unsupported file type');
|
|
19
|
-
}
|
|
20
|
-
function fileInfoFromStats(path, stats) {
|
|
21
|
-
return {
|
|
22
|
-
name: path.replace(/\/+$/, '').split('/').pop() ?? path,
|
|
23
|
-
path,
|
|
24
|
-
kind: fileKindFromStats(stats),
|
|
25
|
-
size: stats.size,
|
|
26
|
-
mtimeMs: stats.mtimeMs,
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
function isNodeError(error) {
|
|
30
|
-
return error instanceof Error && 'code' in error;
|
|
31
|
-
}
|
|
32
|
-
function toFileError(error, path) {
|
|
33
|
-
if (error instanceof FileError)
|
|
34
|
-
return error;
|
|
35
|
-
if (isNodeError(error)) {
|
|
36
|
-
const message = error.message;
|
|
37
|
-
switch (error.code) {
|
|
38
|
-
case 'ENOENT':
|
|
39
|
-
return new FileError('not_found', message, path, { cause: error });
|
|
40
|
-
case 'EACCES':
|
|
41
|
-
case 'EPERM':
|
|
42
|
-
return new FileError('permission_denied', message, path, {
|
|
43
|
-
cause: error,
|
|
44
|
-
});
|
|
45
|
-
case 'ENOTDIR':
|
|
46
|
-
return new FileError('not_directory', message, path, { cause: error });
|
|
47
|
-
case 'EISDIR':
|
|
48
|
-
return new FileError('is_directory', message, path, { cause: error });
|
|
49
|
-
case 'EINVAL':
|
|
50
|
-
return new FileError('invalid', message, path, { cause: error });
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
return new FileError('unknown', error instanceof Error ? error.message : String(error), path, { cause: error });
|
|
54
|
-
}
|
|
55
|
-
async function pathExists(path) {
|
|
56
|
-
try {
|
|
57
|
-
await access(path, constants.F_OK);
|
|
58
|
-
return true;
|
|
59
|
-
}
|
|
60
|
-
catch {
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
async function runCommand(command, args, timeoutMs) {
|
|
65
|
-
return await new Promise((resolve) => {
|
|
66
|
-
let stdout = '';
|
|
67
|
-
const child = spawn(command, args, { stdio: ['ignore', 'pipe', 'ignore'] });
|
|
68
|
-
const timeout = setTimeout(() => {
|
|
69
|
-
if (child.pid)
|
|
70
|
-
killProcessTree(child.pid);
|
|
71
|
-
}, timeoutMs);
|
|
72
|
-
child.stdout?.setEncoding('utf8');
|
|
73
|
-
child.stdout?.on('data', (chunk) => {
|
|
74
|
-
stdout += chunk;
|
|
75
|
-
});
|
|
76
|
-
child.on('error', () => {
|
|
77
|
-
clearTimeout(timeout);
|
|
78
|
-
resolve({ stdout: '', status: null });
|
|
79
|
-
});
|
|
80
|
-
child.on('close', (status) => {
|
|
81
|
-
clearTimeout(timeout);
|
|
82
|
-
resolve({ stdout, status });
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
async function findBashOnPath() {
|
|
87
|
-
const result = process.platform === 'win32'
|
|
88
|
-
? await runCommand('where', ['bash.exe'], 5000)
|
|
89
|
-
: await runCommand('which', ['bash'], 5000);
|
|
90
|
-
if (result.status !== 0 || !result.stdout)
|
|
91
|
-
return null;
|
|
92
|
-
const firstMatch = result.stdout.trim().split(/\r?\n/)[0];
|
|
93
|
-
return firstMatch && (await pathExists(firstMatch)) ? firstMatch : null;
|
|
94
|
-
}
|
|
95
|
-
async function getShellConfig(customShellPath) {
|
|
96
|
-
if (customShellPath) {
|
|
97
|
-
if (await pathExists(customShellPath)) {
|
|
98
|
-
return { shell: customShellPath, args: ['-c'] };
|
|
99
|
-
}
|
|
100
|
-
throw new Error(`Custom shell path not found: ${customShellPath}`);
|
|
101
|
-
}
|
|
102
|
-
if (process.platform === 'win32') {
|
|
103
|
-
const candidates = [];
|
|
104
|
-
const programFiles = process.env.ProgramFiles;
|
|
105
|
-
if (programFiles)
|
|
106
|
-
candidates.push(`${programFiles}\\Git\\bin\\bash.exe`);
|
|
107
|
-
const programFilesX86 = process.env['ProgramFiles(x86)'];
|
|
108
|
-
if (programFilesX86)
|
|
109
|
-
candidates.push(`${programFilesX86}\\Git\\bin\\bash.exe`);
|
|
110
|
-
for (const candidate of candidates) {
|
|
111
|
-
if (await pathExists(candidate)) {
|
|
112
|
-
return { shell: candidate, args: ['-c'] };
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
const bashOnPath = await findBashOnPath();
|
|
116
|
-
if (bashOnPath) {
|
|
117
|
-
return { shell: bashOnPath, args: ['-c'] };
|
|
118
|
-
}
|
|
119
|
-
throw new Error('No bash shell found');
|
|
120
|
-
}
|
|
121
|
-
if (await pathExists('/bin/bash')) {
|
|
122
|
-
return { shell: '/bin/bash', args: ['-c'] };
|
|
123
|
-
}
|
|
124
|
-
const bashOnPath = await findBashOnPath();
|
|
125
|
-
if (bashOnPath) {
|
|
126
|
-
return { shell: bashOnPath, args: ['-c'] };
|
|
127
|
-
}
|
|
128
|
-
return { shell: 'sh', args: ['-c'] };
|
|
129
|
-
}
|
|
130
|
-
function getShellEnv(baseEnv, extraEnv) {
|
|
131
|
-
return {
|
|
132
|
-
...process.env,
|
|
133
|
-
...baseEnv,
|
|
134
|
-
...extraEnv,
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
function killProcessTree(pid) {
|
|
138
|
-
if (process.platform === 'win32') {
|
|
139
|
-
try {
|
|
140
|
-
spawn('taskkill', ['/F', '/T', '/PID', String(pid)], {
|
|
141
|
-
stdio: 'ignore',
|
|
142
|
-
detached: true,
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
catch {
|
|
146
|
-
// Ignore errors.
|
|
147
|
-
}
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
try {
|
|
151
|
-
process.kill(-pid, 'SIGKILL');
|
|
152
|
-
}
|
|
153
|
-
catch {
|
|
154
|
-
try {
|
|
155
|
-
process.kill(pid, 'SIGKILL');
|
|
156
|
-
}
|
|
157
|
-
catch {
|
|
158
|
-
// Process already dead.
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
export class NodeExecutionEnv {
|
|
163
|
-
cwd;
|
|
164
|
-
shellPath;
|
|
165
|
-
shellEnv;
|
|
166
|
-
constructor(options) {
|
|
167
|
-
this.cwd = options.cwd;
|
|
168
|
-
this.shellPath = options.shellPath;
|
|
169
|
-
this.shellEnv = options.shellEnv;
|
|
170
|
-
}
|
|
171
|
-
async exec(command, options) {
|
|
172
|
-
const cwd = options?.cwd ? resolvePath(this.cwd, options.cwd) : this.cwd;
|
|
173
|
-
const { shell, args } = await getShellConfig(this.shellPath);
|
|
174
|
-
return await new Promise((resolvePromise, reject) => {
|
|
175
|
-
let stdout = '';
|
|
176
|
-
let stderr = '';
|
|
177
|
-
let settled = false;
|
|
178
|
-
let timedOut = false;
|
|
179
|
-
const child = spawn(shell, [...args, command], {
|
|
180
|
-
cwd,
|
|
181
|
-
detached: process.platform !== 'win32',
|
|
182
|
-
env: getShellEnv(this.shellEnv, options?.env),
|
|
183
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
184
|
-
});
|
|
185
|
-
const timeoutId = typeof options?.timeout === 'number'
|
|
186
|
-
? setTimeout(() => {
|
|
187
|
-
timedOut = true;
|
|
188
|
-
if (child.pid) {
|
|
189
|
-
killProcessTree(child.pid);
|
|
190
|
-
}
|
|
191
|
-
}, options.timeout * 1000)
|
|
192
|
-
: undefined;
|
|
193
|
-
const onAbort = () => {
|
|
194
|
-
if (child.pid) {
|
|
195
|
-
killProcessTree(child.pid);
|
|
196
|
-
}
|
|
197
|
-
};
|
|
198
|
-
if (options?.signal) {
|
|
199
|
-
if (options.signal.aborted) {
|
|
200
|
-
onAbort();
|
|
201
|
-
}
|
|
202
|
-
else {
|
|
203
|
-
options.signal.addEventListener('abort', onAbort, { once: true });
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
child.stdout?.setEncoding('utf8');
|
|
207
|
-
child.stderr?.setEncoding('utf8');
|
|
208
|
-
child.stdout?.on('data', (chunk) => {
|
|
209
|
-
stdout += chunk;
|
|
210
|
-
options?.onStdout?.(chunk);
|
|
211
|
-
});
|
|
212
|
-
child.stderr?.on('data', (chunk) => {
|
|
213
|
-
stderr += chunk;
|
|
214
|
-
options?.onStderr?.(chunk);
|
|
215
|
-
});
|
|
216
|
-
child.on('error', (error) => {
|
|
217
|
-
if (timeoutId)
|
|
218
|
-
clearTimeout(timeoutId);
|
|
219
|
-
if (options?.signal)
|
|
220
|
-
options.signal.removeEventListener('abort', onAbort);
|
|
221
|
-
if (settled)
|
|
222
|
-
return;
|
|
223
|
-
settled = true;
|
|
224
|
-
reject(error);
|
|
225
|
-
});
|
|
226
|
-
child.on('close', (code) => {
|
|
227
|
-
if (timeoutId)
|
|
228
|
-
clearTimeout(timeoutId);
|
|
229
|
-
if (options?.signal)
|
|
230
|
-
options.signal.removeEventListener('abort', onAbort);
|
|
231
|
-
if (settled)
|
|
232
|
-
return;
|
|
233
|
-
settled = true;
|
|
234
|
-
if (options?.signal?.aborted) {
|
|
235
|
-
reject(new Error('aborted'));
|
|
236
|
-
return;
|
|
237
|
-
}
|
|
238
|
-
if (timedOut) {
|
|
239
|
-
reject(new Error(`timeout:${options?.timeout}`));
|
|
240
|
-
return;
|
|
241
|
-
}
|
|
242
|
-
resolvePromise({ stdout, stderr, exitCode: code ?? 0 });
|
|
243
|
-
});
|
|
244
|
-
});
|
|
245
|
-
}
|
|
246
|
-
async readTextFile(path) {
|
|
247
|
-
const resolved = resolvePath(this.cwd, path);
|
|
248
|
-
try {
|
|
249
|
-
return await readFile(resolved, 'utf8');
|
|
250
|
-
}
|
|
251
|
-
catch (error) {
|
|
252
|
-
throw toFileError(error, resolved);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
async readBinaryFile(path) {
|
|
256
|
-
const resolved = resolvePath(this.cwd, path);
|
|
257
|
-
try {
|
|
258
|
-
return await readFile(resolved);
|
|
259
|
-
}
|
|
260
|
-
catch (error) {
|
|
261
|
-
throw toFileError(error, resolved);
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
async writeFile(path, content) {
|
|
265
|
-
const resolved = resolvePath(this.cwd, path);
|
|
266
|
-
try {
|
|
267
|
-
await mkdir(resolve(resolved, '..'), { recursive: true });
|
|
268
|
-
await writeFile(resolved, content);
|
|
269
|
-
}
|
|
270
|
-
catch (error) {
|
|
271
|
-
throw toFileError(error, resolved);
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
async fileInfo(path) {
|
|
275
|
-
const resolved = resolvePath(this.cwd, path);
|
|
276
|
-
try {
|
|
277
|
-
return fileInfoFromStats(resolved, await lstat(resolved));
|
|
278
|
-
}
|
|
279
|
-
catch (error) {
|
|
280
|
-
throw toFileError(error, resolved);
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
async listDir(path) {
|
|
284
|
-
const resolved = resolvePath(this.cwd, path);
|
|
285
|
-
try {
|
|
286
|
-
const entries = await readdir(resolved, { withFileTypes: true });
|
|
287
|
-
const infos = [];
|
|
288
|
-
for (const entry of entries) {
|
|
289
|
-
const entryPath = resolve(resolved, entry.name);
|
|
290
|
-
try {
|
|
291
|
-
infos.push(fileInfoFromStats(entryPath, await lstat(entryPath)));
|
|
292
|
-
}
|
|
293
|
-
catch (error) {
|
|
294
|
-
if (error instanceof FileError && error.code === 'invalid')
|
|
295
|
-
continue;
|
|
296
|
-
throw error;
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
return infos;
|
|
300
|
-
}
|
|
301
|
-
catch (error) {
|
|
302
|
-
throw toFileError(error, resolved);
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
async realPath(path) {
|
|
306
|
-
const resolved = resolvePath(this.cwd, path);
|
|
307
|
-
try {
|
|
308
|
-
return await realpath(resolved);
|
|
309
|
-
}
|
|
310
|
-
catch (error) {
|
|
311
|
-
throw toFileError(error, resolved);
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
async exists(path) {
|
|
315
|
-
try {
|
|
316
|
-
await this.fileInfo(path);
|
|
317
|
-
return true;
|
|
318
|
-
}
|
|
319
|
-
catch (error) {
|
|
320
|
-
if (error instanceof FileError && error.code === 'not_found')
|
|
321
|
-
return false;
|
|
322
|
-
throw error;
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
async createDir(path, options) {
|
|
326
|
-
await mkdir(resolvePath(this.cwd, path), { recursive: options?.recursive });
|
|
327
|
-
}
|
|
328
|
-
async remove(path, options) {
|
|
329
|
-
const resolved = resolvePath(this.cwd, path);
|
|
330
|
-
try {
|
|
331
|
-
await rm(resolved, {
|
|
332
|
-
recursive: options?.recursive ?? false,
|
|
333
|
-
force: options?.force ?? false,
|
|
334
|
-
});
|
|
335
|
-
}
|
|
336
|
-
catch (error) {
|
|
337
|
-
throw toFileError(error, resolved);
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
async createTempDir(prefix = 'tmp-') {
|
|
341
|
-
return await mkdtemp(join(tmpdir(), prefix));
|
|
342
|
-
}
|
|
343
|
-
async createTempFile(options) {
|
|
344
|
-
const dir = await this.createTempDir('tmp-');
|
|
345
|
-
const filePath = join(dir, `${options?.prefix ?? ''}${randomUUID()}${options?.suffix ?? ''}`);
|
|
346
|
-
await writeFile(filePath, '');
|
|
347
|
-
return filePath;
|
|
348
|
-
}
|
|
349
|
-
async cleanup() {
|
|
350
|
-
// nothing to clean up for the local node implementation
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZWpzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9hZ2VudC1jb3JlL2hhcm5lc3MvZW52L25vZGVqcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFDTCxPQUFPLEVBQ1AsT0FBTyxFQUNQLFFBQVEsRUFDUixRQUFRLEVBQ1IsRUFBRSxFQUNGLFNBQVMsR0FDVixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXRELE9BQU8sRUFFTCxTQUFTLEdBR1YsTUFBTSxhQUFhLENBQUM7QUFFckIsU0FBUyxXQUFXLENBQUMsR0FBVyxFQUFFLElBQVk7SUFDNUMsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxLQUkxQjtJQUNDLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQ2xDLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRTtRQUFFLE9BQU8sV0FBVyxDQUFDO0lBQzVDLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzdDLE1BQU0sSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFLHVC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
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export { NodeExecutionEnv } from './env/nodejs.js';
|
|
2
|
-
export { FileError } from './types.js';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uLWVudi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYWdlbnQtY29yZS9oYXJuZXNzL2V4ZWN1dGlvbi1lbnYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFRbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQyJ9
|