@researchcomputer/agents-sdk 0.1.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/README.md +60 -0
- package/dist/agents/messages.d.ts +29 -0
- package/dist/agents/messages.d.ts.map +1 -0
- package/dist/agents/messages.js +56 -0
- package/dist/agents/messages.js.map +1 -0
- package/dist/agents/messages.test.d.ts +2 -0
- package/dist/agents/messages.test.d.ts.map +1 -0
- package/dist/agents/messages.test.js +80 -0
- package/dist/agents/messages.test.js.map +1 -0
- package/dist/agents/subagent.d.ts +16 -0
- package/dist/agents/subagent.d.ts.map +1 -0
- package/dist/agents/subagent.js +46 -0
- package/dist/agents/subagent.js.map +1 -0
- package/dist/agents/swarm.d.ts +22 -0
- package/dist/agents/swarm.d.ts.map +1 -0
- package/dist/agents/swarm.js +140 -0
- package/dist/agents/swarm.js.map +1 -0
- package/dist/agents/tools.d.ts +6 -0
- package/dist/agents/tools.d.ts.map +1 -0
- package/dist/agents/tools.js +71 -0
- package/dist/agents/tools.js.map +1 -0
- package/dist/agents/tools.test.d.ts +2 -0
- package/dist/agents/tools.test.d.ts.map +1 -0
- package/dist/agents/tools.test.js +70 -0
- package/dist/agents/tools.test.js.map +1 -0
- package/dist/bridge/config.d.ts +21 -0
- package/dist/bridge/config.d.ts.map +1 -0
- package/dist/bridge/config.js +35 -0
- package/dist/bridge/config.js.map +1 -0
- package/dist/bridge/config.test.d.ts +2 -0
- package/dist/bridge/config.test.d.ts.map +1 -0
- package/dist/bridge/config.test.js +79 -0
- package/dist/bridge/config.test.js.map +1 -0
- package/dist/bridge/server.d.ts +3 -0
- package/dist/bridge/server.d.ts.map +1 -0
- package/dist/bridge/server.js +316 -0
- package/dist/bridge/server.js.map +1 -0
- package/dist/context/compression.d.ts +27 -0
- package/dist/context/compression.d.ts.map +1 -0
- package/dist/context/compression.js +117 -0
- package/dist/context/compression.js.map +1 -0
- package/dist/context/compression.test.d.ts +2 -0
- package/dist/context/compression.test.d.ts.map +1 -0
- package/dist/context/compression.test.js +170 -0
- package/dist/context/compression.test.js.map +1 -0
- package/dist/context/converter.d.ts +11 -0
- package/dist/context/converter.d.ts.map +1 -0
- package/dist/context/converter.js +40 -0
- package/dist/context/converter.js.map +1 -0
- package/dist/context/converter.test.d.ts +2 -0
- package/dist/context/converter.test.d.ts.map +1 -0
- package/dist/context/converter.test.js +110 -0
- package/dist/context/converter.test.js.map +1 -0
- package/dist/context/run-context.d.ts +9 -0
- package/dist/context/run-context.d.ts.map +1 -0
- package/dist/context/run-context.js +14 -0
- package/dist/context/run-context.js.map +1 -0
- package/dist/context/run-context.test.d.ts +2 -0
- package/dist/context/run-context.test.d.ts.map +1 -0
- package/dist/context/run-context.test.js +34 -0
- package/dist/context/run-context.test.js.map +1 -0
- package/dist/context/system-prompt.d.ts +24 -0
- package/dist/context/system-prompt.d.ts.map +1 -0
- package/dist/context/system-prompt.js +69 -0
- package/dist/context/system-prompt.js.map +1 -0
- package/dist/context/system-prompt.test.d.ts +2 -0
- package/dist/context/system-prompt.test.d.ts.map +1 -0
- package/dist/context/system-prompt.test.js +134 -0
- package/dist/context/system-prompt.test.js.map +1 -0
- package/dist/errors.d.ts +24 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +47 -0
- package/dist/errors.js.map +1 -0
- package/dist/errors.test.d.ts +2 -0
- package/dist/errors.test.d.ts.map +1 -0
- package/dist/errors.test.js +68 -0
- package/dist/errors.test.js.map +1 -0
- package/dist/factory.d.ts +58 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +282 -0
- package/dist/factory.js.map +1 -0
- package/dist/factory.test.d.ts +2 -0
- package/dist/factory.test.d.ts.map +1 -0
- package/dist/factory.test.js +63 -0
- package/dist/factory.test.js.map +1 -0
- package/dist/fork.test.d.ts +2 -0
- package/dist/fork.test.d.ts.map +1 -0
- package/dist/fork.test.js +456 -0
- package/dist/fork.test.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/client.d.ts +3 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +75 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/schema-convert.d.ts +3 -0
- package/dist/mcp/schema-convert.d.ts.map +1 -0
- package/dist/mcp/schema-convert.js +73 -0
- package/dist/mcp/schema-convert.js.map +1 -0
- package/dist/mcp/schema-convert.test.d.ts +2 -0
- package/dist/mcp/schema-convert.test.d.ts.map +1 -0
- package/dist/mcp/schema-convert.test.js +95 -0
- package/dist/mcp/schema-convert.test.js.map +1 -0
- package/dist/mcp/tools.d.ts +14 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +23 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/tools.test.d.ts +2 -0
- package/dist/mcp/tools.test.d.ts.map +1 -0
- package/dist/mcp/tools.test.js +45 -0
- package/dist/mcp/tools.test.js.map +1 -0
- package/dist/memory/memory.d.ts +3 -0
- package/dist/memory/memory.d.ts.map +1 -0
- package/dist/memory/memory.js +130 -0
- package/dist/memory/memory.js.map +1 -0
- package/dist/memory/memory.test.d.ts +2 -0
- package/dist/memory/memory.test.d.ts.map +1 -0
- package/dist/memory/memory.test.js +94 -0
- package/dist/memory/memory.test.js.map +1 -0
- package/dist/middleware/hooks.d.ts +18 -0
- package/dist/middleware/hooks.d.ts.map +1 -0
- package/dist/middleware/hooks.js +71 -0
- package/dist/middleware/hooks.js.map +1 -0
- package/dist/middleware/hooks.test.d.ts +2 -0
- package/dist/middleware/hooks.test.d.ts.map +1 -0
- package/dist/middleware/hooks.test.js +172 -0
- package/dist/middleware/hooks.test.js.map +1 -0
- package/dist/middleware/index.d.ts +7 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +5 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/permission-middleware.d.ts +11 -0
- package/dist/middleware/permission-middleware.d.ts.map +1 -0
- package/dist/middleware/permission-middleware.js +56 -0
- package/dist/middleware/permission-middleware.js.map +1 -0
- package/dist/middleware/permission-middleware.test.d.ts +2 -0
- package/dist/middleware/permission-middleware.test.d.ts.map +1 -0
- package/dist/middleware/permission-middleware.test.js +170 -0
- package/dist/middleware/permission-middleware.test.js.map +1 -0
- package/dist/middleware/permissions.d.ts +14 -0
- package/dist/middleware/permissions.d.ts.map +1 -0
- package/dist/middleware/permissions.js +118 -0
- package/dist/middleware/permissions.js.map +1 -0
- package/dist/middleware/permissions.test.d.ts +2 -0
- package/dist/middleware/permissions.test.d.ts.map +1 -0
- package/dist/middleware/permissions.test.js +187 -0
- package/dist/middleware/permissions.test.js.map +1 -0
- package/dist/middleware/pipeline.d.ts +13 -0
- package/dist/middleware/pipeline.d.ts.map +1 -0
- package/dist/middleware/pipeline.js +28 -0
- package/dist/middleware/pipeline.js.map +1 -0
- package/dist/middleware/pipeline.test.d.ts +2 -0
- package/dist/middleware/pipeline.test.d.ts.map +1 -0
- package/dist/middleware/pipeline.test.js +189 -0
- package/dist/middleware/pipeline.test.js.map +1 -0
- package/dist/observability/cost-tracker.d.ts +3 -0
- package/dist/observability/cost-tracker.d.ts.map +1 -0
- package/dist/observability/cost-tracker.js +26 -0
- package/dist/observability/cost-tracker.js.map +1 -0
- package/dist/observability/cost-tracker.test.d.ts +2 -0
- package/dist/observability/cost-tracker.test.d.ts.map +1 -0
- package/dist/observability/cost-tracker.test.js +49 -0
- package/dist/observability/cost-tracker.test.js.map +1 -0
- package/dist/observability/trace.d.ts +2 -0
- package/dist/observability/trace.d.ts.map +1 -0
- package/dist/observability/trace.js +5 -0
- package/dist/observability/trace.js.map +1 -0
- package/dist/session/session.d.ts +3 -0
- package/dist/session/session.d.ts.map +1 -0
- package/dist/session/session.js +62 -0
- package/dist/session/session.js.map +1 -0
- package/dist/session/session.test.d.ts +2 -0
- package/dist/session/session.test.d.ts.map +1 -0
- package/dist/session/session.test.js +84 -0
- package/dist/session/session.test.js.map +1 -0
- package/dist/skills.d.ts +14 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +31 -0
- package/dist/skills.js.map +1 -0
- package/dist/skills.test.d.ts +2 -0
- package/dist/skills.test.d.ts.map +1 -0
- package/dist/skills.test.js +61 -0
- package/dist/skills.test.js.map +1 -0
- package/dist/tools/ask-user.d.ts +10 -0
- package/dist/tools/ask-user.d.ts.map +1 -0
- package/dist/tools/ask-user.js +27 -0
- package/dist/tools/ask-user.js.map +1 -0
- package/dist/tools/bash.d.ts +11 -0
- package/dist/tools/bash.d.ts.map +1 -0
- package/dist/tools/bash.js +54 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/bash.test.d.ts +2 -0
- package/dist/tools/bash.test.d.ts.map +1 -0
- package/dist/tools/bash.test.js +63 -0
- package/dist/tools/bash.test.js.map +1 -0
- package/dist/tools/edit.d.ts +10 -0
- package/dist/tools/edit.d.ts.map +1 -0
- package/dist/tools/edit.js +65 -0
- package/dist/tools/edit.js.map +1 -0
- package/dist/tools/edit.test.d.ts +2 -0
- package/dist/tools/edit.test.d.ts.map +1 -0
- package/dist/tools/edit.test.js +60 -0
- package/dist/tools/edit.test.js.map +1 -0
- package/dist/tools/glob.d.ts +8 -0
- package/dist/tools/glob.d.ts.map +1 -0
- package/dist/tools/glob.js +43 -0
- package/dist/tools/glob.js.map +1 -0
- package/dist/tools/glob.test.d.ts +2 -0
- package/dist/tools/glob.test.d.ts.map +1 -0
- package/dist/tools/glob.test.js +54 -0
- package/dist/tools/glob.test.js.map +1 -0
- package/dist/tools/grep.d.ts +9 -0
- package/dist/tools/grep.d.ts.map +1 -0
- package/dist/tools/grep.js +74 -0
- package/dist/tools/grep.js.map +1 -0
- package/dist/tools/grep.test.d.ts +2 -0
- package/dist/tools/grep.test.d.ts.map +1 -0
- package/dist/tools/grep.test.js +48 -0
- package/dist/tools/grep.test.js.map +1 -0
- package/dist/tools/index.d.ts +25 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +40 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/index.test.d.ts +2 -0
- package/dist/tools/index.test.d.ts.map +1 -0
- package/dist/tools/index.test.js +102 -0
- package/dist/tools/index.test.js.map +1 -0
- package/dist/tools/notebook-edit.d.ts +9 -0
- package/dist/tools/notebook-edit.d.ts.map +1 -0
- package/dist/tools/notebook-edit.js +55 -0
- package/dist/tools/notebook-edit.js.map +1 -0
- package/dist/tools/read.d.ts +9 -0
- package/dist/tools/read.d.ts.map +1 -0
- package/dist/tools/read.js +48 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/read.test.d.ts +2 -0
- package/dist/tools/read.test.d.ts.map +1 -0
- package/dist/tools/read.test.js +68 -0
- package/dist/tools/read.test.js.map +1 -0
- package/dist/tools/util.d.ts +19 -0
- package/dist/tools/util.d.ts.map +1 -0
- package/dist/tools/util.js +44 -0
- package/dist/tools/util.js.map +1 -0
- package/dist/tools/util.test.d.ts +2 -0
- package/dist/tools/util.test.d.ts.map +1 -0
- package/dist/tools/util.test.js +75 -0
- package/dist/tools/util.test.js.map +1 -0
- package/dist/tools/web-fetch.d.ts +7 -0
- package/dist/tools/web-fetch.d.ts.map +1 -0
- package/dist/tools/web-fetch.js +35 -0
- package/dist/tools/web-fetch.js.map +1 -0
- package/dist/tools/web-search.d.ts +7 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +20 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/tools/write.d.ts +8 -0
- package/dist/tools/write.d.ts.map +1 -0
- package/dist/tools/write.js +33 -0
- package/dist/tools/write.js.map +1 -0
- package/dist/tools/write.test.d.ts +2 -0
- package/dist/tools/write.test.d.ts.map +1 -0
- package/dist/tools/write.test.js +49 -0
- package/dist/tools/write.test.js.map +1 -0
- package/dist/types.d.ts +257 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/types.test.d.ts +2 -0
- package/dist/types.test.d.ts.map +1 -0
- package/dist/types.test.js +69 -0
- package/dist/types.test.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
const DEFAULT_BASE_PROMPT = 'You are a coding agent that helps users with software development tasks.';
|
|
2
|
+
/**
|
|
3
|
+
* Builds a system prompt by assembling sections in order:
|
|
4
|
+
* 1. Base prompt
|
|
5
|
+
* 2. Skill instructions
|
|
6
|
+
* 3. Tool descriptions
|
|
7
|
+
* 4. Memory context
|
|
8
|
+
* 5. Memory instructions
|
|
9
|
+
* 6. Permission context
|
|
10
|
+
* 7. Swarm context
|
|
11
|
+
*/
|
|
12
|
+
export function buildSystemPrompt(config) {
|
|
13
|
+
const sections = [];
|
|
14
|
+
// 1. Base prompt
|
|
15
|
+
sections.push(config.basePrompt ?? DEFAULT_BASE_PROMPT);
|
|
16
|
+
// 2. Skill instructions
|
|
17
|
+
if (config.skills && config.skills.length > 0) {
|
|
18
|
+
const skillBlocks = config.skills
|
|
19
|
+
.map((skill) => {
|
|
20
|
+
const promptSections = (skill.promptSections ?? [])
|
|
21
|
+
.map((section) => section.trim())
|
|
22
|
+
.filter((section) => section.length > 0);
|
|
23
|
+
if (!skill.description && promptSections.length === 0) {
|
|
24
|
+
return '';
|
|
25
|
+
}
|
|
26
|
+
const parts = [`## ${skill.id}`];
|
|
27
|
+
if (skill.description?.trim()) {
|
|
28
|
+
parts.push(skill.description.trim());
|
|
29
|
+
}
|
|
30
|
+
parts.push(...promptSections);
|
|
31
|
+
return parts.join('\n\n');
|
|
32
|
+
})
|
|
33
|
+
.filter((block) => block.length > 0);
|
|
34
|
+
if (skillBlocks.length > 0) {
|
|
35
|
+
sections.push(`# Active Skills\n\n${skillBlocks.join('\n\n')}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// 3. Tool descriptions
|
|
39
|
+
if (config.tools && config.tools.length > 0) {
|
|
40
|
+
const toolLines = config.tools.map(t => `- **${t.name}**: ${t.description}`);
|
|
41
|
+
sections.push(`# Available Tools\n\n${toolLines.join('\n')}`);
|
|
42
|
+
}
|
|
43
|
+
// 4. Memory context
|
|
44
|
+
if (config.memories && config.memories.length > 0) {
|
|
45
|
+
const memLines = config.memories.map(m => {
|
|
46
|
+
const date = new Date(m.updatedAt).toISOString().split('T')[0];
|
|
47
|
+
return `- [${m.source}, ${date}] ${m.memory.content}`;
|
|
48
|
+
});
|
|
49
|
+
sections.push(`# Relevant Memories\n\n${memLines.join('\n')}`);
|
|
50
|
+
}
|
|
51
|
+
// 5. Memory instructions (always)
|
|
52
|
+
sections.push('When the user provides feedback or corrections, remember them for future interactions. ' +
|
|
53
|
+
'Use any available memory context to inform your responses.');
|
|
54
|
+
// 6. Permission context
|
|
55
|
+
if (config.permissionMode) {
|
|
56
|
+
sections.push(`# Permission Mode\n\nCurrent permission mode: ${config.permissionMode}. ` +
|
|
57
|
+
'Respect tool permission rules when executing actions.');
|
|
58
|
+
}
|
|
59
|
+
// 7. Swarm context
|
|
60
|
+
if (config.swarmContext) {
|
|
61
|
+
let swarmSection = `# Team Context\n\nYou are part of a team. Your teammates: ${config.swarmContext.teammates.join(', ')}.`;
|
|
62
|
+
if (config.swarmContext.instructions) {
|
|
63
|
+
swarmSection += `\n\n${config.swarmContext.instructions}`;
|
|
64
|
+
}
|
|
65
|
+
sections.push(swarmSection);
|
|
66
|
+
}
|
|
67
|
+
return sections.join('\n\n');
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=system-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/context/system-prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-prompt.test.d.ts","sourceRoot":"","sources":["../../src/context/system-prompt.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { buildSystemPrompt } from './system-prompt.js';
|
|
3
|
+
import { Type } from '@sinclair/typebox';
|
|
4
|
+
describe('buildSystemPrompt', () => {
|
|
5
|
+
it('uses default base prompt when none provided', () => {
|
|
6
|
+
const result = buildSystemPrompt({});
|
|
7
|
+
expect(result).toContain('You are a coding agent');
|
|
8
|
+
});
|
|
9
|
+
it('uses provided base prompt', () => {
|
|
10
|
+
const result = buildSystemPrompt({ basePrompt: 'You are a helpful bot.' });
|
|
11
|
+
expect(result).toContain('You are a helpful bot.');
|
|
12
|
+
expect(result).not.toContain('You are a coding agent');
|
|
13
|
+
});
|
|
14
|
+
it('includes tool descriptions when tools provided', () => {
|
|
15
|
+
const tool = {
|
|
16
|
+
name: 'Read',
|
|
17
|
+
label: 'Read files',
|
|
18
|
+
description: 'Reads a file from disk',
|
|
19
|
+
capabilities: ['fs:read'],
|
|
20
|
+
parameters: Type.Object({}),
|
|
21
|
+
execute: async () => ({ content: [], details: null }),
|
|
22
|
+
};
|
|
23
|
+
const result = buildSystemPrompt({ tools: [tool] });
|
|
24
|
+
expect(result).toContain('# Available Tools');
|
|
25
|
+
expect(result).toContain('Read');
|
|
26
|
+
expect(result).toContain('Reads a file from disk');
|
|
27
|
+
});
|
|
28
|
+
it('excludes tool section when no tools provided', () => {
|
|
29
|
+
const result = buildSystemPrompt({});
|
|
30
|
+
expect(result).not.toContain('# Available Tools');
|
|
31
|
+
});
|
|
32
|
+
it('includes active skills when prompt sections are provided', () => {
|
|
33
|
+
const skills = [
|
|
34
|
+
{
|
|
35
|
+
id: 'typescript',
|
|
36
|
+
description: 'TypeScript house style',
|
|
37
|
+
promptSections: ['Prefer explicit return types on exported functions.'],
|
|
38
|
+
},
|
|
39
|
+
];
|
|
40
|
+
const result = buildSystemPrompt({ skills });
|
|
41
|
+
expect(result).toContain('# Active Skills');
|
|
42
|
+
expect(result).toContain('typescript');
|
|
43
|
+
expect(result).toContain('TypeScript house style');
|
|
44
|
+
expect(result).toContain('Prefer explicit return types');
|
|
45
|
+
});
|
|
46
|
+
it('includes memory context when memories provided', () => {
|
|
47
|
+
const memories = [
|
|
48
|
+
{
|
|
49
|
+
memory: { name: 'pref1', description: 'User pref', type: 'user', content: 'Prefers TypeScript' },
|
|
50
|
+
relevanceScore: 0.9,
|
|
51
|
+
source: 'user-prefs.md',
|
|
52
|
+
updatedAt: 1700000000000,
|
|
53
|
+
},
|
|
54
|
+
];
|
|
55
|
+
const result = buildSystemPrompt({ memories });
|
|
56
|
+
expect(result).toContain('# Relevant Memories');
|
|
57
|
+
expect(result).toContain('Prefers TypeScript');
|
|
58
|
+
expect(result).toContain('user-prefs.md');
|
|
59
|
+
});
|
|
60
|
+
it('excludes memory section when no memories provided', () => {
|
|
61
|
+
const result = buildSystemPrompt({});
|
|
62
|
+
expect(result).not.toContain('# Relevant Memories');
|
|
63
|
+
});
|
|
64
|
+
it('always includes memory instructions', () => {
|
|
65
|
+
const result = buildSystemPrompt({});
|
|
66
|
+
expect(result).toContain('memory');
|
|
67
|
+
});
|
|
68
|
+
it('includes permission context when mode provided', () => {
|
|
69
|
+
const result = buildSystemPrompt({ permissionMode: 'allowAll' });
|
|
70
|
+
expect(result).toContain('allowAll');
|
|
71
|
+
});
|
|
72
|
+
it('excludes permission section when no mode provided', () => {
|
|
73
|
+
const result = buildSystemPrompt({});
|
|
74
|
+
expect(result).not.toContain('Permission');
|
|
75
|
+
});
|
|
76
|
+
it('includes swarm context when provided', () => {
|
|
77
|
+
const result = buildSystemPrompt({
|
|
78
|
+
swarmContext: { teammates: ['worker-1', 'worker-2'], instructions: 'Coordinate tasks' },
|
|
79
|
+
});
|
|
80
|
+
expect(result).toContain('# Team Context');
|
|
81
|
+
expect(result).toContain('worker-1');
|
|
82
|
+
expect(result).toContain('worker-2');
|
|
83
|
+
expect(result).toContain('Coordinate tasks');
|
|
84
|
+
});
|
|
85
|
+
it('includes swarm context without instructions', () => {
|
|
86
|
+
const result = buildSystemPrompt({
|
|
87
|
+
swarmContext: { teammates: ['agent-a'] },
|
|
88
|
+
});
|
|
89
|
+
expect(result).toContain('# Team Context');
|
|
90
|
+
expect(result).toContain('agent-a');
|
|
91
|
+
});
|
|
92
|
+
it('excludes swarm section when no swarm context provided', () => {
|
|
93
|
+
const result = buildSystemPrompt({});
|
|
94
|
+
expect(result).not.toContain('# Team Context');
|
|
95
|
+
});
|
|
96
|
+
it('assembles all sections in correct order', () => {
|
|
97
|
+
const tool = {
|
|
98
|
+
name: 'Bash',
|
|
99
|
+
label: 'Bash',
|
|
100
|
+
description: 'Run shell commands',
|
|
101
|
+
capabilities: ['process:spawn'],
|
|
102
|
+
parameters: Type.Object({}),
|
|
103
|
+
execute: async () => ({ content: [], details: null }),
|
|
104
|
+
};
|
|
105
|
+
const memories = [
|
|
106
|
+
{
|
|
107
|
+
memory: { name: 'm1', description: 'd', type: 'project', content: 'Project uses ESM' },
|
|
108
|
+
relevanceScore: 0.8,
|
|
109
|
+
source: 'project.md',
|
|
110
|
+
updatedAt: 1700000000000,
|
|
111
|
+
},
|
|
112
|
+
];
|
|
113
|
+
const result = buildSystemPrompt({
|
|
114
|
+
basePrompt: 'Base prompt.',
|
|
115
|
+
skills: [{ id: 'ts', promptSections: ['Prefer TypeScript.'] }],
|
|
116
|
+
tools: [tool],
|
|
117
|
+
memories,
|
|
118
|
+
permissionMode: 'rulesOnly',
|
|
119
|
+
swarmContext: { teammates: ['helper'] },
|
|
120
|
+
});
|
|
121
|
+
const skillsIdx = result.indexOf('# Active Skills');
|
|
122
|
+
const toolsIdx = result.indexOf('# Available Tools');
|
|
123
|
+
const memIdx = result.indexOf('# Relevant Memories');
|
|
124
|
+
const permIdx = result.indexOf('Permission');
|
|
125
|
+
const swarmIdx = result.indexOf('# Team Context');
|
|
126
|
+
expect(skillsIdx).toBeGreaterThan(0);
|
|
127
|
+
expect(toolsIdx).toBeGreaterThan(skillsIdx);
|
|
128
|
+
expect(toolsIdx).toBeGreaterThan(0);
|
|
129
|
+
expect(memIdx).toBeGreaterThan(toolsIdx);
|
|
130
|
+
expect(permIdx).toBeGreaterThan(memIdx);
|
|
131
|
+
expect(swarmIdx).toBeGreaterThan(permIdx);
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
//# sourceMappingURL=system-prompt.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-prompt.test.js","sourceRoot":"","sources":["../../src/context/system-prompt.test.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare class SdkError extends Error {
|
|
2
|
+
readonly code: string;
|
|
3
|
+
readonly retryable: boolean;
|
|
4
|
+
constructor(message: string, code: string, retryable: boolean);
|
|
5
|
+
}
|
|
6
|
+
export declare class ToolExecutionError extends SdkError {
|
|
7
|
+
constructor(message: string);
|
|
8
|
+
}
|
|
9
|
+
export declare class PermissionDeniedError extends SdkError {
|
|
10
|
+
constructor(message: string);
|
|
11
|
+
}
|
|
12
|
+
export declare class BudgetExhaustedError extends SdkError {
|
|
13
|
+
constructor(message: string);
|
|
14
|
+
}
|
|
15
|
+
export declare class McpConnectionError extends SdkError {
|
|
16
|
+
constructor(message: string);
|
|
17
|
+
}
|
|
18
|
+
export declare class SessionLoadError extends SdkError {
|
|
19
|
+
constructor(message: string);
|
|
20
|
+
}
|
|
21
|
+
export declare class CompressionError extends SdkError {
|
|
22
|
+
constructor(message: string);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAS,SAAQ,KAAK;aACY,IAAI,EAAE,MAAM;aAAkB,SAAS,EAAE,OAAO;gBAAjF,OAAO,EAAE,MAAM,EAAkB,IAAI,EAAE,MAAM,EAAkB,SAAS,EAAE,OAAO;CAI9F;AAED,qBAAa,kBAAmB,SAAQ,QAAQ;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,qBAAsB,SAAQ,QAAQ;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,oBAAqB,SAAQ,QAAQ;gBACpC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,kBAAmB,SAAQ,QAAQ;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,gBAAiB,SAAQ,QAAQ;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,gBAAiB,SAAQ,QAAQ;gBAChC,OAAO,EAAE,MAAM;CAI5B"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export class SdkError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
retryable;
|
|
4
|
+
constructor(message, code, retryable) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.code = code;
|
|
7
|
+
this.retryable = retryable;
|
|
8
|
+
this.name = 'SdkError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class ToolExecutionError extends SdkError {
|
|
12
|
+
constructor(message) {
|
|
13
|
+
super(message, 'TOOL_EXECUTION_ERROR', true);
|
|
14
|
+
this.name = 'ToolExecutionError';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export class PermissionDeniedError extends SdkError {
|
|
18
|
+
constructor(message) {
|
|
19
|
+
super(message, 'PERMISSION_DENIED', false);
|
|
20
|
+
this.name = 'PermissionDeniedError';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export class BudgetExhaustedError extends SdkError {
|
|
24
|
+
constructor(message) {
|
|
25
|
+
super(message, 'BUDGET_EXHAUSTED', false);
|
|
26
|
+
this.name = 'BudgetExhaustedError';
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export class McpConnectionError extends SdkError {
|
|
30
|
+
constructor(message) {
|
|
31
|
+
super(message, 'MCP_CONNECTION_ERROR', true);
|
|
32
|
+
this.name = 'McpConnectionError';
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export class SessionLoadError extends SdkError {
|
|
36
|
+
constructor(message) {
|
|
37
|
+
super(message, 'SESSION_LOAD_ERROR', false);
|
|
38
|
+
this.name = 'SessionLoadError';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export class CompressionError extends SdkError {
|
|
42
|
+
constructor(message) {
|
|
43
|
+
super(message, 'COMPRESSION_ERROR', true);
|
|
44
|
+
this.name = 'CompressionError';
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAS,SAAQ,KAAK;IACY;IAA8B;IAA3E,YAAY,OAAe,EAAkB,IAAY,EAAkB,SAAkB;QAC3F,KAAK,CAAC,OAAO,CAAC,CAAC;QAD4B,SAAI,GAAJ,IAAI,CAAQ;QAAkB,cAAS,GAAT,SAAS,CAAS;QAE3F,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,QAAQ;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,sBAAsB,EAAE,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,QAAQ;IACjD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,mBAAmB,EAAE,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,QAAQ;IAChD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,QAAQ;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,sBAAsB,EAAE,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,QAAQ;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,oBAAoB,EAAE,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,QAAQ;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,mBAAmB,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.test.d.ts","sourceRoot":"","sources":["../src/errors.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { SdkError, ToolExecutionError, PermissionDeniedError, BudgetExhaustedError, McpConnectionError, SessionLoadError, CompressionError, } from './errors.js';
|
|
3
|
+
describe('SdkError', () => {
|
|
4
|
+
it('has correct name, code, and retryable', () => {
|
|
5
|
+
const err = new SdkError('test', 'TEST_CODE', true);
|
|
6
|
+
expect(err.name).toBe('SdkError');
|
|
7
|
+
expect(err.message).toBe('test');
|
|
8
|
+
expect(err.code).toBe('TEST_CODE');
|
|
9
|
+
expect(err.retryable).toBe(true);
|
|
10
|
+
expect(err).toBeInstanceOf(Error);
|
|
11
|
+
expect(err).toBeInstanceOf(SdkError);
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
describe('ToolExecutionError', () => {
|
|
15
|
+
it('has correct defaults', () => {
|
|
16
|
+
const err = new ToolExecutionError('tool failed');
|
|
17
|
+
expect(err.name).toBe('ToolExecutionError');
|
|
18
|
+
expect(err.code).toBe('TOOL_EXECUTION_ERROR');
|
|
19
|
+
expect(err.retryable).toBe(true);
|
|
20
|
+
expect(err).toBeInstanceOf(SdkError);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
describe('PermissionDeniedError', () => {
|
|
24
|
+
it('has correct defaults', () => {
|
|
25
|
+
const err = new PermissionDeniedError('denied');
|
|
26
|
+
expect(err.name).toBe('PermissionDeniedError');
|
|
27
|
+
expect(err.code).toBe('PERMISSION_DENIED');
|
|
28
|
+
expect(err.retryable).toBe(false);
|
|
29
|
+
expect(err).toBeInstanceOf(SdkError);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
describe('BudgetExhaustedError', () => {
|
|
33
|
+
it('has correct defaults', () => {
|
|
34
|
+
const err = new BudgetExhaustedError('no budget');
|
|
35
|
+
expect(err.name).toBe('BudgetExhaustedError');
|
|
36
|
+
expect(err.code).toBe('BUDGET_EXHAUSTED');
|
|
37
|
+
expect(err.retryable).toBe(false);
|
|
38
|
+
expect(err).toBeInstanceOf(SdkError);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
describe('McpConnectionError', () => {
|
|
42
|
+
it('has correct defaults', () => {
|
|
43
|
+
const err = new McpConnectionError('connection failed');
|
|
44
|
+
expect(err.name).toBe('McpConnectionError');
|
|
45
|
+
expect(err.code).toBe('MCP_CONNECTION_ERROR');
|
|
46
|
+
expect(err.retryable).toBe(true);
|
|
47
|
+
expect(err).toBeInstanceOf(SdkError);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
describe('SessionLoadError', () => {
|
|
51
|
+
it('has correct defaults', () => {
|
|
52
|
+
const err = new SessionLoadError('load failed');
|
|
53
|
+
expect(err.name).toBe('SessionLoadError');
|
|
54
|
+
expect(err.code).toBe('SESSION_LOAD_ERROR');
|
|
55
|
+
expect(err.retryable).toBe(false);
|
|
56
|
+
expect(err).toBeInstanceOf(SdkError);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
describe('CompressionError', () => {
|
|
60
|
+
it('has correct defaults', () => {
|
|
61
|
+
const err = new CompressionError('compress failed');
|
|
62
|
+
expect(err.name).toBe('CompressionError');
|
|
63
|
+
expect(err.code).toBe('COMPRESSION_ERROR');
|
|
64
|
+
expect(err.retryable).toBe(true);
|
|
65
|
+
expect(err).toBeInstanceOf(SdkError);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
//# sourceMappingURL=errors.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../src/errors.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Agent } from '@mariozechner/pi-agent-core';
|
|
2
|
+
import type { ThinkingLevel, StreamFn } from '@mariozechner/pi-agent-core';
|
|
3
|
+
import type { ImageContent, Model } from '@mariozechner/pi-ai';
|
|
4
|
+
import type { CostTracker, HookHandler, McpManager, McpServerConfig, MemoryManager, AgentSnapshot, PermissionMode, PermissionRule, ResolvedSkill, SdkTool, SessionManager, SwarmManager } from './types.js';
|
|
5
|
+
export interface AutoForkConfig {
|
|
6
|
+
branches: number;
|
|
7
|
+
/**
|
|
8
|
+
* Called after each LLM turn completes with the N child agents.
|
|
9
|
+
* Exceptions are caught and ignored — do not rely on error propagation.
|
|
10
|
+
*/
|
|
11
|
+
onBranches: (agents: CodingAgent[]) => void | Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
export interface CodingAgentConfig {
|
|
14
|
+
model: Model<any>;
|
|
15
|
+
systemPrompt?: string;
|
|
16
|
+
tools?: SdkTool<any, any>[];
|
|
17
|
+
permissionMode?: PermissionMode;
|
|
18
|
+
permissionRules?: PermissionRule[];
|
|
19
|
+
onPermissionAsk?: (toolName: string, args: unknown) => Promise<boolean>;
|
|
20
|
+
mcpServers?: McpServerConfig[];
|
|
21
|
+
maxContextTokens?: number;
|
|
22
|
+
compressionStrategy?: 'truncate' | 'summarize';
|
|
23
|
+
memoryDir?: string;
|
|
24
|
+
enableMemory?: boolean;
|
|
25
|
+
sessionDir?: string;
|
|
26
|
+
sessionId?: string;
|
|
27
|
+
hooks?: HookHandler[];
|
|
28
|
+
skills?: ResolvedSkill[];
|
|
29
|
+
enableSwarm?: boolean;
|
|
30
|
+
thinkingLevel?: ThinkingLevel;
|
|
31
|
+
toolExecution?: 'sequential' | 'parallel';
|
|
32
|
+
getApiKey?: (provider: string) => Promise<string | undefined>;
|
|
33
|
+
cwd?: string;
|
|
34
|
+
onQuestion?: (question: string) => Promise<string>;
|
|
35
|
+
autoFork?: AutoForkConfig;
|
|
36
|
+
/** Custom stream function. Useful for proxy backends and testing. */
|
|
37
|
+
streamFn?: StreamFn;
|
|
38
|
+
}
|
|
39
|
+
export interface CodingAgent {
|
|
40
|
+
agent: Agent;
|
|
41
|
+
mcp: McpManager;
|
|
42
|
+
sessions: SessionManager;
|
|
43
|
+
memory: MemoryManager;
|
|
44
|
+
swarm?: SwarmManager;
|
|
45
|
+
costTracker: CostTracker;
|
|
46
|
+
prompt(message: string, images?: ImageContent[]): Promise<void>;
|
|
47
|
+
dispose(): Promise<void>;
|
|
48
|
+
snapshot(): AgentSnapshot;
|
|
49
|
+
restore(snapshot: AgentSnapshot): void;
|
|
50
|
+
fork(message: string, n: number): Promise<CodingAgent[]>;
|
|
51
|
+
forkFrom(snapshot: AgentSnapshot, message: string, n: number): Promise<CodingAgent[]>;
|
|
52
|
+
promptFork(message: string, n: number): Promise<CodingAgent[]>;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Main factory function. Creates a fully wired CodingAgent.
|
|
56
|
+
*/
|
|
57
|
+
export declare function createCodingAgent(config: CodingAgentConfig): Promise<CodingAgent>;
|
|
58
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"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"}
|