@contractspec/example.versioned-knowledge-base 1.46.1 → 1.47.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  $ tsdown
2
- ℹ tsdown v0.18.3 powered by rolldown v1.0.0-beta.57
2
+ ℹ tsdown v0.19.0 powered by rolldown v1.0.0-beta.59
3
3
  ℹ config file: /home/runner/work/contractspec/contractspec/packages/examples/versioned-knowledge-base/tsdown.config.js
4
4
  ℹ entry: src/events.ts, src/example.ts, src/index.ts, src/versioned-knowledge-base.feature.ts, src/docs/index.ts, src/docs/versioned-knowledge-base.docblock.ts, src/entities/index.ts, src/entities/models.ts, src/handlers/index.ts, src/handlers/memory.handlers.ts, src/operations/index.ts, src/operations/kb.ts
5
5
  ℹ target: esnext
@@ -11,37 +11,37 @@ $ tsdown
11
11
  ℹ dist/entities/models.js 3.39 kB │ gzip: 0.67 kB
12
12
  ℹ dist/events.js 3.15 kB │ gzip: 0.67 kB
13
13
  ℹ dist/docs/versioned-knowledge-base.docblock.js 1.52 kB │ gzip: 0.66 kB
14
- ℹ dist/versioned-knowledge-base.feature.js 1.26 kB │ gzip: 0.47 kB
14
+ ℹ dist/versioned-knowledge-base.feature.js 1.34 kB │ gzip: 0.50 kB
15
15
  ℹ dist/index.js 1.16 kB │ gzip: 0.35 kB
16
- ℹ dist/example.js 1.00 kB │ gzip: 0.51 kB
16
+ ℹ dist/example.js 1.07 kB │ gzip: 0.54 kB
17
17
  ℹ dist/operations/index.js 0.29 kB │ gzip: 0.13 kB
18
18
  ℹ dist/entities/index.js 0.21 kB │ gzip: 0.11 kB
19
19
  ℹ dist/handlers/index.js 0.14 kB │ gzip: 0.09 kB
20
20
  ℹ dist/docs/index.js 0.05 kB │ gzip: 0.07 kB
21
21
  ℹ dist/operations/kb.js.map 9.51 kB │ gzip: 2.10 kB
22
- ℹ dist/handlers/memory.handlers.js.map 8.54 kB │ gzip: 2.46 kB
22
+ ℹ dist/handlers/memory.handlers.js.map 8.44 kB │ gzip: 2.43 kB
23
23
  ℹ dist/entities/models.js.map 5.09 kB │ gzip: 1.00 kB
24
24
  ℹ dist/events.js.map 4.72 kB │ gzip: 0.98 kB
25
25
  ℹ dist/docs/versioned-knowledge-base.docblock.js.map 2.02 kB │ gzip: 0.84 kB
26
- ℹ dist/versioned-knowledge-base.feature.js.map 1.99 kB │ gzip: 0.73 kB
27
- ℹ dist/example.js.map 1.54 kB │ gzip: 0.74 kB
26
+ ℹ dist/versioned-knowledge-base.feature.js.map 1.94 kB │ gzip: 0.73 kB
27
+ ℹ dist/example.js.map 1.53 kB │ gzip: 0.74 kB
28
28
  ℹ dist/handlers/memory.handlers.d.ts.map 1.17 kB │ gzip: 0.53 kB
29
29
  ℹ dist/operations/kb.d.ts.map 1.11 kB │ gzip: 0.39 kB
30
30
  ℹ dist/entities/models.d.ts.map 0.69 kB │ gzip: 0.32 kB
31
31
  ℹ dist/events.d.ts.map 0.67 kB │ gzip: 0.28 kB
32
- ℹ dist/versioned-knowledge-base.feature.d.ts.map 0.18 kB │ gzip: 0.14 kB
33
- ℹ dist/example.d.ts.map 0.12 kB │ gzip: 0.12 kB
34
- ℹ dist/operations/kb.d.ts 7.68 kB │ gzip: 0.62 kB
35
- ℹ dist/entities/models.d.ts 3.88 kB │ gzip: 0.51 kB
32
+ ℹ dist/versioned-knowledge-base.feature.d.ts.map 0.19 kB │ gzip: 0.15 kB
33
+ ℹ dist/example.d.ts.map 0.14 kB │ gzip: 0.13 kB
34
+ ℹ dist/operations/kb.d.ts 7.75 kB │ gzip: 0.63 kB
35
+ ℹ dist/entities/models.d.ts 3.84 kB │ gzip: 0.51 kB
36
36
  ℹ dist/events.d.ts 2.15 kB │ gzip: 0.39 kB
37
37
  ℹ dist/handlers/memory.handlers.d.ts 1.94 kB │ gzip: 0.61 kB
38
38
  ℹ dist/index.d.ts 1.18 kB │ gzip: 0.35 kB
39
- ℹ dist/versioned-knowledge-base.feature.d.ts 0.30 kB │ gzip: 0.18 kB
39
+ ℹ dist/versioned-knowledge-base.feature.d.ts 0.34 kB │ gzip: 0.20 kB
40
40
  ℹ dist/operations/index.d.ts 0.29 kB │ gzip: 0.13 kB
41
+ ℹ dist/example.d.ts 0.25 kB │ gzip: 0.17 kB
41
42
  ℹ dist/entities/index.d.ts 0.21 kB │ gzip: 0.11 kB
42
43
  ℹ dist/handlers/index.d.ts 0.20 kB │ gzip: 0.10 kB
43
- ℹ dist/example.d.ts 0.20 kB │ gzip: 0.16 kB
44
44
  ℹ dist/docs/index.d.ts 0.01 kB │ gzip: 0.03 kB
45
45
  ℹ dist/docs/versioned-knowledge-base.docblock.d.ts 0.01 kB │ gzip: 0.03 kB
46
- ℹ 37 files, total: 77.49 kB
47
- ✔ Build complete in 21853ms
46
+ ℹ 37 files, total: 77.63 kB
47
+ ✔ Build complete in 26439ms
@@ -1,7 +1,7 @@
1
1
  $ bun build:types && bun build:bundle
