gentle-pi 0.4.0 → 0.4.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/README.md
CHANGED
|
@@ -45,10 +45,10 @@ Most coding-agent sessions fail for operational reasons, not model reasons:
|
|
|
45
45
|
|
|
46
46
|
| Capability | What it does |
|
|
47
47
|
| ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
48
|
-
| **el Gentleman persona** | Makes Pi behave like a senior architect and teacher, not a generic chatbot. Spanish responses use Rioplatense voseo by default.
|
|
49
|
-
| **
|
|
48
|
+
| **el Gentleman persona** | Makes Pi behave like a senior architect and teacher, not a generic chatbot. Spanish responses use Rioplatense voseo by default; neutral mode is saved globally with project overrides. |
|
|
49
|
+
| **Configurable startup intro** | Adds a rose/text-logo startup intro, compact runtime panel, color presets, and commands to hide or show the decorative parts. |
|
|
50
50
|
| **Work routing discipline** | Small tasks stay inline. Context-heavy exploration can be delegated. Large or risky changes go through SDD/OpenSpec. |
|
|
51
|
-
| **SDD/OpenSpec assets** | Installs phase agents and chains for `init`, `explore`, `proposal`, `spec`, `design`, `tasks`, `apply`, `verify`, and `archive`.
|
|
51
|
+
| **SDD/OpenSpec assets** | Installs phase agents and chains for `init`, `onboard`, `explore`, `proposal`, `spec`, `design`, `tasks`, `apply`, `verify`, `sync`, and `archive`. |
|
|
52
52
|
| **Lazy SDD preflight** | Asks once per session for SDD mode, artifact store, PR chaining strategy, and review budget before the first SDD flow. |
|
|
53
53
|
| **Subagent orchestration** | Keeps one parent session responsible while child agents explore, implement, test, or review with focused context. |
|
|
54
54
|
| **Strict TDD support** | When project config declares a test command, apply/verify phases must record RED → GREEN → TRIANGULATE → REFACTOR evidence. |
|
|
@@ -56,7 +56,7 @@ Most coding-agent sessions fail for operational reasons, not model reasons:
|
|
|
56
56
|
| **Per-agent model assignment** | Pi-native modal for assigning stronger or cheaper models to specific SDD/custom agents. |
|
|
57
57
|
| **Skill discovery registry** | Maintains `.atl/skill-registry.md` from project and user skills so review/comment/PR workflows do not silently miss the right skill. |
|
|
58
58
|
| **Delivery skills** | Includes issue-first PRs, chained PRs, work-unit commits, cognitive docs, comment writing, and Judgment Day review. |
|
|
59
|
-
| **
|
|
59
|
+
| **Runtime safety** | Blocks destructive shell commands, asks for confirmation for sensitive operations, and blocks direct read/write/edit access to sensitive paths. |
|
|
60
60
|
|
|
61
61
|
## Install
|
|
62
62
|
|
|
@@ -88,10 +88,12 @@ pi
|
|
|
88
88
|
|
|
89
89
|
```text
|
|
90
90
|
/gentle-ai:status Check package, SDD assets, OpenSpec, and global model config.
|
|
91
|
+
/gentle-ai:doctor Run read-only diagnostics for SDD assets, config, tools, and guards.
|
|
91
92
|
/gentle-ai:sdd-preflight Run or reuse the session SDD preflight explicitly.
|
|
92
93
|
/sdd-init Create or refresh openspec/config.yaml.
|
|
93
94
|
/gentle:models Assign global model/effort routing to SDD/custom agents.
|
|
94
95
|
/gentle:persona Switch between gentleman and neutral persona modes.
|
|
96
|
+
/gentle:banner Configure startup rose, text logo, and color preset.
|
|
95
97
|
```
|
|
96
98
|
|
|
97
99
|
Typical flow:
|
|
@@ -315,13 +317,19 @@ Delegation contract:
|
|
|
315
317
|
| `gentleman` | Senior architect, teacher, direct technical feedback, Rioplatense Spanish/voseo when the user writes Spanish. |
|
|
316
318
|
| `neutral` | Same discipline, warmer professional language, no regional expression. |
|
|
317
319
|
|
|
318
|
-
Saved at:
|
|
320
|
+
Saved globally at:
|
|
321
|
+
|
|
322
|
+
```text
|
|
323
|
+
~/.pi/gentle-ai/persona.json
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
A project can still override the global default with:
|
|
319
327
|
|
|
320
328
|
```text
|
|
321
329
|
.pi/gentle-ai/persona.json
|
|
322
330
|
```
|
|
323
331
|
|
|
324
|
-
Run `/reload` or start a new Pi session after switching persona.
|
|
332
|
+
`/gentle:persona` writes the global config and updates an existing project override when one is present, so the current project does not stay stale. Run `/reload` or start a new Pi session after switching persona.
|
|
325
333
|
|
|
326
334
|
## Model and effort assignment
|
|
327
335
|
|
|
@@ -376,8 +384,9 @@ Legacy string entries are still accepted and treated as `model`-only config.
|
|
|
376
384
|
| Command | What it does |
|
|
377
385
|
| -------------------------------- | ------------------------------------------------------------------- |
|
|
378
386
|
| `/gentle-ai:status` | Shows package, SDD asset, OpenSpec, and global model config status. |
|
|
379
|
-
| `/gentle:
|
|
380
|
-
| `/gentle:
|
|
387
|
+
| `/gentle-ai:doctor` | Runs read-only diagnostics for SDD assets, model/persona config, memory tools, and safety guards. |
|
|
388
|
+
| `/gentle:models` | Opens global model + effort assignment UI. Press `x` to export and `r` to restore saved routing. |
|
|
389
|
+
| `/gentle:persona` | Switches global persona mode, with project override support. |
|
|
381
390
|
| `/gentle:banner` | Configures startup banner rose, text logo, and color preset. |
|
|
382
391
|
| `/gentle:toggle-rose` | Toggles the startup rose. |
|
|
383
392
|
| `/gentle:toggle-text-logo` | Toggles the startup text logo. |
|
|
@@ -385,7 +394,6 @@ Legacy string entries are still accepted and treated as `model`-only config.
|
|
|
385
394
|
| `/sdd-init` | Initializes or refreshes `openspec/config.yaml`. |
|
|
386
395
|
| `/gentle-ai:install-sdd` | Repairs missing global SDD runtime assets without overwriting files. |
|
|
387
396
|
| `/gentle-ai:install-sdd --force` | Force-refreshes installed global SDD assets. |
|
|
388
|
-
|
|
389
397
|
| `/skill-registry:refresh` | Regenerates `.atl/skill-registry.md`. |
|
|
390
398
|
|
|
391
399
|
Package-owned global SDD runtime assets are also refreshed automatically on session start when `gentle-pi` changes. Project-local `.pi/agents` and `.pi/chains` remain manual overrides and are never overwritten by startup refresh.
|
|
@@ -407,6 +415,10 @@ Compatibility aliases:
|
|
|
407
415
|
/gentleman:models
|
|
408
416
|
/gentle-ai:persona
|
|
409
417
|
/gentleman:persona
|
|
418
|
+
/gentle-ai:banner
|
|
419
|
+
/gentle-ai:toggle-rose
|
|
420
|
+
/gentle-ai:toggle-text-logo
|
|
421
|
+
/gentle-ai:banner-color
|
|
410
422
|
```
|
|
411
423
|
|
|
412
424
|
## Included skills
|
|
@@ -443,10 +455,10 @@ Memory contract for SDD delegation:
|
|
|
443
455
|
|
|
444
456
|
| Path | Purpose |
|
|
445
457
|
| ------------------------------ | ---------------------------------------------------------------------------------------------------------- |
|
|
446
|
-
| `extensions/gentle-ai.ts` | Injects identity,
|
|
447
|
-
| `extensions/startup-banner.ts` | Shows the
|
|
458
|
+
| `extensions/gentle-ai.ts` | Injects identity, auto-refreshes global SDD assets, registers commands, applies model/persona config, exports/restores model routing, and enforces runtime safety. |
|
|
459
|
+
| `extensions/startup-banner.ts` | Shows and configures the startup intro, color presets, compact runtime panel, and collaboration credit. |
|
|
448
460
|
| `extensions/sdd-init.ts` | Registers `/sdd-init` for OpenSpec initialization. |
|
|
449
|
-
| `extensions/skill-registry.ts` | Maintains `.atl/skill-registry.md` from project/user skills.
|
|
461
|
+
| `extensions/skill-registry.ts` | Maintains `.atl/skill-registry.md` from project/user skills and closes file watchers on shutdown. |
|
|
450
462
|
| `assets/orchestrator.md` | Parent-session orchestration contract. |
|
|
451
463
|
| `assets/agents/` | SDD agents installed as global Pi runtime assets. |
|
|
452
464
|
| `assets/chains/` | SDD chains installed as global Pi runtime assets. |
|
package/assets/orchestrator.md
CHANGED
|
@@ -31,7 +31,9 @@ User-facing conversation should stay in the user's language and follow the curre
|
|
|
31
31
|
|
|
32
32
|
Subagent-facing prompts should be written in English by default, even when the user speaks Spanish. Translate the user's request into concise English before delegation. This keeps token usage lower and gives built-in/project subagents a consistent operating language without changing the user-facing persona.
|
|
33
33
|
|
|
34
|
-
Generated artifacts — whether by the parent inline or by subagents — (code, UI copy,
|
|
34
|
+
Generated technical artifacts — whether by the parent inline or by subagents — (code, code comments, UI copy, identifiers, commit messages, filenames, PR descriptions, tests, fixtures, SDD/OpenSpec files, delegated phase outputs, and repository-facing documentation) default to English, regardless of the user's conversation language or active persona. Override only when the user explicitly requests another language for that artifact, or when extending a project whose existing convention is non-English.
|
|
35
|
+
|
|
36
|
+
Public/contextual comments and replies are different from technical artifacts. When using `comment-writer` or drafting a human-facing GitHub, PR review, Slack, Discord, or async comment, write in the target context language by default. Spanish issue/thread -> Spanish comment. English thread -> English comment. Mixed context -> target message language. Explicit user language or tone override wins. Spanish comments default to neutral/professional Spanish unless the user or target context clearly calls for regional tone.
|
|
35
37
|
|
|
36
38
|
Exceptions:
|
|
37
39
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gentle-pi",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Turn Pi into el Gentleman: a senior-architect development harness with SDD/OpenSpec, subagents, strict TDD evidence, review guardrails, and skill discovery.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -6,6 +6,7 @@ import { fileURLToPath } from "node:url";
|
|
|
6
6
|
const root = join(fileURLToPath(new URL("..", import.meta.url)));
|
|
7
7
|
|
|
8
8
|
const requiredPaths = [
|
|
9
|
+
"assets/orchestrator.md",
|
|
9
10
|
"assets/agents/sdd-apply.md",
|
|
10
11
|
"assets/agents/sdd-archive.md",
|
|
11
12
|
"assets/agents/sdd-design.md",
|
|
@@ -30,7 +31,15 @@ const requiredPaths = [
|
|
|
30
31
|
"prompts/gis.md",
|
|
31
32
|
"prompts/gpr.md",
|
|
32
33
|
"prompts/gwr.md",
|
|
34
|
+
"skills/branch-pr/SKILL.md",
|
|
35
|
+
"skills/chained-pr/SKILL.md",
|
|
36
|
+
"skills/cognitive-doc-design/SKILL.md",
|
|
37
|
+
"skills/comment-writer/SKILL.md",
|
|
33
38
|
"skills/gentle-ai/SKILL.md",
|
|
39
|
+
"skills/issue-creation/SKILL.md",
|
|
40
|
+
"skills/judgment-day/SKILL.md",
|
|
41
|
+
"skills/release/SKILL.md",
|
|
42
|
+
"skills/skill-registry/SKILL.md",
|
|
34
43
|
"skills/work-unit-commits/SKILL.md",
|
|
35
44
|
];
|
|
36
45
|
|
|
@@ -27,7 +27,7 @@ Use it for:
|
|
|
27
27
|
| Keep it short | Prefer 1 to 3 short paragraphs or a tight bullet list. |
|
|
28
28
|
| Explain why | Give the technical reason when asking for a change. |
|
|
29
29
|
| Avoid pile-ons | Comment on the highest-value issue, not every tiny preference. |
|
|
30
|
-
| Match
|
|
30
|
+
| Match target context language | Write in the target context language by default: Spanish issue/thread -> Spanish comment, English issue/thread -> English comment, mixed context -> target message language. If the user explicitly requests a language or tone, follow that request. Do not use the active persona as the source of truth for public comments. For Spanish comments, use neutral/professional Spanish by default unless the user or target context clearly calls for regional tone. |
|
|
31
31
|
| No em dashes | Use commas, periods, or parentheses instead. |
|
|
32
32
|
|
|
33
33
|
## Comment Formula
|
|
@@ -45,25 +45,25 @@ Use it for:
|
|
|
45
45
|
### Request change
|
|
46
46
|
|
|
47
47
|
```markdown
|
|
48
|
-
|
|
48
|
+
Good approach overall. I'd split this into a separate commit because it mixes validation logic with UI wiring.
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
That keeps the reviewer's focus narrower and makes rollback cleaner if the integration fails.
|
|
51
51
|
```
|
|
52
52
|
|
|
53
53
|
### Approve with a note
|
|
54
54
|
|
|
55
55
|
```markdown
|
|
56
|
-
|
|
56
|
+
Approved. The scope is clear and the change is well-contained.
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
For the next PR, add links to the previous and following PRs so the chain stays navigable.
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
### Ask for split
|
|
62
62
|
|
|
63
63
|
```markdown
|
|
64
|
-
|
|
64
|
+
This PR exceeds the 400-line budget, so we need to split it or justify `size:exception`.
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
Suggested order: foundation + tests first, then integration, then docs. That gives each review a clear start and end.
|
|
67
67
|
```
|
|
68
68
|
|
|
69
69
|
## Commands
|
|
@@ -49,7 +49,14 @@ test("orchestrator keeps conversation language separate from generated artifact
|
|
|
49
49
|
);
|
|
50
50
|
assert.match(
|
|
51
51
|
orchestrator,
|
|
52
|
-
/Generated artifacts[\s\S]*default to English, regardless of the user's conversation language/,
|
|
52
|
+
/Generated technical artifacts[\s\S]*default to English, regardless of the user's conversation language or active persona/,
|
|
53
|
+
);
|
|
54
|
+
for (const artifactScope of ["code comments", "tests", "fixtures", "delegated phase outputs"]) {
|
|
55
|
+
assert.match(orchestrator, new RegExp(artifactScope));
|
|
56
|
+
}
|
|
57
|
+
assert.match(
|
|
58
|
+
orchestrator,
|
|
59
|
+
/Public\/contextual comments and replies[\s\S]*target context language by default/,
|
|
53
60
|
);
|
|
54
61
|
});
|
|
55
62
|
|
|
@@ -89,3 +96,35 @@ test("persistent harness prompt assets do not hardcode Spanish SDD artifact copy
|
|
|
89
96
|
|
|
90
97
|
assert.deepEqual(failures, []);
|
|
91
98
|
});
|
|
99
|
+
|
|
100
|
+
test("comment-writer is context-reactive and neutral by default for Spanish comments", async () => {
|
|
101
|
+
const skill = await readFile(join(ROOT, "skills/comment-writer/SKILL.md"), "utf8");
|
|
102
|
+
|
|
103
|
+
for (const required of [
|
|
104
|
+
"target context language",
|
|
105
|
+
"explicitly requests a language",
|
|
106
|
+
"neutral/professional Spanish by default",
|
|
107
|
+
]) {
|
|
108
|
+
assert.match(skill, new RegExp(required.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")));
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
for (const regionalDefault of [
|
|
112
|
+
/\bAcá\b/,
|
|
113
|
+
/\bagregá\b/,
|
|
114
|
+
/\bpodés\b/,
|
|
115
|
+
/\btenés\b/,
|
|
116
|
+
/\bfijate\b/,
|
|
117
|
+
/\bdale\b/,
|
|
118
|
+
/\bquerés\b/i,
|
|
119
|
+
]) {
|
|
120
|
+
assert.doesNotMatch(skill, regionalDefault);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
for (const englishExample of [
|
|
124
|
+
"Good approach overall",
|
|
125
|
+
"Approved. The scope is clear",
|
|
126
|
+
"This PR exceeds the 400-line budget",
|
|
127
|
+
]) {
|
|
128
|
+
assert.match(skill, new RegExp(englishExample.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")));
|
|
129
|
+
}
|
|
130
|
+
});
|