sibyl-system 1.4.0 → 1.6.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 +24 -5
- package/dist/cli.js +1631 -771
- package/dist/index.js +3945 -15322
- package/package.json +10 -5
package/README.md
CHANGED
|
@@ -104,8 +104,8 @@ stderr, registers nothing, and returns empty hooks.
|
|
|
104
104
|
| `sibyl_status` | `{ runId? }` | Read-only. Lists all recorded runs (newest last) + the last chamber-ledger rows, or shows one run's full record and space dir. |
|
|
105
105
|
| `sibyl_review` | `{ target, goal, seed?, maxRounds? }` | v1.1 general democratic-centralism chamber: launches the isolated evidence→clash→judge pipeline detached and returns a receipt (explicitly NOT a verdict); the single voice lands in the run record at terminal state. CLI twin: `sibyl-chamber`. |
|
|
106
106
|
| `sibyl_anchor_check` | `{ sessionId, index?, body?, expectSha256?, label? }` | Read-only verifier for "human anchor" claims (an order/approval message the owner says they sent): re-checks the claim against the engine's own session store instead of trusting a transcribed string. Closed 4-state verdict `MATCH` / `MISMATCH` / `ABSENT` / `ERROR`; the receipt carries a hash of the canonical view read, so later store mutation shows up as a view-hash difference. No `expectSha256` claim → non-verdict. |
|
|
107
|
-
| `sibyl_time_probe` | `{ endpoints?, toleranceMs? }` | Clock-integrity check against independent HTTP `Date` headers (default pool: cloudflare / google / mozilla; sources with the same owner dept collapse to ONE source). Verdict: `SYNCED` / `DRIFT` / `INSUFFICIENT-SOURCES` (< 2 distinct owners is never consent). Default tolerance 300000 ms.
|
|
108
|
-
| `sibyl_attribute` | `{ moves, commits, roster }` | Pure comparator (zero network/git of its own): attributes git ref-moves to committer identities against a roster. Per-move verdict: `ATTRIBUTED` / `UNATTRIBUTED` (the silent-egress case) / `AMBIGUOUS` (byte-equal roster pair = registry defect, blocks, never picks). Identity matching is byte-exact by design — no normalization. |
|
|
107
|
+
| `sibyl_time_probe` | `{ endpoints?, toleranceMs? }` | Clock-integrity check against independent HTTP `Date` headers (default pool: cloudflare / google / mozilla; sources with the same owner dept collapse to ONE source). Verdict: `SYNCED` / `DRIFT` / `INSUFFICIENT-SOURCES` (< 2 distinct owners is never consent). Default tolerance 300000 ms. `endpoints` JSON is shape-validated and every URL passes the egress gate before any fetch (reserved/internal shapes refused by rule name; blocked = failed receipt, never consent). HEAD only, zero payload, redirects not followed. |
|
|
108
|
+
| `sibyl_attribute` | `{ moves, commits, roster }` | Pure comparator (zero network/git of its own): attributes git ref-moves to committer identities against a roster. Per-move verdict: `ATTRIBUTED` / `UNATTRIBUTED` (the silent-egress case) / `AMBIGUOUS` (byte-equal roster pair = registry defect, blocks, never picks). Identity matching is byte-exact by design — no normalization. `moves`/`roster` JSON is shape-validated; malformed input is refused by name (entry-indexed), never guessed at. |
|
|
109
109
|
|
|
110
110
|
## Options
|
|
111
111
|
|
|
@@ -208,13 +208,28 @@ Plainly stated:
|
|
|
208
208
|
|
|
209
209
|
## Security notes
|
|
210
210
|
|
|
211
|
+
See **[SECURITY.md](SECURITY.md)** for the disclosure channel (private GitHub
|
|
212
|
+
advisory), the full data-egress map, and the honestly-named limitations.
|
|
213
|
+
Summary:
|
|
214
|
+
|
|
211
215
|
- Consult/swarm send the artifact text to your configured model pool providers.
|
|
216
|
+
- `sibyl_time_probe` fetches nothing before the URL passes the egress gate
|
|
217
|
+
(v1.5.0): reserved/internal address shapes, single-label hosts, non-http(s)
|
|
218
|
+
schemes, userinfo and non-default ports are refused by rule name; a blocked
|
|
219
|
+
source is a failed receipt, never consent.
|
|
212
220
|
- The plugin writes under its state paths (the runs file and the per-run space) and,
|
|
213
221
|
for chamber/exam lanes, sealed run directories under `lane.runRoot`
|
|
214
222
|
(default `/tmp`), every plugin-created dir `0700` (mkdir mode + explicit chmod:
|
|
215
223
|
unreachable to group/other regardless of umask — v1.4.0 private-dir law) —
|
|
216
224
|
role homes, transcripts, pidfiles, CHECKSUMS.
|
|
217
225
|
- Voter/worker turns run with `bash`, `edit`, and `write` disabled per prompt.
|
|
226
|
+
- Supply-chain seating (v1.6.0): actions SHA-pinned, CI installs with
|
|
227
|
+
`--ignore-scripts`, weekly scheduled `npm audit` witnessed server-side by the
|
|
228
|
+
pre-publish liveness gate (fresh green run bound to the released commit).
|
|
229
|
+
Honest status ledger of every vector, open or closed: [OPEN-VECTORS.md](OPEN-VECTORS.md).
|
|
230
|
+
- Engine sessions this product spawns are retained under bounded ages
|
|
231
|
+
(`npm run reap`, dry-run by default; audit conveners >= 90 days per owner
|
|
232
|
+
ruling, reconciliation face preserved in the sealed manifest).
|
|
218
233
|
|
|
219
234
|
## Architecture (`src/`)
|
|
220
235
|
|
|
@@ -253,8 +268,10 @@ index.ts plugin entry: parse options → share one RunStore + client
|
|
|
253
268
|
├── independence.ts W1 convener-recusal: engine-store chain walk +
|
|
254
269
|
│ drafting-evidence scan (INDEPENDENT / NOT-INDEPENDENT /
|
|
255
270
|
│ UNVERIFIABLE, fail-closed on unreadable)
|
|
256
|
-
├── options.ts zod v4 schema + parseOptions (never throws)
|
|
271
|
+
├── options.ts zod v4 schema + parseOptions (never throws); home of the
|
|
272
|
+
│ config-default single sources (DEFAULT_TIMEOUT_MS)
|
|
257
273
|
├── cli.ts v1.1 sibyl-chamber bin: run | status | spotcheck | kill
|
|
274
|
+
├── util.ts v1.5.0 single definitions: withTimeout + errMessage
|
|
258
275
|
└── tools/ sibyl_consult / sibyl_swarm / sibyl_status / sibyl_review
|
|
259
276
|
+ audit primitives (anchor / time probe / attribution)
|
|
260
277
|
glue + shared helpers (model-slot chain, artifact reader)
|
|
@@ -272,7 +289,9 @@ PLAN→MINT→DISPATCH→AGGREGATE pipeline over ordinary child sessions.
|
|
|
272
289
|
|
|
273
290
|
```bash
|
|
274
291
|
npm run typecheck # tsc --noEmit, strict + noUncheckedIndexedAccess + exactOptionalPropertyTypes
|
|
275
|
-
npm test # full unit suite, fully offline (no network, no LLM;
|
|
292
|
+
npm test # full unit suite, fully offline (no network, no LLM; 497 at v1.6.0 — the run prints the exact count)
|
|
293
|
+
npm run reap # session-retention reaper: dry-run manifest by default; -- --apply deletes via the engine API
|
|
294
|
+
npm run coverage # offline suite + coverage floor ratchet (lines 55 / branches 80 / funcs 90 — floors only move up; CI door)
|
|
276
295
|
npm run build # esbuild bundle → dist/index.js + dist/cli.js (ESM)
|
|
277
296
|
node smoke/run-smoke.mjs # offline smoke of the shipped surface (see smoke/README.md)
|
|
278
297
|
./ship.sh # the full release gate: all of the above + portability scan of the packed tarball
|
|
@@ -304,4 +323,4 @@ MIT
|
|
|
304
323
|
|
|
305
324
|
## Release wheel
|
|
306
325
|
|
|
307
|
-
Tags v* require a packet receipt (docs/release/<ver>.md with a real `gate: PASS` line) and a lease; after cloning run `scripts/install-hooks.sh` — hooks are per-clone and ship empty. **W4 (2026-10-05):** the hook reads the receipt AND `package.json`'s version exclusively from the pushed tag's **object body** (`git show <oid>:<path>`); working-tree reads are forbidden — the tag must carry its own paperwork, and the in-tag version must equal the tag name (ghost-version class killed). Regression-locked in `test/hook-prepush.test.ts` (ref lines fed via stdin).
|
|
326
|
+
Tags v* require a packet receipt (docs/release/<ver>.md with a real `gate: PASS` line) and a lease; after cloning run `scripts/install-hooks.sh` — hooks are per-clone and ship empty. **W4 (2026-10-05):** the hook reads the receipt AND `package.json`'s version exclusively from the pushed tag's **object body** (`git show <oid>:<path>`); working-tree reads are forbidden — the tag must carry its own paperwork, and the in-tag version must equal the tag name (ghost-version class killed). **Tag-body hygiene (2026-10-24):** annotated-tag message bodies are scanned on push — home-path and email shapes refuse by rule name (the message is public release content; anchor facts by hash/run-id, not machine paths). Regression-locked in `test/hook-prepush.test.ts` (ref lines fed via stdin).
|