pi-daddy 0.34.0 → 0.36.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.
Files changed (66) hide show
  1. package/CHANGELOG.md +81 -0
  2. package/dist/advisors/decider.d.ts +7 -3
  3. package/dist/advisors/decider.d.ts.map +1 -1
  4. package/dist/advisors/decider.js.map +1 -1
  5. package/dist/advisors/settings.d.ts +16 -7
  6. package/dist/advisors/settings.d.ts.map +1 -1
  7. package/dist/advisors/settings.js +60 -22
  8. package/dist/advisors/settings.js.map +1 -1
  9. package/dist/cli.d.ts.map +1 -1
  10. package/dist/cli.js +3 -1
  11. package/dist/cli.js.map +1 -1
  12. package/dist/kernel/bounded-read.d.ts +57 -0
  13. package/dist/kernel/bounded-read.d.ts.map +1 -0
  14. package/dist/kernel/bounded-read.js +100 -0
  15. package/dist/kernel/bounded-read.js.map +1 -0
  16. package/dist/kernel/catalog.d.ts +12 -1
  17. package/dist/kernel/catalog.d.ts.map +1 -1
  18. package/dist/kernel/catalog.js +12 -5
  19. package/dist/kernel/catalog.js.map +1 -1
  20. package/dist/kernel/definitions.d.ts +19 -1
  21. package/dist/kernel/definitions.d.ts.map +1 -1
  22. package/dist/kernel/definitions.js +34 -9
  23. package/dist/kernel/definitions.js.map +1 -1
  24. package/dist/kernel/delegate-types.d.ts +11 -1
  25. package/dist/kernel/delegate-types.d.ts.map +1 -1
  26. package/dist/kernel/delegate-types.js.map +1 -1
  27. package/dist/kernel/delegate.d.ts.map +1 -1
  28. package/dist/kernel/delegate.js +3 -1
  29. package/dist/kernel/delegate.js.map +1 -1
  30. package/dist/kernel/env-names.d.ts +14 -0
  31. package/dist/kernel/env-names.d.ts.map +1 -1
  32. package/dist/kernel/env-names.js +16 -0
  33. package/dist/kernel/env-names.js.map +1 -1
  34. package/dist/kernel/propagation.d.ts +1 -1
  35. package/dist/kernel/propagation.d.ts.map +1 -1
  36. package/dist/kernel/propagation.js +8 -3
  37. package/dist/kernel/propagation.js.map +1 -1
  38. package/dist/kernel/skill-packages.d.ts.map +1 -1
  39. package/dist/kernel/skill-packages.js +20 -9
  40. package/dist/kernel/skill-packages.js.map +1 -1
  41. package/dist/kernel/workspace.d.ts +7 -1
  42. package/dist/kernel/workspace.d.ts.map +1 -1
  43. package/dist/kernel/workspace.js +39 -81
  44. package/dist/kernel/workspace.js.map +1 -1
  45. package/extensions/context-staging.ts +15 -7
  46. package/extensions/effort-advice.ts +99 -0
  47. package/extensions/grants-command.ts +17 -0
  48. package/extensions/grants.ts +4 -0
  49. package/extensions/init-command.ts +7 -1
  50. package/extensions/pruning-advice.ts +88 -0
  51. package/extensions/run-delegation.ts +61 -3
  52. package/extensions/session-report.ts +15 -0
  53. package/extensions/session.ts +61 -5
  54. package/package.json +1 -1
  55. package/src/advisors/decider.ts +7 -3
  56. package/src/advisors/settings.ts +61 -21
  57. package/src/cli.ts +9 -1
  58. package/src/kernel/bounded-read.ts +125 -0
  59. package/src/kernel/catalog.ts +42 -21
  60. package/src/kernel/definitions.ts +38 -8
  61. package/src/kernel/delegate-types.ts +12 -1
  62. package/src/kernel/delegate.ts +3 -1
  63. package/src/kernel/env-names.ts +16 -0
  64. package/src/kernel/propagation.ts +9 -2
  65. package/src/kernel/skill-packages.ts +26 -9
  66. package/src/kernel/workspace.ts +43 -109
package/CHANGELOG.md CHANGED
@@ -12,6 +12,87 @@ the record of how the package got here and are worth keeping; they are not worth
12
12
  > the record of how the package arrived at what it does, and because the reasoning behind each one is
13
13
  > usually the clearest statement of why the current behaviour is what it is.
14
14
 
