openlore 2.0.10 → 2.0.12
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/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +3 -2
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +106 -244
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/serve.d.ts +49 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +450 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/setup.d.ts.map +1 -1
- package/dist/cli/commands/setup.js +32 -8
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/analyzer/artifact-generator.d.ts +1 -13
- package/dist/core/analyzer/artifact-generator.d.ts.map +1 -1
- package/dist/core/analyzer/artifact-generator.js +5 -23
- package/dist/core/analyzer/artifact-generator.js.map +1 -1
- package/dist/core/analyzer/call-graph.d.ts.map +1 -1
- package/dist/core/analyzer/call-graph.js +19 -10
- package/dist/core/analyzer/call-graph.js.map +1 -1
- package/dist/core/analyzer/file-walker.d.ts.map +1 -1
- package/dist/core/analyzer/file-walker.js +9 -1
- package/dist/core/analyzer/file-walker.js.map +1 -1
- package/dist/core/analyzer/test-file.d.ts +19 -0
- package/dist/core/analyzer/test-file.d.ts.map +1 -0
- package/dist/core/analyzer/test-file.js +29 -0
- package/dist/core/analyzer/test-file.js.map +1 -0
- package/dist/core/decisions/consolidator.d.ts.map +1 -1
- package/dist/core/decisions/consolidator.js +7 -1
- package/dist/core/decisions/consolidator.js.map +1 -1
- package/dist/core/decisions/syncer.js +8 -0
- package/dist/core/decisions/syncer.js.map +1 -1
- package/dist/core/services/edge-store.d.ts.map +1 -1
- package/dist/core/services/edge-store.js +3 -0
- package/dist/core/services/edge-store.js.map +1 -1
- package/dist/core/services/mcp-handlers/analysis.d.ts.map +1 -1
- package/dist/core/services/mcp-handlers/analysis.js +2 -1
- package/dist/core/services/mcp-handlers/analysis.js.map +1 -1
- package/dist/core/services/mcp-handlers/semantic.d.ts.map +1 -1
- package/dist/core/services/mcp-handlers/semantic.js +7 -3
- package/dist/core/services/mcp-handlers/semantic.js.map +1 -1
- package/dist/core/services/mcp-handlers/utils.d.ts +13 -0
- package/dist/core/services/mcp-handlers/utils.d.ts.map +1 -1
- package/dist/core/services/mcp-handlers/utils.js +49 -0
- package/dist/core/services/mcp-handlers/utils.js.map +1 -1
- package/dist/core/services/mcp-watcher.d.ts +9 -0
- package/dist/core/services/mcp-watcher.d.ts.map +1 -1
- package/dist/core/services/mcp-watcher.js +15 -5
- package/dist/core/services/mcp-watcher.js.map +1 -1
- package/dist/core/services/serve-client.d.ts +40 -0
- package/dist/core/services/serve-client.d.ts.map +1 -0
- package/dist/core/services/serve-client.js +115 -0
- package/dist/core/services/serve-client.js.map +1 -0
- package/dist/core/services/tool-dispatch.d.ts +35 -0
- package/dist/core/services/tool-dispatch.d.ts.map +1 -0
- package/dist/core/services/tool-dispatch.js +253 -0
- package/dist/core/services/tool-dispatch.js.map +1 -0
- package/dist/pi/extension.d.ts +62 -0
- package/dist/pi/extension.d.ts.map +1 -0
- package/dist/pi/extension.js +508 -0
- package/dist/pi/extension.js.map +1 -0
- package/examples/pi/README.md +98 -0
- package/package.json +16 -2
- package/skills/openlore-orient/README.md +73 -0
- package/skills/openlore-orient/SKILL.md +73 -0
- package/skills/openlore-orient/examples/example-orient-output.json +103 -0
- package/skills/openlore-orient/examples/example-task-prompt.md +26 -0
- package/skills/openlore-orient/scripts/orient-via-mcp.mjs +124 -0
- package/skills/openlore-orient/scripts/orient.ps1 +36 -0
- package/skills/openlore-orient/scripts/orient.sh +28 -0
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* openlore serve — local HTTP daemon (warm, loopback-only).
|
|
3
|
+
*
|
|
4
|
+
* A long-lived process that keeps openlore's caches warm across calls and
|
|
5
|
+
* exposes the tool surface over plain HTTP so non-MCP clients (e.g. a Pi
|
|
6
|
+
* extension) can hit it with `fetch` — no JSON-RPC, no subprocess-per-call.
|
|
7
|
+
*
|
|
8
|
+
* It reuses the SAME tool dispatch as the stdio MCP server
|
|
9
|
+
* ({@link dispatchTool}) so the two transports can't drift, and the SAME tool
|
|
10
|
+
* presets ({@link selectActiveTools}) so a small-model client gets a focused
|
|
11
|
+
* surface (default: `navigation`).
|
|
12
|
+
*
|
|
13
|
+
* Endpoints (all loopback):
|
|
14
|
+
* GET /health → { ok, version, root, preset, tools, uptimeMs }
|
|
15
|
+
* POST /tool/:name body { directory?, args } → handler result (JSON)
|
|
16
|
+
*
|
|
17
|
+
* Discovery: writes `.openlore/serve.json` { port, pid, host, token?, startedAt }
|
|
18
|
+
* in the served root so a client can find and reuse a running daemon.
|
|
19
|
+
*
|
|
20
|
+
* Security: binds 127.0.0.1 only. An optional --token must be presented as the
|
|
21
|
+
* `x-openlore-token` header, keeping other local users off the port.
|
|
22
|
+
*
|
|
23
|
+
* Freshness (watcher + continuous re-analyze) is layered on separately; this
|
|
24
|
+
* module is the transport + lifecycle core.
|
|
25
|
+
*/
|
|
26
|
+
import { Command } from 'commander';
|
|
27
|
+
import { createServer } from 'node:http';
|
|
28
|
+
import { createRequire } from 'node:module';
|
|
29
|
+
import { writeFile, readFile, unlink, mkdir } from 'node:fs/promises';
|
|
30
|
+
import { join, resolve } from 'node:path';
|
|
31
|
+
import { logger } from '../../utils/logger.js';
|
|
32
|
+
import { OPENLORE_DIR, OPENLORE_ANALYSIS_SUBDIR } from '../../constants.js';
|
|
33
|
+
import { dispatchTool, UnknownToolError } from '../../core/services/tool-dispatch.js';
|
|
34
|
+
import { validateDirectory, waitForGraphRebuild } from '../../core/services/mcp-handlers/utils.js';
|
|
35
|
+
import { EdgeStore } from '../../core/services/edge-store.js';
|
|
36
|
+
import { McpWatcher } from '../../core/services/mcp-watcher.js';
|
|
37
|
+
import { openloreAnalyze } from '../../api/analyze.js';
|
|
38
|
+
import { TOOL_DEFINITIONS, TOOL_PRESETS, selectActiveTools } from './mcp.js';
|
|
39
|
+
/**
|
|
40
|
+
* Debounce before a full call-graph re-analyze after edits settle. Longer than
|
|
41
|
+
* the watcher's signature debounce (WATCH_DEBOUNCE_MS=400) because re-analysis
|
|
42
|
+
* is heavier; a few seconds of quiet is the signal that an edit burst is done.
|
|
43
|
+
*/
|
|
44
|
+
const REANALYZE_DEBOUNCE_MS = 4000;
|
|
45
|
+
const _require = createRequire(import.meta.url);
|
|
46
|
+
const _pkgVersion = _require('../../../package.json').version;
|
|
47
|
+
const SERVE_FILE = 'serve.json';
|
|
48
|
+
const MAX_BODY_BYTES = 1_000_000; // tool args are small; reject anything larger
|
|
49
|
+
function serveFilePath(root) {
|
|
50
|
+
return join(root, OPENLORE_DIR, SERVE_FILE);
|
|
51
|
+
}
|
|
52
|
+
/** Read a JSON request body with a hard size ceiling. Rejects on overflow/parse error. */
|
|
53
|
+
function readJsonBody(req) {
|
|
54
|
+
return new Promise((resolve_, reject) => {
|
|
55
|
+
const chunks = [];
|
|
56
|
+
let size = 0;
|
|
57
|
+
req.on('data', (c) => {
|
|
58
|
+
size += c.length;
|
|
59
|
+
if (size > MAX_BODY_BYTES) {
|
|
60
|
+
reject(new Error('request body too large'));
|
|
61
|
+
req.destroy();
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
chunks.push(c);
|
|
65
|
+
});
|
|
66
|
+
req.on('end', () => {
|
|
67
|
+
const raw = Buffer.concat(chunks).toString('utf-8').trim();
|
|
68
|
+
if (!raw)
|
|
69
|
+
return resolve_({});
|
|
70
|
+
try {
|
|
71
|
+
resolve_(JSON.parse(raw));
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
reject(new Error('invalid JSON body'));
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
req.on('error', reject);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
function sendJson(res, status, body) {
|
|
81
|
+
const text = JSON.stringify(body);
|
|
82
|
+
res.writeHead(status, {
|
|
83
|
+
'content-type': 'application/json',
|
|
84
|
+
'content-length': Buffer.byteLength(text),
|
|
85
|
+
});
|
|
86
|
+
res.end(text);
|
|
87
|
+
}
|
|
88
|
+
/** Read <root>/.openlore/serve.json if present. */
|
|
89
|
+
async function readDescriptor(root) {
|
|
90
|
+
try {
|
|
91
|
+
return JSON.parse(await readFile(serveFilePath(root), 'utf-8'));
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Confirm a descriptor points at a LIVE openlore daemon — not a stale serve.json
|
|
99
|
+
* left by a SIGKILL'd process, nor a recycled port now owned by something else.
|
|
100
|
+
* Verifies GET /health returns our `ok: true` shape, so we never signal a PID we
|
|
101
|
+
* can't positively identify as our own daemon.
|
|
102
|
+
*/
|
|
103
|
+
async function daemonAlive(desc) {
|
|
104
|
+
try {
|
|
105
|
+
const res = await fetch(`http://${desc.host}:${desc.port}/health`, {
|
|
106
|
+
signal: AbortSignal.timeout(1000),
|
|
107
|
+
});
|
|
108
|
+
if (!res.ok)
|
|
109
|
+
return false;
|
|
110
|
+
const body = (await res.json().catch(() => null));
|
|
111
|
+
return body?.ok === true;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/** Stop a daemon previously started for `root` by signalling its recorded pid. */
|
|
118
|
+
async function stopDaemon(root) {
|
|
119
|
+
const path = serveFilePath(root);
|
|
120
|
+
const desc = await readDescriptor(root);
|
|
121
|
+
if (!desc) {
|
|
122
|
+
logger.warning(`No running openlore serve daemon found for ${root}.`);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
// Only signal a PID we've confirmed is our live daemon on the recorded port.
|
|
126
|
+
// A stale serve.json could otherwise point at a recycled PID belonging to an
|
|
127
|
+
// unrelated process — SIGTERM to that would be a nasty surprise.
|
|
128
|
+
if (!(await daemonAlive(desc))) {
|
|
129
|
+
await unlink(path).catch(() => { });
|
|
130
|
+
logger.warning(`No live daemon at ${desc.host}:${desc.port}; removed stale ${SERVE_FILE}.`);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
try {
|
|
134
|
+
process.kill(desc.pid, 'SIGTERM');
|
|
135
|
+
logger.success(`Sent SIGTERM to openlore serve (pid ${desc.pid}).`);
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
await unlink(path).catch(() => { });
|
|
139
|
+
logger.warning(`Daemon pid ${desc.pid} not signalable; removed stale ${SERVE_FILE}.`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
export async function startServe(options) {
|
|
143
|
+
const root = resolve(options.directory ?? process.cwd());
|
|
144
|
+
if (options.stop) {
|
|
145
|
+
await stopDaemon(root);
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
const host = options.host ?? '127.0.0.1';
|
|
149
|
+
const presetName = options.preset ?? 'navigation';
|
|
150
|
+
if (presetName !== 'all' && !TOOL_PRESETS[presetName]) {
|
|
151
|
+
logger.error(`Unknown --preset "${presetName}". Known: ${Object.keys(TOOL_PRESETS).join(', ')}, all.`);
|
|
152
|
+
process.exitCode = 1;
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
// Active tool surface: 'all' = every tool, otherwise the named preset.
|
|
156
|
+
const activeNames = new Set((presetName === 'all'
|
|
157
|
+
? TOOL_DEFINITIONS
|
|
158
|
+
: selectActiveTools(TOOL_DEFINITIONS, { preset: presetName })).map((t) => t.name));
|
|
159
|
+
// Don't start a second daemon for a root already served by a healthy one —
|
|
160
|
+
// a concurrent spawn (two MCP clients, or pi + MCP) would otherwise leave two
|
|
161
|
+
// watchers racing on the same .openlore/analysis. Reuse the live one instead.
|
|
162
|
+
const existing = await readDescriptor(root);
|
|
163
|
+
if (existing && (await daemonAlive(existing))) {
|
|
164
|
+
logger.success(`openlore serve already running for ${root} at http://${existing.host}:${existing.port} — reusing.`);
|
|
165
|
+
return {
|
|
166
|
+
port: existing.port,
|
|
167
|
+
host: existing.host,
|
|
168
|
+
token: existing.token,
|
|
169
|
+
baseUrl: `http://${existing.host}:${existing.port}`,
|
|
170
|
+
close: async () => { }, // never tear down a daemon this process didn't start
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
const token = options.token ?? (process.env.OPENLORE_SERVE_TOKEN || undefined);
|
|
174
|
+
const startedAt = new Date().toISOString();
|
|
175
|
+
const startMs = Date.now();
|
|
176
|
+
// Per-directory schema-reset flag. Set once (at startup or first request);
|
|
177
|
+
// cleared after waitForGraphRebuild() succeeds so subsequent requests don't
|
|
178
|
+
// re-open EdgeStore. Uses a Map because the daemon can serve multiple dirs.
|
|
179
|
+
const schemaResetByDir = new Map();
|
|
180
|
+
// Single forced-rebuild coordinator, keyed by directory. BOTH the schema-reset
|
|
181
|
+
// healer (below) and the watcher's debounced re-analyze (further down) funnel
|
|
182
|
+
// through here, so at most one `analyze --force` ever runs per directory at a
|
|
183
|
+
// time — two concurrent ones would clear+repopulate the same EdgeStore
|
|
184
|
+
// non-atomically and could tear the graph. A trigger that arrives mid-rebuild
|
|
185
|
+
// is coalesced into a single follow-up run rather than dropped or stacked.
|
|
186
|
+
//
|
|
187
|
+
// Why serve must drive this at all: a schema-version bump makes EdgeStore.open()
|
|
188
|
+
// wipe the DB and report wasReset ONCE (the on-disk version is rewritten on that
|
|
189
|
+
// first open, so every later open reports false). serve consumes that flag at
|
|
190
|
+
// startup / first request, so the watcher's wasReset-keyed self-heal never sees
|
|
191
|
+
// it; without an explicit trigger, waitForGraphRebuild() would poll an empty
|
|
192
|
+
// store until it times out.
|
|
193
|
+
const rebuildRunning = new Set();
|
|
194
|
+
const rebuildPending = new Set();
|
|
195
|
+
function triggerRebuild(directory) {
|
|
196
|
+
if (rebuildRunning.has(directory)) {
|
|
197
|
+
rebuildPending.add(directory);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
rebuildRunning.add(directory);
|
|
201
|
+
logger.discovery(`[serve] rebuilding graph index (${directory})`);
|
|
202
|
+
void openloreAnalyze({ rootPath: directory, force: true })
|
|
203
|
+
.then(() => logger.discovery(`[serve] graph index rebuilt (${directory})`))
|
|
204
|
+
.catch((err) => logger.warning(`[serve] graph rebuild failed: ${err instanceof Error ? err.message : String(err)}`))
|
|
205
|
+
.finally(() => {
|
|
206
|
+
rebuildRunning.delete(directory);
|
|
207
|
+
if (rebuildPending.delete(directory)) {
|
|
208
|
+
// Re-run for the coalesced trigger. For the served root, go back through
|
|
209
|
+
// the debounce so sustained editing doesn't spin back-to-back analyzes;
|
|
210
|
+
// other dirs (per-request schema heal) re-run immediately.
|
|
211
|
+
if (directory === root)
|
|
212
|
+
scheduleReanalyze();
|
|
213
|
+
else
|
|
214
|
+
triggerRebuild(directory);
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
const server = createServer((req, res) => {
|
|
219
|
+
void handleRequest(req, res).catch((err) => {
|
|
220
|
+
sendJson(res, 500, { error: err instanceof Error ? err.message : String(err) });
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
async function handleRequest(req, res) {
|
|
224
|
+
const url = new URL(req.url ?? '/', `http://${host}`);
|
|
225
|
+
// Token gate (skips /health so liveness checks need no secret).
|
|
226
|
+
if (token && url.pathname !== '/health') {
|
|
227
|
+
if (req.headers['x-openlore-token'] !== token) {
|
|
228
|
+
sendJson(res, 401, { error: 'invalid or missing x-openlore-token' });
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
if (req.method === 'GET' && url.pathname === '/health') {
|
|
233
|
+
sendJson(res, 200, {
|
|
234
|
+
ok: true,
|
|
235
|
+
version: _pkgVersion,
|
|
236
|
+
root,
|
|
237
|
+
preset: presetName,
|
|
238
|
+
tools: [...activeNames],
|
|
239
|
+
uptimeMs: Date.now() - startMs,
|
|
240
|
+
});
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
if (req.method === 'POST' && url.pathname.startsWith('/tool/')) {
|
|
244
|
+
const name = decodeURIComponent(url.pathname.slice('/tool/'.length));
|
|
245
|
+
// The preset is ADVISORY (reported by /health for clients that want a
|
|
246
|
+
// curated list, e.g. the Pi extension). The daemon dispatches any known
|
|
247
|
+
// tool so it can back multiple clients with different surfaces — notably
|
|
248
|
+
// the MCP server, which delegates all ~45 tools here. Unknown tools 404
|
|
249
|
+
// via UnknownToolError below.
|
|
250
|
+
let body;
|
|
251
|
+
try {
|
|
252
|
+
body = await readJsonBody(req);
|
|
253
|
+
}
|
|
254
|
+
catch (err) {
|
|
255
|
+
sendJson(res, 400, { error: err instanceof Error ? err.message : 'bad request' });
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
const args = body.args ?? {};
|
|
259
|
+
// Directory precedence: explicit body.directory → args.directory → served root.
|
|
260
|
+
const directory = (typeof body.directory === 'string' && body.directory)
|
|
261
|
+
|| (typeof args.directory === 'string' && args.directory)
|
|
262
|
+
|| root;
|
|
263
|
+
// Ensure handlers receive directory in args (they read it from there).
|
|
264
|
+
if (typeof args.directory !== 'string')
|
|
265
|
+
args.directory = directory;
|
|
266
|
+
try {
|
|
267
|
+
await validateDirectory(directory);
|
|
268
|
+
}
|
|
269
|
+
catch (err) {
|
|
270
|
+
sendJson(res, 400, { error: err instanceof Error ? err.message : 'invalid directory' });
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
// Auto-heal schema mismatch: on first request for a directory, open
|
|
274
|
+
// EdgeStore once to detect wasReset; cache the result so we never
|
|
275
|
+
// re-open on subsequent requests. If reset, block until rebuild done.
|
|
276
|
+
if (!schemaResetByDir.has(directory)) {
|
|
277
|
+
try {
|
|
278
|
+
const analysisDir = join(directory, OPENLORE_DIR, OPENLORE_ANALYSIS_SUBDIR);
|
|
279
|
+
if (EdgeStore.exists(analysisDir)) {
|
|
280
|
+
const es = EdgeStore.open(EdgeStore.dbPath(analysisDir));
|
|
281
|
+
schemaResetByDir.set(directory, es.wasReset);
|
|
282
|
+
es.close();
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
schemaResetByDir.set(directory, false);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
catch {
|
|
289
|
+
schemaResetByDir.set(directory, false);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
if (schemaResetByDir.get(directory)) {
|
|
293
|
+
logger.debug(`[serve] Schema mismatch — waiting for graph rebuild before dispatching…`);
|
|
294
|
+
// Kick the rebuild ourselves (coalesced) — nothing else will, because the
|
|
295
|
+
// wasReset flag has already been consumed by the open above.
|
|
296
|
+
triggerRebuild(directory);
|
|
297
|
+
// waitForGraphRebuild polls readCachedContext until edgeStore is
|
|
298
|
+
// non-null. readCachedContext invalidates on llm-context.json mtime,
|
|
299
|
+
// which openloreAnalyze rewrites as its last step — so the poll sees
|
|
300
|
+
// the rebuilt state as soon as analyze completes.
|
|
301
|
+
const rebuilt = await waitForGraphRebuild(directory, 60_000);
|
|
302
|
+
schemaResetByDir.set(directory, !rebuilt);
|
|
303
|
+
if (!rebuilt)
|
|
304
|
+
logger.warning(`[serve] Graph rebuild timed out — graph tools may return empty results.`);
|
|
305
|
+
}
|
|
306
|
+
try {
|
|
307
|
+
const result = await dispatchTool(name, args, directory);
|
|
308
|
+
sendJson(res, 200, result ?? null);
|
|
309
|
+
}
|
|
310
|
+
catch (err) {
|
|
311
|
+
if (err instanceof UnknownToolError) {
|
|
312
|
+
sendJson(res, 404, { error: err.message });
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
sendJson(res, 500, { error: err instanceof Error ? err.message : String(err) });
|
|
316
|
+
}
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
sendJson(res, 404, { error: `No route for ${req.method} ${url.pathname}` });
|
|
320
|
+
}
|
|
321
|
+
// Bind (port 0 → OS picks a free ephemeral port).
|
|
322
|
+
const port = options.port ? parseInt(options.port, 10) : 0;
|
|
323
|
+
await new Promise((resolve_, reject) => {
|
|
324
|
+
server.once('error', reject);
|
|
325
|
+
server.listen(port, host, resolve_);
|
|
326
|
+
});
|
|
327
|
+
const addr = server.address();
|
|
328
|
+
const boundPort = typeof addr === 'object' && addr ? addr.port : port;
|
|
329
|
+
const descriptor = {
|
|
330
|
+
port: boundPort,
|
|
331
|
+
pid: process.pid,
|
|
332
|
+
host,
|
|
333
|
+
token,
|
|
334
|
+
startedAt,
|
|
335
|
+
version: _pkgVersion,
|
|
336
|
+
};
|
|
337
|
+
await mkdir(join(root, OPENLORE_DIR), { recursive: true });
|
|
338
|
+
await writeFile(serveFilePath(root), JSON.stringify(descriptor, null, 2) + '\n', 'utf-8');
|
|
339
|
+
logger.success(`openlore serve listening on http://${host}:${boundPort} (preset: ${presetName})`);
|
|
340
|
+
logger.discovery(`Discovery file: ${serveFilePath(root)}`);
|
|
341
|
+
// Pre-populate the schema-reset flag for the served root so the startup
|
|
342
|
+
// warning fires immediately and the first request doesn't pay the open cost.
|
|
343
|
+
try {
|
|
344
|
+
const analysisDir = join(root, OPENLORE_DIR, OPENLORE_ANALYSIS_SUBDIR);
|
|
345
|
+
if (EdgeStore.exists(analysisDir)) {
|
|
346
|
+
const es = EdgeStore.open(EdgeStore.dbPath(analysisDir));
|
|
347
|
+
const reset = es.wasReset;
|
|
348
|
+
es.close();
|
|
349
|
+
schemaResetByDir.set(root, reset);
|
|
350
|
+
if (reset) {
|
|
351
|
+
logger.warning(`[serve] Schema version mismatch detected — graph index is being rebuilt in the background. ` +
|
|
352
|
+
`Graph-dependent tools will wait for completion on first request.`);
|
|
353
|
+
// Actually start the rebuild — the warning above is only honest if
|
|
354
|
+
// something kicks `analyze --force`. The watcher won't: its self-heal
|
|
355
|
+
// keys off wasReset, which this startup open just consumed.
|
|
356
|
+
triggerRebuild(root);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
schemaResetByDir.set(root, false);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
catch (err) {
|
|
364
|
+
logger.debug(`[serve] Failed to check schema on startup: ${err instanceof Error ? err.message : String(err)}`);
|
|
365
|
+
schemaResetByDir.set(root, false);
|
|
366
|
+
}
|
|
367
|
+
// ── Freshness: watcher (signatures + vector) + debounced call-graph re-analyze ──
|
|
368
|
+
// The watcher keeps signatures/vector fresh between commits and primes the read
|
|
369
|
+
// cache in place. Its onBatchFlushed hook schedules a heavier full re-analyze so
|
|
370
|
+
// the CALL GRAPH (which the watcher deliberately skips) also stays fresh between
|
|
371
|
+
// commits — turning divergence from "wait for the next commit" into continuous.
|
|
372
|
+
let watcher;
|
|
373
|
+
let reanalyzeTimer;
|
|
374
|
+
// Debounced call-graph re-analyze. Routes through triggerRebuild so it shares
|
|
375
|
+
// the single-flight lock with the schema-reset healer (no concurrent --force).
|
|
376
|
+
function scheduleReanalyze() {
|
|
377
|
+
if (reanalyzeTimer)
|
|
378
|
+
clearTimeout(reanalyzeTimer);
|
|
379
|
+
reanalyzeTimer = setTimeout(() => triggerRebuild(root), REANALYZE_DEBOUNCE_MS);
|
|
380
|
+
}
|
|
381
|
+
if (options.watch !== false) {
|
|
382
|
+
watcher = new McpWatcher({ rootPath: root, onBatchFlushed: () => scheduleReanalyze() });
|
|
383
|
+
try {
|
|
384
|
+
await watcher.start();
|
|
385
|
+
logger.discovery(`[serve] watching ${root} — signatures/vector live, call-graph re-analyze debounced`);
|
|
386
|
+
}
|
|
387
|
+
catch (err) {
|
|
388
|
+
logger.warning(`[serve] watcher failed to start: ${err instanceof Error ? err.message : String(err)}`);
|
|
389
|
+
watcher = undefined;
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
// Clean shutdown: drop the descriptor so clients don't reuse a dead port.
|
|
393
|
+
// Signal handlers exit the process; the returned close() is for in-process
|
|
394
|
+
// callers (tests) that must not kill the host.
|
|
395
|
+
// Store handler refs so teardown() can remove them — without this, every
|
|
396
|
+
// startServe() call (including each test) adds permanent process listeners
|
|
397
|
+
// that accumulate and trigger MaxListenersExceededWarning.
|
|
398
|
+
let shuttingDown = false;
|
|
399
|
+
const teardown = async () => {
|
|
400
|
+
if (shuttingDown)
|
|
401
|
+
return;
|
|
402
|
+
shuttingDown = true;
|
|
403
|
+
process.off('SIGINT', onSigInt);
|
|
404
|
+
process.off('SIGTERM', onSigTerm);
|
|
405
|
+
if (reanalyzeTimer)
|
|
406
|
+
clearTimeout(reanalyzeTimer);
|
|
407
|
+
if (watcher)
|
|
408
|
+
await watcher.stop().catch(() => { });
|
|
409
|
+
await unlink(serveFilePath(root)).catch(() => { });
|
|
410
|
+
await new Promise((res) => server.close(() => res()));
|
|
411
|
+
};
|
|
412
|
+
const exitAfterTeardown = async () => {
|
|
413
|
+
await teardown();
|
|
414
|
+
process.exit(0);
|
|
415
|
+
};
|
|
416
|
+
const onSigInt = () => void exitAfterTeardown();
|
|
417
|
+
const onSigTerm = () => void exitAfterTeardown();
|
|
418
|
+
process.on('SIGINT', onSigInt);
|
|
419
|
+
process.on('SIGTERM', onSigTerm);
|
|
420
|
+
return {
|
|
421
|
+
port: boundPort,
|
|
422
|
+
host,
|
|
423
|
+
token,
|
|
424
|
+
baseUrl: `http://${host}:${boundPort}`,
|
|
425
|
+
close: teardown,
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
export const serveCommand = new Command('serve')
|
|
429
|
+
.description('Start a warm local HTTP daemon exposing openlore tools (loopback, for editor/agent integrations like Pi)')
|
|
430
|
+
.option('-d, --directory <path>', 'Project root to serve (discovery file written here)', process.cwd())
|
|
431
|
+
.option('-p, --port <number>', 'Port to bind (default: ephemeral free port)')
|
|
432
|
+
.option('--host <host>', 'Host to bind', '127.0.0.1')
|
|
433
|
+
.option('--preset <name>', 'Advisory tool surface reported by /health (minimal, navigation, or all). The daemon still ' +
|
|
434
|
+
'dispatches any known tool; clients curate their own surface. Default: navigation', 'navigation')
|
|
435
|
+
.option('--token <token>', 'Require this token as the x-openlore-token header (default: $OPENLORE_SERVE_TOKEN)')
|
|
436
|
+
.option('--no-watch', 'Disable the freshness watcher + debounced call-graph re-analyze')
|
|
437
|
+
.option('--stop', 'Stop a running daemon for --directory and exit')
|
|
438
|
+
.addHelpText('after', `
|
|
439
|
+
Examples:
|
|
440
|
+
$ openlore serve Warm daemon, navigation preset, ephemeral port
|
|
441
|
+
$ openlore serve --preset all --port 7077 All tools on a fixed port
|
|
442
|
+
$ openlore serve --stop Stop the daemon serving this directory
|
|
443
|
+
|
|
444
|
+
$ curl 127.0.0.1:$PORT/health
|
|
445
|
+
$ curl -XPOST 127.0.0.1:$PORT/tool/orient -d '{"args":{"task":"add rate limiting"}}'
|
|
446
|
+
`)
|
|
447
|
+
.action(async (options) => {
|
|
448
|
+
await startServe(options);
|
|
449
|
+
});
|
|
450
|
+
//# sourceMappingURL=serve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4QpC,eAAO,MAAM,YAAY,SAgLrB,CAAC"}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* Assets are read from the `examples/` directory shipped with the openlore package.
|
|
16
16
|
*/
|
|
17
17
|
import { Command } from 'commander';
|
|
18
|
-
import { readFile, writeFile, mkdir, access } from 'node:fs/promises';
|
|
18
|
+
import { readFile, writeFile, mkdir, access, unlink } from 'node:fs/promises';
|
|
19
19
|
import { join, dirname } from 'node:path';
|
|
20
20
|
import { homedir } from 'node:os';
|
|
21
21
|
import { fileURLToPath } from 'node:url';
|
|
@@ -88,7 +88,7 @@ async function copyFile(src, dest, force) {
|
|
|
88
88
|
// ============================================================================
|
|
89
89
|
// SKILL MANIFESTS
|
|
90
90
|
// ============================================================================
|
|
91
|
-
function buildManifest(projectRoot) {
|
|
91
|
+
function buildManifest(projectRoot, piGlobal = false) {
|
|
92
92
|
const ex = join(PACKAGE_ROOT, 'examples');
|
|
93
93
|
const VIBE_SKILLS = [
|
|
94
94
|
'openlore-analyze-codebase',
|
|
@@ -182,13 +182,23 @@ function buildManifest(projectRoot) {
|
|
|
182
182
|
dest: join(projectRoot, '.opencode', 'prompts', 'sisyphus-sdd.md'),
|
|
183
183
|
},
|
|
184
184
|
],
|
|
185
|
+
// Pi (pi.dev) — compiled JS extension from dist/pi/. Project-local by default;
|
|
186
|
+
// --global installs it for every project via ~/.pi/agent/extensions/.
|
|
187
|
+
pi: [
|
|
188
|
+
{
|
|
189
|
+
src: join(PACKAGE_ROOT, 'dist', 'pi', 'extension.js'),
|
|
190
|
+
dest: piGlobal
|
|
191
|
+
? join(homedir(), '.pi', 'agent', 'extensions', 'openlore.js')
|
|
192
|
+
: join(projectRoot, '.pi', 'extensions', 'openlore.js'),
|
|
193
|
+
},
|
|
194
|
+
],
|
|
185
195
|
};
|
|
186
196
|
}
|
|
187
197
|
// ============================================================================
|
|
188
198
|
// CORE
|
|
189
199
|
// ============================================================================
|
|
190
|
-
async function runSetup(projectRoot, tools, force) {
|
|
191
|
-
const manifest = buildManifest(projectRoot);
|
|
200
|
+
async function runSetup(projectRoot, tools, force, piGlobal = false) {
|
|
201
|
+
const manifest = buildManifest(projectRoot, piGlobal);
|
|
192
202
|
const results = [];
|
|
193
203
|
for (const tool of tools) {
|
|
194
204
|
for (const entry of manifest[tool]) {
|
|
@@ -196,6 +206,14 @@ async function runSetup(projectRoot, tools, force) {
|
|
|
196
206
|
logger.warning(`setup: source not found — ${entry.src} (re-install openlore to fix)`);
|
|
197
207
|
continue;
|
|
198
208
|
}
|
|
209
|
+
// Remove the old .ts counterpart when installing the .js Pi extension.
|
|
210
|
+
// Prior versions of setup distributed openlore.ts; Pi loads all files in the
|
|
211
|
+
// extensions dir, so both registering the same tools causes a conflict.
|
|
212
|
+
if (tool === 'pi' && entry.dest.endsWith('.js')) {
|
|
213
|
+
const oldTs = entry.dest.slice(0, -3) + '.ts';
|
|
214
|
+
if (await fileExists(oldTs))
|
|
215
|
+
await unlink(oldTs);
|
|
216
|
+
}
|
|
199
217
|
const status = await copyFile(entry.src, entry.dest, force);
|
|
200
218
|
const rel = entry.dest.startsWith(projectRoot)
|
|
201
219
|
? entry.dest.slice(projectRoot.length).replace(/^\//, '')
|
|
@@ -211,17 +229,18 @@ async function runSetup(projectRoot, tools, force) {
|
|
|
211
229
|
export const setupCommand = new Command('setup')
|
|
212
230
|
.description('Install workflow skills and agent integration files into this project.\n' +
|
|
213
231
|
'Copies static assets from the openlore package — safe to re-run (skips existing files).')
|
|
214
|
-
.option('--tools <list>', 'Comma-separated list of tools to install: vibe, cline, claude, opencode, gsd, bmad (default: all)')
|
|
232
|
+
.option('--tools <list>', 'Comma-separated list of tools to install: vibe, cline, claude, opencode, gsd, bmad, pi (default: all)')
|
|
215
233
|
.option('--force', 'Overwrite existing files (use after upgrading openlore to pull in updated skills)', false)
|
|
216
234
|
.option('--dir <path>', 'Project root directory', process.cwd())
|
|
235
|
+
.option('--global', 'For the pi target: install the extension to ~/.pi/agent/extensions/ instead of the project', false)
|
|
217
236
|
.action(async (options) => {
|
|
218
237
|
const projectRoot = options.dir;
|
|
219
|
-
const allTools = ['vibe', 'cline', 'gsd', 'bmad', 'claude', 'opencode', 'omoa'];
|
|
238
|
+
const allTools = ['vibe', 'cline', 'gsd', 'bmad', 'claude', 'opencode', 'omoa', 'pi'];
|
|
220
239
|
let tools;
|
|
221
240
|
if (options.tools) {
|
|
222
241
|
tools = options.tools.split(',').map((t) => t.trim()).filter((t) => allTools.includes(t));
|
|
223
242
|
if (tools.length === 0) {
|
|
224
|
-
logger.error('setup: no valid tools specified. Valid values: vibe, cline, gsd, bmad, claude, opencode, omoa');
|
|
243
|
+
logger.error('setup: no valid tools specified. Valid values: vibe, cline, gsd, bmad, claude, opencode, omoa, pi');
|
|
225
244
|
process.exit(1);
|
|
226
245
|
}
|
|
227
246
|
}
|
|
@@ -262,6 +281,10 @@ export const setupCommand = new Command('setup')
|
|
|
262
281
|
value: 'omoa',
|
|
263
282
|
checked: omoaDetected,
|
|
264
283
|
},
|
|
284
|
+
{
|
|
285
|
+
name: 'Pi (.pi/extensions/openlore.js — warm-daemon extension; --global for ~/.pi)',
|
|
286
|
+
value: 'pi',
|
|
287
|
+
},
|
|
265
288
|
],
|
|
266
289
|
});
|
|
267
290
|
if (selected.length === 0) {
|
|
@@ -279,7 +302,7 @@ export const setupCommand = new Command('setup')
|
|
|
279
302
|
logger.success(`Installing workflow skills into ${projectRoot}`);
|
|
280
303
|
let results;
|
|
281
304
|
try {
|
|
282
|
-
results = await runSetup(projectRoot, tools, options.force);
|
|
305
|
+
results = await runSetup(projectRoot, tools, options.force, options.global);
|
|
283
306
|
}
|
|
284
307
|
catch (err) {
|
|
285
308
|
logger.error(`setup failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
@@ -305,6 +328,7 @@ export const setupCommand = new Command('setup')
|
|
|
305
328
|
gsd: 'get-shit-done (GSD)',
|
|
306
329
|
bmad: 'BMAD',
|
|
307
330
|
omoa: 'oh-my-openagent (SDD plugins)',
|
|
331
|
+
pi: 'Pi (pi.dev)',
|
|
308
332
|
};
|
|
309
333
|
for (const tool of tools) {
|
|
310
334
|
const entries = byTool[tool] ?? [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"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"}
|