attocode 0.1.2 → 0.1.3

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 (69) hide show
  1. package/CHANGELOG.md +33 -1
  2. package/README.md +124 -0
  3. package/dist/src/agent.d.ts +73 -1
  4. package/dist/src/agent.d.ts.map +1 -1
  5. package/dist/src/agent.js +443 -26
  6. package/dist/src/agent.js.map +1 -1
  7. package/dist/src/commands/agents-commands.d.ts +24 -0
  8. package/dist/src/commands/agents-commands.d.ts.map +1 -0
  9. package/dist/src/commands/agents-commands.js +284 -0
  10. package/dist/src/commands/agents-commands.js.map +1 -0
  11. package/dist/src/commands/handler.d.ts.map +1 -1
  12. package/dist/src/commands/handler.js +135 -19
  13. package/dist/src/commands/handler.js.map +1 -1
  14. package/dist/src/commands/init-commands.d.ts +35 -0
  15. package/dist/src/commands/init-commands.d.ts.map +1 -0
  16. package/dist/src/commands/init-commands.js +187 -0
  17. package/dist/src/commands/init-commands.js.map +1 -0
  18. package/dist/src/commands/skills-commands.d.ts +26 -0
  19. package/dist/src/commands/skills-commands.d.ts.map +1 -0
  20. package/dist/src/commands/skills-commands.js +309 -0
  21. package/dist/src/commands/skills-commands.js.map +1 -0
  22. package/dist/src/commands/types.d.ts +13 -2
  23. package/dist/src/commands/types.d.ts.map +1 -1
  24. package/dist/src/defaults.d.ts +21 -1
  25. package/dist/src/defaults.d.ts.map +1 -1
  26. package/dist/src/defaults.js +44 -0
  27. package/dist/src/defaults.js.map +1 -1
  28. package/dist/src/integrations/agent-registry.d.ts +68 -2
  29. package/dist/src/integrations/agent-registry.d.ts.map +1 -1
  30. package/dist/src/integrations/agent-registry.js +230 -23
  31. package/dist/src/integrations/agent-registry.js.map +1 -1
  32. package/dist/src/integrations/cancellation.d.ts +5 -0
  33. package/dist/src/integrations/cancellation.d.ts.map +1 -1
  34. package/dist/src/integrations/cancellation.js +7 -0
  35. package/dist/src/integrations/cancellation.js.map +1 -1
  36. package/dist/src/integrations/capabilities.d.ts +160 -0
  37. package/dist/src/integrations/capabilities.d.ts.map +1 -0
  38. package/dist/src/integrations/capabilities.js +426 -0
  39. package/dist/src/integrations/capabilities.js.map +1 -0
  40. package/dist/src/integrations/context-engineering.d.ts +6 -1
  41. package/dist/src/integrations/context-engineering.d.ts.map +1 -1
  42. package/dist/src/integrations/context-engineering.js +7 -0
  43. package/dist/src/integrations/context-engineering.js.map +1 -1
  44. package/dist/src/integrations/index.d.ts +6 -2
  45. package/dist/src/integrations/index.d.ts.map +1 -1
  46. package/dist/src/integrations/index.js +10 -2
  47. package/dist/src/integrations/index.js.map +1 -1
  48. package/dist/src/integrations/skill-executor.d.ts +113 -0
  49. package/dist/src/integrations/skill-executor.d.ts.map +1 -0
  50. package/dist/src/integrations/skill-executor.js +270 -0
  51. package/dist/src/integrations/skill-executor.js.map +1 -0
  52. package/dist/src/integrations/skills.d.ts +98 -7
  53. package/dist/src/integrations/skills.d.ts.map +1 -1
  54. package/dist/src/integrations/skills.js +210 -11
  55. package/dist/src/integrations/skills.js.map +1 -1
  56. package/dist/src/tui/app.d.ts.map +1 -1
  57. package/dist/src/tui/app.js +131 -14
  58. package/dist/src/tui/app.js.map +1 -1
  59. package/dist/src/tui/index.d.ts +1 -0
  60. package/dist/src/tui/index.d.ts.map +1 -1
  61. package/dist/src/tui/index.js +2 -0
  62. package/dist/src/tui/index.js.map +1 -1
  63. package/dist/src/tui/transparency-aggregator.d.ts +100 -0
  64. package/dist/src/tui/transparency-aggregator.d.ts.map +1 -0
  65. package/dist/src/tui/transparency-aggregator.js +234 -0
  66. package/dist/src/tui/transparency-aggregator.js.map +1 -0
  67. package/dist/src/types.d.ts +94 -0
  68. package/dist/src/types.d.ts.map +1 -1
  69. package/package.json +1 -1
