@lssm/example.locale-jurisdiction-gate 0.0.0-canary-20251217083314 → 1.41.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.
Files changed (155) hide show
  1. package/.turbo/turbo-build.log +26 -43
  2. package/dist/contracts/assistant.js +1 -117
  3. package/dist/contracts/index.js +1 -3
  4. package/dist/docs/index.js +1 -1
  5. package/dist/docs/locale-jurisdiction-gate.docblock.js +3 -37
  6. package/dist/entities/index.js +1 -3
  7. package/dist/entities/models.js +1 -170
  8. package/dist/events.js +1 -102
  9. package/dist/example.js +1 -39
  10. package/dist/handlers/demo.handlers.js +1 -85
  11. package/dist/handlers/index.js +1 -3
  12. package/dist/index.js +1 -12
  13. package/dist/locale-jurisdiction-gate.feature.js +1 -49
  14. package/dist/policy/guard.js +2 -72
  15. package/dist/policy/index.js +1 -3
  16. package/package.json +20 -22
  17. package/tsconfig.tsbuildinfo +1 -1
  18. package/.turbo/turbo-build$colon$bundle.log +0 -232
  19. package/CHANGELOG.md +0 -13
  20. package/dist/contracts/assistant.d.ts +0 -244
  21. package/dist/contracts/index.d.ts +0 -2
  22. package/dist/docs/index.d.ts +0 -1
  23. package/dist/docs/locale-jurisdiction-gate.docblock.d.ts +0 -1
  24. package/dist/entities/index.d.ts +0 -2
  25. package/dist/entities/models.d.ts +0 -185
  26. package/dist/events.d.ts +0 -68
  27. package/dist/example.d.ts +0 -35
  28. package/dist/handlers/demo.handlers.d.ts +0 -58
  29. package/dist/handlers/index.d.ts +0 -2
  30. package/dist/index.d.ts +0 -9
  31. package/dist/libs/contracts/dist/capabilities/openbanking.js +0 -88
  32. package/dist/libs/contracts/dist/client/index.js +0 -5
  33. package/dist/libs/contracts/dist/client/react/feature-render.js +0 -2
  34. package/dist/libs/contracts/dist/client/react/form-render.js +0 -4
  35. package/dist/libs/contracts/dist/client/react/index.js +0 -4
  36. package/dist/libs/contracts/dist/contract-registry/index.js +0 -1
  37. package/dist/libs/contracts/dist/contract-registry/schemas.js +0 -60
  38. package/dist/libs/contracts/dist/docs/PUBLISHING.docblock.js +0 -16
  39. package/dist/libs/contracts/dist/docs/accessibility_wcag_compliance_specs.docblock.js +0 -16
  40. package/dist/libs/contracts/dist/docs/index.js +0 -29
  41. package/dist/libs/contracts/dist/docs/presentations.js +0 -71
  42. package/dist/libs/contracts/dist/docs/registry.js +0 -44
  43. package/dist/libs/contracts/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js +0 -16
  44. package/dist/libs/contracts/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +0 -16
  45. package/dist/libs/contracts/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +0 -16
  46. package/dist/libs/contracts/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +0 -16
  47. package/dist/libs/contracts/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +0 -16
  48. package/dist/libs/contracts/dist/docs/tech/auth/better-auth-nextjs.docblock.js +0 -80
  49. package/dist/libs/contracts/dist/docs/tech/contracts/openapi-export.docblock.js +0 -57
  50. package/dist/libs/contracts/dist/docs/tech/lifecycle-stage-system.docblock.js +0 -16
  51. package/dist/libs/contracts/dist/docs/tech/llm/llm-integration.docblock.js +0 -357
  52. package/dist/libs/contracts/dist/docs/tech/mcp-endpoints.docblock.js +0 -37
  53. package/dist/libs/contracts/dist/docs/tech/presentation-runtime.docblock.js +0 -16
  54. package/dist/libs/contracts/dist/docs/tech/schema/README.docblock.js +0 -20
  55. package/dist/libs/contracts/dist/docs/tech/studio/learning-events.docblock.js +0 -48
  56. package/dist/libs/contracts/dist/docs/tech/studio/learning-journeys.docblock.js +0 -79
  57. package/dist/libs/contracts/dist/docs/tech/studio/platform-admin-panel.docblock.js +0 -84
  58. package/dist/libs/contracts/dist/docs/tech/studio/project-access-teams.docblock.js +0 -45
  59. package/dist/libs/contracts/dist/docs/tech/studio/project-routing.docblock.js +0 -67
  60. package/dist/libs/contracts/dist/docs/tech/studio/sandbox-unlogged.docblock.js +0 -40
  61. package/dist/libs/contracts/dist/docs/tech/studio/team-invitations.docblock.js +0 -69
  62. package/dist/libs/contracts/dist/docs/tech/studio/workspace-ops.docblock.js +0 -47
  63. package/dist/libs/contracts/dist/docs/tech/studio/workspaces.docblock.js +0 -62
  64. package/dist/libs/contracts/dist/docs/tech/telemetry-ingest.docblock.js +0 -155
  65. package/dist/libs/contracts/dist/docs/tech/templates/runtime.docblock.js +0 -20
  66. package/dist/libs/contracts/dist/docs/tech/vscode-extension.docblock.js +0 -101
  67. package/dist/libs/contracts/dist/docs/tech/workflows/overview.docblock.js +0 -20
  68. package/dist/libs/contracts/dist/events.js +0 -10
  69. package/dist/libs/contracts/dist/experiments/evaluator.js +0 -1
  70. package/dist/libs/contracts/dist/index.js +0 -71
  71. package/dist/libs/contracts/dist/install.js +0 -2
  72. package/dist/libs/contracts/dist/integrations/contracts.js +0 -377
  73. package/dist/libs/contracts/dist/integrations/index.js +0 -18
  74. package/dist/libs/contracts/dist/integrations/openbanking/contracts/accounts.js +0 -228
  75. package/dist/libs/contracts/dist/integrations/openbanking/contracts/balances.js +0 -159
  76. package/dist/libs/contracts/dist/integrations/openbanking/contracts/index.js +0 -3
  77. package/dist/libs/contracts/dist/integrations/openbanking/contracts/transactions.js +0 -210
  78. package/dist/libs/contracts/dist/integrations/openbanking/models.js +0 -242
  79. package/dist/libs/contracts/dist/integrations/openbanking/telemetry.js +0 -13
  80. package/dist/libs/contracts/dist/integrations/providers/elevenlabs.js +0 -52
  81. package/dist/libs/contracts/dist/integrations/providers/gcs-storage.js +0 -75
  82. package/dist/libs/contracts/dist/integrations/providers/gmail.js +0 -87
  83. package/dist/libs/contracts/dist/integrations/providers/google-calendar.js +0 -66
  84. package/dist/libs/contracts/dist/integrations/providers/index.js +0 -11
  85. package/dist/libs/contracts/dist/integrations/providers/mistral.js +0 -68
  86. package/dist/libs/contracts/dist/integrations/providers/postmark.js +0 -68
  87. package/dist/libs/contracts/dist/integrations/providers/powens.js +0 -116
  88. package/dist/libs/contracts/dist/integrations/providers/qdrant.js +0 -73
  89. package/dist/libs/contracts/dist/integrations/providers/registry.js +0 -10
  90. package/dist/libs/contracts/dist/integrations/providers/stripe.js +0 -83
  91. package/dist/libs/contracts/dist/integrations/providers/twilio-sms.js +0 -61
  92. package/dist/libs/contracts/dist/jsonschema.js +0 -1
  93. package/dist/libs/contracts/dist/knowledge/contracts.js +0 -306
  94. package/dist/libs/contracts/dist/knowledge/index.js +0 -7
  95. package/dist/libs/contracts/dist/knowledge/spaces/email-threads.js +0 -34
  96. package/dist/libs/contracts/dist/knowledge/spaces/financial-docs.js +0 -34
  97. package/dist/libs/contracts/dist/knowledge/spaces/financial-overview.js +0 -38
  98. package/dist/libs/contracts/dist/knowledge/spaces/index.js +0 -6
  99. package/dist/libs/contracts/dist/knowledge/spaces/product-canon.js +0 -34
  100. package/dist/libs/contracts/dist/knowledge/spaces/support-faq.js +0 -37
  101. package/dist/libs/contracts/dist/knowledge/spaces/uploaded-docs.js +0 -34
  102. package/dist/libs/contracts/dist/llm/exporters.js +0 -19
  103. package/dist/libs/contracts/dist/llm/index.js +0 -2
  104. package/dist/libs/contracts/dist/llm/prompts.js +0 -1
  105. package/dist/libs/contracts/dist/onboarding-base.js +0 -196
  106. package/dist/libs/contracts/dist/openapi.js +0 -1
  107. package/dist/libs/contracts/dist/ownership.js +0 -21
  108. package/dist/libs/contracts/dist/presentations.js +0 -1
  109. package/dist/libs/contracts/dist/presentations.v2.js +0 -11
  110. package/dist/libs/contracts/dist/prompt.js +0 -1
  111. package/dist/libs/contracts/dist/promptRegistry.js +0 -1
  112. package/dist/libs/contracts/dist/regenerator/index.js +0 -1
  113. package/dist/libs/contracts/dist/regenerator/service.js +0 -6
  114. package/dist/libs/contracts/dist/registry.js +0 -2
  115. package/dist/libs/contracts/dist/resources.js +0 -1
  116. package/dist/libs/contracts/dist/schema/dist/EnumType.js +0 -2
  117. package/dist/libs/contracts/dist/schema/dist/FieldType.js +0 -49
  118. package/dist/libs/contracts/dist/schema/dist/ScalarTypeEnum.js +0 -236
  119. package/dist/libs/contracts/dist/schema/dist/SchemaModel.js +0 -39
  120. package/dist/libs/contracts/dist/schema/dist/entity/defineEntity.js +0 -1
  121. package/dist/libs/contracts/dist/schema/dist/entity/index.js +0 -2
  122. package/dist/libs/contracts/dist/schema/dist/entity/types.js +0 -1
  123. package/dist/libs/contracts/dist/schema/dist/index.js +0 -6
  124. package/dist/libs/contracts/dist/server/graphql-pothos.js +0 -6
  125. package/dist/libs/contracts/dist/server/index.js +0 -8
  126. package/dist/libs/contracts/dist/server/mcp/createMcpServer.js +0 -4
  127. package/dist/libs/contracts/dist/server/mcp/registerPresentations.js +0 -2
  128. package/dist/libs/contracts/dist/server/mcp/registerPrompts.js +0 -1
  129. package/dist/libs/contracts/dist/server/mcp/registerResources.js +0 -2
  130. package/dist/libs/contracts/dist/server/mcp/registerTools.js +0 -1
  131. package/dist/libs/contracts/dist/server/provider-mcp.js +0 -1
  132. package/dist/libs/contracts/dist/server/rest-elysia.js +0 -1
  133. package/dist/libs/contracts/dist/server/rest-express.js +0 -1
  134. package/dist/libs/contracts/dist/server/rest-generic.js +0 -1
  135. package/dist/libs/contracts/dist/server/rest-next-app.js +0 -1
  136. package/dist/libs/contracts/dist/server/rest-next-pages.js +0 -1
  137. package/dist/libs/contracts/dist/spec.js +0 -34
  138. package/dist/libs/contracts/dist/telemetry/index.js +0 -1
  139. package/dist/libs/contracts/dist/telemetry/tracker.js +0 -1
  140. package/dist/libs/contracts/dist/tests/index.js +0 -1
  141. package/dist/libs/contracts/dist/tests/runner.js +0 -2
  142. package/dist/libs/contracts/dist/workflow/index.js +0 -1
  143. package/dist/libs/contracts/dist/workflow/runner.js +0 -1
  144. package/dist/libs/schema/dist/EnumType.js +0 -56
  145. package/dist/libs/schema/dist/FieldType.js +0 -49
  146. package/dist/libs/schema/dist/ScalarTypeEnum.js +0 -236
  147. package/dist/libs/schema/dist/SchemaModel.js +0 -39
  148. package/dist/libs/schema/dist/entity/defineEntity.js +0 -1
  149. package/dist/libs/schema/dist/entity/index.js +0 -2
  150. package/dist/libs/schema/dist/entity/types.js +0 -1
  151. package/dist/libs/schema/dist/index.js +0 -6
  152. package/dist/locale-jurisdiction-gate.feature.d.ts +0 -6
  153. package/dist/policy/guard.d.ts +0 -26
  154. package/dist/policy/index.d.ts +0 -3
  155. package/dist/policy/types.d.ts +0 -15
