@lssm/example.policy-safe-knowledge-assistant 0.0.0-canary-20251217080011 → 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 (52) hide show
  1. package/.turbo/turbo-build.log +19 -21
  2. package/dist/docs/index.js +1 -1
  3. package/dist/docs/policy-safe-knowledge-assistant.docblock.js +13 -34
  4. package/dist/example.js +1 -46
  5. package/dist/feature.js +1 -146
  6. package/dist/index.js +1 -7
  7. package/dist/orchestrator/buildAnswer.js +1 -76
  8. package/dist/seed/fixtures.js +1 -33
  9. package/dist/seed/index.js +1 -3
  10. package/package.json +24 -27
  11. package/tsconfig.tsbuildinfo +1 -1
  12. package/.turbo/turbo-build$colon$bundle.log +0 -58
  13. package/CHANGELOG.md +0 -25
  14. package/dist/docs/index.d.ts +0 -1
  15. package/dist/docs/policy-safe-knowledge-assistant.docblock.d.ts +0 -1
  16. package/dist/example.d.ts +0 -34
  17. package/dist/examples/locale-jurisdiction-gate/dist/policy/guard.js +0 -72
  18. package/dist/feature.d.ts +0 -6
  19. package/dist/index.d.ts +0 -5
  20. package/dist/libs/contracts/dist/docs/PUBLISHING.docblock.js +0 -16
  21. package/dist/libs/contracts/dist/docs/accessibility_wcag_compliance_specs.docblock.js +0 -16
  22. package/dist/libs/contracts/dist/docs/index.js +0 -29
  23. package/dist/libs/contracts/dist/docs/presentations.js +0 -71
  24. package/dist/libs/contracts/dist/docs/registry.js +0 -44
  25. package/dist/libs/contracts/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js +0 -16
  26. package/dist/libs/contracts/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +0 -16
  27. package/dist/libs/contracts/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +0 -16
  28. package/dist/libs/contracts/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +0 -16
  29. package/dist/libs/contracts/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +0 -16
  30. package/dist/libs/contracts/dist/docs/tech/auth/better-auth-nextjs.docblock.js +0 -80
  31. package/dist/libs/contracts/dist/docs/tech/contracts/openapi-export.docblock.js +0 -57
  32. package/dist/libs/contracts/dist/docs/tech/lifecycle-stage-system.docblock.js +0 -16
  33. package/dist/libs/contracts/dist/docs/tech/llm/llm-integration.docblock.js +0 -357
  34. package/dist/libs/contracts/dist/docs/tech/mcp-endpoints.docblock.js +0 -37
  35. package/dist/libs/contracts/dist/docs/tech/presentation-runtime.docblock.js +0 -16
  36. package/dist/libs/contracts/dist/docs/tech/schema/README.docblock.js +0 -20
  37. package/dist/libs/contracts/dist/docs/tech/studio/learning-events.docblock.js +0 -48
  38. package/dist/libs/contracts/dist/docs/tech/studio/learning-journeys.docblock.js +0 -79
  39. package/dist/libs/contracts/dist/docs/tech/studio/platform-admin-panel.docblock.js +0 -84
  40. package/dist/libs/contracts/dist/docs/tech/studio/project-access-teams.docblock.js +0 -45
  41. package/dist/libs/contracts/dist/docs/tech/studio/project-routing.docblock.js +0 -67
  42. package/dist/libs/contracts/dist/docs/tech/studio/sandbox-unlogged.docblock.js +0 -40
  43. package/dist/libs/contracts/dist/docs/tech/studio/team-invitations.docblock.js +0 -69
  44. package/dist/libs/contracts/dist/docs/tech/studio/workspace-ops.docblock.js +0 -47
  45. package/dist/libs/contracts/dist/docs/tech/studio/workspaces.docblock.js +0 -62
  46. package/dist/libs/contracts/dist/docs/tech/telemetry-ingest.docblock.js +0 -155
  47. package/dist/libs/contracts/dist/docs/tech/templates/runtime.docblock.js +0 -20
  48. package/dist/libs/contracts/dist/docs/tech/vscode-extension.docblock.js +0 -101
  49. package/dist/libs/contracts/dist/docs/tech/workflows/overview.docblock.js +0 -20
  50. package/dist/orchestrator/buildAnswer.d.ts +0 -52
  51. package/dist/seed/fixtures.d.ts +0 -34
  52. package/dist/seed/index.d.ts +0 -2
