greprag 5.65.3 → 5.66.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -24
- package/dist/commands/codex-delivery.d.ts +1 -1
- package/dist/commands/codex-delivery.js +1 -1
- package/dist/commands/codex-delivery.js.map +1 -1
- package/dist/commands/codex-doctor.d.ts +0 -7
- package/dist/commands/codex-doctor.js +9 -113
- package/dist/commands/codex-doctor.js.map +1 -1
- package/dist/commands/codex-startup.js +22 -91
- package/dist/commands/codex-startup.js.map +1 -1
- package/dist/commands/codex.js +13 -41
- package/dist/commands/codex.js.map +1 -1
- package/dist/commands/inbox-primer-reminder.js +4 -2
- package/dist/commands/inbox-primer-reminder.js.map +1 -1
- package/dist/commands/init.js +14 -24
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/load.d.ts +1 -1
- package/dist/commands/load.js +93 -8
- package/dist/commands/load.js.map +1 -1
- package/dist/commands/parity.js +2 -2
- package/dist/commands/parity.js.map +1 -1
- package/dist/commands/skill.js +17 -4
- package/dist/commands/skill.js.map +1 -1
- package/dist/commands/status.js +1 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/hook.js +2 -1
- package/dist/hook.js.map +1 -1
- package/dist/index.js +10 -7
- package/dist/index.js.map +1 -1
- package/dist/native-skill-mirror.d.ts +18 -2
- package/dist/native-skill-mirror.js +333 -32
- package/dist/native-skill-mirror.js.map +1 -1
- package/dist/opencode-plugin.bundle.js +7 -5
- package/dist/opencode-plugin.js +7 -3
- package/dist/opencode-plugin.js.map +1 -1
- package/dist/skill-mirror-client.js +7 -6
- package/dist/skill-mirror-client.js.map +1 -1
- package/package.json +1 -1
- package/scripts/postinstall.js +2 -2
- package/skill/greprag/SKILL.md +2 -2
- package/skill/greprag/docs/setup.md +12 -43
- package/skill/templates/chip-leader.md +14 -6
- package/skill/templates/codex-chip-spawn.md +6 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/**
|
|
2
|
+
/** Compile GrepRAG skill mirrors into native harness adapter registries. */
|
|
3
3
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
4
|
if (k2 === undefined) k2 = k;
|
|
5
5
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -34,7 +34,12 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
};
|
|
35
35
|
})();
|
|
36
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.NATIVE_SKILL_ADAPTER_PLATFORMS = void 0;
|
|
38
|
+
exports.nativeSkillMirrorEnabled = nativeSkillMirrorEnabled;
|
|
37
39
|
exports.nativeSkillRoot = nativeSkillRoot;
|
|
40
|
+
exports.nativeProjectSkillRoot = nativeProjectSkillRoot;
|
|
41
|
+
exports.assertNoNativeSkillCollision = assertNoNativeSkillCollision;
|
|
42
|
+
exports.buildNativeSkillAdapter = buildNativeSkillAdapter;
|
|
38
43
|
exports.applyNativeSkillMirror = applyNativeSkillMirror;
|
|
39
44
|
exports.syncNativeSkillMirror = syncNativeSkillMirror;
|
|
40
45
|
exports.nativeSkillMirrorSummary = nativeSkillMirrorSummary;
|
|
@@ -43,7 +48,14 @@ const os = __importStar(require("node:os"));
|
|
|
43
48
|
const path = __importStar(require("node:path"));
|
|
44
49
|
const skill_mirror_files_1 = require("./skill-mirror-files");
|
|
45
50
|
const SKILL_NAME_RE = /^[A-Za-z0-9._-]{1,64}$/;
|
|
51
|
+
const NATIVE_SKILL_NAME_RE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
52
|
+
const PROJECT_ID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
53
|
+
const NATIVE_DESCRIPTION_MAX_CHARS = 1024;
|
|
46
54
|
const STATE_FILE = '.greprag-mirror.json';
|
|
55
|
+
exports.NATIVE_SKILL_ADAPTER_PLATFORMS = ['codex', 'opencode'];
|
|
56
|
+
function nativeSkillMirrorEnabled(platform) {
|
|
57
|
+
return platform !== 'claude-code';
|
|
58
|
+
}
|
|
47
59
|
function nativeSkillRoot(platform, homeDir = os.homedir()) {
|
|
48
60
|
if (platform === 'claude-code')
|
|
49
61
|
return path.join(homeDir, '.claude', 'skills');
|
|
@@ -51,6 +63,59 @@ function nativeSkillRoot(platform, homeDir = os.homedir()) {
|
|
|
51
63
|
return path.join(homeDir, '.codex', 'skills');
|
|
52
64
|
return path.join(homeDir, '.config', 'opencode', 'skills');
|
|
53
65
|
}
|
|
66
|
+
function nativeProjectSkillRoot(platform, projectDir) {
|
|
67
|
+
if (platform === 'claude-code')
|
|
68
|
+
return path.join(projectDir, '.claude', 'skills');
|
|
69
|
+
if (platform === 'codex')
|
|
70
|
+
return path.join(projectDir, '.agents', 'skills');
|
|
71
|
+
return path.join(projectDir, '.opencode', 'skills');
|
|
72
|
+
}
|
|
73
|
+
function skillScope(skill) {
|
|
74
|
+
return skill.scope === 'project' ? 'project' : 'global';
|
|
75
|
+
}
|
|
76
|
+
function canonicalSkillId(skill) {
|
|
77
|
+
if (skill.skillId)
|
|
78
|
+
return skill.skillId;
|
|
79
|
+
const scope = skillScope(skill);
|
|
80
|
+
if (scope === 'global')
|
|
81
|
+
return `global:${skill.skillName}`;
|
|
82
|
+
if (!skill.projectId || !PROJECT_ID_RE.test(skill.projectId)) {
|
|
83
|
+
throw new Error(`projectId required for project skill "${skill.skillName}"`);
|
|
84
|
+
}
|
|
85
|
+
return `project:${skill.projectId}:${skill.skillName}`;
|
|
86
|
+
}
|
|
87
|
+
function replacesGlobal(project, global) {
|
|
88
|
+
const replaces = project.replaces || [];
|
|
89
|
+
const globalId = canonicalSkillId(global);
|
|
90
|
+
return replaces.some(value => value === globalId
|
|
91
|
+
|| value === `global:${global.skillName}`
|
|
92
|
+
|| value === global.skillName
|
|
93
|
+
|| (value === 'global' && project.skillName === global.skillName));
|
|
94
|
+
}
|
|
95
|
+
function assertNoNativeSkillCollision(skills) {
|
|
96
|
+
const byName = new Map();
|
|
97
|
+
for (const skill of skills) {
|
|
98
|
+
const key = skill.skillName.toLowerCase();
|
|
99
|
+
byName.set(key, [...(byName.get(key) || []), skill]);
|
|
100
|
+
}
|
|
101
|
+
for (const group of byName.values()) {
|
|
102
|
+
const global = group.find(skill => skillScope(skill) === 'global');
|
|
103
|
+
if (!global)
|
|
104
|
+
continue;
|
|
105
|
+
for (const project of group.filter(skill => skillScope(skill) === 'project')) {
|
|
106
|
+
if (!replacesGlobal(project, global)) {
|
|
107
|
+
throw new Error(`project skill "${project.skillName}" collides with global "${canonicalSkillId(global)}"; add replaces metadata`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function rootForSkill(platform, skill, homeDir, projectDir) {
|
|
113
|
+
if (skillScope(skill) === 'global')
|
|
114
|
+
return nativeSkillRoot(platform, homeDir);
|
|
115
|
+
if (!projectDir)
|
|
116
|
+
return null;
|
|
117
|
+
return nativeProjectSkillRoot(platform, projectDir);
|
|
118
|
+
}
|
|
54
119
|
function emptyState() {
|
|
55
120
|
return { version: 1, skills: {} };
|
|
56
121
|
}
|
|
@@ -92,6 +157,178 @@ function readManagedFiles(target, managed) {
|
|
|
92
157
|
return null;
|
|
93
158
|
}
|
|
94
159
|
}
|
|
160
|
+
function unquote(value) {
|
|
161
|
+
const v = value.trim();
|
|
162
|
+
if (v.length >= 2 && ((v.startsWith('"') && v.endsWith('"'))
|
|
163
|
+
|| (v.startsWith("'") && v.endsWith("'"))))
|
|
164
|
+
return v.slice(1, -1);
|
|
165
|
+
return v;
|
|
166
|
+
}
|
|
167
|
+
function parseDescriptionFromSkillMd(skillMd) {
|
|
168
|
+
const text = (skillMd || '').replace(/\r\n?/g, '\n');
|
|
169
|
+
const match = /^---\n([\s\S]*?)\n---(?:\n|$)/.exec(text);
|
|
170
|
+
const body = match ? text.slice(match[0].length) : text;
|
|
171
|
+
if (match) {
|
|
172
|
+
const lines = match[1].split('\n');
|
|
173
|
+
for (let i = 0; i < lines.length; i++) {
|
|
174
|
+
const key = /^(\s*)description:\s*(.*)$/.exec(lines[i]);
|
|
175
|
+
if (!key)
|
|
176
|
+
continue;
|
|
177
|
+
const scalar = key[2].trim();
|
|
178
|
+
if (!/^[>|][+-]?$/.test(scalar))
|
|
179
|
+
return unquote(scalar).trim();
|
|
180
|
+
const keyIndent = key[1].length;
|
|
181
|
+
const block = [];
|
|
182
|
+
for (let j = i + 1; j < lines.length; j++) {
|
|
183
|
+
const line = lines[j];
|
|
184
|
+
const indent = /^\s*/.exec(line)?.[0].length ?? 0;
|
|
185
|
+
if (line.trim() && indent <= keyIndent)
|
|
186
|
+
break;
|
|
187
|
+
block.push(line);
|
|
188
|
+
}
|
|
189
|
+
const nonEmpty = block.filter(line => line.trim());
|
|
190
|
+
const blockIndent = nonEmpty.length
|
|
191
|
+
? Math.min(...nonEmpty.map(line => /^\s*/.exec(line)?.[0].length ?? 0))
|
|
192
|
+
: 0;
|
|
193
|
+
const dedented = block.map(line => line.trim() ? line.slice(blockIndent).trimEnd() : '');
|
|
194
|
+
const description = scalar.startsWith('>')
|
|
195
|
+
? dedented.join('\n').split(/\n{2,}/).map(p => p.replace(/\n/g, ' ').trim()).join('\n\n')
|
|
196
|
+
: dedented.join('\n').trim();
|
|
197
|
+
return description.trim();
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
const lead = body.split('\n')
|
|
201
|
+
.map(line => line.trim())
|
|
202
|
+
.find(line => line && !line.startsWith('#') && !line.startsWith('```') && !line.startsWith('<!--')) || '';
|
|
203
|
+
return lead.trim();
|
|
204
|
+
}
|
|
205
|
+
function adapterDescription(skill) {
|
|
206
|
+
const direct = (skill.triggerDescription || skill.description || '').replace(/\r\n?/g, '\n').trim();
|
|
207
|
+
if (direct)
|
|
208
|
+
return boundedNativeDescription(skill.skillName, direct);
|
|
209
|
+
const skillMd = skill.files.find(file => file.path === 'SKILL.md')?.content || '';
|
|
210
|
+
return boundedNativeDescription(skill.skillName, parseDescriptionFromSkillMd(skillMd));
|
|
211
|
+
}
|
|
212
|
+
function collapseWhitespace(value) {
|
|
213
|
+
return value.replace(/\s+/g, ' ').trim();
|
|
214
|
+
}
|
|
215
|
+
function trimWithMarker(value, max) {
|
|
216
|
+
const text = collapseWhitespace(value);
|
|
217
|
+
if (text.length <= max)
|
|
218
|
+
return text;
|
|
219
|
+
if (max <= 15)
|
|
220
|
+
return text.slice(0, Math.max(0, max)).trimEnd();
|
|
221
|
+
const head = text.slice(0, max - 3);
|
|
222
|
+
const boundary = Math.max(head.lastIndexOf('. '), head.lastIndexOf('; '), head.lastIndexOf(', '), head.lastIndexOf(' '));
|
|
223
|
+
return `${head.slice(0, boundary > 80 ? boundary : head.length).trimEnd()}...`;
|
|
224
|
+
}
|
|
225
|
+
function sectionFrom(value, label) {
|
|
226
|
+
const escaped = label.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
227
|
+
const match = new RegExp(`${escaped}:?\\s*([\\s\\S]*)`, 'i').exec(value);
|
|
228
|
+
if (!match)
|
|
229
|
+
return '';
|
|
230
|
+
return match[1].split(/\n\s*\n(?:NOT for|Requires|Built on|Does NOT|REQUIRES)\b/i)[0].trim();
|
|
231
|
+
}
|
|
232
|
+
function beforeSection(value, label) {
|
|
233
|
+
const index = value.toLowerCase().indexOf(label.toLowerCase());
|
|
234
|
+
return index >= 0 ? value.slice(0, index).trim() : value.trim();
|
|
235
|
+
}
|
|
236
|
+
function boundedNativeDescription(skillName, raw) {
|
|
237
|
+
const normalized = raw.replace(/\r\n?/g, '\n').trim();
|
|
238
|
+
if (!normalized || normalized.length <= NATIVE_DESCRIPTION_MAX_CHARS)
|
|
239
|
+
return normalized;
|
|
240
|
+
const prefix = `Condensed native trigger for ${skillName}; full description: greprag load ${skillName}.`;
|
|
241
|
+
const useWhen = sectionFrom(normalized, 'Use when');
|
|
242
|
+
const notFor = sectionFrom(normalized, 'NOT for');
|
|
243
|
+
const purposeSource = beforeSection(normalized, 'Use when');
|
|
244
|
+
const fixedParts = [prefix];
|
|
245
|
+
const tailParts = [];
|
|
246
|
+
if (useWhen)
|
|
247
|
+
tailParts.push(['Use when', useWhen]);
|
|
248
|
+
if (notFor)
|
|
249
|
+
tailParts.push(['NOT for', notFor]);
|
|
250
|
+
const fixedLength = fixedParts.join('\n\n').length
|
|
251
|
+
+ tailParts.reduce((sum, [label, body]) => sum + `\n\n${label}: ${collapseWhitespace(body)}`.length, 0);
|
|
252
|
+
const purposeBudget = Math.max(160, NATIVE_DESCRIPTION_MAX_CHARS - fixedLength - 12);
|
|
253
|
+
const parts = [
|
|
254
|
+
...fixedParts,
|
|
255
|
+
`Purpose: ${trimWithMarker(purposeSource, purposeBudget)}`,
|
|
256
|
+
...tailParts.map(([label, body]) => `${label}: ${collapseWhitespace(body)}`),
|
|
257
|
+
];
|
|
258
|
+
let rendered = parts.filter(Boolean).join('\n\n');
|
|
259
|
+
if (rendered.length <= NATIVE_DESCRIPTION_MAX_CHARS)
|
|
260
|
+
return rendered;
|
|
261
|
+
const prefixAndUse = [prefix];
|
|
262
|
+
const useBudget = NATIVE_DESCRIPTION_MAX_CHARS - prefix.length - 14;
|
|
263
|
+
if (useWhen)
|
|
264
|
+
prefixAndUse.push(`Use when: ${trimWithMarker(useWhen, useBudget)}`);
|
|
265
|
+
else
|
|
266
|
+
prefixAndUse.push(`Purpose: ${trimWithMarker(normalized, useBudget)}`);
|
|
267
|
+
rendered = prefixAndUse.join('\n\n');
|
|
268
|
+
return rendered.length <= NATIVE_DESCRIPTION_MAX_CHARS
|
|
269
|
+
? rendered
|
|
270
|
+
: trimWithMarker(rendered, NATIVE_DESCRIPTION_MAX_CHARS);
|
|
271
|
+
}
|
|
272
|
+
function yamlLiteral(value) {
|
|
273
|
+
return value.replace(/\r\n?/g, '\n').split('\n').map(line => ` ${line}`).join('\n');
|
|
274
|
+
}
|
|
275
|
+
function renderAdapterBody(platform, skill) {
|
|
276
|
+
const skillName = skill.skillName;
|
|
277
|
+
const skillId = canonicalSkillId(skill);
|
|
278
|
+
const identityArg = `--skill-id ${skillId}`;
|
|
279
|
+
const companions = skill.files.map(file => file.path).filter(relative => relative !== 'SKILL.md').sort();
|
|
280
|
+
const harnessArg = `--harness ${platform}`;
|
|
281
|
+
const companionLines = companions.length
|
|
282
|
+
? companions.map(relative => `- \`greprag load ${skillName} ${relative} ${identityArg} ${harnessArg}\``).join('\n')
|
|
283
|
+
: '- No companion docs are mirrored into this native adapter.';
|
|
284
|
+
return `# ${skillName}
|
|
285
|
+
|
|
286
|
+
This is a GrepRAG mirrored skill adapter. It exists only to register platform-native activation metadata.
|
|
287
|
+
|
|
288
|
+
## Mandatory Invocation
|
|
289
|
+
|
|
290
|
+
When this skill activates, run:
|
|
291
|
+
|
|
292
|
+
\`\`\`bash
|
|
293
|
+
greprag load ${skillName} ${identityArg} ${harnessArg}
|
|
294
|
+
\`\`\`
|
|
295
|
+
|
|
296
|
+
Read and follow that canonical payload before responding or taking action.
|
|
297
|
+
|
|
298
|
+
## Companion Docs
|
|
299
|
+
|
|
300
|
+
${companionLines}
|
|
301
|
+
`;
|
|
302
|
+
}
|
|
303
|
+
function buildNativeSkillAdapter(platform, skill) {
|
|
304
|
+
if (!nativeSkillMirrorEnabled(platform))
|
|
305
|
+
return null;
|
|
306
|
+
if (!NATIVE_SKILL_NAME_RE.test(skill.skillName))
|
|
307
|
+
return null;
|
|
308
|
+
if (!skill.files.some(file => file.path === 'SKILL.md')
|
|
309
|
+
|| !skill.files.every(skill_mirror_files_1.isSafeMirroredSkillFile))
|
|
310
|
+
return null;
|
|
311
|
+
const description = adapterDescription(skill);
|
|
312
|
+
if (!description || description.length > NATIVE_DESCRIPTION_MAX_CHARS)
|
|
313
|
+
return null;
|
|
314
|
+
const skillId = canonicalSkillId(skill);
|
|
315
|
+
const scope = skillScope(skill);
|
|
316
|
+
const extraFrontmatter = [
|
|
317
|
+
`greprag_skill_id: ${skillId}`,
|
|
318
|
+
`greprag_scope: ${scope}`,
|
|
319
|
+
...(scope === 'project' && skill.projectId ? [`greprag_project_id: ${skill.projectId}`] : []),
|
|
320
|
+
...(skill.replaces?.length ? [`replaces: ${skill.replaces.join(', ')}`] : []),
|
|
321
|
+
].join('\n');
|
|
322
|
+
const content = `---
|
|
323
|
+
name: ${skill.skillName}
|
|
324
|
+
description: |-
|
|
325
|
+
${yamlLiteral(description)}
|
|
326
|
+
${extraFrontmatter}
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
${renderAdapterBody(platform, skill)}`;
|
|
330
|
+
return [{ path: 'SKILL.md', content }];
|
|
331
|
+
}
|
|
95
332
|
function removeTrackedFiles(target, relativeFiles) {
|
|
96
333
|
const directories = new Set();
|
|
97
334
|
for (const relative of relativeFiles) {
|
|
@@ -117,32 +354,53 @@ function removeTrackedFiles(target, relativeFiles) {
|
|
|
117
354
|
}
|
|
118
355
|
catch { /* nonempty target is preserved */ }
|
|
119
356
|
}
|
|
120
|
-
/** Apply
|
|
357
|
+
/** Apply a native adapter snapshot. Existing non-GrepRAG directories are never touched. */
|
|
121
358
|
function applyNativeSkillMirror(params) {
|
|
122
|
-
|
|
123
|
-
|
|
359
|
+
if (!nativeSkillMirrorEnabled(params.platform)) {
|
|
360
|
+
return {
|
|
361
|
+
installed: 0, updated: 0, current: 0, removed: 0,
|
|
362
|
+
skipped: params.skills.length, blocked: 0,
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
assertNoNativeSkillCollision(params.skills);
|
|
366
|
+
const homeDir = params.homeDir || os.homedir();
|
|
367
|
+
const projectDir = params.projectDir ? path.resolve(params.projectDir) : undefined;
|
|
124
368
|
const result = {
|
|
125
369
|
installed: 0, updated: 0, current: 0, removed: 0, skipped: 0, blocked: 0,
|
|
126
370
|
};
|
|
127
|
-
const
|
|
371
|
+
const roots = new Map();
|
|
372
|
+
const rootState = (root) => {
|
|
373
|
+
let state = roots.get(root);
|
|
374
|
+
if (!state) {
|
|
375
|
+
state = { state: readState(root), present: new Set(), touched: false };
|
|
376
|
+
roots.set(root, state);
|
|
377
|
+
}
|
|
378
|
+
return state;
|
|
379
|
+
};
|
|
128
380
|
for (const skill of params.skills) {
|
|
129
381
|
if (!SKILL_NAME_RE.test(skill.skillName)) {
|
|
130
382
|
result.skipped++;
|
|
131
383
|
continue;
|
|
132
384
|
}
|
|
133
|
-
|
|
134
|
-
if (!
|
|
135
|
-
|
|
385
|
+
const root = rootForSkill(params.platform, skill, homeDir, projectDir);
|
|
386
|
+
if (!root) {
|
|
387
|
+
result.skipped++;
|
|
388
|
+
continue;
|
|
389
|
+
}
|
|
390
|
+
const rootEntry = rootState(root);
|
|
391
|
+
rootEntry.present.add(skill.skillName);
|
|
392
|
+
const adapterFiles = buildNativeSkillAdapter(params.platform, skill);
|
|
393
|
+
if (!adapterFiles) {
|
|
136
394
|
result.skipped++;
|
|
137
395
|
continue;
|
|
138
396
|
}
|
|
139
397
|
const target = targetPath(root, skill.skillName);
|
|
140
|
-
const managed = state.skills[skill.skillName];
|
|
398
|
+
const managed = rootEntry.state.skills[skill.skillName];
|
|
141
399
|
if (fs.existsSync(target) && !managed) {
|
|
142
400
|
result.skipped++;
|
|
143
401
|
continue;
|
|
144
402
|
}
|
|
145
|
-
const nextHash = (0, skill_mirror_files_1.computeSkillFileHash)(
|
|
403
|
+
const nextHash = (0, skill_mirror_files_1.computeSkillFileHash)(adapterFiles);
|
|
146
404
|
if (managed) {
|
|
147
405
|
const currentFiles = readManagedFiles(target, managed);
|
|
148
406
|
if (!currentFiles || (0, skill_mirror_files_1.computeSkillFileHash)(currentFiles) !== managed.hash) {
|
|
@@ -155,60 +413,101 @@ function applyNativeSkillMirror(params) {
|
|
|
155
413
|
}
|
|
156
414
|
}
|
|
157
415
|
fs.mkdirSync(target, { recursive: true });
|
|
158
|
-
for (const file of
|
|
416
|
+
for (const file of adapterFiles) {
|
|
159
417
|
const destination = filePath(target, file.path);
|
|
160
418
|
fs.mkdirSync(path.dirname(destination), { recursive: true });
|
|
161
419
|
fs.writeFileSync(destination, file.content, 'utf8');
|
|
162
420
|
}
|
|
163
421
|
if (managed) {
|
|
164
|
-
const nextPaths = new Set(
|
|
422
|
+
const nextPaths = new Set(adapterFiles.map(file => file.path));
|
|
165
423
|
removeTrackedFiles(target, managed.files.filter(relative => !nextPaths.has(relative)));
|
|
166
424
|
result.updated++;
|
|
167
425
|
}
|
|
168
426
|
else {
|
|
169
427
|
result.installed++;
|
|
170
428
|
}
|
|
171
|
-
state.skills[skill.skillName] = {
|
|
429
|
+
rootEntry.state.skills[skill.skillName] = {
|
|
172
430
|
hash: nextHash,
|
|
173
|
-
files:
|
|
431
|
+
files: adapterFiles.map(file => file.path).sort(),
|
|
174
432
|
};
|
|
433
|
+
rootEntry.touched = true;
|
|
175
434
|
}
|
|
176
435
|
if (params.prune) {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
436
|
+
const globalRoot = nativeSkillRoot(params.platform, homeDir);
|
|
437
|
+
if (params.pruneGlobalRoot !== false)
|
|
438
|
+
rootState(globalRoot);
|
|
439
|
+
if (projectDir)
|
|
440
|
+
rootState(nativeProjectSkillRoot(params.platform, projectDir));
|
|
441
|
+
for (const [root, entry] of roots) {
|
|
442
|
+
if (params.pruneGlobalRoot === false && root === globalRoot)
|
|
184
443
|
continue;
|
|
444
|
+
for (const [skillName, managed] of Object.entries(entry.state.skills)) {
|
|
445
|
+
if (entry.present.has(skillName))
|
|
446
|
+
continue;
|
|
447
|
+
const target = targetPath(root, skillName);
|
|
448
|
+
const currentFiles = readManagedFiles(target, managed);
|
|
449
|
+
if (!currentFiles || (0, skill_mirror_files_1.computeSkillFileHash)(currentFiles) !== managed.hash) {
|
|
450
|
+
result.blocked++;
|
|
451
|
+
continue;
|
|
452
|
+
}
|
|
453
|
+
removeTrackedFiles(target, managed.files);
|
|
454
|
+
delete entry.state.skills[skillName];
|
|
455
|
+
entry.touched = true;
|
|
456
|
+
result.removed++;
|
|
185
457
|
}
|
|
186
|
-
removeTrackedFiles(target, managed.files);
|
|
187
|
-
delete state.skills[skillName];
|
|
188
|
-
result.removed++;
|
|
189
458
|
}
|
|
190
459
|
}
|
|
191
|
-
|
|
460
|
+
for (const [root, entry] of roots) {
|
|
461
|
+
if (entry.touched || fs.existsSync(path.join(root, STATE_FILE)))
|
|
462
|
+
writeState(root, entry.state);
|
|
463
|
+
}
|
|
192
464
|
return result;
|
|
193
465
|
}
|
|
194
466
|
async function syncNativeSkillMirror(params) {
|
|
195
|
-
|
|
467
|
+
if (!nativeSkillMirrorEnabled(params.platform)) {
|
|
468
|
+
return { installed: 0, updated: 0, current: 0, removed: 0, skipped: 0, blocked: 0 };
|
|
469
|
+
}
|
|
470
|
+
const qs = new URLSearchParams();
|
|
471
|
+
if (params.projectId) {
|
|
472
|
+
qs.set('scope', 'effective');
|
|
473
|
+
qs.set('projectId', params.projectId);
|
|
474
|
+
}
|
|
475
|
+
const listUrl = `${params.apiUrl}/v1/skillmirror${qs.size ? `?${qs.toString()}` : ''}`;
|
|
476
|
+
const list = await fetch(listUrl, {
|
|
196
477
|
headers: { Authorization: `Bearer ${params.apiKey}` },
|
|
197
478
|
});
|
|
198
479
|
if (!list.ok)
|
|
199
480
|
throw new Error(`skill mirror list failed: HTTP ${list.status}`);
|
|
200
481
|
const data = await list.json();
|
|
201
|
-
const
|
|
202
|
-
.
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
const
|
|
482
|
+
const rows = (data.skills || [])
|
|
483
|
+
.filter((row) => typeof row.skillName === 'string' && SKILL_NAME_RE.test(row.skillName));
|
|
484
|
+
const fetched = await Promise.all(rows.map(async (row) => {
|
|
485
|
+
const skillName = row.skillName;
|
|
486
|
+
const skillQs = new URLSearchParams();
|
|
487
|
+
if (row.skillId)
|
|
488
|
+
skillQs.set('skillId', row.skillId);
|
|
489
|
+
else if (row.scope) {
|
|
490
|
+
skillQs.set('scope', row.scope);
|
|
491
|
+
if (row.projectId)
|
|
492
|
+
skillQs.set('projectId', row.projectId);
|
|
493
|
+
}
|
|
494
|
+
const response = await fetch(`${params.apiUrl}/v1/skillmirror/${encodeURIComponent(skillName)}${skillQs.size ? `?${skillQs.toString()}` : ''}`, {
|
|
206
495
|
headers: { Authorization: `Bearer ${params.apiKey}` },
|
|
207
496
|
});
|
|
208
497
|
if (!response.ok)
|
|
209
498
|
return null;
|
|
210
499
|
const body = await response.json();
|
|
211
|
-
return Array.isArray(body.files) ? {
|
|
500
|
+
return Array.isArray(body.files) ? {
|
|
501
|
+
skillName,
|
|
502
|
+
skillId: typeof row.skillId === 'string' ? row.skillId : undefined,
|
|
503
|
+
scope: row.scope === 'project' ? 'project' : 'global',
|
|
504
|
+
projectId: typeof row.projectId === 'string' ? row.projectId : undefined,
|
|
505
|
+
projectName: typeof row.projectName === 'string' ? row.projectName : undefined,
|
|
506
|
+
replaces: Array.isArray(row.replaces) ? row.replaces : [],
|
|
507
|
+
files: body.files,
|
|
508
|
+
description: typeof row.description === 'string' ? row.description : undefined,
|
|
509
|
+
triggerDescription: typeof row.triggerDescription === 'string' ? row.triggerDescription : undefined,
|
|
510
|
+
} : null;
|
|
212
511
|
}));
|
|
213
512
|
if (fetched.some(skill => skill === null)) {
|
|
214
513
|
throw new Error('skill mirror snapshot incomplete; existing native adapters preserved');
|
|
@@ -218,7 +517,9 @@ async function syncNativeSkillMirror(params) {
|
|
|
218
517
|
platform: params.platform,
|
|
219
518
|
skills,
|
|
220
519
|
homeDir: params.homeDir,
|
|
520
|
+
projectDir: params.projectDir,
|
|
221
521
|
prune: true,
|
|
522
|
+
pruneGlobalRoot: !params.projectId,
|
|
222
523
|
});
|
|
223
524
|
}
|
|
224
525
|
function nativeSkillMirrorSummary(result) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-skill-mirror.js","sourceRoot":"","sources":["../src/native-skill-mirror.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"native-skill-mirror.js","sourceRoot":"","sources":["../src/native-skill-mirror.ts"],"names":[],"mappings":"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"}
|
|
@@ -1787,7 +1787,7 @@ function buildInboxPrimer(env) {
|
|
|
1787
1787
|
// "ToolSearch select:Monitor" is unactionable there (neither tool exists) and an
|
|
1788
1788
|
// un-followable alarm decays into banner-blindness for the announces around it.
|
|
1789
1789
|
codex ? "[CODEX INBOX \u2014 greprag is your agent-to-agent mesh. Codex-to-Codex: use native task messaging. Reaching ANY non-Codex peer (Claude Code / opencode / another tenant's agent): `greprag send` IS the live primary path \u2014 native Codex messaging cannot reach them.]" : opencode ? "[OPENCODE INBOX \u2014 greprag is your agent-to-agent mesh. Inbound delivery is AUTOMATIC here: the greprag plugin arms a relay for this session (nothing to arm or re-arm) and inbound peer messages arrive as injected turns.]" : "[\u26A0 ARM YOUR INBOX WATCHER NOW \u2014 you are UNREACHABLE until you do. Peers are live in your mesh trying to coordinate with this session, and the operator can DM you \u2014 but they reach you ONLY while armed. Unarmed, you are invisible and their messages silently pile up. The watcher can DROP ANYTIME (crash / reload / OOM) \u2014 EVERY turn you are flagged unarmed you MUST re-arm, or coordination breaks.]",
|
|
1790
|
-
codex ? "CODEX: Native task/thread messaging is the
|
|
1790
|
+
codex ? "CODEX: Native task/thread messaging is the live Codex-to-Codex path. GrepRAG inbox rows for Codex surface through turn hooks only: SessionStart `drain`, UserPromptSubmit `codex-notify`, and PostToolUse `codex-inbox`. There is no Codex startup watcher to install. If hooks do not fire, open Codex Desktop Settings -> Settings -> Hooks, trust the GrepRAG commands, start a fresh Codex session, then drain what is waiting: `greprag inbox`." : opencode ? "DELIVERY: the relay arms itself on this session's first turn and injects inbound messages as they land \u2014 treat an injected `Message from <handle> (session <8hex>):` turn as async peer mail, not the operator typing. Drain anything already waiting: `greprag inbox`." : `ARM: Monitor is a deferred tool \u2014 \`ToolSearch select:Monitor\`, then call Monitor with persistent:true, timeout_ms:3600000, description:"greprag inbox ${env.short}", command: \`${arm}\`. The \`--session ${env.short}\` is REQUIRED \u2014 a bare \`greprag inbox watch\` writes no pidfile, so the arm-check reads you unarmed forever. NEVER run it bare also because it is a foreground stream and hangs the turn. Then drain what is waiting: \`greprag inbox\`.`,
|
|
1791
1791
|
"",
|
|
1792
1792
|
// The facts + directives — a flat list (no MODEL/RULES scaffolding; the labels were
|
|
1793
1793
|
// human doc-structure, dead weight to an agent). Everything that helps the agent DECIDE
|
|
@@ -1796,7 +1796,7 @@ function buildInboxPrimer(env) {
|
|
|
1796
1796
|
"\u2022 One shared tenant inbox. `greprag inbox` auto-scopes to YOUR session (lines to/from you only); other sessions' private threads stay hidden. `--all` (tenant-wide audit \u2014 every other session's threads) is OPT-IN: run it ONLY when the operator asks, never on your own initiative \u2014 it is for surveying child sessions you orchestrate.",
|
|
1797
1797
|
`\u2022 Send: \`greprag send "md" --to <handle>@greprag.com/<their-8hex|uuid> --from-session ${env.short}\` \u2192 live, session-targeted. Bare \`--to <handle>@greprag.com\` \u2192 cold open: lands in their inbox for a manual check \u2014 silent, no session wake, no operator ping. There are no project / broadcast targets.`,
|
|
1798
1798
|
"\u2022 `<handle>@greprag.com` is an INTERNAL mesh address, NOT real email. NEVER reach one via an email tool (gmail, SMTP, `greprag email send`) \u2014 that mail never arrives. `greprag send` is the ONLY transport to a greprag address; `greprag email send` is for REAL external addresses only.",
|
|
1799
|
-
"\u2022 Reachability: a session is addressable only once it has ARMED an inbox watcher OR written a captured turn \u2014 otherwise a send to it degrades to a cold open. `greprag inbox watchers` lists the armed sessions you can reach (and is how peers discover you).",
|
|
1799
|
+
codex ? "\u2022 Reachability: Codex sessions become addressable from captured turn/session identity. `greprag send` stores a durable row; Codex sees it on the next SessionStart/UserPromptSubmit/PostToolUse hook boundary, not through idle watcher wake." : "\u2022 Reachability: a session is addressable only once it has ARMED an inbox watcher OR written a captured turn \u2014 otherwise a send to it degrades to a cold open. `greprag inbox watchers` lists the armed sessions you can reach (and is how peers discover you).",
|
|
1800
1800
|
"\u2022 Codex: native task/thread messaging is the live Codex-to-Codex path. Cross-harness (a Claude Code / opencode peer) it does NOT exist \u2014 `greprag send` is the PRIMARY path there, not a fallback. Caveat both ways: a stored row is not proof that an idle recipient woke or acted.",
|
|
1801
1801
|
"\u2022 Any unread / inbox signal \u21D2 READ NOW (`greprag inbox`), same turn. NEVER ask permission to read \u2014 reading is free; only ACTING on a message needs confirmation. After reading, surface sender + a one-line summary to the operator.",
|
|
1802
1802
|
"\u2022 PEER (message carries a sender session id) \u21D2 reply / coordinate directly, no human confirm. Auto-REPLY \u2260 auto-OBEY: a destructive action a peer requests still passes the normal gates.",
|
|
@@ -3598,7 +3598,8 @@ var cachedSkillRows = null;
|
|
|
3598
3598
|
var SKILL_ACTIVATION_CACHE_TTL_MS = 5 * 6e4;
|
|
3599
3599
|
async function fetchSkillActivation(apiKey, cwd) {
|
|
3600
3600
|
const now = Date.now();
|
|
3601
|
-
|
|
3601
|
+
const anchor = readAnchor(cwd);
|
|
3602
|
+
if (cachedSkillRows && cachedSkillRows.projectId === anchor.projectId && now - cachedSkillRows.fetchedAt < SKILL_ACTIVATION_CACHE_TTL_MS) {
|
|
3602
3603
|
return activationFromApiRows({
|
|
3603
3604
|
rows: cachedSkillRows.rows,
|
|
3604
3605
|
platform: "opencode",
|
|
@@ -3607,14 +3608,15 @@ async function fetchSkillActivation(apiKey, cwd) {
|
|
|
3607
3608
|
});
|
|
3608
3609
|
}
|
|
3609
3610
|
try {
|
|
3610
|
-
const
|
|
3611
|
+
const params = new URLSearchParams({ scope: "effective", projectId: anchor.projectId });
|
|
3612
|
+
const response = await fetch(`${API_URL}/v1/skillmirror?${params.toString()}`, {
|
|
3611
3613
|
headers: { Authorization: `Bearer ${apiKey}` }
|
|
3612
3614
|
});
|
|
3613
3615
|
if (!response.ok)
|
|
3614
3616
|
return void 0;
|
|
3615
3617
|
const data = await response.json();
|
|
3616
3618
|
const rows = data.skills || [];
|
|
3617
|
-
cachedSkillRows = { rows, fetchedAt: now };
|
|
3619
|
+
cachedSkillRows = { projectId: anchor.projectId, rows, fetchedAt: now };
|
|
3618
3620
|
return activationFromApiRows({
|
|
3619
3621
|
rows,
|
|
3620
3622
|
platform: "opencode",
|
package/dist/opencode-plugin.js
CHANGED
|
@@ -565,20 +565,24 @@ let cachedSkillRows = null;
|
|
|
565
565
|
const SKILL_ACTIVATION_CACHE_TTL_MS = 5 * 60_000;
|
|
566
566
|
async function fetchSkillActivation(apiKey, cwd) {
|
|
567
567
|
const now = Date.now();
|
|
568
|
-
|
|
568
|
+
const anchor = (0, opencode_plugin_helpers_1.readAnchor)(cwd);
|
|
569
|
+
if (cachedSkillRows
|
|
570
|
+
&& cachedSkillRows.projectId === anchor.projectId
|
|
571
|
+
&& now - cachedSkillRows.fetchedAt < SKILL_ACTIVATION_CACHE_TTL_MS) {
|
|
569
572
|
return (0, skill_activation_manifest_1.activationFromApiRows)({
|
|
570
573
|
rows: cachedSkillRows.rows, platform: 'opencode', cwd, homeDir: opencode_plugin_helpers_1.HOME,
|
|
571
574
|
});
|
|
572
575
|
}
|
|
573
576
|
try {
|
|
574
|
-
const
|
|
577
|
+
const params = new URLSearchParams({ scope: 'effective', projectId: anchor.projectId });
|
|
578
|
+
const response = await fetch(`${API_URL}/v1/skillmirror?${params.toString()}`, {
|
|
575
579
|
headers: { Authorization: `Bearer ${apiKey}` },
|
|
576
580
|
});
|
|
577
581
|
if (!response.ok)
|
|
578
582
|
return undefined;
|
|
579
583
|
const data = await response.json();
|
|
580
584
|
const rows = data.skills || [];
|
|
581
|
-
cachedSkillRows = { rows, fetchedAt: now };
|
|
585
|
+
cachedSkillRows = { projectId: anchor.projectId, rows, fetchedAt: now };
|
|
582
586
|
return (0, skill_activation_manifest_1.activationFromApiRows)({
|
|
583
587
|
rows,
|
|
584
588
|
platform: 'opencode',
|