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.
Files changed (42) hide show
  1. package/README.md +6 -24
  2. package/dist/commands/codex-delivery.d.ts +1 -1
  3. package/dist/commands/codex-delivery.js +1 -1
  4. package/dist/commands/codex-delivery.js.map +1 -1
  5. package/dist/commands/codex-doctor.d.ts +0 -7
  6. package/dist/commands/codex-doctor.js +9 -113
  7. package/dist/commands/codex-doctor.js.map +1 -1
  8. package/dist/commands/codex-startup.js +22 -91
  9. package/dist/commands/codex-startup.js.map +1 -1
  10. package/dist/commands/codex.js +13 -41
  11. package/dist/commands/codex.js.map +1 -1
  12. package/dist/commands/inbox-primer-reminder.js +4 -2
  13. package/dist/commands/inbox-primer-reminder.js.map +1 -1
  14. package/dist/commands/init.js +14 -24
  15. package/dist/commands/init.js.map +1 -1
  16. package/dist/commands/load.d.ts +1 -1
  17. package/dist/commands/load.js +93 -8
  18. package/dist/commands/load.js.map +1 -1
  19. package/dist/commands/parity.js +2 -2
  20. package/dist/commands/parity.js.map +1 -1
  21. package/dist/commands/skill.js +17 -4
  22. package/dist/commands/skill.js.map +1 -1
  23. package/dist/commands/status.js +1 -1
  24. package/dist/commands/status.js.map +1 -1
  25. package/dist/hook.js +2 -1
  26. package/dist/hook.js.map +1 -1
  27. package/dist/index.js +10 -7
  28. package/dist/index.js.map +1 -1
  29. package/dist/native-skill-mirror.d.ts +18 -2
  30. package/dist/native-skill-mirror.js +333 -32
  31. package/dist/native-skill-mirror.js.map +1 -1
  32. package/dist/opencode-plugin.bundle.js +7 -5
  33. package/dist/opencode-plugin.js +7 -3
  34. package/dist/opencode-plugin.js.map +1 -1
  35. package/dist/skill-mirror-client.js +7 -6
  36. package/dist/skill-mirror-client.js.map +1 -1
  37. package/package.json +1 -1
  38. package/scripts/postinstall.js +2 -2
  39. package/skill/greprag/SKILL.md +2 -2
  40. package/skill/greprag/docs/setup.md +12 -43
  41. package/skill/templates/chip-leader.md +14 -6
  42. package/skill/templates/codex-chip-spawn.md +6 -0
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- /** Materialize exact GrepRAG skill mirrors into native harness registries. */
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 an exact snapshot. Existing non-GrepRAG directories are never touched. */
357
+ /** Apply a native adapter snapshot. Existing non-GrepRAG directories are never touched. */
121
358
  function applyNativeSkillMirror(params) {
122
- const root = nativeSkillRoot(params.platform, params.homeDir);
123
- const state = readState(root);
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 present = new Set();
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
- present.add(skill.skillName);
134
- if (!skill.files.some(file => file.path === 'SKILL.md')
135
- || !skill.files.every(skill_mirror_files_1.isSafeMirroredSkillFile)) {
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)(skill.files);
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 skill.files) {
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(skill.files.map(file => file.path));
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: skill.files.map(file => file.path).sort(),
431
+ files: adapterFiles.map(file => file.path).sort(),
174
432
  };
433
+ rootEntry.touched = true;
175
434
  }
