cmdr-agent 1.0.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 (219) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +238 -0
  3. package/dist/bin/cmdr.d.ts +9 -0
  4. package/dist/bin/cmdr.d.ts.map +1 -0
  5. package/dist/bin/cmdr.js +49 -0
  6. package/dist/bin/cmdr.js.map +1 -0
  7. package/dist/src/cli/args.d.ts +19 -0
  8. package/dist/src/cli/args.d.ts.map +1 -0
  9. package/dist/src/cli/args.js +89 -0
  10. package/dist/src/cli/args.js.map +1 -0
  11. package/dist/src/cli/commands.d.ts +12 -0
  12. package/dist/src/cli/commands.d.ts.map +1 -0
  13. package/dist/src/cli/commands.js +400 -0
  14. package/dist/src/cli/commands.js.map +1 -0
  15. package/dist/src/cli/renderer.d.ts +8 -0
  16. package/dist/src/cli/renderer.d.ts.map +1 -0
  17. package/dist/src/cli/renderer.js +47 -0
  18. package/dist/src/cli/renderer.js.map +1 -0
  19. package/dist/src/cli/repl.d.ts +18 -0
  20. package/dist/src/cli/repl.d.ts.map +1 -0
  21. package/dist/src/cli/repl.js +751 -0
  22. package/dist/src/cli/repl.js.map +1 -0
  23. package/dist/src/cli/spinner.d.ts +16 -0
  24. package/dist/src/cli/spinner.d.ts.map +1 -0
  25. package/dist/src/cli/spinner.js +233 -0
  26. package/dist/src/cli/spinner.js.map +1 -0
  27. package/dist/src/cli/theme.d.ts +95 -0
  28. package/dist/src/cli/theme.d.ts.map +1 -0
  29. package/dist/src/cli/theme.js +178 -0
  30. package/dist/src/cli/theme.js.map +1 -0
  31. package/dist/src/communication/message-bus.d.ts +35 -0
  32. package/dist/src/communication/message-bus.d.ts.map +1 -0
  33. package/dist/src/communication/message-bus.js +60 -0
  34. package/dist/src/communication/message-bus.js.map +1 -0
  35. package/dist/src/communication/shared-memory.d.ts +19 -0
  36. package/dist/src/communication/shared-memory.d.ts.map +1 -0
  37. package/dist/src/communication/shared-memory.js +37 -0
  38. package/dist/src/communication/shared-memory.js.map +1 -0
  39. package/dist/src/communication/task-queue.d.ts +50 -0
  40. package/dist/src/communication/task-queue.d.ts.map +1 -0
  41. package/dist/src/communication/task-queue.js +158 -0
  42. package/dist/src/communication/task-queue.js.map +1 -0
  43. package/dist/src/config/config-loader.d.ts +23 -0
  44. package/dist/src/config/config-loader.d.ts.map +1 -0
  45. package/dist/src/config/config-loader.js +91 -0
  46. package/dist/src/config/config-loader.js.map +1 -0
  47. package/dist/src/config/defaults.d.ts +6 -0
  48. package/dist/src/config/defaults.d.ts.map +1 -0
  49. package/dist/src/config/defaults.js +21 -0
  50. package/dist/src/config/defaults.js.map +1 -0
  51. package/dist/src/config/schema.d.ts +135 -0
  52. package/dist/src/config/schema.d.ts.map +1 -0
  53. package/dist/src/config/schema.js +35 -0
  54. package/dist/src/config/schema.js.map +1 -0
  55. package/dist/src/config/telemetry.d.ts +41 -0
  56. package/dist/src/config/telemetry.d.ts.map +1 -0
  57. package/dist/src/config/telemetry.js +57 -0
  58. package/dist/src/config/telemetry.js.map +1 -0
  59. package/dist/src/core/agent-pool.d.ts +40 -0
  60. package/dist/src/core/agent-pool.d.ts.map +1 -0
  61. package/dist/src/core/agent-pool.js +66 -0
  62. package/dist/src/core/agent-pool.js.map +1 -0
  63. package/dist/src/core/agent-runner.d.ts +51 -0
  64. package/dist/src/core/agent-runner.d.ts.map +1 -0
  65. package/dist/src/core/agent-runner.js +251 -0
  66. package/dist/src/core/agent-runner.js.map +1 -0
  67. package/dist/src/core/agent.d.ts +34 -0
  68. package/dist/src/core/agent.d.ts.map +1 -0
  69. package/dist/src/core/agent.js +143 -0
  70. package/dist/src/core/agent.js.map +1 -0
  71. package/dist/src/core/intent.d.ts +33 -0
  72. package/dist/src/core/intent.d.ts.map +1 -0
  73. package/dist/src/core/intent.js +91 -0
  74. package/dist/src/core/intent.js.map +1 -0
  75. package/dist/src/core/orchestrator.d.ts +43 -0
  76. package/dist/src/core/orchestrator.d.ts.map +1 -0
  77. package/dist/src/core/orchestrator.js +115 -0
  78. package/dist/src/core/orchestrator.js.map +1 -0
  79. package/dist/src/core/permissions.d.ts +36 -0
  80. package/dist/src/core/permissions.d.ts.map +1 -0
  81. package/dist/src/core/permissions.js +129 -0
  82. package/dist/src/core/permissions.js.map +1 -0
  83. package/dist/src/core/presets.d.ts +12 -0
  84. package/dist/src/core/presets.d.ts.map +1 -0
  85. package/dist/src/core/presets.js +148 -0
  86. package/dist/src/core/presets.js.map +1 -0
  87. package/dist/src/core/team.d.ts +44 -0
  88. package/dist/src/core/team.d.ts.map +1 -0
  89. package/dist/src/core/team.js +156 -0
  90. package/dist/src/core/team.js.map +1 -0
  91. package/dist/src/core/types.d.ts +257 -0
  92. package/dist/src/core/types.d.ts.map +1 -0
  93. package/dist/src/core/types.js +7 -0
  94. package/dist/src/core/types.js.map +1 -0
  95. package/dist/src/index.d.ts +44 -0
  96. package/dist/src/index.d.ts.map +1 -0
  97. package/dist/src/index.js +45 -0
  98. package/dist/src/index.js.map +1 -0
  99. package/dist/src/llm/adapter.d.ts +5 -0
  100. package/dist/src/llm/adapter.d.ts.map +1 -0
  101. package/dist/src/llm/adapter.js +5 -0
  102. package/dist/src/llm/adapter.js.map +1 -0
  103. package/dist/src/llm/model-registry.d.ts +14 -0
  104. package/dist/src/llm/model-registry.d.ts.map +1 -0
  105. package/dist/src/llm/model-registry.js +30 -0
  106. package/dist/src/llm/model-registry.js.map +1 -0
  107. package/dist/src/llm/ollama.d.ts +26 -0
  108. package/dist/src/llm/ollama.d.ts.map +1 -0
  109. package/dist/src/llm/ollama.js +375 -0
  110. package/dist/src/llm/ollama.js.map +1 -0
  111. package/dist/src/llm/token-counter.d.ts +11 -0
  112. package/dist/src/llm/token-counter.d.ts.map +1 -0
  113. package/dist/src/llm/token-counter.js +35 -0
  114. package/dist/src/llm/token-counter.js.map +1 -0
  115. package/dist/src/plugins/mcp-client.d.ts +38 -0
  116. package/dist/src/plugins/mcp-client.d.ts.map +1 -0
  117. package/dist/src/plugins/mcp-client.js +113 -0
  118. package/dist/src/plugins/mcp-client.js.map +1 -0
  119. package/dist/src/plugins/plugin-manager.d.ts +37 -0
  120. package/dist/src/plugins/plugin-manager.d.ts.map +1 -0
  121. package/dist/src/plugins/plugin-manager.js +146 -0
  122. package/dist/src/plugins/plugin-manager.js.map +1 -0
  123. package/dist/src/scheduling/semaphore.d.ts +20 -0
  124. package/dist/src/scheduling/semaphore.d.ts.map +1 -0
  125. package/dist/src/scheduling/semaphore.js +52 -0
  126. package/dist/src/scheduling/semaphore.js.map +1 -0
  127. package/dist/src/scheduling/strategies.d.ts +39 -0
  128. package/dist/src/scheduling/strategies.d.ts.map +1 -0
  129. package/dist/src/scheduling/strategies.js +88 -0
  130. package/dist/src/scheduling/strategies.js.map +1 -0
  131. package/dist/src/session/compaction.d.ts +32 -0
  132. package/dist/src/session/compaction.d.ts.map +1 -0
  133. package/dist/src/session/compaction.js +172 -0
  134. package/dist/src/session/compaction.js.map +1 -0
  135. package/dist/src/session/cost-tracker.d.ts +41 -0
  136. package/dist/src/session/cost-tracker.d.ts.map +1 -0
  137. package/dist/src/session/cost-tracker.js +76 -0
  138. package/dist/src/session/cost-tracker.js.map +1 -0
  139. package/dist/src/session/project-context.d.ts +6 -0
  140. package/dist/src/session/project-context.d.ts.map +1 -0
  141. package/dist/src/session/project-context.js +147 -0
  142. package/dist/src/session/project-context.js.map +1 -0
  143. package/dist/src/session/prompt-builder.d.ts +11 -0
  144. package/dist/src/session/prompt-builder.d.ts.map +1 -0
  145. package/dist/src/session/prompt-builder.js +30 -0
  146. package/dist/src/session/prompt-builder.js.map +1 -0
  147. package/dist/src/session/session-manager.d.ts +32 -0
  148. package/dist/src/session/session-manager.d.ts.map +1 -0
  149. package/dist/src/session/session-manager.js +84 -0
  150. package/dist/src/session/session-manager.js.map +1 -0
  151. package/dist/src/session/session-persistence.d.ts +44 -0
  152. package/dist/src/session/session-persistence.d.ts.map +1 -0
  153. package/dist/src/session/session-persistence.js +150 -0
  154. package/dist/src/session/session-persistence.js.map +1 -0
  155. package/dist/src/session/undo-manager.d.ts +35 -0
  156. package/dist/src/session/undo-manager.d.ts.map +1 -0
  157. package/dist/src/session/undo-manager.js +79 -0
  158. package/dist/src/session/undo-manager.js.map +1 -0
  159. package/dist/src/tools/built-in/ask-user.d.ts +7 -0
  160. package/dist/src/tools/built-in/ask-user.d.ts.map +1 -0
  161. package/dist/src/tools/built-in/ask-user.js +28 -0
  162. package/dist/src/tools/built-in/ask-user.js.map +1 -0
  163. package/dist/src/tools/built-in/bash.d.ts +9 -0
  164. package/dist/src/tools/built-in/bash.d.ts.map +1 -0
  165. package/dist/src/tools/built-in/bash.js +67 -0
  166. package/dist/src/tools/built-in/bash.js.map +1 -0
  167. package/dist/src/tools/built-in/file-edit.d.ts +9 -0
  168. package/dist/src/tools/built-in/file-edit.d.ts.map +1 -0
  169. package/dist/src/tools/built-in/file-edit.js +39 -0
  170. package/dist/src/tools/built-in/file-edit.js.map +1 -0
  171. package/dist/src/tools/built-in/file-read.d.ts +9 -0
  172. package/dist/src/tools/built-in/file-read.d.ts.map +1 -0
  173. package/dist/src/tools/built-in/file-read.js +41 -0
  174. package/dist/src/tools/built-in/file-read.js.map +1 -0
  175. package/dist/src/tools/built-in/file-write.d.ts +8 -0
  176. package/dist/src/tools/built-in/file-write.d.ts.map +1 -0
  177. package/dist/src/tools/built-in/file-write.js +29 -0
  178. package/dist/src/tools/built-in/file-write.js.map +1 -0
  179. package/dist/src/tools/built-in/git-commit.d.ts +12 -0
  180. package/dist/src/tools/built-in/git-commit.d.ts.map +1 -0
  181. package/dist/src/tools/built-in/git-commit.js +96 -0
  182. package/dist/src/tools/built-in/git-commit.js.map +1 -0
  183. package/dist/src/tools/built-in/git-diff.d.ts +8 -0
  184. package/dist/src/tools/built-in/git-diff.d.ts.map +1 -0
  185. package/dist/src/tools/built-in/git-diff.js +43 -0
  186. package/dist/src/tools/built-in/git-diff.js.map +1 -0
  187. package/dist/src/tools/built-in/git-log.d.ts +8 -0
  188. package/dist/src/tools/built-in/git-log.d.ts.map +1 -0
  189. package/dist/src/tools/built-in/git-log.js +39 -0
  190. package/dist/src/tools/built-in/git-log.js.map +1 -0
  191. package/dist/src/tools/built-in/glob.d.ts +8 -0
  192. package/dist/src/tools/built-in/glob.d.ts.map +1 -0
  193. package/dist/src/tools/built-in/glob.js +60 -0
  194. package/dist/src/tools/built-in/glob.js.map +1 -0
  195. package/dist/src/tools/built-in/grep.d.ts +9 -0
  196. package/dist/src/tools/built-in/grep.d.ts.map +1 -0
  197. package/dist/src/tools/built-in/grep.js +115 -0
  198. package/dist/src/tools/built-in/grep.js.map +1 -0
  199. package/dist/src/tools/built-in/index.d.ts +21 -0
  200. package/dist/src/tools/built-in/index.d.ts.map +1 -0
  201. package/dist/src/tools/built-in/index.js +30 -0
  202. package/dist/src/tools/built-in/index.js.map +1 -0
  203. package/dist/src/tools/built-in/think.d.ts +7 -0
  204. package/dist/src/tools/built-in/think.d.ts.map +1 -0
  205. package/dist/src/tools/built-in/think.js +18 -0
  206. package/dist/src/tools/built-in/think.js.map +1 -0
  207. package/dist/src/tools/built-in/web-fetch.d.ts +11 -0
  208. package/dist/src/tools/built-in/web-fetch.d.ts.map +1 -0
  209. package/dist/src/tools/built-in/web-fetch.js +70 -0
  210. package/dist/src/tools/built-in/web-fetch.js.map +1 -0
  211. package/dist/src/tools/executor.d.ts +25 -0
  212. package/dist/src/tools/executor.d.ts.map +1 -0
  213. package/dist/src/tools/executor.js +61 -0
  214. package/dist/src/tools/executor.js.map +1 -0
  215. package/dist/src/tools/registry.d.ts +25 -0
  216. package/dist/src/tools/registry.d.ts.map +1 -0
  217. package/dist/src/tools/registry.js +135 -0
  218. package/dist/src/tools/registry.js.map +1 -0
  219. package/package.json +63 -0
