@squadrules/mcp 5.4.2 → 5.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/cli/api-client.d.ts +3 -1
- package/dist/cli/api-client.d.ts.map +1 -1
- package/dist/cli/api-client.js +7 -16
- package/dist/cli/api-client.js.map +1 -1
- package/dist/cli/backend/action-backend.d.ts +99 -0
- package/dist/cli/backend/action-backend.d.ts.map +1 -0
- package/dist/cli/backend/action-backend.js +2 -0
- package/dist/cli/backend/action-backend.js.map +1 -0
- package/dist/cli/backend/http-backend.d.ts +31 -0
- package/dist/cli/backend/http-backend.d.ts.map +1 -0
- package/dist/cli/backend/http-backend.js +38 -0
- package/dist/cli/backend/http-backend.js.map +1 -0
- package/dist/cli/backend/local-backend.d.ts +37 -0
- package/dist/cli/backend/local-backend.d.ts.map +1 -0
- package/dist/cli/backend/local-backend.js +166 -0
- package/dist/cli/backend/local-backend.js.map +1 -0
- package/dist/cli/backend/resolve-backend.d.ts +29 -0
- package/dist/cli/backend/resolve-backend.d.ts.map +1 -0
- package/dist/cli/backend/resolve-backend.js +37 -0
- package/dist/cli/backend/resolve-backend.js.map +1 -0
- package/dist/cli/client-factory.d.ts +6 -7
- package/dist/cli/client-factory.d.ts.map +1 -1
- package/dist/cli/client-factory.js +8 -42
- package/dist/cli/client-factory.js.map +1 -1
- package/dist/cli/commands/{search.d.ts → activate.d.ts} +2 -2
- package/dist/cli/commands/activate.d.ts.map +1 -0
- package/dist/cli/commands/activate.js +31 -0
- package/dist/cli/commands/activate.js.map +1 -0
- package/dist/cli/commands/cli-train.d.ts +5 -1
- package/dist/cli/commands/cli-train.d.ts.map +1 -1
- package/dist/cli/commands/cli-train.js +40 -139
- package/dist/cli/commands/cli-train.js.map +1 -1
- package/dist/cli/commands/delete.d.ts +1 -1
- package/dist/cli/commands/delete.d.ts.map +1 -1
- package/dist/cli/commands/delete.js +11 -6
- package/dist/cli/commands/delete.js.map +1 -1
- package/dist/cli/commands/export.d.ts +12 -5
- package/dist/cli/commands/export.d.ts.map +1 -1
- package/dist/cli/commands/export.js +117 -55
- package/dist/cli/commands/export.js.map +1 -1
- package/dist/cli/commands/{begin.d.ts → forward.d.ts} +2 -2
- package/dist/cli/commands/forward.d.ts.map +1 -0
- package/dist/cli/commands/forward.js +31 -0
- package/dist/cli/commands/forward.js.map +1 -0
- package/dist/cli/commands/login.d.ts +8 -2
- package/dist/cli/commands/login.d.ts.map +1 -1
- package/dist/cli/commands/login.js +53 -13
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/commands/logout.d.ts.map +1 -1
- package/dist/cli/commands/logout.js +3 -1
- package/dist/cli/commands/logout.js.map +1 -1
- package/dist/cli/commands/{attest.d.ts → reward.d.ts} +2 -2
- package/dist/cli/commands/reward.d.ts.map +1 -0
- package/dist/cli/commands/{attest.js → reward.js} +16 -17
- package/dist/cli/commands/reward.js.map +1 -0
- package/dist/cli/commands/spaces.d.ts +2 -2
- package/dist/cli/commands/spaces.d.ts.map +1 -1
- package/dist/cli/commands/spaces.js +12 -7
- package/dist/cli/commands/spaces.js.map +1 -1
- package/dist/cli/commands/token.d.ts.map +1 -1
- package/dist/cli/commands/token.js +7 -3
- package/dist/cli/commands/token.js.map +1 -1
- package/dist/cli/commands/tune.d.ts +6 -0
- package/dist/cli/commands/tune.d.ts.map +1 -0
- package/dist/cli/commands/{update.js → tune.js} +34 -24
- package/dist/cli/commands/tune.js.map +1 -0
- package/dist/cli/config.d.ts +4 -2
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +6 -3
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/fetch-error.d.ts +6 -0
- package/dist/cli/fetch-error.d.ts.map +1 -1
- package/dist/cli/fetch-error.js +18 -0
- package/dist/cli/fetch-error.js.map +1 -1
- package/dist/cli/format.d.ts +20 -0
- package/dist/cli/format.d.ts.map +1 -0
- package/dist/cli/format.js +18 -0
- package/dist/cli/format.js.map +1 -0
- package/dist/cli/local-target.d.ts +11 -0
- package/dist/cli/local-target.d.ts.map +1 -0
- package/dist/cli/local-target.js +14 -0
- package/dist/cli/local-target.js.map +1 -0
- package/dist/cli/output.d.ts +20 -3
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +14 -6
- package/dist/cli/output.js.map +1 -1
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +12 -7
- package/dist/cli/program.js.map +1 -1
- package/dist/cli/render.d.ts +37 -0
- package/dist/cli/render.d.ts.map +1 -0
- package/dist/cli/render.js +179 -0
- package/dist/cli/render.js.map +1 -0
- package/dist/cli/resolve-timeout.d.ts +16 -0
- package/dist/cli/resolve-timeout.d.ts.map +1 -0
- package/dist/cli/resolve-timeout.js +43 -0
- package/dist/cli/resolve-timeout.js.map +1 -0
- package/dist/cli/skill-zip-local-write.d.ts +6 -4
- package/dist/cli/skill-zip-local-write.d.ts.map +1 -1
- package/dist/cli/skill-zip-local-write.js +5 -3
- package/dist/cli/skill-zip-local-write.js.map +1 -1
- package/dist/cli/train-batch.d.ts +20 -0
- package/dist/cli/train-batch.d.ts.map +1 -0
- package/dist/cli/train-batch.js +168 -0
- package/dist/cli/train-batch.js.map +1 -0
- package/dist/embed-docs/mem/adapter-migration.md +1 -1
- package/dist/embed-docs/mem/bulk-insert-adapters-via-cli.md +1 -1
- package/dist/embed-docs/mem/challenge-type-guide.md +1 -1
- package/dist/embed-docs/mem/create-new-protocol.md +1 -1
- package/dist/embed-docs/mem/critic-loop-guide.md +1 -1
- package/dist/embed-docs/mem/critic-loop.md +1 -1
- package/dist/embed-docs/mem/phase-critic-guide.md +1 -1
- package/dist/embed-docs/mem/phase-critic.md +1 -1
- package/dist/embed-docs/mem/protocol-linking-guide.md +1 -1
- package/dist/embed-docs/mem/refine-search.md +1 -1
- package/dist/embed-docs/mem/skill-format-guide.md +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -70
- package/dist/index.js.map +1 -1
- package/dist/resources/embedded-mcp-resources.js +11 -11
- package/dist/runtime/boot-local-runtime.d.ts +37 -0
- package/dist/runtime/boot-local-runtime.d.ts.map +1 -0
- package/dist/runtime/boot-local-runtime.js +122 -0
- package/dist/runtime/boot-local-runtime.js.map +1 -0
- package/dist/services/embedding/lazy-probe.d.ts +7 -0
- package/dist/services/embedding/lazy-probe.d.ts.map +1 -0
- package/dist/services/embedding/lazy-probe.js +26 -0
- package/dist/services/embedding/lazy-probe.js.map +1 -0
- package/dist/ui/assets/{AccountPage-DlzuVTtp.js → AccountPage-BdQTtPDO.js} +1 -1
- package/dist/ui/assets/{index-C77BzNbG.js → index-BI3vM1h6.js} +2 -2
- package/dist/ui/assets/index-Dq6apLxZ.css +2 -0
- package/dist/ui/index.html +2 -2
- package/dist/utils/tenant-context.d.ts +6 -0
- package/dist/utils/tenant-context.d.ts.map +1 -1
- package/dist/utils/tenant-context.js +6 -1
- package/dist/utils/tenant-context.js.map +1 -1
- package/package.json +1 -1
- package/dist/cli/commands/attest.d.ts.map +0 -1
- package/dist/cli/commands/attest.js.map +0 -1
- package/dist/cli/commands/begin.d.ts.map +0 -1
- package/dist/cli/commands/begin.js +0 -27
- package/dist/cli/commands/begin.js.map +0 -1
- package/dist/cli/commands/search.d.ts.map +0 -1
- package/dist/cli/commands/search.js +0 -25
- package/dist/cli/commands/search.js.map +0 -1
- package/dist/cli/commands/update.d.ts +0 -6
- package/dist/cli/commands/update.d.ts.map +0 -1
- package/dist/cli/commands/update.js.map +0 -1
- package/dist/cli/format-next-call.d.ts +0 -2
- package/dist/cli/format-next-call.d.ts.map +0 -1
- package/dist/cli/format-next-call.js +0 -63
- package/dist/cli/format-next-call.js.map +0 -1
- package/dist/ui/assets/index-CSUUmfdT.css +0 -2
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAoBH,OAAO,sCAAsC,CAAC;AA8B9C;;;;GAIG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAiEzD"}
|
package/dist/index.js
CHANGED
|
@@ -5,19 +5,13 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { structuredLogger } from './utils/structured-logger.js';
|
|
7
7
|
import { installGlobalErrorHandlers } from './utils/global-error-handlers.js';
|
|
8
|
-
import { MemoryQdrantStore } from './services/memory/store.js';
|
|
9
8
|
import { startHttpTransport } from './http/http-server.js';
|
|
10
9
|
import { startStdioTransport } from './stdio/stdio-server.js';
|
|
11
|
-
import {
|
|
12
|
-
import { MEM_BOOT_FORCE_INJECT } from './config/mem-boot.js';
|
|
10
|
+
import { bootLocalRuntime } from './runtime/boot-local-runtime.js';
|
|
13
11
|
import { startMetricsServer } from './metrics-server.js';
|
|
14
|
-
import { SERVER_PORT, METRICS_PORT,
|
|
15
|
-
import { qdrantService } from './services/qdrant/index.js';
|
|
16
|
-
import { getEmbeddedRecordStore } from './services/vector-store/embedded-store-singleton.js';
|
|
12
|
+
import { SERVER_PORT, METRICS_PORT, SQUADRULES_LOCAL_ARTIFACT_DIRS, TRANSPORT_TYPE } from './config.js';
|
|
17
13
|
import { resolveLanceDbDir } from './services/vector-store/lancedb-connection.js';
|
|
18
14
|
import { composeStdioModeBanner } from './stdio/stdio-banner.js';
|
|
19
|
-
import { triggerQdrantSnapshot } from './services/qdrant/snapshots.js';
|
|
20
|
-
import { probeEmbeddingDimension } from './services/embedding/service.js';
|
|
21
15
|
import { installQdrantFetchCompatibility } from './services/qdrant/undici-compat.js';
|
|
22
16
|
import path from 'node:path';
|
|
23
17
|
import { pathToFileURL } from 'node:url';
|
|
@@ -35,32 +29,6 @@ function isDirectRun() {
|
|
|
35
29
|
return false;
|
|
36
30
|
}
|
|
37
31
|
}
|
|
38
|
-
/**
|
|
39
|
-
* Wait for Qdrant to be available with retries
|
|
40
|
-
* Uses shorter intervals for faster detection when Qdrant becomes available quickly
|
|
41
|
-
*/
|
|
42
|
-
async function waitForQdrant(memoryStore, maxRetries = 30, intervalMs = 1000) {
|
|
43
|
-
structuredLogger.info('Waiting for Qdrant to be available...');
|
|
44
|
-
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
45
|
-
try {
|
|
46
|
-
const isHealthy = await memoryStore.checkHealth(5000); // 5 second timeout per check
|
|
47
|
-
if (isHealthy) {
|
|
48
|
-
structuredLogger.info(`Qdrant is available after ${attempt} attempt(s)`);
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
catch (err) {
|
|
53
|
-
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
54
|
-
structuredLogger.debug(`Qdrant health check error on attempt ${attempt}: ${errorMessage}`);
|
|
55
|
-
// Health check failed, will retry
|
|
56
|
-
}
|
|
57
|
-
if (attempt < maxRetries) {
|
|
58
|
-
structuredLogger.info(`Qdrant not ready yet (attempt ${attempt}/${maxRetries}), retrying in ${intervalMs}ms...`);
|
|
59
|
-
await new Promise(resolve => setTimeout(resolve, intervalMs));
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
throw new Error(`Qdrant did not become available after ${maxRetries} attempts (${maxRetries * intervalMs / 1000}s)`);
|
|
63
|
-
}
|
|
64
32
|
/**
|
|
65
33
|
* Install signal handlers for graceful shutdown.
|
|
66
34
|
* Without listeners Node terminates immediately on SIGTERM, but open handles
|
|
@@ -95,42 +63,10 @@ export async function runSquadrulesServer() {
|
|
|
95
63
|
if (TRANSPORT_TYPE === 'stdio') {
|
|
96
64
|
process.stderr.write(composeStdioModeBanner(resolveLanceDbDir()));
|
|
97
65
|
}
|
|
98
|
-
//
|
|
99
|
-
//
|
|
100
|
-
//
|
|
101
|
-
|
|
102
|
-
const memoryStore = isQdrantConfigured
|
|
103
|
-
? new MemoryQdrantStore()
|
|
104
|
-
: getEmbeddedRecordStore();
|
|
105
|
-
// Wait for Qdrant to be available before initializing (embedded store is
|
|
106
|
-
// local — no server to wait for).
|
|
107
|
-
if (isQdrantConfigured) {
|
|
108
|
-
await waitForQdrant(memoryStore);
|
|
109
|
-
}
|
|
110
|
-
const embeddingDim = await probeEmbeddingDimension();
|
|
111
|
-
structuredLogger.debug(`embedding dimension: ${embeddingDim}`);
|
|
112
|
-
structuredLogger.info(`vector store: ${isQdrantConfigured ? 'Qdrant' : 'LanceDB (embedded)'}`);
|
|
113
|
-
structuredLogger.info(`embedding: ${EMBEDDING_PROVIDER}`);
|
|
114
|
-
await memoryStore.init();
|
|
115
|
-
structuredLogger.debug('vector store: ready');
|
|
116
|
-
if (isQdrantConfigured && QDRANT_SNAPSHOT_ON_START) {
|
|
117
|
-
const snapshotResult = await triggerQdrantSnapshot(qdrantService, {
|
|
118
|
-
enabled: true,
|
|
119
|
-
directory: QDRANT_SNAPSHOT_DIR,
|
|
120
|
-
reason: 'startup'
|
|
121
|
-
});
|
|
122
|
-
if (!snapshotResult.success) {
|
|
123
|
-
structuredLogger.warn(`Startup snapshot failed: ${snapshotResult.message || 'unknown error'}`);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
structuredLogger.debug('startup snapshot: skipped (embedded store)');
|
|
128
|
-
}
|
|
129
|
-
// Inject mem resources from embedded-mcp-resources into the vector store at boot.
|
|
130
|
-
// Adapters already stored at (or newer than) their shipped version are reused, so a
|
|
131
|
-
// normal restart does no re-embedding; set MEM_BOOT_FORCE_INJECT=true to force a
|
|
132
|
-
// delete-then-retrain (structural-repair path for a corrupted/duplicated store).
|
|
133
|
-
await injectMemResourcesAtBoot(memoryStore, { force: MEM_BOOT_FORCE_INJECT });
|
|
66
|
+
// Shared boot: store selection, embedding probe, init, optional snapshot, and
|
|
67
|
+
// app-space seeding. The server runs every stage (defaults); the CLI local path
|
|
68
|
+
// dials the expensive stages down for fastboot. Same sequence, no drift.
|
|
69
|
+
const { memoryStore } = await bootLocalRuntime();
|
|
134
70
|
// Metrics HTTP server: only when the app serves HTTP (stdio mode avoids any HTTP listeners).
|
|
135
71
|
if (TRANSPORT_TYPE === 'http') {
|
|
136
72
|
startMetricsServer();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|