greprag 5.50.0 → 5.52.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.
@@ -14,5 +14,7 @@ import { ReminderModule } from './reminder-types';
14
14
  export declare function buildDocPointerAnnounce(pointers: Array<{
15
15
  path: string;
16
16
  hook: string;
17
+ decayNote?: string;
18
+ buried?: boolean;
17
19
  }> | undefined): string | null;
18
20
  export declare const docPointerAnnounceModule: ReminderModule;
@@ -25,10 +25,24 @@ function buildDocPointerAnnounce(pointers) {
25
25
  const more = pointers.length > shown.length
26
26
  ? ` (+${pointers.length - shown.length} more registered)`
27
27
  : '';
28
+ // Deterministic staleness (docs/doc-pointer-system.md §staleness): a doc's
29
+ // cited files, checked against the live tree by the hook. `buried` = most refs
30
+ // gone → flagged loudly, never silently dropped; `decayNote` = a few gone.
31
+ const line = (p) => {
32
+ if (p.buried)
33
+ return `⚠ ${p.path} — ${p.hook} [likely stale: ${p.decayNote} — verify or remove]`;
34
+ if (p.decayNote)
35
+ return `• ${p.path} — ${p.hook} [${p.decayNote}]`;
36
+ return `• ${p.path} — ${p.hook}`;
37
+ };
38
+ const buriedN = shown.filter((p) => p.buried).length;
39
+ const staleFooter = buriedN > 0
40
+ ? `\n${buriedN} doc(s) flagged likely-stale (cited files vanished) — confirm or remove them.`
41
+ : '';
28
42
  return [
29
43
  `[greprag docs — core documents on file for this project (auto-registered)${more}:]`,
30
- ...shown.map((p) => `• ${p.path} — ${p.hook}`),
31
- 'One of these covers your topic? READ IT before re-deriving what it already answers.',
44
+ ...shown.map(line),
45
+ 'One of these covers your topic? READ IT before re-deriving what it already answers.' + staleFooter,
32
46
  ].join('\n');
33
47
  }
