opalserve 3.3.1 → 3.4.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.
Files changed (49) hide show
  1. package/README.md +9 -6
  2. package/dist/cli/commands/doctor.d.ts.map +1 -1
  3. package/dist/cli/commands/doctor.js +39 -0
  4. package/dist/cli/commands/doctor.js.map +1 -1
  5. package/dist/cli/commands/drift.d.ts +2 -0
  6. package/dist/cli/commands/drift.d.ts.map +1 -0
  7. package/dist/cli/commands/drift.js +81 -0
  8. package/dist/cli/commands/drift.js.map +1 -0
  9. package/dist/cli/commands/graph.d.ts +8 -0
  10. package/dist/cli/commands/graph.d.ts.map +1 -0
  11. package/dist/cli/commands/graph.js +221 -0
  12. package/dist/cli/commands/graph.js.map +1 -0
  13. package/dist/cli/commands/start.d.ts.map +1 -1
  14. package/dist/cli/commands/start.js +15 -0
  15. package/dist/cli/commands/start.js.map +1 -1
  16. package/dist/cli/index.js +45 -0
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/config/defaults.d.ts +5 -0
  19. package/dist/config/defaults.d.ts.map +1 -1
  20. package/dist/config/defaults.js +15 -0
  21. package/dist/config/defaults.js.map +1 -1
  22. package/dist/constants.d.ts +1 -1
  23. package/dist/constants.js +1 -1
  24. package/dist/dashboard/assets/{icons-DciuKSzL.js → icons-BKTSOEel.js} +57 -27
  25. package/dist/dashboard/assets/index-DXqLuHqr.css +1 -0
  26. package/dist/dashboard/assets/index-DaHAEV48.js +33 -0
  27. package/dist/dashboard/index.html +3 -3
  28. package/dist/graph/config.d.ts +45 -0
  29. package/dist/graph/config.d.ts.map +1 -0
  30. package/dist/graph/config.js +81 -0
  31. package/dist/graph/config.js.map +1 -0
  32. package/dist/graph/python.d.ts +13 -0
  33. package/dist/graph/python.d.ts.map +1 -0
  34. package/dist/graph/python.js +68 -0
  35. package/dist/graph/python.js.map +1 -0
  36. package/dist/graph/sidecar.d.ts +28 -0
  37. package/dist/graph/sidecar.d.ts.map +1 -0
  38. package/dist/graph/sidecar.js +143 -0
  39. package/dist/graph/sidecar.js.map +1 -0
  40. package/dist/server/app.d.ts.map +1 -1
  41. package/dist/server/app.js +2 -0
  42. package/dist/server/app.js.map +1 -1
  43. package/dist/server/routes/drift.d.ts +5 -0
  44. package/dist/server/routes/drift.d.ts.map +1 -0
  45. package/dist/server/routes/drift.js +99 -0
  46. package/dist/server/routes/drift.js.map +1 -0
  47. package/package.json +14 -1
  48. package/dist/dashboard/assets/index-BrOv-3xx.css +0 -1
  49. package/dist/dashboard/assets/index-DnqqzxX6.js +0 -33
package/README.md CHANGED
@@ -9,9 +9,11 @@
9
9
  <p align="center">
10
10
  <a href="https://www.npmjs.com/package/opalserve"><img src="https://img.shields.io/npm/v/opalserve?style=flat-square&color=F97316" alt="npm version" /></a>
11
11
  <a href="https://www.npmjs.com/package/opalserve"><img src="https://img.shields.io/npm/dm/opalserve?style=flat-square" alt="downloads" /></a>
12
+ <a href="https://github.com/adityaidev/opalserve/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/adityaidev/opalserve/ci.yml?branch=master&style=flat-square&label=CI" alt="CI status" /></a>
12
13
  <a href="https://github.com/adityaidev/opalserve/blob/master/LICENSE"><img src="https://img.shields.io/github/license/adityaidev/opalserve?style=flat-square" alt="license" /></a>
13
14
  <a href="https://nodejs.org"><img src="https://img.shields.io/badge/node-%3E%3D20-brightgreen?style=flat-square" alt="node version" /></a>
14
15
  <a href="https://github.com/adityaidev/opalserve"><img src="https://img.shields.io/github/stars/adityaidev/opalserve?style=flat-square" alt="GitHub stars" /></a>
16
+ <a href="https://github.com/adityaidev/opalserve/blob/master/CONTRIBUTING.md"><img src="https://img.shields.io/badge/PRs-welcome-brightgreen?style=flat-square" alt="PRs welcome" /></a>
15
17
  </p>
16
18
 
17
19
  ---
@@ -25,12 +27,13 @@
25
27
  | | Feature | Status | Description |
26
28
  |---|---|---|---|
27
29
  | :books: | **Team MCP Registry** | ✅ Stable | Admin registers servers once; every developer pulls them with `opalserve sync` |
