adonis-ai-kit 0.0.0-stage → 1.2.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 (196) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/LICENSE +21 -0
  3. package/README.md +397 -2
  4. package/dist/commands/ai_test.d.ts +12 -0
  5. package/dist/commands/ai_test.d.ts.map +1 -0
  6. package/dist/commands/ai_test.js +98 -0
  7. package/dist/commands/ai_test.js.map +1 -0
  8. package/dist/commands/main.d.ts +14 -0
  9. package/dist/commands/main.d.ts.map +1 -0
  10. package/dist/commands/main.js +31 -0
  11. package/dist/commands/main.js.map +1 -0
  12. package/dist/commands/make_agent.d.ts +13 -0
  13. package/dist/commands/make_agent.d.ts.map +1 -0
  14. package/dist/commands/make_agent.js +116 -0
  15. package/dist/commands/make_agent.js.map +1 -0
  16. package/dist/providers/ai_provider.d.ts +23 -0
  17. package/dist/providers/ai_provider.d.ts.map +1 -0
  18. package/dist/providers/ai_provider.js +34 -0
  19. package/dist/providers/ai_provider.js.map +1 -0
  20. package/dist/services/main.d.ts +4 -0
  21. package/dist/services/main.d.ts.map +1 -0
  22. package/dist/services/main.js +7 -0
  23. package/dist/services/main.js.map +1 -0
  24. package/dist/src/acp/acp_agents.d.ts +89 -0
  25. package/dist/src/acp/acp_agents.d.ts.map +1 -0
  26. package/dist/src/acp/acp_agents.js +367 -0
  27. package/dist/src/acp/acp_agents.js.map +1 -0
  28. package/dist/src/acp/index.d.ts +4 -0
  29. package/dist/src/acp/index.d.ts.map +1 -0
  30. package/dist/src/acp/index.js +4 -0
  31. package/dist/src/acp/index.js.map +1 -0
  32. package/dist/src/acp/provider.d.ts +74 -0
  33. package/dist/src/acp/provider.d.ts.map +1 -0
  34. package/dist/src/acp/provider.js +276 -0
  35. package/dist/src/acp/provider.js.map +1 -0
  36. package/dist/src/acp/types.d.ts +128 -0
  37. package/dist/src/acp/types.d.ts.map +1 -0
  38. package/dist/src/acp/types.js +2 -0
  39. package/dist/src/acp/types.js.map +1 -0
  40. package/dist/src/agents/agent_runner.d.ts +60 -0
  41. package/dist/src/agents/agent_runner.d.ts.map +1 -0
  42. package/dist/src/agents/agent_runner.js +134 -0
  43. package/dist/src/agents/agent_runner.js.map +1 -0
  44. package/dist/src/agents/index.d.ts +4 -0
  45. package/dist/src/agents/index.d.ts.map +1 -0
  46. package/dist/src/agents/index.js +4 -0
  47. package/dist/src/agents/index.js.map +1 -0
  48. package/dist/src/agents/loader.d.ts +56 -0
  49. package/dist/src/agents/loader.d.ts.map +1 -0
  50. package/dist/src/agents/loader.js +184 -0
  51. package/dist/src/agents/loader.js.map +1 -0
  52. package/dist/src/agents/manifest.d.ts +61 -0
  53. package/dist/src/agents/manifest.d.ts.map +1 -0
  54. package/dist/src/agents/manifest.js +35 -0
  55. package/dist/src/agents/manifest.js.map +1 -0
  56. package/dist/src/ai_manager.d.ts +140 -0
  57. package/dist/src/ai_manager.d.ts.map +1 -0
  58. package/dist/src/ai_manager.js +814 -0
  59. package/dist/src/ai_manager.js.map +1 -0
  60. package/dist/src/budget/budget_allocator.d.ts +37 -0
  61. package/dist/src/budget/budget_allocator.d.ts.map +1 -0
  62. package/dist/src/budget/budget_allocator.js +98 -0
  63. package/dist/src/budget/budget_allocator.js.map +1 -0
  64. package/dist/src/budget/budget_enforcer.d.ts +70 -0
  65. package/dist/src/budget/budget_enforcer.d.ts.map +1 -0
  66. package/dist/src/budget/budget_enforcer.js +195 -0
  67. package/dist/src/budget/budget_enforcer.js.map +1 -0
  68. package/dist/src/budget/cost_tracker.d.ts +71 -0
  69. package/dist/src/budget/cost_tracker.d.ts.map +1 -0
  70. package/dist/src/budget/cost_tracker.js +199 -0
  71. package/dist/src/budget/cost_tracker.js.map +1 -0
  72. package/dist/src/budget/index.d.ts +6 -0
  73. package/dist/src/budget/index.d.ts.map +1 -0
  74. package/dist/src/budget/index.js +6 -0
  75. package/dist/src/budget/index.js.map +1 -0
  76. package/dist/src/budget/pricing.d.ts +35 -0
  77. package/dist/src/budget/pricing.d.ts.map +1 -0
  78. package/dist/src/budget/pricing.js +129 -0
  79. package/dist/src/budget/pricing.js.map +1 -0
  80. package/dist/src/budget/types.d.ts +86 -0
  81. package/dist/src/budget/types.d.ts.map +1 -0
  82. package/dist/src/budget/types.js +2 -0
  83. package/dist/src/budget/types.js.map +1 -0
  84. package/dist/src/catalog/index.d.ts +3 -0
  85. package/dist/src/catalog/index.d.ts.map +1 -0
  86. package/dist/src/catalog/index.js +3 -0
  87. package/dist/src/catalog/index.js.map +1 -0
  88. package/dist/src/catalog/models_dev.d.ts +87 -0
  89. package/dist/src/catalog/models_dev.d.ts.map +1 -0
  90. package/dist/src/catalog/models_dev.js +38 -0
  91. package/dist/src/catalog/models_dev.js.map +1 -0
  92. package/dist/src/catalog/source.d.ts +67 -0
  93. package/dist/src/catalog/source.d.ts.map +1 -0
  94. package/dist/src/catalog/source.js +678 -0
  95. package/dist/src/catalog/source.js.map +1 -0
  96. package/dist/src/circuit_breaker.d.ts +61 -0
  97. package/dist/src/circuit_breaker.d.ts.map +1 -0
  98. package/dist/src/circuit_breaker.js +217 -0
  99. package/dist/src/circuit_breaker.js.map +1 -0
  100. package/dist/src/define_config.d.ts +11 -0
  101. package/dist/src/define_config.d.ts.map +1 -0
  102. package/dist/src/define_config.js +48 -0
  103. package/dist/src/define_config.js.map +1 -0
  104. package/dist/src/error_classifier.d.ts +50 -0
  105. package/dist/src/error_classifier.d.ts.map +1 -0
  106. package/dist/src/error_classifier.js +206 -0
  107. package/dist/src/error_classifier.js.map +1 -0
  108. package/dist/src/errors.d.ts +52 -0
  109. package/dist/src/errors.d.ts.map +1 -0
  110. package/dist/src/errors.js +70 -0
  111. package/dist/src/errors.js.map +1 -0
  112. package/dist/src/guard/confirmation.d.ts +67 -0
  113. package/dist/src/guard/confirmation.d.ts.map +1 -0
  114. package/dist/src/guard/confirmation.js +180 -0
  115. package/dist/src/guard/confirmation.js.map +1 -0
  116. package/dist/src/guard/errors.d.ts +10 -0
  117. package/dist/src/guard/errors.d.ts.map +1 -0
  118. package/dist/src/guard/errors.js +14 -0
  119. package/dist/src/guard/errors.js.map +1 -0
  120. package/dist/src/guard/guard.d.ts +47 -0
  121. package/dist/src/guard/guard.d.ts.map +1 -0
  122. package/dist/src/guard/guard.js +133 -0
  123. package/dist/src/guard/guard.js.map +1 -0
  124. package/dist/src/guard/index.d.ts +7 -0
  125. package/dist/src/guard/index.d.ts.map +1 -0
  126. package/dist/src/guard/index.js +7 -0
  127. package/dist/src/guard/index.js.map +1 -0
  128. package/dist/src/guard/registry.d.ts +72 -0
  129. package/dist/src/guard/registry.d.ts.map +1 -0
  130. package/dist/src/guard/registry.js +192 -0
  131. package/dist/src/guard/registry.js.map +1 -0
  132. package/dist/src/guard/schema_registry.d.ts +37 -0
  133. package/dist/src/guard/schema_registry.d.ts.map +1 -0
  134. package/dist/src/guard/schema_registry.js +57 -0
  135. package/dist/src/guard/schema_registry.js.map +1 -0
  136. package/dist/src/guard/types.d.ts +63 -0
  137. package/dist/src/guard/types.d.ts.map +1 -0
  138. package/dist/src/guard/types.js +2 -0
  139. package/dist/src/guard/types.js.map +1 -0
  140. package/dist/src/index.d.ts +16 -0
  141. package/dist/src/index.d.ts.map +1 -0
  142. package/dist/src/index.js +14 -0
  143. package/dist/src/index.js.map +1 -0
  144. package/dist/src/logger.d.ts +7 -0
  145. package/dist/src/logger.d.ts.map +1 -0
  146. package/dist/src/logger.js +2 -0
  147. package/dist/src/logger.js.map +1 -0
  148. package/dist/src/models/catalog_resolver.d.ts +24 -0
  149. package/dist/src/models/catalog_resolver.d.ts.map +1 -0
  150. package/dist/src/models/catalog_resolver.js +66 -0
  151. package/dist/src/models/catalog_resolver.js.map +1 -0
  152. package/dist/src/models/index.d.ts +14 -0
  153. package/dist/src/models/index.d.ts.map +1 -0
  154. package/dist/src/models/index.js +8 -0
  155. package/dist/src/models/index.js.map +1 -0
  156. package/dist/src/models/keys.d.ts +9 -0
  157. package/dist/src/models/keys.d.ts.map +1 -0
  158. package/dist/src/models/keys.js +12 -0
  159. package/dist/src/models/keys.js.map +1 -0
  160. package/dist/src/models/language_model_factory.d.ts +44 -0
  161. package/dist/src/models/language_model_factory.d.ts.map +1 -0
  162. package/dist/src/models/language_model_factory.js +193 -0
  163. package/dist/src/models/language_model_factory.js.map +1 -0
  164. package/dist/src/models/model_chain.d.ts +58 -0
  165. package/dist/src/models/model_chain.d.ts.map +1 -0
  166. package/dist/src/models/model_chain.js +144 -0
  167. package/dist/src/models/model_chain.js.map +1 -0
  168. package/dist/src/models/model_ref.d.ts +12 -0
  169. package/dist/src/models/model_ref.d.ts.map +1 -0
  170. package/dist/src/models/model_ref.js +33 -0
  171. package/dist/src/models/model_ref.js.map +1 -0
  172. package/dist/src/models/protocols.d.ts +6 -0
  173. package/dist/src/models/protocols.d.ts.map +1 -0
  174. package/dist/src/models/protocols.js +33 -0
  175. package/dist/src/models/protocols.js.map +1 -0
  176. package/dist/src/models/provider_factories.d.ts +19 -0
  177. package/dist/src/models/provider_factories.d.ts.map +1 -0
  178. package/dist/src/models/provider_factories.js +70 -0
  179. package/dist/src/models/provider_factories.js.map +1 -0
  180. package/dist/src/models/types.d.ts +17 -0
  181. package/dist/src/models/types.d.ts.map +1 -0
  182. package/dist/src/models/types.js +2 -0
  183. package/dist/src/models/types.js.map +1 -0
  184. package/dist/src/response_macro.d.ts +16 -0
  185. package/dist/src/response_macro.d.ts.map +1 -0
  186. package/dist/src/response_macro.js +151 -0
  187. package/dist/src/response_macro.js.map +1 -0
  188. package/dist/src/types.d.ts +340 -0
  189. package/dist/src/types.d.ts.map +1 -0
  190. package/dist/src/types.js +2 -0
  191. package/dist/src/types.js.map +1 -0
  192. package/dist/src/usage.d.ts +13 -0
  193. package/dist/src/usage.d.ts.map +1 -0
  194. package/dist/src/usage.js +61 -0
  195. package/dist/src/usage.js.map +1 -0
  196. package/package.json +208 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agents/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA"}