34
48
  exports.docPointerAnnounceModule = {
@@ -1 +1 @@
1
- {"version":3,"file":"doc-pointer-reminder.js","sourceRoot":"","sources":["../../src/commands/doc-pointer-reminder.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;6EAW6E;;;AAS7E,0DAaC;AAlBD;;sDAEsD;AACtD,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB,SAAgB,uBAAuB,CACrC,QAA2D;IAE3D,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;QACzC,CAAC,CAAC,MAAM,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,mBAAmB;QACzD,CAAC,CAAC,EAAE,CAAC;IACP,OAAO;QACL,4EAA4E,IAAI,IAAI;QACpF,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,qFAAqF;KACtF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAEY,QAAA,wBAAwB,GAAmB;IACtD,EAAE,EAAE,sBAAsB;IAC1B,MAAM,EAAE,CAAC,IAAiB,EAAa,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,sCAAsC;IACtG,QAAQ,EAAE,CAAC,GAAgB,EAAiB,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAAC,WAAW,CAAC;IACvF,mBAAmB,EAAE,KAAK;IAC1B,QAAQ,EAAE,GAAkB,EAAE,CAAC,IAAI;CACpC,CAAC"}
1
+ {"version":3,"file":"doc-pointer-reminder.js","sourceRoot":"","sources":["../../src/commands/doc-pointer-reminder.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;6EAW6E;;;AAS7E,0DAyBC;AA9BD;;sDAEsD;AACtD,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB,SAAgB,uBAAuB,CACrC,QAAiG;IAEjG,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;QACzC,CAAC,CAAC,MAAM,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,mBAAmB;QACzD,CAAC,CAAC,EAAE,CAAC;IACP,2EAA2E;IAC3E,+EAA+E;IAC/E,2EAA2E;IAC3E,MAAM,IAAI,GAAG,CAAC,CAAuE,EAAU,EAAE;QAC/F,IAAI,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,oBAAoB,CAAC,CAAC,SAAS,sBAAsB,CAAC;QAClG,IAAI,CAAC,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,SAAS,GAAG,CAAC;QACpE,OAAO,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IACrD,MAAM,WAAW,GAAG,OAAO,GAAG,CAAC;QAC7B,CAAC,CAAC,KAAK,OAAO,+EAA+E;QAC7F,CAAC,CAAC,EAAE,CAAC;IACP,OAAO;QACL,4EAA4E,IAAI,IAAI;QACpF,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QAClB,qFAAqF,GAAG,WAAW;KACpG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAEY,QAAA,wBAAwB,GAAmB;IACtD,EAAE,EAAE,sBAAsB;IAC1B,MAAM,EAAE,CAAC,IAAiB,EAAa,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,sCAAsC;IACtG,QAAQ,EAAE,CAAC,GAAgB,EAAiB,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAAC,WAAW,CAAC;IACvF,mBAAmB,EAAE,KAAK;IAC1B,QAAQ,EAAE,GAAkB,EAAE,CAAC,IAAI;CACpC,CAAC"}
@@ -0,0 +1,17 @@
1
+ /** greprag docptr — the Document Pointer System's operator verbs
2
+ * (docs/doc-pointer-system.md — the Capture System's point-capture consumer).
3
+ *
4
+ * docptr backfill [--missing-only]
5
+ * One-time catch-up. The capture leg only ever SEES a doc when it's
6
+ * edited during a live session (it rides the Stop hook's filesTouched
7
+ * stream), so a stable-and-core doc that's never touched again is
8
+ * invisible to the announce forever. Backfill feeds EVERY tracked,
9
+ * eligible .md through the same /events judge pipe the Stop hook uses —
10
+ * seeding the registry (and the staleness manifest) from existence, not
11
+ * churn. Idempotent: re-running re-judges + upserts. --missing-only
12
+ * skips docs already registered (cheap top-up vs full manifest reseed).
13
+ *
14
+ * Root-causes the "registration requires an edit event" gap. Thin client over
15
+ * /v1/docptr/:projectId/{reconcile,events}; project resolved from cwd like
16
+ * every other command. Self-contained dispatcher + body (the CLI pattern). */
17
+ export declare function runDocPtr(args: string[]): Promise<void>;
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ /** greprag docptr — the Document Pointer System's operator verbs
3
+ * (docs/doc-pointer-system.md — the Capture System's point-capture consumer).
4
+ *
5
+ * docptr backfill [--missing-only]
6
+ * One-time catch-up. The capture leg only ever SEES a doc when it's
7
+ * edited during a live session (it rides the Stop hook's filesTouched
8
+ * stream), so a stable-and-core doc that's never touched again is
9
+ * invisible to the announce forever. Backfill feeds EVERY tracked,
10
+ * eligible .md through the same /events judge pipe the Stop hook uses —
11
+ * seeding the registry (and the staleness manifest) from existence, not
12
+ * churn. Idempotent: re-running re-judges + upserts. --missing-only
13
+ * skips docs already registered (cheap top-up vs full manifest reseed).
14
+ *
15
+ * Root-causes the "registration requires an edit event" gap. Thin client over
16
+ * /v1/docptr/:projectId/{reconcile,events}; project resolved from cwd like
17
+ * every other command. Self-contained dispatcher + body (the CLI pattern). */
18
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ var desc = Object.getOwnPropertyDescriptor(m, k);
21
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
22
+ desc = { enumerable: true, get: function() { return m[k]; } };
23
+ }
24
+ Object.defineProperty(o, k2, desc);
25
+ }) : (function(o, m, k, k2) {
26
+ if (k2 === undefined) k2 = k;
27
+ o[k2] = m[k];
28
+ }));
29
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
30
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
31
+ }) : function(o, v) {
32
+ o["default"] = v;
33
+ });
34
+ var __importStar = (this && this.__importStar) || (function () {
35
+ var ownKeys = function(o) {
36
+ ownKeys = Object.getOwnPropertyNames || function (o) {
37
+ var ar = [];
38
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
39
+ return ar;
40
+ };
41
+ return ownKeys(o);
42
+ };
43
+ return function (mod) {
44
+ if (mod && mod.__esModule) return mod;
45
+ var result = {};
46
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
47
+ __setModuleDefault(result, mod);
48
+ return result;
49
+ };
50
+ })();
51
+ Object.defineProperty(exports, "__esModule", { value: true });
52
+ exports.runDocPtr = runDocPtr;
53
+ const fs = __importStar(require("node:fs"));
54
+ const node_child_process_1 = require("node:child_process");
55
+ const project_anchor_1 = require("../project-anchor");
56
+ function getConfig() {
57
+ return {
58
+ apiUrl: process.env.GREPRAG_API_URL || 'https://api.greprag.com',
59
+ apiKey: process.env.GREPRAG_API_KEY || '',
60
+ };
61
+ }
62
+ const HELP = `greprag docptr — Document Pointer System (docs/doc-pointer-system.md)
63
+
64
+ USAGE
65
+ greprag docptr backfill [--missing-only]
66
+ Judge every tracked, eligible .md and register the core ones — the
67
+ one-time catch-up for docs that predate the system or are never edited.
68
+ Idempotent. --missing-only skips already-registered docs.`;
69
+ /** Mirror of hook.ts isDocPathEligible — the deterministic pre-filter (non-.md,
70
+ * dot-dirs, build trees, harness-owned CLAUDE.md/MEMORY.md). Duplicated because
71
+ * the CLI command files are self-contained (zero cross-file coupling). */
72
+ function isDocPathEligible(relPath) {
73
+ const p = relPath.replace(/\\/g, '/');
74
+ if (!p.toLowerCase().endsWith('.md'))
75
+ return false;
76
+ const segments = p.split('/');
77
+ const base = segments[segments.length - 1];
78
+ if (base === 'CLAUDE.md' || base === 'MEMORY.md')
79
+ return false;
80
+ for (const seg of segments.slice(0, -1)) {
81
+ if (seg.startsWith('.'))
82
+ return false;
83
+ if (seg === 'node_modules' || seg === 'dist' || seg === 'build' || seg === 'vendor')
84
+ return false;
85
+ }
86
+ return true;
87
+ }
88
+ const SNIPPET_CHARS = 2_000;
89
+ const EVENTS_PER_POST = 8;
90
+ /** Judging runs server-side in waitUntil (async, after the POST returns), so a
91
+ * burst of ~30 POSTs fires ~230 near-simultaneous Flash-Lite calls → Gemini
92
+ * rate-limits and most return null (unjudged, nothing registered). Spacing the
93
+ * POSTs lets each batch's judges finish + the RPM window clear before the next
94
+ * 8 fire, so a one-shot backfill actually converges instead of landing ~20/run. */
95
+ const BATCH_DELAY_MS = 4_000;
96
+ const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
97
+ async function runDocPtr(args) {
98
+ const sub = args[0];
99
+ if (sub !== 'backfill') {
100
+ console.log(HELP);
101
+ return;
102
+ }
103
+ const cfg = getConfig();
104
+ if (!cfg.apiKey) {
105
+ console.error('GREPRAG_API_KEY not set — run `greprag init` first.');
106
+ process.exit(1);
107
+ }
108
+ const missingOnly = args.includes('--missing-only');
109
+ const cwd = process.cwd();
110
+ const anchor = (0, project_anchor_1.readAnchor)(cwd);
111
+ // Enumerate tracked, eligible docs.
112
+ let tracked;
113
+ try {
114
+ const out = (0, node_child_process_1.execFileSync)('git', ['ls-files', '--', '*.md'], {
115
+ cwd, encoding: 'utf-8', windowsHide: true,
116
+ });
117
+ tracked = out.split('\n').map(s => s.trim()).filter(s => s && isDocPathEligible(s));
118
+ }
119
+ catch {
120
+ console.error('Not a git repo (or git unavailable) — backfill needs `git ls-files`.');
121
+ process.exit(1);
122
+ return;
123
+ }
124
+ if (tracked.length === 0) {
125
+ console.log('No eligible .md docs found.');
126
+ return;
127
+ }
128
+ // --missing-only: pull the already-registered set from a list-only reconcile
129
+ // (no presentPaths → no stale sweep) and subtract it.
130
+ let targets = tracked;
131
+ if (missingOnly) {
132
+ try {
133
+ const res = await fetch(`${cfg.apiUrl}/v1/docptr/${anchor.projectId}/reconcile`, {
134
+ method: 'POST',
135
+ headers: { 'Authorization': `Bearer ${cfg.apiKey}`, 'Content-Type': 'application/json' },
136
+ body: JSON.stringify({ projectName: anchor.projectName }),
137
+ });
138
+ if (res.ok) {
139
+ const data = await res.json();
140
+ const have = new Set((data.pointers || []).map(p => p.path));
141
+ targets = tracked.filter(p => !have.has(p));
142
+ }
143
+ }
144
+ catch { /* best-effort — fall back to judging everything */ }
145
+ if (targets.length === 0) {
146
+ console.log('Every eligible doc is already registered.');
147
+ return;
148
+ }
149
+ }
150
+ const batches = Math.ceil(targets.length / EVENTS_PER_POST);
151
+ const etaSec = Math.round((batches * BATCH_DELAY_MS) / 1000);
152
+ console.log(`Backfilling ${targets.length} doc(s) for ${anchor.projectName} — judging via Flash-Lite, ` +
153
+ `paced to dodge rate limits (~${etaSec}s)…`);
154
+ // Build {path, snippet} events; unreadable/empty docs skipped.
155
+ const events = [];
156
+ for (const rel of targets) {
157
+ try {
158
+ const snippet = fs.readFileSync(rel, 'utf-8').slice(0, SNIPPET_CHARS);
159
+ if (snippet.trim())
160
+ events.push({ path: rel.replace(/\\/g, '/'), snippet });
161
+ }
162
+ catch { /* skip */ }
163
+ }
164
+ let queued = 0;
165
+ for (let i = 0; i < events.length; i += EVENTS_PER_POST) {
166
+ if (i > 0)
167
+ await sleep(BATCH_DELAY_MS); // pace so the judges don't burst-throttle
168
+ const batch = events.slice(i, i + EVENTS_PER_POST);
169
+ try {
170
+ const res = await fetch(`${cfg.apiUrl}/v1/docptr/${anchor.projectId}/events`, {
171
+ method: 'POST',
172
+ headers: { 'Authorization': `Bearer ${cfg.apiKey}`, 'Content-Type': 'application/json' },
173
+ body: JSON.stringify({ projectName: anchor.projectName, events: batch }),
174
+ });
175
+ if (res.ok) {
176
+ const data = await res.json();
177
+ queued += data.queued || 0;
178
+ }
179
+ else {
180
+ console.error(` batch ${i / EVENTS_PER_POST + 1}: API ${res.status}`);
181
+ }
182
+ }
183
+ catch (e) {
184
+ console.error(` batch ${i / EVENTS_PER_POST + 1}: ${e instanceof Error ? e.message : String(e)}`);
185
+ }
186
+ }
187
+ console.log(`Queued ${queued} doc(s) for judging. Core docs register within seconds; ` +
188
+ `re-run \`greprag discover\` or start a fresh session to see the updated announce.`);
189
+ }
190
+ //# sourceMappingURL=docptr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docptr.js","sourceRoot":"","sources":["../../src/commands/docptr.ts"],"names":[],"mappings":"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"}
@@ -6,10 +6,13 @@
6
6
  * agent runs it and reads the doctrine inline (the `/ui-skills` "I know kung fu"
7
7
  * pattern). docs/load-system.md.
