@contractspec/example.kb-update-pipeline 3.7.19 → 3.7.21
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 +59 -58
- package/CHANGELOG.md +22 -0
- package/dist/browser/example.js +1 -1
- package/dist/browser/index.js +1 -1
- package/dist/browser/kb-update-pipeline.feature.js +1 -1
- package/dist/example.d.ts +3 -2
- package/dist/example.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -1
- package/dist/kb-update-pipeline.feature.js +1 -1
- package/dist/node/example.js +1 -1
- package/dist/node/index.js +1 -1
- package/dist/node/kb-update-pipeline.feature.js +1 -1
- package/package.json +3 -3
- package/src/example.ts +16 -22
- package/src/index.ts +2 -0
- package/src/kb-update-pipeline.feature.ts +1 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,58 +1,59 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
[
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
./
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
./
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
./
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
./
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
./
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
./
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
1
|
+
|
|
2
|
+
[0m[2m[35m$[0m [2m[1mcontractspec-bun-build prebuild[0m
|
|
3
|
+
[0m[2m[35m$[0m [2m[1mbun run build:bundle && bun run build:types[0m
|
|
4
|
+
[0m[2m[35m$[0m [2m[1mcontractspec-bun-build transpile[0m
|
|
5
|
+
[contractspec-bun-build] transpile target=bun root=src entries=14 noBundle=false
|
|
6
|
+
[32mBundled 14 modules in 28ms[0m
|
|
7
|
+
|
|
8
|
+
[34mdocs/index.js[0m 1.30 KB [2m(entry point)[0m
|
|
9
|
+
[34m./index.js[0m 14.31 KB [2m(entry point)[0m
|
|
10
|
+
[34m./kb-update-pipeline.feature.js[0m 1.93 KB [2m(entry point)[0m
|
|
11
|
+
[34moperations/index.js[0m 4.37 KB [2m(entry point)[0m
|
|
12
|
+
[34moperations/pipeline.js[0m 4.37 KB [2m(entry point)[0m
|
|
13
|
+
[34m./presentations.js[0m 2.30 KB [2m(entry point)[0m
|
|
14
|
+
[34mtests/operations.test-spec.js[0m 1.60 KB [2m(entry point)[0m
|
|
15
|
+
[34mdocs/kb-update-pipeline.docblock.js[0m 1.30 KB [2m(entry point)[0m
|
|
16
|
+
[34mentities/index.js[0m 1.12 KB [2m(entry point)[0m
|
|
17
|
+
[34mentities/models.js[0m 1.12 KB [2m(entry point)[0m
|
|
18
|
+
[34m./events.js[0m 2.36 KB [2m(entry point)[0m
|
|
19
|
+
[34m./example.js[0m 0.67 KB [2m(entry point)[0m
|
|
20
|
+
[34mhandlers/index.js[0m 2.30 KB [2m(entry point)[0m
|
|
21
|
+
[34mhandlers/memory.handlers.js[0m 2.30 KB [2m(entry point)[0m
|
|
22
|
+
|
|
23
|
+
[contractspec-bun-build] transpile target=node root=src entries=14 noBundle=false
|
|
24
|
+
[32mBundled 14 modules in 31ms[0m
|
|
25
|
+
|
|
26
|
+
[34mdocs/index.js[0m 1.29 KB [2m(entry point)[0m
|
|
27
|
+
[34m./index.js[0m 14.30 KB [2m(entry point)[0m
|
|
28
|
+
[34m./kb-update-pipeline.feature.js[0m 1.92 KB [2m(entry point)[0m
|
|
29
|
+
[34moperations/index.js[0m 4.36 KB [2m(entry point)[0m
|
|
30
|
+
[34moperations/pipeline.js[0m 4.36 KB [2m(entry point)[0m
|
|
31
|
+
[34m./presentations.js[0m 2.29 KB [2m(entry point)[0m
|
|
32
|
+
[34mtests/operations.test-spec.js[0m 1.59 KB [2m(entry point)[0m
|
|
33
|
+
[34mdocs/kb-update-pipeline.docblock.js[0m 1.29 KB [2m(entry point)[0m
|
|
34
|
+
[34mentities/index.js[0m 1.12 KB [2m(entry point)[0m
|
|
35
|
+
[34mentities/models.js[0m 1.12 KB [2m(entry point)[0m
|
|
36
|
+
[34m./events.js[0m 2.36 KB [2m(entry point)[0m
|
|
37
|
+
[34m./example.js[0m 0.66 KB [2m(entry point)[0m
|
|
38
|
+
[34mhandlers/index.js[0m 2.30 KB [2m(entry point)[0m
|
|
39
|
+
[34mhandlers/memory.handlers.js[0m 2.30 KB [2m(entry point)[0m
|
|
40
|
+
|
|
41
|
+
[contractspec-bun-build] transpile target=browser root=src entries=14 noBundle=false
|
|
42
|
+
[32mBundled 14 modules in 13ms[0m
|
|
43
|
+
|
|
44
|
+
[34mdocs/index.js[0m 1.29 KB [2m(entry point)[0m
|
|
45
|
+
[34m./index.js[0m 14.30 KB [2m(entry point)[0m
|
|
46
|
+
[34m./kb-update-pipeline.feature.js[0m 1.92 KB [2m(entry point)[0m
|
|
47
|
+
[34moperations/index.js[0m 4.36 KB [2m(entry point)[0m
|
|
48
|
+
[34moperations/pipeline.js[0m 4.36 KB [2m(entry point)[0m
|
|
49
|
+
[34m./presentations.js[0m 2.29 KB [2m(entry point)[0m
|
|
50
|
+
[34mtests/operations.test-spec.js[0m 1.59 KB [2m(entry point)[0m
|
|
51
|
+
[34mdocs/kb-update-pipeline.docblock.js[0m 1.29 KB [2m(entry point)[0m
|
|
52
|
+
[34mentities/index.js[0m 1.12 KB [2m(entry point)[0m
|
|
53
|
+
[34mentities/models.js[0m 1.12 KB [2m(entry point)[0m
|
|
54
|
+
[34m./events.js[0m 2.36 KB [2m(entry point)[0m
|
|
55
|
+
[34m./example.js[0m 0.66 KB [2m(entry point)[0m
|
|
56
|
+
[34mhandlers/index.js[0m 2.30 KB [2m(entry point)[0m
|
|
57
|
+
[34mhandlers/memory.handlers.js[0m 2.30 KB [2m(entry point)[0m
|
|
58
|
+
|
|
59
|
+
[0m[2m[35m$[0m [2m[1mcontractspec-bun-build types[0m
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# @contractspec/example.kb-update-pipeline
|
|
2
2
|
|
|
3
|
+
## 3.7.21
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- chore: auto-bump internal dependents
|
|
8
|
+
- Updated dependencies because of Add FormSpec layout hints, semantic field rendering, and portable text/textarea input-group addons.
|
|
9
|
+
- Updated dependencies because of Add ThemeSpec light/dark modes and a design-system Tailwind bridge for CSS variables, presets, CSS text, and OKLCH color pass-through.
|
|
10
|
+
- Updated dependencies because of Add a canonical typed result system for ContractSpec success and failure propagation across operations, workflows, jobs, server adapters, MCP, GraphQL, and React clients.
|
|
11
|
+
- @contractspec/lib.contracts-spec@5.5.0
|
|
12
|
+
- @contractspec/lib.schema@3.7.14
|
|
13
|
+
|
|
14
|
+
## 3.7.20
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- chore: auto-bump internal dependents
|
|
19
|
+
- Updated dependencies because of Add a family-aware ContractSpec Adoption Engine, expand contract authoring targets across CLI and VS Code tooling, and refresh release-facing schema and policy artifacts for downstream workspaces.
|
|
20
|
+
- Updated dependencies because of Improve app-config, theme, and feature authoring with explicit validation APIs, first-class theme discovery and scaffolding, and key-based app-config generation across contracts, workspace tooling, and the CLI.
|
|
21
|
+
- Updated dependencies because of Refresh root, package, website, and LLM-facing docs so Connect, Builder, release capsules, and the current contracts-spec export surface stay aligned.
|
|
22
|
+
- Updated dependencies because of Persist canonical knowledge payload text during indexing and align the retrieval/query docs with the corrected behavior.
|
|
23
|
+
- @contractspec/lib.contracts-spec@5.4.0
|
|
24
|
+
|
|
3
25
|
## 3.7.19
|
|
4
26
|
|
|
5
27
|
### Patch Changes
|
package/dist/browser/example.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineExample as g}from"@contractspec/lib.contracts-spec";var h=g({meta:{key:"kb-update-pipeline",version:"1.0.0",title:"
|
|
1
|
+
import{defineExample as g}from"@contractspec/lib.contracts-spec/examples";var h=g({meta:{key:"examples.kb-update-pipeline",version:"1.0.0",title:"Kb Update Pipeline",description:"Example: KB update automation pipeline with HITL review and auditability.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","kb-update-pipeline"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.kb-update-pipeline"}}),q=h;export{q as default,h as ExamplesKbUpdatePipelineExample};
|
package/dist/browser/index.js
CHANGED
|
@@ -16,4 +16,4 @@ import{registerDocBlocks as I}from"@contractspec/lib.contracts-spec/docs";var v=
|
|
|
16
16
|
- kb.change.summarized
|
|
17
17
|
- kb.patch.proposed
|
|
18
18
|
- kb.review.requested
|
|
19
|
-
- kb.review.decided`}];I(v);import{defineEnum as Z,defineSchemaModel as D,ScalarTypeEnum as A}from"@contractspec/lib.schema";var R=Z("ChangeRiskLevel",["low","medium","high"]),k=Z("ReviewAssignedRole",["curator","expert"]),$=Z("ReviewDecision",["approve","reject"]),N=D({name:"ChangeCandidate",description:"Candidate change detected in a source document.",fields:{id:{type:A.String_unsecure(),isOptional:!1},sourceDocumentId:{type:A.String_unsecure(),isOptional:!1},detectedAt:{type:A.DateTime(),isOptional:!1},diffSummary:{type:A.String_unsecure(),isOptional:!1},riskLevel:{type:R,isOptional:!1}}}),H=D({name:"ReviewTask",description:"Human verification task for a change candidate.",fields:{id:{type:A.String_unsecure(),isOptional:!1},changeCandidateId:{type:A.String_unsecure(),isOptional:!1},status:{type:A.String_unsecure(),isOptional:!1},assignedRole:{type:k,isOptional:!1},decision:{type:$,isOptional:!0},decidedAt:{type:A.DateTime(),isOptional:!0},decidedBy:{type:A.String_unsecure(),isOptional:!0}}});import{defineEvent as f,StabilityEnum as G}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as J,ScalarTypeEnum as _}from"@contractspec/lib.schema";var P=J({name:"KbChangeDetectedPayload",description:"Emitted when a source change is detected.",fields:{changeCandidateId:{type:_.String_unsecure(),isOptional:!1},sourceDocumentId:{type:_.String_unsecure(),isOptional:!1},riskLevel:{type:_.String_unsecure(),isOptional:!1}}}),_x=f({meta:{key:"kb.change.detected",version:"1.0.0",description:"KB source change detected.",stability:G.Experimental,owners:[],tags:[]},payload:P}),h=J({name:"KbChangeSummarizedPayload",description:"Emitted when a change summary is produced.",fields:{changeCandidateId:{type:_.String_unsecure(),isOptional:!1},summary:{type:_.String_unsecure(),isOptional:!1},riskLevel:{type:_.String_unsecure(),isOptional:!1}}}),Ax=f({meta:{key:"kb.change.summarized",version:"1.0.0",description:"KB change summarized.",stability:G.Experimental,owners:[],tags:[]},payload:h}),M=J({name:"KbPatchProposedPayload",description:"Emitted when draft rule patches are proposed.",fields:{changeCandidateId:{type:_.String_unsecure(),isOptional:!1},proposedRuleVersionIds:{type:_.String_unsecure(),isArray:!0,isOptional:!1}}}),Lx=f({meta:{key:"kb.patch.proposed",version:"1.0.0",description:"KB rule patch proposed (draft versions created).",stability:G.Experimental,owners:[],tags:[]},payload:M}),y=J({name:"KbReviewRequestedPayload",description:"Emitted when a review is requested.",fields:{reviewTaskId:{type:_.String_unsecure(),isOptional:!1},changeCandidateId:{type:_.String_unsecure(),isOptional:!1},assignedRole:{type:_.String_unsecure(),isOptional:!1}}}),jx=f({meta:{key:"kb.review.requested",version:"1.0.0",description:"KB review requested.",stability:G.Experimental,owners:[],tags:[]},payload:y}),T=J({name:"KbReviewDecidedPayload",description:"Emitted when a review task is decided.",fields:{reviewTaskId:{type:_.String_unsecure(),isOptional:!1},decision:{type:_.String_unsecure(),isOptional:!1},decidedBy:{type:_.String_unsecure(),isOptional:!1}}}),Bx=f({meta:{key:"kb.review.decided",version:"1.0.0",description:"KB review decided.",stability:G.Experimental,owners:[],tags:[]},payload:T});import{defineExample as o}from"@contractspec/lib.contracts-spec";var m=o({meta:{key:"kb-update-pipeline",version:"1.0.0",title:"KB Update Pipeline",description:"Automation proposes KB updates; humans verify; everything audited and notified.",kind:"knowledge",visibility:"public",stability:"experimental",owners:["@platform.core"],tags:["knowledge","pipeline","hitl","audit"]},docs:{rootDocId:"docs.examples.kb-update-pipeline"},entrypoints:{packageName:"@contractspec/example.kb-update-pipeline",feature:"./feature",contracts:"./contracts",handlers:"./handlers",docs:"./docs"},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["markdown","specs","builder"]},studio:{enabled:!0,installable:!0},mcp:{enabled:!0}}}),r=m;function Gx(){return{candidates:new Map,reviewTasks:new Map,proposedRuleVersionIdsByCandidate:new Map,approvedRuleVersionIds:new Set,notifications:[]}}function b(g,X){return`${g}_${X.replace(/[^a-zA-Z0-9_-]/g,"_")}`}function Jx(g){async function X(x){return{candidates:[...g.candidates.values()].filter((j)=>j.sourceDocumentId.startsWith(`${x.jurisdiction}_`)||!0)}}async function F(x){let L=g.candidates.get(x.changeCandidateId);if(!L)throw Error("CHANGE_CANDIDATE_NOT_FOUND");let j=L.riskLevel==="high"?"expert":"curator",O=b("review",x.changeCandidateId),Y={id:O,changeCandidateId:x.changeCandidateId,status:"open",assignedRole:j,decision:void 0,decidedAt:void 0,decidedBy:void 0};return g.reviewTasks.set(O,Y),g.notifications.push({kind:"kb.review.requested",reviewTaskId:O,changeCandidateId:x.changeCandidateId,assignedRole:j,createdAt:new Date}),Y}async function V(x){if(!g.candidates.has(x.changeCandidateId))throw Error("CHANGE_CANDIDATE_NOT_FOUND");return g.proposedRuleVersionIdsByCandidate.set(x.changeCandidateId,[...x.proposedRuleVersionIds]),{proposedRuleVersionIds:[...x.proposedRuleVersionIds]}}async function w(x){return g.approvedRuleVersionIds.add(x.ruleVersionId),{ruleVersionId:x.ruleVersionId}}async function C(x){let L=g.reviewTasks.get(x.reviewTaskId);if(!L)throw Error("REVIEW_TASK_NOT_FOUND");let j=g.candidates.get(L.changeCandidateId);if(!j)throw Error("CHANGE_CANDIDATE_NOT_FOUND");if(j.riskLevel==="high"&&x.decision==="approve"){if(x.decidedByRole!=="expert")throw Error("FORBIDDEN_ROLE")}let O={...L,status:"decided",decision:x.decision,decidedAt:new Date,decidedBy:x.decidedBy};return g.reviewTasks.set(O.id,O),O}async function K(x){if([...g.reviewTasks.values()].filter((O)=>O.status!=="decided").length)throw Error("NOT_READY");if([...g.reviewTasks.values()].some((O)=>O.decision==="reject"))return{published:!1,reason:"REJECTED"};for(let O of g.reviewTasks.values()){if(O.decision!=="approve")continue;if((g.proposedRuleVersionIdsByCandidate.get(O.changeCandidateId)??[]).filter((W)=>!g.approvedRuleVersionIds.has(W)).length)throw Error("NOT_READY")}return{published:!0}}return{runWatch:X,createReviewTask:F,proposeRulePatch:V,markRuleVersionApproved:w,submitDecision:C,publishIfReady:K}}import{defineFeature as E}from"@contractspec/lib.contracts-spec";var Zx=E({meta:{key:"kb-update-pipeline",version:"1.0.0",title:"KB Update Pipeline (HITL)",description:"Automation proposes KB patches; humans verify; publishing is blocked until approvals are complete.",domain:"knowledge",owners:["@examples"],tags:["knowledge","pipeline","hitl","audit","notifications"],stability:"experimental"},operations:[{key:"kbPipeline.runWatch",version:"1.0.0"},{key:"kbPipeline.createReviewTask",version:"1.0.0"},{key:"kbPipeline.submitDecision",version:"1.0.0"},{key:"kbPipeline.publishIfReady",version:"1.0.0"}],events:[{key:"kb.change.detected",version:"1.0.0"},{key:"kb.change.summarized",version:"1.0.0"},{key:"kb.patch.proposed",version:"1.0.0"},{key:"kb.review.requested",version:"1.0.0"},{key:"kb.review.decided",version:"1.0.0"}],presentations:[{key:"kb.dashboard",version:"1.0.0"},{key:"kb.review.list",version:"1.0.0"},{key:"kb.review.form",version:"1.0.0"}],opToPresentation:[{op:{key:"kbPipeline.runWatch",version:"1.0.0"},pres:{key:"kb.dashboard",version:"1.0.0"}},{op:{key:"kbPipeline.createReviewTask",version:"1.0.0"},pres:{key:"kb.review.list",version:"1.0.0"}},{op:{key:"kbPipeline.submitDecision",version:"1.0.0"},pres:{key:"kb.review.form",version:"1.0.0"}}],presentationsTargets:[{key:"kb.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.list",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.form",version:"1.0.0",targets:["react"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"}]},knowledge:[{key:"kb.knowledge.rules",version:"1.0.0"}],telemetry:[{key:"kb-pipeline.telemetry",version:"1.0.0"}],jobs:[{key:"kb-pipeline.job.watch",version:"1.0.0"}],docs:["docs.examples.kb-update-pipeline.goal","docs.examples.kb-update-pipeline.reference"]});import{defineCommand as Q}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as U,ScalarTypeEnum as B}from"@contractspec/lib.schema";var S=U({name:"KbPipelineRunWatchInput",description:"Trigger a watch cycle for KB sources (demo).",fields:{jurisdiction:{type:B.String_unsecure(),isOptional:!1}}}),p=U({name:"KbPipelineRunWatchOutput",description:"Output containing detected changes.",fields:{candidates:{type:N,isArray:!0,isOptional:!1}}}),s=U({name:"KbPipelineCreateReviewTaskInput",description:"Create a review task for a change candidate.",fields:{changeCandidateId:{type:B.String_unsecure(),isOptional:!1}}}),l=U({name:"KbPipelineSubmitDecisionInput",description:"Submit a decision for a review task.",fields:{reviewTaskId:{type:B.String_unsecure(),isOptional:!1},decision:{type:$,isOptional:!1},decidedBy:{type:B.String_unsecure(),isOptional:!1},decidedByRole:{type:B.String_unsecure(),isOptional:!1}}}),i=U({name:"KbPipelinePublishIfReadyInput",description:"Publish snapshot if approvals are satisfied for a jurisdiction.",fields:{jurisdiction:{type:B.String_unsecure(),isOptional:!1}}}),d=U({name:"KbPipelinePublishIfReadyOutput",description:"Output for publish-if-ready operation.",fields:{published:{type:B.Boolean(),isOptional:!1},reason:{type:B.String_unsecure(),isOptional:!0}}}),Fx=Q({meta:{key:"kbPipeline.runWatch",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","jobs"],description:"Detect source changes and create change candidates.",goal:"Automate discovery of updates needing review.",context:"Scheduled job or manual trigger in demos."},io:{input:S,output:p},policy:{auth:"user"}}),Vx=Q({meta:{key:"kbPipeline.createReviewTask",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","hitl"],description:"Create a review task for a detected change.",goal:"Route work to human verifiers.",context:"Called after change detection or manual selection."},io:{input:s,output:H},policy:{auth:"user"}}),wx=Q({meta:{key:"kbPipeline.submitDecision",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","hitl","rbac"],description:"Submit approve/reject decision for a review task.",goal:"Ensure humans verify before publishing.",context:"Curator/expert reviews and decides."},io:{input:l,output:H,errors:{FORBIDDEN_ROLE:{description:"Role not allowed to approve the given risk level",http:403,gqlCode:"FORBIDDEN_ROLE",when:"curator attempts to approve a high-risk change"},REVIEW_TASK_NOT_FOUND:{description:"Review task not found",http:404,gqlCode:"REVIEW_TASK_NOT_FOUND",when:"reviewTaskId is invalid"}}},policy:{auth:"user"}}),Cx=Q({meta:{key:"kbPipeline.publishIfReady",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","publishing"],description:"Publish snapshot if ready (all approvals satisfied).",goal:"Prevent publishing until all required approvals exist.",context:"Called by job or UI to attempt publish."},io:{input:i,output:d,errors:{NOT_READY:{description:"Publishing is blocked because approvals are incomplete",http:409,gqlCode:"NOT_READY",when:"there are open review tasks or unapproved rule versions"}}},policy:{auth:"user"}});import{definePresentation as q,StabilityEnum as z}from"@contractspec/lib.contracts-spec";var kx=q({meta:{key:"kb.dashboard",version:"1.0.0",title:"KB Update Dashboard",description:"Overview of KB change candidates and review tasks.",domain:"knowledge",owners:["@examples"],tags:["dashboard","knowledge"],stability:z.Experimental,goal:"Visualize status",context:"Dashboard"},source:{type:"component",framework:"react",componentKey:"KbDashboard",props:N},targets:["react","markdown"]}),Px=q({meta:{key:"kb.review.list",version:"1.0.0",title:"Review Tasks",description:"List of pending review tasks for the current user.",domain:"knowledge",owners:["@examples"],tags:["list","review"],stability:z.Experimental,goal:"List tasks",context:"Inbox"},source:{type:"component",framework:"react",componentKey:"ReviewTaskList",props:H},targets:["react","markdown"]}),hx=q({meta:{key:"kb.review.form",version:"1.0.0",title:"Review Change",description:"Form to approve or reject a KB change candidate.",domain:"knowledge",owners:["@examples"],tags:["form","review"],stability:z.Experimental,goal:"Review",context:"Detail"},source:{type:"component",framework:"react",componentKey:"ReviewDecisionForm",props:H},targets:["react"]});export{r as example,Gx as createPipelineMemoryStore,Jx as createPipelineMemoryHandlers,H as ReviewTaskModel,$ as ReviewDecisionEnum,k as ReviewAssignedRoleEnum,Zx as KbUpdatePipelineFeature,jx as KbReviewRequestedEvent,Px as KbReviewListPresentation,hx as KbReviewFormPresentation,Bx as KbReviewDecidedEvent,wx as KbPipelineSubmitDecisionContract,Fx as KbPipelineRunWatchContract,Cx as KbPipelinePublishIfReadyContract,Vx as KbPipelineCreateReviewTaskContract,Lx as KbPatchProposedEvent,kx as KbDashboardPresentation,Ax as KbChangeSummarizedEvent,_x as KbChangeDetectedEvent,R as ChangeRiskLevelEnum,N as ChangeCandidateModel};
|
|
19
|
+
- kb.review.decided`}];I(v);import{defineEnum as $,defineSchemaModel as F,ScalarTypeEnum as A}from"@contractspec/lib.schema";var R=$("ChangeRiskLevel",["low","medium","high"]),k=$("ReviewAssignedRole",["curator","expert"]),q=$("ReviewDecision",["approve","reject"]),Q=F({name:"ChangeCandidate",description:"Candidate change detected in a source document.",fields:{id:{type:A.String_unsecure(),isOptional:!1},sourceDocumentId:{type:A.String_unsecure(),isOptional:!1},detectedAt:{type:A.DateTime(),isOptional:!1},diffSummary:{type:A.String_unsecure(),isOptional:!1},riskLevel:{type:R,isOptional:!1}}}),H=F({name:"ReviewTask",description:"Human verification task for a change candidate.",fields:{id:{type:A.String_unsecure(),isOptional:!1},changeCandidateId:{type:A.String_unsecure(),isOptional:!1},status:{type:A.String_unsecure(),isOptional:!1},assignedRole:{type:k,isOptional:!1},decision:{type:q,isOptional:!0},decidedAt:{type:A.DateTime(),isOptional:!0},decidedBy:{type:A.String_unsecure(),isOptional:!0}}});import{defineEvent as G,StabilityEnum as J}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as N,ScalarTypeEnum as _}from"@contractspec/lib.schema";var h=N({name:"KbChangeDetectedPayload",description:"Emitted when a source change is detected.",fields:{changeCandidateId:{type:_.String_unsecure(),isOptional:!1},sourceDocumentId:{type:_.String_unsecure(),isOptional:!1},riskLevel:{type:_.String_unsecure(),isOptional:!1}}}),_g=G({meta:{key:"kb.change.detected",version:"1.0.0",description:"KB source change detected.",stability:J.Experimental,owners:[],tags:[]},payload:h}),M=N({name:"KbChangeSummarizedPayload",description:"Emitted when a change summary is produced.",fields:{changeCandidateId:{type:_.String_unsecure(),isOptional:!1},summary:{type:_.String_unsecure(),isOptional:!1},riskLevel:{type:_.String_unsecure(),isOptional:!1}}}),Ag=G({meta:{key:"kb.change.summarized",version:"1.0.0",description:"KB change summarized.",stability:J.Experimental,owners:[],tags:[]},payload:M}),P=N({name:"KbPatchProposedPayload",description:"Emitted when draft rule patches are proposed.",fields:{changeCandidateId:{type:_.String_unsecure(),isOptional:!1},proposedRuleVersionIds:{type:_.String_unsecure(),isArray:!0,isOptional:!1}}}),Lg=G({meta:{key:"kb.patch.proposed",version:"1.0.0",description:"KB rule patch proposed (draft versions created).",stability:J.Experimental,owners:[],tags:[]},payload:P}),y=N({name:"KbReviewRequestedPayload",description:"Emitted when a review is requested.",fields:{reviewTaskId:{type:_.String_unsecure(),isOptional:!1},changeCandidateId:{type:_.String_unsecure(),isOptional:!1},assignedRole:{type:_.String_unsecure(),isOptional:!1}}}),jg=G({meta:{key:"kb.review.requested",version:"1.0.0",description:"KB review requested.",stability:J.Experimental,owners:[],tags:[]},payload:y}),o=N({name:"KbReviewDecidedPayload",description:"Emitted when a review task is decided.",fields:{reviewTaskId:{type:_.String_unsecure(),isOptional:!1},decision:{type:_.String_unsecure(),isOptional:!1},decidedBy:{type:_.String_unsecure(),isOptional:!1}}}),Bg=G({meta:{key:"kb.review.decided",version:"1.0.0",description:"KB review decided.",stability:J.Experimental,owners:[],tags:[]},payload:o});import{defineExample as T}from"@contractspec/lib.contracts-spec/examples";var r=T({meta:{key:"examples.kb-update-pipeline",version:"1.0.0",title:"Kb Update Pipeline",description:"Example: KB update automation pipeline with HITL review and auditability.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","kb-update-pipeline"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.kb-update-pipeline"}}),m=r;function Jg(){return{candidates:new Map,reviewTasks:new Map,proposedRuleVersionIdsByCandidate:new Map,approvedRuleVersionIds:new Set,notifications:[]}}function b(x,Y){return`${x}_${Y.replace(/[^a-zA-Z0-9_-]/g,"_")}`}function Ng(x){async function Y(g){return{candidates:[...x.candidates.values()].filter((j)=>j.sourceDocumentId.startsWith(`${g.jurisdiction}_`)||!0)}}async function U(g){let L=x.candidates.get(g.changeCandidateId);if(!L)throw Error("CHANGE_CANDIDATE_NOT_FOUND");let j=L.riskLevel==="high"?"expert":"curator",O=b("review",g.changeCandidateId),Z={id:O,changeCandidateId:g.changeCandidateId,status:"open",assignedRole:j,decision:void 0,decidedAt:void 0,decidedBy:void 0};return x.reviewTasks.set(O,Z),x.notifications.push({kind:"kb.review.requested",reviewTaskId:O,changeCandidateId:g.changeCandidateId,assignedRole:j,createdAt:new Date}),Z}async function V(g){if(!x.candidates.has(g.changeCandidateId))throw Error("CHANGE_CANDIDATE_NOT_FOUND");return x.proposedRuleVersionIdsByCandidate.set(g.changeCandidateId,[...g.proposedRuleVersionIds]),{proposedRuleVersionIds:[...g.proposedRuleVersionIds]}}async function w(g){return x.approvedRuleVersionIds.add(g.ruleVersionId),{ruleVersionId:g.ruleVersionId}}async function C(g){let L=x.reviewTasks.get(g.reviewTaskId);if(!L)throw Error("REVIEW_TASK_NOT_FOUND");let j=x.candidates.get(L.changeCandidateId);if(!j)throw Error("CHANGE_CANDIDATE_NOT_FOUND");if(j.riskLevel==="high"&&g.decision==="approve"){if(g.decidedByRole!=="expert")throw Error("FORBIDDEN_ROLE")}let O={...L,status:"decided",decision:g.decision,decidedAt:new Date,decidedBy:g.decidedBy};return x.reviewTasks.set(O.id,O),O}async function W(g){if([...x.reviewTasks.values()].filter((O)=>O.status!=="decided").length)throw Error("NOT_READY");if([...x.reviewTasks.values()].some((O)=>O.decision==="reject"))return{published:!1,reason:"REJECTED"};for(let O of x.reviewTasks.values()){if(O.decision!=="approve")continue;if((x.proposedRuleVersionIdsByCandidate.get(O.changeCandidateId)??[]).filter((K)=>!x.approvedRuleVersionIds.has(K)).length)throw Error("NOT_READY")}return{published:!0}}return{runWatch:Y,createReviewTask:U,proposeRulePatch:V,markRuleVersionApproved:w,submitDecision:C,publishIfReady:W}}import{defineFeature as S}from"@contractspec/lib.contracts-spec/features";var $g=S({meta:{key:"kb-update-pipeline",version:"1.0.0",title:"KB Update Pipeline (HITL)",description:"Automation proposes KB patches; humans verify; publishing is blocked until approvals are complete.",domain:"knowledge",owners:["@examples"],tags:["knowledge","pipeline","hitl","audit","notifications"],stability:"experimental"},operations:[{key:"kbPipeline.runWatch",version:"1.0.0"},{key:"kbPipeline.createReviewTask",version:"1.0.0"},{key:"kbPipeline.submitDecision",version:"1.0.0"},{key:"kbPipeline.publishIfReady",version:"1.0.0"}],events:[{key:"kb.change.detected",version:"1.0.0"},{key:"kb.change.summarized",version:"1.0.0"},{key:"kb.patch.proposed",version:"1.0.0"},{key:"kb.review.requested",version:"1.0.0"},{key:"kb.review.decided",version:"1.0.0"}],presentations:[{key:"kb.dashboard",version:"1.0.0"},{key:"kb.review.list",version:"1.0.0"},{key:"kb.review.form",version:"1.0.0"}],opToPresentation:[{op:{key:"kbPipeline.runWatch",version:"1.0.0"},pres:{key:"kb.dashboard",version:"1.0.0"}},{op:{key:"kbPipeline.createReviewTask",version:"1.0.0"},pres:{key:"kb.review.list",version:"1.0.0"}},{op:{key:"kbPipeline.submitDecision",version:"1.0.0"},pres:{key:"kb.review.form",version:"1.0.0"}}],presentationsTargets:[{key:"kb.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.list",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.form",version:"1.0.0",targets:["react"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"}]},knowledge:[{key:"kb.knowledge.rules",version:"1.0.0"}],telemetry:[{key:"kb-pipeline.telemetry",version:"1.0.0"}],jobs:[{key:"kb-pipeline.job.watch",version:"1.0.0"}],docs:["docs.examples.kb-update-pipeline.goal","docs.examples.kb-update-pipeline.reference"]});import{defineCommand as X}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as f,ScalarTypeEnum as B}from"@contractspec/lib.schema";var E=f({name:"KbPipelineRunWatchInput",description:"Trigger a watch cycle for KB sources (demo).",fields:{jurisdiction:{type:B.String_unsecure(),isOptional:!1}}}),s=f({name:"KbPipelineRunWatchOutput",description:"Output containing detected changes.",fields:{candidates:{type:Q,isArray:!0,isOptional:!1}}}),p=f({name:"KbPipelineCreateReviewTaskInput",description:"Create a review task for a change candidate.",fields:{changeCandidateId:{type:B.String_unsecure(),isOptional:!1}}}),l=f({name:"KbPipelineSubmitDecisionInput",description:"Submit a decision for a review task.",fields:{reviewTaskId:{type:B.String_unsecure(),isOptional:!1},decision:{type:q,isOptional:!1},decidedBy:{type:B.String_unsecure(),isOptional:!1},decidedByRole:{type:B.String_unsecure(),isOptional:!1}}}),d=f({name:"KbPipelinePublishIfReadyInput",description:"Publish snapshot if approvals are satisfied for a jurisdiction.",fields:{jurisdiction:{type:B.String_unsecure(),isOptional:!1}}}),i=f({name:"KbPipelinePublishIfReadyOutput",description:"Output for publish-if-ready operation.",fields:{published:{type:B.Boolean(),isOptional:!1},reason:{type:B.String_unsecure(),isOptional:!0}}}),Ug=X({meta:{key:"kbPipeline.runWatch",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","jobs"],description:"Detect source changes and create change candidates.",goal:"Automate discovery of updates needing review.",context:"Scheduled job or manual trigger in demos."},io:{input:E,output:s},policy:{auth:"user"}}),Vg=X({meta:{key:"kbPipeline.createReviewTask",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","hitl"],description:"Create a review task for a detected change.",goal:"Route work to human verifiers.",context:"Called after change detection or manual selection."},io:{input:p,output:H},policy:{auth:"user"}}),wg=X({meta:{key:"kbPipeline.submitDecision",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","hitl","rbac"],description:"Submit approve/reject decision for a review task.",goal:"Ensure humans verify before publishing.",context:"Curator/expert reviews and decides."},io:{input:l,output:H,errors:{FORBIDDEN_ROLE:{description:"Role not allowed to approve the given risk level",http:403,gqlCode:"FORBIDDEN_ROLE",when:"curator attempts to approve a high-risk change"},REVIEW_TASK_NOT_FOUND:{description:"Review task not found",http:404,gqlCode:"REVIEW_TASK_NOT_FOUND",when:"reviewTaskId is invalid"}}},policy:{auth:"user"}}),Cg=X({meta:{key:"kbPipeline.publishIfReady",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","publishing"],description:"Publish snapshot if ready (all approvals satisfied).",goal:"Prevent publishing until all required approvals exist.",context:"Called by job or UI to attempt publish."},io:{input:d,output:i,errors:{NOT_READY:{description:"Publishing is blocked because approvals are incomplete",http:409,gqlCode:"NOT_READY",when:"there are open review tasks or unapproved rule versions"}}},policy:{auth:"user"}});import{definePresentation as z,StabilityEnum as D}from"@contractspec/lib.contracts-spec";var kg=z({meta:{key:"kb.dashboard",version:"1.0.0",title:"KB Update Dashboard",description:"Overview of KB change candidates and review tasks.",domain:"knowledge",owners:["@examples"],tags:["dashboard","knowledge"],stability:D.Experimental,goal:"Visualize status",context:"Dashboard"},source:{type:"component",framework:"react",componentKey:"KbDashboard",props:Q},targets:["react","markdown"]}),hg=z({meta:{key:"kb.review.list",version:"1.0.0",title:"Review Tasks",description:"List of pending review tasks for the current user.",domain:"knowledge",owners:["@examples"],tags:["list","review"],stability:D.Experimental,goal:"List tasks",context:"Inbox"},source:{type:"component",framework:"react",componentKey:"ReviewTaskList",props:H},targets:["react","markdown"]}),Mg=z({meta:{key:"kb.review.form",version:"1.0.0",title:"Review Change",description:"Form to approve or reject a KB change candidate.",domain:"knowledge",owners:["@examples"],tags:["form","review"],stability:D.Experimental,goal:"Review",context:"Detail"},source:{type:"component",framework:"react",componentKey:"ReviewDecisionForm",props:H},targets:["react"]});export{m as example,Jg as createPipelineMemoryStore,Ng as createPipelineMemoryHandlers,H as ReviewTaskModel,q as ReviewDecisionEnum,k as ReviewAssignedRoleEnum,$g as KbUpdatePipelineFeature,jg as KbReviewRequestedEvent,hg as KbReviewListPresentation,Mg as KbReviewFormPresentation,Bg as KbReviewDecidedEvent,wg as KbPipelineSubmitDecisionContract,Ug as KbPipelineRunWatchContract,Cg as KbPipelinePublishIfReadyContract,Vg as KbPipelineCreateReviewTaskContract,Lg as KbPatchProposedEvent,kg as KbDashboardPresentation,Ag as KbChangeSummarizedEvent,_g as KbChangeDetectedEvent,r as ExamplesKbUpdatePipelineExample,R as ChangeRiskLevelEnum,Q as ChangeCandidateModel};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineFeature as g}from"@contractspec/lib.contracts-spec";var j=g({meta:{key:"kb-update-pipeline",version:"1.0.0",title:"KB Update Pipeline (HITL)",description:"Automation proposes KB patches; humans verify; publishing is blocked until approvals are complete.",domain:"knowledge",owners:["@examples"],tags:["knowledge","pipeline","hitl","audit","notifications"],stability:"experimental"},operations:[{key:"kbPipeline.runWatch",version:"1.0.0"},{key:"kbPipeline.createReviewTask",version:"1.0.0"},{key:"kbPipeline.submitDecision",version:"1.0.0"},{key:"kbPipeline.publishIfReady",version:"1.0.0"}],events:[{key:"kb.change.detected",version:"1.0.0"},{key:"kb.change.summarized",version:"1.0.0"},{key:"kb.patch.proposed",version:"1.0.0"},{key:"kb.review.requested",version:"1.0.0"},{key:"kb.review.decided",version:"1.0.0"}],presentations:[{key:"kb.dashboard",version:"1.0.0"},{key:"kb.review.list",version:"1.0.0"},{key:"kb.review.form",version:"1.0.0"}],opToPresentation:[{op:{key:"kbPipeline.runWatch",version:"1.0.0"},pres:{key:"kb.dashboard",version:"1.0.0"}},{op:{key:"kbPipeline.createReviewTask",version:"1.0.0"},pres:{key:"kb.review.list",version:"1.0.0"}},{op:{key:"kbPipeline.submitDecision",version:"1.0.0"},pres:{key:"kb.review.form",version:"1.0.0"}}],presentationsTargets:[{key:"kb.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.list",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.form",version:"1.0.0",targets:["react"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"}]},knowledge:[{key:"kb.knowledge.rules",version:"1.0.0"}],telemetry:[{key:"kb-pipeline.telemetry",version:"1.0.0"}],jobs:[{key:"kb-pipeline.job.watch",version:"1.0.0"}],docs:["docs.examples.kb-update-pipeline.goal","docs.examples.kb-update-pipeline.reference"]});export{j as KbUpdatePipelineFeature};
|
|
1
|
+
import{defineFeature as g}from"@contractspec/lib.contracts-spec/features";var j=g({meta:{key:"kb-update-pipeline",version:"1.0.0",title:"KB Update Pipeline (HITL)",description:"Automation proposes KB patches; humans verify; publishing is blocked until approvals are complete.",domain:"knowledge",owners:["@examples"],tags:["knowledge","pipeline","hitl","audit","notifications"],stability:"experimental"},operations:[{key:"kbPipeline.runWatch",version:"1.0.0"},{key:"kbPipeline.createReviewTask",version:"1.0.0"},{key:"kbPipeline.submitDecision",version:"1.0.0"},{key:"kbPipeline.publishIfReady",version:"1.0.0"}],events:[{key:"kb.change.detected",version:"1.0.0"},{key:"kb.change.summarized",version:"1.0.0"},{key:"kb.patch.proposed",version:"1.0.0"},{key:"kb.review.requested",version:"1.0.0"},{key:"kb.review.decided",version:"1.0.0"}],presentations:[{key:"kb.dashboard",version:"1.0.0"},{key:"kb.review.list",version:"1.0.0"},{key:"kb.review.form",version:"1.0.0"}],opToPresentation:[{op:{key:"kbPipeline.runWatch",version:"1.0.0"},pres:{key:"kb.dashboard",version:"1.0.0"}},{op:{key:"kbPipeline.createReviewTask",version:"1.0.0"},pres:{key:"kb.review.list",version:"1.0.0"}},{op:{key:"kbPipeline.submitDecision",version:"1.0.0"},pres:{key:"kb.review.form",version:"1.0.0"}}],presentationsTargets:[{key:"kb.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.list",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.form",version:"1.0.0",targets:["react"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"}]},knowledge:[{key:"kb.knowledge.rules",version:"1.0.0"}],telemetry:[{key:"kb-pipeline.telemetry",version:"1.0.0"}],jobs:[{key:"kb-pipeline.job.watch",version:"1.0.0"}],docs:["docs.examples.kb-update-pipeline.goal","docs.examples.kb-update-pipeline.reference"]});export{j as KbUpdatePipelineFeature};
|
package/dist/example.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
declare const
|
|
2
|
-
export default
|
|
1
|
+
declare const ExamplesKbUpdatePipelineExample: import("@contractspec/lib.contracts-spec").ExampleSpec;
|
|
2
|
+
export default ExamplesKbUpdatePipelineExample;
|
|
3
|
+
export { ExamplesKbUpdatePipelineExample };
|
package/dist/example.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{defineExample as g}from"@contractspec/lib.contracts-spec";var h=g({meta:{key:"kb-update-pipeline",version:"1.0.0",title:"
|
|
2
|
+
import{defineExample as g}from"@contractspec/lib.contracts-spec/examples";var h=g({meta:{key:"examples.kb-update-pipeline",version:"1.0.0",title:"Kb Update Pipeline",description:"Example: KB update automation pipeline with HITL review and auditability.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","kb-update-pipeline"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.kb-update-pipeline"}}),q=h;export{q as default,h as ExamplesKbUpdatePipelineExample};
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -17,4 +17,4 @@ import{registerDocBlocks as I}from"@contractspec/lib.contracts-spec/docs";var v=
|
|
|
17
17
|
- kb.change.summarized
|
|
18
18
|
- kb.patch.proposed
|
|
19
19
|
- kb.review.requested
|
|
20
|
-
- kb.review.decided`}];I(v);import{defineEnum as Z,defineSchemaModel as D,ScalarTypeEnum as A}from"@contractspec/lib.schema";var R=Z("ChangeRiskLevel",["low","medium","high"]),k=Z("ReviewAssignedRole",["curator","expert"]),$=Z("ReviewDecision",["approve","reject"]),N=D({name:"ChangeCandidate",description:"Candidate change detected in a source document.",fields:{id:{type:A.String_unsecure(),isOptional:!1},sourceDocumentId:{type:A.String_unsecure(),isOptional:!1},detectedAt:{type:A.DateTime(),isOptional:!1},diffSummary:{type:A.String_unsecure(),isOptional:!1},riskLevel:{type:R,isOptional:!1}}}),H=D({name:"ReviewTask",description:"Human verification task for a change candidate.",fields:{id:{type:A.String_unsecure(),isOptional:!1},changeCandidateId:{type:A.String_unsecure(),isOptional:!1},status:{type:A.String_unsecure(),isOptional:!1},assignedRole:{type:k,isOptional:!1},decision:{type:$,isOptional:!0},decidedAt:{type:A.DateTime(),isOptional:!0},decidedBy:{type:A.String_unsecure(),isOptional:!0}}});import{defineEvent as f,StabilityEnum as G}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as J,ScalarTypeEnum as _}from"@contractspec/lib.schema";var P=J({name:"KbChangeDetectedPayload",description:"Emitted when a source change is detected.",fields:{changeCandidateId:{type:_.String_unsecure(),isOptional:!1},sourceDocumentId:{type:_.String_unsecure(),isOptional:!1},riskLevel:{type:_.String_unsecure(),isOptional:!1}}}),_x=f({meta:{key:"kb.change.detected",version:"1.0.0",description:"KB source change detected.",stability:G.Experimental,owners:[],tags:[]},payload:P}),h=J({name:"KbChangeSummarizedPayload",description:"Emitted when a change summary is produced.",fields:{changeCandidateId:{type:_.String_unsecure(),isOptional:!1},summary:{type:_.String_unsecure(),isOptional:!1},riskLevel:{type:_.String_unsecure(),isOptional:!1}}}),Ax=f({meta:{key:"kb.change.summarized",version:"1.0.0",description:"KB change summarized.",stability:G.Experimental,owners:[],tags:[]},payload:h}),M=J({name:"KbPatchProposedPayload",description:"Emitted when draft rule patches are proposed.",fields:{changeCandidateId:{type:_.String_unsecure(),isOptional:!1},proposedRuleVersionIds:{type:_.String_unsecure(),isArray:!0,isOptional:!1}}}),Lx=f({meta:{key:"kb.patch.proposed",version:"1.0.0",description:"KB rule patch proposed (draft versions created).",stability:G.Experimental,owners:[],tags:[]},payload:M}),y=J({name:"KbReviewRequestedPayload",description:"Emitted when a review is requested.",fields:{reviewTaskId:{type:_.String_unsecure(),isOptional:!1},changeCandidateId:{type:_.String_unsecure(),isOptional:!1},assignedRole:{type:_.String_unsecure(),isOptional:!1}}}),jx=f({meta:{key:"kb.review.requested",version:"1.0.0",description:"KB review requested.",stability:G.Experimental,owners:[],tags:[]},payload:y}),T=J({name:"KbReviewDecidedPayload",description:"Emitted when a review task is decided.",fields:{reviewTaskId:{type:_.String_unsecure(),isOptional:!1},decision:{type:_.String_unsecure(),isOptional:!1},decidedBy:{type:_.String_unsecure(),isOptional:!1}}}),Bx=f({meta:{key:"kb.review.decided",version:"1.0.0",description:"KB review decided.",stability:G.Experimental,owners:[],tags:[]},payload:T});import{defineExample as o}from"@contractspec/lib.contracts-spec";var m=o({meta:{key:"kb-update-pipeline",version:"1.0.0",title:"KB Update Pipeline",description:"Automation proposes KB updates; humans verify; everything audited and notified.",kind:"knowledge",visibility:"public",stability:"experimental",owners:["@platform.core"],tags:["knowledge","pipeline","hitl","audit"]},docs:{rootDocId:"docs.examples.kb-update-pipeline"},entrypoints:{packageName:"@contractspec/example.kb-update-pipeline",feature:"./feature",contracts:"./contracts",handlers:"./handlers",docs:"./docs"},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["markdown","specs","builder"]},studio:{enabled:!0,installable:!0},mcp:{enabled:!0}}}),r=m;function Gx(){return{candidates:new Map,reviewTasks:new Map,proposedRuleVersionIdsByCandidate:new Map,approvedRuleVersionIds:new Set,notifications:[]}}function b(g,X){return`${g}_${X.replace(/[^a-zA-Z0-9_-]/g,"_")}`}function Jx(g){async function X(x){return{candidates:[...g.candidates.values()].filter((j)=>j.sourceDocumentId.startsWith(`${x.jurisdiction}_`)||!0)}}async function F(x){let L=g.candidates.get(x.changeCandidateId);if(!L)throw Error("CHANGE_CANDIDATE_NOT_FOUND");let j=L.riskLevel==="high"?"expert":"curator",O=b("review",x.changeCandidateId),Y={id:O,changeCandidateId:x.changeCandidateId,status:"open",assignedRole:j,decision:void 0,decidedAt:void 0,decidedBy:void 0};return g.reviewTasks.set(O,Y),g.notifications.push({kind:"kb.review.requested",reviewTaskId:O,changeCandidateId:x.changeCandidateId,assignedRole:j,createdAt:new Date}),Y}async function V(x){if(!g.candidates.has(x.changeCandidateId))throw Error("CHANGE_CANDIDATE_NOT_FOUND");return g.proposedRuleVersionIdsByCandidate.set(x.changeCandidateId,[...x.proposedRuleVersionIds]),{proposedRuleVersionIds:[...x.proposedRuleVersionIds]}}async function w(x){return g.approvedRuleVersionIds.add(x.ruleVersionId),{ruleVersionId:x.ruleVersionId}}async function C(x){let L=g.reviewTasks.get(x.reviewTaskId);if(!L)throw Error("REVIEW_TASK_NOT_FOUND");let j=g.candidates.get(L.changeCandidateId);if(!j)throw Error("CHANGE_CANDIDATE_NOT_FOUND");if(j.riskLevel==="high"&&x.decision==="approve"){if(x.decidedByRole!=="expert")throw Error("FORBIDDEN_ROLE")}let O={...L,status:"decided",decision:x.decision,decidedAt:new Date,decidedBy:x.decidedBy};return g.reviewTasks.set(O.id,O),O}async function K(x){if([...g.reviewTasks.values()].filter((O)=>O.status!=="decided").length)throw Error("NOT_READY");if([...g.reviewTasks.values()].some((O)=>O.decision==="reject"))return{published:!1,reason:"REJECTED"};for(let O of g.reviewTasks.values()){if(O.decision!=="approve")continue;if((g.proposedRuleVersionIdsByCandidate.get(O.changeCandidateId)??[]).filter((W)=>!g.approvedRuleVersionIds.has(W)).length)throw Error("NOT_READY")}return{published:!0}}return{runWatch:X,createReviewTask:F,proposeRulePatch:V,markRuleVersionApproved:w,submitDecision:C,publishIfReady:K}}import{defineFeature as E}from"@contractspec/lib.contracts-spec";var Zx=E({meta:{key:"kb-update-pipeline",version:"1.0.0",title:"KB Update Pipeline (HITL)",description:"Automation proposes KB patches; humans verify; publishing is blocked until approvals are complete.",domain:"knowledge",owners:["@examples"],tags:["knowledge","pipeline","hitl","audit","notifications"],stability:"experimental"},operations:[{key:"kbPipeline.runWatch",version:"1.0.0"},{key:"kbPipeline.createReviewTask",version:"1.0.0"},{key:"kbPipeline.submitDecision",version:"1.0.0"},{key:"kbPipeline.publishIfReady",version:"1.0.0"}],events:[{key:"kb.change.detected",version:"1.0.0"},{key:"kb.change.summarized",version:"1.0.0"},{key:"kb.patch.proposed",version:"1.0.0"},{key:"kb.review.requested",version:"1.0.0"},{key:"kb.review.decided",version:"1.0.0"}],presentations:[{key:"kb.dashboard",version:"1.0.0"},{key:"kb.review.list",version:"1.0.0"},{key:"kb.review.form",version:"1.0.0"}],opToPresentation:[{op:{key:"kbPipeline.runWatch",version:"1.0.0"},pres:{key:"kb.dashboard",version:"1.0.0"}},{op:{key:"kbPipeline.createReviewTask",version:"1.0.0"},pres:{key:"kb.review.list",version:"1.0.0"}},{op:{key:"kbPipeline.submitDecision",version:"1.0.0"},pres:{key:"kb.review.form",version:"1.0.0"}}],presentationsTargets:[{key:"kb.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.list",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.form",version:"1.0.0",targets:["react"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"}]},knowledge:[{key:"kb.knowledge.rules",version:"1.0.0"}],telemetry:[{key:"kb-pipeline.telemetry",version:"1.0.0"}],jobs:[{key:"kb-pipeline.job.watch",version:"1.0.0"}],docs:["docs.examples.kb-update-pipeline.goal","docs.examples.kb-update-pipeline.reference"]});import{defineCommand as Q}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as U,ScalarTypeEnum as B}from"@contractspec/lib.schema";var S=U({name:"KbPipelineRunWatchInput",description:"Trigger a watch cycle for KB sources (demo).",fields:{jurisdiction:{type:B.String_unsecure(),isOptional:!1}}}),p=U({name:"KbPipelineRunWatchOutput",description:"Output containing detected changes.",fields:{candidates:{type:N,isArray:!0,isOptional:!1}}}),s=U({name:"KbPipelineCreateReviewTaskInput",description:"Create a review task for a change candidate.",fields:{changeCandidateId:{type:B.String_unsecure(),isOptional:!1}}}),l=U({name:"KbPipelineSubmitDecisionInput",description:"Submit a decision for a review task.",fields:{reviewTaskId:{type:B.String_unsecure(),isOptional:!1},decision:{type:$,isOptional:!1},decidedBy:{type:B.String_unsecure(),isOptional:!1},decidedByRole:{type:B.String_unsecure(),isOptional:!1}}}),i=U({name:"KbPipelinePublishIfReadyInput",description:"Publish snapshot if approvals are satisfied for a jurisdiction.",fields:{jurisdiction:{type:B.String_unsecure(),isOptional:!1}}}),d=U({name:"KbPipelinePublishIfReadyOutput",description:"Output for publish-if-ready operation.",fields:{published:{type:B.Boolean(),isOptional:!1},reason:{type:B.String_unsecure(),isOptional:!0}}}),Fx=Q({meta:{key:"kbPipeline.runWatch",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","jobs"],description:"Detect source changes and create change candidates.",goal:"Automate discovery of updates needing review.",context:"Scheduled job or manual trigger in demos."},io:{input:S,output:p},policy:{auth:"user"}}),Vx=Q({meta:{key:"kbPipeline.createReviewTask",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","hitl"],description:"Create a review task for a detected change.",goal:"Route work to human verifiers.",context:"Called after change detection or manual selection."},io:{input:s,output:H},policy:{auth:"user"}}),wx=Q({meta:{key:"kbPipeline.submitDecision",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","hitl","rbac"],description:"Submit approve/reject decision for a review task.",goal:"Ensure humans verify before publishing.",context:"Curator/expert reviews and decides."},io:{input:l,output:H,errors:{FORBIDDEN_ROLE:{description:"Role not allowed to approve the given risk level",http:403,gqlCode:"FORBIDDEN_ROLE",when:"curator attempts to approve a high-risk change"},REVIEW_TASK_NOT_FOUND:{description:"Review task not found",http:404,gqlCode:"REVIEW_TASK_NOT_FOUND",when:"reviewTaskId is invalid"}}},policy:{auth:"user"}}),Cx=Q({meta:{key:"kbPipeline.publishIfReady",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","publishing"],description:"Publish snapshot if ready (all approvals satisfied).",goal:"Prevent publishing until all required approvals exist.",context:"Called by job or UI to attempt publish."},io:{input:i,output:d,errors:{NOT_READY:{description:"Publishing is blocked because approvals are incomplete",http:409,gqlCode:"NOT_READY",when:"there are open review tasks or unapproved rule versions"}}},policy:{auth:"user"}});import{definePresentation as q,StabilityEnum as z}from"@contractspec/lib.contracts-spec";var kx=q({meta:{key:"kb.dashboard",version:"1.0.0",title:"KB Update Dashboard",description:"Overview of KB change candidates and review tasks.",domain:"knowledge",owners:["@examples"],tags:["dashboard","knowledge"],stability:z.Experimental,goal:"Visualize status",context:"Dashboard"},source:{type:"component",framework:"react",componentKey:"KbDashboard",props:N},targets:["react","markdown"]}),Px=q({meta:{key:"kb.review.list",version:"1.0.0",title:"Review Tasks",description:"List of pending review tasks for the current user.",domain:"knowledge",owners:["@examples"],tags:["list","review"],stability:z.Experimental,goal:"List tasks",context:"Inbox"},source:{type:"component",framework:"react",componentKey:"ReviewTaskList",props:H},targets:["react","markdown"]}),hx=q({meta:{key:"kb.review.form",version:"1.0.0",title:"Review Change",description:"Form to approve or reject a KB change candidate.",domain:"knowledge",owners:["@examples"],tags:["form","review"],stability:z.Experimental,goal:"Review",context:"Detail"},source:{type:"component",framework:"react",componentKey:"ReviewDecisionForm",props:H},targets:["react"]});export{r as example,Gx as createPipelineMemoryStore,Jx as createPipelineMemoryHandlers,H as ReviewTaskModel,$ as ReviewDecisionEnum,k as ReviewAssignedRoleEnum,Zx as KbUpdatePipelineFeature,jx as KbReviewRequestedEvent,Px as KbReviewListPresentation,hx as KbReviewFormPresentation,Bx as KbReviewDecidedEvent,wx as KbPipelineSubmitDecisionContract,Fx as KbPipelineRunWatchContract,Cx as KbPipelinePublishIfReadyContract,Vx as KbPipelineCreateReviewTaskContract,Lx as KbPatchProposedEvent,kx as KbDashboardPresentation,Ax as KbChangeSummarizedEvent,_x as KbChangeDetectedEvent,R as ChangeRiskLevelEnum,N as ChangeCandidateModel};
|
|
20
|
+
- kb.review.decided`}];I(v);import{defineEnum as $,defineSchemaModel as F,ScalarTypeEnum as A}from"@contractspec/lib.schema";var R=$("ChangeRiskLevel",["low","medium","high"]),k=$("ReviewAssignedRole",["curator","expert"]),q=$("ReviewDecision",["approve","reject"]),Q=F({name:"ChangeCandidate",description:"Candidate change detected in a source document.",fields:{id:{type:A.String_unsecure(),isOptional:!1},sourceDocumentId:{type:A.String_unsecure(),isOptional:!1},detectedAt:{type:A.DateTime(),isOptional:!1},diffSummary:{type:A.String_unsecure(),isOptional:!1},riskLevel:{type:R,isOptional:!1}}}),H=F({name:"ReviewTask",description:"Human verification task for a change candidate.",fields:{id:{type:A.String_unsecure(),isOptional:!1},changeCandidateId:{type:A.String_unsecure(),isOptional:!1},status:{type:A.String_unsecure(),isOptional:!1},assignedRole:{type:k,isOptional:!1},decision:{type:q,isOptional:!0},decidedAt:{type:A.DateTime(),isOptional:!0},decidedBy:{type:A.String_unsecure(),isOptional:!0}}});import{defineEvent as G,StabilityEnum as J}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as N,ScalarTypeEnum as _}from"@contractspec/lib.schema";var h=N({name:"KbChangeDetectedPayload",description:"Emitted when a source change is detected.",fields:{changeCandidateId:{type:_.String_unsecure(),isOptional:!1},sourceDocumentId:{type:_.String_unsecure(),isOptional:!1},riskLevel:{type:_.String_unsecure(),isOptional:!1}}}),_g=G({meta:{key:"kb.change.detected",version:"1.0.0",description:"KB source change detected.",stability:J.Experimental,owners:[],tags:[]},payload:h}),M=N({name:"KbChangeSummarizedPayload",description:"Emitted when a change summary is produced.",fields:{changeCandidateId:{type:_.String_unsecure(),isOptional:!1},summary:{type:_.String_unsecure(),isOptional:!1},riskLevel:{type:_.String_unsecure(),isOptional:!1}}}),Ag=G({meta:{key:"kb.change.summarized",version:"1.0.0",description:"KB change summarized.",stability:J.Experimental,owners:[],tags:[]},payload:M}),P=N({name:"KbPatchProposedPayload",description:"Emitted when draft rule patches are proposed.",fields:{changeCandidateId:{type:_.String_unsecure(),isOptional:!1},proposedRuleVersionIds:{type:_.String_unsecure(),isArray:!0,isOptional:!1}}}),Lg=G({meta:{key:"kb.patch.proposed",version:"1.0.0",description:"KB rule patch proposed (draft versions created).",stability:J.Experimental,owners:[],tags:[]},payload:P}),y=N({name:"KbReviewRequestedPayload",description:"Emitted when a review is requested.",fields:{reviewTaskId:{type:_.String_unsecure(),isOptional:!1},changeCandidateId:{type:_.String_unsecure(),isOptional:!1},assignedRole:{type:_.String_unsecure(),isOptional:!1}}}),jg=G({meta:{key:"kb.review.requested",version:"1.0.0",description:"KB review requested.",stability:J.Experimental,owners:[],tags:[]},payload:y}),o=N({name:"KbReviewDecidedPayload",description:"Emitted when a review task is decided.",fields:{reviewTaskId:{type:_.String_unsecure(),isOptional:!1},decision:{type:_.String_unsecure(),isOptional:!1},decidedBy:{type:_.String_unsecure(),isOptional:!1}}}),Bg=G({meta:{key:"kb.review.decided",version:"1.0.0",description:"KB review decided.",stability:J.Experimental,owners:[],tags:[]},payload:o});import{defineExample as T}from"@contractspec/lib.contracts-spec/examples";var r=T({meta:{key:"examples.kb-update-pipeline",version:"1.0.0",title:"Kb Update Pipeline",description:"Example: KB update automation pipeline with HITL review and auditability.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","kb-update-pipeline"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.kb-update-pipeline"}}),m=r;function Jg(){return{candidates:new Map,reviewTasks:new Map,proposedRuleVersionIdsByCandidate:new Map,approvedRuleVersionIds:new Set,notifications:[]}}function b(x,Y){return`${x}_${Y.replace(/[^a-zA-Z0-9_-]/g,"_")}`}function Ng(x){async function Y(g){return{candidates:[...x.candidates.values()].filter((j)=>j.sourceDocumentId.startsWith(`${g.jurisdiction}_`)||!0)}}async function U(g){let L=x.candidates.get(g.changeCandidateId);if(!L)throw Error("CHANGE_CANDIDATE_NOT_FOUND");let j=L.riskLevel==="high"?"expert":"curator",O=b("review",g.changeCandidateId),Z={id:O,changeCandidateId:g.changeCandidateId,status:"open",assignedRole:j,decision:void 0,decidedAt:void 0,decidedBy:void 0};return x.reviewTasks.set(O,Z),x.notifications.push({kind:"kb.review.requested",reviewTaskId:O,changeCandidateId:g.changeCandidateId,assignedRole:j,createdAt:new Date}),Z}async function V(g){if(!x.candidates.has(g.changeCandidateId))throw Error("CHANGE_CANDIDATE_NOT_FOUND");return x.proposedRuleVersionIdsByCandidate.set(g.changeCandidateId,[...g.proposedRuleVersionIds]),{proposedRuleVersionIds:[...g.proposedRuleVersionIds]}}async function w(g){return x.approvedRuleVersionIds.add(g.ruleVersionId),{ruleVersionId:g.ruleVersionId}}async function C(g){let L=x.reviewTasks.get(g.reviewTaskId);if(!L)throw Error("REVIEW_TASK_NOT_FOUND");let j=x.candidates.get(L.changeCandidateId);if(!j)throw Error("CHANGE_CANDIDATE_NOT_FOUND");if(j.riskLevel==="high"&&g.decision==="approve"){if(g.decidedByRole!=="expert")throw Error("FORBIDDEN_ROLE")}let O={...L,status:"decided",decision:g.decision,decidedAt:new Date,decidedBy:g.decidedBy};return x.reviewTasks.set(O.id,O),O}async function W(g){if([...x.reviewTasks.values()].filter((O)=>O.status!=="decided").length)throw Error("NOT_READY");if([...x.reviewTasks.values()].some((O)=>O.decision==="reject"))return{published:!1,reason:"REJECTED"};for(let O of x.reviewTasks.values()){if(O.decision!=="approve")continue;if((x.proposedRuleVersionIdsByCandidate.get(O.changeCandidateId)??[]).filter((K)=>!x.approvedRuleVersionIds.has(K)).length)throw Error("NOT_READY")}return{published:!0}}return{runWatch:Y,createReviewTask:U,proposeRulePatch:V,markRuleVersionApproved:w,submitDecision:C,publishIfReady:W}}import{defineFeature as S}from"@contractspec/lib.contracts-spec/features";var $g=S({meta:{key:"kb-update-pipeline",version:"1.0.0",title:"KB Update Pipeline (HITL)",description:"Automation proposes KB patches; humans verify; publishing is blocked until approvals are complete.",domain:"knowledge",owners:["@examples"],tags:["knowledge","pipeline","hitl","audit","notifications"],stability:"experimental"},operations:[{key:"kbPipeline.runWatch",version:"1.0.0"},{key:"kbPipeline.createReviewTask",version:"1.0.0"},{key:"kbPipeline.submitDecision",version:"1.0.0"},{key:"kbPipeline.publishIfReady",version:"1.0.0"}],events:[{key:"kb.change.detected",version:"1.0.0"},{key:"kb.change.summarized",version:"1.0.0"},{key:"kb.patch.proposed",version:"1.0.0"},{key:"kb.review.requested",version:"1.0.0"},{key:"kb.review.decided",version:"1.0.0"}],presentations:[{key:"kb.dashboard",version:"1.0.0"},{key:"kb.review.list",version:"1.0.0"},{key:"kb.review.form",version:"1.0.0"}],opToPresentation:[{op:{key:"kbPipeline.runWatch",version:"1.0.0"},pres:{key:"kb.dashboard",version:"1.0.0"}},{op:{key:"kbPipeline.createReviewTask",version:"1.0.0"},pres:{key:"kb.review.list",version:"1.0.0"}},{op:{key:"kbPipeline.submitDecision",version:"1.0.0"},pres:{key:"kb.review.form",version:"1.0.0"}}],presentationsTargets:[{key:"kb.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.list",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.form",version:"1.0.0",targets:["react"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"}]},knowledge:[{key:"kb.knowledge.rules",version:"1.0.0"}],telemetry:[{key:"kb-pipeline.telemetry",version:"1.0.0"}],jobs:[{key:"kb-pipeline.job.watch",version:"1.0.0"}],docs:["docs.examples.kb-update-pipeline.goal","docs.examples.kb-update-pipeline.reference"]});import{defineCommand as X}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as f,ScalarTypeEnum as B}from"@contractspec/lib.schema";var E=f({name:"KbPipelineRunWatchInput",description:"Trigger a watch cycle for KB sources (demo).",fields:{jurisdiction:{type:B.String_unsecure(),isOptional:!1}}}),s=f({name:"KbPipelineRunWatchOutput",description:"Output containing detected changes.",fields:{candidates:{type:Q,isArray:!0,isOptional:!1}}}),p=f({name:"KbPipelineCreateReviewTaskInput",description:"Create a review task for a change candidate.",fields:{changeCandidateId:{type:B.String_unsecure(),isOptional:!1}}}),l=f({name:"KbPipelineSubmitDecisionInput",description:"Submit a decision for a review task.",fields:{reviewTaskId:{type:B.String_unsecure(),isOptional:!1},decision:{type:q,isOptional:!1},decidedBy:{type:B.String_unsecure(),isOptional:!1},decidedByRole:{type:B.String_unsecure(),isOptional:!1}}}),d=f({name:"KbPipelinePublishIfReadyInput",description:"Publish snapshot if approvals are satisfied for a jurisdiction.",fields:{jurisdiction:{type:B.String_unsecure(),isOptional:!1}}}),i=f({name:"KbPipelinePublishIfReadyOutput",description:"Output for publish-if-ready operation.",fields:{published:{type:B.Boolean(),isOptional:!1},reason:{type:B.String_unsecure(),isOptional:!0}}}),Ug=X({meta:{key:"kbPipeline.runWatch",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","jobs"],description:"Detect source changes and create change candidates.",goal:"Automate discovery of updates needing review.",context:"Scheduled job or manual trigger in demos."},io:{input:E,output:s},policy:{auth:"user"}}),Vg=X({meta:{key:"kbPipeline.createReviewTask",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","hitl"],description:"Create a review task for a detected change.",goal:"Route work to human verifiers.",context:"Called after change detection or manual selection."},io:{input:p,output:H},policy:{auth:"user"}}),wg=X({meta:{key:"kbPipeline.submitDecision",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","hitl","rbac"],description:"Submit approve/reject decision for a review task.",goal:"Ensure humans verify before publishing.",context:"Curator/expert reviews and decides."},io:{input:l,output:H,errors:{FORBIDDEN_ROLE:{description:"Role not allowed to approve the given risk level",http:403,gqlCode:"FORBIDDEN_ROLE",when:"curator attempts to approve a high-risk change"},REVIEW_TASK_NOT_FOUND:{description:"Review task not found",http:404,gqlCode:"REVIEW_TASK_NOT_FOUND",when:"reviewTaskId is invalid"}}},policy:{auth:"user"}}),Cg=X({meta:{key:"kbPipeline.publishIfReady",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","publishing"],description:"Publish snapshot if ready (all approvals satisfied).",goal:"Prevent publishing until all required approvals exist.",context:"Called by job or UI to attempt publish."},io:{input:d,output:i,errors:{NOT_READY:{description:"Publishing is blocked because approvals are incomplete",http:409,gqlCode:"NOT_READY",when:"there are open review tasks or unapproved rule versions"}}},policy:{auth:"user"}});import{definePresentation as z,StabilityEnum as D}from"@contractspec/lib.contracts-spec";var kg=z({meta:{key:"kb.dashboard",version:"1.0.0",title:"KB Update Dashboard",description:"Overview of KB change candidates and review tasks.",domain:"knowledge",owners:["@examples"],tags:["dashboard","knowledge"],stability:D.Experimental,goal:"Visualize status",context:"Dashboard"},source:{type:"component",framework:"react",componentKey:"KbDashboard",props:Q},targets:["react","markdown"]}),hg=z({meta:{key:"kb.review.list",version:"1.0.0",title:"Review Tasks",description:"List of pending review tasks for the current user.",domain:"knowledge",owners:["@examples"],tags:["list","review"],stability:D.Experimental,goal:"List tasks",context:"Inbox"},source:{type:"component",framework:"react",componentKey:"ReviewTaskList",props:H},targets:["react","markdown"]}),Mg=z({meta:{key:"kb.review.form",version:"1.0.0",title:"Review Change",description:"Form to approve or reject a KB change candidate.",domain:"knowledge",owners:["@examples"],tags:["form","review"],stability:D.Experimental,goal:"Review",context:"Detail"},source:{type:"component",framework:"react",componentKey:"ReviewDecisionForm",props:H},targets:["react"]});export{m as example,Jg as createPipelineMemoryStore,Ng as createPipelineMemoryHandlers,H as ReviewTaskModel,q as ReviewDecisionEnum,k as ReviewAssignedRoleEnum,$g as KbUpdatePipelineFeature,jg as KbReviewRequestedEvent,hg as KbReviewListPresentation,Mg as KbReviewFormPresentation,Bg as KbReviewDecidedEvent,wg as KbPipelineSubmitDecisionContract,Ug as KbPipelineRunWatchContract,Cg as KbPipelinePublishIfReadyContract,Vg as KbPipelineCreateReviewTaskContract,Lg as KbPatchProposedEvent,kg as KbDashboardPresentation,Ag as KbChangeSummarizedEvent,_g as KbChangeDetectedEvent,r as ExamplesKbUpdatePipelineExample,R as ChangeRiskLevelEnum,Q as ChangeCandidateModel};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{defineFeature as g}from"@contractspec/lib.contracts-spec";var j=g({meta:{key:"kb-update-pipeline",version:"1.0.0",title:"KB Update Pipeline (HITL)",description:"Automation proposes KB patches; humans verify; publishing is blocked until approvals are complete.",domain:"knowledge",owners:["@examples"],tags:["knowledge","pipeline","hitl","audit","notifications"],stability:"experimental"},operations:[{key:"kbPipeline.runWatch",version:"1.0.0"},{key:"kbPipeline.createReviewTask",version:"1.0.0"},{key:"kbPipeline.submitDecision",version:"1.0.0"},{key:"kbPipeline.publishIfReady",version:"1.0.0"}],events:[{key:"kb.change.detected",version:"1.0.0"},{key:"kb.change.summarized",version:"1.0.0"},{key:"kb.patch.proposed",version:"1.0.0"},{key:"kb.review.requested",version:"1.0.0"},{key:"kb.review.decided",version:"1.0.0"}],presentations:[{key:"kb.dashboard",version:"1.0.0"},{key:"kb.review.list",version:"1.0.0"},{key:"kb.review.form",version:"1.0.0"}],opToPresentation:[{op:{key:"kbPipeline.runWatch",version:"1.0.0"},pres:{key:"kb.dashboard",version:"1.0.0"}},{op:{key:"kbPipeline.createReviewTask",version:"1.0.0"},pres:{key:"kb.review.list",version:"1.0.0"}},{op:{key:"kbPipeline.submitDecision",version:"1.0.0"},pres:{key:"kb.review.form",version:"1.0.0"}}],presentationsTargets:[{key:"kb.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.list",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.form",version:"1.0.0",targets:["react"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"}]},knowledge:[{key:"kb.knowledge.rules",version:"1.0.0"}],telemetry:[{key:"kb-pipeline.telemetry",version:"1.0.0"}],jobs:[{key:"kb-pipeline.job.watch",version:"1.0.0"}],docs:["docs.examples.kb-update-pipeline.goal","docs.examples.kb-update-pipeline.reference"]});export{j as KbUpdatePipelineFeature};
|
|
2
|
+
import{defineFeature as g}from"@contractspec/lib.contracts-spec/features";var j=g({meta:{key:"kb-update-pipeline",version:"1.0.0",title:"KB Update Pipeline (HITL)",description:"Automation proposes KB patches; humans verify; publishing is blocked until approvals are complete.",domain:"knowledge",owners:["@examples"],tags:["knowledge","pipeline","hitl","audit","notifications"],stability:"experimental"},operations:[{key:"kbPipeline.runWatch",version:"1.0.0"},{key:"kbPipeline.createReviewTask",version:"1.0.0"},{key:"kbPipeline.submitDecision",version:"1.0.0"},{key:"kbPipeline.publishIfReady",version:"1.0.0"}],events:[{key:"kb.change.detected",version:"1.0.0"},{key:"kb.change.summarized",version:"1.0.0"},{key:"kb.patch.proposed",version:"1.0.0"},{key:"kb.review.requested",version:"1.0.0"},{key:"kb.review.decided",version:"1.0.0"}],presentations:[{key:"kb.dashboard",version:"1.0.0"},{key:"kb.review.list",version:"1.0.0"},{key:"kb.review.form",version:"1.0.0"}],opToPresentation:[{op:{key:"kbPipeline.runWatch",version:"1.0.0"},pres:{key:"kb.dashboard",version:"1.0.0"}},{op:{key:"kbPipeline.createReviewTask",version:"1.0.0"},pres:{key:"kb.review.list",version:"1.0.0"}},{op:{key:"kbPipeline.submitDecision",version:"1.0.0"},pres:{key:"kb.review.form",version:"1.0.0"}}],presentationsTargets:[{key:"kb.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.list",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.form",version:"1.0.0",targets:["react"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"}]},knowledge:[{key:"kb.knowledge.rules",version:"1.0.0"}],telemetry:[{key:"kb-pipeline.telemetry",version:"1.0.0"}],jobs:[{key:"kb-pipeline.job.watch",version:"1.0.0"}],docs:["docs.examples.kb-update-pipeline.goal","docs.examples.kb-update-pipeline.reference"]});export{j as KbUpdatePipelineFeature};
|
package/dist/node/example.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineExample as g}from"@contractspec/lib.contracts-spec";var h=g({meta:{key:"kb-update-pipeline",version:"1.0.0",title:"
|
|
1
|
+
import{defineExample as g}from"@contractspec/lib.contracts-spec/examples";var h=g({meta:{key:"examples.kb-update-pipeline",version:"1.0.0",title:"Kb Update Pipeline",description:"Example: KB update automation pipeline with HITL review and auditability.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","kb-update-pipeline"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.kb-update-pipeline"}}),q=h;export{q as default,h as ExamplesKbUpdatePipelineExample};
|
package/dist/node/index.js
CHANGED
|
@@ -16,4 +16,4 @@ import{registerDocBlocks as I}from"@contractspec/lib.contracts-spec/docs";var v=
|
|
|
16
16
|
- kb.change.summarized
|
|
17
17
|
- kb.patch.proposed
|
|
18
18
|
- kb.review.requested
|
|
19
|
-
- kb.review.decided`}];I(v);import{defineEnum as Z,defineSchemaModel as D,ScalarTypeEnum as A}from"@contractspec/lib.schema";var R=Z("ChangeRiskLevel",["low","medium","high"]),k=Z("ReviewAssignedRole",["curator","expert"]),$=Z("ReviewDecision",["approve","reject"]),N=D({name:"ChangeCandidate",description:"Candidate change detected in a source document.",fields:{id:{type:A.String_unsecure(),isOptional:!1},sourceDocumentId:{type:A.String_unsecure(),isOptional:!1},detectedAt:{type:A.DateTime(),isOptional:!1},diffSummary:{type:A.String_unsecure(),isOptional:!1},riskLevel:{type:R,isOptional:!1}}}),H=D({name:"ReviewTask",description:"Human verification task for a change candidate.",fields:{id:{type:A.String_unsecure(),isOptional:!1},changeCandidateId:{type:A.String_unsecure(),isOptional:!1},status:{type:A.String_unsecure(),isOptional:!1},assignedRole:{type:k,isOptional:!1},decision:{type:$,isOptional:!0},decidedAt:{type:A.DateTime(),isOptional:!0},decidedBy:{type:A.String_unsecure(),isOptional:!0}}});import{defineEvent as f,StabilityEnum as G}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as J,ScalarTypeEnum as _}from"@contractspec/lib.schema";var P=J({name:"KbChangeDetectedPayload",description:"Emitted when a source change is detected.",fields:{changeCandidateId:{type:_.String_unsecure(),isOptional:!1},sourceDocumentId:{type:_.String_unsecure(),isOptional:!1},riskLevel:{type:_.String_unsecure(),isOptional:!1}}}),_x=f({meta:{key:"kb.change.detected",version:"1.0.0",description:"KB source change detected.",stability:G.Experimental,owners:[],tags:[]},payload:P}),h=J({name:"KbChangeSummarizedPayload",description:"Emitted when a change summary is produced.",fields:{changeCandidateId:{type:_.String_unsecure(),isOptional:!1},summary:{type:_.String_unsecure(),isOptional:!1},riskLevel:{type:_.String_unsecure(),isOptional:!1}}}),Ax=f({meta:{key:"kb.change.summarized",version:"1.0.0",description:"KB change summarized.",stability:G.Experimental,owners:[],tags:[]},payload:h}),M=J({name:"KbPatchProposedPayload",description:"Emitted when draft rule patches are proposed.",fields:{changeCandidateId:{type:_.String_unsecure(),isOptional:!1},proposedRuleVersionIds:{type:_.String_unsecure(),isArray:!0,isOptional:!1}}}),Lx=f({meta:{key:"kb.patch.proposed",version:"1.0.0",description:"KB rule patch proposed (draft versions created).",stability:G.Experimental,owners:[],tags:[]},payload:M}),y=J({name:"KbReviewRequestedPayload",description:"Emitted when a review is requested.",fields:{reviewTaskId:{type:_.String_unsecure(),isOptional:!1},changeCandidateId:{type:_.String_unsecure(),isOptional:!1},assignedRole:{type:_.String_unsecure(),isOptional:!1}}}),jx=f({meta:{key:"kb.review.requested",version:"1.0.0",description:"KB review requested.",stability:G.Experimental,owners:[],tags:[]},payload:y}),T=J({name:"KbReviewDecidedPayload",description:"Emitted when a review task is decided.",fields:{reviewTaskId:{type:_.String_unsecure(),isOptional:!1},decision:{type:_.String_unsecure(),isOptional:!1},decidedBy:{type:_.String_unsecure(),isOptional:!1}}}),Bx=f({meta:{key:"kb.review.decided",version:"1.0.0",description:"KB review decided.",stability:G.Experimental,owners:[],tags:[]},payload:T});import{defineExample as o}from"@contractspec/lib.contracts-spec";var m=o({meta:{key:"kb-update-pipeline",version:"1.0.0",title:"KB Update Pipeline",description:"Automation proposes KB updates; humans verify; everything audited and notified.",kind:"knowledge",visibility:"public",stability:"experimental",owners:["@platform.core"],tags:["knowledge","pipeline","hitl","audit"]},docs:{rootDocId:"docs.examples.kb-update-pipeline"},entrypoints:{packageName:"@contractspec/example.kb-update-pipeline",feature:"./feature",contracts:"./contracts",handlers:"./handlers",docs:"./docs"},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["markdown","specs","builder"]},studio:{enabled:!0,installable:!0},mcp:{enabled:!0}}}),r=m;function Gx(){return{candidates:new Map,reviewTasks:new Map,proposedRuleVersionIdsByCandidate:new Map,approvedRuleVersionIds:new Set,notifications:[]}}function b(g,X){return`${g}_${X.replace(/[^a-zA-Z0-9_-]/g,"_")}`}function Jx(g){async function X(x){return{candidates:[...g.candidates.values()].filter((j)=>j.sourceDocumentId.startsWith(`${x.jurisdiction}_`)||!0)}}async function F(x){let L=g.candidates.get(x.changeCandidateId);if(!L)throw Error("CHANGE_CANDIDATE_NOT_FOUND");let j=L.riskLevel==="high"?"expert":"curator",O=b("review",x.changeCandidateId),Y={id:O,changeCandidateId:x.changeCandidateId,status:"open",assignedRole:j,decision:void 0,decidedAt:void 0,decidedBy:void 0};return g.reviewTasks.set(O,Y),g.notifications.push({kind:"kb.review.requested",reviewTaskId:O,changeCandidateId:x.changeCandidateId,assignedRole:j,createdAt:new Date}),Y}async function V(x){if(!g.candidates.has(x.changeCandidateId))throw Error("CHANGE_CANDIDATE_NOT_FOUND");return g.proposedRuleVersionIdsByCandidate.set(x.changeCandidateId,[...x.proposedRuleVersionIds]),{proposedRuleVersionIds:[...x.proposedRuleVersionIds]}}async function w(x){return g.approvedRuleVersionIds.add(x.ruleVersionId),{ruleVersionId:x.ruleVersionId}}async function C(x){let L=g.reviewTasks.get(x.reviewTaskId);if(!L)throw Error("REVIEW_TASK_NOT_FOUND");let j=g.candidates.get(L.changeCandidateId);if(!j)throw Error("CHANGE_CANDIDATE_NOT_FOUND");if(j.riskLevel==="high"&&x.decision==="approve"){if(x.decidedByRole!=="expert")throw Error("FORBIDDEN_ROLE")}let O={...L,status:"decided",decision:x.decision,decidedAt:new Date,decidedBy:x.decidedBy};return g.reviewTasks.set(O.id,O),O}async function K(x){if([...g.reviewTasks.values()].filter((O)=>O.status!=="decided").length)throw Error("NOT_READY");if([...g.reviewTasks.values()].some((O)=>O.decision==="reject"))return{published:!1,reason:"REJECTED"};for(let O of g.reviewTasks.values()){if(O.decision!=="approve")continue;if((g.proposedRuleVersionIdsByCandidate.get(O.changeCandidateId)??[]).filter((W)=>!g.approvedRuleVersionIds.has(W)).length)throw Error("NOT_READY")}return{published:!0}}return{runWatch:X,createReviewTask:F,proposeRulePatch:V,markRuleVersionApproved:w,submitDecision:C,publishIfReady:K}}import{defineFeature as E}from"@contractspec/lib.contracts-spec";var Zx=E({meta:{key:"kb-update-pipeline",version:"1.0.0",title:"KB Update Pipeline (HITL)",description:"Automation proposes KB patches; humans verify; publishing is blocked until approvals are complete.",domain:"knowledge",owners:["@examples"],tags:["knowledge","pipeline","hitl","audit","notifications"],stability:"experimental"},operations:[{key:"kbPipeline.runWatch",version:"1.0.0"},{key:"kbPipeline.createReviewTask",version:"1.0.0"},{key:"kbPipeline.submitDecision",version:"1.0.0"},{key:"kbPipeline.publishIfReady",version:"1.0.0"}],events:[{key:"kb.change.detected",version:"1.0.0"},{key:"kb.change.summarized",version:"1.0.0"},{key:"kb.patch.proposed",version:"1.0.0"},{key:"kb.review.requested",version:"1.0.0"},{key:"kb.review.decided",version:"1.0.0"}],presentations:[{key:"kb.dashboard",version:"1.0.0"},{key:"kb.review.list",version:"1.0.0"},{key:"kb.review.form",version:"1.0.0"}],opToPresentation:[{op:{key:"kbPipeline.runWatch",version:"1.0.0"},pres:{key:"kb.dashboard",version:"1.0.0"}},{op:{key:"kbPipeline.createReviewTask",version:"1.0.0"},pres:{key:"kb.review.list",version:"1.0.0"}},{op:{key:"kbPipeline.submitDecision",version:"1.0.0"},pres:{key:"kb.review.form",version:"1.0.0"}}],presentationsTargets:[{key:"kb.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.list",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.form",version:"1.0.0",targets:["react"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"}]},knowledge:[{key:"kb.knowledge.rules",version:"1.0.0"}],telemetry:[{key:"kb-pipeline.telemetry",version:"1.0.0"}],jobs:[{key:"kb-pipeline.job.watch",version:"1.0.0"}],docs:["docs.examples.kb-update-pipeline.goal","docs.examples.kb-update-pipeline.reference"]});import{defineCommand as Q}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as U,ScalarTypeEnum as B}from"@contractspec/lib.schema";var S=U({name:"KbPipelineRunWatchInput",description:"Trigger a watch cycle for KB sources (demo).",fields:{jurisdiction:{type:B.String_unsecure(),isOptional:!1}}}),p=U({name:"KbPipelineRunWatchOutput",description:"Output containing detected changes.",fields:{candidates:{type:N,isArray:!0,isOptional:!1}}}),s=U({name:"KbPipelineCreateReviewTaskInput",description:"Create a review task for a change candidate.",fields:{changeCandidateId:{type:B.String_unsecure(),isOptional:!1}}}),l=U({name:"KbPipelineSubmitDecisionInput",description:"Submit a decision for a review task.",fields:{reviewTaskId:{type:B.String_unsecure(),isOptional:!1},decision:{type:$,isOptional:!1},decidedBy:{type:B.String_unsecure(),isOptional:!1},decidedByRole:{type:B.String_unsecure(),isOptional:!1}}}),i=U({name:"KbPipelinePublishIfReadyInput",description:"Publish snapshot if approvals are satisfied for a jurisdiction.",fields:{jurisdiction:{type:B.String_unsecure(),isOptional:!1}}}),d=U({name:"KbPipelinePublishIfReadyOutput",description:"Output for publish-if-ready operation.",fields:{published:{type:B.Boolean(),isOptional:!1},reason:{type:B.String_unsecure(),isOptional:!0}}}),Fx=Q({meta:{key:"kbPipeline.runWatch",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","jobs"],description:"Detect source changes and create change candidates.",goal:"Automate discovery of updates needing review.",context:"Scheduled job or manual trigger in demos."},io:{input:S,output:p},policy:{auth:"user"}}),Vx=Q({meta:{key:"kbPipeline.createReviewTask",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","hitl"],description:"Create a review task for a detected change.",goal:"Route work to human verifiers.",context:"Called after change detection or manual selection."},io:{input:s,output:H},policy:{auth:"user"}}),wx=Q({meta:{key:"kbPipeline.submitDecision",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","hitl","rbac"],description:"Submit approve/reject decision for a review task.",goal:"Ensure humans verify before publishing.",context:"Curator/expert reviews and decides."},io:{input:l,output:H,errors:{FORBIDDEN_ROLE:{description:"Role not allowed to approve the given risk level",http:403,gqlCode:"FORBIDDEN_ROLE",when:"curator attempts to approve a high-risk change"},REVIEW_TASK_NOT_FOUND:{description:"Review task not found",http:404,gqlCode:"REVIEW_TASK_NOT_FOUND",when:"reviewTaskId is invalid"}}},policy:{auth:"user"}}),Cx=Q({meta:{key:"kbPipeline.publishIfReady",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","publishing"],description:"Publish snapshot if ready (all approvals satisfied).",goal:"Prevent publishing until all required approvals exist.",context:"Called by job or UI to attempt publish."},io:{input:i,output:d,errors:{NOT_READY:{description:"Publishing is blocked because approvals are incomplete",http:409,gqlCode:"NOT_READY",when:"there are open review tasks or unapproved rule versions"}}},policy:{auth:"user"}});import{definePresentation as q,StabilityEnum as z}from"@contractspec/lib.contracts-spec";var kx=q({meta:{key:"kb.dashboard",version:"1.0.0",title:"KB Update Dashboard",description:"Overview of KB change candidates and review tasks.",domain:"knowledge",owners:["@examples"],tags:["dashboard","knowledge"],stability:z.Experimental,goal:"Visualize status",context:"Dashboard"},source:{type:"component",framework:"react",componentKey:"KbDashboard",props:N},targets:["react","markdown"]}),Px=q({meta:{key:"kb.review.list",version:"1.0.0",title:"Review Tasks",description:"List of pending review tasks for the current user.",domain:"knowledge",owners:["@examples"],tags:["list","review"],stability:z.Experimental,goal:"List tasks",context:"Inbox"},source:{type:"component",framework:"react",componentKey:"ReviewTaskList",props:H},targets:["react","markdown"]}),hx=q({meta:{key:"kb.review.form",version:"1.0.0",title:"Review Change",description:"Form to approve or reject a KB change candidate.",domain:"knowledge",owners:["@examples"],tags:["form","review"],stability:z.Experimental,goal:"Review",context:"Detail"},source:{type:"component",framework:"react",componentKey:"ReviewDecisionForm",props:H},targets:["react"]});export{r as example,Gx as createPipelineMemoryStore,Jx as createPipelineMemoryHandlers,H as ReviewTaskModel,$ as ReviewDecisionEnum,k as ReviewAssignedRoleEnum,Zx as KbUpdatePipelineFeature,jx as KbReviewRequestedEvent,Px as KbReviewListPresentation,hx as KbReviewFormPresentation,Bx as KbReviewDecidedEvent,wx as KbPipelineSubmitDecisionContract,Fx as KbPipelineRunWatchContract,Cx as KbPipelinePublishIfReadyContract,Vx as KbPipelineCreateReviewTaskContract,Lx as KbPatchProposedEvent,kx as KbDashboardPresentation,Ax as KbChangeSummarizedEvent,_x as KbChangeDetectedEvent,R as ChangeRiskLevelEnum,N as ChangeCandidateModel};
|
|
19
|
+
- kb.review.decided`}];I(v);import{defineEnum as $,defineSchemaModel as F,ScalarTypeEnum as A}from"@contractspec/lib.schema";var R=$("ChangeRiskLevel",["low","medium","high"]),k=$("ReviewAssignedRole",["curator","expert"]),q=$("ReviewDecision",["approve","reject"]),Q=F({name:"ChangeCandidate",description:"Candidate change detected in a source document.",fields:{id:{type:A.String_unsecure(),isOptional:!1},sourceDocumentId:{type:A.String_unsecure(),isOptional:!1},detectedAt:{type:A.DateTime(),isOptional:!1},diffSummary:{type:A.String_unsecure(),isOptional:!1},riskLevel:{type:R,isOptional:!1}}}),H=F({name:"ReviewTask",description:"Human verification task for a change candidate.",fields:{id:{type:A.String_unsecure(),isOptional:!1},changeCandidateId:{type:A.String_unsecure(),isOptional:!1},status:{type:A.String_unsecure(),isOptional:!1},assignedRole:{type:k,isOptional:!1},decision:{type:q,isOptional:!0},decidedAt:{type:A.DateTime(),isOptional:!0},decidedBy:{type:A.String_unsecure(),isOptional:!0}}});import{defineEvent as G,StabilityEnum as J}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as N,ScalarTypeEnum as _}from"@contractspec/lib.schema";var h=N({name:"KbChangeDetectedPayload",description:"Emitted when a source change is detected.",fields:{changeCandidateId:{type:_.String_unsecure(),isOptional:!1},sourceDocumentId:{type:_.String_unsecure(),isOptional:!1},riskLevel:{type:_.String_unsecure(),isOptional:!1}}}),_g=G({meta:{key:"kb.change.detected",version:"1.0.0",description:"KB source change detected.",stability:J.Experimental,owners:[],tags:[]},payload:h}),M=N({name:"KbChangeSummarizedPayload",description:"Emitted when a change summary is produced.",fields:{changeCandidateId:{type:_.String_unsecure(),isOptional:!1},summary:{type:_.String_unsecure(),isOptional:!1},riskLevel:{type:_.String_unsecure(),isOptional:!1}}}),Ag=G({meta:{key:"kb.change.summarized",version:"1.0.0",description:"KB change summarized.",stability:J.Experimental,owners:[],tags:[]},payload:M}),P=N({name:"KbPatchProposedPayload",description:"Emitted when draft rule patches are proposed.",fields:{changeCandidateId:{type:_.String_unsecure(),isOptional:!1},proposedRuleVersionIds:{type:_.String_unsecure(),isArray:!0,isOptional:!1}}}),Lg=G({meta:{key:"kb.patch.proposed",version:"1.0.0",description:"KB rule patch proposed (draft versions created).",stability:J.Experimental,owners:[],tags:[]},payload:P}),y=N({name:"KbReviewRequestedPayload",description:"Emitted when a review is requested.",fields:{reviewTaskId:{type:_.String_unsecure(),isOptional:!1},changeCandidateId:{type:_.String_unsecure(),isOptional:!1},assignedRole:{type:_.String_unsecure(),isOptional:!1}}}),jg=G({meta:{key:"kb.review.requested",version:"1.0.0",description:"KB review requested.",stability:J.Experimental,owners:[],tags:[]},payload:y}),o=N({name:"KbReviewDecidedPayload",description:"Emitted when a review task is decided.",fields:{reviewTaskId:{type:_.String_unsecure(),isOptional:!1},decision:{type:_.String_unsecure(),isOptional:!1},decidedBy:{type:_.String_unsecure(),isOptional:!1}}}),Bg=G({meta:{key:"kb.review.decided",version:"1.0.0",description:"KB review decided.",stability:J.Experimental,owners:[],tags:[]},payload:o});import{defineExample as T}from"@contractspec/lib.contracts-spec/examples";var r=T({meta:{key:"examples.kb-update-pipeline",version:"1.0.0",title:"Kb Update Pipeline",description:"Example: KB update automation pipeline with HITL review and auditability.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","kb-update-pipeline"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.kb-update-pipeline"}}),m=r;function Jg(){return{candidates:new Map,reviewTasks:new Map,proposedRuleVersionIdsByCandidate:new Map,approvedRuleVersionIds:new Set,notifications:[]}}function b(x,Y){return`${x}_${Y.replace(/[^a-zA-Z0-9_-]/g,"_")}`}function Ng(x){async function Y(g){return{candidates:[...x.candidates.values()].filter((j)=>j.sourceDocumentId.startsWith(`${g.jurisdiction}_`)||!0)}}async function U(g){let L=x.candidates.get(g.changeCandidateId);if(!L)throw Error("CHANGE_CANDIDATE_NOT_FOUND");let j=L.riskLevel==="high"?"expert":"curator",O=b("review",g.changeCandidateId),Z={id:O,changeCandidateId:g.changeCandidateId,status:"open",assignedRole:j,decision:void 0,decidedAt:void 0,decidedBy:void 0};return x.reviewTasks.set(O,Z),x.notifications.push({kind:"kb.review.requested",reviewTaskId:O,changeCandidateId:g.changeCandidateId,assignedRole:j,createdAt:new Date}),Z}async function V(g){if(!x.candidates.has(g.changeCandidateId))throw Error("CHANGE_CANDIDATE_NOT_FOUND");return x.proposedRuleVersionIdsByCandidate.set(g.changeCandidateId,[...g.proposedRuleVersionIds]),{proposedRuleVersionIds:[...g.proposedRuleVersionIds]}}async function w(g){return x.approvedRuleVersionIds.add(g.ruleVersionId),{ruleVersionId:g.ruleVersionId}}async function C(g){let L=x.reviewTasks.get(g.reviewTaskId);if(!L)throw Error("REVIEW_TASK_NOT_FOUND");let j=x.candidates.get(L.changeCandidateId);if(!j)throw Error("CHANGE_CANDIDATE_NOT_FOUND");if(j.riskLevel==="high"&&g.decision==="approve"){if(g.decidedByRole!=="expert")throw Error("FORBIDDEN_ROLE")}let O={...L,status:"decided",decision:g.decision,decidedAt:new Date,decidedBy:g.decidedBy};return x.reviewTasks.set(O.id,O),O}async function W(g){if([...x.reviewTasks.values()].filter((O)=>O.status!=="decided").length)throw Error("NOT_READY");if([...x.reviewTasks.values()].some((O)=>O.decision==="reject"))return{published:!1,reason:"REJECTED"};for(let O of x.reviewTasks.values()){if(O.decision!=="approve")continue;if((x.proposedRuleVersionIdsByCandidate.get(O.changeCandidateId)??[]).filter((K)=>!x.approvedRuleVersionIds.has(K)).length)throw Error("NOT_READY")}return{published:!0}}return{runWatch:Y,createReviewTask:U,proposeRulePatch:V,markRuleVersionApproved:w,submitDecision:C,publishIfReady:W}}import{defineFeature as S}from"@contractspec/lib.contracts-spec/features";var $g=S({meta:{key:"kb-update-pipeline",version:"1.0.0",title:"KB Update Pipeline (HITL)",description:"Automation proposes KB patches; humans verify; publishing is blocked until approvals are complete.",domain:"knowledge",owners:["@examples"],tags:["knowledge","pipeline","hitl","audit","notifications"],stability:"experimental"},operations:[{key:"kbPipeline.runWatch",version:"1.0.0"},{key:"kbPipeline.createReviewTask",version:"1.0.0"},{key:"kbPipeline.submitDecision",version:"1.0.0"},{key:"kbPipeline.publishIfReady",version:"1.0.0"}],events:[{key:"kb.change.detected",version:"1.0.0"},{key:"kb.change.summarized",version:"1.0.0"},{key:"kb.patch.proposed",version:"1.0.0"},{key:"kb.review.requested",version:"1.0.0"},{key:"kb.review.decided",version:"1.0.0"}],presentations:[{key:"kb.dashboard",version:"1.0.0"},{key:"kb.review.list",version:"1.0.0"},{key:"kb.review.form",version:"1.0.0"}],opToPresentation:[{op:{key:"kbPipeline.runWatch",version:"1.0.0"},pres:{key:"kb.dashboard",version:"1.0.0"}},{op:{key:"kbPipeline.createReviewTask",version:"1.0.0"},pres:{key:"kb.review.list",version:"1.0.0"}},{op:{key:"kbPipeline.submitDecision",version:"1.0.0"},pres:{key:"kb.review.form",version:"1.0.0"}}],presentationsTargets:[{key:"kb.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.list",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.form",version:"1.0.0",targets:["react"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"}]},knowledge:[{key:"kb.knowledge.rules",version:"1.0.0"}],telemetry:[{key:"kb-pipeline.telemetry",version:"1.0.0"}],jobs:[{key:"kb-pipeline.job.watch",version:"1.0.0"}],docs:["docs.examples.kb-update-pipeline.goal","docs.examples.kb-update-pipeline.reference"]});import{defineCommand as X}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as f,ScalarTypeEnum as B}from"@contractspec/lib.schema";var E=f({name:"KbPipelineRunWatchInput",description:"Trigger a watch cycle for KB sources (demo).",fields:{jurisdiction:{type:B.String_unsecure(),isOptional:!1}}}),s=f({name:"KbPipelineRunWatchOutput",description:"Output containing detected changes.",fields:{candidates:{type:Q,isArray:!0,isOptional:!1}}}),p=f({name:"KbPipelineCreateReviewTaskInput",description:"Create a review task for a change candidate.",fields:{changeCandidateId:{type:B.String_unsecure(),isOptional:!1}}}),l=f({name:"KbPipelineSubmitDecisionInput",description:"Submit a decision for a review task.",fields:{reviewTaskId:{type:B.String_unsecure(),isOptional:!1},decision:{type:q,isOptional:!1},decidedBy:{type:B.String_unsecure(),isOptional:!1},decidedByRole:{type:B.String_unsecure(),isOptional:!1}}}),d=f({name:"KbPipelinePublishIfReadyInput",description:"Publish snapshot if approvals are satisfied for a jurisdiction.",fields:{jurisdiction:{type:B.String_unsecure(),isOptional:!1}}}),i=f({name:"KbPipelinePublishIfReadyOutput",description:"Output for publish-if-ready operation.",fields:{published:{type:B.Boolean(),isOptional:!1},reason:{type:B.String_unsecure(),isOptional:!0}}}),Ug=X({meta:{key:"kbPipeline.runWatch",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","jobs"],description:"Detect source changes and create change candidates.",goal:"Automate discovery of updates needing review.",context:"Scheduled job or manual trigger in demos."},io:{input:E,output:s},policy:{auth:"user"}}),Vg=X({meta:{key:"kbPipeline.createReviewTask",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","hitl"],description:"Create a review task for a detected change.",goal:"Route work to human verifiers.",context:"Called after change detection or manual selection."},io:{input:p,output:H},policy:{auth:"user"}}),wg=X({meta:{key:"kbPipeline.submitDecision",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","hitl","rbac"],description:"Submit approve/reject decision for a review task.",goal:"Ensure humans verify before publishing.",context:"Curator/expert reviews and decides."},io:{input:l,output:H,errors:{FORBIDDEN_ROLE:{description:"Role not allowed to approve the given risk level",http:403,gqlCode:"FORBIDDEN_ROLE",when:"curator attempts to approve a high-risk change"},REVIEW_TASK_NOT_FOUND:{description:"Review task not found",http:404,gqlCode:"REVIEW_TASK_NOT_FOUND",when:"reviewTaskId is invalid"}}},policy:{auth:"user"}}),Cg=X({meta:{key:"kbPipeline.publishIfReady",version:"1.0.0",stability:"experimental",owners:["@examples"],tags:["knowledge","pipeline","publishing"],description:"Publish snapshot if ready (all approvals satisfied).",goal:"Prevent publishing until all required approvals exist.",context:"Called by job or UI to attempt publish."},io:{input:d,output:i,errors:{NOT_READY:{description:"Publishing is blocked because approvals are incomplete",http:409,gqlCode:"NOT_READY",when:"there are open review tasks or unapproved rule versions"}}},policy:{auth:"user"}});import{definePresentation as z,StabilityEnum as D}from"@contractspec/lib.contracts-spec";var kg=z({meta:{key:"kb.dashboard",version:"1.0.0",title:"KB Update Dashboard",description:"Overview of KB change candidates and review tasks.",domain:"knowledge",owners:["@examples"],tags:["dashboard","knowledge"],stability:D.Experimental,goal:"Visualize status",context:"Dashboard"},source:{type:"component",framework:"react",componentKey:"KbDashboard",props:Q},targets:["react","markdown"]}),hg=z({meta:{key:"kb.review.list",version:"1.0.0",title:"Review Tasks",description:"List of pending review tasks for the current user.",domain:"knowledge",owners:["@examples"],tags:["list","review"],stability:D.Experimental,goal:"List tasks",context:"Inbox"},source:{type:"component",framework:"react",componentKey:"ReviewTaskList",props:H},targets:["react","markdown"]}),Mg=z({meta:{key:"kb.review.form",version:"1.0.0",title:"Review Change",description:"Form to approve or reject a KB change candidate.",domain:"knowledge",owners:["@examples"],tags:["form","review"],stability:D.Experimental,goal:"Review",context:"Detail"},source:{type:"component",framework:"react",componentKey:"ReviewDecisionForm",props:H},targets:["react"]});export{m as example,Jg as createPipelineMemoryStore,Ng as createPipelineMemoryHandlers,H as ReviewTaskModel,q as ReviewDecisionEnum,k as ReviewAssignedRoleEnum,$g as KbUpdatePipelineFeature,jg as KbReviewRequestedEvent,hg as KbReviewListPresentation,Mg as KbReviewFormPresentation,Bg as KbReviewDecidedEvent,wg as KbPipelineSubmitDecisionContract,Ug as KbPipelineRunWatchContract,Cg as KbPipelinePublishIfReadyContract,Vg as KbPipelineCreateReviewTaskContract,Lg as KbPatchProposedEvent,kg as KbDashboardPresentation,Ag as KbChangeSummarizedEvent,_g as KbChangeDetectedEvent,r as ExamplesKbUpdatePipelineExample,R as ChangeRiskLevelEnum,Q as ChangeCandidateModel};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineFeature as g}from"@contractspec/lib.contracts-spec";var j=g({meta:{key:"kb-update-pipeline",version:"1.0.0",title:"KB Update Pipeline (HITL)",description:"Automation proposes KB patches; humans verify; publishing is blocked until approvals are complete.",domain:"knowledge",owners:["@examples"],tags:["knowledge","pipeline","hitl","audit","notifications"],stability:"experimental"},operations:[{key:"kbPipeline.runWatch",version:"1.0.0"},{key:"kbPipeline.createReviewTask",version:"1.0.0"},{key:"kbPipeline.submitDecision",version:"1.0.0"},{key:"kbPipeline.publishIfReady",version:"1.0.0"}],events:[{key:"kb.change.detected",version:"1.0.0"},{key:"kb.change.summarized",version:"1.0.0"},{key:"kb.patch.proposed",version:"1.0.0"},{key:"kb.review.requested",version:"1.0.0"},{key:"kb.review.decided",version:"1.0.0"}],presentations:[{key:"kb.dashboard",version:"1.0.0"},{key:"kb.review.list",version:"1.0.0"},{key:"kb.review.form",version:"1.0.0"}],opToPresentation:[{op:{key:"kbPipeline.runWatch",version:"1.0.0"},pres:{key:"kb.dashboard",version:"1.0.0"}},{op:{key:"kbPipeline.createReviewTask",version:"1.0.0"},pres:{key:"kb.review.list",version:"1.0.0"}},{op:{key:"kbPipeline.submitDecision",version:"1.0.0"},pres:{key:"kb.review.form",version:"1.0.0"}}],presentationsTargets:[{key:"kb.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.list",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.form",version:"1.0.0",targets:["react"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"}]},knowledge:[{key:"kb.knowledge.rules",version:"1.0.0"}],telemetry:[{key:"kb-pipeline.telemetry",version:"1.0.0"}],jobs:[{key:"kb-pipeline.job.watch",version:"1.0.0"}],docs:["docs.examples.kb-update-pipeline.goal","docs.examples.kb-update-pipeline.reference"]});export{j as KbUpdatePipelineFeature};
|
|
1
|
+
import{defineFeature as g}from"@contractspec/lib.contracts-spec/features";var j=g({meta:{key:"kb-update-pipeline",version:"1.0.0",title:"KB Update Pipeline (HITL)",description:"Automation proposes KB patches; humans verify; publishing is blocked until approvals are complete.",domain:"knowledge",owners:["@examples"],tags:["knowledge","pipeline","hitl","audit","notifications"],stability:"experimental"},operations:[{key:"kbPipeline.runWatch",version:"1.0.0"},{key:"kbPipeline.createReviewTask",version:"1.0.0"},{key:"kbPipeline.submitDecision",version:"1.0.0"},{key:"kbPipeline.publishIfReady",version:"1.0.0"}],events:[{key:"kb.change.detected",version:"1.0.0"},{key:"kb.change.summarized",version:"1.0.0"},{key:"kb.patch.proposed",version:"1.0.0"},{key:"kb.review.requested",version:"1.0.0"},{key:"kb.review.decided",version:"1.0.0"}],presentations:[{key:"kb.dashboard",version:"1.0.0"},{key:"kb.review.list",version:"1.0.0"},{key:"kb.review.form",version:"1.0.0"}],opToPresentation:[{op:{key:"kbPipeline.runWatch",version:"1.0.0"},pres:{key:"kb.dashboard",version:"1.0.0"}},{op:{key:"kbPipeline.createReviewTask",version:"1.0.0"},pres:{key:"kb.review.list",version:"1.0.0"}},{op:{key:"kbPipeline.submitDecision",version:"1.0.0"},pres:{key:"kb.review.form",version:"1.0.0"}}],presentationsTargets:[{key:"kb.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.list",version:"1.0.0",targets:["react","markdown"]},{key:"kb.review.form",version:"1.0.0",targets:["react"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"}]},knowledge:[{key:"kb.knowledge.rules",version:"1.0.0"}],telemetry:[{key:"kb-pipeline.telemetry",version:"1.0.0"}],jobs:[{key:"kb-pipeline.job.watch",version:"1.0.0"}],docs:["docs.examples.kb-update-pipeline.goal","docs.examples.kb-update-pipeline.reference"]});export{j as KbUpdatePipelineFeature};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contractspec/example.kb-update-pipeline",
|
|
3
|
-
"version": "3.7.
|
|
3
|
+
"version": "3.7.21",
|
|
4
4
|
"description": "Example: KB update automation pipeline with HITL review and auditability.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -120,13 +120,13 @@
|
|
|
120
120
|
"typecheck": "tsc --noEmit"
|
|
121
121
|
},
|
|
122
122
|
"dependencies": {
|
|
123
|
-
"@contractspec/lib.contracts-spec": "5.
|
|
123
|
+
"@contractspec/lib.contracts-spec": "5.5.0",
|
|
124
124
|
"@contractspec/lib.schema": "3.7.14"
|
|
125
125
|
},
|
|
126
126
|
"devDependencies": {
|
|
127
127
|
"@contractspec/tool.typescript": "3.7.13",
|
|
128
128
|
"typescript": "^5.9.3",
|
|
129
|
-
"@contractspec/tool.bun": "3.7.
|
|
129
|
+
"@contractspec/tool.bun": "3.7.15"
|
|
130
130
|
},
|
|
131
131
|
"publishConfig": {
|
|
132
132
|
"access": "public",
|
package/src/example.ts
CHANGED
|
@@ -1,34 +1,28 @@
|
|
|
1
|
-
import { defineExample } from '@contractspec/lib.contracts-spec';
|
|
1
|
+
import { defineExample } from '@contractspec/lib.contracts-spec/examples';
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const ExamplesKbUpdatePipelineExample = defineExample({
|
|
4
4
|
meta: {
|
|
5
|
-
key: 'kb-update-pipeline',
|
|
5
|
+
key: 'examples.kb-update-pipeline',
|
|
6
6
|
version: '1.0.0',
|
|
7
|
-
title: '
|
|
7
|
+
title: 'Kb Update Pipeline',
|
|
8
8
|
description:
|
|
9
|
-
'
|
|
10
|
-
kind: '
|
|
11
|
-
visibility: '
|
|
9
|
+
'Example: KB update automation pipeline with HITL review and auditability.',
|
|
10
|
+
kind: 'template',
|
|
11
|
+
visibility: 'experimental',
|
|
12
12
|
stability: 'experimental',
|
|
13
|
-
owners: ['@
|
|
14
|
-
tags: ['
|
|
13
|
+
owners: ['@contractspec-core'],
|
|
14
|
+
tags: ['package', 'examples', 'kb-update-pipeline'],
|
|
15
15
|
},
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
surfaces: {
|
|
17
|
+
templates: true,
|
|
18
|
+
sandbox: { enabled: true, modes: ['playground', 'specs'] },
|
|
19
|
+
studio: { enabled: false, installable: false },
|
|
20
|
+
mcp: { enabled: false },
|
|
18
21
|
},
|
|
19
22
|
entrypoints: {
|
|
20
23
|
packageName: '@contractspec/example.kb-update-pipeline',
|
|
21
|
-
feature: './feature',
|
|
22
|
-
contracts: './contracts',
|
|
23
|
-
handlers: './handlers',
|
|
24
|
-
docs: './docs',
|
|
25
|
-
},
|
|
26
|
-
surfaces: {
|
|
27
|
-
templates: true,
|
|
28
|
-
sandbox: { enabled: true, modes: ['markdown', 'specs', 'builder'] },
|
|
29
|
-
studio: { enabled: true, installable: true },
|
|
30
|
-
mcp: { enabled: true },
|
|
31
24
|
},
|
|
32
25
|
});
|
|
33
26
|
|
|
34
|
-
export default
|
|
27
|
+
export default ExamplesKbUpdatePipelineExample;
|
|
28
|
+
export { ExamplesKbUpdatePipelineExample };
|
package/src/index.ts
CHANGED