@deimoscloud/coreai 0.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 (216) hide show
  1. package/.prettierrc +9 -0
  2. package/AGENT_SPEC.md +347 -0
  3. package/ARCHITECTURE.md +547 -0
  4. package/DRAFT_PRD.md +1440 -0
  5. package/IMPLEMENTATION_PLAN.md +256 -0
  6. package/PRODUCT.md +473 -0
  7. package/README.md +303 -0
  8. package/WORKFLOWS.md +295 -0
  9. package/agents/_templates/ic-engineer.md +185 -0
  10. package/agents/_templates/reviewer.md +182 -0
  11. package/agents/backend-engineer.yaml +72 -0
  12. package/agents/devops-engineer.yaml +72 -0
  13. package/agents/engineering-manager.yaml +70 -0
  14. package/agents/examples/android-engineer.md +302 -0
  15. package/agents/examples/backend-engineer.md +320 -0
  16. package/agents/examples/devops-engineer.md +742 -0
  17. package/agents/examples/engineering-manager.md +469 -0
  18. package/agents/examples/frontend-engineer.md +58 -0
  19. package/agents/examples/product-manager.md +315 -0
  20. package/agents/examples/qa-engineer.md +371 -0
  21. package/agents/examples/security-engineer.md +525 -0
  22. package/agents/examples/solutions-architect.md +351 -0
  23. package/agents/examples/wearos-engineer.md +359 -0
  24. package/agents/frontend-engineer.yaml +72 -0
  25. package/commands/core/check-inbox.md +34 -0
  26. package/commands/core/delegate.md +30 -0
  27. package/commands/core/git-commit.md +144 -0
  28. package/commands/core/pr-create.md +193 -0
  29. package/commands/core/review.md +56 -0
  30. package/commands/core/sprint-status.md +65 -0
  31. package/commands/optional/docs-update.md +200 -0
  32. package/commands/optional/jira-create.md +200 -0
  33. package/commands/optional/jira-transition.md +184 -0
  34. package/commands/optional/worktree-cleanup.md +167 -0
  35. package/commands/optional/worktree-setup.md +110 -0
  36. package/dist/cli/index.js +4037 -0
  37. package/dist/cli/index.js.map +1 -0
  38. package/dist/index.d.ts +2978 -0
  39. package/dist/index.js +3867 -0
  40. package/dist/index.js.map +1 -0
  41. package/eslint.config.js +29 -0
  42. package/jest.config.js +22 -0
  43. package/knowledge-library/README.md +118 -0
  44. package/knowledge-library/android-engineer/context/current.txt +42 -0
  45. package/knowledge-library/android-engineer/control/decisions.txt +9 -0
  46. package/knowledge-library/android-engineer/control/dependencies.txt +19 -0
  47. package/knowledge-library/android-engineer/control/objectives.txt +26 -0
  48. package/knowledge-library/android-engineer/history/.gitkeep +0 -0
  49. package/knowledge-library/android-engineer/inbox/processed/.gitkeep +0 -0
  50. package/knowledge-library/android-engineer/outbox/.gitkeep +0 -0
  51. package/knowledge-library/android-engineer/tech/.gitkeep +0 -0
  52. package/knowledge-library/architecture.txt +61 -0
  53. package/knowledge-library/backend-engineer/context/current.txt +42 -0
  54. package/knowledge-library/backend-engineer/control/decisions.txt +9 -0
  55. package/knowledge-library/backend-engineer/control/dependencies.txt +19 -0
  56. package/knowledge-library/backend-engineer/control/objectives.txt +26 -0
  57. package/knowledge-library/backend-engineer/history/.gitkeep +0 -0
  58. package/knowledge-library/backend-engineer/inbox/processed/.gitkeep +0 -0
  59. package/knowledge-library/backend-engineer/outbox/.gitkeep +0 -0
  60. package/knowledge-library/backend-engineer/tech/.gitkeep +0 -0
  61. package/knowledge-library/context.txt +52 -0
  62. package/knowledge-library/devops-engineer/context/current.txt +42 -0
  63. package/knowledge-library/devops-engineer/control/decisions.txt +9 -0
  64. package/knowledge-library/devops-engineer/control/dependencies.txt +19 -0
  65. package/knowledge-library/devops-engineer/control/objectives.txt +26 -0
  66. package/knowledge-library/devops-engineer/history/.gitkeep +0 -0
  67. package/knowledge-library/devops-engineer/inbox/processed/.gitkeep +0 -0
  68. package/knowledge-library/devops-engineer/outbox/.gitkeep +0 -0
  69. package/knowledge-library/devops-engineer/tech/.gitkeep +0 -0
  70. package/knowledge-library/engineering-manager/context/current.txt +40 -0
  71. package/knowledge-library/engineering-manager/control/decisions.txt +9 -0
  72. package/knowledge-library/engineering-manager/control/objectives.txt +27 -0
  73. package/knowledge-library/engineering-manager/history/.gitkeep +0 -0
  74. package/knowledge-library/engineering-manager/inbox/processed/.gitkeep +0 -0
  75. package/knowledge-library/engineering-manager/outbox/.gitkeep +0 -0
  76. package/knowledge-library/engineering-manager/tech/.gitkeep +0 -0
  77. package/knowledge-library/prd.txt +81 -0
  78. package/knowledge-library/product-manager/context/current.txt +42 -0
  79. package/knowledge-library/product-manager/control/decisions.txt +9 -0
  80. package/knowledge-library/product-manager/control/dependencies.txt +19 -0
  81. package/knowledge-library/product-manager/control/objectives.txt +26 -0
  82. package/knowledge-library/product-manager/history/.gitkeep +0 -0
  83. package/knowledge-library/product-manager/inbox/processed/.gitkeep +0 -0
  84. package/knowledge-library/product-manager/outbox/.gitkeep +0 -0
  85. package/knowledge-library/product-manager/tech/.gitkeep +0 -0
  86. package/knowledge-library/qa-engineer/context/current.txt +42 -0
  87. package/knowledge-library/qa-engineer/control/decisions.txt +9 -0
  88. package/knowledge-library/qa-engineer/control/dependencies.txt +19 -0
  89. package/knowledge-library/qa-engineer/control/objectives.txt +26 -0
  90. package/knowledge-library/qa-engineer/history/.gitkeep +0 -0
  91. package/knowledge-library/qa-engineer/inbox/processed/.gitkeep +0 -0
  92. package/knowledge-library/qa-engineer/outbox/.gitkeep +0 -0
  93. package/knowledge-library/qa-engineer/tech/.gitkeep +0 -0
  94. package/knowledge-library/security-engineer/context/current.txt +42 -0
  95. package/knowledge-library/security-engineer/control/decisions.txt +9 -0
  96. package/knowledge-library/security-engineer/control/dependencies.txt +19 -0
  97. package/knowledge-library/security-engineer/control/objectives.txt +26 -0
  98. package/knowledge-library/security-engineer/history/.gitkeep +0 -0
  99. package/knowledge-library/security-engineer/inbox/processed/.gitkeep +0 -0
  100. package/knowledge-library/security-engineer/outbox/.gitkeep +0 -0
  101. package/knowledge-library/security-engineer/tech/.gitkeep +0 -0
  102. package/knowledge-library/solutions-architect/context/current.txt +42 -0
  103. package/knowledge-library/solutions-architect/control/decisions.txt +9 -0
  104. package/knowledge-library/solutions-architect/control/dependencies.txt +19 -0
  105. package/knowledge-library/solutions-architect/control/objectives.txt +26 -0
  106. package/knowledge-library/solutions-architect/history/.gitkeep +0 -0
  107. package/knowledge-library/solutions-architect/inbox/processed/.gitkeep +0 -0
  108. package/knowledge-library/solutions-architect/outbox/.gitkeep +0 -0
  109. package/knowledge-library/solutions-architect/tech/.gitkeep +0 -0
  110. package/knowledge-library/wearos-engineer/context/current.txt +42 -0
  111. package/knowledge-library/wearos-engineer/control/decisions.txt +9 -0
  112. package/knowledge-library/wearos-engineer/control/dependencies.txt +19 -0
  113. package/knowledge-library/wearos-engineer/control/objectives.txt +26 -0
  114. package/knowledge-library/wearos-engineer/history/.gitkeep +0 -0
  115. package/knowledge-library/wearos-engineer/inbox/processed/.gitkeep +0 -0
  116. package/knowledge-library/wearos-engineer/outbox/.gitkeep +0 -0
  117. package/knowledge-library/wearos-engineer/tech/.gitkeep +0 -0
  118. package/package.json +66 -0
  119. package/schemas/agent.schema.json +171 -0
  120. package/schemas/coreai.config.schema.json +257 -0
  121. package/scripts/add-agent.sh +323 -0
  122. package/scripts/install.sh +354 -0
  123. package/src/adapters/factory.test.ts +386 -0
  124. package/src/adapters/factory.ts +305 -0
  125. package/src/adapters/index.ts +113 -0
  126. package/src/adapters/interfaces.ts +268 -0
  127. package/src/adapters/mcp/client.test.ts +130 -0
  128. package/src/adapters/mcp/client.ts +451 -0
  129. package/src/adapters/mcp/discovery.test.ts +315 -0
  130. package/src/adapters/mcp/discovery.ts +340 -0
  131. package/src/adapters/mcp/index.ts +66 -0
  132. package/src/adapters/mcp/mapper.test.ts +218 -0
  133. package/src/adapters/mcp/mapper.ts +536 -0
  134. package/src/adapters/mcp/registry.test.ts +433 -0
  135. package/src/adapters/mcp/registry.ts +550 -0
  136. package/src/adapters/mcp/types.ts +258 -0
  137. package/src/adapters/native/filesystem.test.ts +350 -0
  138. package/src/adapters/native/filesystem.ts +393 -0
  139. package/src/adapters/native/github.test.ts +173 -0
  140. package/src/adapters/native/github.ts +627 -0
  141. package/src/adapters/native/index.ts +22 -0
  142. package/src/adapters/native/selector.test.ts +224 -0
  143. package/src/adapters/native/selector.ts +150 -0
  144. package/src/adapters/types.ts +270 -0
  145. package/src/agents/compiler.test.ts +399 -0
  146. package/src/agents/compiler.ts +359 -0
  147. package/src/agents/index.ts +36 -0
  148. package/src/agents/loader.test.ts +319 -0
  149. package/src/agents/loader.ts +143 -0
  150. package/src/agents/resolver.test.ts +282 -0
  151. package/src/agents/resolver.ts +262 -0
  152. package/src/agents/types.ts +87 -0
  153. package/src/cache/index.ts +38 -0
  154. package/src/cache/interfaces.ts +283 -0
  155. package/src/cache/manager.test.ts +266 -0
  156. package/src/cache/manager.ts +388 -0
  157. package/src/cache/provider.test.ts +485 -0
  158. package/src/cache/provider.ts +745 -0
  159. package/src/cache/types.test.ts +192 -0
  160. package/src/cache/types.ts +313 -0
  161. package/src/cli/commands/build.test.ts +248 -0
  162. package/src/cli/commands/build.ts +244 -0
  163. package/src/cli/commands/cache.test.ts +221 -0
  164. package/src/cli/commands/cache.ts +229 -0
  165. package/src/cli/commands/index.ts +63 -0
  166. package/src/cli/commands/init.test.ts +173 -0
  167. package/src/cli/commands/init.ts +296 -0
  168. package/src/cli/commands/skills.test.ts +272 -0
  169. package/src/cli/commands/skills.ts +348 -0
  170. package/src/cli/commands/status.test.ts +392 -0
  171. package/src/cli/commands/status.ts +332 -0
  172. package/src/cli/commands/sync.test.ts +213 -0
  173. package/src/cli/commands/sync.ts +251 -0
  174. package/src/cli/commands/validate.test.ts +216 -0
  175. package/src/cli/commands/validate.ts +340 -0
  176. package/src/cli/index.test.ts +190 -0
  177. package/src/cli/index.ts +493 -0
  178. package/src/commands/context.test.ts +163 -0
  179. package/src/commands/context.ts +111 -0
  180. package/src/commands/index.ts +56 -0
  181. package/src/commands/loader.test.ts +273 -0
  182. package/src/commands/loader.ts +355 -0
  183. package/src/commands/registry.test.ts +384 -0
  184. package/src/commands/registry.ts +248 -0
  185. package/src/commands/runner.test.ts +297 -0
  186. package/src/commands/runner.ts +222 -0
  187. package/src/commands/types.ts +361 -0
  188. package/src/config/index.ts +19 -0
  189. package/src/config/loader.test.ts +262 -0
  190. package/src/config/loader.ts +188 -0
  191. package/src/config/types.ts +154 -0
  192. package/src/context/index.ts +14 -0
  193. package/src/context/loader.test.ts +334 -0
  194. package/src/context/loader.ts +357 -0
  195. package/src/index.test.ts +13 -0
  196. package/src/index.ts +244 -0
  197. package/src/knowledge-library/index.ts +44 -0
  198. package/src/knowledge-library/manager.test.ts +536 -0
  199. package/src/knowledge-library/manager.ts +804 -0
  200. package/src/knowledge-library/types.ts +432 -0
  201. package/src/skills/generator.test.ts +602 -0
  202. package/src/skills/generator.ts +491 -0
  203. package/src/skills/index.ts +27 -0
  204. package/src/skills/templates.ts +520 -0
  205. package/src/skills/types.ts +251 -0
  206. package/templates/completion-report.md +72 -0
  207. package/templates/feedback.md +56 -0
  208. package/templates/project-files/CLAUDE.md.template +109 -0
  209. package/templates/project-files/coreai.json.example +47 -0
  210. package/templates/project-files/mcp.json.template +20 -0
  211. package/templates/review-complete.md +64 -0
  212. package/templates/review-request.md +67 -0
  213. package/templates/task-assignment.md +51 -0
  214. package/tsconfig.build.json +4 -0
  215. package/tsconfig.json +26 -0
  216. package/tsup.config.ts +23 -0
@@ -0,0 +1,357 @@
1
+ /**
2
+ * Context Loader
3
+ *
4
+ * Loads shared context from remote documentation providers with cache-first resolution.
5
+ * Handles first-run scenarios when cache is empty.
6
+ */
7
+
8
+ import type { CacheManager, CacheOptions, FetchOptions } from '../cache/index.js';
9
+ import type { CacheEntry, CacheMetadata } from '../cache/types.js';
10
+
11
+ /**
12
+ * Context source definition
13
+ */
14
+ export interface ContextSource {
15
+ /**
16
+ * Unique identifier for this context
17
+ */
18
+ key: string;
19
+
20
+ /**
21
+ * Remote URL to fetch from
22
+ */
23
+ url: string;
24
+
25
+ /**
26
+ * Optional title for the context
27
+ */
28
+ title?: string;
29
+
30
+ /**
31
+ * Optional tags for categorization
32
+ */
33
+ tags?: string[];
34
+
35
+ /**
36
+ * Whether this context is required (fail if cannot load)
37
+ */
38
+ required?: boolean;
39
+ }
40
+
41
+ /**
42
+ * Context load result
43
+ */
44
+ export interface ContextLoadResult {
45
+ /**
46
+ * Successfully loaded contexts
47
+ */
48
+ loaded: {
49
+ key: string;
50
+ content: string;
51
+ fromCache: boolean;
52
+ metadata: CacheMetadata;
53
+ }[];
54
+
55
+ /**
56
+ * Failed contexts
57
+ */
58
+ failed: {
59
+ key: string;
60
+ error: string;
61
+ required: boolean;
62
+ }[];
63
+
64
+ /**
65
+ * Total duration in milliseconds
66
+ */
67
+ duration: number;
68
+ }
69
+
70
+ /**
71
+ * Options for the context loader
72
+ */
73
+ export interface ContextLoaderOptions {
74
+ /**
75
+ * The cache manager to use
76
+ */
77
+ cacheManager: CacheManager;
78
+
79
+ /**
80
+ * Default TTL for cached contexts (seconds)
81
+ */
82
+ defaultTtl?: number;
83
+
84
+ /**
85
+ * Whether to fail on any required context failure
86
+ */
87
+ failOnRequired?: boolean;
88
+
89
+ /**
90
+ * Maximum concurrent fetches
91
+ */
92
+ concurrency?: number;
93
+ }
94
+
95
+ /**
96
+ * Options for loading contexts
97
+ */
98
+ export interface LoadOptions extends CacheOptions, FetchOptions {
99
+ /**
100
+ * Continue loading other contexts if one fails
101
+ */
102
+ continueOnError?: boolean;
103
+
104
+ /**
105
+ * Progress callback
106
+ */
107
+ onProgress?: (loaded: number, total: number, current: string) => void;
108
+ }
109
+
110
+ /**
111
+ * Context Loader
112
+ *
113
+ * Provides cache-first context resolution with graceful degradation
114
+ * for first-run scenarios when the cache is empty.
115
+ */
116
+ export class ContextLoader {
117
+ private cacheManager: CacheManager;
118
+ private defaultTtl: number;
119
+ private failOnRequired: boolean;
120
+ private concurrency: number;
121
+
122
+ constructor(options: ContextLoaderOptions) {
123
+ this.cacheManager = options.cacheManager;
124
+ this.defaultTtl = options.defaultTtl ?? 3600;
125
+ this.failOnRequired = options.failOnRequired ?? true;
126
+ this.concurrency = options.concurrency ?? 5;
127
+ }
128
+
129
+ /**
130
+ * Load a single context
131
+ */
132
+ async load(source: ContextSource, options?: LoadOptions): Promise<CacheEntry<string>> {
133
+ try {
134
+ const cacheOptions: CacheOptions & FetchOptions = {
135
+ ...options,
136
+ ttl: options?.ttl ?? this.defaultTtl,
137
+ };
138
+ if (source.tags) {
139
+ cacheOptions.tags = source.tags;
140
+ }
141
+ const entry = await this.cacheManager.getWithFallback<string>(
142
+ source.key,
143
+ source.url,
144
+ cacheOptions
145
+ );
146
+
147
+ return entry;
148
+ } catch (error) {
149
+ const message = error instanceof Error ? error.message : String(error);
150
+
151
+ if (source.required && this.failOnRequired) {
152
+ throw new Error(`Failed to load required context "${source.key}": ${message}`);
153
+ }
154
+
155
+ throw error;
156
+ }
157
+ }
158
+
159
+ /**
160
+ * Load multiple contexts
161
+ */
162
+ async loadMany(sources: ContextSource[], options?: LoadOptions): Promise<ContextLoadResult> {
163
+ const startTime = Date.now();
164
+ const result: ContextLoadResult = {
165
+ loaded: [],
166
+ failed: [],
167
+ duration: 0,
168
+ };
169
+
170
+ // Track which entries were loaded from cache vs fetched
171
+ const cacheStatuses = new Map<string, boolean>();
172
+
173
+ // Check cache status for all keys first
174
+ for (const source of sources) {
175
+ const status = await this.cacheManager.getCache().getStatus(source.key);
176
+ cacheStatuses.set(source.key, status === 'valid');
177
+ }
178
+
179
+ // Process in chunks for concurrency control
180
+ const chunks = this.chunkArray(sources, this.concurrency);
181
+
182
+ let completed = 0;
183
+ for (const chunk of chunks) {
184
+ const promises = chunk.map(async (source) => {
185
+ try {
186
+ const itemCacheOptions: CacheOptions & FetchOptions = {
187
+ ...options,
188
+ ttl: options?.ttl ?? this.defaultTtl,
189
+ };
190
+ if (source.tags) {
191
+ itemCacheOptions.tags = source.tags;
192
+ }
193
+ const entry = await this.cacheManager.getWithFallback<string>(
194
+ source.key,
195
+ source.url,
196
+ itemCacheOptions
197
+ );
198
+
199
+ result.loaded.push({
200
+ key: source.key,
201
+ content: entry.content,
202
+ fromCache: cacheStatuses.get(source.key) ?? false,
203
+ metadata: entry.metadata,
204
+ });
205
+ } catch (error) {
206
+ const message = error instanceof Error ? error.message : String(error);
207
+ result.failed.push({
208
+ key: source.key,
209
+ error: message,
210
+ required: source.required ?? false,
211
+ });
212
+
213
+ if (source.required && this.failOnRequired && !options?.continueOnError) {
214
+ throw new Error(`Failed to load required context "${source.key}": ${message}`);
215
+ }
216
+ }
217
+ });
218
+
219
+ await Promise.all(promises);
220
+
221
+ completed += chunk.length;
222
+ if (options?.onProgress) {
223
+ const currentKey = chunk[chunk.length - 1]?.key ?? '';
224
+ options.onProgress(completed, sources.length, currentKey);
225
+ }
226
+ }
227
+
228
+ result.duration = Date.now() - startTime;
229
+
230
+ // Check for required failures
231
+ if (this.failOnRequired && !options?.continueOnError) {
232
+ const requiredFailures = result.failed.filter((f) => f.required);
233
+ if (requiredFailures.length > 0) {
234
+ throw new Error(
235
+ `Failed to load ${requiredFailures.length} required context(s): ${requiredFailures.map((f) => f.key).join(', ')}`
236
+ );
237
+ }
238
+ }
239
+
240
+ return result;
241
+ }
242
+
243
+ /**
244
+ * Load contexts by tag
245
+ */
246
+ async loadByTag(tag: string, _options?: LoadOptions): Promise<ContextLoadResult> {
247
+ const startTime = Date.now();
248
+ const result: ContextLoadResult = {
249
+ loaded: [],
250
+ failed: [],
251
+ duration: 0,
252
+ };
253
+
254
+ // Get all cached entries with this tag
255
+ const entries = await this.cacheManager.getCache().list({ tag });
256
+
257
+ for (const entry of entries) {
258
+ try {
259
+ const cached = await this.cacheManager.getCache().get<string>(entry.key);
260
+ if (cached) {
261
+ result.loaded.push({
262
+ key: entry.key,
263
+ content: cached.content,
264
+ fromCache: true,
265
+ metadata: cached.metadata,
266
+ });
267
+ }
268
+ } catch (error) {
269
+ result.failed.push({
270
+ key: entry.key,
271
+ error: error instanceof Error ? error.message : String(error),
272
+ required: false,
273
+ });
274
+ }
275
+ }
276
+
277
+ result.duration = Date.now() - startTime;
278
+ return result;
279
+ }
280
+
281
+ /**
282
+ * Refresh all contexts (sync from remote)
283
+ */
284
+ async refresh(sources: ContextSource[], options?: LoadOptions): Promise<ContextLoadResult> {
285
+ return this.loadMany(sources, {
286
+ ...options,
287
+ forceRefresh: true,
288
+ });
289
+ }
290
+
291
+ /**
292
+ * Check if all required contexts are available (cached or fetchable)
293
+ */
294
+ async checkAvailability(
295
+ sources: ContextSource[]
296
+ ): Promise<{ available: string[]; missing: string[]; errors: string[] }> {
297
+ const available: string[] = [];
298
+ const missing: string[] = [];
299
+ const errors: string[] = [];
300
+
301
+ for (const source of sources) {
302
+ try {
303
+ // Check if cached
304
+ const hasCached = await this.cacheManager.getCache().has(source.key);
305
+ if (hasCached) {
306
+ available.push(source.key);
307
+ continue;
308
+ }
309
+
310
+ // Check if fetcher is available
311
+ const url = new URL(source.url);
312
+ const source_type = this.getSourceFromHostname(url.hostname);
313
+ if (this.cacheManager.hasFetcher(source_type)) {
314
+ missing.push(source.key); // Can be fetched but not cached
315
+ } else {
316
+ errors.push(`${source.key}: No fetcher for ${source_type}`);
317
+ }
318
+ } catch (error) {
319
+ errors.push(`${source.key}: ${error instanceof Error ? error.message : String(error)}`);
320
+ }
321
+ }
322
+
323
+ return { available, missing, errors };
324
+ }
325
+
326
+ /**
327
+ * Get the cache manager
328
+ */
329
+ getCacheManager(): CacheManager {
330
+ return this.cacheManager;
331
+ }
332
+
333
+ // Private helpers
334
+
335
+ private getSourceFromHostname(hostname: string): string {
336
+ const lower = hostname.toLowerCase();
337
+ if (lower.includes('confluence') || lower.includes('atlassian.net')) return 'confluence';
338
+ if (lower.includes('github.com') || lower.includes('github')) return 'github';
339
+ if (lower.includes('notion.so') || lower.includes('notion')) return 'notion';
340
+ return 'custom';
341
+ }
342
+
343
+ private chunkArray<T>(array: T[], size: number): T[][] {
344
+ const chunks: T[][] = [];
345
+ for (let i = 0; i < array.length; i += size) {
346
+ chunks.push(array.slice(i, i + size));
347
+ }
348
+ return chunks;
349
+ }
350
+ }
351
+
352
+ /**
353
+ * Create a context loader
354
+ */
355
+ export function createContextLoader(options: ContextLoaderOptions): ContextLoader {
356
+ return new ContextLoader(options);
357
+ }
@@ -0,0 +1,13 @@
1
+ import { VERSION } from './index.js';
2
+
3
+ describe('CoreAI', () => {
4
+ describe('VERSION', () => {
5
+ it('should export the correct version', () => {
6
+ expect(VERSION).toBe('0.1.0');
7
+ });
8
+
9
+ it('should be a string', () => {
10
+ expect(typeof VERSION).toBe('string');
11
+ });
12
+ });
13
+ });
package/src/index.ts ADDED
@@ -0,0 +1,244 @@
1
+ /**
2
+ * CoreAI - A configurable, team-ready AI agent orchestration platform.
3
+ *
4
+ * This is the main library export for programmatic usage.
5
+ */
6
+
7
+ export const VERSION = '0.1.0';
8
+
9
+ // Configuration
10
+ export {
11
+ loadConfig,
12
+ loadConfigFromFile,
13
+ findConfigFile,
14
+ configExists,
15
+ getConfigPath,
16
+ ConfigError,
17
+ } from './config/index.js';
18
+
19
+ export type {
20
+ CoreAIConfig,
21
+ ResolvedCoreAIConfig,
22
+ ProjectConfig,
23
+ TeamConfig,
24
+ IntegrationsConfig,
25
+ QualityGatesConfig,
26
+ TechStackConfig,
27
+ CacheConfig,
28
+ ConfigErrorCode,
29
+ } from './config/index.js';
30
+
31
+ // Agents
32
+ export {
33
+ loadAgentFromFile,
34
+ loadAgentsFromDirectory,
35
+ parseAgentYaml,
36
+ validateAgentDefinition,
37
+ getRoleFromFilename,
38
+ AgentError,
39
+ resolveString,
40
+ resolveObject,
41
+ resolveAgentDefinition,
42
+ hasVariables,
43
+ extractVariables,
44
+ ResolutionError,
45
+ generateAgentMarkdown,
46
+ compileAgent,
47
+ compileAgents,
48
+ loadAllAgents,
49
+ filterAgentsByTeam,
50
+ getCoreAgentsDir,
51
+ } from './agents/index.js';
52
+
53
+ export type {
54
+ AgentDefinition,
55
+ ResolvedAgentDefinition,
56
+ AgentType,
57
+ WorkflowType,
58
+ AgentMetadata,
59
+ AgentSource,
60
+ AgentErrorCode,
61
+ ResolutionContext,
62
+ ResolutionOptions,
63
+ CompileOptions,
64
+ CompileResult,
65
+ } from './agents/index.js';
66
+
67
+ // Adapters
68
+ export {
69
+ AdapterFactory,
70
+ createAdapterFactory,
71
+ createAdapterInfo,
72
+ AdapterError,
73
+ } from './adapters/index.js';
74
+
75
+ export type {
76
+ AdapterType,
77
+ AdapterImplementation,
78
+ AdapterInfo,
79
+ AdapterFactoryOptions,
80
+ AdapterErrorCode,
81
+ BaseAdapter,
82
+ IssueTrackerAdapter,
83
+ GitProviderAdapter,
84
+ DocumentationProviderAdapter,
85
+ StateProviderAdapter,
86
+ Adapter,
87
+ Issue,
88
+ IssueQuery,
89
+ IssueStatus,
90
+ CreateIssueData,
91
+ UpdateIssueData,
92
+ PullRequest,
93
+ PullRequestQuery,
94
+ PullRequestStatus,
95
+ CreatePullRequestData,
96
+ Review,
97
+ CreateReviewData,
98
+ ReviewDecision,
99
+ ReviewComment,
100
+ DocumentationPage,
101
+ DocumentationQuery,
102
+ StateEntry,
103
+ StateOptions,
104
+ } from './adapters/index.js';
105
+
106
+ // Cache
107
+ export {
108
+ CacheError,
109
+ CACHE_PATHS,
110
+ DEFAULT_CACHE_CONFIG,
111
+ FileCacheProvider,
112
+ createFileCacheProvider,
113
+ FileCacheManager,
114
+ createCacheManager,
115
+ } from './cache/index.js';
116
+
117
+ export type {
118
+ CacheSource,
119
+ CacheStatus,
120
+ CacheMetadata,
121
+ CacheEntry,
122
+ CacheOptions,
123
+ CacheListOptions,
124
+ CacheStats,
125
+ SyncResult,
126
+ CacheErrorCode,
127
+ CacheProvider,
128
+ RemoteFetcher,
129
+ FetchOptions,
130
+ CacheManager,
131
+ SyncOptions,
132
+ FileCacheProviderOptions,
133
+ CacheManagerOptions,
134
+ } from './cache/index.js';
135
+
136
+ // Context
137
+ export { ContextLoader, createContextLoader } from './context/index.js';
138
+
139
+ export type {
140
+ ContextSource,
141
+ ContextLoadResult,
142
+ ContextLoaderOptions,
143
+ LoadOptions,
144
+ } from './context/index.js';
145
+
146
+ // Commands
147
+ export {
148
+ CommandRegistry,
149
+ createCommandRegistry,
150
+ getGlobalRegistry,
151
+ resetGlobalRegistry,
152
+ createCommandContext,
153
+ cleanupContext,
154
+ withContext,
155
+ loadCommandFromFile,
156
+ loadCommandsFromDirectory,
157
+ loadCoreAICommands,
158
+ loadAllCommands,
159
+ runCommand,
160
+ executeWithDegradation,
161
+ createDegradingHandler,
162
+ StepTracker,
163
+ } from './commands/index.js';
164
+
165
+ export type {
166
+ CommandCategory,
167
+ IntegrationDependency,
168
+ CommandMetadata,
169
+ CommandContext,
170
+ BaseCommandOptions,
171
+ CommandResult,
172
+ CommandHandler,
173
+ CommandDefinition,
174
+ CommandOptionDefinition,
175
+ CommandArgumentDefinition,
176
+ MarkdownCommand,
177
+ RegistryEntry,
178
+ CommandLoaderOptions,
179
+ CommandLoadResult,
180
+ CreateContextOptions,
181
+ RunCommandOptions,
182
+ } from './commands/index.js';
183
+
184
+ // Skills
185
+ export {
186
+ extractVariables as extractSkillVariables,
187
+ substituteVariables,
188
+ checkDependencies,
189
+ loadCustomTemplates,
190
+ generateSkills,
191
+ formatGenerateResult,
192
+ builtInSkills,
193
+ } from './skills/index.js';
194
+
195
+ export type {
196
+ SkillTemplate,
197
+ SkillVariables,
198
+ SkillCategory,
199
+ SkillDependency,
200
+ GenerateSkillsOptions,
201
+ GenerateSkillsResult,
202
+ GeneratedSkill,
203
+ SkillError,
204
+ } from './skills/index.js';
205
+
206
+ // KnowledgeLibrary
207
+ export {
208
+ DEFAULT_KNOWLEDGE_LIBRARY_PATH,
209
+ STANDARD_FILES,
210
+ AGENT_DIRECTORIES,
211
+ CONTROL_FILES,
212
+ getAgentDirectories,
213
+ initKnowledgeLibrary,
214
+ initAgentKnowledgeLibrary,
215
+ agentKnowledgeLibraryExists,
216
+ getAgentKnowledgeState,
217
+ generateMessageFilename,
218
+ readInboxMessages,
219
+ writeInboxMessage,
220
+ markMessageProcessed,
221
+ getKnowledgeLibraryState,
222
+ updateAgentContext,
223
+ formatKnowledgeLibraryState,
224
+ formatAgentKnowledgeState,
225
+ } from './knowledge-library/index.js';
226
+
227
+ export type {
228
+ MessageType,
229
+ MessagePriority,
230
+ MessageMetadata,
231
+ Message,
232
+ AgentContext,
233
+ Objective,
234
+ Decision,
235
+ Dependency,
236
+ AgentControl,
237
+ AgentDirectories,
238
+ AgentKnowledgeState,
239
+ InitKnowledgeLibraryOptions,
240
+ InitKnowledgeLibraryResult,
241
+ ReadMessagesOptions,
242
+ WriteMessageOptions,
243
+ KnowledgeLibraryState,
244
+ } from './knowledge-library/index.js';
@@ -0,0 +1,44 @@
1
+ /**
2
+ * KnowledgeLibrary Module
3
+ *
4
+ * Local agent state management with inbox/outbox directories.
5
+ */
6
+
7
+ export {
8
+ DEFAULT_KNOWLEDGE_LIBRARY_PATH,
9
+ STANDARD_FILES,
10
+ AGENT_DIRECTORIES,
11
+ CONTROL_FILES,
12
+ getAgentDirectories,
13
+ initKnowledgeLibrary,
14
+ initAgentKnowledgeLibrary,
15
+ agentKnowledgeLibraryExists,
16
+ getAgentKnowledgeState,
17
+ generateMessageFilename,
18
+ readInboxMessages,
19
+ writeInboxMessage,
20
+ markMessageProcessed,
21
+ getKnowledgeLibraryState,
22
+ updateAgentContext,
23
+ formatKnowledgeLibraryState,
24
+ formatAgentKnowledgeState,
25
+ } from './manager.js';
26
+
27
+ export type {
28
+ MessageType,
29
+ MessagePriority,
30
+ MessageMetadata,
31
+ Message,
32
+ AgentContext,
33
+ Objective,
34
+ Decision,
35
+ Dependency,
36
+ AgentControl,
37
+ AgentDirectories,
38
+ AgentKnowledgeState,
39
+ InitKnowledgeLibraryOptions,
40
+ InitKnowledgeLibraryResult,
41
+ ReadMessagesOptions,
42
+ WriteMessageOptions,
43
+ KnowledgeLibraryState,
44
+ } from './types.js';