@@ -0,0 +1,284 @@
1
+ /**
2
+ * Agents Management Commands
3
+ *
4
+ * Handles all /agents sub-commands for managing agents:
5
+ * - /agents - List all agents with enhanced formatting
6
+ * - /agents new <name> - Create a new agent scaffold
7
+ * - /agents info <name> - Show detailed agent information
8
+ * - /agents edit <name> - Open agent file in $EDITOR
9
+ */
10
+ import { exec } from 'child_process';
11
+ import { promisify } from 'util';
12
+ import { getAgentLocationDisplay, getAgentStats, createAgentScaffold, } from '../integrations/index.js';
13
+ const execAsync = promisify(exec);
14
+ // =============================================================================
15
+ // ANSI COLOR UTILITIES
16
+ // =============================================================================
17
+ const colors = {
18
+ reset: '\x1b[0m',
19
+ bold: '\x1b[1m',
20
+ dim: '\x1b[2m',
21
+ red: '\x1b[31m',
22
+ green: '\x1b[32m',
23
+ yellow: '\x1b[33m',
24
+ blue: '\x1b[34m',
25
+ magenta: '\x1b[35m',
26
+ cyan: '\x1b[36m',
27
+ white: '\x1b[37m',
28
+ };
29
+ function c(text, color) {
30
+ return `${colors[color]}${text}${colors.reset}`;
31
+ }
32
+ // =============================================================================
33
+ // MODEL DISPLAY HELPERS
34
+ // =============================================================================
35
+ function formatModel(model) {
36
+ switch (model) {
37
+ case 'fast':
38
+ return c('haiku', 'cyan');
39
+ case 'balanced':
40
+ return c('sonnet', 'green');
41
+ case 'quality':
42
+ return c('opus', 'magenta');
43
+ default:
44
+ return c(model || 'default', 'dim');
45
+ }
46
+ }
47
+ // =============================================================================
48
+ // ENHANCED AGENT LIST FORMATTER
49
+ // =============================================================================
50
+ /**
51
+ * Format agents list with categorization and usage hints.
52
+ */
53
+ export function formatEnhancedAgentList(agents) {
54
+ if (agents.length === 0) {
55
+ return `${c('No agents loaded.', 'dim')}
56
+
57
+ ${c('To add agents:', 'bold')}
58
+ /agents new <name> Create a new agent in .attocode/agents/
59
+
60
+ ${c('Agent Locations:', 'dim')}
61
+ ~/.attocode/agents/ User-level agents (shared across projects)
62
+ .attocode/agents/ Project-level agents
63
+ `;
64
+ }
65
+ const lines = [];
66
+ const stats = getAgentStats(agents);
67
+ const customCount = stats.user + stats.project + stats.legacy;
68
+ lines.push(`${c(`Agents (${agents.length} loaded: ${stats.builtin} built-in, ${customCount} custom)`, 'bold')}`);
69
+ lines.push('');
70
+ // Built-in agents
71
+ const builtIn = agents.filter(a => a.source === 'builtin');
72
+ if (builtIn.length > 0) {
73
+ lines.push(` ${c('BUILT-IN:', 'cyan')}`);
74
+ lines.push(` ${c('─'.repeat(60), 'dim')}`);
75
+ for (const agent of builtIn) {
76
+ const model = formatModel(agent.model);
77
+ const desc = agent.description.split('.')[0].slice(0, 40);
78
+ lines.push(` ${c(agent.name.padEnd(14), 'cyan')} ${desc.padEnd(42)} ${model}`);
79
+ }
80
+ lines.push('');
81
+ }
82
+ // User-defined agents
83
+ const userDefined = agents.filter(a => a.source === 'user' || a.source === 'project');
84
+ if (userDefined.length > 0) {
85
+ lines.push(` ${c('USER-DEFINED:', 'yellow')}`);
86
+ lines.push(` ${c('─'.repeat(60), 'dim')}`);
87
+ for (const agent of userDefined) {
88
+ const model = formatModel(agent.model);
89
+ const location = getAgentLocationDisplay(agent);
90
+ const desc = agent.description.split('.')[0].slice(0, 35);
91
+ lines.push(` ${c(agent.name.padEnd(14), 'yellow')} ${desc.padEnd(37)} ${model}`);
92
+ lines.push(` ${c(' '.repeat(14), 'dim')} ${c(`Source: ${location}`, 'dim')}`);
93
+ }
94
+ lines.push('');
95
+ }
96
+ // Legacy agents
97
+ const legacy = agents.filter(a => a.source === 'legacy');
98
+ if (legacy.length > 0) {
99
+ lines.push(` ${c('LEGACY (.agents/):', 'dim')}`);
100
+ lines.push(` ${c('─'.repeat(60), 'dim')}`);
101
+ for (const agent of legacy) {
102
+ const model = formatModel(agent.model);
103
+ const desc = agent.description.split('.')[0].slice(0, 40);
104
+ lines.push(` ${c(agent.name.padEnd(14), 'dim')} ${desc.padEnd(42)} ${model}`);
105
+ }
106
+ lines.push('');
107
+ }
108
+ // Commands
109
+ lines.push(` ${c('COMMANDS:', 'bold')}`);
110
+ lines.push(` ${c('/agents new <name>', 'cyan').padEnd(35)} Create new agent in .attocode/agents/`);
111
+ lines.push(` ${c('/agents info <name>', 'cyan').padEnd(35)} Show agent details`);
112
+ lines.push(` ${c('/agents edit <name>', 'cyan').padEnd(35)} Edit agent definition`);
113
+ lines.push(` ${c('/spawn <name> <task>', 'cyan').padEnd(35)} Spawn an agent with a task`);
114
+ return lines.join('\n');
115
+ }
116
+ /**
117
+ * Format detailed agent information.
118
+ */
119
+ export function formatAgentInfo(agent) {
120
+ const lines = [];
121
+ lines.push(`${c(`Agent: ${agent.name}`, 'bold')}`);
122
+ lines.push(c('─'.repeat(60), 'dim'));
123
+ lines.push(` ${c('Description:', 'cyan').padEnd(20)} ${agent.description}`);
124
+ lines.push(` ${c('Source:', 'cyan').padEnd(20)} ${getAgentLocationDisplay(agent)}`);
125
+ if (agent.filePath) {
126
+ lines.push(` ${c('File:', 'cyan').padEnd(20)} ${agent.filePath}`);
127
+ }
128
+ lines.push(` ${c('Model:', 'cyan').padEnd(20)} ${formatModel(agent.model)}`);
129
+ if (agent.maxIterations) {
130
+ lines.push(` ${c('Max Iterations:', 'cyan').padEnd(20)} ${agent.maxIterations}`);
131
+ }
132
+ if (agent.maxTokenBudget) {
133
+ lines.push(` ${c('Token Budget:', 'cyan').padEnd(20)} ${agent.maxTokenBudget.toLocaleString()}`);
134
+ }
135
+ if (agent.capabilities && agent.capabilities.length > 0) {
136
+ lines.push('');
137
+ lines.push(` ${c('Capabilities:', 'bold')}`);
138
+ lines.push(` ${agent.capabilities.join(', ')}`);
139
+ }
140
+ if (agent.tools && agent.tools.length > 0) {
141
+ lines.push('');
142
+ lines.push(` ${c('Tools Available:', 'bold')}`);
143
+ lines.push(` ${agent.tools.join(', ')}`);
144
+ }
145
+ if (agent.tags && agent.tags.length > 0) {
146
+ lines.push('');
147
+ lines.push(` ${c('Tags:', 'bold')} ${agent.tags.join(', ')}`);
148
+ }
149
+ lines.push('');
150
+ lines.push(` ${c('Usage:', 'bold')}`);
151
+ lines.push(` /spawn ${agent.name} "<your task here>"`);
152
+ return lines.join('\n');
153
+ }
154
+ // =============================================================================
155
+ // COMMAND HANDLERS
156
+ // =============================================================================
157
+ /**
158
+ * Handle /agents command and sub-commands.
159
+ */
160
+ export async function handleAgentsCommand(args, ctx, agentRegistry) {
161
+ const { output } = ctx;
162
+ if (args.length === 0) {
163
+ // List all agents
164
+ const agents = agentRegistry.getAllAgents();
165
+ output.log(formatEnhancedAgentList(agents));
166
+ return;
167
+ }
168
+ const subCmd = args[0].toLowerCase();
169
+ switch (subCmd) {
170
+ case 'new': {
171
+ if (args.length < 2) {
172
+ output.log(c('Usage: /agents new <name> [--model fast|balanced|quality] [--description "..."]', 'yellow'));
173
+ return;
174
+ }
175
+ const name = args[1];
176
+ // Parse optional flags
177
+ let model = 'balanced';
178
+ let description;
179
+ const capabilities = [];
180
+ const tools = [];
181
+ for (let i = 2; i < args.length; i++) {
182
+ if (args[i] === '--model' && args[i + 1]) {
183
+ const m = args[++i].toLowerCase();
184
+ if (m === 'fast' || m === 'balanced' || m === 'quality') {
185
+ model = m;
186
+ }
187
+ }
188
+ else if (args[i] === '--description' && args[i + 1]) {
189
+ description = args[++i];
190
+ }
191
+ else if (args[i] === '--capability' && args[i + 1]) {
192
+ capabilities.push(args[++i]);
193
+ }
194
+ else if (args[i] === '--tool' && args[i + 1]) {
195
+ tools.push(args[++i]);
196
+ }
197
+ }
198
+ output.log(c(`Creating agent: ${name}...`, 'cyan'));
199
+ const result = await createAgentScaffold(name, {
200
+ model,
201
+ description,
202
+ capabilities: capabilities.length > 0 ? capabilities : undefined,
203
+ tools: tools.length > 0 ? tools : undefined,
204
+ });
205
+ if (result.success) {
206
+ output.log(c(`+ Created agent: ${result.path}`, 'green'));
207
+ output.log('');
208
+ output.log(c('Edit the file to customize:', 'dim'));
209
+ output.log(c(' - Update the system prompt', 'dim'));
210
+ output.log(c(' - Add capabilities for NL matching', 'dim'));
211
+ output.log(c(' - Configure tools and iteration limits', 'dim'));
212
+ output.log('');
213
+ output.log(c(`Open in editor: /agents edit ${name}`, 'cyan'));
214
+ // Reload agents
215
+ await agentRegistry.loadUserAgents();
216
+ }
217
+ else {
218
+ output.log(c(`x ${result.error}`, 'red'));
219
+ }
220
+ break;
221
+ }
222
+ case 'info': {
223
+ if (args.length < 2) {
224
+ output.log(c('Usage: /agents info <name>', 'yellow'));
225
+ return;
226
+ }
227
+ const name = args[1];
228
+ const agent = agentRegistry.getAgent(name);
229
+ if (!agent) {
230
+ output.log(c(`Agent not found: ${name}`, 'red'));
231
+ output.log(c('Use /agents to see available agents.', 'dim'));
232
+ return;
233
+ }
234
+ output.log(formatAgentInfo(agent));
235
+ break;
236
+ }
237
+ case 'edit': {
238
+ if (args.length < 2) {
239
+ output.log(c('Usage: /agents edit <name>', 'yellow'));
240
+ return;
241
+ }
242
+ const name = args[1];
243
+ const agent = agentRegistry.getAgent(name);
244
+ if (!agent) {
245
+ output.log(c(`Agent not found: ${name}`, 'red'));
246
+ return;
247
+ }
248
+ if (!agent.filePath) {
249
+ output.log(c(`Cannot edit built-in agent: ${name}`, 'yellow'));
250
+ output.log(c('Create a custom version with: /agents new ' + name + '-custom', 'dim'));
251
+ return;
252
+ }
253
+ const editor = process.env.EDITOR || process.env.VISUAL || 'vim';
254
+ output.log(c(`Opening ${agent.filePath} in ${editor}...`, 'cyan'));
255
+ try {
256
+ await execAsync(`${editor} "${agent.filePath}"`);
257
+ output.log(c('+ Editor closed. Reloading agents...', 'green'));
258
+ // Reload agents after edit
259
+ await agentRegistry.loadUserAgents();
260
+ }
261
+ catch (error) {
262
+ output.log(c(`Failed to open editor: ${error.message}`, 'red'));
263
+ output.log(c(`File path: ${agent.filePath}`, 'dim'));
264
+ }
265
+ break;
266
+ }
267
+ case 'reload': {
268
+ output.log(c('Reloading agents...', 'cyan'));
269
+ await agentRegistry.loadUserAgents();
270
+ const count = agentRegistry.getAllAgents().length;
271
+ output.log(c(`+ Loaded ${count} agent(s)`, 'green'));
272
+ break;
273
+ }
274
+ default:
275
+ output.log(c(`Unknown sub-command: ${subCmd}`, 'yellow'));
276
+ output.log(c('Usage:', 'bold'));
277
+ output.log(c(' /agents - List all agents', 'dim'));
278
+ output.log(c(' /agents new <name> - Create a new agent', 'dim'));
279
+ output.log(c(' /agents info <name> - Show agent details', 'dim'));
280
+ output.log(c(' /agents edit <name> - Open agent in $EDITOR', 'dim'));
281
+ output.log(c(' /agents reload - Reload all agents', 'dim'));
282
+ }
283
+ }
284
+ //# sourceMappingURL=agents-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents-commands.js","sourceRoot":"","sources":["../../../src/commands/agents-commands.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/commands/handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAgIhE;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,aAAa,CAAC,CAorCxB;AAMD;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,YAAY,EAAE,aAAa,CAMxE"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/commands/handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAwJhE;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,aAAa,CAAC,CA0xCxB;AAMD;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,YAAY,EAAE,aAAa,CAMxE"}
@@ -5,8 +5,11 @@
5
5
  * Uses CommandContext.output for all output, making it mode-agnostic.
