agcel 1.0.4 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/README.md +40 -47
  2. package/dist/cli/commands/create.d.ts +4 -0
  3. package/dist/cli/commands/create.d.ts.map +1 -0
  4. package/dist/cli/commands/create.js +68 -0
  5. package/dist/cli/commands/create.js.map +1 -0
  6. package/dist/cli/commands/init.d.ts +3 -0
  7. package/dist/cli/commands/init.d.ts.map +1 -0
  8. package/dist/cli/commands/init.js +98 -0
  9. package/dist/cli/commands/init.js.map +1 -0
  10. package/dist/cli/commands/install.d.ts +3 -0
  11. package/dist/cli/commands/install.d.ts.map +1 -0
  12. package/dist/cli/commands/install.helpers.d.ts +15 -0
  13. package/dist/cli/commands/install.helpers.d.ts.map +1 -0
  14. package/dist/cli/commands/install.helpers.js +47 -0
  15. package/dist/cli/commands/install.helpers.js.map +1 -0
  16. package/dist/cli/commands/install.helpers.test.d.ts +2 -0
  17. package/dist/cli/commands/install.helpers.test.d.ts.map +1 -0
  18. package/dist/cli/commands/install.helpers.test.js +18 -0
  19. package/dist/cli/commands/install.helpers.test.js.map +1 -0
  20. package/dist/cli/commands/install.js +74 -0
  21. package/dist/cli/commands/install.js.map +1 -0
  22. package/dist/cli/commands/pulse.d.ts +4 -0
  23. package/dist/cli/commands/pulse.d.ts.map +1 -0
  24. package/dist/cli/commands/pulse.js +48 -0
  25. package/dist/cli/commands/pulse.js.map +1 -0
  26. package/dist/cli/commands/pulse.test.d.ts +2 -0
  27. package/dist/cli/commands/pulse.test.d.ts.map +1 -0
  28. package/dist/cli/commands/pulse.test.js +19 -0
  29. package/dist/cli/commands/pulse.test.js.map +1 -0
  30. package/dist/cli/commands/suggest.d.ts +3 -0
  31. package/dist/cli/commands/suggest.d.ts.map +1 -0
  32. package/dist/cli/commands/suggest.js +32 -0
  33. package/dist/cli/commands/suggest.js.map +1 -0
  34. package/dist/cli/index.d.ts +3 -0
  35. package/dist/cli/index.d.ts.map +1 -0
  36. package/dist/cli/index.js +20 -0
  37. package/dist/cli/index.js.map +1 -0
  38. package/dist/cli/research-hints.d.ts +5 -0
  39. package/dist/cli/research-hints.d.ts.map +1 -0
  40. package/dist/cli/research-hints.js +109 -0
  41. package/dist/cli/research-hints.js.map +1 -0
  42. package/dist/cli/research-hints.test.d.ts +2 -0
  43. package/dist/cli/research-hints.test.d.ts.map +1 -0
  44. package/dist/cli/research-hints.test.js +50 -0
  45. package/dist/cli/research-hints.test.js.map +1 -0
  46. package/dist/core/agcel-config.d.ts +27 -0
  47. package/dist/core/agcel-config.d.ts.map +1 -0
  48. package/dist/core/agcel-config.js +4 -0
  49. package/dist/core/agcel-config.js.map +1 -0
  50. package/dist/core/build-rag-engine.d.ts +12 -0
  51. package/dist/core/build-rag-engine.d.ts.map +1 -0
  52. package/dist/core/build-rag-engine.js +24 -0
  53. package/dist/core/build-rag-engine.js.map +1 -0
  54. package/dist/core/build-rag-engine.test.d.ts +2 -0
  55. package/dist/core/build-rag-engine.test.d.ts.map +1 -0
  56. package/dist/core/build-rag-engine.test.js +34 -0
  57. package/dist/core/build-rag-engine.test.js.map +1 -0
  58. package/dist/core/chroma-rag.d.ts +20 -0
  59. package/dist/core/chroma-rag.d.ts.map +1 -0
  60. package/dist/core/chroma-rag.js +108 -0
  61. package/dist/core/chroma-rag.js.map +1 -0
  62. package/dist/core/context-hygiene.d.ts +12 -0
  63. package/dist/core/context-hygiene.d.ts.map +1 -0
  64. package/dist/core/context-hygiene.js +43 -0
  65. package/dist/core/context-hygiene.js.map +1 -0
  66. package/dist/core/context-hygiene.test.d.ts +2 -0
  67. package/dist/core/context-hygiene.test.d.ts.map +1 -0
  68. package/dist/core/context-hygiene.test.js +18 -0
  69. package/dist/core/context-hygiene.test.js.map +1 -0
  70. package/dist/core/context.d.ts +44 -0
  71. package/dist/core/context.d.ts.map +1 -0
  72. package/dist/core/context.js +114 -0
  73. package/dist/core/context.js.map +1 -0
  74. package/dist/core/conversation-routing.d.ts +10 -0
  75. package/dist/core/conversation-routing.d.ts.map +1 -0
  76. package/dist/core/conversation-routing.js +27 -0
  77. package/dist/core/conversation-routing.js.map +1 -0
  78. package/dist/core/conversation-routing.test.d.ts +2 -0
  79. package/dist/core/conversation-routing.test.d.ts.map +1 -0
  80. package/dist/core/conversation-routing.test.js +29 -0
  81. package/dist/core/conversation-routing.test.js.map +1 -0
  82. package/dist/core/guardrails.d.ts +26 -0
  83. package/dist/core/guardrails.d.ts.map +1 -0
  84. package/dist/core/guardrails.js +76 -0
  85. package/dist/core/guardrails.js.map +1 -0
  86. package/dist/core/guardrails.test.d.ts +2 -0
  87. package/dist/core/guardrails.test.d.ts.map +1 -0
  88. package/dist/core/guardrails.test.js +35 -0
  89. package/dist/core/guardrails.test.js.map +1 -0
  90. package/dist/core/intent.d.ts +22 -0
  91. package/dist/core/intent.d.ts.map +1 -0
  92. package/dist/core/intent.js +79 -0
  93. package/dist/core/intent.js.map +1 -0
  94. package/dist/core/intent.test.d.ts +2 -0
  95. package/dist/core/intent.test.d.ts.map +1 -0
  96. package/dist/core/intent.test.js +43 -0
  97. package/dist/core/intent.test.js.map +1 -0
  98. package/dist/core/local-rag.d.ts +17 -0
  99. package/dist/core/local-rag.d.ts.map +1 -0
  100. package/dist/core/local-rag.js +74 -0
  101. package/dist/core/local-rag.js.map +1 -0
  102. package/dist/core/local-rag.test.d.ts +2 -0
  103. package/dist/core/local-rag.test.d.ts.map +1 -0
  104. package/dist/core/local-rag.test.js +47 -0
  105. package/dist/core/local-rag.test.js.map +1 -0
  106. package/dist/core/orchestrator.d.ts +47 -0
  107. package/dist/core/orchestrator.d.ts.map +1 -0
  108. package/dist/core/orchestrator.js +138 -0
  109. package/dist/core/orchestrator.js.map +1 -0
  110. package/dist/core/orchestrator.test.d.ts +2 -0
  111. package/dist/core/orchestrator.test.d.ts.map +1 -0
  112. package/dist/core/orchestrator.test.js +118 -0
  113. package/dist/core/orchestrator.test.js.map +1 -0
  114. package/dist/core/pulse.d.ts +13 -0
  115. package/dist/core/pulse.d.ts.map +1 -0
  116. package/dist/core/pulse.js +29 -0
  117. package/dist/core/pulse.js.map +1 -0
  118. package/dist/core/pulse.test.d.ts +2 -0
  119. package/dist/core/pulse.test.d.ts.map +1 -0
  120. package/dist/core/pulse.test.js +18 -0
  121. package/dist/core/pulse.test.js.map +1 -0
  122. package/dist/core/rag-metadata.d.ts +5 -0
  123. package/dist/core/rag-metadata.d.ts.map +1 -0
  124. package/dist/core/rag-metadata.js +13 -0
  125. package/dist/core/rag-metadata.js.map +1 -0
  126. package/dist/core/rag-metadata.test.d.ts +2 -0
  127. package/dist/core/rag-metadata.test.d.ts.map +1 -0
  128. package/dist/core/rag-metadata.test.js +12 -0
  129. package/dist/core/rag-metadata.test.js.map +1 -0
  130. package/dist/core/rag-types.d.ts +18 -0
  131. package/dist/core/rag-types.d.ts.map +1 -0
  132. package/dist/core/rag-types.js +2 -0
  133. package/dist/core/rag-types.js.map +1 -0
  134. package/dist/core/read-agcel-config.d.ts +3 -0
  135. package/dist/core/read-agcel-config.d.ts.map +1 -0
  136. package/dist/core/read-agcel-config.js +13 -0
  137. package/dist/core/read-agcel-config.js.map +1 -0
  138. package/dist/core/registry.d.ts +9 -0
  139. package/dist/core/registry.d.ts.map +1 -0
  140. package/dist/core/registry.js +75 -0
  141. package/dist/core/registry.js.map +1 -0
  142. package/dist/core/registry.test.d.ts +2 -0
  143. package/dist/core/registry.test.d.ts.map +1 -0
  144. package/dist/core/registry.test.js +128 -0
  145. package/dist/core/registry.test.js.map +1 -0
  146. package/dist/core/schema.d.ts +51 -0
  147. package/dist/core/schema.d.ts.map +1 -0
  148. package/dist/core/schema.js +31 -0
  149. package/dist/core/schema.js.map +1 -0
  150. package/dist/core/summarizer.d.ts +23 -0
  151. package/dist/core/summarizer.d.ts.map +1 -0
  152. package/dist/core/summarizer.js +66 -0
  153. package/dist/core/summarizer.js.map +1 -0
  154. package/dist/core/text-similarity.d.ts +7 -0
  155. package/dist/core/text-similarity.d.ts.map +1 -0
  156. package/dist/core/text-similarity.js +35 -0
  157. package/dist/core/text-similarity.js.map +1 -0
  158. package/dist/core/text-similarity.test.d.ts +2 -0
  159. package/dist/core/text-similarity.test.d.ts.map +1 -0
  160. package/dist/core/text-similarity.test.js +11 -0
  161. package/dist/core/text-similarity.test.js.map +1 -0
  162. package/dist/docs-site.test.d.ts +2 -0
  163. package/dist/docs-site.test.d.ts.map +1 -0
  164. package/dist/docs-site.test.js +19 -0
  165. package/dist/docs-site.test.js.map +1 -0
  166. package/dist/index.d.ts +8 -0
  167. package/dist/index.d.ts.map +1 -0
  168. package/dist/index.js +8 -39
  169. package/dist/index.js.map +1 -0
  170. package/dist/providers/adapter.d.ts +23 -0
  171. package/dist/providers/adapter.d.ts.map +1 -0
  172. package/dist/providers/adapter.js +9 -0
  173. package/dist/providers/adapter.js.map +1 -0
  174. package/dist/providers/chatgpt.d.ts +13 -0
  175. package/dist/providers/chatgpt.d.ts.map +1 -0
  176. package/dist/providers/chatgpt.js +33 -0
  177. package/dist/providers/chatgpt.js.map +1 -0
  178. package/dist/providers/chatgpt.test.d.ts +2 -0
  179. package/dist/providers/chatgpt.test.d.ts.map +1 -0
  180. package/dist/providers/chatgpt.test.js +23 -0
  181. package/dist/providers/chatgpt.test.js.map +1 -0
  182. package/dist/providers/claude.d.ts +13 -0
  183. package/dist/providers/claude.d.ts.map +1 -0
  184. package/dist/providers/claude.js +48 -0
  185. package/dist/providers/claude.js.map +1 -0
  186. package/dist/providers/cursor.d.ts +14 -0
  187. package/dist/providers/cursor.d.ts.map +1 -0
  188. package/dist/providers/cursor.js +47 -0
  189. package/dist/providers/cursor.js.map +1 -0
  190. package/dist/providers/gemini.d.ts +13 -0
  191. package/dist/providers/gemini.d.ts.map +1 -0
  192. package/dist/providers/gemini.js +42 -0
  193. package/dist/providers/gemini.js.map +1 -0
  194. package/dist/providers/index.d.ts +5 -0
  195. package/dist/providers/index.d.ts.map +1 -0
  196. package/dist/providers/index.js +18 -0
  197. package/dist/providers/index.js.map +1 -0
  198. package/dist/server/index.d.ts +2 -0
  199. package/dist/server/index.d.ts.map +1 -0
  200. package/dist/server/index.js +288 -154
  201. package/dist/server/index.js.map +1 -0
  202. package/package.json +62 -52
  203. package/.agent/workflows/api-gen.md +0 -63
  204. package/.agent/workflows/architect.md +0 -44
  205. package/.agent/workflows/brainstorm.md +0 -227
  206. package/.agent/workflows/build.md +0 -38
  207. package/.agent/workflows/changelog.md +0 -55
  208. package/.agent/workflows/checkpoint.md +0 -142
  209. package/.agent/workflows/commit.md +0 -227
  210. package/.agent/workflows/debug.md +0 -61
  211. package/.agent/workflows/deploy.md +0 -80
  212. package/.agent/workflows/doc.md +0 -251
  213. package/.agent/workflows/execute-plan.md +0 -229
  214. package/.agent/workflows/feature.md +0 -259
  215. package/.agent/workflows/fix.md +0 -327
  216. package/.agent/workflows/help.md +0 -67
  217. package/.agent/workflows/index.md +0 -152
  218. package/.agent/workflows/load.md +0 -116
  219. package/.agent/workflows/mode.md +0 -174
  220. package/.agent/workflows/optimize.md +0 -57
  221. package/.agent/workflows/plan.md +0 -341
  222. package/.agent/workflows/pr.md +0 -78
  223. package/.agent/workflows/product-plan.md +0 -36
  224. package/.agent/workflows/production-deploy.md +0 -39
  225. package/.agent/workflows/refactor.md +0 -67
  226. package/.agent/workflows/research.md +0 -120
  227. package/.agent/workflows/review.md +0 -348
  228. package/.agent/workflows/security-scan.md +0 -60
  229. package/.agent/workflows/ship.md +0 -225
  230. package/.agent/workflows/spawn.md +0 -181
  231. package/.agent/workflows/status.md +0 -63
  232. package/.agent/workflows/tdd.md +0 -143
  233. package/.agent/workflows/test.md +0 -344
  234. package/.agent/workflows/verify.md +0 -35
  235. package/LICENSE +0 -21
  236. package/dist/commands/init.js +0 -147
  237. package/dist/commands/list.js +0 -43
  238. package/dist/commands/uninstall.js +0 -70
  239. package/dist/utils/index.js +0 -28
  240. package/skills/api-security-best-practices/SKILL.md +0 -291
  241. package/skills/api-security-best-practices/references/examples.md +0 -617
  242. package/skills/architecture/SKILL.md +0 -59
  243. package/skills/architecture/context-discovery.md +0 -43
  244. package/skills/architecture/examples.md +0 -94
  245. package/skills/architecture/pattern-selection.md +0 -68
  246. package/skills/architecture/patterns-reference.md +0 -50
  247. package/skills/architecture/trade-off-analysis.md +0 -77
  248. package/skills/aws-serverless/SKILL.md +0 -327
  249. package/skills/brainstorming/SKILL.md +0 -234
  250. package/skills/c4-context/SKILL.md +0 -154
  251. package/skills/ci-cd-engineer/SKILL.md +0 -50
  252. package/skills/code-auditing/SKILL.md +0 -55
  253. package/skills/copywriting/SKILL.md +0 -248
  254. package/skills/database-engineer/SKILL.md +0 -47
  255. package/skills/doc-coauthoring/SKILL.md +0 -379
  256. package/skills/docker-expert/SKILL.md +0 -412
  257. package/skills/langgraph/SKILL.md +0 -291
  258. package/skills/postgresql/SKILL.md +0 -73
  259. package/skills/pricing-strategy/SKILL.md +0 -360
  260. package/skills/product-manager/SKILL.md +0 -57
  261. package/skills/prompt-engineer/README.md +0 -659
  262. package/skills/prompt-engineer/SKILL.md +0 -256
  263. package/skills/python-patterns/SKILL.md +0 -445
  264. package/skills/qa-engineer/SKILL.md +0 -42
  265. package/skills/rag-engineer/SKILL.md +0 -94
  266. package/skills/react-patterns/SKILL.md +0 -202
  267. package/skills/secure-refactoring/SKILL.md +0 -54
  268. package/skills/security-documentation/SKILL.md +0 -53
  269. package/skills/senior-architect/SKILL.md +0 -213
  270. package/skills/senior-architect/references/architecture_patterns.md +0 -103
  271. package/skills/senior-architect/references/system_design_workflows.md +0 -103
  272. package/skills/senior-architect/references/tech_decision_guide.md +0 -103
  273. package/skills/senior-architect/scripts/architecture_diagram_generator.py +0 -114
  274. package/skills/senior-architect/scripts/dependency_analyzer.py +0 -114
  275. package/skills/senior-architect/scripts/project_architect.py +0 -114
  276. package/skills/seo-audit/SKILL.md +0 -491
  277. package/skills/sql-injection-testing/SKILL.md +0 -452
  278. package/skills/test-driven-development/SKILL.md +0 -375
  279. package/skills/test-driven-development/testing-anti-patterns.md +0 -299
  280. package/skills/test-fixing/SKILL.md +0 -123
  281. package/skills/testing-patterns/SKILL.md +0 -263
  282. package/skills/typescript-expert/SKILL.md +0 -202
  283. package/skills/typescript-expert/references/advanced-topics.md +0 -252
  284. package/skills/typescript-expert/references/tsconfig-strict.json +0 -92
  285. package/skills/typescript-expert/references/typescript-cheatsheet.md +0 -383
  286. package/skills/typescript-expert/references/utility-types.ts +0 -335
  287. package/skills/typescript-expert/scripts/ts_diagnostic.py +0 -203
  288. package/skills/ui-ux-designer/SKILL.md +0 -46
  289. package/skills/vercel-deployment/SKILL.md +0 -83
  290. package/skills/vulnerability-scanner/SKILL.md +0 -280
  291. package/skills/vulnerability-scanner/checklists.md +0 -121
  292. package/skills/vulnerability-scanner/scripts/security_scan.py +0 -458
  293. package/skills/writing-plans/SKILL.md +0 -120