@@ -1,21 +1,19 @@
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/policy-safe-knowledge-assistant/tsdown.config.js (unrun)
6
- ℹ entry: src/example.ts, src/feature.ts, src/index.ts, src/orchestrator/buildAnswer.ts, src/docs/index.ts, src/docs/policy-safe-knowledge-assistant.docblock.ts, src/seed/fixtures.ts, src/seed/index.ts
7
- ℹ target: esnext
8
- ℹ tsconfig: tsconfig.json
9
- ℹ Build start
10
- ℹ Cleaning 11 files
11
- ℹ dist/orchestrator/buildAnswer.js 1.65 kB │ gzip: 0.71 kB
12
- ℹ dist/docs/policy-safe-knowledge-assistant.docblock.js 1.62 kB │ gzip: 0.83 kB
13
- ℹ dist/feature.js 1.57 kB │ gzip: 0.57 kB
14
- ℹ dist/example.js 0.72 kB │ gzip: 0.41 kB
15
- ℹ dist/seed/fixtures.js 0.56 kB │ gzip: 0.31 kB
16
- ℹ dist/index.js 0.35 kB │ gzip: 0.20 kB
17
- ℹ dist/seed/index.js 0.07 kB │ gzip: 0.08 kB
18
- ℹ dist/docs/index.js 0.05 kB │ gzip: 0.07 kB
19
- ℹ 8 files, total: 6.60 kB
20
- ✔ Build complete in 40ms
21
- $ 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/policy-safe-knowledge-assistant/tsdown.config.js
5
+ ℹ entry: src/example.ts, src/feature.ts, src/index.ts, src/docs/index.ts, src/docs/policy-safe-knowledge-assistant.docblock.ts, src/orchestrator/buildAnswer.ts, src/seed/fixtures.ts, src/seed/index.ts
6
+ ℹ target: esnext
7
+ ℹ tsconfig: tsconfig.json
8
+ ℹ Build start
9
+ ℹ dist/orchestrator/buildAnswer.js 1.65 kB │ gzip: 0.71 kB
10
+ ℹ dist/docs/policy-safe-knowledge-assistant.docblock.js 1.62 kB │ gzip: 0.83 kB
11
+ ℹ dist/feature.js 1.57 kB │ gzip: 0.57 kB
12
+ ℹ dist/example.js 0.72 kB │ gzip: 0.41 kB
13
+ ℹ dist/seed/fixtures.js 0.56 kB │ gzip: 0.31 kB
14
+ ℹ dist/index.js 0.35 kB │ gzip: 0.20 kB
15
+ ℹ dist/seed/index.js 0.07 kB │ gzip: 0.08 kB
16
+ ℹ dist/docs/index.js 0.05 kB │ gzip: 0.07 kB
17
+ ℹ 8 files, total: 6.60 kB
18
+ ✔ Build complete in 78ms
19
+ $ tsc --noEmit
@@ -1 +1 @@
1
- import "./policy-safe-knowledge-assistant.docblock.js";
1
+ import"./policy-safe-knowledge-assistant.docblock.js";
@@ -1,35 +1,14 @@
1
- import { registerDocBlocks } from "../libs/contracts/dist/docs/registry.js";
2
- import "../libs/contracts/dist/docs/index.js";
1
+ import{registerDocBlocks as e}from"@lssm/lib.contracts/docs";e([{id:`docs.examples.policy-safe-knowledge-assistant.goal`,title:`Policy-safe Knowledge Assistant — Goal`,summary:`End-to-end example: versioned KB snapshots + locale/jurisdiction gating + HITL pipeline + learning hub.`,kind:`goal`,visibility:`public`,route:`/docs/examples/policy-safe-knowledge-assistant/goal`,tags:[`assistant`,`knowledge`,`policy`,`hitl`,`learning`],body:`## What this template proves
2
+ - Assistant answers are structured and must cite a KB snapshot (or refuse).
3
+ - Locale + jurisdiction are mandatory inputs for every assistant call.
4
+ - Automation proposes KB patches; humans verify; publishing stays blocked until approvals.
5
+ - Learning hub demonstrates drills + coaching + quests without spam.
3
6
 
4
- //#region src/docs/policy-safe-knowledge-assistant.docblock.ts
5
- registerDocBlocks([{
6
- id: "docs.examples.policy-safe-knowledge-assistant.goal",
7
- title: "Policy-safe Knowledge Assistant — Goal",
8
- summary: "End-to-end example: versioned KB snapshots + locale/jurisdiction gating + HITL pipeline + learning hub.",
9
- kind: "goal",
10
- visibility: "public",
11
- route: "/docs/examples/policy-safe-knowledge-assistant/goal",
12
- tags: [
13
- "assistant",
14
- "knowledge",
15
- "policy",
16
- "hitl",
17
- "learning"
18
- ],
19
- body: `## What this template proves\n- Assistant answers are structured and must cite a KB snapshot (or refuse).\n- Locale + jurisdiction are mandatory inputs for every assistant call.\n- Automation proposes KB patches; humans verify; publishing stays blocked until approvals.\n- Learning hub demonstrates drills + coaching + quests without spam.\n\n## Offline-first\n- Seeded fixtures are deterministic and require no external services.\n- Optional non-authoritative fallback can be added behind a single feature flag (disabled by default).`
20
- }, {
21
- id: "docs.examples.policy-safe-knowledge-assistant.usage",
22
- title: "Policy-safe Knowledge Assistant — Usage",
23
- summary: "5–10 minute sandbox walkthrough for developers.",
24
- kind: "usage",
25
- visibility: "public",
26
- route: "/docs/examples/policy-safe-knowledge-assistant/usage",
27
- tags: [
28
- "assistant",
29
- "knowledge",
30
- "usage"
31
- ],
32
- body: `## Demo walkthrough (high level)\n1) Onboard: set locale + jurisdiction.\n2) Publish snapshot: ingest source -> propose rule -> approve -> publish.\n3) Ask assistant: must pass gate and cite snapshot.\n4) Simulate change: watcher -> review -> publish new snapshot.\n5) Learning hub: drills session, ambient tip, quest start + step completion.`
33
- }]);
34
-
35
- //#endregion
7
+ ## Offline-first
8
+ - Seeded fixtures are deterministic and require no external services.
9
+ - Optional non-authoritative fallback can be added behind a single feature flag (disabled by default).`},{id:`docs.examples.policy-safe-knowledge-assistant.usage`,title:`Policy-safe Knowledge Assistant — Usage`,summary:`5–10 minute sandbox walkthrough for developers.`,kind:`usage`,visibility:`public`,route:`/docs/examples/policy-safe-knowledge-assistant/usage`,tags:[`assistant`,`knowledge`,`usage`],body:`## Demo walkthrough (high level)
10
+ 1) Onboard: set locale + jurisdiction.
11
+ 2) Publish snapshot: ingest source -> propose rule -> approve -> publish.
12
+ 3) Ask assistant: must pass gate and cite snapshot.
13
+ 4) Simulate change: watcher -> review -> publish new snapshot.
14
+ 5) Learning hub: drills session, ambient tip, quest start + step completion.`}]);
package/dist/example.js CHANGED
@@ -1,46 +1 @@
1
- //#region src/example.ts
2
- const example = {
3
- id: "policy-safe-knowledge-assistant",
4
- title: "Policy-safe Knowledge Assistant",
5
- summary: "All-in-one template: locale/jurisdiction gating + versioned KB snapshots + HITL update pipeline + learning hub.",
6
- tags: [
7
- "assistant",
8
- "knowledge",
9
- "policy",
10
- "hitl",
11
- "learning"
12
- ],
13
- kind: "template",
14
- visibility: "public",
15
- docs: {
16
- goalDocId: "docs.examples.policy-safe-knowledge-assistant.goal",
17
- usageDocId: "docs.examples.policy-safe-knowledge-assistant.usage"
18
- },
19
- entrypoints: {
20
- packageName: "@lssm/example.policy-safe-knowledge-assistant",
21
- feature: "./feature",
22
- docs: "./docs"
23
- },
24
- surfaces: {
25
- templates: true,
26
- sandbox: {
27
- enabled: true,
28
- modes: [
29
- "playground",
30
- "specs",
31
- "builder",
32
- "markdown",
33
- "evolution"
34
- ]
35
- },
36
- studio: {
37
- enabled: true,
38
- installable: true
39
- },
40
- mcp: { enabled: true }
41
- }
42
- };
43
- var example_default = example;
44
-
45
- //#endregion
46
- export { example_default as default };
1
+ var e={id:`policy-safe-knowledge-assistant`,title:`Policy-safe Knowledge Assistant`,summary:`All-in-one template: locale/jurisdiction gating + versioned KB snapshots + HITL update pipeline + learning hub.`,tags:[`assistant`,`knowledge`,`policy`,`hitl`,`learning`],kind:`template`,visibility:`public`,docs:{goalDocId:`docs.examples.policy-safe-knowledge-assistant.goal`,usageDocId:`docs.examples.policy-safe-knowledge-assistant.usage`},entrypoints:{packageName:`@lssm/example.policy-safe-knowledge-assistant`,feature:`./feature`,docs:`./docs`},surfaces:{templates:!0,sandbox:{enabled:!0,modes:[`playground`,`specs`,`builder`,`markdown`,`evolution`]},studio:{enabled:!0,installable:!0},mcp:{enabled:!0}}};export{e as default};
package/dist/feature.js CHANGED
@@ -1,146 +1 @@
1
- //#region src/feature.ts
2
- const PolicySafeKnowledgeAssistantFeature = {
3
- meta: {
4
- key: "policy-safe-knowledge-assistant",
5
- title: "Policy-safe Knowledge Assistant",
6
- description: "All-in-one example composing locale/jurisdiction gate + versioned KB + HITL pipeline + learning hub.",
7
- domain: "knowledge",
8
- owners: ["examples"],
9
- tags: [
10
- "assistant",
11
- "knowledge",
12
- "policy",
13
- "hitl",
14
- "learning"
15
- ],
16
- stability: "experimental"
17
- },
18
- operations: [
19
- {
20
- name: "assistant.answer",
21
- version: 1
22
- },
23
- {
24
- name: "assistant.explainConcept",
25
- version: 1
26
- },
27
- {
28
- name: "kb.ingestSource",
29
- version: 1
30
- },
31
- {
32
- name: "kb.upsertRuleVersion",
33
- version: 1
34
- },
35
- {
36
- name: "kb.approveRuleVersion",
37
- version: 1
38
- },
39
- {
40
- name: "kb.publishSnapshot",
41
- version: 1
42
- },
43
- {
44
- name: "kb.search",
45
- version: 1
46
- },
47
- {
48
- name: "kbPipeline.runWatch",
49
- version: 1
50
- },
51
- {
52
- name: "kbPipeline.createReviewTask",
53
- version: 1
54
- },
55
- {
56
- name: "kbPipeline.submitDecision",
57
- version: 1
58
- },
59
- {
60
- name: "kbPipeline.publishIfReady",
61
- version: 1
62
- }
63
- ],
64
- events: [
65
- {
66
- name: "assistant.answer.requested",
67
- version: 1
68
- },
69
- {
70
- name: "assistant.answer.blocked",
71
- version: 1
72
- },
73
- {
74
- name: "assistant.answer.delivered",
75
- version: 1
76
- },
77
- {
78
- name: "kb.source.ingested",
79
- version: 1
80
- },
81
- {
82
- name: "kb.ruleVersion.created",
83
- version: 1
84
- },
85
- {
86
- name: "kb.ruleVersion.approved",
87
- version: 1
88
- },
89
- {
90
- name: "kb.snapshot.published",
91
- version: 1
92
- },
93
- {
94
- name: "kb.change.detected",
95
- version: 1
96
- },
97
- {
98
- name: "kb.review.requested",
99
- version: 1
100
- },
101
- {
102
- name: "kb.review.decided",
103
- version: 1
104
- }
105
- ],
106
- presentations: [],
107
- opToPresentation: [],
108
- presentationsTargets: [],
109
- capabilities: { requires: [
110
- {
111
- key: "identity",
112
- version: 1
113
- },
114
- {
115
- key: "audit-trail",
116
- version: 1
117
- },
118
- {
119
- key: "notifications",
120
- version: 1
121
- },
122
- {
123
- key: "jobs",
124
- version: 1
125
- },
126
- {
127
- key: "feature-flags",
128
- version: 1
129
- },
130
- {
131
- key: "files",
132
- version: 1
133
- },
134
- {
135
- key: "metering",
136
- version: 1
137
- },
138
- {
139
- key: "learning-journey",
140
- version: 1
141
- }
142
- ] }
143
- };
144
-
145
- //#endregion
146
- export { PolicySafeKnowledgeAssistantFeature };
1
+ const e={meta:{key:`policy-safe-knowledge-assistant`,title:`Policy-safe Knowledge Assistant`,description:`All-in-one example composing locale/jurisdiction gate + versioned KB + HITL pipeline + learning hub.`,domain:`knowledge`,owners:[`examples`],tags:[`assistant`,`knowledge`,`policy`,`hitl`,`learning`],stability:`experimental`},operations:[{name:`assistant.answer`,version:1},{name:`assistant.explainConcept`,version:1},{name:`kb.ingestSource`,version:1},{name:`kb.upsertRuleVersion`,version:1},{name:`kb.approveRuleVersion`,version:1},{name:`kb.publishSnapshot`,version:1},{name:`kb.search`,version:1},{name:`kbPipeline.runWatch`,version:1},{name:`kbPipeline.createReviewTask`,version:1},{name:`kbPipeline.submitDecision`,version:1},{name:`kbPipeline.publishIfReady`,version:1}],events:[{name:`assistant.answer.requested`,version:1},{name:`assistant.answer.blocked`,version:1},{name:`assistant.answer.delivered`,version:1},{name:`kb.source.ingested`,version:1},{name:`kb.ruleVersion.created`,version:1},{name:`kb.ruleVersion.approved`,version:1},{name:`kb.snapshot.published`,version:1},{name:`kb.change.detected`,version:1},{name:`kb.review.requested`,version:1},{name:`kb.review.decided`,version:1}],presentations:[],opToPresentation:[],presentationsTargets:[],capabilities:{requires:[{key:`identity`,version:1},{key:`audit-trail`,version:1},{key:`notifications`,version:1},{key:`jobs`,version:1},{key:`feature-flags`,version:1},{key:`files`,version:1},{key:`metering`,version:1},{key:`learning-journey`,version:1}]}};export{e as PolicySafeKnowledgeAssistantFeature};
package/dist/index.js CHANGED
@@ -1,7 +1 @@
1
- import example_default from "./example.js";
2
- import { PolicySafeKnowledgeAssistantFeature } from "./feature.js";
3
- import { DEMO_FIXTURES } from "./seed/fixtures.js";
4
- import { buildPolicySafeAnswer } from "./orchestrator/buildAnswer.js";
5
- import "./docs/index.js";
6
-
7
- export { DEMO_FIXTURES, PolicySafeKnowledgeAssistantFeature, buildPolicySafeAnswer, example_default as example };
1
+ import e from"./example.js";import{PolicySafeKnowledgeAssistantFeature as t}from"./feature.js";import{DEMO_FIXTURES as n}from"./seed/fixtures.js";import{buildPolicySafeAnswer as r}from"./orchestrator/buildAnswer.js";import"./docs/index.js";export{n as DEMO_FIXTURES,t as PolicySafeKnowledgeAssistantFeature,r as buildPolicySafeAnswer,e as example};
@@ -1,76 +1 @@
1
- import { enforceAllowedScope, enforceCitations, validateEnvelope } from "../examples/locale-jurisdiction-gate/dist/policy/guard.js";
2
-
3
- //#region src/orchestrator/buildAnswer.ts
4
- /**
5
- * Build a policy-safe assistant answer derived from KB search results.
6
- *
7
- * Deterministic: no LLM calls; if search yields no results, it refuses.
8
- */
9
- async function buildPolicySafeAnswer(input) {
10
- const env = validateEnvelope(input.envelope);
11
- if (!env.ok) return {
12
- locale: input.envelope.locale ?? "en-GB",
13
- jurisdiction: input.envelope.regulatoryContext?.jurisdiction ?? "UNKNOWN",
14
- allowedScope: input.envelope.allowedScope ?? "education_only",
15
- sections: [{
16
- heading: "Request blocked",
17
- body: env.error.message
18
- }],
19
- citations: [],
20
- disclaimers: ["This system refuses to answer without a valid envelope."],
21
- riskFlags: [env.error.code],
22
- refused: true,
23
- refusalReason: env.error.code
24
- };
25
- const results = await input.kbSearch({
26
- snapshotId: env.value.kbSnapshotId,
27
- jurisdiction: env.value.regulatoryContext.jurisdiction,
28
- query: input.question
29
- });
30
- const citations = results.items.map((item) => ({
31
- kbSnapshotId: env.value.kbSnapshotId,
32
- sourceType: "ruleVersion",
33
- sourceId: item.ruleVersionId,
34
- title: "Curated rule version",
35
- excerpt: item.excerpt
36
- }));
37
- const draft = {
38
- locale: env.value.locale,
39
- jurisdiction: env.value.regulatoryContext.jurisdiction,
40
- allowedScope: env.value.allowedScope,
41
- sections: [{
42
- heading: "Answer (KB-derived)",
43
- body: results.items.length > 0 ? `This answer is derived from ${results.items.length} curated rule version(s) in the referenced snapshot.` : "No curated knowledge found in the referenced snapshot."
44
- }],
45
- citations,
46
- disclaimers: ["Educational demo only."],
47
- riskFlags: []
48
- };
49
- const scope = enforceAllowedScope(env.value.allowedScope, draft);
50
- if (!scope.ok) return {
51
- ...draft,
52
- sections: [{
53
- heading: "Escalation required",
54
- body: scope.error.message
55
- }],
56
- refused: true,
57
- refusalReason: scope.error.code,
58
- riskFlags: [...draft.riskFlags ?? [], scope.error.code]
59
- };
60
- const cited = enforceCitations(draft);
61
- if (!cited.ok) return {
62
- ...draft,
63
- sections: [{
64
- heading: "Request blocked",
65
- body: cited.error.message
66
- }],
67
- citations: [],
68
- refused: true,
69
- refusalReason: cited.error.code,
70
- riskFlags: [...draft.riskFlags ?? [], cited.error.code]
71
- };
72
- return draft;
73
- }
74
-
75
- //#endregion
76
- export { buildPolicySafeAnswer };
1
+ import{enforceAllowedScope as e,enforceCitations as t,validateEnvelope as n}from"@lssm/example.locale-jurisdiction-gate/policy/guard";async function r(r){let i=n(r.envelope);if(!i.ok)return{locale:r.envelope.locale??`en-GB`,jurisdiction:r.envelope.regulatoryContext?.jurisdiction??`UNKNOWN`,allowedScope:r.envelope.allowedScope??`education_only`,sections:[{heading:`Request blocked`,body:i.error.message}],citations:[],disclaimers:[`This system refuses to answer without a valid envelope.`],riskFlags:[i.error.code],refused:!0,refusalReason:i.error.code};let a=await r.kbSearch({snapshotId:i.value.kbSnapshotId,jurisdiction:i.value.regulatoryContext.jurisdiction,query:r.question}),o=a.items.map(e=>({kbSnapshotId:i.value.kbSnapshotId,sourceType:`ruleVersion`,sourceId:e.ruleVersionId,title:`Curated rule version`,excerpt:e.excerpt})),s={locale:i.value.locale,jurisdiction:i.value.regulatoryContext.jurisdiction,allowedScope:i.value.allowedScope,sections:[{heading:`Answer (KB-derived)`,body:a.items.length>0?`This answer is derived from ${a.items.length} curated rule version(s) in the referenced snapshot.`:`No curated knowledge found in the referenced snapshot.`}],citations:o,disclaimers:[`Educational demo only.`],riskFlags:[]},c=e(i.value.allowedScope,s);if(!c.ok)return{...s,sections:[{heading:`Escalation required`,body:c.error.message}],refused:!0,refusalReason:c.error.code,riskFlags:[...s.riskFlags??[],c.error.code]};let l=t(s);return l.ok?s:{...s,sections:[{heading:`Request blocked`,body:l.error.message}],citations:[],refused:!0,refusalReason:l.error.code,riskFlags:[...s.riskFlags??[],l.error.code]}}export{r as buildPolicySafeAnswer};
@@ -1,33 +1 @@
1
- //#region src/seed/fixtures.ts
2
- const DEMO_FIXTURES = {
3
- jurisdictions: ["EU", "FR"],
4
- locales: ["en-GB", "fr-FR"],
5
- demoOrgId: "org_demo",
6
- demoUserId: "user_demo",
7
- sources: {
8
- EU_SOURCE_1: {
9
- jurisdiction: "EU",
10
- authority: "DemoAuthority",
11
- title: "EU Demo Source v1",
12
- fetchedAt: /* @__PURE__ */ new Date("2026-01-01T00:00:00.000Z"),
13
- hash: "hash_eu_v1",
14
- fileId: "file_eu_v1"
15
- },
16
- EU_SOURCE_2: {
17
- jurisdiction: "EU",
18
- authority: "DemoAuthority",
19
- title: "EU Demo Source v2",
20
- fetchedAt: /* @__PURE__ */ new Date("2026-02-01T00:00:00.000Z"),
21
- hash: "hash_eu_v2",
22
- fileId: "file_eu_v2"
23
- }
24
- },
25
- rules: { EU_RULE_TAX: {
26
- id: "rule_eu_tax",
27
- jurisdiction: "EU",
28
- topicKey: "tax_reporting"
29
- } }
30
- };
31
-
32
- //#endregion
33
- export { DEMO_FIXTURES };
1
+ const e={jurisdictions:[`EU`,`FR`],locales:[`en-GB`,`fr-FR`],demoOrgId:`org_demo`,demoUserId:`user_demo`,sources:{EU_SOURCE_1:{jurisdiction:`EU`,authority:`DemoAuthority`,title:`EU Demo Source v1`,fetchedAt:new Date(`2026-01-01T00:00:00.000Z`),hash:`hash_eu_v1`,fileId:`file_eu_v1`},EU_SOURCE_2:{jurisdiction:`EU`,authority:`DemoAuthority`,title:`EU Demo Source v2`,fetchedAt:new Date(`2026-02-01T00:00:00.000Z`),hash:`hash_eu_v2`,fileId:`file_eu_v2`}},rules:{EU_RULE_TAX:{id:`rule_eu_tax`,jurisdiction:`EU`,topicKey:`tax_reporting`}}};export{e as DEMO_FIXTURES};
@@ -1,3 +1 @@
1
- import { DEMO_FIXTURES } from "./fixtures.js";
2
-
3
- export { DEMO_FIXTURES };
1
+ import{DEMO_FIXTURES as e}from"./fixtures.js";export{e as DEMO_FIXTURES};
package/package.json CHANGED
@@ -1,25 +1,23 @@
1
1
  {
2
2
  "name": "@lssm/example.policy-safe-knowledge-assistant",
3
- "version": "0.0.0-canary-20251217080011",
3
+ "version": "1.41.0",
4
4
  "description": "All-in-one template example: policy-safe knowledge assistant with locale/jurisdiction gating, versioned KB snapshots, HITL update pipeline, and learning hub.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.js",
8
8
  "types": "./dist/index.d.ts",
9
9
  "exports": {
10
- ".": "./dist/index.js",
11
- "./docs": "./dist/docs/index.js",
12
- "./docs/policy-safe-knowledge-assistant.docblock": "./dist/docs/policy-safe-knowledge-assistant.docblock.js",
13
- "./example": "./dist/example.js",
14
- "./feature": "./dist/feature.js",
15
- "./orchestrator/buildAnswer": "./dist/orchestrator/buildAnswer.js",
16
- "./seed": "./dist/seed/index.js",
17
- "./seed/fixtures": "./dist/seed/fixtures.js",
10
+ ".": "./src/index.ts",
11
+ "./docs": "./src/docs/index.ts",
12
+ "./docs/policy-safe-knowledge-assistant.docblock": "./src/docs/policy-safe-knowledge-assistant.docblock.ts",
13
+ "./example": "./src/example.ts",
14
+ "./feature": "./src/feature.ts",
15
+ "./orchestrator/buildAnswer": "./src/orchestrator/buildAnswer.ts",
16
+ "./seed": "./src/seed/index.ts",
17
+ "./seed/fixtures": "./src/seed/fixtures.ts",
18
18
  "./*": "./*"
19
19
  },
20
20
  "scripts": {
21
- "publish:pkg": "bun publish --tolerate-republish --ignore-scripts --verbose",
22
- "publish:pkg:canary": "bun publish:pkg --tag canary",
23
21
  "build": "bun build:bundle && bun build:types",
24
22
  "build:bundle": "tsdown",
25
23
  "build:types": "tsc --noEmit",
@@ -31,24 +29,23 @@
31
29
  "test": "bun test"
32
30
  },
33
31
  "dependencies": {
34
- "@lssm/example.locale-jurisdiction-gate": "0.0.0-canary-20251217080011",
35
- "@lssm/example.versioned-knowledge-base": "0.0.0-canary-20251217080011",
36
- "@lssm/example.kb-update-pipeline": "0.0.0-canary-20251217080011",
37
- "@lssm/example.learning-patterns": "0.0.0-canary-20251217080011",
38
- "@lssm/lib.schema": "0.0.0-canary-20251217080011",
39
- "@lssm/lib.contracts": "0.0.0-canary-20251217080011",
40
- "@lssm/lib.identity-rbac": "0.0.0-canary-20251217080011",
41
- "@lssm/lib.jobs": "0.0.0-canary-20251217080011",
42
- "@lssm/lib.feature-flags": "0.0.0-canary-20251217080011",
43
- "@lssm/lib.files": "0.0.0-canary-20251217080011",
44
- "@lssm/lib.metering": "0.0.0-canary-20251217080011",
45
- "@lssm/module.audit-trail": "0.0.0-canary-20251217080011",
46
- "@lssm/module.notifications": "0.0.0-canary-20251217080011",
47
- "@lssm/module.learning-journey": "0.0.0-canary-20251217080011"
32
+ "@lssm/example.locale-jurisdiction-gate": "workspace:*",
33
+ "@lssm/example.versioned-knowledge-base": "workspace:*",
34
+ "@lssm/example.kb-update-pipeline": "workspace:*",
35
+ "@lssm/example.learning-patterns": "workspace:*",
36
+ "@lssm/lib.contracts": "workspace:*",
37
+ "@lssm/lib.identity-rbac": "workspace:*",
38
+ "@lssm/lib.jobs": "workspace:*",
39
+ "@lssm/lib.feature-flags": "workspace:*",
40
+ "@lssm/lib.files": "workspace:*",
41
+ "@lssm/lib.metering": "workspace:*",
42
+ "@lssm/module.audit-trail": "workspace:*",
43
+ "@lssm/module.notifications": "workspace:*",
44
+ "@lssm/module.learning-journey": "workspace:*"
48
45
  },
49
46
  "devDependencies": {
50
- "@lssm/tool.tsdown": "0.0.0-canary-20251217080011",
51
- "@lssm/tool.typescript": "0.0.0-canary-20251217080011",
47
+ "@lssm/tool.tsdown": "workspace:*",
48
+ "@lssm/tool.typescript": "workspace:*",
52
49
  "tsdown": "^0.17.4",
53
50
  "typescript": "^5.9.3"
54
51
  },