6
6
  */
7
7
  import { persistenceDebug, saveCheckpointToStore, } from '../integrations/persistence.js';
8
- import { formatServerList, getContextUsage, formatCompactionResult } from '../integrations/index.js';
8
+ import { formatServerList, getContextUsage, formatCompactionResult, formatCapabilitiesSummary, formatCapabilitiesList, formatSearchResults, } from '../integrations/index.js';
9
9
  import { formatSessionsTable } from '../session-picker.js';
10
+ import { handleSkillsCommand } from './skills-commands.js';
11
+ import { handleAgentsCommand } from './agents-commands.js';
12
+ import { handleInitCommand } from './init-commands.js';
10
13
  // =============================================================================
11
14
  // ANSI COLOR UTILITIES
12
15
  // =============================================================================
@@ -103,8 +106,22 @@ ${c('PERMISSIONS & SECURITY', 'bold')}
103
106
  ${c('/grants', 'cyan')} Show active permission grants
104
107
  ${c('/audit', 'cyan')} Show security audit log
105
108
 
106
- ${c('DEBUGGING & TESTING', 'bold')}
107
- ${c('/skills', 'cyan')} List loaded skills
109
+ ${c('SKILLS & AGENTS', 'bold')}
110
+ ${c('/skills', 'cyan')} List all skills with usage hints
111
+ ${c('/skills new <name>', 'cyan')} Create a new skill in .attocode/skills/
112
+ ${c('/skills info <name>', 'cyan')} Show detailed skill information
113
+ ${c('/skills enable/disable', 'cyan')} Activate or deactivate a skill
114
+ ${c('/agents', 'cyan')} List all available agents
115
+ ${c('/agents new <name>', 'cyan')} Create a new agent in .attocode/agents/
116
+ ${c('/agents info <name>', 'cyan')} Show detailed agent information
117
+
118
+ ${c('INITIALIZATION', 'bold')}
119
+ ${c('/init', 'cyan')} Initialize .attocode/ directory structure
120
+
121
+ ${c('CAPABILITIES & DEBUGGING', 'bold')}
122
+ ${c('/powers', 'cyan')} Show all agent capabilities
123
+ ${c('/powers <type>', 'cyan')} List by type (tools, skills, agents, mcp, commands)
124
+ ${c('/powers search <q>', 'cyan')} Search capabilities
108
125
  ${c('/sandbox', 'cyan')} Show sandbox modes available
