@juicesharp/rpiv-pi 1.18.0 → 1.18.2
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.
|
@@ -44,6 +44,30 @@ describe("SIBLINGS registry", () => {
|
|
|
44
44
|
expect(i18nEntry?.matches.test("@juicesharp/rpiv-i18n")).toBe(true);
|
|
45
45
|
});
|
|
46
46
|
|
|
47
|
+
it("pi-subagents SIBLINGS[0] matches BOTH the @tintinweb/pi-subagents fork and the @gotgenes/pi-subagents fork", () => {
|
|
48
|
+
const subagentsEntry = SIBLINGS[0];
|
|
49
|
+
expect(subagentsEntry).toBeDefined();
|
|
50
|
+
// Upstream fork (default install target via /rpiv-setup)
|
|
51
|
+
expect(subagentsEntry?.matches.test("@tintinweb/pi-subagents")).toBe(true);
|
|
52
|
+
// @gotgenes/pi-subagents — API-compatible fork with the same tool surface
|
|
53
|
+
expect(subagentsEntry?.matches.test("@gotgenes/pi-subagents")).toBe(true);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it("pi-subagents SIBLINGS[0] regex is case-insensitive across both fork namespaces", () => {
|
|
57
|
+
const subagentsEntry = SIBLINGS[0];
|
|
58
|
+
expect(subagentsEntry?.matches.test("@TINTINWEB/PI-SUBAGENTS")).toBe(true);
|
|
59
|
+
expect(subagentsEntry?.matches.test("@GOTGENES/PI-SUBAGENTS")).toBe(true);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it("pi-subagents SIBLINGS[0] regex does NOT match unrelated @-scoped pi-subagents-* variants", () => {
|
|
63
|
+
const subagentsEntry = SIBLINGS[0];
|
|
64
|
+
// Word-boundary guard: must not over-match a hypothetical future sibling
|
|
65
|
+
// such as `@juicesharp/pi-subagents-utils` (a dash right after the
|
|
66
|
+
// `pi-subagents` token is excluded via `(?![-\w])`).
|
|
67
|
+
expect(subagentsEntry?.matches.test("@tintinweb/pi-subagents-utils")).toBe(false);
|
|
68
|
+
expect(subagentsEntry?.matches.test("@gotgenes/pi-subagents-utils")).toBe(false);
|
|
69
|
+
});
|
|
70
|
+
|
|
47
71
|
it("every entry has non-empty pkg + provides", () => {
|
|
48
72
|
for (const s of SIBLINGS) {
|
|
49
73
|
expect(s.pkg.length).toBeGreaterThan(0);
|
|
@@ -22,8 +22,10 @@ export interface SiblingPlugin {
|
|
|
22
22
|
export const SIBLINGS: readonly SiblingPlugin[] = [
|
|
23
23
|
{
|
|
24
24
|
pkg: "npm:@tintinweb/pi-subagents",
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
// Detect both the upstream tintinweb fork and the API-compatible
|
|
26
|
+
// @gotgenes fork; pkg stays upstream so /rpiv-setup installs that.
|
|
27
|
+
matches: /@(tintinweb|gotgenes)\/pi-subagents(?![-\w])/i,
|
|
28
|
+
provides: "Agent / get_subagent_result / steer_subagent tools (tintinweb or gotgenes fork)",
|
|
27
29
|
},
|
|
28
30
|
{
|
|
29
31
|
pkg: "npm:@juicesharp/rpiv-ask-user-question",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@juicesharp/rpiv-pi",
|
|
3
|
-
"version": "1.18.
|
|
3
|
+
"version": "1.18.2",
|
|
4
4
|
"description": "A skill-based development workflow for Pi Agent. Five skills (research, design, plan, implement, validate) and the shared subagents that compose its ship-loop.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi-package",
|
|
@@ -142,8 +142,7 @@ Use the grounded-questions-one-at-a-time pattern. Use a **❓ Question:** prefix
|
|
|
142
142
|
|
|
143
143
|
> Use the `ask_user_question` tool with the following question: "Found 2 mapping approaches — which should new code follow?". Header: "Pattern". Options: "Manual mapping (Recommended)" (Used in OrderService (src/services/OrderService.ts:45) — 8 occurrences); "AutoMapper" (Used in UserService (src/services/UserService.ts:12) — 2 occurrences).
|
|
144
144
|
|
|
145
|
-
- **
|
|
146
|
-
"❓ Question: Research's `## Integration Points` shows no background job registration for this area. Is that expected, or is there async processing not surfaced in the inbound/outbound sweep?"
|
|
145
|
+
- **Open-ended** (discovery, "what am I missing?", corrections) — still `ask_user_question`; offer your best 1-2 guesses and let "Other" carry the unpredictable answer.
|
|
147
146
|
|
|
148
147
|
**Batching**: When you have 2-4 independent questions (answers don't depend on each other), you MAY batch them in a single `ask_user_question` call. Keep dependent questions sequential.
|
|
149
148
|
|
package/skills/design/SKILL.md
CHANGED
|
@@ -143,8 +143,7 @@ Use the grounded-questions-one-at-a-time pattern. Use a **❓ Question:** prefix
|
|
|
143
143
|
|
|
144
144
|
> Use the `ask_user_question` tool with the following question: "Found 2 mapping approaches — which should new code follow?". Header: "Pattern". Options: "Manual mapping (Recommended)" (Used in OrderService (src/services/OrderService.ts:45) — 8 occurrences); "AutoMapper" (Used in UserService (src/services/UserService.ts:12) — 2 occurrences).
|
|
145
145
|
|
|
146
|
-
- **
|
|
147
|
-
"❓ Question: Integration scanner found no background job registration for this area. Is that expected, or is there async processing I'm not seeing?"
|
|
146
|
+
- **Open-ended** (discovery, "what am I missing?", corrections) — still `ask_user_question`; offer your best 1-2 guesses and let "Other" carry the unpredictable answer.
|
|
148
147
|
|
|
149
148
|
**Batching**: When you have 2-4 independent questions (answers don't depend on each other), you MAY batch them in a single `ask_user_question` call. Keep dependent questions sequential.
|
|
150
149
|
|
package/skills/research/SKILL.md
CHANGED
|
@@ -147,7 +147,7 @@ Findings go into Precedents & Lessons. Otherwise skip and note "git history unav
|
|
|
147
147
|
- **Pattern conflict**: "Found 2 implementations of {X} — which is canonical?" with options citing `file:line` + occurrence count
|
|
148
148
|
- **Scope boundary**: "Question {N} references files {A,B,C} but analysis shows {D} is the real integration point. Extend scope?" with yes/no + "describe what I missed"
|
|
149
149
|
- **Priority override**: "Questions Q1 and Q2 have competing implications for {area}. Which is load-bearing?" with options
|
|
150
|
-
- **Integration ambiguity**: "Found no connection between {X} and {Y}. Is there an indirect path?"
|
|
150
|
+
- **Integration ambiguity**: "Found no connection between {X} and {Y}. Is there an indirect path?" — `ask_user_question`, "Other" carries the answer
|
|
151
151
|
|
|
152
152
|
**Choosing question format:**
|
|
153
153
|
|
|
@@ -155,8 +155,7 @@ Findings go into Precedents & Lessons. Otherwise skip and note "git history unav
|
|
|
155
155
|
|
|
156
156
|
> Use the `ask_user_question` tool with the following question: "Found 2 patterns for retry logic — which is canonical?". Header: "Pattern". Options: "Event-sourced retry (Recommended)" (`src/events/orders.ts:45-67` — 3 hooks, matches precedent commit `abc123`); "Direct retry loop" (`src/services/OrderService.ts:112` — single use, no event traceability).
|
|
157
157
|
|
|
158
|
-
- **
|
|
159
|
-
"❓ Question: `src/events/orders.ts:45-67` has 3 event hooks but no error recovery path. Is there a retry mechanism elsewhere I'm not seeing?"
|
|
158
|
+
- **Open-ended** (discovery, "what am I missing?", corrections) — still `ask_user_question`; offer your best 1-2 guesses and let "Other" carry the unpredictable answer.
|
|
160
159
|
|
|
161
160
|
**Anti-pattern** — do NOT dump a verbose paragraph mixing analysis with a trailing question:
|
|
162
161
|
|
|
@@ -183,7 +182,7 @@ Findings go into Precedents & Lessons. Otherwise skip and note "git history unav
|
|
|
183
182
|
Inconsistencies: {count} found ({short names})
|
|
184
183
|
```
|
|
185
184
|
|
|
186
|
-
|
|
185
|
+
Gate the write with `ask_user_question`. Question: "Scan complete — write the doc, or adjust first?". Header: "Research". Options: "Write the doc (Recommended)"; "Add an area"; "Correct a finding".
|
|
187
186
|
|
|
188
187
|
4. **Incorporate developer input:**
|
|
189
188
|
|