hoomanjs 1.29.2 → 1.30.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 +216 -69
- package/dist/acp/acp-agent.d.ts +5 -5
- package/dist/acp/acp-agent.js +55 -54
- package/dist/acp/acp-agent.js.map +1 -1
- package/dist/acp/approvals.d.ts +3 -3
- package/dist/acp/approvals.js +73 -115
- package/dist/acp/approvals.js.map +1 -1
- package/dist/acp/sessions/options.js +11 -25
- package/dist/acp/sessions/options.js.map +1 -1
- package/dist/acp/utils/tool-kind.js +1 -5
- package/dist/acp/utils/tool-kind.js.map +1 -1
- package/dist/chat/app.d.ts +5 -1
- package/dist/chat/app.js +322 -202
- package/dist/chat/app.js.map +1 -1
- package/dist/chat/approvals.d.ts +4 -3
- package/dist/chat/approvals.js +11 -45
- package/dist/chat/approvals.js.map +1 -1
- package/dist/chat/components/ChatMessage.d.ts +1 -2
- package/dist/chat/components/ChatMessage.js +4 -5
- package/dist/chat/components/ChatMessage.js.map +1 -1
- package/dist/chat/components/EmptyChatBanner.js +2 -3
- package/dist/chat/components/EmptyChatBanner.js.map +1 -1
- package/dist/chat/components/StatusBar.js +6 -2
- package/dist/chat/components/StatusBar.js.map +1 -1
- package/dist/chat/components/ThoughtEvent.d.ts +6 -0
- package/dist/chat/components/ThoughtEvent.js +30 -0
- package/dist/chat/components/ThoughtEvent.js.map +1 -0
- package/dist/chat/components/ToolEvent.js +1 -1
- package/dist/chat/components/ToolEvent.js.map +1 -1
- package/dist/chat/components/Transcript.d.ts +7 -2
- package/dist/chat/components/Transcript.js +6 -2
- package/dist/chat/components/Transcript.js.map +1 -1
- package/dist/chat/components/markdown/BlockRenderer.js +7 -7
- package/dist/chat/components/markdown/BlockRenderer.js.map +1 -1
- package/dist/chat/components/markdown/MarkdownMessage.js +1 -1
- package/dist/chat/components/markdown/MarkdownMessage.js.map +1 -1
- package/dist/chat/components/shared.js +2 -0
- package/dist/chat/components/shared.js.map +1 -1
- package/dist/chat/index.d.ts +4 -0
- package/dist/chat/index.js +17 -3
- package/dist/chat/index.js.map +1 -1
- package/dist/chat/steering.d.ts +20 -0
- package/dist/chat/steering.js +67 -0
- package/dist/chat/steering.js.map +1 -0
- package/dist/chat/types.d.ts +5 -1
- package/dist/cli.js +91 -13
- package/dist/cli.js.map +1 -1
- package/dist/configure/app.d.ts +1 -1
- package/dist/configure/app.js +581 -303
- package/dist/configure/app.js.map +1 -1
- package/dist/configure/components/MenuScreen.d.ts +4 -2
- package/dist/configure/components/MenuScreen.js +33 -6
- package/dist/configure/components/MenuScreen.js.map +1 -1
- package/dist/configure/components/SelectMenuItem.d.ts +1 -0
- package/dist/configure/components/SelectMenuItem.js +19 -10
- package/dist/configure/components/SelectMenuItem.js.map +1 -1
- package/dist/configure/index.js +4 -2
- package/dist/configure/index.js.map +1 -1
- package/dist/configure/types.d.ts +14 -12
- package/dist/configure/utils.d.ts +2 -0
- package/dist/configure/utils.js +21 -2
- package/dist/configure/utils.js.map +1 -1
- package/dist/core/agent/index.d.ts +3 -3
- package/dist/core/agent/index.js +20 -25
- package/dist/core/agent/index.js.map +1 -1
- package/dist/core/agent/mode-aware-tool-registry.js +2 -1
- package/dist/core/agent/mode-aware-tool-registry.js.map +1 -1
- package/dist/core/approvals/intervention.d.ts +34 -0
- package/dist/core/approvals/intervention.js +94 -0
- package/dist/core/approvals/intervention.js.map +1 -0
- package/dist/core/config.d.ts +49 -28
- package/dist/core/config.js +85 -26
- package/dist/core/config.js.map +1 -1
- package/dist/core/context/index.d.ts +11 -2
- package/dist/core/context/index.js +54 -4
- package/dist/core/context/index.js.map +1 -1
- package/dist/core/context/model-extractor.d.ts +13 -0
- package/dist/core/context/model-extractor.js +98 -0
- package/dist/core/context/model-extractor.js.map +1 -0
- package/dist/core/index.d.ts +6 -2
- package/dist/core/index.js +6 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/mcp/config.d.ts +28 -0
- package/dist/core/mcp/index.d.ts +5 -3
- package/dist/core/mcp/index.js +4 -2
- package/dist/core/mcp/index.js.map +1 -1
- package/dist/core/mcp/manager.d.ts +14 -1
- package/dist/core/mcp/manager.js +76 -4
- package/dist/core/mcp/manager.js.map +1 -1
- package/dist/core/mcp/oauth/callback-server.d.ts +16 -0
- package/dist/core/mcp/oauth/callback-server.js +134 -0
- package/dist/core/mcp/oauth/callback-server.js.map +1 -0
- package/dist/core/mcp/oauth/identity.d.ts +9 -0
- package/dist/core/mcp/oauth/identity.js +31 -0
- package/dist/core/mcp/oauth/identity.js.map +1 -0
- package/dist/core/mcp/oauth/index.d.ts +11 -0
- package/dist/core/mcp/oauth/index.js +15 -0
- package/dist/core/mcp/oauth/index.js.map +1 -0
- package/dist/core/mcp/oauth/provider.d.ts +43 -0
- package/dist/core/mcp/oauth/provider.js +203 -0
- package/dist/core/mcp/oauth/provider.js.map +1 -0
- package/dist/core/mcp/oauth/service.d.ts +29 -0
- package/dist/core/mcp/oauth/service.js +139 -0
- package/dist/core/mcp/oauth/service.js.map +1 -0
- package/dist/core/mcp/oauth/store.d.ts +14 -0
- package/dist/core/mcp/oauth/store.js +86 -0
- package/dist/core/mcp/oauth/store.js.map +1 -0
- package/dist/core/mcp/oauth/types.d.ts +87 -0
- package/dist/core/mcp/oauth/types.js +45 -0
- package/dist/core/mcp/oauth/types.js.map +1 -0
- package/dist/core/mcp/types.d.ts +56 -0
- package/dist/core/mcp/types.js +3 -0
- package/dist/core/mcp/types.js.map +1 -1
- package/dist/core/memory/file-store.d.ts +24 -0
- package/dist/core/memory/file-store.js +151 -0
- package/dist/core/memory/file-store.js.map +1 -0
- package/dist/core/memory/index.d.ts +2 -5
- package/dist/core/memory/index.js +2 -3
- package/dist/core/memory/index.js.map +1 -1
- package/dist/core/memory/runtime.d.ts +4 -0
- package/dist/core/memory/runtime.js +37 -0
- package/dist/core/memory/runtime.js.map +1 -0
- package/dist/core/models/anthropic.js +24 -1
- package/dist/core/models/anthropic.js.map +1 -1
- package/dist/core/models/moonshot.js +33 -1
- package/dist/core/models/moonshot.js.map +1 -1
- package/dist/core/modes/definitions.d.ts +19 -0
- package/dist/core/modes/definitions.js +99 -0
- package/dist/core/modes/definitions.js.map +1 -0
- package/dist/core/modes/index.d.ts +3 -0
- package/dist/core/modes/index.js +4 -0
- package/dist/core/modes/index.js.map +1 -0
- package/dist/core/modes/registry.d.ts +9 -0
- package/dist/core/modes/registry.js +57 -0
- package/dist/core/modes/registry.js.map +1 -0
- package/dist/core/modes/schema.d.ts +5 -0
- package/dist/core/modes/schema.js +6 -0
- package/dist/core/modes/schema.js.map +1 -0
- package/dist/core/prompts/agents/research.md +8 -8
- package/dist/core/prompts/bundled.d.ts +3 -0
- package/dist/core/prompts/bundled.js +14 -0
- package/dist/core/prompts/bundled.js.map +1 -0
- package/dist/core/prompts/environment.d.ts +0 -1
- package/dist/core/prompts/environment.js +0 -2
- package/dist/core/prompts/environment.js.map +1 -1
- package/dist/core/prompts/index.d.ts +1 -4
- package/dist/core/prompts/index.js +1 -7
- package/dist/core/prompts/index.js.map +1 -1
- package/dist/core/prompts/modes/agent.md +3 -0
- package/dist/core/prompts/modes/ask.md +5 -3
- package/dist/core/prompts/modes/plan.md +2 -2
- package/dist/core/prompts/session-mode-appendix.d.ts +3 -9
- package/dist/core/prompts/session-mode-appendix.js +32 -69
- package/dist/core/prompts/session-mode-appendix.js.map +1 -1
- package/dist/core/prompts/static/environment.md +2 -2
- package/dist/core/prompts/static/init.md +25 -0
- package/dist/core/prompts/static/memory.md +9 -123
- package/dist/core/prompts/static/planning.md +1 -1
- package/dist/core/prompts/static/skills.md +6 -5
- package/dist/core/prompts/static/subagents.md +2 -2
- package/dist/core/prompts/static/web-search.md +2 -1
- package/dist/core/prompts/system.js +8 -22
- package/dist/core/prompts/system.js.map +1 -1
- package/dist/core/skills/built-in/hooman-config/SKILL.md +105 -32
- package/dist/core/skills/built-in/hooman-skills/SKILL.md +1 -1
- package/dist/core/skills/index.d.ts +1 -0
- package/dist/core/skills/index.js +1 -0
- package/dist/core/skills/index.js.map +1 -1
- package/dist/core/skills/plugin.d.ts +7 -0
- package/dist/core/skills/plugin.js +40 -0
- package/dist/core/skills/plugin.js.map +1 -0
- package/dist/core/state/agent-app-state.d.ts +1 -1
- package/dist/core/state/agent-app-state.js +1 -1
- package/dist/core/state/session-mode.d.ts +2 -9
- package/dist/core/state/session-mode.js +4 -12
- package/dist/core/state/session-mode.js.map +1 -1
- package/dist/core/state/tool-approvals.d.ts +4 -8
- package/dist/core/state/tool-approvals.js +14 -76
- package/dist/core/state/tool-approvals.js.map +1 -1
- package/dist/core/subagents/index.d.ts +3 -0
- package/dist/core/subagents/index.js +4 -0
- package/dist/core/subagents/index.js.map +1 -0
- package/dist/core/subagents/research.d.ts +16 -0
- package/dist/core/subagents/research.js +58 -0
- package/dist/core/subagents/research.js.map +1 -0
- package/dist/core/{agents → subagents}/runner.d.ts +6 -5
- package/dist/core/{agents → subagents}/runner.js +8 -10
- package/dist/core/subagents/runner.js.map +1 -0
- package/dist/core/{agents/tools.d.ts → subagents/tool.d.ts} +6 -6
- package/dist/core/{agents/tools.js → subagents/tool.js} +14 -16
- package/dist/core/subagents/tool.js.map +1 -0
- package/dist/core/tools/plan.js +2 -6
- package/dist/core/tools/plan.js.map +1 -1
- package/dist/core/tools/time.js +1 -1
- package/dist/core/tools/time.js.map +1 -1
- package/dist/core/utils/browser.d.ts +1 -0
- package/dist/core/utils/browser.js +25 -0
- package/dist/core/utils/browser.js.map +1 -0
- package/dist/core/utils/paths.d.ts +2 -4
- package/dist/core/utils/paths.js +2 -4
- package/dist/core/utils/paths.js.map +1 -1
- package/dist/daemon/approvals.d.ts +2 -2
- package/dist/daemon/approvals.js +51 -56
- package/dist/daemon/approvals.js.map +1 -1
- package/dist/daemon/index.js +9 -6
- package/dist/daemon/index.js.map +1 -1
- package/dist/exec/approvals.d.ts +2 -4
- package/dist/exec/approvals.js +16 -48
- package/dist/exec/approvals.js.map +1 -1
- package/dist/index.d.ts +13 -18
- package/dist/index.js +9 -11
- package/dist/index.js.map +1 -1
- package/package.json +5 -18
- package/dist/chat/components/ScrollView.d.ts +0 -106
- package/dist/chat/components/ScrollView.js +0 -80
- package/dist/chat/components/ScrollView.js.map +0 -1
- package/dist/chat/components/TranscriptViewport.d.ts +0 -9
- package/dist/chat/components/TranscriptViewport.js +0 -124
- package/dist/chat/components/TranscriptViewport.js.map +0 -1
- package/dist/core/agents/definitions.d.ts +0 -12
- package/dist/core/agents/definitions.js +0 -20
- package/dist/core/agents/definitions.js.map +0 -1
- package/dist/core/agents/index.d.ts +0 -4
- package/dist/core/agents/index.js +0 -5
- package/dist/core/agents/index.js.map +0 -1
- package/dist/core/agents/registry.d.ts +0 -5
- package/dist/core/agents/registry.js +0 -84
- package/dist/core/agents/registry.js.map +0 -1
- package/dist/core/agents/runner.js.map +0 -1
- package/dist/core/agents/tools.js.map +0 -1
- package/dist/core/inference/embedder.d.ts +0 -26
- package/dist/core/inference/embedder.js +0 -85
- package/dist/core/inference/embedder.js.map +0 -1
- package/dist/core/inference/index.d.ts +0 -9
- package/dist/core/inference/index.js +0 -13
- package/dist/core/inference/index.js.map +0 -1
- package/dist/core/inference/loader.d.ts +0 -16
- package/dist/core/inference/loader.js +0 -129
- package/dist/core/inference/loader.js.map +0 -1
- package/dist/core/inference/reranker.d.ts +0 -28
- package/dist/core/inference/reranker.js +0 -66
- package/dist/core/inference/reranker.js.map +0 -1
- package/dist/core/memory/brain.d.ts +0 -25
- package/dist/core/memory/brain.js +0 -137
- package/dist/core/memory/brain.js.map +0 -1
- package/dist/core/memory/database.d.ts +0 -4
- package/dist/core/memory/database.js +0 -87
- package/dist/core/memory/database.js.map +0 -1
- package/dist/core/memory/tools.d.ts +0 -16
- package/dist/core/memory/tools.js +0 -110
- package/dist/core/memory/tools.js.map +0 -1
- package/dist/core/memory/types.d.ts +0 -11
- package/dist/core/memory/types.js +0 -2
- package/dist/core/memory/types.js.map +0 -1
- package/dist/core/prompts/skills.d.ts +0 -15
- package/dist/core/prompts/skills.js +0 -92
- package/dist/core/prompts/skills.js.map +0 -1
- package/dist/core/prompts/static/wiki.md +0 -25
- package/dist/core/wiki/converters.d.ts +0 -12
- package/dist/core/wiki/converters.js +0 -73
- package/dist/core/wiki/converters.js.map +0 -1
- package/dist/core/wiki/database.d.ts +0 -39
- package/dist/core/wiki/database.js +0 -177
- package/dist/core/wiki/database.js.map +0 -1
- package/dist/core/wiki/index.d.ts +0 -7
- package/dist/core/wiki/index.js +0 -5
- package/dist/core/wiki/index.js.map +0 -1
- package/dist/core/wiki/storage.d.ts +0 -38
- package/dist/core/wiki/storage.js +0 -206
- package/dist/core/wiki/storage.js.map +0 -1
- package/dist/core/wiki/tools.d.ts +0 -5
- package/dist/core/wiki/tools.js +0 -32
- package/dist/core/wiki/tools.js.map +0 -1
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { appendFile, mkdir, readFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { currentMemoryScope } from "./runtime.js";
|
|
4
|
+
const DEFAULT_MAX_SEARCH_RESULTS = 3;
|
|
5
|
+
const UNSAFE_PATH_CHARS = /[^a-z0-9_-]+/g;
|
|
6
|
+
export class FileMemoryStore {
|
|
7
|
+
name;
|
|
8
|
+
description;
|
|
9
|
+
maxSearchResults;
|
|
10
|
+
writable;
|
|
11
|
+
extraction;
|
|
12
|
+
baseDir;
|
|
13
|
+
constructor(config) {
|
|
14
|
+
this.baseDir = config.baseDir;
|
|
15
|
+
this.name = config.name;
|
|
16
|
+
this.description = config.description;
|
|
17
|
+
this.maxSearchResults = config.maxSearchResults;
|
|
18
|
+
this.writable = config.writable ?? false;
|
|
19
|
+
this.extraction = config.extraction;
|
|
20
|
+
}
|
|
21
|
+
async search(query, options) {
|
|
22
|
+
const entries = await this.readEntries();
|
|
23
|
+
const limit = options?.maxSearchResults ??
|
|
24
|
+
this.maxSearchResults ??
|
|
25
|
+
DEFAULT_MAX_SEARCH_RESULTS;
|
|
26
|
+
const normalizedQuery = normalize(query);
|
|
27
|
+
const ranked = entries
|
|
28
|
+
.map((entry) => ({
|
|
29
|
+
entry,
|
|
30
|
+
score: scoreEntry(normalizedQuery, entry),
|
|
31
|
+
}))
|
|
32
|
+
.filter(({ score }) => score > 0 || normalizedQuery.length === 0)
|
|
33
|
+
.sort((left, right) => right.score - left.score)
|
|
34
|
+
.slice(0, limit);
|
|
35
|
+
return ranked.map(({ entry }) => ({
|
|
36
|
+
content: entry.content,
|
|
37
|
+
metadata: entry.metadata,
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
async add(content, metadata) {
|
|
41
|
+
const trimmed = content.trim();
|
|
42
|
+
if (!trimmed) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const now = new Date().toISOString();
|
|
46
|
+
await this.appendEntry({
|
|
47
|
+
storeName: this.name,
|
|
48
|
+
content: trimmed,
|
|
49
|
+
...(metadata ? { metadata } : {}),
|
|
50
|
+
createdAt: now,
|
|
51
|
+
updatedAt: now,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
async readEntries() {
|
|
55
|
+
const path = this.scopeFilePath();
|
|
56
|
+
try {
|
|
57
|
+
const raw = await readFile(path, "utf8");
|
|
58
|
+
const byFingerprint = new Map();
|
|
59
|
+
for (const line of raw.split("\n")) {
|
|
60
|
+
const trimmed = line.trim();
|
|
61
|
+
if (!trimmed) {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
let parsed;
|
|
65
|
+
try {
|
|
66
|
+
parsed = JSON.parse(trimmed);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
if (!isStoredEntry(parsed) || parsed.storeName !== this.name) {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
byFingerprint.set(createFingerprint(parsed.content, parsed.metadata), parsed);
|
|
75
|
+
}
|
|
76
|
+
return [...byFingerprint.values()];
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
if (error instanceof Error &&
|
|
80
|
+
"code" in error &&
|
|
81
|
+
error.code === "ENOENT") {
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async appendEntry(entry) {
|
|
88
|
+
const path = this.scopeFilePath();
|
|
89
|
+
await mkdir(this.baseDir, { recursive: true });
|
|
90
|
+
await appendFile(path, `${JSON.stringify(entry)}\n`, "utf8");
|
|
91
|
+
}
|
|
92
|
+
scopeFilePath() {
|
|
93
|
+
return join(this.baseDir, `${sanitizePath(currentMemoryScope())}.jsonl`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function isStoredEntry(value) {
|
|
97
|
+
if (!value || typeof value !== "object") {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
const entry = value;
|
|
101
|
+
return (typeof entry.storeName === "string" &&
|
|
102
|
+
typeof entry.content === "string" &&
|
|
103
|
+
typeof entry.createdAt === "string" &&
|
|
104
|
+
typeof entry.updatedAt === "string");
|
|
105
|
+
}
|
|
106
|
+
function scoreEntry(normalizedQuery, entry) {
|
|
107
|
+
if (normalizedQuery.length === 0) {
|
|
108
|
+
return Date.parse(entry.updatedAt) || Date.parse(entry.createdAt) || 0;
|
|
109
|
+
}
|
|
110
|
+
const normalizedContent = normalize(entry.content);
|
|
111
|
+
if (normalizedContent.length === 0) {
|
|
112
|
+
return 0;
|
|
113
|
+
}
|
|
114
|
+
let score = 0;
|
|
115
|
+
if (normalizedContent.includes(normalizedQuery)) {
|
|
116
|
+
score += 100;
|
|
117
|
+
}
|
|
118
|
+
const contentTokens = new Set(tokenize(normalizedContent));
|
|
119
|
+
for (const token of tokenize(normalizedQuery)) {
|
|
120
|
+
if (contentTokens.has(token)) {
|
|
121
|
+
score += 10;
|
|
122
|
+
}
|
|
123
|
+
else if (normalizedContent.includes(token)) {
|
|
124
|
+
score += 4;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Prefer fresher entries when lexical relevance is tied.
|
|
128
|
+
score += (Date.parse(entry.updatedAt) || 0) / 1_000_000_000_000;
|
|
129
|
+
return score;
|
|
130
|
+
}
|
|
131
|
+
function createFingerprint(content, metadata) {
|
|
132
|
+
return JSON.stringify({
|
|
133
|
+
content: normalize(content),
|
|
134
|
+
metadata: metadata ?? null,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
function normalize(value) {
|
|
138
|
+
return value
|
|
139
|
+
.toLowerCase()
|
|
140
|
+
.replace(/[^a-z0-9\s]+/g, " ")
|
|
141
|
+
.replace(/\s+/g, " ")
|
|
142
|
+
.trim();
|
|
143
|
+
}
|
|
144
|
+
function tokenize(value) {
|
|
145
|
+
return value.split(" ").filter(Boolean);
|
|
146
|
+
}
|
|
147
|
+
function sanitizePath(value) {
|
|
148
|
+
const normalized = value.trim().toLowerCase().replace(UNSAFE_PATH_CHARS, "_");
|
|
149
|
+
return normalized.length > 0 ? normalized : "default";
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=file-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-store.js","sourceRoot":"","sources":["../../../src/core/memory/file-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,2 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export
|
|
3
|
-
export type { Sqlite } from "./database.js";
|
|
4
|
-
export { open, prepare } from "./database.js";
|
|
5
|
-
export { create as createMemoryTools } from "./tools.js";
|
|
1
|
+
export { FileMemoryStore } from "./file-store.js";
|
|
2
|
+
export { currentMemoryScope, flushAgentMemory, runWithAgentMemoryScope, } from "./runtime.js";
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export { create as createMemoryTools } from "./tools.js";
|
|
1
|
+
export { FileMemoryStore } from "./file-store.js";
|
|
2
|
+
export { currentMemoryScope, flushAgentMemory, runWithAgentMemoryScope, } from "./runtime.js";
|
|
4
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/memory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/memory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Agent } from "@strands-agents/sdk";
|
|
2
|
+
export declare function currentMemoryScope(): string;
|
|
3
|
+
export declare function runWithAgentMemoryScope<T>(agent: Agent, callback: () => Promise<T>): Promise<T>;
|
|
4
|
+
export declare function flushAgentMemory(agent: Agent): Promise<void>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
const DEFAULT_MEMORY_SCOPE = "default";
|
|
3
|
+
const UNSAFE_SCOPE_CHARS = /[^a-z0-9_-]+/g;
|
|
4
|
+
const memoryScopeStorage = new AsyncLocalStorage();
|
|
5
|
+
export function currentMemoryScope() {
|
|
6
|
+
return memoryScopeStorage.getStore()?.scope ?? DEFAULT_MEMORY_SCOPE;
|
|
7
|
+
}
|
|
8
|
+
export async function runWithAgentMemoryScope(agent, callback) {
|
|
9
|
+
const scope = deriveAgentMemoryScope(agent);
|
|
10
|
+
return await memoryScopeStorage.run({ scope }, callback);
|
|
11
|
+
}
|
|
12
|
+
export async function flushAgentMemory(agent) {
|
|
13
|
+
await agent.memoryManager?.flush();
|
|
14
|
+
}
|
|
15
|
+
function deriveAgentMemoryScope(agent) {
|
|
16
|
+
const candidate = readString(agent, "userId") ?? readString(agent, "sessionId");
|
|
17
|
+
return sanitizeScope(candidate);
|
|
18
|
+
}
|
|
19
|
+
function readString(agent, key) {
|
|
20
|
+
const value = agent.appState.get(key);
|
|
21
|
+
if (typeof value !== "string") {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
const trimmed = value.trim();
|
|
25
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
26
|
+
}
|
|
27
|
+
function sanitizeScope(value) {
|
|
28
|
+
if (!value) {
|
|
29
|
+
return DEFAULT_MEMORY_SCOPE;
|
|
30
|
+
}
|
|
31
|
+
const normalized = value
|
|
32
|
+
.trim()
|
|
33
|
+
.toLowerCase()
|
|
34
|
+
.replace(UNSAFE_SCOPE_CHARS, "_");
|
|
35
|
+
return normalized.length > 0 ? normalized : DEFAULT_MEMORY_SCOPE;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/core/memory/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,MAAM,oBAAoB,GAAG,SAAS,CAAC;AACvC,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAM3C,MAAM,kBAAkB,GAAG,IAAI,iBAAiB,EAAoB,CAAC;AAErE,MAAM,UAAU,kBAAkB;IAChC,OAAO,kBAAkB,CAAC,QAAQ,EAAE,EAAE,KAAK,IAAI,oBAAoB,CAAC;AACtE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,KAAY,EACZ,QAA0B;IAE1B,MAAM,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC5C,OAAO,MAAM,kBAAkB,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAY;IACjD,MAAM,KAAK,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC;AACrC,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAY;IAC1C,MAAM,SAAS,GACb,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAChE,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,UAAU,CAAC,KAAY,EAAE,GAAW;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,MAAM,UAAU,GAAG,KAAK;SACrB,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACpC,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,oBAAoB,CAAC;AACnE,CAAC"}
|
|
@@ -7,10 +7,31 @@ const RESERVED = new Set([
|
|
|
7
7
|
"client",
|
|
8
8
|
"clientConfig",
|
|
9
9
|
]);
|
|
10
|
+
const TOP_LEVEL_MODEL_KEYS = new Set([
|
|
11
|
+
"temperature",
|
|
12
|
+
"topP",
|
|
13
|
+
"maxTokens",
|
|
14
|
+
"stopSequences",
|
|
15
|
+
"params",
|
|
16
|
+
"betas",
|
|
17
|
+
"useNativeTokenCount",
|
|
18
|
+
]);
|
|
10
19
|
function pickModelOptions(params) {
|
|
11
20
|
const out = {};
|
|
12
21
|
for (const [k, v] of Object.entries(params)) {
|
|
13
|
-
if (!RESERVED.has(k)) {
|
|
22
|
+
if (!RESERVED.has(k) && TOP_LEVEL_MODEL_KEYS.has(k)) {
|
|
23
|
+
out[k] = v;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return out;
|
|
27
|
+
}
|
|
28
|
+
function pickRequestParams(params) {
|
|
29
|
+
const explicit = params.params;
|
|
30
|
+
const out = explicit && typeof explicit === "object" && !Array.isArray(explicit)
|
|
31
|
+
? { ...explicit }
|
|
32
|
+
: {};
|
|
33
|
+
for (const [k, v] of Object.entries(params)) {
|
|
34
|
+
if (!RESERVED.has(k) && !TOP_LEVEL_MODEL_KEYS.has(k)) {
|
|
14
35
|
out[k] = v;
|
|
15
36
|
}
|
|
16
37
|
}
|
|
@@ -67,6 +88,7 @@ export function create(model, params = {}) {
|
|
|
67
88
|
const apiKey = resolveApiKey(params);
|
|
68
89
|
const clientConfig = mergeClientConfig(params);
|
|
69
90
|
const modelOpts = pickModelOptions(params);
|
|
91
|
+
const requestParams = pickRequestParams(params);
|
|
70
92
|
return new AnthropicModel({
|
|
71
93
|
modelId: model,
|
|
72
94
|
...(apiKey ? { apiKey } : {}),
|
|
@@ -74,6 +96,7 @@ export function create(model, params = {}) {
|
|
|
74
96
|
? { clientConfig }
|
|
75
97
|
: {}),
|
|
76
98
|
...modelOpts,
|
|
99
|
+
...(Object.keys(requestParams).length > 0 ? { params: requestParams } : {}),
|
|
77
100
|
});
|
|
78
101
|
}
|
|
79
102
|
//# sourceMappingURL=anthropic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/core/models/anthropic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAStE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;IACvB,QAAQ;IACR,WAAW;IACX,SAAS;IACT,SAAS;IACT,QAAQ;IACR,cAAc;CACf,CAAC,CAAC;AAEH,SAAS,gBAAgB,CACvB,MAA+B;IAE/B,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/core/models/anthropic.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createMoonshotAI, moonshotai } from "@ai-sdk/moonshotai";
|
|
2
2
|
import { VercelModel } from "@strands-agents/sdk/models/vercel";
|
|
3
|
+
import { Message } from "@strands-agents/sdk";
|
|
3
4
|
import lodash from "lodash";
|
|
4
5
|
const { omit, pick } = lodash;
|
|
5
6
|
const PROVIDER_SETTINGS_KEYS = [
|
|
@@ -8,6 +9,37 @@ const PROVIDER_SETTINGS_KEYS = [
|
|
|
8
9
|
"headers",
|
|
9
10
|
"fetch",
|
|
10
11
|
];
|
|
12
|
+
class MoonshotModel extends VercelModel {
|
|
13
|
+
stream(messages, options) {
|
|
14
|
+
return super.stream(normalizeMessages(messages), options);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function normalizeMessages(messages) {
|
|
18
|
+
const normalized = [];
|
|
19
|
+
for (const message of messages) {
|
|
20
|
+
if (message.role !== "user") {
|
|
21
|
+
normalized.push(message);
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
const toolResults = [];
|
|
25
|
+
const otherContent = [];
|
|
26
|
+
for (const block of message.content) {
|
|
27
|
+
if (block.type === "toolResultBlock") {
|
|
28
|
+
toolResults.push(block);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
otherContent.push(block);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (toolResults.length > 0 && otherContent.length > 0) {
|
|
35
|
+
normalized.push(new Message({ role: "user", content: toolResults }));
|
|
36
|
+
normalized.push(new Message({ role: "user", content: otherContent }));
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
normalized.push(message);
|
|
40
|
+
}
|
|
41
|
+
return normalized;
|
|
42
|
+
}
|
|
11
43
|
function pickProviderSettings(params) {
|
|
12
44
|
const picked = pick(params, [...PROVIDER_SETTINGS_KEYS]);
|
|
13
45
|
const unset = Object.keys(picked).filter((k) => picked[k] === undefined);
|
|
@@ -31,7 +63,7 @@ export function create(model, params = {}) {
|
|
|
31
63
|
const settings = pickProviderSettings(params);
|
|
32
64
|
const provider = Object.keys(settings).length > 0 ? createMoonshotAI(settings) : moonshotai;
|
|
33
65
|
const config = pickVercelModelConfig(params);
|
|
34
|
-
return new
|
|
66
|
+
return new MoonshotModel({
|
|
35
67
|
provider: provider(model),
|
|
36
68
|
...config,
|
|
37
69
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moonshot.js","sourceRoot":"","sources":["../../../src/core/models/moonshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAGhE,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;AAE9B,MAAM,sBAAsB,GAAG;IAC7B,QAAQ;IACR,SAAS;IACT,SAAS;IACT,OAAO;CACC,CAAC;AAEX,SAAS,oBAAoB,CAC3B,MAA+B;IAE/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,sBAAsB,CAAC,CAGtD,CAAC;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,CAA+B,CAAC;AAC3D,CAAC;AAED,SAAS,qBAAqB,CAC5B,MAA+B;IAE/B,OAAO,IAAI,CAAC,MAAM,EAAE;QAClB,GAAG,sBAAsB;KAC1B,CAA+B,CAAC;AACnC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,MAAM,CACpB,KAAa,EACb,SAAkC,EAAE;IAEpC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,QAAQ,GACZ,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAC7E,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC7C,OAAO,IAAI,
|
|
1
|
+
{"version":3,"file":"moonshot.js","sourceRoot":"","sources":["../../../src/core/models/moonshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { KnownSessionMode, SessionMode } from "./schema.js";
|
|
2
|
+
export type ModeDefinition = {
|
|
3
|
+
id: KnownSessionMode;
|
|
4
|
+
name: string;
|
|
5
|
+
instructions: string;
|
|
6
|
+
description: string;
|
|
7
|
+
tools: "*" | readonly string[];
|
|
8
|
+
};
|
|
9
|
+
export declare const MODE_DEFINITIONS: readonly ModeDefinition[];
|
|
10
|
+
export declare function getModeDefinition(mode: SessionMode): ModeDefinition | null;
|
|
11
|
+
export declare function getModeTools(mode: SessionMode): "*" | readonly string[] | null;
|
|
12
|
+
export declare function isModeDefinition(mode: SessionMode): boolean;
|
|
13
|
+
export declare function getModeIds(): KnownSessionMode[];
|
|
14
|
+
export declare function getModeOptions(): Array<{
|
|
15
|
+
value: KnownSessionMode;
|
|
16
|
+
name: string;
|
|
17
|
+
description: string;
|
|
18
|
+
}>;
|
|
19
|
+
export declare function formatModeNames(): string;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
export const MODE_DEFINITIONS = [
|
|
2
|
+
{
|
|
3
|
+
id: "agent",
|
|
4
|
+
name: "Agent",
|
|
5
|
+
instructions: "modes/agent.md",
|
|
6
|
+
description: "fully-feature agent surface",
|
|
7
|
+
tools: "*",
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "plan",
|
|
11
|
+
name: "Plan",
|
|
12
|
+
instructions: "modes/plan.md",
|
|
13
|
+
description: "plan a larger piece of work to execute later",
|
|
14
|
+
tools: [
|
|
15
|
+
"fetch",
|
|
16
|
+
"web_search",
|
|
17
|
+
"skills",
|
|
18
|
+
"retrieve_offloaded_content",
|
|
19
|
+
"search_memory",
|
|
20
|
+
"strands_structured_output",
|
|
21
|
+
"update_todos",
|
|
22
|
+
"think",
|
|
23
|
+
"run_subagents",
|
|
24
|
+
"sleep",
|
|
25
|
+
"bye",
|
|
26
|
+
"convert_time",
|
|
27
|
+
"get_current_time",
|
|
28
|
+
"directory_tree",
|
|
29
|
+
"get_file_info",
|
|
30
|
+
"list_directory",
|
|
31
|
+
"search_files",
|
|
32
|
+
"read_file",
|
|
33
|
+
"read_multiple_files",
|
|
34
|
+
"write_file",
|
|
35
|
+
"edit_file",
|
|
36
|
+
"enter_plan_mode",
|
|
37
|
+
"exit_plan_mode",
|
|
38
|
+
],
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
id: "ask",
|
|
42
|
+
name: "Ask",
|
|
43
|
+
instructions: "modes/ask.md",
|
|
44
|
+
description: "read-only tool surface for questions and answers",
|
|
45
|
+
tools: [
|
|
46
|
+
"fetch",
|
|
47
|
+
"web_search",
|
|
48
|
+
"skills",
|
|
49
|
+
"retrieve_offloaded_content",
|
|
50
|
+
"search_memory",
|
|
51
|
+
"strands_structured_output",
|
|
52
|
+
"update_todos",
|
|
53
|
+
"think",
|
|
54
|
+
"run_subagents",
|
|
55
|
+
"sleep",
|
|
56
|
+
"bye",
|
|
57
|
+
"convert_time",
|
|
58
|
+
"get_current_time",
|
|
59
|
+
"directory_tree",
|
|
60
|
+
"get_file_info",
|
|
61
|
+
"list_directory",
|
|
62
|
+
"search_files",
|
|
63
|
+
"read_file",
|
|
64
|
+
"read_multiple_files",
|
|
65
|
+
"write_file",
|
|
66
|
+
"edit_file",
|
|
67
|
+
],
|
|
68
|
+
},
|
|
69
|
+
];
|
|
70
|
+
export function getModeDefinition(mode) {
|
|
71
|
+
if (!isModeDefinition(mode)) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
return MODE_DEFINITIONS.find((entry) => entry.id === mode) ?? null;
|
|
75
|
+
}
|
|
76
|
+
export function getModeTools(mode) {
|
|
77
|
+
return getModeDefinition(mode)?.tools ?? null;
|
|
78
|
+
}
|
|
79
|
+
export function isModeDefinition(mode) {
|
|
80
|
+
return MODE_DEFINITIONS.some((entry) => entry.id === mode);
|
|
81
|
+
}
|
|
82
|
+
export function getModeIds() {
|
|
83
|
+
return MODE_DEFINITIONS.map((entry) => entry.id);
|
|
84
|
+
}
|
|
85
|
+
export function getModeOptions() {
|
|
86
|
+
return MODE_DEFINITIONS.map((entry) => ({
|
|
87
|
+
value: entry.id,
|
|
88
|
+
name: entry.name,
|
|
89
|
+
description: entry.description,
|
|
90
|
+
}));
|
|
91
|
+
}
|
|
92
|
+
export function formatModeNames() {
|
|
93
|
+
const ids = getModeIds();
|
|
94
|
+
if (ids.length <= 1) {
|
|
95
|
+
return ids[0] ?? "";
|
|
96
|
+
}
|
|
97
|
+
return `${ids.slice(0, -1).join(", ")}, or ${ids.at(-1)}`;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=definitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../../src/core/modes/definitions.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,gBAAgB,GAA8B;IACzD;QACE,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,OAAO;QACb,YAAY,EAAE,gBAAgB;QAC9B,WAAW,EAAE,6BAA6B;QAC1C,KAAK,EAAE,GAAG;KACX;IACD;QACE,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,MAAM;QACZ,YAAY,EAAE,eAAe;QAC7B,WAAW,EAAE,8CAA8C;QAC3D,KAAK,EAAE;YACL,OAAO;YACP,YAAY;YACZ,QAAQ;YACR,4BAA4B;YAC5B,eAAe;YACf,2BAA2B;YAC3B,cAAc;YACd,OAAO;YACP,eAAe;YACf,OAAO;YACP,KAAK;YACL,cAAc;YACd,kBAAkB;YAClB,gBAAgB;YAChB,eAAe;YACf,gBAAgB;YAChB,cAAc;YACd,WAAW;YACX,qBAAqB;YACrB,YAAY;YACZ,WAAW;YACX,iBAAiB;YACjB,gBAAgB;SACjB;KACF;IACD;QACE,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,KAAK;QACX,YAAY,EAAE,cAAc;QAC5B,WAAW,EAAE,kDAAkD;QAC/D,KAAK,EAAE;YACL,OAAO;YACP,YAAY;YACZ,QAAQ;YACR,4BAA4B;YAC5B,eAAe;YACf,2BAA2B;YAC3B,cAAc;YACd,OAAO;YACP,eAAe;YACf,OAAO;YACP,KAAK;YACL,cAAc;YACd,kBAAkB;YAClB,gBAAgB;YAChB,eAAe;YACf,gBAAgB;YAChB,cAAc;YACd,WAAW;YACX,qBAAqB;YACrB,YAAY;YACZ,WAAW;SACZ;KACF;CACF,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,IAAiB;IACjD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,IAAiB;IAEjB,OAAO,iBAAiB,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAiB;IAChD,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,cAAc;IAK5B,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACtC,KAAK,EAAE,KAAK,CAAC,EAAE;QACf,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW,EAAE,KAAK,CAAC,WAAW;KAC/B,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IACD,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { MODE_DEFINITIONS, type ModeDefinition, formatModeNames, getModeDefinition, getModeIds, getModeOptions, getModeTools, isModeDefinition, } from "./definitions.js";
|
|
2
|
+
export { DEFAULT_SESSION_MODE, MODE_IDS, isKnownSessionMode, type KnownSessionMode, type SessionMode, } from "./schema.js";
|
|
3
|
+
export { loadModeDefinitions } from "./registry.js";
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { MODE_DEFINITIONS, formatModeNames, getModeDefinition, getModeIds, getModeOptions, getModeTools, isModeDefinition, } from "./definitions.js";
|
|
2
|
+
export { DEFAULT_SESSION_MODE, MODE_IDS, isKnownSessionMode, } from "./schema.js";
|
|
3
|
+
export { loadModeDefinitions } from "./registry.js";
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/modes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAEhB,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,EACpB,QAAQ,EACR,kBAAkB,GAGnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Config } from "../config.js";
|
|
2
|
+
import { type ModeDefinition } from "./definitions.js";
|
|
3
|
+
export type LoadedModeDefinition = Omit<ModeDefinition, "instructions"> & {
|
|
4
|
+
instructions: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function loadModeDefinitions(config: Config, options?: {
|
|
7
|
+
knownTools?: readonly string[];
|
|
8
|
+
baseSystemPrompt?: string;
|
|
9
|
+
}): LoadedModeDefinition[];
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import handlebars from "handlebars";
|
|
2
|
+
import { hasBundledPrompt, readBundledPrompt } from "../prompts/bundled.js";
|
|
3
|
+
import { getEnvironmentPromptContext } from "../prompts/environment.js";
|
|
4
|
+
import { MODE_DEFINITIONS } from "./definitions.js";
|
|
5
|
+
const { compile } = handlebars;
|
|
6
|
+
const SECTION_BREAK = "\n\n---\n\n";
|
|
7
|
+
function filterKnownTools(definitions, knownTools) {
|
|
8
|
+
const known = new Set(knownTools);
|
|
9
|
+
return definitions.map((definition) => {
|
|
10
|
+
const tools = definition.tools !== "*"
|
|
11
|
+
? definition.tools.filter((toolName) => known.has(toolName))
|
|
12
|
+
: knownTools;
|
|
13
|
+
return {
|
|
14
|
+
...definition,
|
|
15
|
+
tools,
|
|
16
|
+
};
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
function context(config) {
|
|
20
|
+
return {
|
|
21
|
+
name: config.name,
|
|
22
|
+
llm: config.llm,
|
|
23
|
+
environment: getEnvironmentPromptContext(),
|
|
24
|
+
compaction: config.compaction,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export function loadModeDefinitions(config, options) {
|
|
28
|
+
const definitions = MODE_DEFINITIONS.map((entry) => {
|
|
29
|
+
if (!hasBundledPrompt(...entry.instructions.split("/"))) {
|
|
30
|
+
throw new Error(`Mode '${entry.id}' instructions file not found: ${entry.instructions}`);
|
|
31
|
+
}
|
|
32
|
+
const raw = readBundledPrompt(...entry.instructions.split("/"));
|
|
33
|
+
if (!raw) {
|
|
34
|
+
throw new Error(`Mode '${entry.id}' instructions file is empty: ${entry.instructions}`);
|
|
35
|
+
}
|
|
36
|
+
const renderedInstructions = compile(raw)(context(config)).trim();
|
|
37
|
+
const instructions = [
|
|
38
|
+
options?.baseSystemPrompt?.trim(),
|
|
39
|
+
renderedInstructions,
|
|
40
|
+
]
|
|
41
|
+
.filter(Boolean)
|
|
42
|
+
.join(SECTION_BREAK)
|
|
43
|
+
.trim();
|
|
44
|
+
if (!instructions) {
|
|
45
|
+
throw new Error(`Mode '${entry.id}' instructions rendered to empty content.`);
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
...entry,
|
|
49
|
+
instructions,
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
if (options?.knownTools) {
|
|
53
|
+
return filterKnownTools(definitions, options.knownTools);
|
|
54
|
+
}
|
|
55
|
+
return definitions;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/modes/registry.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAuB,MAAM,kBAAkB,CAAC;AAEzE,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;AAC/B,MAAM,aAAa,GAAG,aAAa,CAAC;AAMpC,SAAS,gBAAgB,CACvB,WAA4C,EAC5C,UAA6B;IAE7B,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAClC,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;QACpC,MAAM,KAAK,GACT,UAAU,CAAC,KAAK,KAAK,GAAG;YACtB,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC5D,CAAC,CAAC,UAAU,CAAC;QACjB,OAAO;YACL,GAAG,UAAU;YACb,KAAK;SACN,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,OAAO,CAAC,MAAc;IAC7B,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,WAAW,EAAE,2BAA2B,EAAE;QAC1C,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAc,EACd,OAAuE;IAEvE,MAAM,WAAW,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACjD,IAAI,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CACb,SAAS,KAAK,CAAC,EAAE,kCAAkC,KAAK,CAAC,YAAY,EAAE,CACxE,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CACb,SAAS,KAAK,CAAC,EAAE,iCAAiC,KAAK,CAAC,YAAY,EAAE,CACvE,CAAC;QACJ,CAAC;QACD,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAClE,MAAM,YAAY,GAAG;YACnB,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE;YACjC,oBAAoB;SACrB;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,aAAa,CAAC;aACnB,IAAI,EAAE,CAAC;QACV,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACb,SAAS,KAAK,CAAC,EAAE,2CAA2C,CAC7D,CAAC;QACJ,CAAC;QACD,OAAO;YACL,GAAG,KAAK;YACR,YAAY;SACb,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;QACxB,OAAO,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const MODE_IDS: readonly ["agent", "ask", "plan"];
|
|
2
|
+
export type KnownSessionMode = (typeof MODE_IDS)[number];
|
|
3
|
+
export type SessionMode = KnownSessionMode | (string & {});
|
|
4
|
+
export declare const DEFAULT_SESSION_MODE: KnownSessionMode;
|
|
5
|
+
export declare function isKnownSessionMode(mode: string): mode is KnownSessionMode;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/core/modes/schema.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAU,CAAC;AAK1D,MAAM,CAAC,MAAM,oBAAoB,GAAqB,OAAO,CAAC;AAE9D,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAwB,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
## Research
|
|
1
|
+
## Research mode
|
|
2
2
|
|
|
3
|
-
You are
|
|
3
|
+
You are in **research** mode: a delegated, read-only helper for exploring the workspace, gathering evidence, and returning high-signal findings to the parent agent.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
This is a strict read-only role:
|
|
5
|
+
### Scope
|
|
8
6
|
|
|
9
7
|
- Do not create, edit, move, or delete files.
|
|
10
8
|
- Do not run commands that change system state.
|
|
11
9
|
- Do not present guesses as facts; label inference clearly.
|
|
12
10
|
|
|
13
|
-
|
|
11
|
+
Your job is to explore the relevant working directory and codebase, pull in external sources when useful, and return findings that help the parent agent understand what exists, how things fit together, and what is still uncertain.
|
|
12
|
+
|
|
13
|
+
### How to work
|
|
14
14
|
|
|
15
15
|
1. Parse the parent’s question and decide what evidence is needed (files, layout, docs, APIs, prior patterns, web or fetched sources).
|
|
16
16
|
2. Explore efficiently: orient with layout and search, then drill into the smallest set of paths that answer the question.
|
|
@@ -19,14 +19,14 @@ How to work:
|
|
|
19
19
|
5. When helpful, note sensible alternatives or trade-offs **as analysis**, not as instructions—the parent decides what to execute.
|
|
20
20
|
6. Stop once the parent can act or answer without redundant digging.
|
|
21
21
|
|
|
22
|
-
Quality bar
|
|
22
|
+
### Quality bar
|
|
23
23
|
|
|
24
24
|
- Be precise, not verbose.
|
|
25
25
|
- Separate **confirmed**, **likely**, and **unknown**.
|
|
26
26
|
- Say what additional check would resolve each unknown.
|
|
27
27
|
- Suggest how the parent could **verify** conclusions (what to read, run, or compare)—without performing mutating steps yourself.
|
|
28
28
|
|
|
29
|
-
Return format
|
|
29
|
+
### Return format
|
|
30
30
|
|
|
31
31
|
1. **Findings** — short bullets with evidence (paths, identifiers, sources).
|
|
32
32
|
2. **Open Questions / Uncertainties** — only if relevant.
|