greprag 5.65.2 → 5.65.4
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/codex-chip-hooks.js +2 -2
- package/dist/codex-chip-hooks.js.map +1 -1
- package/dist/commands/agent-doctrine-file.d.ts +27 -9
- package/dist/commands/agent-doctrine-file.js +74 -47
- package/dist/commands/agent-doctrine-file.js.map +1 -1
- package/dist/commands/agents.d.ts +2 -2
- package/dist/commands/agents.js +167 -48
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/codex-chip/command.js +4 -2
- package/dist/commands/codex-chip/command.js.map +1 -1
- package/dist/commands/codex-chip/goals.d.ts +3 -3
- package/dist/commands/codex-chip/goals.js +3 -3
- package/dist/commands/codex-chip/goals.js.map +1 -1
- package/dist/commands/codex-chip/help.d.ts +1 -1
- package/dist/commands/codex-chip/help.js +4 -3
- package/dist/commands/codex-chip/help.js.map +1 -1
- package/dist/commands/codex-chip/model.d.ts +6 -2
- package/dist/commands/codex-chip/model.js +12 -2
- package/dist/commands/codex-chip/model.js.map +1 -1
- package/dist/commands/codex-chip/native.js +2 -2
- package/dist/commands/codex-chip/native.js.map +1 -1
- package/dist/commands/codex-chip/prompt.js +8 -4
- package/dist/commands/codex-chip/prompt.js.map +1 -1
- package/dist/commands/codex-chip/selection.d.ts +5 -4
- package/dist/commands/codex-chip/selection.js +28 -9
- package/dist/commands/codex-chip/selection.js.map +1 -1
- package/dist/commands/codex-model-policy.d.ts +1 -1
- package/dist/commands/codex-model-policy.js +17 -6
- package/dist/commands/codex-model-policy.js.map +1 -1
- package/dist/commands/codex.js +1 -1
- package/dist/commands/init.js +22 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/load-primer-reminder.js +1 -1
- package/dist/commands/load-primer-reminder.js.map +1 -1
- package/dist/commands/load.d.ts +1 -1
- package/dist/commands/load.js +28 -4
- package/dist/commands/load.js.map +1 -1
- package/dist/commands/mechanic-spawn.js +1 -1
- package/dist/commands/mechanic-spawn.js.map +1 -1
- package/dist/commands/opencode-chip-mission.d.ts +4 -4
- package/dist/commands/opencode-chip-mission.js.map +1 -1
- package/dist/commands/opencode-chip-store.d.ts +2 -2
- package/dist/commands/opencode-chip.js +3 -2
- package/dist/commands/opencode-chip.js.map +1 -1
- package/dist/commands/parity.js +1 -1
- package/dist/commands/skill-mirror-reminder.d.ts +3 -4
- package/dist/commands/skill-mirror-reminder.js +13 -8
- package/dist/commands/skill-mirror-reminder.js.map +1 -1
- package/dist/commands/skill.js +35 -0
- package/dist/commands/skill.js.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/native-skill-mirror.d.ts +35 -0
- package/dist/native-skill-mirror.js +413 -0
- package/dist/native-skill-mirror.js.map +1 -0
- package/dist/opencode-plugin.bundle.js +9 -4
- package/dist/skill-mirror-client.d.ts +2 -5
- package/dist/skill-mirror-client.js +18 -6
- package/dist/skill-mirror-client.js.map +1 -1
- package/dist/skill-mirror-files.d.ts +6 -0
- package/dist/skill-mirror-files.js +51 -0
- package/dist/skill-mirror-files.js.map +1 -0
- package/package.json +1 -1
- package/skill/greprag/docs/codex-chip.md +4 -3
- package/skill/templates/chip-leader.md +37 -15
- package/skill/templates/codex-chip-spawn.md +40 -25
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/** Compile GrepRAG skill mirrors into native harness adapter registries. */
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.NATIVE_SKILL_ADAPTER_PLATFORMS = void 0;
|
|
38
|
+
exports.nativeSkillMirrorEnabled = nativeSkillMirrorEnabled;
|
|
39
|
+
exports.nativeSkillRoot = nativeSkillRoot;
|
|
40
|
+
exports.buildNativeSkillAdapter = buildNativeSkillAdapter;
|
|
41
|
+
exports.applyNativeSkillMirror = applyNativeSkillMirror;
|
|
42
|
+
exports.syncNativeSkillMirror = syncNativeSkillMirror;
|
|
43
|
+
exports.nativeSkillMirrorSummary = nativeSkillMirrorSummary;
|
|
44
|
+
const fs = __importStar(require("node:fs"));
|
|
45
|
+
const os = __importStar(require("node:os"));
|
|
46
|
+
const path = __importStar(require("node:path"));
|
|
47
|
+
const skill_mirror_files_1 = require("./skill-mirror-files");
|
|
48
|
+
const SKILL_NAME_RE = /^[A-Za-z0-9._-]{1,64}$/;
|
|
49
|
+
const NATIVE_SKILL_NAME_RE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
50
|
+
const NATIVE_DESCRIPTION_MAX_CHARS = 1024;
|
|
51
|
+
const STATE_FILE = '.greprag-mirror.json';
|
|
52
|
+
exports.NATIVE_SKILL_ADAPTER_PLATFORMS = ['codex', 'opencode'];
|
|
53
|
+
function nativeSkillMirrorEnabled(platform) {
|
|
54
|
+
return platform !== 'claude-code';
|
|
55
|
+
}
|
|
56
|
+
function nativeSkillRoot(platform, homeDir = os.homedir()) {
|
|
57
|
+
if (platform === 'claude-code')
|
|
58
|
+
return path.join(homeDir, '.claude', 'skills');
|
|
59
|
+
if (platform === 'codex')
|
|
60
|
+
return path.join(homeDir, '.codex', 'skills');
|
|
61
|
+
return path.join(homeDir, '.config', 'opencode', 'skills');
|
|
62
|
+
}
|
|
63
|
+
function emptyState() {
|
|
64
|
+
return { version: 1, skills: {} };
|
|
65
|
+
}
|
|
66
|
+
function readState(root) {
|
|
67
|
+
try {
|
|
68
|
+
const parsed = JSON.parse(fs.readFileSync(path.join(root, STATE_FILE), 'utf8'));
|
|
69
|
+
if (parsed?.version === 1 && parsed.skills && typeof parsed.skills === 'object')
|
|
70
|
+
return parsed;
|
|
71
|
+
}
|
|
72
|
+
catch { /* first run or corrupt state: existing directories remain unmanaged */ }
|
|
73
|
+
return emptyState();
|
|
74
|
+
}
|
|
75
|
+
function writeState(root, state) {
|
|
76
|
+
fs.mkdirSync(root, { recursive: true });
|
|
77
|
+
fs.writeFileSync(path.join(root, STATE_FILE), JSON.stringify(state, null, 2) + '\n', 'utf8');
|
|
78
|
+
}
|
|
79
|
+
function targetPath(root, skillName) {
|
|
80
|
+
const target = path.resolve(root, skillName);
|
|
81
|
+
const prefix = path.resolve(root) + path.sep;
|
|
82
|
+
if (!target.startsWith(prefix))
|
|
83
|
+
throw new Error('skill target escapes native root');
|
|
84
|
+
return target;
|
|
85
|
+
}
|
|
86
|
+
function filePath(target, relative) {
|
|
87
|
+
const resolved = path.resolve(target, ...relative.split('/'));
|
|
88
|
+
const prefix = path.resolve(target) + path.sep;
|
|
89
|
+
if (!resolved.startsWith(prefix))
|
|
90
|
+
throw new Error('skill file escapes target directory');
|
|
91
|
+
return resolved;
|
|
92
|
+
}
|
|
93
|
+
function readManagedFiles(target, managed) {
|
|
94
|
+
try {
|
|
95
|
+
return managed.files.map(relative => ({
|
|
96
|
+
path: relative,
|
|
97
|
+
content: fs.readFileSync(filePath(target, relative), 'utf8'),
|
|
98
|
+
}));
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function unquote(value) {
|
|
105
|
+
const v = value.trim();
|
|
106
|
+
if (v.length >= 2 && ((v.startsWith('"') && v.endsWith('"'))
|
|
107
|
+
|| (v.startsWith("'") && v.endsWith("'"))))
|
|
108
|
+
return v.slice(1, -1);
|
|
109
|
+
return v;
|
|
110
|
+
}
|
|
111
|
+
function parseDescriptionFromSkillMd(skillMd) {
|
|
112
|
+
const text = (skillMd || '').replace(/\r\n?/g, '\n');
|
|
113
|
+
const match = /^---\n([\s\S]*?)\n---(?:\n|$)/.exec(text);
|
|
114
|
+
const body = match ? text.slice(match[0].length) : text;
|
|
115
|
+
if (match) {
|
|
116
|
+
const lines = match[1].split('\n');
|
|
117
|
+
for (let i = 0; i < lines.length; i++) {
|
|
118
|
+
const key = /^(\s*)description:\s*(.*)$/.exec(lines[i]);
|
|
119
|
+
if (!key)
|
|
120
|
+
continue;
|
|
121
|
+
const scalar = key[2].trim();
|
|
122
|
+
if (!/^[>|][+-]?$/.test(scalar))
|
|
123
|
+
return unquote(scalar).trim();
|
|
124
|
+
const keyIndent = key[1].length;
|
|
125
|
+
const block = [];
|
|
126
|
+
for (let j = i + 1; j < lines.length; j++) {
|
|
127
|
+
const line = lines[j];
|
|
128
|
+
const indent = /^\s*/.exec(line)?.[0].length ?? 0;
|
|
129
|
+
if (line.trim() && indent <= keyIndent)
|
|
130
|
+
break;
|
|
131
|
+
block.push(line);
|
|
132
|
+
}
|
|
133
|
+
const nonEmpty = block.filter(line => line.trim());
|
|
134
|
+
const blockIndent = nonEmpty.length
|
|
135
|
+
? Math.min(...nonEmpty.map(line => /^\s*/.exec(line)?.[0].length ?? 0))
|
|
136
|
+
: 0;
|
|
137
|
+
const dedented = block.map(line => line.trim() ? line.slice(blockIndent).trimEnd() : '');
|
|
138
|
+
const description = scalar.startsWith('>')
|
|
139
|
+
? dedented.join('\n').split(/\n{2,}/).map(p => p.replace(/\n/g, ' ').trim()).join('\n\n')
|
|
140
|
+
: dedented.join('\n').trim();
|
|
141
|
+
return description.trim();
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const lead = body.split('\n')
|
|
145
|
+
.map(line => line.trim())
|
|
146
|
+
.find(line => line && !line.startsWith('#') && !line.startsWith('```') && !line.startsWith('<!--')) || '';
|
|
147
|
+
return lead.trim();
|
|
148
|
+
}
|
|
149
|
+
function adapterDescription(skill) {
|
|
150
|
+
const direct = (skill.triggerDescription || skill.description || '').replace(/\r\n?/g, '\n').trim();
|
|
151
|
+
if (direct)
|
|
152
|
+
return boundedNativeDescription(skill.skillName, direct);
|
|
153
|
+
const skillMd = skill.files.find(file => file.path === 'SKILL.md')?.content || '';
|
|
154
|
+
return boundedNativeDescription(skill.skillName, parseDescriptionFromSkillMd(skillMd));
|
|
155
|
+
}
|
|
156
|
+
function collapseWhitespace(value) {
|
|
157
|
+
return value.replace(/\s+/g, ' ').trim();
|
|
158
|
+
}
|
|
159
|
+
function trimWithMarker(value, max) {
|
|
160
|
+
const text = collapseWhitespace(value);
|
|
161
|
+
if (text.length <= max)
|
|
162
|
+
return text;
|
|
163
|
+
if (max <= 15)
|
|
164
|
+
return text.slice(0, Math.max(0, max)).trimEnd();
|
|
165
|
+
const head = text.slice(0, max - 3);
|
|
166
|
+
const boundary = Math.max(head.lastIndexOf('. '), head.lastIndexOf('; '), head.lastIndexOf(', '), head.lastIndexOf(' '));
|
|
167
|
+
return `${head.slice(0, boundary > 80 ? boundary : head.length).trimEnd()}...`;
|
|
168
|
+
}
|
|
169
|
+
function sectionFrom(value, label) {
|
|
170
|
+
const escaped = label.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
171
|
+
const match = new RegExp(`${escaped}:?\\s*([\\s\\S]*)`, 'i').exec(value);
|
|
172
|
+
if (!match)
|
|
173
|
+
return '';
|
|
174
|
+
return match[1].split(/\n\s*\n(?:NOT for|Requires|Built on|Does NOT|REQUIRES)\b/i)[0].trim();
|
|
175
|
+
}
|
|
176
|
+
function beforeSection(value, label) {
|
|
177
|
+
const index = value.toLowerCase().indexOf(label.toLowerCase());
|
|
178
|
+
return index >= 0 ? value.slice(0, index).trim() : value.trim();
|
|
179
|
+
}
|
|
180
|
+
function boundedNativeDescription(skillName, raw) {
|
|
181
|
+
const normalized = raw.replace(/\r\n?/g, '\n').trim();
|
|
182
|
+
if (!normalized || normalized.length <= NATIVE_DESCRIPTION_MAX_CHARS)
|
|
183
|
+
return normalized;
|
|
184
|
+
const prefix = `Condensed native trigger for ${skillName}; full description: greprag load ${skillName}.`;
|
|
185
|
+
const useWhen = sectionFrom(normalized, 'Use when');
|
|
186
|
+
const notFor = sectionFrom(normalized, 'NOT for');
|
|
187
|
+
const purposeSource = beforeSection(normalized, 'Use when');
|
|
188
|
+
const fixedParts = [prefix];
|
|
189
|
+
const tailParts = [];
|
|
190
|
+
if (useWhen)
|
|
191
|
+
tailParts.push(['Use when', useWhen]);
|
|
192
|
+
if (notFor)
|
|
193
|
+
tailParts.push(['NOT for', notFor]);
|
|
194
|
+
const fixedLength = fixedParts.join('\n\n').length
|
|
195
|
+
+ tailParts.reduce((sum, [label, body]) => sum + `\n\n${label}: ${collapseWhitespace(body)}`.length, 0);
|
|
196
|
+
const purposeBudget = Math.max(160, NATIVE_DESCRIPTION_MAX_CHARS - fixedLength - 12);
|
|
197
|
+
const parts = [
|
|
198
|
+
...fixedParts,
|
|
199
|
+
`Purpose: ${trimWithMarker(purposeSource, purposeBudget)}`,
|
|
200
|
+
...tailParts.map(([label, body]) => `${label}: ${collapseWhitespace(body)}`),
|
|
201
|
+
];
|
|
202
|
+
let rendered = parts.filter(Boolean).join('\n\n');
|
|
203
|
+
if (rendered.length <= NATIVE_DESCRIPTION_MAX_CHARS)
|
|
204
|
+
return rendered;
|
|
205
|
+
const prefixAndUse = [prefix];
|
|
206
|
+
const useBudget = NATIVE_DESCRIPTION_MAX_CHARS - prefix.length - 14;
|
|
207
|
+
if (useWhen)
|
|
208
|
+
prefixAndUse.push(`Use when: ${trimWithMarker(useWhen, useBudget)}`);
|
|
209
|
+
else
|
|
210
|
+
prefixAndUse.push(`Purpose: ${trimWithMarker(normalized, useBudget)}`);
|
|
211
|
+
rendered = prefixAndUse.join('\n\n');
|
|
212
|
+
return rendered.length <= NATIVE_DESCRIPTION_MAX_CHARS
|
|
213
|
+
? rendered
|
|
214
|
+
: trimWithMarker(rendered, NATIVE_DESCRIPTION_MAX_CHARS);
|
|
215
|
+
}
|
|
216
|
+
function yamlLiteral(value) {
|
|
217
|
+
return value.replace(/\r\n?/g, '\n').split('\n').map(line => ` ${line}`).join('\n');
|
|
218
|
+
}
|
|
219
|
+
function renderAdapterBody(platform, skillName, files) {
|
|
220
|
+
const companions = files.map(file => file.path).filter(relative => relative !== 'SKILL.md').sort();
|
|
221
|
+
const harnessArg = `--harness ${platform}`;
|
|
222
|
+
const companionLines = companions.length
|
|
223
|
+
? companions.map(relative => `- \`greprag load ${skillName} ${relative} ${harnessArg}\``).join('\n')
|
|
224
|
+
: '- No companion docs are mirrored into this native adapter.';
|
|
225
|
+
return `# ${skillName}
|
|
226
|
+
|
|
227
|
+
This is a GrepRAG mirrored skill adapter. It exists only to register platform-native activation metadata.
|
|
228
|
+
|
|
229
|
+
## Mandatory Invocation
|
|
230
|
+
|
|
231
|
+
When this skill activates, run:
|
|
232
|
+
|
|
233
|
+
\`\`\`bash
|
|
234
|
+
greprag load ${skillName} ${harnessArg}
|
|
235
|
+
\`\`\`
|
|
236
|
+
|
|
237
|
+
Read and follow that canonical payload before responding or taking action.
|
|
238
|
+
|
|
239
|
+
## Companion Docs
|
|
240
|
+
|
|
241
|
+
${companionLines}
|
|
242
|
+
`;
|
|
243
|
+
}
|
|
244
|
+
function buildNativeSkillAdapter(platform, skill) {
|
|
245
|
+
if (!nativeSkillMirrorEnabled(platform))
|
|
246
|
+
return null;
|
|
247
|
+
if (!NATIVE_SKILL_NAME_RE.test(skill.skillName))
|
|
248
|
+
return null;
|
|
249
|
+
if (!skill.files.some(file => file.path === 'SKILL.md')
|
|
250
|
+
|| !skill.files.every(skill_mirror_files_1.isSafeMirroredSkillFile))
|
|
251
|
+
return null;
|
|
252
|
+
const description = adapterDescription(skill);
|
|
253
|
+
if (!description || description.length > NATIVE_DESCRIPTION_MAX_CHARS)
|
|
254
|
+
return null;
|
|
255
|
+
const content = `---
|
|
256
|
+
name: ${skill.skillName}
|
|
257
|
+
description: |-
|
|
258
|
+
${yamlLiteral(description)}
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
${renderAdapterBody(platform, skill.skillName, skill.files)}`;
|
|
262
|
+
return [{ path: 'SKILL.md', content }];
|
|
263
|
+
}
|
|
264
|
+
function removeTrackedFiles(target, relativeFiles) {
|
|
265
|
+
const directories = new Set();
|
|
266
|
+
for (const relative of relativeFiles) {
|
|
267
|
+
const file = filePath(target, relative);
|
|
268
|
+
try {
|
|
269
|
+
fs.unlinkSync(file);
|
|
270
|
+
}
|
|
271
|
+
catch { /* missing or locked: preserve and continue */ }
|
|
272
|
+
let dir = path.dirname(file);
|
|
273
|
+
while (dir.startsWith(path.resolve(target) + path.sep)) {
|
|
274
|
+
directories.add(dir);
|
|
275
|
+
dir = path.dirname(dir);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
for (const dir of [...directories].sort((a, b) => b.length - a.length)) {
|
|
279
|
+
try {
|
|
280
|
+
fs.rmdirSync(dir);
|
|
281
|
+
}
|
|
282
|
+
catch { /* nonempty directories are preserved */ }
|
|
283
|
+
}
|
|
284
|
+
try {
|
|
285
|
+
fs.rmdirSync(target);
|
|
286
|
+
}
|
|
287
|
+
catch { /* nonempty target is preserved */ }
|
|
288
|
+
}
|
|
289
|
+
/** Apply a native adapter snapshot. Existing non-GrepRAG directories are never touched. */
|
|
290
|
+
function applyNativeSkillMirror(params) {
|
|
291
|
+
if (!nativeSkillMirrorEnabled(params.platform)) {
|
|
292
|
+
return {
|
|
293
|
+
installed: 0, updated: 0, current: 0, removed: 0,
|
|
294
|
+
skipped: params.skills.length, blocked: 0,
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
const root = nativeSkillRoot(params.platform, params.homeDir);
|
|
298
|
+
const state = readState(root);
|
|
299
|
+
const result = {
|
|
300
|
+
installed: 0, updated: 0, current: 0, removed: 0, skipped: 0, blocked: 0,
|
|
301
|
+
};
|
|
302
|
+
const present = new Set();
|
|
303
|
+
for (const skill of params.skills) {
|
|
304
|
+
if (!SKILL_NAME_RE.test(skill.skillName)) {
|
|
305
|
+
result.skipped++;
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
308
|
+
present.add(skill.skillName);
|
|
309
|
+
const adapterFiles = buildNativeSkillAdapter(params.platform, skill);
|
|
310
|
+
if (!adapterFiles) {
|
|
311
|
+
result.skipped++;
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
314
|
+
const target = targetPath(root, skill.skillName);
|
|
315
|
+
const managed = state.skills[skill.skillName];
|
|
316
|
+
if (fs.existsSync(target) && !managed) {
|
|
317
|
+
result.skipped++;
|
|
318
|
+
continue;
|
|
319
|
+
}
|
|
320
|
+
const nextHash = (0, skill_mirror_files_1.computeSkillFileHash)(adapterFiles);
|
|
321
|
+
if (managed) {
|
|
322
|
+
const currentFiles = readManagedFiles(target, managed);
|
|
323
|
+
if (!currentFiles || (0, skill_mirror_files_1.computeSkillFileHash)(currentFiles) !== managed.hash) {
|
|
324
|
+
result.blocked++;
|
|
325
|
+
continue;
|
|
326
|
+
}
|
|
327
|
+
if (managed.hash === nextHash) {
|
|
328
|
+
result.current++;
|
|
329
|
+
continue;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
fs.mkdirSync(target, { recursive: true });
|
|
333
|
+
for (const file of adapterFiles) {
|
|
334
|
+
const destination = filePath(target, file.path);
|
|
335
|
+
fs.mkdirSync(path.dirname(destination), { recursive: true });
|
|
336
|
+
fs.writeFileSync(destination, file.content, 'utf8');
|
|
337
|
+
}
|
|
338
|
+
if (managed) {
|
|
339
|
+
const nextPaths = new Set(adapterFiles.map(file => file.path));
|
|
340
|
+
removeTrackedFiles(target, managed.files.filter(relative => !nextPaths.has(relative)));
|
|
341
|
+
result.updated++;
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
result.installed++;
|
|
345
|
+
}
|
|
346
|
+
state.skills[skill.skillName] = {
|
|
347
|
+
hash: nextHash,
|
|
348
|
+
files: adapterFiles.map(file => file.path).sort(),
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
if (params.prune) {
|
|
352
|
+
for (const [skillName, managed] of Object.entries(state.skills)) {
|
|
353
|
+
if (present.has(skillName))
|
|
354
|
+
continue;
|
|
355
|
+
const target = targetPath(root, skillName);
|
|
356
|
+
const currentFiles = readManagedFiles(target, managed);
|
|
357
|
+
if (!currentFiles || (0, skill_mirror_files_1.computeSkillFileHash)(currentFiles) !== managed.hash) {
|
|
358
|
+
result.blocked++;
|
|
359
|
+
continue;
|
|
360
|
+
}
|
|
361
|
+
removeTrackedFiles(target, managed.files);
|
|
362
|
+
delete state.skills[skillName];
|
|
363
|
+
result.removed++;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
writeState(root, state);
|
|
367
|
+
return result;
|
|
368
|
+
}
|
|
369
|
+
async function syncNativeSkillMirror(params) {
|
|
370
|
+
if (!nativeSkillMirrorEnabled(params.platform)) {
|
|
371
|
+
return { installed: 0, updated: 0, current: 0, removed: 0, skipped: 0, blocked: 0 };
|
|
372
|
+
}
|
|
373
|
+
const list = await fetch(`${params.apiUrl}/v1/skillmirror`, {
|
|
374
|
+
headers: { Authorization: `Bearer ${params.apiKey}` },
|
|
375
|
+
});
|
|
376
|
+
if (!list.ok)
|
|
377
|
+
throw new Error(`skill mirror list failed: HTTP ${list.status}`);
|
|
378
|
+
const data = await list.json();
|
|
379
|
+
const rows = (data.skills || [])
|
|
380
|
+
.filter((row) => typeof row.skillName === 'string' && SKILL_NAME_RE.test(row.skillName));
|
|
381
|
+
const fetched = await Promise.all(rows.map(async (row) => {
|
|
382
|
+
const skillName = row.skillName;
|
|
383
|
+
const response = await fetch(`${params.apiUrl}/v1/skillmirror/${encodeURIComponent(skillName)}`, {
|
|
384
|
+
headers: { Authorization: `Bearer ${params.apiKey}` },
|
|
385
|
+
});
|
|
386
|
+
if (!response.ok)
|
|
387
|
+
return null;
|
|
388
|
+
const body = await response.json();
|
|
389
|
+
return Array.isArray(body.files) ? {
|
|
390
|
+
skillName,
|
|
391
|
+
files: body.files,
|
|
392
|
+
description: typeof row.description === 'string' ? row.description : undefined,
|
|
393
|
+
triggerDescription: typeof row.triggerDescription === 'string' ? row.triggerDescription : undefined,
|
|
394
|
+
} : null;
|
|
395
|
+
}));
|
|
396
|
+
if (fetched.some(skill => skill === null)) {
|
|
397
|
+
throw new Error('skill mirror snapshot incomplete; existing native adapters preserved');
|
|
398
|
+
}
|
|
399
|
+
const skills = fetched;
|
|
400
|
+
return applyNativeSkillMirror({
|
|
401
|
+
platform: params.platform,
|
|
402
|
+
skills,
|
|
403
|
+
homeDir: params.homeDir,
|
|
404
|
+
prune: true,
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
function nativeSkillMirrorSummary(result) {
|
|
408
|
+
const active = result.installed + result.updated + result.current;
|
|
409
|
+
const exceptions = result.skipped + result.blocked;
|
|
410
|
+
return `Native skill mirror: ${active} active, ${result.removed} removed`
|
|
411
|
+
+ (exceptions ? `, ${exceptions} preserved collision(s)` : '');
|
|
412
|
+
}
|
|
413
|
+
//# sourceMappingURL=native-skill-mirror.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-skill-mirror.js","sourceRoot":"","sources":["../src/native-skill-mirror.ts"],"names":[],"mappings":"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"}
|
|
@@ -1828,7 +1828,7 @@ var OPENCODE_CHIP_SPAWN_POINTER = [
|
|
|
1828
1828
|
].join("\n");
|
|
1829
1829
|
var CODEX_CHIP_SPAWN_POINTER = [
|
|
1830
1830
|
"[greprag Codex delegation \u2014 internal subagent, 1\u20132-chip quick path with the initiator as LEAD, or a separate LEAD for larger/seamed missions.]",
|
|
1831
|
-
"\u2022 About to delegate a Codex task? \u2192 run `greprag load codex-chip-spawn` FIRST. Use exact first-line titles `LEAD: <Mission
|
|
1831
|
+
"\u2022 About to delegate a Codex task? \u2192 run `greprag load codex-chip-spawn` FIRST. Use exact first-line titles `LEAD: <Mission>`, `Chip A/B/C: <Specific Purview>`, and `FIX: <one friction unit>`. Chips are ordinary writable native tasks; completion is a native Codex task reply to the LEAD after committing. A `FIX:` task loads `greprag load mechanic` first."
|
|
1832
1832
|
].join("\n");
|
|
1833
1833
|
var loadPrimerModule = {
|
|
1834
1834
|
id: "load-primer",
|
|
@@ -2224,9 +2224,14 @@ function buildSkillMirrorAnnounce(m) {
|
|
|
2224
2224
|
return `[greprag load skills: all ${m.count} canonical mirrored skills are already advertised by this harness; use \`greprag load <skill>\` to read the canonical payload.]`;
|
|
2225
2225
|
}
|
|
2226
2226
|
const header = [
|
|
2227
|
-
"## GrepRAG
|
|
2228
|
-
`
|
|
2229
|
-
"
|
|
2227
|
+
"## GrepRAG Skill Adapter Fallback",
|
|
2228
|
+
`Native registration is missing for ${m.skills.length} mirrored skills; their exact payload remains available through \`greprag load\`` + (m.nativeCount > 0 ? ` (${m.nativeCount} native-advertised duplicate${m.nativeCount === 1 ? "" : "s"} omitted)` : "") + ".",
|
|
2229
|
+
"",
|
|
2230
|
+
"### Trigger Rules",
|
|
2231
|
+
"If the user names a skill (with or without `/`) OR the request clearly matches a skill's description below, you MUST activate that skill for the current turn. Match meaning, not exact keywords.",
|
|
2232
|
+
"",
|
|
2233
|
+
"### Invocation",
|
|
2234
|
+
"To activate a skill, run `greprag load <skill-name>` before responding or taking action. Read the returned instructions completely, then follow them for the current turn.",
|
|
2230
2235
|
""
|
|
2231
2236
|
].join("\n");
|
|
2232
2237
|
let output = header;
|
|
@@ -9,10 +9,8 @@
|
|
|
9
9
|
* last-mirrored hash per skill so an unchanged skill costs one hash pass and
|
|
10
10
|
* ZERO network. Markdown only, v1 — SKILL.md + docs/**\/*.md; script-bearing
|
|
11
11
|
* assets stay file-bound (see the spec's named gaps). */
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
content: string;
|
|
15
|
-
}
|
|
12
|
+
import { type SkillFile } from './skill-mirror-files';
|
|
13
|
+
export type { SkillFile } from './skill-mirror-files';
|
|
16
14
|
/** Collect the skill's markdown: SKILL.md (required) + docs/**\/*.md, capped.
|
|
17
15
|
* Returns null when the dir has no SKILL.md. Never throws. */
|
|
18
16
|
export declare function collectSkillFiles(skillDir: string): SkillFile[] | null;
|
|
@@ -34,4 +32,3 @@ export declare function maybeMirrorSkill(params: {
|
|
|
34
32
|
apiUrl: string;
|
|
35
33
|
apiKey: string;
|
|
36
34
|
}): Promise<MirrorOutcome>;
|
|
37
|
-
export {};
|
|
@@ -51,8 +51,9 @@ exports.writeMirrorState = writeMirrorState;
|
|
|
51
51
|
exports.maybeMirrorSkill = maybeMirrorSkill;
|
|
52
52
|
const fs = __importStar(require("fs"));
|
|
53
53
|
const path = __importStar(require("path"));
|
|
54
|
-
const crypto = __importStar(require("crypto"));
|
|
55
54
|
const skill_landing_1 = require("./skill-landing");
|
|
55
|
+
const native_skill_mirror_1 = require("./native-skill-mirror");
|
|
56
|
+
const skill_mirror_files_1 = require("./skill-mirror-files");
|
|
56
57
|
/** Mirrors the server's caps (SKILL_MIRROR_* in @greprag/core — the CLI is
|
|
57
58
|
* core-free, so the numbers are restated; the server re-validates anyway). */
|
|
58
59
|
const MAX_FILES = 20;
|
|
@@ -110,11 +111,19 @@ function collectSkillFiles(skillDir) {
|
|
|
110
111
|
}
|
|
111
112
|
/** Deterministic content hash over path+content pairs. PURE — unit-tested. */
|
|
112
113
|
function computeMirrorHash(files) {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
return (0, skill_mirror_files_1.computeSkillFileHash)(files);
|
|
115
|
+
}
|
|
116
|
+
function materializeLocally(skillName, files) {
|
|
117
|
+
for (const platform of native_skill_mirror_1.NATIVE_SKILL_ADAPTER_PLATFORMS) {
|
|
118
|
+
try {
|
|
119
|
+
(0, native_skill_mirror_1.applyNativeSkillMirror)({
|
|
120
|
+
platform,
|
|
121
|
+
skills: [{ skillName, files }],
|
|
122
|
+
prune: false,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
catch { /* local adapter failure never breaks turn capture */ }
|
|
116
126
|
}
|
|
117
|
-
return h.digest('hex');
|
|
118
127
|
}
|
|
119
128
|
function statePath() {
|
|
120
129
|
const home = process.env.HOME || process.env.USERPROFILE || '';
|
|
@@ -152,8 +161,10 @@ async function maybeMirrorSkill(params) {
|
|
|
152
161
|
return 'skipped';
|
|
153
162
|
const hash = computeMirrorHash(files);
|
|
154
163
|
const state = readMirrorState();
|
|
155
|
-
if (state.skills[params.skill]?.hash === hash)
|
|
164
|
+
if (state.skills[params.skill]?.hash === hash) {
|
|
165
|
+
materializeLocally(params.skill, files);
|
|
156
166
|
return 'fresh';
|
|
167
|
+
}
|
|
157
168
|
const res = await fetch(`${params.apiUrl}/v1/skillmirror/${encodeURIComponent(params.skill)}`, {
|
|
158
169
|
method: 'POST',
|
|
159
170
|
headers: { 'Authorization': `Bearer ${params.apiKey}`, 'Content-Type': 'application/json' },
|
|
@@ -163,6 +174,7 @@ async function maybeMirrorSkill(params) {
|
|
|
163
174
|
return 'skipped';
|
|
164
175
|
state.skills[params.skill] = { hash, mirroredAt: new Date().toISOString() };
|
|
165
176
|
writeMirrorState(state);
|
|
177
|
+
materializeLocally(params.skill, files);
|
|
166
178
|
return 'mirrored';
|
|
167
179
|
}
|
|
168
180
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-mirror-client.js","sourceRoot":"","sources":["../src/skill-mirror-client.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;0DAU0D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"skill-mirror-client.js","sourceRoot":"","sources":["../src/skill-mirror-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.computeSkillFileHash = computeSkillFileHash;
|
|
37
|
+
exports.isSafeMirroredSkillFile = isSafeMirroredSkillFile;
|
|
38
|
+
const crypto = __importStar(require("node:crypto"));
|
|
39
|
+
function computeSkillFileHash(files) {
|
|
40
|
+
const hash = crypto.createHash('sha256');
|
|
41
|
+
for (const file of [...files].sort((a, b) => a.path.localeCompare(b.path))) {
|
|
42
|
+
hash.update(file.path).update('\0').update(file.content).update('\0');
|
|
43
|
+
}
|
|
44
|
+
return hash.digest('hex');
|
|
45
|
+
}
|
|
46
|
+
function isSafeMirroredSkillFile(file) {
|
|
47
|
+
if (file.path === 'SKILL.md')
|
|
48
|
+
return true;
|
|
49
|
+
return /^docs\/(?!.*(?:^|\/)\.\.(?:\/|$))[A-Za-z0-9._\/-]+\.md$/.test(file.path);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=skill-mirror-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-mirror-files.js","sourceRoot":"","sources":["../src/skill-mirror-files.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,oDAMC;AAED,0DAGC;AAlBD,oDAAsC;AAOtC,SAAgB,oBAAoB,CAAC,KAAkB;IACrD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC3E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,SAAgB,uBAAuB,CAAC,IAAe;IACrD,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,yDAAyD,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnF,CAAC"}
|