@poping/yome 0.0.2

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 (156) hide show
  1. package/README.md +54 -0
  2. package/bin/yome.js +2 -0
  3. package/dist/agent.d.ts +43 -0
  4. package/dist/agent.js +140 -0
  5. package/dist/agent.js.map +1 -0
  6. package/dist/config.d.ts +41 -0
  7. package/dist/config.js +108 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/context.d.ts +1 -0
  10. package/dist/context.js +101 -0
  11. package/dist/context.js.map +1 -0
  12. package/dist/index.d.ts +1 -0
  13. package/dist/index.js +65 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/llm.d.ts +13 -0
  16. package/dist/llm.js +317 -0
  17. package/dist/llm.js.map +1 -0
  18. package/dist/loops/chain.d.ts +15 -0
  19. package/dist/loops/chain.js +105 -0
  20. package/dist/loops/chain.js.map +1 -0
  21. package/dist/loops/evaluator.d.ts +12 -0
  22. package/dist/loops/evaluator.js +100 -0
  23. package/dist/loops/evaluator.js.map +1 -0
  24. package/dist/loops/index.d.ts +12 -0
  25. package/dist/loops/index.js +39 -0
  26. package/dist/loops/index.js.map +1 -0
  27. package/dist/loops/orchestrator.d.ts +13 -0
  28. package/dist/loops/orchestrator.js +107 -0
  29. package/dist/loops/orchestrator.js.map +1 -0
  30. package/dist/loops/parallel.d.ts +6 -0
  31. package/dist/loops/parallel.js +48 -0
  32. package/dist/loops/parallel.js.map +1 -0
  33. package/dist/loops/route.d.ts +13 -0
  34. package/dist/loops/route.js +88 -0
  35. package/dist/loops/route.js.map +1 -0
  36. package/dist/loops/simple.d.ts +6 -0
  37. package/dist/loops/simple.js +46 -0
  38. package/dist/loops/simple.js.map +1 -0
  39. package/dist/loops/types.d.ts +32 -0
  40. package/dist/loops/types.js +9 -0
  41. package/dist/loops/types.js.map +1 -0
  42. package/dist/permissions/checker.d.ts +18 -0
  43. package/dist/permissions/checker.js +89 -0
  44. package/dist/permissions/checker.js.map +1 -0
  45. package/dist/permissions/index.d.ts +4 -0
  46. package/dist/permissions/index.js +4 -0
  47. package/dist/permissions/index.js.map +1 -0
  48. package/dist/permissions/loader.d.ts +22 -0
  49. package/dist/permissions/loader.js +104 -0
  50. package/dist/permissions/loader.js.map +1 -0
  51. package/dist/permissions/ruleParser.d.ts +23 -0
  52. package/dist/permissions/ruleParser.js +59 -0
  53. package/dist/permissions/ruleParser.js.map +1 -0
  54. package/dist/permissions/types.d.ts +37 -0
  55. package/dist/permissions/types.js +2 -0
  56. package/dist/permissions/types.js.map +1 -0
  57. package/dist/sessions.d.ts +20 -0
  58. package/dist/sessions.js +119 -0
  59. package/dist/sessions.js.map +1 -0
  60. package/dist/skills/index.d.ts +2 -0
  61. package/dist/skills/index.js +2 -0
  62. package/dist/skills/index.js.map +1 -0
  63. package/dist/skills/loader.d.ts +4 -0
  64. package/dist/skills/loader.js +125 -0
  65. package/dist/skills/loader.js.map +1 -0
  66. package/dist/skills/types.d.ts +22 -0
  67. package/dist/skills/types.js +2 -0
  68. package/dist/skills/types.js.map +1 -0
  69. package/dist/subagent/agentTool.d.ts +7 -0
  70. package/dist/subagent/agentTool.js +121 -0
  71. package/dist/subagent/agentTool.js.map +1 -0
  72. package/dist/subagent/builtinAgents.d.ts +3 -0
  73. package/dist/subagent/builtinAgents.js +23 -0
  74. package/dist/subagent/builtinAgents.js.map +1 -0
  75. package/dist/subagent/index.d.ts +6 -0
  76. package/dist/subagent/index.js +5 -0
  77. package/dist/subagent/index.js.map +1 -0
  78. package/dist/subagent/loadAgents.d.ts +2 -0
  79. package/dist/subagent/loadAgents.js +98 -0
  80. package/dist/subagent/loadAgents.js.map +1 -0
  81. package/dist/subagent/runAgent.d.ts +18 -0
  82. package/dist/subagent/runAgent.js +115 -0
  83. package/dist/subagent/runAgent.js.map +1 -0
  84. package/dist/subagent/types.d.ts +20 -0
  85. package/dist/subagent/types.js +2 -0
  86. package/dist/subagent/types.js.map +1 -0
  87. package/dist/toggleState.d.ts +6 -0
  88. package/dist/toggleState.js +58 -0
  89. package/dist/toggleState.js.map +1 -0
  90. package/dist/tools/bash.d.ts +2 -0
  91. package/dist/tools/bash.js +78 -0
  92. package/dist/tools/bash.js.map +1 -0
  93. package/dist/tools/edit.d.ts +2 -0
  94. package/dist/tools/edit.js +103 -0
  95. package/dist/tools/edit.js.map +1 -0
  96. package/dist/tools/glob.d.ts +2 -0
  97. package/dist/tools/glob.js +44 -0
  98. package/dist/tools/glob.js.map +1 -0
  99. package/dist/tools/grep.d.ts +2 -0
  100. package/dist/tools/grep.js +89 -0
  101. package/dist/tools/grep.js.map +1 -0
  102. package/dist/tools/index.d.ts +15 -0
  103. package/dist/tools/index.js +99 -0
  104. package/dist/tools/index.js.map +1 -0
  105. package/dist/tools/ls.d.ts +2 -0
  106. package/dist/tools/ls.js +47 -0
  107. package/dist/tools/ls.js.map +1 -0
  108. package/dist/tools/read.d.ts +2 -0
  109. package/dist/tools/read.js +52 -0
  110. package/dist/tools/read.js.map +1 -0
  111. package/dist/tools/write.d.ts +2 -0
  112. package/dist/tools/write.js +46 -0
  113. package/dist/tools/write.js.map +1 -0
  114. package/dist/types.d.ts +82 -0
  115. package/dist/types.js +13 -0
  116. package/dist/types.js.map +1 -0
  117. package/dist/ui/AgentPicker.d.ts +12 -0
  118. package/dist/ui/AgentPicker.js +32 -0
  119. package/dist/ui/AgentPicker.js.map +1 -0
  120. package/dist/ui/App.d.ts +6 -0
  121. package/dist/ui/App.js +327 -0
  122. package/dist/ui/App.js.map +1 -0
  123. package/dist/ui/Banner.d.ts +1 -0
  124. package/dist/ui/Banner.js +14 -0
  125. package/dist/ui/Banner.js.map +1 -0
  126. package/dist/ui/InputBar.d.ts +17 -0
  127. package/dist/ui/InputBar.js +93 -0
  128. package/dist/ui/InputBar.js.map +1 -0
  129. package/dist/ui/Markdown.d.ts +4 -0
  130. package/dist/ui/Markdown.js +97 -0
  131. package/dist/ui/Markdown.js.map +1 -0
  132. package/dist/ui/MessageList.d.ts +17 -0
  133. package/dist/ui/MessageList.js +50 -0
  134. package/dist/ui/MessageList.js.map +1 -0
  135. package/dist/ui/ModelPicker.d.ts +9 -0
  136. package/dist/ui/ModelPicker.js +70 -0
  137. package/dist/ui/ModelPicker.js.map +1 -0
  138. package/dist/ui/PermissionPrompt.d.ts +10 -0
  139. package/dist/ui/PermissionPrompt.js +37 -0
  140. package/dist/ui/PermissionPrompt.js.map +1 -0
  141. package/dist/ui/SessionPicker.d.ts +8 -0
  142. package/dist/ui/SessionPicker.js +64 -0
  143. package/dist/ui/SessionPicker.js.map +1 -0
  144. package/dist/ui/Spinner.d.ts +3 -0
  145. package/dist/ui/Spinner.js +15 -0
  146. package/dist/ui/Spinner.js.map +1 -0
  147. package/dist/ui/TogglePicker.d.ts +16 -0
  148. package/dist/ui/TogglePicker.js +35 -0
  149. package/dist/ui/TogglePicker.js.map +1 -0
  150. package/dist/ui/ToolResult.d.ts +6 -0
  151. package/dist/ui/ToolResult.js +59 -0
  152. package/dist/ui/ToolResult.js.map +1 -0
  153. package/dist/utils/imagePaste.d.ts +12 -0
  154. package/dist/utils/imagePaste.js +54 -0
  155. package/dist/utils/imagePaste.js.map +1 -0
  156. package/package.json +44 -0
