agentmap 0.2.0 → 0.3.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/dist/cli.js +3 -0
- package/dist/cli.js.map +1 -1
- package/dist/extract/definitions.d.ts.map +1 -1
- package/dist/extract/definitions.js +80 -14
- package/dist/extract/definitions.js.map +1 -1
- package/dist/extract/definitions.test.d.ts +2 -0
- package/dist/extract/definitions.test.d.ts.map +1 -0
- package/dist/extract/definitions.test.js +1414 -0
- package/dist/extract/definitions.test.js.map +1 -0
- package/dist/extract/git-status.d.ts +51 -0
- package/dist/extract/git-status.d.ts.map +1 -0
- package/dist/extract/git-status.js +289 -0
- package/dist/extract/git-status.js.map +1 -0
- package/dist/extract/git-status.test.d.ts +2 -0
- package/dist/extract/git-status.test.d.ts.map +1 -0
- package/dist/extract/git-status.test.js +456 -0
- package/dist/extract/git-status.test.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/map/builder.d.ts.map +1 -1
- package/dist/map/builder.js +41 -3
- package/dist/map/builder.js.map +1 -1
- package/dist/map/yaml.d.ts.map +1 -1
- package/dist/map/yaml.js +7 -2
- package/dist/map/yaml.js.map +1 -1
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +32 -4
- package/dist/scanner.js.map +1 -1
- package/dist/types.d.ts +43 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -9
- package/README +0 -158
- package/dist/opencode/plugin.d.ts +0 -3
- package/dist/opencode/plugin.d.ts.map +0 -1
- package/dist/opencode/plugin.js +0 -18
- package/dist/opencode/plugin.js.map +0 -1
package/dist/scanner.js
CHANGED
|
@@ -7,6 +7,7 @@ import { readFile } from 'fs/promises';
|
|
|
7
7
|
import { join, normalize } from 'path';
|
|
8
8
|
import { extractMarker } from './extract/marker.js';
|
|
9
9
|
import { extractDefinitions } from './extract/definitions.js';
|
|
10
|
+
import { getAllDiffData, applyDiffToDefinitions } from './extract/git-status.js';
|
|
10
11
|
import { parseCode, detectLanguage, LANGUAGE_EXTENSIONS } from './parser/index.js';
|
|
11
12
|
/**
|
|
12
13
|
* Supported file extensions (from LANGUAGE_EXTENSIONS)
|
|
@@ -78,7 +79,9 @@ async function getGlobFiles(dir) {
|
|
|
78
79
|
*/
|
|
79
80
|
export async function scanDirectory(options = {}) {
|
|
80
81
|
const dir = options.dir ?? process.cwd();
|
|
81
|
-
|
|
82
|
+
// Filter out null/undefined/empty patterns (cac can pass [null] when option not used)
|
|
83
|
+
const ignorePatterns = (options.ignore ?? []).filter((p) => !!p);
|
|
84
|
+
const includeDiff = options.diff ?? false;
|
|
82
85
|
// Get file list - prefer git, fallback to glob
|
|
83
86
|
let files;
|
|
84
87
|
if (isGitRepo(dir)) {
|
|
@@ -94,12 +97,31 @@ export async function scanDirectory(options = {}) {
|
|
|
94
97
|
const isIgnored = picomatch(ignorePatterns);
|
|
95
98
|
files = files.filter(f => !isIgnored(f));
|
|
96
99
|
}
|
|
100
|
+
// Get git diff data if needed (isolated from main processing)
|
|
101
|
+
let fileStats = null;
|
|
102
|
+
let fileDiffs = null;
|
|
103
|
+
if (includeDiff && isGitRepo(dir)) {
|
|
104
|
+
try {
|
|
105
|
+
const diffData = getAllDiffData(dir);
|
|
106
|
+
fileStats = diffData.fileStats;
|
|
107
|
+
fileDiffs = diffData.fileDiffs;
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// Diff failed - continue without diff info
|
|
111
|
+
fileStats = null;
|
|
112
|
+
fileDiffs = null;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
97
115
|
// Process each file
|
|
98
116
|
const results = [];
|
|
99
117
|
for (const relativePath of files) {
|
|
100
118
|
const fullPath = join(dir, relativePath);
|
|
119
|
+
// Normalize path for lookup (handle Windows backslashes)
|
|
120
|
+
const normalizedPath = relativePath.replace(/\\/g, '/');
|
|
101
121
|
try {
|
|
102
|
-
const
|
|
122
|
+
const fileDiff = fileDiffs?.get(normalizedPath);
|
|
123
|
+
const stats = fileStats?.get(normalizedPath);
|
|
124
|
+
const result = await processFile(fullPath, relativePath, fileDiff, stats);
|
|
103
125
|
if (result) {
|
|
104
126
|
results.push(result);
|
|
105
127
|
}
|
|
@@ -114,7 +136,7 @@ export async function scanDirectory(options = {}) {
|
|
|
114
136
|
/**
|
|
115
137
|
* Process a single file - check for marker and extract definitions
|
|
116
138
|
*/
|
|
117
|
-
async function processFile(fullPath, relativePath) {
|
|
139
|
+
async function processFile(fullPath, relativePath, fileDiff, fileStats) {
|
|
118
140
|
// Check for marker first (only reads first 30KB)
|
|
119
141
|
const marker = await extractMarker(fullPath);
|
|
120
142
|
if (!marker.found) {
|
|
@@ -129,11 +151,17 @@ async function processFile(fullPath, relativePath) {
|
|
|
129
151
|
const code = await readFile(fullPath, 'utf8');
|
|
130
152
|
// Parse and extract definitions
|
|
131
153
|
const tree = await parseCode(code, language);
|
|
132
|
-
|
|
154
|
+
let definitions = extractDefinitions(tree.rootNode, language);
|
|
155
|
+
// Apply diff info if available (for definition-level stats)
|
|
156
|
+
if (fileDiff) {
|
|
157
|
+
definitions = applyDiffToDefinitions(definitions, fileDiff);
|
|
158
|
+
}
|
|
133
159
|
return {
|
|
134
160
|
relativePath,
|
|
135
161
|
description: marker.description,
|
|
136
162
|
definitions,
|
|
163
|
+
// Use pre-calculated file stats from --numstat (more reliable)
|
|
164
|
+
diff: fileStats,
|
|
137
165
|
};
|
|
138
166
|
}
|
|
139
167
|
//# sourceMappingURL=scanner.js.map
|
package/dist/scanner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -9,11 +9,19 @@ export type Language = 'typescript' | 'javascript' | 'python' | 'rust' | 'go';
|
|
|
9
9
|
export interface DefEntry {
|
|
10
10
|
[symbolName: string]: string;
|
|
11
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* Git diff stats for a file (total lines added/deleted)
|
|
14
|
+
*/
|
|
15
|
+
export interface FileDiffStats {
|
|
16
|
+
added: number;
|
|
17
|
+
deleted: number;
|
|
18
|
+
}
|
|
12
19
|
/**
|
|
13
20
|
* A file entry in the map
|
|
14
21
|
*/
|
|
15
22
|
export interface FileEntry {
|
|
16
23
|
description?: string;
|
|
24
|
+
diff?: string;
|
|
17
25
|
defs?: DefEntry;
|
|
18
26
|
}
|
|
19
27
|
/**
|
|
@@ -33,14 +41,28 @@ export interface MarkerResult {
|
|
|
33
41
|
* Types of definitions we extract
|
|
34
42
|
*/
|
|
35
43
|
export type DefinitionType = 'function' | 'class' | 'type' | 'interface' | 'const' | 'enum';
|
|
44
|
+
/**
|
|
45
|
+
* Git status for a definition
|
|
46
|
+
*/
|
|
47
|
+
export type DefinitionStatus = 'added' | 'updated';
|
|
48
|
+
/**
|
|
49
|
+
* Git diff stats for a definition
|
|
50
|
+
*/
|
|
51
|
+
export interface DefinitionDiff {
|
|
52
|
+
status: DefinitionStatus;
|
|
53
|
+
added: number;
|
|
54
|
+
deleted: number;
|
|
55
|
+
}
|
|
36
56
|
/**
|
|
37
57
|
* A definition extracted from source code
|
|
38
58
|
*/
|
|
39
59
|
export interface Definition {
|
|
40
60
|
name: string;
|
|
41
61
|
line: number;
|
|
62
|
+
endLine: number;
|
|
42
63
|
type: DefinitionType;
|
|
43
64
|
exported: boolean;
|
|
65
|
+
diff?: DefinitionDiff;
|
|
44
66
|
}
|
|
45
67
|
/**
|
|
46
68
|
* Result of processing a single file
|
|
@@ -49,6 +71,7 @@ export interface FileResult {
|
|
|
49
71
|
relativePath: string;
|
|
50
72
|
description?: string;
|
|
51
73
|
definitions: Definition[];
|
|
74
|
+
diff?: FileDiffStats;
|
|
52
75
|
}
|
|
53
76
|
/**
|
|
54
77
|
* Options for generating the map
|
|
@@ -58,6 +81,26 @@ export interface GenerateOptions {
|
|
|
58
81
|
dir?: string;
|
|
59
82
|
/** Glob patterns to ignore */
|
|
60
83
|
ignore?: string[];
|
|
84
|
+
/** Include git diff status for definitions */
|
|
85
|
+
diff?: boolean;
|
|
86
|
+
/** Git ref to diff against (default: HEAD for unstaged, --cached for staged) */
|
|
87
|
+
diffBase?: string;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* A hunk from git diff output
|
|
91
|
+
*/
|
|
92
|
+
export interface DiffHunk {
|
|
93
|
+
oldStart: number;
|
|
94
|
+
oldCount: number;
|
|
95
|
+
newStart: number;
|
|
96
|
+
newCount: number;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Parsed diff for a single file
|
|
100
|
+
*/
|
|
101
|
+
export interface FileDiff {
|
|
102
|
+
path: string;
|
|
103
|
+
hunks: DiffHunk[];
|
|
61
104
|
}
|
|
62
105
|
/**
|
|
63
106
|
* Re-export parser types
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AAEzC;;GAEG;AACH,MAAM,MAAM,QAAQ,GAChB,YAAY,GACZ,YAAY,GACZ,QAAQ,GACR,MAAM,GACN,IAAI,CAAA;AAER;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAA;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,QAAQ,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAA;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,UAAU,GACV,OAAO,GACP,MAAM,GACN,WAAW,GACX,OAAO,GACP,MAAM,CAAA;AAEV;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,cAAc,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AAEzC;;GAEG;AACH,MAAM,MAAM,QAAQ,GAChB,YAAY,GACZ,YAAY,GACZ,QAAQ,GACR,MAAM,GACN,IAAI,CAAA;AAER;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAA;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,QAAQ,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAA;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,UAAU,GACV,OAAO,GACP,MAAM,GACN,WAAW,GACX,OAAO,GACP,MAAM,CAAA;AAEV;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,SAAS,CAAA;AAElD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,gBAAgB,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,cAAc,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,cAAc,CAAA;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,IAAI,CAAC,EAAE,aAAa,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,QAAQ,EAAE,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;AAC1C,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentmap",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Generate a YAML map of your codebase for AI agent context",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
|
-
"url": "git+https://github.com/remorses/agentmap.git"
|
|
8
|
+
"url": "git+https://github.com/remorses/agentmap.git",
|
|
9
|
+
"directory": "cli"
|
|
9
10
|
},
|
|
10
11
|
"homepage": "https://github.com/remorses/agentmap#readme",
|
|
11
12
|
"bugs": {
|
|
@@ -20,10 +21,6 @@
|
|
|
20
21
|
".": {
|
|
21
22
|
"types": "./dist/index.d.ts",
|
|
22
23
|
"default": "./dist/index.js"
|
|
23
|
-
},
|
|
24
|
-
"./opencode": {
|
|
25
|
-
"types": "./dist/opencode/plugin.d.ts",
|
|
26
|
-
"default": "./dist/opencode/plugin.js"
|
|
27
24
|
}
|
|
28
25
|
},
|
|
29
26
|
"files": [
|
|
@@ -32,8 +29,8 @@
|
|
|
32
29
|
"scripts": {
|
|
33
30
|
"build": "tsc",
|
|
34
31
|
"dev": "tsc --watch",
|
|
35
|
-
"cli": "
|
|
36
|
-
"
|
|
32
|
+
"cli": "bun src/cli.ts",
|
|
33
|
+
"test": "bun test"
|
|
37
34
|
},
|
|
38
35
|
"dependencies": {
|
|
39
36
|
"cac": "^6.7.14",
|
|
@@ -48,7 +45,7 @@
|
|
|
48
45
|
"web-tree-sitter": "^0.24.4"
|
|
49
46
|
},
|
|
50
47
|
"devDependencies": {
|
|
51
|
-
"@
|
|
48
|
+
"@types/bun": "^1.3.5",
|
|
52
49
|
"@types/js-yaml": "^4.0.9",
|
|
53
50
|
"@types/node": "^22.10.2",
|
|
54
51
|
"@types/picomatch": "^3.0.1",
|
package/README
DELETED
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
# agentmap
|
|
2
|
-
|
|
3
|
-
A compact, YAML-based inventory of your codebase, intended to be prepended to a coding agent's context at session start.
|
|
4
|
-
|
|
5
|
-
## Purpose
|
|
6
|
-
|
|
7
|
-
- Give the agent a fast, structured overview of files and responsibilities
|
|
8
|
-
- Provide jump targets via top-level `defs` (functions/classes with line numbers)
|
|
9
|
-
|
|
10
|
-
## Installation
|
|
11
|
-
|
|
12
|
-
```bash
|
|
13
|
-
npm install agentmap
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## CLI Usage
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
# Map current directory
|
|
20
|
-
npx agentmap
|
|
21
|
-
|
|
22
|
-
# Map specific directory
|
|
23
|
-
npx agentmap ./src
|
|
24
|
-
|
|
25
|
-
# Write to file
|
|
26
|
-
npx agentmap -o map.yaml
|
|
27
|
-
|
|
28
|
-
# Ignore patterns
|
|
29
|
-
npx agentmap --ignore "dist/**" --ignore "**/test/**"
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
### Options
|
|
33
|
-
|
|
34
|
-
```
|
|
35
|
-
-o, --output <file> Write output to file (default: stdout)
|
|
36
|
-
-i, --ignore <pattern> Ignore pattern (can be repeated)
|
|
37
|
-
-h, --help Show help
|
|
38
|
-
-v, --version Show version
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
## Library Usage
|
|
42
|
-
|
|
43
|
-
```typescript
|
|
44
|
-
import { generateMap, generateMapYaml } from 'agentmap'
|
|
45
|
-
|
|
46
|
-
// Get as object
|
|
47
|
-
const map = await generateMap({ dir: './src' })
|
|
48
|
-
|
|
49
|
-
// Get as YAML string
|
|
50
|
-
const yaml = await generateMapYaml({ dir: './src' })
|
|
51
|
-
|
|
52
|
-
// With ignore patterns
|
|
53
|
-
const yaml = await generateMapYaml({
|
|
54
|
-
dir: './src',
|
|
55
|
-
ignore: ['**/test/**', '**/*.spec.ts']
|
|
56
|
-
})
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
## Marking Files
|
|
60
|
-
|
|
61
|
-
Only files with the `@agentmap` marker comment are included. Add it to the top of files you want in the map:
|
|
62
|
-
|
|
63
|
-
```typescript
|
|
64
|
-
// @agentmap
|
|
65
|
-
// CLI entrypoint.
|
|
66
|
-
// Parses args, wires deps, calls into lib/.
|
|
67
|
-
|
|
68
|
-
export function main() { ... }
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
```python
|
|
72
|
-
# @agentmap
|
|
73
|
-
# Parsing + normalization utilities.
|
|
74
|
-
|
|
75
|
-
def parse_input(): ...
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
Block comments also work:
|
|
79
|
-
|
|
80
|
-
```typescript
|
|
81
|
-
/**
|
|
82
|
-
* @agentmap
|
|
83
|
-
* Core data structures.
|
|
84
|
-
*/
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
## Output Format
|
|
88
|
-
|
|
89
|
-
```yaml
|
|
90
|
-
my-project:
|
|
91
|
-
src:
|
|
92
|
-
main.py:
|
|
93
|
-
desc: |
|
|
94
|
-
CLI entrypoint.
|
|
95
|
-
Parses args, wires deps, calls into lib/.
|
|
96
|
-
defs:
|
|
97
|
-
main: 12
|
|
98
|
-
parse_args: 34
|
|
99
|
-
App: 58
|
|
100
|
-
lib:
|
|
101
|
-
parse.py:
|
|
102
|
-
desc: |
|
|
103
|
-
Parsing + normalization utilities.
|
|
104
|
-
defs:
|
|
105
|
-
parse_input: 10
|
|
106
|
-
ASTNode: 41
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
### Format Rules
|
|
110
|
-
|
|
111
|
-
- Directories are YAML mappings
|
|
112
|
-
- Files have optional `desc` (description) and `defs` (definitions)
|
|
113
|
-
- `desc` uses YAML literal block scalar (`|`) for multi-line text
|
|
114
|
-
- `defs` maps symbol names to 1-based line numbers
|
|
115
|
-
- Only top-level `function` and `class` definitions are included
|
|
116
|
-
|
|
117
|
-
## Supported Languages
|
|
118
|
-
|
|
119
|
-
| Language | Extensions |
|
|
120
|
-
|------------|---------------------------|
|
|
121
|
-
| TypeScript | .ts .tsx .mts .cts |
|
|
122
|
-
| JavaScript | .js .jsx .mjs .cjs |
|
|
123
|
-
| Python | .py .pyi |
|
|
124
|
-
| Rust | .rs |
|
|
125
|
-
| Go | .go |
|
|
126
|
-
|
|
127
|
-
## OpenCode Plugin
|
|
128
|
-
|
|
129
|
-
agentmap includes a plugin for [OpenCode](https://opencode.ai) that automatically injects the codebase map into the system prompt at session start.
|
|
130
|
-
|
|
131
|
-
Add the plugin to your `opencode.json`:
|
|
132
|
-
|
|
133
|
-
```json
|
|
134
|
-
{
|
|
135
|
-
"plugin": ["agentmap/opencode"]
|
|
136
|
-
}
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
The plugin will scan your project for files with `@agentmap` markers and inject the map into the system prompt wrapped in `<agentmap>` tags:
|
|
140
|
-
|
|
141
|
-
```xml
|
|
142
|
-
<agentmap>
|
|
143
|
-
These are some of the files in the repo with their descriptions and definition locations:
|
|
144
|
-
|
|
145
|
-
my-project:
|
|
146
|
-
src:
|
|
147
|
-
main.ts:
|
|
148
|
-
desc: CLI entrypoint.
|
|
149
|
-
defs:
|
|
150
|
-
main: 12
|
|
151
|
-
</agentmap>
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
This gives the AI agent immediate context about your codebase structure without needing to explore files first.
|
|
155
|
-
|
|
156
|
-
## License
|
|
157
|
-
|
|
158
|
-
MIT
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/opencode/plugin.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAGjD,eAAO,MAAM,cAAc,EAAE,MAa5B,CAAA"}
|
package/dist/opencode/plugin.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
// @agentmap
|
|
2
|
-
// OpenCode plugin that injects codebase map into system prompt.
|
|
3
|
-
import { generateMapYaml } from '../index.js';
|
|
4
|
-
export const AgentMapPlugin = async ({ directory }) => {
|
|
5
|
-
return {
|
|
6
|
-
'experimental.chat.system.transform': async (_input, output) => {
|
|
7
|
-
const yaml = await generateMapYaml({ dir: directory });
|
|
8
|
-
if (!yaml.trim())
|
|
9
|
-
return;
|
|
10
|
-
output.system.push(`<agentmap>
|
|
11
|
-
These are some of the files in the repo with their descriptions and definition locations:
|
|
12
|
-
|
|
13
|
-
${yaml}
|
|
14
|
-
</agentmap>`);
|
|
15
|
-
},
|
|
16
|
-
};
|
|
17
|
-
};
|
|
18
|
-
//# sourceMappingURL=plugin.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/opencode/plugin.ts"],"names":[],"mappings":"AAAA,YAAY;AACZ,gEAAgE;AAGhE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7C,MAAM,CAAC,MAAM,cAAc,GAAW,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;IAC5D,OAAO;QACL,oCAAoC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YAC7D,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAA;YACtD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,OAAM;YAExB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;;;EAGvB,IAAI;YACM,CAAC,CAAA;QACT,CAAC;KACF,CAAA;AACH,CAAC,CAAA"}
|