109
126
  ${c('/shell', 'cyan')} Show PTY shell integration info
110
127
  ${c('/lsp', 'cyan')} Show LSP integration status
@@ -129,7 +146,33 @@ ${c('━━━━━━━━━━━━━━━━━━━━━━━━━
129
146
  */
130
147
  export async function handleCommand(cmd, args, ctx) {
131
148
  const { agent, sessionId, output, integrations } = ctx;
132
- const { sessionStore, mcpClient, compactor } = integrations;
149
+ const { sessionStore, mcpClient, compactor, skillExecutor } = integrations;
150
+ // Check for skill invocation before built-in commands
151
+ if (skillExecutor) {
152
+ const skillName = skillExecutor.isSkillInvocation(cmd);
153
+ if (skillName) {
154
+ const result = await skillExecutor.executeSkill(skillName, args, {
155
+ cwd: process.cwd(),
156
+ sessionId,
157
+ });
158
+ if (result.success) {
159
+ if (result.injectedPrompt) {
160
+ output.log(c(`Invoking skill: /${skillName}`, 'cyan'));
161
+ // Return skill invocation for the caller to handle
162
+ return {
163
+ type: 'skill',
164
+ skillName,
165
+ injectedPrompt: result.injectedPrompt,
166
+ };
167
+ }
168
+ output.log(c(result.output, 'green'));
169
+ }
170
+ else {
171
+ output.log(c(`Skill error: ${result.error}`, 'red'));
172
+ }
173
+ return;
174
+ }
175
+ }
133
176
  switch (cmd) {
134
177
  // =========================================================================
135
178
  // GENERAL COMMANDS
@@ -655,9 +698,16 @@ ${c('Progress:', 'bold')}
655
698
  // =========================================================================
656
699
  case '/agents':
657
700
  try {
658
- const agentList = agent.formatAgentList();
659
- output.log(c('\nAvailable Agents:', 'bold'));
660
- output.log(agentList);
701
+ const { agentRegistry } = integrations;
702
+ if (agentRegistry) {
703
+ await handleAgentsCommand(args, ctx, agentRegistry);
704
+ }
705
+ else {
706
+ // Fallback to legacy display if no agentRegistry
707
+ const agentList = agent.formatAgentList();
708
+ output.log(c('\nAvailable Agents:', 'bold'));
709
+ output.log(agentList);
710
+ }
661
711
  }
662
712
  catch (error) {
663
713
  output.log(c(`Error: ${error.message}`, 'red'));
@@ -1168,20 +1218,25 @@ ${c('Note:', 'dim')} Theme switching is visual in TUI mode. REPL mode uses fixed
1168
1218
  // =========================================================================
1169
1219
  case '/skills':
1170
1220
  try {
1171
- const skills = agent.getSkills();
1172
- if (skills.length === 0) {
1173
- output.log(c('No skills loaded.', 'dim'));
1174
- output.log(c('Add .md files to .skills/ directory to create skills.', 'dim'));
1221
+ const { skillManager } = integrations;
1222
+ if (skillManager) {
1223
+ await handleSkillsCommand(args, ctx, skillManager);
1175
1224
  }
1176
1225
  else {
1177
- output.log(c('\nLoaded Skills:', 'bold'));
1178
- skills.forEach((skill) => {
1179
- const active = skill.active ? c('+', 'green') : c('o', 'dim');
1180
- output.log(` ${active} ${c(skill.name, 'cyan')} - ${skill.description || 'No description'}`);
1181
- if (skill.triggers?.length > 0) {
1182
- output.log(c(` Triggers: ${skill.triggers.join(', ')}`, 'dim'));
1183
- }
1184
- });
1226
+ // Fallback to legacy display if no skillManager
1227
+ const skills = agent.getSkills();
1228
+ if (skills.length === 0) {
1229
+ output.log(c('No skills loaded.', 'dim'));
1230
+ output.log(c('Add .md files to .attocode/skills/ directory to create skills.', 'dim'));
1231
+ }
1232
+ else {
1233
+ output.log(c('\nLoaded Skills:', 'bold'));
1234
+ skills.forEach((skill) => {
1235
+ const active = skill.active ? c('+', 'green') : c('o', 'dim');
1236
+ const invokable = skill.invokable ? c('[/]', 'magenta') : ' ';
1237
+ output.log(` ${active} ${invokable} ${c(skill.name, 'cyan')} - ${skill.description || 'No description'}`);
1238
+ });
1239
+ }
1185
1240
  }
1186
1241
  }
1187
1242
  catch (error) {
@@ -1296,6 +1351,67 @@ ${c('Test it:', 'dim')}
1296
1351
  `);
1297
1352
  break;
1298
1353
  // =========================================================================
1354
+ // CAPABILITIES DISCOVERY
1355
+ // =========================================================================
1356
+ case '/powers': {
1357
+ const capRegistry = agent.getCapabilitiesRegistry?.();
1358
+ if (!capRegistry) {
1359
+ output.log(c('Capabilities registry not available.', 'dim'));
1360
+ break;
1361
+ }
1362
+ capRegistry.refresh();
1363
+ const counts = capRegistry.getCounts();
1364
+ if (args.length === 0) {
1365
+ // Show summary
1366
+ output.log(c('\n' + formatCapabilitiesSummary(counts), 'reset'));
1367
+ output.log(c('\nUsage:', 'bold'));
1368
+ output.log(c(' /powers tools - List all tools', 'dim'));
1369
+ output.log(c(' /powers skills - List all skills', 'dim'));
1370
+ output.log(c(' /powers agents - List all agents', 'dim'));
1371
+ output.log(c(' /powers mcp - List MCP tools', 'dim'));
1372
+ output.log(c(' /powers commands - List commands', 'dim'));
1373
+ output.log(c(' /powers search <q> - Search all capabilities', 'dim'));
1374
+ }
1375
+ else if (args[0] === 'search' && args.length > 1) {
1376
+ const query = args.slice(1).join(' ');
1377
+ const results = capRegistry.search(query);
1378
+ output.log(c(`\nSearch: "${query}"\n`, 'cyan'));
1379
+ output.log(formatSearchResults(results));
1380
+ }
1381
+ else {
1382
+ // List by type
1383
+ const typeMap = {
1384
+ tools: 'tool',
1385
+ tool: 'tool',
1386
+ skills: 'skill',
1387
+ skill: 'skill',
1388
+ agents: 'agent',
1389
+ agent: 'agent',
1390
+ mcp: 'mcp_tool',
1391
+ 'mcp-tools': 'mcp_tool',
1392
+ 'mcp_tools': 'mcp_tool',
1393
+ commands: 'command',
1394
+ command: 'command',
1395
+ };
1396
+ const capType = typeMap[args[0]];
1397
+ if (capType) {
1398
+ const capabilities = capRegistry.getByType(capType);
1399
+ output.log(c('\n' + formatCapabilitiesList(capabilities, capType), 'reset'));
1400
+ }
1401
+ else {
1402
+ output.log(c(`Unknown capability type: ${args[0]}`, 'yellow'));
1403
+ output.log(c('Valid types: tools, skills, agents, mcp, commands', 'dim'));
1404
+ }
1405
+ }
1406
+ break;
1407
+ }
1408
+ // =========================================================================
1409
+ // INITIALIZATION
1410
+ // =========================================================================
1411
+ case '/init':
1412
+ await handleInitCommand(args, ctx);
1413
+ break;
1414
+ // =========================================================================
1299
1415
  // UNKNOWN COMMAND
1300
1416
  // =========================================================================
1301
1417
  default: