@bazaar.ai/mcp-human-agents 0.1.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/.env.example +15 -0
- package/README.md +178 -0
- package/dist/mcp-server/src/bin.d.ts +3 -0
- package/dist/mcp-server/src/bin.d.ts.map +1 -0
- package/dist/mcp-server/src/bin.js +10 -0
- package/dist/mcp-server/src/bin.js.map +1 -0
- package/dist/mcp-server/src/cli/setup.d.ts +2 -0
- package/dist/mcp-server/src/cli/setup.d.ts.map +1 -0
- package/dist/mcp-server/src/cli/setup.js +274 -0
- package/dist/mcp-server/src/cli/setup.js.map +1 -0
- package/dist/mcp-server/src/config/defaults.d.ts +16 -0
- package/dist/mcp-server/src/config/defaults.d.ts.map +1 -0
- package/dist/mcp-server/src/config/defaults.js +19 -0
- package/dist/mcp-server/src/config/defaults.js.map +1 -0
- package/dist/mcp-server/src/config/env.d.ts +73 -0
- package/dist/mcp-server/src/config/env.d.ts.map +1 -0
- package/dist/mcp-server/src/config/env.js +72 -0
- package/dist/mcp-server/src/config/env.js.map +1 -0
- package/dist/mcp-server/src/config/index.d.ts +3 -0
- package/dist/mcp-server/src/config/index.d.ts.map +1 -0
- package/dist/mcp-server/src/config/index.js +22 -0
- package/dist/mcp-server/src/config/index.js.map +1 -0
- package/dist/mcp-server/src/context/generator.d.ts +16 -0
- package/dist/mcp-server/src/context/generator.d.ts.map +1 -0
- package/dist/mcp-server/src/context/generator.js +61 -0
- package/dist/mcp-server/src/context/generator.js.map +1 -0
- package/dist/mcp-server/src/context/index.d.ts +3 -0
- package/dist/mcp-server/src/context/index.d.ts.map +1 -0
- package/dist/mcp-server/src/context/index.js +10 -0
- package/dist/mcp-server/src/context/index.js.map +1 -0
- package/dist/mcp-server/src/context/templates.d.ts +8 -0
- package/dist/mcp-server/src/context/templates.d.ts.map +1 -0
- package/dist/mcp-server/src/context/templates.js +41 -0
- package/dist/mcp-server/src/context/templates.js.map +1 -0
- package/dist/mcp-server/src/git/branch.d.ts +13 -0
- package/dist/mcp-server/src/git/branch.d.ts.map +1 -0
- package/dist/mcp-server/src/git/branch.js +49 -0
- package/dist/mcp-server/src/git/branch.js.map +1 -0
- package/dist/mcp-server/src/git/diff.d.ts +10 -0
- package/dist/mcp-server/src/git/diff.d.ts.map +1 -0
- package/dist/mcp-server/src/git/diff.js +39 -0
- package/dist/mcp-server/src/git/diff.js.map +1 -0
- package/dist/mcp-server/src/git/index.d.ts +5 -0
- package/dist/mcp-server/src/git/index.d.ts.map +1 -0
- package/dist/mcp-server/src/git/index.js +16 -0
- package/dist/mcp-server/src/git/index.js.map +1 -0
- package/dist/mcp-server/src/git/merge.d.ts +6 -0
- package/dist/mcp-server/src/git/merge.d.ts.map +1 -0
- package/dist/mcp-server/src/git/merge.js +30 -0
- package/dist/mcp-server/src/git/merge.js.map +1 -0
- package/dist/mcp-server/src/git/worktree.d.ts +11 -0
- package/dist/mcp-server/src/git/worktree.d.ts.map +1 -0
- package/dist/mcp-server/src/git/worktree.js +38 -0
- package/dist/mcp-server/src/git/worktree.js.map +1 -0
- package/dist/mcp-server/src/http-wrapper.d.ts +6 -0
- package/dist/mcp-server/src/http-wrapper.d.ts.map +1 -0
- package/dist/mcp-server/src/http-wrapper.js +85 -0
- package/dist/mcp-server/src/http-wrapper.js.map +1 -0
- package/dist/mcp-server/src/index.d.ts +2 -0
- package/dist/mcp-server/src/index.d.ts.map +1 -0
- package/dist/mcp-server/src/index.js +28 -0
- package/dist/mcp-server/src/index.js.map +1 -0
- package/dist/mcp-server/src/platform-client/client.d.ts +17 -0
- package/dist/mcp-server/src/platform-client/client.d.ts.map +1 -0
- package/dist/mcp-server/src/platform-client/client.js +68 -0
- package/dist/mcp-server/src/platform-client/client.js.map +1 -0
- package/dist/mcp-server/src/platform-client/index.d.ts +5 -0
- package/dist/mcp-server/src/platform-client/index.d.ts.map +1 -0
- package/dist/mcp-server/src/platform-client/index.js +10 -0
- package/dist/mcp-server/src/platform-client/index.js.map +1 -0
- package/dist/mcp-server/src/platform-client/mock-client.d.ts +28 -0
- package/dist/mcp-server/src/platform-client/mock-client.d.ts.map +1 -0
- package/dist/mcp-server/src/platform-client/mock-client.js +75 -0
- package/dist/mcp-server/src/platform-client/mock-client.js.map +1 -0
- package/dist/mcp-server/src/platform-client/polling.d.ts +9 -0
- package/dist/mcp-server/src/platform-client/polling.d.ts.map +1 -0
- package/dist/mcp-server/src/platform-client/polling.js +40 -0
- package/dist/mcp-server/src/platform-client/polling.js.map +1 -0
- package/dist/mcp-server/src/platform-client/types.d.ts +2 -0
- package/dist/mcp-server/src/platform-client/types.d.ts.map +1 -0
- package/dist/mcp-server/src/platform-client/types.js +3 -0
- package/dist/mcp-server/src/platform-client/types.js.map +1 -0
- package/dist/mcp-server/src/provisioning/authorized-keys.d.ts +14 -0
- package/dist/mcp-server/src/provisioning/authorized-keys.d.ts.map +1 -0
- package/dist/mcp-server/src/provisioning/authorized-keys.js +48 -0
- package/dist/mcp-server/src/provisioning/authorized-keys.js.map +1 -0
- package/dist/mcp-server/src/provisioning/cleanup.d.ts +19 -0
- package/dist/mcp-server/src/provisioning/cleanup.d.ts.map +1 -0
- package/dist/mcp-server/src/provisioning/cleanup.js +96 -0
- package/dist/mcp-server/src/provisioning/cleanup.js.map +1 -0
- package/dist/mcp-server/src/provisioning/index.d.ts +6 -0
- package/dist/mcp-server/src/provisioning/index.d.ts.map +1 -0
- package/dist/mcp-server/src/provisioning/index.js +24 -0
- package/dist/mcp-server/src/provisioning/index.js.map +1 -0
- package/dist/mcp-server/src/provisioning/linux-user.d.ts +15 -0
- package/dist/mcp-server/src/provisioning/linux-user.d.ts.map +1 -0
- package/dist/mcp-server/src/provisioning/linux-user.js +62 -0
- package/dist/mcp-server/src/provisioning/linux-user.js.map +1 -0
- package/dist/mcp-server/src/provisioning/privileged.d.ts +40 -0
- package/dist/mcp-server/src/provisioning/privileged.d.ts.map +1 -0
- package/dist/mcp-server/src/provisioning/privileged.js +123 -0
- package/dist/mcp-server/src/provisioning/privileged.js.map +1 -0
- package/dist/mcp-server/src/provisioning/ssh-config.d.ts +21 -0
- package/dist/mcp-server/src/provisioning/ssh-config.d.ts.map +1 -0
- package/dist/mcp-server/src/provisioning/ssh-config.js +161 -0
- package/dist/mcp-server/src/provisioning/ssh-config.js.map +1 -0
- package/dist/mcp-server/src/provisioning/tmux-session.d.ts +37 -0
- package/dist/mcp-server/src/provisioning/tmux-session.d.ts.map +1 -0
- package/dist/mcp-server/src/provisioning/tmux-session.js +123 -0
- package/dist/mcp-server/src/provisioning/tmux-session.js.map +1 -0
- package/dist/mcp-server/src/server.d.ts +3 -0
- package/dist/mcp-server/src/server.d.ts.map +1 -0
- package/dist/mcp-server/src/server.js +67 -0
- package/dist/mcp-server/src/server.js.map +1 -0
- package/dist/mcp-server/src/state/gig-store.d.ts +19 -0
- package/dist/mcp-server/src/state/gig-store.d.ts.map +1 -0
- package/dist/mcp-server/src/state/gig-store.js +52 -0
- package/dist/mcp-server/src/state/gig-store.js.map +1 -0
- package/dist/mcp-server/src/state/index.d.ts +4 -0
- package/dist/mcp-server/src/state/index.d.ts.map +1 -0
- package/dist/mcp-server/src/state/index.js +8 -0
- package/dist/mcp-server/src/state/index.js.map +1 -0
- package/dist/mcp-server/src/state/persistence.d.ts +13 -0
- package/dist/mcp-server/src/state/persistence.d.ts.map +1 -0
- package/dist/mcp-server/src/state/persistence.js +48 -0
- package/dist/mcp-server/src/state/persistence.js.map +1 -0
- package/dist/mcp-server/src/state/types.d.ts +15 -0
- package/dist/mcp-server/src/state/types.d.ts.map +1 -0
- package/dist/mcp-server/src/state/types.js +3 -0
- package/dist/mcp-server/src/state/types.js.map +1 -0
- package/dist/mcp-server/src/tools/dismiss-human.d.ts +25 -0
- package/dist/mcp-server/src/tools/dismiss-human.d.ts.map +1 -0
- package/dist/mcp-server/src/tools/dismiss-human.js +78 -0
- package/dist/mcp-server/src/tools/dismiss-human.js.map +1 -0
- package/dist/mcp-server/src/tools/index.d.ts +9 -0
- package/dist/mcp-server/src/tools/index.d.ts.map +1 -0
- package/dist/mcp-server/src/tools/index.js +20 -0
- package/dist/mcp-server/src/tools/index.js.map +1 -0
- package/dist/mcp-server/src/tools/list-humans.d.ts +18 -0
- package/dist/mcp-server/src/tools/list-humans.d.ts.map +1 -0
- package/dist/mcp-server/src/tools/list-humans.js +35 -0
- package/dist/mcp-server/src/tools/list-humans.js.map +1 -0
- package/dist/mcp-server/src/tools/message-human.d.ts +10 -0
- package/dist/mcp-server/src/tools/message-human.d.ts.map +1 -0
- package/dist/mcp-server/src/tools/message-human.js +19 -0
- package/dist/mcp-server/src/tools/message-human.js.map +1 -0
- package/dist/mcp-server/src/tools/schemas/dismiss-human.schema.d.ts +19 -0
- package/dist/mcp-server/src/tools/schemas/dismiss-human.schema.d.ts.map +1 -0
- package/dist/mcp-server/src/tools/schemas/dismiss-human.schema.js +22 -0
- package/dist/mcp-server/src/tools/schemas/dismiss-human.schema.js.map +1 -0
- package/dist/mcp-server/src/tools/schemas/list-humans.schema.d.ts +4 -0
- package/dist/mcp-server/src/tools/schemas/list-humans.schema.d.ts.map +1 -0
- package/dist/mcp-server/src/tools/schemas/list-humans.schema.js +7 -0
- package/dist/mcp-server/src/tools/schemas/list-humans.schema.js.map +1 -0
- package/dist/mcp-server/src/tools/schemas/message-human.schema.d.ts +13 -0
- package/dist/mcp-server/src/tools/schemas/message-human.schema.d.ts.map +1 -0
- package/dist/mcp-server/src/tools/schemas/message-human.schema.js +9 -0
- package/dist/mcp-server/src/tools/schemas/message-human.schema.js.map +1 -0
- package/dist/mcp-server/src/tools/schemas/summon-human.schema.d.ts +22 -0
- package/dist/mcp-server/src/tools/schemas/summon-human.schema.d.ts.map +1 -0
- package/dist/mcp-server/src/tools/schemas/summon-human.schema.js +18 -0
- package/dist/mcp-server/src/tools/schemas/summon-human.schema.js.map +1 -0
- package/dist/mcp-server/src/tools/summon-human.d.ts +31 -0
- package/dist/mcp-server/src/tools/summon-human.d.ts.map +1 -0
- package/dist/mcp-server/src/tools/summon-human.js +137 -0
- package/dist/mcp-server/src/tools/summon-human.js.map +1 -0
- package/dist/mcp-server/src/tunnel/client.d.ts +16 -0
- package/dist/mcp-server/src/tunnel/client.d.ts.map +1 -0
- package/dist/mcp-server/src/tunnel/client.js +100 -0
- package/dist/mcp-server/src/tunnel/client.js.map +1 -0
- package/dist/mcp-server/src/tunnel/index.d.ts +6 -0
- package/dist/mcp-server/src/tunnel/index.d.ts.map +1 -0
- package/dist/mcp-server/src/tunnel/index.js +28 -0
- package/dist/mcp-server/src/tunnel/index.js.map +1 -0
- package/dist/mcp-server/src/utils/errors.d.ts +28 -0
- package/dist/mcp-server/src/utils/errors.d.ts.map +1 -0
- package/dist/mcp-server/src/utils/errors.js +66 -0
- package/dist/mcp-server/src/utils/errors.js.map +1 -0
- package/dist/mcp-server/src/utils/exec.d.ts +7 -0
- package/dist/mcp-server/src/utils/exec.d.ts.map +1 -0
- package/dist/mcp-server/src/utils/exec.js +22 -0
- package/dist/mcp-server/src/utils/exec.js.map +1 -0
- package/dist/mcp-server/src/utils/ip.d.ts +6 -0
- package/dist/mcp-server/src/utils/ip.d.ts.map +1 -0
- package/dist/mcp-server/src/utils/ip.js +33 -0
- package/dist/mcp-server/src/utils/ip.js.map +1 -0
- package/dist/mcp-server/src/utils/logger.d.ts +20 -0
- package/dist/mcp-server/src/utils/logger.d.ts.map +1 -0
- package/dist/mcp-server/src/utils/logger.js +41 -0
- package/dist/mcp-server/src/utils/logger.js.map +1 -0
- package/dist/shared/src/contractor.types.d.ts +20 -0
- package/dist/shared/src/contractor.types.d.ts.map +1 -0
- package/dist/shared/src/contractor.types.js +3 -0
- package/dist/shared/src/contractor.types.js.map +1 -0
- package/dist/shared/src/gig.types.d.ts +32 -0
- package/dist/shared/src/gig.types.d.ts.map +1 -0
- package/dist/shared/src/gig.types.js +21 -0
- package/dist/shared/src/gig.types.js.map +1 -0
- package/dist/shared/src/index.d.ts +5 -0
- package/dist/shared/src/index.d.ts.map +1 -0
- package/dist/shared/src/index.js +21 -0
- package/dist/shared/src/index.js.map +1 -0
- package/dist/shared/src/mcp-tool.types.d.ts +45 -0
- package/dist/shared/src/mcp-tool.types.d.ts.map +1 -0
- package/dist/shared/src/mcp-tool.types.js +3 -0
- package/dist/shared/src/mcp-tool.types.js.map +1 -0
- package/dist/shared/src/platform-api.types.d.ts +73 -0
- package/dist/shared/src/platform-api.types.d.ts.map +1 -0
- package/dist/shared/src/platform-api.types.js +3 -0
- package/dist/shared/src/platform-api.types.js.map +1 -0
- package/package.json +41 -0
- package/src/bin.ts +7 -0
- package/src/cli/setup.ts +317 -0
- package/src/config/defaults.ts +21 -0
- package/src/config/env.ts +74 -0
- package/src/config/index.ts +2 -0
- package/src/context/generator.ts +71 -0
- package/src/context/index.ts +6 -0
- package/src/context/templates.ts +41 -0
- package/src/git/branch.ts +46 -0
- package/src/git/diff.ts +34 -0
- package/src/git/index.ts +4 -0
- package/src/git/merge.ts +36 -0
- package/src/git/worktree.ts +42 -0
- package/src/http-wrapper.ts +94 -0
- package/src/index.ts +32 -0
- package/src/platform-client/client.ts +93 -0
- package/src/platform-client/index.ts +4 -0
- package/src/platform-client/mock-client.ts +92 -0
- package/src/platform-client/polling.ts +53 -0
- package/src/platform-client/types.ts +9 -0
- package/src/provisioning/authorized-keys.ts +52 -0
- package/src/provisioning/cleanup.ts +106 -0
- package/src/provisioning/index.ts +13 -0
- package/src/provisioning/linux-user.ts +66 -0
- package/src/provisioning/privileged.ts +128 -0
- package/src/provisioning/ssh-config.ts +197 -0
- package/src/provisioning/tmux-session.ts +136 -0
- package/src/server.ts +111 -0
- package/src/state/gig-store.ts +56 -0
- package/src/state/index.ts +3 -0
- package/src/state/persistence.ts +42 -0
- package/src/state/types.ts +14 -0
- package/src/tools/dismiss-human.ts +103 -0
- package/src/tools/index.ts +9 -0
- package/src/tools/list-humans.ts +54 -0
- package/src/tools/message-human.ts +28 -0
- package/src/tools/schemas/dismiss-human.schema.ts +21 -0
- package/src/tools/schemas/list-humans.schema.ts +6 -0
- package/src/tools/schemas/message-human.schema.ts +8 -0
- package/src/tools/schemas/summon-human.schema.ts +19 -0
- package/src/tools/summon-human.ts +180 -0
- package/src/tunnel/client.ts +116 -0
- package/src/tunnel/index.ts +26 -0
- package/src/utils/errors.ts +64 -0
- package/src/utils/exec.ts +29 -0
- package/src/utils/ip.ts +31 -0
- package/src/utils/logger.ts +55 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-humans.js","sourceRoot":"","sources":["../../../../src/tools/list-humans.ts"],"names":[],"mappings":";;AAuBA,gCA8BC;AApDD,qEAGyC;AAgBzC;;GAEG;AACI,KAAK,UAAU,UAAU,CAAC,QAAkB;IACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAE7B,MAAM,WAAW,GAA2B,MAAM,OAAO,CAAC,GAAG,CAC3D,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACrB,MAAM,SAAS,GAAG,MAAM,IAAA,oCAAkB,EAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5D,MAAM,YAAY,GAAG,MAAM,IAAA,iCAAe,EAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAE5D,IAAI,MAAwC,CAAC;QAC7C,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,GAAG,SAAS,CAAC;QACrB,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACrB,MAAM,GAAG,WAAW,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,MAAM,CAAC;QAClB,CAAC;QAED,OAAO;YACL,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,IAAI,EAAE,GAAG,CAAC,cAAc;YACxB,MAAM;YACN,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,cAAc,EAAE,GAAG,CAAC,SAAS;YAC7B,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE;YACzC,IAAI,EAAE,GAAG,CAAC,IAAI;SACf,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,EAAE,WAAW,EAAE,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { GigStore } from "../state/index.js";
|
|
2
|
+
import type { MessageHumanInput } from "./schemas/message-human.schema.js";
|
|
3
|
+
export interface MessageHumanResult {
|
|
4
|
+
delivered: boolean;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* message_human — send a message into the contractor's tmux session.
|
|
8
|
+
*/
|
|
9
|
+
export declare function messageHuman(input: MessageHumanInput, gigStore: GigStore): Promise<MessageHumanResult>;
|
|
10
|
+
//# sourceMappingURL=message-human.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-human.d.ts","sourceRoot":"","sources":["../../../../src/tools/message-human.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,iBAAiB,EACxB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,kBAAkB,CAAC,CAY7B"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.messageHuman = messageHuman;
|
|
4
|
+
const tmux_session_js_1 = require("../provisioning/tmux-session.js");
|
|
5
|
+
const logger_js_1 = require("../utils/logger.js");
|
|
6
|
+
/**
|
|
7
|
+
* message_human — send a message into the contractor's tmux session.
|
|
8
|
+
*/
|
|
9
|
+
async function messageHuman(input, gigStore) {
|
|
10
|
+
const gig = gigStore.get(input.gigId);
|
|
11
|
+
const delivered = await (0, tmux_session_js_1.displayMessage)(gig.tmuxSession, input.message);
|
|
12
|
+
logger_js_1.logger.info("Message sent to contractor", {
|
|
13
|
+
gigId: input.gigId,
|
|
14
|
+
contractorName: gig.contractorName,
|
|
15
|
+
delivered,
|
|
16
|
+
});
|
|
17
|
+
return { delivered };
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=message-human.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-human.js","sourceRoot":"","sources":["../../../../src/tools/message-human.ts"],"names":[],"mappings":";;AAYA,oCAeC;AA1BD,qEAAiE;AACjE,kDAA4C;AAO5C;;GAEG;AACI,KAAK,UAAU,YAAY,CAChC,KAAwB,EACxB,QAAkB;IAElB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEtC,MAAM,SAAS,GAAG,MAAM,IAAA,gCAAc,EAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAEvE,kBAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE;QACxC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,SAAS;KACV,CAAC,CAAC;IAEH,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const DismissHumanInputSchema: z.ZodObject<{
|
|
3
|
+
gigId: z.ZodString;
|
|
4
|
+
merge: z.ZodBoolean;
|
|
5
|
+
rating: z.ZodOptional<z.ZodNumber>;
|
|
6
|
+
resolutionNotes: z.ZodOptional<z.ZodString>;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
gigId: string;
|
|
9
|
+
merge: boolean;
|
|
10
|
+
rating?: number | undefined;
|
|
11
|
+
resolutionNotes?: string | undefined;
|
|
12
|
+
}, {
|
|
13
|
+
gigId: string;
|
|
14
|
+
merge: boolean;
|
|
15
|
+
rating?: number | undefined;
|
|
16
|
+
resolutionNotes?: string | undefined;
|
|
17
|
+
}>;
|
|
18
|
+
export type DismissHumanInput = z.infer<typeof DismissHumanInputSchema>;
|
|
19
|
+
//# sourceMappingURL=dismiss-human.schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dismiss-human.schema.d.ts","sourceRoot":"","sources":["../../../../../src/tools/schemas/dismiss-human.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;EAgBlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DismissHumanInputSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
exports.DismissHumanInputSchema = zod_1.z.object({
|
|
6
|
+
gigId: zod_1.z.string().describe("The gig ID to dismiss"),
|
|
7
|
+
merge: zod_1.z
|
|
8
|
+
.boolean()
|
|
9
|
+
.describe("Whether to merge contractor's changes into working branch"),
|
|
10
|
+
rating: zod_1.z
|
|
11
|
+
.number()
|
|
12
|
+
.int()
|
|
13
|
+
.min(1)
|
|
14
|
+
.max(5)
|
|
15
|
+
.optional()
|
|
16
|
+
.describe("Rating 1-5 (optional, user can rate later via platform)"),
|
|
17
|
+
resolutionNotes: zod_1.z
|
|
18
|
+
.string()
|
|
19
|
+
.optional()
|
|
20
|
+
.describe("What was fixed (optional)"),
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=dismiss-human.schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dismiss-human.schema.js","sourceRoot":"","sources":["../../../../../src/tools/schemas/dismiss-human.schema.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAEX,QAAA,uBAAuB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC9C,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACnD,KAAK,EAAE,OAAC;SACL,OAAO,EAAE;SACT,QAAQ,CAAC,2DAA2D,CAAC;IACxE,MAAM,EAAE,OAAC;SACN,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,yDAAyD,CAAC;IACtE,eAAe,EAAE,OAAC;SACf,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,2BAA2B,CAAC;CACzC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-humans.schema.d.ts","sourceRoot":"","sources":["../../../../../src/tools/schemas/list-humans.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,qBAAqB,gDAAe,CAAC;AAElD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ListHumansInputSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
// list_humans takes no input
|
|
6
|
+
exports.ListHumansInputSchema = zod_1.z.object({});
|
|
7
|
+
//# sourceMappingURL=list-humans.schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-humans.schema.js","sourceRoot":"","sources":["../../../../../src/tools/schemas/list-humans.schema.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAExB,6BAA6B;AAChB,QAAA,qBAAqB,GAAG,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const MessageHumanInputSchema: z.ZodObject<{
|
|
3
|
+
gigId: z.ZodString;
|
|
4
|
+
message: z.ZodString;
|
|
5
|
+
}, "strip", z.ZodTypeAny, {
|
|
6
|
+
message: string;
|
|
7
|
+
gigId: string;
|
|
8
|
+
}, {
|
|
9
|
+
message: string;
|
|
10
|
+
gigId: string;
|
|
11
|
+
}>;
|
|
12
|
+
export type MessageHumanInput = z.infer<typeof MessageHumanInputSchema>;
|
|
13
|
+
//# sourceMappingURL=message-human.schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-human.schema.d.ts","sourceRoot":"","sources":["../../../../../src/tools/schemas/message-human.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,uBAAuB;;;;;;;;;EAGlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MessageHumanInputSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
exports.MessageHumanInputSchema = zod_1.z.object({
|
|
6
|
+
gigId: zod_1.z.string().describe("The gig ID of the contractor to message"),
|
|
7
|
+
message: zod_1.z.string().describe("The message to send"),
|
|
8
|
+
});
|
|
9
|
+
//# sourceMappingURL=message-human.schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-human.schema.js","sourceRoot":"","sources":["../../../../../src/tools/schemas/message-human.schema.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAEX,QAAA,uBAAuB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC9C,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IACrE,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;CACpD,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const SummonHumanInputSchema: z.ZodObject<{
|
|
3
|
+
reason: z.ZodString;
|
|
4
|
+
skills: z.ZodArray<z.ZodString, "many">;
|
|
5
|
+
context: z.ZodString;
|
|
6
|
+
urgency: z.ZodEnum<["low", "medium", "high"]>;
|
|
7
|
+
worktree: z.ZodEnum<["shared", "clean"]>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
reason: string;
|
|
10
|
+
skills: string[];
|
|
11
|
+
context: string;
|
|
12
|
+
urgency: "low" | "medium" | "high";
|
|
13
|
+
worktree: "shared" | "clean";
|
|
14
|
+
}, {
|
|
15
|
+
reason: string;
|
|
16
|
+
skills: string[];
|
|
17
|
+
context: string;
|
|
18
|
+
urgency: "low" | "medium" | "high";
|
|
19
|
+
worktree: "shared" | "clean";
|
|
20
|
+
}>;
|
|
21
|
+
export type SummonHumanInput = z.infer<typeof SummonHumanInputSchema>;
|
|
22
|
+
//# sourceMappingURL=summon-human.schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summon-human.schema.d.ts","sourceRoot":"","sources":["../../../../../src/tools/schemas/summon-human.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;EAcjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SummonHumanInputSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
exports.SummonHumanInputSchema = zod_1.z.object({
|
|
6
|
+
reason: zod_1.z.string().describe("Why the AI needs help"),
|
|
7
|
+
skills: zod_1.z.array(zod_1.z.string()).describe("What expertise is needed"),
|
|
8
|
+
context: zod_1.z
|
|
9
|
+
.string()
|
|
10
|
+
.describe("What was tried, what failed, relevant files"),
|
|
11
|
+
urgency: zod_1.z
|
|
12
|
+
.enum(["low", "medium", "high"])
|
|
13
|
+
.describe("How urgent is this request"),
|
|
14
|
+
worktree: zod_1.z
|
|
15
|
+
.enum(["shared", "clean"])
|
|
16
|
+
.describe("shared = human sees AI's dirty working state, clean = fresh checkout"),
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=summon-human.schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summon-human.schema.js","sourceRoot":"","sources":["../../../../../src/tools/schemas/summon-human.schema.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAEX,QAAA,sBAAsB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC7C,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACpD,MAAM,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAChE,OAAO,EAAE,OAAC;SACP,MAAM,EAAE;SACR,QAAQ,CAAC,6CAA6C,CAAC;IAC1D,OAAO,EAAE,OAAC;SACP,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;SAC/B,QAAQ,CAAC,4BAA4B,CAAC;IACzC,QAAQ,EAAE,OAAC;SACR,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;SACzB,QAAQ,CACP,sEAAsE,CACvE;CACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { PlatformClient } from "../platform-client/client.js";
|
|
2
|
+
import { GigStore } from "../state/index.js";
|
|
3
|
+
import type { SummonHumanInput } from "./schemas/summon-human.schema.js";
|
|
4
|
+
export interface SummonHumanDeps {
|
|
5
|
+
platformClient: PlatformClient;
|
|
6
|
+
gigStore: GigStore;
|
|
7
|
+
}
|
|
8
|
+
export interface SummonHumanResult {
|
|
9
|
+
gigId: string;
|
|
10
|
+
contractorName: string;
|
|
11
|
+
sshCommand: string;
|
|
12
|
+
connectionMode: "tunnel" | "direct";
|
|
13
|
+
status: "waiting_for_connection";
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* summon_human — the most complex MCP tool.
|
|
17
|
+
*
|
|
18
|
+
* Orchestrates the full flow:
|
|
19
|
+
* 1. Detect repo info
|
|
20
|
+
* 2. POST gig to platform
|
|
21
|
+
* 3. Poll for contractor assignment
|
|
22
|
+
* 4. Create Linux user
|
|
23
|
+
* 5. Write SSH pubkey
|
|
24
|
+
* 6. Configure ForceCommand in sshd_config
|
|
25
|
+
* 7. Create tmux session
|
|
26
|
+
* 8. Write CONTEXT.md
|
|
27
|
+
* 9. Notify platform that VM is ready
|
|
28
|
+
* 10. Store active gig
|
|
29
|
+
*/
|
|
30
|
+
export declare function summonHuman(input: SummonHumanInput, deps: SummonHumanDeps): Promise<SummonHumanResult>;
|
|
31
|
+
//# sourceMappingURL=summon-human.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summon-human.d.ts","sourceRoot":"","sources":["../../../../src/tools/summon-human.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAYnE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAK7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACpC,MAAM,EAAE,wBAAwB,CAAC;CAClC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,iBAAiB,CAAC,CAgI5B"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.summonHuman = summonHuman;
|
|
4
|
+
const polling_js_1 = require("../platform-client/polling.js");
|
|
5
|
+
const index_js_1 = require("../provisioning/index.js");
|
|
6
|
+
const index_js_2 = require("../git/index.js");
|
|
7
|
+
const worktree_js_1 = require("../git/worktree.js");
|
|
8
|
+
const index_js_3 = require("../context/index.js");
|
|
9
|
+
const env_js_1 = require("../config/env.js");
|
|
10
|
+
const ip_js_1 = require("../utils/ip.js");
|
|
11
|
+
const index_js_4 = require("../tunnel/index.js");
|
|
12
|
+
const logger_js_1 = require("../utils/logger.js");
|
|
13
|
+
/**
|
|
14
|
+
* summon_human — the most complex MCP tool.
|
|
15
|
+
*
|
|
16
|
+
* Orchestrates the full flow:
|
|
17
|
+
* 1. Detect repo info
|
|
18
|
+
* 2. POST gig to platform
|
|
19
|
+
* 3. Poll for contractor assignment
|
|
20
|
+
* 4. Create Linux user
|
|
21
|
+
* 5. Write SSH pubkey
|
|
22
|
+
* 6. Configure ForceCommand in sshd_config
|
|
23
|
+
* 7. Create tmux session
|
|
24
|
+
* 8. Write CONTEXT.md
|
|
25
|
+
* 9. Notify platform that VM is ready
|
|
26
|
+
* 10. Store active gig
|
|
27
|
+
*/
|
|
28
|
+
async function summonHuman(input, deps) {
|
|
29
|
+
const env = (0, env_js_1.getEnv)();
|
|
30
|
+
// 1. Detect repo info
|
|
31
|
+
const repoRoot = await (0, index_js_2.getRepoRoot)();
|
|
32
|
+
const branch = await (0, index_js_2.getCurrentBranch)();
|
|
33
|
+
const repo = await (0, index_js_2.getRepoName)();
|
|
34
|
+
const vmIp = env.VM_EXTERNAL_IP === "auto"
|
|
35
|
+
? await (0, ip_js_1.getExternalIp)()
|
|
36
|
+
: env.VM_EXTERNAL_IP;
|
|
37
|
+
const vmPort = env.VM_EXTERNAL_SSH_PORT;
|
|
38
|
+
logger_js_1.logger.info("Summoning human contractor", {
|
|
39
|
+
reason: input.reason,
|
|
40
|
+
skills: input.skills.join(", "),
|
|
41
|
+
urgency: input.urgency,
|
|
42
|
+
});
|
|
43
|
+
// 2. Create gig on platform.
|
|
44
|
+
// The MCP tool schema accepts lowercase urgency for readability
|
|
45
|
+
// ("low" / "medium" / "high" reads better in LLM tool descriptions),
|
|
46
|
+
// but the human-layer API Urgency type is uppercase. Translate here.
|
|
47
|
+
const { gigId } = await deps.platformClient.createGig({
|
|
48
|
+
reason: input.reason,
|
|
49
|
+
skills: input.skills,
|
|
50
|
+
context: input.context,
|
|
51
|
+
urgency: input.urgency.toUpperCase(),
|
|
52
|
+
worktreeMode: input.worktree,
|
|
53
|
+
vmIp,
|
|
54
|
+
repo,
|
|
55
|
+
branch,
|
|
56
|
+
projectId: env.PLATFORM_PROJECT_ID,
|
|
57
|
+
});
|
|
58
|
+
// 3. Poll for contractor assignment
|
|
59
|
+
const status = await (0, polling_js_1.pollForAssignment)(deps.platformClient, gigId);
|
|
60
|
+
const contractor = status.contractor;
|
|
61
|
+
logger_js_1.logger.info("Contractor assigned, provisioning access", {
|
|
62
|
+
gigId,
|
|
63
|
+
contractorName: contractor.name,
|
|
64
|
+
});
|
|
65
|
+
// 4. Create Linux user
|
|
66
|
+
await (0, index_js_1.createUser)(contractor.name);
|
|
67
|
+
// 5. Write SSH pubkey
|
|
68
|
+
await (0, index_js_1.writeAuthorizedKey)(contractor.name, contractor.pubkey);
|
|
69
|
+
// 6. Determine working directory
|
|
70
|
+
const tmuxSessionId = (0, index_js_1.sessionName)(gigId);
|
|
71
|
+
let worktreePath = repoRoot;
|
|
72
|
+
if (input.worktree === "clean") {
|
|
73
|
+
worktreePath = `/tmp/hl-worktree-${gigId}`;
|
|
74
|
+
await (0, worktree_js_1.createWorktree)(branch, worktreePath);
|
|
75
|
+
}
|
|
76
|
+
// 7. Create tmux session — owned by the contractor user so their
|
|
77
|
+
// SSH ForceCommand can attach to it. tmux scopes sessions per uid.
|
|
78
|
+
await (0, index_js_1.createSession)(tmuxSessionId, worktreePath, contractor.name);
|
|
79
|
+
// 8. Configure ForceCommand
|
|
80
|
+
await (0, index_js_1.addForceCommand)(contractor.name, tmuxSessionId);
|
|
81
|
+
// 9. Write CONTEXT.md
|
|
82
|
+
await (0, index_js_3.generateContext)({
|
|
83
|
+
reason: input.reason,
|
|
84
|
+
context: input.context,
|
|
85
|
+
skills: input.skills,
|
|
86
|
+
urgency: input.urgency,
|
|
87
|
+
repo,
|
|
88
|
+
branch,
|
|
89
|
+
worktreePath,
|
|
90
|
+
});
|
|
91
|
+
// 10. Set up connectivity: reverse tunnel or direct SSH
|
|
92
|
+
const useTunnel = env.TUNNEL_ENABLED;
|
|
93
|
+
let sshCommand;
|
|
94
|
+
if (useTunnel) {
|
|
95
|
+
// Open reverse tunnel — platform routes contractor traffic through it
|
|
96
|
+
const platformWsUrl = env.PLATFORM_API_URL.replace(/^http/, "ws");
|
|
97
|
+
const handle = (0, index_js_4.openTunnel)(platformWsUrl, env.PLATFORM_API_KEY, gigId);
|
|
98
|
+
(0, index_js_4.storeTunnel)(gigId, handle);
|
|
99
|
+
sshCommand = `(via tunnel to platform)`;
|
|
100
|
+
logger_js_1.logger.info("Reverse tunnel opened", { gigId });
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
// Legacy direct-SSH mode: build SSH command with public IP/port
|
|
104
|
+
sshCommand =
|
|
105
|
+
vmPort === 22
|
|
106
|
+
? `ssh ${contractor.name}@${vmIp}`
|
|
107
|
+
: `ssh ${contractor.name}@${vmIp} -p ${vmPort}`;
|
|
108
|
+
}
|
|
109
|
+
await deps.platformClient.markReady(gigId, sshCommand);
|
|
110
|
+
// 11. Store active gig
|
|
111
|
+
deps.gigStore.add({
|
|
112
|
+
gigId,
|
|
113
|
+
contractorName: contractor.name,
|
|
114
|
+
linuxUser: contractor.name,
|
|
115
|
+
tmuxSession: tmuxSessionId,
|
|
116
|
+
worktreePath: input.worktree === "clean" ? worktreePath : undefined,
|
|
117
|
+
sshCommand,
|
|
118
|
+
skills: input.skills,
|
|
119
|
+
rate: contractor.rate,
|
|
120
|
+
startedAt: new Date().toISOString(),
|
|
121
|
+
status: "active",
|
|
122
|
+
tunnelActive: useTunnel,
|
|
123
|
+
});
|
|
124
|
+
logger_js_1.logger.info("Human contractor summoned successfully", {
|
|
125
|
+
gigId,
|
|
126
|
+
contractorName: contractor.name,
|
|
127
|
+
connectionMode: useTunnel ? "tunnel" : "direct",
|
|
128
|
+
});
|
|
129
|
+
return {
|
|
130
|
+
gigId,
|
|
131
|
+
contractorName: contractor.name,
|
|
132
|
+
sshCommand,
|
|
133
|
+
connectionMode: useTunnel ? "tunnel" : "direct",
|
|
134
|
+
status: "waiting_for_connection",
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=summon-human.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summon-human.js","sourceRoot":"","sources":["../../../../src/tools/summon-human.ts"],"names":[],"mappings":";;AAgDA,kCAmIC;AAlLD,8DAAkE;AAClE,uDAMkC;AAClC,8CAA6E;AAC7E,oDAAoD;AACpD,kDAAsD;AAEtD,6CAA0C;AAC1C,0CAA+C;AAC/C,iDAA6D;AAC7D,kDAA4C;AAiB5C;;;;;;;;;;;;;;GAcG;AACI,KAAK,UAAU,WAAW,CAC/B,KAAuB,EACvB,IAAqB;IAErB,MAAM,GAAG,GAAG,IAAA,eAAM,GAAE,CAAC;IAErB,sBAAsB;IACtB,MAAM,QAAQ,GAAG,MAAM,IAAA,sBAAW,GAAE,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAgB,GAAE,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,IAAA,sBAAW,GAAE,CAAC;IACjC,MAAM,IAAI,GACR,GAAG,CAAC,cAAc,KAAK,MAAM;QAC3B,CAAC,CAAC,MAAM,IAAA,qBAAa,GAAE;QACvB,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC;IACzB,MAAM,MAAM,GAAG,GAAG,CAAC,oBAAoB,CAAC;IAExC,kBAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE;QACxC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC,CAAC;IAEH,6BAA6B;IAC7B,gEAAgE;IAChE,qEAAqE;IACrE,qEAAqE;IACrE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;QACpD,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,EAAa;QAC/C,YAAY,EAAE,KAAK,CAAC,QAAQ;QAC5B,IAAI;QACJ,IAAI;QACJ,MAAM;QACN,SAAS,EAAE,GAAG,CAAC,mBAAmB;KACnC,CAAC,CAAC;IAEH,oCAAoC;IACpC,MAAM,MAAM,GAAG,MAAM,IAAA,8BAAiB,EAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,MAAM,CAAC,UAAW,CAAC;IAEtC,kBAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE;QACtD,KAAK;QACL,cAAc,EAAE,UAAU,CAAC,IAAI;KAChC,CAAC,CAAC;IAEH,uBAAuB;IACvB,MAAM,IAAA,qBAAU,EAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAElC,sBAAsB;IACtB,MAAM,IAAA,6BAAkB,EAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAE7D,iCAAiC;IACjC,MAAM,aAAa,GAAG,IAAA,sBAAW,EAAC,KAAK,CAAC,CAAC;IACzC,IAAI,YAAY,GAAG,QAAQ,CAAC;IAE5B,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC/B,YAAY,GAAG,oBAAoB,KAAK,EAAE,CAAC;QAC3C,MAAM,IAAA,4BAAc,EAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC7C,CAAC;IAED,iEAAiE;IACjE,mEAAmE;IACnE,MAAM,IAAA,wBAAa,EAAC,aAAa,EAAE,YAAY,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAElE,4BAA4B;IAC5B,MAAM,IAAA,0BAAe,EAAC,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAEtD,sBAAsB;IACtB,MAAM,IAAA,0BAAe,EAAC;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI;QACJ,MAAM;QACN,YAAY;KACb,CAAC,CAAC;IAEH,wDAAwD;IACxD,MAAM,SAAS,GAAG,GAAG,CAAC,cAAc,CAAC;IACrC,IAAI,UAAkB,CAAC;IAEvB,IAAI,SAAS,EAAE,CAAC;QACd,sEAAsE;QACtE,MAAM,aAAa,GAAG,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,IAAA,qBAAU,EAAC,aAAa,EAAE,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACtE,IAAA,sBAAW,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAE3B,UAAU,GAAG,0BAA0B,CAAC;QAExC,kBAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACN,gEAAgE;QAChE,UAAU;YACR,MAAM,KAAK,EAAE;gBACX,CAAC,CAAC,OAAO,UAAU,CAAC,IAAI,IAAI,IAAI,EAAE;gBAClC,CAAC,CAAC,OAAO,UAAU,CAAC,IAAI,IAAI,IAAI,OAAO,MAAM,EAAE,CAAC;IACtD,CAAC;IAED,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAEvD,uBAAuB;IACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAChB,KAAK;QACL,cAAc,EAAE,UAAU,CAAC,IAAI;QAC/B,SAAS,EAAE,UAAU,CAAC,IAAI;QAC1B,WAAW,EAAE,aAAa;QAC1B,YAAY,EAAE,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;QACnE,UAAU;QACV,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,MAAM,EAAE,QAAQ;QAChB,YAAY,EAAE,SAAS;KACxB,CAAC,CAAC;IAEH,kBAAM,CAAC,IAAI,CAAC,wCAAwC,EAAE;QACpD,KAAK;QACL,cAAc,EAAE,UAAU,CAAC,IAAI;QAC/B,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;KAChD,CAAC,CAAC;IAEH,OAAO;QACL,KAAK;QACL,cAAc,EAAE,UAAU,CAAC,IAAI;QAC/B,UAAU;QACV,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;QAC/C,MAAM,EAAE,wBAAwB;KACjC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface TunnelHandle {
|
|
2
|
+
close(): void;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Open a reverse tunnel WebSocket to the platform.
|
|
6
|
+
*
|
|
7
|
+
* The platform will route contractor web-terminal traffic through this
|
|
8
|
+
* tunnel. When data arrives, we relay it to localhost:22 (sshd) and
|
|
9
|
+
* send responses back through the WebSocket.
|
|
10
|
+
*
|
|
11
|
+
* The connection is lazy: the TCP socket to localhost:22 is only
|
|
12
|
+
* created when the first data frame arrives (triggered by the
|
|
13
|
+
* platform's ssh2 client initiating a handshake).
|
|
14
|
+
*/
|
|
15
|
+
export declare function openTunnel(platformWsUrl: string, apiKey: string, gigId: string): TunnelHandle;
|
|
16
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/tunnel/client.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACxB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,YAAY,CA4Fd"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.openTunnel = openTunnel;
|
|
4
|
+
const ws_1 = require("ws");
|
|
5
|
+
const node_net_1 = require("node:net");
|
|
6
|
+
const logger_js_1 = require("../utils/logger.js");
|
|
7
|
+
/**
|
|
8
|
+
* Open a reverse tunnel WebSocket to the platform.
|
|
9
|
+
*
|
|
10
|
+
* The platform will route contractor web-terminal traffic through this
|
|
11
|
+
* tunnel. When data arrives, we relay it to localhost:22 (sshd) and
|
|
12
|
+
* send responses back through the WebSocket.
|
|
13
|
+
*
|
|
14
|
+
* The connection is lazy: the TCP socket to localhost:22 is only
|
|
15
|
+
* created when the first data frame arrives (triggered by the
|
|
16
|
+
* platform's ssh2 client initiating a handshake).
|
|
17
|
+
*/
|
|
18
|
+
function openTunnel(platformWsUrl, apiKey, gigId) {
|
|
19
|
+
const wsUrl = `${platformWsUrl}/ws/tunnel?gigId=${encodeURIComponent(gigId)}&token=${encodeURIComponent(apiKey)}`;
|
|
20
|
+
let ws = null;
|
|
21
|
+
let tcp = null;
|
|
22
|
+
let closed = false;
|
|
23
|
+
function connectWs() {
|
|
24
|
+
if (closed)
|
|
25
|
+
return;
|
|
26
|
+
ws = new ws_1.WebSocket(wsUrl);
|
|
27
|
+
ws.binaryType = "nodebuffer";
|
|
28
|
+
ws.on("open", () => {
|
|
29
|
+
logger_js_1.logger.info("Tunnel WebSocket connected", { gigId });
|
|
30
|
+
});
|
|
31
|
+
ws.on("message", (data) => {
|
|
32
|
+
if (!tcp) {
|
|
33
|
+
// Lazy-open TCP to local sshd on first data
|
|
34
|
+
tcp = (0, node_net_1.createConnection)({ host: "127.0.0.1", port: 22 }, () => {
|
|
35
|
+
logger_js_1.logger.info("Tunnel TCP connected to local sshd", { gigId });
|
|
36
|
+
// Send the buffered first frame
|
|
37
|
+
tcp.write(data);
|
|
38
|
+
});
|
|
39
|
+
tcp.on("data", (chunk) => {
|
|
40
|
+
if (ws && ws.readyState === ws_1.WebSocket.OPEN) {
|
|
41
|
+
ws.send(chunk);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
tcp.on("close", () => {
|
|
45
|
+
logger_js_1.logger.info("Tunnel TCP closed", { gigId });
|
|
46
|
+
tcp = null;
|
|
47
|
+
// Don't close the WebSocket — a new terminal session may
|
|
48
|
+
// open another TCP connection via this same tunnel.
|
|
49
|
+
});
|
|
50
|
+
tcp.on("error", (err) => {
|
|
51
|
+
logger_js_1.logger.warn("Tunnel TCP error", {
|
|
52
|
+
gigId,
|
|
53
|
+
error: err.message,
|
|
54
|
+
});
|
|
55
|
+
tcp?.destroy();
|
|
56
|
+
tcp = null;
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
tcp.write(data);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
ws.on("close", (code, reason) => {
|
|
64
|
+
logger_js_1.logger.info("Tunnel WebSocket closed", {
|
|
65
|
+
gigId,
|
|
66
|
+
code,
|
|
67
|
+
reason: reason.toString(),
|
|
68
|
+
});
|
|
69
|
+
tcp?.destroy();
|
|
70
|
+
tcp = null;
|
|
71
|
+
// Reconnect with backoff unless explicitly closed
|
|
72
|
+
if (!closed) {
|
|
73
|
+
const delay = 3_000 + Math.random() * 2_000;
|
|
74
|
+
logger_js_1.logger.info("Tunnel reconnecting", { gigId, delayMs: Math.round(delay) });
|
|
75
|
+
setTimeout(connectWs, delay);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
ws.on("error", (err) => {
|
|
79
|
+
logger_js_1.logger.warn("Tunnel WebSocket error", {
|
|
80
|
+
gigId,
|
|
81
|
+
error: err.message,
|
|
82
|
+
});
|
|
83
|
+
// on("close") will fire after this and handle reconnection
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
connectWs();
|
|
87
|
+
return {
|
|
88
|
+
close() {
|
|
89
|
+
closed = true;
|
|
90
|
+
tcp?.destroy();
|
|
91
|
+
tcp = null;
|
|
92
|
+
if (ws && ws.readyState === ws_1.WebSocket.OPEN) {
|
|
93
|
+
ws.close(1000, "Tunnel closed by MCP server");
|
|
94
|
+
}
|
|
95
|
+
ws = null;
|
|
96
|
+
logger_js_1.logger.info("Tunnel closed", { gigId });
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/tunnel/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { TunnelHandle } from "./client.js";
|
|
2
|
+
export { openTunnel, type TunnelHandle } from "./client.js";
|
|
3
|
+
export declare function storeTunnel(gigId: string, handle: TunnelHandle): void;
|
|
4
|
+
export declare function closeTunnel(gigId: string): void;
|
|
5
|
+
export declare function hasTunnel(gigId: string): boolean;
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tunnel/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAS5D,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAErE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAM/C;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEhD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.openTunnel = void 0;
|
|
4
|
+
exports.storeTunnel = storeTunnel;
|
|
5
|
+
exports.closeTunnel = closeTunnel;
|
|
6
|
+
exports.hasTunnel = hasTunnel;
|
|
7
|
+
var client_js_1 = require("./client.js");
|
|
8
|
+
Object.defineProperty(exports, "openTunnel", { enumerable: true, get: function () { return client_js_1.openTunnel; } });
|
|
9
|
+
/**
|
|
10
|
+
* In-memory map of active tunnel handles keyed by gigId.
|
|
11
|
+
* Not serialized — tunnels are re-established on restart via
|
|
12
|
+
* the MCP server's crash-recovery flow if needed.
|
|
13
|
+
*/
|
|
14
|
+
const activeTunnels = new Map();
|
|
15
|
+
function storeTunnel(gigId, handle) {
|
|
16
|
+
activeTunnels.set(gigId, handle);
|
|
17
|
+
}
|
|
18
|
+
function closeTunnel(gigId) {
|
|
19
|
+
const handle = activeTunnels.get(gigId);
|
|
20
|
+
if (handle) {
|
|
21
|
+
handle.close();
|
|
22
|
+
activeTunnels.delete(gigId);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function hasTunnel(gigId) {
|
|
26
|
+
return activeTunnels.has(gigId);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tunnel/index.ts"],"names":[],"mappings":";;;AAWA,kCAEC;AAED,kCAMC;AAED,8BAEC;AAvBD,yCAA4D;AAAnD,uGAAA,UAAU,OAAA;AAEnB;;;;GAIG;AACH,MAAM,aAAa,GAAG,IAAI,GAAG,EAAwB,CAAC;AAEtD,SAAgB,WAAW,CAAC,KAAa,EAAE,MAAoB;IAC7D,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,SAAgB,WAAW,CAAC,KAAa;IACvC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,SAAgB,SAAS,CAAC,KAAa;IACrC,OAAO,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export declare class HumanLayerError extends Error {
|
|
2
|
+
readonly code: string;
|
|
3
|
+
constructor(message: string, code: string);
|
|
4
|
+
}
|
|
5
|
+
export declare class ProvisioningError extends HumanLayerError {
|
|
6
|
+
constructor(message: string);
|
|
7
|
+
}
|
|
8
|
+
export declare class SshConfigError extends HumanLayerError {
|
|
9
|
+
constructor(message: string);
|
|
10
|
+
}
|
|
11
|
+
export declare class PlatformApiError extends HumanLayerError {
|
|
12
|
+
readonly statusCode?: number | undefined;
|
|
13
|
+
constructor(message: string, statusCode?: number | undefined);
|
|
14
|
+
}
|
|
15
|
+
export declare class GigNotFoundError extends HumanLayerError {
|
|
16
|
+
constructor(gigId: string);
|
|
17
|
+
}
|
|
18
|
+
export declare class CleanupError extends HumanLayerError {
|
|
19
|
+
readonly partialFailures: string[];
|
|
20
|
+
constructor(message: string, partialFailures: string[]);
|
|
21
|
+
}
|
|
22
|
+
export declare class TmuxError extends HumanLayerError {
|
|
23
|
+
constructor(message: string);
|
|
24
|
+
}
|
|
25
|
+
export declare class GitError extends HumanLayerError {
|
|
26
|
+
constructor(message: string);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAgB,SAAQ,KAAK;aAGtB,IAAI,EAAE,MAAM;gBAD5B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM;CAK/B;AAED,qBAAa,iBAAkB,SAAQ,eAAe;gBACxC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,cAAe,SAAQ,eAAe;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,gBAAiB,SAAQ,eAAe;aAGjC,UAAU,CAAC,EAAE,MAAM;gBADnC,OAAO,EAAE,MAAM,EACC,UAAU,CAAC,EAAE,MAAM,YAAA;CAKtC;AAED,qBAAa,gBAAiB,SAAQ,eAAe;gBACvC,KAAK,EAAE,MAAM;CAI1B;AAED,qBAAa,YAAa,SAAQ,eAAe;aAG7B,eAAe,EAAE,MAAM,EAAE;gBADzC,OAAO,EAAE,MAAM,EACC,eAAe,EAAE,MAAM,EAAE;CAK5C;AAED,qBAAa,SAAU,SAAQ,eAAe;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,QAAS,SAAQ,eAAe;gBAC/B,OAAO,EAAE,MAAM;CAI5B"}
|