@contractspec/lib.surface-runtime 0.2.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 +164 -0
- package/dist/adapters/ai-sdk-stub.d.ts +5 -0
- package/dist/adapters/ai-sdk-stub.js +13 -0
- package/dist/adapters/blocknote-stub.d.ts +6 -0
- package/dist/adapters/blocknote-stub.js +31 -0
- package/dist/adapters/dnd-kit-adapter.d.ts +13 -0
- package/dist/adapters/dnd-kit-adapter.js +44 -0
- package/dist/adapters/dnd-kit-stub.d.ts +6 -0
- package/dist/adapters/dnd-kit-stub.js +8 -0
- package/dist/adapters/floating-ui-stub.d.ts +6 -0
- package/dist/adapters/floating-ui-stub.js +19 -0
- package/dist/adapters/index.d.ts +11 -0
- package/dist/adapters/index.js +176 -0
- package/dist/adapters/interfaces.d.ts +75 -0
- package/dist/adapters/interfaces.js +1 -0
- package/dist/adapters/motion-stub.d.ts +7 -0
- package/dist/adapters/motion-stub.js +27 -0
- package/dist/adapters/motion-stub.test.d.ts +1 -0
- package/dist/adapters/resizable-panels-stub.d.ts +6 -0
- package/dist/adapters/resizable-panels-stub.js +46 -0
- package/dist/adapters/resizable-panels-stub.test.d.ts +1 -0
- package/dist/browser/adapters/ai-sdk-stub.js +12 -0
- package/dist/browser/adapters/blocknote-stub.js +30 -0
- package/dist/browser/adapters/dnd-kit-adapter.js +43 -0
- package/dist/browser/adapters/dnd-kit-stub.js +7 -0
- package/dist/browser/adapters/floating-ui-stub.js +18 -0
- package/dist/browser/adapters/index.js +175 -0
- package/dist/browser/adapters/interfaces.js +0 -0
- package/dist/browser/adapters/motion-stub.js +26 -0
- package/dist/browser/adapters/resizable-panels-stub.js +45 -0
- package/dist/browser/evals/golden-context.js +0 -0
- package/dist/browser/evals/golden-harness.js +848 -0
- package/dist/browser/examples/pm-workbench.bundle.js +476 -0
- package/dist/browser/i18n/catalogs/en.js +71 -0
- package/dist/browser/i18n/catalogs/es.js +32 -0
- package/dist/browser/i18n/catalogs/fr.js +32 -0
- package/dist/browser/i18n/catalogs/index.js +133 -0
- package/dist/browser/i18n/index.js +173 -0
- package/dist/browser/i18n/keys.js +19 -0
- package/dist/browser/i18n/messages.js +143 -0
- package/dist/browser/index.js +2466 -0
- package/dist/browser/react/BundleProvider.js +47 -0
- package/dist/browser/react/BundleRenderer.js +726 -0
- package/dist/browser/react/OverlayConflictResolver.js +255 -0
- package/dist/browser/react/PatchProposalCard.js +255 -0
- package/dist/browser/react/RegionRenderer.js +128 -0
- package/dist/browser/react/SlotRenderer.js +118 -0
- package/dist/browser/react/WidgetPalette.js +59 -0
- package/dist/browser/react/index.js +792 -0
- package/dist/browser/runtime/apply-surface-patch.js +322 -0
- package/dist/browser/runtime/audit-events.js +137 -0
- package/dist/browser/runtime/build-context.js +55 -0
- package/dist/browser/runtime/extension-registry.js +58 -0
- package/dist/browser/runtime/field-renderer-registry.js +145 -0
- package/dist/browser/runtime/index.js +1496 -0
- package/dist/browser/runtime/overlay-alignment.js +83 -0
- package/dist/browser/runtime/overlay-signer.js +15 -0
- package/dist/browser/runtime/override-store.js +52 -0
- package/dist/browser/runtime/planner-prompt.js +67 -0
- package/dist/browser/runtime/planner-tools.js +77 -0
- package/dist/browser/runtime/policy-eval.js +155 -0
- package/dist/browser/runtime/preference-adapter.js +67 -0
- package/dist/browser/runtime/resolve-bundle.js +767 -0
- package/dist/browser/runtime/resolve-preferences.js +59 -0
- package/dist/browser/runtime/rollback.js +347 -0
- package/dist/browser/runtime/widget-registry.js +36 -0
- package/dist/browser/spec/define-module-bundle.js +113 -0
- package/dist/browser/spec/index.js +319 -0
- package/dist/browser/spec/types.js +0 -0
- package/dist/browser/spec/validate-bundle.js +65 -0
- package/dist/browser/spec/validate-surface-patch.js +206 -0
- package/dist/browser/spec/verification-snapshot-types.js +0 -0
- package/dist/browser/telemetry/index.js +20 -0
- package/dist/browser/telemetry/surface-metrics.js +20 -0
- package/dist/evals/golden-context.d.ts +24 -0
- package/dist/evals/golden-context.js +1 -0
- package/dist/evals/golden-harness.d.ts +29 -0
- package/dist/evals/golden-harness.js +849 -0
- package/dist/evals/golden-harness.test.d.ts +1 -0
- package/dist/examples/pm-workbench.bundle.d.ts +177 -0
- package/dist/examples/pm-workbench.bundle.js +477 -0
- package/dist/i18n/catalogs/en.d.ts +1 -0
- package/dist/i18n/catalogs/en.js +72 -0
- package/dist/i18n/catalogs/es.d.ts +1 -0
- package/dist/i18n/catalogs/es.js +33 -0
- package/dist/i18n/catalogs/fr.d.ts +1 -0
- package/dist/i18n/catalogs/fr.js +33 -0
- package/dist/i18n/catalogs/index.d.ts +3 -0
- package/dist/i18n/catalogs/index.js +134 -0
- package/dist/i18n/index.d.ts +5 -0
- package/dist/i18n/index.js +174 -0
- package/dist/i18n/keys.d.ts +20 -0
- package/dist/i18n/keys.js +20 -0
- package/dist/i18n/messages.d.ts +5 -0
- package/dist/i18n/messages.js +144 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +2467 -0
- package/dist/node/adapters/ai-sdk-stub.js +12 -0
- package/dist/node/adapters/blocknote-stub.js +30 -0
- package/dist/node/adapters/dnd-kit-adapter.js +43 -0
- package/dist/node/adapters/dnd-kit-stub.js +7 -0
- package/dist/node/adapters/floating-ui-stub.js +18 -0
- package/dist/node/adapters/index.js +175 -0
- package/dist/node/adapters/interfaces.js +0 -0
- package/dist/node/adapters/motion-stub.js +26 -0
- package/dist/node/adapters/resizable-panels-stub.js +45 -0
- package/dist/node/evals/golden-context.js +0 -0
- package/dist/node/evals/golden-harness.js +848 -0
- package/dist/node/examples/pm-workbench.bundle.js +476 -0
- package/dist/node/i18n/catalogs/en.js +71 -0
- package/dist/node/i18n/catalogs/es.js +32 -0
- package/dist/node/i18n/catalogs/fr.js +32 -0
- package/dist/node/i18n/catalogs/index.js +133 -0
- package/dist/node/i18n/index.js +173 -0
- package/dist/node/i18n/keys.js +19 -0
- package/dist/node/i18n/messages.js +143 -0
- package/dist/node/index.js +2466 -0
- package/dist/node/react/BundleProvider.js +47 -0
- package/dist/node/react/BundleRenderer.js +726 -0
- package/dist/node/react/OverlayConflictResolver.js +255 -0
- package/dist/node/react/PatchProposalCard.js +255 -0
- package/dist/node/react/RegionRenderer.js +128 -0
- package/dist/node/react/SlotRenderer.js +118 -0
- package/dist/node/react/WidgetPalette.js +59 -0
- package/dist/node/react/index.js +792 -0
- package/dist/node/runtime/apply-surface-patch.js +322 -0
- package/dist/node/runtime/audit-events.js +137 -0
- package/dist/node/runtime/build-context.js +55 -0
- package/dist/node/runtime/extension-registry.js +58 -0
- package/dist/node/runtime/field-renderer-registry.js +145 -0
- package/dist/node/runtime/index.js +1496 -0
- package/dist/node/runtime/overlay-alignment.js +83 -0
- package/dist/node/runtime/overlay-signer.js +15 -0
- package/dist/node/runtime/override-store.js +52 -0
- package/dist/node/runtime/planner-prompt.js +67 -0
- package/dist/node/runtime/planner-tools.js +77 -0
- package/dist/node/runtime/policy-eval.js +155 -0
- package/dist/node/runtime/preference-adapter.js +67 -0
- package/dist/node/runtime/resolve-bundle.js +767 -0
- package/dist/node/runtime/resolve-preferences.js +59 -0
- package/dist/node/runtime/rollback.js +347 -0
- package/dist/node/runtime/widget-registry.js +36 -0
- package/dist/node/spec/define-module-bundle.js +113 -0
- package/dist/node/spec/index.js +319 -0
- package/dist/node/spec/types.js +0 -0
- package/dist/node/spec/validate-bundle.js +65 -0
- package/dist/node/spec/validate-surface-patch.js +206 -0
- package/dist/node/spec/verification-snapshot-types.js +0 -0
- package/dist/node/telemetry/index.js +20 -0
- package/dist/node/telemetry/surface-metrics.js +20 -0
- package/dist/react/BundleProvider.d.ts +13 -0
- package/dist/react/BundleProvider.js +48 -0
- package/dist/react/BundleRenderer.d.ts +22 -0
- package/dist/react/BundleRenderer.js +727 -0
- package/dist/react/OverlayConflictResolver.d.ts +15 -0
- package/dist/react/OverlayConflictResolver.js +256 -0
- package/dist/react/PatchProposalCard.d.ts +13 -0
- package/dist/react/PatchProposalCard.js +256 -0
- package/dist/react/RegionRenderer.d.ts +13 -0
- package/dist/react/RegionRenderer.js +129 -0
- package/dist/react/SlotRenderer.d.ts +13 -0
- package/dist/react/SlotRenderer.js +119 -0
- package/dist/react/WidgetPalette.d.ts +12 -0
- package/dist/react/WidgetPalette.js +60 -0
- package/dist/react/index.d.ts +7 -0
- package/dist/react/index.js +793 -0
- package/dist/runtime/apply-surface-patch.d.ts +15 -0
- package/dist/runtime/apply-surface-patch.js +323 -0
- package/dist/runtime/apply-surface-patch.test.d.ts +1 -0
- package/dist/runtime/audit-events.d.ts +70 -0
- package/dist/runtime/audit-events.js +138 -0
- package/dist/runtime/audit-events.test.d.ts +1 -0
- package/dist/runtime/build-context.d.ts +9 -0
- package/dist/runtime/build-context.js +56 -0
- package/dist/runtime/extension-registry.d.ts +39 -0
- package/dist/runtime/extension-registry.js +59 -0
- package/dist/runtime/field-renderer-registry.d.ts +23 -0
- package/dist/runtime/field-renderer-registry.js +146 -0
- package/dist/runtime/field-renderer-registry.test.d.ts +1 -0
- package/dist/runtime/index.d.ts +16 -0
- package/dist/runtime/index.js +1497 -0
- package/dist/runtime/overlay-alignment.d.ts +49 -0
- package/dist/runtime/overlay-alignment.js +84 -0
- package/dist/runtime/overlay-alignment.test.d.ts +1 -0
- package/dist/runtime/overlay-signer.d.ts +15 -0
- package/dist/runtime/overlay-signer.js +16 -0
- package/dist/runtime/override-store.d.ts +44 -0
- package/dist/runtime/override-store.js +53 -0
- package/dist/runtime/override-store.test.d.ts +1 -0
- package/dist/runtime/planner-prompt.d.ts +39 -0
- package/dist/runtime/planner-prompt.js +68 -0
- package/dist/runtime/planner-prompt.test.d.ts +1 -0
- package/dist/runtime/planner-tools.d.ts +106 -0
- package/dist/runtime/planner-tools.js +78 -0
- package/dist/runtime/planner-tools.test.d.ts +1 -0
- package/dist/runtime/policy-eval.d.ts +23 -0
- package/dist/runtime/policy-eval.js +156 -0
- package/dist/runtime/preference-adapter.d.ts +6 -0
- package/dist/runtime/preference-adapter.js +68 -0
- package/dist/runtime/resolve-bundle.d.ts +68 -0
- package/dist/runtime/resolve-bundle.js +768 -0
- package/dist/runtime/resolve-bundle.test.d.ts +1 -0
- package/dist/runtime/resolve-preferences.d.ts +9 -0
- package/dist/runtime/resolve-preferences.js +60 -0
- package/dist/runtime/resolve-preferences.test.d.ts +1 -0
- package/dist/runtime/rollback.d.ts +21 -0
- package/dist/runtime/rollback.js +348 -0
- package/dist/runtime/rollback.test.d.ts +1 -0
- package/dist/runtime/widget-registry.d.ts +26 -0
- package/dist/runtime/widget-registry.js +37 -0
- package/dist/runtime/widget-registry.test.d.ts +1 -0
- package/dist/spec/define-module-bundle.d.ts +17 -0
- package/dist/spec/define-module-bundle.js +114 -0
- package/dist/spec/define-module-bundle.test.d.ts +1 -0
- package/dist/spec/index.d.ts +5 -0
- package/dist/spec/index.js +320 -0
- package/dist/spec/types.d.ts +494 -0
- package/dist/spec/types.js +1 -0
- package/dist/spec/validate-bundle.d.ts +23 -0
- package/dist/spec/validate-bundle.js +66 -0
- package/dist/spec/validate-bundle.test.d.ts +1 -0
- package/dist/spec/validate-surface-patch.d.ts +39 -0
- package/dist/spec/validate-surface-patch.js +207 -0
- package/dist/spec/validate-surface-patch.test.d.ts +1 -0
- package/dist/spec/verification-snapshot-types.d.ts +23 -0
- package/dist/spec/verification-snapshot-types.js +1 -0
- package/dist/spec/verification-snapshot.test.d.ts +5 -0
- package/dist/telemetry/index.d.ts +5 -0
- package/dist/telemetry/index.js +21 -0
- package/dist/telemetry/surface-metrics.d.ts +17 -0
- package/dist/telemetry/surface-metrics.js +21 -0
- package/package.json +920 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// src/runtime/audit-events.ts
|
|
3
|
+
function generateEventId() {
|
|
4
|
+
return `evt_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`;
|
|
5
|
+
}
|
|
6
|
+
function emitPatchProposed(audit, args) {
|
|
7
|
+
audit.emit({
|
|
8
|
+
eventId: generateEventId(),
|
|
9
|
+
at: new Date().toISOString(),
|
|
10
|
+
actorId: args.actorId,
|
|
11
|
+
source: args.proposal.source === "assistant" ? "assistant" : "user",
|
|
12
|
+
bundleKey: args.bundleKey,
|
|
13
|
+
surfaceId: args.surfaceId,
|
|
14
|
+
eventType: "patch.proposed",
|
|
15
|
+
payload: {
|
|
16
|
+
proposalId: args.proposal.proposalId,
|
|
17
|
+
source: args.proposal.source,
|
|
18
|
+
opsCount: args.proposal.ops.length
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
function emitPatchApproved(audit, args) {
|
|
23
|
+
audit.emit({
|
|
24
|
+
eventId: generateEventId(),
|
|
25
|
+
at: new Date().toISOString(),
|
|
26
|
+
actorId: args.actorId,
|
|
27
|
+
source: "user",
|
|
28
|
+
bundleKey: args.bundleKey,
|
|
29
|
+
surfaceId: args.surfaceId,
|
|
30
|
+
eventType: "patch.approved",
|
|
31
|
+
payload: {
|
|
32
|
+
proposalId: args.proposalId,
|
|
33
|
+
source: args.source,
|
|
34
|
+
opsCount: args.opsCount,
|
|
35
|
+
reason: args.reason
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
function emitPatchRejected(audit, args) {
|
|
40
|
+
audit.emit({
|
|
41
|
+
eventId: generateEventId(),
|
|
42
|
+
at: new Date().toISOString(),
|
|
43
|
+
actorId: args.actorId,
|
|
44
|
+
source: "user",
|
|
45
|
+
bundleKey: args.bundleKey,
|
|
46
|
+
surfaceId: args.surfaceId,
|
|
47
|
+
eventType: "patch.rejected",
|
|
48
|
+
payload: {
|
|
49
|
+
proposalId: args.proposalId,
|
|
50
|
+
source: args.source,
|
|
51
|
+
opsCount: args.opsCount,
|
|
52
|
+
reason: args.reason
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
function emitOverlaySaved(audit, args) {
|
|
57
|
+
audit.emit({
|
|
58
|
+
eventId: generateEventId(),
|
|
59
|
+
at: new Date().toISOString(),
|
|
60
|
+
actorId: args.actorId,
|
|
61
|
+
source: "user",
|
|
62
|
+
bundleKey: args.bundleKey,
|
|
63
|
+
eventType: "overlay.saved",
|
|
64
|
+
payload: {
|
|
65
|
+
overlayId: args.overlayId,
|
|
66
|
+
scope: args.scope,
|
|
67
|
+
opsCount: args.opsCount
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
function emitOverlayApplied(audit, args) {
|
|
72
|
+
audit.emit({
|
|
73
|
+
eventId: generateEventId(),
|
|
74
|
+
at: new Date().toISOString(),
|
|
75
|
+
source: "system",
|
|
76
|
+
bundleKey: args.bundleKey,
|
|
77
|
+
surfaceId: args.surfaceId,
|
|
78
|
+
eventType: "overlay.applied",
|
|
79
|
+
payload: {
|
|
80
|
+
overlayId: args.overlayId,
|
|
81
|
+
opsCount: args.opsCount
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
function emitOverlayFailed(audit, args) {
|
|
86
|
+
audit.emit({
|
|
87
|
+
eventId: generateEventId(),
|
|
88
|
+
at: new Date().toISOString(),
|
|
89
|
+
source: "system",
|
|
90
|
+
bundleKey: args.bundleKey,
|
|
91
|
+
surfaceId: args.surfaceId,
|
|
92
|
+
eventType: "overlay.failed",
|
|
93
|
+
payload: {
|
|
94
|
+
overlayId: args.overlayId,
|
|
95
|
+
error: args.error
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
function emitPolicyDenied(audit, args) {
|
|
100
|
+
audit.emit({
|
|
101
|
+
eventId: generateEventId(),
|
|
102
|
+
at: new Date().toISOString(),
|
|
103
|
+
actorId: args.actorId,
|
|
104
|
+
source: "policy",
|
|
105
|
+
bundleKey: args.bundleKey,
|
|
106
|
+
surfaceId: args.surfaceId,
|
|
107
|
+
eventType: "policy.denied",
|
|
108
|
+
payload: {
|
|
109
|
+
targetId: args.targetId,
|
|
110
|
+
reason: args.reason
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
function emitPolicyRedacted(audit, args) {
|
|
115
|
+
audit.emit({
|
|
116
|
+
eventId: generateEventId(),
|
|
117
|
+
at: new Date().toISOString(),
|
|
118
|
+
actorId: args.actorId,
|
|
119
|
+
source: "policy",
|
|
120
|
+
bundleKey: args.bundleKey,
|
|
121
|
+
surfaceId: args.surfaceId,
|
|
122
|
+
eventType: "policy.redacted",
|
|
123
|
+
payload: {
|
|
124
|
+
targetId: args.targetId,
|
|
125
|
+
redactions: args.redactions
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// src/runtime/policy-eval.ts
|
|
131
|
+
function evaluatePatchProposalPolicy(ops, ctx, policy) {
|
|
132
|
+
const evaluate = policy?.evaluatePatchProposal;
|
|
133
|
+
if (!evaluate)
|
|
134
|
+
return "allow";
|
|
135
|
+
return evaluate(ops, ctx);
|
|
136
|
+
}
|
|
137
|
+
function evaluateAndEmitPatchPolicy(ops, ctx, args) {
|
|
138
|
+
const effect = evaluatePatchProposalPolicy(ops, ctx, args.policy);
|
|
139
|
+
if (effect === "deny") {
|
|
140
|
+
if (args.audit) {
|
|
141
|
+
emitPolicyDenied(args.audit, {
|
|
142
|
+
bundleKey: args.bundleKey,
|
|
143
|
+
surfaceId: args.surfaceId,
|
|
144
|
+
targetId: args.targetId ?? "patch-proposal",
|
|
145
|
+
reason: "Policy denied patch proposal",
|
|
146
|
+
actorId: ctx.actorId
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
export {
|
|
154
|
+
evaluatePatchProposalPolicy,
|
|
155
|
+
evaluateAndEmitPatchPolicy
|
|
156
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { BundlePreferenceAdapter } from '../spec/types';
|
|
2
|
+
/**
|
|
3
|
+
* Default preference adapter. Uses in-memory resolution; savePreferencePatch is a no-op stub.
|
|
4
|
+
* Integrate with lib.personalization or lib.overlay-engine for persistence.
|
|
5
|
+
*/
|
|
6
|
+
export declare const defaultPreferenceAdapter: BundlePreferenceAdapter;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// src/runtime/resolve-preferences.ts
|
|
3
|
+
var DIMENSION_KEYS = [
|
|
4
|
+
"guidance",
|
|
5
|
+
"density",
|
|
6
|
+
"dataDepth",
|
|
7
|
+
"control",
|
|
8
|
+
"media",
|
|
9
|
+
"pace",
|
|
10
|
+
"narrative"
|
|
11
|
+
];
|
|
12
|
+
var SCOPE_ORDER = [
|
|
13
|
+
"user",
|
|
14
|
+
"workspace-user",
|
|
15
|
+
"bundle",
|
|
16
|
+
"surface",
|
|
17
|
+
"entity",
|
|
18
|
+
"session"
|
|
19
|
+
];
|
|
20
|
+
function mergeByScope(layers, ctx) {
|
|
21
|
+
const merged = { ...ctx.preferences };
|
|
22
|
+
const sourceByDimension = {};
|
|
23
|
+
for (const scope of SCOPE_ORDER) {
|
|
24
|
+
const layer = layers[scope];
|
|
25
|
+
if (!layer)
|
|
26
|
+
continue;
|
|
27
|
+
for (const dim of DIMENSION_KEYS) {
|
|
28
|
+
const val = layer[dim];
|
|
29
|
+
if (val !== undefined) {
|
|
30
|
+
merged[dim] = val;
|
|
31
|
+
sourceByDimension[dim] = scope;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
for (const dim of DIMENSION_KEYS) {
|
|
36
|
+
if (sourceByDimension[dim] === undefined) {
|
|
37
|
+
sourceByDimension[dim] = "session";
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return { canonical: merged, sourceByDimension };
|
|
41
|
+
}
|
|
42
|
+
function resolveConstraints(_canonical, _ctx) {
|
|
43
|
+
return { constrained: {}, notes: [] };
|
|
44
|
+
}
|
|
45
|
+
function resolvePreferenceProfile(ctx) {
|
|
46
|
+
const layers = {
|
|
47
|
+
session: ctx.preferences
|
|
48
|
+
};
|
|
49
|
+
const { canonical, sourceByDimension } = mergeByScope(layers, ctx);
|
|
50
|
+
const { constrained, notes } = resolveConstraints(canonical, ctx);
|
|
51
|
+
return {
|
|
52
|
+
canonical,
|
|
53
|
+
sourceByDimension,
|
|
54
|
+
constrained,
|
|
55
|
+
notes
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// src/runtime/preference-adapter.ts
|
|
60
|
+
var defaultPreferenceAdapter = {
|
|
61
|
+
async resolve(ctx) {
|
|
62
|
+
return resolvePreferenceProfile(ctx);
|
|
63
|
+
},
|
|
64
|
+
async savePreferencePatch(_args) {}
|
|
65
|
+
};
|
|
66
|
+
export {
|
|
67
|
+
defaultPreferenceAdapter
|
|
68
|
+
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { ActionSpec, AppliedOverlayMeta, BundleContext, BundleScope, CommandSpec, ModuleBundleSpec, RegionNode, ResolvedAdaptation, SurfaceNode, SurfacePatchProposal, UiPolicyDecision, BundleAuditEmitter } from '../spec/types';
|
|
2
|
+
import type { BundleOverrideStore } from './override-store';
|
|
3
|
+
export interface OverlayConflict {
|
|
4
|
+
targetKey: string;
|
|
5
|
+
scopeA: BundleScope;
|
|
6
|
+
scopeB: BundleScope;
|
|
7
|
+
overlayIdA: string;
|
|
8
|
+
overlayIdB: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ResolvedSurfacePlan {
|
|
11
|
+
bundleKey: string;
|
|
12
|
+
surfaceId: string;
|
|
13
|
+
layoutId: string;
|
|
14
|
+
/** Resolved layout root for rendering. */
|
|
15
|
+
layoutRoot: RegionNode;
|
|
16
|
+
nodes: SurfaceNode[];
|
|
17
|
+
actions: ActionSpec[];
|
|
18
|
+
commands: CommandSpec[];
|
|
19
|
+
bindings: Record<string, unknown>;
|
|
20
|
+
adaptation: ResolvedAdaptation;
|
|
21
|
+
overlays: AppliedOverlayMeta[];
|
|
22
|
+
overlayConflicts?: OverlayConflict[];
|
|
23
|
+
ai: {
|
|
24
|
+
plannerId?: string;
|
|
25
|
+
proposals?: SurfacePatchProposal[];
|
|
26
|
+
};
|
|
27
|
+
audit: {
|
|
28
|
+
resolutionId: string;
|
|
29
|
+
createdAt: string;
|
|
30
|
+
reasons: string[];
|
|
31
|
+
};
|
|
32
|
+
/** Locale for i18n (from BundleContext). Used by UI components. */
|
|
33
|
+
locale?: string;
|
|
34
|
+
}
|
|
35
|
+
/** Policy effect for patch proposal evaluation. */
|
|
36
|
+
export type PatchPolicyEffect = 'allow' | 'deny' | 'require-approval';
|
|
37
|
+
/** Policy hooks for PDP integration. Stub PDP returns allow by default. */
|
|
38
|
+
export interface PolicyHooks<C extends BundleContext> {
|
|
39
|
+
/** Evaluate node visibility. Return allow/deny/redact. Stub: allow all. */
|
|
40
|
+
evaluateNode?: (node: SurfaceNode, ctx: C) => UiPolicyDecision;
|
|
41
|
+
/** Redact binding value. Stub: pass-through. */
|
|
42
|
+
redactBinding?: (key: string, ctx: C) => unknown;
|
|
43
|
+
/** Evaluate patch proposal before approval. Stub: allow. */
|
|
44
|
+
evaluatePatchProposal?: (ops: import('../spec/types').SurfacePatchOp[], ctx: C) => PatchPolicyEffect;
|
|
45
|
+
}
|
|
46
|
+
export interface OverlayMergeOptions {
|
|
47
|
+
overrideStore: BundleOverrideStore;
|
|
48
|
+
/** Scopes to fetch (default: system, workspace, user, session). */
|
|
49
|
+
scopes?: BundleScope[];
|
|
50
|
+
}
|
|
51
|
+
export interface ResolveBundleOptions<C extends BundleContext> {
|
|
52
|
+
/** Optional policy hooks for allow/deny/redact. Stub PDP returns allow. */
|
|
53
|
+
policy?: PolicyHooks<C>;
|
|
54
|
+
/** Optional audit emitter. Emits surface.resolved on resolution. */
|
|
55
|
+
audit?: BundleAuditEmitter;
|
|
56
|
+
/** Optional overlay merge. Applies stored overlays in precedence order. */
|
|
57
|
+
overlayMerge?: OverlayMergeOptions;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Resolves a bundle spec and context into a concrete surface plan.
|
|
61
|
+
* Fallback chain: surface → simpler layout → overview → error surface.
|
|
62
|
+
*
|
|
63
|
+
* @param spec - The module bundle spec
|
|
64
|
+
* @param ctx - The bundle context (route, preferences, etc.)
|
|
65
|
+
* @param options - Optional policy hooks
|
|
66
|
+
* @returns Resolved surface plan with layout, nodes, bindings, and audit
|
|
67
|
+
*/
|
|
68
|
+
export declare function resolveBundle<C extends BundleContext>(spec: ModuleBundleSpec<C>, ctx: C, options?: ResolveBundleOptions<C>): Promise<ResolvedSurfacePlan>;
|