@@ -0,0 +1,121 @@
1
+ import { runAgent } from './runAgent.js';
2
+ import { loadAgentDefinitions } from './loadAgents.js';
3
+ import { GENERAL_PURPOSE_AGENT } from './builtinAgents.js';
4
+ let _cachedAgents = null;
5
+ let _cachedAllAgents = null;
6
+ export function getActiveAgents() {
7
+ if (!_cachedAgents) {
8
+ _cachedAgents = loadAgentDefinitions().activeAgents;
9
+ }
10
+ return _cachedAgents;
11
+ }
12
+ export function getAllAgents() {
13
+ if (!_cachedAllAgents) {
14
+ _cachedAllAgents = loadAgentDefinitions(true).activeAgents;
15
+ }
16
+ return _cachedAllAgents;
17
+ }
18
+ export function clearAgentCache() {
19
+ _cachedAgents = null;
20
+ _cachedAllAgents = null;
21
+ }
22
+ function getAgentToolDescription() {
23
+ const agents = getActiveAgents();
24
+ const agentLines = agents.map((a) => {
25
+ const tools = a.tools?.includes('*') ? 'All tools' : (a.tools?.join(', ') ?? 'All tools');
26
+ return `- ${a.agentType}: ${a.whenToUse} (Tools: ${tools})`;
27
+ }).join('\n');
28
+ return `Launch a new subagent to handle a complex, multi-step task autonomously.
29
+
30
+ Each subagent runs in an isolated context with its own conversation history, and returns a single result when done.
31
+
32
+ Available agent types:
33
+ ${agentLines}
34
+
35
+ When using this tool, specify a subagent_type to select which agent to use. If omitted, the general-purpose agent is used.
36
+
37
+ When NOT to use this tool:
38
+ - If you want to read a specific file, use the Read tool directly.
39
+ - If you are searching for a pattern, use the Grep or Glob tool directly.
40
+ - Simple tasks that need 1-2 tool calls — do them yourself.
41
+
42
+ Usage notes:
43
+ - Write a thorough prompt: the subagent starts with zero context. Explain what you're trying to do, what you've learned, and what to look for.
44
+ - The subagent's result is NOT visible to the user. You must relay the key findings back.
45
+ - Clearly state whether the subagent should write code or only do research.
46
+ - You can launch multiple subagents in parallel by including multiple Agent tool calls in one message.`;
47
+ }
48
+ export function createAgentTool(config) {
49
+ return {
50
+ name: 'Agent',
51
+ description: getAgentToolDescription(),
52
+ inputSchema: {
53
+ type: 'object',
54
+ properties: {
55
+ description: {
56
+ type: 'string',
57
+ description: 'A short (3-5 word) description of the task',
58
+ },
59
+ prompt: {
60
+ type: 'string',
61
+ description: 'The task for the subagent to perform. Be thorough — it has no context from this conversation.',
62
+ },
63
+ subagent_type: {
64
+ type: 'string',
65
+ description: 'The type of agent to use. If omitted, uses general-purpose.',
66
+ },
67
+ },
68
+ required: ['description', 'prompt'],
69
+ },
70
+ isReadOnly() { return false; },
71
+ validateInput(input) {
72
+ if (typeof input.prompt !== 'string' || !input.prompt.trim()) {
73
+ return { valid: false, error: 'prompt is required' };
74
+ }
75
+ if (typeof input.description !== 'string' || !input.description.trim()) {
76
+ return { valid: false, error: 'description is required' };
77
+ }
78
+ return { valid: true };
79
+ },
80
+ async execute(input, signal) {
81
+ const prompt = input.prompt;
82
+ const description = input.description;
83
+ const subagentType = input.subagent_type;
84
+ const agents = getActiveAgents();
85
+ let agent;
86
+ if (subagentType) {
87
+ const found = agents.find((a) => a.agentType === subagentType);
88
+ if (!found) {
89
+ const available = agents.map((a) => a.agentType).join(', ');
90
+ return `Error: Agent type '${subagentType}' not found. Available: ${available}`;
91
+ }
92
+ agent = found;
93
+ }
94
+ else {
95
+ agent = agents.find((a) => a.agentType === GENERAL_PURPOSE_AGENT.agentType) ?? GENERAL_PURPOSE_AGENT;
96
+ }
97
+ try {
98
+ const result = await runAgent({
99
+ config,
100
+ agent,
101
+ prompt,
102
+ signal,
103
+ });
104
+ const lines = [
105
+ `Agent "${description}" completed.`,
106
+ `Tokens: ${result.inputTokens} in / ${result.outputTokens} out`,
107
+ ``,
108
+ result.result,
109
+ ];
110
+ return lines.join('\n');
111
+ }
112
+ catch (err) {
113
+ if (err.name === 'AbortError' || err.message?.includes('cancelled')) {
114
+ return `Agent "${description}" was cancelled.`;
115
+ }
116
+ return `Agent "${description}" failed: ${err.message}`;
117
+ }
118
+ },
119
+ };
120
+ }
121
+ //# sourceMappingURL=agentTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentTool.js","sourceRoot":"","sources":["../../src/subagent/agentTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { AgentDefinition } from './types.js';
2
+ export declare const GENERAL_PURPOSE_AGENT: AgentDefinition;
3
+ export declare function getBuiltInAgents(): AgentDefinition[];
@@ -0,0 +1,23 @@
1
+ export const GENERAL_PURPOSE_AGENT = {
2
+ agentType: 'general-purpose',
3
+ whenToUse: 'General-purpose agent for researching complex questions, searching for code, and executing multi-step tasks.',
4
+ tools: ['*'],
5
+ source: 'built-in',
6
+ getSystemPrompt: () => `You are a subagent for Yome, an AI coding assistant. Given the user's task, use the tools available to complete it fully.
7
+
8
+ Your strengths:
9
+ - Searching for code, configurations, and patterns across large codebases
10
+ - Analyzing multiple files to understand system architecture
11
+ - Investigating complex questions that require exploring many files
12
+ - Performing multi-step research tasks
13
+
14
+ Guidelines:
15
+ - Be thorough: check multiple locations, consider different naming conventions.
16
+ - NEVER create files unless absolutely necessary. Prefer editing existing files.
17
+ - Use absolute paths when calling tools.
18
+ - When you complete the task, respond with a concise report covering what was done and any key findings.`,
19
+ };
20
+ export function getBuiltInAgents() {
21
+ return [GENERAL_PURPOSE_AGENT];
22
+ }
23
+ //# sourceMappingURL=builtinAgents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtinAgents.js","sourceRoot":"","sources":["../../src/subagent/builtinAgents.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,qBAAqB,GAAoB;IACpD,SAAS,EAAE,iBAAiB;IAC5B,SAAS,EACP,8GAA8G;IAChH,KAAK,EAAE,CAAC,GAAG,CAAC;IACZ,MAAM,EAAE,UAAU;IAClB,eAAe,EAAE,GAAG,EAAE,CACpB;;;;;;;;;;;;yGAYqG;CACxG,CAAC;AAEF,MAAM,UAAU,gBAAgB;IAC9B,OAAO,CAAC,qBAAqB,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export type { AgentDefinition, AgentDefinitionsResult, AgentSource } from './types.js';
2
+ export { loadAgentDefinitions } from './loadAgents.js';
3
+ export { getBuiltInAgents } from './builtinAgents.js';
4
+ export { runAgent } from './runAgent.js';
5
+ export type { SubagentResult } from './runAgent.js';
6
+ export { createAgentTool, getActiveAgents, getAllAgents, clearAgentCache } from './agentTool.js';
@@ -0,0 +1,5 @@
1
+ export { loadAgentDefinitions } from './loadAgents.js';
2
+ export { getBuiltInAgents } from './builtinAgents.js';
3
+ export { runAgent } from './runAgent.js';
4
+ export { createAgentTool, getActiveAgents, getAllAgents, clearAgentCache } from './agentTool.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/subagent/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { AgentDefinitionsResult } from './types.js';
2
+ export declare function loadAgentDefinitions(includeDisabled?: boolean): AgentDefinitionsResult;
@@ -0,0 +1,98 @@
1
+ import { readFileSync, readdirSync, existsSync } from 'fs';
2
+ import { join } from 'path';
3
+ import { homedir } from 'os';
4
+ import { isAgentDisabled } from '../toggleState.js';
5
+ import { getBuiltInAgents } from './builtinAgents.js';
6
+ function parseFrontmatter(content) {
7
+ const match = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
8
+ if (!match)
9
+ return { frontmatter: {}, body: content };
10
+ const raw = match[1];
11
+ const body = match[2];
12
+ const fm = {};
13
+ for (const line of raw.split('\n')) {
14
+ const colonIdx = line.indexOf(':');
15
+ if (colonIdx === -1)
16
+ continue;
17
+ const key = line.slice(0, colonIdx).trim();
18
+ let value = line.slice(colonIdx + 1).trim();
19
+ if (value === 'true')
20
+ value = true;
21
+ else if (value === 'false')
22
+ value = false;
23
+ else if (typeof value === 'string' && /^\d+$/.test(value))
24
+ value = parseInt(value, 10);
25
+ // Handle YAML arrays: tools: [Read, Write, Bash]
26
+ if (typeof value === 'string' && value.startsWith('[') && value.endsWith(']')) {
27
+ value = value.slice(1, -1).split(',').map((s) => s.trim()).filter(Boolean);
28
+ }
29
+ fm[key] = value;
30
+ }
31
+ return { frontmatter: fm, body };
32
+ }
33
+ function loadAgentsFromDir(dir, source) {
34
+ if (!existsSync(dir))
35
+ return [];
36
+ const agents = [];
37
+ let entries;
38
+ try {
39
+ entries = readdirSync(dir);
40
+ }
41
+ catch {
42
+ return [];
43
+ }
44
+ for (const entry of entries) {
45
+ if (!entry.endsWith('.md'))
46
+ continue;
47
+ const filePath = join(dir, entry);
48
+ let content;
49
+ try {
50
+ content = readFileSync(filePath, 'utf-8');
51
+ }
52
+ catch {
53
+ continue;
54
+ }
55
+ const { frontmatter, body } = parseFrontmatter(content);
56
+ if (!frontmatter.name || !frontmatter.description)
57
+ continue;
58
+ const systemPrompt = body.trim();
59
+ if (!systemPrompt)
60
+ continue;
61
+ const agent = {
62
+ agentType: frontmatter.name,
63
+ whenToUse: frontmatter.description,
64
+ source,
65
+ getSystemPrompt: () => systemPrompt,
66
+ ...(frontmatter.tools ? { tools: frontmatter.tools } : {}),
67
+ ...(frontmatter.disallowedTools ? { disallowedTools: frontmatter.disallowedTools } : {}),
68
+ ...(frontmatter.skills?.length ? { skills: frontmatter.skills } : {}),
69
+ ...(frontmatter.model ? { model: frontmatter.model } : {}),
70
+ ...(frontmatter.maxTurns ? { maxTurns: frontmatter.maxTurns } : {}),
71
+ };
72
+ agents.push(agent);
73
+ }
74
+ return agents;
75
+ }
76
+ export function loadAgentDefinitions(includeDisabled = false) {
77
+ const builtInAgents = getBuiltInAgents();
78
+ const cwd = process.cwd();
79
+ const projectAgentsDir = join(cwd, '.yome', 'agents');
80
+ const userAgentsDir = join(homedir(), '.yome', 'agents');
81
+ const projectAgents = loadAgentsFromDir(projectAgentsDir, 'project');
82
+ const userAgents = loadAgentsFromDir(userAgentsDir, 'user');
83
+ // Priority: project > user > built-in (later overrides earlier)
84
+ const agentMap = new Map();
85
+ for (const a of builtInAgents)
86
+ agentMap.set(a.agentType, a);
87
+ for (const a of userAgents)
88
+ agentMap.set(a.agentType, a);
89
+ for (const a of projectAgents)
90
+ agentMap.set(a.agentType, a);
91
+ const allAgents = [...builtInAgents, ...userAgents, ...projectAgents];
92
+ const deduped = Array.from(agentMap.values());
93
+ const activeAgents = includeDisabled
94
+ ? deduped
95
+ : deduped.filter((a) => !isAgentDisabled(a.agentType));
96
+ return { activeAgents, allAgents };
97
+ }
98
+ //# sourceMappingURL=loadAgents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadAgents.js","sourceRoot":"","sources":["../../src/subagent/loadAgents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { YomeConfig } from '../config.js';
2
+ import type { AgentMessage } from '../types.js';
3
+ import type { AgentDefinition } from './types.js';
4
+ export interface SubagentResult {
5
+ result: string;
6
+ messages: AgentMessage[];
7
+ inputTokens: number;
8
+ outputTokens: number;
9
+ }
10
+ export declare function runAgent(opts: {
11
+ config: YomeConfig;
12
+ agent: AgentDefinition;
13
+ prompt: string;
14
+ signal?: AbortSignal;
15
+ onTextDelta?: (text: string) => void;
16
+ onToolUse?: (name: string, input: Record<string, unknown>) => void;
17
+ onToolResult?: (name: string, result: string) => void;
18
+ }): Promise<SubagentResult>;
@@ -0,0 +1,115 @@
1
+ import { callLLMStream } from '../llm.js';
2
+ import { getAnthropicTools, executeTool } from '../tools/index.js';
3
+ import { loadAllSkills } from '../skills/index.js';
4
+ const DEFAULT_MAX_TURNS = 30;
5
+ const AGENT_TOOL_NAME = 'Agent';
6
+ function resolveAgentTools(agent) {
7
+ // Exclude the Agent tool itself to prevent recursive subagent spawning
8
+ const allTools = getAnthropicTools().filter((t) => t.name !== AGENT_TOOL_NAME);
9
+ // '*' or undefined means all tools
10
+ if (!agent.tools || agent.tools.includes('*')) {
11
+ if (!agent.disallowedTools?.length)
12
+ return allTools;
13
+ const deny = new Set(agent.disallowedTools);
14
+ return allTools.filter((t) => !deny.has(t.name));
15
+ }
16
+ const allowSet = new Set(agent.tools);
17
+ let filtered = allTools.filter((t) => allowSet.has(t.name));
18
+ if (agent.disallowedTools?.length) {
19
+ const deny = new Set(agent.disallowedTools);
20
+ filtered = filtered.filter((t) => !deny.has(t.name));
21
+ }
22
+ return filtered;
23
+ }
24
+ export async function runAgent(opts) {
25
+ const { config, agent, prompt, signal, onTextDelta, onToolUse, onToolResult } = opts;
26
+ const effectiveConfig = agent.model
27
+ ? { ...config, model: agent.model }
28
+ : config;
29
+ const systemPrompt = agent.getSystemPrompt();
30
+ const tools = resolveAgentTools(agent);
31
+ const maxTurns = agent.maxTurns ?? DEFAULT_MAX_TURNS;
32
+ // Isolated message history for this subagent
33
+ const messages = [];
34
+ // Preload skills specified in agent definition
35
+ if (agent.skills?.length) {
36
+ const allSkills = loadAllSkills();
37
+ for (const skillName of agent.skills) {
38
+ const skill = allSkills.find((s) => s.name === skillName);
39
+ if (!skill)
40
+ continue;
41
+ const skillPrompt = skill.getPrompt('');
42
+ messages.push({
43
+ role: 'user',
44
+ content: `[Skill: /${skill.name}]\n\n${skillPrompt}`,
45
+ });
46
+ messages.push({
47
+ role: 'assistant',
48
+ content: `Understood. I have loaded the "${skill.name}" skill and will follow its instructions.`,
49
+ });
50
+ }
51
+ }
52
+ messages.push({ role: 'user', content: prompt });
53
+ let totalInput = 0;
54
+ let totalOutput = 0;
55
+ let lastText = '';
56
+ for (let turn = 0; turn < maxTurns; turn++) {
57
+ if (signal?.aborted) {
58
+ throw new Error('Subagent was cancelled');
59
+ }
60
+ const response = await callLLMStream(effectiveConfig, systemPrompt, messages, tools, (event) => {
61
+ if (event.type === 'text_delta' && event.text) {
62
+ lastText += event.text;
63
+ onTextDelta?.(event.text);
64
+ }
65
+ });
66
+ totalInput += response.usage.input_tokens;
67
+ totalOutput += response.usage.output_tokens;
68
+ messages.push({ role: 'assistant', content: response.content });
69
+ const toolUseBlocks = response.content.filter((b) => b.type === 'tool_use');
70
+ if (toolUseBlocks.length === 0 || response.stop_reason === 'end_turn') {
71
+ break;
72
+ }
73
+ // Execute tool calls
74
+ const toolResults = [];
75
+ for (const block of toolUseBlocks) {
76
+ if (signal?.aborted) {
77
+ throw new Error('Subagent was cancelled');
78
+ }
79
+ onToolUse?.(block.name, block.input);
80
+ const result = await executeTool(block.name, block.input, signal);
81
+ onToolResult?.(block.name, result);
82
+ toolResults.push({
83
+ type: 'tool_result',
84
+ tool_use_id: block.id,
85
+ content: result,
86
+ });
87
+ }
88
+ messages.push({ role: 'user', content: toolResults });
89
+ lastText = '';
90
+ }
91
+ // Extract final text from the last assistant message
92
+ const finalText = extractFinalText(messages);
93
+ return {
94
+ result: finalText,
95
+ messages,
96
+ inputTokens: totalInput,
97
+ outputTokens: totalOutput,
98
+ };
99
+ }
100
+ function extractFinalText(messages) {
101
+ for (let i = messages.length - 1; i >= 0; i--) {
102
+ const msg = messages[i];
103
+ if (msg.role !== 'assistant')
104
+ continue;
105
+ if (typeof msg.content === 'string')
106
+ return msg.content;
107
+ const textBlocks = msg.content
108
+ .filter((b) => b.type === 'text')
109
+ .map((b) => b.text);
110
+ if (textBlocks.length > 0)
111
+ return textBlocks.join('\n');
112
+ }
113
+ return '(no output)';
114
+ }
115
+ //# sourceMappingURL=runAgent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runAgent.js","sourceRoot":"","sources":["../../src/subagent/runAgent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export type AgentSource = 'built-in' | 'user' | 'project';
2
+ export interface AgentDefinition {
3
+ agentType: string;
4
+ whenToUse: string;
5
+ tools?: string[];
6
+ disallowedTools?: string[];
7
+ skills?: string[];
8
+ model?: string;
9
+ maxTurns?: number;
10
+ source: AgentSource;
11
+ getSystemPrompt: () => string;
12
+ }
13
+ export interface AgentDefinitionsResult {
14
+ activeAgents: AgentDefinition[];
15
+ allAgents: AgentDefinition[];
16
+ failedFiles?: Array<{
17
+ path: string;
18
+ error: string;
19
+ }>;
20
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/subagent/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export declare function isSkillDisabled(name: string): boolean;
2
+ export declare function isAgentDisabled(name: string): boolean;
3
+ export declare function toggleSkill(name: string): boolean;
4
+ export declare function toggleAgent(name: string): boolean;
5
+ export declare function getDisabledSkills(): string[];
6
+ export declare function getDisabledAgents(): string[];
@@ -0,0 +1,58 @@
1
+ import { readFileSync, writeFileSync, mkdirSync } from 'fs';
2
+ import { join } from 'path';
3
+ import { homedir } from 'os';
4
+ const STATE_DIR = join(homedir(), '.yome');
5
+ const STATE_FILE = join(STATE_DIR, 'disabled.json');
6
+ function load() {
7
+ try {
8
+ return JSON.parse(readFileSync(STATE_FILE, 'utf-8'));
9
+ }
10
+ catch {
11
+ return { skills: [], agents: [] };
12
+ }
13
+ }
14
+ function save(state) {
15
+ mkdirSync(STATE_DIR, { recursive: true });
16
+ writeFileSync(STATE_FILE, JSON.stringify(state, null, 2), 'utf-8');
17
+ }
18
+ export function isSkillDisabled(name) {
19
+ return load().skills.includes(name);
20
+ }
21
+ export function isAgentDisabled(name) {
22
+ return load().agents.includes(name);
23
+ }
24
+ export function toggleSkill(name) {
25
+ const state = load();
26
+ const idx = state.skills.indexOf(name);
27
+ if (idx >= 0) {
28
+ state.skills.splice(idx, 1);
29
+ save(state);
30
+ return true;
31
+ }
32
+ else {
33
+ state.skills.push(name);
34
+ save(state);
35
+ return false;
36
+ }
37
+ }
38
+ export function toggleAgent(name) {
39
+ const state = load();
40
+ const idx = state.agents.indexOf(name);
41
+ if (idx >= 0) {
42
+ state.agents.splice(idx, 1);
43
+ save(state);
44
+ return true;
45
+ }
46
+ else {
47
+ state.agents.push(name);
48
+ save(state);
49
+ return false;
50
+ }
51
+ }
52
+ export function getDisabledSkills() {
53
+ return load().skills;
54
+ }
55
+ export function getDisabledAgents() {
56
+ return load().agents;
57
+ }
58
+ //# sourceMappingURL=toggleState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggleState.js","sourceRoot":"","sources":["../src/toggleState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAOpD,SAAS,IAAI;IACX,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACpC,CAAC;AACH,CAAC;AAED,SAAS,IAAI,CAAC,KAAoB;IAChC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC;IACrB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACb,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC;IACrB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACb,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,EAAE,CAAC,MAAM,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,EAAE,CAAC,MAAM,CAAC;AACvB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ToolDef } from '../types.js';
2
+ export declare const bashTool: ToolDef;
@@ -0,0 +1,78 @@
1
+ import { spawn } from 'child_process';
2
+ import { isContentAllowed, isContentDenied } from '../permissions/checker.js';
3
+ const MAX_OUTPUT = 20_000;
4
+ function runCommand(command, timeout) {
5
+ return new Promise((resolve) => {
6
+ const proc = spawn('sh', ['-c', command], {
7
+ cwd: process.cwd(),
8
+ stdio: ['pipe', 'pipe', 'pipe'],
9
+ env: process.env,
10
+ });
11
+ let stdout = '';
12
+ let stderr = '';
13
+ let killed = false;
14
+ const timer = setTimeout(() => {
15
+ killed = true;
16
+ proc.kill('SIGTERM');
17
+ }, timeout);
18
+ proc.stdout.on('data', (data) => { stdout += data.toString(); });
19
+ proc.stderr.on('data', (data) => { stderr += data.toString(); });
20
+ proc.on('close', (code) => {
21
+ clearTimeout(timer);
22
+ if (killed) {
23
+ resolve({ stdout, stderr: `Command timed out after ${timeout / 1000}s`, exitCode: 124 });
24
+ }
25
+ else {
26
+ resolve({ stdout, stderr, exitCode: code ?? 1 });
27
+ }
28
+ });
29
+ proc.on('error', (err) => {
30
+ clearTimeout(timer);
31
+ resolve({ stdout: '', stderr: err.message, exitCode: 1 });
32
+ });
33
+ });
34
+ }
35
+ export const bashTool = {
36
+ name: 'Bash',
37
+ description: 'Execute a shell command and return its output. Commands run in the current working directory.',
38
+ inputSchema: {
39
+ type: 'object',
40
+ properties: {
41
+ command: { type: 'string', description: 'The shell command to execute' },
42
+ timeout: { type: 'number', description: 'Timeout in seconds (default: 30)' },
43
+ },
44
+ required: ['command'],
45
+ },
46
+ isReadOnly() { return false; },
47
+ checkPermissions(input, ctx) {
48
+ const command = input.command ?? '';
49
+ if (isContentDenied(ctx, 'Bash', command)) {
50
+ return { behavior: 'deny', message: `Command denied by permission rule: ${command}` };
51
+ }
52
+ if (isContentAllowed(ctx, 'Bash', command)) {
53
+ return { behavior: 'allow' };
54
+ }
55
+ return { behavior: 'passthrough', message: `Allow Bash to run: ${command}?` };
56
+ },
57
+ validateInput(input) {
58
+ if (typeof input.command !== 'string' || !input.command.trim()) {
59
+ return { valid: false, error: 'command is required' };
60
+ }
61
+ return { valid: true };
62
+ },
63
+ async execute(input) {
64
+ const command = input.command;
65
+ const timeout = (input.timeout || 30) * 1000;
66
+ const { stdout, stderr, exitCode } = await runCommand(command, timeout);
67
+ if (exitCode === 0) {
68
+ const result = stdout.trim();
69
+ if (result.length > MAX_OUTPUT) {
70
+ return result.slice(0, MAX_OUTPUT) + `\n\n[Output truncated at ${MAX_OUTPUT} chars]`;
71
+ }
72
+ return result || '(no output)';
73
+ }
74
+ const output = [stdout.trim(), stderr.trim()].filter(Boolean).join('\n');
75
+ return `Exit code: ${exitCode}\n${output}`;
76
+ },
77
+ };
78
+ //# sourceMappingURL=bash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ToolDef } from '../types.js';
2
+ export declare const editTool: ToolDef;