kibi-cli 0.11.1 → 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/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.map +1 -1
- 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 +80 -0
- package/dist/public/skills/kibi-usage/resources/fact-lanes.md +78 -0
- package/dist/public/skills/kibi-usage/resources/workflows.md +0 -7
- package/dist/public/skills.d.ts.map +1 -1
- package/dist/public/skills.js +12 -4
- 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 +2 -12
- 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 +80 -0
- package/src/public/skills/kibi-usage/resources/fact-lanes.md +78 -0
- package/src/public/skills/kibi-usage/resources/workflows.md +0 -7
- package/src/public/skills.ts +93 -25
- 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
package/dist/public/skills.js
CHANGED
|
@@ -51,6 +51,7 @@ export class SkillOversizeError extends Error {
|
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
export function listBundledSkills() {
|
|
54
|
+
// implements REQ-001
|
|
54
55
|
if (!existsSync(bundledSkillsDir)) {
|
|
55
56
|
return [];
|
|
56
57
|
}
|
|
@@ -62,6 +63,7 @@ export function listBundledSkills() {
|
|
|
62
63
|
.sort((left, right) => left.id.localeCompare(right.id));
|
|
63
64
|
}
|
|
64
65
|
export function loadBundledSkill(id) {
|
|
66
|
+
// implements REQ-001
|
|
65
67
|
const rootDir = findBundledSkillRoot(id);
|
|
66
68
|
if (!rootDir) {
|
|
67
69
|
throw new SkillNotFoundError(id);
|
|
@@ -69,6 +71,7 @@ export function loadBundledSkill(id) {
|
|
|
69
71
|
return parseSkillBundle(rootDir);
|
|
70
72
|
}
|
|
71
73
|
export function readBundledSkillResource(id, resourcePath) {
|
|
74
|
+
// implements REQ-001
|
|
72
75
|
const bundle = loadBundledSkill(id);
|
|
73
76
|
const declaredResource = normalizeResourcePath(resourcePath);
|
|
74
77
|
if (!declaredResource || isPathOutOfBounds(resourcePath)) {
|
|
@@ -94,6 +97,7 @@ export function readBundledSkillResource(id, resourcePath) {
|
|
|
94
97
|
return readFileSync(candidatePath, "utf8");
|
|
95
98
|
}
|
|
96
99
|
export function validateSkillBundle(pathLike) {
|
|
100
|
+
// implements REQ-001
|
|
97
101
|
const skillFilePath = resolveSkillFilePath(pathLike);
|
|
98
102
|
const errors = [];
|
|
99
103
|
if (!existsSync(skillFilePath)) {
|
|
@@ -190,7 +194,8 @@ function validateManifestData(data) {
|
|
|
190
194
|
errors.push(new SkillValidationError(field, `Missing required skill field: ${field}`));
|
|
191
195
|
}
|
|
192
196
|
}
|
|
193
|
-
if (typeof data.version === "string" &&
|
|
197
|
+
if (typeof data.version === "string" &&
|
|
198
|
+
!/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/.test(data.version)) {
|
|
194
199
|
errors.push(new SkillValidationError("version", `Invalid skill version: ${data.version}`));
|
|
195
200
|
}
|
|
196
201
|
if (data.tags !== undefined && !isStringArray(data.tags)) {
|
|
@@ -228,7 +233,7 @@ function coerceManifest(data) {
|
|
|
228
233
|
return manifest;
|
|
229
234
|
}
|
|
230
235
|
function isStringArray(value) {
|
|
231
|
-
return Array.isArray(value) && value.every((item) => typeof item === "string");
|
|
236
|
+
return (Array.isArray(value) && value.every((item) => typeof item === "string"));
|
|
232
237
|
}
|
|
233
238
|
function normalizeResourcePath(pathLike) {
|
|
234
239
|
return normalize(pathLike).replaceAll("\\", "/");
|
|
@@ -245,7 +250,8 @@ function isDeclaredResource(manifest, resourcePath) {
|
|
|
245
250
|
}
|
|
246
251
|
function isWithinRoot(rootDir, candidatePath) {
|
|
247
252
|
const relativePath = relative(rootDir, candidatePath);
|
|
248
|
-
return relativePath === "" ||
|
|
253
|
+
return (relativePath === "" ||
|
|
254
|
+
(!relativePath.startsWith("..") && !isAbsolute(relativePath)));
|
|
249
255
|
}
|
|
250
256
|
function assertMaxBytes(pathLike, maxBytes) {
|
|
251
257
|
const size = statSync(pathLike).size;
|
|
@@ -258,5 +264,7 @@ function resolveSkillFilePath(pathLike) {
|
|
|
258
264
|
if (existsSync(resolved) && statSync(resolved).isDirectory()) {
|
|
259
265
|
return join(resolved, SKILL_FILE_NAME);
|
|
260
266
|
}
|
|
261
|
-
return resolved.endsWith(SKILL_FILE_NAME)
|
|
267
|
+
return resolved.endsWith(SKILL_FILE_NAME)
|
|
268
|
+
? resolved
|
|
269
|
+
: join(resolved, SKILL_FILE_NAME);
|
|
262
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":"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,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAK7E;AAED,oEAAoE;AACpE,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,kBAAkB,GAC3B,MAAM,EAAE,CAQV;AAED,gFAAgF;AAChF,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,kBAAkB,GAC3B,MAAM,EAAE,CAMV;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAYzE;AAED,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAK1E;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,kBAAkB,GAC3B,MAAM,EAAE,CAQV"}
|
|
@@ -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,13 +11,7 @@
|
|
|
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
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"
|
|
@@ -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"
|
package/schema/config.json
CHANGED
|
@@ -61,74 +61,6 @@
|
|
|
61
61
|
"description": "[DEPRECATED] No longer used. Branch lifecycle now follows git naturally without requiring a configured default. This field is ignored but kept for backward compatibility.",
|
|
62
62
|
"deprecated": true
|
|
63
63
|
},
|
|
64
|
-
"briefs": {
|
|
65
|
-
"type": "object",
|
|
66
|
-
"description": "Configuration for shared brief delivery defaults",
|
|
67
|
-
"properties": {
|
|
68
|
-
"enabled": {
|
|
69
|
-
"type": "boolean",
|
|
70
|
-
"default": true
|
|
71
|
-
},
|
|
72
|
-
"retention": {
|
|
73
|
-
"type": "object",
|
|
74
|
-
"properties": {
|
|
75
|
-
"maxPerBranch": {
|
|
76
|
-
"type": "integer",
|
|
77
|
-
"minimum": 1,
|
|
78
|
-
"maximum": 10000,
|
|
79
|
-
"default": 200
|
|
80
|
-
},
|
|
81
|
-
"maxAgeDays": {
|
|
82
|
-
"type": "integer",
|
|
83
|
-
"minimum": 1,
|
|
84
|
-
"maximum": 3650,
|
|
85
|
-
"default": 14
|
|
86
|
-
},
|
|
87
|
-
"keepUnread": {
|
|
88
|
-
"type": "boolean",
|
|
89
|
-
"default": true
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
"additionalProperties": false
|
|
93
|
-
},
|
|
94
|
-
"channels": {
|
|
95
|
-
"type": "object",
|
|
96
|
-
"properties": {
|
|
97
|
-
"vscode": {
|
|
98
|
-
"type": "boolean",
|
|
99
|
-
"default": true
|
|
100
|
-
},
|
|
101
|
-
"tui": {
|
|
102
|
-
"type": "boolean",
|
|
103
|
-
"default": true
|
|
104
|
-
}
|
|
105
|
-
},
|
|
106
|
-
"additionalProperties": false
|
|
107
|
-
},
|
|
108
|
-
"tui": {
|
|
109
|
-
"type": "object",
|
|
110
|
-
"properties": {
|
|
111
|
-
"toast": {
|
|
112
|
-
"type": "boolean",
|
|
113
|
-
"default": true
|
|
114
|
-
},
|
|
115
|
-
"appendPrompt": {
|
|
116
|
-
"type": "boolean",
|
|
117
|
-
"default": true
|
|
118
|
-
},
|
|
119
|
-
"idleDelayMs": {
|
|
120
|
-
"type": "integer",
|
|
121
|
-
"minimum": 0,
|
|
122
|
-
"maximum": 60000,
|
|
123
|
-
"default": 1500,
|
|
124
|
-
"description": "Delay in milliseconds after session.idle before idle-brief generation is attempted"
|
|
125
|
-
}
|
|
126
|
-
},
|
|
127
|
-
"additionalProperties": false
|
|
128
|
-
}
|
|
129
|
-
},
|
|
130
|
-
"additionalProperties": false
|
|
131
|
-
},
|
|
132
64
|
"checks": {
|
|
133
65
|
"type": "object",
|
|
134
66
|
"description": "Configuration for KB validation rules",
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
type Dirent,
|
|
3
|
+
existsSync,
|
|
4
|
+
readFileSync,
|
|
5
|
+
readdirSync,
|
|
6
|
+
statSync,
|
|
7
|
+
} from "node:fs";
|
|
2
8
|
import * as path from "node:path";
|
|
3
9
|
import ignore from "ignore";
|
|
4
10
|
|
|
@@ -51,7 +57,7 @@ export function createRepoIgnorePolicy(workspaceRoot: string): IgnorePolicy {
|
|
|
51
57
|
const nestedPatterns = new Map<string, string[]>();
|
|
52
58
|
|
|
53
59
|
function walk(dirAbs: string) {
|
|
54
|
-
let entries;
|
|
60
|
+
let entries: Dirent[];
|
|
55
61
|
try {
|
|
56
62
|
entries = readdirSync(dirAbs, { withFileTypes: true });
|
|
57
63
|
} catch {
|
|
@@ -95,7 +101,9 @@ export function createRepoIgnorePolicy(workspaceRoot: string): IgnorePolicy {
|
|
|
95
101
|
}
|
|
96
102
|
|
|
97
103
|
// Prepare nested directories sorted by specificity (longest first)
|
|
98
|
-
const nestedDirsSorted = Array.from(nestedIgnoreMap.keys()).sort(
|
|
104
|
+
const nestedDirsSorted = Array.from(nestedIgnoreMap.keys()).sort(
|
|
105
|
+
(a, b) => b.length - a.length,
|
|
106
|
+
);
|
|
99
107
|
|
|
100
108
|
function isPathOutsideWorkspace(absPath: string): boolean {
|
|
101
109
|
const rel = path.relative(root, absPath);
|
|
@@ -111,9 +119,14 @@ export function createRepoIgnorePolicy(workspaceRoot: string): IgnorePolicy {
|
|
|
111
119
|
return false;
|
|
112
120
|
}
|
|
113
121
|
|
|
114
|
-
function isIgnoredInternal(inputPath: string): {
|
|
122
|
+
function isIgnoredInternal(inputPath: string): {
|
|
123
|
+
ignored: boolean;
|
|
124
|
+
reason?: string;
|
|
125
|
+
} {
|
|
115
126
|
// Resolve to absolute and relative path inside workspace
|
|
116
|
-
const abs = path.isAbsolute(inputPath)
|
|
127
|
+
const abs = path.isAbsolute(inputPath)
|
|
128
|
+
? path.resolve(inputPath)
|
|
129
|
+
: path.resolve(root, inputPath);
|
|
117
130
|
|
|
118
131
|
if (path.isAbsolute(inputPath) && isPathOutsideWorkspace(abs)) {
|
|
119
132
|
return { ignored: true, reason: "outside_workspace" };
|
|
@@ -123,7 +136,8 @@ export function createRepoIgnorePolicy(workspaceRoot: string): IgnorePolicy {
|
|
|
123
136
|
const relPosix = toPosix(rel);
|
|
124
137
|
|
|
125
138
|
// Hard denylist always wins
|
|
126
|
-
if (matchesHardDeny(relPosix))
|
|
139
|
+
if (matchesHardDeny(relPosix))
|
|
140
|
+
return { ignored: true, reason: "hard_deny" };
|
|
127
141
|
|
|
128
142
|
// Root .gitignore
|
|
129
143
|
try {
|
|
@@ -147,11 +161,13 @@ export function createRepoIgnorePolicy(workspaceRoot: string): IgnorePolicy {
|
|
|
147
161
|
for (const dirRel of nestedDirsSorted) {
|
|
148
162
|
// dirRel is '.' for nested at root which we skipped, so dirRel will be like 'docs'
|
|
149
163
|
if (dirRel === ".") continue;
|
|
150
|
-
if (relPosix === dirRel || relPosix.startsWith(dirRel
|
|
151
|
-
const sub =
|
|
152
|
-
|
|
164
|
+
if (relPosix === dirRel || relPosix.startsWith(`${dirRel}/`)) {
|
|
165
|
+
const sub =
|
|
166
|
+
relPosix === dirRel ? "." : relPosix.slice(dirRel.length + 1);
|
|
167
|
+
const ig = nestedIgnoreMap.get(dirRel);
|
|
168
|
+
if (!ig) continue;
|
|
153
169
|
try {
|
|
154
|
-
if (ig
|
|
170
|
+
if (ig.ignores(sub)) return { ignored: true, reason: "gitignored" };
|
|
155
171
|
} catch (e) {
|
|
156
172
|
// noop
|
|
157
173
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export function isOperationalArtifactPath(pathLike: string): boolean {
|
|
1
|
+
export function isOperationalArtifactPath(pathLike: string): boolean {
|
|
2
|
+
// implements REQ-001
|
|
2
3
|
const normalized = pathLike.replaceAll("\\", "/");
|
|
3
4
|
|
|
4
5
|
return /(^|\/)\.sisyphus\//.test(normalized);
|