@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
package/dist/cli/index.js
DELETED
|
@@ -1,345 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* CLI entry point for `mmagent` / `multi-model-agent`.
|
|
4
|
-
*
|
|
5
|
-
* Usage:
|
|
6
|
-
* mmagent serve [--config <path>]
|
|
7
|
-
* mmagent --help
|
|
8
|
-
* mmagent --version
|
|
9
|
-
*
|
|
10
|
-
* Config discovery order (highest priority → lowest):
|
|
11
|
-
* 1. --config <path> (explicit flag)
|
|
12
|
-
* 2. $MMAGENT_CONFIG env var
|
|
13
|
-
* 3. CWD/.multi-model-agent.json
|
|
14
|
-
* 4. ~/.multi-model/config.json
|
|
15
|
-
*
|
|
16
|
-
* All side effects (process.exit, stdout/stderr writes) are contained in the
|
|
17
|
-
* bootstrap at the bottom of this file. The internal `main()` function is
|
|
18
|
-
* exported so it can be unit-tested without spawning subprocesses.
|
|
19
|
-
*
|
|
20
|
-
* Signal lifecycle is owned by `serve.ts` — this module delegates to
|
|
21
|
-
* `startServe()` which registers SIGTERM/SIGINT handlers and manages process.exit.
|
|
22
|
-
*/
|
|
23
|
-
import * as path from 'node:path';
|
|
24
|
-
import * as fs from 'node:fs';
|
|
25
|
-
import * as os from 'node:os';
|
|
26
|
-
import { fileURLToPath } from 'node:url';
|
|
27
|
-
import minimist from 'minimist';
|
|
28
|
-
import { loadConfigFromFile, } from '@zhixuan92/multi-model-agent-core';
|
|
29
|
-
import { startServe } from './serve.js';
|
|
30
|
-
import { printToken } from './print-token.js';
|
|
31
|
-
import { runStatus, buildServerUrl } from './status.js';
|
|
32
|
-
import { runInfo } from './info.js';
|
|
33
|
-
import { runSyncSkills } from './sync-skills.js';
|
|
34
|
-
import { runDisable, runEnable } from './toggle.js';
|
|
35
|
-
import { runLogs } from './logs.js';
|
|
36
|
-
import { runTelemetry } from './telemetry.js';
|
|
37
|
-
/** Parse minimist args from an argv array. */
|
|
38
|
-
export function parseArgs(argv) {
|
|
39
|
-
return minimist(argv, {
|
|
40
|
-
string: ['config', 'batch'],
|
|
41
|
-
boolean: ['help', 'version', 'json', 'dry-run', 'if-exists', 'silent', 'best-effort', 'follow', 'log'],
|
|
42
|
-
alias: { config: 'c', help: 'h', version: 'v', json: 'j' },
|
|
43
|
-
// Note: stopEarly is NOT set. With stopEarly:true, options after the first
|
|
44
|
-
// positional argument (the subcommand) would be silently dropped. E.g.
|
|
45
|
-
// `mmagent serve --config ./config.json` would lose --config.
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Build the ordered list of config-file candidates from discovery sources.
|
|
50
|
-
* Returns an array of resolved paths; callers filter for existence and
|
|
51
|
-
* iterate in priority order. This single builder ensures that
|
|
52
|
-
* resolveConfigPath() and loadConfig() cannot drift apart.
|
|
53
|
-
*/
|
|
54
|
-
function buildCandidatePaths(explicit, env, cwd, home) {
|
|
55
|
-
const paths = [];
|
|
56
|
-
if (explicit)
|
|
57
|
-
paths.push(explicit);
|
|
58
|
-
const envVal = (env['MMAGENT_CONFIG'] ?? '').trim();
|
|
59
|
-
if (envVal)
|
|
60
|
-
paths.push(envVal);
|
|
61
|
-
paths.push(path.join(cwd, '.multi-model-agent.json'));
|
|
62
|
-
paths.push(path.join(home, '.multi-model', 'config.json'));
|
|
63
|
-
return paths;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Resolve the config file path using the discovery order:
|
|
67
|
-
* 1. --config <path> (explicit flag)
|
|
68
|
-
* 2. $MMAGENT_CONFIG (env var)
|
|
69
|
-
* 3. CWD/.multi-model-agent.json
|
|
70
|
-
* 4. ~/.multi-model/config.json
|
|
71
|
-
*
|
|
72
|
-
* Returns the first path that exists, or undefined if none exist.
|
|
73
|
-
* Does NOT validate or parse the file — caller uses loadConfigFromFile().
|
|
74
|
-
*/
|
|
75
|
-
export function resolveConfigPath(explicit, env, cwd, home) {
|
|
76
|
-
for (const p of buildCandidatePaths(explicit, env, cwd, home)) {
|
|
77
|
-
if (p && fs.existsSync(p))
|
|
78
|
-
return p;
|
|
79
|
-
}
|
|
80
|
-
return undefined;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Load config using the discovery order.
|
|
84
|
-
* Tries each candidate in priority order and returns the first successfully
|
|
85
|
-
* loaded config. Returns an error listing all attempted paths if none are found
|
|
86
|
-
* or every found file is unreadable/invalid.
|
|
87
|
-
*/
|
|
88
|
-
export async function loadConfig(explicitPath, deps) {
|
|
89
|
-
const cwd = deps.cwd?.() ?? process.cwd();
|
|
90
|
-
const home = deps.homeDir?.() ?? os.homedir();
|
|
91
|
-
const env = deps.env?.() ?? process.env;
|
|
92
|
-
const attempted = [];
|
|
93
|
-
for (const p of buildCandidatePaths(explicitPath, env, cwd, home)) {
|
|
94
|
-
if (!p) {
|
|
95
|
-
attempted.push('<source: not set>');
|
|
96
|
-
continue;
|
|
97
|
-
}
|
|
98
|
-
attempted.push(p);
|
|
99
|
-
if (!fs.existsSync(p))
|
|
100
|
-
continue;
|
|
101
|
-
try {
|
|
102
|
-
return await loadConfigFromFile(p);
|
|
103
|
-
}
|
|
104
|
-
catch (err) {
|
|
105
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
106
|
-
throw new Error(`Config error (${p}): ${msg}`);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
throw new Error(`No config file found. Tried:\n${attempted.join('\n')}\n` +
|
|
110
|
-
`Set one via --config, $MMAGENT_CONFIG, or place it at a default location above.`);
|
|
111
|
-
}
|
|
112
|
-
const HELP_TEXT = `\
|
|
113
|
-
mmagent — multi-model-agent HTTP server
|
|
114
|
-
|
|
115
|
-
Usage:
|
|
116
|
-
mmagent [command] [options]
|
|
117
|
-
|
|
118
|
-
Commands:
|
|
119
|
-
serve Start the HTTP server (default)
|
|
120
|
-
print-token Print the bearer auth token to stdout
|
|
121
|
-
info Print config + daemon identity (works offline)
|
|
122
|
-
status Show server status (requires a running server)
|
|
123
|
-
sync-skills Install + update + reconcile all shipped skills (single upsert command, replaces 4.0.x install-skill / update-skills)
|
|
124
|
-
disable Remove MMA skills from clients and pin them off (survives npm upgrades)
|
|
125
|
-
enable Restore MMA skills (clears a prior \`disable\`, then re-syncs)
|
|
126
|
-
logs Tail the diagnostic log (use --follow / --batch=<id>)
|
|
127
|
-
telemetry Manage telemetry consent (status|enable|disable|reset-id|dump-queue)
|
|
128
|
-
|
|
129
|
-
Global options:
|
|
130
|
-
--config, -c <path> Path to config file
|
|
131
|
-
--help, -h Show this help
|
|
132
|
-
--version, -v Show version
|
|
133
|
-
`;
|
|
134
|
-
/**
|
|
135
|
-
* Read the server package version from package.json, walking up from this file.
|
|
136
|
-
*/
|
|
137
|
-
function readServerVersion() {
|
|
138
|
-
try {
|
|
139
|
-
const thisDir = path.dirname(fileURLToPath(import.meta.url));
|
|
140
|
-
const pkgPath = path.join(thisDir, '..', '..', 'package.json');
|
|
141
|
-
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
142
|
-
return pkg.version ?? '0.0.0';
|
|
143
|
-
}
|
|
144
|
-
catch {
|
|
145
|
-
return '0.0.0';
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Main entry point — exported so it can be unit-tested without subprocess spawning.
|
|
150
|
-
*
|
|
151
|
-
* @param deps I/O dependencies (defaults to real process globals).
|
|
152
|
-
*/
|
|
153
|
-
export async function main(deps = {}) {
|
|
154
|
-
const argv = deps.argv?.() ?? process.argv.slice(2);
|
|
155
|
-
const stdout = deps.stdout ?? process.stdout.write.bind(process.stdout);
|
|
156
|
-
const stderr = deps.stderr ?? process.stderr.write.bind(process.stderr);
|
|
157
|
-
const exit = deps.exit ?? process.exit.bind(process);
|
|
158
|
-
const opts = parseArgs(argv);
|
|
159
|
-
const positional = opts._;
|
|
160
|
-
const subcommand = positional[0] ?? 'serve';
|
|
161
|
-
const configArg = typeof opts['config'] === 'string' ? opts['config'] : undefined;
|
|
162
|
-
if (opts['help']) {
|
|
163
|
-
stdout(HELP_TEXT);
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
if (opts['version']) {
|
|
167
|
-
stdout(readServerVersion() + '\n');
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
switch (subcommand) {
|
|
171
|
-
case 'serve': {
|
|
172
|
-
const config = await loadConfig(configArg, deps);
|
|
173
|
-
// Stderr event streaming is always on (4.7.3+; no --verbose flag).
|
|
174
|
-
// --log enables JSONL persistence to ~/.multi-model/logs/mmagent-YYYY-MM-DD.jsonl.
|
|
175
|
-
if (opts['log'] === true) {
|
|
176
|
-
if (!config.diagnostics)
|
|
177
|
-
config.diagnostics = { log: false };
|
|
178
|
-
config.diagnostics.log = true;
|
|
179
|
-
}
|
|
180
|
-
// startServe() blocks until a signal arrives and exits the process.
|
|
181
|
-
await startServe(config, exit);
|
|
182
|
-
break;
|
|
183
|
-
}
|
|
184
|
-
case 'print-token': {
|
|
185
|
-
const config = await loadConfig(configArg, deps).catch(() => null);
|
|
186
|
-
const tokenFile = config
|
|
187
|
-
? config.server.auth.tokenFile
|
|
188
|
-
: path.join(deps.homeDir?.() ?? os.homedir(), '.multi-model', 'auth-token');
|
|
189
|
-
const code = printToken({
|
|
190
|
-
homeDir: deps.homeDir?.() ?? os.homedir(),
|
|
191
|
-
tokenFile,
|
|
192
|
-
env: deps.env?.() ?? process.env,
|
|
193
|
-
stdout: deps.stdout,
|
|
194
|
-
stderr: deps.stderr,
|
|
195
|
-
});
|
|
196
|
-
exit(code);
|
|
197
|
-
break;
|
|
198
|
-
}
|
|
199
|
-
case 'status': {
|
|
200
|
-
const jsonFlag = opts['json'] === true;
|
|
201
|
-
const config = await loadConfig(configArg, deps).catch(() => null);
|
|
202
|
-
const home = deps.homeDir?.() ?? os.homedir();
|
|
203
|
-
const tokenFile = config
|
|
204
|
-
? config.server.auth.tokenFile
|
|
205
|
-
: path.join(home, '.multi-model', 'auth-token');
|
|
206
|
-
const serverUrl = config
|
|
207
|
-
? buildServerUrl(config.server.bind, config.server.port)
|
|
208
|
-
: buildServerUrl('127.0.0.1', 7337);
|
|
209
|
-
const code = await runStatus({
|
|
210
|
-
serverUrl,
|
|
211
|
-
tokenFile,
|
|
212
|
-
json: jsonFlag,
|
|
213
|
-
env: deps.env?.() ?? process.env,
|
|
214
|
-
homeDir: home,
|
|
215
|
-
stdout: deps.stdout,
|
|
216
|
-
stderr: deps.stderr,
|
|
217
|
-
});
|
|
218
|
-
exit(code);
|
|
219
|
-
break;
|
|
220
|
-
}
|
|
221
|
-
case 'info': {
|
|
222
|
-
const jsonFlag = opts['json'] === true;
|
|
223
|
-
const config = await loadConfig(configArg, deps).catch(() => null);
|
|
224
|
-
if (!config) {
|
|
225
|
-
stderr(`mmagent info: cannot load config. Set --config or $MMAGENT_CONFIG.\n`);
|
|
226
|
-
exit(1);
|
|
227
|
-
break;
|
|
228
|
-
}
|
|
229
|
-
const code = await runInfo({
|
|
230
|
-
cliVersion: readServerVersion(),
|
|
231
|
-
bind: config.server.bind,
|
|
232
|
-
port: config.server.port,
|
|
233
|
-
tokenFile: config.server.auth.tokenFile,
|
|
234
|
-
homeDir: deps.homeDir?.() ?? os.homedir(),
|
|
235
|
-
json: jsonFlag,
|
|
236
|
-
stdout: deps.stdout,
|
|
237
|
-
stderr: deps.stderr,
|
|
238
|
-
});
|
|
239
|
-
exit(code);
|
|
240
|
-
break;
|
|
241
|
-
}
|
|
242
|
-
case 'logs': {
|
|
243
|
-
const config = await loadConfig(configArg, deps).catch(() => null);
|
|
244
|
-
if (!config) {
|
|
245
|
-
stderr(`mmagent logs: cannot load config. Set --config or $MMAGENT_CONFIG.\n`);
|
|
246
|
-
exit(1);
|
|
247
|
-
break;
|
|
248
|
-
}
|
|
249
|
-
const code = await runLogs({
|
|
250
|
-
config,
|
|
251
|
-
homeDir: deps.homeDir?.() ?? os.homedir(),
|
|
252
|
-
follow: opts['follow'] === true,
|
|
253
|
-
batchId: typeof opts['batch'] === 'string' ? opts['batch'] : undefined,
|
|
254
|
-
stdout: deps.stdout,
|
|
255
|
-
stderr: deps.stderr,
|
|
256
|
-
});
|
|
257
|
-
exit(code);
|
|
258
|
-
break;
|
|
259
|
-
}
|
|
260
|
-
case 'sync-skills': {
|
|
261
|
-
// Forward argv tokens that come after the subcommand name so
|
|
262
|
-
// sync-skills' own minimist sees `--target=`, `--all-targets`, etc.
|
|
263
|
-
const subCmdIdx = argv.indexOf('sync-skills');
|
|
264
|
-
const subArgv = subCmdIdx >= 0 ? argv.slice(subCmdIdx + 1) : positional.slice(1);
|
|
265
|
-
const code = await runSyncSkills({
|
|
266
|
-
argv: subArgv,
|
|
267
|
-
homeDir: deps.homeDir?.() ?? os.homedir(),
|
|
268
|
-
ifExists: opts['if-exists'] === true,
|
|
269
|
-
silent: opts['silent'] === true,
|
|
270
|
-
bestEffort: opts['best-effort'] === true,
|
|
271
|
-
stdout: deps.stdout,
|
|
272
|
-
stderr: deps.stderr,
|
|
273
|
-
});
|
|
274
|
-
exit(code);
|
|
275
|
-
break;
|
|
276
|
-
}
|
|
277
|
-
case 'enable':
|
|
278
|
-
case 'disable': {
|
|
279
|
-
// Forward argv tokens after the subcommand name so toggle's own minimist
|
|
280
|
-
// sees --target=, --all-targets, --dry-run, --json.
|
|
281
|
-
const subCmdIdx = argv.indexOf(subcommand);
|
|
282
|
-
const subArgv = subCmdIdx >= 0 ? argv.slice(subCmdIdx + 1) : positional.slice(1);
|
|
283
|
-
const run = subcommand === 'disable' ? runDisable : runEnable;
|
|
284
|
-
const code = await run({
|
|
285
|
-
argv: subArgv,
|
|
286
|
-
homeDir: deps.homeDir?.() ?? os.homedir(),
|
|
287
|
-
cliVersion: readServerVersion(),
|
|
288
|
-
stdout: deps.stdout,
|
|
289
|
-
stderr: deps.stderr,
|
|
290
|
-
});
|
|
291
|
-
exit(code);
|
|
292
|
-
break;
|
|
293
|
-
}
|
|
294
|
-
case 'telemetry': {
|
|
295
|
-
const home = deps.homeDir?.() ?? path.join(os.homedir(), '.multi-model');
|
|
296
|
-
const telemetrySubcommand = positional[1] ?? 'status';
|
|
297
|
-
const validSubcommands = ['status', 'enable', 'disable', 'reset-id', 'dump-queue'];
|
|
298
|
-
if (!validSubcommands.includes(telemetrySubcommand)) {
|
|
299
|
-
stderr(`mmagent telemetry: unknown subcommand '${telemetrySubcommand}'\nValid: ${validSubcommands.join(', ')}\n`);
|
|
300
|
-
exit(1);
|
|
301
|
-
break;
|
|
302
|
-
}
|
|
303
|
-
const code = await runTelemetry({
|
|
304
|
-
subcommand: telemetrySubcommand,
|
|
305
|
-
homeDir: home,
|
|
306
|
-
stdout: deps.stdout,
|
|
307
|
-
stderr: deps.stderr,
|
|
308
|
-
});
|
|
309
|
-
exit(code);
|
|
310
|
-
break;
|
|
311
|
-
}
|
|
312
|
-
default: {
|
|
313
|
-
stderr(`Unknown command: ${subcommand}\nRun 'mmagent --help' for usage.\n`);
|
|
314
|
-
exit(1);
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
// ── Bootstrap ──────────────────────────────────────────────────────────────
|
|
319
|
-
// Only run main() when this module is executed as the CLI entry point.
|
|
320
|
-
// Tests import main() directly and pass CliDeps.
|
|
321
|
-
function isMain() {
|
|
322
|
-
try {
|
|
323
|
-
const argv1 = process.argv[1];
|
|
324
|
-
if (!argv1)
|
|
325
|
-
return false;
|
|
326
|
-
// Resolve to absolute path and follow symlinks — npm installs the bin as a
|
|
327
|
-
// symlink in node_modules/.bin/, so argv[1] points at the symlink, not the
|
|
328
|
-
// real file. fs.realpathSync follows the link so it matches import.meta.url.
|
|
329
|
-
const entryPath = import.meta.url.startsWith('file://')
|
|
330
|
-
? fileURLToPath(import.meta.url)
|
|
331
|
-
: path.resolve(argv1);
|
|
332
|
-
return fs.realpathSync(path.resolve(argv1)) === entryPath;
|
|
333
|
-
}
|
|
334
|
-
catch {
|
|
335
|
-
return false;
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
if (isMain()) {
|
|
339
|
-
void main().catch((err) => {
|
|
340
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
341
|
-
process.stderr.write(`mmagent: ${msg}\n`);
|
|
342
|
-
process.exit(1);
|
|
343
|
-
});
|
|
344
|
-
}
|
|
345
|
-
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/info.d.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
export interface InfoDeps {
|
|
2
|
-
/** CLI package version (read from the server package.json at startup). */
|
|
3
|
-
cliVersion: string;
|
|
4
|
-
/** Config bind address (e.g. '127.0.0.1'). */
|
|
5
|
-
bind: string;
|
|
6
|
-
/** Config port (e.g. 7337). */
|
|
7
|
-
port: number;
|
|
8
|
-
/** Token file path (already resolved from config, no tilde expansion yet). */
|
|
9
|
-
tokenFile: string;
|
|
10
|
-
/** Home dir for tilde expansion. Defaults to os.homedir(). */
|
|
11
|
-
homeDir?: string;
|
|
12
|
-
/** Emit machine-readable JSON instead of a human summary. */
|
|
13
|
-
json?: boolean;
|
|
14
|
-
/** stdout writer (for testing). */
|
|
15
|
-
stdout?: (s: string) => boolean;
|
|
16
|
-
/** stderr writer (for testing). */
|
|
17
|
-
stderr?: (s: string) => boolean;
|
|
18
|
-
/** Injectable fetch for testing; defaults to global fetch. */
|
|
19
|
-
fetch?: typeof fetch;
|
|
20
|
-
}
|
|
21
|
-
export declare function runInfo(deps: InfoDeps): Promise<number>;
|
|
22
|
-
//# sourceMappingURL=info.d.ts.map
|
package/dist/cli/info.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/cli/info.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,QAAQ;IACvB,0EAA0E;IAC1E,UAAU,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,mCAAmC;IACnC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAChC,mCAAmC;IACnC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAChC,8DAA8D;IAC9D,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAsBD,wBAAsB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CA2E7D"}
|
package/dist/cli/info.js
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* info.ts — `mmagent info` subcommand.
|
|
3
|
-
*
|
|
4
|
-
* One-shot identity probe: emits CLI version, configured bind/port, token
|
|
5
|
-
* fingerprint (sha256 first 8 hex chars), and — if the daemon is reachable —
|
|
6
|
-
* daemon version/pid/startedAt/uptimeMs from GET /health. Designed to be
|
|
7
|
-
* parseable with --json for scripts and human-readable without it.
|
|
8
|
-
*
|
|
9
|
-
* Usage:
|
|
10
|
-
* mmagent info [--config <path>] [--json]
|
|
11
|
-
*/
|
|
12
|
-
import * as crypto from 'node:crypto';
|
|
13
|
-
import * as os from 'node:os';
|
|
14
|
-
import * as path from 'node:path';
|
|
15
|
-
import { readFileSync } from 'node:fs';
|
|
16
|
-
import { notApplicable } from '@zhixuan92/multi-model-agent-core';
|
|
17
|
-
function fingerprint(token) {
|
|
18
|
-
return crypto.createHash('sha256').update(token).digest('hex').slice(0, 8);
|
|
19
|
-
}
|
|
20
|
-
function resolveHome(p, homeDir) {
|
|
21
|
-
return p.startsWith('~/') ? path.join(homeDir, p.slice(2)) : p;
|
|
22
|
-
}
|
|
23
|
-
export async function runInfo(deps) {
|
|
24
|
-
const stdout = deps.stdout ?? process.stdout.write.bind(process.stdout);
|
|
25
|
-
const stderr = deps.stderr ?? process.stderr.write.bind(process.stderr);
|
|
26
|
-
const fetcher = deps.fetch ?? fetch;
|
|
27
|
-
const homeDir = deps.homeDir ?? os.homedir();
|
|
28
|
-
const json = deps.json ?? false;
|
|
29
|
-
const resolvedTokenFile = resolveHome(deps.tokenFile, homeDir);
|
|
30
|
-
let tokenFp;
|
|
31
|
-
try {
|
|
32
|
-
const token = readFileSync(resolvedTokenFile, 'utf-8').trim();
|
|
33
|
-
if (token.length === 0) {
|
|
34
|
-
stderr(`mmagent info: auth token file is empty: ${resolvedTokenFile}\n`);
|
|
35
|
-
return 1;
|
|
36
|
-
}
|
|
37
|
-
tokenFp = fingerprint(token);
|
|
38
|
-
}
|
|
39
|
-
catch (err) {
|
|
40
|
-
const code = err.code;
|
|
41
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
42
|
-
if (code === 'ENOENT') {
|
|
43
|
-
stderr(`mmagent info: auth token file not found: ${resolvedTokenFile}\n`);
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
stderr(`mmagent info: cannot read auth token file: ${msg}\n`);
|
|
47
|
-
}
|
|
48
|
-
return 1;
|
|
49
|
-
}
|
|
50
|
-
const host = (deps.bind === '0.0.0.0' || deps.bind === '::') ? '127.0.0.1' : deps.bind;
|
|
51
|
-
const healthUrl = `http://${host}:${deps.port}/health`;
|
|
52
|
-
let running = false;
|
|
53
|
-
let health = null;
|
|
54
|
-
try {
|
|
55
|
-
const res = await fetcher(healthUrl, { signal: AbortSignal.timeout(2000) });
|
|
56
|
-
if (res.ok) {
|
|
57
|
-
health = await res.json();
|
|
58
|
-
running = true;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
// daemon not running — leave running=false
|
|
63
|
-
}
|
|
64
|
-
const fromHealth = (key, validate) => {
|
|
65
|
-
if (!running)
|
|
66
|
-
return notApplicable('daemon not running');
|
|
67
|
-
const v = health?.[key];
|
|
68
|
-
if (validate(v))
|
|
69
|
-
return v;
|
|
70
|
-
return notApplicable('daemon version predates info fields');
|
|
71
|
-
};
|
|
72
|
-
const info = {
|
|
73
|
-
cliVersion: deps.cliVersion,
|
|
74
|
-
daemonVersion: fromHealth('version', (v) => typeof v === 'string' && v.length > 0),
|
|
75
|
-
bind: deps.bind,
|
|
76
|
-
port: deps.port,
|
|
77
|
-
pid: fromHealth('pid', (v) => typeof v === 'number'),
|
|
78
|
-
uptimeMs: fromHealth('uptimeMs', (v) => typeof v === 'number'),
|
|
79
|
-
startedAt: fromHealth('startedAt', (v) => typeof v === 'number'),
|
|
80
|
-
tokenFingerprint: tokenFp,
|
|
81
|
-
running,
|
|
82
|
-
};
|
|
83
|
-
if (json) {
|
|
84
|
-
stdout(JSON.stringify(info, null, 2) + '\n');
|
|
85
|
-
return 0;
|
|
86
|
-
}
|
|
87
|
-
const parts = [`mmagent cli=${info.cliVersion}`];
|
|
88
|
-
if (typeof info.daemonVersion === 'string')
|
|
89
|
-
parts.push(`daemon=${info.daemonVersion}`);
|
|
90
|
-
parts.push(`bind=${info.bind}:${info.port}`);
|
|
91
|
-
if (typeof info.pid === 'number')
|
|
92
|
-
parts.push(`pid=${info.pid}`);
|
|
93
|
-
if (typeof info.uptimeMs === 'number')
|
|
94
|
-
parts.push(`uptime=${Math.floor(info.uptimeMs / 1000)}s`);
|
|
95
|
-
parts.push(`token=${info.tokenFingerprint}`);
|
|
96
|
-
parts.push(`running=${info.running ? 'yes' : 'no'}`);
|
|
97
|
-
stdout(parts.join(' ') + '\n');
|
|
98
|
-
return 0;
|
|
99
|
-
}
|
|
100
|
-
//# sourceMappingURL=info.js.map
|
package/dist/cli/info.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/cli/info.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/logs.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { MultiModelConfig } from '@zhixuan92/multi-model-agent-core';
|
|
2
|
-
export interface LogsDeps {
|
|
3
|
-
config: MultiModelConfig;
|
|
4
|
-
homeDir?: string;
|
|
5
|
-
follow?: boolean;
|
|
6
|
-
batchId?: string;
|
|
7
|
-
/** Polling interval when --follow; defaults to 300ms. */
|
|
8
|
-
pollMs?: number;
|
|
9
|
-
/** Max time to wait for the log file to appear under --follow; defaults to 30s. */
|
|
10
|
-
waitForLogMs?: number;
|
|
11
|
-
stdout?: (s: string) => boolean;
|
|
12
|
-
stderr?: (s: string) => boolean;
|
|
13
|
-
}
|
|
14
|
-
export declare function runLogs(deps: LogsDeps): Promise<number>;
|
|
15
|
-
//# sourceMappingURL=logs.d.ts.map
|
package/dist/cli/logs.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/cli/logs.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAChC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;CACjC;AAeD,wBAAsB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CA0E7D"}
|
package/dist/cli/logs.js
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* logs.ts — `mmagent logs` subcommand.
|
|
3
|
-
*
|
|
4
|
-
* Tails the diagnostic log file for today (mmagent-YYYY-MM-DD.jsonl). Supports
|
|
5
|
-
* --follow for tail-F semantics and --batch=<id> to filter to a single batch.
|
|
6
|
-
*
|
|
7
|
-
* Exit codes:
|
|
8
|
-
* 0 — success (including "no log file found" cases so scripts don't break)
|
|
9
|
-
* 1 — reserved for future use
|
|
10
|
-
*/
|
|
11
|
-
import * as os from 'node:os';
|
|
12
|
-
import * as path from 'node:path';
|
|
13
|
-
import * as fs from 'node:fs';
|
|
14
|
-
function todayUtc() {
|
|
15
|
-
return new Date().toISOString().slice(0, 10);
|
|
16
|
-
}
|
|
17
|
-
function resolveLogPath(config, homeDir) {
|
|
18
|
-
const dir = config.diagnostics?.logDir ?? path.join(homeDir, '.multi-model', 'logs');
|
|
19
|
-
return path.join(dir, `mmagent-${todayUtc()}.jsonl`);
|
|
20
|
-
}
|
|
21
|
-
function matchesBatch(line, batchId) {
|
|
22
|
-
return line.includes(`"batchId":"${batchId}"`);
|
|
23
|
-
}
|
|
24
|
-
export async function runLogs(deps) {
|
|
25
|
-
const stdout = deps.stdout ?? process.stdout.write.bind(process.stdout);
|
|
26
|
-
const stderr = deps.stderr ?? process.stderr.write.bind(process.stderr);
|
|
27
|
-
const homeDir = deps.homeDir ?? os.homedir();
|
|
28
|
-
const follow = deps.follow ?? false;
|
|
29
|
-
const pollMs = deps.pollMs ?? 300;
|
|
30
|
-
const waitForLogMs = deps.waitForLogMs ?? 30_000;
|
|
31
|
-
if (!deps.config.diagnostics?.log) {
|
|
32
|
-
stderr(`mmagent logs: diagnostics.log is false in config; set it to true to capture new events.\n`);
|
|
33
|
-
}
|
|
34
|
-
const logPath = resolveLogPath(deps.config, homeDir);
|
|
35
|
-
if (!fs.existsSync(logPath)) {
|
|
36
|
-
if (!follow) {
|
|
37
|
-
stderr(`mmagent logs: no log file at ${logPath}. Start the server with diagnostics.log: true and try again.\n`);
|
|
38
|
-
return 0;
|
|
39
|
-
}
|
|
40
|
-
const deadline = Date.now() + waitForLogMs;
|
|
41
|
-
while (!fs.existsSync(logPath) && Date.now() < deadline) {
|
|
42
|
-
await new Promise((r) => setTimeout(r, pollMs));
|
|
43
|
-
}
|
|
44
|
-
if (!fs.existsSync(logPath)) {
|
|
45
|
-
stderr(`mmagent logs: no log file appeared within ${Math.floor(waitForLogMs / 1000)}s at ${logPath}.\n`);
|
|
46
|
-
return 0;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
// Emit existing content (optionally batch-filtered).
|
|
50
|
-
let offset = 0;
|
|
51
|
-
try {
|
|
52
|
-
const existing = fs.readFileSync(logPath, 'utf8');
|
|
53
|
-
for (const line of existing.split('\n')) {
|
|
54
|
-
if (line.length === 0)
|
|
55
|
-
continue;
|
|
56
|
-
if (deps.batchId && !matchesBatch(line, deps.batchId))
|
|
57
|
-
continue;
|
|
58
|
-
stdout(line + '\n');
|
|
59
|
-
}
|
|
60
|
-
offset = existing.length;
|
|
61
|
-
}
|
|
62
|
-
catch (err) {
|
|
63
|
-
stderr(`mmagent logs: cannot read ${logPath}: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
64
|
-
return 0;
|
|
65
|
-
}
|
|
66
|
-
if (!follow)
|
|
67
|
-
return 0;
|
|
68
|
-
// Tail — poll for new content appended after `offset`.
|
|
69
|
-
let buf = '';
|
|
70
|
-
while (true) {
|
|
71
|
-
await new Promise((r) => setTimeout(r, pollMs));
|
|
72
|
-
let stat;
|
|
73
|
-
try {
|
|
74
|
-
stat = fs.statSync(logPath);
|
|
75
|
-
}
|
|
76
|
-
catch {
|
|
77
|
-
continue;
|
|
78
|
-
}
|
|
79
|
-
if (stat.size <= offset)
|
|
80
|
-
continue;
|
|
81
|
-
const fd = fs.openSync(logPath, 'r');
|
|
82
|
-
try {
|
|
83
|
-
const chunk = Buffer.alloc(stat.size - offset);
|
|
84
|
-
fs.readSync(fd, chunk, 0, chunk.length, offset);
|
|
85
|
-
buf += chunk.toString('utf8');
|
|
86
|
-
offset = stat.size;
|
|
87
|
-
}
|
|
88
|
-
finally {
|
|
89
|
-
fs.closeSync(fd);
|
|
90
|
-
}
|
|
91
|
-
const lines = buf.split('\n');
|
|
92
|
-
buf = lines.pop() ?? ''; // keep any trailing partial line for the next iteration
|
|
93
|
-
for (const line of lines) {
|
|
94
|
-
if (line.length === 0)
|
|
95
|
-
continue;
|
|
96
|
-
if (deps.batchId && !matchesBatch(line, deps.batchId))
|
|
97
|
-
continue;
|
|
98
|
-
stdout(line + '\n');
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
//# sourceMappingURL=logs.js.map
|
package/dist/cli/logs.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/cli/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export interface PrintTokenDeps {
|
|
2
|
-
/** Home directory (defaults to os.homedir()). */
|
|
3
|
-
homeDir?: string;
|
|
4
|
-
/** Token file path (already expanded). Overrides config discovery. */
|
|
5
|
-
tokenFile?: string;
|
|
6
|
-
/** Environment variable accessor. Defaults to process.env. */
|
|
7
|
-
env?: Record<string, string | undefined>;
|
|
8
|
-
/** Write to stdout. Defaults to process.stdout.write. */
|
|
9
|
-
stdout?: (s: string) => boolean;
|
|
10
|
-
/** Write to stderr. Defaults to process.stderr.write. */
|
|
11
|
-
stderr?: (s: string) => boolean;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Read the bearer token and print it to stdout.
|
|
15
|
-
* Returns 0 on success, 1 on error.
|
|
16
|
-
*/
|
|
17
|
-
export declare function printToken(deps?: PrintTokenDeps): number;
|
|
18
|
-
//# sourceMappingURL=print-token.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"print-token.d.ts","sourceRoot":"","sources":["../../src/cli/print-token.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,cAAc;IAC7B,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,yDAAyD;IACzD,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAChC,yDAAyD;IACzD,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,GAAE,cAAmB,GAAG,MAAM,CAsC5D"}
|