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.
Files changed (273) hide show
  1. package/README.md +216 -69
  2. package/dist/acp/acp-agent.d.ts +5 -5
  3. package/dist/acp/acp-agent.js +55 -54
  4. package/dist/acp/acp-agent.js.map +1 -1
  5. package/dist/acp/approvals.d.ts +3 -3
  6. package/dist/acp/approvals.js +73 -115
  7. package/dist/acp/approvals.js.map +1 -1
  8. package/dist/acp/sessions/options.js +11 -25
  9. package/dist/acp/sessions/options.js.map +1 -1
  10. package/dist/acp/utils/tool-kind.js +1 -5
  11. package/dist/acp/utils/tool-kind.js.map +1 -1
  12. package/dist/chat/app.d.ts +5 -1
  13. package/dist/chat/app.js +322 -202
  14. package/dist/chat/app.js.map +1 -1
  15. package/dist/chat/approvals.d.ts +4 -3
  16. package/dist/chat/approvals.js +11 -45
  17. package/dist/chat/approvals.js.map +1 -1
  18. package/dist/chat/components/ChatMessage.d.ts +1 -2
  19. package/dist/chat/components/ChatMessage.js +4 -5
  20. package/dist/chat/components/ChatMessage.js.map +1 -1
  21. package/dist/chat/components/EmptyChatBanner.js +2 -3
  22. package/dist/chat/components/EmptyChatBanner.js.map +1 -1
  23. package/dist/chat/components/StatusBar.js +6 -2
  24. package/dist/chat/components/StatusBar.js.map +1 -1
  25. package/dist/chat/components/ThoughtEvent.d.ts +6 -0
  26. package/dist/chat/components/ThoughtEvent.js +30 -0
  27. package/dist/chat/components/ThoughtEvent.js.map +1 -0
  28. package/dist/chat/components/ToolEvent.js +1 -1
  29. package/dist/chat/components/ToolEvent.js.map +1 -1
  30. package/dist/chat/components/Transcript.d.ts +7 -2
  31. package/dist/chat/components/Transcript.js +6 -2
  32. package/dist/chat/components/Transcript.js.map +1 -1
  33. package/dist/chat/components/markdown/BlockRenderer.js +7 -7
  34. package/dist/chat/components/markdown/BlockRenderer.js.map +1 -1
  35. package/dist/chat/components/markdown/MarkdownMessage.js +1 -1
  36. package/dist/chat/components/markdown/MarkdownMessage.js.map +1 -1
  37. package/dist/chat/components/shared.js +2 -0
  38. package/dist/chat/components/shared.js.map +1 -1
  39. package/dist/chat/index.d.ts +4 -0
  40. package/dist/chat/index.js +17 -3
  41. package/dist/chat/index.js.map +1 -1
  42. package/dist/chat/steering.d.ts +20 -0
  43. package/dist/chat/steering.js +67 -0
  44. package/dist/chat/steering.js.map +1 -0
  45. package/dist/chat/types.d.ts +5 -1
  46. package/dist/cli.js +91 -13
  47. package/dist/cli.js.map +1 -1
  48. package/dist/configure/app.d.ts +1 -1
  49. package/dist/configure/app.js +581 -303
  50. package/dist/configure/app.js.map +1 -1
  51. package/dist/configure/components/MenuScreen.d.ts +4 -2
  52. package/dist/configure/components/MenuScreen.js +33 -6
  53. package/dist/configure/components/MenuScreen.js.map +1 -1
  54. package/dist/configure/components/SelectMenuItem.d.ts +1 -0
  55. package/dist/configure/components/SelectMenuItem.js +19 -10
  56. package/dist/configure/components/SelectMenuItem.js.map +1 -1
  57. package/dist/configure/index.js +4 -2
  58. package/dist/configure/index.js.map +1 -1
  59. package/dist/configure/types.d.ts +14 -12
  60. package/dist/configure/utils.d.ts +2 -0
  61. package/dist/configure/utils.js +21 -2
  62. package/dist/configure/utils.js.map +1 -1
  63. package/dist/core/agent/index.d.ts +3 -3
  64. package/dist/core/agent/index.js +20 -25
  65. package/dist/core/agent/index.js.map +1 -1
  66. package/dist/core/agent/mode-aware-tool-registry.js +2 -1
  67. package/dist/core/agent/mode-aware-tool-registry.js.map +1 -1
  68. package/dist/core/approvals/intervention.d.ts +34 -0
  69. package/dist/core/approvals/intervention.js +94 -0
  70. package/dist/core/approvals/intervention.js.map +1 -0
  71. package/dist/core/config.d.ts +49 -28
  72. package/dist/core/config.js +85 -26
  73. package/dist/core/config.js.map +1 -1
  74. package/dist/core/context/index.d.ts +11 -2
  75. package/dist/core/context/index.js +54 -4
  76. package/dist/core/context/index.js.map +1 -1
  77. package/dist/core/context/model-extractor.d.ts +13 -0
  78. package/dist/core/context/model-extractor.js +98 -0
  79. package/dist/core/context/model-extractor.js.map +1 -0
  80. package/dist/core/index.d.ts +6 -2
  81. package/dist/core/index.js +6 -1
  82. package/dist/core/index.js.map +1 -1
  83. package/dist/core/mcp/config.d.ts +28 -0
  84. package/dist/core/mcp/index.d.ts +5 -3
  85. package/dist/core/mcp/index.js +4 -2
  86. package/dist/core/mcp/index.js.map +1 -1
  87. package/dist/core/mcp/manager.d.ts +14 -1
  88. package/dist/core/mcp/manager.js +76 -4
  89. package/dist/core/mcp/manager.js.map +1 -1
  90. package/dist/core/mcp/oauth/callback-server.d.ts +16 -0
  91. package/dist/core/mcp/oauth/callback-server.js +134 -0
  92. package/dist/core/mcp/oauth/callback-server.js.map +1 -0
  93. package/dist/core/mcp/oauth/identity.d.ts +9 -0
  94. package/dist/core/mcp/oauth/identity.js +31 -0
  95. package/dist/core/mcp/oauth/identity.js.map +1 -0
  96. package/dist/core/mcp/oauth/index.d.ts +11 -0
  97. package/dist/core/mcp/oauth/index.js +15 -0
  98. package/dist/core/mcp/oauth/index.js.map +1 -0
  99. package/dist/core/mcp/oauth/provider.d.ts +43 -0
  100. package/dist/core/mcp/oauth/provider.js +203 -0
  101. package/dist/core/mcp/oauth/provider.js.map +1 -0
  102. package/dist/core/mcp/oauth/service.d.ts +29 -0
  103. package/dist/core/mcp/oauth/service.js +139 -0
  104. package/dist/core/mcp/oauth/service.js.map +1 -0
  105. package/dist/core/mcp/oauth/store.d.ts +14 -0
  106. package/dist/core/mcp/oauth/store.js +86 -0
  107. package/dist/core/mcp/oauth/store.js.map +1 -0
  108. package/dist/core/mcp/oauth/types.d.ts +87 -0
  109. package/dist/core/mcp/oauth/types.js +45 -0
  110. package/dist/core/mcp/oauth/types.js.map +1 -0
  111. package/dist/core/mcp/types.d.ts +56 -0
  112. package/dist/core/mcp/types.js +3 -0
  113. package/dist/core/mcp/types.js.map +1 -1
  114. package/dist/core/memory/file-store.d.ts +24 -0
  115. package/dist/core/memory/file-store.js +151 -0
  116. package/dist/core/memory/file-store.js.map +1 -0
  117. package/dist/core/memory/index.d.ts +2 -5
  118. package/dist/core/memory/index.js +2 -3
  119. package/dist/core/memory/index.js.map +1 -1
  120. package/dist/core/memory/runtime.d.ts +4 -0
  121. package/dist/core/memory/runtime.js +37 -0
  122. package/dist/core/memory/runtime.js.map +1 -0
  123. package/dist/core/models/anthropic.js +24 -1
  124. package/dist/core/models/anthropic.js.map +1 -1
  125. package/dist/core/models/moonshot.js +33 -1
  126. package/dist/core/models/moonshot.js.map +1 -1
  127. package/dist/core/modes/definitions.d.ts +19 -0
  128. package/dist/core/modes/definitions.js +99 -0
  129. package/dist/core/modes/definitions.js.map +1 -0
  130. package/dist/core/modes/index.d.ts +3 -0
  131. package/dist/core/modes/index.js +4 -0
  132. package/dist/core/modes/index.js.map +1 -0
  133. package/dist/core/modes/registry.d.ts +9 -0
  134. package/dist/core/modes/registry.js +57 -0
  135. package/dist/core/modes/registry.js.map +1 -0
  136. package/dist/core/modes/schema.d.ts +5 -0
  137. package/dist/core/modes/schema.js +6 -0
  138. package/dist/core/modes/schema.js.map +1 -0
  139. package/dist/core/prompts/agents/research.md +8 -8
  140. package/dist/core/prompts/bundled.d.ts +3 -0
  141. package/dist/core/prompts/bundled.js +14 -0
  142. package/dist/core/prompts/bundled.js.map +1 -0
  143. package/dist/core/prompts/environment.d.ts +0 -1
  144. package/dist/core/prompts/environment.js +0 -2
  145. package/dist/core/prompts/environment.js.map +1 -1
  146. package/dist/core/prompts/index.d.ts +1 -4
  147. package/dist/core/prompts/index.js +1 -7
  148. package/dist/core/prompts/index.js.map +1 -1
  149. package/dist/core/prompts/modes/agent.md +3 -0
  150. package/dist/core/prompts/modes/ask.md +5 -3
  151. package/dist/core/prompts/modes/plan.md +2 -2
  152. package/dist/core/prompts/session-mode-appendix.d.ts +3 -9
  153. package/dist/core/prompts/session-mode-appendix.js +32 -69
  154. package/dist/core/prompts/session-mode-appendix.js.map +1 -1
  155. package/dist/core/prompts/static/environment.md +2 -2
  156. package/dist/core/prompts/static/init.md +25 -0
  157. package/dist/core/prompts/static/memory.md +9 -123
  158. package/dist/core/prompts/static/planning.md +1 -1
  159. package/dist/core/prompts/static/skills.md +6 -5
  160. package/dist/core/prompts/static/subagents.md +2 -2
  161. package/dist/core/prompts/static/web-search.md +2 -1
  162. package/dist/core/prompts/system.js +8 -22
  163. package/dist/core/prompts/system.js.map +1 -1
  164. package/dist/core/skills/built-in/hooman-config/SKILL.md +105 -32
  165. package/dist/core/skills/built-in/hooman-skills/SKILL.md +1 -1
  166. package/dist/core/skills/index.d.ts +1 -0
  167. package/dist/core/skills/index.js +1 -0
  168. package/dist/core/skills/index.js.map +1 -1
  169. package/dist/core/skills/plugin.d.ts +7 -0
  170. package/dist/core/skills/plugin.js +40 -0
  171. package/dist/core/skills/plugin.js.map +1 -0
  172. package/dist/core/state/agent-app-state.d.ts +1 -1
  173. package/dist/core/state/agent-app-state.js +1 -1
  174. package/dist/core/state/session-mode.d.ts +2 -9
  175. package/dist/core/state/session-mode.js +4 -12
  176. package/dist/core/state/session-mode.js.map +1 -1
  177. package/dist/core/state/tool-approvals.d.ts +4 -8
  178. package/dist/core/state/tool-approvals.js +14 -76
  179. package/dist/core/state/tool-approvals.js.map +1 -1
  180. package/dist/core/subagents/index.d.ts +3 -0
  181. package/dist/core/subagents/index.js +4 -0
  182. package/dist/core/subagents/index.js.map +1 -0
  183. package/dist/core/subagents/research.d.ts +16 -0
  184. package/dist/core/subagents/research.js +58 -0
  185. package/dist/core/subagents/research.js.map +1 -0
  186. package/dist/core/{agents → subagents}/runner.d.ts +6 -5
  187. package/dist/core/{agents → subagents}/runner.js +8 -10
  188. package/dist/core/subagents/runner.js.map +1 -0
  189. package/dist/core/{agents/tools.d.ts → subagents/tool.d.ts} +6 -6
  190. package/dist/core/{agents/tools.js → subagents/tool.js} +14 -16
  191. package/dist/core/subagents/tool.js.map +1 -0
  192. package/dist/core/tools/plan.js +2 -6
  193. package/dist/core/tools/plan.js.map +1 -1
  194. package/dist/core/tools/time.js +1 -1
  195. package/dist/core/tools/time.js.map +1 -1
  196. package/dist/core/utils/browser.d.ts +1 -0
  197. package/dist/core/utils/browser.js +25 -0
  198. package/dist/core/utils/browser.js.map +1 -0
  199. package/dist/core/utils/paths.d.ts +2 -4
  200. package/dist/core/utils/paths.js +2 -4
  201. package/dist/core/utils/paths.js.map +1 -1
  202. package/dist/daemon/approvals.d.ts +2 -2
  203. package/dist/daemon/approvals.js +51 -56
  204. package/dist/daemon/approvals.js.map +1 -1
  205. package/dist/daemon/index.js +9 -6
  206. package/dist/daemon/index.js.map +1 -1
  207. package/dist/exec/approvals.d.ts +2 -4
  208. package/dist/exec/approvals.js +16 -48
  209. package/dist/exec/approvals.js.map +1 -1
  210. package/dist/index.d.ts +13 -18
  211. package/dist/index.js +9 -11
  212. package/dist/index.js.map +1 -1
  213. package/package.json +5 -18
  214. package/dist/chat/components/ScrollView.d.ts +0 -106
  215. package/dist/chat/components/ScrollView.js +0 -80
  216. package/dist/chat/components/ScrollView.js.map +0 -1
  217. package/dist/chat/components/TranscriptViewport.d.ts +0 -9
  218. package/dist/chat/components/TranscriptViewport.js +0 -124
  219. package/dist/chat/components/TranscriptViewport.js.map +0 -1
  220. package/dist/core/agents/definitions.d.ts +0 -12
  221. package/dist/core/agents/definitions.js +0 -20
  222. package/dist/core/agents/definitions.js.map +0 -1
  223. package/dist/core/agents/index.d.ts +0 -4
  224. package/dist/core/agents/index.js +0 -5
  225. package/dist/core/agents/index.js.map +0 -1
  226. package/dist/core/agents/registry.d.ts +0 -5
  227. package/dist/core/agents/registry.js +0 -84
  228. package/dist/core/agents/registry.js.map +0 -1
  229. package/dist/core/agents/runner.js.map +0 -1
  230. package/dist/core/agents/tools.js.map +0 -1
  231. package/dist/core/inference/embedder.d.ts +0 -26
  232. package/dist/core/inference/embedder.js +0 -85
  233. package/dist/core/inference/embedder.js.map +0 -1
  234. package/dist/core/inference/index.d.ts +0 -9
  235. package/dist/core/inference/index.js +0 -13
  236. package/dist/core/inference/index.js.map +0 -1
  237. package/dist/core/inference/loader.d.ts +0 -16
  238. package/dist/core/inference/loader.js +0 -129
  239. package/dist/core/inference/loader.js.map +0 -1
  240. package/dist/core/inference/reranker.d.ts +0 -28
  241. package/dist/core/inference/reranker.js +0 -66
  242. package/dist/core/inference/reranker.js.map +0 -1
  243. package/dist/core/memory/brain.d.ts +0 -25
  244. package/dist/core/memory/brain.js +0 -137
  245. package/dist/core/memory/brain.js.map +0 -1
  246. package/dist/core/memory/database.d.ts +0 -4
  247. package/dist/core/memory/database.js +0 -87
  248. package/dist/core/memory/database.js.map +0 -1
  249. package/dist/core/memory/tools.d.ts +0 -16
  250. package/dist/core/memory/tools.js +0 -110
  251. package/dist/core/memory/tools.js.map +0 -1
  252. package/dist/core/memory/types.d.ts +0 -11
  253. package/dist/core/memory/types.js +0 -2
  254. package/dist/core/memory/types.js.map +0 -1
  255. package/dist/core/prompts/skills.d.ts +0 -15
  256. package/dist/core/prompts/skills.js +0 -92
  257. package/dist/core/prompts/skills.js.map +0 -1
  258. package/dist/core/prompts/static/wiki.md +0 -25
  259. package/dist/core/wiki/converters.d.ts +0 -12
  260. package/dist/core/wiki/converters.js +0 -73
  261. package/dist/core/wiki/converters.js.map +0 -1
  262. package/dist/core/wiki/database.d.ts +0 -39
  263. package/dist/core/wiki/database.js +0 -177
  264. package/dist/core/wiki/database.js.map +0 -1
  265. package/dist/core/wiki/index.d.ts +0 -7
  266. package/dist/core/wiki/index.js +0 -5
  267. package/dist/core/wiki/index.js.map +0 -1
  268. package/dist/core/wiki/storage.d.ts +0 -38
  269. package/dist/core/wiki/storage.js +0 -206
  270. package/dist/core/wiki/storage.js.map +0 -1
  271. package/dist/core/wiki/tools.d.ts +0 -5
  272. package/dist/core/wiki/tools.js +0 -32
  273. 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 { Brain } from "./brain.js";
