adonis-ai-kit 0.0.0-stage → 1.1.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 (155) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +325 -2
  3. package/dist/commands/ai_test.d.ts +12 -0
  4. package/dist/commands/ai_test.d.ts.map +1 -0
  5. package/dist/commands/ai_test.js +98 -0
  6. package/dist/commands/ai_test.js.map +1 -0
  7. package/dist/commands/main.d.ts +14 -0
  8. package/dist/commands/main.d.ts.map +1 -0
  9. package/dist/commands/main.js +31 -0
  10. package/dist/commands/main.js.map +1 -0
  11. package/dist/commands/make_agent.d.ts +13 -0
  12. package/dist/commands/make_agent.d.ts.map +1 -0
  13. package/dist/commands/make_agent.js +116 -0
  14. package/dist/commands/make_agent.js.map +1 -0
  15. package/dist/providers/ai_provider.d.ts +23 -0
  16. package/dist/providers/ai_provider.d.ts.map +1 -0
  17. package/dist/providers/ai_provider.js +34 -0
  18. package/dist/providers/ai_provider.js.map +1 -0
  19. package/dist/services/main.d.ts +4 -0
  20. package/dist/services/main.d.ts.map +1 -0
  21. package/dist/services/main.js +7 -0
  22. package/dist/services/main.js.map +1 -0
  23. package/dist/src/acp/acp_agents.d.ts +75 -0
  24. package/dist/src/acp/acp_agents.d.ts.map +1 -0
  25. package/dist/src/acp/acp_agents.js +343 -0
  26. package/dist/src/acp/acp_agents.js.map +1 -0
  27. package/dist/src/acp/index.d.ts +4 -0
  28. package/dist/src/acp/index.d.ts.map +1 -0
  29. package/dist/src/acp/index.js +4 -0
  30. package/dist/src/acp/index.js.map +1 -0
  31. package/dist/src/acp/provider.d.ts +64 -0
  32. package/dist/src/acp/provider.d.ts.map +1 -0
  33. package/dist/src/acp/provider.js +255 -0
  34. package/dist/src/acp/provider.js.map +1 -0
  35. package/dist/src/acp/types.d.ts +107 -0
  36. package/dist/src/acp/types.d.ts.map +1 -0
  37. package/dist/src/acp/types.js +2 -0
  38. package/dist/src/acp/types.js.map +1 -0
  39. package/dist/src/agents/agent_runner.d.ts +60 -0
  40. package/dist/src/agents/agent_runner.d.ts.map +1 -0
  41. package/dist/src/agents/agent_runner.js +134 -0
  42. package/dist/src/agents/agent_runner.js.map +1 -0
  43. package/dist/src/agents/index.d.ts +4 -0
  44. package/dist/src/agents/index.d.ts.map +1 -0
  45. package/dist/src/agents/index.js +4 -0
  46. package/dist/src/agents/index.js.map +1 -0
  47. package/dist/src/agents/loader.d.ts +56 -0
  48. package/dist/src/agents/loader.d.ts.map +1 -0
  49. package/dist/src/agents/loader.js +184 -0
  50. package/dist/src/agents/loader.js.map +1 -0
  51. package/dist/src/agents/manifest.d.ts +61 -0
  52. package/dist/src/agents/manifest.d.ts.map +1 -0
  53. package/dist/src/agents/manifest.js +35 -0
  54. package/dist/src/agents/manifest.js.map +1 -0
  55. package/dist/src/ai_manager.d.ts +136 -0
  56. package/dist/src/ai_manager.d.ts.map +1 -0
  57. package/dist/src/ai_manager.js +701 -0
  58. package/dist/src/ai_manager.js.map +1 -0
  59. package/dist/src/budget/budget_allocator.d.ts +37 -0
  60. package/dist/src/budget/budget_allocator.d.ts.map +1 -0
  61. package/dist/src/budget/budget_allocator.js +98 -0
  62. package/dist/src/budget/budget_allocator.js.map +1 -0
  63. package/dist/src/budget/budget_enforcer.d.ts +70 -0
  64. package/dist/src/budget/budget_enforcer.d.ts.map +1 -0
  65. package/dist/src/budget/budget_enforcer.js +195 -0
  66. package/dist/src/budget/budget_enforcer.js.map +1 -0
  67. package/dist/src/budget/cost_tracker.d.ts +71 -0
  68. package/dist/src/budget/cost_tracker.d.ts.map +1 -0
  69. package/dist/src/budget/cost_tracker.js +199 -0
  70. package/dist/src/budget/cost_tracker.js.map +1 -0
  71. package/dist/src/budget/index.d.ts +6 -0
  72. package/dist/src/budget/index.d.ts.map +1 -0
  73. package/dist/src/budget/index.js +6 -0
  74. package/dist/src/budget/index.js.map +1 -0
  75. package/dist/src/budget/pricing.d.ts +35 -0
  76. package/dist/src/budget/pricing.d.ts.map +1 -0
  77. package/dist/src/budget/pricing.js +129 -0
  78. package/dist/src/budget/pricing.js.map +1 -0
  79. package/dist/src/budget/types.d.ts +91 -0
  80. package/dist/src/budget/types.d.ts.map +1 -0
  81. package/dist/src/budget/types.js +2 -0
  82. package/dist/src/budget/types.js.map +1 -0
  83. package/dist/src/catalog/index.d.ts +3 -0
  84. package/dist/src/catalog/index.d.ts.map +1 -0
  85. package/dist/src/catalog/index.js +3 -0
  86. package/dist/src/catalog/index.js.map +1 -0
  87. package/dist/src/catalog/models_dev.d.ts +87 -0
  88. package/dist/src/catalog/models_dev.d.ts.map +1 -0
  89. package/dist/src/catalog/models_dev.js +38 -0
  90. package/dist/src/catalog/models_dev.js.map +1 -0
  91. package/dist/src/catalog/source.d.ts +52 -0
  92. package/dist/src/catalog/source.d.ts.map +1 -0
  93. package/dist/src/catalog/source.js +668 -0
  94. package/dist/src/catalog/source.js.map +1 -0
  95. package/dist/src/circuit_breaker.d.ts +40 -0
  96. package/dist/src/circuit_breaker.d.ts.map +1 -0
  97. package/dist/src/circuit_breaker.js +172 -0
  98. package/dist/src/circuit_breaker.js.map +1 -0
  99. package/dist/src/define_config.d.ts +11 -0
  100. package/dist/src/define_config.d.ts.map +1 -0
  101. package/dist/src/define_config.js +48 -0
  102. package/dist/src/define_config.js.map +1 -0
  103. package/dist/src/error_classifier.d.ts +17 -0
  104. package/dist/src/error_classifier.d.ts.map +1 -0
  105. package/dist/src/error_classifier.js +80 -0
  106. package/dist/src/error_classifier.js.map +1 -0
  107. package/dist/src/errors.d.ts +52 -0
  108. package/dist/src/errors.d.ts.map +1 -0
  109. package/dist/src/errors.js +70 -0
  110. package/dist/src/errors.js.map +1 -0
  111. package/dist/src/guard/confirmation.d.ts +67 -0
  112. package/dist/src/guard/confirmation.d.ts.map +1 -0
  113. package/dist/src/guard/confirmation.js +180 -0
  114. package/dist/src/guard/confirmation.js.map +1 -0
  115. package/dist/src/guard/errors.d.ts +10 -0
  116. package/dist/src/guard/errors.d.ts.map +1 -0
  117. package/dist/src/guard/errors.js +14 -0
  118. package/dist/src/guard/errors.js.map +1 -0
  119. package/dist/src/guard/guard.d.ts +47 -0
  120. package/dist/src/guard/guard.d.ts.map +1 -0
  121. package/dist/src/guard/guard.js +133 -0
  122. package/dist/src/guard/guard.js.map +1 -0
  123. package/dist/src/guard/index.d.ts +7 -0
  124. package/dist/src/guard/index.d.ts.map +1 -0
  125. package/dist/src/guard/index.js +7 -0
  126. package/dist/src/guard/index.js.map +1 -0
  127. package/dist/src/guard/registry.d.ts +66 -0
  128. package/dist/src/guard/registry.d.ts.map +1 -0
  129. package/dist/src/guard/registry.js +182 -0
  130. package/dist/src/guard/registry.js.map +1 -0
  131. package/dist/src/guard/schema_registry.d.ts +37 -0
  132. package/dist/src/guard/schema_registry.d.ts.map +1 -0
  133. package/dist/src/guard/schema_registry.js +57 -0
  134. package/dist/src/guard/schema_registry.js.map +1 -0
  135. package/dist/src/guard/types.d.ts +64 -0
  136. package/dist/src/guard/types.d.ts.map +1 -0
  137. package/dist/src/guard/types.js +2 -0
  138. package/dist/src/guard/types.js.map +1 -0
  139. package/dist/src/index.d.ts +13 -0
  140. package/dist/src/index.d.ts.map +1 -0
  141. package/dist/src/index.js +12 -0
  142. package/dist/src/index.js.map +1 -0
  143. package/dist/src/response_macro.d.ts +16 -0
  144. package/dist/src/response_macro.d.ts.map +1 -0
  145. package/dist/src/response_macro.js +151 -0
  146. package/dist/src/response_macro.js.map +1 -0
  147. package/dist/src/types.d.ts +297 -0
  148. package/dist/src/types.d.ts.map +1 -0
  149. package/dist/src/types.js +2 -0
  150. package/dist/src/types.js.map +1 -0
  151. package/dist/src/usage.d.ts +13 -0
  152. package/dist/src/usage.d.ts.map +1 -0
  153. package/dist/src/usage.js +61 -0
  154. package/dist/src/usage.js.map +1 -0
  155. package/package.json +141 -3
