@zhixuan92/multi-model-agent 4.9.1 → 5.0.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/bin/mmagent.mjs +47 -0
- package/package.json +19 -57
- package/postinstall.mjs +8 -0
- package/LICENSE +0 -21
- package/README.md +0 -306
- package/dist/cli/index.d.ts +0 -62
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -345
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/info.d.ts +0 -22
- package/dist/cli/info.d.ts.map +0 -1
- package/dist/cli/info.js +0 -100
- package/dist/cli/info.js.map +0 -1
- package/dist/cli/logs.d.ts +0 -15
- package/dist/cli/logs.d.ts.map +0 -1
- package/dist/cli/logs.js +0 -102
- package/dist/cli/logs.js.map +0 -1
- package/dist/cli/print-token.d.ts +0 -18
- package/dist/cli/print-token.d.ts.map +0 -1
- package/dist/cli/print-token.js +0 -60
- package/dist/cli/print-token.js.map +0 -1
- package/dist/cli/serve.d.ts +0 -28
- package/dist/cli/serve.d.ts.map +0 -1
- package/dist/cli/serve.js +0 -405
- package/dist/cli/serve.js.map +0 -1
- package/dist/cli/status.d.ts +0 -49
- package/dist/cli/status.d.ts.map +0 -1
- package/dist/cli/status.js +0 -155
- package/dist/cli/status.js.map +0 -1
- package/dist/cli/sync-skills.d.ts +0 -58
- package/dist/cli/sync-skills.d.ts.map +0 -1
- package/dist/cli/sync-skills.js +0 -266
- package/dist/cli/sync-skills.js.map +0 -1
- package/dist/cli/telemetry.d.ts +0 -10
- package/dist/cli/telemetry.d.ts.map +0 -1
- package/dist/cli/telemetry.js +0 -161
- package/dist/cli/telemetry.js.map +0 -1
- package/dist/cli/toggle.d.ts +0 -26
- package/dist/cli/toggle.d.ts.map +0 -1
- package/dist/cli/toggle.js +0 -185
- package/dist/cli/toggle.js.map +0 -1
- package/dist/http/async-dispatch.d.ts +0 -44
- package/dist/http/async-dispatch.d.ts.map +0 -1
- package/dist/http/async-dispatch.js +0 -175
- package/dist/http/async-dispatch.js.map +0 -1
- package/dist/http/auth.d.ts +0 -20
- package/dist/http/auth.d.ts.map +0 -1
- package/dist/http/auth.js +0 -56
- package/dist/http/auth.js.map +0 -1
- package/dist/http/canonicalize-file-paths.d.ts +0 -8
- package/dist/http/canonicalize-file-paths.d.ts.map +0 -1
- package/dist/http/canonicalize-file-paths.js +0 -43
- package/dist/http/canonicalize-file-paths.js.map +0 -1
- package/dist/http/cwd-validator.d.ts +0 -11
- package/dist/http/cwd-validator.d.ts.map +0 -1
- package/dist/http/cwd-validator.js +0 -130
- package/dist/http/cwd-validator.js.map +0 -1
- package/dist/http/errors.d.ts +0 -4
- package/dist/http/errors.d.ts.map +0 -1
- package/dist/http/errors.js +0 -9
- package/dist/http/errors.js.map +0 -1
- package/dist/http/execution-context.d.ts +0 -18
- package/dist/http/execution-context.d.ts.map +0 -1
- package/dist/http/execution-context.js +0 -61
- package/dist/http/execution-context.js.map +0 -1
- package/dist/http/handler-deps.d.ts +0 -19
- package/dist/http/handler-deps.d.ts.map +0 -1
- package/dist/http/handler-deps.js +0 -2
- package/dist/http/handler-deps.js.map +0 -1
- package/dist/http/handlers/control/batch-slice.d.ts +0 -4
- package/dist/http/handlers/control/batch-slice.d.ts.map +0 -1
- package/dist/http/handlers/control/batch-slice.js +0 -40
- package/dist/http/handlers/control/batch-slice.js.map +0 -1
- package/dist/http/handlers/control/batch.d.ts +0 -23
- package/dist/http/handlers/control/batch.d.ts.map +0 -1
- package/dist/http/handlers/control/batch.js +0 -332
- package/dist/http/handlers/control/batch.js.map +0 -1
- package/dist/http/handlers/control/context-blocks.d.ts +0 -22
- package/dist/http/handlers/control/context-blocks.d.ts.map +0 -1
- package/dist/http/handlers/control/context-blocks.js +0 -111
- package/dist/http/handlers/control/context-blocks.js.map +0 -1
- package/dist/http/handlers/introspection/health.d.ts +0 -20
- package/dist/http/handlers/introspection/health.d.ts.map +0 -1
- package/dist/http/handlers/introspection/health.js +0 -18
- package/dist/http/handlers/introspection/health.js.map +0 -1
- package/dist/http/handlers/introspection/status.d.ts +0 -26
- package/dist/http/handlers/introspection/status.d.ts.map +0 -1
- package/dist/http/handlers/introspection/status.js +0 -136
- package/dist/http/handlers/introspection/status.js.map +0 -1
- package/dist/http/handlers/tools/audit.d.ts +0 -4
- package/dist/http/handlers/tools/audit.d.ts.map +0 -1
- package/dist/http/handlers/tools/audit.js +0 -43
- package/dist/http/handlers/tools/audit.js.map +0 -1
- package/dist/http/handlers/tools/debug.d.ts +0 -4
- package/dist/http/handlers/tools/debug.d.ts.map +0 -1
- package/dist/http/handlers/tools/debug.js +0 -43
- package/dist/http/handlers/tools/debug.js.map +0 -1
- package/dist/http/handlers/tools/delegate.d.ts +0 -4
- package/dist/http/handlers/tools/delegate.d.ts.map +0 -1
- package/dist/http/handlers/tools/delegate.js +0 -43
- package/dist/http/handlers/tools/delegate.js.map +0 -1
- package/dist/http/handlers/tools/execute-plan.d.ts +0 -4
- package/dist/http/handlers/tools/execute-plan.d.ts.map +0 -1
- package/dist/http/handlers/tools/execute-plan.js +0 -45
- package/dist/http/handlers/tools/execute-plan.js.map +0 -1
- package/dist/http/handlers/tools/investigate.d.ts +0 -4
- package/dist/http/handlers/tools/investigate.d.ts.map +0 -1
- package/dist/http/handlers/tools/investigate.js +0 -64
- package/dist/http/handlers/tools/investigate.js.map +0 -1
- package/dist/http/handlers/tools/journal-recall.d.ts +0 -4
- package/dist/http/handlers/tools/journal-recall.d.ts.map +0 -1
- package/dist/http/handlers/tools/journal-recall.js +0 -40
- package/dist/http/handlers/tools/journal-recall.js.map +0 -1
- package/dist/http/handlers/tools/journal-record.d.ts +0 -4
- package/dist/http/handlers/tools/journal-record.d.ts.map +0 -1
- package/dist/http/handlers/tools/journal-record.js +0 -35
- package/dist/http/handlers/tools/journal-record.js.map +0 -1
- package/dist/http/handlers/tools/research.d.ts +0 -4
- package/dist/http/handlers/tools/research.d.ts.map +0 -1
- package/dist/http/handlers/tools/research.js +0 -64
- package/dist/http/handlers/tools/research.js.map +0 -1
- package/dist/http/handlers/tools/retry.d.ts +0 -4
- package/dist/http/handlers/tools/retry.d.ts.map +0 -1
- package/dist/http/handlers/tools/retry.js +0 -73
- package/dist/http/handlers/tools/retry.js.map +0 -1
- package/dist/http/handlers/tools/review.d.ts +0 -4
- package/dist/http/handlers/tools/review.d.ts.map +0 -1
- package/dist/http/handlers/tools/review.js +0 -43
- package/dist/http/handlers/tools/review.js.map +0 -1
- package/dist/http/middleware/body-reader.d.ts +0 -16
- package/dist/http/middleware/body-reader.d.ts.map +0 -1
- package/dist/http/middleware/body-reader.js +0 -44
- package/dist/http/middleware/body-reader.js.map +0 -1
- package/dist/http/middleware/caller-identity.d.ts +0 -16
- package/dist/http/middleware/caller-identity.d.ts.map +0 -1
- package/dist/http/middleware/caller-identity.js +0 -16
- package/dist/http/middleware/caller-identity.js.map +0 -1
- package/dist/http/middleware/decompress.d.ts +0 -14
- package/dist/http/middleware/decompress.d.ts.map +0 -1
- package/dist/http/middleware/decompress.js +0 -51
- package/dist/http/middleware/decompress.js.map +0 -1
- package/dist/http/project-registry.d.ts +0 -54
- package/dist/http/project-registry.d.ts.map +0 -1
- package/dist/http/project-registry.js +0 -130
- package/dist/http/project-registry.js.map +0 -1
- package/dist/http/request-observability.d.ts +0 -8
- package/dist/http/request-observability.d.ts.map +0 -1
- package/dist/http/request-observability.js +0 -20
- package/dist/http/request-observability.js.map +0 -1
- package/dist/http/request-pipeline.d.ts +0 -16
- package/dist/http/request-pipeline.d.ts.map +0 -1
- package/dist/http/request-pipeline.js +0 -144
- package/dist/http/request-pipeline.js.map +0 -1
- package/dist/http/server.d.ts +0 -17
- package/dist/http/server.d.ts.map +0 -1
- package/dist/http/server.js +0 -300
- package/dist/http/server.js.map +0 -1
- package/dist/http/types.d.ts +0 -20
- package/dist/http/types.d.ts.map +0 -1
- package/dist/http/types.js +0 -2
- package/dist/http/types.js.map +0 -1
- package/dist/skill-install/disabled-state.d.ts +0 -35
- package/dist/skill-install/disabled-state.d.ts.map +0 -1
- package/dist/skill-install/disabled-state.js +0 -96
- package/dist/skill-install/disabled-state.js.map +0 -1
- package/dist/skill-install/discover.d.ts +0 -29
- package/dist/skill-install/discover.d.ts.map +0 -1
- package/dist/skill-install/discover.js +0 -104
- package/dist/skill-install/discover.js.map +0 -1
- package/dist/skill-install/include-utils.d.ts +0 -27
- package/dist/skill-install/include-utils.d.ts.map +0 -1
- package/dist/skill-install/include-utils.js +0 -90
- package/dist/skill-install/include-utils.js.map +0 -1
- package/dist/skill-install/manifest.d.ts +0 -82
- package/dist/skill-install/manifest.d.ts.map +0 -1
- package/dist/skill-install/manifest.js +0 -215
- package/dist/skill-install/manifest.js.map +0 -1
- package/dist/skill-install/skill-installer-common.d.ts +0 -26
- package/dist/skill-install/skill-installer-common.d.ts.map +0 -1
- package/dist/skill-install/skill-installer-common.js +0 -139
- package/dist/skill-install/skill-installer-common.js.map +0 -1
- package/dist/skill-install/skill-installers/claude-code.d.ts +0 -43
- package/dist/skill-install/skill-installers/claude-code.d.ts.map +0 -1
- package/dist/skill-install/skill-installers/claude-code.js +0 -65
- package/dist/skill-install/skill-installers/claude-code.js.map +0 -1
- package/dist/skill-install/skill-installers/codex-cli.d.ts +0 -27
- package/dist/skill-install/skill-installers/codex-cli.d.ts.map +0 -1
- package/dist/skill-install/skill-installers/codex-cli.js +0 -84
- package/dist/skill-install/skill-installers/codex-cli.js.map +0 -1
- package/dist/skill-install/skill-installers/cursor.d.ts +0 -72
- package/dist/skill-install/skill-installers/cursor.d.ts.map +0 -1
- package/dist/skill-install/skill-installers/cursor.js +0 -81
- package/dist/skill-install/skill-installers/cursor.js.map +0 -1
- package/dist/skill-install/skill-installers/gemini-cli.d.ts +0 -50
- package/dist/skill-install/skill-installers/gemini-cli.d.ts.map +0 -1
- package/dist/skill-install/skill-installers/gemini-cli.js +0 -72
- package/dist/skill-install/skill-installers/gemini-cli.js.map +0 -1
- package/dist/skill-install/skill-manifest-sync.d.ts +0 -11
- package/dist/skill-install/skill-manifest-sync.d.ts.map +0 -1
- package/dist/skill-install/skill-manifest-sync.js +0 -65
- package/dist/skill-install/skill-manifest-sync.js.map +0 -1
- package/dist/skills/_shared/auth.md +0 -41
- package/dist/skills/_shared/error-handling.md +0 -31
- package/dist/skills/_shared/polling.md +0 -88
- package/dist/skills/_shared/response-shape.md +0 -55
- package/dist/skills/_shared/review-policy.md +0 -15
- package/dist/skills/mma-audit/SKILL.md +0 -270
- package/dist/skills/mma-context-blocks/SKILL.md +0 -148
- package/dist/skills/mma-debug/SKILL.md +0 -208
- package/dist/skills/mma-delegate/SKILL.md +0 -216
- package/dist/skills/mma-execute-plan/SKILL.md +0 -214
- package/dist/skills/mma-explore/SKILL.md +0 -190
- package/dist/skills/mma-investigate/SKILL.md +0 -258
- package/dist/skills/mma-journal-recall/SKILL.md +0 -242
- package/dist/skills/mma-journal-record/SKILL.md +0 -189
- package/dist/skills/mma-research/SKILL.md +0 -223
- package/dist/skills/mma-retry/SKILL.md +0 -221
- package/dist/skills/mma-review/SKILL.md +0 -209
- package/dist/skills/multi-model-agent/SKILL.md +0 -206
- package/dist/telemetry/consent.d.ts +0 -4
- package/dist/telemetry/consent.d.ts.map +0 -1
- package/dist/telemetry/consent.js +0 -40
- package/dist/telemetry/consent.js.map +0 -1
- package/dist/telemetry/flusher.d.ts +0 -19
- package/dist/telemetry/flusher.d.ts.map +0 -1
- package/dist/telemetry/flusher.js +0 -277
- package/dist/telemetry/flusher.js.map +0 -1
- package/dist/telemetry/generation.d.ts +0 -9
- package/dist/telemetry/generation.d.ts.map +0 -1
- package/dist/telemetry/generation.js +0 -33
- package/dist/telemetry/generation.js.map +0 -1
- package/dist/telemetry/identity.d.ts +0 -9
- package/dist/telemetry/identity.d.ts.map +0 -1
- package/dist/telemetry/identity.js +0 -35
- package/dist/telemetry/identity.js.map +0 -1
- package/dist/telemetry/install-id.d.ts +0 -13
- package/dist/telemetry/install-id.d.ts.map +0 -1
- package/dist/telemetry/install-id.js +0 -49
- package/dist/telemetry/install-id.js.map +0 -1
- package/dist/telemetry/install-meta.d.ts +0 -10
- package/dist/telemetry/install-meta.d.ts.map +0 -1
- package/dist/telemetry/install-meta.js +0 -15
- package/dist/telemetry/install-meta.js.map +0 -1
- package/dist/telemetry/queue.d.ts +0 -35
- package/dist/telemetry/queue.d.ts.map +0 -1
- package/dist/telemetry/queue.js +0 -287
- package/dist/telemetry/queue.js.map +0 -1
- package/dist/telemetry/recorder.d.ts +0 -39
- package/dist/telemetry/recorder.d.ts.map +0 -1
- package/dist/telemetry/recorder.js +0 -173
- package/dist/telemetry/recorder.js.map +0 -1
- package/scripts/postinstall.js +0 -36
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export async function emitRequestReceived(deps, batchId, route, parsed) {
|
|
2
|
-
const json = JSON.stringify(parsed);
|
|
3
|
-
const bodyBytes = Buffer.byteLength(json, 'utf8');
|
|
4
|
-
const ts = new Date().toISOString();
|
|
5
|
-
// Emit batch_created plain entry
|
|
6
|
-
deps.bus.emitPlainEntry({ ts, kind: 'batch_created', fields: { batch_id: batchId, route } });
|
|
7
|
-
// Emit request_received plain entry
|
|
8
|
-
const inline = bodyBytes <= deps.logWriter.inlineBodyLimit();
|
|
9
|
-
const fields = { batch_id: batchId, route, body_bytes: bodyBytes };
|
|
10
|
-
if (inline) {
|
|
11
|
-
fields.body = json;
|
|
12
|
-
}
|
|
13
|
-
else {
|
|
14
|
-
const spilled = await deps.logWriter.spillRequestBody({ batchId, body: parsed });
|
|
15
|
-
fields.body_path = spilled.path;
|
|
16
|
-
fields.body_bytes = spilled.bytes;
|
|
17
|
-
}
|
|
18
|
-
deps.bus.emitPlainEntry({ ts, kind: 'request_received', fields });
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=request-observability.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"request-observability.js","sourceRoot":"","sources":["../../src/http/request-observability.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAA6B,EAC7B,OAAe,EACf,KAAa,EACb,MAAe;IAEf,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAEpC,iCAAiC;IACjC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAE7F,oCAAoC;IACpC,MAAM,MAAM,GAAG,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;IAC7D,MAAM,MAAM,GAAqD,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IACrH,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACjF,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;QAChC,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC;IACpC,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
-
import type { ServerConfig } from '@zhixuan92/multi-model-agent-core';
|
|
3
|
-
import { RouteDispatcher } from '@zhixuan92/multi-model-agent-core';
|
|
4
|
-
import type { RawHandler } from './types.js';
|
|
5
|
-
export declare function setDraining(d: boolean): void;
|
|
6
|
-
export declare function isDraining(): boolean;
|
|
7
|
-
export interface PipelineConfig {
|
|
8
|
-
loopbackOnlyPaths: ReadonlySet<string>;
|
|
9
|
-
authExemptPaths: ReadonlySet<string>;
|
|
10
|
-
cwdRequiredPaths: ReadonlySet<string>;
|
|
11
|
-
/** Routes that REQUIRE X-MMA-Main-Model header. Tool dispatches must
|
|
12
|
-
* attribute to a main model so wire telemetry's main_model is never null. */
|
|
13
|
-
mainModelRequiredPaths: ReadonlySet<string>;
|
|
14
|
-
}
|
|
15
|
-
export declare function handleRequest(router: RouteDispatcher<RawHandler>, token: string, req: IncomingMessage, res: ServerResponse, cfg: ServerConfig, pipelineCfg: PipelineConfig): Promise<void>;
|
|
16
|
-
//# sourceMappingURL=request-pipeline.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"request-pipeline.d.ts","sourceRoot":"","sources":["../../src/http/request-pipeline.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAQpE,OAAO,KAAK,EAAkB,UAAU,EAAE,MAAM,YAAY,CAAC;AAS7D,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAAsB;AACnE,wBAAgB,UAAU,IAAI,OAAO,CAAyB;AAE9D,MAAM,WAAW,cAAc;IAC7B,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC;kFAC8E;IAC9E,sBAAsB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC7C;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,eAAe,CAAC,UAAU,CAAC,EACnC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,YAAY,EACjB,WAAW,EAAE,cAAc,GAC1B,OAAO,CAAC,IAAI,CAAC,CAuJf"}
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
import { sendError } from './errors.js';
|
|
2
|
-
import { readBody } from './middleware/body-reader.js';
|
|
3
|
-
import { decompressBody } from './middleware/decompress.js';
|
|
4
|
-
import { validateAuthHeader } from './auth.js';
|
|
5
|
-
import { validateCwd } from './cwd-validator.js';
|
|
6
|
-
import { isLoopbackAddress, isAllowedHostHeader } from '@zhixuan92/multi-model-agent-core';
|
|
7
|
-
import { resolveCallerIdentity } from './middleware/caller-identity.js';
|
|
8
|
-
const BODY_METHODS = new Set(['POST', 'PUT', 'PATCH', 'DELETE']);
|
|
9
|
-
// Daemon-wide draining flag — set true by the cleanupSignal handler when
|
|
10
|
-
// SIGTERM/SIGINT fires. New dispatches refuse with 503 service_unavailable
|
|
11
|
-
// while shutdown drains in-flight tasks. /health is allowed through so
|
|
12
|
-
// operators can confirm the daemon is winding down.
|
|
13
|
-
let drainingMode = false;
|
|
14
|
-
export function setDraining(d) { drainingMode = d; }
|
|
15
|
-
export function isDraining() { return drainingMode; }
|
|
16
|
-
export async function handleRequest(router, token, req, res, cfg, pipelineCfg) {
|
|
17
|
-
const method = req.method ?? 'GET';
|
|
18
|
-
const rawUrl = req.url ?? '/';
|
|
19
|
-
// ── Step 0: draining check ────────────────────────────────────────────────
|
|
20
|
-
// Once SIGTERM/SIGINT fires and cleanupSignal calls setDraining(true), new
|
|
21
|
-
// dispatches refuse with 503 so in-flight tasks can drain cleanly. /health
|
|
22
|
-
// stays available so operators can confirm the daemon is winding down.
|
|
23
|
-
if (drainingMode && !rawUrl.startsWith('/health')) {
|
|
24
|
-
sendError(res, 503, 'service_unavailable', 'daemon is draining; retry after restart');
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
// ── Step 1: Body size cap ──────────────────────────────────────────────────
|
|
28
|
-
let rawBody;
|
|
29
|
-
if (BODY_METHODS.has(method)) {
|
|
30
|
-
const result = await readBody(req, cfg.server.limits.maxBodyBytes);
|
|
31
|
-
if (!result.ok) {
|
|
32
|
-
res.writeHead(413, { 'content-type': 'application/json', 'connection': 'close' });
|
|
33
|
-
res.end(JSON.stringify({ error: { code: 'payload_too_large', message: `Request body exceeds the ${cfg.server.limits.maxBodyBytes}-byte limit` } }), () => { req.socket?.destroy(); });
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
rawBody = result.body;
|
|
37
|
-
}
|
|
38
|
-
// ── Step 2: Route match ────────────────────────────────────────────────────
|
|
39
|
-
const match = router.match(method, rawUrl);
|
|
40
|
-
if (!match) {
|
|
41
|
-
const allowed = router.methodsFor(rawUrl);
|
|
42
|
-
if (allowed.length > 0) {
|
|
43
|
-
sendError(res, 405, 'method_not_allowed', `Method ${method} not allowed`, { allowed });
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
sendError(res, 404, 'not_found', `Unknown path ${rawUrl.split('?')[0]}`);
|
|
47
|
-
}
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
// ── Step 3: Loopback & rebinding guard ─────────────────────────────────────
|
|
51
|
-
const pathname = rawUrl.split('?')[0];
|
|
52
|
-
// (a) Host-header rebinding check — ALL routes. Defends against DNS rebinding:
|
|
53
|
-
// the connection is loopback (IP check passes) but the Host header is an
|
|
54
|
-
// attacker-controlled domain. Only literal loopback host forms are allowed.
|
|
55
|
-
if (!isAllowedHostHeader(req.headers.host)) {
|
|
56
|
-
sendError(res, 403, 'forbidden_host', 'Request Host header is not an allowed loopback host');
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
// (b) IP-level loopback check — loopbackOnlyPaths only.
|
|
60
|
-
if (pipelineCfg.loopbackOnlyPaths.has(pathname)) {
|
|
61
|
-
const remoteAddr = req.socket?.remoteAddress;
|
|
62
|
-
if (!isLoopbackAddress(remoteAddr)) {
|
|
63
|
-
sendError(res, 403, 'loopback_only', 'This endpoint is only accessible from the loopback interface');
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
// ── Step 4: Bearer auth ────────────────────────────────────────────────────
|
|
68
|
-
if (!pipelineCfg.authExemptPaths.has(pathname)) {
|
|
69
|
-
const header = req.headers['authorization'];
|
|
70
|
-
const authResult = validateAuthHeader(header, token);
|
|
71
|
-
if (!authResult.ok) {
|
|
72
|
-
sendError(res, 401, 'unauthorized', 'Valid Bearer token required');
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
// ── Step 5: Decompress body ─────────────────────────────────────────────────
|
|
77
|
-
if (rawBody !== undefined && rawBody.length > 0) {
|
|
78
|
-
const enc = req.headers['content-encoding'];
|
|
79
|
-
if (enc !== undefined) {
|
|
80
|
-
const result = await decompressBody(rawBody, enc, {
|
|
81
|
-
maxDecompressedBytes: cfg.server.limits.maxBodyBytes,
|
|
82
|
-
});
|
|
83
|
-
if (!result.ok) {
|
|
84
|
-
sendError(res, result.statusCode, result.reason, result.message);
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
rawBody = result.body;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
// ── Step 6: JSON body parse ────────────────────────────────────────────────
|
|
91
|
-
let parsedBody;
|
|
92
|
-
if (rawBody !== undefined && rawBody.length > 0) {
|
|
93
|
-
try {
|
|
94
|
-
parsedBody = JSON.parse(rawBody.toString('utf8'));
|
|
95
|
-
}
|
|
96
|
-
catch {
|
|
97
|
-
sendError(res, 400, 'invalid_json', 'Request body is not valid JSON');
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
// ── Step 7: cwd query param validation ─────────────────────────────────────
|
|
102
|
-
let cwdValue;
|
|
103
|
-
const urlObj = new URL(rawUrl, 'http://localhost');
|
|
104
|
-
const requiresCwd = pipelineCfg.cwdRequiredPaths.has(pathname) ||
|
|
105
|
-
pathname === '/context-blocks' ||
|
|
106
|
-
/^\/context-blocks\//.test(pathname);
|
|
107
|
-
if (requiresCwd) {
|
|
108
|
-
const cwdParam = urlObj.searchParams.get('cwd') ?? undefined;
|
|
109
|
-
const cwdResult = validateCwd(cwdParam);
|
|
110
|
-
if (!cwdResult.ok) {
|
|
111
|
-
const statusCode = cwdResult.error === 'forbidden_cwd' ? 403 : 400;
|
|
112
|
-
sendError(res, statusCode, cwdResult.error, cwdResult.message);
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
cwdValue = cwdResult.canonicalCwd;
|
|
116
|
-
}
|
|
117
|
-
// ── Step 8: Caller identity from headers ────────────────────────────────────
|
|
118
|
-
const identity = resolveCallerIdentity(req);
|
|
119
|
-
if (pipelineCfg.mainModelRequiredPaths.has(pathname)) {
|
|
120
|
-
if (identity.callerClient === 'other') {
|
|
121
|
-
sendError(res, 400, 'client_required', 'X-MMA-Client header is required on tool routes. Set it to one of: claude-code, cursor, codex-cli, gemini-cli.');
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
// Auto-detect was unreliable: the claude-agent-sdk used by our own
|
|
125
|
-
// claude-tier workers writes JSONL files into the same project slug,
|
|
126
|
-
// and the resolver would pick those up (e.g. haiku) as the "main"
|
|
127
|
-
// model. The header must come from the calling client.
|
|
128
|
-
if (!identity.mainModel) {
|
|
129
|
-
sendError(res, 400, 'main_model_required', 'X-MMA-Main-Model header is required on tool routes. Set it to the calling agent\'s model id (e.g. claude-opus-4-7, gpt-5.4).');
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
// ── Step 9: Hand off to matched handler ────────────────────────────────────
|
|
134
|
-
const ctx = {
|
|
135
|
-
url: urlObj,
|
|
136
|
-
cwd: cwdValue,
|
|
137
|
-
body: parsedBody,
|
|
138
|
-
authed: !pipelineCfg.authExemptPaths.has(pathname),
|
|
139
|
-
callerClient: identity.callerClient,
|
|
140
|
-
mainModel: identity.mainModel,
|
|
141
|
-
};
|
|
142
|
-
await match.handler(req, res, match.params, ctx);
|
|
143
|
-
}
|
|
144
|
-
//# sourceMappingURL=request-pipeline.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"request-pipeline.js","sourceRoot":"","sources":["../../src/http/request-pipeline.ts"],"names":[],"mappings":"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"}
|
package/dist/http/server.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { ServerConfig, BatchRegistry } from '@zhixuan92/multi-model-agent-core';
|
|
2
|
-
import type { ProjectRegistry } from './project-registry.js';
|
|
3
|
-
export declare const SERVER_VERSION: string;
|
|
4
|
-
export interface RunningServer {
|
|
5
|
-
port: number;
|
|
6
|
-
/** The resolved address the server is bound to. Used by CLI to log the actual listen address. */
|
|
7
|
-
serverAddress: string | null;
|
|
8
|
-
stop(): Promise<void>;
|
|
9
|
-
/** Shared BatchRegistry — exposed for testing and introspection handlers. */
|
|
10
|
-
batchRegistry: BatchRegistry;
|
|
11
|
-
/** Shared ProjectRegistry — exposed for testing and introspection handlers. */
|
|
12
|
-
projectRegistry: ProjectRegistry;
|
|
13
|
-
/** Wall-clock ms when the server finished starting (Date.now()). Used for uptimeMs in /status. */
|
|
14
|
-
serverStartedAt: number;
|
|
15
|
-
}
|
|
16
|
-
export declare function startServer(config: ServerConfig, injectedManifestSync?: import('../skill-install/skill-manifest-sync.js').SkillManifestSync): Promise<RunningServer>;
|
|
17
|
-
//# sourceMappingURL=server.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/http/server.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAWrF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAiB7D,eAAO,MAAM,cAAc,QAAsB,CAAC;AAElD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,iGAAiG;IACjG,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,6EAA6E;IAC7E,aAAa,EAAE,aAAa,CAAC;IAC7B,+EAA+E;IAC/E,eAAe,EAAE,eAAe,CAAC;IACjC,kGAAkG;IAClG,eAAe,EAAE,MAAM,CAAC;CACzB;AAoND,wBAAsB,WAAW,CAC/B,MAAM,EAAE,YAAY,EACpB,oBAAoB,CAAC,EAAE,OAAO,yCAAyC,EAAE,iBAAiB,GACzF,OAAO,CAAC,aAAa,CAAC,CA+ExB"}
|
package/dist/http/server.js
DELETED
|
@@ -1,300 +0,0 @@
|
|
|
1
|
-
import { HTTPListener } from '@zhixuan92/multi-model-agent-core';
|
|
2
|
-
import { readFileSync } from 'node:fs';
|
|
3
|
-
import { fileURLToPath } from 'node:url';
|
|
4
|
-
import { join, dirname } from 'node:path';
|
|
5
|
-
import { homedir } from 'node:os';
|
|
6
|
-
import { RouteDispatcher } from '@zhixuan92/multi-model-agent-core';
|
|
7
|
-
import { EnvelopeBus } from '@zhixuan92/multi-model-agent-core/events/envelope-bus';
|
|
8
|
-
import { LogWriter } from '@zhixuan92/multi-model-agent-core/events/log-writer';
|
|
9
|
-
import { TelemetryUploader } from '@zhixuan92/multi-model-agent-core/events/telemetry-uploader';
|
|
10
|
-
import { StderrLogSubscriber } from '@zhixuan92/multi-model-agent-core/events/stderr-log-subscriber';
|
|
11
|
-
import { decideConsent } from '@zhixuan92/multi-model-agent-core/events/consent-rules';
|
|
12
|
-
import { sendError, sendJson } from './errors.js';
|
|
13
|
-
import { loadToken } from './auth.js';
|
|
14
|
-
import { handleRequest } from './request-pipeline.js';
|
|
15
|
-
import { getRecorder } from '../telemetry/recorder.js';
|
|
16
|
-
/** Server package version — read once at module load time from package.json. */
|
|
17
|
-
function readServerVersion() {
|
|
18
|
-
try {
|
|
19
|
-
const thisDir = dirname(fileURLToPath(import.meta.url));
|
|
20
|
-
// Walk up from src/http/ to packages/server/
|
|
21
|
-
const pkgPath = join(thisDir, '..', '..', 'package.json');
|
|
22
|
-
const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
|
|
23
|
-
return pkg.version ?? '0.0.0';
|
|
24
|
-
}
|
|
25
|
-
catch {
|
|
26
|
-
return '0.0.0';
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
export const SERVER_VERSION = readServerVersion();
|
|
30
|
-
/** Routes where the loopback guard is enforced. */
|
|
31
|
-
const LOOPBACK_ONLY_PATHS = new Set(['/health', '/status']);
|
|
32
|
-
/** Routes that do NOT require bearer auth. */
|
|
33
|
-
const AUTH_EXEMPT_PATHS = new Set(['/health']);
|
|
34
|
-
/** Routes that require a `cwd` query parameter (validated by cwd-validator middleware). */
|
|
35
|
-
const CWD_REQUIRED_PATHS = new Set([
|
|
36
|
-
'/delegate', '/audit', '/review', '/debug', '/execute-plan', '/retry', '/investigate', '/research', '/journal-record', '/journal-recall',
|
|
37
|
-
'/control/batch-slice', '/context-blocks',
|
|
38
|
-
]);
|
|
39
|
-
/** Routes that require the X-MMA-Main-Model header. Enforced at request boundary
|
|
40
|
-
* so wire telemetry's main_model column is never null for billed runs. The
|
|
41
|
-
* tool routes need it; the introspection / batch-polling / context-block
|
|
42
|
-
* utility routes do not. */
|
|
43
|
-
const MAIN_MODEL_REQUIRED_PATHS = new Set([
|
|
44
|
-
'/delegate', '/audit', '/review', '/debug', '/execute-plan', '/retry', '/investigate', '/research', '/journal-record', '/journal-recall',
|
|
45
|
-
]);
|
|
46
|
-
/**
|
|
47
|
-
* Registers tool handlers (POST /delegate, /audit, /review, /debug, /execute-plan, /retry).
|
|
48
|
-
* Builds a ToolSurfaceRegistry by calling each tool-config's registerXxx, then
|
|
49
|
-
* iterates `registry.list()` filtered to `surface: 'tool'` entries to drive
|
|
50
|
-
* route registration. The registry is the canonical source for tool surface
|
|
51
|
-
* metadata (httpMethod, httpPath, schema, toolCategory).
|
|
52
|
-
*/
|
|
53
|
-
async function registerToolHandlers(router, config, batchRegistry, projectRegistry) {
|
|
54
|
-
const { buildToolSurfaceRegistry } = await import('@zhixuan92/multi-model-agent-core');
|
|
55
|
-
const surface = buildToolSurfaceRegistry();
|
|
56
|
-
// For tool handlers, we need MultiModelConfig which is part of ServerConfig only
|
|
57
|
-
// when the full mmagent.config.json is loaded. In test/minimal configs that only
|
|
58
|
-
// have `server:`, we create a stub config. Real CLI startup will load full config.
|
|
59
|
-
const multiModelConfig = config.agents
|
|
60
|
-
? config
|
|
61
|
-
: undefined;
|
|
62
|
-
if (!multiModelConfig) {
|
|
63
|
-
// Server started with server-only config (e.g. tests): register stubs that return 503.
|
|
64
|
-
// Drive registration from the registry so adding a tool only requires a tool-config edit.
|
|
65
|
-
for (const entry of surface.list()) {
|
|
66
|
-
if (entry.surface !== 'tool')
|
|
67
|
-
continue;
|
|
68
|
-
router.register(entry.httpMethod, entry.httpPath, (_req, res, _params, _ctx) => {
|
|
69
|
-
sendError(res, 503, 'no_agent_config', 'Server started without agent configuration; provide a full mmagent.config.json');
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
const bus = new EnvelopeBus();
|
|
75
|
-
const logWriter = new LogWriter({ diagnosticsLog: multiModelConfig.diagnostics?.log ?? false, logDir: multiModelConfig.diagnostics?.logDir });
|
|
76
|
-
bus.subscribe(logWriter);
|
|
77
|
-
// Always-on stderr log stream — no quiet mode and no --verbose flag (4.7.3+).
|
|
78
|
-
bus.subscribe(new StderrLogSubscriber());
|
|
79
|
-
let recorderForBus = null;
|
|
80
|
-
try {
|
|
81
|
-
recorderForBus = getRecorder();
|
|
82
|
-
}
|
|
83
|
-
catch { /* not initialized */ }
|
|
84
|
-
// decideConsent signature: read from packages/server/src/telemetry/consent.ts. Today it reads
|
|
85
|
-
// process.env.MMAGENT_TELEMETRY + a config.json. Replicate that call here:
|
|
86
|
-
const decideConsentForUploader = () => {
|
|
87
|
-
const envVal = process.env.MMAGENT_TELEMETRY;
|
|
88
|
-
let configState = undefined;
|
|
89
|
-
try {
|
|
90
|
-
const cfgPath = join(homedir(), '.multi-model', 'config.json');
|
|
91
|
-
const cfg = JSON.parse(readFileSync(cfgPath, 'utf8'));
|
|
92
|
-
if (cfg && typeof cfg === 'object' && cfg.telemetry && typeof cfg.telemetry === 'object' && typeof cfg.telemetry.enabled === 'boolean') {
|
|
93
|
-
configState = { enabled: cfg.telemetry.enabled };
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
catch (e) {
|
|
97
|
-
if (e.code !== 'ENOENT') {
|
|
98
|
-
configState = { kind: 'unreadable' };
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
return decideConsent({ env: envVal, config: configState });
|
|
102
|
-
};
|
|
103
|
-
const uploader = new TelemetryUploader({
|
|
104
|
-
recorder: recorderForBus,
|
|
105
|
-
consent: { decide: decideConsentForUploader },
|
|
106
|
-
buildOpts: (env) => ({
|
|
107
|
-
toolMode: 'full', // default
|
|
108
|
-
implementerModel: env.stages[0]?.model ?? env.mainModel,
|
|
109
|
-
implementerTier: env.stages[0]?.tier ?? env.agentType,
|
|
110
|
-
mainModelFamily: env.mainModel.split('-')[0] ?? 'unknown',
|
|
111
|
-
}),
|
|
112
|
-
});
|
|
113
|
-
bus.subscribe(uploader);
|
|
114
|
-
const deps = { config: multiModelConfig, bus, logWriter, projectRegistry, batchRegistry };
|
|
115
|
-
// Per-tool handler builders, keyed by registry routeName. The registry tells
|
|
116
|
-
// us WHICH route to register and at WHICH path/method; this map answers HOW
|
|
117
|
-
// to build the per-tool handler.
|
|
118
|
-
const { buildDelegateHandler } = await import('./handlers/tools/delegate.js');
|
|
119
|
-
const { buildAuditHandler } = await import('./handlers/tools/audit.js');
|
|
120
|
-
const { buildReviewHandler } = await import('./handlers/tools/review.js');
|
|
121
|
-
const { buildDebugHandler } = await import('./handlers/tools/debug.js');
|
|
122
|
-
const { buildExecutePlanHandler } = await import('./handlers/tools/execute-plan.js');
|
|
123
|
-
const { buildRetryHandler } = await import('./handlers/tools/retry.js');
|
|
124
|
-
const { buildInvestigateHandler } = await import('./handlers/tools/investigate.js');
|
|
125
|
-
const { buildResearchHandler } = await import('./handlers/tools/research.js');
|
|
126
|
-
const { buildJournalRecordHandler } = await import('./handlers/tools/journal-record.js');
|
|
127
|
-
const { buildJournalRecallHandler } = await import('./handlers/tools/journal-recall.js');
|
|
128
|
-
const builders = {
|
|
129
|
-
delegate: buildDelegateHandler,
|
|
130
|
-
audit: buildAuditHandler,
|
|
131
|
-
review: buildReviewHandler,
|
|
132
|
-
debug: buildDebugHandler,
|
|
133
|
-
execute_plan: buildExecutePlanHandler,
|
|
134
|
-
retry_tasks: buildRetryHandler,
|
|
135
|
-
investigate: buildInvestigateHandler,
|
|
136
|
-
research: buildResearchHandler,
|
|
137
|
-
'journal-record': buildJournalRecordHandler,
|
|
138
|
-
'journal-recall': buildJournalRecallHandler,
|
|
139
|
-
};
|
|
140
|
-
for (const entry of surface.list()) {
|
|
141
|
-
if (entry.surface !== 'tool')
|
|
142
|
-
continue;
|
|
143
|
-
const builder = builders[entry.routeName];
|
|
144
|
-
if (!builder) {
|
|
145
|
-
// Route is in the registry but its handler hasn't been wired yet
|
|
146
|
-
// (e.g. /research added in a prior task, handler lands in a later one).
|
|
147
|
-
// Skip silently — the next task wires the handler and enables the route.
|
|
148
|
-
continue;
|
|
149
|
-
}
|
|
150
|
-
router.register(entry.httpMethod, entry.httpPath, builder(deps));
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Registers control handlers (GET /batch/:batchId, POST/DELETE /context-blocks).
|
|
155
|
-
*/
|
|
156
|
-
async function registerControlHandlers(router, config, batchRegistry, projectRegistry) {
|
|
157
|
-
const { buildBatchHandler } = await import('./handlers/control/batch.js');
|
|
158
|
-
const { buildBatchSliceHandler } = await import('./handlers/control/batch-slice.js');
|
|
159
|
-
const { buildCreateContextBlockHandler, buildDeleteContextBlockHandler } = await import('./handlers/control/context-blocks.js');
|
|
160
|
-
const multiModelConfig = config.agents
|
|
161
|
-
? config
|
|
162
|
-
: undefined;
|
|
163
|
-
router.register('GET', '/batch/:batchId', buildBatchHandler({ batchRegistry }));
|
|
164
|
-
if (multiModelConfig) {
|
|
165
|
-
const bus = new EnvelopeBus();
|
|
166
|
-
const logWriter = new LogWriter({ diagnosticsLog: multiModelConfig.diagnostics?.log ?? false, logDir: multiModelConfig.diagnostics?.logDir });
|
|
167
|
-
bus.subscribe(logWriter);
|
|
168
|
-
bus.subscribe(new StderrLogSubscriber());
|
|
169
|
-
let recorderForBus = null;
|
|
170
|
-
try {
|
|
171
|
-
recorderForBus = getRecorder();
|
|
172
|
-
}
|
|
173
|
-
catch { /* not initialized */ }
|
|
174
|
-
const decideConsentForUploader = () => {
|
|
175
|
-
const envVal = process.env.MMAGENT_TELEMETRY;
|
|
176
|
-
let configState = undefined;
|
|
177
|
-
try {
|
|
178
|
-
const cfgPath = join(homedir(), '.multi-model', 'config.json');
|
|
179
|
-
const cfg = JSON.parse(readFileSync(cfgPath, 'utf8'));
|
|
180
|
-
if (cfg && typeof cfg === 'object' && cfg.telemetry && typeof cfg.telemetry === 'object' && typeof cfg.telemetry.enabled === 'boolean') {
|
|
181
|
-
configState = { enabled: cfg.telemetry.enabled };
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
catch (e) {
|
|
185
|
-
if (e.code !== 'ENOENT') {
|
|
186
|
-
configState = { kind: 'unreadable' };
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
return decideConsent({ env: envVal, config: configState });
|
|
190
|
-
};
|
|
191
|
-
const uploader = new TelemetryUploader({
|
|
192
|
-
recorder: recorderForBus,
|
|
193
|
-
consent: { decide: decideConsentForUploader },
|
|
194
|
-
buildOpts: (env) => ({
|
|
195
|
-
toolMode: 'full', // default
|
|
196
|
-
implementerModel: env.stages[0]?.model ?? env.mainModel,
|
|
197
|
-
implementerTier: env.stages[0]?.tier ?? env.agentType,
|
|
198
|
-
mainModelFamily: env.mainModel.split('-')[0] ?? 'unknown',
|
|
199
|
-
}),
|
|
200
|
-
});
|
|
201
|
-
bus.subscribe(uploader);
|
|
202
|
-
const deps = { config: multiModelConfig, bus, logWriter, projectRegistry, batchRegistry };
|
|
203
|
-
router.register('POST', '/control/batch-slice', buildBatchSliceHandler(deps));
|
|
204
|
-
router.register('POST', '/context-blocks', buildCreateContextBlockHandler({
|
|
205
|
-
projectRegistry,
|
|
206
|
-
maxContextBlockBytes: multiModelConfig.server.limits.maxContextBlockBytes,
|
|
207
|
-
maxContextBlocksPerProject: multiModelConfig.server.limits.maxContextBlocksPerProject,
|
|
208
|
-
}));
|
|
209
|
-
router.register('DELETE', '/context-blocks/:blockId', buildDeleteContextBlockHandler({ projectRegistry }));
|
|
210
|
-
}
|
|
211
|
-
else {
|
|
212
|
-
router.register('POST', '/control/batch-slice', (_req, res) => {
|
|
213
|
-
sendError(res, 503, 'no_agent_config', 'Server started without agent configuration; provide a full mmagent.config.json');
|
|
214
|
-
});
|
|
215
|
-
router.register('POST', '/context-blocks', (_req, res) => {
|
|
216
|
-
sendError(res, 503, 'no_agent_config', 'Server started without agent configuration; provide a full mmagent.config.json');
|
|
217
|
-
});
|
|
218
|
-
router.register('DELETE', '/context-blocks/:blockId', buildDeleteContextBlockHandler({ projectRegistry }));
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
export async function startServer(config, injectedManifestSync) {
|
|
222
|
-
const token = loadToken(config.server.auth.tokenFile);
|
|
223
|
-
const router = new RouteDispatcher();
|
|
224
|
-
// ── Create shared registries ───────────────────────────────────────────────
|
|
225
|
-
const { BatchRegistry } = await import('@zhixuan92/multi-model-agent-core');
|
|
226
|
-
const { ProjectRegistry } = await import('./project-registry.js');
|
|
227
|
-
const batchRegistry = new BatchRegistry({
|
|
228
|
-
batchTtlMs: config.server.limits.batchTtlMs,
|
|
229
|
-
});
|
|
230
|
-
const projectRegistry = new ProjectRegistry({
|
|
231
|
-
cap: config.server.limits.projectCap,
|
|
232
|
-
idleEvictionMs: config.server.limits.idleProjectTimeoutMs,
|
|
233
|
-
evictionIntervalMs: Math.min(config.server.limits.idleProjectTimeoutMs, 60_000),
|
|
234
|
-
});
|
|
235
|
-
// Capture serverStartedAt before health registration so /health can expose it.
|
|
236
|
-
const serverStartedAt = Date.now();
|
|
237
|
-
// GET /health — unauthenticated liveness + skill manifest drift check
|
|
238
|
-
const { buildHealthHandler } = await import('./handlers/introspection/health.js');
|
|
239
|
-
let skillManifestSync;
|
|
240
|
-
if (injectedManifestSync) {
|
|
241
|
-
skillManifestSync = injectedManifestSync;
|
|
242
|
-
}
|
|
243
|
-
else {
|
|
244
|
-
try {
|
|
245
|
-
const { makeSkillManifestSync } = await import('../skill-install/skill-manifest-sync.js');
|
|
246
|
-
const { discoverPerClientInstallDirs } = await import('../skill-install/discover.js');
|
|
247
|
-
skillManifestSync = makeSkillManifestSync(discoverPerClientInstallDirs());
|
|
248
|
-
}
|
|
249
|
-
catch {
|
|
250
|
-
skillManifestSync = { driftReport: () => [] };
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
router.register('GET', '/health', buildHealthHandler({ manifestSync: skillManifestSync }));
|
|
254
|
-
// Register tool handlers (Phase 6)
|
|
255
|
-
await registerToolHandlers(router, config, batchRegistry, projectRegistry);
|
|
256
|
-
// Register control handlers (Phase 7)
|
|
257
|
-
await registerControlHandlers(router, config, batchRegistry, projectRegistry);
|
|
258
|
-
// GET /status — operator introspection (registered after registries are ready)
|
|
259
|
-
const { buildStatusHandler } = await import('./handlers/introspection/status.js');
|
|
260
|
-
router.register('GET', '/status', buildStatusHandler({
|
|
261
|
-
batchRegistry,
|
|
262
|
-
projectRegistry,
|
|
263
|
-
serverStartedAt,
|
|
264
|
-
bind: config.server.bind,
|
|
265
|
-
version: SERVER_VERSION,
|
|
266
|
-
}));
|
|
267
|
-
// Test-only: enumerates registered routes. Guarded by env; zero impact on production.
|
|
268
|
-
if (process.env.MMAGENT_TEST_INTROSPECTION === '1') {
|
|
269
|
-
router.register('GET', '/__routes', (_req, res) => {
|
|
270
|
-
sendJson(res, 200, router.listRoutes().map((route) => ({
|
|
271
|
-
method: route.method.toUpperCase(),
|
|
272
|
-
path: route.path,
|
|
273
|
-
})));
|
|
274
|
-
});
|
|
275
|
-
}
|
|
276
|
-
const listener = new HTTPListener({
|
|
277
|
-
bind: config.server.bind,
|
|
278
|
-
port: config.server.port,
|
|
279
|
-
handler: (req, res) => handleRequest(router, token, req, res, config, PIPELINE_CFG),
|
|
280
|
-
});
|
|
281
|
-
const { port, address: serverAddress } = await listener.start();
|
|
282
|
-
return {
|
|
283
|
-
port,
|
|
284
|
-
serverAddress,
|
|
285
|
-
stop: () => listener.stop(),
|
|
286
|
-
batchRegistry,
|
|
287
|
-
projectRegistry,
|
|
288
|
-
serverStartedAt,
|
|
289
|
-
};
|
|
290
|
-
}
|
|
291
|
-
// Per-request pipeline lives in request-pipeline.ts. server.ts owns routing
|
|
292
|
-
// table + bootstrap; the pipeline owns body-cap → route → loopback → auth →
|
|
293
|
-
// JSON parse → cwd → dispatch.
|
|
294
|
-
const PIPELINE_CFG = {
|
|
295
|
-
loopbackOnlyPaths: LOOPBACK_ONLY_PATHS,
|
|
296
|
-
authExemptPaths: AUTH_EXEMPT_PATHS,
|
|
297
|
-
cwdRequiredPaths: CWD_REQUIRED_PATHS,
|
|
298
|
-
mainModelRequiredPaths: MAIN_MODEL_REQUIRED_PATHS,
|
|
299
|
-
};
|
|
300
|
-
//# sourceMappingURL=server.js.map
|
package/dist/http/server.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/http/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,uDAAuD,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,qDAAqD,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6DAA6D,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,gEAAgE,CAAC;AACrG,OAAO,EAAE,aAAa,EAAE,MAAM,wDAAwD,CAAC;AAEvF,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,gFAAgF;AAChF,SAAS,iBAAiB;IACxB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,6CAA6C;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAyB,CAAC;QAC9E,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;AAelD,mDAAmD;AACnD,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAE5D,8CAA8C;AAC9C,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAE/C,2FAA2F;AAC3F,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,iBAAiB;IACxI,sBAAsB,EAAE,iBAAiB;CAC1C,CAAC,CAAC;AAEH;;;6BAG6B;AAC7B,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;IACxC,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,iBAAiB;CACzI,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,KAAK,UAAU,oBAAoB,CACjC,MAAmC,EACnC,MAAoB,EACpB,aAA4B,EAC5B,eAAgC;IAEhC,MAAM,EAAE,wBAAwB,EAAE,GAChC,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAC;IAEpD,MAAM,OAAO,GAAG,wBAAwB,EAAE,CAAC;IAE3C,iFAAiF;IACjF,iFAAiF;IACjF,mFAAmF;IACnF,MAAM,gBAAgB,GAAI,MAA0C,CAAC,MAAM;QACzE,CAAC,CAAE,MAAuE;QAC1E,CAAC,CAAC,SAAS,CAAC;IAEd,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,uFAAuF;QACvF,0FAA0F;QAC1F,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACnC,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM;gBAAE,SAAS;YACvC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;gBAC7E,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,EAAE,gFAAgF,CAAC,CAAC;YAC3H,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,EAAE,cAAc,EAAE,gBAAgB,CAAC,WAAW,EAAE,GAAG,IAAI,KAAK,EAAE,MAAM,EAAE,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9I,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACzB,8EAA8E;IAC9E,GAAG,CAAC,SAAS,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC;IAEzC,IAAI,cAAc,GAAoB,IAAI,CAAC;IAC3C,IAAI,CAAC;QAAC,cAAc,GAAG,WAAW,EAAE,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC;IACvE,8FAA8F;IAC9F,2EAA2E;IAC3E,MAAM,wBAAwB,GAAG,GAAG,EAAE;QACpC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAC7C,IAAI,WAAW,GAA8D,SAAS,CAAC;QACvF,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;YAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;YACtD,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,SAAS,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACvI,WAAW,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACnD,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAK,CAA2B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACnD,WAAW,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;YACvC,CAAC;QACH,CAAC;QACD,OAAO,aAAa,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC;QACrC,QAAQ,EAAE,cAAc;QACxB,OAAO,EAAE,EAAE,MAAM,EAAE,wBAAwB,EAAE;QAC7C,SAAS,EAAE,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC;YACxB,QAAQ,EAAE,MAAM,EAAsB,UAAU;YAChD,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,GAAG,CAAC,SAAS;YACvD,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,GAAG,CAAC,SAAS;YACrD,eAAe,EAAE,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS;SAC1D,CAAC;KACH,CAAC,CAAC;IACH,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAExB,MAAM,IAAI,GAA4C,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC;IAEnI,6EAA6E;IAC7E,4EAA4E;IAC5E,iCAAiC;IACjC,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IAC9E,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IACxE,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;IAC1E,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IACxE,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,kCAAkC,CAAC,CAAC;IACrF,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IACxE,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;IACpF,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IAC9E,MAAM,EAAE,yBAAyB,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;IACzF,MAAM,EAAE,yBAAyB,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAEzF,MAAM,QAAQ,GAA+E;QAC3F,QAAQ,EAAE,oBAAoB;QAC9B,KAAK,EAAE,iBAAiB;QACxB,MAAM,EAAE,kBAAkB;QAC1B,KAAK,EAAE,iBAAiB;QACxB,YAAY,EAAE,uBAAuB;QACrC,WAAW,EAAE,iBAAiB;QAC9B,WAAW,EAAE,uBAAuB;QACpC,QAAQ,EAAE,oBAAoB;QAC9B,gBAAgB,EAAE,yBAAyB;QAC3C,gBAAgB,EAAE,yBAAyB;KAC5C,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM;YAAE,SAAS;QACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,iEAAiE;YACjE,wEAAwE;YACxE,yEAAyE;YACzE,SAAS;QACX,CAAC;QACD,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,uBAAuB,CACpC,MAAmC,EACnC,MAAoB,EACpB,aAA4B,EAC5B,eAAgC;IAEhC,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;IAC1E,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAC;IACrF,MAAM,EAAE,8BAA8B,EAAE,8BAA8B,EAAE,GAAG,MAAM,MAAM,CAAC,sCAAsC,CAAC,CAAC;IAEhI,MAAM,gBAAgB,GAAI,MAA0C,CAAC,MAAM;QACzE,CAAC,CAAE,MAAuE;QAC1E,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;IAChF,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,EAAE,cAAc,EAAE,gBAAgB,CAAC,WAAW,EAAE,GAAG,IAAI,KAAK,EAAE,MAAM,EAAE,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9I,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACzB,GAAG,CAAC,SAAS,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC;QAEzC,IAAI,cAAc,GAAoB,IAAI,CAAC;QAC3C,IAAI,CAAC;YAAC,cAAc,GAAG,WAAW,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC;QACvE,MAAM,wBAAwB,GAAG,GAAG,EAAE;YACpC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;YAC7C,IAAI,WAAW,GAA8D,SAAS,CAAC;YACvF,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;gBAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;gBACtD,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,SAAS,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBACvI,WAAW,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gBACnD,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAK,CAA2B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACnD,WAAW,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;gBACvC,CAAC;YACH,CAAC;YACD,OAAO,aAAa,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAC7D,CAAC,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC;YACrC,QAAQ,EAAE,cAAc;YACxB,OAAO,EAAE,EAAE,MAAM,EAAE,wBAAwB,EAAE;YAC7C,SAAS,EAAE,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC;gBACxB,QAAQ,EAAE,MAAM,EAAsB,UAAU;gBAChD,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,GAAG,CAAC,SAAS;gBACvD,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,GAAG,CAAC,SAAS;gBACrD,eAAe,EAAE,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS;aAC1D,CAAC;SACH,CAAC,CAAC;QACH,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAExB,MAAM,IAAI,GAA4C,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC;QACnI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,sBAAsB,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9E,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,EAAE,8BAA8B,CAAC;YACxE,eAAe;YACf,oBAAoB,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,oBAAoB;YACzE,0BAA0B,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,0BAA0B;SACtF,CAAC,CAAC,CAAC;QACJ,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,EAAE,8BAA8B,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;IAC7G,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,sBAAsB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAC5D,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,EAAE,gFAAgF,CAAC,CAAC;QAC3H,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YACvD,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,EAAE,gFAAgF,CAAC,CAAC;QAC3H,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,EAAE,8BAA8B,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;IAC7G,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAoB,EACpB,oBAA0F;IAE1F,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAEtD,MAAM,MAAM,GAAG,IAAI,eAAe,EAAc,CAAC;IAEjD,8EAA8E;IAC9E,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAC;IAC5E,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAElE,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC;QACtC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU;KAC5C,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC;QAC1C,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU;QACpC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,oBAAoB;QACzD,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC;KAChF,CAAC,CAAC;IAEH,+EAA+E;IAC/E,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEnC,sEAAsE;IACtE,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAClF,IAAI,iBAAsF,CAAC;IAC3F,IAAI,oBAAoB,EAAE,CAAC;QACzB,iBAAiB,GAAG,oBAAoB,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,yCAAyC,CAAC,CAAC;YAC1F,MAAM,EAAE,4BAA4B,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;YACtF,iBAAiB,GAAG,qBAAqB,CAAC,4BAA4B,EAAE,CAAC,CAAC;QAC5E,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;IACD,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,kBAAkB,CAAC,EAAE,YAAY,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC;IAE3F,mCAAmC;IACnC,MAAM,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;IAE3E,sCAAsC;IACtC,MAAM,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;IAE9E,+EAA+E;IAC/E,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAClF,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,kBAAkB,CAAC;QACnD,aAAa;QACb,eAAe;QACf,eAAe;QACf,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;QACxB,OAAO,EAAE,cAAc;KACxB,CAAC,CAAC,CAAC;IAEJ,sFAAsF;IACtF,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,GAAG,EAAE,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAChD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACrD,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE;gBAClC,IAAI,EAAE,KAAK,CAAC,IAAI;aACjB,CAAC,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC;QAChC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;QACxB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;QACxB,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC;KACpF,CAAC,CAAC;IACH,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;IAEhE,OAAO;QACL,IAAI;QACJ,aAAa;QACb,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE;QAC3B,aAAa;QACb,eAAe;QACf,eAAe;KAChB,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,4EAA4E;AAC5E,+BAA+B;AAC/B,MAAM,YAAY,GAAG;IACnB,iBAAiB,EAAE,mBAAmB;IACtC,eAAe,EAAE,iBAAiB;IAClC,gBAAgB,EAAE,kBAAkB;IACpC,sBAAsB,EAAE,yBAAyB;CAClD,CAAC"}
|
package/dist/http/types.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
-
import type { CallerClient } from './middleware/caller-identity.js';
|
|
3
|
-
export interface RequestContext {
|
|
4
|
-
url: URL;
|
|
5
|
-
cwd?: string;
|
|
6
|
-
body?: unknown;
|
|
7
|
-
authed: boolean;
|
|
8
|
-
callerClient: CallerClient;
|
|
9
|
-
/** Calling agent's model id from x-mma-main-model header (null if absent). */
|
|
10
|
-
mainModel: string | null;
|
|
11
|
-
}
|
|
12
|
-
export type Handler = (ctx: RequestContext, res: ServerResponse, params: Record<string, string>) => Promise<void> | void;
|
|
13
|
-
/**
|
|
14
|
-
* Raw handler shape used by the C1 RouteDispatcher inside the server.
|
|
15
|
-
* Server-specific because it carries RequestContext (caller identity, cwd, body).
|
|
16
|
-
* The core RouteDispatcher is generic; this is the concrete H instantiation
|
|
17
|
-
* the server registers.
|
|
18
|
-
*/
|
|
19
|
-
export type RawHandler = (req: IncomingMessage, res: ServerResponse, params: Record<string, string>, ctx: RequestContext) => Promise<void> | void;
|
|
20
|
-
//# sourceMappingURL=types.d.ts.map
|
package/dist/http/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/http/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEpE,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,GAAG,CAAC;IACT,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC;IAC3B,8EAA8E;IAC9E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAEzH;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,CACvB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC"}
|
package/dist/http/types.js
DELETED
package/dist/http/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/http/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { type Client } from './manifest.js';
|
|
3
|
-
declare const disabledStateSchema: z.ZodObject<{
|
|
4
|
-
version: z.ZodLiteral<1>;
|
|
5
|
-
disabledAt: z.ZodNumber;
|
|
6
|
-
cliVersion: z.ZodString;
|
|
7
|
-
targets: z.ZodArray<z.ZodEnum<{
|
|
8
|
-
gemini: "gemini";
|
|
9
|
-
"claude-code": "claude-code";
|
|
10
|
-
cursor: "cursor";
|
|
11
|
-
codex: "codex";
|
|
12
|
-
}>>;
|
|
13
|
-
}, z.core.$strip>;
|
|
14
|
-
export type DisabledState = z.infer<typeof disabledStateSchema>;
|
|
15
|
-
/** Full path to the sentinel file. */
|
|
16
|
-
export declare function disabledStatePath(homeDir?: string): string;
|
|
17
|
-
/**
|
|
18
|
-
* Read and validate the sentinel. Returns null when absent, unreadable, or
|
|
19
|
-
* structurally invalid — a malformed sentinel must never wedge sync-skills.
|
|
20
|
-
*/
|
|
21
|
-
export declare function readDisabledState(homeDir?: string): DisabledState | null;
|
|
22
|
-
/** The set of currently-disabled clients (empty when the sentinel is absent). */
|
|
23
|
-
export declare function disabledTargets(homeDir?: string): Client[];
|
|
24
|
-
/**
|
|
25
|
-
* Mark `targets` as disabled, unioned with any already-disabled clients.
|
|
26
|
-
* Returns the resulting disabled set (stable ALL_CLIENTS order).
|
|
27
|
-
*/
|
|
28
|
-
export declare function addDisabledTargets(homeDir: string | undefined, targets: Client[], cliVersion: string): Client[];
|
|
29
|
-
/**
|
|
30
|
-
* Clear `targets` from the disabled set. Deletes the sentinel file entirely
|
|
31
|
-
* once nothing remains disabled. Returns the still-disabled set.
|
|
32
|
-
*/
|
|
33
|
-
export declare function clearDisabledTargets(homeDir: string | undefined, targets: Client[]): Client[];
|
|
34
|
-
export {};
|
|
35
|
-
//# sourceMappingURL=disabled-state.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"disabled-state.d.ts","sourceRoot":"","sources":["../../src/skill-install/disabled-state.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAA4B,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAQtE,QAAA,MAAM,mBAAmB;;;;;;;;;;iBAKvB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,sCAAsC;AACtC,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAQxE;AAED,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAE1D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,EAAE,MAAM,EAAE,EACjB,UAAU,EAAE,MAAM,GACjB,MAAM,EAAE,CAWV;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAgB7F"}
|