bikky 0.3.5 → 0.3.7

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.
Files changed (147) hide show
  1. package/README.md +11 -4
  2. package/dist/cli.js +26 -6
  3. package/dist/cli.js.map +1 -1
  4. package/dist/config.d.ts +21 -0
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/config.js +249 -2
  7. package/dist/config.js.map +1 -1
  8. package/dist/config.test.js +84 -1
  9. package/dist/config.test.js.map +1 -1
  10. package/dist/daemon/consolidation.d.ts +4 -1
  11. package/dist/daemon/consolidation.d.ts.map +1 -1
  12. package/dist/daemon/consolidation.js +18 -4
  13. package/dist/daemon/consolidation.js.map +1 -1
  14. package/dist/daemon/entity-typing.d.ts +33 -11
  15. package/dist/daemon/entity-typing.d.ts.map +1 -1
  16. package/dist/daemon/entity-typing.js +203 -74
  17. package/dist/daemon/entity-typing.js.map +1 -1
  18. package/dist/daemon/entity-typing.test.d.ts +2 -0
  19. package/dist/daemon/entity-typing.test.d.ts.map +1 -0
  20. package/dist/daemon/entity-typing.test.js +50 -0
  21. package/dist/daemon/entity-typing.test.js.map +1 -0
  22. package/dist/daemon/episode-summary.d.ts +1 -8
  23. package/dist/daemon/episode-summary.d.ts.map +1 -1
  24. package/dist/daemon/episode-summary.js +33 -16
  25. package/dist/daemon/episode-summary.js.map +1 -1
  26. package/dist/daemon/episode-summary.test.js +6 -3
  27. package/dist/daemon/episode-summary.test.js.map +1 -1
  28. package/dist/daemon/extraction.d.ts.map +1 -1
  29. package/dist/daemon/extraction.js +14 -5
  30. package/dist/daemon/extraction.js.map +1 -1
  31. package/dist/daemon/loop.d.ts.map +1 -1
  32. package/dist/daemon/loop.js +9 -1
  33. package/dist/daemon/loop.js.map +1 -1
  34. package/dist/daemon/loop.test.d.ts +2 -0
  35. package/dist/daemon/loop.test.d.ts.map +1 -0
  36. package/dist/daemon/loop.test.js +85 -0
  37. package/dist/daemon/loop.test.js.map +1 -0
  38. package/dist/daemon/maintenance-state.d.ts +36 -0
  39. package/dist/daemon/maintenance-state.d.ts.map +1 -0
  40. package/dist/daemon/maintenance-state.js +95 -0
  41. package/dist/daemon/maintenance-state.js.map +1 -0
  42. package/dist/daemon/maintenance-state.test.d.ts +2 -0
  43. package/dist/daemon/maintenance-state.test.d.ts.map +1 -0
  44. package/dist/daemon/maintenance-state.test.js +56 -0
  45. package/dist/daemon/maintenance-state.test.js.map +1 -0
  46. package/dist/daemon/qdrant.d.ts +22 -0
  47. package/dist/daemon/qdrant.d.ts.map +1 -1
  48. package/dist/daemon/qdrant.js +62 -10
  49. package/dist/daemon/qdrant.js.map +1 -1
  50. package/dist/daemon/qdrant.test.js +57 -1
  51. package/dist/daemon/qdrant.test.js.map +1 -1
  52. package/dist/daemon/relations.d.ts +47 -34
  53. package/dist/daemon/relations.d.ts.map +1 -1
  54. package/dist/daemon/relations.js +241 -155
  55. package/dist/daemon/relations.js.map +1 -1
  56. package/dist/daemon/relations.test.d.ts +2 -0
  57. package/dist/daemon/relations.test.d.ts.map +1 -0
  58. package/dist/daemon/relations.test.js +36 -0
  59. package/dist/daemon/relations.test.js.map +1 -0
  60. package/dist/daemon/session-index.d.ts +1 -8
  61. package/dist/daemon/session-index.d.ts.map +1 -1
  62. package/dist/daemon/session-index.js +8 -10
  63. package/dist/daemon/session-index.js.map +1 -1
  64. package/dist/daemon/session-index.test.js +14 -8
  65. package/dist/daemon/session-index.test.js.map +1 -1
  66. package/dist/daemon/session-summary.d.ts +1 -8
  67. package/dist/daemon/session-summary.d.ts.map +1 -1
  68. package/dist/daemon/session-summary.js +17 -12
  69. package/dist/daemon/session-summary.js.map +1 -1
  70. package/dist/daemon/session-summary.test.js +5 -3
  71. package/dist/daemon/session-summary.test.js.map +1 -1
  72. package/dist/daemon/watcher-health.d.ts +7 -0
  73. package/dist/daemon/watcher-health.d.ts.map +1 -1
  74. package/dist/daemon/watcher-health.js +24 -0
  75. package/dist/daemon/watcher-health.js.map +1 -1
  76. package/dist/daemon/watcher-health.test.js +24 -1
  77. package/dist/daemon/watcher-health.test.js.map +1 -1
  78. package/dist/daemon/workstream-summary.d.ts +1 -8
  79. package/dist/daemon/workstream-summary.d.ts.map +1 -1
  80. package/dist/daemon/workstream-summary.js +22 -14
  81. package/dist/daemon/workstream-summary.js.map +1 -1
  82. package/dist/daemon/workstream-summary.test.js +6 -3
  83. package/dist/daemon/workstream-summary.test.js.map +1 -1
  84. package/dist/lib/qdrant-client.d.ts +34 -0
  85. package/dist/lib/qdrant-client.d.ts.map +1 -1
  86. package/dist/lib/qdrant-client.js +54 -0
  87. package/dist/lib/qdrant-client.js.map +1 -1
  88. package/dist/lib/qdrant-client.test.js +49 -1
  89. package/dist/lib/qdrant-client.test.js.map +1 -1
  90. package/dist/llm/inference/index.d.ts +2 -1
  91. package/dist/llm/inference/index.d.ts.map +1 -1
  92. package/dist/llm/inference/index.js +37 -2
  93. package/dist/llm/inference/index.js.map +1 -1
  94. package/dist/llm/inference/index.test.js +44 -3
  95. package/dist/llm/inference/index.test.js.map +1 -1
  96. package/dist/llm/inference/providers/bedrock.d.ts +23 -0
  97. package/dist/llm/inference/providers/bedrock.d.ts.map +1 -1
  98. package/dist/llm/inference/providers/bedrock.js +10 -1
  99. package/dist/llm/inference/providers/bedrock.js.map +1 -1
  100. package/dist/llm/inference/providers/bedrock.test.js +49 -2
  101. package/dist/llm/inference/providers/bedrock.test.js.map +1 -1
  102. package/dist/llm/inference/providers/ollama.d.ts.map +1 -1
  103. package/dist/llm/inference/providers/ollama.js +7 -1
  104. package/dist/llm/inference/providers/ollama.js.map +1 -1
  105. package/dist/llm/inference/providers/openai.d.ts.map +1 -1
  106. package/dist/llm/inference/providers/openai.js +7 -1
  107. package/dist/llm/inference/providers/openai.js.map +1 -1
  108. package/dist/llm/inference/providers/openai.test.js +38 -2
  109. package/dist/llm/inference/providers/openai.test.js.map +1 -1
  110. package/dist/llm/inference/providers/portkey.d.ts.map +1 -1
  111. package/dist/llm/inference/providers/portkey.js +7 -1
  112. package/dist/llm/inference/providers/portkey.js.map +1 -1
  113. package/dist/llm/inference/types.d.ts +15 -0
  114. package/dist/llm/inference/types.d.ts.map +1 -1
  115. package/dist/llm/telemetry.d.ts +8 -1
  116. package/dist/llm/telemetry.d.ts.map +1 -1
  117. package/dist/llm/telemetry.js.map +1 -1
  118. package/dist/mcp/taxonomy.d.ts.map +1 -1
  119. package/dist/mcp/taxonomy.js +10 -0
  120. package/dist/mcp/taxonomy.js.map +1 -1
  121. package/dist/mcp/taxonomy.test.js +13 -2
  122. package/dist/mcp/taxonomy.test.js.map +1 -1
  123. package/dist/mcp/tools.d.ts.map +1 -1
  124. package/dist/mcp/tools.js +33 -26
  125. package/dist/mcp/tools.js.map +1 -1
  126. package/dist/mcp/tools.test.js +70 -5
  127. package/dist/mcp/tools.test.js.map +1 -1
  128. package/dist/privacy/redaction.d.ts +21 -0
  129. package/dist/privacy/redaction.d.ts.map +1 -0
  130. package/dist/privacy/redaction.js +83 -0
  131. package/dist/privacy/redaction.js.map +1 -0
  132. package/dist/privacy/redaction.test.d.ts +2 -0
  133. package/dist/privacy/redaction.test.d.ts.map +1 -0
  134. package/dist/privacy/redaction.test.js +51 -0
  135. package/dist/privacy/redaction.test.js.map +1 -0
  136. package/dist/prompts/relations.d.ts.map +1 -1
  137. package/dist/prompts/relations.js +60 -14
  138. package/dist/prompts/relations.js.map +1 -1
  139. package/dist/status.d.ts +94 -0
  140. package/dist/status.d.ts.map +1 -0
  141. package/dist/status.js +378 -0
  142. package/dist/status.js.map +1 -0
  143. package/dist/status.test.d.ts +5 -0
  144. package/dist/status.test.d.ts.map +1 -0
  145. package/dist/status.test.js +203 -0
  146. package/dist/status.test.js.map +1 -0
  147. package/package.json +1 -1
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Read-only health diagnostics for `bikky status`.
3
+ */
4
+ import { type QdrantIndexMismatch, type QdrantIndexSpec } from "./lib/qdrant-client.js";
5
+ import { type MaintenanceRunSummary } from "./daemon/maintenance-state.js";
6
+ export type DiagnosticState = "ok" | "warn" | "error" | "skipped";
7
+ export interface DiagnosticIssue {
8
+ severity: "error" | "warning";
9
+ message: string;
10
+ path?: string;
11
+ }
12
+ export interface ConfigStatus {
13
+ status: DiagnosticState;
14
+ path: string;
15
+ exists: boolean;
16
+ parse_error: string | null;
17
+ env_overrides: string[];
18
+ issues: DiagnosticIssue[];
19
+ }
20
+ export interface QdrantStatus {
21
+ status: DiagnosticState;
22
+ configured: boolean;
23
+ reachable: boolean;
24
+ url: string | null;
25
+ collection: string;
26
+ collection_exists: boolean;
27
+ points_count: number | null;
28
+ vectors_count: number | null;
29
+ vector_size: number | null;
30
+ expected_vector_size: number | null;
31
+ expected_indexes: number;
32
+ present_indexes: number;
33
+ missing_indexes: QdrantIndexSpec[];
34
+ mismatched_indexes: QdrantIndexMismatch[];
35
+ error: string | null;
36
+ }
37
+ export interface ProviderStatus {
38
+ status: DiagnosticState;
39
+ provider: string;
40
+ model: string;
41
+ base_url: string;
42
+ dimensions?: number;
43
+ live_checked: boolean;
44
+ error: string | null;
45
+ }
46
+ export interface DaemonStatusReport {
47
+ status: DiagnosticState;
48
+ running: boolean;
49
+ pid: number | null;
50
+ }
51
+ export interface MaintenanceJobStatus {
52
+ last_run_at: string | null;
53
+ cursor_updated_at: string | null;
54
+ last_summary: MaintenanceRunSummary | null;
55
+ }
56
+ export interface MaintenanceStatusReport {
57
+ status: DiagnosticState;
58
+ state_path: string;
59
+ relation_inference: MaintenanceJobStatus;
60
+ entity_typing: MaintenanceJobStatus;
61
+ }
62
+ export interface UiStatusReport {
63
+ status: DiagnosticState;
64
+ checked: boolean;
65
+ url: string;
66
+ ok: boolean | null;
67
+ error: string | null;
68
+ }
69
+ export interface BikkyStatusReport {
70
+ ok: boolean;
71
+ config: ConfigStatus;
72
+ qdrant: QdrantStatus;
73
+ embedding: ProviderStatus;
74
+ llm: ProviderStatus;
75
+ daemon: DaemonStatusReport;
76
+ maintenance: MaintenanceStatusReport;
77
+ ui: UiStatusReport;
78
+ mcp: {
79
+ status: DiagnosticState;
80
+ message: string;
81
+ };
82
+ }
83
+ export interface CollectStatusOptions {
84
+ live?: boolean;
85
+ checkUi?: boolean;
86
+ uiUrl?: string;
87
+ uiTimeoutMs?: number;
88
+ qdrantTimeoutMs?: number;
89
+ }
90
+ export declare function sanitizeStatusUrl(url: string | null): string | null;
91
+ export declare function collectStatus(opts?: CollectStatusOptions): Promise<BikkyStatusReport>;
92
+ export declare function formatStatusReport(report: BikkyStatusReport): string;
93
+ export declare function statusExitCode(report: BikkyStatusReport): number;
94
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"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"}
package/dist/status.js ADDED
@@ -0,0 +1,378 @@
1
+ /**
2
+ * Read-only health diagnostics for `bikky status`.
3
+ */
4
+ import { getActiveConfigEnvOverrides, inspectConfigFile, loadConfig, } from "./config.js";
5
+ import { getDaemonStatus } from "./lifecycle.js";
6
+ import { embed, getEmbeddingConfig, getEmbeddingProvider, getInferenceProvider, initEmbedding, initLLM, listEmbeddingProviders, listInferenceProviders, } from "./llm/index.js";
7
+ import { getCollectionVectorSize, inspectPayloadIndexes, QdrantClient, QdrantNotFoundError, } from "./lib/qdrant-client.js";
8
+ import { QDRANT_INDEXES } from "./mcp/taxonomy.js";
9
+ import { MAINTENANCE_STATE_PATH, readMaintenanceState, } from "./daemon/maintenance-state.js";
10
+ const API_KEY_REQUIRED_PROVIDERS = new Set(["openai", "portkey"]);
11
+ const SENSITIVE_QUERY_PARAM = /(api[-_]?key|access[-_]?token|token|secret|password|credential|auth)/i;
12
+ function diagnosticIssue(issue) {
13
+ return {
14
+ severity: issue.severity === "error" ? "error" : "warning",
15
+ path: issue.path,
16
+ message: issue.message,
17
+ };
18
+ }
19
+ function statusFromIssues(issues) {
20
+ if (issues.some((issue) => issue.severity === "error"))
21
+ return "error";
22
+ if (issues.length > 0)
23
+ return "warn";
24
+ return "ok";
25
+ }
26
+ function errMessage(err) {
27
+ return err instanceof Error ? err.message : String(err);
28
+ }
29
+ function apiKeyIssue(provider, apiKey) {
30
+ if (!API_KEY_REQUIRED_PROVIDERS.has(provider))
31
+ return null;
32
+ return apiKey ? null : `${provider} provider requires an API key`;
33
+ }
34
+ function numberOrNull(value) {
35
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
36
+ }
37
+ export function sanitizeStatusUrl(url) {
38
+ if (!url)
39
+ return null;
40
+ try {
41
+ const parsed = new URL(url);
42
+ parsed.username = "";
43
+ parsed.password = "";
44
+ for (const key of [...parsed.searchParams.keys()]) {
45
+ if (SENSITIVE_QUERY_PARAM.test(key))
46
+ parsed.searchParams.set(key, "REDACTED");
47
+ }
48
+ return parsed.toString().replace(/\/$/, parsed.pathname === "/" ? "" : "/");
49
+ }
50
+ catch {
51
+ return url
52
+ .replace(/\/\/[^/@\s]+@/, "//[REDACTED]@")
53
+ .replace(/([?&][^=&#]*(?:api[-_]?key|access[-_]?token|token|secret|password|credential|auth)[^=&#]*=)[^&#]*/gi, "$1REDACTED");
54
+ }
55
+ }
56
+ function collectConfigStatus() {
57
+ const file = inspectConfigFile();
58
+ const issues = file.issues.map(diagnosticIssue);
59
+ return {
60
+ status: statusFromIssues(issues),
61
+ path: file.path,
62
+ exists: file.exists,
63
+ parse_error: file.parse_error,
64
+ env_overrides: getActiveConfigEnvOverrides(),
65
+ issues,
66
+ };
67
+ }
68
+ async function collectQdrantStatus(cfg, embeddingDimensions, opts) {
69
+ const qdrantUrl = typeof cfg.qdrant_url === "string" ? cfg.qdrant_url : null;
70
+ const collection = typeof cfg.collection === "string" && cfg.collection ? cfg.collection : "bikky";
71
+ const base = {
72
+ status: "error",
73
+ configured: Boolean(qdrantUrl),
74
+ reachable: false,
75
+ url: sanitizeStatusUrl(qdrantUrl),
76
+ collection,
77
+ collection_exists: false,
78
+ points_count: null,
79
+ vectors_count: null,
80
+ vector_size: null,
81
+ expected_vector_size: embeddingDimensions,
82
+ expected_indexes: QDRANT_INDEXES.length,
83
+ present_indexes: 0,
84
+ missing_indexes: [],
85
+ mismatched_indexes: [],
86
+ error: null,
87
+ };
88
+ if (!qdrantUrl) {
89
+ return { ...base, error: "Qdrant URL is not configured" };
90
+ }
91
+ const client = new QdrantClient({
92
+ url: qdrantUrl,
93
+ apiKey: typeof cfg.qdrant_api_key === "string" ? cfg.qdrant_api_key : null,
94
+ collection,
95
+ timeoutMs: opts.qdrantTimeoutMs ?? Math.min(numberOrNull(cfg.qdrant_client.timeout_ms) ?? 5_000, 5_000),
96
+ retries: 0,
97
+ });
98
+ try {
99
+ await client.request("GET", "/collections");
100
+ base.reachable = true;
101
+ }
102
+ catch (err) {
103
+ return { ...base, error: errMessage(err) };
104
+ }
105
+ try {
106
+ const info = await client.getCollectionInfo();
107
+ const readiness = inspectPayloadIndexes(info, QDRANT_INDEXES);
108
+ const vectorSize = getCollectionVectorSize(info);
109
+ const vectorMismatch = vectorSize !== null && embeddingDimensions !== null && vectorSize !== embeddingDimensions;
110
+ base.collection_exists = true;
111
+ base.points_count = typeof info.points_count === "number" ? info.points_count : null;
112
+ base.vectors_count = typeof info.vectors_count === "number" ? info.vectors_count : null;
113
+ base.vector_size = vectorSize;
114
+ base.present_indexes = Object.keys(readiness.present).length;
115
+ base.missing_indexes = readiness.missing;
116
+ base.mismatched_indexes = readiness.mismatched;
117
+ base.status = vectorMismatch || readiness.mismatched.length > 0
118
+ ? "error"
119
+ : readiness.missing.length > 0
120
+ ? "warn"
121
+ : "ok";
122
+ base.error = vectorMismatch
123
+ ? `Qdrant vector size ${vectorSize} does not match embedding dimensions ${embeddingDimensions}`
124
+ : readiness.mismatched.length > 0
125
+ ? "Qdrant payload indexes have schema mismatches"
126
+ : null;
127
+ return base;
128
+ }
129
+ catch (err) {
130
+ if (err instanceof QdrantNotFoundError) {
131
+ return { ...base, reachable: true, collection_exists: false, error: `Collection '${collection}' does not exist` };
132
+ }
133
+ return { ...base, reachable: true, error: errMessage(err) };
134
+ }
135
+ }
136
+ async function collectEmbeddingStatus(cfg, live) {
137
+ const dimensions = numberOrNull(cfg.embedding.dimensions) ?? undefined;
138
+ const base = {
139
+ status: "error",
140
+ provider: cfg.embedding.provider,
141
+ model: cfg.embedding.model,
142
+ base_url: sanitizeStatusUrl(cfg.embedding.base_url) ?? "",
143
+ dimensions,
144
+ live_checked: false,
145
+ error: null,
146
+ };
147
+ try {
148
+ getEmbeddingProvider(cfg.embedding.provider);
149
+ const keyIssue = apiKeyIssue(cfg.embedding.provider, cfg.embedding.api_key);
150
+ if (keyIssue)
151
+ return { ...base, error: keyIssue };
152
+ const resolved = initEmbedding({
153
+ provider: cfg.embedding.provider,
154
+ model: cfg.embedding.model,
155
+ dimensions,
156
+ baseUrl: cfg.embedding.base_url,
157
+ apiKey: cfg.embedding.api_key,
158
+ extra: cfg.embedding.extra ?? {},
159
+ timeoutMs: cfg.embedding.timeout_ms,
160
+ retries: cfg.embedding.retries,
161
+ retryBaseDelayMs: cfg.embedding.retry_base_delay_ms,
162
+ });
163
+ base.provider = resolved.provider;
164
+ base.model = resolved.model;
165
+ base.base_url = sanitizeStatusUrl(resolved.baseUrl) ?? "";
166
+ base.dimensions = resolved.dimensions;
167
+ if (live) {
168
+ await embed("bikky status embedding check");
169
+ base.live_checked = true;
170
+ }
171
+ return { ...base, status: "ok" };
172
+ }
173
+ catch (err) {
174
+ const known = listEmbeddingProviders().map((p) => p.name).sort().join(", ");
175
+ return { ...base, error: `${errMessage(err)} (available embedding providers: ${known})` };
176
+ }
177
+ }
178
+ function collectLlmStatus(cfg) {
179
+ const base = {
180
+ status: "error",
181
+ provider: cfg.llm.provider,
182
+ model: cfg.llm.model,
183
+ base_url: sanitizeStatusUrl(cfg.llm.base_url) ?? "",
184
+ live_checked: false,
185
+ error: null,
186
+ };
187
+ try {
188
+ getInferenceProvider(cfg.llm.provider);
189
+ if (cfg.llm.fallback_provider)
190
+ getInferenceProvider(cfg.llm.fallback_provider);
191
+ const keyIssue = apiKeyIssue(cfg.llm.provider, cfg.llm.api_key);
192
+ if (keyIssue)
193
+ return { ...base, error: keyIssue };
194
+ const resolved = initLLM({
195
+ config: {
196
+ provider: cfg.llm.provider,
197
+ model: cfg.llm.model,
198
+ baseUrl: cfg.llm.base_url,
199
+ apiKey: cfg.llm.api_key,
200
+ fallback: cfg.llm.fallback_provider ?? null,
201
+ extra: cfg.llm.extra ?? {},
202
+ timeoutMs: cfg.llm.timeout_ms,
203
+ retries: cfg.llm.retries,
204
+ retryBaseDelayMs: cfg.llm.retry_base_delay_ms,
205
+ },
206
+ });
207
+ return {
208
+ ...base,
209
+ status: "ok",
210
+ provider: resolved.provider,
211
+ model: resolved.model,
212
+ base_url: sanitizeStatusUrl(resolved.baseUrl) ?? "",
213
+ };
214
+ }
215
+ catch (err) {
216
+ const known = listInferenceProviders().map((p) => p.name).sort().join(", ");
217
+ return { ...base, error: `${errMessage(err)} (available LLM providers: ${known})` };
218
+ }
219
+ }
220
+ function collectDaemonStatus() {
221
+ const daemon = getDaemonStatus();
222
+ return {
223
+ status: daemon.running ? "ok" : "warn",
224
+ running: daemon.running,
225
+ pid: daemon.pid,
226
+ };
227
+ }
228
+ function collectMaintenanceStatus() {
229
+ const state = readMaintenanceState();
230
+ const jobStatus = (jobName) => {
231
+ const job = state.jobs[jobName];
232
+ return {
233
+ last_run_at: job.last_run_at,
234
+ cursor_updated_at: job.cursor_updated_at,
235
+ last_summary: job.last_summary,
236
+ };
237
+ };
238
+ const summaries = [state.jobs.relation_inference.last_summary, state.jobs.entity_typing.last_summary];
239
+ const hasError = summaries.some((summary) => summary?.status === "error");
240
+ return {
241
+ status: hasError ? "warn" : "ok",
242
+ state_path: MAINTENANCE_STATE_PATH,
243
+ relation_inference: jobStatus("relation_inference"),
244
+ entity_typing: jobStatus("entity_typing"),
245
+ };
246
+ }
247
+ async function collectUiStatus(opts) {
248
+ const url = opts.uiUrl ?? "http://localhost:1422/health";
249
+ const reportedUrl = sanitizeStatusUrl(url) ?? url;
250
+ if (opts.checkUi === false) {
251
+ return { status: "skipped", checked: false, url: reportedUrl, ok: null, error: null };
252
+ }
253
+ try {
254
+ const signal = AbortSignal.timeout(opts.uiTimeoutMs ?? 750);
255
+ const resp = await fetch(url, { signal });
256
+ if (!resp.ok) {
257
+ return { status: "warn", checked: true, url: reportedUrl, ok: false, error: `HTTP ${resp.status}` };
258
+ }
259
+ const body = await resp.json().catch(() => null);
260
+ const ok = body?.ok === true;
261
+ return { status: ok ? "ok" : "warn", checked: true, url: reportedUrl, ok, error: ok ? null : "health response did not include ok=true" };
262
+ }
263
+ catch (err) {
264
+ return { status: "skipped", checked: true, url: reportedUrl, ok: null, error: errMessage(err) };
265
+ }
266
+ }
267
+ export async function collectStatus(opts = {}) {
268
+ const live = opts.live !== false;
269
+ const config = collectConfigStatus();
270
+ const cfg = loadConfig();
271
+ const embedding = await collectEmbeddingStatus(cfg, live);
272
+ const qdrant = await collectQdrantStatus(cfg, embedding.dimensions ?? getEmbeddingConfigSafe(), opts);
273
+ const llm = collectLlmStatus(cfg);
274
+ const daemon = collectDaemonStatus();
275
+ const maintenance = collectMaintenanceStatus();
276
+ const ui = await collectUiStatus(opts);
277
+ const required = [config.status, qdrant.status, embedding.status, llm.status];
278
+ return {
279
+ ok: required.every((status) => status !== "error"),
280
+ config,
281
+ qdrant,
282
+ embedding,
283
+ llm,
284
+ daemon,
285
+ maintenance,
286
+ ui,
287
+ mcp: { status: "ok", message: "managed by your editor (stdio)" },
288
+ };
289
+ }
290
+ function getEmbeddingConfigSafe() {
291
+ try {
292
+ return getEmbeddingConfig().dimensions;
293
+ }
294
+ catch {
295
+ return null;
296
+ }
297
+ }
298
+ function icon(status) {
299
+ switch (status) {
300
+ case "ok": return "🟢";
301
+ case "warn": return "🟡";
302
+ case "error": return "🔴";
303
+ case "skipped": return "⚪";
304
+ }
305
+ }
306
+ function qdrantSummary(qdrant) {
307
+ if (!qdrant.configured)
308
+ return "not configured";
309
+ if (!qdrant.reachable)
310
+ return `unreachable (${qdrant.error ?? "unknown error"})`;
311
+ if (!qdrant.collection_exists)
312
+ return qdrant.error ?? "collection missing";
313
+ const matchingIndexes = qdrant.expected_indexes - qdrant.missing_indexes.length - qdrant.mismatched_indexes.length;
314
+ const indexSummary = `${matchingIndexes}/${qdrant.expected_indexes} expected indexes`;
315
+ const details = [
316
+ `collection '${qdrant.collection}'`,
317
+ indexSummary,
318
+ qdrant.vector_size !== null ? `vector size ${qdrant.vector_size}` : null,
319
+ ].filter(Boolean).join(", ");
320
+ return qdrant.error ? `${details} — ${qdrant.error}` : details;
321
+ }
322
+ function maintenanceJobSummary(label, job) {
323
+ const summary = job.last_summary;
324
+ if (!summary)
325
+ return `${label}: never run`;
326
+ const parts = [
327
+ `${label}: ${summary.status}`,
328
+ `last ${summary.ran_at}`,
329
+ `candidates ${summary.candidates_seen}`,
330
+ `LLM ${summary.llm_calls}`,
331
+ `accepted ${summary.accepted}`,
332
+ ];
333
+ if (summary.deterministic !== undefined)
334
+ parts.push(`deterministic ${summary.deterministic}`);
335
+ if (summary.skipped_reason)
336
+ parts.push(`reason ${summary.skipped_reason}`);
337
+ if (summary.error)
338
+ parts.push(`error ${summary.error}`);
339
+ return parts.join(", ");
340
+ }
341
+ export function formatStatusReport(report) {
342
+ const lines = [];
343
+ const configLabel = report.config.exists ? report.config.path : `${report.config.path} (not created yet)`;
344
+ lines.push(`Config: ${icon(report.config.status)} ${report.config.status} — ${configLabel}`);
345
+ if (report.config.env_overrides.length > 0) {
346
+ lines.push(` env overrides: ${report.config.env_overrides.join(", ")}`);
347
+ }
348
+ for (const issue of report.config.issues) {
349
+ lines.push(` ${issue.severity}: ${issue.path ? `${issue.path}: ` : ""}${issue.message}`);
350
+ }
351
+ lines.push(`Qdrant: ${icon(report.qdrant.status)} ${report.qdrant.status} — ${qdrantSummary(report.qdrant)}`);
352
+ if (report.qdrant.missing_indexes.length > 0) {
353
+ lines.push(` missing indexes: ${report.qdrant.missing_indexes.map((idx) => idx.field_name).join(", ")}`);
354
+ }
355
+ if (report.qdrant.mismatched_indexes.length > 0) {
356
+ const mismatches = report.qdrant.mismatched_indexes
357
+ .map((idx) => `${idx.field_name} expected ${idx.expected_schema}, got ${idx.actual_schema ?? "missing"}`)
358
+ .join("; ");
359
+ lines.push(` index mismatches: ${mismatches}`);
360
+ }
361
+ const embLive = report.embedding.live_checked ? "live check passed" : "configured";
362
+ lines.push(`Embedding:${icon(report.embedding.status).padStart(4, " ")} ${report.embedding.status} — ` +
363
+ `${report.embedding.provider}/${report.embedding.model} (${report.embedding.dimensions ?? "?"}d), ${embLive}` +
364
+ `${report.embedding.error ? ` — ${report.embedding.error}` : ""}`);
365
+ lines.push(`LLM: ${icon(report.llm.status)} ${report.llm.status} — ` +
366
+ `${report.llm.provider}/${report.llm.model}, provider config checked (no live chat)` +
367
+ `${report.llm.error ? ` — ${report.llm.error}` : ""}`);
368
+ lines.push(`Daemon: ${icon(report.daemon.status)} ${report.daemon.running ? `running (PID ${report.daemon.pid})` : "stopped"}`);
369
+ lines.push(`Maint: ${icon(report.maintenance.status)} ${maintenanceJobSummary("relations", report.maintenance.relation_inference)}`);
370
+ lines.push(` ${maintenanceJobSummary("entity typing", report.maintenance.entity_typing)}`);
371
+ lines.push(`UI: ${icon(report.ui.status)} ${report.ui.checked ? report.ui.url : "not checked"}${report.ui.error ? ` — ${report.ui.error}` : ""}`);
372
+ lines.push(`MCP: ${icon(report.mcp.status)} ${report.mcp.message}`);
373
+ return lines.join("\n");
374
+ }
375
+ export function statusExitCode(report) {
376
+ return report.ok ? 0 : 1;
377
+ }
378
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for read-only `bikky status` diagnostics.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=status.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.test.d.ts","sourceRoot":"","sources":["../src/status.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}