paseo-room 0.10.0 → 0.12.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 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 both the provider and generated
357
- `settings.json`, because Claude applies settings-file environment values after launch values.
358
- The generated top-level `disableAgentView` and `disableWorkflows` settings are also forced to
359
- `true`; their restrictive value cannot be weakened by another ordinary settings scope.
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
@@ -670,18 +676,28 @@ npx paseo-room verify
670
676
  cleans or stashes, and releases a writer only after Paseo proves the Peer archived.
671
677
  - **State** lives under `~/.paseo-room/runtime/v1` as append-only event files. Setup never edits it.
672
678
  - **The Room runtime panel** (sidebar item, and a workspace panel that opens on its own project)
673
- puts what needs you first. Below that come your projects, ordered by status, then your
674
- Supervisors.
675
- - A project shows its Supervisor, its Lead and Peer seats (each opens its agent in Paseo, and
676
- shows the model and thinking option it runs with, and the worktree or main checkout it works in
677
- with its branch) and its runtime record: assignments, isolated writers, findings and recovery.
679
+ puts what needs you first. Below that come your projects, then your Supervisors.
680
+ - Each project is one line: a status mark whose shape says it (needs a look, working, idle, or
681
+ asleep — its sessions closed, resumed by opening one or a message), then what it is doing, such
682
+ as *Lead idle · 1 of 2 Peers working · 3 open · 1 waiting on Lead*, and when it last did
683
+ something. Projects needing a look come first, then working, idle and asleep ones, the most
684
+ recently active first. Projects with no live seat fold into one *inactive* line, unless
685
+ dispatched work there is still undecided or a Lead replacement is in progress.
686
+ - A project shows who watches it, its Lead and Peer seats (each opens its agent in Paseo, and
687
+ shows the model and thinking option it runs with, the worktree or main checkout it works in, and
688
+ its context as a bar with a tick at its mark), recent activity (dispatches, handbacks, gates and
689
+ decisions, with who did them), and its assignments: open ones first, the most recently updated on
690
+ top, and finished ones by day with when they settled and how long they took, twenty at a time.
691
+ An assignment shows its brief, Peer, evidence and history.
678
692
  - Starting a Supervisor, adding a repository, starting a Lead for a project that has none, and
679
- assigning a Supervisor are guided forms.
693
+ assigning a Supervisor are guided forms. The bell and people icons open the two settings
694
+ screens.
680
695
  - The design notes are in [docs/design/runtime-panel-ux.md](docs/design/runtime-panel-ux.md).
681
696
  - **Settings › Room seats** shows which account each seat is signed in to (email, plan and
682
697
  organization for Claude; login method for Codex; for Pi, only whether a credential file exists).
683
698
  It runs each seat's own `claude auth status` or `codex login status` when you open it or press
684
- Refresh, and never reads a credential file. A seat linked to another home's login is flagged.
699
+ Refresh, and never reads a credential file. A seat linked to another home's login is flagged, and
700
+ when seats sign in as more than one account, each gets a letter (*account A*, *account B*).
685
701
 
686
702
  ### Room attention: what reaches a Supervisor
687
703
 
@@ -739,12 +755,15 @@ learn only when you ask it to check.
739
755
  Lead is not running, when Paseo would take none.
740
756
  - **The Supervisor may do the same**, but only for a Lead of its own project that is past its
741
757
  rotation mark, through the runtime's `lead_replace_*` tools. The runtime refuses a Lead below
742
- the mark and applies the same quiet-point checks. The Supervisor reviews the handoff against the
743
- repository, confirms it, and tells you which Lead now owns the project. The panel shows a
744
- replacement the Supervisor started, and you may cancel it until it completes. Any other reason to
745
- replace a Lead stays yours.
746
- - **Settings › Room attention.** Here you turn letters on or off, change their thresholds, and
747
- configure the optional **attention sensor**.
758
+ the mark, or on a window where the mark does not apply, and applies the same quiet-point
759
+ checks. The Supervisor reviews the handoff against the repository, confirms it, and tells you
760
+ which Lead now owns the project. The panel shows a replacement the Supervisor started, and you
761
+ may cancel it until it completes. Any other reason to replace a Lead stays yours.
762
+ - **Settings › Room attention.** Here you turn letters on or off, see what reached Supervisors in
763
+ the last 24 hours (letters by level, incidents, Lead turns by what was decided, and the ratings you
764
+ or a Supervisor gave), change when a Supervisor is told and how often, and configure the optional
765
+ **attention sensor** in the order it is set up: mode and state, connection, privacy, then the
766
+ shadow evaluation beside the switch that lets it assist.
748
767
  - The sensor speaks the System One HTTP shape, with [TypeSafe Jev](https://docs.typesafe.ai/)
749
768
  first and any compatible or self-hosted endpoint after it. It is `off` by default.
750
769
  - Without a TypeSafe key, use Jev through OpenRouter: endpoint
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.10.0",
18
+ version: "0.12.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
- ...CONTROL_PLANE_ENV,
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
- providerEnv: CONTROL_PLANE_ENV,
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
@@ -2527,6 +2531,15 @@ var init_limits = __esm({
2527
2531
  }
2528
2532
  });
2529
2533
 
2534
+ // src/runtime-plugin/shared/states.ts
2535
+ var SETTLED_STATES;
2536
+ var init_states = __esm({
2537
+ "src/runtime-plugin/shared/states.ts"() {
2538
+ "use strict";
2539
+ SETTLED_STATES = ["accepted", "rejected", "abandoned"];
2540
+ }
2541
+ });
2542
+
2530
2543
  // src/runtime-plugin/server/domain/scope.ts
2531
2544
  function normalizeScope(raw) {
2532
2545
  return raw.normalize("NFC").replace(/\/{2,}/g, "/").replace(/\/+$/, "");
@@ -3193,8 +3206,9 @@ var init_state = __esm({
3193
3206
  "src/runtime-plugin/server/domain/state.ts"() {
3194
3207
  "use strict";
3195
3208
  init_limits();
3209
+ init_states();
3196
3210
  init_scope();
3197
- TERMINAL_STATES = ["accepted", "rejected", "abandoned"];
3211
+ TERMINAL_STATES = SETTLED_STATES;
3198
3212
  }
3199
3213
  });
3200
3214