(q: GbrainManifestQuery, args: CliArgs)
| 203 | } |
| 204 | |
| 205 | function dispatchVector(q: GbrainManifestQuery, args: CliArgs): QueryResult { |
| 206 | const t0 = Date.now(); |
| 207 | const { resolved: query, unresolved } = substituteTemplateVars(q.query || "", args); |
| 208 | if (unresolved.length > 0) { |
| 209 | return { |
| 210 | query: q, |
| 211 | ok: false, |
| 212 | rendered: "", |
| 213 | bytes: 0, |
| 214 | duration_ms: Date.now() - t0, |
| 215 | reason: `template vars unresolved: ${unresolved.join(",")}`, |
| 216 | }; |
| 217 | } |
| 218 | if (!gbrainAvailable()) { |
| 219 | return { query: q, ok: false, rendered: "", bytes: 0, duration_ms: Date.now() - t0, reason: "gbrain CLI missing" }; |
| 220 | } |
| 221 | |
| 222 | const limit = q.limit ?? args.limit; |
| 223 | const result = spawnSync("gbrain", ["query", query, "--limit", String(limit), "--format", "compact"], { |
| 224 | encoding: "utf-8", |
| 225 | timeout: MCP_TIMEOUT_MS, |
| 226 | }); |
| 227 | |
| 228 | if (result.status !== 0 || !result.stdout) { |
| 229 | return { |
| 230 | query: q, |
| 231 | ok: false, |
| 232 | rendered: "", |
| 233 | bytes: 0, |
| 234 | duration_ms: Date.now() - t0, |
| 235 | reason: result.error?.message || `gbrain query exited ${result.status}`, |
| 236 | }; |
| 237 | } |
| 238 | |
| 239 | const rendered = wrapDatamarked(q.render_as, capBody(result.stdout)); |
| 240 | return { query: q, ok: true, rendered, bytes: rendered.length, duration_ms: Date.now() - t0 }; |
| 241 | } |
| 242 | |
| 243 | function dispatchList(q: GbrainManifestQuery, args: CliArgs): QueryResult { |
| 244 | const t0 = Date.now(); |
no test coverage detected