apiario 0.6.0 → 0.8.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.
@@ -0,0 +1,239 @@
1
+ /**
2
+ * Descoberta de agentes, parsing de frontmatter e seed dos built-in
3
+ *
4
+ * Carrega agentes de:
5
+ * - ~/.config/apiario/agents/*.md (usuário)
6
+ * - .agents/agents/*.md (projeto, opcional)
7
+ *
8
+ * Na primeira execução, cria os 3 agentes built-in:
9
+ * scout, generalist, reviewer
10
+ */
11
+ import * as fs from "node:fs";
12
+ import * as path from "node:path";
13
+ import { homedir } from "node:os";
14
+ import { parseFrontmatter, } from "@earendil-works/pi-coding-agent";
15
+ // ---------------------------------------------------------------------------
16
+ // Constantes
17
+ // ---------------------------------------------------------------------------
18
+ const USER_AGENT_DIR = path.join(homedir(), ".config", "apiario", "agents");
19
+ const BUILTIN_AGENTS = [
20
+ {
21
+ name: "scout",
22
+ description: "Fast codebase recon that returns compressed context for handoff",
23
+ tools: ["read", "grep", "find", "ls", "bash"],
24
+ systemPrompt: [
25
+ "You are a **scout agent** specialized in fast codebase reconnaissance.",
26
+ "",
27
+ "Your goal is to explore the codebase, gather relevant context, and return a",
28
+ "compressed summary for the next agent in the chain.",
29
+ "",
30
+ "## Guidelines",
31
+ "",
32
+ "- Use `read` to inspect key files and understand structure.",
33
+ "- Use `grep` to find relevant patterns, function definitions, imports.",
34
+ "- Use `find` / `ls` to discover file layouts.",
35
+ "- Use `bash` for project introspection (e.g., package.json, configs).",
36
+ "- **Do NOT** use `write` or `edit` — you are read-only.",
37
+ "- Return a concise Markdown summary with:",
38
+ " - Key files and their purposes",
39
+ " - Relevant code snippets (paths + line numbers)",
40
+ " - Architecture notes and relationships",
41
+ " - Anything the next agent needs to implement the task",
42
+ "",
43
+ "Be thorough but concise. Focus on what's relevant to the task.",
44
+ ].join("\n"),
45
+ },
46
+ {
47
+ name: "generalist",
48
+ description: "General-purpose agent with full tool access",
49
+ tools: undefined,
50
+ systemPrompt: [
51
+ "You are a **generalist agent** with full access to all available tools.",
52
+ "",
53
+ "Your goal is to complete the assigned task thoroughly and correctly.",
54
+ "",
55
+ "## Guidelines",
56
+ "",
57
+ "- Read files before editing to understand existing code.",
58
+ "- Make targeted, minimal changes.",
59
+ "- Test your changes when possible.",
60
+ "- Return the final result or a summary of what was done.",
61
+ ].join("\n"),
62
+ },
63
+ {
64
+ name: "reviewer",
65
+ description: "Code review agent that checks for issues and improvements",
66
+ tools: ["read", "grep", "find", "ls", "bash"],
67
+ systemPrompt: [
68
+ "You are a **reviewer agent** specialized in code review.",
69
+ "",
70
+ "Your goal is to analyze code changes and provide actionable feedback.",
71
+ "",
72
+ "## Guidelines",
73
+ "",
74
+ "- Read the relevant files to understand the change context.",
75
+ "- Use `grep` to find related code that may be affected.",
76
+ "- Check for:",
77
+ " - Correctness and edge cases",
78
+ " - Error handling",
79
+ " - Performance implications",
80
+ " - Code style and consistency",
81
+ " - Security concerns",
82
+ " - Test coverage",
83
+ "- **Do NOT** make edits — you are read-only.",
84
+ "- Return a structured review with:",
85
+ " - Summary of what was reviewed",
86
+ " - Issues found (categorized by severity)",
87
+ " - Suggestions for improvement",
88
+ " - Overall verdict (approved / changes requested)",
89
+ ].join("\n"),
90
+ },
91
+ ];
92
+ // ---------------------------------------------------------------------------
93
+ // Helpers
94
+ // ---------------------------------------------------------------------------
95
+ function isDirectory(p) {
96
+ try {
97
+ return fs.statSync(p).isDirectory();
98
+ }
99
+ catch {
100
+ return false;
101
+ }
102
+ }
103
+ function findNearestProjectAgentsDir(cwd) {
104
+ let current = cwd;
105
+ while (true) {
106
+ const candidate = path.join(current, ".agents", "agents");
107
+ if (isDirectory(candidate))
108
+ return candidate;
109
+ const parent = path.dirname(current);
110
+ if (parent === current)
111
+ return null;
112
+ current = parent;
113
+ }
114
+ }
115
+ function loadAgentsFromDir(dir, source) {
116
+ const agents = [];
117
+ if (!isDirectory(dir))
118
+ return agents;
119
+ let entries;
120
+ try {
121
+ entries = fs.readdirSync(dir, { withFileTypes: true });
122
+ }
123
+ catch {
124
+ return agents;
125
+ }
126
+ for (const entry of entries) {
127
+ if (!entry.name.endsWith(".md"))
128
+ continue;
129
+ if (!entry.isFile() && !entry.isSymbolicLink())
130
+ continue;
131
+ const filePath = path.join(dir, entry.name);
132
+ let content;
133
+ try {
134
+ content = fs.readFileSync(filePath, "utf-8");
135
+ }
136
+ catch {
137
+ continue;
138
+ }
139
+ const { frontmatter, body } = parseFrontmatter(content);
140
+ if (!frontmatter.name || !frontmatter.description) {
141
+ continue;
142
+ }
143
+ const tools = frontmatter.tools
144
+ ?.split(",")
145
+ .map((t) => t.trim())
146
+ .filter(Boolean);
147
+ agents.push({
148
+ name: frontmatter.name,
149
+ description: frontmatter.description,
150
+ tools: tools && tools.length > 0 ? tools : undefined,
151
+ model: frontmatter.model || undefined,
152
+ systemPrompt: body,
153
+ source,
154
+ filePath,
155
+ });
156
+ }
157
+ return agents;
158
+ }
159
+ // ---------------------------------------------------------------------------
160
+ // Seed dos built-in
161
+ // ---------------------------------------------------------------------------
162
+ /**
163
+ * Cria os 3 agentes built-in (scout, generalist, reviewer) no diretório de
164
+ * agentes do usuário, caso o diretório esteja vazio (primeira execução).
165
+ * Nunca sobrescreve arquivos existentes.
166
+ */
167
+ export function seedBuiltinAgents() {
168
+ if (!isDirectory(USER_AGENT_DIR)) {
169
+ fs.mkdirSync(USER_AGENT_DIR, { recursive: true });
170
+ }
171
+ for (const agent of BUILTIN_AGENTS) {
172
+ const filePath = path.join(USER_AGENT_DIR, `${agent.name}.md`);
173
+ if (fs.existsSync(filePath))
174
+ continue;
175
+ const toolsLine = agent.tools ? `tools: ${agent.tools.join(", ")}` : "";
176
+ const modelLine = agent.model ? `model: ${agent.model}` : "";
177
+ const frontmatter = [
178
+ "---",
179
+ `name: ${agent.name}`,
180
+ `description: ${agent.description}`,
181
+ ...(toolsLine ? [toolsLine] : []),
182
+ ...(modelLine ? [modelLine] : []),
183
+ "---",
184
+ ].join("\n");
185
+ const content = `${frontmatter}\n\n${agent.systemPrompt}\n`;
186
+ try {
187
+ fs.writeFileSync(filePath, content, "utf-8");
188
+ }
189
+ catch {
190
+ // ignora — não crítico
191
+ }
192
+ }
193
+ }
194
+ // ---------------------------------------------------------------------------
195
+ // Descoberta principal
196
+ // ---------------------------------------------------------------------------
197
+ export function discoverAgents(cwd, scope) {
198
+ const projectAgentsDir = findNearestProjectAgentsDir(cwd);
199
+ const userAgents = scope === "project" ? [] : loadAgentsFromDir(USER_AGENT_DIR, "user");
200
+ const projectAgents = scope === "user" || !projectAgentsDir
201
+ ? []
202
+ : loadAgentsFromDir(projectAgentsDir, "project");
203
+ const agentMap = new Map();
204
+ if (scope === "both") {
205
+ // Usuário primeiro; projeto sobrescreve (mesmo nome vence projeto)
206
+ for (const agent of userAgents)
207
+ agentMap.set(agent.name, agent);
208
+ for (const agent of projectAgents)
209
+ agentMap.set(agent.name, agent);
210
+ }
211
+ else if (scope === "user") {
212
+ for (const agent of userAgents)
213
+ agentMap.set(agent.name, agent);
214
+ }
215
+ else {
216
+ for (const agent of projectAgents)
217
+ agentMap.set(agent.name, agent);
218
+ }
219
+ return {
220
+ agents: Array.from(agentMap.values()),
221
+ projectAgentsDir,
222
+ };
223
+ }
224
+ /**
225
+ * Formata lista de agentes para display
226
+ */
227
+ export function formatAgentList(agents, maxItems) {
228
+ if (agents.length === 0)
229
+ return { text: "nenhum", remaining: 0 };
230
+ const listed = agents.slice(0, maxItems);
231
+ const remaining = agents.length - listed.length;
232
+ return {
233
+ text: listed
234
+ .map((a) => `${a.name} (${a.source}): ${a.description}`)
235
+ .join("; "),
236
+ remaining,
237
+ };
238
+ }
239
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../../src/extensions/subagent/agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Renderização customizada da tool subagent
3
+ *
4
+ * Fornece funções de renderização para os modos collapsed e expandido,
5
+ * com ícones de status, formatação de tool calls e uso de recursos.
6
+ */
7
+ import { type Theme } from "@earendil-works/pi-coding-agent";
8
+ import { Container, Text } from "@earendil-works/pi-tui";
9
+ import { type SubagentDetails } from "./spawn.js";
10
+ export declare function renderSubagentCall(args: Record<string, any>, theme: Theme): Text;
11
+ export declare function renderSubagentResult(result: {
12
+ content: Array<{
13
+ type: string;
14
+ text?: string;
15
+ }>;
16
+ details?: SubagentDetails;
17
+ }, expanded: boolean, theme: Theme): Text | Container;
18
+ //# sourceMappingURL=display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../../src/extensions/subagent/display.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAEL,KAAK,KAAK,EACX,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,SAAS,EAGT,IAAI,EACL,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,KAAK,eAAe,EAIrB,MAAM,YAAY,CAAC;AA2KpB,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,KAAK,GACX,IAAI,CA0DN;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,EACtF,QAAQ,EAAE,OAAO,EACjB,KAAK,EAAE,KAAK,GACX,IAAI,GAAG,SAAS,CA6BlB"}