paseo-room 0.14.2 → 0.15.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
@@ -757,8 +757,7 @@ learn only when you ask it to check.
757
757
  handoff, verbatim, and it verifies the handoff and reports to you before it acts outside the
758
758
  repository. The Supervisor gets one line naming the new Lead.
759
759
  - The handoff stays on this machine, under `~/.paseo-room/runtime/v1/attention/successions/`,
760
- owner-only and never sent to the sensor or in a letter. Finished replacements are pruned after 30
761
- days.
760
+ owner-only and never put in a letter. Finished replacements are pruned after 30 days.
762
761
  - If the replacement stops after the archive, the project offers **Finish replacing Lead**, which
763
762
  creates no second Lead, or cancel, which leaves the project as it is. A replacement that fails
764
763
  before the archive stays on the project's screen for a day, with the reason.
@@ -772,30 +771,14 @@ learn only when you ask it to check.
772
771
  may cancel it until it completes. Any other reason to replace a Lead stays yours.
773
772
  - **Settings › Room attention.** Here you turn letters on or off, see what reached Supervisors in
774
773
  the last 24 hours (letters by level, incidents, Lead turns by what was decided, and the ratings you
775
- or a Supervisor gave), change when a Supervisor is told and how often, and configure the optional
776
- **attention sensor** in the order it is set up: mode and state, connection, privacy, then the
777
- shadow evaluation beside the switch that lets it assist.
778
- - The sensor speaks the System One HTTP shape, with [TypeSafe Jev](https://docs.typesafe.ai/)
779
- first and any compatible or self-hosted endpoint after it. It is `off` by default.
780
- - Without a TypeSafe key, use Jev through OpenRouter: endpoint
781
- `https://openrouter.ai/api/v1/systemone`, model `typesafe/jev-1.13`, and an OpenRouter key.
782
- OpenRouter can answer with a dated snapshot such as `typesafe/jev-1.13-20260917`, which the
783
- sensor accepts as the pinned model.
784
- - `shadow` assesses Lead messages and records the answers without acting on them. `assist` lets
785
- them decide, for the question sets you enable, whether a Lead turn wakes the Supervisor, waits
786
- for a digest, or is only recorded.
787
- - Nothing leaves the machine until you acknowledge the endpoint's host, and only masked, bounded
788
- excerpts of Lead messages are sent.
789
- - The key is write-only: it is stored owner-only under `~/.paseo-room/runtime/v1/secrets` and never
790
- shown again.
791
- - **Evaluation.** `npm run attention:eval` (in this repository) reads your Claude Lead transcripts
792
- read-only and prints what an evaluation would send. `-- --send` runs it against the endpoint, as
793
- your consent for that run.
774
+ or a Supervisor gave), and change when a Supervisor is told and how often. Code decides every
775
+ letter: no model ranks a Lead turn, and nothing about your projects leaves the machine. Releases
776
+ before 0.15.0 had an optional attention sensor; 0.15.0 removed it and deletes the key it stored.
794
777
  - **Usage report.** `npm run attention:report -- --since 2026-09-24 --until 2026-09-30` (in this
795
778
  repository) reads the room home read-only. It prints what reached the Supervisors over that window:
796
779
  - Lead turns by routing, and letters by level and delay;
797
780
  - Lead answers to `message_lead`, and whether they arrived;
798
- - feedback and the sensor;
781
+ - feedback;
799
782
  - what the Supervisor and Lead seats read, and how long a question to you waited.
800
783
 
801
784
  It prints counts and durations only, never message text. The window defaults to the last seven
@@ -825,7 +808,9 @@ and the refusal is final for that dispatch — narrow or sequence the work:
825
808
 
826
809
  Write scopes prevent collisions between isolated writers; **they do not contain a Peer**, which can
827
810
  still write anywhere its user can. At handoff the runtime records any changed path outside the
828
- scope as `scope.exceeded`, and accepting that candidate needs an override. Lead still integrates
811
+ scope as `scope.exceeded` and tells Lead. Accepting the candidate needs an override only for an
812
+ outside path another writer holds or has changed: one inside another live lease's scope or a
813
+ serial-only path, or one another open candidate also changed. Lead still integrates
829
814
  each candidate by hand, in its own workspace, one at a time; the runtime never merges, rebases or
830
815
  pushes.
831
816
 
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.14.2",
18
+ version: "0.15.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",
@@ -52,7 +52,6 @@ var init_package = __esm({
52
52
  build: `tsup && node --input-type=module -e "import { cpSync, rmSync } from 'node:fs'; for (const [source, target] of [['src/room/prompts', 'dist/prompts'], ['src/room/skills', 'dist/skills'], ['src/plugin-assets', 'dist/plugin-assets'], ['src/runtime-plugin', 'dist/runtime-plugin']]) { rmSync(target, { recursive: true, force: true }); cpSync(source, target, { recursive: true }); }"`,
53
53
  prepack: "npm run build",
54
54
  verify: "npm run typecheck && npm run lint && npm test && npm run build && npm run test:package",
55
- "attention:eval": "node --experimental-transform-types --no-warnings --import ./scripts/ts-resolve.mjs scripts/attention-eval.ts",
56
55
  "attention:report": "node --experimental-transform-types --no-warnings --import ./scripts/ts-resolve.mjs scripts/attention-report.ts"
57
56
  },
58
57
  dependencies: {
@@ -2483,10 +2482,11 @@ function runtimePluginEntries(layout, agents, roles) {
2483
2482
  path: join12(root, path),
2484
2483
  content: path === LOCATION_MODULE ? renderRuntimeLocation(layout) : path === SUCCESSION_MODULE ? renderSuccessionText() : readFileSync4(join12(BUNDLE, path), "utf8")
2485
2484
  })),
2486
- { kind: "file", path: join12(root, MANIFEST_FILE), content: renderRuntimeManifestFile(agents, roles) }
2485
+ { kind: "file", path: join12(root, MANIFEST_FILE), content: renderRuntimeManifestFile(agents, roles) },
2486
+ ...REMOVED_FILES.map((path) => ({ kind: "absent", path: join12(root, path) }))
2487
2487
  ];
2488
2488
  }
2489
- var BUNDLE, LOCATION_MODULE, SUCCESSION_MODULE;
2489
+ var BUNDLE, LOCATION_MODULE, SUCCESSION_MODULE, REMOVED_FILES;
2490
2490
  var init_runtime = __esm({
2491
2491
  "src/runtime.ts"() {
2492
2492
  "use strict";
@@ -2500,6 +2500,12 @@ var init_runtime = __esm({
2500
2500
  BUNDLE = fileURLToPath(new URL("./runtime-plugin/", import.meta.url));
2501
2501
  LOCATION_MODULE = "server/generated/location.ts";
2502
2502
  SUCCESSION_MODULE = "server/generated/succession.ts";
2503
+ REMOVED_FILES = [
2504
+ // The attention sensor, removed in 0.15.0.
2505
+ "server/attention/key.ts",
2506
+ "server/attention/questions.ts",
2507
+ "server/attention/sensor.ts"
2508
+ ];
2503
2509
  }
2504
2510
  });
2505
2511