@@ -0,0 +1,56 @@
1
+ import type { z } from 'zod';
2
+ import type { Logger } from '../logger.js';
3
+ import { type ToolPermission } from './manifest.js';
4
+ export interface AgentPromptConfig {
5
+ id: string;
6
+ description: string;
7
+ mode: 'primary' | 'subagent';
8
+ stopSteps: number;
9
+ skills: string[];
10
+ systemPrompt: string;
11
+ body: string;
12
+ skillPrompts: Record<string, string>;
13
+ outputSchemaName?: string;
14
+ outputSchema?: z.ZodTypeAny;
15
+ permissions: Record<string, ToolPermission>;
16
+ phases: string[];
17
+ model?: string;
18
+ provider?: string;
19
+ temperature?: number;
20
+ maxTokens?: number;
21
+ metadata?: Record<string, unknown>;
22
+ }
23
+ export interface AgentLoaderOptions {
24
+ configsDir?: string;
25
+ skillsDir?: string;
26
+ logger?: Logger;
27
+ schemaResolver?: (name: string) => z.ZodTypeAny | undefined;
28
+ }
29
+ export declare class AgentLoader {
30
+ private cache;
31
+ private configsDir?;
32
+ private skillsDir?;
33
+ private logger?;
34
+ private schemaResolver?;
35
+ constructor(options?: AgentLoaderOptions);
36
+ setSchemaResolver(resolver: (name: string) => z.ZodTypeAny | undefined): void;
37
+ setLogger(logger: Logger): void;
38
+ resolveDirs(customConfigsDir?: string, customSkillsDir?: string): Promise<{
39
+ configsDir: string;
40
+ skillsDir: string;
41
+ }>;
42
+ /**
43
+ * Resolves `<dir>/<name>.md`, rejecting names that could escape `dir`
44
+ * (`../`, absolute paths, separators). Returns `null` for unsafe names.
45
+ */
46
+ private safeResolve;
47
+ loadSkill(skillName: string, skillsDir: string): string;
48
+ loadAgentPrompt(agentId: string, customConfigsDir?: string, customSkillsDir?: string): Promise<AgentPromptConfig>;
49
+ loadAllAgentPrompts(customConfigsDir?: string, customSkillsDir?: string): Promise<Record<string, AgentPromptConfig>>;
50
+ invalidateCache(agentId?: string): void;
51
+ }
52
+ export declare const agentLoader: AgentLoader;
53
+ export declare function loadAgentPrompt(agentId: string, configsDir?: string, skillsDir?: string): Promise<AgentPromptConfig>;
54
+ export declare function loadAllAgentPrompts(configsDir?: string, skillsDir?: string): Promise<Record<string, AgentPromptConfig>>;
55
+ export declare function invalidateAgentCache(agentId?: string): void;
56
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/agents/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,184 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { parse as parseYaml } from 'yaml';
4
+ import { agentManifestSchema } from './manifest.js';
5
+ const SAFE_NAME = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
6
+ export class AgentLoader {
7
+ cache = new Map();
8
+ configsDir;
9
+ skillsDir;
10
+ logger;
11
+ schemaResolver;
12
+ constructor(options = {}) {
13
+ this.configsDir = options.configsDir;
14
+ this.skillsDir = options.skillsDir;
15
+ this.logger = options.logger;
16
+ this.schemaResolver = options.schemaResolver;
17
+ }
18
+ setSchemaResolver(resolver) {
19
+ this.schemaResolver = resolver;
20
+ }
21
+ setLogger(logger) {
22
+ this.logger = logger;
23
+ }
24
+ async resolveDirs(customConfigsDir, customSkillsDir) {
25
+ const configsDir = customConfigsDir ?? this.configsDir;
26
+ const skillsDir = customSkillsDir ?? this.skillsDir;
27
+ if (configsDir && skillsDir) {
28
+ return { configsDir, skillsDir };
29
+ }
30
+ let defaultConfigs = configsDir;
31
+ let defaultSkills = skillsDir;
32
+ try {
33
+ const { default: app } = await import('@adonisjs/core/services/app');
34
+ if (!defaultConfigs)
35
+ defaultConfigs = app.makePath('resources/agent-configs');
36
+ if (!defaultSkills)
37
+ defaultSkills = app.makePath('resources/agent-skills');
38
+ }
39
+ catch {
40
+ if (!defaultConfigs)
41
+ defaultConfigs = path.resolve(process.cwd(), 'resources', 'agent-configs');
42
+ if (!defaultSkills)
43
+ defaultSkills = path.resolve(process.cwd(), 'resources', 'agent-skills');
44
+ }
45
+ return { configsDir: defaultConfigs, skillsDir: defaultSkills };
46
+ }
47
+ /**
48
+ * Resolves `<dir>/<name>.md`, rejecting names that could escape `dir`
49
+ * (`../`, absolute paths, separators). Returns `null` for unsafe names.
50
+ */
51
+ safeResolve(dir, name) {
52
+ if (!SAFE_NAME.test(name) || name.includes('..'))
53
+ return null;
54
+ const root = path.resolve(dir);
55
+ const resolved = path.resolve(root, `${name}.md`);
56
+ return resolved.startsWith(root + path.sep) ? resolved : null;
57
+ }
58
+ loadSkill(skillName, skillsDir) {
59
+ const skillPath = this.safeResolve(skillsDir, skillName);
60
+ if (!skillPath) {
61
+ this.logger?.warn?.(`[AgentLoader] Refusing unsafe skill name: ${JSON.stringify(skillName)}`);
62
+ return '';
63
+ }
64
+ try {
65
+ if (fs.existsSync(skillPath)) {
66
+ return fs.readFileSync(skillPath, 'utf-8').trim();
67
+ }
68
+ }
69
+ catch (err) {
70
+ this.logger?.warn?.(`[AgentLoader] Failed to read skill file "${skillPath}": ${err instanceof Error ? err.message : String(err)}`);
71
+ }
72
+ this.logger?.warn?.(`[AgentLoader] Skill not found: ${skillName} at ${skillPath}`);
73
+ return '';
74
+ }
75
+ async loadAgentPrompt(agentId, customConfigsDir, customSkillsDir) {
76
+ const dirs = await this.resolveDirs(customConfigsDir, customSkillsDir);
77
+ const cacheKey = `${dirs.configsDir}::${dirs.skillsDir}::${agentId}`;
78
+ if (this.cache.has(cacheKey)) {
79
+ return this.cache.get(cacheKey);
80
+ }
81
+ const filePath = this.safeResolve(dirs.configsDir, agentId);
82
+ if (!filePath) {
83
+ throw new Error(`Invalid agent id: ${JSON.stringify(agentId)}`);
84
+ }
85
+ if (!fs.existsSync(filePath)) {
86
+ throw new Error(`Agent prompt configuration file not found: ${filePath}`);
87
+ }
88
+ const content = fs.readFileSync(filePath, 'utf-8');
89
+ // Strip a UTF-8 BOM and normalize line endings so the frontmatter regex always matches.
90
+ const raw = content.replace(/^\u{FEFF}/u, '').replace(/\r\n/g, '\n');
91
+ let manifestRaw = { id: agentId };
92
+ let body = raw.trim();
93
+ const match = raw.match(/^---\n([\s\S]*?)\n---(?:\n([\s\S]*))?$/);
94
+ if (match) {
95
+ try {
96
+ const parsed = parseYaml(match[1]);
97
+ // `id` defaults to the file name when the frontmatter omits it
98
+ manifestRaw = { id: agentId, ...(parsed !== null && typeof parsed === 'object' ? parsed : {}) };
99
+ body = (match[2] ?? '').trim();
100
+ }
101
+ catch (err) {
102
+ throw new Error(`Failed to parse YAML frontmatter for agent "${agentId}": ${err instanceof Error ? err.message : String(err)}`);
103
+ }
104
+ }
105
+ const manifestResult = agentManifestSchema.safeParse(manifestRaw);
106
+ if (!manifestResult.success) {
107
+ throw new Error(`Invalid agent manifest for "${agentId}": ${manifestResult.error.message}`);
108
+ }
109
+ const manifest = manifestResult.data;
110
+ const skillPrompts = {};
111
+ const loadedSkillSections = [];
112
+ for (const skillName of manifest.skills) {
113
+ const skillText = this.loadSkill(skillName, dirs.skillsDir);
114
+ if (skillText) {
115
+ skillPrompts[skillName] = skillText;
116
+ loadedSkillSections.push(skillText);
117
+ }
118
+ }
119
+ // Dynamic injection of skills into system prompt
120
+ const systemPrompt = loadedSkillSections.length > 0
121
+ ? [body, ...loadedSkillSections].join('\n\n---\n\n')
122
+ : body;
123
+ const resolvedOutputSchema = manifest.outputSchema && this.schemaResolver
124
+ ? this.schemaResolver(manifest.outputSchema)
125
+ : undefined;
126
+ const config = {
127
+ id: manifest.id,
128
+ description: manifest.description,
129
+ mode: manifest.mode,
130
+ stopSteps: manifest.stopSteps,
131
+ skills: manifest.skills,
132
+ systemPrompt,
133
+ body,
134
+ skillPrompts,
135
+ outputSchemaName: manifest.outputSchema,
136
+ outputSchema: resolvedOutputSchema,
137
+ permissions: manifest.permissions,
138
+ phases: manifest.phases,
139
+ model: manifest.model,
140
+ provider: manifest.provider,
141
+ temperature: manifest.temperature,
142
+ maxTokens: manifest.maxTokens,
143
+ metadata: manifest.metadata,
144
+ };
145
+ this.cache.set(cacheKey, config);
146
+ return config;
147
+ }
148
+ async loadAllAgentPrompts(customConfigsDir, customSkillsDir) {
149
+ const dirs = await this.resolveDirs(customConfigsDir, customSkillsDir);
150
+ if (!fs.existsSync(dirs.configsDir)) {
151
+ this.logger?.warn?.(`[AgentLoader] Configs directory does not exist: ${dirs.configsDir}`);
152
+ return {};
153
+ }
154
+ const entries = fs.readdirSync(dirs.configsDir);
155
+ const mdFiles = entries.filter((f) => f.endsWith('.md'));
156
+ const results = await Promise.all(mdFiles.map(async (f) => {
157
+ const id = f.replace(/\.md$/, '');
158
+ return [id, await this.loadAgentPrompt(id, dirs.configsDir, dirs.skillsDir)];
159
+ }));
160
+ return Object.fromEntries(results);
161
+ }
162
+ invalidateCache(agentId) {
163
+ if (!agentId) {
164
+ this.cache.clear();
165
+ return;
166
+ }
167
+ for (const key of this.cache.keys()) {
168
+ if (key.endsWith(`::${agentId}`)) {
169
+ this.cache.delete(key);
170
+ }
171
+ }
172
+ }
173
+ }
174
+ export const agentLoader = new AgentLoader();
175
+ export async function loadAgentPrompt(agentId, configsDir, skillsDir) {
176
+ return agentLoader.loadAgentPrompt(agentId, configsDir, skillsDir);
177
+ }
178
+ export async function loadAllAgentPrompts(configsDir, skillsDir) {
179
+ return agentLoader.loadAllAgentPrompts(configsDir, skillsDir);
180
+ }
181
+ export function invalidateAgentCache(agentId) {
182
+ agentLoader.invalidateCache(agentId);
183
+ }
184
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/agents/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { z } from 'zod';
2
+ export declare const toolPermissionSchema: z.ZodEnum<{
3
+ allow: "allow";
4
+ ask: "ask";
5
+ deny: "deny";
6
+ }>;
7
+ export type ToolPermission = z.infer<typeof toolPermissionSchema>;
8
+ export declare const agentManifestSchema: z.ZodPipe<z.ZodObject<{
9
+ id: z.ZodString;
10
+ description: z.ZodDefault<z.ZodString>;
11
+ mode: z.ZodDefault<z.ZodEnum<{
12
+ primary: "primary";
13
+ subagent: "subagent";
14
+ }>>;
15
+ stop_steps: z.ZodOptional<z.ZodNumber>;
16
+ stopSteps: z.ZodOptional<z.ZodNumber>;
17
+ skills: z.ZodDefault<z.ZodArray<z.ZodString>>;
18
+ outputSchema: z.ZodOptional<z.ZodString>;
19
+ permissions: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodEnum<{
20
+ allow: "allow";
21
+ ask: "ask";
22
+ deny: "deny";
23
+ }>>>;
24
+ phases: z.ZodDefault<z.ZodArray<z.ZodString>>;
25
+ model: z.ZodOptional<z.ZodString>;
26
+ provider: z.ZodOptional<z.ZodString>;
27
+ temperature: z.ZodOptional<z.ZodNumber>;
28
+ maxTokens: z.ZodOptional<z.ZodNumber>;
29
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
30
+ }, z.core.$strip>, z.ZodTransform<{
31
+ id: string;
32
+ description: string;
33
+ mode: "primary" | "subagent";
34
+ stopSteps: number;
35
+ skills: string[];
36
+ outputSchema: string | undefined;
37
+ permissions: Record<string, "allow" | "ask" | "deny">;
38
+ phases: string[];
39
+ model: string | undefined;
40
+ provider: string | undefined;
41
+ temperature: number | undefined;
42
+ maxTokens: number | undefined;
43
+ metadata: Record<string, unknown> | undefined;
44
+ }, {
45
+ id: string;
46
+ description: string;
47
+ mode: "primary" | "subagent";
48
+ skills: string[];
49
+ permissions: Record<string, "allow" | "ask" | "deny">;
50
+ phases: string[];
51
+ stop_steps?: number | undefined;
52
+ stopSteps?: number | undefined;
53
+ outputSchema?: string | undefined;
54
+ model?: string | undefined;
55
+ provider?: string | undefined;
56
+ temperature?: number | undefined;
57
+ maxTokens?: number | undefined;
58
+ metadata?: Record<string, unknown> | undefined;
59
+ }>>;
60
+ export type AgentManifest = z.infer<typeof agentManifestSchema>;
61
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/agents/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,oBAAoB;;;;EAAmC,CAAA;AACpE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEjE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+B3B,CAAA;AAEL,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA"}
@@ -0,0 +1,35 @@
1
+ import { z } from 'zod';
2
+ export const toolPermissionSchema = z.enum(['allow', 'ask', 'deny']);
3
+ export const agentManifestSchema = z
4
+ .object({
5
+ id: z.string().min(1),
6
+ description: z.string().default(''),
7
+ mode: z.enum(['primary', 'subagent']).default('subagent'),
8
+ stop_steps: z.number().int().positive().optional(),
9
+ stopSteps: z.number().int().positive().optional(),
10
+ skills: z.array(z.string()).default([]),
11
+ outputSchema: z.string().optional(),
12
+ permissions: z.record(z.string(), toolPermissionSchema).default({}),
13
+ phases: z.array(z.string()).default([]),
14
+ model: z.string().optional(),
15
+ provider: z.string().optional(),
16
+ temperature: z.number().optional(),
17
+ maxTokens: z.number().optional(),
18
+ metadata: z.record(z.string(), z.unknown()).optional(),
19
+ })
20
+ .transform((data) => ({
21
+ id: data.id,
22
+ description: data.description,
23
+ mode: data.mode,
24
+ stopSteps: data.stopSteps ?? data.stop_steps ?? 5,
25
+ skills: data.skills,
26
+ outputSchema: data.outputSchema,
27
+ permissions: data.permissions,
28
+ phases: data.phases,
29
+ model: data.model,
30
+ provider: data.provider,
31
+ temperature: data.temperature,
32
+ maxTokens: data.maxTokens,
33
+ metadata: data.metadata,
34
+ }));
35
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/agents/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;AAGpE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,MAAM,CAAC;IACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACnC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IACzD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAClD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACjD,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACvC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACnE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACvC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACvD,CAAC;KACD,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACpB,EAAE,EAAE,IAAI,CAAC,EAAE;IACX,WAAW,EAAE,IAAI,CAAC,WAAW;IAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC;IACjD,MAAM,EAAE,IAAI,CAAC,MAAM;IACnB,YAAY,EAAE,IAAI,CAAC,YAAY;IAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;IAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;IACnB,KAAK,EAAE,IAAI,CAAC,KAAK;IACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;IACvB,WAAW,EAAE,IAAI,CAAC,WAAW;IAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;IACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;CACxB,CAAC,CAAC,CAAA"}
@@ -0,0 +1,140 @@
1
+ import type { ToolSet } from 'ai';
2
+ import { CostTracker } from './budget/cost_tracker.js';
3
+ import { ConfirmationService } from './guard/confirmation.js';
4
+ import { ToolRegistry } from './guard/registry.js';
5
+ import { CircuitBreaker } from './circuit_breaker.js';
6
+ import { ModelsDevSource } from './catalog/source.js';
7
+ import { AgentLoader, type AgentPromptConfig } from './agents/loader.js';
8
+ import { AgentRunner, type AgentRunnerOptions } from './agents/agent_runner.js';
9
+ import type { AiConfig, AiDriver, GenerateObjectOptions, GenerateObjectResult, GenerateTextOptions, GenerateTextResult, StreamTextOptions, StreamTextResult } from './types.js';
10
+ import type { Logger } from './logger.js';
11
+ /** @deprecated Use Logger */
12
+ export type LoggerContract = Logger;
13
+ /**
14
+ * Central AI Manager for AdonisJS 7 (analog of Laravel AI / Prism).
15
+ * Orchestrates multi-provider drivers, models.dev catalog discovery, ACP agents,
16
+ * declarative skills & agent runners, cascading failover, circuit breaker resilience,
17
+ * token budget accounting, and guarded tool execution.
18
+ */
19
+ export declare class AiManager {
20
+ private config;
21
+ private logger?;
22
+ private circuitBreaker;
23
+ private costTracker;
24
+ private toolRegistry;
25
+ private confirmation;
26
+ private catalog;
27
+ private agentLoader;
28
+ private drivers;
29
+ private pricingWarmups;
30
+ private lazyLanguageModels?;
31
+ constructor(config: AiConfig, logger?: Logger, costTracker?: CostTracker, toolRegistry?: ToolRegistry, catalog?: ModelsDevSource, agentLoader?: AgentLoader, confirmation?: ConfirmationService);
32
+ getConfig(): AiConfig;
33
+ getCircuitBreaker(): CircuitBreaker;
34
+ getCostTracker(): CostTracker;
35
+ getToolRegistry(): ToolRegistry;
36
+ /**
37
+ * Service that answers `ask` tool permissions and ACP agent permission requests.
38
+ * Subscribe with `onActionCreated()` and call `approve()` / `reject()` from your UI.
39
+ */
40
+ getConfirmationService(): ConfirmationService;
41
+ getCatalog(): ModelsDevSource;
42
+ getAgentLoader(): AgentLoader;
43
+ /**
44
+ * Instantiates an executable AgentRunner by loading its markdown manifest and skills.
45
+ */
46
+ agent(name: string, options?: AgentRunnerOptions): Promise<AgentRunner>;
47
+ /**
48
+ * Loads all agent prompt configurations from the configured directory.
49
+ */
50
+ loadAgents(configsDir?: string, skillsDir?: string): Promise<Record<string, AgentPromptConfig>>;
51
+ /**
52
+ * Dynamically resolves a model reference string (e.g. 'openai/gpt-4o', 'claude-3-5-sonnet')
53
+ * against the models.dev catalog.
54
+ */
55
+ resolveModel(modelRef: string, defaultProvider?: string): Promise<{
56
+ providerId: string;
57
+ modelId: string;
58
+ entry?: import("./index.ts").ModelCatalogEntry;
59
+ }>;
60
+ /**
61
+ * Returns a specific driver by name, or the default driver.
62
+ * Concurrent callers share one driver instance.
63
+ */
64
+ use(name?: string): Promise<AiDriver>;
65
+ /**
66
+ * Alias for use() matching AdonisJS convention.
67
+ */
68
+ driver(name?: string): Promise<AiDriver>;
69
+ /**
70
+ * Stops child processes (ACP agents), disposes pending confirmations and forgets drivers.
71
+ * Call on application shutdown.
72
+ */
73
+ shutdown(): Promise<void>;
74
+ private get languageModels();
75
+ /**
76
+ * Starts loading catalog pricing for a model in the background (deduplicated).
77
+ */
78
+ private warmPricing;
79
+ /**
80
+ * Executes an operation with cascading fallback across the primary and explicitly configured
81
+ * backup providers.
82
+ *
83
+ * - The requested model is used for the primary provider only; fallbacks use `fallbackModels`
84
+ * or their own `defaultModel`.
85
+ * - Only transient failures (429, 5xx, network) fall through to the next provider; bad requests,
86
+ * validation errors and aborts are rethrown immediately, as are failures after tools ran.
87
+ * - The circuit breaker is keyed by `provider:model`.
88
+ */
89
+ private executeWithFallback;
90
+ /**
91
+ * Executes an operation over an explicit chain of models. The provider cascade is not used; the
92
+ * chain is authoritative and every entry has its own per-credential circuit breaker.
93
+ */
94
+ private executeOverChain;
95
+ /**
96
+ * Applies tool permissions and the tool guard, and tracks whether any tool actually ran.
97
+ * `deny` tools are dropped, `ask` tools need a human confirmation (fail-closed without one),
98
+ * and every tool passes through `toolGuard.guard` when provided.
99
+ */
100
+ private prepareTools;
101
+ private buildTextParams;
102
+ private recordCost;
103
+ private warnIfOverBudget;
104
+ /**
105
+ * Generates text using the configured LLM provider with fallback, budget accounting, and tool guard.
106
+ */
107
+ generateText(options: GenerateTextOptions): Promise<GenerateTextResult>;
108
+ /**
109
+ * Streams text from LLM. Initial provider failures (429, 5xx, network) are detected before this
110
+ * method returns, so they trigger fallback and the HTTP layer can still send proper headers.
111
+ * Token usage is recorded when the stream ends or is aborted.
112
+ */
113
+ streamText(options: StreamTextOptions): Promise<StreamTextResult>;
114
+ /**
115
+ * Generates a typed structured object conforming to a Zod schema
116
+ * (via `generateText` with `Output.object`, as `generateObject` is deprecated in AI SDK v7).
117
+ */
118
+ generateObject<T>(options: GenerateObjectOptions<T>): Promise<GenerateObjectResult<T>>;
119
+ /**
120
+ * Fluent conversation builder (Laravel AI / Prism syntax style).
121
+ */
122
+ chat(): {
123
+ system: (prompt: string) => /*elided*/ any;
124
+ user: (content: string) => /*elided*/ any;
125
+ assistant: (content: string) => /*elided*/ any;
126
+ provider: (name: string) => /*elided*/ any;
127
+ model: (name: string) => /*elided*/ any;
128
+ temperature: (val: number) => /*elided*/ any;
129
+ agent: (name: string) => /*elided*/ any;
130
+ tools: (tools: ToolSet) => /*elided*/ any;
131
+ generate: () => Promise<GenerateTextResult>;
132
+ stream: () => Promise<StreamTextResult>;
133
+ };
134
+ /**
135
+ * Driver factory for OpenAI, Anthropic, Google/Gemini, Groq, Ollama, ACP, and Custom providers.
136
+ */
137
+ private createDriver;
138
+ private safeImport;
139
+ }
140
+ //# sourceMappingURL=ai_manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai_manager.d.ts","sourceRoot":"","sources":["../../src/ai_manager.ts"],"names":[],"mappings":"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"}