2
- export type { Memory, MemoryType } from "./types.js";
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 { Brain } from "./brain.js";
2
- export { open, prepare } from "./database.js";
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,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,MAAM,IAAI,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
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":"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"}
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 VercelModel({
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,WAAW,CAAC;QACrB,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC;QACzB,GAAG,MAAM;KACV,CAAC,CAAC;AACL,CAAC"}
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,6 @@
1
+ export const MODE_IDS = ["agent", "ask", "plan"];
2
+ export const DEFAULT_SESSION_MODE = "agent";
3
+ export function isKnownSessionMode(mode) {
4
+ return MODE_IDS.includes(mode);
5
+ }
6
+ //# sourceMappingURL=schema.js.map
@@ -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 Agent
1
+ ## Research mode
2
2
 
3
- You are the specialized research sub-agent for {{ name }}. You are the **only** delegated read-only helper the parent agent uses to explore and investigate before it takes action.
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
- Your job is to explore the relevant working directory and codebase, pull in external sources when useful, and return **high-signal findings** so the parent agent knows what exists, how things fit together, and what is still uncertain.
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
- How to work:
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.
@@ -0,0 +1,3 @@
1
+ export declare function bundledPromptPath(...parts: string[]): string;
2
+ export declare function hasBundledPrompt(...parts: string[]): boolean;
3
+ export declare function readBundledPrompt(...parts: string[]): string;