@@ -0,0 +1,23 @@
1
+ import { type ApplicationService } from '@adonisjs/core/types';
2
+ import type { AiManager } from '../src/ai_manager.js';
3
+ declare module '@adonisjs/core/types' {
4
+ interface ContainerBindings {
5
+ ai: AiManager;
6
+ }
7
+ }
8
+ /**
9
+ * AdonisJS 7 Service Provider for the AI subsystem.
10
+ * Registers 'ai' singleton in container and installs HTTP response macros.
11
+ */
12
+ export default class AiProvider {
13
+ protected app: ApplicationService;
14
+ private manager?;
15
+ constructor(app: ApplicationService);
16
+ register(): void;
17
+ boot(): Promise<void>;
18
+ /**
19
+ * Stops ACP agent processes and settles pending confirmations on application shutdown.
20
+ */
21
+ shutdown(): Promise<void>;
22
+ }
23
+ //# sourceMappingURL=ai_provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai_provider.d.ts","sourceRoot":"","sources":["../../providers/ai_provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAErD,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAiB,iBAAiB;QAChC,EAAE,EAAE,SAAS,CAAA;KACd;CACF;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IAGjB,SAAS,CAAC,GAAG,EAAE,kBAAkB;IAF7C,OAAO,CAAC,OAAO,CAAC,CAAW;gBAEL,GAAG,EAAE,kBAAkB;IAE7C,QAAQ;IAaF,IAAI;IAKV;;OAEG;IACG,QAAQ;CAGf"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * AdonisJS 7 Service Provider for the AI subsystem.
3
+ * Registers 'ai' singleton in container and installs HTTP response macros.
4
+ */
5
+ export default class AiProvider {
6
+ app;
7
+ manager;
8
+ constructor(app) {
9
+ this.app = app;
10
+ }
11
+ register() {
12
+ this.app.container.singleton('ai', async () => {
13
+ const { AiManager } = await import('../src/ai_manager.js');
14
+ const config = this.app.config.get('ai', {
15
+ default: 'openai',
16
+ providers: {},
17
+ });
18
+ const logger = await this.app.container.make('logger');
19
+ this.manager = new AiManager(config, logger);
20
+ return this.manager;
21
+ });
22
+ }
23
+ async boot() {
24
+ const { registerResponseMacro } = await import('../src/response_macro.js');
25
+ registerResponseMacro();
26
+ }
27
+ /**
28
+ * Stops ACP agent processes and settles pending confirmations on application shutdown.
29
+ */
30
+ async shutdown() {
31
+ await this.manager?.shutdown();
32
+ }
33
+ }
34
+ //# sourceMappingURL=ai_provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai_provider.js","sourceRoot":"","sources":["../../providers/ai_provider.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IAGP;IAFd,OAAO,CAAY;IAE3B,YAAsB,GAAuB;QAAvB,QAAG,GAAH,GAAG,CAAoB;IAAG,CAAC;IAEjD,QAAQ;QACN,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YAC5C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAA;YAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAW,IAAI,EAAE;gBACjD,OAAO,EAAE,QAAQ;gBACjB,SAAS,EAAE,EAAE;aACd,CAAC,CAAA;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACtD,IAAI,CAAC,OAAO,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YAC5C,OAAO,IAAI,CAAC,OAAO,CAAA;QACrB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAA;QAC1E,qBAAqB,EAAE,CAAA;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAA;IAChC,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ import type { AiManager } from '../src/ai_manager.js';
2
+ declare let ai: AiManager;
3
+ export { ai as default };
4
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../services/main.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAErD,QAAA,IAAI,EAAE,EAAE,SAAS,CAAA;AAKjB,OAAO,EAAE,EAAE,IAAI,OAAO,EAAE,CAAA"}
@@ -0,0 +1,7 @@
1
+ import app from '@adonisjs/core/services/app';
2
+ let ai;
3
+ await app.booted(async () => {
4
+ ai = await app.container.make('ai');
5
+ });
6
+ export { ai as default };
7
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../services/main.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,6BAA6B,CAAA;AAG7C,IAAI,EAAa,CAAA;AACjB,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;IAC1B,EAAE,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACrC,CAAC,CAAC,CAAA;AAEF,OAAO,EAAE,EAAE,IAAI,OAAO,EAAE,CAAA"}
@@ -0,0 +1,75 @@
1
+ import type { LoggerContract } from '../ai_manager.js';
2
+ import type { AcpAgentConfig, AcpAgentRuntimeConfig, AcpMcpServerConfig, AcpProjectMcpConfig } from './types.js';
3
+ /**
4
+ * Built-in ACP agent configurations. These are the ONLY commands that may be started from a
5
+ * model name; anything else must be configured explicitly via `AcpProviderConfig.command`.
6
+ *
7
+ * Commands follow the agents' own ACP docs: Claude via the `claude-agent-acp` adapter, Gemini CLI
8
+ * with `--acp`, Qwen Code's `qwen --acp`, Codex via `codex-acp`, `opencode acp`.
9
+ * `sourcecraft` and `freebuff` could not be verified against upstream docs; override them with
10
+ * `ACP_<AGENT>_PATH` / `ACP_<AGENT>_ARGS` if your install differs.
11
+ */
12
+ export declare const ACP_AGENTS: Record<string, AcpAgentConfig>;
13
+ /**
14
+ * Get ACP agent configuration by ID.
15
+ */
16
+ export declare function getAcpAgentConfig(agentId: string): AcpAgentConfig | undefined;
17
+ /**
18
+ * List all available ACP agent IDs.
19
+ */
20
+ export declare function listAcpAgentIds(): string[];
21
+ /**
22
+ * Check if an agent ID is a valid ACP agent.
23
+ */
24
+ export declare function isAcpAgent(agentId: string): boolean;
25
+ /**
26
+ * Parse agent arguments from env string.
27
+ * Supports JSON arrays (e.g., '["--flag","--opt","val"]')
28
+ * and falls back to comma-separated values.
29
+ */
30
+ export declare function parseAcpArgs(argsOverride: string | undefined, fallback: string[], logger?: LoggerContract): string[];
31
+ /**
32
+ * Validates an MCP server definition and converts it to the exact shape required by the ACP
33
+ * schema: stdio servers have no `type` and an `env` array; remote servers have `type`
34
+ * 'http' | 'sse' and a `headers` array. Legacy `Record` env/headers and `httpUrl` are accepted.
35
+ * Returns `null` for unusable entries.
36
+ */
37
+ export declare function normalizeMcpServer(input: unknown): AcpMcpServerConfig | null;
38
+ /** Builds the stdio MCP server entry for a project-local MCP server file. */
39
+ export declare function buildProjectMcpServer(config: AcpProjectMcpConfig, logger?: LoggerContract): AcpMcpServerConfig | null;
40
+ /**
41
+ * Build runtime configuration for an ACP agent.
42
+ */
43
+ export declare function buildAcpRuntimeConfig(agentId: string, getEnv?: (key: string) => string | undefined, envSource?: Record<string, string | undefined>, logger?: LoggerContract): AcpAgentRuntimeConfig | null;
44
+ /**
45
+ * Create provider entry for models.dev registry.
46
+ */
47
+ export declare function createAcpProviderEntry(agentId: string): {
48
+ id: string;
49
+ name: string;
50
+ env: string[];
51
+ npm: string;
52
+ protocol: string;
53
+ models: Record<string, {
54
+ id: string;
55
+ name: string;
56
+ }>;
57
+ } | null;
58
+ /**
59
+ * Get all ACP provider entries for models catalog.
60
+ */
61
+ export declare function getAllAcpProviderEntries(): ReturnType<typeof createAcpProviderEntry>[];
62
+ /**
63
+ * Environment variable keys used across ACP agents.
64
+ */
65
+ export declare function getAcpEnvVarKeys(): {
66
+ apiKeys: string[];
67
+ agents: Record<string, {
68
+ path: string;
69
+ cwd: string;
70
+ args: string;
71
+ mcpServers: string;
72
+ enableProjectMcp: string;
73
+ }>;
74
+ };
75
+ //# sourceMappingURL=acp_agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acp_agents.d.ts","sourceRoot":"","sources":["../../../src/acp/acp_agents.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAElB,mBAAmB,EACpB,MAAM,YAAY,CAAA;AAEnB;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAiEpD,CAAA;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAE7E;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,CAAC,EAAE,cAAc,GACtB,MAAM,EAAE,CAiBV;AAoBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAwB5E;AAED,6EAA6E;AAC7E,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,mBAAmB,EAC3B,MAAM,CAAC,EAAE,cAAc,GACtB,kBAAkB,GAAG,IAAI,CAY3B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAqC,EACvE,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,EAC3D,MAAM,CAAC,EAAE,cAAc,GACtB,qBAAqB,GAAG,IAAI,CA0F9B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG;IACvD,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,EAAE,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACrD,GAAG,IAAI,CA0BP;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,UAAU,CAAC,OAAO,sBAAsB,CAAC,EAAE,CAItF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI;IAClC,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,EAAE,MAAM,CACZ,MAAM,EACN;QACE,IAAI,EAAE,MAAM,CAAA;QACZ,GAAG,EAAE,MAAM,CAAA;QACX,IAAI,EAAE,MAAM,CAAA;QACZ,UAAU,EAAE,MAAM,CAAA;QAClB,gBAAgB,EAAE,MAAM,CAAA;KACzB,CACF,CAAA;CACF,CA4BA"}
@@ -0,0 +1,343 @@
1
+ import { existsSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ /**
4
+ * Built-in ACP agent configurations. These are the ONLY commands that may be started from a
5
+ * model name; anything else must be configured explicitly via `AcpProviderConfig.command`.
6
+ *
7
+ * Commands follow the agents' own ACP docs: Claude via the `claude-agent-acp` adapter, Gemini CLI
8
+ * with `--acp`, Qwen Code's `qwen --acp`, Codex via `codex-acp`, `opencode acp`.
9
+ * `sourcecraft` and `freebuff` could not be verified against upstream docs; override them with
10
+ * `ACP_<AGENT>_PATH` / `ACP_<AGENT>_ARGS` if your install differs.
11
+ */
12
+ export const ACP_AGENTS = Object.freeze({
13
+ 'claude-code': {
14
+ id: 'claude-code',
15
+ name: 'Claude Code',
16
+ description: "Anthropic's agentic coding CLI tool",
17
+ command: 'claude-agent-acp',
18
+ args: [],
19
+ envVarPrefix: 'ACP_CLAUDE_CODE',
20
+ supportsMcpServers: true,
21
+ },
22
+ 'gemini': {
23
+ id: 'gemini',
24
+ name: 'Gemini CLI',
25
+ description: "Google's Gemini CLI agent",
26
+ command: 'gemini',
27
+ args: ['--acp'],
28
+ envVarPrefix: 'ACP_GEMINI',
29
+ supportsMcpServers: true,
30
+ authMethodId: 'gemini-api-key',
31
+ },
32
+ 'codex': {
33
+ id: 'codex',
34
+ name: 'Codex CLI',
35
+ description: "OpenAI's Codex CLI agent",
36
+ command: 'codex-acp',
37
+ args: [],
38
+ envVarPrefix: 'ACP_CODEX',
39
+ supportsMcpServers: true,
40
+ },
41
+ 'qwen-code': {
42
+ id: 'qwen-code',
43
+ name: 'Qwen Code',
44
+ description: "Alibaba's Qwen Code CLI agent",
45
+ command: 'qwen',
46
+ args: ['--acp'],
47
+ envVarPrefix: 'ACP_QWEN_CODE',
48
+ supportsMcpServers: true,
49
+ },
50
+ 'sourcecraft': {
51
+ id: 'sourcecraft',
52
+ name: 'SourceCraft Code Assistant',
53
+ description: "SourceCraft's Code Assistant agent via CLI",
54
+ command: 'src',
55
+ args: ['code', '--', 'acp'],
56
+ envVarPrefix: 'ACP_SOURCECRAFT',
57
+ supportsMcpServers: true,
58
+ },
59
+ 'opencode': {
60
+ id: 'opencode',
61
+ name: 'OpenCode',
62
+ description: 'OpenCode AI coding assistant',
63
+ command: 'opencode',
64
+ args: ['acp'],
65
+ envVarPrefix: 'ACP_OPENCODE',
66
+ supportsMcpServers: true,
67
+ },
68
+ 'freebuff': {
69
+ id: 'freebuff',
70
+ name: 'Freebuff',
71
+ description: 'Freebuff AI coding agent',
72
+ command: 'codebuff-agent-acp',
73
+ args: [],
74
+ envVarPrefix: 'ACP_FREEBUFF',
75
+ supportsMcpServers: true,
76
+ },
77
+ });
78
+ /**
79
+ * Get ACP agent configuration by ID.
80
+ */
81
+ export function getAcpAgentConfig(agentId) {
82
+ return ACP_AGENTS[agentId];
83
+ }
84
+ /**
85
+ * List all available ACP agent IDs.
86
+ */
87
+ export function listAcpAgentIds() {
88
+ return Object.keys(ACP_AGENTS);
89
+ }
90
+ /**
91
+ * Check if an agent ID is a valid ACP agent.
92
+ */
93
+ export function isAcpAgent(agentId) {
94
+ return agentId in ACP_AGENTS;
95
+ }
96
+ /**
97
+ * Parse agent arguments from env string.
98
+ * Supports JSON arrays (e.g., '["--flag","--opt","val"]')
99
+ * and falls back to comma-separated values.
100
+ */
101
+ export function parseAcpArgs(argsOverride, fallback, logger) {
102
+ if (!argsOverride)
103
+ return fallback;
104
+ const trimmed = argsOverride.trim();
105
+ if (trimmed.startsWith('[')) {
106
+ try {
107
+ const parsed = JSON.parse(trimmed);
108
+ if (Array.isArray(parsed) && parsed.every((item) => typeof item === 'string')) {
109
+ return parsed;
110
+ }
111
+ }
112
+ catch {
113
+ logger?.warn?.(`[ACP] Invalid JSON array in args override: ${trimmed}`);
114
+ }
115
+ }
116
+ return trimmed
117
+ .split(',')
118
+ .map((s) => s.trim())
119
+ .filter(Boolean);
120
+ }
121
+ function toNameValueList(input) {
122
+ if (Array.isArray(input)) {
123
+ return input.filter((item) => item !== null &&
124
+ typeof item === 'object' &&
125
+ typeof item.name === 'string' &&
126
+ typeof item.value === 'string');
127
+ }
128
+ if (input !== null && typeof input === 'object') {
129
+ return Object.entries(input)
130
+ .filter(([, value]) => typeof value === 'string')
131
+ .map(([name, value]) => ({ name, value: value }));
132
+ }
133
+ return [];
134
+ }
135
+ /**
136
+ * Validates an MCP server definition and converts it to the exact shape required by the ACP
137
+ * schema: stdio servers have no `type` and an `env` array; remote servers have `type`
138
+ * 'http' | 'sse' and a `headers` array. Legacy `Record` env/headers and `httpUrl` are accepted.
139
+ * Returns `null` for unusable entries.
140
+ */
141
+ export function normalizeMcpServer(input) {
142
+ if (input === null || typeof input !== 'object')
143
+ return null;
144
+ const raw = input;
145
+ if (typeof raw.name !== 'string' || raw.name.length === 0)
146
+ return null;
147
+ const url = typeof raw.url === 'string' ? raw.url : typeof raw.httpUrl === 'string' ? raw.httpUrl : undefined;
148
+ if (raw.type === 'http' || raw.type === 'sse' || (raw.type === undefined && url && !raw.command)) {
149
+ if (!url)
150
+ return null;
151
+ return {
152
+ type: raw.type === 'sse' ? 'sse' : 'http',
153
+ name: raw.name,
154
+ url,
155
+ headers: toNameValueList(raw.headers),
156
+ };
157
+ }
158
+ if (typeof raw.command !== 'string' || raw.command.length === 0)
159
+ return null;
160
+ return {
161
+ name: raw.name,
162
+ command: raw.command,
163
+ args: Array.isArray(raw.args) ? raw.args.filter((a) => typeof a === 'string') : [],
164
+ env: toNameValueList(raw.env),
165
+ };
166
+ }
167
+ /** Builds the stdio MCP server entry for a project-local MCP server file. */
168
+ export function buildProjectMcpServer(config, logger) {
169
+ const serverPath = path.resolve(config.path);
170
+ if (!existsSync(serverPath)) {
171
+ logger?.warn?.(`[ACP] Project MCP server not found: ${serverPath}. Skipping project MCP.`);
172
+ return null;
173
+ }
174
+ return {
175
+ name: config.name ?? 'project-tools',
176
+ command: config.command ?? 'node',
177
+ args: [serverPath],
178
+ env: [],
179
+ };
180
+ }
181
+ /**
182
+ * Build runtime configuration for an ACP agent.
183
+ */
184
+ export function buildAcpRuntimeConfig(agentId, getEnv = (key) => process.env[key], envSource = process.env, logger) {
185
+ const config = getAcpAgentConfig(agentId);
186
+ if (!config)
187
+ return null;
188
+ const prefix = config.envVarPrefix;
189
+ // Build command (allow override via env)
190
+ const command = getEnv(`${prefix}_PATH`) || config.command;
191
+ // Build args (allow override via env)
192
+ const args = parseAcpArgs(getEnv(`${prefix}_ARGS`), config.args, logger);
193
+ // Build cwd (allow override via env, default to current working directory)
194
+ const cwd = path.resolve(getEnv(`${prefix}_CWD`) || process.cwd());
195
+ // Build environment variables
196
+ const env = {};
197
+ // Add auth-related env vars based on agent type
198
+ if (agentId === 'gemini') {
199
+ const apiKey = getEnv('GEMINI_API_KEY') || getEnv('GOOGLE_API_KEY');
200
+ if (apiKey)
201
+ env.GEMINI_API_KEY = apiKey;
202
+ }
203
+ else if (agentId === 'claude-code') {
204
+ const apiKey = getEnv('ANTHROPIC_API_KEY');
205
+ if (apiKey)
206
+ env.ANTHROPIC_API_KEY = apiKey;
207
+ }
208
+ else if (agentId === 'codex') {
209
+ const apiKey = getEnv('OPENAI_API_KEY');
210
+ if (apiKey)
211
+ env.OPENAI_API_KEY = apiKey;
212
+ }
213
+ else if (agentId === 'qwen-code') {
214
+ const apiKey = getEnv('DASHSCOPE_API_KEY') || getEnv('QWEN_API_KEY');
215
+ if (apiKey)
216
+ env.DASHSCOPE_API_KEY = apiKey;
217
+ }
218
+ else if (agentId === 'opencode') {
219
+ const apiKey = getEnv('OPENCODE_API_KEY');
220
+ if (apiKey)
221
+ env.OPENCODE_API_KEY = apiKey;
222
+ }
223
+ else if (agentId === 'freebuff') {
224
+ const apiKey = getEnv('CODEBUFF_API_KEY') || getEnv('FREEBUFF_API_KEY');
225
+ if (apiKey) {
226
+ env.CODEBUFF_API_KEY = apiKey;
227
+ env.FREEBUFF_API_KEY = apiKey;
228
+ }
229
+ }
230
+ // Add custom env vars from ACP_<AGENT>_ENV_* pattern
231
+ const envPrefix = `${prefix}_ENV_`;
232
+ for (const [key, value] of Object.entries(envSource)) {
233
+ if (key.startsWith(envPrefix) && value !== undefined) {
234
+ const envKey = key.slice(envPrefix.length);
235
+ env[envKey] = value;
236
+ }
237
+ }
238
+ // Parse MCP servers configuration (validated and converted to the ACP schema shape)
239
+ const mcpServers = [];
240
+ const mcpConfigJson = getEnv(`${prefix}_MCP_SERVERS`);
241
+ if (mcpConfigJson) {
242
+ try {
243
+ const parsed = JSON.parse(mcpConfigJson);
244
+ if (Array.isArray(parsed)) {
245
+ for (const entry of parsed) {
246
+ const server = normalizeMcpServer(entry);
247
+ if (server)
248
+ mcpServers.push(server);
249
+ else
250
+ logger?.warn?.(`[ACP] Ignoring invalid MCP server entry for ${agentId}`);
251
+ }
252
+ }
253
+ }
254
+ catch {
255
+ logger?.warn?.(`[ACP] Invalid MCP servers JSON for ${agentId}`);
256
+ }
257
+ }
258
+ // Add the project's MCP server if enabled and an explicit path was given
259
+ if (getEnv(`${prefix}_ENABLE_PROJECT_MCP`) === 'true') {
260
+ const projectPath = getEnv(`${prefix}_PROJECT_MCP_PATH`);
261
+ if (projectPath) {
262
+ const server = buildProjectMcpServer({ path: projectPath }, logger);
263
+ if (server)
264
+ mcpServers.push(server);
265
+ }
266
+ else {
267
+ logger?.warn?.(`[ACP] ${prefix}_ENABLE_PROJECT_MCP is set but ${prefix}_PROJECT_MCP_PATH is not; skipping project MCP.`);
268
+ }
269
+ }
270
+ return {
271
+ command,
272
+ args,
273
+ cwd,
274
+ env,
275
+ mcpServers,
276
+ authMethodId: config.authMethodId,
277
+ };
278
+ }
279
+ /**
280
+ * Create provider entry for models.dev registry.
281
+ */
282
+ export function createAcpProviderEntry(agentId) {
283
+ const config = getAcpAgentConfig(agentId);
284
+ if (!config)
285
+ return null;
286
+ const prefix = config.envVarPrefix;
287
+ return {
288
+ id: `acp-${agentId}`,
289
+ name: config.name,
290
+ env: [
291
+ `${prefix}_PATH`,
292
+ `${prefix}_CWD`,
293
+ `${prefix}_ARGS`,
294
+ `${prefix}_MCP_SERVERS`,
295
+ `${prefix}_ENABLE_PROJECT_MCP`,
296
+ `${prefix}_PROJECT_MCP_PATH`,
297
+ ],
298
+ npm: '@mcpc-tech/acp-ai-provider',
299
+ protocol: 'acp',
300
+ models: {
301
+ [agentId]: {
302
+ id: agentId,
303
+ name: `${config.name} Agent`,
304
+ },
305
+ },
306
+ };
307
+ }
308
+ /**
309
+ * Get all ACP provider entries for models catalog.
310
+ */
311
+ export function getAllAcpProviderEntries() {
312
+ return listAcpAgentIds()
313
+ .map((id) => createAcpProviderEntry(id))
314
+ .filter((entry) => entry !== null);
315
+ }
316
+ /**
317
+ * Environment variable keys used across ACP agents.
318
+ */
319
+ export function getAcpEnvVarKeys() {
320
+ const agents = {};
321
+ for (const [id, config] of Object.entries(ACP_AGENTS)) {
322
+ const p = config.envVarPrefix;
323
+ agents[id] = {
324
+ path: `${p}_PATH`,
325
+ cwd: `${p}_CWD`,
326
+ args: `${p}_ARGS`,
327
+ mcpServers: `${p}_MCP_SERVERS`,
328
+ enableProjectMcp: `${p}_ENABLE_PROJECT_MCP`,
329
+ };
330
+ }
331
+ return {
332
+ apiKeys: [
333
+ 'ANTHROPIC_API_KEY',
334
+ 'GEMINI_API_KEY',
335
+ 'OPENAI_API_KEY',
336
+ 'DASHSCOPE_API_KEY',
337
+ 'OPENCODE_API_KEY',
338
+ 'FREEBUFF_API_KEY',
339
+ ],
340
+ agents,
341
+ };
342
+ }
343
+ //# sourceMappingURL=acp_agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acp_agents.js","sourceRoot":"","sources":["../../../src/acp/acp_agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './types.js';
2
+ export * from './acp_agents.js';
3
+ export * from './provider.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/acp/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * from './types.js';
2
+ export * from './acp_agents.js';
3
+ export * from './provider.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/acp/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA"}
@@ -0,0 +1,64 @@
1
+ import type { LanguageModel } from 'ai';
2
+ import type { ConfirmationService } from '../guard/confirmation.js';
3
+ import type { AiDriver } from '../types.js';
4
+ import type { LoggerContract } from '../ai_manager.js';
5
+ import type { AcpProviderConfig } from './types.js';
6
+ /**
7
+ * Builds the environment for the agent process.
8
+ *
9
+ * `@mcpc-tech/acp-ai-provider` spawns the agent with `{ ...process.env, ...env }`, so the server's
10
+ * secrets cannot be left out by omission. Instead every variable that is not allowlisted is
11
+ * explicitly blanked, and only the allowlist plus `extra` (agent credentials, configured env)
12
+ * keep real values.
13
+ */
14
+ export declare function buildAgentEnv(source: Record<string, string | undefined>, extra: Record<string, string>, inheritEnv?: boolean): Record<string, string>;
15
+ export interface AcpDriverDeps {
16
+ logger?: LoggerContract;
17
+ /** Answers agent permission requests when `permissionPolicy` is `ask`. */
18
+ confirmation?: ConfirmationService;
19
+ /** Environment to derive the agent environment from. Default: `process.env` */
20
+ env?: Record<string, string | undefined>;
21
+ }
22
+ export declare class AcpDriver implements AiDriver {
23
+ readonly name: string;
24
+ readonly defaultModel: string;
25
+ private config;
26
+ private logger?;
27
+ private confirmation?;
28
+ private env;
29
+ private cachedModels;
30
+ private providers;
31
+ private permissionPolicy;
32
+ constructor(name: string, config: AcpProviderConfig, deps?: AcpDriverDeps);
33
+ /**
34
+ * Lazily loads and instantiates an AI SDK language model backed by the ACP agent.
35
+ * `modelName` selects among the built-in agents; it is never executed as a command.
36
+ */
37
+ getModel(modelName?: string): Promise<LanguageModel>;
38
+ /**
39
+ * Tests whether the ACP agent can be resolved and its model instantiated.
40
+ */
41
+ ping(): Promise<{
42
+ ok: boolean;
43
+ latencyMs: number;
44
+ error?: string;
45
+ }>;
46
+ /**
47
+ * Terminates every agent process started by this driver.
48
+ */
49
+ shutdown(): Promise<void>;
50
+ private resolveRuntimeConfig;
51
+ private createModel;
52
+ /**
53
+ * The ACP provider auto-selects the first permission option when no handler is set, and offers
54
+ * no public API to set one. The handler is installed on the model's client right after every
55
+ * connection is established. If it cannot be installed the model refuses to connect (fail-closed).
56
+ */
57
+ private installPermissionHandler;
58
+ private answerPermission;
59
+ }
60
+ /**
61
+ * Factory for creating an AcpDriver instance.
62
+ */
63
+ export declare function createAcpDriver(name: string, config: AcpProviderConfig, deps?: AcpDriverDeps): AcpDriver;
64
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/acp/provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAA;AACvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,KAAK,EAIV,iBAAiB,EAClB,MAAM,YAAY,CAAA;AAiEnB;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAC1C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,UAAU,UAAQ,GACjB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUxB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,mBAAmB,CAAA;IAClC,+EAA+E;IAC/E,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;CACzC;AAED,qBAAa,SAAU,YAAW,QAAQ;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,MAAM,CAAC,CAAgB;IAC/B,OAAO,CAAC,YAAY,CAAC,CAAqB;IAC1C,OAAO,CAAC,GAAG,CAAoC;IAC/C,OAAO,CAAC,YAAY,CAAiD;IACrE,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,gBAAgB,CAAqB;gBAEjC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI,GAAE,aAAkB;IAgB7E;;;OAGG;IACG,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAe1D;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAgBzE;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAa/B,OAAO,CAAC,oBAAoB;YAyDd,WAAW;IAiCzB;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;YAiBlB,gBAAgB;CA8C/B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,iBAAiB,EACzB,IAAI,GAAE,aAAkB,GACvB,SAAS,CAEX"}