@ai-agent-context/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +285 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/adapters/filesystem/fs-adapter.d.ts +50 -0
- package/dist/adapters/filesystem/fs-adapter.d.ts.map +1 -0
- package/dist/adapters/filesystem/fs-adapter.js +168 -0
- package/dist/adapters/filesystem/fs-adapter.js.map +1 -0
- package/dist/adapters/filesystem/sensitive.d.ts +26 -0
- package/dist/adapters/filesystem/sensitive.d.ts.map +1 -0
- package/dist/adapters/filesystem/sensitive.js +67 -0
- package/dist/adapters/filesystem/sensitive.js.map +1 -0
- package/dist/adapters/git/git-adapter.d.ts +47 -0
- package/dist/adapters/git/git-adapter.d.ts.map +1 -0
- package/dist/adapters/git/git-adapter.js +109 -0
- package/dist/adapters/git/git-adapter.js.map +1 -0
- package/dist/adapters/language/json/adapter.d.ts +24 -0
- package/dist/adapters/language/json/adapter.d.ts.map +1 -0
- package/dist/adapters/language/json/adapter.js +54 -0
- package/dist/adapters/language/json/adapter.js.map +1 -0
- package/dist/adapters/language/markdown/adapter.d.ts +41 -0
- package/dist/adapters/language/markdown/adapter.d.ts.map +1 -0
- package/dist/adapters/language/markdown/adapter.js +124 -0
- package/dist/adapters/language/markdown/adapter.js.map +1 -0
- package/dist/adapters/language/package-json/adapter.d.ts +47 -0
- package/dist/adapters/language/package-json/adapter.d.ts.map +1 -0
- package/dist/adapters/language/package-json/adapter.js +153 -0
- package/dist/adapters/language/package-json/adapter.js.map +1 -0
- package/dist/adapters/language/registry.d.ts +35 -0
- package/dist/adapters/language/registry.d.ts.map +1 -0
- package/dist/adapters/language/registry.js +79 -0
- package/dist/adapters/language/registry.js.map +1 -0
- package/dist/adapters/language/ts-js/adapter.d.ts +14 -0
- package/dist/adapters/language/ts-js/adapter.d.ts.map +1 -0
- package/dist/adapters/language/ts-js/adapter.js +59 -0
- package/dist/adapters/language/ts-js/adapter.js.map +1 -0
- package/dist/adapters/language/ts-js/extractor.d.ts +21 -0
- package/dist/adapters/language/ts-js/extractor.d.ts.map +1 -0
- package/dist/adapters/language/ts-js/extractor.js +779 -0
- package/dist/adapters/language/ts-js/extractor.js.map +1 -0
- package/dist/adapters/language/ts-js/lexer.d.ts +30 -0
- package/dist/adapters/language/ts-js/lexer.d.ts.map +1 -0
- package/dist/adapters/language/ts-js/lexer.js +446 -0
- package/dist/adapters/language/ts-js/lexer.js.map +1 -0
- package/dist/adapters/language/ts-js/package-signals.d.ts +5 -0
- package/dist/adapters/language/ts-js/package-signals.d.ts.map +1 -0
- package/dist/adapters/language/ts-js/package-signals.js +113 -0
- package/dist/adapters/language/ts-js/package-signals.js.map +1 -0
- package/dist/adapters/language/tsconfig/adapter.d.ts +38 -0
- package/dist/adapters/language/tsconfig/adapter.d.ts.map +1 -0
- package/dist/adapters/language/tsconfig/adapter.js +130 -0
- package/dist/adapters/language/tsconfig/adapter.js.map +1 -0
- package/dist/adapters/language/types.d.ts +152 -0
- package/dist/adapters/language/types.d.ts.map +1 -0
- package/dist/adapters/language/types.js +51 -0
- package/dist/adapters/language/types.js.map +1 -0
- package/dist/agent-context.d.ts +122 -0
- package/dist/agent-context.d.ts.map +1 -0
- package/dist/agent-context.js +243 -0
- package/dist/agent-context.js.map +1 -0
- package/dist/config/defaults.d.ts +13 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +98 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/load.d.ts +25 -0
- package/dist/config/load.d.ts.map +1 -0
- package/dist/config/load.js +106 -0
- package/dist/config/load.js.map +1 -0
- package/dist/config/types.d.ts +95 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +8 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validate.d.ts +15 -0
- package/dist/config/validate.d.ts.map +1 -0
- package/dist/config/validate.js +202 -0
- package/dist/config/validate.js.map +1 -0
- package/dist/core/architecture/detector.d.ts +10 -0
- package/dist/core/architecture/detector.d.ts.map +1 -0
- package/dist/core/architecture/detector.js +37 -0
- package/dist/core/architecture/detector.js.map +1 -0
- package/dist/core/architecture/entry-points.d.ts +20 -0
- package/dist/core/architecture/entry-points.d.ts.map +1 -0
- package/dist/core/architecture/entry-points.js +190 -0
- package/dist/core/architecture/entry-points.js.map +1 -0
- package/dist/core/architecture/role-detector.d.ts +32 -0
- package/dist/core/architecture/role-detector.d.ts.map +1 -0
- package/dist/core/architecture/role-detector.js +240 -0
- package/dist/core/architecture/role-detector.js.map +1 -0
- package/dist/core/context/explain.d.ts +36 -0
- package/dist/core/context/explain.d.ts.map +1 -0
- package/dist/core/context/explain.js +199 -0
- package/dist/core/context/explain.js.map +1 -0
- package/dist/core/context/repository-context.d.ts +16 -0
- package/dist/core/context/repository-context.d.ts.map +1 -0
- package/dist/core/context/repository-context.js +134 -0
- package/dist/core/context/repository-context.js.map +1 -0
- package/dist/core/context/types.d.ts +94 -0
- package/dist/core/context/types.d.ts.map +1 -0
- package/dist/core/context/types.js +2 -0
- package/dist/core/context/types.js.map +1 -0
- package/dist/core/conventions/detector.d.ts +55 -0
- package/dist/core/conventions/detector.d.ts.map +1 -0
- package/dist/core/conventions/detector.js +438 -0
- package/dist/core/conventions/detector.js.map +1 -0
- package/dist/core/conventions/renderer.d.ts +16 -0
- package/dist/core/conventions/renderer.d.ts.map +1 -0
- package/dist/core/conventions/renderer.js +42 -0
- package/dist/core/conventions/renderer.js.map +1 -0
- package/dist/core/decisions/detector.d.ts +45 -0
- package/dist/core/decisions/detector.d.ts.map +1 -0
- package/dist/core/decisions/detector.js +256 -0
- package/dist/core/decisions/detector.js.map +1 -0
- package/dist/core/diff/differ.d.ts +26 -0
- package/dist/core/diff/differ.d.ts.map +1 -0
- package/dist/core/diff/differ.js +159 -0
- package/dist/core/diff/differ.js.map +1 -0
- package/dist/core/git-analysis/activity.d.ts +35 -0
- package/dist/core/git-analysis/activity.d.ts.map +1 -0
- package/dist/core/git-analysis/activity.js +123 -0
- package/dist/core/git-analysis/activity.js.map +1 -0
- package/dist/core/graph/aliases.d.ts +20 -0
- package/dist/core/graph/aliases.d.ts.map +1 -0
- package/dist/core/graph/aliases.js +99 -0
- package/dist/core/graph/aliases.js.map +1 -0
- package/dist/core/graph/knowledge-graph.d.ts +91 -0
- package/dist/core/graph/knowledge-graph.d.ts.map +1 -0
- package/dist/core/graph/knowledge-graph.js +572 -0
- package/dist/core/graph/knowledge-graph.js.map +1 -0
- package/dist/core/graph/modules.d.ts +28 -0
- package/dist/core/graph/modules.d.ts.map +1 -0
- package/dist/core/graph/modules.js +139 -0
- package/dist/core/graph/modules.js.map +1 -0
- package/dist/core/graph/resolver.d.ts +50 -0
- package/dist/core/graph/resolver.d.ts.map +1 -0
- package/dist/core/graph/resolver.js +180 -0
- package/dist/core/graph/resolver.js.map +1 -0
- package/dist/core/scanner/cache.d.ts +49 -0
- package/dist/core/scanner/cache.d.ts.map +1 -0
- package/dist/core/scanner/cache.js +101 -0
- package/dist/core/scanner/cache.js.map +1 -0
- package/dist/core/scanner/scanner.d.ts +60 -0
- package/dist/core/scanner/scanner.d.ts.map +1 -0
- package/dist/core/scanner/scanner.js +304 -0
- package/dist/core/scanner/scanner.js.map +1 -0
- package/dist/core/scanner/types.d.ts +47 -0
- package/dist/core/scanner/types.d.ts.map +1 -0
- package/dist/core/scanner/types.js +18 -0
- package/dist/core/scanner/types.js.map +1 -0
- package/dist/core/search/analyzer.d.ts +16 -0
- package/dist/core/search/analyzer.d.ts.map +1 -0
- package/dist/core/search/analyzer.js +165 -0
- package/dist/core/search/analyzer.js.map +1 -0
- package/dist/core/search/bm25.d.ts +21 -0
- package/dist/core/search/bm25.d.ts.map +1 -0
- package/dist/core/search/bm25.js +108 -0
- package/dist/core/search/bm25.js.map +1 -0
- package/dist/core/search/documents.d.ts +20 -0
- package/dist/core/search/documents.d.ts.map +1 -0
- package/dist/core/search/documents.js +106 -0
- package/dist/core/search/documents.js.map +1 -0
- package/dist/core/search/service.d.ts +30 -0
- package/dist/core/search/service.d.ts.map +1 -0
- package/dist/core/search/service.js +54 -0
- package/dist/core/search/service.js.map +1 -0
- package/dist/core/search/types.d.ts +44 -0
- package/dist/core/search/types.d.ts.map +1 -0
- package/dist/core/search/types.js +2 -0
- package/dist/core/search/types.js.map +1 -0
- package/dist/core/serialization/documents.d.ts +26 -0
- package/dist/core/serialization/documents.d.ts.map +1 -0
- package/dist/core/serialization/documents.js +224 -0
- package/dist/core/serialization/documents.js.map +1 -0
- package/dist/core/serialization/reader.d.ts +22 -0
- package/dist/core/serialization/reader.d.ts.map +1 -0
- package/dist/core/serialization/reader.js +65 -0
- package/dist/core/serialization/reader.js.map +1 -0
- package/dist/core/serialization/types.d.ts +184 -0
- package/dist/core/serialization/types.d.ts.map +1 -0
- package/dist/core/serialization/types.js +2 -0
- package/dist/core/serialization/types.js.map +1 -0
- package/dist/core/serialization/writer.d.ts +17 -0
- package/dist/core/serialization/writer.d.ts.map +1 -0
- package/dist/core/serialization/writer.js +64 -0
- package/dist/core/serialization/writer.js.map +1 -0
- package/dist/core/workspace/package-facts.d.ts +12 -0
- package/dist/core/workspace/package-facts.d.ts.map +1 -0
- package/dist/core/workspace/package-facts.js +50 -0
- package/dist/core/workspace/package-facts.js.map +1 -0
- package/dist/core/workspace/workspace.d.ts +32 -0
- package/dist/core/workspace/workspace.d.ts.map +1 -0
- package/dist/core/workspace/workspace.js +167 -0
- package/dist/core/workspace/workspace.js.map +1 -0
- package/dist/errors.d.ts +50 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +64 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +80 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +66 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/diagnostics.d.ts +64 -0
- package/dist/logging/diagnostics.d.ts.map +1 -0
- package/dist/logging/diagnostics.js +92 -0
- package/dist/logging/diagnostics.js.map +1 -0
- package/dist/model/canonical.d.ts +24 -0
- package/dist/model/canonical.d.ts.map +1 -0
- package/dist/model/canonical.js +69 -0
- package/dist/model/canonical.js.map +1 -0
- package/dist/model/schema.d.ts +37 -0
- package/dist/model/schema.d.ts.map +1 -0
- package/dist/model/schema.js +42 -0
- package/dist/model/schema.js.map +1 -0
- package/dist/model/types.d.ts +402 -0
- package/dist/model/types.d.ts.map +1 -0
- package/dist/model/types.js +10 -0
- package/dist/model/types.js.map +1 -0
- package/dist/pipeline/scan-pipeline.d.ts +69 -0
- package/dist/pipeline/scan-pipeline.d.ts.map +1 -0
- package/dist/pipeline/scan-pipeline.js +270 -0
- package/dist/pipeline/scan-pipeline.js.map +1 -0
- package/dist/util/concurrency.d.ts +17 -0
- package/dist/util/concurrency.d.ts.map +1 -0
- package/dist/util/concurrency.js +46 -0
- package/dist/util/concurrency.js.map +1 -0
- package/dist/util/glob.d.ts +26 -0
- package/dist/util/glob.d.ts.map +1 -0
- package/dist/util/glob.js +198 -0
- package/dist/util/glob.js.map +1 -0
- package/dist/util/paths.d.ts +23 -0
- package/dist/util/paths.d.ts.map +1 -0
- package/dist/util/paths.js +115 -0
- package/dist/util/paths.js.map +1 -0
- package/dist/util/text.d.ts +22 -0
- package/dist/util/text.d.ts.map +1 -0
- package/dist/util/text.js +66 -0
- package/dist/util/text.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package-name → signal mapping.
|
|
3
|
+
*
|
|
4
|
+
* Signals are coarse, deterministic, structural observations ("this file imports
|
|
5
|
+
* a database client"), not conclusions. Architecture detection combines them
|
|
6
|
+
* with file names, paths and dependency shape, and always reports confidence.
|
|
7
|
+
*/
|
|
8
|
+
import { SIGNALS } from "../types.js";
|
|
9
|
+
const RULES = [
|
|
10
|
+
{ match: '@prisma/client', signal: SIGNALS.dbAccess },
|
|
11
|
+
{ match: 'prisma', signal: SIGNALS.dbAccess },
|
|
12
|
+
{ match: 'pg', signal: SIGNALS.dbAccess },
|
|
13
|
+
{ match: 'mysql', signal: SIGNALS.dbAccess },
|
|
14
|
+
{ match: 'mysql2', signal: SIGNALS.dbAccess },
|
|
15
|
+
{ match: 'mongoose', signal: SIGNALS.dbAccess },
|
|
16
|
+
{ match: 'mongodb', signal: SIGNALS.dbAccess },
|
|
17
|
+
{ match: 'typeorm', signal: SIGNALS.dbAccess },
|
|
18
|
+
{ match: 'knex', signal: SIGNALS.dbAccess },
|
|
19
|
+
{ match: 'drizzle-orm', signal: SIGNALS.dbAccess },
|
|
20
|
+
{ match: 'sequelize', signal: SIGNALS.dbAccess },
|
|
21
|
+
{ match: 'better-sqlite3', signal: SIGNALS.dbAccess },
|
|
22
|
+
{ match: 'ioredis', signal: SIGNALS.dbAccess },
|
|
23
|
+
{ match: 'redis', signal: SIGNALS.dbAccess },
|
|
24
|
+
{ match: 'express', signal: SIGNALS.httpFramework },
|
|
25
|
+
{ match: 'fastify', signal: SIGNALS.httpFramework },
|
|
26
|
+
{ match: 'koa', signal: SIGNALS.httpFramework },
|
|
27
|
+
{ match: 'hono', signal: SIGNALS.httpFramework },
|
|
28
|
+
{ match: '@nestjs/*', signal: SIGNALS.httpFramework },
|
|
29
|
+
{ match: 'react', signal: SIGNALS.uiFramework },
|
|
30
|
+
{ match: 'react-dom', signal: SIGNALS.uiFramework },
|
|
31
|
+
{ match: 'vue', signal: SIGNALS.uiFramework },
|
|
32
|
+
{ match: 'svelte', signal: SIGNALS.uiFramework },
|
|
33
|
+
{ match: 'next', signal: SIGNALS.uiFramework },
|
|
34
|
+
{ match: 'solid-js', signal: SIGNALS.uiFramework },
|
|
35
|
+
{ match: '@angular/*', signal: SIGNALS.uiFramework },
|
|
36
|
+
{ match: 'axios', signal: SIGNALS.httpClient },
|
|
37
|
+
{ match: 'node-fetch', signal: SIGNALS.httpClient },
|
|
38
|
+
{ match: 'undici', signal: SIGNALS.httpClient },
|
|
39
|
+
{ match: 'graphql', signal: SIGNALS.graphql },
|
|
40
|
+
{ match: '@apollo/*', signal: SIGNALS.graphql },
|
|
41
|
+
{ match: 'zod', signal: SIGNALS.validation },
|
|
42
|
+
{ match: 'yup', signal: SIGNALS.validation },
|
|
43
|
+
{ match: 'joi', signal: SIGNALS.validation },
|
|
44
|
+
{ match: 'ajv', signal: SIGNALS.validation },
|
|
45
|
+
{ match: 'class-validator', signal: SIGNALS.validation },
|
|
46
|
+
{ match: 'stripe', signal: SIGNALS.externalSdk },
|
|
47
|
+
{ match: 'twilio', signal: SIGNALS.externalSdk },
|
|
48
|
+
{ match: '@sendgrid/*', signal: SIGNALS.externalSdk },
|
|
49
|
+
{ match: 'openai', signal: SIGNALS.externalSdk },
|
|
50
|
+
{ match: '@anthropic-ai/*', signal: SIGNALS.externalSdk },
|
|
51
|
+
{ match: '@aws-sdk/*', signal: SIGNALS.externalSdk },
|
|
52
|
+
{ match: 'bull', signal: SIGNALS.queue },
|
|
53
|
+
{ match: 'bullmq', signal: SIGNALS.queue },
|
|
54
|
+
{ match: 'kafkajs', signal: SIGNALS.queue },
|
|
55
|
+
{ match: 'amqplib', signal: SIGNALS.queue },
|
|
56
|
+
{ match: 'nats', signal: SIGNALS.queue },
|
|
57
|
+
{ match: 'worker_threads', signal: SIGNALS.worker },
|
|
58
|
+
{ match: 'node:worker_threads', signal: SIGNALS.worker },
|
|
59
|
+
{ match: 'vitest', signal: SIGNALS.testFramework },
|
|
60
|
+
{ match: 'jest', signal: SIGNALS.testFramework },
|
|
61
|
+
{ match: 'mocha', signal: SIGNALS.testFramework },
|
|
62
|
+
{ match: 'ava', signal: SIGNALS.testFramework },
|
|
63
|
+
{ match: '@playwright/test', signal: SIGNALS.testFramework },
|
|
64
|
+
{ match: 'cypress', signal: SIGNALS.testFramework },
|
|
65
|
+
{ match: 'dotenv', signal: SIGNALS.configLibrary },
|
|
66
|
+
{ match: 'convict', signal: SIGNALS.configLibrary },
|
|
67
|
+
{ match: 'winston', signal: SIGNALS.loggingLibrary },
|
|
68
|
+
{ match: 'pino', signal: SIGNALS.loggingLibrary },
|
|
69
|
+
{ match: 'log4js', signal: SIGNALS.loggingLibrary },
|
|
70
|
+
{ match: 'bunyan', signal: SIGNALS.loggingLibrary },
|
|
71
|
+
{ match: 'commander', signal: SIGNALS.cliFramework },
|
|
72
|
+
{ match: 'yargs', signal: SIGNALS.cliFramework },
|
|
73
|
+
{ match: 'cac', signal: SIGNALS.cliFramework },
|
|
74
|
+
{ match: 'meow', signal: SIGNALS.cliFramework },
|
|
75
|
+
{ match: '@oclif/*', signal: SIGNALS.cliFramework },
|
|
76
|
+
];
|
|
77
|
+
/** Extracts the package name from an import specifier (`@scope/pkg/sub` → `@scope/pkg`). */
|
|
78
|
+
export function packageNameFromSpecifier(specifier) {
|
|
79
|
+
if (specifier.startsWith('.') || specifier.startsWith('/') || specifier.length === 0)
|
|
80
|
+
return null;
|
|
81
|
+
const parts = specifier.split('/');
|
|
82
|
+
if (specifier.startsWith('@')) {
|
|
83
|
+
if (parts.length < 2)
|
|
84
|
+
return null;
|
|
85
|
+
return `${parts[0]}/${parts[1]}`;
|
|
86
|
+
}
|
|
87
|
+
return parts[0] ?? null;
|
|
88
|
+
}
|
|
89
|
+
/** Signals implied by importing `specifier`. */
|
|
90
|
+
export function signalsForSpecifier(specifier) {
|
|
91
|
+
const packageName = packageNameFromSpecifier(specifier);
|
|
92
|
+
if (packageName === null)
|
|
93
|
+
return [];
|
|
94
|
+
const signals = [];
|
|
95
|
+
if (specifier.startsWith('node:') || packageName.startsWith('node:')) {
|
|
96
|
+
const bare = specifier.replace(/^node:/, '');
|
|
97
|
+
if (bare === 'worker_threads')
|
|
98
|
+
signals.push(SIGNALS.worker);
|
|
99
|
+
return signals;
|
|
100
|
+
}
|
|
101
|
+
for (const rule of RULES) {
|
|
102
|
+
if (rule.match.endsWith('/*')) {
|
|
103
|
+
const prefix = rule.match.slice(0, -1);
|
|
104
|
+
if (packageName.startsWith(prefix))
|
|
105
|
+
signals.push(rule.signal);
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (packageName === rule.match)
|
|
109
|
+
signals.push(rule.signal);
|
|
110
|
+
}
|
|
111
|
+
return signals;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=package-signals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-signals.js","sourceRoot":"","sources":["../../../../src/adapters/language/ts-js/package-signals.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tsconfig.json` adapter.
|
|
3
|
+
*
|
|
4
|
+
* tsconfig files are JSON with comments and trailing commas, so they are parsed
|
|
5
|
+
* with a small tolerant pre-processor. Only the facts the analysis needs are
|
|
6
|
+
* extracted: module format hints, path aliases (`baseUrl` + `paths`), strictness
|
|
7
|
+
* and the `extends` chain, which the alias resolver follows separately.
|
|
8
|
+
*/
|
|
9
|
+
import { type FileDescriptor, type LanguageAdapter, type ParsedFile } from '../types.ts';
|
|
10
|
+
/** Removes comments and trailing commas so that `JSON.parse` accepts the file. */
|
|
11
|
+
export declare function relaxJson(contents: string): string;
|
|
12
|
+
export interface TsConfigFacts {
|
|
13
|
+
extendsChain: string[];
|
|
14
|
+
baseUrl: string | null;
|
|
15
|
+
paths: Record<string, string[]>;
|
|
16
|
+
strict: boolean;
|
|
17
|
+
moduleResolution: string | null;
|
|
18
|
+
module: string | null;
|
|
19
|
+
target: string | null;
|
|
20
|
+
jsx: string | null;
|
|
21
|
+
composite: boolean;
|
|
22
|
+
declaration: boolean;
|
|
23
|
+
}
|
|
24
|
+
/** Reads the facts the analysis needs from a parsed tsconfig document. */
|
|
25
|
+
export declare function readTsConfigFacts(raw: Record<string, unknown>): TsConfigFacts;
|
|
26
|
+
export declare class TsConfigAdapter implements LanguageAdapter {
|
|
27
|
+
readonly id = "tsconfig";
|
|
28
|
+
readonly displayName = "TypeScript configuration";
|
|
29
|
+
readonly languageIds: readonly string[];
|
|
30
|
+
readonly alwaysEnabled = true;
|
|
31
|
+
handles(file: FileDescriptor): boolean;
|
|
32
|
+
parse(input: {
|
|
33
|
+
path: string;
|
|
34
|
+
language: string;
|
|
35
|
+
contents: string;
|
|
36
|
+
}): ParsedFile;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/language/tsconfig/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAoB,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAK3G,kFAAkF;AAClF,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAqClD;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,CA6B7E;AAED,qBAAa,eAAgB,YAAW,eAAe;IACrD,QAAQ,CAAC,EAAE,cAAc;IACzB,QAAQ,CAAC,WAAW,8BAA8B;IAClD,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAA0B;IACjE,QAAQ,CAAC,aAAa,QAAQ;IAE9B,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO;IAItC,KAAK,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,UAAU;CAmC/E"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tsconfig.json` adapter.
|
|
3
|
+
*
|
|
4
|
+
* tsconfig files are JSON with comments and trailing commas, so they are parsed
|
|
5
|
+
* with a small tolerant pre-processor. Only the facts the analysis needs are
|
|
6
|
+
* extracted: module format hints, path aliases (`baseUrl` + `paths`), strictness
|
|
7
|
+
* and the `extends` chain, which the alias resolver follows separately.
|
|
8
|
+
*/
|
|
9
|
+
import { createParsedFile } from "../types.js";
|
|
10
|
+
import { isPlainObject } from "../json/adapter.js";
|
|
11
|
+
const TSCONFIG_NAMES = new Set(['tsconfig.json', 'tsconfig.base.json', 'jsconfig.json', 'tsconfig.build.json']);
|
|
12
|
+
/** Removes comments and trailing commas so that `JSON.parse` accepts the file. */
|
|
13
|
+
export function relaxJson(contents) {
|
|
14
|
+
let output = '';
|
|
15
|
+
let index = 0;
|
|
16
|
+
let inString = false;
|
|
17
|
+
while (index < contents.length) {
|
|
18
|
+
const character = contents[index];
|
|
19
|
+
if (inString) {
|
|
20
|
+
output += character;
|
|
21
|
+
if (character === '\\') {
|
|
22
|
+
output += contents[index + 1] ?? '';
|
|
23
|
+
index += 2;
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
if (character === '"')
|
|
27
|
+
inString = false;
|
|
28
|
+
index += 1;
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
if (character === '"') {
|
|
32
|
+
inString = true;
|
|
33
|
+
output += character;
|
|
34
|
+
index += 1;
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (character === '/' && contents[index + 1] === '/') {
|
|
38
|
+
while (index < contents.length && contents[index] !== '\n')
|
|
39
|
+
index += 1;
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (character === '/' && contents[index + 1] === '*') {
|
|
43
|
+
index += 2;
|
|
44
|
+
while (index < contents.length && !(contents[index] === '*' && contents[index + 1] === '/'))
|
|
45
|
+
index += 1;
|
|
46
|
+
index += 2;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
output += character;
|
|
50
|
+
index += 1;
|
|
51
|
+
}
|
|
52
|
+
return output.replace(/,(\s*[}\]])/g, '$1');
|
|
53
|
+
}
|
|
54
|
+
/** Reads the facts the analysis needs from a parsed tsconfig document. */
|
|
55
|
+
export function readTsConfigFacts(raw) {
|
|
56
|
+
const extendsValue = raw.extends;
|
|
57
|
+
const extendsChain = typeof extendsValue === 'string'
|
|
58
|
+
? [extendsValue]
|
|
59
|
+
: Array.isArray(extendsValue)
|
|
60
|
+
? extendsValue.filter((entry) => typeof entry === 'string')
|
|
61
|
+
: [];
|
|
62
|
+
const compilerOptions = isPlainObject(raw.compilerOptions) ? raw.compilerOptions : {};
|
|
63
|
+
const rawPaths = isPlainObject(compilerOptions.paths) ? compilerOptions.paths : {};
|
|
64
|
+
const paths = {};
|
|
65
|
+
for (const key of Object.keys(rawPaths).sort()) {
|
|
66
|
+
const value = rawPaths[key];
|
|
67
|
+
if (Array.isArray(value)) {
|
|
68
|
+
paths[key] = value.filter((entry) => typeof entry === 'string');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
extendsChain,
|
|
73
|
+
baseUrl: typeof compilerOptions.baseUrl === 'string' ? compilerOptions.baseUrl : null,
|
|
74
|
+
paths,
|
|
75
|
+
strict: compilerOptions.strict === true,
|
|
76
|
+
moduleResolution: typeof compilerOptions.moduleResolution === 'string' ? compilerOptions.moduleResolution : null,
|
|
77
|
+
module: typeof compilerOptions.module === 'string' ? compilerOptions.module : null,
|
|
78
|
+
target: typeof compilerOptions.target === 'string' ? compilerOptions.target : null,
|
|
79
|
+
jsx: typeof compilerOptions.jsx === 'string' ? compilerOptions.jsx : null,
|
|
80
|
+
composite: compilerOptions.composite === true,
|
|
81
|
+
declaration: compilerOptions.declaration === true,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export class TsConfigAdapter {
|
|
85
|
+
id = 'tsconfig';
|
|
86
|
+
displayName = 'TypeScript configuration';
|
|
87
|
+
languageIds = ['typescript', 'json'];
|
|
88
|
+
alwaysEnabled = true;
|
|
89
|
+
handles(file) {
|
|
90
|
+
return TSCONFIG_NAMES.has(file.basename);
|
|
91
|
+
}
|
|
92
|
+
parse(input) {
|
|
93
|
+
try {
|
|
94
|
+
const parsed = JSON.parse(relaxJson(input.contents));
|
|
95
|
+
if (!isPlainObject(parsed))
|
|
96
|
+
throw new Error('tsconfig must contain a JSON object');
|
|
97
|
+
const facts = readTsConfigFacts(parsed);
|
|
98
|
+
return createParsedFile(input.path, 'tsconfig', {
|
|
99
|
+
metadata: {
|
|
100
|
+
'tsconfig.extends': facts.extendsChain,
|
|
101
|
+
'tsconfig.baseUrl': facts.baseUrl,
|
|
102
|
+
'tsconfig.paths': facts.paths,
|
|
103
|
+
'tsconfig.strict': facts.strict,
|
|
104
|
+
'tsconfig.moduleResolution': facts.moduleResolution,
|
|
105
|
+
'tsconfig.module': facts.module,
|
|
106
|
+
'tsconfig.target': facts.target,
|
|
107
|
+
'tsconfig.jsx': facts.jsx,
|
|
108
|
+
'tsconfig.composite': facts.composite,
|
|
109
|
+
'tsconfig.declaration': facts.declaration,
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
115
|
+
return createParsedFile(input.path, 'tsconfig', {
|
|
116
|
+
parseStatus: 'failed',
|
|
117
|
+
diagnostics: [
|
|
118
|
+
{
|
|
119
|
+
code: 'WARN_TSCONFIG_INVALID',
|
|
120
|
+
severity: 'warning',
|
|
121
|
+
message: 'TypeScript project detected but tsconfig.json is invalid.',
|
|
122
|
+
source: input.path,
|
|
123
|
+
hint: `${message}. Run: agent-context status`,
|
|
124
|
+
},
|
|
125
|
+
],
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/adapters/language/tsconfig/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language adapter contract.
|
|
3
|
+
*
|
|
4
|
+
* The core analysis pipeline never sees a language specific AST. Every adapter
|
|
5
|
+
* (TypeScript/JavaScript today; Python, Go, Rust, Java, C# later) reduces a file
|
|
6
|
+
* to the same language-agnostic intermediate representation declared here:
|
|
7
|
+
* imports, exports, symbols, calls, coarse signals and free-form metadata.
|
|
8
|
+
*
|
|
9
|
+
* Adding a language therefore means writing one adapter and registering it in
|
|
10
|
+
* the {@link LanguageRegistry} — no change to the graph, architecture or
|
|
11
|
+
* serialization layers.
|
|
12
|
+
*/
|
|
13
|
+
import type { DiagnosticPayload, ImportSyntax, ParseStatus, SymbolKind } from '../../model/types.ts';
|
|
14
|
+
export interface ImportRecord {
|
|
15
|
+
/** Specifier exactly as written in the source. */
|
|
16
|
+
specifier: string;
|
|
17
|
+
syntax: ImportSyntax;
|
|
18
|
+
/** Named imports, without the local alias (`{ a as b }` adds `a`). */
|
|
19
|
+
names: string[];
|
|
20
|
+
/** Default import binding, when present. */
|
|
21
|
+
defaultImport?: string;
|
|
22
|
+
/** Namespace import binding (`* as ns`), when present. */
|
|
23
|
+
namespaceImport?: string;
|
|
24
|
+
/** 1-based line of the import statement. */
|
|
25
|
+
line: number;
|
|
26
|
+
/** `true` for side-effect-only imports (`import './x'`). */
|
|
27
|
+
hasSideEffects: boolean;
|
|
28
|
+
/** `true` for `import type` / `export type` forms. */
|
|
29
|
+
typeOnly: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface ExportRecord {
|
|
32
|
+
name: string;
|
|
33
|
+
kind: SymbolKind | 'unknown' | 'reexport' | 'star';
|
|
34
|
+
isDefault: boolean;
|
|
35
|
+
line: number;
|
|
36
|
+
/** Set for re-exports: the module the symbols come from. */
|
|
37
|
+
fromSpecifier?: string;
|
|
38
|
+
/** Names pulled from another module (`export { a } from 'b'`). */
|
|
39
|
+
names?: string[];
|
|
40
|
+
typeOnly?: boolean;
|
|
41
|
+
}
|
|
42
|
+
export interface SymbolRecord {
|
|
43
|
+
name: string;
|
|
44
|
+
kind: SymbolKind;
|
|
45
|
+
exported: boolean;
|
|
46
|
+
isDefault: boolean;
|
|
47
|
+
extends: string[];
|
|
48
|
+
implements: string[];
|
|
49
|
+
/** 1-based line of the declaration. */
|
|
50
|
+
line: number;
|
|
51
|
+
/** Decorator names, when the language supports them. */
|
|
52
|
+
decorators?: string[];
|
|
53
|
+
}
|
|
54
|
+
export interface CallRecord {
|
|
55
|
+
name: string;
|
|
56
|
+
line: number;
|
|
57
|
+
/** Receiver identifier for `receiver.method(...)` calls. */
|
|
58
|
+
receiver?: string;
|
|
59
|
+
}
|
|
60
|
+
export interface RouteRecord {
|
|
61
|
+
method: string;
|
|
62
|
+
path: string;
|
|
63
|
+
line: number;
|
|
64
|
+
}
|
|
65
|
+
/** Language-agnostic signals understood by the analysis core. */
|
|
66
|
+
export declare const SIGNALS: {
|
|
67
|
+
readonly envAccess: "env:access";
|
|
68
|
+
readonly testSuite: "test:suite";
|
|
69
|
+
readonly consoleUsage: "console:usage";
|
|
70
|
+
readonly httpRoute: "http:route";
|
|
71
|
+
readonly httpFramework: "http:framework";
|
|
72
|
+
readonly httpClient: "http:client";
|
|
73
|
+
readonly graphql: "graphql:library";
|
|
74
|
+
readonly dbAccess: "db:access";
|
|
75
|
+
readonly uiFramework: "ui:framework";
|
|
76
|
+
readonly jsx: "jsx:present";
|
|
77
|
+
readonly browserApi: "browser:api";
|
|
78
|
+
readonly worker: "worker:usage";
|
|
79
|
+
readonly queue: "queue:usage";
|
|
80
|
+
readonly schedule: "schedule:usage";
|
|
81
|
+
readonly eventEmitter: "event:emitter";
|
|
82
|
+
readonly customErrorClass: "error:custom-class";
|
|
83
|
+
readonly validation: "validation:library";
|
|
84
|
+
readonly externalSdk: "sdk:external";
|
|
85
|
+
readonly configLibrary: "config:library";
|
|
86
|
+
readonly loggingLibrary: "logging:library";
|
|
87
|
+
readonly cliFramework: "cli:framework";
|
|
88
|
+
readonly testFramework: "test:framework";
|
|
89
|
+
readonly decorators: "decorators:present";
|
|
90
|
+
readonly commonjs: "module:commonjs";
|
|
91
|
+
readonly esm: "module:esm";
|
|
92
|
+
readonly typeOnlyExports: "types:only-exports";
|
|
93
|
+
};
|
|
94
|
+
export type Signal = (typeof SIGNALS)[keyof typeof SIGNALS] | `decorator:${string}`;
|
|
95
|
+
export interface ParseOptions {
|
|
96
|
+
/** Absolute path is not required: adapters work on text only. */
|
|
97
|
+
path: string;
|
|
98
|
+
/** Resolved language id for the file. */
|
|
99
|
+
language: string;
|
|
100
|
+
}
|
|
101
|
+
export interface ParsedFile {
|
|
102
|
+
path: string;
|
|
103
|
+
language: string;
|
|
104
|
+
parseStatus: ParseStatus;
|
|
105
|
+
imports: ImportRecord[];
|
|
106
|
+
exports: ExportRecord[];
|
|
107
|
+
symbols: SymbolRecord[];
|
|
108
|
+
calls: CallRecord[];
|
|
109
|
+
routes: RouteRecord[];
|
|
110
|
+
/** Deduplicated, sorted signals. */
|
|
111
|
+
signals: string[];
|
|
112
|
+
/**
|
|
113
|
+
* Language specific structured data. Known keys:
|
|
114
|
+
* - `json.keys` — top-level keys of a JSON document
|
|
115
|
+
* - `markdown.headings` — heading titles
|
|
116
|
+
* - `package.name` / `package.scripts` / `package.dependencies` — package facts
|
|
117
|
+
* - `tsconfig.paths` / `tsconfig.baseUrl` — TypeScript path aliases
|
|
118
|
+
*/
|
|
119
|
+
metadata: Record<string, unknown>;
|
|
120
|
+
diagnostics: DiagnosticPayload[];
|
|
121
|
+
}
|
|
122
|
+
export interface FileDescriptor {
|
|
123
|
+
/** Repository-relative POSIX path. */
|
|
124
|
+
path: string;
|
|
125
|
+
/** Last path segment. */
|
|
126
|
+
basename: string;
|
|
127
|
+
/** Lowercase extension, including the dot (`''` when absent). */
|
|
128
|
+
extension: string;
|
|
129
|
+
}
|
|
130
|
+
export interface LanguageAdapter {
|
|
131
|
+
/** Stable language id, for example `typescript`, `json`, `markdown`. */
|
|
132
|
+
readonly id: string;
|
|
133
|
+
readonly displayName: string;
|
|
134
|
+
/** Language ids this adapter can produce (a TS adapter also handles JS). */
|
|
135
|
+
readonly languageIds: readonly string[];
|
|
136
|
+
/**
|
|
137
|
+
* When `true` the adapter runs regardless of the `languages` configuration —
|
|
138
|
+
* used for structural files such as `package.json` and `tsconfig.json`.
|
|
139
|
+
*/
|
|
140
|
+
readonly alwaysEnabled: boolean;
|
|
141
|
+
/** `true` when this adapter claims the file. */
|
|
142
|
+
handles(file: FileDescriptor): boolean;
|
|
143
|
+
/** Pure function: text in, facts out. Must never throw. */
|
|
144
|
+
parse(input: ParseOptions & {
|
|
145
|
+
contents: string;
|
|
146
|
+
}): ParsedFile;
|
|
147
|
+
}
|
|
148
|
+
/** Helper used by adapters to build a correctly defaulted {@link ParsedFile}. */
|
|
149
|
+
export declare function createParsedFile(path: string, language: string, overrides?: Partial<ParsedFile>): ParsedFile;
|
|
150
|
+
/** Sorts and deduplicates signals for deterministic output. */
|
|
151
|
+
export declare function normalizeSignals(signals: Iterable<string>): string[];
|
|
152
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adapters/language/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,UAAU,EACX,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;IACrB,sEAAsE;IACtE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,cAAc,EAAE,OAAO,CAAC;IACxB,sDAAsD;IACtD,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IACnD,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,iEAAiE;AACjE,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BV,CAAC;AAEX,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,GAAG,aAAa,MAAM,EAAE,CAAC;AAEpF,MAAM,WAAW,YAAY;IAC3B,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,oCAAoC;IACpC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;;;;;;OAMG;IACH,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,WAAW,EAAE,iBAAiB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC;;;OAGG;IACH,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,gDAAgD;IAChD,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC;IACvC,2DAA2D;IAC3D,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,UAAU,CAAC;CAC/D;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,OAAO,CAAC,UAAU,CAAM,GAAG,UAAU,CAehH;AAED,+DAA+D;AAC/D,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAEpE"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/** Language-agnostic signals understood by the analysis core. */
|
|
2
|
+
export const SIGNALS = {
|
|
3
|
+
envAccess: 'env:access',
|
|
4
|
+
testSuite: 'test:suite',
|
|
5
|
+
consoleUsage: 'console:usage',
|
|
6
|
+
httpRoute: 'http:route',
|
|
7
|
+
httpFramework: 'http:framework',
|
|
8
|
+
httpClient: 'http:client',
|
|
9
|
+
graphql: 'graphql:library',
|
|
10
|
+
dbAccess: 'db:access',
|
|
11
|
+
uiFramework: 'ui:framework',
|
|
12
|
+
jsx: 'jsx:present',
|
|
13
|
+
browserApi: 'browser:api',
|
|
14
|
+
worker: 'worker:usage',
|
|
15
|
+
queue: 'queue:usage',
|
|
16
|
+
schedule: 'schedule:usage',
|
|
17
|
+
eventEmitter: 'event:emitter',
|
|
18
|
+
customErrorClass: 'error:custom-class',
|
|
19
|
+
validation: 'validation:library',
|
|
20
|
+
externalSdk: 'sdk:external',
|
|
21
|
+
configLibrary: 'config:library',
|
|
22
|
+
loggingLibrary: 'logging:library',
|
|
23
|
+
cliFramework: 'cli:framework',
|
|
24
|
+
testFramework: 'test:framework',
|
|
25
|
+
decorators: 'decorators:present',
|
|
26
|
+
commonjs: 'module:commonjs',
|
|
27
|
+
esm: 'module:esm',
|
|
28
|
+
typeOnlyExports: 'types:only-exports',
|
|
29
|
+
};
|
|
30
|
+
/** Helper used by adapters to build a correctly defaulted {@link ParsedFile}. */
|
|
31
|
+
export function createParsedFile(path, language, overrides = {}) {
|
|
32
|
+
return {
|
|
33
|
+
path,
|
|
34
|
+
language,
|
|
35
|
+
parseStatus: 'ok',
|
|
36
|
+
imports: [],
|
|
37
|
+
exports: [],
|
|
38
|
+
symbols: [],
|
|
39
|
+
calls: [],
|
|
40
|
+
routes: [],
|
|
41
|
+
signals: [],
|
|
42
|
+
metadata: {},
|
|
43
|
+
diagnostics: [],
|
|
44
|
+
...overrides,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/** Sorts and deduplicates signals for deterministic output. */
|
|
48
|
+
export function normalizeSignals(signals) {
|
|
49
|
+
return [...new Set(signals)].sort();
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/adapters/language/types.ts"],"names":[],"mappings":"AA2EA,iEAAiE;AACjE,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,SAAS,EAAE,YAAY;IACvB,SAAS,EAAE,YAAY;IACvB,YAAY,EAAE,eAAe;IAC7B,SAAS,EAAE,YAAY;IACvB,aAAa,EAAE,gBAAgB;IAC/B,UAAU,EAAE,aAAa;IACzB,OAAO,EAAE,iBAAiB;IAC1B,QAAQ,EAAE,WAAW;IACrB,WAAW,EAAE,cAAc;IAC3B,GAAG,EAAE,aAAa;IAClB,UAAU,EAAE,aAAa;IACzB,MAAM,EAAE,cAAc;IACtB,KAAK,EAAE,aAAa;IACpB,QAAQ,EAAE,gBAAgB;IAC1B,YAAY,EAAE,eAAe;IAC7B,gBAAgB,EAAE,oBAAoB;IACtC,UAAU,EAAE,oBAAoB;IAChC,WAAW,EAAE,cAAc;IAC3B,aAAa,EAAE,gBAAgB;IAC/B,cAAc,EAAE,iBAAiB;IACjC,YAAY,EAAE,eAAe;IAC7B,aAAa,EAAE,gBAAgB;IAC/B,UAAU,EAAE,oBAAoB;IAChC,QAAQ,EAAE,iBAAiB;IAC3B,GAAG,EAAE,YAAY;IACjB,eAAe,EAAE,oBAAoB;CAC7B,CAAC;AA2DX,iFAAiF;AACjF,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,QAAgB,EAAE,YAAiC,EAAE;IAClG,OAAO;QACL,IAAI;QACJ,QAAQ;QACR,WAAW,EAAE,IAAI;QACjB,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;QACZ,WAAW,EAAE,EAAE;QACf,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,gBAAgB,CAAC,OAAyB;IACxD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import type { LanguageRegistry } from './adapters/language/registry.ts';
|
|
2
|
+
import type { ConfigOverrides, AgentContextConfig } from './config/types.ts';
|
|
3
|
+
import type { ProgressReporter } from './logging/diagnostics.ts';
|
|
4
|
+
import { Logger } from './logging/diagnostics.ts';
|
|
5
|
+
import type { GitAdapter } from './adapters/git/git-adapter.ts';
|
|
6
|
+
import type { ChangeSet, ContextDiff, Convention, Decision, FileNode, ModuleExplanation, ModuleNode, Repository, ScanReport, SearchResult } from './model/types.ts';
|
|
7
|
+
import { type PersistedContext } from './core/serialization/reader.ts';
|
|
8
|
+
import { type LocalState } from './core/scanner/cache.ts';
|
|
9
|
+
import type { ArchitectureDocument, DependenciesDocument, IndexDocument } from './core/serialization/types.ts';
|
|
10
|
+
import type { RepositoryContext } from './core/context/types.ts';
|
|
11
|
+
import { SearchService, type SearchOptions } from './core/search/service.ts';
|
|
12
|
+
export interface AgentContextOptions {
|
|
13
|
+
/** Repository root; defaults to `process.cwd()`. */
|
|
14
|
+
root?: string;
|
|
15
|
+
/** Configuration overrides (CLI flags take exactly this path). */
|
|
16
|
+
config?: ConfigOverrides;
|
|
17
|
+
/** Explicit configuration file path. */
|
|
18
|
+
configPath?: string;
|
|
19
|
+
logger?: Logger;
|
|
20
|
+
registry?: LanguageRegistry;
|
|
21
|
+
progress?: ProgressReporter;
|
|
22
|
+
/** Injectable clock (deterministic tests). */
|
|
23
|
+
now?: () => number;
|
|
24
|
+
/** Injectable git adapter (tests, sandboxes). */
|
|
25
|
+
gitAdapter?: GitAdapter;
|
|
26
|
+
}
|
|
27
|
+
export interface ScanOptions {
|
|
28
|
+
/** Ignore the local state and re-read every file. */
|
|
29
|
+
force?: boolean;
|
|
30
|
+
/** Do not write `.agent/`. */
|
|
31
|
+
dryRun?: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface StatusReport {
|
|
34
|
+
status: 'up-to-date' | 'stale' | 'missing';
|
|
35
|
+
lastScanAt: string | null;
|
|
36
|
+
configPath: string | null;
|
|
37
|
+
configHashMatches: boolean;
|
|
38
|
+
contextFiles: {
|
|
39
|
+
present: string[];
|
|
40
|
+
missing: string[];
|
|
41
|
+
invalid: Array<{
|
|
42
|
+
file: string;
|
|
43
|
+
reason: string;
|
|
44
|
+
}>;
|
|
45
|
+
};
|
|
46
|
+
changes: ChangeSet;
|
|
47
|
+
counts: LocalState['counts'];
|
|
48
|
+
git: {
|
|
49
|
+
available: boolean;
|
|
50
|
+
reason?: string;
|
|
51
|
+
commitsAnalyzed: number;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export interface InitResult {
|
|
55
|
+
configPath: string;
|
|
56
|
+
created: string[];
|
|
57
|
+
alreadyExisted: boolean;
|
|
58
|
+
overwritten: boolean;
|
|
59
|
+
}
|
|
60
|
+
export declare class AgentContext {
|
|
61
|
+
readonly root: string;
|
|
62
|
+
private readonly options;
|
|
63
|
+
private resolvedConfig;
|
|
64
|
+
private configSource;
|
|
65
|
+
private pipeline;
|
|
66
|
+
private persisted;
|
|
67
|
+
private constructor();
|
|
68
|
+
/**
|
|
69
|
+
* Loads the context for a repository.
|
|
70
|
+
*
|
|
71
|
+
* Nothing is scanned yet: the first query (or `scan()`) runs the pipeline. This
|
|
72
|
+
* keeps `AgentContext.load()` cheap for callers that only need configuration.
|
|
73
|
+
*/
|
|
74
|
+
static load(options?: AgentContextOptions): Promise<AgentContext>;
|
|
75
|
+
/** Resolved configuration (defaults + config file + overrides). */
|
|
76
|
+
get config(): AgentContextConfig;
|
|
77
|
+
/** Path of the configuration file in use, relative to the root, when it exists. */
|
|
78
|
+
get configFile(): string | null;
|
|
79
|
+
private pipelineOptions;
|
|
80
|
+
/** Runs the pipeline; read-only queries use `dryRun` so nothing is written. */
|
|
81
|
+
private ensurePipeline;
|
|
82
|
+
/** Scans the repository and persists the context into `.agent/`. */
|
|
83
|
+
scan(options?: ScanOptions): Promise<ScanReport>;
|
|
84
|
+
/** Complete repository model, in memory. */
|
|
85
|
+
getRepository(): Promise<Repository>;
|
|
86
|
+
/** Architecture projection. */
|
|
87
|
+
getArchitecture(): Promise<ArchitectureDocument>;
|
|
88
|
+
getDependencies(): Promise<DependenciesDocument>;
|
|
89
|
+
getConventions(): Promise<Convention[]>;
|
|
90
|
+
getDecisions(): Promise<Decision[]>;
|
|
91
|
+
getIndex(): Promise<IndexDocument>;
|
|
92
|
+
getFiles(): Promise<FileNode[]>;
|
|
93
|
+
/** Modules of the repository, each with heuristic roles and evidence. */
|
|
94
|
+
getModules(): Promise<ModuleNode[]>;
|
|
95
|
+
/** Module ids that depend on the given module (direct dependents). */
|
|
96
|
+
getDependents(moduleId: string): Promise<string[]>;
|
|
97
|
+
/** Module ids the given module depends on. */
|
|
98
|
+
getDependenciesOf(moduleId: string): Promise<string[]>;
|
|
99
|
+
/** Compact, agent oriented repository context. */
|
|
100
|
+
getRepositoryContext(): Promise<RepositoryContext>;
|
|
101
|
+
/** Structured explanation of a module (or of the module owning a file). */
|
|
102
|
+
explain(target: string): Promise<ModuleExplanation | null>;
|
|
103
|
+
/** Context changes relative to the persisted context. */
|
|
104
|
+
diff(): Promise<ContextDiff>;
|
|
105
|
+
/** Deterministic lexical search over files, modules, symbols, conventions, decisions. */
|
|
106
|
+
search(query: string, options?: SearchOptions): Promise<SearchResult[]>;
|
|
107
|
+
/** Search with an explicitly provided backend (embeddings, vector database, ...). */
|
|
108
|
+
searchWith(service: SearchService, query: string, options?: SearchOptions): Promise<SearchResult[]>;
|
|
109
|
+
/** Compares the working tree with the persisted context. */
|
|
110
|
+
status(): Promise<StatusReport>;
|
|
111
|
+
/**
|
|
112
|
+
* Creates `.agent/` and `.agent/config.json`.
|
|
113
|
+
*
|
|
114
|
+
* Idempotent: an existing configuration is left untouched unless `force` is set.
|
|
115
|
+
*/
|
|
116
|
+
init(options?: {
|
|
117
|
+
force?: boolean;
|
|
118
|
+
}): Promise<InitResult>;
|
|
119
|
+
/** Returns the persisted context or throws a helpful error when it is missing. */
|
|
120
|
+
requirePersistedContext(): Promise<PersistedContext>;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=agent-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-context.d.ts","sourceRoot":"","sources":["../src/agent-context.ts"],"names":[],"mappings":"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"}
|