@contractspec/example.policy-safe-knowledge-assistant 1.56.1 → 1.58.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 (88) hide show
  1. package/.turbo/turbo-build.log +59 -56
  2. package/.turbo/turbo-prebuild.log +1 -0
  3. package/CHANGELOG.md +46 -0
  4. package/dist/browser/docs/index.js +38 -0
  5. package/dist/browser/docs/policy-safe-knowledge-assistant.docblock.js +38 -0
  6. package/dist/browser/example.js +37 -0
  7. package/dist/browser/handlers/index.js +334 -0
  8. package/dist/browser/handlers/policy-safe-knowledge-assistant.handlers.js +334 -0
  9. package/dist/browser/index.js +917 -0
  10. package/dist/browser/orchestrator/buildAnswer.js +73 -0
  11. package/dist/browser/policy-safe-knowledge-assistant.feature.js +57 -0
  12. package/dist/browser/seed/fixtures.js +35 -0
  13. package/dist/browser/seed/index.js +35 -0
  14. package/dist/browser/seeders/index.js +12 -0
  15. package/dist/browser/ui/PolicySafeKnowledgeAssistantDashboard.js +420 -0
  16. package/dist/browser/ui/hooks/usePolicySafeKnowledgeAssistant.js +154 -0
  17. package/dist/browser/ui/index.js +420 -0
  18. package/dist/docs/index.d.ts +2 -1
  19. package/dist/docs/index.d.ts.map +1 -0
  20. package/dist/docs/index.js +39 -1
  21. package/dist/docs/policy-safe-knowledge-assistant.docblock.d.ts +2 -1
  22. package/dist/docs/policy-safe-knowledge-assistant.docblock.d.ts.map +1 -0
  23. package/dist/docs/policy-safe-knowledge-assistant.docblock.js +37 -33
  24. package/dist/example.d.ts +2 -6
  25. package/dist/example.d.ts.map +1 -1
  26. package/dist/example.js +35 -51
  27. package/dist/handlers/index.d.ts +2 -2
  28. package/dist/handlers/index.d.ts.map +1 -0
  29. package/dist/handlers/index.js +334 -2
  30. package/dist/handlers/policy-safe-knowledge-assistant.handlers.d.ts +124 -122
  31. package/dist/handlers/policy-safe-knowledge-assistant.handlers.d.ts.map +1 -1
  32. package/dist/handlers/policy-safe-knowledge-assistant.handlers.js +325 -254
  33. package/dist/index.d.ts +11 -8
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +918 -10
  36. package/dist/integration.test.d.ts +2 -0
  37. package/dist/integration.test.d.ts.map +1 -0
  38. package/dist/node/docs/index.js +38 -0
  39. package/dist/node/docs/policy-safe-knowledge-assistant.docblock.js +38 -0
  40. package/dist/node/example.js +37 -0
  41. package/dist/node/handlers/index.js +334 -0
  42. package/dist/node/handlers/policy-safe-knowledge-assistant.handlers.js +334 -0
  43. package/dist/node/index.js +917 -0
  44. package/dist/node/orchestrator/buildAnswer.js +73 -0
  45. package/dist/node/policy-safe-knowledge-assistant.feature.js +57 -0
  46. package/dist/node/seed/fixtures.js +35 -0
  47. package/dist/node/seed/index.js +35 -0
  48. package/dist/node/seeders/index.js +12 -0
  49. package/dist/node/ui/PolicySafeKnowledgeAssistantDashboard.js +420 -0
  50. package/dist/node/ui/hooks/usePolicySafeKnowledgeAssistant.js +154 -0
  51. package/dist/node/ui/index.js +420 -0
  52. package/dist/orchestrator/buildAnswer.d.ts +40 -42
  53. package/dist/orchestrator/buildAnswer.d.ts.map +1 -1
  54. package/dist/orchestrator/buildAnswer.js +72 -75
  55. package/dist/policy-safe-knowledge-assistant.feature.d.ts +1 -6
  56. package/dist/policy-safe-knowledge-assistant.feature.d.ts.map +1 -1
  57. package/dist/policy-safe-knowledge-assistant.feature.js +56 -148
  58. package/dist/seed/fixtures.d.ts +28 -31
  59. package/dist/seed/fixtures.d.ts.map +1 -1
  60. package/dist/seed/fixtures.js +35 -33
  61. package/dist/seed/index.d.ts +2 -2
  62. package/dist/seed/index.d.ts.map +1 -0
  63. package/dist/seed/index.js +36 -3
  64. package/dist/seeders/index.d.ts +4 -8
  65. package/dist/seeders/index.d.ts.map +1 -1
  66. package/dist/seeders/index.js +11 -14
  67. package/dist/ui/PolicySafeKnowledgeAssistantDashboard.d.ts +1 -6
  68. package/dist/ui/PolicySafeKnowledgeAssistantDashboard.d.ts.map +1 -1
  69. package/dist/ui/PolicySafeKnowledgeAssistantDashboard.js +415 -225
  70. package/dist/ui/hooks/usePolicySafeKnowledgeAssistant.d.ts +49 -51
  71. package/dist/ui/hooks/usePolicySafeKnowledgeAssistant.d.ts.map +1 -1
  72. package/dist/ui/hooks/usePolicySafeKnowledgeAssistant.js +147 -185
  73. package/dist/ui/index.d.ts +2 -2
  74. package/dist/ui/index.d.ts.map +1 -0
  75. package/dist/ui/index.js +420 -2
  76. package/package.json +174 -45
  77. package/tsdown.config.js +1 -2
  78. package/.turbo/turbo-build$colon$bundle.log +0 -55
  79. package/dist/docs/policy-safe-knowledge-assistant.docblock.js.map +0 -1
  80. package/dist/example.js.map +0 -1
  81. package/dist/handlers/policy-safe-knowledge-assistant.handlers.js.map +0 -1
  82. package/dist/orchestrator/buildAnswer.js.map +0 -1
  83. package/dist/policy-safe-knowledge-assistant.feature.js.map +0 -1
  84. package/dist/seed/fixtures.js.map +0 -1
  85. package/dist/seeders/index.js.map +0 -1
  86. package/dist/ui/PolicySafeKnowledgeAssistantDashboard.js.map +0 -1
  87. package/dist/ui/hooks/usePolicySafeKnowledgeAssistant.js.map +0 -1
  88. package/tsconfig.tsbuildinfo +0 -1