@@ -1,43 +1,26 @@
1
-
2
- $ bun build:bundle && bun build:types
3
- $ tsdown
4
- ℹ tsdown v0.17.4 powered by rolldown v1.0.0-beta.53
5
- ℹ config file: /Users/tboutron/Documents/clients/lssm/monorepo-lssm/packages/contractspec/packages/examples/locale-jurisdiction-gate/tsdown.config.js (unrun)
6
- ℹ entry: src/events.ts, src/example.ts, src/index.ts, src/locale-jurisdiction-gate.feature.ts, src/contracts/assistant.ts, src/contracts/index.ts, src/docs/index.ts, src/docs/locale-jurisdiction-gate.docblock.ts, src/entities/index.ts, src/entities/models.ts, src/handlers/demo.handlers.ts, src/handlers/index.ts, src/policy/guard.ts, src/policy/index.ts, src/policy/types.ts
7
- ℹ target: esnext
8
- ℹ tsconfig: tsconfig.json
9
- ℹ Build start
10
- ℹ Cleaning 20 files
11
- ℹ dist/entities/models.js 2.50 kB │ gzip: 0.74 kB
12
- ℹ dist/contracts/assistant.js 2.34 kB │ gzip: 0.93 kB
13
- ℹ dist/events.js 1.69 kB │ gzip: 0.48 kB
14
- ℹ dist/handlers/demo.handlers.js 1.55 kB │ gzip: 0.69 kB
15
- ℹ dist/docs/locale-jurisdiction-gate.docblock.js 1.40 kB │ gzip: 0.67 kB
16
- ℹ dist/index.js 1.34 kB │ gzip: 0.47 kB
17
- ℹ dist/policy/guard.js 1.18 kB │ gzip: 0.61 kB
18
- ℹ dist/locale-jurisdiction-gate.feature.js 0.72 kB │ gzip: 0.36 kB
19
- ℹ dist/example.js 0.67 kB │ gzip: 0.40 kB
20
- ℹ dist/entities/index.js 0.41 kB │ gzip: 0.19 kB
21
- ℹ dist/policy/index.js 0.17 kB │ gzip: 0.12 kB
22
- ℹ dist/contracts/index.js 0.17 kB │ gzip: 0.11 kB
23
- ℹ dist/handlers/index.js 0.11 kB │ gzip: 0.09 kB
24
- ℹ dist/docs/index.js 0.05 kB │ gzip: 0.07 kB
25
- ℹ dist/policy/types.js 0.00 kB │ gzip: 0.02 kB
26
- ℹ dist/contracts/assistant.d.ts 6.67 kB │ gzip: 0.60 kB
27
- ℹ dist/entities/models.d.ts 5.05 kB │ gzip: 0.65 kB
28
- ℹ dist/events.d.ts 1.99 kB │ gzip: 0.36 kB
29
- ℹ dist/handlers/demo.handlers.d.ts 1.43 kB │ gzip: 0.53 kB
30
- ℹ dist/index.d.ts 1.37 kB │ gzip: 0.41 kB
31
- ℹ dist/example.d.ts 1.16 kB │ gzip: 0.47 kB
32
- ℹ dist/policy/guard.d.ts 0.89 kB │ gzip: 0.40 kB
33
- ℹ dist/policy/types.d.ts 0.42 kB │ gzip: 0.29 kB
34
- ℹ dist/entities/index.d.ts 0.36 kB │ gzip: 0.16 kB
35
- ℹ dist/policy/index.d.ts 0.26 kB │ gzip: 0.14 kB
36
- ℹ dist/locale-jurisdiction-gate.feature.d.ts 0.23 kB │ gzip: 0.16 kB
37
- ℹ dist/contracts/index.d.ts 0.16 kB │ gzip: 0.10 kB
38
- ℹ dist/handlers/index.d.ts 0.15 kB │ gzip: 0.09 kB
39
- ℹ dist/docs/index.d.ts 0.01 kB │ gzip: 0.03 kB
40
- ℹ dist/docs/locale-jurisdiction-gate.docblock.d.ts 0.01 kB │ gzip: 0.03 kB
41
- ℹ 30 files, total: 34.46 kB
42
- ✔ Build complete in 8621ms
43
- $ tsc --noEmit
1
+ $ bun build:bundle && bun build:types
2
+ $ tsdown
3
+ ℹ tsdown v0.17.4 powered by rolldown v1.0.0-beta.53
4
+ ℹ config file: /home/runner/work/contractspec/contractspec/packages/examples/locale-jurisdiction-gate/tsdown.config.js
5
+ ℹ entry: src/events.ts, src/example.ts, src/index.ts, src/locale-jurisdiction-gate.feature.ts, src/contracts/assistant.ts, src/contracts/index.ts, src/docs/index.ts, src/docs/locale-jurisdiction-gate.docblock.ts, src/entities/index.ts, src/entities/models.ts, src/handlers/demo.handlers.ts, src/handlers/index.ts, src/policy/guard.ts, src/policy/index.ts, src/policy/types.ts
6
+ ℹ target: esnext
7
+ ℹ tsconfig: tsconfig.json
8
+ ℹ Build start
9
+ ℹ dist/entities/models.js 2.50 kB │ gzip: 0.74 kB
10
+ ℹ dist/contracts/assistant.js 2.34 kB │ gzip: 0.93 kB
11
+ ℹ dist/events.js 1.69 kB │ gzip: 0.48 kB
12
+ ℹ dist/handlers/demo.handlers.js 1.55 kB │ gzip: 0.69 kB
13
+ ℹ dist/docs/locale-jurisdiction-gate.docblock.js 1.40 kB │ gzip: 0.67 kB
14
+ ℹ dist/index.js 1.34 kB │ gzip: 0.47 kB
15
+ ℹ dist/policy/guard.js 1.18 kB │ gzip: 0.61 kB
16
+ ℹ dist/locale-jurisdiction-gate.feature.js 0.72 kB │ gzip: 0.36 kB
17
+ ℹ dist/example.js 0.67 kB │ gzip: 0.40 kB
18
+ ℹ dist/entities/index.js 0.41 kB │ gzip: 0.19 kB
19
+ ℹ dist/policy/index.js 0.17 kB │ gzip: 0.12 kB
20
+ ℹ dist/contracts/index.js 0.17 kB │ gzip: 0.11 kB
21
+ ℹ dist/handlers/index.js 0.11 kB │ gzip: 0.09 kB
22
+ ℹ dist/docs/index.js 0.05 kB │ gzip: 0.07 kB
23
+ ℹ dist/policy/types.js 0.00 kB │ gzip: 0.02 kB
24
+ ℹ 15 files, total: 14.30 kB
25
+ ✔ Build complete in 81ms
26
+ $ tsc --noEmit
@@ -1,117 +1 @@
1
- import { defineCommand } from "../libs/contracts/dist/spec.js";
2
- import "../libs/contracts/dist/index.js";
3
- import { ScalarTypeEnum } from "../libs/schema/dist/ScalarTypeEnum.js";
4
- import { defineSchemaModel } from "../libs/schema/dist/SchemaModel.js";
5
- import "../libs/schema/dist/index.js";
6
- import { AssistantAnswerIRModel, LLMCallEnvelopeModel } from "../entities/models.js";
7
-
8
- //#region src/contracts/assistant.ts
9
- const AssistantQuestionInput = defineSchemaModel({
10
- name: "AssistantQuestionInput",
11
- description: "Input for assistant calls with mandatory envelope.",
12
- fields: {
13
- envelope: {
14
- type: LLMCallEnvelopeModel,
15
- isOptional: false
16
- },
17
- question: {
18
- type: ScalarTypeEnum.String_unsecure(),
19
- isOptional: false
20
- }
21
- }
22
- });
23
- const AssistantConceptInput = defineSchemaModel({
24
- name: "AssistantConceptInput",
25
- description: "Input for explaining a concept with mandatory envelope.",
26
- fields: {
27
- envelope: {
28
- type: LLMCallEnvelopeModel,
29
- isOptional: false
30
- },
31
- conceptKey: {
32
- type: ScalarTypeEnum.String_unsecure(),
33
- isOptional: false
34
- }
35
- }
36
- });
37
- const AssistantAnswerContract = defineCommand({
38
- meta: {
39
- name: "assistant.answer",
40
- version: 1,
41
- stability: "experimental",
42
- owners: ["examples"],
43
- tags: [
44
- "assistant",
45
- "policy",
46
- "locale",
47
- "jurisdiction",
48
- "knowledge"
49
- ],
50
- description: "Answer a user question using a KB snapshot with strict locale/jurisdiction gating.",
51
- goal: "Provide policy-safe answers that cite a KB snapshot or refuse.",
52
- context: "Called by UI or workflows; must fail-closed if envelope is invalid or citations are missing."
53
- },
54
- io: {
55
- input: AssistantQuestionInput,
56
- output: AssistantAnswerIRModel,
57
- errors: {
58
- LOCALE_REQUIRED: {
59
- description: "Locale is required and must be supported",
60
- http: 400,
61
- gqlCode: "LOCALE_REQUIRED",
62
- when: "locale is missing or unsupported"
63
- },
64
- JURISDICTION_REQUIRED: {
65
- description: "Jurisdiction is required",
66
- http: 400,
67
- gqlCode: "JURISDICTION_REQUIRED",
68
- when: "jurisdiction is missing"
69
- },
70
- KB_SNAPSHOT_REQUIRED: {
71
- description: "KB snapshot id is required",
72
- http: 400,
73
- gqlCode: "KB_SNAPSHOT_REQUIRED",
74
- when: "kbSnapshotId is missing"
75
- },
76
- CITATIONS_REQUIRED: {
77
- description: "Answers must include citations to a KB snapshot",
78
- http: 422,
79
- gqlCode: "CITATIONS_REQUIRED",
80
- when: "answer has no citations"
81
- },
82
- SCOPE_VIOLATION: {
83
- description: "Answer violates allowed scope and must be refused/escalated",
84
- http: 403,
85
- gqlCode: "SCOPE_VIOLATION",
86
- when: "output includes forbidden content under the given allowedScope"
87
- }
88
- }
89
- },
90
- policy: { auth: "user" }
91
- });
92
- const AssistantExplainConceptContract = defineCommand({
93
- meta: {
94
- name: "assistant.explainConcept",
95
- version: 1,
96
- stability: "experimental",
97
- owners: ["examples"],
98
- tags: [
99
- "assistant",
100
- "policy",
101
- "knowledge",
102
- "concepts"
103
- ],
104
- description: "Explain a concept using a KB snapshot with strict locale/jurisdiction gating.",
105
- goal: "Explain concepts with citations or refuse.",
106
- context: "Same constraints as assistant.answer."
107
- },
108
- io: {
109
- input: AssistantConceptInput,
110
- output: AssistantAnswerIRModel,
111
- errors: AssistantAnswerContract.io.errors
112
- },
113
- policy: { auth: "user" }
114
- });
115
-
116
- //#endregion
117
- export { AssistantAnswerContract, AssistantExplainConceptContract };
1
+ import{AssistantAnswerIRModel as e,LLMCallEnvelopeModel as t}from"../entities/models.js";import{defineCommand as n}from"@lssm/lib.contracts";import{ScalarTypeEnum as r,defineSchemaModel as i}from"@lssm/lib.schema";const a=i({name:`AssistantQuestionInput`,description:`Input for assistant calls with mandatory envelope.`,fields:{envelope:{type:t,isOptional:!1},question:{type:r.String_unsecure(),isOptional:!1}}}),o=i({name:`AssistantConceptInput`,description:`Input for explaining a concept with mandatory envelope.`,fields:{envelope:{type:t,isOptional:!1},conceptKey:{type:r.String_unsecure(),isOptional:!1}}}),s=n({meta:{name:`assistant.answer`,version:1,stability:`experimental`,owners:[`examples`],tags:[`assistant`,`policy`,`locale`,`jurisdiction`,`knowledge`],description:`Answer a user question using a KB snapshot with strict locale/jurisdiction gating.`,goal:`Provide policy-safe answers that cite a KB snapshot or refuse.`,context:`Called by UI or workflows; must fail-closed if envelope is invalid or citations are missing.`},io:{input:a,output:e,errors:{LOCALE_REQUIRED:{description:`Locale is required and must be supported`,http:400,gqlCode:`LOCALE_REQUIRED`,when:`locale is missing or unsupported`},JURISDICTION_REQUIRED:{description:`Jurisdiction is required`,http:400,gqlCode:`JURISDICTION_REQUIRED`,when:`jurisdiction is missing`},KB_SNAPSHOT_REQUIRED:{description:`KB snapshot id is required`,http:400,gqlCode:`KB_SNAPSHOT_REQUIRED`,when:`kbSnapshotId is missing`},CITATIONS_REQUIRED:{description:`Answers must include citations to a KB snapshot`,http:422,gqlCode:`CITATIONS_REQUIRED`,when:`answer has no citations`},SCOPE_VIOLATION:{description:`Answer violates allowed scope and must be refused/escalated`,http:403,gqlCode:`SCOPE_VIOLATION`,when:`output includes forbidden content under the given allowedScope`}}},policy:{auth:`user`}}),c=n({meta:{name:`assistant.explainConcept`,version:1,stability:`experimental`,owners:[`examples`],tags:[`assistant`,`policy`,`knowledge`,`concepts`],description:`Explain a concept using a KB snapshot with strict locale/jurisdiction gating.`,goal:`Explain concepts with citations or refuse.`,context:`Same constraints as assistant.answer.`},io:{input:o,output:e,errors:s.io.errors},policy:{auth:`user`}});export{s as AssistantAnswerContract,c as AssistantExplainConceptContract};
@@ -1,3 +1 @@
1
- import { AssistantAnswerContract, AssistantExplainConceptContract } from "./assistant.js";
2
-
3
- export { AssistantAnswerContract, AssistantExplainConceptContract };
1
+ import{AssistantAnswerContract as e,AssistantExplainConceptContract as t}from"./assistant.js";export{e as AssistantAnswerContract,t as AssistantExplainConceptContract};
@@ -1 +1 @@
1
- import "./locale-jurisdiction-gate.docblock.js";
1
+ import"./locale-jurisdiction-gate.docblock.js";
@@ -1,42 +1,11 @@
1
- import { registerDocBlocks } from "../libs/contracts/dist/docs/registry.js";
2
- import "../libs/contracts/dist/docs/index.js";
3
-
4
- //#region src/docs/locale-jurisdiction-gate.docblock.ts
5
- registerDocBlocks([{
6
- id: "docs.examples.locale-jurisdiction-gate.goal",
7
- title: "Locale/Jurisdiction Gate — Goal",
8
- summary: "Fail-closed gate that forces locale + jurisdiction + kbSnapshotId + allowedScope for assistant calls.",
9
- kind: "goal",
10
- visibility: "public",
11
- route: "/docs/examples/locale-jurisdiction-gate/goal",
12
- tags: [
13
- "assistant",
14
- "policy",
15
- "locale",
16
- "jurisdiction",
17
- "knowledge"
18
- ],
19
- body: `## Why it matters
1
+ import{registerDocBlocks as e}from"@lssm/lib.contracts/docs";e([{id:`docs.examples.locale-jurisdiction-gate.goal`,title:`Locale/Jurisdiction Gate — Goal`,summary:`Fail-closed gate that forces locale + jurisdiction + kbSnapshotId + allowedScope for assistant calls.`,kind:`goal`,visibility:`public`,route:`/docs/examples/locale-jurisdiction-gate/goal`,tags:[`assistant`,`policy`,`locale`,`jurisdiction`,`knowledge`],body:`## Why it matters
20
2
  - Forces all assistant behavior to be bound to explicit inputs (no guessing).
21
3
  - Requires KB snapshot citations to make answers traceable and regenerable.
22
4
 
23
5
  ## Guardrails
24
6
  - Missing locale/jurisdiction/snapshot/scope => refuse (structured).
25
7
  - Missing citations => refuse.
26
- - Scope violations under education_only => refuse/escalate.`
27
- }, {
28
- id: "docs.examples.locale-jurisdiction-gate.reference",
29
- title: "Locale/Jurisdiction Gate — Reference",
30
- summary: "Contracts, models, and events exposed by the gate example.",
31
- kind: "reference",
32
- visibility: "public",
33
- route: "/docs/examples/locale-jurisdiction-gate",
34
- tags: [
35
- "assistant",
36
- "policy",
37
- "reference"
38
- ],
39
- body: `## Contracts
8
+ - Scope violations under education_only => refuse/escalate.`},{id:`docs.examples.locale-jurisdiction-gate.reference`,title:`Locale/Jurisdiction Gate — Reference`,summary:`Contracts, models, and events exposed by the gate example.`,kind:`reference`,visibility:`public`,route:`/docs/examples/locale-jurisdiction-gate`,tags:[`assistant`,`policy`,`reference`],body:`## Contracts
40
9
  - assistant.answer (v1)
41
10
  - assistant.explainConcept (v1)
42
11
 
@@ -47,7 +16,4 @@ registerDocBlocks([{
47
16
  ## Events
48
17
  - assistant.answer.requested
49
18
  - assistant.answer.blocked
50
- - assistant.answer.delivered`
51
- }]);
52
-
53
- //#endregion
19
+ - assistant.answer.delivered`}]);
@@ -1,3 +1 @@
1
- import { AllowedScopeEnum, AssistantAnswerIRModel, AssistantAnswerSectionModel, AssistantCitationModel, LLMCallEnvelopeModel, RegulatoryContextModel, UserProfileModel } from "./models.js";
2
-
3
- export { AllowedScopeEnum, AssistantAnswerIRModel, AssistantAnswerSectionModel, AssistantCitationModel, LLMCallEnvelopeModel, RegulatoryContextModel, UserProfileModel };
1
+ import{AllowedScopeEnum as e,AssistantAnswerIRModel as t,AssistantAnswerSectionModel as n,AssistantCitationModel as r,LLMCallEnvelopeModel as i,RegulatoryContextModel as a,UserProfileModel as o}from"./models.js";export{e as AllowedScopeEnum,t as AssistantAnswerIRModel,n as AssistantAnswerSectionModel,r as AssistantCitationModel,i as LLMCallEnvelopeModel,a as RegulatoryContextModel,o as UserProfileModel};
@@ -1,170 +1 @@
1
- import { defineEnum } from "../libs/schema/dist/EnumType.js";
2
- import { ScalarTypeEnum } from "../libs/schema/dist/ScalarTypeEnum.js";
3
- import { defineSchemaModel } from "../libs/schema/dist/SchemaModel.js";
4
- import "../libs/schema/dist/index.js";
5
-
6
- //#region src/entities/models.ts
7
- const AllowedScopeEnum = defineEnum("AllowedScope", [
8
- "education_only",
9
- "generic_info",
10
- "escalation_required"
11
- ]);
12
- const 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: {
29
- type: ScalarTypeEnum.String_unsecure(),
30
- isOptional: true
31
- }
32
- }
33
- });
34
- const RegulatoryContextModel = defineSchemaModel({
35
- name: "RegulatoryContext",
36
- description: "Explicit regulatory context (no guessing).",
37
- fields: {
38
- jurisdiction: {
39
- type: ScalarTypeEnum.String_unsecure(),
40
- isOptional: false
41
- },
42
- region: {
43
- type: ScalarTypeEnum.String_unsecure(),
44
- isOptional: true
45
- },
46
- clientType: {
47
- type: ScalarTypeEnum.String_unsecure(),
48
- isOptional: true
49
- },
50
- allowedScope: {
51
- type: AllowedScopeEnum,
52
- isOptional: false
53
- }
54
- }
55
- });
56
- const LLMCallEnvelopeModel = defineSchemaModel({
57
- name: "LLMCallEnvelope",
58
- description: "Mandatory envelope for assistant calls. All fields are explicit and required for policy gating.",
59
- fields: {
60
- traceId: {
61
- type: ScalarTypeEnum.String_unsecure(),
62
- isOptional: false
63
- },
64
- locale: {
65
- type: ScalarTypeEnum.String_unsecure(),
66
- isOptional: false
67
- },
68
- regulatoryContext: {
69
- type: RegulatoryContextModel,
70
- isOptional: false
71
- },
72
- kbSnapshotId: {
73
- type: ScalarTypeEnum.String_unsecure(),
74
- isOptional: false
75
- },
76
- allowedScope: {
77
- type: AllowedScopeEnum,
78
- isOptional: false
79
- }
80
- }
81
- });
82
- const AssistantCitationModel = defineSchemaModel({
83
- name: "AssistantCitation",
84
- description: "Citation referencing a KB snapshot + a specific item within it.",
85
- fields: {
86
- kbSnapshotId: {
87
- type: ScalarTypeEnum.String_unsecure(),
88
- isOptional: false
89
- },
90
- sourceType: {
91
- type: ScalarTypeEnum.String_unsecure(),
92
- isOptional: false
93
- },
94
- sourceId: {
95
- type: ScalarTypeEnum.String_unsecure(),
96
- isOptional: false
97
- },
98
- title: {
99
- type: ScalarTypeEnum.String_unsecure(),
100
- isOptional: true
101
- },
102
- excerpt: {
103
- type: ScalarTypeEnum.String_unsecure(),
104
- isOptional: true
105
- }
106
- }
107
- });
108
- const AssistantAnswerSectionModel = defineSchemaModel({
109
- name: "AssistantAnswerSection",
110
- description: "Structured answer section.",
111
- fields: {
112
- heading: {
113
- type: ScalarTypeEnum.String_unsecure(),
114
- isOptional: false
115
- },
116
- body: {
117
- type: ScalarTypeEnum.String_unsecure(),
118
- isOptional: false
119
- }
120
- }
121
- });
122
- const AssistantAnswerIRModel = defineSchemaModel({
123
- name: "AssistantAnswerIR",
124
- description: "Structured assistant answer with mandatory citations and explicit locale/jurisdiction.",
125
- fields: {
126
- locale: {
127
- type: ScalarTypeEnum.String_unsecure(),
128
- isOptional: false
129
- },
130
- jurisdiction: {
131
- type: ScalarTypeEnum.String_unsecure(),
132
- isOptional: false
133
- },
134
- allowedScope: {
135
- type: AllowedScopeEnum,
136
- isOptional: false
137
- },
138
- sections: {
139
- type: AssistantAnswerSectionModel,
140
- isArray: true,
141
- isOptional: false
142
- },
143
- citations: {
144
- type: AssistantCitationModel,
145
- isArray: true,
146
- isOptional: false
147
- },
148
- disclaimers: {
149
- type: ScalarTypeEnum.String_unsecure(),
150
- isArray: true,
151
- isOptional: true
152
- },
153
- riskFlags: {
154
- type: ScalarTypeEnum.String_unsecure(),
155
- isArray: true,
156
- isOptional: true
157
- },
158
- refused: {
159
- type: ScalarTypeEnum.Boolean(),
160
- isOptional: true
161
- },
162
- refusalReason: {
163
- type: ScalarTypeEnum.String_unsecure(),
164
- isOptional: true
165
- }
166
- }
167
- });
168
-
169
- //#endregion
170
- export { AllowedScopeEnum, AssistantAnswerIRModel, AssistantAnswerSectionModel, AssistantCitationModel, LLMCallEnvelopeModel, RegulatoryContextModel, UserProfileModel };
1
+ import{ScalarTypeEnum as e,defineEnum as t,defineSchemaModel as n}from"@lssm/lib.schema";const r=t(`AllowedScope`,[`education_only`,`generic_info`,`escalation_required`]),i=n({name:`UserProfile`,description:`User profile inputs used to derive regulatory context.`,fields:{preferredLocale:{type:e.String_unsecure(),isOptional:!0},residencyCountry:{type:e.String_unsecure(),isOptional:!0},taxResidenceCountry:{type:e.String_unsecure(),isOptional:!0},clientType:{type:e.String_unsecure(),isOptional:!0}}}),a=n({name:`RegulatoryContext`,description:`Explicit regulatory context (no guessing).`,fields:{jurisdiction:{type:e.String_unsecure(),isOptional:!1},region:{type:e.String_unsecure(),isOptional:!0},clientType:{type:e.String_unsecure(),isOptional:!0},allowedScope:{type:r,isOptional:!1}}}),o=n({name:`LLMCallEnvelope`,description:`Mandatory envelope for assistant calls. All fields are explicit and required for policy gating.`,fields:{traceId:{type:e.String_unsecure(),isOptional:!1},locale:{type:e.String_unsecure(),isOptional:!1},regulatoryContext:{type:a,isOptional:!1},kbSnapshotId:{type:e.String_unsecure(),isOptional:!1},allowedScope:{type:r,isOptional:!1}}}),s=n({name:`AssistantCitation`,description:`Citation referencing a KB snapshot + a specific item within it.`,fields:{kbSnapshotId:{type:e.String_unsecure(),isOptional:!1},sourceType:{type:e.String_unsecure(),isOptional:!1},sourceId:{type:e.String_unsecure(),isOptional:!1},title:{type:e.String_unsecure(),isOptional:!0},excerpt:{type:e.String_unsecure(),isOptional:!0}}}),c=n({name:`AssistantAnswerSection`,description:`Structured answer section.`,fields:{heading:{type:e.String_unsecure(),isOptional:!1},body:{type:e.String_unsecure(),isOptional:!1}}}),l=n({name:`AssistantAnswerIR`,description:`Structured assistant answer with mandatory citations and explicit locale/jurisdiction.`,fields:{locale:{type:e.String_unsecure(),isOptional:!1},jurisdiction:{type:e.String_unsecure(),isOptional:!1},allowedScope:{type:r,isOptional:!1},sections:{type:c,isArray:!0,isOptional:!1},citations:{type:s,isArray:!0,isOptional:!1},disclaimers:{type:e.String_unsecure(),isArray:!0,isOptional:!0},riskFlags:{type:e.String_unsecure(),isArray:!0,isOptional:!0},refused:{type:e.Boolean(),isOptional:!0},refusalReason:{type:e.String_unsecure(),isOptional:!0}}});export{r as AllowedScopeEnum,l as AssistantAnswerIRModel,c as AssistantAnswerSectionModel,s as AssistantCitationModel,o as LLMCallEnvelopeModel,a as RegulatoryContextModel,i as UserProfileModel};
package/dist/events.js CHANGED
@@ -1,102 +1 @@
1
- import { defineSchemaModel } from "./libs/contracts/dist/schema/dist/SchemaModel.js";
2
- import { defineEvent } from "./libs/contracts/dist/events.js";
3
- import "./libs/contracts/dist/index.js";
4
- import { ScalarTypeEnum } from "./libs/schema/dist/ScalarTypeEnum.js";
5
- import "./libs/schema/dist/index.js";
6
-
7
- //#region src/events.ts
8
- const AssistantAnswerRequestedPayload = defineSchemaModel({
9
- name: "AssistantAnswerRequestedPayload",
10
- description: "Emitted when an assistant answer is requested (pre-gate).",
11
- fields: {
12
- traceId: {
13
- type: ScalarTypeEnum.String_unsecure(),
14
- isOptional: false
15
- },
16
- locale: {
17
- type: ScalarTypeEnum.String_unsecure(),
18
- isOptional: false
19
- },
20
- jurisdiction: {
21
- type: ScalarTypeEnum.String_unsecure(),
22
- isOptional: false
23
- },
24
- kbSnapshotId: {
25
- type: ScalarTypeEnum.String_unsecure(),
26
- isOptional: false
27
- },
28
- allowedScope: {
29
- type: ScalarTypeEnum.String_unsecure(),
30
- isOptional: false
31
- }
32
- }
33
- });
34
- const AssistantAnswerRequestedEvent = defineEvent({
35
- name: "assistant.answer.requested",
36
- version: 1,
37
- description: "Assistant answer requested (policy gate will run).",
38
- payload: AssistantAnswerRequestedPayload
39
- });
40
- const AssistantAnswerBlockedPayload = defineSchemaModel({
41
- name: "AssistantAnswerBlockedPayload",
42
- description: "Emitted when a request is blocked by the gate.",
43
- fields: {
44
- traceId: {
45
- type: ScalarTypeEnum.String_unsecure(),
46
- isOptional: false
47
- },
48
- reasonCode: {
49
- type: ScalarTypeEnum.String_unsecure(),
50
- isOptional: false
51
- },
52
- reason: {
53
- type: ScalarTypeEnum.String_unsecure(),
54
- isOptional: false
55
- }
56
- }
57
- });
58
- const AssistantAnswerBlockedEvent = defineEvent({
59
- name: "assistant.answer.blocked",
60
- version: 1,
61
- description: "Assistant answer blocked (fail-closed).",
62
- payload: AssistantAnswerBlockedPayload
63
- });
64
- const AssistantAnswerDeliveredPayload = defineSchemaModel({
65
- name: "AssistantAnswerDeliveredPayload",
66
- description: "Emitted when a structured, cited answer is delivered.",
67
- fields: {
68
- traceId: {
69
- type: ScalarTypeEnum.String_unsecure(),
70
- isOptional: false
71
- },
72
- locale: {
73
- type: ScalarTypeEnum.String_unsecure(),
74
- isOptional: false
75
- },
76
- jurisdiction: {
77
- type: ScalarTypeEnum.String_unsecure(),
78
- isOptional: false
79
- },
80
- kbSnapshotId: {
81
- type: ScalarTypeEnum.String_unsecure(),
82
- isOptional: false
83
- },
84
- allowedScope: {
85
- type: ScalarTypeEnum.String_unsecure(),
86
- isOptional: false
87
- },
88
- citationsCount: {
89
- type: ScalarTypeEnum.Int_unsecure(),
90
- isOptional: false
91
- }
92
- }
93
- });
94
- const AssistantAnswerDeliveredEvent = defineEvent({
95
- name: "assistant.answer.delivered",
96
- version: 1,
97
- description: "Assistant answer delivered (must include KB snapshot citations).",
98
- payload: AssistantAnswerDeliveredPayload
99
- });
100
-
101
- //#endregion
102
- export { AssistantAnswerBlockedEvent, AssistantAnswerDeliveredEvent, AssistantAnswerRequestedEvent };
1
+ import{defineEvent as e,defineSchemaModel as t}from"@lssm/lib.contracts";import{ScalarTypeEnum as n}from"@lssm/lib.schema";const r=e({name:`assistant.answer.requested`,version:1,description:`Assistant answer requested (policy gate will run).`,payload:t({name:`AssistantAnswerRequestedPayload`,description:`Emitted when an assistant answer is requested (pre-gate).`,fields:{traceId:{type:n.String_unsecure(),isOptional:!1},locale:{type:n.String_unsecure(),isOptional:!1},jurisdiction:{type:n.String_unsecure(),isOptional:!1},kbSnapshotId:{type:n.String_unsecure(),isOptional:!1},allowedScope:{type:n.String_unsecure(),isOptional:!1}}})}),i=e({name:`assistant.answer.blocked`,version:1,description:`Assistant answer blocked (fail-closed).`,payload:t({name:`AssistantAnswerBlockedPayload`,description:`Emitted when a request is blocked by the gate.`,fields:{traceId:{type:n.String_unsecure(),isOptional:!1},reasonCode:{type:n.String_unsecure(),isOptional:!1},reason:{type:n.String_unsecure(),isOptional:!1}}})}),a=e({name:`assistant.answer.delivered`,version:1,description:`Assistant answer delivered (must include KB snapshot citations).`,payload:t({name:`AssistantAnswerDeliveredPayload`,description:`Emitted when a structured, cited answer is delivered.`,fields:{traceId:{type:n.String_unsecure(),isOptional:!1},locale:{type:n.String_unsecure(),isOptional:!1},jurisdiction:{type:n.String_unsecure(),isOptional:!1},kbSnapshotId:{type:n.String_unsecure(),isOptional:!1},allowedScope:{type:n.String_unsecure(),isOptional:!1},citationsCount:{type:n.Int_unsecure(),isOptional:!1}}})});export{i as AssistantAnswerBlockedEvent,a as AssistantAnswerDeliveredEvent,r as AssistantAnswerRequestedEvent};
package/dist/example.js CHANGED
@@ -1,39 +1 @@
1
- //#region src/example.ts
2
- const example = {
3
- id: "locale-jurisdiction-gate",
4
- title: "Locale / Jurisdiction Gate",
5
- summary: "Fail-closed gating for assistant calls: locale + jurisdiction + kbSnapshotId + allowedScope must be explicit, answers must cite a snapshot.",
6
- tags: [
7
- "policy",
8
- "locale",
9
- "jurisdiction",
10
- "assistant",
11
- "gating"
12
- ],
13
- kind: "knowledge",
14
- visibility: "public",
15
- docs: { rootDocId: "docs.examples.locale-jurisdiction-gate" },
16
- entrypoints: {
17
- packageName: "@lssm/example.locale-jurisdiction-gate",
18
- feature: "./feature",
19
- contracts: "./contracts",
20
- handlers: "./handlers",
21
- docs: "./docs"
22
- },
23
- surfaces: {
24
- templates: true,
25
- sandbox: {
26
- enabled: true,
27
- modes: ["markdown", "specs"]
28
- },
29
- studio: {
30
- enabled: true,
31
- installable: true
32
- },
33
- mcp: { enabled: true }
34
- }
35
- };
36
- var example_default = example;
37
-
38
- //#endregion
39
- export { example_default as default };
1
+ var e={id:`locale-jurisdiction-gate`,title:`Locale / Jurisdiction Gate`,summary:`Fail-closed gating for assistant calls: locale + jurisdiction + kbSnapshotId + allowedScope must be explicit, answers must cite a snapshot.`,tags:[`policy`,`locale`,`jurisdiction`,`assistant`,`gating`],kind:`knowledge`,visibility:`public`,docs:{rootDocId:`docs.examples.locale-jurisdiction-gate`},entrypoints:{packageName:`@lssm/example.locale-jurisdiction-gate`,feature:`./feature`,contracts:`./contracts`,handlers:`./handlers`,docs:`./docs`},surfaces:{templates:!0,sandbox:{enabled:!0,modes:[`markdown`,`specs`]},studio:{enabled:!0,installable:!0},mcp:{enabled:!0}}};export{e as default};