15
+ ## 0.36.0 — one bounded reader, and a registry that fails soft without failing silent
16
+
17
+ **No behaviour changes for a working setup.** Everything here is about what happens when an operator-authored
18
+ file is malformed, oversized or hostile, and about making three guards fail a test instead of a reviewer.
19
+
20
+ **One reader for both session-start reads.** `loadWorkspaceRegistry` had worked out the correct shape the
21
+ expensive way — a non-blocking open, because a FIFO blocks inside `open(2)` before any read starts and no signal
22
+ can rescue it; every check against the held descriptor, because `stat`-by-name followed by read-by-name is a
23
+ TOCTOU; a deadline between chunks; a size bound checked twice. Its own comment ended "One reader is why that
24
+ cannot happen again", and then the second session-start read went on using a bare `readFile`. Both now call
25
+ `readBoundedFile`.
26
+
27
+ **`SKILL.md` reads are bounded, and a dropped definition is named at session start.** They had no size bound:
28
+ measured at `7096f78`, an 8 MiB definition was read whole into memory in 8ms, once per discovered skill inside
29
+ `session_start`. The bound is 1 MiB, matching the registry's, and roughly thirty times the largest real
30
+ definition found on this machine. **This is a behaviour change**: a definition over 1 MiB used to load and now
31
+ does not, so session start names it, the file and the bound. There were three readers of `SKILL.md`, not two —
32
+ the third feeds `pi-daddy init`, and bounding only the other two made `init` grant `agent:<name>` for a
33
+ definition the runtime refused, whose only symptom was `unknown agent "x"` at delegation time. All three are
34
+ bounded now and a test asserts the two agree.
35
+
36
+ **A malformed registry says so.** It still fails SOFT — one bad entry must not stop a session starting, because
37
+ nothing in the catalog is an authority — but the reason is no longer discarded. It rides on
38
+ `Catalog.registryRefusal`, session start names it, `/grants` prints it under `routable`, and both `init` paths
39
+ report it. Before this, one malformed entry removed every workspace from `/grants`, the catalog and `init` with
40
+ no message anywhere, so an operator could not tell it apart from having registered none. That is rule 8's silent
41
+ safe-mode. Session start matters most: it is where every comparable notice already lives, and the only surface
42
+ an operator sees without asking.
43
+
44
+ **Guards that could be deleted with the suite still green.** Measured before fixing: replacing the registry
45
+ deadline with `if (false)` left all 876 tests passing. The clock is injectable so a test can force it without a
46
+ slow disk. Three independent reviews then found three more unforced properties and all are forced now: the
47
+ deadline's POSITION between chunks rather than merely its existence, `grew-while-reading` (deleting it turned an
48
+ overrun into a silent truncation reported as a successful read), and the wiring of every new report — the
49
+ definitions callback, the session-start notices, and both `init` call sites were each revertible with the whole
50
+ suite green.
51
+
52
+ **API.** `makeCatalog` takes an optional second argument and `Catalog` has an optional `registryRefusal`;
53
+ `loadDefinitions` and `registeredWorkspaceIds` each take an optional reporting callback; `readBoundedBytes` is
54
+ the byte-level reader. All additive, and the only behaviour change for an existing caller is the 1 MiB bound
55
+ described above.
56
+
57
+ **Known limitation.** A definitions-discovery failure suppresses the registry refusal: `buildCatalog` calls
58
+ `loadDefinitions`, which can throw on a malformed settings file, so on that path no catalog exists to carry the
59
+ reason and only the definitions fault is reported. Fixing it means changing the catalog's error model.
60
+
61
+ ## 0.35.0 — the first two decision points, and only the environment can enable an advisor
62
+
63
+ **An advisor now fills two blanks.** When a `delegate` call names no `thinking` level, an enabled advisor is asked
64
+ to choose one from the levels the CHILD's model reports it supports. An explicit level is never overruled, and with
65
+ no advisor, no answer or a timeout the blank stays blank and the child is spawned exactly as before. The task text
66
+ is sent to the advisor so it has something to judge; it is still never recorded.
67
+
68
+ **A `pruned` context handoff can now ask which turns to carry.** The mechanical rule runs first and decides what is
69
+ eligible; the advisor is then shown at most twelve of those turns, truncated, and may only NARROW the set — an id
70
+ it invents or one the rule dropped is ignored, and an incomplete answer is discarded whole. The selection is asked
71
+ only after a plan says the handoff survived the ceiling, the grant and the gate, so a delegation the grant refuses
72
+ never ships session turns. With no advisor or no usable answer, the mechanical selection stands unchanged.
73
+
74
+ **This sends more than the effort point does.** A `pruned` handoff sends the operator's own session turns, not just
75
+ the task, to a third party. That is the sharpest egress in the package and it is why an advisor is off by default,
76
+ enabled only from the environment, and reported by `/grants`.
77
+
78
+ **Security fix over 0.34.0.**
79
+
80
+ 0.34.0 read the advisor's enable switch from `.pi/pi-daddy/settings.json`. That file is writable by any child
81
+ holding `tool:write`, and this package keeps the grant outside the workspace for exactly that reason: a ceiling a
82
+ governed child can rewrite is not a ceiling. The same argument applies here one step sideways — a child could have
83
+ flipped the switch and made the operator's next session send its own description to a third party.
84
+
85
+ **What to do.** Enabling an advisor is now `PI_DADDY_ADVISOR=jev` alongside `PI_DADDY_ADVISOR_KEY`, with
86
+ `PI_DADDY_ADVISOR_MODEL` to override the model; all three are stripped from a child spawned as a subprocess. A
87
+ Herdr pane inherits the daemon's environment, so a daemon started from a shell exporting them still hands them to
88
+ pane children — stated rather than implied, and not yet closed.
89
+
90
+ A project's `advisor` block in `settings.json` may turn an advisor off for that project and shorten its timeout. It
91
+ can no longer turn one on, choose its model, or lengthen its bound: a model is a destination and a longer bound is
92
+ not a narrowing, and that file is writable by any child holding `tool:write`. Anything that is not exactly `true`
93
+ on `enabled` disables. So a settings file that relied on `enabled: true` will find the advisor off until the
94
+ environment variable is set, and one that set `model` will be refused with a message naming the variable to use.
95
+
15
96
  ## 0.34.0 — an advisors layer, off by default (ADR-0077)
16
97
 
