@tacuchi/agent-workflow-cli 22.4.2 → 24.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/README.md +39 -3
- package/dist/adapters/git-cli.js +59 -17
- package/dist/adapters/git-cli.js.map +1 -1
- package/dist/adapters/node-file-system.js +55 -1
- package/dist/adapters/node-file-system.js.map +1 -1
- package/dist/adapters/postgres-readonly-tools.js +277 -0
- package/dist/adapters/postgres-readonly-tools.js.map +1 -0
- package/dist/application/artifacts-service.js +2 -2
- package/dist/application/artifacts-service.js.map +1 -1
- package/dist/application/capability/dispatcher.js +2 -2
- package/dist/application/capability/dispatcher.js.map +1 -1
- package/dist/application/capability/installed-inventory.js +2 -2
- package/dist/application/capability/installed-inventory.js.map +1 -1
- package/dist/application/capability/readiness.js +1 -1
- package/dist/application/capability/readiness.js.map +1 -1
- package/dist/application/check-branch-service.js +2 -2
- package/dist/application/check-branch-service.js.map +1 -1
- package/dist/application/checkpoint/files-touched.js +271 -0
- package/dist/application/checkpoint/files-touched.js.map +1 -0
- package/dist/application/checkpoint/markdown.js +61 -8
- package/dist/application/checkpoint/markdown.js.map +1 -1
- package/dist/application/checkpoint/state-reader.js +8 -2
- package/dist/application/checkpoint/state-reader.js.map +1 -1
- package/dist/application/checkpoint-write-service.js +16 -5
- package/dist/application/checkpoint-write-service.js.map +1 -1
- package/dist/application/claims-ledger.js +330 -0
- package/dist/application/claims-ledger.js.map +1 -0
- package/dist/application/claims-recovery.js +338 -0
- package/dist/application/claims-recovery.js.map +1 -0
- package/dist/application/database-mcp-server.js +168 -0
- package/dist/application/database-mcp-server.js.map +1 -0
- package/dist/application/database-mcp-stdio.js +137 -0
- package/dist/application/database-mcp-stdio.js.map +1 -0
- package/dist/application/database-tool-catalog.js +226 -0
- package/dist/application/database-tool-catalog.js.map +1 -0
- package/dist/application/dev-only-services.js +154 -44
- package/dist/application/dev-only-services.js.map +1 -1
- package/dist/application/dsn-reader-service.js +1 -1
- package/dist/application/elicitation-server.js +382 -0
- package/dist/application/elicitation-server.js.map +1 -0
- package/dist/application/elicitation-stdio.js +48 -0
- package/dist/application/elicitation-stdio.js.map +1 -0
- package/dist/application/flow/advance.js +86 -5
- package/dist/application/flow/advance.js.map +1 -1
- package/dist/application/flow/checkout-observation.js +152 -0
- package/dist/application/flow/checkout-observation.js.map +1 -0
- package/dist/application/flow/flow-service.js +72 -13
- package/dist/application/flow/flow-service.js.map +1 -1
- package/dist/application/flow/internal-actions.js +460 -1
- package/dist/application/flow/internal-actions.js.map +1 -1
- package/dist/application/flow/internal-drive.js +22 -9
- package/dist/application/flow/internal-drive.js.map +1 -1
- package/dist/application/flow/prove.js +205 -0
- package/dist/application/flow/prove.js.map +1 -0
- package/dist/application/flow/run-journey.js +15 -0
- package/dist/application/flow/run-journey.js.map +1 -0
- package/dist/application/flow/run-projection.js +15 -3
- package/dist/application/flow/run-projection.js.map +1 -1
- package/dist/application/flow/run-state-service.js +19 -4
- package/dist/application/flow/run-state-service.js.map +1 -1
- package/dist/application/flow/submit.js +250 -72
- package/dist/application/flow/submit.js.map +1 -1
- package/dist/application/generate-launch-service.js +4 -4
- package/dist/application/generate-launch-service.js.map +1 -1
- package/dist/application/git-flow-service.js +9 -0
- package/dist/application/git-flow-service.js.map +1 -1
- package/dist/application/local-proposal.js +9 -0
- package/dist/application/local-proposal.js.map +1 -1
- package/dist/application/lock-service.js +96 -28
- package/dist/application/lock-service.js.map +1 -1
- package/dist/application/logging/log-events.js +19 -3
- package/dist/application/logging/log-events.js.map +1 -1
- package/dist/application/logging/logger.js +2 -2
- package/dist/application/logging/logger.js.map +1 -1
- package/dist/application/mcp-connections-service.js +115 -41
- package/dist/application/mcp-connections-service.js.map +1 -1
- package/dist/application/mcp-doctor-service.js +98 -54
- package/dist/application/mcp-doctor-service.js.map +1 -1
- package/dist/application/mcp-entry-classification.js +60 -0
- package/dist/application/mcp-entry-classification.js.map +1 -0
- package/dist/application/mcp-host-reader.js +114 -81
- package/dist/application/mcp-host-reader.js.map +1 -1
- package/dist/application/mcp-host-receipt-service.js +399 -0
- package/dist/application/mcp-host-receipt-service.js.map +1 -0
- package/dist/application/mcp-host-receipt-store.js +122 -0
- package/dist/application/mcp-host-receipt-store.js.map +1 -0
- package/dist/application/mcp-host-receipts.js +28 -0
- package/dist/application/mcp-host-receipts.js.map +1 -0
- package/dist/application/mcp-host-writer.js +321 -126
- package/dist/application/mcp-host-writer.js.map +1 -1
- package/dist/application/mcp-launch-probe-service.js +142 -0
- package/dist/application/mcp-launch-probe-service.js.map +1 -0
- package/dist/application/mcp-migration-service.js +351 -0
- package/dist/application/mcp-migration-service.js.map +1 -0
- package/dist/application/mcp-native-host-check-service.js +154 -0
- package/dist/application/mcp-native-host-check-service.js.map +1 -0
- package/dist/application/mcp-receipt-registration-service.js +105 -0
- package/dist/application/mcp-receipt-registration-service.js.map +1 -0
- package/dist/application/mcp-receipt-removal-service.js +62 -0
- package/dist/application/mcp-receipt-removal-service.js.map +1 -0
- package/dist/application/mcp-remove-service.js +84 -21
- package/dist/application/mcp-remove-service.js.map +1 -1
- package/dist/application/mcp-scope-common.js +2 -4
- package/dist/application/mcp-scope-common.js.map +1 -1
- package/dist/application/mcp-setup-service.js +60 -21
- package/dist/application/mcp-setup-service.js.map +1 -1
- package/dist/application/mcp-stdio-probe.js +526 -0
- package/dist/application/mcp-stdio-probe.js.map +1 -0
- package/dist/application/mcp-test-connection-service.js +23 -50
- package/dist/application/mcp-test-connection-service.js.map +1 -1
- package/dist/application/merge-state-service.js +10 -16
- package/dist/application/merge-state-service.js.map +1 -1
- package/dist/application/multiroot/claude.js +34 -15
- package/dist/application/multiroot/claude.js.map +1 -1
- package/dist/application/multiroot/codex.js +9 -5
- package/dist/application/multiroot/codex.js.map +1 -1
- package/dist/application/multiroot-service.js +20 -11
- package/dist/application/multiroot-service.js.map +1 -1
- package/dist/application/parsers/project-block.js +25 -2
- package/dist/application/parsers/project-block.js.map +1 -1
- package/dist/application/paths-service.js +30 -31
- package/dist/application/paths-service.js.map +1 -1
- package/dist/application/plan-exec-batch-service.js +549 -0
- package/dist/application/plan-exec-batch-service.js.map +1 -0
- package/dist/application/plan-exec-decision-service.js +273 -0
- package/dist/application/plan-exec-decision-service.js.map +1 -0
- package/dist/application/project-md-service.js +2 -2
- package/dist/application/project-md-service.js.map +1 -1
- package/dist/application/project-md-upsert-service.js +4 -4
- package/dist/application/project-md-upsert-service.js.map +1 -1
- package/dist/application/project-tab-data.js +12 -7
- package/dist/application/project-tab-data.js.map +1 -1
- package/dist/application/release-data-service.js +2 -2
- package/dist/application/release-data-service.js.map +1 -1
- package/dist/application/resume-service.js +32 -11
- package/dist/application/resume-service.js.map +1 -1
- package/dist/application/retirement/apply.js +84 -0
- package/dist/application/retirement/apply.js.map +1 -1
- package/dist/application/retirement/attribution.js +31 -1
- package/dist/application/retirement/attribution.js.map +1 -1
- package/dist/application/retirement/graph.js +19 -1
- package/dist/application/retirement/graph.js.map +1 -1
- package/dist/application/retirement/journal.js +11 -0
- package/dist/application/retirement/journal.js.map +1 -1
- package/dist/application/retirement/prepare.js +89 -3
- package/dist/application/retirement/prepare.js.map +1 -1
- package/dist/application/retirement/preview.js +16 -0
- package/dist/application/retirement/preview.js.map +1 -1
- package/dist/application/retirement/resolve.js +65 -0
- package/dist/application/retirement/resolve.js.map +1 -1
- package/dist/application/self/host-states.js +2 -0
- package/dist/application/self/host-states.js.map +1 -1
- package/dist/application/self/install-skill.js +21 -17
- package/dist/application/self/install-skill.js.map +1 -1
- package/dist/application/self/mcp-config.js +392 -84
- package/dist/application/self/mcp-config.js.map +1 -1
- package/dist/application/self/mcp-via-state.js +62 -0
- package/dist/application/self/mcp-via-state.js.map +1 -0
- package/dist/application/self/uninstall.js +15 -5
- package/dist/application/self/uninstall.js.map +1 -1
- package/dist/application/session-close-service.js +24 -1
- package/dist/application/session-close-service.js.map +1 -1
- package/dist/application/session-create-service.js +7 -0
- package/dist/application/session-create-service.js.map +1 -1
- package/dist/application/session-resume-service.js +2 -2
- package/dist/application/session-resume-service.js.map +1 -1
- package/dist/application/sessions-service.js +2 -4
- package/dist/application/sessions-service.js.map +1 -1
- package/dist/application/skills-resolver-service.js +4 -4
- package/dist/application/skills-resolver-service.js.map +1 -1
- package/dist/application/source-boundary-policy.js +18 -7
- package/dist/application/source-boundary-policy.js.map +1 -1
- package/dist/application/source-remove-service.js +12 -1
- package/dist/application/source-remove-service.js.map +1 -1
- package/dist/application/sources-service.js +2 -2
- package/dist/application/sources-service.js.map +1 -1
- package/dist/application/status-service.js +4 -0
- package/dist/application/status-service.js.map +1 -1
- package/dist/application/visibility-doctor-service.js +1 -1
- package/dist/application/visibility-doctor-service.js.map +1 -1
- package/dist/application/workline-index-service.js +182 -27
- package/dist/application/workline-index-service.js.map +1 -1
- package/dist/application/workspace-init-service.js +89 -271
- package/dist/application/workspace-init-service.js.map +1 -1
- package/dist/application/workspace-materialization-service.js +300 -0
- package/dist/application/workspace-materialization-service.js.map +1 -0
- package/dist/application/worktree-service.js +32 -3
- package/dist/application/worktree-service.js.map +1 -1
- package/dist/cli/commands/capability.js +4 -7
- package/dist/cli/commands/capability.js.map +1 -1
- package/dist/cli/commands/claims.js +72 -0
- package/dist/cli/commands/claims.js.map +1 -0
- package/dist/cli/commands/dev-only.js +73 -25
- package/dist/cli/commands/dev-only.js.map +1 -1
- package/dist/cli/commands/flow.js +145 -42
- package/dist/cli/commands/flow.js.map +1 -1
- package/dist/cli/commands/index.js +4 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/mcp.js +752 -76
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/multiroot.js +40 -7
- package/dist/cli/commands/multiroot.js.map +1 -1
- package/dist/cli/commands/resume.js +9 -3
- package/dist/cli/commands/resume.js.map +1 -1
- package/dist/cli/commands/retirement.js +9 -0
- package/dist/cli/commands/retirement.js.map +1 -1
- package/dist/cli/commands/session-create.js +1 -1
- package/dist/cli/commands/session-create.js.map +1 -1
- package/dist/cli/commands/skills.js +1 -1
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/status.js +72 -24
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/tool.js +141 -0
- package/dist/cli/commands/tool.js.map +1 -0
- package/dist/cli/commands/workspace-init.js +5 -5
- package/dist/cli/commands/workspace-init.js.map +1 -1
- package/dist/cli/help-groups.js +6 -1
- package/dist/cli/help-groups.js.map +1 -1
- package/dist/cli/main.js +272 -67
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/parser.js +8 -1
- package/dist/cli/parser.js.map +1 -1
- package/dist/cli/registry.js.map +1 -1
- package/dist/cli/render.js +15 -2
- package/dist/cli/render.js.map +1 -1
- package/dist/cli/tui/app.js +3 -2
- package/dist/cli/tui/app.js.map +1 -1
- package/dist/cli/tui/components/workspace-init-form.js +7 -7
- package/dist/cli/tui/components/workspace-init-form.js.map +1 -1
- package/dist/cli/tui/data/workflow-content.js +2 -2
- package/dist/cli/tui/data/workflow-content.js.map +1 -1
- package/dist/cli/tui/tabs/config-tab.js +4 -3
- package/dist/cli/tui/tabs/config-tab.js.map +1 -1
- package/dist/cli/tui/tabs/mcp-tab-helpers.js +72 -1
- package/dist/cli/tui/tabs/mcp-tab-helpers.js.map +1 -1
- package/dist/cli/tui/tabs/mcp-tab.js +101 -42
- package/dist/cli/tui/tabs/mcp-tab.js.map +1 -1
- package/dist/cli/tui/tabs/project-tab.js +18 -21
- package/dist/cli/tui/tabs/project-tab.js.map +1 -1
- package/dist/cli/tui/workspace-root.js +13 -0
- package/dist/cli/tui/workspace-root.js.map +1 -0
- package/dist/domain/capability/protocol.js +2 -2
- package/dist/domain/capability/protocol.js.map +1 -1
- package/dist/domain/database-tools.js +445 -0
- package/dist/domain/database-tools.js.map +1 -0
- package/dist/domain/degradation-notice.js +60 -0
- package/dist/domain/degradation-notice.js.map +1 -0
- package/dist/domain/elicitation.js +152 -0
- package/dist/domain/elicitation.js.map +1 -0
- package/dist/domain/flow/answer.js +173 -42
- package/dist/domain/flow/answer.js.map +1 -1
- package/dist/domain/flow/authority.js +184 -127
- package/dist/domain/flow/authority.js.map +1 -1
- package/dist/domain/flow/directive.js +47 -1
- package/dist/domain/flow/directive.js.map +1 -1
- package/dist/domain/flow/rules.js +7 -4
- package/dist/domain/flow/rules.js.map +1 -1
- package/dist/domain/flow/run-state.js +636 -31
- package/dist/domain/flow/run-state.js.map +1 -1
- package/dist/domain/harnesses.js +16 -0
- package/dist/domain/harnesses.js.map +1 -1
- package/dist/domain/mcp-entry.js +164 -28
- package/dist/domain/mcp-entry.js.map +1 -1
- package/dist/domain/postgres-object-search.js +320 -0
- package/dist/domain/postgres-object-search.js.map +1 -0
- package/dist/domain/redaction.js +47 -0
- package/dist/domain/redaction.js.map +1 -0
- package/dist/domain/retirement/proposal.js +1 -0
- package/dist/domain/retirement/proposal.js.map +1 -1
- package/dist/domain/structured-choice-stamp.js +32 -4
- package/dist/domain/structured-choice-stamp.js.map +1 -1
- package/dist/domain/workline-mcp-entry.js +34 -0
- package/dist/domain/workline-mcp-entry.js.map +1 -0
- package/dist/ports/postgres-tools.js +10 -0
- package/dist/ports/postgres-tools.js.map +1 -0
- package/dist/runtime/namespace-resolver.js +104 -18
- package/dist/runtime/namespace-resolver.js.map +1 -1
- package/package.json +5 -1
- package/skills/w/README.md +2 -2
- package/skills/w/SKILL.md +9 -10
- package/skills/w/artifacts/README.md +1 -1
- package/skills/w/commands/README.md +3 -3
- package/skills/w/commands/persist.md +3 -1
- package/skills/w/commands/resume.md +1 -1
- package/skills/w/commands/spec-new.md +2 -2
- package/skills/w/commands/status.md +1 -1
- package/skills/w/commands/workspace-init.md +9 -10
- package/skills/w/context/MANIFEST.json +1 -4
- package/skills/w/harness/HARNESS.md +1 -1
- package/skills/w/loops/quick-loop/LOOP.md +1 -1
- package/skills/w/modules/PROMPT-CONTINUITY.md +1 -1
- package/skills/w/modules/WORKSPACE-SCAFFOLD.md +17 -20
- package/skills/w/schemas/capability-descriptor.schema.json +1 -1
- package/dist/application/mcp-dbhub-launcher.js +0 -216
- package/dist/application/mcp-dbhub-launcher.js.map +0 -1
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
// Launcher that resolves the DSN and spawns `npx -y @bytebase/dbhub`.
|
|
2
|
-
// stdin/stderr are inherited; stdout is piped so the dbhub startup banner never
|
|
3
|
-
// reaches the MCP JSON-RPC channel (see DbhubBannerFilter).
|
|
4
|
-
import { spawn } from "node:child_process";
|
|
5
|
-
import { resolveExactDsn } from "./dsn-reader-service.js";
|
|
6
|
-
import { resolveMcpConnectionSelection, } from "./mcp-connections-service.js";
|
|
7
|
-
export class DbhubLauncherError extends Error {
|
|
8
|
-
constructor(message) {
|
|
9
|
-
super(message);
|
|
10
|
-
this.name = "DbhubLauncherError";
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
export function resolveDsn(instance, deps) {
|
|
14
|
-
const connection = resolveRegisteredConnection(instance, deps);
|
|
15
|
-
let resolved = null;
|
|
16
|
-
let fileError = null;
|
|
17
|
-
try {
|
|
18
|
-
resolved = resolveExactDsn(connection.dsnVar, deps.env, deps.paths);
|
|
19
|
-
}
|
|
20
|
-
catch (err) {
|
|
21
|
-
// An unreadable dsn.env (a directory in its place, a permission or race
|
|
22
|
-
// error) surfaces as this launcher's own diagnostic naming the cause,
|
|
23
|
-
// never as a raw fs throw and never as a silent "not found".
|
|
24
|
-
fileError = err instanceof Error ? err.message : String(err);
|
|
25
|
-
}
|
|
26
|
-
if (resolved === null) {
|
|
27
|
-
throw new DbhubLauncherError(buildUnresolvedDsnMessage(connection, deps, fileError));
|
|
28
|
-
}
|
|
29
|
-
return resolved;
|
|
30
|
-
}
|
|
31
|
-
function resolveRegisteredConnection(instance, deps) {
|
|
32
|
-
const selection = resolveMcpConnectionSelection(deps.paths, {
|
|
33
|
-
...(instance !== undefined ? { instance } : {}),
|
|
34
|
-
});
|
|
35
|
-
if (!selection.ok)
|
|
36
|
-
throw new DbhubLauncherError(`[dbhub-mcp-runner] ${selection.message}`);
|
|
37
|
-
const connection = selection.connections[0];
|
|
38
|
-
if (connection === undefined) {
|
|
39
|
-
throw new DbhubLauncherError("[dbhub-mcp-runner] la selección MCP no produjo una conexión");
|
|
40
|
-
}
|
|
41
|
-
return connection;
|
|
42
|
-
}
|
|
43
|
-
function buildUnresolvedDsnMessage(connection, deps, fileError) {
|
|
44
|
-
const dsnFile = deps.paths.userDsnFile();
|
|
45
|
-
const where = fileError === null
|
|
46
|
-
? `primero en process.env y después en ${dsnFile}`
|
|
47
|
-
: `primero en process.env; ${dsnFile} no se pudo leer (${fileError})`;
|
|
48
|
-
return [
|
|
49
|
-
`[dbhub-mcp-runner] no encontré el DSN de la conexión registrada '${connection.name}'.`,
|
|
50
|
-
`La conexión exige ${connection.dsnVar} — ${where}.`,
|
|
51
|
-
`Exportá ${connection.dsnVar} en ~/.zshenv (macOS/Linux) o System Environment (Windows)`,
|
|
52
|
-
`y reabrí el host desde una terminal donde 'echo $${connection.dsnVar}' devuelva valor;`,
|
|
53
|
-
`o actualizá su registro con 'aw self mcp use-env --name ${connection.name} --dsn-var <VARIABLE>'.`,
|
|
54
|
-
].join(" ");
|
|
55
|
-
}
|
|
56
|
-
function stderrWriter(deps) {
|
|
57
|
-
return (deps.stderr ??
|
|
58
|
-
((chunk) => {
|
|
59
|
-
process.stderr.write(chunk);
|
|
60
|
-
}));
|
|
61
|
-
}
|
|
62
|
-
const NEWLINE = 0x0a;
|
|
63
|
-
const OPEN_BRACE = 0x7b;
|
|
64
|
-
const EMPTY_CHUNK = Buffer.alloc(0);
|
|
65
|
-
/** Narrow enough that a banner containing it verbatim is not a realistic risk. */
|
|
66
|
-
const JSONRPC_MARKER = Buffer.from('{"jsonrpc"');
|
|
67
|
-
/**
|
|
68
|
-
* Splits dbhub's stdout into banner (stderr) and protocol (stdout).
|
|
69
|
-
*
|
|
70
|
-
* `@bytebase/dbhub` prints an ASCII banner on stdout before speaking JSON-RPC,
|
|
71
|
-
* which corrupts the stdio channel every MCP client reads. Complete lines are
|
|
72
|
-
* routed to stderr until the first one whose first non-blank byte is `{`; from
|
|
73
|
-
* that line on the filter is `started` and the caller must hand the pipe over
|
|
74
|
-
* raw, so the protocol is never re-sliced. Pure on purpose: testable without
|
|
75
|
-
* spawning a process.
|
|
76
|
-
*/
|
|
77
|
-
export class DbhubBannerFilter {
|
|
78
|
-
pending = EMPTY_CHUNK;
|
|
79
|
-
jsonStarted = false;
|
|
80
|
-
/** True once the JSON-RPC stream began: the caller switches to raw passthrough. */
|
|
81
|
-
get started() {
|
|
82
|
-
return this.jsonStarted;
|
|
83
|
-
}
|
|
84
|
-
push(chunk) {
|
|
85
|
-
if (this.jsonStarted)
|
|
86
|
-
return { stdout: chunk, stderr: EMPTY_CHUNK };
|
|
87
|
-
this.pending = this.pending.length === 0 ? chunk : Buffer.concat([this.pending, chunk]);
|
|
88
|
-
// A banner that does not end in a newline would otherwise swallow the first
|
|
89
|
-
// message glued to its tail, so the protocol marker is a second and narrower
|
|
90
|
-
// cut point: bytes before it are banner, bytes from it on are protocol.
|
|
91
|
-
const marker = this.pending.indexOf(JSONRPC_MARKER);
|
|
92
|
-
const banner = [];
|
|
93
|
-
let consumed = 0;
|
|
94
|
-
let newline = this.pending.indexOf(NEWLINE, consumed);
|
|
95
|
-
while (newline !== -1) {
|
|
96
|
-
const line = this.pending.subarray(consumed, newline + 1);
|
|
97
|
-
// A line that already opens the protocol is handed over from its first
|
|
98
|
-
// byte, blanks included: the marker cut is for a banner glued to the
|
|
99
|
-
// message, never an excuse to re-slice bytes that are already protocol.
|
|
100
|
-
if (startsJsonRpc(line))
|
|
101
|
-
return this.startAt(consumed, consumed, banner);
|
|
102
|
-
if (marker !== -1 && marker < newline)
|
|
103
|
-
return this.startAt(marker, consumed, banner);
|
|
104
|
-
banner.push(line);
|
|
105
|
-
consumed = newline + 1;
|
|
106
|
-
newline = this.pending.indexOf(NEWLINE, consumed);
|
|
107
|
-
}
|
|
108
|
-
if (marker !== -1)
|
|
109
|
-
return this.startAt(marker, consumed, banner);
|
|
110
|
-
this.pending = Buffer.from(this.pending.subarray(consumed));
|
|
111
|
-
return { stdout: EMPTY_CHUNK, stderr: Buffer.concat(banner) };
|
|
112
|
-
}
|
|
113
|
-
/** Protocol starts at `cut`: [consumed, cut) is banner, [cut, …) goes out verbatim. */
|
|
114
|
-
startAt(cut, consumed, banner) {
|
|
115
|
-
this.jsonStarted = true;
|
|
116
|
-
if (cut > consumed)
|
|
117
|
-
banner.push(this.pending.subarray(consumed, cut));
|
|
118
|
-
const stdout = Buffer.from(this.pending.subarray(cut));
|
|
119
|
-
this.pending = EMPTY_CHUNK;
|
|
120
|
-
return { stdout, stderr: Buffer.concat(banner) };
|
|
121
|
-
}
|
|
122
|
-
/** Stream ended: anything still buffered never became a JSON line, so it is banner. */
|
|
123
|
-
end() {
|
|
124
|
-
const stderr = this.pending;
|
|
125
|
-
this.pending = EMPTY_CHUNK;
|
|
126
|
-
return { stdout: EMPTY_CHUNK, stderr };
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
function startsJsonRpc(line) {
|
|
130
|
-
for (const byte of line) {
|
|
131
|
-
// Skip leading blanks (space, tab, CR, LF); a fully blank line is banner.
|
|
132
|
-
if (byte === 0x20 || byte === 0x09 || byte === 0x0d || byte === NEWLINE)
|
|
133
|
-
continue;
|
|
134
|
-
return byte === OPEN_BRACE;
|
|
135
|
-
}
|
|
136
|
-
return false;
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Resolves the DSN and spawns `npx -y @bytebase/dbhub`.
|
|
140
|
-
* Resolves only when the spawned child exits.
|
|
141
|
-
*/
|
|
142
|
-
export async function runDbhubLauncher(input) {
|
|
143
|
-
const { dsn } = resolveDsn(input.instance, input.deps);
|
|
144
|
-
const isWin = input.deps.platform === "win32";
|
|
145
|
-
const cmd = isWin ? "npx.cmd" : "npx";
|
|
146
|
-
const protocol = input.deps.stdout ?? process.stdout;
|
|
147
|
-
return new Promise((resolve, reject) => {
|
|
148
|
-
const child = spawn(cmd, ["-y", "@bytebase/dbhub"], {
|
|
149
|
-
stdio: ["inherit", "pipe", "inherit"],
|
|
150
|
-
env: { ...input.deps.env, DSN: dsn },
|
|
151
|
-
shell: isWin,
|
|
152
|
-
});
|
|
153
|
-
if (child.stdout === null) {
|
|
154
|
-
reject(new DbhubLauncherError("[dbhub-mcp-runner] no pude capturar el stdout de dbhub"));
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
forwardDbhubStdout(child.stdout, {
|
|
158
|
-
protocol,
|
|
159
|
-
diagnostics: stderrWriter(input.deps),
|
|
160
|
-
});
|
|
161
|
-
child.on("error", (err) => reject(new DbhubLauncherError(`[dbhub-mcp-runner] ${err.message}`)));
|
|
162
|
-
// `close`, not `exit`: `exit` fires before the child's stdout is drained, so
|
|
163
|
-
// the tail of the protocol would still be in flight. And piping made a second
|
|
164
|
-
// loss possible that `stdio: "inherit"` ruled out structurally — the child
|
|
165
|
-
// used to write fd 1 itself, whereas now every byte is re-written through OUR
|
|
166
|
-
// stdout, and the CLI ends with process.exit(), which drops whatever is still
|
|
167
|
-
// queued on a pipe. The zero-length write is a drain barrier: its callback
|
|
168
|
-
// runs once everything before it reached the OS.
|
|
169
|
-
child.on("close", (code, signal) => {
|
|
170
|
-
// Honor signal: emulate `process.kill(process.pid, signal)` from JS launcher
|
|
171
|
-
// by mapping to a non-zero exit. The CLI command will exit with that code.
|
|
172
|
-
const exitCode = signal ? 128 + (signalToNumber(signal) ?? 0) : (code ?? 0);
|
|
173
|
-
protocol.write(EMPTY_CHUNK, () => resolve({ exitCode }));
|
|
174
|
-
});
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Wires a dbhub stdout stream to this process's channels: banner lines to
|
|
179
|
-
* diagnostics, protocol bytes to the protocol channel. Takes its channels as
|
|
180
|
-
* parameters so the handover can be exercised without spawning anything.
|
|
181
|
-
*/
|
|
182
|
-
export function forwardDbhubStdout(source, channels) {
|
|
183
|
-
const filter = new DbhubBannerFilter();
|
|
184
|
-
const onData = (chunk) => {
|
|
185
|
-
const routed = filter.push(chunk);
|
|
186
|
-
if (routed.stderr.length > 0)
|
|
187
|
-
channels.diagnostics(routed.stderr.toString("utf-8"));
|
|
188
|
-
if (routed.stdout.length > 0)
|
|
189
|
-
channels.protocol.write(routed.stdout);
|
|
190
|
-
if (!filter.started)
|
|
191
|
-
return;
|
|
192
|
-
// Protocol started: pause before detaching, so no chunk can be emitted
|
|
193
|
-
// between removing the listener and attaching the pipe. `end: false` keeps
|
|
194
|
-
// the child's EOF from closing our own stdout.
|
|
195
|
-
source.pause();
|
|
196
|
-
source.removeListener("data", onData);
|
|
197
|
-
source.pipe(channels.protocol, { end: false });
|
|
198
|
-
};
|
|
199
|
-
source.on("data", onData);
|
|
200
|
-
source.on("end", () => {
|
|
201
|
-
const rest = filter.end();
|
|
202
|
-
if (rest.stderr.length > 0)
|
|
203
|
-
channels.diagnostics(rest.stderr.toString("utf-8"));
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
function signalToNumber(signal) {
|
|
207
|
-
// Common signals; fallback to null (will produce exitCode 128 + 0 = 128).
|
|
208
|
-
const map = {
|
|
209
|
-
SIGINT: 2,
|
|
210
|
-
SIGQUIT: 3,
|
|
211
|
-
SIGKILL: 9,
|
|
212
|
-
SIGTERM: 15,
|
|
213
|
-
};
|
|
214
|
-
return map[signal] ?? null;
|
|
215
|
-
}
|
|
216
|
-
//# sourceMappingURL=mcp-dbhub-launcher.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-dbhub-launcher.js","sourceRoot":"","sources":["../../src/application/mcp-dbhub-launcher.ts"],"names":[],"mappings":"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"}
|