@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.
Files changed (98) hide show
  1. package/ROADMAP.md +14 -0
  2. package/bin/agent.ts +19 -1
  3. package/dist/bin/agent.js +20 -1
  4. package/dist/bin/agent.js.map +1 -1
  5. package/dist/src/cli/commands/commands-cmd.d.ts +3 -0
  6. package/dist/src/cli/commands/commands-cmd.d.ts.map +1 -0
  7. package/dist/src/cli/commands/commands-cmd.js +39 -0
  8. package/dist/src/cli/commands/commands-cmd.js.map +1 -0
  9. package/dist/src/cli/commands/hooks.d.ts +3 -0
  10. package/dist/src/cli/commands/hooks.d.ts.map +1 -0
  11. package/dist/src/cli/commands/hooks.js +119 -0
  12. package/dist/src/cli/commands/hooks.js.map +1 -0
  13. package/dist/src/cli/commands/init.d.ts.map +1 -1
  14. package/dist/src/cli/commands/init.js +2 -0
  15. package/dist/src/cli/commands/init.js.map +1 -1
  16. package/dist/src/cli/commands/plugins.d.ts +3 -0
  17. package/dist/src/cli/commands/plugins.d.ts.map +1 -0
  18. package/dist/src/cli/commands/plugins.js +86 -0
  19. package/dist/src/cli/commands/plugins.js.map +1 -0
  20. package/dist/src/cli/commands/run.d.ts.map +1 -1
  21. package/dist/src/cli/commands/run.js +74 -0
  22. package/dist/src/cli/commands/run.js.map +1 -1
  23. package/dist/src/cli/conversation.d.ts +39 -0
  24. package/dist/src/cli/conversation.d.ts.map +1 -0
  25. package/dist/src/cli/conversation.js +69 -0
  26. package/dist/src/cli/conversation.js.map +1 -0
  27. package/dist/src/cli/index.d.ts.map +1 -1
  28. package/dist/src/cli/index.js +7 -1
  29. package/dist/src/cli/index.js.map +1 -1
  30. package/dist/src/cli/repl.d.ts +9 -0
  31. package/dist/src/cli/repl.d.ts.map +1 -0
  32. package/dist/src/cli/repl.js +270 -0
  33. package/dist/src/cli/repl.js.map +1 -0
  34. package/dist/src/cli/slash-commands.d.ts +31 -0
  35. package/dist/src/cli/slash-commands.d.ts.map +1 -0
  36. package/dist/src/cli/slash-commands.js +138 -0
  37. package/dist/src/cli/slash-commands.js.map +1 -0
  38. package/dist/src/cli/ui/render.d.ts +32 -0
  39. package/dist/src/cli/ui/render.d.ts.map +1 -0
  40. package/dist/src/cli/ui/render.js +79 -0
  41. package/dist/src/cli/ui/render.js.map +1 -0
  42. package/dist/src/cli/ui/spinner.d.ts +40 -0
  43. package/dist/src/cli/ui/spinner.d.ts.map +1 -0
  44. package/dist/src/cli/ui/spinner.js +63 -0
  45. package/dist/src/cli/ui/spinner.js.map +1 -0
  46. package/dist/src/commands/loader.d.ts +54 -0
  47. package/dist/src/commands/loader.d.ts.map +1 -0
  48. package/dist/src/commands/loader.js +136 -0
  49. package/dist/src/commands/loader.js.map +1 -0
  50. package/dist/src/commands/types.d.ts +28 -0
  51. package/dist/src/commands/types.d.ts.map +1 -0
  52. package/dist/src/commands/types.js +10 -0
  53. package/dist/src/commands/types.js.map +1 -0
  54. package/dist/src/config/defaults.d.ts.map +1 -1
  55. package/dist/src/config/defaults.js +15 -0
  56. package/dist/src/config/defaults.js.map +1 -1
  57. package/dist/src/config/schema.d.ts +153 -0
  58. package/dist/src/config/schema.d.ts.map +1 -1
  59. package/dist/src/config/schema.js +25 -0
  60. package/dist/src/config/schema.js.map +1 -1
  61. package/dist/src/engine/executor.d.ts +3 -1
  62. package/dist/src/engine/executor.d.ts.map +1 -1
  63. package/dist/src/engine/executor.js +24 -1
  64. package/dist/src/engine/executor.js.map +1 -1
  65. package/dist/src/hooks/registry.d.ts +45 -0
  66. package/dist/src/hooks/registry.d.ts.map +1 -0
  67. package/dist/src/hooks/registry.js +126 -0
  68. package/dist/src/hooks/registry.js.map +1 -0
  69. package/dist/src/hooks/runner.d.ts +22 -0
  70. package/dist/src/hooks/runner.d.ts.map +1 -0
  71. package/dist/src/hooks/runner.js +71 -0
  72. package/dist/src/hooks/runner.js.map +1 -0
  73. package/dist/src/hooks/types.d.ts +50 -0
  74. package/dist/src/hooks/types.d.ts.map +1 -0
  75. package/dist/src/hooks/types.js +14 -0
  76. package/dist/src/hooks/types.js.map +1 -0
  77. package/dist/src/index.d.ts +6 -0
  78. package/dist/src/index.d.ts.map +1 -1
  79. package/dist/src/index.js +3 -0
  80. package/dist/src/index.js.map +1 -1
  81. package/dist/src/plans/runner.d.ts +3 -1
  82. package/dist/src/plans/runner.d.ts.map +1 -1
  83. package/dist/src/plans/runner.js +33 -1
  84. package/dist/src/plans/runner.js.map +1 -1
  85. package/dist/src/plugins/loader.d.ts +40 -0
  86. package/dist/src/plugins/loader.d.ts.map +1 -0
  87. package/dist/src/plugins/loader.js +136 -0
  88. package/dist/src/plugins/loader.js.map +1 -0
  89. package/dist/src/plugins/types.d.ts +47 -0
  90. package/dist/src/plugins/types.d.ts.map +1 -0
  91. package/dist/src/plugins/types.js +9 -0
  92. package/dist/src/plugins/types.js.map +1 -0
  93. package/dist/src/skills/types.d.ts +4 -4
  94. package/dist/src/tools/core/cli-tools.d.ts +7 -0
  95. package/dist/src/tools/core/cli-tools.d.ts.map +1 -0
  96. package/dist/src/tools/core/cli-tools.js +110 -0
  97. package/dist/src/tools/core/cli-tools.js.map +1 -0
  98. 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;AAapC;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CA0BnC"}
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"}
@@ -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.7.5')
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;AAE3D;;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;IAE1C,OAAO,OAAO,CAAC;AACnB,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"}