176
435
  if (params.prune) {
177
- for (const [skillName, managed] of Object.entries(state.skills)) {
178
- if (present.has(skillName))
179
- continue;
180
- const target = targetPath(root, skillName);
181
- const currentFiles = readManagedFiles(target, managed);
182
- if (!currentFiles || (0, skill_mirror_files_1.computeSkillFileHash)(currentFiles) !== managed.hash) {
183
- result.blocked++;
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
- writeState(root, state);
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
- const list = await fetch(`${params.apiUrl}/v1/skillmirror`, {
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 names = (data.skills || [])
202
- .map(row => row.skillName)
203
- .filter((name) => typeof name === 'string' && SKILL_NAME_RE.test(name));
204
- const fetched = await Promise.all(names.map(async (skillName) => {
205
- const response = await fetch(`${params.apiUrl}/v1/skillmirror/${encodeURIComponent(skillName)}`, {
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) ? { skillName, files: body.files } : null;
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":";AAAA,4EAA4E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoD5E,4DAEC;AAED,0CAIC;AAED,wDAIC;AA0BD,oEAiBC;AAuMD,0DA4BC;AAoBD,wDAgHC;AAED,sDA2EC;AAED,4DAKC;AAtiBD,4CAA8B;AAC9B,4CAA8B;AAC9B,gDAAkC;AAClC,6DAI8B;AAmC9B,MAAM,aAAa,GAAG,wBAAwB,CAAC;AAC/C,MAAM,oBAAoB,GAAG,4BAA4B,CAAC;AAC1D,MAAM,aAAa,GAAG,iEAAiE,CAAC;AACxF,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAC1C,MAAM,UAAU,GAAG,sBAAsB,CAAC;AAE7B,QAAA,8BAA8B,GAA0B,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAE3F,SAAgB,wBAAwB,CAAC,QAA6B;IACpE,OAAO,QAAQ,KAAK,aAAa,CAAC;AACpC,CAAC;AAED,SAAgB,eAAe,CAAC,QAA6B,EAAE,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE;IACnF,IAAI,QAAQ,KAAK,aAAa;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC/E,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAED,SAAgB,sBAAsB,CAAC,QAA6B,EAAE,UAAkB;IACtF,IAAI,QAAQ,KAAK,aAAa;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAClF,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC5E,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,UAAU,CAAC,KAA0B;IAC5C,OAAO,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC1D,CAAC;AAED,SAAS,gBAAgB,CAAC,KAA0B;IAClD,IAAI,KAAK,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IACxC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,UAAU,KAAK,CAAC,SAAS,EAAE,CAAC;IAC3D,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,yCAAyC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,WAAW,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;AACzD,CAAC;AAED,SAAS,cAAc,CAAC,OAA4B,EAAE,MAA2B;IAC/E,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAC3B,KAAK,KAAK,QAAQ;WACf,KAAK,KAAK,UAAU,MAAM,CAAC,SAAS,EAAE;WACtC,KAAK,KAAK,MAAM,CAAC,SAAS;WAC1B,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,SAAgB,4BAA4B,CAAC,MAA6B;IACxE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAiC,CAAC;IACxD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,EAAE,CAAC;YAC7E,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CACb,kBAAkB,OAAO,CAAC,SAAS,2BAA2B,gBAAgB,CAAC,MAAM,CAAC,0BAA0B,CACjH,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CACnB,QAA6B,EAC7B,KAA0B,EAC1B,OAAe,EACf,UAAmB;IAEnB,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,QAAQ;QAAE,OAAO,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9E,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,OAAO,sBAAsB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAsB,CAAC;QACrG,IAAI,MAAM,EAAE,OAAO,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC;IACjG,CAAC;IAAC,MAAM,CAAC,CAAC,uEAAuE,CAAC,CAAC;IACnF,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,KAAwB;IACxD,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,SAAiB;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACpF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,MAAc,EAAE,QAAgB;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;IAC/C,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc,EAAE,OAAqB;IAC7D,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACpC,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;SAC7D,CAAC,CAAC,CAAC;IACN,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACvB,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;WACrD,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,2BAA2B,CAAC,OAAe;IAClD,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxD,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,GAAG,GAAG,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;gBAAE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YAE/D,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAChC,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;gBAClD,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,MAAM,IAAI,SAAS;oBAAE,MAAM;gBAC9C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;YACD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACnD,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM;gBACjC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;gBACvE,CAAC,CAAC,CAAC,CAAC;YACN,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzF,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;gBACxC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;gBACzF,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/B,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;SAC1B,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SACxB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5G,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACrB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAA0B;IACpD,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACpG,IAAI,MAAM;QAAE,OAAO,wBAAwB,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC;IAClF,OAAO,wBAAwB,CAAC,KAAK,CAAC,SAAS,EAAE,2BAA2B,CAAC,OAAO,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,GAAW;IAChD,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,GAAG,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAChE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACzH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC;AACjF,CAAC;AAED,SAAS,WAAW,CAAC,KAAa,EAAE,KAAa;IAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,GAAG,OAAO,mBAAmB,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzE,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/F,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,KAAa;IACjD,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/D,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAClE,CAAC;AAED,SAAS,wBAAwB,CAAC,SAAiB,EAAE,GAAW;IAC9D,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACtD,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,IAAI,4BAA4B;QAAE,OAAO,UAAU,CAAC;IAExF,MAAM,MAAM,GAAG,gCAAgC,SAAS,oCAAoC,SAAS,GAAG,CAAC;IACzG,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAa,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,IAAI,OAAO;QAAE,SAAS,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,IAAI,MAAM;QAAE,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAEhD,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM;UAC9C,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,KAAK,KAAK,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC1G,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,4BAA4B,GAAG,WAAW,GAAG,EAAE,CAAC,CAAC;IACrF,MAAM,KAAK,GAAG;QACZ,GAAG,UAAU;QACb,YAAY,cAAc,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE;QAC1D,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;KAC7E,CAAC;IACF,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,QAAQ,CAAC,MAAM,IAAI,4BAA4B;QAAE,OAAO,QAAQ,CAAC;IAErE,MAAM,YAAY,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,4BAA4B,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;IACpE,IAAI,OAAO;QAAE,YAAY,CAAC,IAAI,CAAC,aAAa,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;;QAC7E,YAAY,CAAC,IAAI,CAAC,YAAY,cAAc,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAC5E,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,QAAQ,CAAC,MAAM,IAAI,4BAA4B;QACpD,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,iBAAiB,CAAC,QAA6B,EAAE,KAA0B;IAClF,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAClC,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,cAAc,OAAO,EAAE,CAAC;IAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;IACzG,MAAM,UAAU,GAAG,aAAa,QAAQ,EAAE,CAAC;IAC3C,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM;QACtC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,oBAAoB,SAAS,IAAI,QAAQ,IAAI,WAAW,IAAI,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACnH,CAAC,CAAC,4DAA4D,CAAC;IACjE,OAAO,KAAK,SAAS;;;;;;;;;eASR,SAAS,IAAI,WAAW,IAAI,UAAU;;;;;;;EAOnD,cAAc;CACf,CAAC;AACF,CAAC;AAED,SAAgB,uBAAuB,CACrC,QAA6B,EAC7B,KAA0B;IAE1B,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACrD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;WAChD,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,4CAAuB,CAAC;QAAE,OAAO,IAAI,CAAC;IAChE,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,4BAA4B;QAAE,OAAO,IAAI,CAAC;IACnF,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,gBAAgB,GAAG;QACvB,qBAAqB,OAAO,EAAE;QAC9B,kBAAkB,KAAK,EAAE;QACzB,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,uBAAuB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,OAAO,GAAG;QACV,KAAK,CAAC,SAAS;;EAErB,WAAW,CAAC,WAAW,CAAC;EACxB,gBAAgB;;;EAGhB,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;IACrC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc,EAAE,aAAuB;IACjE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC;YAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,8CAA8C,CAAC,CAAC;QACrF,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACvD,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACrB,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACvE,IAAI,CAAC;YAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,wCAAwC,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,CAAC;QAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,kCAAkC,CAAC,CAAC;AAC5E,CAAC;AAED,2FAA2F;AAC3F,SAAgB,sBAAsB,CAAC,MAOtC;IACC,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/C,OAAO;YACL,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;YAChD,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;SAC1C,CAAC;IACJ,CAAC;IACD,4BAA4B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAC/C,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnF,MAAM,MAAM,GAA4B;QACtC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;KACzE,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgF,CAAC;IACtG,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE;QACjC,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,GAAG,EAAU,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAC/E,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YACzC,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QACvE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAClC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,YAAY,GAAG,uBAAuB,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACrE,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACtC,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,IAAA,yCAAoB,EAAC,YAAY,CAAC,CAAC;QACpD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACvD,IAAI,CAAC,YAAY,IAAI,IAAA,yCAAoB,EAAC,YAAY,CAAC,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;gBACzE,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,SAAS;YACX,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC9B,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,SAAS;YACX,CAAC;QACH,CAAC;QAED,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7D,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/D,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACvF,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,CAAC;QACD,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG;YACxC,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;SAClD,CAAC;QACF,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC7D,IAAI,MAAM,CAAC,eAAe,KAAK,KAAK;YAAE,SAAS,CAAC,UAAU,CAAC,CAAC;QAC5D,IAAI,UAAU;YAAE,SAAS,CAAC,sBAAsB,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;QAC/E,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;YAClC,IAAI,MAAM,CAAC,eAAe,KAAK,KAAK,IAAI,IAAI,KAAK,UAAU;gBAAE,SAAS;YACtE,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;oBAAE,SAAS;gBAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBAC3C,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACvD,IAAI,CAAC,YAAY,IAAI,IAAA,yCAAoB,EAAC,YAAY,CAAC,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;oBACzE,MAAM,CAAC,OAAO,EAAE,CAAC;oBACjB,SAAS;gBACX,CAAC;gBACD,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC1C,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACrC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;gBACrB,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACjG,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,qBAAqB,CAAC,MAO3C;IACC,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/C,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACtF,CAAC;IACD,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC7B,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,MAAM,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACvF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;QAChC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,EAAE;KACtD,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAW/E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAuC,CAAC;IACpE,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;SAC7B,MAAM,CAAC,CAAC,GAAG,EAAqD,EAAE,CACjE,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAuC,EAAE;QAC5F,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,eAAe,EAAE,CAAC;QACtC,IAAI,GAAG,CAAC,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;aAChD,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,GAAG,CAAC,SAAS;gBAAE,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,MAAM,CAAC,MAAM,mBAAmB,kBAAkB,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EACjH;YACA,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,EAAE;SACpD,CACF,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA6B,CAAC;QAC9D,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjC,SAAS;YACT,OAAO,EAAE,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YAClE,KAAK,EAAE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YACrD,SAAS,EAAE,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACxE,WAAW,EAAE,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;YAC9E,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YACzD,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;YAC9E,kBAAkB,EAAE,OAAO,GAAG,CAAC,kBAAkB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;SACpG,CAAC,CAAC,CAAC,IAAI,CAAC;IACX,CAAC,CAAC,CAAC,CAAC;IACJ,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,MAAM,GAAG,OAAgC,CAAC;IAChD,OAAO,sBAAsB,CAAC;QAC5B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM;QACN,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,KAAK,EAAE,IAAI;QACX,eAAe,EAAE,CAAC,MAAM,CAAC,SAAS;KACnC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,wBAAwB,CAAC,MAA+B;IACtE,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAClE,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IACnD,OAAO,wBAAwB,MAAM,YAAY,MAAM,CAAC,OAAO,UAAU;UACrE,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACnE,CAAC"}
@@ -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 normal live Codex-to-Codex path. Install the GrepRAG startup watcher with `greprag init --codex --tenant-id <handle> --install-watcher` or `greprag codex startup install` \u2014 it is how messages from non-Codex peers (Claude Code / opencode) reach you; without it they pile up unread. Turn hooks are boundary fallback: if hooks exist but do not fire, open Codex Desktop Settings -> Settings -> Hooks, trust the GrepRAG commands, and 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\`.`,
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
- if (cachedSkillRows && now - cachedSkillRows.fetchedAt < SKILL_ACTIVATION_CACHE_TTL_MS) {
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 response = await fetch(`${API_URL}/v1/skillmirror`, {
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",
@@ -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
- if (cachedSkillRows && now - cachedSkillRows.fetchedAt < SKILL_ACTIVATION_CACHE_TTL_MS) {
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 response = await fetch(`${API_URL}/v1/skillmirror`, {
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',