2
2
  $ tsc --noEmit
3
3
  $ tsdown
4
- ℹ tsdown v0.18.3 powered by rolldown v1.0.0-beta.57
4
+ ℹ tsdown v0.19.0 powered by rolldown v1.0.0-beta.59
5
5
  ℹ config file: /home/runner/work/contractspec/contractspec/packages/examples/versioned-knowledge-base/tsdown.config.js
6
6
  ℹ entry: src/events.ts, src/example.ts, src/index.ts, src/versioned-knowledge-base.feature.ts, src/docs/index.ts, src/docs/versioned-knowledge-base.docblock.ts, src/entities/index.ts, src/entities/models.ts, src/handlers/index.ts, src/handlers/memory.handlers.ts, src/operations/index.ts, src/operations/kb.ts
7
7
  ℹ target: esnext
@@ -12,37 +12,37 @@ $ tsdown
12
12
  ℹ dist/entities/models.js 3.39 kB │ gzip: 0.67 kB
13
13
  ℹ dist/events.js 3.15 kB │ gzip: 0.67 kB
14
14
  ℹ dist/docs/versioned-knowledge-base.docblock.js 1.52 kB │ gzip: 0.66 kB
15
- ℹ dist/versioned-knowledge-base.feature.js 1.26 kB │ gzip: 0.47 kB
15
+ ℹ dist/versioned-knowledge-base.feature.js 1.34 kB │ gzip: 0.50 kB
16
16
  ℹ dist/index.js 1.16 kB │ gzip: 0.35 kB
17
- ℹ dist/example.js 1.00 kB │ gzip: 0.51 kB
17
+ ℹ dist/example.js 1.07 kB │ gzip: 0.54 kB
18
18
  ℹ dist/operations/index.js 0.29 kB │ gzip: 0.13 kB
19
19
  ℹ dist/entities/index.js 0.21 kB │ gzip: 0.11 kB
20
20
  ℹ dist/handlers/index.js 0.14 kB │ gzip: 0.09 kB
21
21
  ℹ dist/docs/index.js 0.05 kB │ gzip: 0.07 kB
22
22
  ℹ dist/operations/kb.js.map 9.51 kB │ gzip: 2.10 kB
23
- ℹ dist/handlers/memory.handlers.js.map 8.54 kB │ gzip: 2.46 kB
23
+ ℹ dist/handlers/memory.handlers.js.map 8.44 kB │ gzip: 2.43 kB
24
24
  ℹ dist/entities/models.js.map 5.09 kB │ gzip: 1.00 kB
25
25
  ℹ dist/events.js.map 4.72 kB │ gzip: 0.98 kB
26
26
  ℹ dist/docs/versioned-knowledge-base.docblock.js.map 2.02 kB │ gzip: 0.84 kB
27
- ℹ dist/versioned-knowledge-base.feature.js.map 1.99 kB │ gzip: 0.73 kB
28
- ℹ dist/example.js.map 1.54 kB │ gzip: 0.74 kB
27
+ ℹ dist/versioned-knowledge-base.feature.js.map 1.94 kB │ gzip: 0.73 kB
28
+ ℹ dist/example.js.map 1.53 kB │ gzip: 0.74 kB
29
29
  ℹ dist/handlers/memory.handlers.d.ts.map 1.17 kB │ gzip: 0.53 kB
30
30
  ℹ dist/operations/kb.d.ts.map 1.11 kB │ gzip: 0.39 kB
31
31
  ℹ dist/entities/models.d.ts.map 0.69 kB │ gzip: 0.32 kB
32
32
  ℹ dist/events.d.ts.map 0.67 kB │ gzip: 0.28 kB
33
- ℹ dist/versioned-knowledge-base.feature.d.ts.map 0.18 kB │ gzip: 0.14 kB
34
- ℹ dist/example.d.ts.map 0.12 kB │ gzip: 0.12 kB
33
+ ℹ dist/versioned-knowledge-base.feature.d.ts.map 0.19 kB │ gzip: 0.15 kB
34
+ ℹ dist/example.d.ts.map 0.14 kB │ gzip: 0.13 kB
35
35
  ℹ dist/operations/kb.d.ts 7.68 kB │ gzip: 0.62 kB
36
36
  ℹ dist/entities/models.d.ts 3.88 kB │ gzip: 0.51 kB
37
37
  ℹ dist/events.d.ts 2.15 kB │ gzip: 0.39 kB
38
38
  ℹ dist/handlers/memory.handlers.d.ts 1.94 kB │ gzip: 0.61 kB
39
39
  ℹ dist/index.d.ts 1.18 kB │ gzip: 0.35 kB
40
- ℹ dist/versioned-knowledge-base.feature.d.ts 0.30 kB │ gzip: 0.18 kB
40
+ ℹ dist/versioned-knowledge-base.feature.d.ts 0.34 kB │ gzip: 0.20 kB
41
41
  ℹ dist/operations/index.d.ts 0.29 kB │ gzip: 0.13 kB
42
+ ℹ dist/example.d.ts 0.25 kB │ gzip: 0.17 kB
42
43
  ℹ dist/entities/index.d.ts 0.21 kB │ gzip: 0.11 kB
43
44
  ℹ dist/handlers/index.d.ts 0.20 kB │ gzip: 0.10 kB
44
- ℹ dist/example.d.ts 0.20 kB │ gzip: 0.16 kB
45
45
  ℹ dist/docs/index.d.ts 0.01 kB │ gzip: 0.03 kB
46
46
  ℹ dist/docs/versioned-knowledge-base.docblock.d.ts 0.01 kB │ gzip: 0.03 kB
47
- ℹ 37 files, total: 77.49 kB
48
- ✔ Build complete in 25324ms
47
+ ℹ 37 files, total: 77.59 kB
48
+ ✔ Build complete in 28692ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,36 @@
1
1
  # @contractspec/example.versioned-knowledge-base
2
2
 