28
- | :brain: | **Shared Knowledge Base** | ⚙️ Keyword search today; semantic graph (Graphiti) lands in v3.3 | Upload docs, search via the `opalserve_search` MCP tool from any connected client |
29
- | :bar_chart: | **Usage Analytics Dashboard** | ✅ Stable (v3.3.0 wired) | Every tool call (HTTP + MCP gateway) is captured in `usage_events`. Dashboard renders real numbers; `/api/v1/me/activity` lets each user audit their own log; `opalserve admin audit --since 7d` for the team feed |
30
- | :lock: | **Auth & Access Control** | Stable (v3.1.1 hardened) | User accounts (scrypt-hashed), HMAC-secured API keys, per-IP/key rate limits. Per-role tool-permission enforcement targets v3.3 |
31
- | :electric_plug: | **GitHub + Slack Integrations** | ⚙️ Webhook handlers ship; signature verification lands in v3.2 | Webhooks accept events; Slack slash command returns search results |
32
- | :globe_with_meridians: | **MCP Gateway** | ✅ Stable (stdio); SSE/HTTP transports targeted for v3.3 | OpalServe is itself an MCP server connect any MCP client over stdio today |
33
- | :art: | **Beautiful CLI** | ✅ Stable | Interactive setup wizard, gradient banners, color-coded tables, 20+ commands |
30
+ | :brain: | **Team Brain (Graphiti)** | 🆕 v3.4 preview | Run `opalserve enable graph` to spawn a Graphiti sidecar temporal knowledge graph that every linked editor inherits via `graph_search` |
31
+ | :bar_chart: | **Usage Analytics Dashboard** | ✅ Stable (v3.3.0) | Every tool call (HTTP + MCP gateway) is captured in `usage_events`. Dashboard renders real numbers; `/api/v1/me/activity` for personal audit; `opalserve admin audit --since 7d` for team feed |
32
+ | :twisted_rightwards_arrows: | **Drift Detection** | 🆕 v3.4 | `opalserve drift` compares local registry to team config; flags match/drift/missing/local-only servers. REST endpoint + Dashboard tab |
33
+ | :lock: | **Auth & Access Control** | Stable (v3.1.1 hardened) | User accounts (scrypt-hashed), HMAC-secured API keys, per-IP/key rate limits |
34
+ | :electric_plug: | **Editor adapters** | ✅ Stable (v3.2) | `opalserve link` auto-configures Claude Desktop, Cursor, Cline with one command |
35
+ | :globe_with_meridians: | **MCP Gateway** | ✅ Stable (stdio); SSE/HTTP transports targeted for v3.5 | OpalServe is itself an MCP server connect any MCP client over stdio today |
36
+ | :art: | **Beautiful CLI** | ✅ Stable | Interactive setup wizard, gradient banners, color-coded tables, 25+ commands |
34
37
  | :seedling: | **100% Open Source** | ✅ Stable | MIT licensed, self-host for free, no vendor lock-in |
35
38
 
36
39
  ---
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAwBA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA2FnD"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AA2BA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAiInD"}
@@ -4,6 +4,9 @@ import chalk from 'chalk';
4
4
  import { OpalServeRegistry } from '../../core/registry.js';
5
5
  import { getApiKeySecretPath, getDefaultDbPath } from '../../config/defaults.js';
6
6
  import { SUPPORTED_EDITORS, OPALSERVE_ENTRY_NAME } from '../editors/index.js';
7
+ import { readGraphConfig } from '../../graph/config.js';
8
+ import { getSidecarStatus } from '../../graph/sidecar.js';
9
+ import { detectPython, checkGraphitiInstalled } from '../../graph/python.js';
7
10
  import { showMiniBanner, showSuccess, showError, showInfo, showWarning } from '../ui/banner.js';
