paseo-room 0.2.0 → 0.3.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.
- package/README.md +27 -18
- package/dist/index.js +19 -8
- package/dist/index.js.map +1 -1
- package/dist/plugin-assets/paseo-plugin.json +0 -1
- package/dist/prompts/contract/lead/complete-peer-brief.md +24 -2
- package/dist/prompts/contract/lead/peer-seat-lifecycle.md +20 -11
- package/dist/prompts/contract/peer/assignment-scope.md +10 -0
- package/dist/prompts/contract/peer/bounded-outcome.md +8 -0
- package/dist/prompts/contract/peer/no-orchestration.md +2 -2
- package/dist/prompts/contract/peer/reproducible-handoff.md +15 -3
- package/dist/prompts/contract/shared-lead-peer/challenge-signals.md +1 -1
- package/dist/prompts/contract/{shared → shared-supervisor-lead}/workspace-protocol-precedence.md +7 -4
- package/dist/prompts/documents/peer.md +2 -1
- package/dist/prompts/documents/workspace.md +3 -2
- package/dist/prompts/pi/runtime.md +6 -2
- package/dist/prompts/workspace/review.md +2 -2
- package/dist/prompts/workspace/verification.md +5 -3
- package/package.json +1 -1
- package/dist/prompts/contract/peer/writing-and-review-scope.md +0 -5
package/README.md
CHANGED
|
@@ -88,7 +88,7 @@ starts, its exit code is preserved; a signal is returned using the conventional
|
|
|
88
88
|
~/.paseo-room/
|
|
89
89
|
room.json # what this CLI created; verify and remove read it
|
|
90
90
|
AUTHENTICATION.md # exact per-role login commands; contains no secrets
|
|
91
|
-
room/WORKSPACE_PROTOCOL.md # the default protocol
|
|
91
|
+
room/WORKSPACE_PROTOCOL.md # the default protocol Lead and Supervisor carry, as one readable file
|
|
92
92
|
plugin/ # Claude only: trusted creation-time system-prompt append carrier
|
|
93
93
|
paseo-plugin.json # accepts Paseo >=0.8.0 <0.9.0
|
|
94
94
|
index.server.ts, server/ # exact provider map + generated role contracts
|
|
@@ -348,7 +348,8 @@ Supervisor reads the exact current `room-<agent>-lead` profile from `list_profil
|
|
|
348
348
|
materializes every field it defines (agent creation takes no profile id), uses `list_agents(cwd)`
|
|
349
349
|
only to find candidates, then inspects each one's full status for the profile's provider, the
|
|
350
350
|
intended workspace and its mode. For `room-<agent>-peer`, Lead copies provider, mode and
|
|
351
|
-
features exactly,
|
|
351
|
+
features exactly, keeps the profile's model unless the root workspace protocol routes models,
|
|
352
|
+
chooses the thinking effort for the brief, and additionally
|
|
352
353
|
requires the live seat's daemon-added `paseo.parent-agent-id` to name itself. Ownership must be
|
|
353
354
|
corroborated by parentage or known Human-opened history; an ambiguous candidate goes to
|
|
354
355
|
duplicate recovery and Human escalation instead of being adopted.
|
|
@@ -449,10 +450,12 @@ The exact model-facing wording every seat reads lives in the canonical Markdown
|
|
|
449
450
|
that settles it rather than pre-solving the work; any plan or file list in it is provisional.
|
|
450
451
|
One moving write scope has exactly one owner, and at most one Peer is writable at a time.
|
|
451
452
|
Room tools: on.
|
|
452
|
-
- **Peer** owns one bounded
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
and
|
|
453
|
+
- **Peer** owns one bounded assignment — writable inside an assigned scope, or read-only
|
|
454
|
+
against a named candidate, question or area — under exactly one disposition Lead names in the
|
|
455
|
+
brief (Engineer, Architect, Reviewer or Scout), forms its own technical position from the code
|
|
456
|
+
and its own verification, may challenge a failed premise with
|
|
457
|
+
`REOPEN_REQUEST` / `DEPENDENCY_REQUEST` / `BLOCKED`, hands back reproducible evidence either
|
|
458
|
+
way, and never accepts its own difficult change. Room tools: off.
|
|
456
459
|
|
|
457
460
|
Human keeps product goals, priority, material cost, external effects and irreversible risk.
|
|
458
461
|
|
|
@@ -473,18 +476,24 @@ Two further limits are deliberately conservative. **One writable Peer per projec
|
|
|
473
476
|
per moving scope: the room gives you no writer isolation, so separate scopes are not evidence
|
|
474
477
|
of separate working trees, and no workspace protocol relaxes the limit. Concurrent writable
|
|
475
478
|
Peers in isolated worktrees are a deferred decision, not an oversight. And a seat's **model and
|
|
476
|
-
reasoning effort are
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
479
|
+
reasoning effort are not one knob**: the model stays the profile's default unless the root
|
|
480
|
+
`WORKSPACE_PROTOCOL.md` explicitly supplies model routing, while the thinking effort is Lead's
|
|
481
|
+
per-brief choice on task risk, uncertainty, context size and verification burden — lowest that
|
|
482
|
+
reliably answers the task, higher for architecture-sensitive or weakly observable work, only an
|
|
483
|
+
option the live Paseo and provider context establishes as supported, and never up to a tier
|
|
484
|
+
advertising automatic delegation. Provider, mode, workspace, parent and feature values are
|
|
485
|
+
eligibility evidence and copied exactly.
|
|
486
|
+
|
|
487
|
+
Every seat that owns workflow also carries a **default workspace protocol** — topology by
|
|
488
|
+
difficulty, verification, review, repository conventions — so a project has that layer without
|
|
489
|
+
doing anything. It goes to Lead and Supervisor, not to Peer: Lead reads the protocol and quotes
|
|
490
|
+
what bears on an assignment into the brief, including the exact verification command, so a Peer
|
|
491
|
+
spends its attention on one brief rather than on deciding which repository rules apply. A
|
|
492
|
+
repository that needs different rules writes `WORKSPACE_PROTOCOL.md` at its root, which wins
|
|
493
|
+
wherever it speaks while the default holds wherever it is silent — the root, because it is
|
|
494
|
+
agent guidance rather than project documentation. `~/.paseo-room/room/WORKSPACE_PROTOCOL.md` is
|
|
495
|
+
the whole default as one file, so you can read what is in force and start from it. The CLI
|
|
496
|
+
never writes into a repository.
|
|
488
497
|
|
|
489
498
|
## Working the room
|
|
490
499
|
|
package/dist/index.js
CHANGED
|
@@ -15,7 +15,7 @@ var init_package = __esm({
|
|
|
15
15
|
"package.json"() {
|
|
16
16
|
package_default = {
|
|
17
17
|
name: "paseo-room",
|
|
18
|
-
version: "0.
|
|
18
|
+
version: "0.3.0",
|
|
19
19
|
description: "One CLI that configures Codex, Claude Code, and Pi role homes in $HOME and registers them with your local Paseo daemon.",
|
|
20
20
|
keywords: [
|
|
21
21
|
"paseo",
|
|
@@ -799,7 +799,7 @@ var init_prompts = __esm({
|
|
|
799
799
|
},
|
|
800
800
|
contract: {
|
|
801
801
|
humanAuthority: { path: "contract/shared/human-authority.md", kind: "section" },
|
|
802
|
-
workspaceProtocolPrecedence: { path: "contract/shared/workspace-protocol-precedence.md", kind: "section" },
|
|
802
|
+
workspaceProtocolPrecedence: { path: "contract/shared-supervisor-lead/workspace-protocol-precedence.md", kind: "section" },
|
|
803
803
|
evidenceAndEventWaiting: { path: "contract/shared/evidence-and-event-waiting.md", kind: "section" },
|
|
804
804
|
scopeAndUnrelatedWork: { path: "contract/shared/scope-and-unrelated-work.md", kind: "section" },
|
|
805
805
|
directiveIntegrity: { path: "contract/supervisor/directive-integrity.md", kind: "section" },
|
|
@@ -816,7 +816,7 @@ var init_prompts = __esm({
|
|
|
816
816
|
peerSeatLifecycle: { path: "contract/lead/peer-seat-lifecycle.md", kind: "section" },
|
|
817
817
|
boundedOutcome: { path: "contract/peer/bounded-outcome.md", kind: "section" },
|
|
818
818
|
independentJudgment: { path: "contract/peer/independent-judgment.md", kind: "section" },
|
|
819
|
-
|
|
819
|
+
assignmentScope: { path: "contract/peer/assignment-scope.md", kind: "section" },
|
|
820
820
|
noOrchestration: { path: "contract/peer/no-orchestration.md", kind: "section" },
|
|
821
821
|
reproducibleHandoff: { path: "contract/peer/reproducible-handoff.md", kind: "section" },
|
|
822
822
|
noSelfAcceptance: { path: "contract/peer/no-self-acceptance.md", kind: "section" }
|
|
@@ -849,12 +849,13 @@ var init_prompts = __esm({
|
|
|
849
849
|
// src/room/instructions.ts
|
|
850
850
|
import { createHash } from "crypto";
|
|
851
851
|
function instructionKeys(role) {
|
|
852
|
-
return [...SHARED_KEYS, ...ROLE_KEYS[role]];
|
|
852
|
+
return [...SHARED_KEYS[role], ...ROLE_KEYS[role]];
|
|
853
853
|
}
|
|
854
854
|
function protocolKeys(role) {
|
|
855
855
|
return PROTOCOL_KEYS[role];
|
|
856
856
|
}
|
|
857
857
|
function protocol(keys) {
|
|
858
|
+
if (keys.length === 0) return [];
|
|
858
859
|
return [
|
|
859
860
|
loadPromptAsset("documents", "workspace"),
|
|
860
861
|
...keys.map((key) => loadPromptAsset("workspace", key))
|
|
@@ -873,18 +874,28 @@ function contractDigest() {
|
|
|
873
874
|
for (const kind of INSTRUCTION_KINDS) hash.update(`${kind}\0${renderInstructions(kind)}\0`);
|
|
874
875
|
return `sha256:${hash.digest("hex").slice(0, 16)}`;
|
|
875
876
|
}
|
|
876
|
-
var SHARED_KEYS, ROLE_KEYS, ALL_PROTOCOL_KEYS, PROTOCOL_KEYS, INSTRUCTION_KINDS;
|
|
877
|
+
var AUTHORITY_KEYS, PROTOCOL_READER_KEYS, SHARED_KEYS, ROLE_KEYS, ALL_PROTOCOL_KEYS, PROTOCOL_KEYS, INSTRUCTION_KINDS;
|
|
877
878
|
var init_instructions = __esm({
|
|
878
879
|
"src/room/instructions.ts"() {
|
|
879
880
|
"use strict";
|
|
880
881
|
init_roles();
|
|
881
882
|
init_prompts();
|
|
882
|
-
|
|
883
|
+
AUTHORITY_KEYS = [
|
|
884
|
+
"humanAuthority",
|
|
885
|
+
"evidenceAndEventWaiting",
|
|
886
|
+
"scopeAndUnrelatedWork"
|
|
887
|
+
];
|
|
888
|
+
PROTOCOL_READER_KEYS = [
|
|
883
889
|
"humanAuthority",
|
|
884
890
|
"workspaceProtocolPrecedence",
|
|
885
891
|
"evidenceAndEventWaiting",
|
|
886
892
|
"scopeAndUnrelatedWork"
|
|
887
893
|
];
|
|
894
|
+
SHARED_KEYS = {
|
|
895
|
+
supervisor: PROTOCOL_READER_KEYS,
|
|
896
|
+
lead: PROTOCOL_READER_KEYS,
|
|
897
|
+
peer: AUTHORITY_KEYS
|
|
898
|
+
};
|
|
888
899
|
ROLE_KEYS = {
|
|
889
900
|
supervisor: [
|
|
890
901
|
"directiveIntegrity",
|
|
@@ -907,7 +918,7 @@ var init_instructions = __esm({
|
|
|
907
918
|
"challengeSignals",
|
|
908
919
|
"boundedOutcome",
|
|
909
920
|
"independentJudgment",
|
|
910
|
-
"
|
|
921
|
+
"assignmentScope",
|
|
911
922
|
"noOrchestration",
|
|
912
923
|
"reproducibleHandoff",
|
|
913
924
|
"noSelfAcceptance"
|
|
@@ -922,7 +933,7 @@ var init_instructions = __esm({
|
|
|
922
933
|
PROTOCOL_KEYS = {
|
|
923
934
|
supervisor: ALL_PROTOCOL_KEYS,
|
|
924
935
|
lead: ALL_PROTOCOL_KEYS,
|
|
925
|
-
peer: [
|
|
936
|
+
peer: []
|
|
926
937
|
};
|
|
927
938
|
INSTRUCTION_KINDS = [...ROLES, "workspace"];
|
|
928
939
|
}
|