kibi-cli 2.0.0 → 2.1.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.
- package/dist/cli-register-proof.d.ts.map +1 -1
- package/dist/cli-register-proof.js +25 -1
- package/dist/cli-register-reporting.d.ts.map +1 -1
- package/dist/cli-register-reporting.js +6 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2 -0
- package/dist/commands/check-generated.d.ts +7 -0
- package/dist/commands/check-generated.d.ts.map +1 -0
- package/dist/commands/check-generated.js +192 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +3 -2
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +122 -1
- package/dist/commands/engine.d.ts.map +1 -1
- package/dist/commands/engine.js +3 -1
- package/dist/commands/init-helpers.d.ts.map +1 -1
- package/dist/commands/init-helpers.js +13 -7
- package/dist/commands/proof-explain.d.ts +10 -0
- package/dist/commands/proof-explain.d.ts.map +1 -0
- package/dist/commands/proof-explain.js +45 -0
- package/dist/commands/proof-impact.d.ts +7 -0
- package/dist/commands/proof-impact.d.ts.map +1 -0
- package/dist/commands/proof-impact.js +39 -0
- package/dist/commands/proof-migrate-legacy.js +1 -1
- package/dist/commands/proof-prune.js +1 -1
- package/dist/commands/prove.js +4 -4
- package/dist/commands/report.d.ts.map +1 -1
- package/dist/commands/report.js +17 -2
- package/dist/commands/sync/manifest.d.ts +1 -0
- package/dist/commands/sync/manifest.d.ts.map +1 -1
- package/dist/commands/sync/manifest.js +18 -16
- package/dist/commands/sync/persistence.d.ts.map +1 -1
- package/dist/commands/sync/persistence.js +6 -0
- package/dist/engine.d.ts +3 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +134 -61
- package/dist/env/bootstrap.d.ts +84 -0
- package/dist/env/bootstrap.d.ts.map +1 -0
- package/dist/env/bootstrap.js +310 -0
- package/dist/extractors/manifest.d.ts.map +1 -1
- package/dist/extractors/manifest.js +1 -1
- package/dist/extractors/markdown.d.ts +2 -0
- package/dist/extractors/markdown.d.ts.map +1 -1
- package/dist/extractors/markdown.js +19 -0
- package/dist/extractors/symbols-coordinator.d.ts +8 -0
- package/dist/extractors/symbols-coordinator.d.ts.map +1 -1
- package/dist/extractors/symbols-coordinator.js +40 -0
- package/dist/extractors/symbols-ts.d.ts +8 -19
- package/dist/extractors/symbols-ts.d.ts.map +1 -1
- package/dist/extractors/symbols-ts.js +33 -503
- package/dist/intent-search.d.ts.map +1 -1
- package/dist/intent-search.js +4 -5
- package/dist/operations/modeling/model-requirement.d.ts.map +1 -1
- package/dist/operations/modeling/model-requirement.js +4 -0
- package/dist/operations/modeling/suggest-predicates.d.ts +1 -1
- package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
- package/dist/operations/modeling/suggest-predicates.js +30 -3
- package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -1
- package/dist/operations/mutation/symbol-granularity.js +9 -87
- package/dist/operations/planning/compile-intent.d.ts +49 -0
- package/dist/operations/planning/compile-intent.d.ts.map +1 -1
- package/dist/operations/planning/compile-intent.js +63 -3
- package/dist/operations/proof/baseline-diff.d.ts +41 -0
- package/dist/operations/proof/baseline-diff.d.ts.map +1 -0
- package/dist/operations/proof/baseline-diff.js +153 -0
- package/dist/operations/proof/explain.d.ts +75 -0
- package/dist/operations/proof/explain.d.ts.map +1 -0
- package/dist/operations/proof/explain.js +294 -0
- package/dist/operations/proof/impact.d.ts +45 -0
- package/dist/operations/proof/impact.d.ts.map +1 -0
- package/dist/operations/proof/impact.js +118 -0
- package/dist/operations/proof/ingest-proof.d.ts.map +1 -1
- package/dist/operations/proof/ingest-proof.js +44 -3
- package/dist/operations/proof/migrate-legacy-receipts.d.ts.map +1 -1
- package/dist/operations/proof/migrate-legacy-receipts.js +21 -17
- package/dist/operations/proof/prune-receipts.js +1 -1
- package/dist/operations/proof/receipt-document.js +2 -2
- package/dist/operations/semantic-advisor/analysis-receipt.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/analysis-receipt.js +3 -9
- package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/analyze-prose.js +18 -67
- package/dist/operations/semantic-advisor/plugin-orchestration.d.ts +63 -0
- package/dist/operations/semantic-advisor/plugin-orchestration.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/plugin-orchestration.js +489 -0
- package/dist/operations/semantic-advisor/predicate-rules-core.d.ts +15 -2
- package/dist/operations/semantic-advisor/predicate-rules-core.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/predicate-rules-core.js +7 -140
- package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts +11 -12
- package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/predicate-rules-launcher.js +6 -94
- package/dist/operations/semantic-advisor/predicate-rules-policy.d.ts +16 -0
- package/dist/operations/semantic-advisor/predicate-rules-policy.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/predicate-rules-policy.js +7 -150
- package/dist/operations/semantic-advisor/predicate-rules-product-tail.d.ts +9 -0
- package/dist/operations/semantic-advisor/predicate-rules-product-tail.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/predicate-rules-product-tail.js +7 -102
- package/dist/operations/semantic-advisor/predicate-rules-product.d.ts +13 -0
- package/dist/operations/semantic-advisor/predicate-rules-product.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/predicate-rules-product.js +7 -133
- package/dist/operations/semantic-advisor/types.d.ts +1 -0
- package/dist/operations/semantic-advisor/types.d.ts.map +1 -1
- package/dist/plugins/compose-ontology-packs.d.ts +51 -0
- package/dist/plugins/compose-ontology-packs.d.ts.map +1 -0
- package/dist/plugins/compose-ontology-packs.js +257 -0
- package/dist/plugins/compose-semantic-classifier.d.ts +42 -0
- package/dist/plugins/compose-semantic-classifier.d.ts.map +1 -0
- package/dist/plugins/compose-semantic-classifier.js +211 -0
- package/dist/plugins/external-allowlist.d.ts +10 -0
- package/dist/plugins/external-allowlist.d.ts.map +1 -0
- package/dist/plugins/external-allowlist.js +16 -0
- package/dist/plugins/index.d.ts +9 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +33 -0
- package/dist/plugins/load-plugin.d.ts +19 -0
- package/dist/plugins/load-plugin.d.ts.map +1 -0
- package/dist/plugins/load-plugin.js +59 -0
- package/dist/plugins/project-config.d.ts +28 -0
- package/dist/plugins/project-config.d.ts.map +1 -0
- package/dist/plugins/project-config.js +90 -0
- package/dist/plugins/registry.d.ts +93 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +338 -0
- package/dist/plugins/resolve-package.d.ts +47 -0
- package/dist/plugins/resolve-package.d.ts.map +1 -0
- package/dist/plugins/resolve-package.js +262 -0
- package/dist/plugins/source-analysis-service.d.ts +44 -0
- package/dist/plugins/source-analysis-service.d.ts.map +1 -0
- package/dist/plugins/source-analysis-service.js +232 -0
- package/dist/prolog/janitor.d.ts.map +1 -1
- package/dist/prolog/janitor.js +1 -1
- package/dist/prolog/store-lock.d.ts +1 -1
- package/dist/prolog/store-lock.d.ts.map +1 -1
- package/dist/proof/inspect.js +1 -1
- package/dist/proof/producers/playwright-case-id.js +2 -2
- package/dist/proof/producers/playwright-reporter.js +4 -4
- package/dist/public/extractors/symbols-coordinator.d.ts +1 -1
- package/dist/public/extractors/symbols-coordinator.d.ts.map +1 -1
- package/dist/public/extractors/symbols-coordinator.js +1 -1
- package/dist/public/impact/analyzer.d.ts +1 -1
- package/dist/public/impact/analyzer.d.ts.map +1 -1
- package/dist/public/impact/analyzer.js +6 -4
- package/dist/public/operations/catalog.d.ts +4 -1
- package/dist/public/operations/catalog.d.ts.map +1 -1
- package/dist/public/operations/check-executor.js +1 -1
- package/dist/public/operations/check-helpers.d.ts +1 -1
- package/dist/public/operations/check-helpers.d.ts.map +1 -1
- package/dist/public/operations/check-helpers.js +1 -1
- package/dist/public/operations/contracts.d.ts.map +1 -1
- package/dist/public/operations/contracts.js +35 -12
- package/dist/public/operations/discovery-entities.d.ts +12 -0
- package/dist/public/operations/discovery-entities.d.ts.map +1 -1
- package/dist/public/operations/discovery-entities.js +34 -0
- package/dist/public/operations/discovery-executors.d.ts.map +1 -1
- package/dist/public/operations/discovery-executors.js +23 -18
- package/dist/public/operations/prolog-json.d.ts +1 -1
- package/dist/public/operations/prolog-json.d.ts.map +1 -1
- package/dist/public/operations/prolog-json.js +7 -7
- package/dist/public/operations/runtime-types.d.ts +16 -1
- package/dist/public/operations/runtime-types.d.ts.map +1 -1
- package/dist/public/operations/specs/check-rules.generated.d.ts +1 -1
- package/dist/public/operations/specs/check-rules.generated.d.ts.map +1 -1
- package/dist/public/operations/specs/check-rules.generated.js +2 -1
- package/dist/public/operations/specs/check.d.ts +1 -1
- package/dist/public/operations/specs/discovery.d.ts +3 -0
- package/dist/public/operations/specs/discovery.d.ts.map +1 -1
- package/dist/public/operations/specs/discovery.js +3 -0
- package/dist/public/operations/specs/proof.js +1 -1
- package/dist/public/operations/specs/reporting.d.ts +1 -0
- package/dist/public/operations/specs/reporting.d.ts.map +1 -1
- package/dist/public/operations/specs/reporting.js +2 -2
- package/dist/public/operations/specs/semantic.d.ts +1 -1
- package/dist/public/operations/specs/semantic.d.ts.map +1 -1
- package/dist/public/operations/specs/semantic.js +54 -4
- package/dist/public/operations/symbol-repair-plan.d.ts.map +1 -1
- package/dist/public/operations/symbol-repair-plan.js +3 -1
- package/dist/public/operations/types.d.ts +5 -0
- package/dist/public/operations/types.d.ts.map +1 -1
- package/dist/public/proof-protocol.js +4 -4
- package/dist/public/skills/kibi-usage/SKILL.md +4 -1
- package/dist/public/skills/kibi-usage/resources/proof.md +45 -0
- package/dist/public/symbol-granularity.d.ts +1 -1
- package/dist/public/symbol-granularity.d.ts.map +1 -1
- package/dist/public/symbol-granularity.generated.d.ts.map +1 -1
- package/dist/public/symbol-granularity.generated.js +38 -5
- package/dist/report/html-report.css +1239 -281
- package/dist/runtime/cli-runtime.d.ts.map +1 -1
- package/dist/runtime/cli-runtime.js +18 -0
- package/dist/traceability/symbol-extract.d.ts +24 -7
- package/dist/traceability/symbol-extract.d.ts.map +1 -1
- package/dist/traceability/symbol-extract.js +64 -208
- package/dist/utils/rule-registry.generated.d.ts +5 -0
- package/dist/utils/rule-registry.generated.d.ts.map +1 -1
- package/dist/utils/rule-registry.generated.js +6 -0
- package/package.json +14 -11
- package/src/public/extractors/symbols-coordinator.ts +1 -0
- package/src/public/impact/analyzer.ts +15 -12
- package/src/public/operations/check-executor.ts +1 -1
- package/src/public/operations/check-helpers.ts +2 -2
- package/src/public/operations/contracts.ts +40 -12
- package/src/public/operations/discovery-entities.ts +46 -0
- package/src/public/operations/discovery-executors.ts +39 -26
- package/src/public/operations/prolog-json.ts +13 -5
- package/src/public/operations/runtime-types.ts +21 -2
- package/src/public/operations/specs/check-rules.generated.ts +2 -1
- package/src/public/operations/specs/discovery.ts +3 -0
- package/src/public/operations/specs/proof.ts +1 -1
- package/src/public/operations/specs/reporting.ts +2 -2
- package/src/public/operations/specs/semantic.ts +79 -17
- package/src/public/operations/symbol-repair-plan.ts +3 -4
- package/src/public/operations/types.ts +5 -0
- package/src/public/proof-fingerprint.ts +1 -1
- package/src/public/proof-protocol-types.d.ts +1 -1
- package/src/public/proof-protocol.ts +4 -4
- package/src/public/skills/kibi-usage/SKILL.md +4 -1
- package/src/public/skills/kibi-usage/resources/proof.md +45 -0
- package/src/public/symbol-granularity.generated.ts +45 -12
- package/src/public/symbol-granularity.ts +3 -3
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Kibi — repo-local, per-branch, queryable long-term memory for software projects
|
|
3
|
+
Copyright (C) 2026 Piotr Franczyk
|
|
4
|
+
|
|
5
|
+
This program is free software: you can redistribute it and/or modify
|
|
6
|
+
it under the terms of the GNU Affero General Public License as published by
|
|
7
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
(at your option) any later version.
|
|
9
|
+
|
|
10
|
+
This program is distributed in the hope that it will be useful,
|
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
GNU Affero General Public License for more details.
|
|
14
|
+
|
|
15
|
+
You should have received a copy of the GNU Affero General Public License
|
|
16
|
+
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import fs from "node:fs";
|
|
19
|
+
import os from "node:os";
|
|
20
|
+
import path from "node:path";
|
|
21
|
+
const WORKSPACE_ENV_KEYS = [
|
|
22
|
+
"KIBI_WORKSPACE",
|
|
23
|
+
"KIBI_PROJECT_ROOT",
|
|
24
|
+
"KIBI_ROOT",
|
|
25
|
+
];
|
|
26
|
+
/** Preferred project-local Kibi env file (harness-independent). */
|
|
27
|
+
// implements REQ-kibi-env-bootstrap
|
|
28
|
+
export const KIBI_PROJECT_ENV_FILE = ".env.kibi";
|
|
29
|
+
/** Legacy generic dotenv still loaded for compatibility only. */
|
|
30
|
+
// implements REQ-kibi-env-bootstrap
|
|
31
|
+
export const KIBI_LEGACY_ENV_FILE = ".env";
|
|
32
|
+
/** Remembered pre-bootstrap non-empty process keys for default `process.env`. */
|
|
33
|
+
let rememberedInitialNonEmptyKeys = null;
|
|
34
|
+
/** Last bootstrap result for default `process.env` (doctor attribution). */
|
|
35
|
+
let lastDefaultBootstrap = null;
|
|
36
|
+
/**
|
|
37
|
+
* Test-only: clear remembered process-key snapshot and last bootstrap result.
|
|
38
|
+
*/
|
|
39
|
+
// implements REQ-kibi-env-bootstrap
|
|
40
|
+
export function resetKibiEnvironmentBootstrapStateForTests() {
|
|
41
|
+
rememberedInitialNonEmptyKeys = null;
|
|
42
|
+
lastDefaultBootstrap = null;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Last bootstrap against the real `process.env`, if any.
|
|
46
|
+
*/
|
|
47
|
+
// implements REQ-kibi-env-bootstrap
|
|
48
|
+
export function getLastBootstrapResult() {
|
|
49
|
+
return lastDefaultBootstrap;
|
|
50
|
+
}
|
|
51
|
+
function readFirstEnv(env, keys) {
|
|
52
|
+
for (const key of keys) {
|
|
53
|
+
const value = env[key]?.trim();
|
|
54
|
+
if (value)
|
|
55
|
+
return value;
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
function nextAncestorDirectory(current) {
|
|
60
|
+
const parent = path.dirname(current);
|
|
61
|
+
return parent === current ? undefined : parent;
|
|
62
|
+
}
|
|
63
|
+
function findUpwards(startDir, marker) {
|
|
64
|
+
let current = path.resolve(startDir);
|
|
65
|
+
while (current !== undefined) {
|
|
66
|
+
if (fs.existsSync(path.join(current, marker))) {
|
|
67
|
+
return current;
|
|
68
|
+
}
|
|
69
|
+
current = nextAncestorDirectory(current);
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Canonical workspace root for Kibi env files and KB attachment.
|
|
75
|
+
* Uses KIBI_WORKSPACE / KIBI_PROJECT_ROOT / KIBI_ROOT, then .kb / .git discovery.
|
|
76
|
+
*/
|
|
77
|
+
// implements REQ-kibi-env-bootstrap
|
|
78
|
+
export function resolveKibiWorkspaceRoot(startDir = process.cwd(), env = process.env) {
|
|
79
|
+
const envRoot = readFirstEnv(env, WORKSPACE_ENV_KEYS);
|
|
80
|
+
if (envRoot)
|
|
81
|
+
return path.resolve(envRoot);
|
|
82
|
+
const kbRoot = findUpwards(startDir, ".kb");
|
|
83
|
+
if (kbRoot)
|
|
84
|
+
return kbRoot;
|
|
85
|
+
const gitRoot = findUpwards(startDir, ".git");
|
|
86
|
+
if (gitRoot)
|
|
87
|
+
return gitRoot;
|
|
88
|
+
return path.resolve(startDir);
|
|
89
|
+
}
|
|
90
|
+
// implements REQ-kibi-env-bootstrap
|
|
91
|
+
export function resolveEnvFilePath(envFileName, workspaceRoot) {
|
|
92
|
+
if (path.isAbsolute(envFileName))
|
|
93
|
+
return envFileName;
|
|
94
|
+
return path.resolve(workspaceRoot, envFileName);
|
|
95
|
+
}
|
|
96
|
+
/** User-wide Kibi env file: $XDG_CONFIG_HOME/kibi/env or ~/.config/kibi/env. */
|
|
97
|
+
// implements REQ-kibi-env-bootstrap
|
|
98
|
+
export function resolveKibiUserEnvPath(options = {}) {
|
|
99
|
+
const env = options.env ?? process.env;
|
|
100
|
+
const xdg = options.xdgConfigHome?.trim() ||
|
|
101
|
+
env.XDG_CONFIG_HOME?.trim() ||
|
|
102
|
+
path.join(options.homedir ?? os.homedir(), ".config");
|
|
103
|
+
return path.join(xdg, "kibi", "env");
|
|
104
|
+
}
|
|
105
|
+
// implements REQ-kibi-env-bootstrap
|
|
106
|
+
export function resolveKibiProjectEnvPath(workspaceRoot, env = process.env) {
|
|
107
|
+
const override = env.KIBI_ENV_FILE?.trim();
|
|
108
|
+
if (override)
|
|
109
|
+
return resolveEnvFilePath(override, workspaceRoot);
|
|
110
|
+
return resolveEnvFilePath(KIBI_PROJECT_ENV_FILE, workspaceRoot);
|
|
111
|
+
}
|
|
112
|
+
// implements REQ-kibi-env-bootstrap
|
|
113
|
+
export function parseEnvContent(content) {
|
|
114
|
+
const entries = [];
|
|
115
|
+
for (const rawLine of content.split(/\r?\n/)) {
|
|
116
|
+
const line = rawLine.trim();
|
|
117
|
+
if (!line || line.startsWith("#"))
|
|
118
|
+
continue;
|
|
119
|
+
const eqIndex = line.indexOf("=");
|
|
120
|
+
if (eqIndex <= 0)
|
|
121
|
+
continue;
|
|
122
|
+
const key = line.slice(0, eqIndex).trim();
|
|
123
|
+
let value = line.slice(eqIndex + 1).trim();
|
|
124
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
125
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
126
|
+
value = value.slice(1, -1);
|
|
127
|
+
}
|
|
128
|
+
if (!key)
|
|
129
|
+
continue;
|
|
130
|
+
entries.push({ key, value });
|
|
131
|
+
}
|
|
132
|
+
return entries;
|
|
133
|
+
}
|
|
134
|
+
function readEnvFileEntries(filePath) {
|
|
135
|
+
const map = new Map();
|
|
136
|
+
if (!fs.existsSync(filePath))
|
|
137
|
+
return map;
|
|
138
|
+
try {
|
|
139
|
+
for (const { key, value } of parseEnvContent(fs.readFileSync(filePath, "utf8"))) {
|
|
140
|
+
map.set(key, value);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// Unreadable files are treated as absent for bootstrap/inspect.
|
|
145
|
+
}
|
|
146
|
+
return map;
|
|
147
|
+
}
|
|
148
|
+
function nonEmpty(value) {
|
|
149
|
+
return typeof value === "string" && value.trim() !== "";
|
|
150
|
+
}
|
|
151
|
+
function snapshotNonEmptyKeys(env) {
|
|
152
|
+
return new Set(Object.keys(env).filter((key) => nonEmpty(env[key])));
|
|
153
|
+
}
|
|
154
|
+
function resolveInitialNonEmptyKeys(env, options, isDefaultEnv) {
|
|
155
|
+
if (options.initialNonEmptyProcessKeys) {
|
|
156
|
+
return new Set([...options.initialNonEmptyProcessKeys].filter((key) => nonEmpty(env[key])));
|
|
157
|
+
}
|
|
158
|
+
if (isDefaultEnv && rememberedInitialNonEmptyKeys) {
|
|
159
|
+
// Only keys that remain non-empty stay process-owned across re-entry.
|
|
160
|
+
return new Set([...rememberedInitialNonEmptyKeys].filter((key) => nonEmpty(env[key])));
|
|
161
|
+
}
|
|
162
|
+
const snapshot = snapshotNonEmptyKeys(env);
|
|
163
|
+
if (isDefaultEnv) {
|
|
164
|
+
rememberedInitialNonEmptyKeys = new Set(snapshot);
|
|
165
|
+
}
|
|
166
|
+
return snapshot;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Load Kibi-owned env files into `process.env` (or an injectable env object).
|
|
170
|
+
* Blank values are treated as unset (never applied, never overwrite).
|
|
171
|
+
* Existing non-empty process keys are never overwritten. Project overrides user.
|
|
172
|
+
* Legacy `.env` only gap-fills and is attributed as `legacy_env`.
|
|
173
|
+
* Call only from CLI/MCP entrypoints — not on library import.
|
|
174
|
+
*/
|
|
175
|
+
// implements REQ-kibi-env-bootstrap
|
|
176
|
+
export function bootstrapKibiEnvironment(options = {}) {
|
|
177
|
+
const env = options.env ?? process.env;
|
|
178
|
+
const isDefaultEnv = options.env === undefined;
|
|
179
|
+
const workspaceRoot = resolveKibiWorkspaceRoot(options.startDir, env);
|
|
180
|
+
if (isDefaultEnv &&
|
|
181
|
+
lastDefaultBootstrap &&
|
|
182
|
+
lastDefaultBootstrap.workspaceRoot !== workspaceRoot) {
|
|
183
|
+
// New workspace (e.g. doctor under KIBI_WORKSPACE): re-snapshot process keys.
|
|
184
|
+
rememberedInitialNonEmptyKeys = null;
|
|
185
|
+
}
|
|
186
|
+
const userEnvPath = resolveKibiUserEnvPath({
|
|
187
|
+
...(options.homedir !== undefined ? { homedir: options.homedir } : {}),
|
|
188
|
+
...(options.xdgConfigHome !== undefined
|
|
189
|
+
? { xdgConfigHome: options.xdgConfigHome }
|
|
190
|
+
: {}),
|
|
191
|
+
env,
|
|
192
|
+
});
|
|
193
|
+
const projectEnvPath = resolveKibiProjectEnvPath(workspaceRoot, env);
|
|
194
|
+
const legacyEnvPath = resolveEnvFilePath(KIBI_LEGACY_ENV_FILE, workspaceRoot);
|
|
195
|
+
const initialNonEmpty = resolveInitialNonEmptyKeys(env, options, isDefaultEnv);
|
|
196
|
+
const sources = {};
|
|
197
|
+
for (const key of initialNonEmpty) {
|
|
198
|
+
sources[key] = "process";
|
|
199
|
+
}
|
|
200
|
+
const keysLoadedFromUser = [];
|
|
201
|
+
const keysLoadedFromProject = [];
|
|
202
|
+
const keysLoadedFromLegacy = [];
|
|
203
|
+
const userEntries = readEnvFileEntries(userEnvPath);
|
|
204
|
+
const projectEntries = readEnvFileEntries(projectEnvPath);
|
|
205
|
+
const legacyEntries = readEnvFileEntries(legacyEnvPath);
|
|
206
|
+
// User first, then project (project may overwrite user-sourced keys).
|
|
207
|
+
// Blank file values are unset — never applied, never overwrite.
|
|
208
|
+
for (const [key, value] of userEntries) {
|
|
209
|
+
if (!nonEmpty(value))
|
|
210
|
+
continue;
|
|
211
|
+
if (initialNonEmpty.has(key))
|
|
212
|
+
continue;
|
|
213
|
+
if (!nonEmpty(env[key])) {
|
|
214
|
+
env[key] = value;
|
|
215
|
+
keysLoadedFromUser.push(key);
|
|
216
|
+
}
|
|
217
|
+
sources[key] = "user_env";
|
|
218
|
+
}
|
|
219
|
+
for (const [key, value] of projectEntries) {
|
|
220
|
+
if (!nonEmpty(value))
|
|
221
|
+
continue;
|
|
222
|
+
if (initialNonEmpty.has(key))
|
|
223
|
+
continue;
|
|
224
|
+
const previousSource = sources[key];
|
|
225
|
+
env[key] = value;
|
|
226
|
+
if (previousSource !== "project_env" &&
|
|
227
|
+
!keysLoadedFromProject.includes(key)) {
|
|
228
|
+
keysLoadedFromProject.push(key);
|
|
229
|
+
}
|
|
230
|
+
sources[key] = "project_env";
|
|
231
|
+
}
|
|
232
|
+
// Legacy .env fills only keys still unset (compatibility; not preferred).
|
|
233
|
+
for (const [key, value] of legacyEntries) {
|
|
234
|
+
if (!nonEmpty(value))
|
|
235
|
+
continue;
|
|
236
|
+
if (initialNonEmpty.has(key))
|
|
237
|
+
continue;
|
|
238
|
+
if (sources[key] === "user_env" || sources[key] === "project_env") {
|
|
239
|
+
continue;
|
|
240
|
+
}
|
|
241
|
+
if (!nonEmpty(env[key])) {
|
|
242
|
+
env[key] = value;
|
|
243
|
+
keysLoadedFromLegacy.push(key);
|
|
244
|
+
}
|
|
245
|
+
sources[key] = "legacy_env";
|
|
246
|
+
}
|
|
247
|
+
const result = {
|
|
248
|
+
workspaceRoot,
|
|
249
|
+
userEnvPath,
|
|
250
|
+
projectEnvPath,
|
|
251
|
+
legacyEnvPath,
|
|
252
|
+
sources,
|
|
253
|
+
keysLoadedFromUser,
|
|
254
|
+
keysLoadedFromProject,
|
|
255
|
+
keysLoadedFromLegacy,
|
|
256
|
+
};
|
|
257
|
+
if (isDefaultEnv) {
|
|
258
|
+
lastDefaultBootstrap = result;
|
|
259
|
+
}
|
|
260
|
+
return result;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Resolve a secret source label from an actual bootstrap result.
|
|
264
|
+
* Never reconstructs attribution by re-reading files alone.
|
|
265
|
+
*/
|
|
266
|
+
// implements REQ-kibi-env-bootstrap
|
|
267
|
+
export function secretSourceFromBootstrap(key, bootstrap, env = process.env) {
|
|
268
|
+
const attributed = bootstrap.sources[key];
|
|
269
|
+
if (attributed) {
|
|
270
|
+
return nonEmpty(env[key]) ? attributed : "missing";
|
|
271
|
+
}
|
|
272
|
+
return nonEmpty(env[key]) ? "process" : "missing";
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Read-only secret attribution via a dry bootstrap on an env snapshot.
|
|
276
|
+
* Prefer `secretSourceFromBootstrap` with the real entrypoint bootstrap result.
|
|
277
|
+
* Never returns secret values.
|
|
278
|
+
*/
|
|
279
|
+
// implements REQ-kibi-env-bootstrap
|
|
280
|
+
export function inspectSecretSource(key, options = {}) {
|
|
281
|
+
if (options.env === undefined &&
|
|
282
|
+
lastDefaultBootstrap &&
|
|
283
|
+
!options.startDir &&
|
|
284
|
+
!options.xdgConfigHome &&
|
|
285
|
+
!options.homedir &&
|
|
286
|
+
!options.initialNonEmptyProcessKeys &&
|
|
287
|
+
!options.initialProcessKeys) {
|
|
288
|
+
return secretSourceFromBootstrap(key, lastDefaultBootstrap);
|
|
289
|
+
}
|
|
290
|
+
const envCopy = { ...(options.env ?? process.env) };
|
|
291
|
+
const initial = options.initialNonEmptyProcessKeys ??
|
|
292
|
+
options.initialProcessKeys ??
|
|
293
|
+
(options.env === undefined && rememberedInitialNonEmptyKeys
|
|
294
|
+
? new Set([...rememberedInitialNonEmptyKeys].filter((key) => nonEmpty(envCopy[key])))
|
|
295
|
+
: snapshotNonEmptyKeys(envCopy));
|
|
296
|
+
const result = bootstrapKibiEnvironment({
|
|
297
|
+
...options,
|
|
298
|
+
env: envCopy,
|
|
299
|
+
initialNonEmptyProcessKeys: initial,
|
|
300
|
+
});
|
|
301
|
+
return secretSourceFromBootstrap(key, result, envCopy);
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Whether a secret is available for provider use (non-empty after resolution).
|
|
305
|
+
* Blank values are unset.
|
|
306
|
+
*/
|
|
307
|
+
// implements REQ-kibi-env-bootstrap
|
|
308
|
+
export function isSecretAvailable(key, options = {}) {
|
|
309
|
+
return inspectSecretSource(key, options) !== "missing";
|
|
310
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/extractors/manifest.ts"],"names":[],"mappings":"AA6BA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,eAAe,CAAC;IACxB,aAAa,EAAE,qBAAqB,EAAE,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA6JD,qBAAa,aAAc,SAAQ,KAAK;IAG7B,QAAQ,EAAE,MAAM;aACP,cAAc,CAAC,EAAE,qBAAqB;gBAFtD,OAAO,EAAE,MAAM,EACR,QAAQ,EAAE,MAAM,EACP,cAAc,CAAC,EAAE,qBAAqB,YAAA;CAKzD;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAsFD;;;;GAIG;AAEH,wBAAgB,4BAA4B,CAC1C,eAAe,EAAE,oBAAoB,EAAE,EACvC,QAAQ,EAAE,MAAM,GACf,gBAAgB,EAAE,CAkDpB;AAYD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,gBAAgB,EAAE,CAmBpB;AAED,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,oBAAoB,EAAE,CAmBxB;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAKxE;AA4ED,wBAAgB,iCAAiC,CAC/C,YAAY,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,GACvB,oBAAoB,EAAE,CAaxB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAgCD,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/extractors/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -330,7 +330,7 @@ export function readManifestWithCoordinateOverlay(manifestPath, coordinatesPath)
|
|
|
330
330
|
* editing the production code behind a test stales only that test's receipts
|
|
331
331
|
* (per-contract binding mode).
|
|
332
332
|
*/
|
|
333
|
-
// implements REQ-kibi-
|
|
333
|
+
// implements REQ-kibi-verification-evidence-contract
|
|
334
334
|
// Receipt-binding scope reads run once per proof-bearing test; a campaign
|
|
335
335
|
// touches dozens-to-hundreds of tests, so the parsed overlay is memoized per
|
|
336
336
|
// manifest state (path + mtime + size) and invalidated when the file changes.
|
|
@@ -28,6 +28,8 @@ export interface ExtractedEntity {
|
|
|
28
28
|
sourceEndColumn?: number;
|
|
29
29
|
verification_scope?: "unit" | "integration" | "end_to_end";
|
|
30
30
|
verification_perspective?: "internal" | "consumer";
|
|
31
|
+
proof_exempt?: boolean;
|
|
32
|
+
proof_exempt_reason?: string;
|
|
31
33
|
proof_contract?: ProofContract;
|
|
32
34
|
proof_bindings?: readonly ProofBinding[];
|
|
33
35
|
proof_receipts?: readonly ProofReceipt[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/extractors/markdown.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/extractors/markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -411,6 +411,25 @@ function extractFromMarkdownContent(content, filePath) {
|
|
|
411
411
|
if (type === "req" && data.semantic_source_hash !== undefined) {
|
|
412
412
|
entity.semantic_source_hash = data.semantic_source_hash;
|
|
413
413
|
}
|
|
414
|
+
if (type === "req" && data.proof_exempt !== undefined) {
|
|
415
|
+
if (typeof data.proof_exempt !== "boolean") {
|
|
416
|
+
throw new FrontmatterError("Invalid proof_exempt; expected true or false", filePath, {
|
|
417
|
+
classification: "Invalid Proof Exemption Flag",
|
|
418
|
+
hint: "Set proof_exempt: true with a non-empty proof_exempt_reason.",
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
entity.proof_exempt = data.proof_exempt;
|
|
422
|
+
}
|
|
423
|
+
if (type === "req" && data.proof_exempt_reason !== undefined) {
|
|
424
|
+
if (typeof data.proof_exempt_reason !== "string" ||
|
|
425
|
+
data.proof_exempt_reason.trim() === "") {
|
|
426
|
+
throw new FrontmatterError("Invalid proof_exempt_reason; expected a non-empty string", filePath, {
|
|
427
|
+
classification: "Invalid Proof Exemption Reason",
|
|
428
|
+
hint: "proof_exempt requires a non-empty proof_exempt_reason explaining why the requirement is outside E2E-proof scope.",
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
entity.proof_exempt_reason = data.proof_exempt_reason;
|
|
432
|
+
}
|
|
414
433
|
if (type !== "fact") {
|
|
415
434
|
const invalidFactField = FACT_ONLY_FIELDS.find((field) => data[field] !== undefined);
|
|
416
435
|
if (invalidFactField) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { CapabilityRegistry } from "../plugins/registry.js";
|
|
1
2
|
import { type ManifestSymbolEntry, enrichSymbolCoordinatesWithTsMorph } from "./symbols-ts.js";
|
|
2
3
|
export type { ManifestSymbolEntry };
|
|
3
4
|
export type SourceAnalysisMode = "parser" | "fallback";
|
|
@@ -31,11 +32,18 @@ export interface SourceAnalysisProvider {
|
|
|
31
32
|
}
|
|
32
33
|
export interface AnalyzeSourceTextOptions {
|
|
33
34
|
providers?: SourceAnalysisProvider[];
|
|
35
|
+
/** When set, prefer the host SourceAnalysisService over sync providers. */
|
|
36
|
+
registry?: CapabilityRegistry;
|
|
34
37
|
}
|
|
35
38
|
interface EnrichSymbolCoordinatesDeps {
|
|
36
39
|
enrichTsCoordinates: typeof enrichSymbolCoordinatesWithTsMorph;
|
|
37
40
|
}
|
|
38
41
|
export declare function analyzeSourceText(entries: ManifestSymbolEntry[], workspaceRoot: string, deps?: Partial<EnrichSymbolCoordinatesDeps>): Promise<ManifestSymbolEntry[]>;
|
|
39
42
|
export declare function analyzeSourceText(filePath: string, content: string, options?: AnalyzeSourceTextOptions): SourceAnalysisResult;
|
|
43
|
+
/**
|
|
44
|
+
* Prefer the capability registry / SourceAnalysisService when available.
|
|
45
|
+
* Falls back to the sync builtin ts-morph provider path on registry failure.
|
|
46
|
+
*/
|
|
47
|
+
export declare function analyzeSourceTextWithRegistry(filePath: string, content: string, registry: CapabilityRegistry): Promise<SourceAnalysisResult>;
|
|
40
48
|
export declare function enrichSymbolCoordinates(entries: ManifestSymbolEntry[], workspaceRoot: string, deps?: Partial<EnrichSymbolCoordinatesDeps>): Promise<ManifestSymbolEntry[]>;
|
|
41
49
|
//# sourceMappingURL=symbols-coordinator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbols-coordinator.d.ts","sourceRoot":"","sources":["../../src/extractors/symbols-coordinator.ts"],"names":[],"mappings":"AAoBA,OAAO,EACL,KAAK,mBAAmB,EAExB,kCAAkC,EACnC,MAAM,iBAAiB,CAAC;AAazB,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEvD,MAAM,MAAM,gBAAgB,GACxB,UAAU,GACV,OAAO,GACP,QAAQ,GACR,UAAU,GACV,UAAU,GACV,WAAW,GACX,MAAM,GACN,MAAM,GACN,UAAU,GACV,SAAS,CAAC;AAEd,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,kBAAkB,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,oBAAoB,CAAC;IAC7B,OAAO,EAAE,oBAAoB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,oBAAoB,CAAC;CACtE;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,sBAAsB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"symbols-coordinator.d.ts","sourceRoot":"","sources":["../../src/extractors/symbols-coordinator.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAKjE,OAAO,EACL,KAAK,mBAAmB,EAExB,kCAAkC,EACnC,MAAM,iBAAiB,CAAC;AAazB,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEvD,MAAM,MAAM,gBAAgB,GACxB,UAAU,GACV,OAAO,GACP,QAAQ,GACR,UAAU,GACV,UAAU,GACV,WAAW,GACX,MAAM,GACN,MAAM,GACN,UAAU,GACV,SAAS,CAAC;AAEd,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,kBAAkB,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,oBAAoB,CAAC;IAC7B,OAAO,EAAE,oBAAoB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,oBAAoB,CAAC;CACtE;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACrC,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAED,UAAU,2BAA2B;IACnC,mBAAmB,EAAE,OAAO,kCAAkC,CAAC;CAChE;AA+BD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,mBAAmB,EAAE,EAC9B,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,GAC1C,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAClC,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,wBAAwB,GACjC,oBAAoB,CAAC;AA8DxB;;;GAGG;AAEH,wBAAsB,6BAA6B,CACjD,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,kBAAkB,GAC3B,OAAO,CAAC,oBAAoB,CAAC,CAO/B;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,mBAAmB,EAAE,EAC9B,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,GAC1C,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAqChC"}
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import * as fs from "node:fs";
|
|
19
19
|
import * as path from "node:path";
|
|
20
|
+
import { createSourceAnalysisService, } from "../plugins/source-analysis-service.js";
|
|
20
21
|
import { createTsMorphSourceAnalysisProvider, enrichSymbolCoordinatesWithTsMorph, } from "./symbols-ts.js";
|
|
21
22
|
const TS_JS_EXTENSIONS = new Set([
|
|
22
23
|
".ts",
|
|
@@ -60,6 +61,7 @@ export function analyzeSourceText(filePathOrEntries, contentOrWorkspaceRoot, opt
|
|
|
60
61
|
if (Array.isArray(filePathOrEntries)) {
|
|
61
62
|
return enrichSymbolCoordinates(filePathOrEntries, contentOrWorkspaceRoot, optionsOrDeps);
|
|
62
63
|
}
|
|
64
|
+
// Sync path: ignore registry (async callers use analyzeSourceTextWithRegistry).
|
|
63
65
|
const providers = optionsOrDeps?.providers ??
|
|
64
66
|
DEFAULT_SOURCE_ANALYSIS_PROVIDERS;
|
|
65
67
|
for (const provider of providers) {
|
|
@@ -74,6 +76,44 @@ export function analyzeSourceText(filePathOrEntries, contentOrWorkspaceRoot, opt
|
|
|
74
76
|
}
|
|
75
77
|
return createFallbackAnalysis(filePathOrEntries, "unsupported_language");
|
|
76
78
|
}
|
|
79
|
+
function toCoordinatorResult(result) {
|
|
80
|
+
return {
|
|
81
|
+
sourceFile: result.sourceFile,
|
|
82
|
+
language: result.language,
|
|
83
|
+
providerId: result.providerId,
|
|
84
|
+
module: {
|
|
85
|
+
title: result.module.title,
|
|
86
|
+
language: result.module.language,
|
|
87
|
+
analysisMode: result.module.analysisMode,
|
|
88
|
+
...(result.module.fallbackReason
|
|
89
|
+
? { fallbackReason: result.module.fallbackReason }
|
|
90
|
+
: {}),
|
|
91
|
+
},
|
|
92
|
+
symbols: result.symbols.map((symbol) => ({
|
|
93
|
+
name: symbol.name,
|
|
94
|
+
kind: symbol.kind,
|
|
95
|
+
startLine: symbol.startLine,
|
|
96
|
+
startColumn: symbol.startColumn,
|
|
97
|
+
endLine: symbol.endLine,
|
|
98
|
+
endColumn: symbol.endColumn,
|
|
99
|
+
...(symbol.directiveText ? { directiveText: symbol.directiveText } : {}),
|
|
100
|
+
})),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Prefer the capability registry / SourceAnalysisService when available.
|
|
105
|
+
* Falls back to the sync builtin ts-morph provider path on registry failure.
|
|
106
|
+
*/
|
|
107
|
+
// implements REQ-capability-plugin-activation-disclosure-v1
|
|
108
|
+
export async function analyzeSourceTextWithRegistry(filePath, content, registry) {
|
|
109
|
+
try {
|
|
110
|
+
const service = createSourceAnalysisService({ registry });
|
|
111
|
+
return toCoordinatorResult(await service.analyzeText(filePath, content));
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return analyzeSourceText(filePath, content);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
77
117
|
export async function enrichSymbolCoordinates(entries, workspaceRoot, deps) {
|
|
78
118
|
// implements REQ-vscode-traceability
|
|
79
119
|
const enrichTsCoordinates = deps?.enrichTsCoordinates ?? enrichSymbolCoordinatesWithTsMorph;
|
|
@@ -1,23 +1,12 @@
|
|
|
1
|
+
import { type ManifestSymbolEntry as BuiltinManifestSymbolEntry, type SymbolCoordinates as BuiltinSymbolCoordinates, isPrivateClassMember as isBuiltinPrivateClassMember } from "kibi-plugin-builtin";
|
|
1
2
|
import type { SourceAnalysisProvider } from "./symbols-coordinator.js";
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export interface ManifestSymbolEntry {
|
|
10
|
-
id: string;
|
|
11
|
-
title: string;
|
|
12
|
-
sourceFile?: string;
|
|
13
|
-
sourceLine?: number;
|
|
14
|
-
sourceColumn?: number;
|
|
15
|
-
sourceEndLine?: number;
|
|
16
|
-
sourceEndColumn?: number;
|
|
17
|
-
coordinatesGeneratedAt?: string;
|
|
18
|
-
links?: string[];
|
|
19
|
-
[key: string]: unknown;
|
|
20
|
-
}
|
|
3
|
+
export type SymbolCoordinates = BuiltinSymbolCoordinates;
|
|
4
|
+
export type ManifestSymbolEntry = BuiltinManifestSymbolEntry;
|
|
5
|
+
export declare const isPrivateClassMember: typeof isBuiltinPrivateClassMember;
|
|
6
|
+
/**
|
|
7
|
+
* Thin host adapter over kibi-plugin-builtin's ts-morph extractor.
|
|
8
|
+
* Preserves the historical `ts-morph` provider id for sync callers and tests.
|
|
9
|
+
*/
|
|
21
10
|
export declare function createTsMorphSourceAnalysisProvider(): SourceAnalysisProvider;
|
|
22
11
|
export declare function enrichSymbolCoordinatesWithTsMorph(entries: ManifestSymbolEntry[], workspaceRoot: string): Promise<ManifestSymbolEntry[]>;
|
|
23
12
|
export declare function onlyCandidate<T>(candidates: readonly T[]): T | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbols-ts.d.ts","sourceRoot":"","sources":["../../src/extractors/symbols-ts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"symbols-ts.d.ts","sourceRoot":"","sources":["../../src/extractors/symbols-ts.ts"],"names":[],"mappings":"AAiBA,OAAO,EACL,KAAK,mBAAmB,IAAI,0BAA0B,EACtD,KAAK,iBAAiB,IAAI,wBAAwB,EAGlD,oBAAoB,IAAI,2BAA2B,EAEpD,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EACV,sBAAsB,EAEvB,MAAM,0BAA0B,CAAC;AAGlC,MAAM,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAEzD,MAAM,MAAM,mBAAmB,GAAG,0BAA0B,CAAC;AAG7D,eAAO,MAAM,oBAAoB,oCAA8B,CAAC;AAEhE;;;GAGG;AAEH,wBAAgB,mCAAmC,IAAI,sBAAsB,CAmC5E;AAGD,wBAAsB,kCAAkC,CACtD,OAAO,EAAE,mBAAmB,EAAE,EAC9B,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAGhC;AAGD,wBAAgB,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,GAAG,SAAS,CAExE"}
|