8
8
  *
9
- * greprag load → the catalog (every entry, one line each)
9
+ * greprag load → the catalog (bundled entries + your mirrored skills)
10
10
  * greprag load <name> → that entry's full doctrine, printed to stdout
11
+ * greprag load <skill> <docpath> → a mirrored skill's companion doc
11
12
  *
12
- * Entries are bundled markdown under `skill/templates/`, shipped in the CLI
13
- * package `files` array (resolved the same way `init` + `skill` resolve bundled
14
- * assets: relative to __dirname). Zero network, zero filesystem state. */
15
- export declare function runLoad(args: string[]): void;
13
+ * Resolution order (docs/load-system.md): BUNDLED (markdown under
14
+ * `skill/templates/`, in the package `files` array zero network) the
15
+ * Tier-3 SKILL MIRROR (your own used skills, auto-shadowed per-tenant, served
16
+ * from /v1/skillmirror works on any machine/harness with the CLI + key).
17
+ * Marketplace (remote curated) comes later. */
18
+ export declare function runLoad(args: string[]): Promise<void>;
@@ -7,12 +7,15 @@
7
7
  * agent runs it and reads the doctrine inline (the `/ui-skills` "I know kung fu"
8
8
  * pattern). docs/load-system.md.
9
9
  *
10
- * greprag load → the catalog (every entry, one line each)
10
+ * greprag load → the catalog (bundled entries + your mirrored skills)
11
11
  * greprag load <name> → that entry's full doctrine, printed to stdout