@@ -0,0 +1,35 @@
1
+ /**
2
+ * MessageBus — inter-agent message passing for multi-agent teams.
3
+ *
4
+ * Agents can publish messages to named channels and subscribe to receive them.
5
+ * Supports both broadcast (to all subscribers) and direct (to named agent).
6
+ */
7
+ export interface BusMessage {
8
+ readonly from: string;
9
+ readonly to?: string;
10
+ readonly channel: string;
11
+ readonly payload: unknown;
12
+ readonly timestamp: Date;
13
+ }
14
+ export type MessageHandler = (message: BusMessage) => void | Promise<void>;
15
+ export declare class MessageBus {
16
+ private subscriptions;
17
+ private history;
18
+ private readonly maxHistory;
19
+ constructor(maxHistory?: number);
20
+ /** Subscribe an agent to a channel. */
21
+ subscribe(agent: string, channel: string, handler: MessageHandler): void;
22
+ /** Unsubscribe an agent from all channels. */
23
+ unsubscribe(agent: string): void;
24
+ /** Publish a message. Delivers to matching subscribers. */
25
+ publish(message: Omit<BusMessage, 'timestamp'>): Promise<void>;
26
+ /** Broadcast to all subscribers of a channel (except sender). */
27
+ broadcast(from: string, channel: string, payload: unknown): Promise<void>;
28
+ /** Send directly to a specific agent. */
29
+ send(from: string, to: string, channel: string, payload: unknown): Promise<void>;
30
+ /** Get recent message history, optionally filtered by channel. */
31
+ getHistory(channel?: string): BusMessage[];
32
+ /** Clear all subscriptions and history. */
33
+ reset(): void;
34
+ }
35
+ //# sourceMappingURL=message-bus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-bus.d.ts","sourceRoot":"","sources":["../../../src/communication/message-bus.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;CACzB;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAQ1E,qBAAa,UAAU;IACrB,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;gBAEvB,UAAU,SAAM;IAI5B,uCAAuC;IACvC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAIxE,8CAA8C;IAC9C,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIhC,2DAA2D;IACrD,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBpE,iEAAiE;IAC3D,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/E,yCAAyC;IACnC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAItF,kEAAkE;IAClE,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE;IAK1C,2CAA2C;IAC3C,KAAK,IAAI,IAAI;CAId"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * MessageBus — inter-agent message passing for multi-agent teams.
3
+ *
4
+ * Agents can publish messages to named channels and subscribe to receive them.
5
+ * Supports both broadcast (to all subscribers) and direct (to named agent).
6
+ */
7
+ export class MessageBus {
8
+ subscriptions = [];
9
+ history = [];
10
+ maxHistory;
11
+ constructor(maxHistory = 200) {
12
+ this.maxHistory = maxHistory;
13
+ }
14
+ /** Subscribe an agent to a channel. */
15
+ subscribe(agent, channel, handler) {
16
+ this.subscriptions.push({ agent, channel, handler });
17
+ }
18
+ /** Unsubscribe an agent from all channels. */
19
+ unsubscribe(agent) {
20
+ this.subscriptions = this.subscriptions.filter(s => s.agent !== agent);
21
+ }
22
+ /** Publish a message. Delivers to matching subscribers. */
23
+ async publish(message) {
24
+ const msg = { ...message, timestamp: new Date() };
25
+ this.history.push(msg);
26
+ if (this.history.length > this.maxHistory) {
27
+ this.history = this.history.slice(-this.maxHistory);
28
+ }
29
+ const targets = this.subscriptions.filter(s => {
30
+ if (s.channel !== msg.channel && s.channel !== '*')
31
+ return false;
32
+ if (msg.to && s.agent !== msg.to)
33
+ return false;
34
+ if (s.agent === msg.from)
35
+ return false; // don't echo to sender
36
+ return true;
37
+ });
38
+ await Promise.all(targets.map(s => s.handler(msg)));
39
+ }
40
+ /** Broadcast to all subscribers of a channel (except sender). */
41
+ async broadcast(from, channel, payload) {
42
+ await this.publish({ from, channel, payload });
43
+ }
44
+ /** Send directly to a specific agent. */
45
+ async send(from, to, channel, payload) {
46
+ await this.publish({ from, to, channel, payload });
47
+ }
48
+ /** Get recent message history, optionally filtered by channel. */
49
+ getHistory(channel) {
50
+ if (!channel)
51
+ return [...this.history];
52
+ return this.history.filter(m => m.channel === channel);
53
+ }
54
+ /** Clear all subscriptions and history. */
55
+ reset() {
56
+ this.subscriptions = [];
57
+ this.history = [];
58
+ }
59
+ }
60
+ //# sourceMappingURL=message-bus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-bus.js","sourceRoot":"","sources":["../../../src/communication/message-bus.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,MAAM,OAAO,UAAU;IACb,aAAa,GAAmB,EAAE,CAAA;IAClC,OAAO,GAAiB,EAAE,CAAA;IACjB,UAAU,CAAQ;IAEnC,YAAY,UAAU,GAAG,GAAG;QAC1B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED,uCAAuC;IACvC,SAAS,CAAC,KAAa,EAAE,OAAe,EAAE,OAAuB;QAC/D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;IACtD,CAAC;IAED,8CAA8C;IAC9C,WAAW,CAAC,KAAa;QACvB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAA;IACxE,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,OAAO,CAAC,OAAsC;QAClD,MAAM,GAAG,GAAe,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAA;QAC7D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACtB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACrD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YAC5C,IAAI,CAAC,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,GAAG;gBAAE,OAAO,KAAK,CAAA;YAChE,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,EAAE;gBAAE,OAAO,KAAK,CAAA;YAC9C,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,IAAI;gBAAE,OAAO,KAAK,CAAA,CAAE,uBAAuB;YAC/D,OAAO,IAAI,CAAA;QACb,CAAC,CAAC,CAAA;QAEF,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IACrD,CAAC;IAED,iEAAiE;IACjE,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,OAAe,EAAE,OAAgB;QAC7D,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;IAChD,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,EAAU,EAAE,OAAe,EAAE,OAAgB;QACpE,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;IACpD,CAAC;IAED,kEAAkE;IAClE,UAAU,CAAC,OAAgB;QACzB,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA;QACtC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAA;IACxD,CAAC;IAED,2CAA2C;IAC3C,KAAK;QACH,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QACvB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;IACnB,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * SharedMemory — shared key-value store across agents in a team.
3
+ *
4
+ * Implements the MemoryStore interface from core/types.
5
+ */
6
+ import type { MemoryEntry, MemoryStore } from '../core/types.js';
7
+ export declare class SharedMemory implements MemoryStore {
8
+ private store;
9
+ get(key: string): Promise<MemoryEntry | null>;
10
+ set(key: string, value: string, metadata?: Record<string, unknown>): Promise<void>;
11
+ list(): Promise<MemoryEntry[]>;
12
+ delete(key: string): Promise<void>;
13
+ clear(): Promise<void>;
14
+ /** Synchronous snapshot of all entries (for status display). */
15
+ snapshot(): Map<string, MemoryEntry>;
16
+ /** Total number of entries. */
17
+ get size(): number;
18
+ }
19
+ //# sourceMappingURL=shared-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-memory.d.ts","sourceRoot":"","sources":["../../../src/communication/shared-memory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEhE,qBAAa,YAAa,YAAW,WAAW;IAC9C,OAAO,CAAC,KAAK,CAAiC;IAExC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAI7C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IASlF,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAI9B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,gEAAgE;IAChE,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC;IAIpC,+BAA+B;IAC/B,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * SharedMemory — shared key-value store across agents in a team.
3
+ *
4
+ * Implements the MemoryStore interface from core/types.
5
+ */
6
+ export class SharedMemory {
7
+ store = new Map();
8
+ async get(key) {
9
+ return this.store.get(key) ?? null;
10
+ }
11
+ async set(key, value, metadata) {
12
+ this.store.set(key, {
13
+ key,
14
+ value,
15
+ metadata: metadata ? Object.freeze({ ...metadata }) : undefined,
16
+ createdAt: new Date(),
17
+ });
18
+ }
19
+ async list() {
20
+ return Array.from(this.store.values());
21
+ }
22
+ async delete(key) {
23
+ this.store.delete(key);
24
+ }
25
+ async clear() {
26
+ this.store.clear();
27
+ }
28
+ /** Synchronous snapshot of all entries (for status display). */
29
+ snapshot() {
30
+ return new Map(this.store);
31
+ }
32
+ /** Total number of entries. */
33
+ get size() {
34
+ return this.store.size;
35
+ }
36
+ }
37
+ //# sourceMappingURL=shared-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-memory.js","sourceRoot":"","sources":["../../../src/communication/shared-memory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,OAAO,YAAY;IACf,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAA;IAE9C,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAA;IACpC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,QAAkC;QACtE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YAClB,GAAG;YACH,KAAK;YACL,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YAC/D,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,IAAI;QACR,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;IACxC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAED,gEAAgE;IAChE,QAAQ;QACN,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5B,CAAC;IAED,+BAA+B;IAC/B,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;IACxB,CAAC;CACF"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * TaskQueue — dependency-aware task scheduling with topological ordering.
3
+ *
4
+ * Supports DAG-based dependency resolution, auto-unblocking, and cascade failure.
5
+ */
6
+ import type { Task, TaskStatus } from '../core/types.js';
7
+ export interface TaskQueueOptions {
8
+ readonly onTaskReady?: (task: Task) => void;
9
+ readonly onTaskComplete?: (task: Task) => void;
10
+ readonly onTaskFailed?: (task: Task, error: Error) => void;
11
+ }
12
+ export declare class TaskQueue {
13
+ private tasks;
14
+ private readonly options;
15
+ constructor(options?: TaskQueueOptions);
16
+ /** Add a task to the queue. */
17
+ add(task: Task): void;
18
+ /** Add multiple tasks at once. */
19
+ addAll(tasks: Task[]): void;
20
+ /** Get a task by ID. */
21
+ get(id: string): Task | undefined;
22
+ /** Return all tasks. */
23
+ getAll(): Task[];
24
+ /**
25
+ * Return tasks that are ready to execute (pending + all dependencies satisfied).
26
+ */
27
+ getReady(): Task[];
28
+ /** Check if all dependencies of a task are completed. */
29
+ private dependenciesSatisfied;
30
+ /** Mark a task as in-progress. */
31
+ start(id: string): void;
32
+ /** Mark a task as completed with an optional result. */
33
+ complete(id: string, result?: string): void;
34
+ /** Mark a task as failed — cascades to dependent tasks. */
35
+ fail(id: string, error: Error): void;
36
+ /** Recursively fail all tasks that depend on a failed task. */
37
+ private cascadeFailure;
38
+ /**
39
+ * Return topologically sorted task IDs (respecting dependencies).
40
+ * Uses Kahn's algorithm.
41
+ */
42
+ topologicalSort(): string[];
43
+ /** Check if all tasks are done (completed or failed). */
44
+ isFinished(): boolean;
45
+ /** Count tasks by status. */
46
+ summary(): Record<TaskStatus, number>;
47
+ /** Reset all tasks to pending. */
48
+ reset(): void;
49
+ }
50
+ //# sourceMappingURL=task-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-queue.d.ts","sourceRoot":"","sources":["../../../src/communication/task-queue.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAExD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IAC3C,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IAC9C,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;CAC3D;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;gBAE9B,OAAO,GAAE,gBAAqB;IAI1C,+BAA+B;IAC/B,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIrB,kCAAkC;IAClC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAI3B,wBAAwB;IACxB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAIjC,wBAAwB;IACxB,MAAM,IAAI,IAAI,EAAE;IAIhB;;OAEG;IACH,QAAQ,IAAI,IAAI,EAAE;IAOlB,yDAAyD;IACzD,OAAO,CAAC,qBAAqB;IAQ7B,kCAAkC;IAClC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAOvB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAiB3C,2DAA2D;IAC3D,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAYpC,+DAA+D;IAC/D,OAAO,CAAC,cAAc;IAWtB;;;OAGG;IACH,eAAe,IAAI,MAAM,EAAE;IAqC3B,yDAAyD;IACzD,UAAU,IAAI,OAAO;IAMrB,6BAA6B;IAC7B,OAAO,IAAI,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC;IAUrC,kCAAkC;IAClC,KAAK,IAAI,IAAI;CAOd"}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * TaskQueue — dependency-aware task scheduling with topological ordering.
3
+ *
4
+ * Supports DAG-based dependency resolution, auto-unblocking, and cascade failure.
5
+ */
6
+ export class TaskQueue {
7
+ tasks = new Map();
8
+ options;
9
+ constructor(options = {}) {
10
+ this.options = options;
11
+ }
12
+ /** Add a task to the queue. */
13
+ add(task) {
14
+ this.tasks.set(task.id, { ...task });
15
+ }
16
+ /** Add multiple tasks at once. */
17
+ addAll(tasks) {
18
+ for (const t of tasks)
19
+ this.add(t);
20
+ }
21
+ /** Get a task by ID. */
22
+ get(id) {
23
+ return this.tasks.get(id);
24
+ }
25
+ /** Return all tasks. */
26
+ getAll() {
27
+ return Array.from(this.tasks.values());
28
+ }
29
+ /**
30
+ * Return tasks that are ready to execute (pending + all dependencies satisfied).
31
+ */
32
+ getReady() {
33
+ return Array.from(this.tasks.values()).filter(t => {
34
+ if (t.status !== 'pending')
35
+ return false;
36
+ return this.dependenciesSatisfied(t);
37
+ });
38
+ }
39
+ /** Check if all dependencies of a task are completed. */
40
+ dependenciesSatisfied(task) {
41
+ if (!task.dependsOn || task.dependsOn.length === 0)
42
+ return true;
43
+ return task.dependsOn.every(depId => {
44
+ const dep = this.tasks.get(depId);
45
+ return dep?.status === 'completed';
46
+ });
47
+ }
48
+ /** Mark a task as in-progress. */
49
+ start(id) {
50
+ const task = this.tasks.get(id);
51
+ if (!task)
52
+ return;
53
+ task.status = 'in_progress';
54
+ task.updatedAt = new Date();
55
+ }
56
+ /** Mark a task as completed with an optional result. */
57
+ complete(id, result) {
58
+ const task = this.tasks.get(id);
59
+ if (!task)
60
+ return;
61
+ task.status = 'completed';
62
+ task.result = result;
63
+ task.updatedAt = new Date();
64
+ this.options.onTaskComplete?.(task);
65
+ // Check if any blocked tasks are now unblocked
66
+ for (const t of this.tasks.values()) {
67
+ if (t.status === 'blocked' && this.dependenciesSatisfied(t)) {
68
+ t.status = 'pending';
69
+ t.updatedAt = new Date();
70
+ }
71
+ }
72
+ }
73
+ /** Mark a task as failed — cascades to dependent tasks. */
74
+ fail(id, error) {
75
+ const task = this.tasks.get(id);
76
+ if (!task)
77
+ return;
78
+ task.status = 'failed';
79
+ task.result = error.message;
80
+ task.updatedAt = new Date();
81
+ this.options.onTaskFailed?.(task, error);
82
+ // Cascade failure to dependents
83
+ this.cascadeFailure(id);
84
+ }
85
+ /** Recursively fail all tasks that depend on a failed task. */
86
+ cascadeFailure(failedId) {
87
+ for (const task of this.tasks.values()) {
88
+ if (task.dependsOn?.includes(failedId) && task.status !== 'failed' && task.status !== 'completed') {
89
+ task.status = 'failed';
90
+ task.result = `Dependency "${failedId}" failed`;
91
+ task.updatedAt = new Date();
92
+ this.cascadeFailure(task.id);
93
+ }
94
+ }
95
+ }
96
+ /**
97
+ * Return topologically sorted task IDs (respecting dependencies).
98
+ * Uses Kahn's algorithm.
99
+ */
100
+ topologicalSort() {
101
+ const inDegree = new Map();
102
+ const adjacency = new Map();
103
+ for (const task of this.tasks.values()) {
104
+ if (!inDegree.has(task.id))
105
+ inDegree.set(task.id, 0);
106
+ if (!adjacency.has(task.id))
107
+ adjacency.set(task.id, []);
108
+ if (task.dependsOn) {
109
+ for (const dep of task.dependsOn) {
110
+ inDegree.set(task.id, (inDegree.get(task.id) ?? 0) + 1);
111
+ const adj = adjacency.get(dep) ?? [];
112
+ adj.push(task.id);
113
+ adjacency.set(dep, adj);
114
+ }
115
+ }
116
+ }
117
+ const queue = [];
118
+ for (const [id, degree] of inDegree) {
119
+ if (degree === 0)
120
+ queue.push(id);
121
+ }
122
+ const sorted = [];
123
+ while (queue.length > 0) {
124
+ const id = queue.shift();
125
+ sorted.push(id);
126
+ for (const next of adjacency.get(id) ?? []) {
127
+ const newDegree = (inDegree.get(next) ?? 1) - 1;
128
+ inDegree.set(next, newDegree);
129
+ if (newDegree === 0)
130
+ queue.push(next);
131
+ }
132
+ }
133
+ return sorted;
134
+ }
135
+ /** Check if all tasks are done (completed or failed). */
136
+ isFinished() {
137
+ return Array.from(this.tasks.values()).every(t => t.status === 'completed' || t.status === 'failed');
138
+ }
139
+ /** Count tasks by status. */
140
+ summary() {
141
+ const counts = {
142
+ pending: 0, in_progress: 0, completed: 0, failed: 0, blocked: 0,
143
+ };
144
+ for (const t of this.tasks.values()) {
145
+ counts[t.status]++;
146
+ }
147
+ return counts;
148
+ }
149
+ /** Reset all tasks to pending. */
150
+ reset() {
151
+ for (const t of this.tasks.values()) {
152
+ t.status = 'pending';
153
+ t.result = undefined;
154
+ t.updatedAt = new Date();
155
+ }
156
+ }
157
+ }
158
+ //# sourceMappingURL=task-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-queue.js","sourceRoot":"","sources":["../../../src/communication/task-queue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Config loader — loads configuration from multiple sources.
3
+ *
4
+ * Priority (highest to lowest):
5
+ * 1. Environment variables (CMDR_*)
6
+ * 2. Project-local .cmdr.toml
7
+ * 3. User-level ~/.cmdr/config.toml
8
+ * 4. Defaults
9
+ */
10
+ import type { CmdrConfig } from '../core/types.js';
11
+ /**
12
+ * Load and merge configuration from all sources.
13
+ */
14
+ export declare function loadConfig(cwd?: string): Promise<CmdrConfig>;
15
+ /**
16
+ * Get the path to the user-level config file.
17
+ */
18
+ export declare function getUserConfigPath(): string;
19
+ /**
20
+ * Get the path to the project-level config file.
21
+ */
22
+ export declare function getProjectConfigPath(cwd?: string): string;
23
+ //# sourceMappingURL=config-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../../src/config/config-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AA0BnE;;GAEG;AACH,wBAAsB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAwClE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzD"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Config loader — loads configuration from multiple sources.
3
+ *
4
+ * Priority (highest to lowest):
5
+ * 1. Environment variables (CMDR_*)
6
+ * 2. Project-local .cmdr.toml
7
+ * 3. User-level ~/.cmdr/config.toml
8
+ * 4. Defaults
9
+ */
10
+ import { readFile } from 'fs/promises';
11
+ import { join } from 'path';
12
+ import { homedir } from 'os';
13
+ import { parse as parseToml } from 'smol-toml';
14
+ import { CmdrConfigSchema } from './schema.js';
15
+ import { DEFAULT_CONFIG } from './defaults.js';
16
+ async function tryReadToml(path) {
17
+ try {
18
+ const content = await readFile(path, 'utf-8');
19
+ return parseToml(content);
20
+ }
21
+ catch {
22
+ return null;
23
+ }
24
+ }
25
+ function getEnvOverrides() {
26
+ const overrides = {};
27
+ if (process.env.CMDR_MODEL)
28
+ overrides.defaultModel = process.env.CMDR_MODEL;
29
+ if (process.env.CMDR_OLLAMA_URL)
30
+ overrides.ollamaUrl = process.env.CMDR_OLLAMA_URL;
31
+ if (process.env.CMDR_PROVIDER)
32
+ overrides.defaultProvider = process.env.CMDR_PROVIDER;
33
+ if (process.env.CMDR_MAX_CONCURRENCY)
34
+ overrides.maxConcurrency = parseInt(process.env.CMDR_MAX_CONCURRENCY, 10);
35
+ if (process.env.CMDR_CONTEXT_BUDGET)
36
+ overrides.contextBudget = parseInt(process.env.CMDR_CONTEXT_BUDGET, 10);
37
+ if (process.env.CMDR_TELEMETRY)
38
+ overrides.telemetry = process.env.CMDR_TELEMETRY === 'true';
39
+ return overrides;
40
+ }
41
+ /**
42
+ * Load and merge configuration from all sources.
43
+ */
44
+ export async function loadConfig(cwd) {
45
+ const projectRoot = cwd ?? process.cwd();
46
+ // Load config files
47
+ const userConfig = await tryReadToml(join(homedir(), '.cmdr', 'config.toml'));
48
+ const projectConfig = await tryReadToml(join(projectRoot, '.cmdr.toml'));
49
+ const envOverrides = getEnvOverrides();
50
+ // Merge: defaults < user < project < env
51
+ const merged = {
52
+ ...DEFAULT_CONFIG,
53
+ ...(userConfig ?? {}),
54
+ ...(projectConfig ?? {}),
55
+ ...envOverrides,
56
+ };
57
+ // If nested objects, merge them individually
58
+ if (userConfig?.permissions || projectConfig?.permissions) {
59
+ merged.permissions = {
60
+ ...DEFAULT_CONFIG.permissions,
61
+ ...(userConfig?.permissions ?? {}),
62
+ ...(projectConfig?.permissions ?? {}),
63
+ };
64
+ }
65
+ if (userConfig?.mcp || projectConfig?.mcp) {
66
+ const userServers = (userConfig?.mcp?.servers ?? []);
67
+ const projectServers = (projectConfig?.mcp?.servers ?? []);
68
+ merged.mcp = { servers: [...userServers, ...projectServers] };
69
+ }
70
+ // Validate with Zod
71
+ const result = CmdrConfigSchema.safeParse(merged);
72
+ if (!result.success) {
73
+ // Return default if validation fails, log warning
74
+ console.warn(`[cmdr] Config validation warning: ${result.error.issues.map(i => i.message).join(', ')}`);
75
+ return DEFAULT_CONFIG;
76
+ }
77
+ return result.data;
78
+ }
79
+ /**
80
+ * Get the path to the user-level config file.
81
+ */
82
+ export function getUserConfigPath() {
83
+ return join(homedir(), '.cmdr', 'config.toml');
84
+ }
85
+ /**
86
+ * Get the path to the project-level config file.
87
+ */
88
+ export function getProjectConfigPath(cwd) {
89
+ return join(cwd ?? process.cwd(), '.cmdr.toml');
90
+ }
91
+ //# sourceMappingURL=config-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../../src/config/config-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Default configuration values for cmdr.
3
+ */
4
+ import type { CmdrConfig } from '../core/types.js';
5
+ export declare const DEFAULT_CONFIG: CmdrConfig;
6
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD,eAAO,MAAM,cAAc,EAAE,UAgB5B,CAAA"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Default configuration values for cmdr.
3
+ */
4
+ export const DEFAULT_CONFIG = {
5
+ ollamaUrl: 'http://localhost:11434',
6
+ defaultModel: 'qwen2.5-coder:14b',
7
+ defaultProvider: 'ollama',
8
+ maxConcurrency: 2,
9
+ contextBudget: 32768,
10
+ autoCompact: true,
11
+ permissions: {
12
+ allowBash: true,
13
+ allowFileWrite: true,
14
+ allowNetwork: false,
15
+ },
16
+ mcp: {
17
+ servers: [],
18
+ },
19
+ plugins: [],
20
+ };
21
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,CAAC,MAAM,cAAc,GAAe;IACxC,SAAS,EAAE,wBAAwB;IACnC,YAAY,EAAE,mBAAmB;IACjC,eAAe,EAAE,QAAQ;IACzB,cAAc,EAAE,CAAC;IACjB,aAAa,EAAE,KAAK;IACpB,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE;QACX,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,IAAI;QACpB,YAAY,EAAE,KAAK;KACpB;IACD,GAAG,EAAE;QACH,OAAO,EAAE,EAAE;KACZ;IACD,OAAO,EAAE,EAAE;CACZ,CAAA"}