@@ -0,0 +1,12 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { recencyScoreMultiplier } from './rag-metadata.js';
3
+ describe('recencyScoreMultiplier', () => {
4
+ it('Given recent updatedAt when scoring then multiplier is above one', () => {
5
+ const recent = new Date().toISOString();
6
+ expect(recencyScoreMultiplier(recent)).toBeGreaterThan(1);
7
+ });
8
+ it('Given invalid date when scoring then multiplier is one', () => {
9
+ expect(recencyScoreMultiplier('not-a-date')).toBe(1);
10
+ });
11
+ });
12
+ //# sourceMappingURL=rag-metadata.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rag-metadata.test.js","sourceRoot":"","sources":["../../src/core/rag-metadata.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ export interface RagSearchResult {
2
+ id: string;
3
+ content: string;
4
+ score: number;
5
+ /** Present when the backend returns document metadata. */
6
+ metadata?: Record<string, string>;
7
+ }
8
+ /**
9
+ * Pluggable retrieval backend used by {@link ContextManager}.
10
+ */
11
+ export interface IRagEngine {
12
+ initialize(): Promise<void>;
13
+ addDocument(id: string, content: string, metadata?: Record<string, string>): Promise<void>;
14
+ query(queryText: string, topK?: number, metadataFilter?: Record<string, string>): Promise<RagSearchResult[]>;
15
+ removeDocument(id: string): Promise<void>;
16
+ getDocumentCount(): Promise<number>;
17
+ }
18
+ //# sourceMappingURL=rag-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rag-types.d.ts","sourceRoot":"","sources":["../../src/core/rag-types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3F,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAC9B,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACrC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rag-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rag-types.js","sourceRoot":"","sources":["../../src/core/rag-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { AgcelConfig } from './agcel-config.js';
2
+ export declare function readAgcelConfig(basePath: string): Promise<AgcelConfig>;
3
+ //# sourceMappingURL=read-agcel-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-agcel-config.d.ts","sourceRoot":"","sources":["../../src/core/read-agcel-config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAQ5E"}
@@ -0,0 +1,13 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import * as path from 'node:path';
3
+ export async function readAgcelConfig(basePath) {
4
+ try {
5
+ const configPath = path.join(basePath, '.agcel', 'config.json');
6
+ const raw = await fs.readFile(configPath, 'utf-8');
7
+ return JSON.parse(raw);
8
+ }
9
+ catch {
10
+ return {};
11
+ }
12
+ }
13
+ //# sourceMappingURL=read-agcel-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-agcel-config.js","sourceRoot":"","sources":["../../src/core/read-agcel-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB;IACpD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Agent, Skill } from './schema.js';
2
+ export declare class Registry {
3
+ private basePath;
4
+ constructor(basePath?: string);
5
+ loadAgents(): Promise<Agent[]>;
6
+ loadSkills(): Promise<Skill[]>;
7
+ private loadFiles;
8
+ }
9
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAqBhD,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,CAAC,EAAE,MAAM;IAIvB,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAK9B,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAKtB,SAAS;CAoCxB"}
@@ -0,0 +1,75 @@
1
+ import * as fs from 'fs/promises';
2
+ import * as path from 'path';
3
+ import { parse as parseYaml } from 'yaml';
4
+ import { AgentSchema, SkillSchema } from './schema.js';
5
+ /**
6
+ * Extract YAML frontmatter from a Markdown file.
7
+ * Expects: ---\n<yaml>\n---\n<body>
8
+ * Returns the parsed YAML object with `systemPrompt` set to the markdown body.
9
+ */
10
+ function parseMarkdownFrontmatter(content) {
11
+ const match = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
12
+ if (!match)
13
+ return null;
14
+ const frontmatter = match[1];
15
+ const body = match[2].trim();
16
+ const data = parseYaml(frontmatter);
17
+ if (body) {
18
+ data['systemPrompt'] = body;
19
+ }
20
+ return data;
21
+ }
22
+ const SUPPORTED_EXTENSIONS = ['.json', '.yaml', '.yml', '.md'];
23
+ export class Registry {
24
+ basePath;
25
+ constructor(basePath) {
26
+ this.basePath = basePath || path.join(process.cwd(), '.agcel', 'registry');
27
+ }
28
+ async loadAgents() {
29
+ const agentsPath = path.join(this.basePath, 'agents');
30
+ return this.loadFiles(agentsPath, AgentSchema);
31
+ }
32
+ async loadSkills() {
33
+ const skillsPath = path.join(this.basePath, 'skills');
34
+ return this.loadFiles(skillsPath, SkillSchema);
35
+ }
36
+ async loadFiles(dirPath, schema) {
37
+ try {
38
+ const files = await fs.readdir(dirPath);
39
+ const results = [];
40
+ for (const file of files) {
41
+ const ext = path.extname(file).toLowerCase();
42
+ if (!SUPPORTED_EXTENSIONS.includes(ext))
43
+ continue;
44
+ const content = await fs.readFile(path.join(dirPath, file), 'utf-8');
45
+ let parsed;
46
+ if (ext === '.json') {
47
+ parsed = JSON.parse(content);
48
+ }
49
+ else if (ext === '.yaml' || ext === '.yml') {
50
+ parsed = parseYaml(content);
51
+ }
52
+ else if (ext === '.md') {
53
+ parsed = parseMarkdownFrontmatter(content);
54
+ if (!parsed)
55
+ continue; // Skip markdown without valid frontmatter
56
+ }
57
+ try {
58
+ const validated = schema.parse(parsed);
59
+ results.push(validated);
60
+ }
61
+ catch {
62
+ // Skip files that don't match the schema
63
+ }
64
+ }
65
+ return results;
66
+ }
67
+ catch (e) {
68
+ if (e.code === 'ENOENT') {
69
+ return [];
70
+ }
71
+ throw e;
72
+ }
73
+ }
74
+ }
75
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=registry.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.test.d.ts","sourceRoot":"","sources":["../../src/core/registry.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,128 @@
1
+ import * as path from 'node:path';
2
+ import { describe, expect, it } from 'vitest';
3
+ import { Registry } from './registry.js';
4
+ describe('Registry', () => {
5
+ it('Given repo sample registry when loading skills then python testing debugging exist', async () => {
6
+ const root = path.join(process.cwd(), '.agcel', 'registry');
7
+ const registry = new Registry(root);
8
+ const skills = await registry.loadSkills();
9
+ const names = skills.map((s) => s.name);
10
+ expect(names).toEqual(expect.arrayContaining([
11
+ 'python',
12
+ 'testing',
13
+ 'debugging',
14
+ 'react-skill',
15
+ 'product-discovery',
16
+ 'requirements-clarity',
17
+ 'backlog-roadmap',
18
+ 'ux-product-design',
19
+ 'design-systems',
20
+ 'accessibility-design',
21
+ 'web-ui-patterns',
22
+ 'mobile-platform-design',
23
+ 'flutter',
24
+ 'java',
25
+ 'nodejs-typescript',
26
+ 'api-security',
27
+ 'observability',
28
+ 'technical-writing',
29
+ 'system-architecture'
30
+ ]));
31
+ });
32
+ it('Given repo sample registry when loading agents then backend-developer resolves with multi-runtime skills', async () => {
33
+ const root = path.join(process.cwd(), '.agcel', 'registry');
34
+ const registry = new Registry(root);
35
+ const agents = await registry.loadAgents();
36
+ const dev = agents.find((a) => a.name === 'backend-developer');
37
+ expect(dev).toBeDefined();
38
+ expect(dev?.skills).toEqual(expect.arrayContaining(['python', 'java', 'nodejs-typescript', 'testing', 'debugging']));
39
+ expect(dev?.guardrails?.some((g) => g.id === 'backend-dev-soft-certainty')).toBe(true);
40
+ });
41
+ it('Given repo sample registry when loading agents then product-owner resolves with PM skills', async () => {
42
+ const root = path.join(process.cwd(), '.agcel', 'registry');
43
+ const registry = new Registry(root);
44
+ const agents = await registry.loadAgents();
45
+ const po = agents.find((a) => a.name === 'product-owner');
46
+ expect(po).toBeDefined();
47
+ expect(po?.skills).toEqual(expect.arrayContaining(['product-discovery', 'requirements-clarity', 'backlog-roadmap']));
48
+ expect(po?.guardrails?.some((g) => g.id === 'po-soft-certainty')).toBe(true);
49
+ });
50
+ it('Given repo sample registry when loading agents then product-designer resolves with full design skill stack', async () => {
51
+ const root = path.join(process.cwd(), '.agcel', 'registry');
52
+ const registry = new Registry(root);
53
+ const agents = await registry.loadAgents();
54
+ const designer = agents.find((a) => a.name === 'product-designer');
55
+ expect(designer).toBeDefined();
56
+ expect(designer?.skills).toEqual(expect.arrayContaining([
57
+ 'ux-product-design',
58
+ 'design-systems',
59
+ 'accessibility-design',
60
+ 'web-ui-patterns',
61
+ 'mobile-platform-design'
62
+ ]));
63
+ expect(designer?.guardrails?.some((g) => g.id === 'product-design-soft-certainty')).toBe(true);
64
+ });
65
+ it('Given repo sample registry when loading agents then react-frontend-developer resolves with React stack', async () => {
66
+ const root = path.join(process.cwd(), '.agcel', 'registry');
67
+ const registry = new Registry(root);
68
+ const agents = await registry.loadAgents();
69
+ const fe = agents.find((a) => a.name === 'react-frontend-developer');
70
+ expect(fe).toBeDefined();
71
+ expect(fe?.skills).toEqual(expect.arrayContaining([
72
+ 'react-skill',
73
+ 'testing',
74
+ 'debugging',
75
+ 'accessibility-design',
76
+ 'web-ui-patterns'
77
+ ]));
78
+ expect(fe?.guardrails?.some((g) => g.id === 'react-fe-soft-certainty')).toBe(true);
79
+ });
80
+ it('Given repo sample registry when loading agents then flutter-developer resolves with Flutter stack', async () => {
81
+ const root = path.join(process.cwd(), '.agcel', 'registry');
82
+ const registry = new Registry(root);
83
+ const agents = await registry.loadAgents();
84
+ const flutter = agents.find((a) => a.name === 'flutter-developer');
85
+ expect(flutter).toBeDefined();
86
+ expect(flutter?.skills).toEqual(expect.arrayContaining([
87
+ 'flutter',
88
+ 'testing',
89
+ 'debugging',
90
+ 'accessibility-design',
91
+ 'mobile-platform-design'
92
+ ]));
93
+ expect(flutter?.guardrails?.some((g) => g.id === 'flutter-dev-soft-certainty')).toBe(true);
94
+ });
95
+ it('Given repo sample registry when loading agents then security-engineer uses api-security stack', async () => {
96
+ const root = path.join(process.cwd(), '.agcel', 'registry');
97
+ const registry = new Registry(root);
98
+ const agents = await registry.loadAgents();
99
+ const sec = agents.find((a) => a.name === 'security-engineer');
100
+ expect(sec?.skills).toEqual(expect.arrayContaining(['api-security', 'testing', 'debugging']));
101
+ expect(sec?.guardrails?.some((g) => g.id === 'sec-eng-soft-certainty')).toBe(true);
102
+ });
103
+ it('Given repo sample registry when loading agents then sre-engineer uses observability stack', async () => {
104
+ const root = path.join(process.cwd(), '.agcel', 'registry');
105
+ const registry = new Registry(root);
106
+ const agents = await registry.loadAgents();
107
+ const sre = agents.find((a) => a.name === 'sre-engineer');
108
+ expect(sre?.skills).toEqual(expect.arrayContaining(['observability', 'debugging', 'testing']));
109
+ expect(sre?.guardrails?.some((g) => g.id === 'sre-soft-certainty')).toBe(true);
110
+ });
111
+ it('Given repo sample registry when loading agents then technical-writer pairs writing with requirements', async () => {
112
+ const root = path.join(process.cwd(), '.agcel', 'registry');
113
+ const registry = new Registry(root);
114
+ const agents = await registry.loadAgents();
115
+ const tw = agents.find((a) => a.name === 'technical-writer');
116
+ expect(tw?.skills).toEqual(expect.arrayContaining(['technical-writing', 'requirements-clarity']));
117
+ expect(tw?.guardrails?.some((g) => g.id === 'tech-writer-soft-certainty')).toBe(true);
118
+ });
119
+ it('Given repo sample registry when loading agents then solution-architect uses architecture and ADR-oriented writing', async () => {
120
+ const root = path.join(process.cwd(), '.agcel', 'registry');
121
+ const registry = new Registry(root);
122
+ const agents = await registry.loadAgents();
123
+ const sa = agents.find((a) => a.name === 'solution-architect');
124
+ expect(sa?.skills).toEqual(expect.arrayContaining(['system-architecture', 'technical-writing']));
125
+ expect(sa?.guardrails?.some((g) => g.id === 'solution-arch-soft-certainty')).toBe(true);
126
+ });
127
+ });
128
+ //# sourceMappingURL=registry.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../src/core/registry.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { z } from 'zod';
2
+ export declare const GuardrailSchema: z.ZodObject<{
3
+ id: z.ZodString;
4
+ description: z.ZodString;
5
+ severity: z.ZodEnum<{
6
+ error: "error";
7
+ warning: "warning";
8
+ }>;
9
+ pattern: z.ZodOptional<z.ZodString>;
10
+ forbiddenTerms: z.ZodOptional<z.ZodArray<z.ZodString>>;
11
+ maxLength: z.ZodOptional<z.ZodNumber>;
12
+ }, z.core.$strip>;
13
+ export declare const SkillSchema: z.ZodObject<{
14
+ name: z.ZodString;
15
+ description: z.ZodString;
16
+ systemPrompt: z.ZodString;
17
+ tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
18
+ guardrails: z.ZodOptional<z.ZodArray<z.ZodObject<{
19
+ id: z.ZodString;
20
+ description: z.ZodString;
21
+ severity: z.ZodEnum<{
22
+ error: "error";
23
+ warning: "warning";
24
+ }>;
25
+ pattern: z.ZodOptional<z.ZodString>;
26
+ forbiddenTerms: z.ZodOptional<z.ZodArray<z.ZodString>>;
27
+ maxLength: z.ZodOptional<z.ZodNumber>;
28
+ }, z.core.$strip>>>;
29
+ }, z.core.$strip>;
30
+ export declare const AgentSchema: z.ZodObject<{
31
+ name: z.ZodString;
32
+ description: z.ZodString;
33
+ role: z.ZodString;
34
+ skills: z.ZodArray<z.ZodString>;
35
+ fallbackAgent: z.ZodOptional<z.ZodString>;
36
+ guardrails: z.ZodOptional<z.ZodArray<z.ZodObject<{
37
+ id: z.ZodString;
38
+ description: z.ZodString;
39
+ severity: z.ZodEnum<{
40
+ error: "error";
41
+ warning: "warning";
42
+ }>;
43
+ pattern: z.ZodOptional<z.ZodString>;
44
+ forbiddenTerms: z.ZodOptional<z.ZodArray<z.ZodString>>;
45
+ maxLength: z.ZodOptional<z.ZodNumber>;
46
+ }, z.core.$strip>>>;
47
+ }, z.core.$strip>;
48
+ export type Guardrail = z.infer<typeof GuardrailSchema>;
49
+ export type Skill = z.infer<typeof SkillSchema>;
50
+ export type Agent = z.infer<typeof AgentSchema>;
51
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,eAAe;;;;;;;;;;iBAa1B,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;iBAMtB,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;iBAOtB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAChD,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { z } from 'zod';
2
+ export const GuardrailSchema = z.object({
3
+ /** Rule identifier */
4
+ id: z.string(),
5
+ /** Human-readable description */
6
+ description: z.string(),
7
+ /** Severity: 'error' blocks the output, 'warning' flags but passes */
8
+ severity: z.enum(['error', 'warning']),
9
+ /** Regex pattern or keyword to detect violations in agent output */
10
+ pattern: z.string().optional(),
11
+ /** List of forbidden terms/phrases */
12
+ forbiddenTerms: z.array(z.string()).optional(),
13
+ /** Maximum allowed output length (chars) */
14
+ maxLength: z.number().optional()
15
+ });
16
+ export const SkillSchema = z.object({
17
+ name: z.string(),
18
+ description: z.string(),
19
+ systemPrompt: z.string(),
20
+ tools: z.array(z.string()).optional(),
21
+ guardrails: z.array(GuardrailSchema).optional()
22
+ });
23
+ export const AgentSchema = z.object({
24
+ name: z.string(),
25
+ description: z.string(),
26
+ role: z.string(),
27
+ skills: z.array(z.string()),
28
+ fallbackAgent: z.string().optional(),
29
+ guardrails: z.array(GuardrailSchema).optional()
30
+ });
31
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,sBAAsB;IACtB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,iCAAiC;IACjC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,sEAAsE;IACtE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACtC,oEAAoE;IACpE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,sCAAsC;IACtC,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC9C,4CAA4C;IAC5C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACrC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE;CAChD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC3B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE;CAChD,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Summarization Service.
3
+ * Provides context compression by extracting key sentences
4
+ * and trimming content to fit token budgets.
5
+ */
6
+ export declare class SummarizationService {
7
+ private maxTokens;
8
+ constructor(maxTokens?: number);
9
+ /**
10
+ * Summarize a long text by extracting the most important sentences.
11
+ * Uses a basic extractive approach: scores sentences by keyword density.
12
+ */
13
+ summarize(text: string): string;
14
+ /**
15
+ * Check if text exceeds the token budget.
16
+ */
17
+ exceedsBudget(text: string): boolean;
18
+ /**
19
+ * Rough token estimation (1 token ≈ 4 characters for English text).
20
+ */
21
+ estimateTokens(text: string): number;
22
+ }
23
+ //# sourceMappingURL=summarizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarizer.d.ts","sourceRoot":"","sources":["../../src/core/summarizer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,GAAE,MAAa;IAIpC;;;OAGG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IA6C/B;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIpC;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAGrC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Summarization Service.
3
+ * Provides context compression by extracting key sentences
4
+ * and trimming content to fit token budgets.
5
+ */
6
+ export class SummarizationService {
7
+ maxTokens;
8
+ constructor(maxTokens = 4000) {
9
+ this.maxTokens = maxTokens;
10
+ }
11
+ /**
12
+ * Summarize a long text by extracting the most important sentences.
13
+ * Uses a basic extractive approach: scores sentences by keyword density.
14
+ */
15
+ summarize(text) {
16
+ const sentences = text.match(/[^.!?]+[.!?]+/g) || [text];
17
+ if (sentences.length <= 3)
18
+ return text;
19
+ const wordFreq = new Map();
20
+ const words = text.toLowerCase().replace(/[^\w\s]/g, '').split(/\s+/);
21
+ for (const w of words) {
22
+ if (w.length > 2) {
23
+ wordFreq.set(w, (wordFreq.get(w) || 0) + 1);
24
+ }
25
+ }
26
+ const scored = sentences.map((sentence, index) => {
27
+ const sWords = sentence.toLowerCase().replace(/[^\w\s]/g, '').split(/\s+/);
28
+ let score = 0;
29
+ for (const w of sWords) {
30
+ score += wordFreq.get(w) || 0;
31
+ }
32
+ // Boost early sentences (likely more important)
33
+ score *= (1 + 1 / (index + 1));
34
+ return { sentence: sentence.trim(), score };
35
+ });
36
+ scored.sort((a, b) => b.score - a.score);
37
+ const topCount = Math.max(3, Math.ceil(sentences.length * 0.3));
38
+ const selected = scored.slice(0, topCount);
39
+ // Re-sort by original order
40
+ selected.sort((a, b) => {
41
+ const aIdx = sentences.indexOf(a.sentence);
42
+ const bIdx = sentences.indexOf(b.sentence);
43
+ return aIdx - bIdx;
44
+ });
45
+ let summary = selected.map(s => s.sentence).join(' ');
46
+ // Trim to token budget (rough estimate: 1 token ≈ 4 chars)
47
+ const charLimit = this.maxTokens * 4;
48
+ if (summary.length > charLimit) {
49
+ summary = summary.substring(0, charLimit) + '...';
50
+ }
51
+ return summary;
52
+ }
53
+ /**
54
+ * Check if text exceeds the token budget.
55
+ */
56
+ exceedsBudget(text) {
57
+ return this.estimateTokens(text) > this.maxTokens;
58
+ }
59
+ /**
60
+ * Rough token estimation (1 token ≈ 4 characters for English text).
61
+ */
62
+ estimateTokens(text) {
63
+ return Math.ceil(text.length / 4);
64
+ }
65
+ }
66
+ //# sourceMappingURL=summarizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarizer.js","sourceRoot":"","sources":["../../src/core/summarizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Token overlap / cosine similarity for short texts (intent routing, local RAG).
3
+ */
4
+ export declare function tokenizeForSimilarity(text: string): Map<string, number>;
5
+ export declare function cosineSimilarityMaps(a: Map<string, number>, b: Map<string, number>): number;
6
+ export declare function textCosineSimilarity(a: string, b: string): number;
7
+ //# sourceMappingURL=text-similarity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-similarity.d.ts","sourceRoot":"","sources":["../../src/core/text-similarity.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CASvE;AAED,wBAAgB,oBAAoB,CAClC,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACtB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACrB,MAAM,CAmBR;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAKjE"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Token overlap / cosine similarity for short texts (intent routing, local RAG).
3
+ */
4
+ export function tokenizeForSimilarity(text) {
5
+ const terms = new Map();
6
+ const words = text.toLowerCase().replace(/[^\w\s]/g, '').split(/\s+/);
7
+ for (const word of words) {
8
+ if (word.length > 1) {
9
+ terms.set(word, (terms.get(word) || 0) + 1);
10
+ }
11
+ }
12
+ return terms;
13
+ }
14
+ export function cosineSimilarityMaps(a, b) {
15
+ let dotProduct = 0;
16
+ let normA = 0;
17
+ let normB = 0;
18
+ for (const [term, freq] of a) {
19
+ normA += freq * freq;
20
+ const bFreq = b.get(term);
21
+ if (bFreq !== undefined) {
22
+ dotProduct += freq * bFreq;
23
+ }
24
+ }
25
+ for (const [, freq] of b) {
26
+ normB += freq * freq;
27
+ }
28
+ if (normA === 0 || normB === 0)
29
+ return 0;
30
+ return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
31
+ }
32
+ export function textCosineSimilarity(a, b) {
33
+ return cosineSimilarityMaps(tokenizeForSimilarity(a), tokenizeForSimilarity(b));
34
+ }
35
+ //# sourceMappingURL=text-similarity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-similarity.js","sourceRoot":"","sources":["../../src/core/text-similarity.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,CAAsB,EACtB,CAAsB;IAEtB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC;QACrB,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,UAAU,IAAI,IAAI,GAAG,KAAK,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACzC,OAAO,UAAU,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,CAAS,EAAE,CAAS;IACvD,OAAO,oBAAoB,CACzB,qBAAqB,CAAC,CAAC,CAAC,EACxB,qBAAqB,CAAC,CAAC,CAAC,CACzB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=text-similarity.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-similarity.test.d.ts","sourceRoot":"","sources":["../../src/core/text-similarity.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { textCosineSimilarity } from './text-similarity.js';
3
+ describe('textCosineSimilarity', () => {
4
+ it('Given paraphrased phrases when comparing then score is higher than unrelated text', () => {
5
+ const q = 'debug asyncio task cancellation';
6
+ const near = 'fix asyncio cancel scope bug';
7
+ const far = 'design figma dashboard layout';
8
+ expect(textCosineSimilarity(q, near)).toBeGreaterThan(textCosineSimilarity(q, far));
9
+ });
10
+ });
11
+ //# sourceMappingURL=text-similarity.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-similarity.test.js","sourceRoot":"","sources":["../../src/core/text-similarity.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,mFAAmF,EAAE,GAAG,EAAE;QAC3F,MAAM,CAAC,GAAG,iCAAiC,CAAC;QAC5C,MAAM,IAAI,GAAG,8BAA8B,CAAC;QAC5C,MAAM,GAAG,GAAG,+BAA+B,CAAC;QAC5C,MAAM,CAAC,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,eAAe,CACnD,oBAAoB,CAAC,CAAC,EAAE,GAAG,CAAC,CAC7B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=docs-site.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-site.test.d.ts","sourceRoot":"","sources":["../src/docs-site.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { describe, expect, it } from 'vitest';
4
+ describe('AgCEL docs site (Starlight)', () => {
5
+ const docsRoot = path.join(process.cwd(), 'docs');
6
+ it('Given docs package when reading name then it is agcel-docs', () => {
7
+ const pkg = JSON.parse(fs.readFileSync(path.join(docsRoot, 'package.json'), 'utf8'));
8
+ expect(pkg.name).toBe('agcel-docs');
9
+ });
10
+ it('Given astro config when reading title then it identifies AgCEL', () => {
11
+ const cfg = fs.readFileSync(path.join(docsRoot, 'astro.config.mjs'), 'utf8');
12
+ expect(cfg).toContain("title: 'AgCEL'");
13
+ });
14
+ it('Given overview page when reading file then it describes the library', () => {
15
+ const md = fs.readFileSync(path.join(docsRoot, 'src/content/docs/guides/overview.md'), 'utf8');
16
+ expect(md).toContain('Agentic Context Engineering Library');
17
+ });
18
+ });
19
+ //# sourceMappingURL=docs-site.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-site.test.js","sourceRoot":"","sources":["../src/docs-site.test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IAElD,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAElF,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC,CAAC;QAC7E,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,qCAAqC,CAAC,EAC1D,MAAM,CACP,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}