12
+ * greprag load <skill> <docpath> → a mirrored skill's companion doc
12
13
  *
13
- * Entries are bundled markdown under `skill/templates/`, shipped in the CLI
14
- * package `files` array (resolved the same way `init` + `skill` resolve bundled
15
- * assets: relative to __dirname). Zero network, zero filesystem state. */
14
+ * Resolution order (docs/load-system.md): BUNDLED (markdown under
15
+ * `skill/templates/`, in the package `files` array zero network) the
16
+ * Tier-3 SKILL MIRROR (your own used skills, auto-shadowed per-tenant, served
17
+ * from /v1/skillmirror — works on any machine/harness with the CLI + key).
18
+ * Marketplace (remote curated) comes later. */
16
19
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17
20
  if (k2 === undefined) k2 = k;
18
21
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -82,27 +85,95 @@ const LIBRARY = {
82
85
  function templatePath(file) {
83
86
  return path.join(__dirname, '..', '..', 'skill', 'templates', file);
84
87
  }
85
- function printCatalog() {
88
+ // ---------- Tier 3 — the skill mirror (docs/load-system.md) -------------------
89
+ const API_URL_DEFAULT = 'https://api.greprag.com';
90
+ const MIRROR_TIMEOUT_MS = 4_000;
91
+ function mirrorConfig() {
92
+ const apiKey = process.env.GREPRAG_API_KEY || '';
93
+ if (!apiKey)
94
+ return null;
95
+ return { apiUrl: process.env.GREPRAG_API_URL || API_URL_DEFAULT, apiKey };
96
+ }
97
+ /** GET a mirror endpoint with a hard timeout — the catalog must never hang a
98
+ * terminal. Null on any failure (offline, no key, 404). */
99
+ async function mirrorGet(pathname) {
100
+ const cfg = mirrorConfig();
101
+ if (!cfg)
102
+ return null;
103
+ try {
104
+ const ctrl = new AbortController();
105
+ const t = setTimeout(() => ctrl.abort(), MIRROR_TIMEOUT_MS);
106
+ const res = await fetch(`${cfg.apiUrl}${pathname}`, {
107
+ headers: { 'Authorization': `Bearer ${cfg.apiKey}` },
108
+ signal: ctrl.signal,
109
+ });
110
+ clearTimeout(t);
111
+ if (!res.ok)
112
+ return null;
113
+ return await res.json();
114
+ }
115
+ catch {
116
+ return null;
117
+ }
118
+ }
119
+ async function printCatalog() {
86
120
  const names = Object.keys(LIBRARY);
87
121
  const width = Math.max(...names.map((n) => n.length));
88
122
  console.log('\ngreprag load <name> — load doctrine on demand (the CLI is the payload, no .md files):\n');
89
123
  for (const name of names) {
90
124
  console.log(` ${name.padEnd(width)} ${LIBRARY[name].purpose}`);
91
125
  }
92
- console.log('\n greprag load <name> print the full entry');
93
- console.log(' greprag load this catalog\n');
126
+ // Tier-3 section: the operator's own skills, auto-mirrored from use.
127
+ const data = await mirrorGet('/v1/skillmirror');
128
+ const skills = data?.skills || [];
129
+ if (skills.length > 0) {
130
+ const w = Math.max(...skills.map((s) => (s.skillName || '').length), 8);
131
+ console.log('\nYour mirrored skills (auto-fresh from use — work on any machine/harness):\n');
132
+ for (const s of skills) {
133
+ if (!s.skillName)
134
+ continue;
135
+ console.log(` ${s.skillName.padEnd(w)} ${(s.description || '').slice(0, 110)}`);
136
+ }
137
+ }
138
+ console.log('\n greprag load <name> print the full entry / mirrored skill');
139
+ console.log(' greprag load <skill> <doc> a mirrored skill\'s companion doc');
140
+ console.log(' greprag load this catalog\n');
141
+ }
142
+ /** Serve a mirrored skill: SKILL.md (or a named companion doc) to stdout. */
143
+ async function printMirroredSkill(name, docPath) {
144
+ const data = await mirrorGet(`/v1/skillmirror/${encodeURIComponent(name)}`);
145
+ const files = data?.files || [];
146
+ if (files.length === 0)
147
+ return false;
148
+ const target = docPath || 'SKILL.md';
149
+ const file = files.find((f) => f.path === target);
150
+ if (!file || typeof file.content !== 'string') {
151
+ console.error(`Mirrored skill "${name}" has no file "${target}". Files: ${files.map((f) => f.path).join(', ')}`);
152
+ process.exit(1);
153
+ }
154
+ process.stdout.write(file.content.endsWith('\n') ? file.content : file.content + '\n');
155
+ if (!docPath) {
156
+ const companions = files.map((f) => f.path).filter((p) => p !== 'SKILL.md');
157
+ if (companions.length > 0) {
158
+ process.stdout.write(`\n[mirrored skill — companion docs: ${companions.join(', ')} — \`greprag load ${name} <doc>\`]\n`);
159
+ }
160
+ }
161
+ return true;
94
162
  }
95
- function runLoad(args) {
163
+ async function runLoad(args) {
96
164
  const name = args[0];
97
165
  // Bare (or an explicit list flag) → the browsable catalog.
98
166
  if (!name || name === '--list' || name === 'list') {
99
- printCatalog();
167
+ await printCatalog();
100
168
  return;
101
169
  }
102
170
  const entry = LIBRARY[name];
103
171
  if (!entry) {
172
+ // Not bundled → try the Tier-3 skill mirror before giving up.
173
+ if (await printMirroredSkill(name, args[1]))
174
+ return;
104
175
  console.error(`Unknown load entry: ${name}\n`);
105
- printCatalog();
176
+ await printCatalog();
106
177
  process.exit(1);
107
178
  }
108
179
  const file = templatePath(entry.file);
@@ -1 +1 @@
1
- {"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/commands/load.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/commands/load.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;gDAgBgD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgIhD,0BA8BC;AA5JD,uCAAyB;AACzB,2CAA6B;AAS7B;qEACqE;AACrE,MAAM,OAAO,GAA8B;IACzC,YAAY,EAAE;QACZ,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,uHAAuH;KACjI;IACD,aAAa,EAAE;QACb,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,4FAA4F;KACtG;IACD,eAAe,EAAE;QACf,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,+FAA+F;KACzG;IACD,aAAa,EAAE;QACb,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,8JAA8J;KACxK;IACD,iBAAiB,EAAE;QACjB,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,kGAAkG;KAC5G;IACD,sBAAsB,EAAE;QACtB,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,oIAAoI;KAC9I;CACF,CAAC;AAEF,+EAA+E;AAC/E,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;AACtE,CAAC;AAED,iFAAiF;AAEjF,MAAM,eAAe,GAAG,yBAAyB,CAAC;AAClD,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAEhC,SAAS,YAAY;IACnB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;IACjD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,eAAe,EAAE,MAAM,EAAE,CAAC;AAC5E,CAAC;AAED;4DAC4D;AAC5D,KAAK,UAAU,SAAS,CAAC,QAAgB;IACvC,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,iBAAiB,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,QAAQ,EAAE,EAAE;YAClD,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,GAAG,CAAC,MAAM,EAAE,EAAE;YACpD,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,YAAY,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,OAAO,MAAM,GAAG,CAAC,IAAI,EAA6B,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAID,KAAK,UAAU,YAAY;IACzB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,2FAA2F,CAAC,CAAC;IACzG,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,qEAAqE;IACrE,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAChD,MAAM,MAAM,GAAI,IAAI,EAAE,MAAyC,IAAI,EAAE,CAAC;IACtE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAC;QAC7F,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,IAAI,CAAC,CAAC,CAAC,SAAS;gBAAE,SAAS;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;AACjE,CAAC;AAED,6EAA6E;AAC7E,KAAK,UAAU,kBAAkB,CAAC,IAAY,EAAE,OAAgB;IAC9D,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,mBAAmB,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAI,IAAI,EAAE,KAAgE,IAAI,EAAE,CAAC;IAC5F,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAErC,MAAM,MAAM,GAAG,OAAO,IAAI,UAAU,CAAC;IACrC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAClD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO,CAAC,KAAK,CAAC,mBAAmB,IAAI,kBAAkB,MAAM,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACvF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC;QAC5E,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,uCAAuC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,IAAI,aAAa,CACnG,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAEM,KAAK,UAAU,OAAO,CAAC,IAAc;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAErB,2DAA2D;IAC3D,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAClD,MAAM,YAAY,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,8DAA8D;QAC9D,IAAI,MAAM,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO;QACpD,OAAO,CAAC,KAAK,CAAC,uBAAuB,IAAI,IAAI,CAAC,CAAC;QAC/C,MAAM,YAAY,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CACX,eAAe,IAAI,+CAA+C,KAAK,CAAC,IAAI,KAAK;YACjF,8CAA8C,CAC/C,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;AACjE,CAAC"}
@@ -22,6 +22,7 @@ const collision_reminder_1 = require("./collision-reminder");
22
22
  const version_reminder_1 = require("./version-reminder");
23
23
  const enrichment_health_reminder_1 = require("./enrichment-health-reminder");
24
24
  const skill_gain_reminder_1 = require("./skill-gain-reminder");
25
+ const skill_mirror_reminder_1 = require("./skill-mirror-reminder");
25
26
  /** Registry order = display order. THE single agent-facing announce/reminder assembly:
26
27
  * the hook does I/O → fills ReminderEnv → collectAnnounces (SessionStart) / collectReminders
27
28
  * (per turn) render every module here in this order. Order preserves the historical recap
@@ -34,7 +35,8 @@ exports.REGISTRY = [
34
35
  load_primer_reminder_1.chipSpawnPointerModule,
35
36
  corpus_reminder_1.corpusAnnounceModule,
36
37
  doc_pointer_reminder_1.docPointerAnnounceModule, // announce-only "core documents" list (docs/doc-pointer-system.md)
37
- skill_gain_reminder_1.skillGainAnnounceModule, // announce-only skill-gain landings + proposals (docs/skill-learning-loop.md)
38
+ skill_gain_reminder_1.skillGainAnnounceModule, // announce-only skill-gain landings (docs/skill-learning-loop.md)
39
+ skill_mirror_reminder_1.skillMirrorAnnounceModule, // one-line Tier-3 pointer: your skills travel via greprag load (docs/load-system.md)
38
40
  setup_reminder_1.setupWarningModule,
39
41
  version_reminder_1.versionUpgradeModule, // Deficiency-gated announce — silent unless a newer release exists
40
42
  enrichment_health_reminder_1.enrichmentHealthModule, // Deficiency-gated announce — silent unless the Gemini probe fails (fix c2eb8777)
@@ -1 +1 @@
1
- {"version":3,"file":"reminder-registry.js","sourceRoot":"","sources":["../../src/commands/reminder-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reminder-registry.js","sourceRoot":"","sources":["../../src/commands/reminder-registry.ts"],"names":[],"mappings":"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"}
@@ -58,6 +58,8 @@ export interface ReminderEnv {
58
58
  docPointers?: Array<{
59
59
  path: string;
60
60
  hook: string;
61
+ decayNote?: string;
62
+ buried?: boolean;
61
63
  }>;
62
64
  /** Deficiency-gated outage signal (fix c2eb8777): the live Gemini probe
63
65
  * (/v1/health/enrichment) failed — write-side enrichment is down. Set by
@@ -78,6 +80,14 @@ export interface ReminderEnv {
78
80
  oneLiner: string;
79
81
  }>;
80
82
  };
83
+ /** Tier-3 skill-mirror signal (docs/load-system.md): how many of the
84
+ * operator's skills are mirrored into the load store + the freshest few
85
+ * names. Drives the one-line "your skills travel with the harness"
86
+ * pointer. Undefined/0 → announce silent. */
87
+ mirroredSkills?: {
88
+ count: number;
89
+ names: string[];
90
+ };
81
91
  /** Auto-surfaced episodic-memory injection — the hook owns the recall-intent gate +
82
92
  * the search + the confidence gate + framing; the memory-reflex module routes the
83
93
  * framed string as its per-turn reminder. Null = nothing cleared the gate this turn. */
@@ -0,0 +1,15 @@
1
+ /** skill-mirror-announce — the Tier-3 mirror's SessionStart pointer
2
+ * (docs/load-system.md §Tier 3). A POINTER, not a list (context economy):
3
+ * one line naming the capability + the command — the catalog lives behind
4
+ * `greprag load`. This is the "where to find skills" info the operator asked
5
+ * for, and the discovery half of trigger parity until the frontrun judge
6
+ * lands (see the spec's named gaps).
7
+ *
8
+ * The hook passes env.mirroredSkills (count + a few freshest names); this
9
+ * module is PURE render. Silent when nothing is mirrored yet. */
10
+ import { ReminderModule } from './reminder-types';
11
+ export declare function buildSkillMirrorAnnounce(m: {
12
+ count: number;
13
+ names: string[];
14
+ } | undefined): string | null;
15
+ export declare const skillMirrorAnnounceModule: ReminderModule;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ /** skill-mirror-announce — the Tier-3 mirror's SessionStart pointer
3
+ * (docs/load-system.md §Tier 3). A POINTER, not a list (context economy):
4
+ * one line naming the capability + the command — the catalog lives behind
5
+ * `greprag load`. This is the "where to find skills" info the operator asked
6
+ * for, and the discovery half of trigger parity until the frontrun judge
7
+ * lands (see the spec's named gaps).
8
+ *
9
+ * The hook passes env.mirroredSkills (count + a few freshest names); this
10
+ * module is PURE render. Silent when nothing is mirrored yet. */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.skillMirrorAnnounceModule = void 0;
13
+ exports.buildSkillMirrorAnnounce = buildSkillMirrorAnnounce;
14
+ function buildSkillMirrorAnnounce(m) {
15
+ if (!m || m.count <= 0)
16
+ return null;
17
+ const sample = m.names.slice(0, 4).join(', ');
18
+ const more = m.count > 4 ? ', …' : '';
19
+ return [
20
+ `[greprag skills — ${m.count} of your skills travel with the harness (auto-mirrored from use, always fresh): ${sample}${more}.]`,
21
+ 'Any machine or harness with the greprag CLI can use them — `greprag load` to browse, '
22
+ + '`greprag load <skill>` to read one inline. No ~/.claude/skills needed.',
23
+ ].join('\n');
24
+ }
25
+ exports.skillMirrorAnnounceModule = {
26
+ id: 'skill-mirror-announce',
27
+ source: 'prompt',
28
+ dependsOn: ['load-primer'], // references `greprag load` — the primer establishes it
29
+ detect: (_env) => ({ tier: 'silent' }), // announce-only
30
+ announce: (env) => buildSkillMirrorAnnounce(env.mirroredSkills),
31
+ reminder: () => null,
32
+ };
33
+ //# sourceMappingURL=skill-mirror-reminder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-mirror-reminder.js","sourceRoot":"","sources":["../../src/commands/skill-mirror-reminder.ts"],"names":[],"mappings":";AAAA;;;;;;;;kEAQkE;;;AAIlE,4DAWC;AAXD,SAAgB,wBAAwB,CACtC,CAAiD;IAEjD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,OAAO;QACL,qBAAqB,CAAC,CAAC,KAAK,mFAAmF,MAAM,GAAG,IAAI,IAAI;QAChI,uFAAuF;cACrF,wEAAwE;KAC3E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAEY,QAAA,yBAAyB,GAAmB;IACvD,EAAE,EAAE,uBAAuB;IAC3B,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE,wDAAwD;IACpF,MAAM,EAAE,CAAC,IAAiB,EAAa,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,gBAAgB;IAChF,QAAQ,EAAE,CAAC,GAAgB,EAAiB,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAC,cAAc,CAAC;IAC3F,QAAQ,EAAE,GAAkB,EAAE,CAAC,IAAI;CACpC,CAAC"}