@contractspec/example.locale-jurisdiction-gate 3.7.7 → 3.7.12
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/.turbo/turbo-build.log +72 -51
- package/CHANGELOG.md +43 -0
- package/README.md +13 -1
- package/dist/browser/forms/assistant-context.form.js +213 -0
- package/dist/browser/forms/index.js +213 -0
- package/dist/browser/index.js +327 -6
- package/dist/browser/locale-jurisdiction-gate.feature.js +66 -1
- package/dist/browser/policy/assistant-gate.policy.js +62 -0
- package/dist/browser/policy/index.js +62 -1
- package/dist/browser/translations/assistant-gate.en-GB.translation.js +48 -0
- package/dist/browser/translations/assistant-gate.en-US.translation.js +50 -0
- package/dist/browser/translations/assistant-gate.fr-FR.translation.js +52 -0
- package/dist/browser/translations/index.js +148 -0
- package/dist/contracts.test.d.ts +1 -0
- package/dist/forms/assistant-context.form.d.ts +22 -0
- package/dist/forms/assistant-context.form.js +214 -0
- package/dist/forms/index.d.ts +1 -0
- package/dist/forms/index.js +214 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +327 -6
- package/dist/locale-jurisdiction-gate.feature.js +66 -1
- package/dist/node/forms/assistant-context.form.js +213 -0
- package/dist/node/forms/index.js +213 -0
- package/dist/node/index.js +327 -6
- package/dist/node/locale-jurisdiction-gate.feature.js +66 -1
- package/dist/node/policy/assistant-gate.policy.js +62 -0
- package/dist/node/policy/index.js +62 -1
- package/dist/node/translations/assistant-gate.en-GB.translation.js +48 -0
- package/dist/node/translations/assistant-gate.en-US.translation.js +50 -0
- package/dist/node/translations/assistant-gate.fr-FR.translation.js +52 -0
- package/dist/node/translations/index.js +148 -0
- package/dist/policy/assistant-gate.policy.d.ts +1 -0
- package/dist/policy/assistant-gate.policy.js +63 -0
- package/dist/policy/index.d.ts +1 -0
- package/dist/policy/index.js +62 -1
- package/dist/translations/assistant-gate.en-GB.translation.d.ts +1 -0
- package/dist/translations/assistant-gate.en-GB.translation.js +49 -0
- package/dist/translations/assistant-gate.en-US.translation.d.ts +1 -0
- package/dist/translations/assistant-gate.en-US.translation.js +51 -0
- package/dist/translations/assistant-gate.fr-FR.translation.d.ts +1 -0
- package/dist/translations/assistant-gate.fr-FR.translation.js +53 -0
- package/dist/translations/index.d.ts +3 -0
- package/dist/translations/index.js +149 -0
- package/package.json +103 -5
- package/src/contracts.test.ts +32 -0
- package/src/forms/assistant-context.form.ts +112 -0
- package/src/forms/index.ts +1 -0
- package/src/index.ts +2 -0
- package/src/locale-jurisdiction-gate.feature.ts +7 -1
- package/src/policy/assistant-gate.policy.ts +65 -0
- package/src/policy/index.ts +1 -0
- package/src/translations/assistant-gate.en-GB.translation.ts +46 -0
- package/src/translations/assistant-gate.en-US.translation.ts +48 -0
- package/src/translations/assistant-gate.fr-FR.translation.ts +51 -0
- package/src/translations/index.ts +3 -0
package/.turbo/turbo-build.log
CHANGED
|
@@ -2,61 +2,82 @@ $ contractspec-bun-build prebuild
|
|
|
2
2
|
$ bun run prebuild && bun run build:bundle && bun run build:types
|
|
3
3
|
$ contractspec-bun-build prebuild
|
|
4
4
|
$ contractspec-bun-build transpile
|
|
5
|
-
[contractspec-bun-build] transpile target=bun root=src entries=
|
|
6
|
-
Bundled
|
|
5
|
+
[contractspec-bun-build] transpile target=bun root=src entries=22 noBundle=false
|
|
6
|
+
Bundled 22 modules in 31ms
|
|
7
7
|
|
|
8
|
-
docs/index.js
|
|
9
|
-
./index.js
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
./
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
policy/guard.js
|
|
8
|
+
docs/index.js 1.64 KB (entry point)
|
|
9
|
+
./index.js 30.25 KB (entry point)
|
|
10
|
+
policy/index.js 4.12 KB (entry point)
|
|
11
|
+
policy/types.js 8 bytes (entry point)
|
|
12
|
+
translations/index.js 5.92 KB (entry point)
|
|
13
|
+
translations/assistant-gate.en-GB.translation.js 1.85 KB (entry point)
|
|
14
|
+
translations/assistant-gate.en-US.translation.js 2.0 KB (entry point)
|
|
15
|
+
translations/assistant-gate.fr-FR.translation.js 1.94 KB (entry point)
|
|
16
|
+
handlers/index.js 4.45 KB (entry point)
|
|
17
|
+
handlers/demo.handlers.js 4.45 KB (entry point)
|
|
18
|
+
./locale-jurisdiction-gate.feature.js 3.48 KB (entry point)
|
|
19
|
+
operations/index.js 6.95 KB (entry point)
|
|
20
|
+
operations/assistant.js 6.95 KB (entry point)
|
|
21
|
+
policy/assistant-gate.policy.js 2.10 KB (entry point)
|
|
22
|
+
policy/guard.js 2.0 KB (entry point)
|
|
23
|
+
docs/locale-jurisdiction-gate.docblock.js 1.64 KB (entry point)
|
|
24
|
+
entities/index.js 3.89 KB (entry point)
|
|
25
|
+
./events.js 2.97 KB (entry point)
|
|
26
|
+
./example.js 1.1 KB (entry point)
|
|
27
|
+
forms/index.js 7.15 KB (entry point)
|
|
28
|
+
forms/assistant-context.form.js 7.15 KB (entry point)
|
|
29
|
+
entities/models.js 3.89 KB (entry point)
|
|
23
30
|
|
|
24
|
-
[contractspec-bun-build] transpile target=node root=src entries=
|
|
25
|
-
Bundled
|
|
31
|
+
[contractspec-bun-build] transpile target=node root=src entries=22 noBundle=false
|
|
32
|
+
Bundled 22 modules in 55ms
|
|
26
33
|
|
|
27
|
-
docs/index.js
|
|
28
|
-
./index.js
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
./
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
policy/guard.js
|
|
34
|
+
docs/index.js 1.63 KB (entry point)
|
|
35
|
+
./index.js 30.21 KB (entry point)
|
|
36
|
+
policy/index.js 4.11 KB (entry point)
|
|
37
|
+
policy/types.js 0 KB (entry point)
|
|
38
|
+
translations/index.js 5.89 KB (entry point)
|
|
39
|
+
translations/assistant-gate.en-GB.translation.js 1.84 KB (entry point)
|
|
40
|
+
translations/assistant-gate.en-US.translation.js 2.0 KB (entry point)
|
|
41
|
+
translations/assistant-gate.fr-FR.translation.js 1.90 KB (entry point)
|
|
42
|
+
handlers/index.js 4.44 KB (entry point)
|
|
43
|
+
handlers/demo.handlers.js 4.44 KB (entry point)
|
|
44
|
+
./locale-jurisdiction-gate.feature.js 3.47 KB (entry point)
|
|
45
|
+
operations/index.js 6.94 KB (entry point)
|
|
46
|
+
operations/assistant.js 6.94 KB (entry point)
|
|
47
|
+
policy/assistant-gate.policy.js 2.1 KB (entry point)
|
|
48
|
+
policy/guard.js 2.0 KB (entry point)
|
|
49
|
+
docs/locale-jurisdiction-gate.docblock.js 1.63 KB (entry point)
|
|
50
|
+
entities/index.js 3.88 KB (entry point)
|
|
51
|
+
./events.js 2.96 KB (entry point)
|
|
52
|
+
./example.js 1.1 KB (entry point)
|
|
53
|
+
forms/index.js 7.14 KB (entry point)
|
|
54
|
+
forms/assistant-context.form.js 7.14 KB (entry point)
|
|
55
|
+
entities/models.js 3.88 KB (entry point)
|
|
42
56
|
|
|
43
|
-
[contractspec-bun-build] transpile target=browser root=src entries=
|
|
44
|
-
Bundled
|
|
57
|
+
[contractspec-bun-build] transpile target=browser root=src entries=22 noBundle=false
|
|
58
|
+
Bundled 22 modules in 53ms
|
|
45
59
|
|
|
46
|
-
docs/index.js
|
|
47
|
-
./index.js
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
./
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
policy/guard.js
|
|
60
|
+
docs/index.js 1.63 KB (entry point)
|
|
61
|
+
./index.js 30.21 KB (entry point)
|
|
62
|
+
policy/index.js 4.11 KB (entry point)
|
|
63
|
+
policy/types.js 0 KB (entry point)
|
|
64
|
+
translations/index.js 5.89 KB (entry point)
|
|
65
|
+
translations/assistant-gate.en-GB.translation.js 1.84 KB (entry point)
|
|
66
|
+
translations/assistant-gate.en-US.translation.js 2.0 KB (entry point)
|
|
67
|
+
translations/assistant-gate.fr-FR.translation.js 1.90 KB (entry point)
|
|
68
|
+
handlers/index.js 4.44 KB (entry point)
|
|
69
|
+
handlers/demo.handlers.js 4.44 KB (entry point)
|
|
70
|
+
./locale-jurisdiction-gate.feature.js 3.47 KB (entry point)
|
|
71
|
+
operations/index.js 6.94 KB (entry point)
|
|
72
|
+
operations/assistant.js 6.94 KB (entry point)
|
|
73
|
+
policy/assistant-gate.policy.js 2.1 KB (entry point)
|
|
74
|
+
policy/guard.js 2.0 KB (entry point)
|
|
75
|
+
docs/locale-jurisdiction-gate.docblock.js 1.63 KB (entry point)
|
|
76
|
+
entities/index.js 3.88 KB (entry point)
|
|
77
|
+
./events.js 2.96 KB (entry point)
|
|
78
|
+
./example.js 1.1 KB (entry point)
|
|
79
|
+
forms/index.js 7.14 KB (entry point)
|
|
80
|
+
forms/assistant-context.form.js 7.14 KB (entry point)
|
|
81
|
+
entities/models.js 3.88 KB (entry point)
|
|
61
82
|
|
|
62
83
|
$ contractspec-bun-build types
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,45 @@
|
|
|
1
1
|
# @contractspec/example.locale-jurisdiction-gate
|
|
2
2
|
|
|
3
|
+
## 3.7.12
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [81256ea]
|
|
8
|
+
- Updated dependencies [2619dd8]
|
|
9
|
+
- Updated dependencies [6de2f1c]
|
|
10
|
+
- Updated dependencies [81256ea]
|
|
11
|
+
- Updated dependencies [a4489bb]
|
|
12
|
+
- Updated dependencies [9cb304e]
|
|
13
|
+
- @contractspec/lib.contracts-spec@5.0.0
|
|
14
|
+
- @contractspec/lib.schema@3.7.10
|
|
15
|
+
|
|
16
|
+
## 3.7.11
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- fix: release
|
|
21
|
+
- Updated dependencies
|
|
22
|
+
- @contractspec/lib.contracts-spec@4.1.3
|
|
23
|
+
- @contractspec/lib.schema@3.7.9
|
|
24
|
+
|
|
25
|
+
## 3.7.10
|
|
26
|
+
|
|
27
|
+
### Patch Changes
|
|
28
|
+
|
|
29
|
+
- 1a44cb6: feat: improve examples to increase coverage of Contracts type
|
|
30
|
+
- Updated dependencies [1a44cb6]
|
|
31
|
+
- @contractspec/lib.contracts-spec@4.1.2
|
|
32
|
+
- @contractspec/lib.schema@3.7.8
|
|
33
|
+
|
|
34
|
+
## 3.7.9
|
|
35
|
+
|
|
36
|
+
### Patch Changes
|
|
37
|
+
|
|
38
|
+
- fix: release
|
|
39
|
+
- Updated dependencies
|
|
40
|
+
- @contractspec/lib.contracts-spec@4.1.1
|
|
41
|
+
- @contractspec/lib.schema@3.7.7
|
|
42
|
+
|
|
3
43
|
## 3.7.6
|
|
4
44
|
|
|
5
45
|
### Patch Changes
|
|
@@ -704,14 +744,17 @@
|
|
|
704
744
|
feat: Contract layers support (features, examples, app-configs)
|
|
705
745
|
|
|
706
746
|
### New CLI Commands
|
|
747
|
+
|
|
707
748
|
- `contractspec list layers` - List all contract layers with filtering
|
|
708
749
|
|
|
709
750
|
### Enhanced Commands
|
|
751
|
+
|
|
710
752
|
- `contractspec ci` - New `layers` check category validates features/examples/config
|
|
711
753
|
- `contractspec doctor` - New `layers` health checks
|
|
712
754
|
- `contractspec integrity` - Now shows layer statistics
|
|
713
755
|
|
|
714
756
|
### New APIs
|
|
757
|
+
|
|
715
758
|
- `discoverLayers()` - Scan workspace for all layer files
|
|
716
759
|
- `scanExampleSource()` - Parse ExampleSpec from source code
|
|
717
760
|
- `isExampleFile()` - Check if file is an example spec
|
package/README.md
CHANGED
|
@@ -6,6 +6,9 @@ Website: https://contractspec.io
|
|
|
6
6
|
|
|
7
7
|
## What This Demonstrates
|
|
8
8
|
|
|
9
|
+
- Canonical `policy` export via `AssistantGatePolicy`.
|
|
10
|
+
- Canonical `form` export via `AssistantContextForm`.
|
|
11
|
+
- Canonical `translation` exports for `en-US`, `en-GB`, and `fr-FR`.
|
|
9
12
|
- Fail-closed policy guard pattern for AI assistant calls.
|
|
10
13
|
- Entity models for locale/jurisdiction gating.
|
|
11
14
|
- Event-driven policy enforcement.
|
|
@@ -31,9 +34,11 @@ Use `@contractspec/example.locale-jurisdiction-gate` as a reference implementati
|
|
|
31
34
|
- `src/entities/` contains domain entities and value objects.
|
|
32
35
|
- `src/events.ts` is package-level event definitions.
|
|
33
36
|
- `src/example.ts` is the runnable example entrypoint.
|
|
37
|
+
- `src/forms/` contains the exported assistant context form spec.
|
|
34
38
|
- `src/handlers/` contains handlers or demo adapters wired to contract surfaces.
|
|
35
39
|
- `src/index.ts` is the root public barrel and package entrypoint.
|
|
36
40
|
- `src/locale-jurisdiction-gate.feature.ts` defines a feature entrypoint.
|
|
41
|
+
- `src/translations/` contains the exported locale catalogs.
|
|
37
42
|
|
|
38
43
|
## Public Entry Points
|
|
39
44
|
|
|
@@ -44,10 +49,17 @@ Use `@contractspec/example.locale-jurisdiction-gate` as a reference implementati
|
|
|
44
49
|
- Export `./entities/models` resolves through `./src/entities/models.ts`.
|
|
45
50
|
- Export `./events` resolves through `./src/events.ts`.
|
|
46
51
|
- Export `./example` resolves through `./src/example.ts`.
|
|
52
|
+
- Export `./forms` resolves through `./src/forms/index.ts`.
|
|
53
|
+
- Export `./forms/assistant-context.form` resolves through `./src/forms/assistant-context.form.ts`.
|
|
47
54
|
- Export `./handlers` resolves through `./src/handlers/index.ts`.
|
|
48
55
|
- Export `./handlers/demo.handlers` resolves through `./src/handlers/demo.handlers.ts`.
|
|
49
56
|
- Export `./locale-jurisdiction-gate.feature` resolves through `./src/locale-jurisdiction-gate.feature.ts`.
|
|
50
|
-
-
|
|
57
|
+
- Export `./policy/assistant-gate.policy` resolves through `./src/policy/assistant-gate.policy.ts`.
|
|
58
|
+
- Export `./translations` resolves through `./src/translations/index.ts`.
|
|
59
|
+
- Export `./translations/assistant-gate.en-GB.translation` resolves through `./src/translations/assistant-gate.en-GB.translation.ts`.
|
|
60
|
+
- Export `./translations/assistant-gate.en-US.translation` resolves through `./src/translations/assistant-gate.en-US.translation.ts`.
|
|
61
|
+
- Export `./translations/assistant-gate.fr-FR.translation` resolves through `./src/translations/assistant-gate.fr-FR.translation.ts`.
|
|
62
|
+
- The package publishes 21 total export subpaths; keep docs aligned with `package.json`.
|
|
51
63
|
|
|
52
64
|
## Local Commands
|
|
53
65
|
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
// src/entities/models.ts
|
|
2
|
+
import {
|
|
3
|
+
defineEnum,
|
|
4
|
+
defineSchemaModel,
|
|
5
|
+
ScalarTypeEnum
|
|
6
|
+
} from "@contractspec/lib.schema";
|
|
7
|
+
var AllowedScopeEnum = defineEnum("AllowedScope", [
|
|
8
|
+
"education_only",
|
|
9
|
+
"generic_info",
|
|
10
|
+
"escalation_required"
|
|
11
|
+
]);
|
|
12
|
+
var UserProfileModel = defineSchemaModel({
|
|
13
|
+
name: "UserProfile",
|
|
14
|
+
description: "User profile inputs used to derive regulatory context.",
|
|
15
|
+
fields: {
|
|
16
|
+
preferredLocale: {
|
|
17
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
18
|
+
isOptional: true
|
|
19
|
+
},
|
|
20
|
+
residencyCountry: {
|
|
21
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
22
|
+
isOptional: true
|
|
23
|
+
},
|
|
24
|
+
taxResidenceCountry: {
|
|
25
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
26
|
+
isOptional: true
|
|
27
|
+
},
|
|
28
|
+
clientType: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
var RegulatoryContextModel = defineSchemaModel({
|
|
32
|
+
name: "RegulatoryContext",
|
|
33
|
+
description: "Explicit regulatory context (no guessing).",
|
|
34
|
+
fields: {
|
|
35
|
+
jurisdiction: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
36
|
+
region: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
37
|
+
clientType: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
38
|
+
allowedScope: { type: AllowedScopeEnum, isOptional: false }
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
var LLMCallEnvelopeModel = defineSchemaModel({
|
|
42
|
+
name: "LLMCallEnvelope",
|
|
43
|
+
description: "Mandatory envelope for assistant calls. All fields are explicit and required for policy gating.",
|
|
44
|
+
fields: {
|
|
45
|
+
traceId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
46
|
+
locale: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
47
|
+
regulatoryContext: { type: RegulatoryContextModel, isOptional: false },
|
|
48
|
+
kbSnapshotId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
49
|
+
allowedScope: { type: AllowedScopeEnum, isOptional: false }
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
var AssistantCitationModel = defineSchemaModel({
|
|
53
|
+
name: "AssistantCitation",
|
|
54
|
+
description: "Citation referencing a KB snapshot + a specific item within it.",
|
|
55
|
+
fields: {
|
|
56
|
+
kbSnapshotId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
57
|
+
sourceType: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
58
|
+
sourceId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
59
|
+
title: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
60
|
+
excerpt: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
var AssistantAnswerSectionModel = defineSchemaModel({
|
|
64
|
+
name: "AssistantAnswerSection",
|
|
65
|
+
description: "Structured answer section.",
|
|
66
|
+
fields: {
|
|
67
|
+
heading: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
68
|
+
body: { type: ScalarTypeEnum.String_unsecure(), isOptional: false }
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
var AssistantAnswerIRModel = defineSchemaModel({
|
|
72
|
+
name: "AssistantAnswerIR",
|
|
73
|
+
description: "Structured assistant answer with mandatory citations and explicit locale/jurisdiction.",
|
|
74
|
+
fields: {
|
|
75
|
+
locale: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
76
|
+
jurisdiction: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
77
|
+
allowedScope: { type: AllowedScopeEnum, isOptional: false },
|
|
78
|
+
sections: {
|
|
79
|
+
type: AssistantAnswerSectionModel,
|
|
80
|
+
isArray: true,
|
|
81
|
+
isOptional: false
|
|
82
|
+
},
|
|
83
|
+
citations: {
|
|
84
|
+
type: AssistantCitationModel,
|
|
85
|
+
isArray: true,
|
|
86
|
+
isOptional: false
|
|
87
|
+
},
|
|
88
|
+
disclaimers: {
|
|
89
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
90
|
+
isArray: true,
|
|
91
|
+
isOptional: true
|
|
92
|
+
},
|
|
93
|
+
riskFlags: {
|
|
94
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
95
|
+
isArray: true,
|
|
96
|
+
isOptional: true
|
|
97
|
+
},
|
|
98
|
+
refused: { type: ScalarTypeEnum.Boolean(), isOptional: true },
|
|
99
|
+
refusalReason: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
// src/forms/assistant-context.form.ts
|
|
104
|
+
import { defineFormSpec } from "@contractspec/lib.contracts-spec/forms";
|
|
105
|
+
import {
|
|
106
|
+
OwnersEnum,
|
|
107
|
+
StabilityEnum,
|
|
108
|
+
TagsEnum
|
|
109
|
+
} from "@contractspec/lib.contracts-spec/ownership";
|
|
110
|
+
import { defineSchemaModel as defineSchemaModel2, ScalarTypeEnum as ScalarTypeEnum2 } from "@contractspec/lib.schema";
|
|
111
|
+
var AssistantContextFormModel = defineSchemaModel2({
|
|
112
|
+
name: "AssistantContextFormModel",
|
|
113
|
+
description: "Form values required before a policy-gated assistant request can be executed.",
|
|
114
|
+
fields: {
|
|
115
|
+
locale: { type: ScalarTypeEnum2.String_unsecure(), isOptional: false },
|
|
116
|
+
jurisdiction: { type: ScalarTypeEnum2.String_unsecure(), isOptional: false },
|
|
117
|
+
kbSnapshotId: { type: ScalarTypeEnum2.String_unsecure(), isOptional: false },
|
|
118
|
+
allowedScope: { type: AllowedScopeEnum, isOptional: false },
|
|
119
|
+
question: { type: ScalarTypeEnum2.String_unsecure(), isOptional: false }
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
var AssistantContextForm = defineFormSpec({
|
|
123
|
+
meta: {
|
|
124
|
+
key: "locale-jurisdiction-gate.form.assistant-context",
|
|
125
|
+
version: "1.0.0",
|
|
126
|
+
title: "Assistant Context Gate",
|
|
127
|
+
description: "Collects the explicit locale, jurisdiction, scope, and knowledge snapshot required by the assistant gate.",
|
|
128
|
+
domain: "assistant",
|
|
129
|
+
owners: [OwnersEnum.PlatformFinance],
|
|
130
|
+
tags: [TagsEnum.I18n, "assistant", "form", "policy"],
|
|
131
|
+
stability: StabilityEnum.Experimental
|
|
132
|
+
},
|
|
133
|
+
model: AssistantContextFormModel,
|
|
134
|
+
fields: [
|
|
135
|
+
{
|
|
136
|
+
kind: "select",
|
|
137
|
+
name: "locale",
|
|
138
|
+
labelI18n: "assistantGate.locale.label",
|
|
139
|
+
descriptionI18n: "assistantGate.locale.description",
|
|
140
|
+
options: {
|
|
141
|
+
kind: "static",
|
|
142
|
+
options: [
|
|
143
|
+
{ labelI18n: "assistantGate.locale.enUs", value: "en-US" },
|
|
144
|
+
{ labelI18n: "assistantGate.locale.enGb", value: "en-GB" },
|
|
145
|
+
{ labelI18n: "assistantGate.locale.frFr", value: "fr-FR" }
|
|
146
|
+
]
|
|
147
|
+
},
|
|
148
|
+
required: true
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
kind: "text",
|
|
152
|
+
name: "jurisdiction",
|
|
153
|
+
labelI18n: "assistantGate.jurisdiction.label",
|
|
154
|
+
placeholderI18n: "assistantGate.jurisdiction.placeholder",
|
|
155
|
+
required: true
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
kind: "text",
|
|
159
|
+
name: "kbSnapshotId",
|
|
160
|
+
labelI18n: "assistantGate.kbSnapshotId.label",
|
|
161
|
+
placeholderI18n: "assistantGate.kbSnapshotId.placeholder",
|
|
162
|
+
required: true
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
kind: "radio",
|
|
166
|
+
name: "allowedScope",
|
|
167
|
+
labelI18n: "assistantGate.allowedScope.label",
|
|
168
|
+
options: {
|
|
169
|
+
kind: "static",
|
|
170
|
+
options: [
|
|
171
|
+
{
|
|
172
|
+
labelI18n: "assistantGate.allowedScope.educationOnly",
|
|
173
|
+
value: "education_only"
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
labelI18n: "assistantGate.allowedScope.genericInfo",
|
|
177
|
+
value: "generic_info"
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
labelI18n: "assistantGate.allowedScope.escalationRequired",
|
|
181
|
+
value: "escalation_required"
|
|
182
|
+
}
|
|
183
|
+
]
|
|
184
|
+
},
|
|
185
|
+
required: true
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
kind: "textarea",
|
|
189
|
+
name: "question",
|
|
190
|
+
labelI18n: "assistantGate.question.label",
|
|
191
|
+
placeholderI18n: "assistantGate.question.placeholder",
|
|
192
|
+
required: true
|
|
193
|
+
}
|
|
194
|
+
],
|
|
195
|
+
actions: [
|
|
196
|
+
{
|
|
197
|
+
key: "submit",
|
|
198
|
+
labelI18n: "assistantGate.submit.label",
|
|
199
|
+
op: { name: "assistant.answer", version: "1.0.0" }
|
|
200
|
+
}
|
|
201
|
+
],
|
|
202
|
+
policy: {
|
|
203
|
+
flags: [],
|
|
204
|
+
pii: ["kbSnapshotId", "question"]
|
|
205
|
+
},
|
|
206
|
+
renderHints: {
|
|
207
|
+
ui: "custom",
|
|
208
|
+
form: "react-hook-form"
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
export {
|
|
212
|
+
AssistantContextForm
|
|
213
|
+
};
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
// src/entities/models.ts
|
|
2
|
+
import {
|
|
3
|
+
defineEnum,
|
|
4
|
+
defineSchemaModel,
|
|
5
|
+
ScalarTypeEnum
|
|
6
|
+
} from "@contractspec/lib.schema";
|
|
7
|
+
var AllowedScopeEnum = defineEnum("AllowedScope", [
|
|
8
|
+
"education_only",
|
|
9
|
+
"generic_info",
|
|
10
|
+
"escalation_required"
|
|
11
|
+
]);
|
|
12
|
+
var UserProfileModel = defineSchemaModel({
|
|
13
|
+
name: "UserProfile",
|
|
14
|
+
description: "User profile inputs used to derive regulatory context.",
|
|
15
|
+
fields: {
|
|
16
|
+
preferredLocale: {
|
|
17
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
18
|
+
isOptional: true
|
|
19
|
+
},
|
|
20
|
+
residencyCountry: {
|
|
21
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
22
|
+
isOptional: true
|
|
23
|
+
},
|
|
24
|
+
taxResidenceCountry: {
|
|
25
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
26
|
+
isOptional: true
|
|
27
|
+
},
|
|
28
|
+
clientType: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
var RegulatoryContextModel = defineSchemaModel({
|
|
32
|
+
name: "RegulatoryContext",
|
|
33
|
+
description: "Explicit regulatory context (no guessing).",
|
|
34
|
+
fields: {
|
|
35
|
+
jurisdiction: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
36
|
+
region: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
37
|
+
clientType: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
38
|
+
allowedScope: { type: AllowedScopeEnum, isOptional: false }
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
var LLMCallEnvelopeModel = defineSchemaModel({
|
|
42
|
+
name: "LLMCallEnvelope",
|
|
43
|
+
description: "Mandatory envelope for assistant calls. All fields are explicit and required for policy gating.",
|
|
44
|
+
fields: {
|
|
45
|
+
traceId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
46
|
+
locale: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
47
|
+
regulatoryContext: { type: RegulatoryContextModel, isOptional: false },
|
|
48
|
+
kbSnapshotId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
49
|
+
allowedScope: { type: AllowedScopeEnum, isOptional: false }
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
var AssistantCitationModel = defineSchemaModel({
|
|
53
|
+
name: "AssistantCitation",
|
|
54
|
+
description: "Citation referencing a KB snapshot + a specific item within it.",
|
|
55
|
+
fields: {
|
|
56
|
+
kbSnapshotId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
57
|
+
sourceType: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
58
|
+
sourceId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
59
|
+
title: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
60
|
+
excerpt: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
var AssistantAnswerSectionModel = defineSchemaModel({
|
|
64
|
+
name: "AssistantAnswerSection",
|
|
65
|
+
description: "Structured answer section.",
|
|
66
|
+
fields: {
|
|
67
|
+
heading: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
68
|
+
body: { type: ScalarTypeEnum.String_unsecure(), isOptional: false }
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
var AssistantAnswerIRModel = defineSchemaModel({
|
|
72
|
+
name: "AssistantAnswerIR",
|
|
73
|
+
description: "Structured assistant answer with mandatory citations and explicit locale/jurisdiction.",
|
|
74
|
+
fields: {
|
|
75
|
+
locale: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
76
|
+
jurisdiction: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
77
|
+
allowedScope: { type: AllowedScopeEnum, isOptional: false },
|
|
78
|
+
sections: {
|
|
79
|
+
type: AssistantAnswerSectionModel,
|
|
80
|
+
isArray: true,
|
|
81
|
+
isOptional: false
|
|
82
|
+
},
|
|
83
|
+
citations: {
|
|
84
|
+
type: AssistantCitationModel,
|
|
85
|
+
isArray: true,
|
|
86
|
+
isOptional: false
|
|
87
|
+
},
|
|
88
|
+
disclaimers: {
|
|
89
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
90
|
+
isArray: true,
|
|
91
|
+
isOptional: true
|
|
92
|
+
},
|
|
93
|
+
riskFlags: {
|
|
94
|
+
type: ScalarTypeEnum.String_unsecure(),
|
|
95
|
+
isArray: true,
|
|
96
|
+
isOptional: true
|
|
97
|
+
},
|
|
98
|
+
refused: { type: ScalarTypeEnum.Boolean(), isOptional: true },
|
|
99
|
+
refusalReason: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
// src/forms/assistant-context.form.ts
|
|
104
|
+
import { defineFormSpec } from "@contractspec/lib.contracts-spec/forms";
|
|
105
|
+
import {
|
|
106
|
+
OwnersEnum,
|
|
107
|
+
StabilityEnum,
|
|
108
|
+
TagsEnum
|
|
109
|
+
} from "@contractspec/lib.contracts-spec/ownership";
|
|
110
|
+
import { defineSchemaModel as defineSchemaModel2, ScalarTypeEnum as ScalarTypeEnum2 } from "@contractspec/lib.schema";
|
|
111
|
+
var AssistantContextFormModel = defineSchemaModel2({
|
|
112
|
+
name: "AssistantContextFormModel",
|
|
113
|
+
description: "Form values required before a policy-gated assistant request can be executed.",
|
|
114
|
+
fields: {
|
|
115
|
+
locale: { type: ScalarTypeEnum2.String_unsecure(), isOptional: false },
|
|
116
|
+
jurisdiction: { type: ScalarTypeEnum2.String_unsecure(), isOptional: false },
|
|
117
|
+
kbSnapshotId: { type: ScalarTypeEnum2.String_unsecure(), isOptional: false },
|
|
118
|
+
allowedScope: { type: AllowedScopeEnum, isOptional: false },
|
|
119
|
+
question: { type: ScalarTypeEnum2.String_unsecure(), isOptional: false }
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
var AssistantContextForm = defineFormSpec({
|
|
123
|
+
meta: {
|
|
124
|
+
key: "locale-jurisdiction-gate.form.assistant-context",
|
|
125
|
+
version: "1.0.0",
|
|
126
|
+
title: "Assistant Context Gate",
|
|
127
|
+
description: "Collects the explicit locale, jurisdiction, scope, and knowledge snapshot required by the assistant gate.",
|
|
128
|
+
domain: "assistant",
|
|
129
|
+
owners: [OwnersEnum.PlatformFinance],
|
|
130
|
+
tags: [TagsEnum.I18n, "assistant", "form", "policy"],
|
|
131
|
+
stability: StabilityEnum.Experimental
|
|
132
|
+
},
|
|
133
|
+
model: AssistantContextFormModel,
|
|
134
|
+
fields: [
|
|
135
|
+
{
|
|
136
|
+
kind: "select",
|
|
137
|
+
name: "locale",
|
|
138
|
+
labelI18n: "assistantGate.locale.label",
|
|
139
|
+
descriptionI18n: "assistantGate.locale.description",
|
|
140
|
+
options: {
|
|
141
|
+
kind: "static",
|
|
142
|
+
options: [
|
|
143
|
+
{ labelI18n: "assistantGate.locale.enUs", value: "en-US" },
|
|
144
|
+
{ labelI18n: "assistantGate.locale.enGb", value: "en-GB" },
|
|
145
|
+
{ labelI18n: "assistantGate.locale.frFr", value: "fr-FR" }
|
|
146
|
+
]
|
|
147
|
+
},
|
|
148
|
+
required: true
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
kind: "text",
|
|
152
|
+
name: "jurisdiction",
|
|
153
|
+
labelI18n: "assistantGate.jurisdiction.label",
|
|
154
|
+
placeholderI18n: "assistantGate.jurisdiction.placeholder",
|
|
155
|
+
required: true
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
kind: "text",
|
|
159
|
+
name: "kbSnapshotId",
|
|
160
|
+
labelI18n: "assistantGate.kbSnapshotId.label",
|
|
161
|
+
placeholderI18n: "assistantGate.kbSnapshotId.placeholder",
|
|
162
|
+
required: true
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
kind: "radio",
|
|
166
|
+
name: "allowedScope",
|
|
167
|
+
labelI18n: "assistantGate.allowedScope.label",
|
|
168
|
+
options: {
|
|
169
|
+
kind: "static",
|
|
170
|
+
options: [
|
|
171
|
+
{
|
|
172
|
+
labelI18n: "assistantGate.allowedScope.educationOnly",
|
|
173
|
+
value: "education_only"
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
labelI18n: "assistantGate.allowedScope.genericInfo",
|
|
177
|
+
value: "generic_info"
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
labelI18n: "assistantGate.allowedScope.escalationRequired",
|
|
181
|
+
value: "escalation_required"
|
|
182
|
+
}
|
|
183
|
+
]
|
|
184
|
+
},
|
|
185
|
+
required: true
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
kind: "textarea",
|
|
189
|
+
name: "question",
|
|
190
|
+
labelI18n: "assistantGate.question.label",
|
|
191
|
+
placeholderI18n: "assistantGate.question.placeholder",
|
|
192
|
+
required: true
|
|
193
|
+
}
|
|
194
|
+
],
|
|
195
|
+
actions: [
|
|
196
|
+
{
|
|
197
|
+
key: "submit",
|
|
198
|
+
labelI18n: "assistantGate.submit.label",
|
|
199
|
+
op: { name: "assistant.answer", version: "1.0.0" }
|
|
200
|
+
}
|
|
201
|
+
],
|
|
202
|
+
policy: {
|
|
203
|
+
flags: [],
|
|
204
|
+
pii: ["kbSnapshotId", "question"]
|
|
205
|
+
},
|
|
206
|
+
renderHints: {
|
|
207
|
+
ui: "custom",
|
|
208
|
+
form: "react-hook-form"
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
export {
|
|
212
|
+
AssistantContextForm
|
|
213
|
+
};
|