kibi-cli 0.11.0 → 0.11.3
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/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +36 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +1 -1
- package/dist/commands/init-helpers.d.ts.map +1 -1
- package/dist/commands/init-helpers.js +2 -3
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +7 -2
- package/dist/commands/skills.d.ts +14 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +86 -0
- package/dist/commands/sync/manifest.d.ts +1 -1
- package/dist/commands/sync/manifest.d.ts.map +1 -1
- package/dist/commands/sync/manifest.js +7 -4
- package/dist/commands/sync/staging.d.ts.map +1 -1
- package/dist/commands/sync/staging.js +2 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +3 -1
- package/dist/extractors/manifest.d.ts.map +1 -1
- package/dist/extractors/manifest.js +3 -1
- package/dist/extractors/symbol-coordinates.d.ts.map +1 -1
- package/dist/extractors/symbol-coordinates.js +1 -1
- package/dist/extractors/symbols-coordinator.d.ts.map +1 -1
- package/dist/extractors/symbols-coordinator.js +2 -1
- package/dist/extractors/symbols-ts.d.ts.map +1 -1
- package/dist/extractors/symbols-ts.js +3 -1
- package/dist/prolog.d.ts.map +1 -1
- package/dist/prolog.js +14 -1
- package/dist/public/ignore-policy.d.ts.map +1 -1
- package/dist/public/ignore-policy.js +8 -4
- package/dist/public/operational-artifacts.d.ts.map +1 -1
- package/dist/public/operational-artifacts.js +1 -0
- package/dist/public/skills/kibi-usage/SKILL.md +205 -0
- package/dist/public/skills/kibi-usage/resources/fact-lanes.md +123 -0
- package/dist/public/skills/kibi-usage/resources/relationship-directions.md +89 -0
- package/dist/public/skills/kibi-usage/resources/workflows.md +28 -0
- package/dist/public/skills.d.ts +42 -0
- package/dist/public/skills.d.ts.map +1 -0
- package/dist/public/skills.js +270 -0
- package/dist/search-ranking.d.ts.map +1 -1
- package/dist/traceability/evidence-model.d.ts.map +1 -1
- package/dist/traceability/staged-diagnostics.d.ts.map +1 -1
- package/dist/traceability/staged-diagnostics.js +1 -1
- package/dist/traceability/staged-symbols-manifest.d.ts.map +1 -1
- package/dist/traceability/staged-symbols-manifest.js +8 -2
- package/dist/traceability/symbol-extract.d.ts.map +1 -1
- package/dist/traceability/symbol-extract.js +4 -1
- package/dist/utils/config.d.ts +3 -18
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +4 -40
- package/dist/utils/manifest-paths.d.ts.map +1 -1
- package/dist/utils/manifest-paths.js +3 -1
- package/dist/utils/schema-version.d.ts.map +1 -1
- package/dist/utils/strict-modeling.d.ts +1 -1
- package/dist/utils/strict-modeling.d.ts.map +1 -1
- package/dist/utils/strict-modeling.js +13 -3
- package/package.json +7 -13
- package/schema/config.json +0 -68
- package/src/public/ignore-policy.ts +26 -10
- package/src/public/operational-artifacts.ts +2 -1
- package/src/public/skills/kibi-usage/SKILL.md +205 -0
- package/src/public/skills/kibi-usage/resources/fact-lanes.md +123 -0
- package/src/public/skills/kibi-usage/resources/relationship-directions.md +89 -0
- package/src/public/skills/kibi-usage/resources/workflows.md +28 -0
- package/src/public/skills.ts +427 -0
- package/dist/public/brief-config.d.ts +0 -4
- package/dist/public/brief-config.d.ts.map +0 -1
- package/dist/public/brief-config.js +0 -21
- package/src/public/brief-config.ts +0 -25
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import { existsSync, readFileSync, readdirSync, realpathSync, statSync, } from "node:fs";
|
|
2
|
+
import { dirname, isAbsolute, join, normalize, relative, resolve, } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import matter from "gray-matter";
|
|
5
|
+
const SKILL_MARKDOWN_MAX_BYTES = 256 * 1024;
|
|
6
|
+
const RESOURCE_MAX_BYTES = 128 * 1024;
|
|
7
|
+
const SKILL_FILE_NAME = "SKILL.md";
|
|
8
|
+
const moduleDir = dirname(fileURLToPath(import.meta.url));
|
|
9
|
+
let bundledSkillsDir = resolve(moduleDir, "skills");
|
|
10
|
+
const defaultBundledSkillsDir = bundledSkillsDir;
|
|
11
|
+
export function setBundledSkillsDir(dir) {
|
|
12
|
+
bundledSkillsDir = dir;
|
|
13
|
+
}
|
|
14
|
+
export function resetBundledSkillsDir() {
|
|
15
|
+
bundledSkillsDir = defaultBundledSkillsDir;
|
|
16
|
+
}
|
|
17
|
+
export class SkillNotFoundError extends Error {
|
|
18
|
+
constructor(id) {
|
|
19
|
+
super(`Skill not found: ${id}`);
|
|
20
|
+
this.name = "SkillNotFoundError";
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export class SkillResourceNotFoundError extends Error {
|
|
24
|
+
constructor(id, resourcePath) {
|
|
25
|
+
super(`Skill resource not found: ${id}/${resourcePath}`);
|
|
26
|
+
this.name = "SkillResourceNotFoundError";
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export class SkillResourceOutOfBoundsError extends Error {
|
|
30
|
+
constructor(id, resourcePath) {
|
|
31
|
+
super(`Skill resource escapes bundle root: ${id}/${resourcePath}`);
|
|
32
|
+
this.name = "SkillResourceOutOfBoundsError";
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export class SkillValidationError extends Error {
|
|
36
|
+
field;
|
|
37
|
+
constructor(field, message) {
|
|
38
|
+
super(message);
|
|
39
|
+
this.name = "SkillValidationError";
|
|
40
|
+
this.field = field;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export class SkillOversizeError extends Error {
|
|
44
|
+
maxBytes;
|
|
45
|
+
actualBytes;
|
|
46
|
+
constructor(pathLike, maxBytes, actualBytes) {
|
|
47
|
+
super(`Skill file exceeds ${maxBytes} bytes: ${pathLike} (${actualBytes} bytes)`);
|
|
48
|
+
this.name = "SkillOversizeError";
|
|
49
|
+
this.maxBytes = maxBytes;
|
|
50
|
+
this.actualBytes = actualBytes;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export function listBundledSkills() {
|
|
54
|
+
// implements REQ-001
|
|
55
|
+
if (!existsSync(bundledSkillsDir)) {
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
return readdirSync(bundledSkillsDir, { withFileTypes: true })
|
|
59
|
+
.filter((entry) => entry.isDirectory())
|
|
60
|
+
.map((entry) => join(bundledSkillsDir, entry.name))
|
|
61
|
+
.filter((rootDir) => existsSync(join(rootDir, SKILL_FILE_NAME)))
|
|
62
|
+
.map((rootDir) => parseSkillBundle(rootDir).manifest)
|
|
63
|
+
.sort((left, right) => left.id.localeCompare(right.id));
|
|
64
|
+
}
|
|
65
|
+
export function loadBundledSkill(id) {
|
|
66
|
+
// implements REQ-001
|
|
67
|
+
const rootDir = findBundledSkillRoot(id);
|
|
68
|
+
if (!rootDir) {
|
|
69
|
+
throw new SkillNotFoundError(id);
|
|
70
|
+
}
|
|
71
|
+
return parseSkillBundle(rootDir);
|
|
72
|
+
}
|
|
73
|
+
export function readBundledSkillResource(id, resourcePath) {
|
|
74
|
+
// implements REQ-001
|
|
75
|
+
const bundle = loadBundledSkill(id);
|
|
76
|
+
const declaredResource = normalizeResourcePath(resourcePath);
|
|
77
|
+
if (!declaredResource || isPathOutOfBounds(resourcePath)) {
|
|
78
|
+
throw new SkillResourceOutOfBoundsError(id, resourcePath);
|
|
79
|
+
}
|
|
80
|
+
if (!isDeclaredResource(bundle.manifest, declaredResource)) {
|
|
81
|
+
throw new SkillResourceNotFoundError(id, resourcePath);
|
|
82
|
+
}
|
|
83
|
+
const candidatePath = resolve(bundle.rootDir, declaredResource);
|
|
84
|
+
let realResourcePath;
|
|
85
|
+
let realRootDir;
|
|
86
|
+
try {
|
|
87
|
+
realResourcePath = realpathSync(candidatePath);
|
|
88
|
+
realRootDir = realpathSync(bundle.rootDir);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
throw new SkillResourceNotFoundError(id, resourcePath);
|
|
92
|
+
}
|
|
93
|
+
if (!isWithinRoot(realRootDir, realResourcePath)) {
|
|
94
|
+
throw new SkillResourceOutOfBoundsError(id, resourcePath);
|
|
95
|
+
}
|
|
96
|
+
assertMaxBytes(candidatePath, RESOURCE_MAX_BYTES);
|
|
97
|
+
return readFileSync(candidatePath, "utf8");
|
|
98
|
+
}
|
|
99
|
+
export function validateSkillBundle(pathLike) {
|
|
100
|
+
// implements REQ-001
|
|
101
|
+
const skillFilePath = resolveSkillFilePath(pathLike);
|
|
102
|
+
const errors = [];
|
|
103
|
+
if (!existsSync(skillFilePath)) {
|
|
104
|
+
errors.push(new SkillValidationError("SKILL.md", `Missing ${SKILL_FILE_NAME}`));
|
|
105
|
+
return { valid: false, errors };
|
|
106
|
+
}
|
|
107
|
+
const parsed = matter(readFileSync(skillFilePath, "utf8"));
|
|
108
|
+
errors.push(...validateManifestData(parsed.data));
|
|
109
|
+
if (errors.length === 0) {
|
|
110
|
+
validateBundleContents(skillFilePath, coerceManifest(parsed.data), errors);
|
|
111
|
+
}
|
|
112
|
+
return { valid: errors.length === 0, errors };
|
|
113
|
+
}
|
|
114
|
+
function validateBundleContents(skillFilePath, manifest, errors) {
|
|
115
|
+
try {
|
|
116
|
+
assertMaxBytes(skillFilePath, SKILL_MARKDOWN_MAX_BYTES);
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
errors.push(new SkillValidationError("SKILL.md", error instanceof Error ? error.message : String(error)));
|
|
120
|
+
}
|
|
121
|
+
const rootDir = dirname(skillFilePath);
|
|
122
|
+
let realRootDir;
|
|
123
|
+
try {
|
|
124
|
+
realRootDir = realpathSync(rootDir);
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
errors.push(new SkillValidationError("SKILL.md", error instanceof Error ? error.message : String(error)));
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
for (const resource of manifest.resources ?? []) {
|
|
131
|
+
const resourcePath = resolve(rootDir, resource);
|
|
132
|
+
try {
|
|
133
|
+
if (!existsSync(resourcePath)) {
|
|
134
|
+
errors.push(new SkillValidationError("resources", `Missing skill resource: ${resource}`));
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
const realResourcePath = realpathSync(resourcePath);
|
|
138
|
+
if (!isWithinRoot(realRootDir, realResourcePath)) {
|
|
139
|
+
errors.push(new SkillValidationError("resources", `Skill resource escapes bundle root: ${resource}`));
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
assertMaxBytes(resourcePath, RESOURCE_MAX_BYTES);
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
errors.push(new SkillValidationError("resources", error instanceof Error ? error.message : String(error)));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
function findBundledSkillRoot(id) {
|
|
150
|
+
if (!existsSync(bundledSkillsDir)) {
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
153
|
+
for (const entry of readdirSync(bundledSkillsDir, { withFileTypes: true })) {
|
|
154
|
+
if (!entry.isDirectory()) {
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
const rootDir = join(bundledSkillsDir, entry.name);
|
|
158
|
+
const skillFilePath = join(rootDir, SKILL_FILE_NAME);
|
|
159
|
+
if (!existsSync(skillFilePath)) {
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
const manifest = parseSkillBundle(rootDir).manifest;
|
|
163
|
+
if (manifest.id === id) {
|
|
164
|
+
return rootDir;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
function parseSkillBundle(rootDir) {
|
|
170
|
+
const skillFilePath = join(rootDir, SKILL_FILE_NAME);
|
|
171
|
+
assertMaxBytes(skillFilePath, SKILL_MARKDOWN_MAX_BYTES);
|
|
172
|
+
const parsed = matter(readFileSync(skillFilePath, "utf8"));
|
|
173
|
+
const errors = validateManifestData(parsed.data);
|
|
174
|
+
if (errors.length > 0) {
|
|
175
|
+
throw errors[0];
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
manifest: coerceManifest(parsed.data),
|
|
179
|
+
body: parsed.content,
|
|
180
|
+
rootDir: resolve(rootDir),
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
function validateManifestData(data) {
|
|
184
|
+
const errors = [];
|
|
185
|
+
const requiredFields = [
|
|
186
|
+
"id",
|
|
187
|
+
"name",
|
|
188
|
+
"description",
|
|
189
|
+
"version",
|
|
190
|
+
"kibiCompatibility",
|
|
191
|
+
];
|
|
192
|
+
for (const field of requiredFields) {
|
|
193
|
+
if (typeof data[field] !== "string" || data[field].trim() === "") {
|
|
194
|
+
errors.push(new SkillValidationError(field, `Missing required skill field: ${field}`));
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
if (typeof data.version === "string" &&
|
|
198
|
+
!/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/.test(data.version)) {
|
|
199
|
+
errors.push(new SkillValidationError("version", `Invalid skill version: ${data.version}`));
|
|
200
|
+
}
|
|
201
|
+
if (data.tags !== undefined && !isStringArray(data.tags)) {
|
|
202
|
+
errors.push(new SkillValidationError("tags", "Skill tags must be strings"));
|
|
203
|
+
}
|
|
204
|
+
if (data.resources !== undefined) {
|
|
205
|
+
if (!isStringArray(data.resources)) {
|
|
206
|
+
errors.push(new SkillValidationError("resources", "Skill resources must be strings"));
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
for (const resource of data.resources) {
|
|
210
|
+
const normalized = normalizeResourcePath(resource);
|
|
211
|
+
if (!normalized || isPathOutOfBounds(resource)) {
|
|
212
|
+
errors.push(new SkillValidationError("resources", `Invalid skill resource: ${resource}`));
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return errors;
|
|
218
|
+
}
|
|
219
|
+
function coerceManifest(data) {
|
|
220
|
+
const manifest = {
|
|
221
|
+
id: String(data.id),
|
|
222
|
+
name: String(data.name),
|
|
223
|
+
description: String(data.description),
|
|
224
|
+
version: String(data.version),
|
|
225
|
+
kibiCompatibility: String(data.kibiCompatibility),
|
|
226
|
+
};
|
|
227
|
+
if (isStringArray(data.tags)) {
|
|
228
|
+
manifest.tags = data.tags;
|
|
229
|
+
}
|
|
230
|
+
if (isStringArray(data.resources)) {
|
|
231
|
+
manifest.resources = data.resources.map((resource) => normalizeResourcePath(resource));
|
|
232
|
+
}
|
|
233
|
+
return manifest;
|
|
234
|
+
}
|
|
235
|
+
function isStringArray(value) {
|
|
236
|
+
return (Array.isArray(value) && value.every((item) => typeof item === "string"));
|
|
237
|
+
}
|
|
238
|
+
function normalizeResourcePath(pathLike) {
|
|
239
|
+
return normalize(pathLike).replaceAll("\\", "/");
|
|
240
|
+
}
|
|
241
|
+
function isPathOutOfBounds(pathLike) {
|
|
242
|
+
const normalized = normalizeResourcePath(pathLike);
|
|
243
|
+
return (isAbsolute(pathLike) ||
|
|
244
|
+
normalized === ".." ||
|
|
245
|
+
normalized.startsWith("../") ||
|
|
246
|
+
normalized.includes("/../"));
|
|
247
|
+
}
|
|
248
|
+
function isDeclaredResource(manifest, resourcePath) {
|
|
249
|
+
return (manifest.resources ?? []).some((declared) => normalizeResourcePath(declared) === resourcePath);
|
|
250
|
+
}
|
|
251
|
+
function isWithinRoot(rootDir, candidatePath) {
|
|
252
|
+
const relativePath = relative(rootDir, candidatePath);
|
|
253
|
+
return (relativePath === "" ||
|
|
254
|
+
(!relativePath.startsWith("..") && !isAbsolute(relativePath)));
|
|
255
|
+
}
|
|
256
|
+
function assertMaxBytes(pathLike, maxBytes) {
|
|
257
|
+
const size = statSync(pathLike).size;
|
|
258
|
+
if (size > maxBytes) {
|
|
259
|
+
throw new SkillOversizeError(pathLike, maxBytes, size);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
function resolveSkillFilePath(pathLike) {
|
|
263
|
+
const resolved = resolve(pathLike);
|
|
264
|
+
if (existsSync(resolved) && statSync(resolved).isDirectory()) {
|
|
265
|
+
return join(resolved, SKILL_FILE_NAME);
|
|
266
|
+
}
|
|
267
|
+
return resolved.endsWith(SKILL_FILE_NAME)
|
|
268
|
+
? resolved
|
|
269
|
+
: join(resolved, SKILL_FILE_NAME);
|
|
270
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-ranking.d.ts","sourceRoot":"","sources":["../src/search-ranking.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAgDD,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EACnC,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,WAAW,EAAE,CAAC,CA8BxB;
|
|
1
|
+
{"version":3,"file":"search-ranking.d.ts","sourceRoot":"","sources":["../src/search-ranking.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAgDD,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EACnC,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,WAAW,EAAE,CAAC,CA8BxB;AAsGD,wBAAsB,gBAAgB,CAEpC,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA6BxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evidence-model.d.ts","sourceRoot":"","sources":["../../src/traceability/evidence-model.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,uEAAuE;AACvE,eAAO,MAAM,sBAAsB,0BAA0B,CAAC;AAE9D,+EAA+E;AAC/E,eAAO,MAAM,0BAA0B,+BAA+B,CAAC;AAEvE,qFAAqF;AACrF,eAAO,MAAM,4BAA4B,0CACA,CAAC;AAE1C,mEAAmE;AACnE,eAAO,MAAM,0BAA0B,sBAAsB,CAAC;AAE9D,oEAAoE;AACpE,MAAM,MAAM,cAAc,GACtB,KAAK,GACL,UAAU,GACV,MAAM,GACN,KAAK,GACL,MAAM,GACN,OAAO,GACP,QAAQ,GACR,MAAM,CAAC;AAEX;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GACxB,sBAAsB,GACtB,0BAA0B,CAAC;AAE/B,sEAAsE;AACtE,MAAM,WAAW,sBAAsB;IACrC,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,wEAAwE;IACxE,IAAI,EAAE,iBAAiB,GAAG,kBAAkB,CAAC;IAC7C,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,2DAA2D;IAC3D,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,sEAAsE;IACtE,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,yBAAyB;IACxC,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,KAAK,EAAE,cAAc,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;IACtD,kFAAkF;IAClF,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,0DAA0D;AAC1D,MAAM,MAAM,kBAAkB,GAC1B,gBAAgB,GAChB,4BAA4B,CAAC;AAEjC;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,oCAAoC;IACpC,WAAW,EAAE,OAAO,0BAA0B,CAAC;IAC/C,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,gDAAgD;IAChD,MAAM,EAAE,kBAAkB,CAAC;IAC3B,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,gEAAgE;AAChE,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,YAAY,CAAC;IACnB,oEAAoE;IACpE,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACrC;AAED,0EAA0E;AAC1E,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,oBAAoB,CAAC;IAC3B,0EAA0E;IAC1E,QAAQ,EAAE,oBAAoB,CAAC;CAChC;AAED,yEAAyE;AACzE,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,6EAA6E;AAC7E,MAAM,MAAM,cAAc,GACtB,uBAAuB,GACvB,8BAA8B,GAC9B,qBAAqB,CAAC;AAE1B;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,oEAAoE;IACpE,aAAa,EAAE,sBAAsB,EAAE,CAAC;IACxC,2EAA2E;IAC3E,eAAe,EAAE,yBAAyB,CAAC;IAC3C,wDAAwD;IACxD,IAAI,EAAE,cAAc,CAAC;CACtB;AAMD,0DAA0D;AAC1D,wBAAgB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"evidence-model.d.ts","sourceRoot":"","sources":["../../src/traceability/evidence-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"staged-diagnostics.d.ts","sourceRoot":"","sources":["../../src/traceability/staged-diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"staged-diagnostics.d.ts","sourceRoot":"","sources":["../../src/traceability/staged-diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,kBAAkB,EAIxB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,sBAAsB,GAC9B,8BAA8B,GAC9B,wBAAwB,GACxB,wCAAwC,CAAC;AAE7C,MAAM,WAAW,oBAAoB;IACnC,uDAAuD;IACvD,EAAE,EAAE,sBAAsB,CAAC;IAC3B,iDAAiD;IACjD,QAAQ,EAAE,OAAO,CAAC;IAClB,iEAAiE;IACjE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,gDAAgD;IAChD,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;CACpB;AAsDD;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,kBAAkB,GAC3B,oBAAoB,EAAE,CAoCxB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { KIBI_ENTITY_SCHEMA_DOC,
|
|
1
|
+
import { KIBI_ENTITY_SCHEMA_DOC, KIBI_SYMBOLS_MANIFEST_PATH, KIBI_SYMBOL_COORDINATES_PATH, getBehaviorSourcePaths, getMissingBehaviorSourcePaths, hasOverrideRationale, } from "./evidence-model.js";
|
|
2
2
|
function formatFileList(paths) {
|
|
3
3
|
return paths.join(", ");
|
|
4
4
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"staged-symbols-manifest.d.ts","sourceRoot":"","sources":["../../src/traceability/staged-symbols-manifest.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AA8BlD,MAAM,WAAW,+BAA+B;IAC9C,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,cAAc,CAAC;IACtD,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qCAAqC;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAC7D;
|
|
1
|
+
{"version":3,"file":"staged-symbols-manifest.d.ts","sourceRoot":"","sources":["../../src/traceability/staged-symbols-manifest.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AA8BlD,MAAM,WAAW,+BAA+B;IAC9C,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,cAAc,CAAC;IACtD,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qCAAqC;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAC7D;AA8QD,wBAAgB,2BAA2B,CAAC,OAAO,EAAE;IACnD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B,GAAG,+BAA+B,CA8ElC;AAoBD,wBAAgB,4CAA4C,CAAC,OAAO,EAAE;IACpE,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B,GAAG,qCAAqC,CAmDxC"}
|
|
@@ -135,7 +135,9 @@ function normalizeAuthoredManifestSymbolsForSourceFile(records, sourceFile) {
|
|
|
135
135
|
links: normalizeLinks(record.links),
|
|
136
136
|
relationships: normalizeRelationships(record.relationships),
|
|
137
137
|
tags: Array.isArray(record.tags)
|
|
138
|
-
? record.tags
|
|
138
|
+
? record.tags
|
|
139
|
+
.filter((tag) => typeof tag === "string")
|
|
140
|
+
.sort()
|
|
139
141
|
: [],
|
|
140
142
|
owner: typeof record.owner === "string" ? record.owner : null,
|
|
141
143
|
priority: typeof record.priority === "string" ? record.priority : null,
|
|
@@ -218,7 +220,11 @@ export function assessStagedSymbolsManifest(options) {
|
|
|
218
220
|
}
|
|
219
221
|
const sourcePaths = uniqueSorted(requiredRefreshPaths);
|
|
220
222
|
if (sourcePaths.length === 0) {
|
|
221
|
-
return {
|
|
223
|
+
return {
|
|
224
|
+
state: "not_required",
|
|
225
|
+
sourcePaths: [],
|
|
226
|
+
path: paths.coordinatesPath,
|
|
227
|
+
};
|
|
222
228
|
}
|
|
223
229
|
if (sourcePaths.every((sourcePath) => freshPaths.has(sourcePath))) {
|
|
224
230
|
return { state: "fresh", sourcePaths, path: paths.coordinatesPath };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbol-extract.d.ts","sourceRoot":"","sources":["../../src/traceability/symbol-extract.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7D,KAAK,wBAAwB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAU7D,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;IAC7D,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,wBAAwB,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,wBAAwB,EAAE,CAAC;CAC5C;AAED,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAE9D,wBAAgB,+BAA+B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAG5E;
|
|
1
|
+
{"version":3,"file":"symbol-extract.d.ts","sourceRoot":"","sources":["../../src/traceability/symbol-extract.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7D,KAAK,wBAAwB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAU7D,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;IAC7D,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,wBAAwB,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,wBAAwB,EAAE,CAAC;CAC5C;AAED,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAE9D,wBAAgB,+BAA+B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAG5E;AAkOD,wBAAgB,4BAA4B,CAE1C,UAAU,EAAE,UAAU,EACtB,cAAc,CAAC,EAAE,cAAc,GAC9B,eAAe,EAAE,CA+JnB"}
|
|
@@ -92,7 +92,10 @@ function extractRelationshipsFromManifestRecord(record) {
|
|
|
92
92
|
if (relationship &&
|
|
93
93
|
typeof relationship.type === "string" &&
|
|
94
94
|
typeof relationship.target === "string") {
|
|
95
|
-
relationships.push({
|
|
95
|
+
relationships.push({
|
|
96
|
+
type: relationship.type,
|
|
97
|
+
to: relationship.target,
|
|
98
|
+
});
|
|
96
99
|
}
|
|
97
100
|
}
|
|
98
101
|
}
|
package/dist/utils/config.d.ts
CHANGED
|
@@ -12,23 +12,6 @@ export interface KbConfigPaths {
|
|
|
12
12
|
facts?: string;
|
|
13
13
|
symbols?: string;
|
|
14
14
|
}
|
|
15
|
-
export interface BriefsConfig {
|
|
16
|
-
enabled: boolean;
|
|
17
|
-
retention?: {
|
|
18
|
-
maxPerBranch?: number;
|
|
19
|
-
maxAgeDays?: number;
|
|
20
|
-
keepUnread?: boolean;
|
|
21
|
-
};
|
|
22
|
-
channels: {
|
|
23
|
-
vscode: boolean;
|
|
24
|
-
tui: boolean;
|
|
25
|
-
};
|
|
26
|
-
tui: {
|
|
27
|
-
toast: boolean;
|
|
28
|
-
appendPrompt: boolean;
|
|
29
|
-
idleDelayMs?: number;
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
15
|
/**
|
|
33
16
|
* Shared configuration for Kibi.
|
|
34
17
|
* Stored in .kb/config.json
|
|
@@ -36,7 +19,6 @@ export interface BriefsConfig {
|
|
|
36
19
|
export interface KbConfig {
|
|
37
20
|
paths: KbConfigPaths;
|
|
38
21
|
schemaVersion?: number | string;
|
|
39
|
-
briefs?: BriefsConfig;
|
|
40
22
|
/**
|
|
41
23
|
* @deprecated defaultBranch is deprecated. Branch lifecycle now follows git naturally
|
|
42
24
|
* without requiring a configured default. This field is ignored but kept for compatibility.
|
|
@@ -45,6 +27,9 @@ export interface KbConfig {
|
|
|
45
27
|
checks?: ChecksConfig;
|
|
46
28
|
}
|
|
47
29
|
export type { ChecksConfig, SymbolTraceabilityOptions };
|
|
30
|
+
/**
|
|
31
|
+
* Default configuration values for new repositories.
|
|
32
|
+
*/
|
|
48
33
|
export declare const DEFAULT_CONFIG: KbConfig & {
|
|
49
34
|
$schema: string;
|
|
50
35
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAoBA,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,yBAAyB,EAC/B,MAAM,oBAAoB,CAAC;AAG5B;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAoBA,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,yBAAyB,EAC/B,MAAM,oBAAoB,CAAC;AAG5B;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,aAAa,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,YAAY,EAAE,YAAY,EAAE,yBAAyB,EAAE,CAAC;AAExD;;GAEG;AAEH,eAAO,MAAM,cAAc,EAAE,QAAQ,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAgBxD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,aAUhC,CAAC;AA4BF;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,QAAQ,CAgChE;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,QAAQ,CAgCpE"}
|
package/dist/utils/config.js
CHANGED
|
@@ -22,25 +22,9 @@ import { LATEST_KB_SCHEMA_VERSION } from "./schema-version.js";
|
|
|
22
22
|
/**
|
|
23
23
|
* Default configuration values for new repositories.
|
|
24
24
|
*/
|
|
25
|
-
const DEFAULT_BRIEFS_CONFIG = {
|
|
26
|
-
enabled: true,
|
|
27
|
-
retention: {
|
|
28
|
-
maxPerBranch: 200,
|
|
29
|
-
maxAgeDays: 14,
|
|
30
|
-
keepUnread: true,
|
|
31
|
-
},
|
|
32
|
-
channels: {
|
|
33
|
-
vscode: true,
|
|
34
|
-
tui: true,
|
|
35
|
-
},
|
|
36
|
-
tui: {
|
|
37
|
-
toast: true,
|
|
38
|
-
appendPrompt: true,
|
|
39
|
-
idleDelayMs: 1500,
|
|
40
|
-
},
|
|
41
|
-
};
|
|
42
25
|
// implements REQ-003
|
|
43
26
|
export const DEFAULT_CONFIG = {
|
|
27
|
+
// implements REQ-003
|
|
44
28
|
$schema: "https://raw.githubusercontent.com/Looted/kibi/master/packages/cli/schema/config.json",
|
|
45
29
|
schemaVersion: LATEST_KB_SCHEMA_VERSION,
|
|
46
30
|
paths: {
|
|
@@ -53,13 +37,13 @@ export const DEFAULT_CONFIG = {
|
|
|
53
37
|
facts: "documentation/facts",
|
|
54
38
|
symbols: "documentation/symbols.yaml",
|
|
55
39
|
},
|
|
56
|
-
briefs: DEFAULT_BRIEFS_CONFIG,
|
|
57
40
|
checks: DEFAULT_CHECKS_CONFIG,
|
|
58
41
|
};
|
|
59
42
|
/**
|
|
60
43
|
* Default paths used by sync command (backward compatible glob patterns).
|
|
61
44
|
*/
|
|
62
45
|
export const DEFAULT_SYNC_PATHS = {
|
|
46
|
+
// implements REQ-003
|
|
63
47
|
requirements: "requirements/**/*.md",
|
|
64
48
|
scenarios: "scenarios/**/*.md",
|
|
65
49
|
tests: "tests/**/*.md",
|
|
@@ -69,24 +53,6 @@ export const DEFAULT_SYNC_PATHS = {
|
|
|
69
53
|
facts: "facts/**/*.md",
|
|
70
54
|
symbols: "symbols.yaml",
|
|
71
55
|
};
|
|
72
|
-
function mergeBriefsConfig(userBriefs) {
|
|
73
|
-
return {
|
|
74
|
-
...DEFAULT_BRIEFS_CONFIG,
|
|
75
|
-
...userBriefs,
|
|
76
|
-
channels: {
|
|
77
|
-
...DEFAULT_BRIEFS_CONFIG.channels,
|
|
78
|
-
...userBriefs?.channels,
|
|
79
|
-
},
|
|
80
|
-
tui: {
|
|
81
|
-
...DEFAULT_BRIEFS_CONFIG.tui,
|
|
82
|
-
...userBriefs?.tui,
|
|
83
|
-
},
|
|
84
|
-
retention: {
|
|
85
|
-
...DEFAULT_BRIEFS_CONFIG.retention,
|
|
86
|
-
...userBriefs?.retention,
|
|
87
|
-
},
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
56
|
function readUserConfig(configPath) {
|
|
91
57
|
if (!existsSync(configPath)) {
|
|
92
58
|
return {
|
|
@@ -124,12 +90,11 @@ export function loadConfig(cwd = process.cwd()) {
|
|
|
124
90
|
...DEFAULT_CONFIG.paths,
|
|
125
91
|
...userConfig.paths,
|
|
126
92
|
},
|
|
127
|
-
...(
|
|
93
|
+
...(userConfig.schemaVersion !== undefined || useDefaultSchemaVersion
|
|
128
94
|
? {
|
|
129
95
|
schemaVersion: userConfig.schemaVersion ?? DEFAULT_CONFIG.schemaVersion,
|
|
130
96
|
}
|
|
131
97
|
: {}),
|
|
132
|
-
briefs: mergeBriefsConfig(userConfig.briefs),
|
|
133
98
|
...(userConfig.defaultBranch !== undefined
|
|
134
99
|
? { defaultBranch: userConfig.defaultBranch }
|
|
135
100
|
: {}),
|
|
@@ -164,12 +129,11 @@ export function loadSyncConfig(cwd = process.cwd()) {
|
|
|
164
129
|
...DEFAULT_SYNC_PATHS,
|
|
165
130
|
...userConfig.paths,
|
|
166
131
|
},
|
|
167
|
-
...(
|
|
132
|
+
...(userConfig.schemaVersion !== undefined || useDefaultSchemaVersion
|
|
168
133
|
? {
|
|
169
134
|
schemaVersion: userConfig.schemaVersion ?? DEFAULT_CONFIG.schemaVersion,
|
|
170
135
|
}
|
|
171
136
|
: {}),
|
|
172
|
-
briefs: mergeBriefsConfig(userConfig.briefs),
|
|
173
137
|
...(userConfig.defaultBranch !== undefined
|
|
174
138
|
? { defaultBranch: userConfig.defaultBranch }
|
|
175
139
|
: {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest-paths.d.ts","sourceRoot":"","sources":["../../src/utils/manifest-paths.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB,+BAA+B,CAAC;AACjE,eAAO,MAAM,wBAAwB,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"manifest-paths.d.ts","sourceRoot":"","sources":["../../src/utils/manifest-paths.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB,+BAA+B,CAAC;AACjE,eAAO,MAAM,wBAAwB,0CAA0C,CAAC;AAkFhF,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,MAAM,GAClB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CASlD;AAGD,wBAAgB,0BAA0B,CACxC,aAAa,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAER"}
|
|
@@ -42,7 +42,9 @@ function resolveDefaultSymbolsPath(workspaceRoot) {
|
|
|
42
42
|
path.join(workspaceRoot, "symbols.yaml"),
|
|
43
43
|
path.join(workspaceRoot, "symbols.yml"),
|
|
44
44
|
];
|
|
45
|
-
return candidates.find((candidate) => existsSync(candidate)) ??
|
|
45
|
+
return (candidates.find((candidate) => existsSync(candidate)) ??
|
|
46
|
+
candidates[0] ??
|
|
47
|
+
path.join(workspaceRoot, DEFAULT_SYMBOLS_PATH));
|
|
46
48
|
}
|
|
47
49
|
function deriveCoordinatesPath(symbolsPath) {
|
|
48
50
|
return path.join(path.dirname(symbolsPath), path.basename(DEFAULT_COORDINATES_PATH));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-version.d.ts","sourceRoot":"","sources":["../../src/utils/schema-version.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IAC9D,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,KAAK,mBAAmB,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;AAG9E,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAChD,MAAM,GAAG,IAAI,CAgBf;AAGD,wBAAgB,sBAAsB,CACpC,MAAM,CAAC,EAAE,mBAAmB,GAC3B,mBAAmB,
|
|
1
|
+
{"version":3,"file":"schema-version.d.ts","sourceRoot":"","sources":["../../src/utils/schema-version.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IAC9D,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,KAAK,mBAAmB,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;AAG9E,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAChD,MAAM,GAAG,IAAI,CAgBf;AAGD,wBAAgB,sBAAsB,CACpC,MAAM,CAAC,EAAE,mBAAmB,GAC3B,mBAAmB,CA6CrB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type KbConfigPaths } from "./config.js";
|
|
2
1
|
import type { BaseEntity, FactFields } from "../types/entities.js";
|
|
3
2
|
import type { BaseRelationship } from "../types/relationships.js";
|
|
3
|
+
import { type KbConfigPaths } from "./config.js";
|
|
4
4
|
export interface SemanticClaim {
|
|
5
5
|
source: string;
|
|
6
6
|
subjectKey: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strict-modeling.d.ts","sourceRoot":"","sources":["../../src/utils/strict-modeling.ts"],"names":[],"mappings":"AAoBA,OAAO,
|
|
1
|
+
{"version":3,"file":"strict-modeling.d.ts","sourceRoot":"","sources":["../../src/utils/strict-modeling.ts"],"names":[],"mappings":"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"}
|
|
@@ -90,7 +90,11 @@ export function buildStrictWriteSet(input) {
|
|
|
90
90
|
status: "active",
|
|
91
91
|
source: buildEntitySourcePath(sourcePaths.facts, ids.observationFactId),
|
|
92
92
|
text_ref: textRef,
|
|
93
|
-
tags: buildUniqueTags([
|
|
93
|
+
tags: buildUniqueTags([
|
|
94
|
+
...metadataTags,
|
|
95
|
+
"lane:observation",
|
|
96
|
+
"review:required",
|
|
97
|
+
]),
|
|
94
98
|
fact_kind: "observation",
|
|
95
99
|
subject_key: ids.normalizedSubjectKey,
|
|
96
100
|
property_key: ids.normalizedPropertyKey,
|
|
@@ -138,7 +142,11 @@ export function buildStrictWriteSet(input) {
|
|
|
138
142
|
status: "active",
|
|
139
143
|
source: buildEntitySourcePath(sourcePaths.facts, ids.propertyFactId),
|
|
140
144
|
text_ref: textRef,
|
|
141
|
-
tags: buildUniqueTags([
|
|
145
|
+
tags: buildUniqueTags([
|
|
146
|
+
...metadataTags,
|
|
147
|
+
"lane:strict",
|
|
148
|
+
"fact:property_value",
|
|
149
|
+
]),
|
|
142
150
|
fact_kind: "property_value",
|
|
143
151
|
subject_key: ids.normalizedSubjectKey,
|
|
144
152
|
property_key: ids.normalizedPropertyKey,
|
|
@@ -176,7 +184,9 @@ export function modelRequirementClaims(inputs) {
|
|
|
176
184
|
const modeled = [];
|
|
177
185
|
for (const input of inputs) {
|
|
178
186
|
const writeSet = buildStrictWriteSet(input);
|
|
179
|
-
const stableId = writeSet.isStrict
|
|
187
|
+
const stableId = writeSet.isStrict
|
|
188
|
+
? writeSet.req.id
|
|
189
|
+
: writeSet.observationFact.id;
|
|
180
190
|
if (seen.has(stableId)) {
|
|
181
191
|
continue;
|
|
182
192
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kibi-cli",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Kibi CLI for knowledge base management",
|
|
6
6
|
"engines": {
|
|
@@ -11,15 +11,9 @@
|
|
|
11
11
|
"bin": {
|
|
12
12
|
"kibi": "bin/kibi"
|
|
13
13
|
},
|
|
14
|
-
"files": [
|
|
15
|
-
"dist",
|
|
16
|
-
"bin",
|
|
17
|
-
"schema",
|
|
18
|
-
"src/schemas",
|
|
19
|
-
"src/public"
|
|
20
|
-
],
|
|
14
|
+
"files": ["dist", "bin", "schema", "src/schemas", "src/public"],
|
|
21
15
|
"scripts": {
|
|
22
|
-
"build": "tsc -p tsconfig.json",
|
|
16
|
+
"build": "tsc -p tsconfig.json && mkdir -p dist/public/skills && cp -r src/public/skills/. dist/public/skills/",
|
|
23
17
|
"prepack": "npm run build"
|
|
24
18
|
},
|
|
25
19
|
"exports": {
|
|
@@ -75,10 +69,6 @@
|
|
|
75
69
|
"types": "./dist/public/check-types.d.ts",
|
|
76
70
|
"default": "./dist/public/check-types.js"
|
|
77
71
|
},
|
|
78
|
-
"./brief-config": {
|
|
79
|
-
"types": "./dist/public/brief-config.d.ts",
|
|
80
|
-
"default": "./dist/public/brief-config.js"
|
|
81
|
-
},
|
|
82
72
|
"./schema-version": {
|
|
83
73
|
"types": "./dist/public/schema-version.d.ts",
|
|
84
74
|
"default": "./dist/public/schema-version.js"
|
|
@@ -87,6 +77,10 @@
|
|
|
87
77
|
"types": "./dist/public/operational-artifacts.d.ts",
|
|
88
78
|
"default": "./dist/public/operational-artifacts.js"
|
|
89
79
|
},
|
|
80
|
+
"./skills": {
|
|
81
|
+
"types": "./dist/public/skills.d.ts",
|
|
82
|
+
"default": "./dist/public/skills.js"
|
|
83
|
+
},
|
|
90
84
|
"./ignore-policy": {
|
|
91
85
|
"types": "./dist/public/ignore-policy.d.ts",
|
|
92
86
|
"import": "./dist/public/ignore-policy.js",
|