@synapsor/runner 1.6.3 → 1.6.5
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 +94 -8
- package/CONTRIBUTING.md +10 -3
- package/README.md +90 -109
- 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 +7688 -2227
- package/dist/runtime.mjs +528 -51
- package/docs/README.md +14 -0
- package/docs/agent-guided-setup.md +13 -11
- package/docs/aggregate-reads.md +14 -5
- package/docs/app-owned-executors.md +5 -6
- package/docs/auto-boundary-and-scoped-explore.md +70 -14
- package/docs/capability-authoring.md +2 -2
- package/docs/client-recipes.md +41 -12
- 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 +52 -50
- package/docs/guided-onboarding.md +104 -34
- package/docs/host-compatibility.md +24 -11
- 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 +26 -14
- package/docs/mcp-clients.md +47 -11
- 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 +100 -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 +63 -19
- 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 +9 -2
package/dist/authoring.mjs
CHANGED
|
@@ -63,6 +63,7 @@ var PROTECTED_READ_KEYS = /* @__PURE__ */ new Set([
|
|
|
63
63
|
"generation_lock_fingerprint",
|
|
64
64
|
"predicates",
|
|
65
65
|
"relationship",
|
|
66
|
+
"relationships",
|
|
66
67
|
"row_order_by",
|
|
67
68
|
"aggregate",
|
|
68
69
|
"limits"
|
|
@@ -81,6 +82,19 @@ var PROTECTED_RELATIONSHIP_KEYS = /* @__PURE__ */ new Set([
|
|
|
81
82
|
"cardinality",
|
|
82
83
|
"max_fan_out"
|
|
83
84
|
]);
|
|
85
|
+
var PROTECTED_RELATIONSHIP_PATH_KEYS = /* @__PURE__ */ new Set(["name", "links"]);
|
|
86
|
+
var PROTECTED_RELATIONSHIP_LINK_KEYS = /* @__PURE__ */ new Set([
|
|
87
|
+
"schema",
|
|
88
|
+
"table",
|
|
89
|
+
"primary_key",
|
|
90
|
+
"tenant_key",
|
|
91
|
+
"principal_scope_key",
|
|
92
|
+
"local_key",
|
|
93
|
+
"target_key",
|
|
94
|
+
"cardinality",
|
|
95
|
+
"max_fan_out",
|
|
96
|
+
"unmatched_rows"
|
|
97
|
+
]);
|
|
84
98
|
var PROTECTED_ROW_ORDER_KEYS = /* @__PURE__ */ new Set(["field", "direction"]);
|
|
85
99
|
var PROTECTED_AGGREGATE_KEYS = /* @__PURE__ */ new Set([
|
|
86
100
|
"counted_entity",
|
|
@@ -545,7 +559,18 @@ function validateProtectedRead(capability, path, errors) {
|
|
|
545
559
|
const keptOut = new Set(Array.isArray(capability.kept_out_fields) ? capability.kept_out_fields.filter((field) => typeof field === "string") : []);
|
|
546
560
|
const subject = isRecord(capability.subject) ? capability.subject : {};
|
|
547
561
|
const trustedScopeFields = new Set([subject.tenant_key, subject.principal_scope_key].filter((field) => isSafeIdentifier(field)));
|
|
548
|
-
const
|
|
562
|
+
const relationshipNames = /* @__PURE__ */ new Set();
|
|
563
|
+
const legacyRelationshipName = validateProtectedRelationship(protectedRead.relationship, keptOut, trustedScopeFields, `${path}.protected_read.relationship`, errors);
|
|
564
|
+
if (legacyRelationshipName)
|
|
565
|
+
relationshipNames.add(legacyRelationshipName);
|
|
566
|
+
if (protectedRead.relationship !== void 0 && protectedRead.relationships !== void 0) {
|
|
567
|
+
errors.push({
|
|
568
|
+
path: `${path}.protected_read`,
|
|
569
|
+
code: "PROTECTED_RELATIONSHIP_FORMS_CONFLICT",
|
|
570
|
+
message: "protected_read must use either legacy relationship or reviewed relationships, not both."
|
|
571
|
+
});
|
|
572
|
+
}
|
|
573
|
+
validateProtectedRelationshipPaths(protectedRead.relationships, keptOut, trustedScopeFields, `${path}.protected_read.relationships`, relationshipNames, errors);
|
|
549
574
|
if (!isRecord(capability.evidence) || capability.evidence.required !== true || capability.evidence.query_audit !== true) {
|
|
550
575
|
errors.push({
|
|
551
576
|
path: `${path}.evidence`,
|
|
@@ -564,7 +589,7 @@ function validateProtectedRead(capability, path, errors) {
|
|
|
564
589
|
return;
|
|
565
590
|
}
|
|
566
591
|
checkUnknownKeys(predicate, PROTECTED_PREDICATE_KEYS, predicatePath, errors);
|
|
567
|
-
validateProtectedFieldReference(predicate.field, predicate.relationship,
|
|
592
|
+
validateProtectedFieldReference(predicate.field, predicate.relationship, relationshipNames, keptOut, trustedScopeFields, predicatePath, errors);
|
|
568
593
|
if (!["eq", "neq", "lt", "lte", "gt", "gte", "in"].includes(String(predicate.operator))) {
|
|
569
594
|
errors.push({ path: `${predicatePath}.operator`, code: "INVALID_PROTECTED_PREDICATE_OPERATOR", message: "protected predicate operator must be eq, neq, lt, lte, gt, gte, or in." });
|
|
570
595
|
}
|
|
@@ -624,7 +649,7 @@ function validateProtectedRead(capability, path, errors) {
|
|
|
624
649
|
validateProtectedAggregate(protectedRead.aggregate, {
|
|
625
650
|
args,
|
|
626
651
|
referencedArgs,
|
|
627
|
-
|
|
652
|
+
relationshipNames,
|
|
628
653
|
keptOut,
|
|
629
654
|
trustedScopeFields,
|
|
630
655
|
maxGroups: isRecord(protectedRead.limits) ? protectedRead.limits.max_groups : void 0,
|
|
@@ -667,6 +692,65 @@ function validateProtectedRelationship(value, keptOut, trustedScopeFields, path,
|
|
|
667
692
|
}
|
|
668
693
|
return isSafeIdentifier(value.name) ? value.name : void 0;
|
|
669
694
|
}
|
|
695
|
+
function validateProtectedRelationshipPaths(value, keptOut, trustedScopeFields, path, relationshipNames, errors) {
|
|
696
|
+
if (value === void 0)
|
|
697
|
+
return;
|
|
698
|
+
if (!Array.isArray(value) || value.length < 1 || value.length > 3) {
|
|
699
|
+
errors.push({
|
|
700
|
+
path,
|
|
701
|
+
code: "INVALID_PROTECTED_RELATIONSHIP_PATHS",
|
|
702
|
+
message: "protected relationships must contain 1 through 3 reviewed paths."
|
|
703
|
+
});
|
|
704
|
+
return;
|
|
705
|
+
}
|
|
706
|
+
value.forEach((candidate, pathIndex) => {
|
|
707
|
+
const candidatePath = `${path}[${pathIndex}]`;
|
|
708
|
+
if (!isRecord(candidate)) {
|
|
709
|
+
errors.push({ path: candidatePath, code: "PROTECTED_RELATIONSHIP_PATH_NOT_OBJECT", message: "protected relationship path must be an object." });
|
|
710
|
+
return;
|
|
711
|
+
}
|
|
712
|
+
checkUnknownKeys(candidate, PROTECTED_RELATIONSHIP_PATH_KEYS, candidatePath, errors);
|
|
713
|
+
if (!isSafeIdentifier(candidate.name)) {
|
|
714
|
+
errors.push({ path: `${candidatePath}.name`, code: "INVALID_PROTECTED_RELATIONSHIP_IDENTIFIER", message: "relationship path name must be a fixed safe identifier." });
|
|
715
|
+
} else if (relationshipNames.has(candidate.name)) {
|
|
716
|
+
errors.push({ path: `${candidatePath}.name`, code: "DUPLICATE_PROTECTED_RELATIONSHIP", message: "protected relationship names must be unique." });
|
|
717
|
+
} else {
|
|
718
|
+
relationshipNames.add(candidate.name);
|
|
719
|
+
}
|
|
720
|
+
if (!Array.isArray(candidate.links) || candidate.links.length < 1 || candidate.links.length > 2) {
|
|
721
|
+
errors.push({ path: `${candidatePath}.links`, code: "INVALID_PROTECTED_RELATIONSHIP_LINKS", message: "a protected relationship path requires one or two reviewed many-to-one links." });
|
|
722
|
+
return;
|
|
723
|
+
}
|
|
724
|
+
candidate.links.forEach((link, linkIndex) => {
|
|
725
|
+
const linkPath = `${candidatePath}.links[${linkIndex}]`;
|
|
726
|
+
if (!isRecord(link)) {
|
|
727
|
+
errors.push({ path: linkPath, code: "PROTECTED_RELATIONSHIP_LINK_NOT_OBJECT", message: "protected relationship link must be an object." });
|
|
728
|
+
return;
|
|
729
|
+
}
|
|
730
|
+
checkUnknownKeys(link, PROTECTED_RELATIONSHIP_LINK_KEYS, linkPath, errors);
|
|
731
|
+
for (const key of ["schema", "table", "primary_key", "tenant_key", "local_key", "target_key"]) {
|
|
732
|
+
if (!isSafeIdentifier(link[key]))
|
|
733
|
+
errors.push({ path: `${linkPath}.${key}`, code: "INVALID_PROTECTED_RELATIONSHIP_IDENTIFIER", message: `${key} must be a fixed safe identifier.` });
|
|
734
|
+
}
|
|
735
|
+
if (link.principal_scope_key !== void 0 && !isSafeIdentifier(link.principal_scope_key)) {
|
|
736
|
+
errors.push({ path: `${linkPath}.principal_scope_key`, code: "INVALID_PROTECTED_RELATIONSHIP_IDENTIFIER", message: "principal_scope_key must be a fixed safe identifier." });
|
|
737
|
+
}
|
|
738
|
+
if (link.cardinality !== "many_to_one" || link.max_fan_out !== 1) {
|
|
739
|
+
errors.push({ path: linkPath, code: "PROTECTED_RELATIONSHIP_CARDINALITY_FORBIDDEN", message: "every protected relationship link must be reviewed many-to-one with max_fan_out 1." });
|
|
740
|
+
}
|
|
741
|
+
if (link.unmatched_rows !== "exclude" && link.unmatched_rows !== "keep_null") {
|
|
742
|
+
errors.push({ path: `${linkPath}.unmatched_rows`, code: "PROTECTED_RELATIONSHIP_NULL_SEMANTICS_REQUIRED", message: "every protected relationship link must freeze exclude or keep_null unmatched-row semantics." });
|
|
743
|
+
}
|
|
744
|
+
if (linkIndex === 0 && isSafeIdentifier(link.local_key) && (keptOut.has(link.local_key) || trustedScopeFields.has(link.local_key))) {
|
|
745
|
+
errors.push({
|
|
746
|
+
path: `${linkPath}.local_key`,
|
|
747
|
+
code: "PROTECTED_RELATIONSHIP_LOCAL_KEY_FORBIDDEN",
|
|
748
|
+
message: "the reviewed relationship cannot join through a kept-out or trusted-scope subject field."
|
|
749
|
+
});
|
|
750
|
+
}
|
|
751
|
+
});
|
|
752
|
+
});
|
|
753
|
+
}
|
|
670
754
|
function validateProtectedAggregate(value, input) {
|
|
671
755
|
const { path, errors } = input;
|
|
672
756
|
if (!isRecord(value)) {
|
|
@@ -690,14 +774,14 @@ function validateProtectedAggregate(value, input) {
|
|
|
690
774
|
validateUniqueIdentifier(measure.name, measureNames, `${measurePath}.name`, "DUPLICATE_PROTECTED_MEASURE_NAME", errors);
|
|
691
775
|
if (!["count", "count_distinct", "sum", "avg"].includes(String(measure.function)))
|
|
692
776
|
errors.push({ path: `${measurePath}.function`, code: "INVALID_PROTECTED_MEASURE_FUNCTION", message: "measure function must be count, count_distinct, sum, or avg." });
|
|
693
|
-
validateProtectedRelationshipReference(measure.relationship, input.
|
|
777
|
+
validateProtectedRelationshipReference(measure.relationship, input.relationshipNames, `${measurePath}.relationship`, errors);
|
|
694
778
|
if (measure.function === "count") {
|
|
695
779
|
if (measure.field !== void 0)
|
|
696
780
|
errors.push({ path: `${measurePath}.field`, code: "PROTECTED_COUNT_FIELD_FORBIDDEN", message: "count measures count scoped subject rows and must not declare a field." });
|
|
697
781
|
if (measure.relationship !== void 0)
|
|
698
782
|
errors.push({ path: `${measurePath}.relationship`, code: "PROTECTED_COUNT_RELATIONSHIP_FORBIDDEN", message: "count measures count the scoped subject entity, not a joined relation." });
|
|
699
783
|
} else {
|
|
700
|
-
validateProtectedFieldReference(measure.field, measure.relationship, input.
|
|
784
|
+
validateProtectedFieldReference(measure.field, measure.relationship, input.relationshipNames, input.keptOut, input.trustedScopeFields, measurePath, errors);
|
|
701
785
|
}
|
|
702
786
|
});
|
|
703
787
|
}
|
|
@@ -714,7 +798,7 @@ function validateProtectedAggregate(value, input) {
|
|
|
714
798
|
}
|
|
715
799
|
checkUnknownKeys(dimension, PROTECTED_DIMENSION_KEYS, dimensionPath, errors);
|
|
716
800
|
validateUniqueIdentifier(dimension.name, dimensionNames, `${dimensionPath}.name`, "DUPLICATE_PROTECTED_DIMENSION_NAME", errors);
|
|
717
|
-
validateProtectedFieldReference(dimension.field, dimension.relationship, input.
|
|
801
|
+
validateProtectedFieldReference(dimension.field, dimension.relationship, input.relationshipNames, input.keptOut, input.trustedScopeFields, dimensionPath, errors);
|
|
718
802
|
});
|
|
719
803
|
}
|
|
720
804
|
}
|
|
@@ -728,7 +812,7 @@ function validateProtectedAggregate(value, input) {
|
|
|
728
812
|
errors.push({ path: `${bucketPath}.name`, code: "INVALID_PROTECTED_TIME_BUCKET_NAME", message: "time bucket name must be a safe identifier." });
|
|
729
813
|
if (value.time_bucket.bucket !== "day" && value.time_bucket.bucket !== "week" && value.time_bucket.bucket !== "month")
|
|
730
814
|
errors.push({ path: `${bucketPath}.bucket`, code: "INVALID_PROTECTED_TIME_BUCKET", message: "time bucket must be day, week, or month." });
|
|
731
|
-
validateProtectedFieldReference(value.time_bucket.field, value.time_bucket.relationship, input.
|
|
815
|
+
validateProtectedFieldReference(value.time_bucket.field, value.time_bucket.relationship, input.relationshipNames, input.keptOut, input.trustedScopeFields, bucketPath, errors);
|
|
732
816
|
}
|
|
733
817
|
}
|
|
734
818
|
if (value.comparison !== void 0) {
|
|
@@ -737,7 +821,7 @@ function validateProtectedAggregate(value, input) {
|
|
|
737
821
|
errors.push({ path: comparisonPath, code: "PROTECTED_COMPARISON_NOT_OBJECT", message: "comparison must be an object." });
|
|
738
822
|
} else {
|
|
739
823
|
checkUnknownKeys(value.comparison, PROTECTED_COMPARISON_KEYS, comparisonPath, errors);
|
|
740
|
-
validateProtectedFieldReference(value.comparison.field, value.comparison.relationship, input.
|
|
824
|
+
validateProtectedFieldReference(value.comparison.field, value.comparison.relationship, input.relationshipNames, input.keptOut, input.trustedScopeFields, comparisonPath, errors);
|
|
741
825
|
if (!Array.isArray(value.comparison.ranges) || value.comparison.ranges.length < 1 || value.comparison.ranges.length > 2) {
|
|
742
826
|
errors.push({ path: `${comparisonPath}.ranges`, code: "INVALID_PROTECTED_COMPARISON_RANGES", message: "comparison requires one or two bounded time ranges." });
|
|
743
827
|
} else {
|
|
@@ -828,19 +912,20 @@ function validateProtectedValue(value, args, referencedArgs, path, errors) {
|
|
|
828
912
|
}
|
|
829
913
|
}
|
|
830
914
|
}
|
|
831
|
-
function validateProtectedFieldReference(field, relationship,
|
|
915
|
+
function validateProtectedFieldReference(field, relationship, relationshipNames, keptOut, trustedScopeFields, path, errors) {
|
|
832
916
|
if (!isSafeIdentifier(field)) {
|
|
833
917
|
errors.push({ path: `${path}.field`, code: "INVALID_PROTECTED_FIELD", message: "protected field must be a fixed safe identifier." });
|
|
834
918
|
} else if (relationship === void 0 && (keptOut.has(field) || trustedScopeFields.has(field))) {
|
|
835
919
|
errors.push({ path: `${path}.field`, code: "PROTECTED_FIELD_FORBIDDEN", message: "kept-out and trusted-scope fields cannot be selected, filtered, grouped, sorted, joined, aggregated, or counted distinctly." });
|
|
836
920
|
}
|
|
837
|
-
validateProtectedRelationshipReference(relationship,
|
|
921
|
+
validateProtectedRelationshipReference(relationship, relationshipNames, `${path}.relationship`, errors);
|
|
838
922
|
}
|
|
839
|
-
function validateProtectedRelationshipReference(value,
|
|
923
|
+
function validateProtectedRelationshipReference(value, relationshipNames, path, errors) {
|
|
840
924
|
if (value === void 0)
|
|
841
925
|
return;
|
|
842
|
-
if (!isSafeIdentifier(value) || value
|
|
843
|
-
errors.push({ path, code: "UNKNOWN_PROTECTED_RELATIONSHIP", message: "relationship must reference the capability's
|
|
926
|
+
if (!isSafeIdentifier(value) || !relationshipNames.has(value)) {
|
|
927
|
+
errors.push({ path, code: "UNKNOWN_PROTECTED_RELATIONSHIP", message: "relationship must reference one of the capability's reviewed many-to-one paths." });
|
|
928
|
+
}
|
|
844
929
|
}
|
|
845
930
|
function validateUniqueIdentifier(value, seen, path, code, errors) {
|
|
846
931
|
if (!isSafeIdentifier(value)) {
|
package/dist/cli.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { type DbRowReader, type RuntimeCapabilityConfig, type RuntimeConfig, type RuntimeSupervisedWorkerCapabilityPolicy } from "@synapsor-runner/mcp-server";
|
|
3
3
|
import { ProposalStore, type PolicyApprovalLimit, type StoredProposal, type StoredWritebackIntent } from "@synapsor-runner/proposal-store";
|
|
4
4
|
import { type ExecutionReceiptV2, type ExecutionReceiptV3, type ExecutionReceiptV4, type WritebackJob } from "@synapsor-runner/protocol";
|
|
5
|
-
import { type SchemaInspection } from "@synapsor-runner/schema-inspector";
|
|
5
|
+
import { inspectDatabase, type SchemaInspection } from "@synapsor-runner/schema-inspector";
|
|
6
6
|
import { type ReconciliationObservation } from "@synapsor-runner/worker-core";
|
|
7
7
|
import { type WorkbenchDeploymentProfile } from "./local-ui.js";
|
|
8
8
|
export declare function main(argv: string[]): Promise<number>;
|
|
@@ -18,6 +18,8 @@ export declare function resolveSqlWriteDatabaseUrl(job: WritebackJob, configPath
|
|
|
18
18
|
export declare function verifyLocalWritebackAuthority(job: WritebackJob, configPath: string, storePath?: string, options?: {
|
|
19
19
|
cloudApproved?: boolean;
|
|
20
20
|
}): Promise<void>;
|
|
21
|
+
export declare function boundaryReviewCommand(args: string[]): Promise<number>;
|
|
22
|
+
export declare function boundaryActivateCommand(args: string[], schemaInspector?: typeof inspectDatabase): Promise<number>;
|
|
21
23
|
export declare function reconciliationSupportedOutcome(observation: ReconciliationObservation): "applied" | "conflict" | "failed";
|
|
22
24
|
export declare function reconciliationReceipt(intent: StoredWritebackIntent, observation: ReconciliationObservation, outcome: "applied" | "conflict" | "failed", runnerId: string, reason: string): ExecutionReceiptV2 | ExecutionReceiptV3 | ExecutionReceiptV4;
|
|
23
25
|
export declare function assertSupervisedPolicyApprovalCurrent(store: ProposalStore, config: RuntimeConfig, capability: RuntimeCapabilityConfig, proposal: StoredProposal): {
|
|
@@ -35,6 +37,15 @@ export type SupervisedWriterPostureAssessment = {
|
|
|
35
37
|
export declare function assessSupervisedWriterPosture(config: RuntimeConfig, policy: RuntimeSupervisedWorkerCapabilityPolicy, inspection: SchemaInspection): SupervisedWriterPostureAssessment;
|
|
36
38
|
export declare function updateSupervisedProposalExpiryAttention(store: ProposalStore, config: RuntimeConfig, now?: string): void;
|
|
37
39
|
export declare function workbenchDeploymentProfileArg(args: string[]): WorkbenchDeploymentProfile | undefined;
|
|
40
|
+
export declare function databaseInputFromArgs(args: string[], options?: {
|
|
41
|
+
implyDatabaseUrl?: boolean;
|
|
42
|
+
}): {
|
|
43
|
+
explicit: boolean;
|
|
44
|
+
inlineUrl: boolean;
|
|
45
|
+
inspectionDatabaseUrlEnv: string;
|
|
46
|
+
configDatabaseUrlEnv: string;
|
|
47
|
+
env?: NodeJS.ProcessEnv;
|
|
48
|
+
};
|
|
38
49
|
export declare function runCliProcess(argv: string[]): Promise<number>;
|
|
39
50
|
export {};
|
|
40
51
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAaA,OAAO,EAAkgB,KAAK,WAAW,EAAuD,KAAK,uBAAuB,EAAE,KAAK,aAAa,EAAE,KAAK,uCAAuC,EAAoF,MAAM,6BAA6B,CAAC;AAItyB,OAAO,EAEL,aAAa,EAab,KAAK,mBAAmB,EAcxB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAO3B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAiL,KAAK,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,KAAK,kBAAkB,EAAqG,KAAK,YAAY,EAAwB,MAAM,2BAA2B,CAAC;AAEjb,OAAO,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/local-ui.d.ts
CHANGED
|
@@ -2,7 +2,43 @@ import { type Server } from "node:http";
|
|
|
2
2
|
import { type ProposalFreshnessEvaluation } from "@synapsor-runner/mcp-server";
|
|
3
3
|
import { ProposalStore, type StoredProposal, type WorkerControlAction } from "@synapsor-runner/proposal-store";
|
|
4
4
|
import { inspectDatabase } from "@synapsor-runner/schema-inspector";
|
|
5
|
+
import { type ExplorationBoundaryDraft } from "./auto-boundary.js";
|
|
6
|
+
import { createScopedExploreRuntime } from "./scoped-explore.js";
|
|
7
|
+
import { type AskProviderDependencies, type AskToolGateway } from "./model-ask.js";
|
|
5
8
|
type JsonRecord = Record<string, unknown>;
|
|
9
|
+
declare const BOUNDARY_REVIEW_PROGRESS_VERSION = "synapsor.boundary-review-progress.v2";
|
|
10
|
+
export type BoundaryReviewProgress = {
|
|
11
|
+
schema_version: typeof BOUNDARY_REVIEW_PROGRESS_VERSION;
|
|
12
|
+
revision: number;
|
|
13
|
+
draft_digest: `sha256:${string}`;
|
|
14
|
+
candidate: ExplorationBoundaryDraft;
|
|
15
|
+
candidate_digest: `sha256:${string}`;
|
|
16
|
+
confirmed_decisions: string[];
|
|
17
|
+
confirmations: BoundaryReviewConfirmation[];
|
|
18
|
+
invalidated_decisions: BoundaryReviewInvalidation[];
|
|
19
|
+
updated_at: string;
|
|
20
|
+
};
|
|
21
|
+
export type BoundaryReviewDecision = {
|
|
22
|
+
id: string;
|
|
23
|
+
kind: string;
|
|
24
|
+
decision: string;
|
|
25
|
+
input_digest: `sha256:${string}`;
|
|
26
|
+
resource_id?: string;
|
|
27
|
+
};
|
|
28
|
+
type BoundaryReviewConfirmation = BoundaryReviewDecision & {
|
|
29
|
+
status: "confirmed";
|
|
30
|
+
actor: string;
|
|
31
|
+
reason: string;
|
|
32
|
+
confirmed_at: string;
|
|
33
|
+
};
|
|
34
|
+
type BoundaryReviewInvalidation = {
|
|
35
|
+
id: string;
|
|
36
|
+
decision: string;
|
|
37
|
+
previous_input_digest: `sha256:${string}`;
|
|
38
|
+
current_input_digest?: `sha256:${string}`;
|
|
39
|
+
reason: "reviewed_input_changed" | "decision_removed";
|
|
40
|
+
invalidated_at: string;
|
|
41
|
+
};
|
|
6
42
|
export type LocalUiOptions = {
|
|
7
43
|
configPath?: string;
|
|
8
44
|
storePath?: string;
|
|
@@ -27,6 +63,10 @@ export type LocalUiOptions = {
|
|
|
27
63
|
workerDecision?: WorkbenchWorkerDecision;
|
|
28
64
|
workerReconciliationInspect?: WorkbenchReconciliationInspect;
|
|
29
65
|
workerReconciliationResolve?: WorkbenchReconciliationResolve;
|
|
66
|
+
askGatewayFactory?: WorkbenchAskGatewayFactory;
|
|
67
|
+
askProviderDependencies?: AskProviderDependencies;
|
|
68
|
+
instantOnboarding?: boolean;
|
|
69
|
+
scopedExploreRuntimeFactory?: typeof createScopedExploreRuntime;
|
|
30
70
|
};
|
|
31
71
|
export type WorkbenchDeploymentProfile = "development" | "staging" | "production" | "unknown";
|
|
32
72
|
export type WorkbenchLedgerScope = {
|
|
@@ -88,6 +128,12 @@ export type WorkbenchReconciliationResolve = (input: {
|
|
|
88
128
|
}) => Promise<{
|
|
89
129
|
code: number;
|
|
90
130
|
}>;
|
|
131
|
+
export type WorkbenchAskGatewayFactory = (input: {
|
|
132
|
+
configPath: string;
|
|
133
|
+
storePath: string;
|
|
134
|
+
projectRoot: string;
|
|
135
|
+
env: NodeJS.ProcessEnv;
|
|
136
|
+
}) => Promise<AskToolGateway>;
|
|
91
137
|
export type SafeActionPreview = (input: {
|
|
92
138
|
projectRoot: string;
|
|
93
139
|
configPath: string;
|
|
@@ -124,5 +170,19 @@ export type LocalUiServer = {
|
|
|
124
170
|
close: () => Promise<void>;
|
|
125
171
|
};
|
|
126
172
|
export declare function startLocalUiServer(options?: LocalUiOptions): Promise<LocalUiServer>;
|
|
173
|
+
export declare function recommendedWorkbenchCandidate(draft: ExplorationBoundaryDraft, maximumResources?: number): ExplorationBoundaryDraft;
|
|
174
|
+
export declare function instantWorkbenchCandidate(draft: ExplorationBoundaryDraft): ExplorationBoundaryDraft;
|
|
175
|
+
export declare function readBoundaryReviewProgress(projectRoot: string, draft: ExplorationBoundaryDraft): Promise<BoundaryReviewProgress | undefined>;
|
|
176
|
+
export declare function createBoundaryReviewProgress(input: {
|
|
177
|
+
draft: ExplorationBoundaryDraft;
|
|
178
|
+
candidate: ExplorationBoundaryDraft;
|
|
179
|
+
confirmedDecisions: string[];
|
|
180
|
+
previous?: BoundaryReviewProgress;
|
|
181
|
+
actor?: string;
|
|
182
|
+
revision: number;
|
|
183
|
+
now?: string;
|
|
184
|
+
}): BoundaryReviewProgress;
|
|
185
|
+
export declare function saveBoundaryReviewProgress(projectRoot: string, progress: BoundaryReviewProgress): Promise<void>;
|
|
186
|
+
export declare function boundaryReviewDecisions(candidate: ExplorationBoundaryDraft): BoundaryReviewDecision[];
|
|
127
187
|
export {};
|
|
128
188
|
//# sourceMappingURL=local-ui.d.ts.map
|
package/dist/local-ui.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-ui.d.ts","sourceRoot":"","sources":["../src/local-ui.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsC,KAAK,MAAM,EAAuB,MAAM,WAAW,CAAC;AAIjG,OAAO,EAAmG,KAAK,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAChL,OAAO,EACL,aAAa,EAQb,KAAK,cAAc,EACnB,KAAK,mBAAmB,EAEzB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"local-ui.d.ts","sourceRoot":"","sources":["../src/local-ui.ts"],"names":[],"mappings":"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"}
|