17
98
  `src/advisors/` holds a `Decider` that answers typed questions — `noul` (a boolean), `choice` (one of the options
@@ -48,9 +48,13 @@ export type Answer = {
48
48
  };
49
49
  export interface AdviceRequest {
50
50
  /**
51
- * What the advisor is told about the situation. **Caller-composed and deliberately not the raw task**: the task
52
- * is never stored (ADR-0021) and must not be shipped to a third party either, so a caller passes the facts it
53
- * chose, and the record below names them by key without their values.
51
+ * What the advisor is told about the situation, composed by the caller.
52
+ *
53
+ * **Sent, never recorded.** The task is never STORED (ADR-0021) and that still holds — `createAdvisor` writes the
54
+ * question keys and the answers and never this object. But an advisor cannot judge a task it cannot see, so a
55
+ * caller that needs one judged does send it, and the operator's consent for that is the advisor being off by
56
+ * default. An earlier draft of this paragraph said the raw task "must not be shipped to a third party either",
57
+ * which the first decision point then did; the rule that survived review is the narrower and true one.
54
58
  */
55
59
  state: Readonly<Record<string, unknown>>;
56
60
  questions: Readonly<Record<string, Question>>;
@@ -1 +1 @@
1
- {"version":3,"file":"decider.d.ts","sourceRoot":"","sources":["../../src/advisors/decider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,qEAAqE;AACrE,MAAM,MAAM,QAAQ,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAAE,GACnF;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAEvE,4GAA4G;AAC5G,MAAM,MAAM,MAAM,GACd;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAEtD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzE,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACzC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1C,yGAAyG;IACzG,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,+FAA+F;IAC/F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC9E;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,EAAE,OAGzB,CAAC"}
1
+ {"version":3,"file":"decider.d.ts","sourceRoot":"","sources":["../../src/advisors/decider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,qEAAqE;AACrE,MAAM,MAAM,QAAQ,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAAE,GACnF;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAEvE,4GAA4G;AAC5G,MAAM,MAAM,MAAM,GACd;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAEtD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzE,MAAM,WAAW,aAAa;IAC5B;;;;;;;;OAQG;IACH,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACzC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1C,yGAAyG;IACzG,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,+FAA+F;IAC/F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC9E;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,EAAE,OAGzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"decider.js","sourceRoot":"","sources":["../../src/advisors/decider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAqCH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;CACzB,CAAC"}
1
+ {"version":3,"file":"decider.js","sourceRoot":"","sources":["../../src/advisors/decider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAyCH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;CACzB,CAAC"}
@@ -1,21 +1,30 @@
1
1
  /**
2
2
  * Whether an advisor is on, and which one (ADR-0077).
3
3
  *
4
- * **Default off, and off is the whole configuration when nothing says otherwise.** An advisor sends a description
5
- * of the caller's situation to a third party, so it is not something a package turns on for somebody: it is turned
6
- * on in `.pi/pi-daddy/settings.json`, the file an operator reviews and commits, beside the grant that governs
7
- * everything else. Malformed configuration disables the advisor and says so, which is this project's rule for
8
- * configuration everywhere: a typo must not be a way to enable something.
4
+ * **Default off, and only the environment can turn it on.** An advisor sends a description of the caller's
5
+ * situation to a third party, so enabling one is `PI_DADDY_ADVISOR=jev` plus a key — both outside the workspace,
6
+ * both stripped from every child.
7
+ *
8
+ * 0.34.0 read the enable from `.pi/pi-daddy/settings.json` and that was wrong for the reason `grant-store.ts`
9
+ * states about the same file: it is writable by any child holding `tool:write`, so it is "the reviewable record of
10
+ * the decision, not the thing the enforcer reads". A grant lives outside the workspace precisely so a child cannot
11
+ * widen the next session's ceiling; an advisor switch a child could flip would make the operator's next session
12
+ * ship its own description to a third party, which is the same self-defeating shape. The settings block may still
13
+ * NARROW — a shorter timeout, or `enabled: false` to turn an advisor off for one project — and can never turn one
14
+ * on, choose its model, or lengthen its bound. A model is a destination rather than a narrowing, so `model` in the
15
+ * block is refused with a message naming `PI_DADDY_ADVISOR_MODEL`, and a timeout is clamped to the default rather
16
+ * than trusted. Malformed configuration disables the advisor and says so: a typo must not be a way to enable anything.
9
17
  *
10
18
  * **Not a dashboard toggle**, which is what the programme originally sketched. The dashboard is a read-only
11
19
  * renderer in a separate process that "never affects enforcement" (ADR-0036), and a control there that wrote to
12
20
  * settings would be the first thing it ever wrote. Turning an advisor on is an operator decision that belongs in
13
21
  * the reviewable file; `/grants` reports what is in force. That is a deliberate departure from the roadmap line.
14
22
  *
15
- * The key is never in this file. It is read from the environment, because a settings file is committed and an API
16
- * key must not be.
23
+ * The key is never in the settings file either, because that file is committed and an API key must not be.
17
24
  */
18
25
  export { ENV_ADVISOR_KEY as ADVISOR_KEY_ENV } from "../kernel/env-names.ts";
26
+ export { ENV_ADVISOR_MODEL } from "../kernel/env-names.ts";
27
+ export { ENV_ADVISOR } from "../kernel/env-names.ts";
19
28
  export interface AdvisorSettings {
20
29
  enabled: boolean;
21
30
  /** The only decider this release knows besides the null one. */
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/advisors/settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,eAAe,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG5E,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;IACxB,uFAAuF;IACvF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mGAAmG;IACnG,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,WAAW,EAAE,eAAoE,CAAC;AAE/F;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,eAAe,CA8BvG"}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/advisors/settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,EAAE,eAAe,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;IACxB,uFAAuF;IACvF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mGAAmG;IACnG,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,WAAW,EAAE,eAAoE,CAAC;AAE/F;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,eAAe,CA4DvG"}
@@ -1,23 +1,33 @@
1
1
  /**
2
2
  * Whether an advisor is on, and which one (ADR-0077).
3
3
  *
4
- * **Default off, and off is the whole configuration when nothing says otherwise.** An advisor sends a description
5
- * of the caller's situation to a third party, so it is not something a package turns on for somebody: it is turned
6
- * on in `.pi/pi-daddy/settings.json`, the file an operator reviews and commits, beside the grant that governs
7
- * everything else. Malformed configuration disables the advisor and says so, which is this project's rule for
8
- * configuration everywhere: a typo must not be a way to enable something.
4
+ * **Default off, and only the environment can turn it on.** An advisor sends a description of the caller's
5
+ * situation to a third party, so enabling one is `PI_DADDY_ADVISOR=jev` plus a key — both outside the workspace,
6
+ * both stripped from every child.
7
+ *
8
+ * 0.34.0 read the enable from `.pi/pi-daddy/settings.json` and that was wrong for the reason `grant-store.ts`
9
+ * states about the same file: it is writable by any child holding `tool:write`, so it is "the reviewable record of
10
+ * the decision, not the thing the enforcer reads". A grant lives outside the workspace precisely so a child cannot
11
+ * widen the next session's ceiling; an advisor switch a child could flip would make the operator's next session
12
+ * ship its own description to a third party, which is the same self-defeating shape. The settings block may still
13
+ * NARROW — a shorter timeout, or `enabled: false` to turn an advisor off for one project — and can never turn one
14
+ * on, choose its model, or lengthen its bound. A model is a destination rather than a narrowing, so `model` in the
15
+ * block is refused with a message naming `PI_DADDY_ADVISOR_MODEL`, and a timeout is clamped to the default rather
16
+ * than trusted. Malformed configuration disables the advisor and says so: a typo must not be a way to enable anything.
9
17
  *
10
18
  * **Not a dashboard toggle**, which is what the programme originally sketched. The dashboard is a read-only
11
19
  * renderer in a separate process that "never affects enforcement" (ADR-0036), and a control there that wrote to
12
20
  * settings would be the first thing it ever wrote. Turning an advisor on is an operator decision that belongs in
13
21
  * the reviewable file; `/grants` reports what is in force. That is a deliberate departure from the roadmap line.
14
22
  *
15
- * The key is never in this file. It is read from the environment, because a settings file is committed and an API
16
- * key must not be.
23
+ * The key is never in the settings file either, because that file is committed and an API key must not be.
17
24
  */
18
25
  // Spelled once, in the kernel's table, so this layer cannot drift from the list `childEnv` refuses to write.
19
26
  export { ENV_ADVISOR_KEY as ADVISOR_KEY_ENV } from "../kernel/env-names.js";
20
- import { ENV_ADVISOR_KEY } from "../kernel/env-names.js";
27
+ import { ENV_ADVISOR, ENV_ADVISOR_KEY, ENV_ADVISOR_MODEL } from "../kernel/env-names.js";
28
+ import { DEFAULT_ADVICE_TIMEOUT_MS } from "./advisor.js";
29
+ export { ENV_ADVISOR_MODEL } from "../kernel/env-names.js";
30
+ export { ENV_ADVISOR } from "../kernel/env-names.js";
21
31
  export const ADVISOR_OFF = Object.freeze({ enabled: false, decider: "none" });
22
32
  /**
23
33
  * Read the `advisor` block of a project settings file. Absent is off; malformed is off WITH a reason.
@@ -27,23 +37,47 @@ export const ADVISOR_OFF = Object.freeze({ enabled: false, decider: "none" });
27
37
  * their session without having successfully asked for it. Both are worse than a sentence naming the field.
28
38
  */
29
39
  export function advisorSettingsFrom(raw, env = process.env) {
30
- if (raw === undefined || raw === null)
40
+ // The environment decides WHETHER, before the workspace is consulted at all. A settings file that asks for an
41
+ // advisor nobody enabled is not a configuration error; it is simply a project that would use one if the operator
42
+ // turned it on, so it is reported rather than refused.
43
+ const requested = env[ENV_ADVISOR]?.trim();
44
+ if (!requested)
31
45
  return ADVISOR_OFF;
32
- if (typeof raw !== "object" || Array.isArray(raw))
46
+ if (requested !== "jev")
47
+ return { ...ADVISOR_OFF, refusal: `${ENV_ADVISOR}=${requested} names no advisor this release knows` };
48
+ const block = raw === undefined || raw === null ? {} : raw;
49
+ if (typeof block !== "object" || Array.isArray(block))
33
50
  return { ...ADVISOR_OFF, refusal: "settings.advisor must be an object; no advisor is enabled" };
34
- const block = raw;
35
- const unknownKeys = Object.keys(block).filter((key) => !["enabled", "decider", "model", "timeoutMs"].includes(key));
51
+ const fields = block;
52
+ // `model` stays KNOWN so the refusal below can say why it is refused, rather than reporting it as a typo.
53
+ const unknownKeys = Object.keys(fields).filter((key) => !["enabled", "decider", "model", "timeoutMs"].includes(key));
54
+ // Key names are echoed back, and this file is workspace-writable: a key containing an escape sequence or a
55
+ // newline would otherwise forge lines in the `/grants` panel, which is a trust surface. Review measured a forged
56
+ // `grant tool:*` line. Sanitised and truncated before it reaches any renderer.
36
57
  if (unknownKeys.length > 0)
37
- return { ...ADVISOR_OFF, refusal: `settings.advisor has unknown field(s) ${unknownKeys.join(", ")}` };
38
- if (block.enabled !== true)
39
- return ADVISOR_OFF;
40
- if (block.decider !== "jev")
58
+ return {
59
+ ...ADVISOR_OFF,
60
+ refusal: `settings.advisor has unknown field(s) ${unknownKeys
61
+ .map((key) => key.replace(/[^\w.-]/g, "?").slice(0, 40))
62
+ .join(", ")}`,
63
+ };
64
+ // A project may switch it OFF; it may never switch it on, which is why `true` is not read. Anything that is not
65
+ // exactly `true` disables: `"false"`, `0` and `null` used to leave the advisor ON with no word said, which is
66
+ // rule 8 inverted — the one control this file retains failing open.
67
+ if (fields.enabled !== undefined && fields.enabled !== true)
68
+ return { ...ADVISOR_OFF, refusal: "settings.advisor.enabled is not true for this project" };
69
+ if (fields.decider !== undefined && fields.decider !== "jev")
41
70
  return { ...ADVISOR_OFF, refusal: `settings.advisor.decider must be "jev"; no advisor is enabled` };
42
- if (block.model !== undefined && typeof block.model !== "string")
43
- return { ...ADVISOR_OFF, refusal: "settings.advisor.model must be a string" };
44
- if (block.timeoutMs !== undefined &&
45
- (!Number.isInteger(block.timeoutMs) || block.timeoutMs < 1 || block.timeoutMs > 30_000))
71
+ // **A model is a DESTINATION, not a narrowing.** Letting this workspace-writable file choose it would let a child
72
+ // holding `tool:write` point the operator's next session at a generative model of its choosing, billed to the
73
+ // operator's key — the same self-defeating shape this release moved the enable switch to close, one step
74
+ // sideways. Review measured it. The model comes from the environment or not at all.
75
+ if (fields.model !== undefined)
76
+ return { ...ADVISOR_OFF, refusal: `settings.advisor.model is not a narrowing; set ${ENV_ADVISOR_MODEL} instead` };
77
+ if (fields.timeoutMs !== undefined &&
78
+ (!Number.isInteger(fields.timeoutMs) || fields.timeoutMs < 1 || fields.timeoutMs > 30_000))
46
79
  return { ...ADVISOR_OFF, refusal: "settings.advisor.timeoutMs must be an integer between 1 and 30000" };
80
+ const model = env[ENV_ADVISOR_MODEL]?.trim();
47
81
  const key = env[ENV_ADVISOR_KEY]?.trim();
48
82
  if (!key)
49
83
  return {
@@ -53,8 +87,12 @@ export function advisorSettingsFrom(raw, env = process.env) {
53
87
  return {
54
88
  enabled: true,
55
89
  decider: "jev",
56
- ...(typeof block.model === "string" ? { model: block.model } : {}),
57
- ...(block.timeoutMs !== undefined ? { timeoutMs: block.timeoutMs } : {}),
90
+ ...(model ? { model } : {}),
91
+ // Clamped, never raised: a longer bound is not a narrowing either, and a child-writable 30s would be a stall on
92
+ // every delegation.
93
+ ...(fields.timeoutMs !== undefined
94
+ ? { timeoutMs: Math.min(fields.timeoutMs, DEFAULT_ADVICE_TIMEOUT_MS) }
95
+ : {}),
58
96
  };
59
97
  }
60
98
  //# sourceMappingURL=settings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/advisors/settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,6GAA6G;AAC7G,OAAO,EAAE,eAAe,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAazD,MAAM,CAAC,MAAM,WAAW,GAAoB,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AAE/F;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAY,EAAE,MAAyB,OAAO,CAAC,GAAG;IACpF,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,WAAW,CAAC;IAC1D,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAC/C,OAAO,EAAE,GAAG,WAAW,EAAE,OAAO,EAAE,2DAA2D,EAAE,CAAC;IAClG,MAAM,KAAK,GAAG,GAA8B,CAAC;IAC7C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACpH,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;QACxB,OAAO,EAAE,GAAG,WAAW,EAAE,OAAO,EAAE,yCAAyC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IACxG,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI;QAAE,OAAO,WAAW,CAAC;IAC/C,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK;QACzB,OAAO,EAAE,GAAG,WAAW,EAAE,OAAO,EAAE,+DAA+D,EAAE,CAAC;IACtG,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAC9D,OAAO,EAAE,GAAG,WAAW,EAAE,OAAO,EAAE,yCAAyC,EAAE,CAAC;IAChF,IACE,KAAK,CAAC,SAAS,KAAK,SAAS;QAC7B,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,IAAK,KAAK,CAAC,SAAoB,GAAG,CAAC,IAAK,KAAK,CAAC,SAAoB,GAAG,MAAM,CAAC;QAE/G,OAAO,EAAE,GAAG,WAAW,EAAE,OAAO,EAAE,mEAAmE,EAAE,CAAC;IAC1G,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC;IACzC,IAAI,CAAC,GAAG;QACN,OAAO;YACL,GAAG,WAAW;YACd,OAAO,EAAE,mCAAmC,eAAe,oCAAoC;SAChG,CAAC;IACJ,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,KAAK;QACd,GAAG,CAAC,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/advisors/settings.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG;AAkBH,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AA0BpC,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,eAAe,GAAG,MAAM,GAAG,SAAS,CAAC;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,oFAAoF;IACpF,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA+CpD;AA4ED,iFAAiF;AACjF,mHAAmH;AACnH,wBAAgB,aAAa,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,CA8B9E;AA6DD,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAqF1D"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG;AAkBH,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AA0BpC,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,eAAe,GAAG,MAAM,GAAG,SAAS,CAAC;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,oFAAoF;IACpF,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA+CpD;AAoFD,iFAAiF;AACjF,mHAAmH;AACnH,wBAAgB,aAAa,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,CA8B9E;AA6DD,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAqF1D"}
package/dist/cli.js CHANGED
@@ -124,7 +124,9 @@ async function init(cwd, force) {
124
124
  }
125
125
  let plan;
126
126
  try {
127
- plan = planInit(packages, cwd, await registeredWorkspaceIds());
127
+ // A registry that cannot be read scaffolds no workspace capabilities. That was silent, so the operator
128
+ // saw a plan with none and no way to tell it apart from having registered none (rule 8).
129
+ plan = planInit(packages, cwd, await registeredWorkspaceIds(undefined, (reason) => console.error(`pi-daddy init: workspace registry unreadable, scaffolding none — ${reason}`)));
128
130
  }
129
131
  catch (error) {
130
132
  // R-78's backstop reaching the surface. Nothing is written: a grant that could mean something to a
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EACL,SAAS,EACT,cAAc,EACd,QAAQ,EAER,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EACL,qBAAqB,EACrB,iBAAiB,GAGlB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,+FAA+F;AAC/F,MAAM,YAAY,GAAG,GAAG,cAAc,IAAI,qBAAqB,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;AAE5F,MAAM,KAAK,GAAG;;;qDAGuC,YAAY;;;;;;;;;;;;gCAYjC,YAAY,iDAAiD,CAAC;AAc9F;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;IACxF,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACzG,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAE/G,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAChC,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,+GAA+G;QAC/G,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC;QACtC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM;gBACpF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,wCAAwC,CAAC,EAAE,CAAC;YAC/F,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QACxG,CAAC;QACD,IAAI,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;YACxD,OAAO;gBACL,OAAO,EAAE,MAAM;gBACf,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,CAAC,gEAAgE,CAAC;aAC3E,CAAC;QACJ,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;QACnD,IAAI,OAAO,CAAC,MAAM;YAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,mBAAmB,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACzG,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;IAClH,CAAC;IACD,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,oBAAoB,OAAO,GAAG,CAAC,EAAE,CAAC;IAC3G,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,GAAuB,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;aAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YAC3B,kGAAkG;YAClG,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;iBAC/E,CAAC;gBACJ,GAAG,GAAG,KAAK,CAAC;gBACZ,CAAC,IAAI,CAAC,CAAC;YACT,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACjD,CAAC;AAED,iFAAiF;AACjF,KAAK,UAAU,IAAI,CAAC,GAAW,EAAE,KAAc;IAC7C,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,uGAAuG;QACvG,uFAAuF;QACvF,wGAAwG;QACxG,qCAAqC;QACrC,OAAO,CAAC,GAAG,CACT,kIAAkI;YAChI,8CAA8C;YAC9C,iBAAiB,CAAC,GAAG,CAAC;iBACnB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;iBACtB,IAAI,CAAC,EAAE,CAAC;YACX,sFAAsF;YACtF,4EAA4E,CAC/E,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,IAAc,CAAC;IACnB,IAAI,CAAC;QACH,uGAAuG;QACvG,yFAAyF;QACzF,IAAI,GAAG,QAAQ,CACb,QAAQ,EACR,GAAG,EACH,MAAM,sBAAsB,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CACjD,OAAO,CAAC,KAAK,CAAC,oEAAoE,MAAM,EAAE,CAAC,CAC5F,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mGAAmG;QACnG,mGAAmG;QACnG,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;YACtC,OAAO,CAAC,KAAK,CAAC,kBAAkB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACjD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CACT,SAAS,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,aAAa;YAClE,GAAG,SAAS,0BAA0B;YACtC,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;gBACxB,CAAC,CAAC,KAAK,GAAG,CAAC,UAAU,CAAC,MAAM,6BAA6B,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACrF,CAAC,CAAC,EAAE,CAAC;YACP,gGAAgG;YAChG,kDAAkD;YAClD,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CACpE,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxF,KAAK,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,OAAO;QAAE,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IACnF,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU;QAAE,OAAO,CAAC,GAAG,CAAC,aAAa,SAAS,EAAE,CAAC,CAAC;IAE/E,sGAAsG;IACtG,yDAAyD;IACzD,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;QACjE,OAAO,CAAC,GAAG,CACT,8BAA8B,QAAQ,gBAAgB,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,uBAAuB;YACvG,mGAAmG,CACtG,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;IAC5D,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;IAC3E,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,OAAO;QAAE,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxE,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI;QAAE,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAC/G,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAEvG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IACnB,qGAAqG;IACrG,qFAAqF;IACrF,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,iFAAiF;AACjF,mHAAmH;AACnH,MAAM,UAAU,aAAa,CAAC,GAAiB,EAAE,OAAqB;IACpE,MAAM,IAAI,GAAG,WAAW,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;IACvE,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;QACvB,KAAK,aAAa;YAChB,OAAO,CACL,GAAG,IAAI,uFAAuF;gBAC9F,8FAA8F,CAC/F,CAAC;QACJ,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACzB,0GAA0G;YAC1G,0GAA0G;YAC1G,0GAA0G;YAC1G,uGAAuG;YACvG,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,uBAAuB,CAAC,EAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACtG,OAAO,CACL,GAAG,IAAI,aAAa,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kDAAkD;gBAC/F,8FAA8F;gBAC9F,oDAAoD;gBACpD,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACtD,CAAC;QACJ,CAAC;QACD,KAAK,UAAU;YACb,OAAO,CACL,GAAG,IAAI,aAAa,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,uDAAuD;gBACpG,6DAA6D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,6CAA6C,IAAI;gBACxL,4DAA4D,CAC7D,CAAC;QACJ,KAAK,UAAU;YACb,OAAO,GAAG,IAAI,6FAA6F,CAAC;IAChH,CAAC;AACH,CAAC;AAED,4FAA4F;AAC5F,KAAK,UAAU,MAAM,CAAC,IAAc;IAClC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;IAEtE,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;IAC1E,KAAK,MAAM,KAAK,IAAI,SAAS;QAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEvG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CACT,KAAK,UAAU,CAAC,MAAM,0EAA0E;YAC9F,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;YAChD,mGAAmG;YACnG,mGAAmG;YACnG,mBAAmB,YAAY,GAAG,CACrC,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvG,OAAO,CAAC,GAAG,CACT,0BAA0B,MAAM,KAAK;YACnC,wGAAwG;YACxG,kGAAkG,CACrG,CAAC;IACJ,CAAC;IAED,wGAAwG;IACxG,wGAAwG;IACxG,2GAA2G;IAC3G,uGAAuG;IACvG,sEAAsE;IACtE,EAAE;IACF,0GAA0G;IAC1G,wGAAwG;IACxG,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9F,OAAO,CAAC,GAAG,CACT,0BAA0B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;YAC/D,kGAAkG;YAClG,yHAAyH;YACzH,gFAAgF;YAChF,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;gBACjB,CAAC,CAAC,mDAAmD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,+BAA+B;oBACpG,uBAAuB;gBACzB,CAAC,CAAC,EAAE,CAAC,CACV,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CACT,iBAAiB,IAAI,CAAC,KAAK,CAAC,MAAM,mBAAmB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;QAC9E,CAAC,CAAC,MAAM,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,IAAI;YACvD,CAAC,CAAC,uBAAuB,YAAY,4BAA4B,cAAc,WAAW,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB;YAClJ,CAAC,CAAC,EAAE,CAAC;QACP,aAAa,YAAY,kCAAkC;QAC3D,yFAAyF,CAC5F,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAc;IACvC,MAAM,aAAa,GAAG,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1D,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAE/B,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,iGAAiG;QACjG,6FAA6F;QAC7F,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QACpG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QAC/E,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;QACxG,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,eAAe,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,UAAW,CAAC,EAC3D,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,YAAa,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,OAAO,KAAK,gBAAgB,EAAE,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,2BAA2B,MAAM,EAAE,CAAC,CAAC;YACnD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,KAAK,eAAe,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,aAAa,MAAM,qDAAqD,CAAC,CAAC;YACxF,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,CAAC,GAAG,CACT,sBAAsB,MAAM,CAAC,QAAQ,mBAAmB,MAAM,SAAS,MAAM,2BAA2B;YACtG,CAAC,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,uCAAuC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CACjG,CAAC;QACF,OAAO,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,eAAe,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,UAAW,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3D,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;YACjD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CACX,aAAa,IAAI,mEAAmE;gBAClF,gCAAgC,IAAI,2CAA2C,CAClF,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,eAAe,OAAO,CAAC,SAAS,8BAA8B,CAAC,CAAC;YAC7F,OAAO,CAAC,CAAC;QACX,CAAC;QACD,wGAAwG;QACxG,OAAO,CAAC,GAAG,CACT,aAAa,IAAI,4BAA4B,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,8BAA8B;YACrH,OAAO,CAAC,OAAO;iBACZ,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,OAAO,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC;iBACjG,IAAI,CAAC,IAAI,CAAC,CAChB,CAAC;QACF,IAAI,OAAO,CAAC,gBAAgB,GAAG,CAAC;YAC9B,OAAO,CAAC,GAAG,CACT,uBAAuB,OAAO,CAAC,gBAAgB,wEAAwE;gBACrH,0GAA0G,CAC7G,CAAC;QACJ,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CACT,6GAA6G,CAC9G,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,OAAO,CAAC,MAAM,aAAa,MAAM,CAAC,SAAS,iBAAiB,CAAC,CAAC;QACtG,OAAO,CAAC,CAAC;IACX,CAAC;IACD,wGAAwG;IACxG,yGAAyG;IACzG,0GAA0G;IAC1G,+EAA+E;IAC/E,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACtE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE;IAC5B,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IACzG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC,EAAE,CAAC;AACL,IAAI,eAAe,EAAE,CAAC;IACpB,OAAO,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,57 @@
1
+ export interface BoundedReadLimits {
2
+ /** Refuse anything at or over this, before allocating it. */
3
+ maxBytes: number;
4
+ /** How long the chunk loop may run before the read is a refusal rather than a wait. */
5
+ timeoutMs: number;
6
+ /** Injected only by tests; production passes nothing and gets the wall clock. */
7
+ now?: () => number;
8
+ }
9
+ /**
10
+ * Why a bounded read did not produce text.
11
+ *
12
+ * A discriminated reason rather than a thrown error, because the two callers disagree about what a failure
13
+ * MEANS — an unreadable registry is a governance refusal naming the file, while an unreadable `SKILL.md` is
14
+ * one definition that will not be offered — and a shared reader must not decide that for them.
15
+ */
16
+ export type BoundedReadFailure = {
17
+ why: "unopenable";
18
+ detail: string;
19
+ } | {
20
+ why: "not-a-regular-file";
21
+ detail: string;
22
+ } | {
23
+ why: "too-large";
24
+ detail: string;
25
+ size: number;
26
+ } | {
27
+ why: "grew-while-reading";
28
+ detail: string;
29
+ } | {
30
+ why: "timed-out";
31
+ detail: string;
32
+ } | {
33
+ why: "unreadable";
34
+ detail: string;
35
+ };
36
+ export type BoundedReadResult = {
37
+ ok: true;
38
+ text: string;
39
+ } | ({
40
+ ok: false;
41
+ } & BoundedReadFailure);
42
+ export type BoundedReadBytes = {
43
+ ok: true;
44
+ bytes: Buffer;
45
+ } | ({
46
+ ok: false;
47
+ } & BoundedReadFailure);
48
+ /**
49
+ * The same read, handing back raw bytes.
50
+ *
51
+ * `skill-packages.ts` needs the bytes rather than a string, because it asserts that a definition survives a
52
+ * UTF-8 round trip unchanged — a latin-1 byte that decodes to U+FFFD changes the file's digest, and that
53
+ * check is only possible against the original buffer. Decoding here and re-encoding there would defeat it.
54
+ */
55
+ export declare function readBoundedFile(path: string, limits: BoundedReadLimits): Promise<BoundedReadResult>;
56
+ export declare function readBoundedBytes(path: string, limits: BoundedReadLimits): Promise<BoundedReadBytes>;
57
+ //# sourceMappingURL=bounded-read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bounded-read.d.ts","sourceRoot":"","sources":["../../src/kernel/bounded-read.ts"],"names":[],"mappings":"AAmCA,MAAM,WAAW,iBAAiB;IAChC,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,uFAAuF;IACvF,SAAS,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IAAE,GAAG,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,GAAG,EAAE,oBAAoB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,GAAG,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,GAAG,EAAE,oBAAoB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,GAAG,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,GAAG,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1C,MAAM,MAAM,iBAAiB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,CAAC;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,GAAG,kBAAkB,CAAC,CAAC;AAClG,MAAM,MAAM,gBAAgB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,CAAC;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,GAAG,kBAAkB,CAAC,CAAC;AAElG;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAGzG;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkDzG"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * One bounded reader for the operator-authored files this package reads at SESSION START.
3
+ *
4
+ * **Why this is a module rather than a pattern to copy.** `loadWorkspaceRegistry` worked out the correct
5
+ * shape the expensive way — R-79 hung forever on a FIFO, a `stat`-then-`readFile` rewrite reintroduced the
6
+ * hang through a TOCTOU, and `AbortSignal.timeout` turned out never to interrupt a libuv read. That comment
7
+ * block ends with "One reader is why that cannot happen again", and then a second session-start read
8
+ * (`loadDefinitions`, reading each `SKILL.md`) went on using a bare `readFile`. The guards were not copied
9
+ * because copying them correctly is exactly what the registry's own history says nobody manages.
10
+ *
11
+ * What the shape buys, restated once here so neither caller has to:
12
+ *
13
+ * - `O_NONBLOCK` on the open. A FIFO blocks inside `open(2)` before any read starts, so a signal or a
14
+ * deadline checked between chunks can never rescue it; a non-blocking open returns instead.
15
+ * - every check against the HELD DESCRIPTOR. `stat` by name followed by a read by name is a TOCTOU, and the
16
+ * attacker is any process at the same uid — swapping a regular file for a FIFO between the two hangs the
17
+ * reader. `fstat` on a descriptor has no name left to re-resolve.
18
+ * - a deadline checked BETWEEN chunks, which is all an `AbortSignal` ever managed. Its honest limit: a
19
+ * stalled open or a single wedged read cannot be interrupted from in-process.
20
+ * - a size bound checked twice, before the read from `fstat` and again after, because a file can grow
21
+ * between the two. **The buffer is `maxBytes + 1` regardless of the file's size, and that is deliberate.**
22
+ * Review proposed sizing it from `fstat` instead; that would be faster and would silently break the second
23
+ * check, because a file whose reported size understates its content — anything under procfs, and any file
24
+ * that grows — would fill its small buffer exactly and come back as a successful truncated read. The cost
25
+ * was measured rather than assumed: 500 allocations of 1 MiB + 1 take 8.1ms for an RSS delta of 2.8 MB,
26
+ * because `allocUnsafe` never touches the pages.
27
+ *
28
+ * **The clock is injected** so the deadline is forced by a test rather than by a reviewer. Before this
29
+ * module the registry's deadline could be deleted outright and all 876 tests still passed (measured at
30
+ * `7096f78`), which is rule 7's "a test that cannot fail is worse than no test" with the production change
31
+ * named: delete the `now() > deadline` branch below and `bounded-read.test.ts` fails.
32
+ */
33
+ import { constants } from "node:fs";
34
+ import { open } from "node:fs/promises";
35
+ /**
36
+ * The same read, handing back raw bytes.
37
+ *
38
+ * `skill-packages.ts` needs the bytes rather than a string, because it asserts that a definition survives a
39
+ * UTF-8 round trip unchanged — a latin-1 byte that decodes to U+FFFD changes the file's digest, and that
40
+ * check is only possible against the original buffer. Decoding here and re-encoding there would defeat it.
41
+ */
42
+ export async function readBoundedFile(path, limits) {
43
+ const read = await readBoundedBytes(path, limits);
44
+ return read.ok ? { ok: true, text: read.bytes.toString("utf8") } : read;
45
+ }
46
+ export async function readBoundedBytes(path, limits) {
47
+ const now = limits.now ?? Date.now;
48
+ let handle;
49
+ try {
50
+ handle = await open(path, constants.O_RDONLY | constants.O_NONBLOCK);
51
+ }
52
+ catch (error) {
53
+ return { ok: false, why: "unopenable", detail: String(error) };
54
+ }
55
+ try {
56
+ const info = await handle.stat();
57
+ if (!info.isFile())
58
+ return {
59
+ ok: false,
60
+ why: "not-a-regular-file",
61
+ detail: `${path} is not a regular file — a FIFO, device or socket here would block rather than fail`,
62
+ };
63
+ if (info.size > limits.maxBytes)
64
+ return {
65
+ ok: false,
66
+ why: "too-large",
67
+ size: info.size,
68
+ detail: `${path} is ${info.size} bytes, over the ${limits.maxBytes} limit`,
69
+ };
70
+ const deadline = now() + limits.timeoutMs;
71
+ const buffer = Buffer.allocUnsafe(limits.maxBytes + 1);
72
+ let filled = 0;
73
+ while (filled < buffer.length) {
74
+ if (now() > deadline)
75
+ return {
76
+ ok: false,
77
+ why: "timed-out",
78
+ detail: `${path} did not finish reading within ${limits.timeoutMs}ms`,
79
+ };
80
+ const { bytesRead } = await handle.read(buffer, filled, buffer.length - filled, filled);
81
+ if (bytesRead === 0)
82
+ break;
83
+ filled += bytesRead;
84
+ }
85
+ if (filled > limits.maxBytes)
86
+ return {
87
+ ok: false,
88
+ why: "grew-while-reading",
89
+ detail: `${path} exceeded the ${limits.maxBytes} limit while being read — it grew after its size was checked`,
90
+ };
91
+ return { ok: true, bytes: buffer.subarray(0, filled) };
92
+ }
93
+ catch (error) {
94
+ return { ok: false, why: "unreadable", detail: String(error) };
95
+ }
96
+ finally {
97
+ await handle.close().catch(() => { });
98
+ }
99
+ }
100
+ //# sourceMappingURL=bounded-read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bounded-read.js","sourceRoot":"","sources":["../../src/kernel/bounded-read.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,17 @@ export interface Catalog {
33
33
  all: Capability[];
34
34
  byKind(kind: CapabilityKind): Capability[];
35
35
  has(capability: Capability): boolean;
36
+ /**
37
+ * Why the workspace registry contributed nothing, when one was named and could not be read.
38
+ *
39
+ * The catalog fails SOFT on a bad registry — a malformed one must not stop a session starting — and the
40
+ * refusal used to be discarded by `() => []` at the call below. That is rule 8's silent safe-mode: one
41
+ * malformed entry removed every workspace from `/grants`, from the catalog and from `init`, and produced
42
+ * no message anywhere, so an operator saw an empty list and could not tell it apart from having
43
+ * registered nothing. Failing soft is still right; failing soft and SILENTLY was not. `undefined` means
44
+ * no registry was named, or it read cleanly.
45
+ */
46
+ registryRefusal?: string;
36
47
  }
37
48
  /** Split observed tool names into pi built-ins and extension-provided tools. */
38
49
  export declare function classifyToolNames(observed: string[]): CatalogEntry[];
@@ -61,7 +72,7 @@ export declare function definitionEntries(definitions: Map<string, SkillDefiniti
61
72
  */
62
73
  export declare function workspaceEntries(registry: WorkspaceRegistryFile, source?: string): CatalogEntry[];
63
74
  /** Assemble a catalog from parts. Pure, so it is testable without a filesystem. */
64
- export declare function makeCatalog(entries: CatalogEntry[]): Catalog;
75
+ export declare function makeCatalog(entries: CatalogEntry[], registryRefusal?: string): Catalog;
65
76
  /** Build the live catalog. `observedTools` comes from a provider payload; null when not yet seen. */
66
77
  export declare function buildCatalog(input: {
67
78
  cwd: string;
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/kernel/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEzE,OAAO,EAAsC,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAyB,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAKnF,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,CAAC;AAE3F,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,cAAc,CAAC;IACrB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,0CAA0C;IAC1C,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,UAAU,EAAE,CAAC;IAC3C,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC;CACtC;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAMpE;AAED,+CAA+C;AAC/C,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAE/C;AAED,mGAAmG;AACnG,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAOrE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,YAAY,EAAE,CAM3F;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,qBAAqB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAQjG;AAED,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAY5D;AAED,qGAAqG;AACrG,wBAAsB,YAAY,CAAC,KAAK,EAAE;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC/B,2GAA2G;IAC3G,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,OAAO,CAAC,CAgCnB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,UAAU,EAAE,CAuC3F;AA6DD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAuB1F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAa1E;AAqBD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAO9E"}
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/kernel/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEzE,OAAO,EAAsC,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAyB,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAKnF,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,CAAC;AAE3F,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,cAAc,CAAC;IACrB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,0CAA0C;IAC1C,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,UAAU,EAAE,CAAC;IAC3C,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC;IACrC;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAMpE;AAED,+CAA+C;AAC/C,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAE/C;AAED,mGAAmG;AACnG,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAOrE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,YAAY,EAAE,CAM3F;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,qBAAqB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAQjG;AAED,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAatF;AAED,qGAAqG;AACrG,wBAAsB,YAAY,CAAC,KAAK,EAAE;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC/B,2GAA2G;IAC3G,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,OAAO,CAAC,CAyCnB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,UAAU,EAAE,CAuC3F;AA6DD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAuB1F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAa1E;AAqBD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAO9E"}