3
+ ## 1.47.0
4
+
5
+ ### Minor Changes
6
+
7
+ - caf8701: feat: add cli vibe command to run workflow
8
+ - c69b849: feat: add api web services (mcp & website)
9
+ - 42b8d78: feat: add cli `contractspec vibe` workflow to simplify usage
10
+ - fd38e85: feat: auto-fix contractspec issues
11
+
12
+ ### Patch Changes
13
+
14
+ - e7ded36: feat: improve stability (adding ts-morph)
15
+ - c231a8b: test: improve workspace stability
16
+ - Updated dependencies [e7ded36]
17
+ - Updated dependencies [caf8701]
18
+ - Updated dependencies [c69b849]
19
+ - Updated dependencies [c231a8b]
20
+ - Updated dependencies [42b8d78]
21
+ - Updated dependencies [fd38e85]
22
+ - @contractspec/lib.contracts@1.47.0
23
+ - @contractspec/lib.schema@1.47.0
24
+
25
+ ## 1.46.2
26
+
27
+ ### Patch Changes
28
+
29
+ - 7e21625: feat: library services (landing page & api)
30
+ - Updated dependencies [7e21625]
31
+ - @contractspec/lib.contracts@1.46.2
32
+ - @contractspec/lib.schema@1.46.2
33
+
3
34
  ## 1.46.1
4
35
 
5
36
  ### Patch Changes
@@ -1,93 +1,93 @@
1
- import * as _contractspec_lib_schema84 from "@contractspec/lib.schema";
1
+ import * as _contractspec_lib_schema0 from "@contractspec/lib.schema";
2
2
 
3
3
  //#region src/entities/models.d.ts
