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.
- package/README.md +40 -47
- package/dist/cli/commands/create.d.ts +4 -0
- package/dist/cli/commands/create.d.ts.map +1 -0
- package/dist/cli/commands/create.js +68 -0
- package/dist/cli/commands/create.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +98 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +3 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.helpers.d.ts +15 -0
- package/dist/cli/commands/install.helpers.d.ts.map +1 -0
- package/dist/cli/commands/install.helpers.js +47 -0
- package/dist/cli/commands/install.helpers.js.map +1 -0
- package/dist/cli/commands/install.helpers.test.d.ts +2 -0
- package/dist/cli/commands/install.helpers.test.d.ts.map +1 -0
- package/dist/cli/commands/install.helpers.test.js +18 -0
- package/dist/cli/commands/install.helpers.test.js.map +1 -0
- package/dist/cli/commands/install.js +74 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/pulse.d.ts +4 -0
- package/dist/cli/commands/pulse.d.ts.map +1 -0
- package/dist/cli/commands/pulse.js +48 -0
- package/dist/cli/commands/pulse.js.map +1 -0
- package/dist/cli/commands/pulse.test.d.ts +2 -0
- package/dist/cli/commands/pulse.test.d.ts.map +1 -0
- package/dist/cli/commands/pulse.test.js +19 -0
- package/dist/cli/commands/pulse.test.js.map +1 -0
- package/dist/cli/commands/suggest.d.ts +3 -0
- package/dist/cli/commands/suggest.d.ts.map +1 -0
- package/dist/cli/commands/suggest.js +32 -0
- package/dist/cli/commands/suggest.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +20 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/research-hints.d.ts +5 -0
- package/dist/cli/research-hints.d.ts.map +1 -0
- package/dist/cli/research-hints.js +109 -0
- package/dist/cli/research-hints.js.map +1 -0
- package/dist/cli/research-hints.test.d.ts +2 -0
- package/dist/cli/research-hints.test.d.ts.map +1 -0
- package/dist/cli/research-hints.test.js +50 -0
- package/dist/cli/research-hints.test.js.map +1 -0
- package/dist/core/agcel-config.d.ts +27 -0
- package/dist/core/agcel-config.d.ts.map +1 -0
- package/dist/core/agcel-config.js +4 -0
- package/dist/core/agcel-config.js.map +1 -0
- package/dist/core/build-rag-engine.d.ts +12 -0
- package/dist/core/build-rag-engine.d.ts.map +1 -0
- package/dist/core/build-rag-engine.js +24 -0
- package/dist/core/build-rag-engine.js.map +1 -0
- package/dist/core/build-rag-engine.test.d.ts +2 -0
- package/dist/core/build-rag-engine.test.d.ts.map +1 -0
- package/dist/core/build-rag-engine.test.js +34 -0
- package/dist/core/build-rag-engine.test.js.map +1 -0
- package/dist/core/chroma-rag.d.ts +20 -0
- package/dist/core/chroma-rag.d.ts.map +1 -0
- package/dist/core/chroma-rag.js +108 -0
- package/dist/core/chroma-rag.js.map +1 -0
- package/dist/core/context-hygiene.d.ts +12 -0
- package/dist/core/context-hygiene.d.ts.map +1 -0
- package/dist/core/context-hygiene.js +43 -0
- package/dist/core/context-hygiene.js.map +1 -0
- package/dist/core/context-hygiene.test.d.ts +2 -0
- package/dist/core/context-hygiene.test.d.ts.map +1 -0
- package/dist/core/context-hygiene.test.js +18 -0
- package/dist/core/context-hygiene.test.js.map +1 -0
- package/dist/core/context.d.ts +44 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +114 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/conversation-routing.d.ts +10 -0
- package/dist/core/conversation-routing.d.ts.map +1 -0
- package/dist/core/conversation-routing.js +27 -0
- package/dist/core/conversation-routing.js.map +1 -0
- package/dist/core/conversation-routing.test.d.ts +2 -0
- package/dist/core/conversation-routing.test.d.ts.map +1 -0
- package/dist/core/conversation-routing.test.js +29 -0
- package/dist/core/conversation-routing.test.js.map +1 -0
- package/dist/core/guardrails.d.ts +26 -0
- package/dist/core/guardrails.d.ts.map +1 -0
- package/dist/core/guardrails.js +76 -0
- package/dist/core/guardrails.js.map +1 -0
- package/dist/core/guardrails.test.d.ts +2 -0
- package/dist/core/guardrails.test.d.ts.map +1 -0
- package/dist/core/guardrails.test.js +35 -0
- package/dist/core/guardrails.test.js.map +1 -0
- package/dist/core/intent.d.ts +22 -0
- package/dist/core/intent.d.ts.map +1 -0
- package/dist/core/intent.js +79 -0
- package/dist/core/intent.js.map +1 -0
- package/dist/core/intent.test.d.ts +2 -0
- package/dist/core/intent.test.d.ts.map +1 -0
- package/dist/core/intent.test.js +43 -0
- package/dist/core/intent.test.js.map +1 -0
- package/dist/core/local-rag.d.ts +17 -0
- package/dist/core/local-rag.d.ts.map +1 -0
- package/dist/core/local-rag.js +74 -0
- package/dist/core/local-rag.js.map +1 -0
- package/dist/core/local-rag.test.d.ts +2 -0
- package/dist/core/local-rag.test.d.ts.map +1 -0
- package/dist/core/local-rag.test.js +47 -0
- package/dist/core/local-rag.test.js.map +1 -0
- package/dist/core/orchestrator.d.ts +47 -0
- package/dist/core/orchestrator.d.ts.map +1 -0
- package/dist/core/orchestrator.js +138 -0
- package/dist/core/orchestrator.js.map +1 -0
- package/dist/core/orchestrator.test.d.ts +2 -0
- package/dist/core/orchestrator.test.d.ts.map +1 -0
- package/dist/core/orchestrator.test.js +118 -0
- package/dist/core/orchestrator.test.js.map +1 -0
- package/dist/core/pulse.d.ts +13 -0
- package/dist/core/pulse.d.ts.map +1 -0
- package/dist/core/pulse.js +29 -0
- package/dist/core/pulse.js.map +1 -0
- package/dist/core/pulse.test.d.ts +2 -0
- package/dist/core/pulse.test.d.ts.map +1 -0
- package/dist/core/pulse.test.js +18 -0
- package/dist/core/pulse.test.js.map +1 -0
- package/dist/core/rag-metadata.d.ts +5 -0
- package/dist/core/rag-metadata.d.ts.map +1 -0
- package/dist/core/rag-metadata.js +13 -0
- package/dist/core/rag-metadata.js.map +1 -0
- package/dist/core/rag-metadata.test.d.ts +2 -0
- package/dist/core/rag-metadata.test.d.ts.map +1 -0
- package/dist/core/rag-metadata.test.js +12 -0
- package/dist/core/rag-metadata.test.js.map +1 -0
- package/dist/core/rag-types.d.ts +18 -0
- package/dist/core/rag-types.d.ts.map +1 -0
- package/dist/core/rag-types.js +2 -0
- package/dist/core/rag-types.js.map +1 -0
- package/dist/core/read-agcel-config.d.ts +3 -0
- package/dist/core/read-agcel-config.d.ts.map +1 -0
- package/dist/core/read-agcel-config.js +13 -0
- package/dist/core/read-agcel-config.js.map +1 -0
- package/dist/core/registry.d.ts +9 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +75 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/registry.test.d.ts +2 -0
- package/dist/core/registry.test.d.ts.map +1 -0
- package/dist/core/registry.test.js +128 -0
- package/dist/core/registry.test.js.map +1 -0
- package/dist/core/schema.d.ts +51 -0
- package/dist/core/schema.d.ts.map +1 -0
- package/dist/core/schema.js +31 -0
- package/dist/core/schema.js.map +1 -0
- package/dist/core/summarizer.d.ts +23 -0
- package/dist/core/summarizer.d.ts.map +1 -0
- package/dist/core/summarizer.js +66 -0
- package/dist/core/summarizer.js.map +1 -0
- package/dist/core/text-similarity.d.ts +7 -0
- package/dist/core/text-similarity.d.ts.map +1 -0
- package/dist/core/text-similarity.js +35 -0
- package/dist/core/text-similarity.js.map +1 -0
- package/dist/core/text-similarity.test.d.ts +2 -0
- package/dist/core/text-similarity.test.d.ts.map +1 -0
- package/dist/core/text-similarity.test.js +11 -0
- package/dist/core/text-similarity.test.js.map +1 -0
- package/dist/docs-site.test.d.ts +2 -0
- package/dist/docs-site.test.d.ts.map +1 -0
- package/dist/docs-site.test.js +19 -0
- package/dist/docs-site.test.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -39
- package/dist/index.js.map +1 -0
- package/dist/providers/adapter.d.ts +23 -0
- package/dist/providers/adapter.d.ts.map +1 -0
- package/dist/providers/adapter.js +9 -0
- package/dist/providers/adapter.js.map +1 -0
- package/dist/providers/chatgpt.d.ts +13 -0
- package/dist/providers/chatgpt.d.ts.map +1 -0
- package/dist/providers/chatgpt.js +33 -0
- package/dist/providers/chatgpt.js.map +1 -0
- package/dist/providers/chatgpt.test.d.ts +2 -0
- package/dist/providers/chatgpt.test.d.ts.map +1 -0
- package/dist/providers/chatgpt.test.js +23 -0
- package/dist/providers/chatgpt.test.js.map +1 -0
- package/dist/providers/claude.d.ts +13 -0
- package/dist/providers/claude.d.ts.map +1 -0
- package/dist/providers/claude.js +48 -0
- package/dist/providers/claude.js.map +1 -0
- package/dist/providers/cursor.d.ts +14 -0
- package/dist/providers/cursor.d.ts.map +1 -0
- package/dist/providers/cursor.js +47 -0
- package/dist/providers/cursor.js.map +1 -0
- package/dist/providers/gemini.d.ts +13 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +42 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/index.d.ts +5 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +18 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +288 -154
- package/dist/server/index.js.map +1 -0
- package/package.json +62 -52
- package/.agent/workflows/api-gen.md +0 -63
- package/.agent/workflows/architect.md +0 -44
- package/.agent/workflows/brainstorm.md +0 -227
- package/.agent/workflows/build.md +0 -38
- package/.agent/workflows/changelog.md +0 -55
- package/.agent/workflows/checkpoint.md +0 -142
- package/.agent/workflows/commit.md +0 -227
- package/.agent/workflows/debug.md +0 -61
- package/.agent/workflows/deploy.md +0 -80
- package/.agent/workflows/doc.md +0 -251
- package/.agent/workflows/execute-plan.md +0 -229
- package/.agent/workflows/feature.md +0 -259
- package/.agent/workflows/fix.md +0 -327
- package/.agent/workflows/help.md +0 -67
- package/.agent/workflows/index.md +0 -152
- package/.agent/workflows/load.md +0 -116
- package/.agent/workflows/mode.md +0 -174
- package/.agent/workflows/optimize.md +0 -57
- package/.agent/workflows/plan.md +0 -341
- package/.agent/workflows/pr.md +0 -78
- package/.agent/workflows/product-plan.md +0 -36
- package/.agent/workflows/production-deploy.md +0 -39
- package/.agent/workflows/refactor.md +0 -67
- package/.agent/workflows/research.md +0 -120
- package/.agent/workflows/review.md +0 -348
- package/.agent/workflows/security-scan.md +0 -60
- package/.agent/workflows/ship.md +0 -225
- package/.agent/workflows/spawn.md +0 -181
- package/.agent/workflows/status.md +0 -63
- package/.agent/workflows/tdd.md +0 -143
- package/.agent/workflows/test.md +0 -344
- package/.agent/workflows/verify.md +0 -35
- package/LICENSE +0 -21
- package/dist/commands/init.js +0 -147
- package/dist/commands/list.js +0 -43
- package/dist/commands/uninstall.js +0 -70
- package/dist/utils/index.js +0 -28
- package/skills/api-security-best-practices/SKILL.md +0 -291
- package/skills/api-security-best-practices/references/examples.md +0 -617
- package/skills/architecture/SKILL.md +0 -59
- package/skills/architecture/context-discovery.md +0 -43
- package/skills/architecture/examples.md +0 -94
- package/skills/architecture/pattern-selection.md +0 -68
- package/skills/architecture/patterns-reference.md +0 -50
- package/skills/architecture/trade-off-analysis.md +0 -77
- package/skills/aws-serverless/SKILL.md +0 -327
- package/skills/brainstorming/SKILL.md +0 -234
- package/skills/c4-context/SKILL.md +0 -154
- package/skills/ci-cd-engineer/SKILL.md +0 -50
- package/skills/code-auditing/SKILL.md +0 -55
- package/skills/copywriting/SKILL.md +0 -248
- package/skills/database-engineer/SKILL.md +0 -47
- package/skills/doc-coauthoring/SKILL.md +0 -379
- package/skills/docker-expert/SKILL.md +0 -412
- package/skills/langgraph/SKILL.md +0 -291
- package/skills/postgresql/SKILL.md +0 -73
- package/skills/pricing-strategy/SKILL.md +0 -360
- package/skills/product-manager/SKILL.md +0 -57
- package/skills/prompt-engineer/README.md +0 -659
- package/skills/prompt-engineer/SKILL.md +0 -256
- package/skills/python-patterns/SKILL.md +0 -445
- package/skills/qa-engineer/SKILL.md +0 -42
- package/skills/rag-engineer/SKILL.md +0 -94
- package/skills/react-patterns/SKILL.md +0 -202
- package/skills/secure-refactoring/SKILL.md +0 -54
- package/skills/security-documentation/SKILL.md +0 -53
- package/skills/senior-architect/SKILL.md +0 -213
- package/skills/senior-architect/references/architecture_patterns.md +0 -103
- package/skills/senior-architect/references/system_design_workflows.md +0 -103
- package/skills/senior-architect/references/tech_decision_guide.md +0 -103
- package/skills/senior-architect/scripts/architecture_diagram_generator.py +0 -114
- package/skills/senior-architect/scripts/dependency_analyzer.py +0 -114
- package/skills/senior-architect/scripts/project_architect.py +0 -114
- package/skills/seo-audit/SKILL.md +0 -491
- package/skills/sql-injection-testing/SKILL.md +0 -452
- package/skills/test-driven-development/SKILL.md +0 -375
- package/skills/test-driven-development/testing-anti-patterns.md +0 -299
- package/skills/test-fixing/SKILL.md +0 -123
- package/skills/testing-patterns/SKILL.md +0 -263
- package/skills/typescript-expert/SKILL.md +0 -202
- package/skills/typescript-expert/references/advanced-topics.md +0 -252
- package/skills/typescript-expert/references/tsconfig-strict.json +0 -92
- package/skills/typescript-expert/references/typescript-cheatsheet.md +0 -383
- package/skills/typescript-expert/references/utility-types.ts +0 -335
- package/skills/typescript-expert/scripts/ts_diagnostic.py +0 -203
- package/skills/ui-ux-designer/SKILL.md +0 -46
- package/skills/vercel-deployment/SKILL.md +0 -83
- package/skills/vulnerability-scanner/SKILL.md +0 -280
- package/skills/vulnerability-scanner/checklists.md +0 -121
- package/skills/vulnerability-scanner/scripts/security_scan.py +0 -458
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"rag-types.js","sourceRoot":"","sources":["../../src/core/rag-types.ts"],"names":[],"mappings":""}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|