psadk 1.4.8 → 1.5.1
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/skills/skillParser.d.ts +13 -3
- package/build/main/lib/skills/skillParser.js +61 -12
- package/build/main/lib/skills/utils.js +18 -10
- 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/skills/skillParser.d.ts +13 -3
- package/build/module/lib/skills/skillParser.js +61 -12
- package/build/module/lib/skills/utils.js +18 -10
- 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,170 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import { createReadStream } from 'node:fs';
|
|
3
|
-
import { appendFile, mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
4
|
-
import { dirname, resolve } from 'node:path';
|
|
5
|
-
import { createInterface } from 'node:readline';
|
|
6
|
-
function updateLabelCache(labelsById, entry) {
|
|
7
|
-
if (entry.type !== 'label')
|
|
8
|
-
return;
|
|
9
|
-
const label = entry.label?.trim();
|
|
10
|
-
if (label) {
|
|
11
|
-
labelsById.set(entry.targetId, label);
|
|
12
|
-
}
|
|
13
|
-
else {
|
|
14
|
-
labelsById.delete(entry.targetId);
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
function buildLabelsById(entries) {
|
|
18
|
-
const labelsById = new Map();
|
|
19
|
-
for (const entry of entries) {
|
|
20
|
-
updateLabelCache(labelsById, entry);
|
|
21
|
-
}
|
|
22
|
-
return labelsById;
|
|
23
|
-
}
|
|
24
|
-
function generateEntryId(byId) {
|
|
25
|
-
for (let i = 0; i < 100; i++) {
|
|
26
|
-
const id = randomUUID().slice(0, 8);
|
|
27
|
-
if (!byId.has(id))
|
|
28
|
-
return id;
|
|
29
|
-
}
|
|
30
|
-
return randomUUID();
|
|
31
|
-
}
|
|
32
|
-
function headerToSessionMetadata(header, path) {
|
|
33
|
-
return {
|
|
34
|
-
id: header.id,
|
|
35
|
-
createdAt: header.timestamp,
|
|
36
|
-
cwd: header.cwd,
|
|
37
|
-
path,
|
|
38
|
-
parentSessionPath: header.parentSession,
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
export async function loadJsonlSessionMetadata(filePath) {
|
|
42
|
-
const stream = createReadStream(filePath, { encoding: 'utf8' });
|
|
43
|
-
const lines = createInterface({ input: stream, crlfDelay: Infinity });
|
|
44
|
-
try {
|
|
45
|
-
for await (const line of lines) {
|
|
46
|
-
if (!line.trim())
|
|
47
|
-
break;
|
|
48
|
-
try {
|
|
49
|
-
const header = JSON.parse(line);
|
|
50
|
-
return headerToSessionMetadata(header, resolve(filePath));
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
throw new Error(`Invalid JSONL session file ${filePath}: first line is not a valid session header`);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
throw new Error(`Invalid JSONL session file ${filePath}: missing session header`);
|
|
57
|
-
}
|
|
58
|
-
finally {
|
|
59
|
-
lines.close();
|
|
60
|
-
stream.destroy();
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
async function loadJsonlStorage(filePath) {
|
|
64
|
-
const content = await readFile(filePath, 'utf8');
|
|
65
|
-
const lines = content.split('\n').filter((line) => line.trim());
|
|
66
|
-
if (lines.length === 0) {
|
|
67
|
-
throw new Error(`Invalid JSONL session file ${filePath}: missing session header`);
|
|
68
|
-
}
|
|
69
|
-
let header;
|
|
70
|
-
try {
|
|
71
|
-
header = JSON.parse(lines[0]);
|
|
72
|
-
}
|
|
73
|
-
catch {
|
|
74
|
-
throw new Error(`Invalid JSONL session file ${filePath}: first line is not a valid session header`);
|
|
75
|
-
}
|
|
76
|
-
const entries = [];
|
|
77
|
-
let leafId = null;
|
|
78
|
-
for (const line of lines.slice(1)) {
|
|
79
|
-
try {
|
|
80
|
-
const entry = JSON.parse(line);
|
|
81
|
-
entries.push(entry);
|
|
82
|
-
leafId = entry.id;
|
|
83
|
-
}
|
|
84
|
-
catch {
|
|
85
|
-
// ignore malformed entry lines
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return { header, entries, leafId };
|
|
89
|
-
}
|
|
90
|
-
export class JsonlSessionStorage {
|
|
91
|
-
filePath;
|
|
92
|
-
metadata;
|
|
93
|
-
entries;
|
|
94
|
-
byId;
|
|
95
|
-
labelsById;
|
|
96
|
-
currentLeafId;
|
|
97
|
-
constructor(filePath, header, entries, leafId) {
|
|
98
|
-
this.filePath = resolve(filePath);
|
|
99
|
-
this.metadata = headerToSessionMetadata(header, this.filePath);
|
|
100
|
-
this.entries = entries;
|
|
101
|
-
this.byId = new Map(entries.map((entry) => [entry.id, entry]));
|
|
102
|
-
this.labelsById = buildLabelsById(entries);
|
|
103
|
-
this.currentLeafId = leafId;
|
|
104
|
-
}
|
|
105
|
-
static async open(filePath) {
|
|
106
|
-
const resolvedPath = resolve(filePath);
|
|
107
|
-
const loaded = await loadJsonlStorage(resolvedPath);
|
|
108
|
-
return new JsonlSessionStorage(resolvedPath, loaded.header, loaded.entries, loaded.leafId);
|
|
109
|
-
}
|
|
110
|
-
static async create(filePath, options) {
|
|
111
|
-
const resolvedPath = resolve(filePath);
|
|
112
|
-
const header = {
|
|
113
|
-
type: 'session',
|
|
114
|
-
version: 3,
|
|
115
|
-
id: options.sessionId,
|
|
116
|
-
timestamp: new Date().toISOString(),
|
|
117
|
-
cwd: options.cwd,
|
|
118
|
-
parentSession: options.parentSessionPath,
|
|
119
|
-
};
|
|
120
|
-
await mkdir(dirname(resolvedPath), { recursive: true });
|
|
121
|
-
await writeFile(resolvedPath, `${JSON.stringify(header)}\n`);
|
|
122
|
-
return new JsonlSessionStorage(resolvedPath, header, [], null);
|
|
123
|
-
}
|
|
124
|
-
async getMetadata() {
|
|
125
|
-
return this.metadata;
|
|
126
|
-
}
|
|
127
|
-
async getLeafId() {
|
|
128
|
-
return this.currentLeafId;
|
|
129
|
-
}
|
|
130
|
-
async setLeafId(leafId) {
|
|
131
|
-
if (leafId !== null && !this.byId.has(leafId)) {
|
|
132
|
-
throw new Error(`Entry ${leafId} not found`);
|
|
133
|
-
}
|
|
134
|
-
this.currentLeafId = leafId;
|
|
135
|
-
}
|
|
136
|
-
async createEntryId() {
|
|
137
|
-
return generateEntryId(this.byId);
|
|
138
|
-
}
|
|
139
|
-
async appendEntry(entry) {
|
|
140
|
-
await appendFile(this.filePath, `${JSON.stringify(entry)}\n`);
|
|
141
|
-
this.entries.push(entry);
|
|
142
|
-
this.byId.set(entry.id, entry);
|
|
143
|
-
updateLabelCache(this.labelsById, entry);
|
|
144
|
-
this.currentLeafId = entry.id;
|
|
145
|
-
}
|
|
146
|
-
async getEntry(id) {
|
|
147
|
-
return this.byId.get(id);
|
|
148
|
-
}
|
|
149
|
-
async findEntries(type) {
|
|
150
|
-
return this.entries.filter((entry) => entry.type === type);
|
|
151
|
-
}
|
|
152
|
-
async getLabel(id) {
|
|
153
|
-
return this.labelsById.get(id);
|
|
154
|
-
}
|
|
155
|
-
async getPathToRoot(leafId) {
|
|
156
|
-
if (leafId === null)
|
|
157
|
-
return [];
|
|
158
|
-
const path = [];
|
|
159
|
-
let current = this.byId.get(leafId);
|
|
160
|
-
while (current) {
|
|
161
|
-
path.unshift(current);
|
|
162
|
-
current = current.parentId ? this.byId.get(current.parentId) : undefined;
|
|
163
|
-
}
|
|
164
|
-
return path;
|
|
165
|
-
}
|
|
166
|
-
async getEntries() {
|
|
167
|
-
return [...this.entries];
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2FnZW50LWNvcmUvaGFybmVzcy9zZXNzaW9uL3N0b3JhZ2UvanNvbmwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFpQmhELFNBQVMsZ0JBQWdCLENBQ3ZCLFVBQStCLEVBQy9CLEtBQXVCO0lBRXZCLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPO1FBQUUsT0FBTztJQUNuQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2xDLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztTQUFNLENBQUM7UUFDTixVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLE9BQTJCO0lBQ2xELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQzdDLEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7UUFDNUIsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxPQUFP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
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import { v7 as uuidv7 } from 'uuid';
|
|
3
|
-
function updateLabelCache(labelsById, entry) {
|
|
4
|
-
if (entry.type !== 'label')
|
|
5
|
-
return;
|
|
6
|
-
const label = entry.label?.trim();
|
|
7
|
-
if (label) {
|
|
8
|
-
labelsById.set(entry.targetId, label);
|
|
9
|
-
}
|
|
10
|
-
else {
|
|
11
|
-
labelsById.delete(entry.targetId);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
function buildLabelsById(entries) {
|
|
15
|
-
const labelsById = new Map();
|
|
16
|
-
for (const entry of entries) {
|
|
17
|
-
updateLabelCache(labelsById, entry);
|
|
18
|
-
}
|
|
19
|
-
return labelsById;
|
|
20
|
-
}
|
|
21
|
-
function generateEntryId(byId) {
|
|
22
|
-
for (let i = 0; i < 100; i++) {
|
|
23
|
-
const id = randomUUID().slice(0, 8);
|
|
24
|
-
if (!byId.has(id))
|
|
25
|
-
return id;
|
|
26
|
-
}
|
|
27
|
-
return randomUUID();
|
|
28
|
-
}
|
|
29
|
-
export class InMemorySessionStorage {
|
|
30
|
-
metadata;
|
|
31
|
-
entries;
|
|
32
|
-
byId;
|
|
33
|
-
labelsById;
|
|
34
|
-
leafId;
|
|
35
|
-
constructor(options) {
|
|
36
|
-
this.entries = options?.entries ? [...options.entries] : [];
|
|
37
|
-
this.byId = new Map(this.entries.map((entry) => [entry.id, entry]));
|
|
38
|
-
this.labelsById = buildLabelsById(this.entries);
|
|
39
|
-
this.leafId =
|
|
40
|
-
options?.leafId ?? this.entries[this.entries.length - 1]?.id ?? null;
|
|
41
|
-
if (this.leafId !== null && !this.byId.has(this.leafId)) {
|
|
42
|
-
throw new Error(`Entry ${this.leafId} not found`);
|
|
43
|
-
}
|
|
44
|
-
this.metadata = options?.metadata ?? {
|
|
45
|
-
id: uuidv7(),
|
|
46
|
-
createdAt: new Date().toISOString(),
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
async getMetadata() {
|
|
50
|
-
return this.metadata;
|
|
51
|
-
}
|
|
52
|
-
async getLeafId() {
|
|
53
|
-
return this.leafId;
|
|
54
|
-
}
|
|
55
|
-
async setLeafId(leafId) {
|
|
56
|
-
if (leafId !== null && !this.byId.has(leafId)) {
|
|
57
|
-
throw new Error(`Entry ${leafId} not found`);
|
|
58
|
-
}
|
|
59
|
-
this.leafId = leafId;
|
|
60
|
-
}
|
|
61
|
-
async createEntryId() {
|
|
62
|
-
return generateEntryId(this.byId);
|
|
63
|
-
}
|
|
64
|
-
async appendEntry(entry) {
|
|
65
|
-
this.entries.push(entry);
|
|
66
|
-
this.byId.set(entry.id, entry);
|
|
67
|
-
updateLabelCache(this.labelsById, entry);
|
|
68
|
-
this.leafId = entry.id;
|
|
69
|
-
}
|
|
70
|
-
async getEntry(id) {
|
|
71
|
-
return this.byId.get(id);
|
|
72
|
-
}
|
|
73
|
-
async findEntries(type) {
|
|
74
|
-
return this.entries.filter((entry) => entry.type === type);
|
|
75
|
-
}
|
|
76
|
-
async getLabel(id) {
|
|
77
|
-
return this.labelsById.get(id);
|
|
78
|
-
}
|
|
79
|
-
async getPathToRoot(leafId) {
|
|
80
|
-
if (leafId === null)
|
|
81
|
-
return [];
|
|
82
|
-
const path = [];
|
|
83
|
-
let current = this.byId.get(leafId);
|
|
84
|
-
while (current) {
|
|
85
|
-
path.unshift(current);
|
|
86
|
-
current = current.parentId ? this.byId.get(current.parentId) : undefined;
|
|
87
|
-
}
|
|
88
|
-
return path;
|
|
89
|
-
}
|
|
90
|
-
async getEntries() {
|
|
91
|
-
return [...this.entries];
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9hZ2VudC1jb3JlL2hhcm5lc3Mvc2Vzc2lvbi9zdG9yYWdlL21lbW9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBUXBDLFNBQVMsZ0JBQWdCLENBQ3ZCLFVBQStCLEVBQy9CLEtBQXVCO0lBRXZCLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPO1FBQUUsT0FBTztJQUNuQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2xDLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztTQUFNLENBQUM7UUFDTixVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLE9BQTJCO0lBQ2xELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQzdDLEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7UUFDNUIsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsSUFBa0M7SUFDekQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzdCLE1BQU0sRUFBRSxHQUFHLFVBQVUsRUFBRSxD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
|
|
@@ -1,266 +0,0 @@
|
|
|
1
|
-
import ignore from 'ignore';
|
|
2
|
-
import { parse } from 'yaml';
|
|
3
|
-
const MAX_NAME_LENGTH = 64;
|
|
4
|
-
const MAX_DESCRIPTION_LENGTH = 1024;
|
|
5
|
-
const IGNORE_FILE_NAMES = ['.gitignore', '.ignore', '.fdignore'];
|
|
6
|
-
/** Format a skill invocation prompt, optionally appending additional user instructions. */
|
|
7
|
-
export function formatSkillInvocation(skill, additionalInstructions) {
|
|
8
|
-
const skillBlock = `<skill name="${skill.name}" location="${skill.filePath}">\nReferences are relative to ${dirnameEnvPath(skill.filePath)}.\n\n${skill.content}\n</skill>`;
|
|
9
|
-
return additionalInstructions
|
|
10
|
-
? `${skillBlock}\n\n${additionalInstructions}`
|
|
11
|
-
: skillBlock;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Load skills from one or more directories.
|
|
15
|
-
*
|
|
16
|
-
* Traverses directories recursively, loads `SKILL.md` files, loads direct root `.md` files as skills, honors ignore files,
|
|
17
|
-
* and returns diagnostics for invalid skill files. Missing input directories are skipped.
|
|
18
|
-
*/
|
|
19
|
-
export async function loadSkills(env, dirs) {
|
|
20
|
-
const skills = [];
|
|
21
|
-
const diagnostics = [];
|
|
22
|
-
for (const dir of Array.isArray(dirs) ? dirs : [dirs]) {
|
|
23
|
-
const rootInfo = await safeFileInfo(env, dir);
|
|
24
|
-
if (!rootInfo || (await resolveKind(env, rootInfo)) !== 'directory')
|
|
25
|
-
continue;
|
|
26
|
-
const result = await loadSkillsFromDirInternal(env, rootInfo.path, true, ignore(), rootInfo.path);
|
|
27
|
-
skills.push(...result.skills);
|
|
28
|
-
diagnostics.push(...result.diagnostics);
|
|
29
|
-
}
|
|
30
|
-
return { skills, diagnostics };
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Load skills from source-tagged directories.
|
|
34
|
-
*
|
|
35
|
-
* Source values are preserved exactly and attached to every loaded skill and diagnostic. The agent package does not
|
|
36
|
-
* interpret source values; applications define their own provenance shape.
|
|
37
|
-
*/
|
|
38
|
-
export async function loadSourcedSkills(env, inputs, mapSkill) {
|
|
39
|
-
const skills = [];
|
|
40
|
-
const diagnostics = [];
|
|
41
|
-
for (const input of inputs) {
|
|
42
|
-
const result = await loadSkills(env, input.path);
|
|
43
|
-
for (const skill of result.skills) {
|
|
44
|
-
skills.push({
|
|
45
|
-
skill: mapSkill ? mapSkill(skill, input.source) : skill,
|
|
46
|
-
source: input.source,
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
for (const diagnostic of result.diagnostics)
|
|
50
|
-
diagnostics.push({ ...diagnostic, source: input.source });
|
|
51
|
-
}
|
|
52
|
-
return { skills, diagnostics };
|
|
53
|
-
}
|
|
54
|
-
async function loadSkillsFromDirInternal(env, dir, includeRootFiles, ignoreMatcher, rootDir) {
|
|
55
|
-
const skills = [];
|
|
56
|
-
const diagnostics = [];
|
|
57
|
-
if (!(await env.exists(dir)))
|
|
58
|
-
return { skills, diagnostics };
|
|
59
|
-
const dirInfo = await safeFileInfo(env, dir);
|
|
60
|
-
if (!dirInfo || (await resolveKind(env, dirInfo)) !== 'directory')
|
|
61
|
-
return { skills, diagnostics };
|
|
62
|
-
await addIgnoreRules(env, ignoreMatcher, dir, rootDir);
|
|
63
|
-
let entries;
|
|
64
|
-
try {
|
|
65
|
-
entries = await env.listDir(dir);
|
|
66
|
-
}
|
|
67
|
-
catch {
|
|
68
|
-
return { skills, diagnostics };
|
|
69
|
-
}
|
|
70
|
-
for (const entry of entries) {
|
|
71
|
-
if (entry.name !== 'SKILL.md')
|
|
72
|
-
continue;
|
|
73
|
-
const fullPath = entry.path;
|
|
74
|
-
const kind = await resolveKind(env, entry);
|
|
75
|
-
if (kind !== 'file')
|
|
76
|
-
continue;
|
|
77
|
-
const relPath = relativeEnvPath(rootDir, fullPath);
|
|
78
|
-
if (ignoreMatcher.ignores(relPath))
|
|
79
|
-
continue;
|
|
80
|
-
const result = await loadSkillFromFile(env, fullPath);
|
|
81
|
-
if (result.skill)
|
|
82
|
-
skills.push(result.skill);
|
|
83
|
-
diagnostics.push(...result.diagnostics);
|
|
84
|
-
return { skills, diagnostics };
|
|
85
|
-
}
|
|
86
|
-
for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
|
|
87
|
-
if (entry.name.startsWith('.') || entry.name === 'node_modules')
|
|
88
|
-
continue;
|
|
89
|
-
const fullPath = entry.path;
|
|
90
|
-
const kind = await resolveKind(env, entry);
|
|
91
|
-
if (!kind)
|
|
92
|
-
continue;
|
|
93
|
-
const relPath = relativeEnvPath(rootDir, fullPath);
|
|
94
|
-
const ignorePath = kind === 'directory' ? `${relPath}/` : relPath;
|
|
95
|
-
if (ignoreMatcher.ignores(ignorePath))
|
|
96
|
-
continue;
|
|
97
|
-
if (kind === 'directory') {
|
|
98
|
-
const result = await loadSkillsFromDirInternal(env, fullPath, false, ignoreMatcher, rootDir);
|
|
99
|
-
skills.push(...result.skills);
|
|
100
|
-
diagnostics.push(...result.diagnostics);
|
|
101
|
-
continue;
|
|
102
|
-
}
|
|
103
|
-
if (kind !== 'file' || !includeRootFiles || !entry.name.endsWith('.md'))
|
|
104
|
-
continue;
|
|
105
|
-
const result = await loadSkillFromFile(env, fullPath);
|
|
106
|
-
if (result.skill)
|
|
107
|
-
skills.push(result.skill);
|
|
108
|
-
diagnostics.push(...result.diagnostics);
|
|
109
|
-
}
|
|
110
|
-
return { skills, diagnostics };
|
|
111
|
-
}
|
|
112
|
-
async function addIgnoreRules(env, ig, dir, rootDir) {
|
|
113
|
-
const relativeDir = relativeEnvPath(rootDir, dir);
|
|
114
|
-
const prefix = relativeDir ? `${relativeDir}/` : '';
|
|
115
|
-
for (const filename of IGNORE_FILE_NAMES) {
|
|
116
|
-
const ignorePath = joinEnvPath(dir, filename);
|
|
117
|
-
const info = await safeFileInfo(env, ignorePath);
|
|
118
|
-
if (info?.kind !== 'file')
|
|
119
|
-
continue;
|
|
120
|
-
try {
|
|
121
|
-
const content = await env.readTextFile(ignorePath);
|
|
122
|
-
const patterns = content
|
|
123
|
-
.split(/\r?\n/)
|
|
124
|
-
.map((line) => prefixIgnorePattern(line, prefix))
|
|
125
|
-
.filter((line) => Boolean(line));
|
|
126
|
-
if (patterns.length > 0)
|
|
127
|
-
ig.add(patterns);
|
|
128
|
-
}
|
|
129
|
-
catch { }
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
function prefixIgnorePattern(line, prefix) {
|
|
133
|
-
const trimmed = line.trim();
|
|
134
|
-
if (!trimmed)
|
|
135
|
-
return null;
|
|
136
|
-
if (trimmed.startsWith('#') && !trimmed.startsWith('\\#'))
|
|
137
|
-
return null;
|
|
138
|
-
let pattern = line;
|
|
139
|
-
let negated = false;
|
|
140
|
-
if (pattern.startsWith('!')) {
|
|
141
|
-
negated = true;
|
|
142
|
-
pattern = pattern.slice(1);
|
|
143
|
-
}
|
|
144
|
-
else if (pattern.startsWith('\\!')) {
|
|
145
|
-
pattern = pattern.slice(1);
|
|
146
|
-
}
|
|
147
|
-
if (pattern.startsWith('/'))
|
|
148
|
-
pattern = pattern.slice(1);
|
|
149
|
-
const prefixed = prefix ? `${prefix}${pattern}` : pattern;
|
|
150
|
-
return negated ? `!${prefixed}` : prefixed;
|
|
151
|
-
}
|
|
152
|
-
async function loadSkillFromFile(env, filePath) {
|
|
153
|
-
const diagnostics = [];
|
|
154
|
-
try {
|
|
155
|
-
const rawContent = await env.readTextFile(filePath);
|
|
156
|
-
const { frontmatter, body } = parseFrontmatter(rawContent);
|
|
157
|
-
const skillDir = dirnameEnvPath(filePath);
|
|
158
|
-
const parentDirName = basenameEnvPath(skillDir);
|
|
159
|
-
for (const error of validateDescription(frontmatter.description)) {
|
|
160
|
-
diagnostics.push({ type: 'warning', message: error, path: filePath });
|
|
161
|
-
}
|
|
162
|
-
const name = frontmatter.name || parentDirName;
|
|
163
|
-
for (const error of validateName(name, parentDirName)) {
|
|
164
|
-
diagnostics.push({ type: 'warning', message: error, path: filePath });
|
|
165
|
-
}
|
|
166
|
-
if (!frontmatter.description || frontmatter.description.trim() === '') {
|
|
167
|
-
return { skill: null, diagnostics };
|
|
168
|
-
}
|
|
169
|
-
return {
|
|
170
|
-
skill: {
|
|
171
|
-
name,
|
|
172
|
-
description: frontmatter.description,
|
|
173
|
-
content: body,
|
|
174
|
-
filePath,
|
|
175
|
-
disableModelInvocation: frontmatter['disable-model-invocation'] === true,
|
|
176
|
-
},
|
|
177
|
-
diagnostics,
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
catch (error) {
|
|
181
|
-
const message = error instanceof Error ? error.message : 'failed to parse skill file';
|
|
182
|
-
diagnostics.push({ type: 'warning', message, path: filePath });
|
|
183
|
-
return { skill: null, diagnostics };
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
function validateName(name, parentDirName) {
|
|
187
|
-
const errors = [];
|
|
188
|
-
if (name !== parentDirName)
|
|
189
|
-
errors.push(`name "${name}" does not match parent directory "${parentDirName}"`);
|
|
190
|
-
if (name.length > MAX_NAME_LENGTH)
|
|
191
|
-
errors.push(`name exceeds ${MAX_NAME_LENGTH} characters (${name.length})`);
|
|
192
|
-
if (!/^[a-z0-9-]+$/.test(name)) {
|
|
193
|
-
errors.push('name contains invalid characters (must be lowercase a-z, 0-9, hyphens only)');
|
|
194
|
-
}
|
|
195
|
-
if (name.startsWith('-') || name.endsWith('-'))
|
|
196
|
-
errors.push('name must not start or end with a hyphen');
|
|
197
|
-
if (name.includes('--'))
|
|
198
|
-
errors.push('name must not contain consecutive hyphens');
|
|
199
|
-
return errors;
|
|
200
|
-
}
|
|
201
|
-
function validateDescription(description) {
|
|
202
|
-
const errors = [];
|
|
203
|
-
if (!description || description.trim() === '') {
|
|
204
|
-
errors.push('description is required');
|
|
205
|
-
}
|
|
206
|
-
else if (description.length > MAX_DESCRIPTION_LENGTH) {
|
|
207
|
-
errors.push(`description exceeds ${MAX_DESCRIPTION_LENGTH} characters (${description.length})`);
|
|
208
|
-
}
|
|
209
|
-
return errors;
|
|
210
|
-
}
|
|
211
|
-
function parseFrontmatter(content) {
|
|
212
|
-
const normalized = content.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
|
|
213
|
-
if (!normalized.startsWith('---'))
|
|
214
|
-
return { frontmatter: {}, body: normalized };
|
|
215
|
-
const endIndex = normalized.indexOf('\n---', 3);
|
|
216
|
-
if (endIndex === -1)
|
|
217
|
-
return { frontmatter: {}, body: normalized };
|
|
218
|
-
const yamlString = normalized.slice(4, endIndex);
|
|
219
|
-
const body = normalized.slice(endIndex + 4).trim();
|
|
220
|
-
return { frontmatter: (parse(yamlString) ?? {}), body };
|
|
221
|
-
}
|
|
222
|
-
async function safeFileInfo(env, path) {
|
|
223
|
-
try {
|
|
224
|
-
return await env.fileInfo(path);
|
|
225
|
-
}
|
|
226
|
-
catch {
|
|
227
|
-
return undefined;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
async function resolveKind(env, info) {
|
|
231
|
-
if (info.kind === 'file' || info.kind === 'directory')
|
|
232
|
-
return info.kind;
|
|
233
|
-
try {
|
|
234
|
-
const realPath = await env.realPath(info.path);
|
|
235
|
-
const target = await env.fileInfo(realPath);
|
|
236
|
-
return target.kind === 'file' || target.kind === 'directory'
|
|
237
|
-
? target.kind
|
|
238
|
-
: undefined;
|
|
239
|
-
}
|
|
240
|
-
catch {
|
|
241
|
-
return undefined;
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
function joinEnvPath(base, child) {
|
|
245
|
-
return `${base.replace(/\/+$/, '')}/${child.replace(/^\/+/, '')}`;
|
|
246
|
-
}
|
|
247
|
-
function dirnameEnvPath(path) {
|
|
248
|
-
const normalized = path.replace(/\/+$/, '');
|
|
249
|
-
const slashIndex = normalized.lastIndexOf('/');
|
|
250
|
-
return slashIndex <= 0 ? '/' : normalized.slice(0, slashIndex);
|
|
251
|
-
}
|
|
252
|
-
function basenameEnvPath(path) {
|
|
253
|
-
const normalized = path.replace(/\/+$/, '');
|
|
254
|
-
const slashIndex = normalized.lastIndexOf('/');
|
|
255
|
-
return slashIndex === -1 ? normalized : normalized.slice(slashIndex + 1);
|
|
256
|
-
}
|
|
257
|
-
function relativeEnvPath(root, path) {
|
|
258
|
-
const normalizedRoot = root.replace(/\/+$/, '');
|
|
259
|
-
const normalizedPath = path.replace(/\/+$/, '');
|
|
260
|
-
if (normalizedPath === normalizedRoot)
|
|
261
|
-
return '';
|
|
262
|
-
return normalizedPath.startsWith(`${normalizedRoot}/`)
|
|
263
|
-
? normalizedPath.slice(normalizedRoot.length + 1)
|
|
264
|
-
: normalizedPath.replace(/^\/+/, '');
|
|
265
|
-
}
|
|
266
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tpbGxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9hZ2VudC1jb3JlL2hhcm5lc3Mvc2tpbGxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSTdCLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUMzQixNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQztBQUNwQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQXFCakUsMkZBQTJGO0FBQzNGLE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsS0FBWSxFQUNaLHNCQUErQjtJQUUvQixNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsS0FBSyxDQUFDLElBQUksZUFBZSxLQUFLLENBQUMsUUFBUSxrQ0FBa0MsY0FBYyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLENBQUMsT0FBTyxZQUFZLENBQUM7SUFDNUssT0FBTyxzQkFBc0I7UUFDM0IsQ0FBQyxDQUFDLEdBQUcsVUFBVSxPQUFPLHNCQUFzQixFQUFFO1FBQzlDLENBQUMsQ0FBQyxVQUFVLENBQUM7QUFDakIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxVQUFVLENBQzlCLEdBQWlCLEVBQ2pCLElBQXVCO0lBRXZCLE1BQU0sTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUMzQixNQUFNLFdBQVcsR0FBc0IsRUFBRSxDQUFDO0lBQzFDLEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxNQUFNLFdBQVcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUMsS0FBSyxXQUFXO1lBQ2pFLFNBQVM7UUFDWCxNQUFNLE1BQU0sR0FBRyxNQUFNLHlCQUF5QixDQUM1QyxHQUFHLEVBQ0gsUUFBUSxDQUFDLElBQUksRUFDYixJQUFJLEVBQ0osTUFBTSxFQUFFLEVBQ1IsUUFBUSxDQUFDLElBQUksQ0FDZCxDQUFDO1FBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDO0FBQ2pDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLEdBQWlCLEVBQ2pCLE1BQWdELEVBQ2hELFFBQW9EO0lBS3BELE1BQU0sTUFBTSxHQUE4QyxFQUFFLENBQUM7SUFDN0QsTUFBTSxXQUFXLEdBQWlELEVBQUUsQ0FBQztJQUNyRSxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakQsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEMsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDVixLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUUsS0FBZ0I7Z0JBQ25FLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTthQUNyQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsS0FBSyxNQUFNLFVBQVUsSUFBSSxNQUFNLENBQUMsV0FBVztZQUN6QyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFDRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDO0FBQ2pDLENBQUM7QUFFRCxLQUFLLFVBQVUseUJBQXlCLENBQ3RDLEdBQWlCLEVBQ2pCLEdBQVcsRUFDWCxnQkFBeUIsRUFDekIsYUFBNEIsRUFDNUIsT0FBZTtJQUVmLE1BQU0sTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUMzQixNQUFNLFdBQVcsR0FBc0IsRUFBRSxDQUFDO0lBRTFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDN0QsTUFBTSxPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLFdBQVcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxXQUFXO1FBQy9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFFakMsTUFBTSxjQUFjLENBQUMsR0FBRyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFdkQsSUFBSSxPQUFxRCxDQUFDO0lBQzFELElBQUksQ0FBQztRQUNILE9BQU8sR0FBRyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFVBQVU7WUFBRSxTQUFTO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDNUIsTUFBTSxJQUFJLEdBQUcsTUFBTSxXQUFXLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNDLElBQUksSUFBSSxLQUFLLE1BQU07WUFBRSxTQUFTO1FBQzlCLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbkQsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUFFLFNBQVM7UUFFN0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdEQsSUFBSSxNQUFNLENBQUMsS0FBSztZQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN6RSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssY0FBYztZQUFFLFNBQVM7UUFDMUUsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUM1QixNQUFNLElBQUksR0FBRyxNQUFNLFdBQVcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLElBQUk7WUFBRSxTQUFTO1FBRXBCLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ2xFLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFBRSxTQUFTO1FBRWhELElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sTUFBTSxHQUFHLE1BQU0seUJBQXlCLENBQzVDLEdBQUcsRUFDSCxRQUFRLEVBQ1IsS0FBSyxFQUNMLGFBQWEsRUFDYixPQUFPLENBQ1IsQ0FBQztZQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUIsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN4QyxTQUFTO1FBQ1gsQ0FBQztRQUVELElBQUksSUFBSSxLQUFLLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQ3JFLFNBQVM7UUFDWCxNQUFNLE1BQU0sR0FBRyxNQUFNLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN0RCxJQUFJLE1BQU0sQ0FBQyxLQUFLO1lBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUNqQyxDQUFDO0FBRUQsS0FBSyxVQUFVLGNBQWMsQ0FDM0IsR0FBaUIsRUFDakIsRUFBaUIsRUFDakIsR0FBVyxFQUNYLE9BQWU7SUFFZixNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRXBELEtBQUssTUFBTSxRQUFRLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUN6QyxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sSUFBSSxHQUFHLE1BQU0sWUFBWSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNqRCxJQUFJLElBQUksRUFBRSxJQUFJLEtBQUssTUFBTTtZQUFFLFNBQVM7UUFDcEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsTUFBTSxHQUFHLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ25ELE1BQU0sUUFBUSxHQUFHLE9BQU87aUJBQ3JCLEtBQUssQ0FBQyxPQUFPLENBQUM7aUJBQ2QsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7aUJBQ2hELE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBa0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ25ELElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDO2dCQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUFDLE1BQU0sQ0FBQyxDQUFBLENBQUM7SUFDWixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsSUFBWSxFQUFFLE1BQWM7SUFDdkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzVCLElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDMUIsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV2RSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDbkIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzVCLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDZixPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDO1NBQU0sSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDMUQsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUM3QyxDQUFDO0FBRUQsS0FBSyxVQUFVLGlCQUFpQixDQUM5QixHQUFpQixFQUNqQixRQUFnQjtJQUVoQixNQUFNLFdBQVcsR0FBc0IsRUFBRSxDQUFDO0lBQzFDLElBQUksQ0FBQztRQUNILE1BQU0sVUFBVSxHQUFHLE1BQU0sR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRCxNQUFNLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxHQUN6QixnQkFBZ0IsQ0FBbUIsVUFBVSxDQUFDLENBQUM7UUFDakQsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVoRCxLQUFLLE1BQU0sS0FBSyxJQUFJLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ2pFLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLElBQUksYUFBYSxDQUFDO1FBQy9DLEtBQUssTUFBTSxLQUFLLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3RELFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDdEUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDdEMsQ0FBQztRQUVELE9BQU87WUFDTCxLQUFLLEVBQUU7Z0JBQ0wsSUFBSTtnQkFDSixXQUFXLEVBQUUsV0FBVyxDQUFDLFdBQVc7Z0JBQ3BDLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFFBQVE7Z0JBQ1Isc0JBQXNCLEVBQ3BCLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLElBQUk7YUFDbkQ7WUFDRCxXQUFXO1NBQ1osQ0FBQztJQUNKLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxPQUFPLEdBQ1gsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUM7UUFDeEUsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3RDLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsSUFBWSxFQUFFLGFBQXFCO0lBQ3ZELE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUM1QixJQUFJLElBQUksS0FBSyxhQUFhO1FBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQ1QsU0FBUyxJQUFJLHNDQUFzQyxhQUFhLEdBQUcsQ0FDcEUsQ0FBQztJQUNKLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxlQUFlO1FBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLGVBQWUsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzdFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDL0IsTUFBTSxDQUFDLElBQUksQ0FDVCw2RUFBNkUsQ0FDOUUsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDNUMsTUFBTSxDQUFDLElBQUksQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO0lBQzFELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO0lBQzNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLFdBQStCO0lBQzFELE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUM1QixJQUFJLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUM5QyxNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDekMsQ0FBQztTQUFNLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxzQkFBc0IsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sQ0FBQyxJQUFJLENBQ1QsdUJBQXVCLHNCQUFzQixnQkFBZ0IsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUNuRixDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUN2QixPQUFlO0lBRWYsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2RSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ3BELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hELElBQUksUUFBUSxLQUFLLENBQUMsQ0FBQztRQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUN2RSxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNqRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQy9ELENBQUM7QUFFRCxLQUFLLFVBQVUsWUFBWSxDQUN6QixHQUFpQixFQUNqQixJQUFZO0lBRVosSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDO0FBRUQsS0FBSyxVQUFVLFdBQVcsQ0FDeEIsR0FBaUIsRUFDakIsSUFBbUQ7SUFFbkQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVc7UUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDeEUsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxNQUFNLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFdBQVc7WUFDMUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJO1lBQ2IsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoQixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUFZLEVBQUUsS0FBYTtJQUM5QyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwRSxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsSUFBWTtJQUNsQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1QyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLE9BQU8sVUFBVSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsSUFBWTtJQUNuQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1QyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLE9BQU8sVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxJQUFZLEVBQUUsSUFBWTtJQUNqRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNoRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNoRCxJQUFJLGNBQWMsS0FBSyxjQUFjO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDakQsT0FBTyxjQUFjLENBQUMsVUFBVSxDQUFDLEdBQUcsY0FBYyxHQUFHLENBQUM7UUFDcEQsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLENBQUMifQ==
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
export function formatSkillsForSystemPrompt(skills) {
|
|
2
|
-
const visibleSkills = skills.filter((skill) => !skill.disableModelInvocation);
|
|
3
|
-
if (visibleSkills.length === 0)
|
|
4
|
-
return '';
|
|
5
|
-
const lines = [
|
|
6
|
-
'The following skills provide specialized instructions for specific tasks.',
|
|
7
|
-
'Read the full skill file when the task matches its description.',
|
|
8
|
-
'When a skill file references a relative path, resolve it against the skill directory (parent of SKILL.md / dirname of the path) and use that absolute path in tool commands.',
|
|
9
|
-
'',
|
|
10
|
-
'<available_skills>',
|
|
11
|
-
];
|
|
12
|
-
for (const skill of visibleSkills) {
|
|
13
|
-
lines.push(' <skill>');
|
|
14
|
-
lines.push(` <name>${escapeXml(skill.name)}</name>`);
|
|
15
|
-
lines.push(` <description>${escapeXml(skill.description)}</description>`);
|
|
16
|
-
lines.push(` <location>${escapeXml(skill.filePath)}</location>`);
|
|
17
|
-
lines.push(' </skill>');
|
|
18
|
-
}
|
|
19
|
-
lines.push('</available_skills>');
|
|
20
|
-
return lines.join('\n');
|
|
21
|
-
}
|
|
22
|
-
function escapeXml(value) {
|
|
23
|
-
return value
|
|
24
|
-
.replace(/&/g, '&')
|
|
25
|
-
.replace(/</g, '<')
|
|
26
|
-
.replace(/>/g, '>')
|
|
27
|
-
.replace(/"/g, '"')
|
|
28
|
-
.replace(/'/g, ''');
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLXByb21wdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYWdlbnQtY29yZS9oYXJuZXNzL3N5c3RlbS1wcm9tcHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLDJCQUEyQixDQUFDLE1BQWU7SUFDekQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUM5RSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBRTFDLE1BQU0sS0FBSyxHQUFHO1FBQ1osMkVBQTJFO1FBQzNFLGlFQUFpRTtRQUNqRSw4S0FBOEs7UUFDOUssRUFBRTtRQUNGLG9CQUFvQjtLQUNyQixDQUFDO0lBRUYsS0FBSyxNQUFNLEtBQUssSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNsQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RCxLQUFLLENBQUMsSUFBSSxDQUNSLG9CQUFvQixTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FDakUsQ0FBQztRQUNGLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BFLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUNsQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEtBQWE7SUFDOUIsT0FBTyxLQUFLO1NBQ1QsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7U0FDdEIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7U0FDckIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7U0FDckIsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUM7U0FDdkIsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM3QixDQUFDIn0=
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/** Error thrown by {@link ExecutionEnv} file operations. */
|
|
2
|
-
export class FileError extends Error {
|
|
3
|
-
code;
|
|
4
|
-
path;
|
|
5
|
-
constructor(
|
|
6
|
-
/** Backend-independent error code. */
|
|
7
|
-
code, message,
|
|
8
|
-
/** Absolute addressed path associated with the failure, when available. */
|
|
9
|
-
path, options) {
|
|
10
|
-
super(message, options);
|
|
11
|
-
this.code = code;
|
|
12
|
-
this.path = path;
|
|
13
|
-
this.name = 'FileError';
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2FnZW50LWNvcmUvaGFybmVzcy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvR0EsNERBQTREO0FBQzVELE1BQU0sT0FBTyxTQUFVLFNBQVEsS0FBSztJQUd6QjtJQUdBO0lBTFQ7SUFDRSxzQ0FBc0M7SUFDL0IsSUFBbUIsRUFDMUIsT0FBZTtJQUNmLDJFQUEyRTtJQUNwRSxJQUFhLEVBQ3BCLE9BQXNCO1FBRXRCLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFOakIsU0FBSSxHQUFKLElBQUksQ0FBZTtRQUduQixTQUFJLEdBQUosSUFBSSxDQUFTO1FBSXBCLElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDO0lBQzFCLENBQUM7Q0FDRiJ9
|