4
- declare const SourceDocumentModel: _contractspec_lib_schema84.SchemaModel<{
4
+ declare const SourceDocumentModel: _contractspec_lib_schema0.SchemaModel<{
5
5
  id: {
6
- type: _contractspec_lib_schema84.FieldType<string, string>;
6
+ type: _contractspec_lib_schema0.FieldType<string, string>;
7
7
  isOptional: false;
8
8
  };
9
9
  jurisdiction: {
10
- type: _contractspec_lib_schema84.FieldType<string, string>;
10
+ type: _contractspec_lib_schema0.FieldType<string, string>;
11
11
  isOptional: false;
12
12
  };
13
13
  authority: {
14
- type: _contractspec_lib_schema84.FieldType<string, string>;
14
+ type: _contractspec_lib_schema0.FieldType<string, string>;
15
15
  isOptional: false;
16
16
  };
17
17
  title: {
18
- type: _contractspec_lib_schema84.FieldType<string, string>;
18
+ type: _contractspec_lib_schema0.FieldType<string, string>;
19
19
  isOptional: false;
20
20
  };
21
21
  fetchedAt: {
22
- type: _contractspec_lib_schema84.FieldType<Date, string>;
22
+ type: _contractspec_lib_schema0.FieldType<Date, string>;
23
23
  isOptional: false;
24
24
  };
25
25
  hash: {
26
- type: _contractspec_lib_schema84.FieldType<string, string>;
26
+ type: _contractspec_lib_schema0.FieldType<string, string>;
27
27
  isOptional: false;
28
28
  };
29
29
  fileId: {
30
- type: _contractspec_lib_schema84.FieldType<string, string>;
30
+ type: _contractspec_lib_schema0.FieldType<string, string>;
31
31
  isOptional: false;
32
32
  };
33
33
  }>;
34
- declare const SourceRefModel: _contractspec_lib_schema84.SchemaModel<{
34
+ declare const SourceRefModel: _contractspec_lib_schema0.SchemaModel<{
35
35
  sourceDocumentId: {
36
- type: _contractspec_lib_schema84.FieldType<string, string>;
36
+ type: _contractspec_lib_schema0.FieldType<string, string>;
37
37
  isOptional: false;
38
38
  };
39
39
  excerpt: {
40
- type: _contractspec_lib_schema84.FieldType<string, string>;
40
+ type: _contractspec_lib_schema0.FieldType<string, string>;
41
41
  isOptional: true;
42
42
  };
43
43
  }>;
44
- declare const RuleModel: _contractspec_lib_schema84.SchemaModel<{
44
+ declare const RuleModel: _contractspec_lib_schema0.SchemaModel<{
45
45
  id: {
46
- type: _contractspec_lib_schema84.FieldType<string, string>;
46
+ type: _contractspec_lib_schema0.FieldType<string, string>;
47
47
  isOptional: false;
48
48
  };
49
49
  jurisdiction: {
50
- type: _contractspec_lib_schema84.FieldType<string, string>;
50
+ type: _contractspec_lib_schema0.FieldType<string, string>;
51
51
  isOptional: false;
52
52
  };
53
53
  topicKey: {
54
- type: _contractspec_lib_schema84.FieldType<string, string>;
54
+ type: _contractspec_lib_schema0.FieldType<string, string>;
55
55
  isOptional: false;
56
56
  };
57
57
  }>;
58
- declare const RuleVersionModel: _contractspec_lib_schema84.SchemaModel<{
58
+ declare const RuleVersionModel: _contractspec_lib_schema0.SchemaModel<{
59
59
  id: {
60
- type: _contractspec_lib_schema84.FieldType<string, string>;
60
+ type: _contractspec_lib_schema0.FieldType<string, string>;
61
61
  isOptional: false;
62
62
  };
63
63
  ruleId: {
64
- type: _contractspec_lib_schema84.FieldType<string, string>;
64
+ type: _contractspec_lib_schema0.FieldType<string, string>;
65
65
  isOptional: false;
66
66
  };
67
67
  jurisdiction: {
68
- type: _contractspec_lib_schema84.FieldType<string, string>;
68
+ type: _contractspec_lib_schema0.FieldType<string, string>;
69
69
  isOptional: false;
70
70
  };
71
71
  topicKey: {
72
- type: _contractspec_lib_schema84.FieldType<string, string>;
72
+ type: _contractspec_lib_schema0.FieldType<string, string>;
73
73
  isOptional: false;
74
74
  };
75
75
  version: {
76
- type: _contractspec_lib_schema84.FieldType<string, string>;
76
+ type: _contractspec_lib_schema0.FieldType<string, string>;
77
77
  isOptional: false;
78
78
  };
79
79
  content: {
80
- type: _contractspec_lib_schema84.FieldType<string, string>;
80
+ type: _contractspec_lib_schema0.FieldType<string, string>;
81
81
  isOptional: false;
82
82
  };
83
83
  sourceRefs: {
84
- type: _contractspec_lib_schema84.SchemaModel<{
84
+ type: _contractspec_lib_schema0.SchemaModel<{
85
85
  sourceDocumentId: {
86
- type: _contractspec_lib_schema84.FieldType<string, string>;
86
+ type: _contractspec_lib_schema0.FieldType<string, string>;
87
87
  isOptional: false;
88
88
  };
89
89
  excerpt: {
90
- type: _contractspec_lib_schema84.FieldType<string, string>;
90
+ type: _contractspec_lib_schema0.FieldType<string, string>;
91
91
  isOptional: true;
92
92
  };
93
93
  }>;
@@ -95,42 +95,42 @@ declare const RuleVersionModel: _contractspec_lib_schema84.SchemaModel<{
95
95
  isOptional: false;
96
96
  };
97
97
  status: {
98
- type: _contractspec_lib_schema84.FieldType<string, string>;
98
+ type: _contractspec_lib_schema0.FieldType<string, string>;
99
99
  isOptional: false;
100
100
  };
101
101
  approvedBy: {
102
- type: _contractspec_lib_schema84.FieldType<string, string>;
102
+ type: _contractspec_lib_schema0.FieldType<string, string>;
103
103
  isOptional: true;
104
104
  };
105
105
  approvedAt: {
106
- type: _contractspec_lib_schema84.FieldType<Date, string>;
106
+ type: _contractspec_lib_schema0.FieldType<Date, string>;
107
107
  isOptional: true;
108
108
  };
109
109
  createdAt: {
110
- type: _contractspec_lib_schema84.FieldType<Date, string>;
110
+ type: _contractspec_lib_schema0.FieldType<Date, string>;
111
111
  isOptional: false;
112
112
  };
113
113
  }>;
114
- declare const KBSnapshotModel: _contractspec_lib_schema84.SchemaModel<{
114
+ declare const KBSnapshotModel: _contractspec_lib_schema0.SchemaModel<{
115
115
  id: {
116
- type: _contractspec_lib_schema84.FieldType<string, string>;
116
+ type: _contractspec_lib_schema0.FieldType<string, string>;
117
117
  isOptional: false;
118
118
  };
119
119
  jurisdiction: {
120
- type: _contractspec_lib_schema84.FieldType<string, string>;
120
+ type: _contractspec_lib_schema0.FieldType<string, string>;
121
121
  isOptional: false;
122
122
  };
123
123
  asOfDate: {
124
- type: _contractspec_lib_schema84.FieldType<Date, string>;
124
+ type: _contractspec_lib_schema0.FieldType<Date, string>;
125
125
  isOptional: false;
126
126
  };
127
127
  includedRuleVersionIds: {
128
- type: _contractspec_lib_schema84.FieldType<string, string>;
128
+ type: _contractspec_lib_schema0.FieldType<string, string>;
129
129
  isArray: true;
130
130
  isOptional: false;
131
131
  };
132
132
  publishedAt: {
133
- type: _contractspec_lib_schema84.FieldType<Date, string>;
133
+ type: _contractspec_lib_schema0.FieldType<Date, string>;
134
134
  isOptional: false;
135
135
  };
136
136
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","names":[],"sources":["../../src/entities/models.ts"],"sourcesContent":[],"mappings":";;;cAEa,gDAAmB;;UAa9B,0BAAA,CAAA;IAbW,UAAA,EAAA,KAAA;EAaX,CAAA;;;;;;;;;EAb8B,KAAA,EAAA;IAenB,IAAA,sCAUX,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;;;IAVyB,IAAA,sCAAA,KAAA,EAAA,MAAA,CAAA;IAYd,UASX,EAAA,KAAA;EAAA,CAAA;;;;EAToB,CAAA;EAWT,MAAA,EAAA;IAiBX,IAAA,sCAAA,CAAA,MAAA,EAAA,MAAA,CAAA;;;;cAxCW,2CAAc;;UAUzB,0BAAA,CAAA;;;;;;;;cAEW,sCAAS;;IAWO,IAAA,EAF3B,0BAAA,CAAA,SAE2B,CAAA,MAAA,EAAA,MAAA,CAAA;IAmBhB,UAAA,EAAA,KAeX;EAAA,CAAA;;;;;;;;EAf0B,CAAA;;cAnBf,6CAAgB;;UAiB3B,0BAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEW,4CAAe;;UAe1B,0BAAA,CAAA"}
1
+ {"version":3,"file":"models.d.ts","names":[],"sources":["../../src/entities/models.ts"],"sourcesContent":[],"mappings":";;;cAEa,+CAAmB;;UAa9B,yBAAA,CAAA;IAbW,UAAA,EAAA,KAAA;EAaX,CAAA;;;;;;;;;EAb8B,KAAA,EAAA;IAenB,IAAA,qCAUX,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;;;IAVyB,IAAA,qCAAA,KAAA,EAAA,MAAA,CAAA;IAYd,UASX,EAAA,KAAA;EAAA,CAAA;;;;EAToB,CAAA;EAWT,MAAA,EAAA;IAiBX,IAAA,qCAAA,CAAA,MAAA,EAAA,MAAA,CAAA;;;;cAxCW,0CAAc;;UAUzB,yBAAA,CAAA;;;;;;;;cAEW,qCAAS;;IAWO,IAAA,EAF3B,yBAAA,CAAA,SAE2B,CAAA,MAAA,EAAA,MAAA,CAAA;IAmBhB,UAAA,EAAA,KAeX;EAAA,CAAA;;;;;;;;EAf0B,CAAA;;cAnBf,4CAAgB;;UAiB3B,yBAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEW,2CAAe;;UAe1B,yBAAA,CAAA"}
package/dist/events.d.ts CHANGED
@@ -1,60 +1,60 @@
1
- import * as _contractspec_lib_contracts4 from "@contractspec/lib.contracts";
2
- import * as _contractspec_lib_schema68 from "@contractspec/lib.schema";
1
+ import * as _contractspec_lib_contracts1 from "@contractspec/lib.contracts";
2
+ import * as _contractspec_lib_schema34 from "@contractspec/lib.schema";
3
3
 
4
4
  //#region src/events.d.ts
5
- declare const KbSourceIngestedEvent: _contractspec_lib_contracts4.EventSpec<_contractspec_lib_schema68.SchemaModel<{
5
+ declare const KbSourceIngestedEvent: _contractspec_lib_contracts1.EventSpec<_contractspec_lib_schema34.SchemaModel<{
6
6
  sourceDocumentId: {
7
- type: _contractspec_lib_schema68.FieldType<string, string>;
7
+ type: _contractspec_lib_schema34.FieldType<string, string>;
8
8
  isOptional: false;
9
9
  };
10
10
  jurisdiction: {
11
- type: _contractspec_lib_schema68.FieldType<string, string>;
11
+ type: _contractspec_lib_schema34.FieldType<string, string>;
12
12
  isOptional: false;
13
13
  };
14
14
  hash: {
15
- type: _contractspec_lib_schema68.FieldType<string, string>;
15
+ type: _contractspec_lib_schema34.FieldType<string, string>;
16
16
  isOptional: false;
17
17
  };
18
18
  }>>;
19
- declare const KbRuleVersionCreatedEvent: _contractspec_lib_contracts4.EventSpec<_contractspec_lib_schema68.SchemaModel<{
19
+ declare const KbRuleVersionCreatedEvent: _contractspec_lib_contracts1.EventSpec<_contractspec_lib_schema34.SchemaModel<{
20
20
  ruleVersionId: {
21
- type: _contractspec_lib_schema68.FieldType<string, string>;
21
+ type: _contractspec_lib_schema34.FieldType<string, string>;
22
22
  isOptional: false;
23
23
  };
24
24
  ruleId: {
25
- type: _contractspec_lib_schema68.FieldType<string, string>;
25
+ type: _contractspec_lib_schema34.FieldType<string, string>;
26
26
  isOptional: false;
27
27
  };
28
28
  jurisdiction: {
29
- type: _contractspec_lib_schema68.FieldType<string, string>;
29
+ type: _contractspec_lib_schema34.FieldType<string, string>;
30
30
  isOptional: false;
31
31
  };
32
32
  status: {
33
- type: _contractspec_lib_schema68.FieldType<string, string>;
33
+ type: _contractspec_lib_schema34.FieldType<string, string>;
34
34
  isOptional: false;
35
35
  };
36
36
  }>>;
37
- declare const KbRuleVersionApprovedEvent: _contractspec_lib_contracts4.EventSpec<_contractspec_lib_schema68.SchemaModel<{
37
+ declare const KbRuleVersionApprovedEvent: _contractspec_lib_contracts1.EventSpec<_contractspec_lib_schema34.SchemaModel<{
38
38
  ruleVersionId: {
39
- type: _contractspec_lib_schema68.FieldType<string, string>;
39
+ type: _contractspec_lib_schema34.FieldType<string, string>;
40
40
  isOptional: false;
41
41
  };
42
42
  approver: {
43
- type: _contractspec_lib_schema68.FieldType<string, string>;
43
+ type: _contractspec_lib_schema34.FieldType<string, string>;
44
44
  isOptional: false;
45
45
  };
46
46
  }>>;
47
- declare const KbSnapshotPublishedEvent: _contractspec_lib_contracts4.EventSpec<_contractspec_lib_schema68.SchemaModel<{
47
+ declare const KbSnapshotPublishedEvent: _contractspec_lib_contracts1.EventSpec<_contractspec_lib_schema34.SchemaModel<{
48
48
  snapshotId: {
49
- type: _contractspec_lib_schema68.FieldType<string, string>;
49
+ type: _contractspec_lib_schema34.FieldType<string, string>;
50
50
  isOptional: false;
51
51
  };
52
52
  jurisdiction: {
53
- type: _contractspec_lib_schema68.FieldType<string, string>;
53
+ type: _contractspec_lib_schema34.FieldType<string, string>;
54
54
  isOptional: false;
55
55
  };
56
56
  includedRuleVersionsCount: {
57
- type: _contractspec_lib_schema68.FieldType<number, number>;
57
+ type: _contractspec_lib_schema34.FieldType<number, number>;
58
58
  isOptional: false;
59
59
  };
60
60
  }>>;
package/dist/example.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { ExampleSpec } from "@contractspec/lib.contracts";
1
+ import * as _contractspec_lib_contracts0 from "@contractspec/lib.contracts";
2
2
 
3
3
  //#region src/example.d.ts
4
- declare const example: ExampleSpec;
4
+ declare const example: _contractspec_lib_contracts0.ExampleSpec;
5
5
  //#endregion
6
6
  export { example as default };
7
7
  //# sourceMappingURL=example.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"example.d.ts","names":[],"sources":["../src/example.ts"],"sourcesContent":[],"mappings":";;;cAEM,SAAS"}
1
+ {"version":3,"file":"example.d.ts","names":[],"sources":["../src/example.ts"],"sourcesContent":[],"mappings":";;;cAEM,SA6BJ,4BAAA,CA7BW"}
package/dist/example.js CHANGED
@@ -1,5 +1,7 @@
1
+ import { defineExample } from "@contractspec/lib.contracts";
2
+
1
3
  //#region src/example.ts
2
- const example = {
4
+ const example = defineExample({
3
5
  meta: {
4
6
  key: "versioned-knowledge-base",
5
7
  version: "1.0.0",
@@ -39,7 +41,7 @@ const example = {
39
41
  },
40
42
  mcp: { enabled: true }
41
43
  }
42
- };
44
+ });
43
45
  var example_default = example;
44
46
 
45
47
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"example.js","names":["example: ExampleSpec"],"sources":["../src/example.ts"],"sourcesContent":["import type { ExampleSpec } from '@contractspec/lib.contracts';\n\nconst example: ExampleSpec = {\n meta: {\n key: 'versioned-knowledge-base',\n version: '1.0.0',\n title: 'Versioned Knowledge Base',\n description:\n 'Curated KB with immutable sources, reviewable rule versions, and published snapshots.',\n kind: 'knowledge',\n visibility: 'public',\n stability: 'experimental',\n owners: ['@platform.core'],\n tags: ['knowledge', 'versioning', 'snapshots'],\n },\n docs: {\n rootDocId: 'docs.examples.versioned-knowledge-base',\n },\n entrypoints: {\n packageName: '@contractspec/example.versioned-knowledge-base',\n feature: './feature',\n contracts: './contracts',\n handlers: './handlers',\n docs: './docs',\n },\n surfaces: {\n templates: true,\n sandbox: { enabled: true, modes: ['markdown', 'specs', 'builder'] },\n studio: { enabled: true, installable: true },\n mcp: { enabled: true },\n },\n};\n\nexport default example;\n"],"mappings":";AAEA,MAAMA,UAAuB;CAC3B,MAAM;EACJ,KAAK;EACL,SAAS;EACT,OAAO;EACP,aACE;EACF,MAAM;EACN,YAAY;EACZ,WAAW;EACX,QAAQ,CAAC,iBAAiB;EAC1B,MAAM;GAAC;GAAa;GAAc;GAAY;EAC/C;CACD,MAAM,EACJ,WAAW,0CACZ;CACD,aAAa;EACX,aAAa;EACb,SAAS;EACT,WAAW;EACX,UAAU;EACV,MAAM;EACP;CACD,UAAU;EACR,WAAW;EACX,SAAS;GAAE,SAAS;GAAM,OAAO;IAAC;IAAY;IAAS;IAAU;GAAE;EACnE,QAAQ;GAAE,SAAS;GAAM,aAAa;GAAM;EAC5C,KAAK,EAAE,SAAS,MAAM;EACvB;CACF;AAED,sBAAe"}
1
+ {"version":3,"file":"example.js","names":[],"sources":["../src/example.ts"],"sourcesContent":["import { defineExample } from '@contractspec/lib.contracts';\n\nconst example = defineExample({\n meta: {\n key: 'versioned-knowledge-base',\n version: '1.0.0',\n title: 'Versioned Knowledge Base',\n description:\n 'Curated KB with immutable sources, reviewable rule versions, and published snapshots.',\n kind: 'knowledge',\n visibility: 'public',\n stability: 'experimental',\n owners: ['@platform.core'],\n tags: ['knowledge', 'versioning', 'snapshots'],\n },\n docs: {\n rootDocId: 'docs.examples.versioned-knowledge-base',\n },\n entrypoints: {\n packageName: '@contractspec/example.versioned-knowledge-base',\n feature: './feature',\n contracts: './contracts',\n handlers: './handlers',\n docs: './docs',\n },\n surfaces: {\n templates: true,\n sandbox: { enabled: true, modes: ['markdown', 'specs', 'builder'] },\n studio: { enabled: true, installable: true },\n mcp: { enabled: true },\n },\n});\n\nexport default example;\n"],"mappings":";;;AAEA,MAAM,UAAU,cAAc;CAC5B,MAAM;EACJ,KAAK;EACL,SAAS;EACT,OAAO;EACP,aACE;EACF,MAAM;EACN,YAAY;EACZ,WAAW;EACX,QAAQ,CAAC,iBAAiB;EAC1B,MAAM;GAAC;GAAa;GAAc;GAAY;EAC/C;CACD,MAAM,EACJ,WAAW,0CACZ;CACD,aAAa;EACX,aAAa;EACb,SAAS;EACT,WAAW;EACX,UAAU;EACV,MAAM;EACP;CACD,UAAU;EACR,WAAW;EACX,SAAS;GAAE,SAAS;GAAM,OAAO;IAAC;IAAY;IAAS;IAAU;GAAE;EACnE,QAAQ;GAAE,SAAS;GAAM,aAAa;GAAM;EAC5C,KAAK,EAAE,SAAS,MAAM;EACvB;CACF,CAAC;AAEF,sBAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"memory.handlers.js","names":["doc: SourceDocument","ruleVersion: RuleVersion","approved: RuleVersion","snapshot: KBSnapshot"],"sources":["../../src/handlers/memory.handlers.ts"],"sourcesContent":["interface SourceRef {\n sourceDocumentId: string;\n excerpt?: string;\n}\ninterface SourceDocument {\n id: string;\n jurisdiction: string;\n authority: string;\n title: string;\n fetchedAt: Date;\n hash: string;\n fileId: string;\n}\ninterface Rule {\n id: string;\n jurisdiction: string;\n topicKey: string;\n}\ninterface RuleVersion {\n id: string;\n ruleId: string;\n jurisdiction: string;\n topicKey: string;\n version: string;\n content: string;\n sourceRefs: SourceRef[];\n status: 'draft' | 'approved' | 'rejected';\n approvedBy?: string;\n approvedAt?: Date;\n createdAt: Date;\n}\ninterface KBSnapshot {\n id: string;\n jurisdiction: string;\n asOfDate: Date;\n includedRuleVersionIds: string[];\n publishedAt: Date;\n}\n\nexport interface MemoryKbStore {\n sources: Map<string, SourceDocument>;\n rules: Map<string, Rule>;\n ruleVersions: Map<string, RuleVersion>;\n snapshots: Map<string, KBSnapshot>;\n nextRuleVersionNumberByRuleId: Map<string, number>;\n}\n\nexport function createMemoryKbStore(): MemoryKbStore {\n return {\n sources: new Map(),\n rules: new Map(),\n ruleVersions: new Map(),\n snapshots: new Map(),\n nextRuleVersionNumberByRuleId: new Map(),\n };\n}\n\nexport interface MemoryKbHandlers {\n createRule(rule: Rule): Promise<Rule>;\n ingestSource(input: Omit<SourceDocument, 'id'>): Promise<SourceDocument>;\n upsertRuleVersion(input: {\n ruleId: string;\n content: string;\n sourceRefs: SourceRef[];\n }): Promise<RuleVersion>;\n approveRuleVersion(input: {\n ruleVersionId: string;\n approver: string;\n }): Promise<RuleVersion>;\n publishSnapshot(input: {\n jurisdiction: string;\n asOfDate: Date;\n }): Promise<KBSnapshot>;\n search(input: {\n snapshotId: string;\n jurisdiction: string;\n query: string;\n }): Promise<{ items: { ruleVersionId: string; excerpt?: string }[] }>;\n}\n\nfunction stableId(prefix: string, value: string): string {\n return `${prefix}_${value.replace(/[^a-zA-Z0-9_-]/g, '_')}`;\n}\n\nexport function createMemoryKbHandlers(store: MemoryKbStore): MemoryKbHandlers {\n async function createRule(rule: Rule): Promise<Rule> {\n store.rules.set(rule.id, rule);\n return rule;\n }\n\n async function ingestSource(\n input: Omit<SourceDocument, 'id'>\n ): Promise<SourceDocument> {\n const id = stableId('src', `${input.jurisdiction}_${input.hash}`);\n const doc: SourceDocument = { id, ...input };\n store.sources.set(id, doc);\n return doc;\n }\n\n async function upsertRuleVersion(input: {\n ruleId: string;\n content: string;\n sourceRefs: SourceRef[];\n }): Promise<RuleVersion> {\n if (!input.sourceRefs.length) {\n throw new Error('SOURCE_REFS_REQUIRED');\n }\n const rule = store.rules.get(input.ruleId);\n if (!rule) {\n throw new Error('RULE_NOT_FOUND');\n }\n const next =\n (store.nextRuleVersionNumberByRuleId.get(input.ruleId) ?? 0) + 1;\n const id = stableId('rv', `${input.ruleId}_${next}`);\n const ruleVersion: RuleVersion = {\n id,\n ruleId: input.ruleId,\n jurisdiction: rule.jurisdiction,\n topicKey: rule.topicKey,\n version: next.toString(),\n content: input.content,\n sourceRefs: input.sourceRefs,\n status: 'draft',\n createdAt: new Date(),\n approvedAt: undefined,\n approvedBy: undefined,\n };\n store.ruleVersions.set(id, ruleVersion);\n return ruleVersion;\n }\n\n async function approveRuleVersion(input: {\n ruleVersionId: string;\n approver: string;\n }): Promise<RuleVersion> {\n const existing = store.ruleVersions.get(input.ruleVersionId);\n if (!existing) {\n throw new Error('RULE_VERSION_NOT_FOUND');\n }\n const approved: RuleVersion = {\n ...existing,\n status: 'approved',\n approvedBy: input.approver,\n approvedAt: new Date(),\n };\n store.ruleVersions.set(approved.id, approved);\n return approved;\n }\n\n async function publishSnapshot(input: {\n jurisdiction: string;\n asOfDate: Date;\n }): Promise<KBSnapshot> {\n const approved = [...store.ruleVersions.values()].filter(\n (rv) => rv.status === 'approved' && rv.jurisdiction === input.jurisdiction\n );\n if (approved.length === 0) {\n throw new Error('NO_APPROVED_RULES');\n }\n const includedRuleVersionIds = approved.map((rv) => rv.id).sort();\n const id = stableId(\n 'snap',\n `${input.jurisdiction}_${input.asOfDate.toISOString().slice(0, 10)}_${includedRuleVersionIds.length}`\n );\n const snapshot: KBSnapshot = {\n id,\n jurisdiction: input.jurisdiction,\n asOfDate: input.asOfDate,\n includedRuleVersionIds,\n publishedAt: new Date(),\n };\n store.snapshots.set(id, snapshot);\n return snapshot;\n }\n\n async function search(input: {\n snapshotId: string;\n jurisdiction: string;\n query: string;\n }): Promise<{ items: { ruleVersionId: string; excerpt?: string }[] }> {\n const snapshot = store.snapshots.get(input.snapshotId);\n if (!snapshot) {\n throw new Error('SNAPSHOT_NOT_FOUND');\n }\n if (snapshot.jurisdiction !== input.jurisdiction) {\n throw new Error('JURISDICTION_MISMATCH');\n }\n const q = input.query.toLowerCase();\n const tokens = q\n .split(/\\s+/)\n .map((t) => t.trim())\n .filter(Boolean);\n const items = snapshot.includedRuleVersionIds\n .map((id) => store.ruleVersions.get(id))\n .filter((rv): rv is RuleVersion => Boolean(rv))\n .filter((rv) => {\n if (tokens.length === 0) return true;\n const hay = rv.content.toLowerCase();\n return tokens.every((token) => hay.includes(token));\n })\n .map((rv) => ({\n ruleVersionId: rv.id,\n excerpt: rv.content.slice(0, 120),\n }));\n return { items };\n }\n\n return {\n createRule,\n ingestSource,\n upsertRuleVersion,\n approveRuleVersion,\n publishSnapshot,\n search,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"memory.handlers.js","names":[],"sources":["../../src/handlers/memory.handlers.ts"],"sourcesContent":["interface SourceRef {\n sourceDocumentId: string;\n excerpt?: string;\n}\ninterface SourceDocument {\n id: string;\n jurisdiction: string;\n authority: string;\n title: string;\n fetchedAt: Date;\n hash: string;\n fileId: string;\n}\ninterface Rule {\n id: string;\n jurisdiction: string;\n topicKey: string;\n}\ninterface RuleVersion {\n id: string;\n ruleId: string;\n jurisdiction: string;\n topicKey: string;\n version: string;\n content: string;\n sourceRefs: SourceRef[];\n status: 'draft' | 'approved' | 'rejected';\n approvedBy?: string;\n approvedAt?: Date;\n createdAt: Date;\n}\ninterface KBSnapshot {\n id: string;\n jurisdiction: string;\n asOfDate: Date;\n includedRuleVersionIds: string[];\n publishedAt: Date;\n}\n\nexport interface MemoryKbStore {\n sources: Map<string, SourceDocument>;\n rules: Map<string, Rule>;\n ruleVersions: Map<string, RuleVersion>;\n snapshots: Map<string, KBSnapshot>;\n nextRuleVersionNumberByRuleId: Map<string, number>;\n}\n\nexport function createMemoryKbStore(): MemoryKbStore {\n return {\n sources: new Map(),\n rules: new Map(),\n ruleVersions: new Map(),\n snapshots: new Map(),\n nextRuleVersionNumberByRuleId: new Map(),\n };\n}\n\nexport interface MemoryKbHandlers {\n createRule(rule: Rule): Promise<Rule>;\n ingestSource(input: Omit<SourceDocument, 'id'>): Promise<SourceDocument>;\n upsertRuleVersion(input: {\n ruleId: string;\n content: string;\n sourceRefs: SourceRef[];\n }): Promise<RuleVersion>;\n approveRuleVersion(input: {\n ruleVersionId: string;\n approver: string;\n }): Promise<RuleVersion>;\n publishSnapshot(input: {\n jurisdiction: string;\n asOfDate: Date;\n }): Promise<KBSnapshot>;\n search(input: {\n snapshotId: string;\n jurisdiction: string;\n query: string;\n }): Promise<{ items: { ruleVersionId: string; excerpt?: string }[] }>;\n}\n\nfunction stableId(prefix: string, value: string): string {\n return `${prefix}_${value.replace(/[^a-zA-Z0-9_-]/g, '_')}`;\n}\n\nexport function createMemoryKbHandlers(store: MemoryKbStore): MemoryKbHandlers {\n async function createRule(rule: Rule): Promise<Rule> {\n store.rules.set(rule.id, rule);\n return rule;\n }\n\n async function ingestSource(\n input: Omit<SourceDocument, 'id'>\n ): Promise<SourceDocument> {\n const id = stableId('src', `${input.jurisdiction}_${input.hash}`);\n const doc: SourceDocument = { id, ...input };\n store.sources.set(id, doc);\n return doc;\n }\n\n async function upsertRuleVersion(input: {\n ruleId: string;\n content: string;\n sourceRefs: SourceRef[];\n }): Promise<RuleVersion> {\n if (!input.sourceRefs.length) {\n throw new Error('SOURCE_REFS_REQUIRED');\n }\n const rule = store.rules.get(input.ruleId);\n if (!rule) {\n throw new Error('RULE_NOT_FOUND');\n }\n const next =\n (store.nextRuleVersionNumberByRuleId.get(input.ruleId) ?? 0) + 1;\n const id = stableId('rv', `${input.ruleId}_${next}`);\n const ruleVersion: RuleVersion = {\n id,\n ruleId: input.ruleId,\n jurisdiction: rule.jurisdiction,\n topicKey: rule.topicKey,\n version: next.toString(),\n content: input.content,\n sourceRefs: input.sourceRefs,\n status: 'draft',\n createdAt: new Date(),\n approvedAt: undefined,\n approvedBy: undefined,\n };\n store.ruleVersions.set(id, ruleVersion);\n return ruleVersion;\n }\n\n async function approveRuleVersion(input: {\n ruleVersionId: string;\n approver: string;\n }): Promise<RuleVersion> {\n const existing = store.ruleVersions.get(input.ruleVersionId);\n if (!existing) {\n throw new Error('RULE_VERSION_NOT_FOUND');\n }\n const approved: RuleVersion = {\n ...existing,\n status: 'approved',\n approvedBy: input.approver,\n approvedAt: new Date(),\n };\n store.ruleVersions.set(approved.id, approved);\n return approved;\n }\n\n async function publishSnapshot(input: {\n jurisdiction: string;\n asOfDate: Date;\n }): Promise<KBSnapshot> {\n const approved = [...store.ruleVersions.values()].filter(\n (rv) => rv.status === 'approved' && rv.jurisdiction === input.jurisdiction\n );\n if (approved.length === 0) {\n throw new Error('NO_APPROVED_RULES');\n }\n const includedRuleVersionIds = approved.map((rv) => rv.id).sort();\n const id = stableId(\n 'snap',\n `${input.jurisdiction}_${input.asOfDate.toISOString().slice(0, 10)}_${includedRuleVersionIds.length}`\n );\n const snapshot: KBSnapshot = {\n id,\n jurisdiction: input.jurisdiction,\n asOfDate: input.asOfDate,\n includedRuleVersionIds,\n publishedAt: new Date(),\n };\n store.snapshots.set(id, snapshot);\n return snapshot;\n }\n\n async function search(input: {\n snapshotId: string;\n jurisdiction: string;\n query: string;\n }): Promise<{ items: { ruleVersionId: string; excerpt?: string }[] }> {\n const snapshot = store.snapshots.get(input.snapshotId);\n if (!snapshot) {\n throw new Error('SNAPSHOT_NOT_FOUND');\n }\n if (snapshot.jurisdiction !== input.jurisdiction) {\n throw new Error('JURISDICTION_MISMATCH');\n }\n const q = input.query.toLowerCase();\n const tokens = q\n .split(/\\s+/)\n .map((t) => t.trim())\n .filter(Boolean);\n const items = snapshot.includedRuleVersionIds\n .map((id) => store.ruleVersions.get(id))\n .filter((rv): rv is RuleVersion => Boolean(rv))\n .filter((rv) => {\n if (tokens.length === 0) return true;\n const hay = rv.content.toLowerCase();\n return tokens.every((token) => hay.includes(token));\n })\n .map((rv) => ({\n ruleVersionId: rv.id,\n excerpt: rv.content.slice(0, 120),\n }));\n return { items };\n }\n\n return {\n createRule,\n ingestSource,\n upsertRuleVersion,\n approveRuleVersion,\n publishSnapshot,\n search,\n };\n}\n"],"mappings":"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"}