@praveencs/agent 0.7.5 → 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.
- package/ROADMAP.md +14 -0
- package/bin/agent.ts +19 -1
- package/dist/bin/agent.js +20 -1
- package/dist/bin/agent.js.map +1 -1
- package/dist/src/cli/commands/commands-cmd.d.ts +3 -0
- package/dist/src/cli/commands/commands-cmd.d.ts.map +1 -0
- package/dist/src/cli/commands/commands-cmd.js +39 -0
- package/dist/src/cli/commands/commands-cmd.js.map +1 -0
- package/dist/src/cli/commands/hooks.d.ts +3 -0
- package/dist/src/cli/commands/hooks.d.ts.map +1 -0
- package/dist/src/cli/commands/hooks.js +119 -0
- package/dist/src/cli/commands/hooks.js.map +1 -0
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +2 -0
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/plugins.d.ts +3 -0
- package/dist/src/cli/commands/plugins.d.ts.map +1 -0
- package/dist/src/cli/commands/plugins.js +86 -0
- package/dist/src/cli/commands/plugins.js.map +1 -0
- package/dist/src/cli/commands/run.d.ts.map +1 -1
- package/dist/src/cli/commands/run.js +74 -0
- package/dist/src/cli/commands/run.js.map +1 -1
- package/dist/src/cli/conversation.d.ts +39 -0
- package/dist/src/cli/conversation.d.ts.map +1 -0
- package/dist/src/cli/conversation.js +69 -0
- package/dist/src/cli/conversation.js.map +1 -0
- package/dist/src/cli/index.d.ts.map +1 -1
- package/dist/src/cli/index.js +7 -1
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/repl.d.ts +9 -0
- package/dist/src/cli/repl.d.ts.map +1 -0
- package/dist/src/cli/repl.js +270 -0
- package/dist/src/cli/repl.js.map +1 -0
- package/dist/src/cli/slash-commands.d.ts +31 -0
- package/dist/src/cli/slash-commands.d.ts.map +1 -0
- package/dist/src/cli/slash-commands.js +138 -0
- package/dist/src/cli/slash-commands.js.map +1 -0
- package/dist/src/cli/ui/render.d.ts +32 -0
- package/dist/src/cli/ui/render.d.ts.map +1 -0
- package/dist/src/cli/ui/render.js +79 -0
- package/dist/src/cli/ui/render.js.map +1 -0
- package/dist/src/cli/ui/spinner.d.ts +40 -0
- package/dist/src/cli/ui/spinner.d.ts.map +1 -0
- package/dist/src/cli/ui/spinner.js +63 -0
- package/dist/src/cli/ui/spinner.js.map +1 -0
- package/dist/src/commands/loader.d.ts +54 -0
- package/dist/src/commands/loader.d.ts.map +1 -0
- package/dist/src/commands/loader.js +136 -0
- package/dist/src/commands/loader.js.map +1 -0
- package/dist/src/commands/types.d.ts +28 -0
- package/dist/src/commands/types.d.ts.map +1 -0
- package/dist/src/commands/types.js +10 -0
- package/dist/src/commands/types.js.map +1 -0
- package/dist/src/config/defaults.d.ts.map +1 -1
- package/dist/src/config/defaults.js +15 -0
- package/dist/src/config/defaults.js.map +1 -1
- package/dist/src/config/schema.d.ts +153 -0
- package/dist/src/config/schema.d.ts.map +1 -1
- package/dist/src/config/schema.js +25 -0
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/engine/executor.d.ts +3 -1
- package/dist/src/engine/executor.d.ts.map +1 -1
- package/dist/src/engine/executor.js +24 -1
- package/dist/src/engine/executor.js.map +1 -1
- package/dist/src/hooks/registry.d.ts +45 -0
- package/dist/src/hooks/registry.d.ts.map +1 -0
- package/dist/src/hooks/registry.js +126 -0
- package/dist/src/hooks/registry.js.map +1 -0
- package/dist/src/hooks/runner.d.ts +22 -0
- package/dist/src/hooks/runner.d.ts.map +1 -0
- package/dist/src/hooks/runner.js +71 -0
- package/dist/src/hooks/runner.js.map +1 -0
- package/dist/src/hooks/types.d.ts +50 -0
- package/dist/src/hooks/types.d.ts.map +1 -0
- package/dist/src/hooks/types.js +14 -0
- package/dist/src/hooks/types.js.map +1 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/plans/runner.d.ts +3 -1
- package/dist/src/plans/runner.d.ts.map +1 -1
- package/dist/src/plans/runner.js +33 -1
- package/dist/src/plans/runner.js.map +1 -1
- package/dist/src/plugins/loader.d.ts +40 -0
- package/dist/src/plugins/loader.d.ts.map +1 -0
- package/dist/src/plugins/loader.js +136 -0
- package/dist/src/plugins/loader.js.map +1 -0
- package/dist/src/plugins/types.d.ts +47 -0
- package/dist/src/plugins/types.d.ts.map +1 -0
- package/dist/src/plugins/types.js +9 -0
- package/dist/src/plugins/types.js.map +1 -0
- package/dist/src/skills/types.d.ts +4 -4
- package/dist/src/tools/core/cli-tools.d.ts +7 -0
- package/dist/src/tools/core/cli-tools.d.ts.map +1 -0
- package/dist/src/tools/core/cli-tools.js +110 -0
- package/dist/src/tools/core/cli-tools.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversation State Manager — maintains multi-turn context within a REPL session
|
|
3
|
+
*/
|
|
4
|
+
export class ConversationManager {
|
|
5
|
+
messages = [];
|
|
6
|
+
systemPrompt;
|
|
7
|
+
turnCount = 0;
|
|
8
|
+
constructor(systemPrompt) {
|
|
9
|
+
this.systemPrompt = systemPrompt;
|
|
10
|
+
this.messages.push({ role: 'system', content: systemPrompt });
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Add a user message
|
|
14
|
+
*/
|
|
15
|
+
addUser(content) {
|
|
16
|
+
this.messages.push({ role: 'user', content });
|
|
17
|
+
this.turnCount++;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Add an assistant message
|
|
21
|
+
*/
|
|
22
|
+
addAssistant(content, toolCalls) {
|
|
23
|
+
this.messages.push({ role: 'assistant', content, toolCalls });
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Add a tool result
|
|
27
|
+
*/
|
|
28
|
+
addToolResult(content, toolCallId) {
|
|
29
|
+
this.messages.push({ role: 'tool', content, toolCallId });
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get all messages for the LLM
|
|
33
|
+
*/
|
|
34
|
+
getMessages() {
|
|
35
|
+
return [...this.messages];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Current turn count
|
|
39
|
+
*/
|
|
40
|
+
get turns() {
|
|
41
|
+
return this.turnCount;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Compact the conversation — keep system prompt + last N turns
|
|
45
|
+
*/
|
|
46
|
+
compact(keepTurns = 4) {
|
|
47
|
+
const system = this.messages[0];
|
|
48
|
+
const recent = [];
|
|
49
|
+
let turnsSeen = 0;
|
|
50
|
+
// Walk backwards to collect recent turns
|
|
51
|
+
for (let i = this.messages.length - 1; i >= 1; i--) {
|
|
52
|
+
const msg = this.messages[i];
|
|
53
|
+
if (msg.role === 'user')
|
|
54
|
+
turnsSeen++;
|
|
55
|
+
recent.unshift(msg);
|
|
56
|
+
if (turnsSeen >= keepTurns)
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
this.messages = [system, ...recent];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Reset conversation
|
|
63
|
+
*/
|
|
64
|
+
reset() {
|
|
65
|
+
this.messages = [{ role: 'system', content: this.systemPrompt }];
|
|
66
|
+
this.turnCount = 0;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=conversation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../../src/cli/conversation.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,mBAAmB;IACpB,QAAQ,GAAiB,EAAE,CAAC;IAC5B,YAAY,CAAS;IACrB,SAAS,GAAG,CAAC,CAAC;IAEtB,YAAY,YAAoB;QAC5B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,OAAe;QACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,OAAe,EAAE,SAAmC;QAC7D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,OAAe,EAAE,UAAkB;QAC7C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,WAAW;QACP,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,SAAS,GAAG,CAAC;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,MAAM,GAAiB,EAAE,CAAC;QAChC,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,yCAAyC;QACzC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;gBAAE,SAAS,EAAE,CAAC;YACrC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACpB,IAAI,SAAS,IAAI,SAAS;gBAAE,MAAM;QACtC,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK;QACD,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACvB,CAAC;CACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CA6BnC"}
|
package/dist/src/cli/index.js
CHANGED
|
@@ -10,6 +10,9 @@ import { createConfigCommand } from './commands/config.js';
|
|
|
10
10
|
import { createMemoryCommand } from './commands/memory.js';
|
|
11
11
|
import { createGoalCommand, createApproveCommand } from './commands/goal.js';
|
|
12
12
|
import { createReportCommand } from './commands/report.js';
|
|
13
|
+
import { createHooksCommand } from './commands/hooks.js';
|
|
14
|
+
import { createCommandsCommand } from './commands/commands-cmd.js';
|
|
15
|
+
import { createPluginsCommand } from './commands/plugins.js';
|
|
13
16
|
/**
|
|
14
17
|
* Create the CLI program with all commands
|
|
15
18
|
*/
|
|
@@ -18,7 +21,7 @@ export function createCLI() {
|
|
|
18
21
|
program
|
|
19
22
|
.name('agent')
|
|
20
23
|
.description('Agent Runtime — autonomous, goal-oriented AI agent with skills, plans, memory, and permissioned tools')
|
|
21
|
-
.version('0.
|
|
24
|
+
.version('0.8.0')
|
|
22
25
|
.option('--verbose', 'Enable verbose output')
|
|
23
26
|
.option('--no-color', 'Disable colored output')
|
|
24
27
|
.option('--config <path>', 'Path to config file');
|
|
@@ -35,6 +38,9 @@ export function createCLI() {
|
|
|
35
38
|
program.addCommand(createGoalCommand());
|
|
36
39
|
program.addCommand(createApproveCommand());
|
|
37
40
|
program.addCommand(createReportCommand());
|
|
41
|
+
program.addCommand(createHooksCommand());
|
|
42
|
+
program.addCommand(createCommandsCommand());
|
|
43
|
+
program.addCommand(createPluginsCommand());
|
|
38
44
|
return program;
|
|
39
45
|
}
|
|
40
46
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D;;GAEG;AACH,MAAM,UAAU,SAAS;IACrB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACF,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CAAC,uGAAuG,CAAC;SACpH,OAAO,CAAC,OAAO,CAAC;SAChB,MAAM,CAAC,WAAW,EAAE,uBAAuB,CAAC;SAC5C,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC;SAC9C,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC;IAEtD,wBAAwB;IACxB,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAE3C,OAAO,OAAO,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive REPL — the heart of the Claude Code-style experience
|
|
3
|
+
*
|
|
4
|
+
* Launched when the user types `agent` with no arguments.
|
|
5
|
+
* Provides a conversational loop with slash commands, tool execution,
|
|
6
|
+
* and persistent conversation context.
|
|
7
|
+
*/
|
|
8
|
+
export declare function startREPL(): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=repl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../../src/cli/repl.ts"],"names":[],"mappings":"AAmBA;;;;;;GAMG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAqK/C"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import { createInterface } from 'node:readline';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { ConfigLoader } from '../config/loader.js';
|
|
4
|
+
import { ToolRegistry } from '../tools/registry.js';
|
|
5
|
+
import { PolicyEngine } from '../policy/engine.js';
|
|
6
|
+
import { SkillLoader } from '../skills/loader.js';
|
|
7
|
+
import { LLMRouter } from '../llm/router.js';
|
|
8
|
+
import { CommandLoader } from '../commands/loader.js';
|
|
9
|
+
import { HookRegistry } from '../hooks/registry.js';
|
|
10
|
+
import { registerCoreTools } from './commands/init.js';
|
|
11
|
+
import { promptApproval } from './ui/prompt.js';
|
|
12
|
+
import { renderBanner, renderToolCall, renderSummary, renderError } from './ui/render.js';
|
|
13
|
+
import { Spinner } from './ui/spinner.js';
|
|
14
|
+
import { ConversationManager } from './conversation.js';
|
|
15
|
+
import { SlashCommandRegistry } from './slash-commands.js';
|
|
16
|
+
import { zodToJsonSchema } from '../utils/schema.js';
|
|
17
|
+
import { generateRunId } from '../utils/paths.js';
|
|
18
|
+
/**
|
|
19
|
+
* Interactive REPL — the heart of the Claude Code-style experience
|
|
20
|
+
*
|
|
21
|
+
* Launched when the user types `agent` with no arguments.
|
|
22
|
+
* Provides a conversational loop with slash commands, tool execution,
|
|
23
|
+
* and persistent conversation context.
|
|
24
|
+
*/
|
|
25
|
+
export async function startREPL() {
|
|
26
|
+
// ─── Bootstrap all subsystems ───
|
|
27
|
+
const configLoader = new ConfigLoader();
|
|
28
|
+
const config = await configLoader.load();
|
|
29
|
+
const registry = ToolRegistry.getInstance();
|
|
30
|
+
registerCoreTools(registry);
|
|
31
|
+
const policy = new PolicyEngine(config, process.cwd());
|
|
32
|
+
const skillLoader = new SkillLoader(config);
|
|
33
|
+
const llmRouter = new LLMRouter(config);
|
|
34
|
+
const commandLoader = new CommandLoader();
|
|
35
|
+
const hookRegistry = new HookRegistry();
|
|
36
|
+
await skillLoader.loadAll();
|
|
37
|
+
await commandLoader.loadProjectCommands(process.cwd());
|
|
38
|
+
await hookRegistry.loadProjectHooks(process.cwd());
|
|
39
|
+
// ─── Detect project name ───
|
|
40
|
+
let projectName;
|
|
41
|
+
try {
|
|
42
|
+
const pkg = await import('node:fs/promises').then(fs => fs.readFile('package.json', 'utf-8').then(JSON.parse));
|
|
43
|
+
projectName = pkg.name;
|
|
44
|
+
}
|
|
45
|
+
catch { /* not a node project */ }
|
|
46
|
+
// ─── Show welcome banner ───
|
|
47
|
+
const defaultProvider = config.models.routing.defaultProvider;
|
|
48
|
+
const providerConfig = config.models.providers[defaultProvider];
|
|
49
|
+
const modelName = providerConfig?.model ?? defaultProvider;
|
|
50
|
+
renderBanner(config, {
|
|
51
|
+
version: '0.8.0',
|
|
52
|
+
project: projectName,
|
|
53
|
+
skillCount: skillLoader.list().length,
|
|
54
|
+
commandCount: commandLoader.list().length,
|
|
55
|
+
provider: modelName,
|
|
56
|
+
});
|
|
57
|
+
// ─── Prepare tool definitions for LLM ───
|
|
58
|
+
const allTools = registry.list();
|
|
59
|
+
const toolDefs = allTools.map((t) => {
|
|
60
|
+
const fullTool = registry.get(t.name);
|
|
61
|
+
return {
|
|
62
|
+
name: t.name,
|
|
63
|
+
description: t.description,
|
|
64
|
+
inputSchema: fullTool ? zodToJsonSchema(fullTool.inputSchema) : {},
|
|
65
|
+
};
|
|
66
|
+
});
|
|
67
|
+
// ─── Build system prompt ───
|
|
68
|
+
const systemPrompt = `You are an autonomous AI agent that accomplishes tasks using available tools.
|
|
69
|
+
You have access to the following tools: ${toolDefs.map(t => t.name).join(', ')}.
|
|
70
|
+
|
|
71
|
+
Available Skills:
|
|
72
|
+
${skillLoader.list().map(s => `- ${s.manifest.name}: ${s.manifest.description}`).join('\n')}
|
|
73
|
+
|
|
74
|
+
Available Commands:
|
|
75
|
+
${commandLoader.list().map(c => `- ${c.name}: ${c.description}`).join('\n')}
|
|
76
|
+
|
|
77
|
+
INSTRUCTIONS:
|
|
78
|
+
1. Use available tools to complete the user's goal step by step.
|
|
79
|
+
2. Be proactive: if the user wants an action (open app, create file, refactor code), DO IT with tools.
|
|
80
|
+
3. Keep responses concise and actionable.
|
|
81
|
+
4. When done, provide a clear summary of what was accomplished.
|
|
82
|
+
5. If the user asks a question that doesn't require tool use, just answer directly.`;
|
|
83
|
+
// ─── Initialize conversation and slash commands ───
|
|
84
|
+
const conversation = new ConversationManager(systemPrompt);
|
|
85
|
+
const slashCommands = new SlashCommandRegistry();
|
|
86
|
+
const slashCtx = { config, skillLoader, commandLoader, hookRegistry, llmRouter };
|
|
87
|
+
const spinner = new Spinner();
|
|
88
|
+
const ctx = {
|
|
89
|
+
runId: generateRunId(),
|
|
90
|
+
cwd: process.cwd(),
|
|
91
|
+
config,
|
|
92
|
+
autonomous: false,
|
|
93
|
+
dryRun: false,
|
|
94
|
+
approvedPermissions: new Set(),
|
|
95
|
+
onApproval: promptApproval,
|
|
96
|
+
onProgress: (msg) => spinner.isSpinning ? spinner.update(msg) : undefined,
|
|
97
|
+
};
|
|
98
|
+
// ─── REPL Loop ───
|
|
99
|
+
const rl = createInterface({
|
|
100
|
+
input: process.stdin,
|
|
101
|
+
output: process.stdout,
|
|
102
|
+
prompt: chalk.cyan(' > '),
|
|
103
|
+
terminal: true,
|
|
104
|
+
completer: (line) => {
|
|
105
|
+
// Tab completion for slash commands
|
|
106
|
+
if (line.startsWith('/')) {
|
|
107
|
+
const prefix = line.slice(1);
|
|
108
|
+
const builtins = slashCommands.list().map(c => `/${c.name}`);
|
|
109
|
+
const userCmds = commandLoader.list().map(c => `/${c.name}`);
|
|
110
|
+
const all = [...builtins, ...userCmds];
|
|
111
|
+
const hits = all.filter(c => c.startsWith(`/${prefix}`));
|
|
112
|
+
return [hits.length ? hits : all, line];
|
|
113
|
+
}
|
|
114
|
+
return [[], line];
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
rl.prompt();
|
|
118
|
+
rl.on('line', async (input) => {
|
|
119
|
+
const trimmed = input.trim();
|
|
120
|
+
if (!trimmed) {
|
|
121
|
+
rl.prompt();
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
try {
|
|
125
|
+
// ─── Slash Command? ───
|
|
126
|
+
if (trimmed.startsWith('/')) {
|
|
127
|
+
const parts = trimmed.slice(1).split(' ');
|
|
128
|
+
const cmdName = parts[0];
|
|
129
|
+
const cmdArgs = parts.slice(1).join(' ');
|
|
130
|
+
// Built-in slash command
|
|
131
|
+
if (slashCommands.has(cmdName)) {
|
|
132
|
+
await slashCommands.get(cmdName).execute(cmdArgs, slashCtx);
|
|
133
|
+
rl.prompt();
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
// User-defined command
|
|
137
|
+
if (commandLoader.has(cmdName)) {
|
|
138
|
+
const command = commandLoader.get(cmdName);
|
|
139
|
+
console.log(chalk.dim(`\n Running command: ${command.name}...`));
|
|
140
|
+
await executeGoal(command.prompt, `Execute: ${cmdArgs || command.description}`, command.tools, {
|
|
141
|
+
conversation, llmRouter, registry, policy, toolDefs, ctx, spinner, rl,
|
|
142
|
+
});
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
console.log(chalk.red(` Unknown command: /${cmdName}`));
|
|
146
|
+
console.log(chalk.dim(` Type /help for available commands.`));
|
|
147
|
+
rl.prompt();
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
// ─── /compact ───
|
|
151
|
+
if (trimmed === '/compact') {
|
|
152
|
+
conversation.compact();
|
|
153
|
+
}
|
|
154
|
+
// ─── Natural language goal ───
|
|
155
|
+
console.log();
|
|
156
|
+
await executeGoal(undefined, trimmed, [], {
|
|
157
|
+
conversation, llmRouter, registry, policy, toolDefs, ctx, spinner, rl,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
renderError(err.message);
|
|
162
|
+
rl.prompt();
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
rl.on('close', () => {
|
|
166
|
+
console.log(chalk.dim('\n 👋 Goodbye!\n'));
|
|
167
|
+
process.exit(0);
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
async function executeGoal(systemOverride, userMessage, scopedTools, deps) {
|
|
171
|
+
const { conversation, llmRouter, registry, policy, ctx, spinner, rl } = deps;
|
|
172
|
+
const start = Date.now();
|
|
173
|
+
// Scope tools if command specifies them
|
|
174
|
+
let activeDefs = deps.toolDefs;
|
|
175
|
+
if (scopedTools.length > 0) {
|
|
176
|
+
activeDefs = deps.toolDefs.filter(t => scopedTools.some(pattern => {
|
|
177
|
+
if (pattern === t.name)
|
|
178
|
+
return true;
|
|
179
|
+
if (pattern.endsWith('.*'))
|
|
180
|
+
return t.name.startsWith(pattern.slice(0, -1));
|
|
181
|
+
return false;
|
|
182
|
+
}));
|
|
183
|
+
}
|
|
184
|
+
// Add user message to conversation
|
|
185
|
+
conversation.addUser(userMessage);
|
|
186
|
+
const messages = systemOverride
|
|
187
|
+
? [{ role: 'system', content: systemOverride }, ...conversation.getMessages().slice(1)]
|
|
188
|
+
: conversation.getMessages();
|
|
189
|
+
spinner.start('Thinking...');
|
|
190
|
+
const maxIterations = 20;
|
|
191
|
+
for (let i = 0; i < maxIterations; i++) {
|
|
192
|
+
const response = await llmRouter.chat({
|
|
193
|
+
messages,
|
|
194
|
+
tools: activeDefs,
|
|
195
|
+
});
|
|
196
|
+
if (response.toolCalls && response.toolCalls.length > 0) {
|
|
197
|
+
spinner.stop();
|
|
198
|
+
// Add assistant response with tool calls
|
|
199
|
+
conversation.addAssistant(response.content || '', response.toolCalls);
|
|
200
|
+
messages.push({ role: 'assistant', content: response.content || '', toolCalls: response.toolCalls });
|
|
201
|
+
for (const tc of response.toolCalls) {
|
|
202
|
+
const tool = registry.get(tc.name);
|
|
203
|
+
if (!tool) {
|
|
204
|
+
const errMsg = JSON.stringify({ error: `Tool ${tc.name} not found` });
|
|
205
|
+
conversation.addToolResult(errMsg, tc.id);
|
|
206
|
+
messages.push({ role: 'tool', content: errMsg, toolCallId: tc.id });
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
// Permission check
|
|
210
|
+
const permResult = await policy.checkPermission({
|
|
211
|
+
tool: tc.name,
|
|
212
|
+
operation: tc.name,
|
|
213
|
+
description: `Calling ${tc.name}`,
|
|
214
|
+
permissions: tool.permissions,
|
|
215
|
+
args: tc.args,
|
|
216
|
+
riskLevel: 'medium',
|
|
217
|
+
}, ctx);
|
|
218
|
+
if (!permResult.allowed && permResult.requiresApproval) {
|
|
219
|
+
const approved = await policy.requestApproval({
|
|
220
|
+
tool: tc.name,
|
|
221
|
+
operation: tc.name,
|
|
222
|
+
description: `Calling ${tc.name}`,
|
|
223
|
+
permissions: tool.permissions,
|
|
224
|
+
args: tc.args,
|
|
225
|
+
riskLevel: 'medium',
|
|
226
|
+
}, ctx);
|
|
227
|
+
if (!approved) {
|
|
228
|
+
const errMsg = JSON.stringify({ error: 'Permission denied by user' });
|
|
229
|
+
conversation.addToolResult(errMsg, tc.id);
|
|
230
|
+
messages.push({ role: 'tool', content: errMsg, toolCallId: tc.id });
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
else if (!permResult.allowed) {
|
|
235
|
+
const errMsg = JSON.stringify({ error: permResult.reason });
|
|
236
|
+
conversation.addToolResult(errMsg, tc.id);
|
|
237
|
+
messages.push({ role: 'tool', content: errMsg, toolCallId: tc.id });
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
// Execute tool with inline display
|
|
241
|
+
renderToolCall(tc.name, tc.args, 'running');
|
|
242
|
+
const result = await registry.execute(tc.name, tc.args, ctx);
|
|
243
|
+
if (result.success) {
|
|
244
|
+
renderToolCall(tc.name, tc.args, 'success');
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
renderToolCall(tc.name, tc.args, 'error', result.error);
|
|
248
|
+
}
|
|
249
|
+
const resultStr = JSON.stringify(result.data ?? { error: result.error });
|
|
250
|
+
conversation.addToolResult(resultStr, tc.id);
|
|
251
|
+
messages.push({ role: 'tool', content: resultStr, toolCallId: tc.id });
|
|
252
|
+
}
|
|
253
|
+
// Continue the loop for next LLM response
|
|
254
|
+
spinner.start('Thinking...');
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
// No tool calls — LLM finished, display response
|
|
258
|
+
spinner.stop();
|
|
259
|
+
if (response.content) {
|
|
260
|
+
conversation.addAssistant(response.content);
|
|
261
|
+
console.log();
|
|
262
|
+
console.log(' ' + response.content.split('\n').join('\n '));
|
|
263
|
+
}
|
|
264
|
+
renderSummary('Done', Date.now() - start);
|
|
265
|
+
break;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
rl.prompt();
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=repl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repl.js","sourceRoot":"","sources":["../../../src/cli/repl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { SkillLoader } from '../skills/loader.js';
|
|
2
|
+
import type { CommandLoader } from '../commands/loader.js';
|
|
3
|
+
import type { HookRegistry } from '../hooks/registry.js';
|
|
4
|
+
import type { LLMRouter } from '../llm/router.js';
|
|
5
|
+
import type { AgentConfig } from '../config/schema.js';
|
|
6
|
+
export interface SlashCommandContext {
|
|
7
|
+
config: AgentConfig;
|
|
8
|
+
skillLoader: SkillLoader;
|
|
9
|
+
commandLoader: CommandLoader;
|
|
10
|
+
hookRegistry: HookRegistry;
|
|
11
|
+
llmRouter: LLMRouter;
|
|
12
|
+
}
|
|
13
|
+
interface SlashCommand {
|
|
14
|
+
name: string;
|
|
15
|
+
description: string;
|
|
16
|
+
execute: (args: string, ctx: SlashCommandContext) => Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Slash Command Registry — built-in commands for the interactive REPL
|
|
20
|
+
*/
|
|
21
|
+
export declare class SlashCommandRegistry {
|
|
22
|
+
private commands;
|
|
23
|
+
constructor();
|
|
24
|
+
private registerBuiltins;
|
|
25
|
+
register(cmd: SlashCommand): void;
|
|
26
|
+
get(name: string): SlashCommand | undefined;
|
|
27
|
+
has(name: string): boolean;
|
|
28
|
+
list(): SlashCommand[];
|
|
29
|
+
}
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=slash-commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slash-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/slash-commands.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAChC,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,SAAS,CAAC;CACxB;AAED,UAAU,YAAY;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,QAAQ,CAAwC;;IAMxD,OAAO,CAAC,gBAAgB;IA8HxB,QAAQ,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAIjC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI3C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,IAAI,IAAI,YAAY,EAAE;CAGzB"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
/**
|
|
3
|
+
* Slash Command Registry — built-in commands for the interactive REPL
|
|
4
|
+
*/
|
|
5
|
+
export class SlashCommandRegistry {
|
|
6
|
+
commands = new Map();
|
|
7
|
+
constructor() {
|
|
8
|
+
this.registerBuiltins();
|
|
9
|
+
}
|
|
10
|
+
registerBuiltins() {
|
|
11
|
+
this.register({
|
|
12
|
+
name: 'help',
|
|
13
|
+
description: 'Show available commands',
|
|
14
|
+
execute: async (_args, ctx) => {
|
|
15
|
+
console.log(chalk.bold('\n 📖 Available Commands\n'));
|
|
16
|
+
// Built-in slash commands
|
|
17
|
+
console.log(chalk.cyan.bold(' Slash Commands'));
|
|
18
|
+
for (const cmd of this.list()) {
|
|
19
|
+
console.log(` ${chalk.white(`/${cmd.name}`)} ${chalk.dim(cmd.description)}`);
|
|
20
|
+
}
|
|
21
|
+
// User commands
|
|
22
|
+
const commands = ctx.commandLoader.list();
|
|
23
|
+
if (commands.length > 0) {
|
|
24
|
+
console.log(chalk.cyan.bold('\n Custom Commands'));
|
|
25
|
+
for (const cmd of commands) {
|
|
26
|
+
console.log(` ${chalk.white(`/${cmd.name}`)} ${chalk.dim(cmd.description)}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
console.log(chalk.dim('\n Or just type a goal in natural language.\n'));
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
this.register({
|
|
33
|
+
name: 'skills',
|
|
34
|
+
description: 'List installed skills',
|
|
35
|
+
execute: async (_args, ctx) => {
|
|
36
|
+
const skills = ctx.skillLoader.list();
|
|
37
|
+
if (skills.length === 0) {
|
|
38
|
+
console.log(chalk.dim('\n No skills installed.\n'));
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
console.log(chalk.bold(`\n 🧩 Skills (${skills.length})\n`));
|
|
42
|
+
for (const s of skills) {
|
|
43
|
+
const state = s.manifest.state === 'approved'
|
|
44
|
+
? chalk.green('●')
|
|
45
|
+
: chalk.yellow('○');
|
|
46
|
+
console.log(` ${state} ${chalk.white(s.manifest.name)} ${chalk.dim(`v${s.manifest.version}`)} — ${chalk.dim(s.manifest.description)}`);
|
|
47
|
+
}
|
|
48
|
+
console.log();
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
this.register({
|
|
52
|
+
name: 'commands',
|
|
53
|
+
description: 'List available commands',
|
|
54
|
+
execute: async (_args, ctx) => {
|
|
55
|
+
const commands = ctx.commandLoader.list();
|
|
56
|
+
if (commands.length === 0) {
|
|
57
|
+
console.log(chalk.dim('\n No commands found. Create .md files in .agent/commands/\n'));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
console.log(chalk.bold(`\n ⚡ Commands (${commands.length})\n`));
|
|
61
|
+
for (const cmd of commands) {
|
|
62
|
+
const tools = cmd.tools.length > 0
|
|
63
|
+
? chalk.dim(` [${cmd.tools.join(', ')}]`)
|
|
64
|
+
: '';
|
|
65
|
+
console.log(` ${chalk.white(cmd.name)} — ${chalk.dim(cmd.description)}${tools}`);
|
|
66
|
+
}
|
|
67
|
+
console.log();
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
this.register({
|
|
71
|
+
name: 'hooks',
|
|
72
|
+
description: 'Show registered hooks',
|
|
73
|
+
execute: async (_args, ctx) => {
|
|
74
|
+
const hooks = ctx.hookRegistry.list();
|
|
75
|
+
if (hooks.length === 0) {
|
|
76
|
+
console.log(chalk.dim('\n No hooks registered.\n'));
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
console.log(chalk.bold(`\n 🪝 Hooks (${ctx.hookRegistry.size})\n`));
|
|
80
|
+
for (const { event, hooks: defs } of hooks) {
|
|
81
|
+
console.log(chalk.cyan(` ${event}`));
|
|
82
|
+
for (const h of defs) {
|
|
83
|
+
console.log(chalk.dim(` → ${h.command}`));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
console.log();
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
this.register({
|
|
90
|
+
name: 'model',
|
|
91
|
+
description: 'Show current model provider',
|
|
92
|
+
execute: async (_args, ctx) => {
|
|
93
|
+
const providers = await ctx.llmRouter.getAvailableProviders();
|
|
94
|
+
const defaultProv = ctx.config.models.routing.defaultProvider;
|
|
95
|
+
console.log(chalk.bold('\n 🧠 Model Configuration\n'));
|
|
96
|
+
console.log(` Default: ${chalk.white(defaultProv)}`);
|
|
97
|
+
console.log(` Available: ${providers.map(p => p === defaultProv ? chalk.green(p) : chalk.dim(p)).join(', ')}`);
|
|
98
|
+
console.log(` Fallback chain: ${chalk.dim(ctx.config.models.routing.fallbackChain.join(' → '))}`);
|
|
99
|
+
console.log();
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
this.register({
|
|
103
|
+
name: 'clear',
|
|
104
|
+
description: 'Clear screen',
|
|
105
|
+
execute: async () => {
|
|
106
|
+
console.clear();
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
this.register({
|
|
110
|
+
name: 'compact',
|
|
111
|
+
description: 'Summarize conversation and free context',
|
|
112
|
+
execute: async () => {
|
|
113
|
+
console.log(chalk.dim('\n Conversation compacted. Context freed.\n'));
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
this.register({
|
|
117
|
+
name: 'exit',
|
|
118
|
+
description: 'Exit interactive mode',
|
|
119
|
+
execute: async () => {
|
|
120
|
+
console.log(chalk.dim('\n 👋 Goodbye!\n'));
|
|
121
|
+
process.exit(0);
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
register(cmd) {
|
|
126
|
+
this.commands.set(cmd.name, cmd);
|
|
127
|
+
}
|
|
128
|
+
get(name) {
|
|
129
|
+
return this.commands.get(name);
|
|
130
|
+
}
|
|
131
|
+
has(name) {
|
|
132
|
+
return this.commands.has(name);
|
|
133
|
+
}
|
|
134
|
+
list() {
|
|
135
|
+
return Array.from(this.commands.values());
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=slash-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slash-commands.js","sourceRoot":"","sources":["../../../src/cli/slash-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { AgentConfig } from '../../config/schema.js';
|
|
2
|
+
/**
|
|
3
|
+
* Render the welcome banner for interactive mode
|
|
4
|
+
*/
|
|
5
|
+
export declare function renderBanner(_config: AgentConfig, meta: {
|
|
6
|
+
version: string;
|
|
7
|
+
project?: string;
|
|
8
|
+
skillCount: number;
|
|
9
|
+
commandCount: number;
|
|
10
|
+
provider: string;
|
|
11
|
+
}): void;
|
|
12
|
+
/**
|
|
13
|
+
* Render a compact tool call inline
|
|
14
|
+
*/
|
|
15
|
+
export declare function renderToolCall(name: string, args: unknown, status: 'running' | 'success' | 'error', error?: string): void;
|
|
16
|
+
/**
|
|
17
|
+
* Render a section separator
|
|
18
|
+
*/
|
|
19
|
+
export declare function renderSeparator(): void;
|
|
20
|
+
/**
|
|
21
|
+
* Render a boxed summary
|
|
22
|
+
*/
|
|
23
|
+
export declare function renderSummary(title: string, durationMs: number): void;
|
|
24
|
+
/**
|
|
25
|
+
* Render an error result
|
|
26
|
+
*/
|
|
27
|
+
export declare function renderError(message: string): void;
|
|
28
|
+
/**
|
|
29
|
+
* Render streaming text character by character
|
|
30
|
+
*/
|
|
31
|
+
export declare function renderStreaming(text: string, delayMs?: number): Promise<void>;
|
|
32
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../../src/cli/ui/render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CACpB,GAAG,IAAI,CA6BP;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAezH;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAKrE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIjD;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAO9E"}
|