8
11
  function isPortFree(host, port, timeoutMs = 800) {
9
12
  return new Promise(resolve => {
@@ -62,6 +65,42 @@ export async function doctorCommand() {
62
65
  ? 'none registered yet — try `opalserve add` or `opalserve init`'
63
66
  : `${servers.length} (${servers.filter(s => s.status === 'connected').length} connected)`,
64
67
  });
68
+ const graphCfg = readGraphConfig();
69
+ if (graphCfg.enabled) {
70
+ const sidecar = getSidecarStatus();
71
+ checks.push({
72
+ name: 'graph: sidecar',
73
+ ok: sidecar.running,
74
+ level: sidecar.running ? 'info' : 'warn',
75
+ detail: sidecar.running ? `running (pid ${sidecar.pid})` : 'not running — `opalserve start` will spawn it',
76
+ });
77
+ const py = graphCfg.pythonBin ? { bin: graphCfg.pythonBin, version: '', major: 3, minor: 10 } : detectPython(3, 10);
78
+ checks.push({
79
+ name: 'graph: python',
80
+ ok: !!py,
81
+ level: py ? 'info' : 'warn',
82
+ detail: py ? py.bin : 'Python 3.10+ not detected — re-run `opalserve enable graph`',
83
+ });
84
+ if (graphCfg.pythonBin) {
85
+ const installed = checkGraphitiInstalled(graphCfg.pythonBin);
86
+ checks.push({
87
+ name: 'graph: graphiti-core',
88
+ ok: installed,
89
+ level: installed ? 'info' : 'warn',
90
+ detail: installed
91
+ ? 'installed'
92
+ : `not importable — try \`${graphCfg.pythonBin} -m pip install --user 'graphiti-core[kuzu]'\``,
93
+ });
94
+ }
95
+ }
96
+ else {
97
+ checks.push({
98
+ name: 'graph: integration',
99
+ ok: true,
100
+ level: 'info',
101
+ detail: 'disabled (run `opalserve enable graph` to turn on the team brain)',
102
+ });
103
+ }
65
104
  for (const editor of SUPPORTED_EDITORS) {
66
105
  const status = editor.status(OPALSERVE_ENTRY_NAME);
67
106
  checks.push({
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function driftCommand(): Promise<void>;
2
+ //# sourceMappingURL=drift.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drift.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/drift.ts"],"names":[],"mappings":"AA8BA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CA6ElD"}
@@ -0,0 +1,81 @@
1
+ import chalk from 'chalk';
2
+ import Table from 'cli-table3';
3
+ import { showMiniBanner, showError, showInfo, showSuccess } from '../ui/banner.js';
4
+ import { loadCredentials } from '../../config/credentials.js';
5
+ import { OpalServeRegistry } from '../../core/registry.js';
6
+ const STATUS_LABELS = {
7
+ match: chalk.green('✓ match'),
8
+ drift: chalk.yellow('⚠ drift'),
9
+ missing: chalk.red('✗ missing'),
10
+ extra: chalk.blue('+ local-only'),
11
+ };
12
+ export async function driftCommand() {
13
+ showMiniBanner();
14
+ const creds = loadCredentials();
15
+ if (!creds) {
16
+ showError('Not logged in. Run `opalserve login` first.');
17
+ process.exit(1);
18
+ }
19
+ showInfo(`Comparing local registry to team config at ${chalk.cyan(creds.serverUrl)}...`);
20
+ const registry = await OpalServeRegistry.create({ logging: { level: 'silent' } });
21
+ const localServers = registry.config.servers;
22
+ await registry.stop();
23
+ let result;
24
+ try {
25
+ const res = await fetch(`${creds.serverUrl}/api/v1/drift`, {
26
+ method: 'POST',
27
+ headers: {
28
+ Authorization: `Bearer ${creds.apiKey}`,
29
+ 'Content-Type': 'application/json',
30
+ },
31
+ body: JSON.stringify({ servers: localServers }),
32
+ });
33
+ result = await res.json();
34
+ }
35
+ catch (err) {
36
+ showError(`Drift check failed: ${err instanceof Error ? err.message : String(err)}`);
37
+ process.exit(1);
38
+ }
39
+ if (!result.ok || !result.data) {
40
+ showError(result.error ?? 'Drift check failed');
41
+ process.exit(1);
42
+ }
43
+ const { summary, entries } = result.data;
44
+ if (entries.length === 0) {
45
+ showInfo('No servers on either side.');
46
+ return;
47
+ }
48
+ const table = new Table({
49
+ head: [chalk.bold('Status'), chalk.bold('Server'), chalk.bold('Notes')],
50
+ style: { head: [], border: ['gray'] },
51
+ });
52
+ for (const entry of entries) {
53
+ let notes = '';
54
+ if (entry.status === 'drift' && entry.changedFields) {
55
+ notes = chalk.dim(entry.changedFields.join(', '));
56
+ }
57
+ else if (entry.status === 'missing') {
58
+ notes = chalk.dim('on team server, not local — run `opalserve sync`');
59
+ }
60
+ else if (entry.status === 'extra') {
61
+ notes = chalk.dim('local only — admin can register on team server');
62
+ }
63
+ table.push([STATUS_LABELS[entry.status], entry.name, notes]);
64
+ }
65
+ console.log('\n' + table.toString() + '\n');
66
+ const total = summary.match + summary.drift + summary.missing + summary.extra;
67
+ const summaryLine = [
68
+ chalk.green(`${summary.match} match`),
69
+ summary.drift > 0 ? chalk.yellow(`${summary.drift} drift`) : null,
70
+ summary.missing > 0 ? chalk.red(`${summary.missing} missing`) : null,
71
+ summary.extra > 0 ? chalk.blue(`${summary.extra} local-only`) : null,
72
+ ].filter(Boolean).join(chalk.dim(' · '));
73
+ console.log(chalk.dim(' ') + summaryLine + chalk.dim(` (${total} servers compared)\n`));
74
+ if (summary.drift === 0 && summary.missing === 0) {
75
+ showSuccess('Local registry is in sync with team config.');
76
+ }
77
+ else if (summary.missing > 0) {
78
+ showInfo('Run `opalserve sync` to pull missing servers from the team.');
79
+ }
80
+ }
81
+ //# sourceMappingURL=drift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drift.js","sourceRoot":"","sources":["../../../src/cli/commands/drift.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAmB3D,MAAM,aAAa,GAAyC;IAC1D,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;IAC7B,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;IAC9B,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;IAC/B,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;CAClC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,cAAc,EAAE,CAAC;IAEjB,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,SAAS,CAAC,6CAA6C,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,QAAQ,CAAC,8CAA8C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAEzF,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAClF,MAAM,YAAY,GAAsB,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;IAChE,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEtB,IAAI,MAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,KAAK,CAAC,SAAS,eAAe,EAAE;YACzD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,CAAC,MAAM,EAAE;gBACvC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;SAChD,CAAC,CAAC;QACH,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAmB,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,SAAS,CAAC,uBAAuB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/B,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,oBAAoB,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAEzC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,QAAQ,CAAC,4BAA4B,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE;KACtC,CAAC,CAAC;IAEH,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YACpD,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACtC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QACxE,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YACpC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QACtE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;IAE5C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;IAC9E,MAAM,WAAW,GAAG;QAClB,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC;QACrC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;QACjE,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI;QACpE,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI;KACrE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAEzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,sBAAsB,CAAC,CAAC,CAAC;IAE1F,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACjD,WAAW,CAAC,6CAA6C,CAAC,CAAC;IAC7D,CAAC;SAAM,IAAI,OAAO,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;QAC/B,QAAQ,CAAC,6DAA6D,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare function enableGraphCommand(): Promise<void>;
2
+ export declare function disableGraphCommand(): Promise<void>;
3
+ export declare function graphStatusCommand(): void;
4
+ export declare function graphSpawnCommand(): void;
5
+ export declare function graphResetCommand(): Promise<void>;
6
+ export declare function graphAddCommand(text: string): void;
7
+ export declare function graphSearchCommand(query: string): void;
8
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/graph.ts"],"names":[],"mappings":"AAuCA,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAiHxD;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkBzD;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CA8BzC;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAOxC;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAavD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAgBlD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAStD"}
@@ -0,0 +1,221 @@
1
+ import chalk from 'chalk';
2
+ import boxen from 'boxen';
3
+ import ora from 'ora';
4
+ import { confirm, select, input } from '@inquirer/prompts';
5
+ import { readGraphConfig, writeGraphConfig, ensureGraphDir, resetGraphData, defaultGraphConfig, PROVIDER_LABELS, PROVIDER_DEFAULT_MODELS, PROVIDER_API_KEY_ENV, } from '../../graph/config.js';
6
+ import { detectPython, checkGraphitiInstalled, pipInstallGraphiti } from '../../graph/python.js';
7
+ import { getSidecarStatus, spawnSidecar, stopSidecar } from '../../graph/sidecar.js';
8
+ import { getGraphConfigPath, getGraphDataDir } from '../../config/defaults.js';
9
+ function teamBrainBanner() {
10
+ console.log(boxen([
11
+ chalk.bold.magenta('🧠 Team Brain') + chalk.dim(' × Graphiti Knowledge Graph'),
12
+ '',
13
+ 'Persistent, queryable memory across every AI coding session.',
14
+ chalk.dim('Architecture → docs/GRAPHITI_ARCHITECTURE.md'),
15
+ ].join('\n'), {
16
+ padding: 1,
17
+ margin: { top: 0, bottom: 1, left: 2, right: 2 },
18
+ borderStyle: 'round',
19
+ borderColor: 'magenta',
20
+ }));
21
+ }
22
+ export async function enableGraphCommand() {
23
+ teamBrainBanner();
24
+ // 1. Python check
25
+ const pySpinner = ora({ text: 'Checking for Python 3.10+...', color: 'yellow' }).start();
26
+ const py = detectPython(3, 10);
27
+ if (!py) {
28
+ pySpinner.fail('Python 3.10+ not found on PATH');
29
+ console.log(chalk.dim('\n Install Python from https://www.python.org/downloads/ and try again.\n'));
30
+ process.exit(1);
31
+ }
32
+ pySpinner.succeed(`Python detected: ${chalk.cyan(py.version)} ${chalk.dim(`(${py.bin})`)}`);
33
+ // 2. Provider selection
34
+ const provider = await select({
35
+ message: 'Choose an LLM provider for entity extraction',
36
+ choices: [
37
+ { name: PROVIDER_LABELS.openai, value: 'openai', description: 'Best quality, paid' },
38
+ { name: PROVIDER_LABELS.anthropic, value: 'anthropic', description: 'High quality, paid' },
39
+ { name: PROVIDER_LABELS.ollama, value: 'ollama', description: 'Free, local — needs Ollama running' },
40
+ { name: PROVIDER_LABELS.none, value: 'none', description: 'Configure later' },
41
+ ],
42
+ });
43
+ let model = '';
44
+ let ollamaBaseUrl = 'http://localhost:11434';
45
+ if (provider !== 'none') {
46
+ model = await input({
47
+ message: `Model name`,
48
+ default: PROVIDER_DEFAULT_MODELS[provider],
49
+ });
50
+ const keyEnv = PROVIDER_API_KEY_ENV[provider];
51
+ if (keyEnv && !process.env[keyEnv]) {
52
+ console.log(chalk.yellow(` ⚠ ${keyEnv} is not set in your environment.`));
53
+ console.log(chalk.dim(` Export it before starting OpalServe, e.g. export ${keyEnv}=...\n`));
54
+ }
55
+ if (provider === 'ollama') {
56
+ ollamaBaseUrl = await input({
57
+ message: 'Ollama base URL',
58
+ default: 'http://localhost:11434',
59
+ });
60
+ }
61
+ }
62
+ // 3. Install Graphiti
63
+ ensureGraphDir();
64
+ let installedNow = false;
65
+ if (checkGraphitiInstalled(py.bin)) {
66
+ console.log(chalk.green(' ✓ ') + chalk.dim('graphiti-core already installed'));
67
+ }
68
+ else {
69
+ const doInstall = await confirm({
70
+ message: 'Install graphiti-core[kuzu] now via pip --user?',
71
+ default: true,
72
+ });
73
+ if (doInstall) {
74
+ const installSpinner = ora({ text: 'pip install graphiti-core[kuzu] ... (this may take a few minutes)', color: 'cyan' }).start();
75
+ const result = pipInstallGraphiti(py.bin);
76
+ if (result.ok) {
77
+ installSpinner.succeed('graphiti-core installed');
78
+ installedNow = true;
79
+ }
80
+ else {
81
+ installSpinner.fail('pip install failed');
82
+ console.log(chalk.dim('\n Output:\n'));
83
+ console.log(chalk.dim(result.output.split('\n').slice(-15).join('\n')));
84
+ console.log(chalk.yellow(`\n Run manually: ${py.bin} -m pip install --user 'graphiti-core[kuzu]'\n`));
85
+ }
86
+ }
87
+ else {
88
+ console.log(chalk.dim(` Skipped — install later with: ${py.bin} -m pip install --user 'graphiti-core[kuzu]'`));
89
+ }
90
+ }
91
+ // 4. Persist config
92
+ const now = new Date().toISOString();
93
+ const cfg = {
94
+ ...defaultGraphConfig(),
95
+ enabled: true,
96
+ provider,
97
+ model,
98
+ apiKeyEnv: PROVIDER_API_KEY_ENV[provider],
99
+ ollamaBaseUrl,
100
+ pythonBin: py.bin,
101
+ dbPath: getGraphDataDir(),
102
+ installedAt: installedNow ? now : readGraphConfig().installedAt,
103
+ lastEnabledAt: now,
104
+ };
105
+ writeGraphConfig(cfg);
106
+ // 5. Summary
107
+ console.log(boxen([
108
+ chalk.bold.green('✓ Graph integration enabled'),
109
+ '',
110
+ `${chalk.dim('Provider:')} ${chalk.cyan(PROVIDER_LABELS[provider])}`,
111
+ provider !== 'none' ? `${chalk.dim('Model:')} ${chalk.cyan(model)}` : '',
112
+ `${chalk.dim('Python:')} ${chalk.cyan(py.bin)}`,
113
+ `${chalk.dim('Data path:')} ${chalk.dim(cfg.dbPath)}`,
114
+ `${chalk.dim('Config:')} ${chalk.dim(getGraphConfigPath())}`,
115
+ '',
116
+ chalk.bold('Next steps:'),
117
+ ` ${chalk.dim('1.')} ${chalk.bold('opalserve start')} — sidecar will spawn automatically`,
118
+ ` ${chalk.dim('2.')} ${chalk.bold('opalserve graph status')} — verify the sidecar is running`,
119
+ ` ${chalk.dim('3.')} Restart your AI editor — the ${chalk.cyan('graph_search')} tool becomes available`,
120
+ ].filter(Boolean).join('\n'), {
121
+ padding: 1,
122
+ margin: { top: 1, bottom: 1, left: 2, right: 2 },
123
+ borderStyle: 'round',
124
+ borderColor: 'green',
125
+ }));
126
+ }
127
+ export async function disableGraphCommand() {
128
+ teamBrainBanner();
129
+ const cfg = readGraphConfig();
130
+ if (!cfg.enabled) {
131
+ console.log(chalk.dim(' Graph integration is not currently enabled.\n'));
132
+ return;
133
+ }
134
+ const stopResult = stopSidecar();
135
+ if (stopResult.ok) {
136
+ console.log(chalk.green(' ✓ ') + (stopResult.reason ?? 'sidecar stopped'));
137
+ }
138
+ else {
139
+ console.log(chalk.yellow(' ⚠ ') + chalk.dim(`could not stop sidecar: ${stopResult.reason}`));
140
+ }
141
+ writeGraphConfig({ ...cfg, enabled: false });
142
+ console.log(chalk.green(' ✓ ') + 'graph integration disabled (data preserved)\n');
143
+ console.log(chalk.dim(' Re-enable with `opalserve enable graph`. To wipe data, use `opalserve graph reset`.\n'));
144
+ }
145
+ export function graphStatusCommand() {
146
+ teamBrainBanner();
147
+ const cfg = readGraphConfig();
148
+ const status = getSidecarStatus();
149
+ const lines = [];
150
+ lines.push(`${chalk.dim('Enabled:')} ${cfg.enabled ? chalk.green('yes') : chalk.dim('no')}`);
151
+ lines.push(`${chalk.dim('Provider:')} ${chalk.cyan(PROVIDER_LABELS[cfg.provider])}`);
152
+ if (cfg.provider !== 'none') {
153
+ lines.push(`${chalk.dim('Model:')} ${chalk.cyan(cfg.model || '(unset)')}`);
154
+ }
155
+ lines.push(`${chalk.dim('Python:')} ${cfg.pythonBin ? chalk.cyan(cfg.pythonBin) : chalk.dim('(not configured)')}`);
156
+ lines.push(`${chalk.dim('Sidecar PID:')} ${status.pid ? chalk.cyan(String(status.pid)) : chalk.dim('not running')}`);
157
+ lines.push(`${chalk.dim('Sidecar:')} ${status.running ? chalk.green('running') : chalk.dim('stopped')}`);
158
+ lines.push(`${chalk.dim('Data path:')} ${chalk.dim(cfg.dbPath || getGraphDataDir())}`);
159
+ console.log(boxen(lines.join('\n'), {
160
+ padding: 1,
161
+ margin: { top: 0, bottom: 1, left: 2, right: 2 },
162
+ borderStyle: 'round',
163
+ borderColor: status.running ? 'green' : 'gray',
164
+ title: 'Graph status',
165
+ titleAlignment: 'center',
166
+ }));
167
+ if (cfg.enabled && !status.running) {
168
+ console.log(chalk.dim(' Sidecar is not running. It will spawn on next `opalserve start`,\n or run `opalserve graph spawn` to start it manually.\n'));
169
+ }
170
+ }
171
+ export function graphSpawnCommand() {
172
+ const result = spawnSidecar();
173
+ if (result.ok) {
174
+ console.log(chalk.green(' ✓ ') + `sidecar running (pid ${result.pid})\n`);
175
+ }
176
+ else {
177
+ console.log(chalk.yellow(' ⚠ ') + chalk.dim(result.reason ?? 'failed to start') + '\n');
178
+ }
179
+ }
180
+ export async function graphResetCommand() {
181
+ teamBrainBanner();
182
+ const ok = await confirm({
183
+ message: chalk.red('This will permanently delete all graph data. Continue?'),
184
+ default: false,
185
+ });
186
+ if (!ok) {
187
+ console.log(chalk.dim(' Cancelled.\n'));
188
+ return;
189
+ }
190
+ stopSidecar();
191
+ resetGraphData();
192
+ console.log(chalk.green(' ✓ ') + 'graph data wiped\n');
193
+ }
194
+ export function graphAddCommand(text) {
195
+ teamBrainBanner();
196
+ const cfg = readGraphConfig();
197
+ if (!cfg.enabled) {
198
+ console.log(chalk.yellow(' ⚠ ') + 'graph integration not enabled — run `opalserve enable graph` first\n');
199
+ return;
200
+ }
201
+ const status = getSidecarStatus();
202
+ if (!status.running) {
203
+ console.log(chalk.yellow(' ⚠ ') + 'sidecar not running — start OpalServe with `opalserve start`\n');
204
+ return;
205
+ }
206
+ // The actual MCP call into the sidecar is done by the gateway. From the CLI
207
+ // we delegate to the running OpalServe process by talking to its HTTP API.
208
+ console.log(chalk.dim(' (manual episode injection routes through the running server — coming next)\n'));
209
+ console.log(chalk.dim(` Episode payload: ${text.slice(0, 80)}${text.length > 80 ? '...' : ''}\n`));
210
+ }
211
+ export function graphSearchCommand(query) {
212
+ teamBrainBanner();
213
+ const cfg = readGraphConfig();
214
+ if (!cfg.enabled) {
215
+ console.log(chalk.yellow(' ⚠ ') + 'graph integration not enabled — run `opalserve enable graph` first\n');
216
+ return;
217
+ }
218
+ console.log(chalk.dim(` Tip: search through your AI editor's MCP tool — the sidecar exposes \`graph_search\` automatically.\n`));
219
+ console.log(chalk.dim(` Query: ${query}\n`));
220
+ }
221
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/cli/commands/graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,oBAAoB,GAGrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACjG,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE/E,SAAS,eAAe;IACtB,OAAO,CAAC,GAAG,CACT,KAAK,CACH;QACE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC;QAChF,EAAE;QACF,8DAA8D;QAC9D,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC;KAC1D,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ;QACE,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;QAChD,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,SAAS;KACvB,CACF,CACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,eAAe,EAAE,CAAC;IAElB,kBAAkB;IAClB,MAAM,SAAS,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IACzF,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,SAAS,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4EAA4E,CAAC,CAAC,CAAC;QACrG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,SAAS,CAAC,OAAO,CAAC,oBAAoB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;IAE5F,wBAAwB;IACxB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAgB;QAC3C,OAAO,EAAE,8CAA8C;QACvD,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE;YACpF,EAAE,IAAI,EAAE,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,oBAAoB,EAAE;YAC1F,EAAE,IAAI,EAAE,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,oCAAoC,EAAE;YACpG,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE;SAC9E;KACF,CAAC,CAAC;IAEH,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,aAAa,GAAG,wBAAwB,CAAC;IAC7C,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,KAAK,GAAG,MAAM,KAAK,CAAC;YAClB,OAAO,EAAE,YAAY;YACrB,OAAO,EAAE,uBAAuB,CAAC,QAAQ,CAAC;SAC3C,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,MAAM,kCAAkC,CAAC,CAAC,CAAC;YAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0DAA0D,MAAM,QAAQ,CAAC,CAAC,CAAC;QACnG,CAAC;QACD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,aAAa,GAAG,MAAM,KAAK,CAAC;gBAC1B,OAAO,EAAE,iBAAiB;gBAC1B,OAAO,EAAE,wBAAwB;aAClC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,cAAc,EAAE,CAAC;IACjB,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,sBAAsB,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAClF,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;YAC9B,OAAO,EAAE,iDAAiD;YAC1D,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QACH,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,cAAc,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,mEAAmE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YACjI,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;gBACd,cAAc,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;gBAClD,YAAY,GAAG,IAAI,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACxE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC,GAAG,gDAAgD,CAAC,CAAC,CAAC;YAC1G,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,EAAE,CAAC,GAAG,8CAA8C,CAAC,CAAC,CAAC;QACnH,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,GAAG,GAAgB;QACvB,GAAG,kBAAkB,EAAE;QACvB,OAAO,EAAE,IAAI;QACb,QAAQ;QACR,KAAK;QACL,SAAS,EAAE,oBAAoB,CAAC,QAAQ,CAAC;QACzC,aAAa;QACb,SAAS,EAAE,EAAE,CAAC,GAAG;QACjB,MAAM,EAAE,eAAe,EAAE;QACzB,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,WAAW;QAC/D,aAAa,EAAE,GAAG;KACnB,CAAC;IACF,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAEtB,aAAa;IACb,OAAO,CAAC,GAAG,CACT,KAAK,CACH;QACE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC;QAC/C,EAAE;QACF,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,EAAE;QACvE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;QAC9E,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;QACpD,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QACvD,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,EAAE;QACjE,EAAE;QACF,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;QACzB,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,qCAAqC;QAC1F,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,kCAAkC;QAC9F,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,iCAAiC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,yBAAyB;KACzG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAC5B;QACE,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;QAChD,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,OAAO;KACrB,CACF,CACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,eAAe,EAAE,CAAC;IAClB,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;IAC9B,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC,CAAC;QAC1E,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,WAAW,EAAE,CAAC;IACjC,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,iBAAiB,CAAC,CAAC,CAAC;IAC9E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,2BAA2B,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAChG,CAAC;IAED,gBAAgB,CAAC,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,+CAA+C,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yFAAyF,CAAC,CAAC,CAAC;AACpH,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,eAAe,EAAE,CAAC;IAClB,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAElC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjG,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACxF,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACxH,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACrH,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC7G,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC;IAEzF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACtB,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;QAChD,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;QAC9C,KAAK,EAAE,cAAc;QACrB,cAAc,EAAE,QAAQ;KACzB,CAAC,CACH,CAAC;IAEF,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8HAA8H,CAAC,CAAC,CAAC;IACzJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,wBAAwB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC;IAC7E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,iBAAiB,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,eAAe,EAAE,CAAC;IAClB,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC;QACvB,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,wDAAwD,CAAC;QAC5E,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IACH,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IACD,WAAW,EAAE,CAAC;IACd,cAAc,EAAE,CAAC;IACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,eAAe,EAAE,CAAC;IAClB,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;IAC9B,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,sEAAsE,CAAC,CAAC;QAC3G,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,gEAAgE,CAAC,CAAC;QACrG,OAAO;IACT,CAAC;IACD,4EAA4E;IAC5E,2EAA2E;IAC3E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gFAAgF,CAAC,CAAC,CAAC;IACzG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,eAAe,EAAE,CAAC;IAClB,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;IAC9B,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,sEAAsE,CAAC,CAAC;QAC3G,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yGAAyG,CAAC,CAAC,CAAC;IAClI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC;AAChD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"AAOA,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2E/H"}
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"AASA,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuF/H"}
@@ -4,6 +4,8 @@ import { OpalServeRegistry } from '../../core/registry.js';
4
4
  import { startServer } from '../../server/app.js';
5
5
  import { openInBrowser } from '../../utils/browser.js';
6
6
  import { showMiniBanner, showSuccess, showError, showInfo } from '../ui/banner.js';
7
+ import { isGraphEnabled } from '../../graph/config.js';
8
+ import { spawnSidecar, stopSidecar } from '../../graph/sidecar.js';
7
9
  export async function startCommand(options) {
8
10
  showMiniBanner();
9
11
  const spinner = ora({ text: 'Loading configuration...', color: 'yellow' }).start();
@@ -33,6 +35,17 @@ export async function startCommand(options) {
33
35
  }
34
36
  }
35
37
  }
38
+ // Auto-spawn graph sidecar (if enabled)
39
+ if (isGraphEnabled()) {
40
+ const graphSpinner = ora({ text: 'Starting graph sidecar...', color: 'magenta' }).start();
41
+ const result = spawnSidecar();
42
+ if (result.ok) {
43
+ graphSpinner.succeed(`Graph sidecar running ${chalk.dim(`(pid ${result.pid})`)}`);
44
+ }
45
+ else {
46
+ graphSpinner.warn(`Graph sidecar not started: ${chalk.dim(result.reason ?? 'unknown')}`);
47
+ }
48
+ }
36
49
  // Start HTTP API
37
50
  const port = options.port ? parseInt(options.port, 10) : undefined;
38
51
  const app = await startServer(registry, { port, host: options.host });
@@ -61,6 +74,8 @@ export async function startCommand(options) {
61
74
  const stopSpinner = ora('Shutting down...').start();
62
75
  await app.close();
63
76
  await registry.stop();
77
+ if (isGraphEnabled())
78
+ stopSidecar();
64
79
  stopSpinner.succeed('Stopped');
65
80
  process.exit(0);
66
81
  };
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -15,6 +15,8 @@ import { linkCommand, unlinkCommand } from './commands/link.js';
15
15
  import { doctorCommand } from './commands/doctor.js';
16
16
  import { addCommand } from './commands/add.js';
17
17
  import { defaultCommand } from './commands/default.js';
18
+ import { driftCommand } from './commands/drift.js';
19
+ import { enableGraphCommand, disableGraphCommand, graphStatusCommand, graphSpawnCommand, graphResetCommand, graphAddCommand, graphSearchCommand, } from './commands/graph.js';
18
20
  import { VERSION } from '../constants.js';
19
21
  const program = new Command()
20
22
  .name('opalserve')
@@ -169,6 +171,11 @@ program
169
171
  .description('Health check all servers')
170
172
  .option('-s, --server <name>', 'Check specific server')
171
173
  .action(healthCommand);
174
+ // --- Drift ---
175
+ program
176
+ .command('drift')
177
+ .description('Compare local registry to team config; show match/drift/missing')
178
+ .action(driftCommand);
172
179
  // --- Doctor ---
173
180
  program
174
181
  .command('doctor')
@@ -191,6 +198,44 @@ program
191
198
  .description('Remove OpalServe from an AI editor')
192
199
  .option('--all', 'Unlink from every editor where present')
193
200
  .action(unlinkCommand);
201
+ // --- Enable / Disable graph (Graphiti team brain — v3.4.0) ---
202
+ const enableCmd = program
203
+ .command('enable')
204
+ .description('Enable optional OpalServe features');
205
+ enableCmd
206
+ .command('graph')
207
+ .description('Enable the Graphiti team brain (temporal knowledge graph)')
208
+ .action(enableGraphCommand);
209
+ const disableCmd = program
210
+ .command('disable')
211
+ .description('Disable optional OpalServe features');
212
+ disableCmd
213
+ .command('graph')
214
+ .description('Disable the Graphiti team brain')
215
+ .action(disableGraphCommand);
216
+ const graphCmd = program
217
+ .command('graph')
218
+ .description('Manage the Graphiti team brain (v3.4.0)');
219
+ graphCmd
220
+ .command('status')
221
+ .description('Show graph sidecar status and config')
222
+ .action(graphStatusCommand);
223
+ graphCmd
224
+ .command('spawn')
225
+ .description('Manually spawn the graph sidecar')
226
+ .action(graphSpawnCommand);
227
+ graphCmd
228
+ .command('add <text>')
229
+ .description('Manually add an episode to the graph')
230
+ .action((text) => graphAddCommand(text));
231
+ graphCmd
232
+ .command('search <query>')
233
+ .description('Search the knowledge graph')
234
+ .action((query) => graphSearchCommand(query));
235
+ graphCmd
236
+ .command('reset')
237
+ .description('Wipe all graph data (irreversible)')
238
+ .action(graphResetCommand);
194
239
  // Bare `opalserve` (no subcommand): context-aware welcome.
195
240
  if (process.argv.length <= 2) {
196
241
  defaultCommand().catch((err) => {