replen 1.2.2 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/skill-install.js
CHANGED
|
@@ -20,6 +20,7 @@ const BUNDLED_SKILLS_ROOT = join(SELF_DIR, "..", "extras", "skills");
|
|
|
20
20
|
// follow the MCP tool's description instead. The CLAUDE.md instruction
|
|
21
21
|
// shipped by `replen project-init` is the cross-host fallback.
|
|
22
22
|
const CLAUDE_SKILLS_ROOT = join(homedir(), ".claude", "skills");
|
|
23
|
+
const CLAUDE_COMMANDS_ROOT = join(homedir(), ".claude", "commands");
|
|
23
24
|
const SKILLS = [
|
|
24
25
|
{
|
|
25
26
|
name: "replen",
|
|
@@ -54,6 +55,18 @@ export function installSkills() {
|
|
|
54
55
|
catch { /* best effort */ }
|
|
55
56
|
}
|
|
56
57
|
}
|
|
58
|
+
// Migrate: an early Replen shipped a `/replen` slash COMMAND (~/.claude/commands/
|
|
59
|
+
// replen.md) that invokes the now-removed `replen-match` skill. Left in place it
|
|
60
|
+
// renders a DUPLICATE `/replen` next to the skill. Remove only OUR stale command —
|
|
61
|
+
// gated on it referencing `replen-match`, so a user's own `/replen` command (or any
|
|
62
|
+
// other) is never touched.
|
|
63
|
+
try {
|
|
64
|
+
const legacyCmd = join(CLAUDE_COMMANDS_ROOT, "replen.md");
|
|
65
|
+
if (existsSync(legacyCmd) && readFileSync(legacyCmd, "utf8").includes("replen-match")) {
|
|
66
|
+
rmSync(legacyCmd, { force: true });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch { /* best effort */ }
|
|
57
70
|
let installed = 0;
|
|
58
71
|
for (const skill of SKILLS) {
|
|
59
72
|
for (const rel of skill.files) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: replen
|
|
3
|
-
description:
|
|
3
|
+
description: Triage today's Replen matches for this repo — a verdict and effort estimate per candidate, grounded in your code. Invoke with `/replen` or "what's new from Replen?".
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Replen Match — in-session candidate triage
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: replen-onboard
|
|
3
|
-
description: One-time
|
|
3
|
+
description: One-time Replen setup — profiles your active repos so matches are relevant, not generic. Runs autonomously in the background. Invoke with `/replen-onboard`.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Replen onboarding — autonomous, background, multi-repo setup
|
|
@@ -175,6 +175,15 @@ code only to VERIFY (the vault may be stale); don't re-derive what it already
|
|
|
175
175
|
holds. Privacy is unchanged: only capabilities/descriptors/paths/tags leave
|
|
176
176
|
the machine, exactly as with a code-read — never vault content or code.
|
|
177
177
|
|
|
178
|
+
**Use the note→note `[[wikilinks]]` BETWEEN concept/entity notes as capability-
|
|
179
|
+
BOUNDARY evidence** (today you only follow note→FILE links, for `paths`). A tight
|
|
180
|
+
same-as cluster of concepts → emit ONE capability tag (don't split a thing the
|
|
181
|
+
user models as one). A concept fanning out to distinct linked clusters → split
|
|
182
|
+
into the concrete techniques (this is the 2d "break broad capabilities" move,
|
|
183
|
+
now backed by the user's own structure). A typed/deliberate cross-link between
|
|
184
|
+
two distinct concepts → keep them as two RELATED tags. Then, if the vault gave
|
|
185
|
+
you this structure, assemble the optional `concepts` array described in 2d.
|
|
186
|
+
|
|
178
187
|
### 2a. Read the code (not just the README)
|
|
179
188
|
|
|
180
189
|
Read enough source to actually understand the project: entry points, the core
|
|
@@ -268,6 +277,18 @@ strings. Each is `{tag, descriptor, modality}`:
|
|
|
268
277
|
Break broad capabilities into the concrete techniques the code uses. Be
|
|
269
278
|
specific — `cloudflare bypass`/`proxy rotation`, not just `web scraping`.
|
|
270
279
|
|
|
280
|
+
**If you grounded from a vault (2a-pre), also assemble a `concepts` array** so
|
|
281
|
+
Replen can traverse the user's OWN graph for cross-repo leaps. For each
|
|
282
|
+
concept/entity note — **NEVER a file/symbol/function/class/module note** — emit
|
|
283
|
+
`{title, grounds: [the capability tags this note grounded], links: [{to: <other
|
|
284
|
+
concept title>, rel}]}` where `rel` is one of `relates | refines | depends |
|
|
285
|
+
same-as | contrast`. Pass it to `replen_set_capabilities` in 2e (it's optional —
|
|
286
|
+
omit it entirely if there's no vault). Hard rules (already true for everything
|
|
287
|
+
else, restated because this is new structure leaving the machine): lift only
|
|
288
|
+
concept/capability-LEVEL notes; note BODIES and code never leave; a note→file
|
|
289
|
+
link stays as a capability `path`, never a concept link; respect the cover —
|
|
290
|
+
sanitize titles, no codenames.
|
|
291
|
+
|
|
271
292
|
**Also capture architectural PRACTICES as capabilities.** Beyond what the code
|
|
272
293
|
*does*, note the distinctive structural *moves* it makes — these are what let
|
|
273
294
|
Replen suggest a pattern to your OTHER projects ("Aegis made its domain model
|
|
@@ -333,6 +354,10 @@ typed properties, computed properties as rows", never the entity names).
|
|
|
333
354
|
Paths only, never code. You just read these files; recording WHERE each
|
|
334
355
|
capability lives lets Replen point another of the user's projects straight
|
|
335
356
|
at the implementation worth porting ("aegis solved this — see src/cv/…").
|
|
357
|
+
**If you grounded from a vault, also pass the `concepts` array from 2d** —
|
|
358
|
+
concept titles + their `[[wikilinks]]` only (never file/symbol notes, never
|
|
359
|
+
bodies). Replen turns these into graph nodes + your-own-graph leaps. Omit it
|
|
360
|
+
when there's no vault.
|
|
336
361
|
4. **Report pinned versions** with `replen_set_versions` — the resolved DIRECT
|
|
337
362
|
dependency versions from the lockfile (package-lock.json / poetry.lock /
|
|
338
363
|
uv.lock / Cargo.lock), plus runtimes under canonical keys (`node` from
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "replen",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.1",
|
|
4
4
|
"description": "Make your AI coding tools smarter. One command, no API keys, free. Replen watches what your projects actually do and surfaces a few things worth bringing in each month. Use one as is, port a piece of another, cherry pick an idea, or build it clean room. The match happens inside your AI tool's session. A few actionable matches a month, by design.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|