@@ -1,55 +1,53 @@
1
- //#region src/ui/hooks/usePolicySafeKnowledgeAssistant.d.ts
2
1
  type AllowedScope = 'education_only' | 'generic_info' | 'escalation_required';
3
- interface UsePolicySafeKnowledgeAssistantState {
4
- context: {
5
- locale: string;
6
- jurisdiction: string;
7
- allowedScope: AllowedScope;
8
- kbSnapshotId: string | null;
9
- } | null;
10
- loading: boolean;
11
- error: Error | null;
12
- lastAnswer: {
13
- refused?: boolean;
14
- refusalReason?: string;
15
- sections: {
16
- heading: string;
17
- body: string;
18
- }[];
19
- citations: {
20
- kbSnapshotId: string;
21
- sourceId: string;
22
- excerpt?: string;
23
- }[];
24
- } | null;
25
- lastRuleId: string | null;
26
- lastRuleVersionId: string | null;
27
- lastSnapshotId: string | null;
28
- lastReviewTaskId: string | null;
2
+ export interface UsePolicySafeKnowledgeAssistantState {
3
+ context: {
4
+ locale: string;
5
+ jurisdiction: string;
6
+ allowedScope: AllowedScope;
7
+ kbSnapshotId: string | null;
8
+ } | null;
9
+ loading: boolean;
10
+ error: Error | null;
11
+ lastAnswer: {
12
+ refused?: boolean;
13
+ refusalReason?: string;
14
+ sections: {
15
+ heading: string;
16
+ body: string;
17
+ }[];
18
+ citations: {
19
+ kbSnapshotId: string;
20
+ sourceId: string;
21
+ excerpt?: string;
22
+ }[];
23
+ } | null;
24
+ lastRuleId: string | null;
25
+ lastRuleVersionId: string | null;
26
+ lastSnapshotId: string | null;
27
+ lastReviewTaskId: string | null;
29
28
  }
30
- declare function usePolicySafeKnowledgeAssistant(): {
31
- state: UsePolicySafeKnowledgeAssistantState;
32
- derived: {
33
- projectId: string;
34
- };
35
- actions: {
36
- refreshContext: () => Promise<void>;
37
- setContext: (input: {
38
- locale: string;
39
- jurisdiction: string;
40
- allowedScope: AllowedScope;
41
- }) => Promise<void>;
42
- askAssistant: (question: string) => Promise<void>;
43
- createDemoRule: () => Promise<string>;
44
- upsertRuleVersion: (input: {
45
- ruleId: string;
46
- content: string;
47
- }) => Promise<string>;
48
- approveRuleVersion: (ruleVersionId: string) => Promise<void>;
49
- publishSnapshot: () => Promise<string>;
50
- simulateHighRiskChangeAndApprove: (ruleVersionId: string) => Promise<string>;
51
- };
29
+ export declare function usePolicySafeKnowledgeAssistant(): {
30
+ state: UsePolicySafeKnowledgeAssistantState;
31
+ derived: {
32
+ projectId: string;
33
+ };
34
+ actions: {
35
+ refreshContext: () => Promise<void>;
36
+ setContext: (input: {
37
+ locale: string;
38
+ jurisdiction: string;
39
+ allowedScope: AllowedScope;
40
+ }) => Promise<void>;
41
+ askAssistant: (question: string) => Promise<void>;
42
+ createDemoRule: () => Promise<string>;
43
+ upsertRuleVersion: (input: {
44
+ ruleId: string;
45
+ content: string;
46
+ }) => Promise<string>;
47
+ approveRuleVersion: (ruleVersionId: string) => Promise<void>;
48
+ publishSnapshot: () => Promise<string>;
49
+ simulateHighRiskChangeAndApprove: (ruleVersionId: string) => Promise<string>;
50
+ };
52
51
  };
53
- //#endregion
54
- export { UsePolicySafeKnowledgeAssistantState, usePolicySafeKnowledgeAssistant };
52
+ export {};
55
53
  //# sourceMappingURL=usePolicySafeKnowledgeAssistant.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePolicySafeKnowledgeAssistant.d.ts","names":[],"sources":["../../../src/ui/hooks/usePolicySafeKnowledgeAssistant.ts"],"sourcesContent":[],"mappings":";KAKK,YAAA;AAAA,UAGY,oCAAA,CAHA;EAGA,OAAA,EAAA;IAsDD,MAAA,EAAA,MAAA;;kBAlDE;IAkGE,YAAA,EAAA,MAAA,GAAA,IAAA;EACf,CAAA,GAAA,IAAA;EAgBsB,OAAA,EAAA,OAAA;SA/GlB;EA4I4C,UAAA,EAAA;IAcrB,OAAA,CAAA,EAAA,OAAA;;IAkBA,QAAA,EAAA;MAAA,OAAA,EAAA,MAAA;;;;;;;;;;;;;;iBA9HhB,+BAAA,CAAA;;;;;;;;;;oBAgDI;UACf;wCAgBsB;;;;;UA6B0B;mDAcrB;;iEAkBA"}
1
+ {"version":3,"file":"usePolicySafeKnowledgeAssistant.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/usePolicySafeKnowledgeAssistant.ts"],"names":[],"mappings":"AAKA,KAAK,YAAY,GAAG,gBAAgB,GAAG,cAAc,GAAG,qBAAqB,CAAC;AAG9E,MAAM,WAAW,oCAAoC;IACnD,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,YAAY,CAAC;QAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;KAC7B,GAAG,IAAI,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE;QACV,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAC9C,SAAS,EAAE;YACT,YAAY,EAAE,MAAM,CAAC;YACrB,QAAQ,EAAE,MAAM,CAAC;YACjB,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,EAAE,CAAC;KACL,GAAG,IAAI,CAAC;IACT,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AA+BD,wBAAgB,+BAA+B;;;;;;;4BA6C7B;YACZ,MAAM,EAAE,MAAM,CAAC;YACf,YAAY,EAAE,MAAM,CAAC;YACrB,YAAY,EAAE,YAAY,CAAC;SAC5B;iCAgBgB,MAAM;;mCA6BT;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE;4CAc3B,MAAM;;0DAkBN,MAAM;;EAwC/B"}
@@ -1,193 +1,155 @@
1
- 'use client';
2
-
1
+ // @bun
2
+ // src/ui/hooks/usePolicySafeKnowledgeAssistant.ts
3
3
  import { useCallback, useEffect, useMemo, useState } from "react";
4
4
  import { useTemplateRuntime } from "@contractspec/lib.example-shared-ui";
5
-
6
- //#region src/ui/hooks/usePolicySafeKnowledgeAssistant.ts
5
+ "use client";
7
6
  function isCitationLike(value) {
8
- if (!value || typeof value !== "object") return false;
9
- const v = value;
10
- return typeof v.kbSnapshotId === "string" && typeof v.sourceId === "string";
7
+ if (!value || typeof value !== "object")
8
+ return false;
9
+ const v = value;
10
+ return typeof v.kbSnapshotId === "string" && typeof v.sourceId === "string";
11
11
  }
12
12
  function toCitations(value) {
13
- if (!Array.isArray(value)) return [];
14
- return value.filter(isCitationLike).map((c) => ({
15
- kbSnapshotId: c.kbSnapshotId,
16
- sourceId: c.sourceId,
17
- excerpt: c.excerpt
18
- }));
13
+ if (!Array.isArray(value))
14
+ return [];
15
+ return value.filter(isCitationLike).map((c) => ({
16
+ kbSnapshotId: c.kbSnapshotId,
17
+ sourceId: c.sourceId,
18
+ excerpt: c.excerpt
19
+ }));
19
20
  }
20
21
  function usePolicySafeKnowledgeAssistant() {
21
- const { handlers, projectId } = useTemplateRuntime();
22
- const api = handlers.policySafeKnowledgeAssistant;
23
- const [state, setState] = useState({
24
- context: null,
25
- loading: true,
26
- error: null,
27
- lastAnswer: null,
28
- lastRuleId: null,
29
- lastRuleVersionId: null,
30
- lastSnapshotId: null,
31
- lastReviewTaskId: null
32
- });
33
- const refreshContext = useCallback(async () => {
34
- try {
35
- setState((s) => ({
36
- ...s,
37
- loading: true,
38
- error: null
39
- }));
40
- const ctx = await api.getUserContext({ projectId });
41
- setState((s) => ({
42
- ...s,
43
- context: {
44
- locale: ctx.locale,
45
- jurisdiction: ctx.jurisdiction,
46
- allowedScope: ctx.allowedScope,
47
- kbSnapshotId: ctx.kbSnapshotId
48
- },
49
- loading: false
50
- }));
51
- } catch (e) {
52
- setState((s) => ({
53
- ...s,
54
- loading: false,
55
- error: e instanceof Error ? e : /* @__PURE__ */ new Error("Unknown error")
56
- }));
57
- }
58
- }, [api, projectId]);
59
- useEffect(() => {
60
- refreshContext();
61
- }, [refreshContext]);
62
- const setContext = useCallback(async (input) => {
63
- const ctx = await api.setUserContext({
64
- projectId,
65
- ...input
66
- });
67
- setState((s) => ({
68
- ...s,
69
- context: {
70
- locale: ctx.locale,
71
- jurisdiction: ctx.jurisdiction,
72
- allowedScope: ctx.allowedScope,
73
- kbSnapshotId: ctx.kbSnapshotId
74
- }
75
- }));
76
- }, [api, projectId]);
77
- const askAssistant = useCallback(async (question) => {
78
- const answerUnknown = await api.answer({
79
- projectId,
80
- question
81
- });
82
- const answer = answerUnknown;
83
- setState((s) => ({
84
- ...s,
85
- lastAnswer: {
86
- refused: answer.refused,
87
- refusalReason: answer.refusalReason,
88
- sections: answer.sections,
89
- citations: toCitations(answerUnknown.citations)
90
- }
91
- }));
92
- }, [api, projectId]);
93
- const createDemoRule = useCallback(async () => {
94
- const rule = await api.createRule({
95
- projectId,
96
- jurisdiction: state.context?.jurisdiction ?? "EU",
97
- topicKey: "tax_reporting"
98
- });
99
- setState((s) => ({
100
- ...s,
101
- lastRuleId: rule.id
102
- }));
103
- return rule.id;
104
- }, [
105
- api,
106
- projectId,
107
- state.context?.jurisdiction
108
- ]);
109
- const upsertRuleVersion = useCallback(async (input) => {
110
- const rv = await api.upsertRuleVersion({
111
- projectId,
112
- ruleId: input.ruleId,
113
- content: input.content,
114
- sourceRefs: [{
115
- sourceDocumentId: "src_demo",
116
- excerpt: "demo excerpt"
117
- }]
118
- });
119
- setState((s) => ({
120
- ...s,
121
- lastRuleVersionId: rv.id
122
- }));
123
- return rv.id;
124
- }, [api, projectId]);
125
- const approveRuleVersion = useCallback(async (ruleVersionId) => {
126
- await api.approveRuleVersion({
127
- ruleVersionId,
128
- approver: "demo_expert"
129
- });
130
- }, [api]);
131
- const publishSnapshot = useCallback(async () => {
132
- const snap = await api.publishSnapshot({
133
- projectId,
134
- jurisdiction: state.context?.jurisdiction ?? "EU",
135
- asOfDate: /* @__PURE__ */ new Date("2026-02-01T00:00:00.000Z")
136
- });
137
- setState((s) => ({
138
- ...s,
139
- lastSnapshotId: snap.id
140
- }));
141
- await refreshContext();
142
- return snap.id;
143
- }, [
144
- api,
145
- projectId,
146
- refreshContext,
147
- state.context?.jurisdiction
148
- ]);
149
- const simulateHighRiskChangeAndApprove = useCallback(async (ruleVersionId) => {
150
- const cand = await api.createChangeCandidate({
151
- projectId,
152
- jurisdiction: state.context?.jurisdiction ?? "EU",
153
- diffSummary: "Simulated change (demo)",
154
- riskLevel: "high",
155
- proposedRuleVersionIds: [ruleVersionId]
156
- });
157
- const review = await api.createReviewTask({ changeCandidateId: cand.id });
158
- setState((s) => ({
159
- ...s,
160
- lastReviewTaskId: review.id
161
- }));
162
- await api.submitDecision({
163
- reviewTaskId: review.id,
164
- decision: "approve",
165
- decidedByRole: "expert",
166
- decidedBy: "demo_expert"
167
- });
168
- await api.publishIfReady({ jurisdiction: state.context?.jurisdiction ?? "EU" });
169
- return review.id;
170
- }, [
171
- api,
172
- projectId,
173
- state.context?.jurisdiction
174
- ]);
175
- return {
176
- state,
177
- derived: useMemo(() => ({ projectId }), [projectId]),
178
- actions: {
179
- refreshContext,
180
- setContext,
181
- askAssistant,
182
- createDemoRule,
183
- upsertRuleVersion,
184
- approveRuleVersion,
185
- publishSnapshot,
186
- simulateHighRiskChangeAndApprove
187
- }
188
- };
22
+ const { handlers, projectId } = useTemplateRuntime();
23
+ const api = handlers.policySafeKnowledgeAssistant;
24
+ const [state, setState] = useState({
25
+ context: null,
26
+ loading: true,
27
+ error: null,
28
+ lastAnswer: null,
29
+ lastRuleId: null,
30
+ lastRuleVersionId: null,
31
+ lastSnapshotId: null,
32
+ lastReviewTaskId: null
33
+ });
34
+ const refreshContext = useCallback(async () => {
35
+ try {
36
+ setState((s) => ({ ...s, loading: true, error: null }));
37
+ const ctx = await api.getUserContext({ projectId });
38
+ setState((s) => ({
39
+ ...s,
40
+ context: {
41
+ locale: ctx.locale,
42
+ jurisdiction: ctx.jurisdiction,
43
+ allowedScope: ctx.allowedScope,
44
+ kbSnapshotId: ctx.kbSnapshotId
45
+ },
46
+ loading: false
47
+ }));
48
+ } catch (e) {
49
+ setState((s) => ({
50
+ ...s,
51
+ loading: false,
52
+ error: e instanceof Error ? e : new Error("Unknown error")
53
+ }));
54
+ }
55
+ }, [api, projectId]);
56
+ useEffect(() => {
57
+ refreshContext();
58
+ }, [refreshContext]);
59
+ const setContext = useCallback(async (input) => {
60
+ const ctx = await api.setUserContext({ projectId, ...input });
61
+ setState((s) => ({
62
+ ...s,
63
+ context: {
64
+ locale: ctx.locale,
65
+ jurisdiction: ctx.jurisdiction,
66
+ allowedScope: ctx.allowedScope,
67
+ kbSnapshotId: ctx.kbSnapshotId
68
+ }
69
+ }));
70
+ }, [api, projectId]);
71
+ const askAssistant = useCallback(async (question) => {
72
+ const answerUnknown = await api.answer({ projectId, question });
73
+ const answer = answerUnknown;
74
+ setState((s) => ({
75
+ ...s,
76
+ lastAnswer: {
77
+ refused: answer.refused,
78
+ refusalReason: answer.refusalReason,
79
+ sections: answer.sections,
80
+ citations: toCitations(answerUnknown.citations)
81
+ }
82
+ }));
83
+ }, [api, projectId]);
84
+ const createDemoRule = useCallback(async () => {
85
+ const rule = await api.createRule({
86
+ projectId,
87
+ jurisdiction: state.context?.jurisdiction ?? "EU",
88
+ topicKey: "tax_reporting"
89
+ });
90
+ setState((s) => ({ ...s, lastRuleId: rule.id }));
91
+ return rule.id;
92
+ }, [api, projectId, state.context?.jurisdiction]);
93
+ const upsertRuleVersion = useCallback(async (input) => {
94
+ const rv = await api.upsertRuleVersion({
95
+ projectId,
96
+ ruleId: input.ruleId,
97
+ content: input.content,
98
+ sourceRefs: [{ sourceDocumentId: "src_demo", excerpt: "demo excerpt" }]
99
+ });
100
+ setState((s) => ({ ...s, lastRuleVersionId: rv.id }));
101
+ return rv.id;
102
+ }, [api, projectId]);
103
+ const approveRuleVersion = useCallback(async (ruleVersionId) => {
104
+ await api.approveRuleVersion({ ruleVersionId, approver: "demo_expert" });
105
+ }, [api]);
106
+ const publishSnapshot = useCallback(async () => {
107
+ const snap = await api.publishSnapshot({
108
+ projectId,
109
+ jurisdiction: state.context?.jurisdiction ?? "EU",
110
+ asOfDate: new Date("2026-02-01T00:00:00.000Z")
111
+ });
112
+ setState((s) => ({ ...s, lastSnapshotId: snap.id }));
113
+ await refreshContext();
114
+ return snap.id;
115
+ }, [api, projectId, refreshContext, state.context?.jurisdiction]);
116
+ const simulateHighRiskChangeAndApprove = useCallback(async (ruleVersionId) => {
117
+ const cand = await api.createChangeCandidate({
118
+ projectId,
119
+ jurisdiction: state.context?.jurisdiction ?? "EU",
120
+ diffSummary: "Simulated change (demo)",
121
+ riskLevel: "high",
122
+ proposedRuleVersionIds: [ruleVersionId]
123
+ });
124
+ const review = await api.createReviewTask({ changeCandidateId: cand.id });
125
+ setState((s) => ({ ...s, lastReviewTaskId: review.id }));
126
+ await api.submitDecision({
127
+ reviewTaskId: review.id,
128
+ decision: "approve",
129
+ decidedByRole: "expert",
130
+ decidedBy: "demo_expert"
131
+ });
132
+ await api.publishIfReady({
133
+ jurisdiction: state.context?.jurisdiction ?? "EU"
134
+ });
135
+ return review.id;
136
+ }, [api, projectId, state.context?.jurisdiction]);
137
+ const derived = useMemo(() => ({ projectId }), [projectId]);
138
+ return {
139
+ state,
140
+ derived,
141
+ actions: {
142
+ refreshContext,
143
+ setContext,
144
+ askAssistant,
145
+ createDemoRule,
146
+ upsertRuleVersion,
147
+ approveRuleVersion,
148
+ publishSnapshot,
149
+ simulateHighRiskChangeAndApprove
150
+ }
151
+ };
189
152
  }
190
-
191
- //#endregion
192
- export { usePolicySafeKnowledgeAssistant };
193
- //# sourceMappingURL=usePolicySafeKnowledgeAssistant.js.map
153
+ export {
154
+ usePolicySafeKnowledgeAssistant
155
+ };
@@ -1,2 +1,2 @@
1
- import { PolicySafeKnowledgeAssistantDashboard } from "./PolicySafeKnowledgeAssistantDashboard.js";
2
- export { PolicySafeKnowledgeAssistantDashboard };
1
+ export * from './PolicySafeKnowledgeAssistantDashboard';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,cAAc,yCAAyC,CAAC"}