@synapsor/runner 1.6.3 → 1.6.4
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/AGENTS.md +2 -2
- package/CHANGELOG.md +72 -8
- package/CONTRIBUTING.md +10 -3
- package/README.md +61 -93
- package/SECURITY.md +7 -3
- package/THREAT_MODEL.md +37 -0
- package/dist/authoring.mjs +98 -13
- package/dist/cli.d.ts +12 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/local-ui.d.ts +60 -0
- package/dist/local-ui.d.ts.map +1 -1
- package/dist/runner.mjs +7321 -2000
- package/dist/runtime.mjs +528 -51
- package/docs/README.md +14 -0
- package/docs/agent-guided-setup.md +7 -7
- package/docs/aggregate-reads.md +14 -5
- package/docs/app-owned-executors.md +5 -6
- package/docs/auto-boundary-and-scoped-explore.md +58 -6
- package/docs/capability-authoring.md +2 -2
- package/docs/client-recipes.md +1 -1
- package/docs/cloud-mode.md +7 -7
- package/docs/conformance.md +6 -3
- package/docs/current-scope.md +13 -2
- package/docs/cursor-plugin.md +3 -3
- package/docs/database-enforced-scope.md +6 -0
- package/docs/dsl-reference.md +12 -1
- package/docs/fresh-developer-usability.md +6 -6
- package/docs/getting-started-own-database.md +41 -41
- package/docs/guided-onboarding.md +98 -30
- package/docs/limitations.md +34 -14
- package/docs/local-mode.md +20 -20
- package/docs/mcp-audit.md +14 -14
- package/docs/mcp-client-setup.md +11 -14
- package/docs/mcp-clients.md +1 -1
- package/docs/migrating-to-synapsor-spec.md +5 -1
- package/docs/openai-agents-sdk.md +2 -2
- package/docs/proposal-evidence-freshness.md +7 -7
- package/docs/recipes.md +6 -6
- package/docs/release-notes.md +86 -10
- package/docs/release-policy.md +20 -7
- package/docs/reversible-change-sets.md +1 -1
- package/docs/reviewed-database-views.md +132 -0
- package/docs/reviewed-relationships.md +245 -0
- package/docs/rfcs/006-reviewed-reversible-change-sets.md +1 -1
- package/docs/runner-bundles.md +7 -7
- package/docs/schema-api-candidates.md +1 -1
- package/docs/security-boundary.md +30 -0
- package/docs/troubleshooting-first-run.md +52 -12
- package/docs/use-your-own-database.md +6 -4
- package/docs/workbench-ask.md +279 -0
- package/docs/writeback-executors.md +7 -7
- package/examples/auto-boundary-churn/README.md +1 -1
- package/examples/community-solar-clean-room/README.md +7 -0
- package/examples/community-solar-clean-room/docker-compose.yml +16 -0
- package/examples/community-solar-clean-room/package.json +15 -0
- package/examples/community-solar-clean-room/prisma/schema.prisma +171 -0
- package/examples/community-solar-clean-room/seed/postgres.sql +571 -0
- package/examples/fitflow-guided-onboarding/README.md +2 -2
- package/examples/openai-agents-http/Makefile +1 -1
- package/examples/openai-agents-http/README.md +1 -1
- package/examples/openai-agents-stdio/Makefile +1 -1
- package/examples/openai-agents-stdio/README.md +2 -2
- package/examples/openai-agents-stdio/agent.py +1 -4
- package/examples/reference-support-billing-app/README.md +16 -16
- package/examples/retail-clean-room/README.md +7 -0
- package/examples/retail-clean-room/docker-compose.yml +16 -0
- package/examples/retail-clean-room/package.json +9 -0
- package/examples/retail-clean-room/prisma/schema.prisma +239 -0
- package/examples/retail-clean-room/seed/postgres.sql +781 -0
- package/examples/retail-clean-room/view-recipe/average-retained-revenue.synapsor.sql +21 -0
- package/examples/retail-clean-room/view-recipe/synapsor.runner.json +25 -0
- package/examples/support-plan-credit/mcp-client-examples/claude-code.sh +1 -4
- package/examples/support-plan-credit/mcp-client-examples/claude-desktop.json +1 -4
- package/examples/support-plan-credit/mcp-client-examples/codex.config.toml +1 -4
- package/examples/support-plan-credit/mcp-client-examples/cursor-global.mcp.json +1 -4
- package/examples/support-plan-credit/mcp-client-examples/cursor-project.mcp.json +1 -4
- package/examples/support-plan-credit/mcp-client-examples/generic-stdio.json +1 -4
- package/examples/support-plan-credit/mcp-client-examples/generic-stdio.mjs +1 -1
- package/examples/support-plan-credit/mcp-client-examples/google-adk.py +1 -1
- package/examples/support-plan-credit/mcp-client-examples/langchain.mjs +1 -1
- package/examples/support-plan-credit/mcp-client-examples/llamaindex.py +1 -1
- package/examples/support-plan-credit/mcp-client-examples/openai-agents-stdio.ts +1 -1
- package/examples/support-plan-credit/mcp-client-examples/vscode.mcp.json +1 -4
- package/fixtures/compatibility/published-1.6.3/manifest.json +76 -0
- package/fixtures/compatibility/published-1.6.3/sources/packages/dsl/examples/aggregate-read.synapsor.sql +21 -0
- package/fixtures/compatibility/published-1.6.3/sources/packages/dsl/examples/billing-late-fee.synapsor.sql +56 -0
- package/fixtures/compatibility/published-1.6.3/sources/packages/dsl/examples/bounded-set-multi-term.synapsor.sql +30 -0
- package/fixtures/compatibility/published-1.6.3/sources/packages/dsl/examples/principal-row-scope.synapsor.sql +23 -0
- package/fixtures/compatibility/published-1.6.3/sources/packages/spec/fixtures/conformance/aggregate-read/contract.json +119 -0
- package/fixtures/compatibility/published-1.6.3/sources/packages/spec/fixtures/conformance/approval-quorum/contract.json +44 -0
- package/fixtures/compatibility/published-1.6.3/sources/packages/spec/fixtures/conformance/bounded-set-threats/contract.json +115 -0
- package/fixtures/compatibility/published-1.6.3/sources/packages/spec/fixtures/conformance/principal-row-scope/contract.json +78 -0
- package/fixtures/compatibility/published-1.6.3/sources/packages/spec/fixtures/conformance/proposal-capability/contract.json +101 -0
- package/fixtures/compatibility/published-1.6.3/sources/packages/spec/fixtures/conformance/reversible-change-sets/contract.json +98 -0
- package/fixtures/compatibility/published-1.6.3/sources/packages/spec/fixtures/valid/basic-read.contract.json +60 -0
- package/llms.txt +10 -5
- package/package.json +8 -2
|
@@ -14,18 +14,16 @@ review artifacts without sampling source rows or using an LLM.
|
|
|
14
14
|
|
|
15
15
|
## Fast path
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
scope and run the public guided path:
|
|
17
|
+
Run the public guided path:
|
|
19
18
|
|
|
20
19
|
```bash
|
|
21
|
-
|
|
22
|
-
export SYNAPSOR_TENANT_ID="<staging-tenant>"
|
|
23
|
-
export SYNAPSOR_PRINCIPAL="<developer-id>"
|
|
24
|
-
npx -y @synapsor/runner@latest start --from-env DATABASE_URL
|
|
20
|
+
npx -y @synapsor/runner start
|
|
25
21
|
```
|
|
26
22
|
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
Paste a dedicated SELECT-only, non-owner URL into the hidden prompt, explicitly
|
|
24
|
+
approve a regular project `.env` file for this process, or export
|
|
25
|
+
`DATABASE_URL`. A fresh interactive project with no existing config, selector,
|
|
26
|
+
or automation input follows:
|
|
29
27
|
|
|
30
28
|
```text
|
|
31
29
|
inspect the whole selected schema and structured application artifacts
|
|
@@ -43,7 +41,9 @@ It does not print your database URL, put the URL in MCP client config, expose
|
|
|
43
41
|
`execute_sql`, expose approval/commit tools, or give the model write
|
|
44
42
|
credentials. Before boundary activation it does not read source rows.
|
|
45
43
|
|
|
46
|
-
`start
|
|
44
|
+
`start` is the shortest public command for first-run onboarding. When
|
|
45
|
+
`DATABASE_URL` is already exported, Runner uses it automatically. Explicit
|
|
46
|
+
`--from-env`, `--schema`, and `--project-root` values always win.
|
|
47
47
|
Read [Database To First Safe Tool](guided-onboarding.md) for the timed guided
|
|
48
48
|
journey and [Auto Boundary, Scoped Explore, And
|
|
49
49
|
Protect](auto-boundary-and-scoped-explore.md) for the complete security
|
|
@@ -104,7 +104,7 @@ before using staging or production-like data.
|
|
|
104
104
|
## 2. Inspect metadata
|
|
105
105
|
|
|
106
106
|
```bash
|
|
107
|
-
npx -y
|
|
107
|
+
npx -y @synapsor/runner inspect \
|
|
108
108
|
--engine auto \
|
|
109
109
|
--from-env DATABASE_URL \
|
|
110
110
|
--schema public
|
|
@@ -113,13 +113,13 @@ npx -y -p @synapsor/runner synapsor-runner inspect \
|
|
|
113
113
|
For a disposable staging URL, this also works:
|
|
114
114
|
|
|
115
115
|
```bash
|
|
116
|
-
npx -y
|
|
116
|
+
npx -y @synapsor/runner inspect "$DATABASE_URL" --engine auto --schema public
|
|
117
117
|
```
|
|
118
118
|
|
|
119
119
|
For automation:
|
|
120
120
|
|
|
121
121
|
```bash
|
|
122
|
-
npx -y
|
|
122
|
+
npx -y @synapsor/runner inspect \
|
|
123
123
|
--engine postgres \
|
|
124
124
|
--from-env DATABASE_URL \
|
|
125
125
|
--schema public \
|
|
@@ -136,9 +136,9 @@ to your staging table, primary key, tenant key, conflict column, visible fields,
|
|
|
136
136
|
allowed write fields, and business limits.
|
|
137
137
|
|
|
138
138
|
```bash
|
|
139
|
-
npx -y
|
|
140
|
-
npx -y
|
|
141
|
-
npx -y
|
|
139
|
+
npx -y @synapsor/runner recipes list
|
|
140
|
+
npx -y @synapsor/runner recipes show billing.late_fee_waiver
|
|
141
|
+
npx -y @synapsor/runner recipes init billing.late_fee_waiver --output synapsor.runner.json
|
|
142
142
|
```
|
|
143
143
|
|
|
144
144
|
Use a recipe when the shape is close. Use the guided wizard or explicit flags
|
|
@@ -153,7 +153,7 @@ only the capabilities in your generated `synapsor.runner.json`.
|
|
|
153
153
|
In an interactive terminal, run the guided wizard:
|
|
154
154
|
|
|
155
155
|
```bash
|
|
156
|
-
npx -y
|
|
156
|
+
npx -y @synapsor/runner init --from-env DATABASE_URL --mode read_only --wizard
|
|
157
157
|
```
|
|
158
158
|
|
|
159
159
|
The generated context and capabilities are based on your selections. Synapsor
|
|
@@ -298,7 +298,7 @@ If you already know the reviewed table/action, generate config directly from
|
|
|
298
298
|
metadata and explicit flags:
|
|
299
299
|
|
|
300
300
|
```bash
|
|
301
|
-
npx -y
|
|
301
|
+
npx -y @synapsor/runner init \
|
|
302
302
|
--from-env DATABASE_URL \
|
|
303
303
|
--engine postgres \
|
|
304
304
|
--schema public \
|
|
@@ -322,7 +322,7 @@ when you want exact capability names in the generated contract.
|
|
|
322
322
|
For app-owned writeback, replace the direct writer env with a handler executor:
|
|
323
323
|
|
|
324
324
|
```bash
|
|
325
|
-
npx -y
|
|
325
|
+
npx -y @synapsor/runner init \
|
|
326
326
|
--from-env DATABASE_URL \
|
|
327
327
|
--engine postgres \
|
|
328
328
|
--schema public \
|
|
@@ -351,7 +351,7 @@ source primary/unique dedup key; DELETE requires an exact conflict guard and
|
|
|
351
351
|
safe cascade/trigger inspection:
|
|
352
352
|
|
|
353
353
|
```bash
|
|
354
|
-
npx -y
|
|
354
|
+
npx -y @synapsor/runner onboard db \
|
|
355
355
|
--from-env DATABASE_URL \
|
|
356
356
|
--table account_credits \
|
|
357
357
|
--mode review \
|
|
@@ -370,7 +370,7 @@ but ambiguous post-commit crashes stop for operator reconciliation.
|
|
|
370
370
|
Or generate from a saved inspection snapshot without reconnecting:
|
|
371
371
|
|
|
372
372
|
```bash
|
|
373
|
-
npx -y
|
|
373
|
+
npx -y @synapsor/runner init \
|
|
374
374
|
--inspection-json schema-inspection.json \
|
|
375
375
|
--table invoices \
|
|
376
376
|
--namespace billing \
|
|
@@ -440,7 +440,7 @@ contain database URLs or passwords.
|
|
|
440
440
|
## 6. Generate runner files
|
|
441
441
|
|
|
442
442
|
```bash
|
|
443
|
-
npx -y
|
|
443
|
+
npx -y @synapsor/runner init \
|
|
444
444
|
--spec onboarding-selection.json \
|
|
445
445
|
--non-interactive
|
|
446
446
|
```
|
|
@@ -460,16 +460,16 @@ files.
|
|
|
460
460
|
Generate or refresh MCP client snippets later with:
|
|
461
461
|
|
|
462
462
|
```bash
|
|
463
|
-
npx -y
|
|
464
|
-
npx -y
|
|
465
|
-
npx -y
|
|
466
|
-
npx -y
|
|
463
|
+
npx -y @synapsor/runner mcp config generic --config ./synapsor.runner.json --store ./.synapsor/local.db
|
|
464
|
+
npx -y @synapsor/runner mcp config claude-desktop --config ./synapsor.runner.json --store ./.synapsor/local.db
|
|
465
|
+
npx -y @synapsor/runner mcp config cursor --config ./synapsor.runner.json --store ./.synapsor/local.db
|
|
466
|
+
npx -y @synapsor/runner tools preview --config ./synapsor.runner.json --store ./.synapsor/local.db
|
|
467
467
|
```
|
|
468
468
|
|
|
469
469
|
Call one generated tool locally before wiring an MCP client:
|
|
470
470
|
|
|
471
471
|
```bash
|
|
472
|
-
npx -y
|
|
472
|
+
npx -y @synapsor/runner smoke call --config ./synapsor.runner.json --store ./.synapsor/local.db
|
|
473
473
|
```
|
|
474
474
|
|
|
475
475
|
`smoke call` uses the same runtime as the MCP server. It records evidence and
|
|
@@ -489,8 +489,8 @@ URLs, passwords, approval tools, commit tools, or write credentials.
|
|
|
489
489
|
## 7. Validate the config
|
|
490
490
|
|
|
491
491
|
```bash
|
|
492
|
-
npx -y
|
|
493
|
-
npx -y
|
|
492
|
+
npx -y @synapsor/runner config validate --config synapsor.runner.json
|
|
493
|
+
npx -y @synapsor/runner config show --config synapsor.runner.json --redacted
|
|
494
494
|
```
|
|
495
495
|
|
|
496
496
|
The config stores environment-variable names, not connection-string values.
|
|
@@ -498,7 +498,7 @@ The config stores environment-variable names, not connection-string values.
|
|
|
498
498
|
Run doctor after setting the referenced environment variables:
|
|
499
499
|
|
|
500
500
|
```bash
|
|
501
|
-
npx -y
|
|
501
|
+
npx -y @synapsor/runner doctor --config synapsor.runner.json
|
|
502
502
|
```
|
|
503
503
|
|
|
504
504
|
Doctor validates config shape, trusted context env vars, source env vars,
|
|
@@ -506,7 +506,7 @@ read/write credential separation, table/column metadata when the read URL is
|
|
|
506
506
|
available, and the semantic MCP tool boundary. Use JSON for automation:
|
|
507
507
|
|
|
508
508
|
```bash
|
|
509
|
-
npx -y
|
|
509
|
+
npx -y @synapsor/runner doctor --config synapsor.runner.json --json
|
|
510
510
|
```
|
|
511
511
|
|
|
512
512
|
## 8. Serve semantic MCP tools
|
|
@@ -516,7 +516,7 @@ Use stdio when a local MCP client can launch Synapsor Runner:
|
|
|
516
516
|
```bash
|
|
517
517
|
export SYNAPSOR_TENANT_ID="acme"
|
|
518
518
|
export SYNAPSOR_PRINCIPAL="local_operator"
|
|
519
|
-
npx -y
|
|
519
|
+
npx -y @synapsor/runner mcp serve --config ./synapsor.runner.json --store ./.synapsor/local.db
|
|
520
520
|
```
|
|
521
521
|
|
|
522
522
|
Use Streamable HTTP when an app/server agent connects through a standard HTTP
|
|
@@ -527,7 +527,7 @@ export SYNAPSOR_TENANT_ID="acme"
|
|
|
527
527
|
export SYNAPSOR_PRINCIPAL="local_operator"
|
|
528
528
|
export SYNAPSOR_RUNNER_HTTP_TOKEN="$(node -e 'process.stdout.write(require("node:crypto").randomBytes(32).toString("base64url"))')"
|
|
529
529
|
|
|
530
|
-
npx -y
|
|
530
|
+
npx -y @synapsor/runner up --serve \
|
|
531
531
|
--config ./synapsor.runner.json \
|
|
532
532
|
--store ./.synapsor/local.db \
|
|
533
533
|
--auth-token-env SYNAPSOR_RUNNER_HTTP_TOKEN
|
|
@@ -541,7 +541,7 @@ serving.
|
|
|
541
541
|
The lower-level MCP command starts the same transport directly:
|
|
542
542
|
|
|
543
543
|
```bash
|
|
544
|
-
npx -y
|
|
544
|
+
npx -y @synapsor/runner mcp serve-streamable-http \
|
|
545
545
|
--config ./synapsor.runner.json \
|
|
546
546
|
--store ./.synapsor/local.db \
|
|
547
547
|
--auth-token-env SYNAPSOR_RUNNER_HTTP_TOKEN
|
|
@@ -572,10 +572,10 @@ tools, commit tools, database URLs, write credentials, or tenant authority.
|
|
|
572
572
|
Proposal tools leave the source database unchanged. Review locally:
|
|
573
573
|
|
|
574
574
|
```bash
|
|
575
|
-
npx -y
|
|
576
|
-
npx -y
|
|
577
|
-
npx -y
|
|
578
|
-
npx -y
|
|
575
|
+
npx -y @synapsor/runner proposals list --store ./.synapsor/local.db
|
|
576
|
+
npx -y @synapsor/runner proposals show wrp_123 --store ./.synapsor/local.db
|
|
577
|
+
npx -y @synapsor/runner proposals approve wrp_123 --store ./.synapsor/local.db --actor local_reviewer --yes
|
|
578
|
+
npx -y @synapsor/runner proposals writeback-job wrp_123 --store ./.synapsor/local.db --output job.json
|
|
579
579
|
```
|
|
580
580
|
|
|
581
581
|
Apply through the trusted worker path with a separate writer credential:
|
|
@@ -583,7 +583,7 @@ Apply through the trusted worker path with a separate writer credential:
|
|
|
583
583
|
```bash
|
|
584
584
|
export SYNAPSOR_DATABASE_WRITE_URL="<postgres-or-mysql-write-url>"
|
|
585
585
|
SYNAPSOR_ENGINE=postgres \
|
|
586
|
-
npx -y
|
|
586
|
+
npx -y @synapsor/runner apply --job job.json --config synapsor.runner.json --store ./.synapsor/local.db
|
|
587
587
|
```
|
|
588
588
|
|
|
589
589
|
For `apply --job ... --config ...`, Runner reads the write credential from the
|
|
@@ -597,7 +597,7 @@ from environment variables, and the handler receives a structured proposal/job
|
|
|
597
597
|
payload, not arbitrary model SQL:
|
|
598
598
|
|
|
599
599
|
```bash
|
|
600
|
-
npx -y
|
|
600
|
+
npx -y @synapsor/runner apply --proposal wrp_123 --config synapsor.runner.json --store ./.synapsor/local.db
|
|
601
601
|
```
|
|
602
602
|
|
|
603
603
|
See [Writeback Executors](writeback-executors.md).
|
|
@@ -605,8 +605,8 @@ See [Writeback Executors](writeback-executors.md).
|
|
|
605
605
|
Replay afterward:
|
|
606
606
|
|
|
607
607
|
```bash
|
|
608
|
-
npx -y
|
|
609
|
-
npx -y
|
|
608
|
+
npx -y @synapsor/runner replay show wrp_123 --store ./.synapsor/local.db
|
|
609
|
+
npx -y @synapsor/runner replay export wrp_123 --store ./.synapsor/local.db --output replay.json
|
|
610
610
|
```
|
|
611
611
|
|
|
612
612
|
## Boundary
|
|
@@ -24,23 +24,25 @@ Use a disposable or staging database and a dedicated SELECT-only, non-owner
|
|
|
24
24
|
credential. Keep row-level security, restricted views, or tenant-bound
|
|
25
25
|
credentials underneath Runner where available.
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
Do not put a database URL in project documentation or chat. The shortest path
|
|
28
|
+
uses a hidden terminal prompt:
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
|
-
|
|
32
|
-
export SYNAPSOR_TENANT_ID='<staging tenant>'
|
|
33
|
-
export SYNAPSOR_PRINCIPAL='<staging principal>'
|
|
31
|
+
npx -y @synapsor/runner start
|
|
34
32
|
```
|
|
35
33
|
|
|
36
|
-
Runner
|
|
34
|
+
Runner can also use an already-exported `DATABASE_URL`. When a regular `.env`
|
|
35
|
+
or `.env.local` file exists, it asks before reading that file and holds the
|
|
36
|
+
selected value only for the current Runner/Workbench process. The URL is not
|
|
37
|
+
written to generated artifacts or the ledger. Runner requires Node 22.13 or
|
|
38
|
+
newer.
|
|
37
39
|
|
|
38
40
|
## One Command To Workbench
|
|
39
41
|
|
|
40
42
|
Run this from an empty project directory or your application root:
|
|
41
43
|
|
|
42
44
|
```bash
|
|
43
|
-
npx -y @synapsor/runner
|
|
45
|
+
npx -y @synapsor/runner start
|
|
44
46
|
```
|
|
45
47
|
|
|
46
48
|
The command automatically:
|
|
@@ -55,15 +57,38 @@ The command automatically:
|
|
|
55
57
|
7. opens one secured loopback Workbench URL.
|
|
56
58
|
|
|
57
59
|
Before human activation, the agent has no generated authority and no source row
|
|
58
|
-
has been read.
|
|
60
|
+
has been read. On an explicitly asserted personal development database,
|
|
61
|
+
Workbench offers a fast lane:
|
|
62
|
+
|
|
63
|
+
1. confirm the database is your own development or disposable test data;
|
|
64
|
+
2. provide the trusted tenant/principal scope for this in-memory session;
|
|
65
|
+
3. inspect the one-resource summary and select **Activate this narrow read and
|
|
66
|
+
show a real result**.
|
|
67
|
+
|
|
68
|
+
The single gesture is recorded against the exact boundary digest. Runner
|
|
69
|
+
rechecks schema and read-only role posture, activates one resource with no
|
|
70
|
+
relationships, keeps sensitive and uncertain fields out, and runs one real
|
|
71
|
+
bounded aggregate read. Shared, staging, production-like, remote, widening, and
|
|
72
|
+
write paths do not use this shortcut.
|
|
59
73
|
|
|
60
74
|
Running the same command again resumes. Resume and Try do not rescan, rewrite
|
|
61
75
|
files, or change a digest. Rescan and destructive Start over remain explicit
|
|
62
76
|
human choices.
|
|
63
77
|
|
|
78
|
+
Workbench requires no additional terminal command. If you choose the CLI
|
|
79
|
+
fallbacks below after the first success, install Runner once:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
npm install -g @synapsor/runner
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
The remaining examples then use `synapsor-runner` directly instead of
|
|
86
|
+
reacquiring the npm package for every command.
|
|
87
|
+
|
|
64
88
|
## Five Minutes: First Safe Read
|
|
65
89
|
|
|
66
|
-
Workbench starts with an overview, not a permission matrix. It
|
|
90
|
+
The full Workbench path starts with an overview, not a permission matrix. It
|
|
91
|
+
shows:
|
|
67
92
|
|
|
68
93
|
- database and framework evidence found;
|
|
69
94
|
- resources inspected;
|
|
@@ -98,13 +123,40 @@ Source database changed: no
|
|
|
98
123
|
CLI fallback:
|
|
99
124
|
|
|
100
125
|
```bash
|
|
101
|
-
|
|
102
|
-
|
|
126
|
+
synapsor-runner try call --list --format json
|
|
127
|
+
synapsor-runner try call <returned-tool-name> --sample --json
|
|
103
128
|
```
|
|
104
129
|
|
|
105
130
|
The second command is for an activated named tool with valid generated sample
|
|
106
131
|
input. It does not invent tenant or principal values.
|
|
107
132
|
|
|
133
|
+
## Optional: Ask Through Your Own Model
|
|
134
|
+
|
|
135
|
+
The no-model Workbench composer is already complete; a provider key is never
|
|
136
|
+
required for onboarding. If you want a chat surface before installing Cursor
|
|
137
|
+
or another MCP client, open **Analyze -> Ask with your model**.
|
|
138
|
+
|
|
139
|
+
Workbench shows the exact reviewed tools first. Select OpenAI, Anthropic, or a
|
|
140
|
+
custom OpenAI-compatible endpoint, choose a named environment credential or a
|
|
141
|
+
session-only masked paste, and acknowledge that reviewed visible data may go
|
|
142
|
+
directly to that provider. Synapsor does not relay it.
|
|
143
|
+
|
|
144
|
+
The provider can request only the displayed tools. It cannot choose trusted
|
|
145
|
+
scope, activate or Protect authority, approve or apply a proposal, or configure
|
|
146
|
+
Runner. A write request produces the same inert proposal as external MCP:
|
|
147
|
+
|
|
148
|
+
```text
|
|
149
|
+
Proposal only
|
|
150
|
+
Source database changed: no
|
|
151
|
+
The model cannot approve or apply this proposal.
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Changing the provider, model, endpoint, runtime config, or reviewed boundary
|
|
155
|
+
requires a new egress acknowledgement. Select **Clear** to cancel and discard
|
|
156
|
+
the in-memory provider configuration and conversation. See [Workbench Ask With
|
|
157
|
+
Your Model](workbench-ask.md) for key handling, endpoint security, fixed bounds,
|
|
158
|
+
the tested provider matrix, and the full no-model alternative.
|
|
159
|
+
|
|
108
160
|
## Ten Minutes: Explore And Protect
|
|
109
161
|
|
|
110
162
|
Scoped Explore is available only after its exact local authoring boundary is
|
|
@@ -122,7 +174,14 @@ The first release supports bounded:
|
|
|
122
174
|
- reviewed categorical dimensions;
|
|
123
175
|
- day, week, and month buckets;
|
|
124
176
|
- typed filters and bounded top-N;
|
|
125
|
-
-
|
|
177
|
+
- up to three activated relationship paths, each containing one or two
|
|
178
|
+
catalog-proven many-to-one links with fan-out one.
|
|
179
|
+
|
|
180
|
+
If a question needs an inactive but proven path, Runner refuses it and
|
|
181
|
+
Workbench offers only that exact path for operator review. The model cannot
|
|
182
|
+
activate it. Optional links require an explicit missing-row choice because
|
|
183
|
+
excluding a row versus retaining an empty group can change business totals.
|
|
184
|
+
See [Reviewed Relationship Paths](reviewed-relationships.md).
|
|
126
185
|
|
|
127
186
|
Minimum cohorts, group limits, response limits, query limits, extraction
|
|
128
187
|
budgets, and anti-differencing budgets are fixed by the activated boundary.
|
|
@@ -132,7 +191,7 @@ not prove causation.
|
|
|
132
191
|
CLI fallback for the Workbench-suggested aggregate:
|
|
133
192
|
|
|
134
193
|
```bash
|
|
135
|
-
|
|
194
|
+
synapsor-runner try explore --suggested --json
|
|
136
195
|
```
|
|
137
196
|
|
|
138
197
|
Choose **Protect this analysis** directly on the successful result. Runner
|
|
@@ -148,10 +207,16 @@ synapsor/protected/drafts/<namespace>__<name>/contract-tests.json
|
|
|
148
207
|
The capability remains disabled until a human activates its exact digest.
|
|
149
208
|
Disabling Scoped Explore does not remove the protected named capability.
|
|
150
209
|
|
|
210
|
+
Workbench renders generated `.synapsor.sql` with local deterministic syntax
|
|
211
|
+
highlighting. Keywords, names chosen by the author, strings, numbers, comments,
|
|
212
|
+
and punctuation are visually distinct. The copy/plain-text value remains
|
|
213
|
+
byte-identical to the generated file; highlighting loads no CDN and escaped
|
|
214
|
+
source text never becomes HTML.
|
|
215
|
+
|
|
151
216
|
CLI fallback, without copying an opaque query handle:
|
|
152
217
|
|
|
153
218
|
```bash
|
|
154
|
-
|
|
219
|
+
synapsor-runner try protect \
|
|
155
220
|
--name analytics.reviewed_weekly_summary \
|
|
156
221
|
--json
|
|
157
222
|
```
|
|
@@ -189,15 +254,15 @@ The model cannot approve or apply this proposal.
|
|
|
189
254
|
Inspect the latest lifecycle without copying a proposal ID:
|
|
190
255
|
|
|
191
256
|
```bash
|
|
192
|
-
|
|
257
|
+
synapsor-runner lifecycle --details
|
|
193
258
|
```
|
|
194
259
|
|
|
195
260
|
Approval and apply stay outside MCP:
|
|
196
261
|
|
|
197
262
|
```bash
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
263
|
+
synapsor-runner proposals approve latest --yes
|
|
264
|
+
synapsor-runner apply latest
|
|
265
|
+
synapsor-runner lifecycle show latest --details
|
|
201
266
|
```
|
|
202
267
|
|
|
203
268
|
Production should use a verified signed-key or OIDC operator identity rather
|
|
@@ -218,7 +283,7 @@ Apply](supervised-automatic-apply.md).
|
|
|
218
283
|
Preview is always the default:
|
|
219
284
|
|
|
220
285
|
```bash
|
|
221
|
-
|
|
286
|
+
synapsor-runner writeback setup \
|
|
222
287
|
--profile staging \
|
|
223
288
|
--json
|
|
224
289
|
```
|
|
@@ -238,7 +303,7 @@ DDL apply is refused for missing, unknown, or production profiles. In
|
|
|
238
303
|
development/staging, it requires the exact displayed confirmation:
|
|
239
304
|
|
|
240
305
|
```bash
|
|
241
|
-
|
|
306
|
+
synapsor-runner writeback setup \
|
|
242
307
|
--profile staging \
|
|
243
308
|
--writer-role '<steady-state-writer-role>' \
|
|
244
309
|
--setup-url-env SYNAPSOR_SETUP_DATABASE_URL \
|
|
@@ -257,13 +322,13 @@ needs no HTTP bearer credential.
|
|
|
257
322
|
Render the generic snippet:
|
|
258
323
|
|
|
259
324
|
```bash
|
|
260
|
-
|
|
325
|
+
synapsor-runner mcp config --absolute-paths
|
|
261
326
|
```
|
|
262
327
|
|
|
263
328
|
Preview a project-scoped Cursor change:
|
|
264
329
|
|
|
265
330
|
```bash
|
|
266
|
-
|
|
331
|
+
synapsor-runner mcp install cursor --project --dry-run
|
|
267
332
|
```
|
|
268
333
|
|
|
269
334
|
No client config contains database URLs, trusted scope values, approval,
|
|
@@ -275,7 +340,7 @@ Commands that support machine output write exactly one JSON value to stdout.
|
|
|
275
340
|
Operational logs and diagnostics use stderr:
|
|
276
341
|
|
|
277
342
|
```bash
|
|
278
|
-
|
|
343
|
+
synapsor-runner try explore --suggested --json | jq -e .
|
|
279
344
|
```
|
|
280
345
|
|
|
281
346
|
On a process-level failure, JSON output uses:
|
|
@@ -315,17 +380,20 @@ The guided path through the first proposal uses:
|
|
|
315
380
|
- no Cursor requirement.
|
|
316
381
|
|
|
317
382
|
The packed FitFlow gate records the exact command count, human decisions, and
|
|
318
|
-
timings in `development/runner-1.6.
|
|
383
|
+
timings in `development/runner-1.6.4-fitflow-results.json`.
|
|
319
384
|
|
|
320
385
|
## Visual Reference
|
|
321
386
|
|
|
322
387
|
Repository screenshots cover desktop, mobile, light, dark, loading, blocked,
|
|
323
|
-
stale, failure, empty Protect,
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
- [
|
|
327
|
-
- [
|
|
328
|
-
- [
|
|
388
|
+
stale, failure, empty Protect, unavailable-action, optional Ask, refusal, and
|
|
389
|
+
proposal-only states:
|
|
390
|
+
|
|
391
|
+
- [Desktop overview](https://github.com/Synapsor/Synapsor-Runner/blob/main/development/runner-1.6.4-visual/workbench-overview-desktop-light.png)
|
|
392
|
+
- [Mobile overview](https://github.com/Synapsor/Synapsor-Runner/blob/main/development/runner-1.6.4-visual/workbench-overview-mobile-light.png)
|
|
393
|
+
- [Blocked identity review](https://github.com/Synapsor/Synapsor-Runner/blob/main/development/runner-1.6.4-visual/workbench-blocked-identity.png)
|
|
394
|
+
- [Stale/failure recovery](https://github.com/Synapsor/Synapsor-Runner/blob/main/development/runner-1.6.4-visual/workbench-keyboard-stale-failure.png)
|
|
395
|
+
- [Ask kept-out-field refusal](https://github.com/Synapsor/Synapsor-Runner/blob/main/development/runner-1.6.4-retail-visual/05c-ask-refusal.png)
|
|
396
|
+
- [Ask proposal-only result](https://github.com/Synapsor/Synapsor-Runner/blob/main/development/runner-1.6.4-community-solar-visual/13b-ask-proposal-only.png)
|
|
329
397
|
|
|
330
398
|
For common blocked states and one-action recovery commands, use
|
|
331
399
|
[Troubleshooting First Run](troubleshooting-first-run.md).
|
package/docs/limitations.md
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# Limitations
|
|
2
2
|
|
|
3
|
-
Synapsor Runner is intentionally narrow.
|
|
4
|
-
whole-application boundary drafting
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
Synapsor Runner is intentionally narrow. It combines deterministic
|
|
4
|
+
whole-application boundary drafting, local authoring-only Explore -> Protect,
|
|
5
|
+
guarded writes, opt-in proposal/evidence freshness, verified operator identity,
|
|
6
|
+
default-off supervised execution, and quiet human-attention delivery. Reviewed
|
|
7
|
+
aggregate paths are limited to proven star/depth-two many-to-one relationships,
|
|
8
|
+
not a general join planner. Optional local Workbench Ask is a client of the
|
|
9
|
+
existing reviewed tools; the complete no-model path remains the default.
|
|
10
|
+
Runner does not become a generic database query tool, Synapsor Cloud, or an
|
|
11
|
+
enterprise SLA.
|
|
12
12
|
|
|
13
13
|
## Supported
|
|
14
14
|
|
|
@@ -63,10 +63,20 @@ existing manual behavior.
|
|
|
63
63
|
existing Synapsor definitions. Generated authority starts disabled.
|
|
64
64
|
- Local development/staging Scoped Explore through exactly
|
|
65
65
|
`app.describe_data` and `app.explore_data`, with no SQL-string argument.
|
|
66
|
+
- Optional development/staging loopback Workbench Ask through OpenAI,
|
|
67
|
+
Anthropic, or a configured OpenAI-compatible endpoint. Provider calls use the
|
|
68
|
+
exact active MCP/runtime surface, explicit direct-egress consent, in-memory
|
|
69
|
+
credential/history state, fixed tool/time/size/token bounds, and
|
|
70
|
+
proposal-only write behavior.
|
|
66
71
|
- Reviewed PM-style aggregate Explore with `count`, `count_distinct`, `sum`,
|
|
67
72
|
`avg`, categorical dimensions, fixed time buckets, typed filters, bounded
|
|
68
|
-
top-N,
|
|
69
|
-
and durable
|
|
73
|
+
top-N, up to three reviewed relationship paths of at most two proven
|
|
74
|
+
many-to-one links each, cohort suppression, and durable
|
|
75
|
+
extraction/differencing budgets.
|
|
76
|
+
- Demand-driven operator review for an exact catalog-proven relationship,
|
|
77
|
+
including an explicit missing-row choice for nullable links. The model cannot
|
|
78
|
+
activate a relationship, and every participating relation receives trusted
|
|
79
|
+
tenant/principal scope.
|
|
70
80
|
- Protect This Query to public DSL, canonical JSON, tests, and a disabled named
|
|
71
81
|
capability that survives Explore shutdown after exact-digest activation.
|
|
72
82
|
- Generation-lock drift detection for generated authority. Manually authored
|
|
@@ -123,14 +133,18 @@ truth for the model-facing tools.
|
|
|
123
133
|
- Unbounded/high-throughput or multi-region ledger scale.
|
|
124
134
|
- Managed fleet, SLA, compliance certification, or production support guarantee.
|
|
125
135
|
- Production, shared HTTP, remote, or non-loopback Scoped Explore.
|
|
136
|
+
- Production, shared HTTP, remote, or non-loopback Workbench Ask; model-facing
|
|
137
|
+
provider configuration; Synapsor-relayed provider traffic; durable chat
|
|
138
|
+
history; automatic provider retries; exact monetary spend enforcement; or
|
|
139
|
+
universal compatibility with OpenAI-compatible servers.
|
|
126
140
|
- Automatic supervised execution for hard DELETE, reversible changes, bounded
|
|
127
141
|
sets, app-owned/external effects, or writes without deterministic conflict,
|
|
128
142
|
deduplication, freshness, and receipt authority.
|
|
129
143
|
- Arbitrary aggregate expressions, dynamic identifiers, unrestricted joins,
|
|
130
144
|
many-to-many joins, formulas, window functions, subqueries, `HAVING`,
|
|
131
|
-
user-defined functions, or a statistical privacy guarantee.
|
|
132
|
-
|
|
133
|
-
|
|
145
|
+
user-defined functions, or a statistical privacy guarantee. Runner supports
|
|
146
|
+
only the explicitly reviewed authoring cube described above and fixed
|
|
147
|
+
protected named capabilities produced from it.
|
|
134
148
|
- Automatic policy widening or activation from graduated-trust metrics.
|
|
135
149
|
- Immutable/WORM compliance storage from the local report exporter.
|
|
136
150
|
|
|
@@ -165,6 +179,12 @@ jobs. Mixed-minor v3/v4 rolling compensation is not claimed.
|
|
|
165
179
|
See [Running A Small Runner
|
|
166
180
|
Fleet](running-a-runner-fleet.md).
|
|
167
181
|
|
|
182
|
+
Workbench Ask token accounting uses provider-reported usage. A provider that
|
|
183
|
+
omits or misreports usage cannot provide exact token or monetary enforcement.
|
|
184
|
+
Runner still enforces request/response, tool-result, iteration, history, and
|
|
185
|
+
wall-clock bounds. A provider outage does not disable the no-model composer or
|
|
186
|
+
external MCP path. See [Workbench Ask With Your Model](workbench-ask.md).
|
|
187
|
+
|
|
168
188
|
Use this wording:
|
|
169
189
|
|
|
170
190
|
```text
|