paseo-room 0.11.0 → 0.13.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 +26 -13
- package/dist/index.js +9 -5
- package/dist/index.js.map +1 -1
- package/dist/runtime-plugin/client/attention-settings.tsx +1 -1
- package/dist/runtime-plugin/client/context-settings.tsx +30 -12
- package/dist/runtime-plugin/server/attention/delivery.ts +23 -11
- package/dist/runtime-plugin/server/attention/engine.ts +27 -14
- package/dist/runtime-plugin/server/attention/observer.ts +4 -0
- package/dist/runtime-plugin/server/attention/signals.ts +5 -5
- package/dist/runtime-plugin/server/attention/succession.ts +15 -6
- package/dist/runtime-plugin/server/attention/triage.ts +2 -0
- package/dist/runtime-plugin/server/handlers/actions.ts +2 -1
- package/dist/runtime-plugin/server/hooks.ts +4 -4
- package/dist/runtime-plugin/server/notices.ts +15 -0
- package/dist/runtime-plugin/server/tools.ts +2 -2
- package/dist/runtime-plugin/shared/seat-context.ts +18 -8
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -311,6 +311,7 @@ still required where Paseo launch state outranks the agent's own configuration:
|
|
|
311
311
|
| `disableAgentView: true` + `CLAUDE_CODE_DISABLE_AGENT_VIEW=1` | Claude | Disables Claude's separate background-agent control plane across settings scopes and at launch. |
|
|
312
312
|
| `disableWorkflows: true` + `CLAUDE_CODE_DISABLE_WORKFLOWS=1` | Claude | Disables dynamic workflows through every entry point, beyond denying the `Workflow` tool. |
|
|
313
313
|
| `crossSessionInbound: "refuse"` | Claude | Prevents another Claude session from injecting a turn into a room seat. |
|
|
314
|
+
| `disableClaudeAiConnectors: true` + `ENABLE_CLAUDEAI_MCP_SERVERS=0` | Claude | Keeps the signed-in account's claude.ai connectors (Canva, Claude Docs, …) out of every seat. They bypass the room's MCP check and reach Peer, and one that needs authorising makes each seat ask you to connect it. Your own Claude Code sessions keep them. |
|
|
314
315
|
| strict argv + `PI_MCP_CONFIG_MODE=exclusive` + additive runtime capsule | Pi | Disables extension discovery and project trust, and restricts adapter config to the role-home `mcp.json`; forbids a second agent control plane without claiming sandboxing. |
|
|
315
316
|
| `paseoTools: {enabled}` | all | Room tools for Supervisor and Lead, never for Peer. |
|
|
316
317
|
|
|
@@ -353,10 +354,11 @@ list is written to both provider `disallowedTools` and every role's `settings.js
|
|
|
353
354
|
`permissions.deny`. The role file is minimal, deterministic room policy: it does not copy operator
|
|
354
355
|
env, hooks, permissions, or auth helpers. The room does not write `permissions.defaultMode`:
|
|
355
356
|
Paseo passes the profile's mode as a command-line session setting, which outranks that file. The two
|
|
356
|
-
Claude disable environment keys are likewise pinned in
|
|
357
|
-
`settings.json`, because Claude applies settings-file environment
|
|
358
|
-
The generated top-level `disableAgentView
|
|
359
|
-
`true`; their restrictive value cannot be
|
|
357
|
+
Claude disable environment keys, `ENABLE_CLAUDEAI_MCP_SERVERS=0` among them, are likewise pinned in
|
|
358
|
+
both the provider and generated `settings.json`, because Claude applies settings-file environment
|
|
359
|
+
values after launch values. The generated top-level `disableAgentView`, `disableWorkflows` and
|
|
360
|
+
`disableClaudeAiConnectors` settings are also forced to `true`; their restrictive value cannot be
|
|
361
|
+
weakened by another ordinary settings scope.
|
|
360
362
|
|
|
361
363
|
No default model is pinned. The profile schema supports `model`, but leaving it absent lets
|
|
362
364
|
each provider use its current default and avoids silently choosing a cost/capability tier for
|
|
@@ -656,6 +658,10 @@ npx paseo-room verify
|
|
|
656
658
|
daemon restart, so Claude compacts at that share instead of near the end of a 1M window. An open
|
|
657
659
|
session keeps what it opened with. Codex and Pi seats show their context and keep their own
|
|
658
660
|
compaction.
|
|
661
|
+
- A mark applies to a seat only where it comes to at least 150k tokens on its window: at 30%, a
|
|
662
|
+
Lead on a 1M model is reported at 300k, but one on a 272k Codex or Pi model, or a 200k Claude
|
|
663
|
+
model, is not reported and keeps its agent's own compaction. The hints show what each mark comes
|
|
664
|
+
to per window.
|
|
659
665
|
- **A runtime-dispatched Peer** is titled `<Disposition> · <outcome gist> · <assignment id>` (for
|
|
660
666
|
example `Reviewer · Review the Docker Compose dev env… · asg_…`), and the runtime's notices to Lead
|
|
661
667
|
name the assignment the same way. It gets exactly two tools, `ask` and `handoff`, for its own
|
|
@@ -715,12 +721,19 @@ learn only when you ask it to check.
|
|
|
715
721
|
incident on one beginning `INCIDENT:`. The first wakes the Supervisor and the second pages it,
|
|
716
722
|
even for a turn it prompted, once per line, and the letter quotes those lines rather than the
|
|
717
723
|
message's end.
|
|
724
|
+
- A Lead turn that read the Supervisor's `message_lead` answers it. The answer goes to the
|
|
725
|
+
Supervisor as soon as it is idle, with up to 1,500 characters of the Lead's message, even with
|
|
726
|
+
letters off, and no later turn replaces it.
|
|
727
|
+
- A Lead turn that began with the runtime's notices and left a Peer working is progress. It goes
|
|
728
|
+
with the Supervisor's next letter and never wakes it alone; once the loop leaves nothing
|
|
729
|
+
running, its next turn is news again.
|
|
718
730
|
- Letters are held until the Supervisor is idle, batched into digests, and limited to a few wakes
|
|
719
|
-
an hour
|
|
720
|
-
deny it.
|
|
721
|
-
- Each item has an id for `attention_feedback`, and a letter's own id rates every item in it.
|
|
722
|
-
|
|
723
|
-
|
|
731
|
+
an hour; a `NEEDS-HUMAN` line and an answer are never held back by that limit. Letters are never
|
|
732
|
+
sent while the Supervisor holds a permission or a question to you, because a send would deny it.
|
|
733
|
+
- Each item has an id for `attention_feedback`, and a letter's own id rates every item in it. The
|
|
734
|
+
Supervisor rates only noise; an item it leaves unrated counts as useful. A letter is evidence,
|
|
735
|
+
not an instruction: the Supervisor contract has it ask or nudge the Lead, or relay a question to
|
|
736
|
+
you, and never direct a Peer.
|
|
724
737
|
- **Starting seats.** From the **Room** view, **New Supervisor** opens one in an existing directory
|
|
725
738
|
outside every repository. **Add repository** checks a repository, opens its Lead under the
|
|
726
739
|
Supervisor you pick, and sends a fixed kickoff with your first directive verbatim; it also offers
|
|
@@ -749,10 +762,10 @@ learn only when you ask it to check.
|
|
|
749
762
|
Lead is not running, when Paseo would take none.
|
|
750
763
|
- **The Supervisor may do the same**, but only for a Lead of its own project that is past its
|
|
751
764
|
rotation mark, through the runtime's `lead_replace_*` tools. The runtime refuses a Lead below
|
|
752
|
-
the mark
|
|
753
|
-
repository, confirms it, and tells you
|
|
754
|
-
|
|
755
|
-
replace a Lead stays yours.
|
|
765
|
+
the mark, or on a window where the mark does not apply, and applies the same quiet-point
|
|
766
|
+
checks. The Supervisor reviews the handoff against the repository, confirms it, and tells you
|
|
767
|
+
which Lead now owns the project. The panel shows a replacement the Supervisor started, and you
|
|
768
|
+
may cancel it until it completes. Any other reason to replace a Lead stays yours.
|
|
756
769
|
- **Settings › Room attention.** Here you turn letters on or off, see what reached Supervisors in
|
|
757
770
|
the last 24 hours (letters by level, incidents, Lead turns by what was decided, and the ratings you
|
|
758
771
|
or a Supervisor gave), change when a Supervisor is told and how often, and configure the optional
|
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.13.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",
|
|
@@ -1186,7 +1186,7 @@ function renderRoleSettings(role, secureStorageDir) {
|
|
|
1186
1186
|
const settings = {
|
|
1187
1187
|
// Claude applies settings.env after the launch environment, so repeat provider closures here.
|
|
1188
1188
|
env: {
|
|
1189
|
-
...
|
|
1189
|
+
...LAUNCH_ENV,
|
|
1190
1190
|
PASEO_ROOM_ROLE: role,
|
|
1191
1191
|
...secureStorageDir === void 0 ? {} : { [SECURE_STORAGE_ENV]: secureStorageDir }
|
|
1192
1192
|
},
|
|
@@ -1195,6 +1195,7 @@ function renderRoleSettings(role, secureStorageDir) {
|
|
|
1195
1195
|
// These restrictive settings cannot be weakened by another settings scope.
|
|
1196
1196
|
disableAgentView: true,
|
|
1197
1197
|
disableWorkflows: true,
|
|
1198
|
+
disableClaudeAiConnectors: true,
|
|
1198
1199
|
crossSessionInbound: "refuse"
|
|
1199
1200
|
};
|
|
1200
1201
|
return JSON.stringify(settings, null, 2) + "\n";
|
|
@@ -1252,7 +1253,7 @@ function mcpDriftCheck(role, home, path, divergence) {
|
|
|
1252
1253
|
`If this role should have the same servers, add them with: CLAUDE_CONFIG_DIR=${home} claude mcp add ... \u2014 or delete ${path} and run setup --apply to reseed it from your current Claude state, which discards that role's other runtime state.`
|
|
1253
1254
|
);
|
|
1254
1255
|
}
|
|
1255
|
-
var SHARED, EXECUTABLE, RUNTIME_SKILLS, MCP_KEY, AUTH_ENV, CONTROL_PLANE_ENV, DISALLOWED_TOOLS, SECURE_STORAGE_ENV, SEEDED_KEYS, claudeAgent;
|
|
1256
|
+
var SHARED, EXECUTABLE, RUNTIME_SKILLS, MCP_KEY, AUTH_ENV, CONTROL_PLANE_ENV, CONNECTOR_ENV, LAUNCH_ENV, DISALLOWED_TOOLS, SECURE_STORAGE_ENV, SEEDED_KEYS, claudeAgent;
|
|
1256
1257
|
var init_claude = __esm({
|
|
1257
1258
|
"src/agents/claude.ts"() {
|
|
1258
1259
|
"use strict";
|
|
@@ -1290,6 +1291,8 @@ var init_claude = __esm({
|
|
|
1290
1291
|
CLAUDE_CODE_DISABLE_AGENT_VIEW: "1",
|
|
1291
1292
|
CLAUDE_CODE_DISABLE_WORKFLOWS: "1"
|
|
1292
1293
|
};
|
|
1294
|
+
CONNECTOR_ENV = { ENABLE_CLAUDEAI_MCP_SERVERS: "0" };
|
|
1295
|
+
LAUNCH_ENV = { ...CONTROL_PLANE_ENV, ...CONNECTOR_ENV };
|
|
1293
1296
|
DISALLOWED_TOOLS = [
|
|
1294
1297
|
"Task",
|
|
1295
1298
|
"Agent",
|
|
@@ -1312,8 +1315,9 @@ var init_claude = __esm({
|
|
|
1312
1315
|
id: "claude",
|
|
1313
1316
|
label: "Claude Code",
|
|
1314
1317
|
homeEnv: "CLAUDE_CONFIG_DIR",
|
|
1315
|
-
// Agent View and dynamic workflows have entry points beyond model tool calls.
|
|
1316
|
-
|
|
1318
|
+
// Agent View and dynamic workflows have entry points beyond model tool calls, and claude.ai
|
|
1319
|
+
// connectors arrive with the account rather than from any declaration the room inspects.
|
|
1320
|
+
providerEnv: LAUNCH_ENV,
|
|
1317
1321
|
defaultModeId: "bypassPermissions",
|
|
1318
1322
|
// Keep the legacy Task name and block current native orchestration,
|
|
1319
1323
|
// shared task/cron coordination, and cross-session paths. Paseo alone owns
|