cawdex 1.35.75 → 1.35.77
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 +5 -5
- package/bin/anycode.js +2 -2
- package/bin/cawdex.js +408 -408
- package/bin/ecc-hooks.cjs +11 -11
- package/dist/agents-md.d.ts +31 -0
- package/dist/agents-md.js +340 -0
- package/dist/agents-md.js.map +1 -0
- package/dist/agents.js +1424 -1424
- package/dist/api.d.ts +1 -0
- package/dist/api.js +19 -14
- package/dist/api.js.map +1 -1
- package/dist/autonomous-loops.js +287 -287
- package/dist/benchmark-repos.d.ts +31 -0
- package/dist/benchmark-repos.js +234 -8
- package/dist/benchmark-repos.js.map +1 -1
- package/dist/command-palette.js +5 -2
- package/dist/command-palette.js.map +1 -1
- package/dist/compaction.js +8 -8
- package/dist/config.js +57 -36
- package/dist/config.js.map +1 -1
- package/dist/content-engine.js +543 -543
- package/dist/context-brief.d.ts +4 -0
- package/dist/context-brief.js +230 -0
- package/dist/context-brief.js.map +1 -0
- package/dist/cost-tracker.d.ts +33 -14
- package/dist/cost-tracker.js +81 -19
- package/dist/cost-tracker.js.map +1 -1
- package/dist/coverage.js +39 -39
- package/dist/docs-sync.js +98 -98
- package/dist/evaluation.js +452 -452
- package/dist/fixed-footer.d.ts +11 -2
- package/dist/fixed-footer.js +115 -26
- package/dist/fixed-footer.js.map +1 -1
- package/dist/git-workflow.js +49 -49
- package/dist/imports.d.ts +126 -0
- package/dist/imports.js +611 -0
- package/dist/imports.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +367 -66
- package/dist/index.js.map +1 -1
- package/dist/inline-suggest.js +136 -12
- package/dist/inline-suggest.js.map +1 -1
- package/dist/live-queue.js +1 -1
- package/dist/live-queue.js.map +1 -1
- package/dist/model-aliases.d.ts +37 -0
- package/dist/model-aliases.js +203 -0
- package/dist/model-aliases.js.map +1 -0
- package/dist/orchestration.js +15 -15
- package/dist/permissions.d.ts +6 -0
- package/dist/permissions.js +53 -0
- package/dist/permissions.js.map +1 -1
- package/dist/pm2-manager.js +26 -26
- package/dist/query.d.ts +0 -1
- package/dist/query.js +105 -41
- package/dist/query.js.map +1 -1
- package/dist/refactor.js +87 -87
- package/dist/repo-command.js +7 -1
- package/dist/repo-command.js.map +1 -1
- package/dist/search-first.js +92 -92
- package/dist/skill-create.js +100 -100
- package/dist/stitch.js +1 -1
- package/dist/system-prompt.d.ts +2 -1
- package/dist/system-prompt.js +10 -5
- package/dist/system-prompt.js.map +1 -1
- package/dist/tools/github-repo-digest.d.ts +1 -1
- package/dist/tools/github-repo-digest.js +38 -6
- package/dist/tools/github-repo-digest.js.map +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/types.js.map +1 -1
- package/dist/verification.js +55 -55
- package/package.json +1 -1
- package/resources/__init__.py +1 -1
- package/resources/exgentic/cawdex_agent/README.md +114 -114
- package/resources/exgentic/cawdex_agent/__init__.py +5 -5
- package/resources/exgentic/cawdex_agent/agent.py +605 -605
- package/resources/exgentic/cawdex_agent/requirements.txt +2 -2
- package/resources/exgentic/cawdex_agent/setup.sh +21 -21
- package/resources/exgentic/cawdex_agent/utils.py +1061 -1061
- package/resources/hal/cawdex_agent/README.md +24 -24
- package/resources/hal/cawdex_agent/__init__.py +1 -1
- package/resources/hal/cawdex_agent/main.py +550 -550
- package/resources/hal/cawdex_agent/requirements.txt +2 -2
- package/resources/kbench/cawdex_agent/README.md +107 -107
- package/resources/kbench/cawdex_agent/adapter.manifest.json +19 -19
- package/resources/kbench/cawdex_agent/runner.mjs +753 -753
- package/resources/open_agent_leaderboard/cawdex-agent-card.md +119 -119
- package/resources/terminal_bench/__init__.py +1 -1
- package/resources/terminal_bench/cawdex_agent.py +174 -174
- package/resources/terminal_bench/setup.sh +121 -121
package/bin/ecc-hooks.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* ECC-native hook dispatcher for Cawdex.
|
|
3
|
+
* ECC-native hook dispatcher for Cawdex.
|
|
4
4
|
*
|
|
5
|
-
* Reads Cawdex's hook env vars (CAWDEX_EVENT, CAWDEX_TOOL,
|
|
5
|
+
* Reads Cawdex's hook env vars (CAWDEX_EVENT, CAWDEX_TOOL,
|
|
6
6
|
* CAWDEX_TOOL_INPUT, CAWDEX_TOOL_OUTPUT) and runs a single named check.
|
|
7
7
|
*
|
|
8
8
|
* Exit codes:
|
|
@@ -26,7 +26,7 @@ const checkName = process.argv[2] || '';
|
|
|
26
26
|
// don't carry input, like SessionStart); a NON-empty payload that
|
|
27
27
|
// fails to parse is treated as a security event and the hook
|
|
28
28
|
// blocks. Fail closed > fail open.
|
|
29
|
-
const rawToolInput = process.env.CAWDEX_TOOL_INPUT || '';
|
|
29
|
+
const rawToolInput = process.env.CAWDEX_TOOL_INPUT || '';
|
|
30
30
|
let toolInput = {};
|
|
31
31
|
if (rawToolInput.length > 0) {
|
|
32
32
|
try {
|
|
@@ -37,8 +37,8 @@ if (rawToolInput.length > 0) {
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
const tool = process.env.CAWDEX_TOOL || '';
|
|
41
|
-
const cwd = process.env.CAWDEX_CWD || process.cwd();
|
|
40
|
+
const tool = process.env.CAWDEX_TOOL || '';
|
|
41
|
+
const cwd = process.env.CAWDEX_CWD || process.cwd();
|
|
42
42
|
|
|
43
43
|
// ── Helpers ─────────────────────────────────────────────
|
|
44
44
|
function bashCommand() {
|
|
@@ -209,13 +209,13 @@ const checks = {
|
|
|
209
209
|
*/
|
|
210
210
|
'gateguard': () => {
|
|
211
211
|
// ── Disable knob ─────────────────────────────────────
|
|
212
|
-
// Documented in the hint/block message below.
|
|
213
|
-
const disableEnv = (process.env.CAWDEX_GATEGUARD || '').trim();
|
|
212
|
+
// Documented in the hint/block message below.
|
|
213
|
+
const disableEnv = (process.env.CAWDEX_GATEGUARD || '').trim();
|
|
214
214
|
if (/^(off|false|0|no|disabled?)$/i.test(disableEnv)) return ok();
|
|
215
215
|
|
|
216
216
|
// ── Mode selection ───────────────────────────────────
|
|
217
217
|
// Pick warn (new default) vs block (legacy strict) vs off.
|
|
218
|
-
const modeEnv = (process.env.CAWDEX_GATEGUARD_MODE || 'warn').toLowerCase().trim();
|
|
218
|
+
const modeEnv = (process.env.CAWDEX_GATEGUARD_MODE || 'warn').toLowerCase().trim();
|
|
219
219
|
if (modeEnv === 'off') return ok();
|
|
220
220
|
const strict = modeEnv === 'block' || modeEnv === 'strict';
|
|
221
221
|
|
|
@@ -226,7 +226,7 @@ const checks = {
|
|
|
226
226
|
// yolo would mean the safest setting in cawdex is more
|
|
227
227
|
// pedantic than the most-cautious, which is backwards. Silent
|
|
228
228
|
// no-op so the user gets the unblocked flow they asked for.
|
|
229
|
-
const perm = (process.env.CAWDEX_PERMISSION_MODE || '').toLowerCase().trim();
|
|
229
|
+
const perm = (process.env.CAWDEX_PERMISSION_MODE || '').toLowerCase().trim();
|
|
230
230
|
if (perm === 'yolo') return ok();
|
|
231
231
|
|
|
232
232
|
const fs = require('fs');
|
|
@@ -256,7 +256,7 @@ const checks = {
|
|
|
256
256
|
// model-controlled file paths). Allow only [A-Za-z0-9_-], length
|
|
257
257
|
// <=64. Anything else falls back to "unknown" — degraded UX
|
|
258
258
|
// (gateguard tracking won't persist), not a security breach.
|
|
259
|
-
const rawSessionId = process.env.CAWDEX_SESSION_ID || '';
|
|
259
|
+
const rawSessionId = process.env.CAWDEX_SESSION_ID || '';
|
|
260
260
|
const sessionId = /^[A-Za-z0-9_-]{1,64}$/.test(rawSessionId) ? rawSessionId : 'unknown';
|
|
261
261
|
const stateDir = pathMod.join(os.homedir(), '.cawdex', 'state', 'gateguard');
|
|
262
262
|
const stateFile = pathMod.join(stateDir, `${sessionId}.json`);
|
|
@@ -409,7 +409,7 @@ const checks = {
|
|
|
409
409
|
const fs = require('fs');
|
|
410
410
|
const pathMod = require('path');
|
|
411
411
|
const os = require('os');
|
|
412
|
-
const rawSessionId = process.env.CAWDEX_SESSION_ID || '';
|
|
412
|
+
const rawSessionId = process.env.CAWDEX_SESSION_ID || '';
|
|
413
413
|
const sessionId = /^[A-Za-z0-9_-]{1,64}$/.test(rawSessionId) ? rawSessionId : 'unknown';
|
|
414
414
|
const stateDir = pathMod.join(os.homedir(), '.cawdex', 'state', 'quality-hint');
|
|
415
415
|
const stateFile = pathMod.join(stateDir, `${sessionId}.json`);
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Tool } from './tools/types.js';
|
|
2
|
+
export type AgentsSectionKind = 'model' | 'tool';
|
|
3
|
+
export interface AgentsScopedSection {
|
|
4
|
+
kind: AgentsSectionKind;
|
|
5
|
+
selector: string;
|
|
6
|
+
content: string;
|
|
7
|
+
}
|
|
8
|
+
export interface AgentsFileInstructions {
|
|
9
|
+
filePath: string;
|
|
10
|
+
relativePath: string;
|
|
11
|
+
global: string;
|
|
12
|
+
modelSections: AgentsScopedSection[];
|
|
13
|
+
toolSections: AgentsScopedSection[];
|
|
14
|
+
truncated: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface AgentsInstructionSet {
|
|
17
|
+
root: string;
|
|
18
|
+
cwd: string;
|
|
19
|
+
files: AgentsFileInstructions[];
|
|
20
|
+
}
|
|
21
|
+
export declare function findAgentsRoot(cwd?: string): string;
|
|
22
|
+
export declare function parseAgentsMarkdown(content: string): {
|
|
23
|
+
global: string;
|
|
24
|
+
modelSections: AgentsScopedSection[];
|
|
25
|
+
toolSections: AgentsScopedSection[];
|
|
26
|
+
};
|
|
27
|
+
export declare function discoverAgentsInstructions(cwd?: string): AgentsInstructionSet;
|
|
28
|
+
export declare function selectorMatches(selector: string, target: string): boolean;
|
|
29
|
+
export declare function buildAgentsInstructionsPrompt(cwd: string, model: string): string;
|
|
30
|
+
export declare function applyAgentToolInstructions(tools: Tool[], cwd: string, _model: string): Tool[];
|
|
31
|
+
export declare function formatAgentsInstructionsReport(cwd: string, model: string, tools?: Tool[]): string;
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
import { execFileSync } from 'node:child_process';
|
|
2
|
+
import { existsSync, readFileSync, statSync } from 'node:fs';
|
|
3
|
+
import { isAbsolute, join, relative, resolve } from 'node:path';
|
|
4
|
+
const AGENTS_FILE_NAMES = ['AGENTS.md', 'agents.md'];
|
|
5
|
+
const MAX_FILE_CHARS = 50_000;
|
|
6
|
+
const MAX_SECTION_CHARS = 4_000;
|
|
7
|
+
const MAX_PROMPT_CHARS = 12_000;
|
|
8
|
+
const MAX_TOOL_INSTRUCTION_CHARS = 3_000;
|
|
9
|
+
function normalizeLines(value) {
|
|
10
|
+
return value.replace(/\r\n?/g, '\n');
|
|
11
|
+
}
|
|
12
|
+
function trimBlock(value) {
|
|
13
|
+
const lines = normalizeLines(value).split('\n');
|
|
14
|
+
while (lines.length > 0 && lines[0].trim() === '')
|
|
15
|
+
lines.shift();
|
|
16
|
+
while (lines.length > 0 && lines[lines.length - 1].trim() === '')
|
|
17
|
+
lines.pop();
|
|
18
|
+
return lines.join('\n');
|
|
19
|
+
}
|
|
20
|
+
function capText(value, maxChars) {
|
|
21
|
+
if (value.length <= maxChars)
|
|
22
|
+
return value;
|
|
23
|
+
return `${value.slice(0, Math.max(0, maxChars - 38)).trimEnd()}\n[truncated by Cawdex for prompt budget]`;
|
|
24
|
+
}
|
|
25
|
+
function isWithin(parent, child) {
|
|
26
|
+
const rel = relative(resolve(parent), resolve(child));
|
|
27
|
+
return rel === '' || (!rel.startsWith('..') && !isAbsolute(rel));
|
|
28
|
+
}
|
|
29
|
+
function findGitRootByCommand(cwd) {
|
|
30
|
+
try {
|
|
31
|
+
const out = execFileSync('git', ['rev-parse', '--show-toplevel'], {
|
|
32
|
+
cwd,
|
|
33
|
+
encoding: 'utf8',
|
|
34
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
35
|
+
}).trim();
|
|
36
|
+
if (!out)
|
|
37
|
+
return null;
|
|
38
|
+
const root = resolve(out);
|
|
39
|
+
return isWithin(root, cwd) ? root : null;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function findGitRootByWalking(cwd) {
|
|
46
|
+
let cur = resolve(cwd);
|
|
47
|
+
while (true) {
|
|
48
|
+
const dotGit = join(cur, '.git');
|
|
49
|
+
if (existsSync(dotGit))
|
|
50
|
+
return cur;
|
|
51
|
+
const parent = resolve(cur, '..');
|
|
52
|
+
if (parent === cur)
|
|
53
|
+
return null;
|
|
54
|
+
cur = parent;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function normalizeCwd(cwd) {
|
|
58
|
+
const resolved = resolve(cwd || process.cwd());
|
|
59
|
+
try {
|
|
60
|
+
const stat = statSync(resolved);
|
|
61
|
+
return stat.isDirectory() ? resolved : resolve(resolved, '..');
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return resolved;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export function findAgentsRoot(cwd = process.cwd()) {
|
|
68
|
+
const normalized = normalizeCwd(cwd);
|
|
69
|
+
return findGitRootByWalking(normalized) ?? findGitRootByCommand(normalized) ?? normalized;
|
|
70
|
+
}
|
|
71
|
+
function dirsFromRootToCwd(root, cwd) {
|
|
72
|
+
const normalizedRoot = resolve(root);
|
|
73
|
+
const normalizedCwd = normalizeCwd(cwd);
|
|
74
|
+
if (!isWithin(normalizedRoot, normalizedCwd))
|
|
75
|
+
return [normalizedCwd];
|
|
76
|
+
const dirs = [normalizedRoot];
|
|
77
|
+
const rel = relative(normalizedRoot, normalizedCwd);
|
|
78
|
+
if (!rel)
|
|
79
|
+
return dirs;
|
|
80
|
+
let cur = normalizedRoot;
|
|
81
|
+
for (const part of rel.split(/[\\/]+/).filter(Boolean)) {
|
|
82
|
+
cur = join(cur, part);
|
|
83
|
+
dirs.push(cur);
|
|
84
|
+
}
|
|
85
|
+
return dirs;
|
|
86
|
+
}
|
|
87
|
+
function firstAgentsFile(dir) {
|
|
88
|
+
for (const name of AGENTS_FILE_NAMES) {
|
|
89
|
+
const candidate = join(dir, name);
|
|
90
|
+
try {
|
|
91
|
+
if (existsSync(candidate) && statSync(candidate).isFile())
|
|
92
|
+
return candidate;
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// Ignore unreadable or racing files.
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
function parseScopedHeading(line) {
|
|
101
|
+
const match = /^(#{1,6})\s+(Model|Tool)\s*:\s*(.+?)\s*#*\s*$/i.exec(line.trimEnd());
|
|
102
|
+
if (!match)
|
|
103
|
+
return null;
|
|
104
|
+
const selector = match[3].trim();
|
|
105
|
+
if (!selector)
|
|
106
|
+
return null;
|
|
107
|
+
return {
|
|
108
|
+
level: match[1].length,
|
|
109
|
+
kind: match[2].toLowerCase(),
|
|
110
|
+
selector,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
function parseAnyHeading(line) {
|
|
114
|
+
const match = /^(#{1,6})\s+/.exec(line.trimEnd());
|
|
115
|
+
return match ? { level: match[1].length } : null;
|
|
116
|
+
}
|
|
117
|
+
export function parseAgentsMarkdown(content) {
|
|
118
|
+
const globalLines = [];
|
|
119
|
+
const modelSections = [];
|
|
120
|
+
const toolSections = [];
|
|
121
|
+
let active = null;
|
|
122
|
+
const flushActive = () => {
|
|
123
|
+
if (!active)
|
|
124
|
+
return;
|
|
125
|
+
const content = capText(trimBlock(active.lines.join('\n')), MAX_SECTION_CHARS);
|
|
126
|
+
if (content) {
|
|
127
|
+
const section = {
|
|
128
|
+
kind: active.kind,
|
|
129
|
+
selector: active.selector,
|
|
130
|
+
content,
|
|
131
|
+
};
|
|
132
|
+
if (active.kind === 'model')
|
|
133
|
+
modelSections.push(section);
|
|
134
|
+
else
|
|
135
|
+
toolSections.push(section);
|
|
136
|
+
}
|
|
137
|
+
active = null;
|
|
138
|
+
};
|
|
139
|
+
for (const line of normalizeLines(content).split('\n')) {
|
|
140
|
+
const scopedHeading = parseScopedHeading(line);
|
|
141
|
+
if (scopedHeading) {
|
|
142
|
+
flushActive();
|
|
143
|
+
active = {
|
|
144
|
+
kind: scopedHeading.kind,
|
|
145
|
+
selector: scopedHeading.selector,
|
|
146
|
+
level: scopedHeading.level,
|
|
147
|
+
lines: [],
|
|
148
|
+
};
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
const heading = parseAnyHeading(line);
|
|
152
|
+
if (active && heading && heading.level <= active.level) {
|
|
153
|
+
flushActive();
|
|
154
|
+
}
|
|
155
|
+
if (active)
|
|
156
|
+
active.lines.push(line);
|
|
157
|
+
else
|
|
158
|
+
globalLines.push(line);
|
|
159
|
+
}
|
|
160
|
+
flushActive();
|
|
161
|
+
return {
|
|
162
|
+
global: capText(trimBlock(globalLines.join('\n')), MAX_SECTION_CHARS),
|
|
163
|
+
modelSections,
|
|
164
|
+
toolSections,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
function readAgentsFile(filePath, root) {
|
|
168
|
+
try {
|
|
169
|
+
const raw = readFileSync(filePath, 'utf8');
|
|
170
|
+
const truncated = raw.length > MAX_FILE_CHARS;
|
|
171
|
+
const parsed = parseAgentsMarkdown(raw.slice(0, MAX_FILE_CHARS));
|
|
172
|
+
const rel = relative(root, filePath).replace(/\\/g, '/') || filePath;
|
|
173
|
+
return {
|
|
174
|
+
filePath,
|
|
175
|
+
relativePath: rel,
|
|
176
|
+
truncated,
|
|
177
|
+
...parsed,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
export function discoverAgentsInstructions(cwd = process.cwd()) {
|
|
185
|
+
const normalizedCwd = normalizeCwd(cwd);
|
|
186
|
+
const root = findAgentsRoot(normalizedCwd);
|
|
187
|
+
const files = [];
|
|
188
|
+
for (const dir of dirsFromRootToCwd(root, normalizedCwd)) {
|
|
189
|
+
const filePath = firstAgentsFile(dir);
|
|
190
|
+
if (!filePath)
|
|
191
|
+
continue;
|
|
192
|
+
const parsed = readAgentsFile(filePath, root);
|
|
193
|
+
if (parsed)
|
|
194
|
+
files.push(parsed);
|
|
195
|
+
}
|
|
196
|
+
return { root, cwd: normalizedCwd, files };
|
|
197
|
+
}
|
|
198
|
+
function compileSlashRegex(value) {
|
|
199
|
+
if (!value.startsWith('/'))
|
|
200
|
+
return null;
|
|
201
|
+
const lastSlash = value.lastIndexOf('/');
|
|
202
|
+
if (lastSlash <= 0)
|
|
203
|
+
return null;
|
|
204
|
+
try {
|
|
205
|
+
return new RegExp(value.slice(1, lastSlash), value.slice(lastSlash + 1));
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
function selectorParts(selector) {
|
|
212
|
+
return selector.split(',').map((part) => part.trim()).filter(Boolean);
|
|
213
|
+
}
|
|
214
|
+
export function selectorMatches(selector, target) {
|
|
215
|
+
const normalizedTarget = target.trim();
|
|
216
|
+
if (!normalizedTarget)
|
|
217
|
+
return false;
|
|
218
|
+
for (const part of selectorParts(selector)) {
|
|
219
|
+
if (part.toLowerCase() === normalizedTarget.toLowerCase())
|
|
220
|
+
return true;
|
|
221
|
+
const slashRegex = compileSlashRegex(part);
|
|
222
|
+
if (slashRegex) {
|
|
223
|
+
if (slashRegex.test(normalizedTarget))
|
|
224
|
+
return true;
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
try {
|
|
228
|
+
if (new RegExp(part, 'i').test(normalizedTarget))
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
catch {
|
|
232
|
+
// Invalid regex-like selectors fall back to case-insensitive exact
|
|
233
|
+
// matching above. This keeps a typo from breaking startup.
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
function matchingModelSections(file, model) {
|
|
239
|
+
return file.modelSections.filter((section) => selectorMatches(section.selector, model));
|
|
240
|
+
}
|
|
241
|
+
function collectPromptBlocks(set, model) {
|
|
242
|
+
const blocks = [];
|
|
243
|
+
for (const file of set.files) {
|
|
244
|
+
if (file.global) {
|
|
245
|
+
blocks.push(`## ${file.relativePath}\n${file.global}${file.truncated ? '\n[AGENTS.md file was truncated before parsing]' : ''}`);
|
|
246
|
+
}
|
|
247
|
+
for (const section of matchingModelSections(file, model)) {
|
|
248
|
+
blocks.push(`## ${file.relativePath} - Model: ${section.selector}\n${section.content}`);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return blocks;
|
|
252
|
+
}
|
|
253
|
+
export function buildAgentsInstructionsPrompt(cwd, model) {
|
|
254
|
+
const set = discoverAgentsInstructions(cwd);
|
|
255
|
+
const blocks = collectPromptBlocks(set, model);
|
|
256
|
+
if (blocks.length === 0)
|
|
257
|
+
return '';
|
|
258
|
+
const body = capText(blocks.join('\n\n'), MAX_PROMPT_CHARS);
|
|
259
|
+
return `\n# AGENTS.md Instructions\n` +
|
|
260
|
+
`Repo-local AGENTS.md instructions were discovered from repository root to current directory. ` +
|
|
261
|
+
`Follow them when they do not conflict with the user's latest request, Cawdex safety rules, permissions, or current file evidence. ` +
|
|
262
|
+
`Later files are closer to the current directory and take precedence over earlier files when they conflict. ` +
|
|
263
|
+
`Tool-scoped sections are attached to matching tool descriptions.\n\n` +
|
|
264
|
+
body + '\n';
|
|
265
|
+
}
|
|
266
|
+
function collectToolInstructions(set, toolName) {
|
|
267
|
+
const entries = [];
|
|
268
|
+
for (const file of set.files) {
|
|
269
|
+
for (const section of file.toolSections) {
|
|
270
|
+
if (!selectorMatches(section.selector, toolName))
|
|
271
|
+
continue;
|
|
272
|
+
entries.push(`From ${file.relativePath} (Tool: ${section.selector}):\n${section.content}`);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
return entries;
|
|
276
|
+
}
|
|
277
|
+
export function applyAgentToolInstructions(tools, cwd, _model) {
|
|
278
|
+
const set = discoverAgentsInstructions(cwd);
|
|
279
|
+
if (set.files.length === 0)
|
|
280
|
+
return tools;
|
|
281
|
+
let changed = false;
|
|
282
|
+
const scopedTools = tools.map((tool) => {
|
|
283
|
+
const entries = collectToolInstructions(set, tool.name);
|
|
284
|
+
if (entries.length === 0)
|
|
285
|
+
return tool;
|
|
286
|
+
changed = true;
|
|
287
|
+
const instructionText = capText(entries.join('\n\n'), MAX_TOOL_INSTRUCTION_CHARS);
|
|
288
|
+
return {
|
|
289
|
+
...tool,
|
|
290
|
+
description: `${tool.description}\n\n` +
|
|
291
|
+
`AGENTS.md instructions for this tool, ordered from repository root to current directory. ` +
|
|
292
|
+
`Follow these only when compatible with user instructions, Cawdex safety rules, and tool permissions:\n` +
|
|
293
|
+
instructionText,
|
|
294
|
+
};
|
|
295
|
+
});
|
|
296
|
+
return changed ? scopedTools : tools;
|
|
297
|
+
}
|
|
298
|
+
export function formatAgentsInstructionsReport(cwd, model, tools = []) {
|
|
299
|
+
const set = discoverAgentsInstructions(cwd);
|
|
300
|
+
if (set.files.length === 0) {
|
|
301
|
+
return `\n No AGENTS.md files found from ${set.root} to ${set.cwd}.`;
|
|
302
|
+
}
|
|
303
|
+
const toolNames = tools.map((tool) => tool.name);
|
|
304
|
+
const lines = [
|
|
305
|
+
'',
|
|
306
|
+
` AGENTS.md files (${set.files.length})`,
|
|
307
|
+
` Root: ${set.root}`,
|
|
308
|
+
` CWD: ${set.cwd}`,
|
|
309
|
+
` Model: ${model}`,
|
|
310
|
+
'',
|
|
311
|
+
];
|
|
312
|
+
for (const file of set.files) {
|
|
313
|
+
const matchingModels = matchingModelSections(file, model);
|
|
314
|
+
const matchingTools = file.toolSections
|
|
315
|
+
.map((section) => ({
|
|
316
|
+
selector: section.selector,
|
|
317
|
+
tools: toolNames.filter((name) => selectorMatches(section.selector, name)),
|
|
318
|
+
}))
|
|
319
|
+
.filter((entry) => entry.tools.length > 0);
|
|
320
|
+
lines.push(` - ${file.relativePath}`);
|
|
321
|
+
if (file.global)
|
|
322
|
+
lines.push(` global: ${file.global.length} chars`);
|
|
323
|
+
if (matchingModels.length > 0) {
|
|
324
|
+
lines.push(` model: ${matchingModels.map((section) => section.selector).join(', ')}`);
|
|
325
|
+
}
|
|
326
|
+
if (matchingTools.length > 0) {
|
|
327
|
+
for (const entry of matchingTools) {
|
|
328
|
+
lines.push(` tool: ${entry.selector} -> ${entry.tools.join(', ')}`);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
if (file.truncated)
|
|
332
|
+
lines.push(' note: file was truncated before parsing');
|
|
333
|
+
if (!file.global && matchingModels.length === 0 && matchingTools.length === 0) {
|
|
334
|
+
lines.push(' no active global/model/tool sections for this model and tool set');
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
lines.push('');
|
|
338
|
+
return lines.join('\n');
|
|
339
|
+
}
|
|
340
|
+
//# sourceMappingURL=agents-md.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents-md.js","sourceRoot":"","sources":["../src/agents-md.ts"],"names":[],"mappings":"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"}
|