@kvman/kvcoder 0.1.14 → 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/artifacts/ended-url.d.ts +4 -0
- package/dist/artifacts/ended-url.d.ts.map +1 -0
- package/dist/artifacts/ended-url.js +30 -0
- package/dist/artifacts/ended-url.js.map +1 -0
- package/dist/calls/line-run.d.ts +1 -0
- package/dist/calls/line-run.d.ts.map +1 -1
- package/dist/calls/line-run.js +4 -1
- package/dist/calls/line-run.js.map +1 -1
- package/dist/calls/run-tool.d.ts +38 -1
- package/dist/calls/run-tool.d.ts.map +1 -1
- package/dist/calls/run-tool.js +46 -1
- package/dist/calls/run-tool.js.map +1 -1
- package/dist/connector-call.d.ts +7 -2
- package/dist/connector-call.d.ts.map +1 -1
- package/dist/connector-call.js +8 -4
- package/dist/connector-call.js.map +1 -1
- package/dist/connectors/artifact.d.ts.map +1 -1
- package/dist/connectors/artifact.js +10 -2
- package/dist/connectors/artifact.js.map +1 -1
- package/dist/connectors/background.d.ts +1 -1
- package/dist/connectors/background.d.ts.map +1 -1
- package/dist/connectors/background.js +5 -2
- package/dist/connectors/background.js.map +1 -1
- package/dist/connectors/binary.js +2 -2
- package/dist/connectors/binary.js.map +1 -1
- package/dist/connectors/builtin-connectors.d.ts +16 -3
- package/dist/connectors/builtin-connectors.d.ts.map +1 -1
- package/dist/connectors/delegate.d.ts +20 -13
- package/dist/connectors/delegate.d.ts.map +1 -1
- package/dist/connectors/delegate.js +27 -20
- package/dist/connectors/delegate.js.map +1 -1
- package/dist/connectors/execution-map.d.ts +1 -1
- package/dist/connectors/execution-map.d.ts.map +1 -1
- package/dist/connectors/execution-map.js +1 -1
- package/dist/connectors/execution-map.js.map +1 -1
- package/dist/connectors/mcp.d.ts +1 -1
- package/dist/connectors/mcp.d.ts.map +1 -1
- package/dist/connectors/mcp.js +12 -7
- package/dist/connectors/mcp.js.map +1 -1
- package/dist/connectors/payload-fields.d.ts +1 -0
- package/dist/connectors/payload-fields.d.ts.map +1 -1
- package/dist/connectors/payload-fields.js +1 -0
- package/dist/connectors/payload-fields.js.map +1 -1
- package/dist/connectors/shell.d.ts +1 -0
- package/dist/connectors/shell.d.ts.map +1 -1
- package/dist/connectors/shell.js +2 -2
- package/dist/connectors/shell.js.map +1 -1
- package/dist/delegate/approved-run.d.ts.map +1 -1
- package/dist/delegate/approved-run.js +4 -11
- package/dist/delegate/approved-run.js.map +1 -1
- package/dist/delegate/brief.d.ts +34 -0
- package/dist/delegate/brief.d.ts.map +1 -0
- package/dist/delegate/brief.js +84 -0
- package/dist/delegate/brief.js.map +1 -0
- package/dist/delegate/continue-helper.d.ts.map +1 -1
- package/dist/delegate/continue-helper.js +6 -7
- package/dist/delegate/continue-helper.js.map +1 -1
- package/dist/delegate/permission.d.ts +26 -1
- package/dist/delegate/permission.d.ts.map +1 -1
- package/dist/delegate/program-permission.d.ts +1 -1
- package/dist/delegate/runs.d.ts +7 -3
- package/dist/delegate/runs.d.ts.map +1 -1
- package/dist/delegate/runs.js +2 -2
- package/dist/delegate/runs.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/jobs/notify-watch.d.ts +5 -0
- package/dist/jobs/notify-watch.d.ts.map +1 -0
- package/dist/jobs/notify-watch.js +53 -0
- package/dist/jobs/notify-watch.js.map +1 -0
- package/dist/jobs/process-handlers.d.ts.map +1 -1
- package/dist/jobs/process-handlers.js +2 -1
- package/dist/jobs/process-handlers.js.map +1 -1
- package/dist/jobs/process-records.d.ts +4 -1
- package/dist/jobs/process-records.d.ts.map +1 -1
- package/dist/jobs/process-records.js +6 -2
- package/dist/jobs/process-records.js.map +1 -1
- package/dist/jobs/process-report.d.ts +2 -1
- package/dist/jobs/process-report.d.ts.map +1 -1
- package/dist/jobs/process-report.js +8 -5
- package/dist/jobs/process-report.js.map +1 -1
- package/dist/jobs/process-run.d.ts +1 -1
- package/dist/jobs/process-run.d.ts.map +1 -1
- package/dist/jobs/process-run.js +7 -3
- package/dist/jobs/process-run.js.map +1 -1
- package/dist/mcp/connect.d.ts +10 -5
- package/dist/mcp/connect.d.ts.map +1 -1
- package/dist/mcp/connect.js +22 -9
- package/dist/mcp/connect.js.map +1 -1
- package/dist/mcp/servers.d.ts +4 -0
- package/dist/mcp/servers.d.ts.map +1 -1
- package/dist/mcp/servers.js +5 -1
- package/dist/mcp/servers.js.map +1 -1
- package/dist/mcp/turn-servers.d.ts +8 -0
- package/dist/mcp/turn-servers.d.ts.map +1 -0
- package/dist/mcp/turn-servers.js +88 -0
- package/dist/mcp/turn-servers.js.map +1 -0
- package/dist/prompt/build-prompt.d.ts +1 -1
- package/dist/prompt/build-prompt.d.ts.map +1 -1
- package/dist/prompt/build-prompt.js +2 -3
- package/dist/prompt/build-prompt.js.map +1 -1
- package/dist/prompt/kept-rules.d.ts +6 -0
- package/dist/prompt/kept-rules.d.ts.map +1 -0
- package/dist/prompt/kept-rules.js +47 -0
- package/dist/prompt/kept-rules.js.map +1 -0
- package/dist/prompt/project-rules.d.ts +7 -2
- package/dist/prompt/project-rules.d.ts.map +1 -1
- package/dist/prompt/project-rules.js +27 -16
- package/dist/prompt/project-rules.js.map +1 -1
- package/dist/prompt/session-grants.d.ts +16 -23
- package/dist/prompt/session-grants.d.ts.map +1 -1
- package/dist/prompt/session-prompt.d.ts +1 -1
- package/dist/prompt/session-prompt.d.ts.map +1 -1
- package/dist/prompt/session-prompt.js +16 -9
- package/dist/prompt/session-prompt.js.map +1 -1
- package/dist/prompt/working-method.js +7 -7
- package/dist/prompt/working-method.js.map +1 -1
- package/dist/register-settings.d.ts +1 -0
- package/dist/register-settings.d.ts.map +1 -1
- package/dist/register-settings.js +1 -0
- package/dist/register-settings.js.map +1 -1
- package/dist/registry/register-connectors.d.ts +17 -1
- package/dist/registry/register-connectors.d.ts.map +1 -1
- package/dist/registry/register-connectors.js +11 -7
- package/dist/registry/register-connectors.js.map +1 -1
- package/dist/schemas/delegate-brief.d.ts +20 -0
- package/dist/schemas/delegate-brief.d.ts.map +1 -0
- package/dist/schemas/delegate-brief.js +9 -0
- package/dist/schemas/delegate-brief.js.map +1 -0
- package/dist/schemas/kept-rule.d.ts +12 -0
- package/dist/schemas/kept-rule.d.ts.map +1 -0
- package/dist/schemas/kept-rule.js +7 -0
- package/dist/schemas/kept-rule.js.map +1 -0
- package/dist/schemas/mcp-session.d.ts +15 -0
- package/dist/schemas/mcp-session.d.ts.map +1 -0
- package/dist/schemas/mcp-session.js +14 -0
- package/dist/schemas/mcp-session.js.map +1 -0
- package/dist/schemas/process-doc.d.ts +22 -0
- package/dist/schemas/process-doc.d.ts.map +1 -0
- package/dist/schemas/process-doc.js +20 -0
- package/dist/schemas/process-doc.js.map +1 -0
- package/dist/schemas/read-ending.d.ts +8 -0
- package/dist/schemas/read-ending.d.ts.map +1 -0
- package/dist/schemas/read-ending.js +4 -0
- package/dist/schemas/read-ending.js.map +1 -0
- package/dist/schemas/records.d.ts +29 -23
- package/dist/schemas/records.d.ts.map +1 -1
- package/dist/schemas/records.js +14 -16
- package/dist/schemas/records.js.map +1 -1
- package/dist/schemas/registry.d.ts +1 -0
- package/dist/schemas/registry.d.ts.map +1 -1
- package/dist/schemas/registry.js +3 -2
- package/dist/schemas/registry.js.map +1 -1
- package/dist/schemas/sent-record.d.ts +13 -0
- package/dist/schemas/sent-record.d.ts.map +1 -0
- package/dist/schemas/sent-record.js +7 -0
- package/dist/schemas/sent-record.js.map +1 -0
- package/dist/sessions/new-session.d.ts.map +1 -1
- package/dist/sessions/new-session.js +2 -0
- package/dist/sessions/new-session.js.map +1 -1
- package/dist/sessions/session-view.d.ts +7 -2
- package/dist/sessions/session-view.d.ts.map +1 -1
- package/dist/sessions/session-view.js +3 -0
- package/dist/sessions/session-view.js.map +1 -1
- package/dist/store/collections.d.ts +74 -6
- package/dist/store/collections.d.ts.map +1 -1
- package/dist/store/collections.js +6 -0
- package/dist/store/collections.js.map +1 -1
- package/dist/thinking-levels.d.ts +2 -0
- package/dist/thinking-levels.d.ts.map +1 -1
- package/dist/thinking-levels.js +4 -0
- package/dist/thinking-levels.js.map +1 -1
- package/dist/turns/background.d.ts +3 -0
- package/dist/turns/background.d.ts.map +1 -1
- package/dist/turns/background.js +10 -0
- package/dist/turns/background.js.map +1 -1
- package/dist/turns/clear-results.d.ts +2 -2
- package/dist/turns/clear-results.d.ts.map +1 -1
- package/dist/turns/clear-results.js +31 -15
- package/dist/turns/clear-results.js.map +1 -1
- package/dist/turns/collapse.d.ts +12 -0
- package/dist/turns/collapse.d.ts.map +1 -0
- package/dist/turns/collapse.js +67 -0
- package/dist/turns/collapse.js.map +1 -0
- package/dist/turns/connection-wait.d.ts +12 -0
- package/dist/turns/connection-wait.d.ts.map +1 -0
- package/dist/turns/connection-wait.js +56 -0
- package/dist/turns/connection-wait.js.map +1 -0
- package/dist/turns/end-turn-state.js +2 -2
- package/dist/turns/end-turn-state.js.map +1 -1
- package/dist/turns/end-turn.d.ts.map +1 -1
- package/dist/turns/end-turn.js +3 -0
- package/dist/turns/end-turn.js.map +1 -1
- package/dist/turns/history.d.ts +2 -0
- package/dist/turns/history.d.ts.map +1 -1
- package/dist/turns/history.js +1 -0
- package/dist/turns/history.js.map +1 -1
- package/dist/turns/model-context.d.ts +6 -2
- package/dist/turns/model-context.d.ts.map +1 -1
- package/dist/turns/model-context.js +26 -8
- package/dist/turns/model-context.js.map +1 -1
- package/dist/turns/model-retry.d.ts +5 -2
- package/dist/turns/model-retry.d.ts.map +1 -1
- package/dist/turns/model-retry.js +5 -3
- package/dist/turns/model-retry.js.map +1 -1
- package/dist/turns/read-endings.d.ts +8 -0
- package/dist/turns/read-endings.d.ts.map +1 -0
- package/dist/turns/read-endings.js +24 -0
- package/dist/turns/read-endings.js.map +1 -0
- package/dist/turns/run-calls.d.ts +0 -6
- package/dist/turns/run-calls.d.ts.map +1 -1
- package/dist/turns/run-calls.js +24 -26
- package/dist/turns/run-calls.js.map +1 -1
- package/dist/turns/run-command.d.ts +2 -0
- package/dist/turns/run-command.d.ts.map +1 -1
- package/dist/turns/run-command.js +6 -0
- package/dist/turns/run-command.js.map +1 -1
- package/dist/turns/run-scope.d.ts +7 -0
- package/dist/turns/run-scope.d.ts.map +1 -0
- package/dist/turns/run-scope.js +24 -0
- package/dist/turns/run-scope.js.map +1 -0
- package/dist/turns/sent-record.d.ts +4 -0
- package/dist/turns/sent-record.d.ts.map +1 -0
- package/dist/turns/sent-record.js +11 -0
- package/dist/turns/sent-record.js.map +1 -0
- package/dist/turns/settle-calls.d.ts.map +1 -1
- package/dist/turns/settle-calls.js +1 -19
- package/dist/turns/settle-calls.js.map +1 -1
- package/dist/turns/start-turn.js +1 -1
- package/dist/turns/start-turn.js.map +1 -1
- package/dist/turns/step.d.ts.map +1 -1
- package/dist/turns/step.js +36 -9
- package/dist/turns/step.js.map +1 -1
- package/dist/ui/register-ui.js +1 -1
- package/dist/ui/register-ui.js.map +1 -1
- package/dist/web/components/approval.css +1 -1
- package/dist/web/components/call.css +1 -1
- package/dist/web/components/call.js +1 -1
- package/dist/web/components/connectors.css +1 -1
- package/dist/web/components/connectors.js +186 -155
- package/dist/web/components/conversation.css +1 -1
- package/dist/web/components/conversation.js +1391 -1268
- package/dist/web/components/mcp-sign-in.css +1 -1
- package/dist/web/components/model.css +1 -1
- package/dist/web/components/preferences.css +1 -1
- package/dist/web/components/question.css +1 -1
- package/dist/web/components/sessions.css +1 -1
- package/dist/web/components/sessions.js +11 -7
- package/docs/connectors.md +3 -3
- package/locales/ar.json +17 -1
- package/locales/en.json +17 -1
- package/package.json +19 -4
- package/dist/delegate/start-pending.d.ts +0 -5
- package/dist/delegate/start-pending.d.ts.map +0 -1
- package/dist/delegate/start-pending.js +0 -42
- package/dist/delegate/start-pending.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-handlers.js","sourceRoot":"","sources":["../../src/jobs/process-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAY,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEtE,wHAAwH;AACxH,uHAAuH;AACvH,2GAA2G;AAC3G,mCAAmC;AAEnC,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;AAE9F,0IAA0I;AAC1I,MAAM,UAAU,cAAc,CAAC,GAAiC;IAC9D,OAAO,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,GAAQ,EAAE,GAAsB;IACvD,KAAK,MAAM,EAAE,IAAI,GAAG;QAAE,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AACxF,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,GAAQ;IAChC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED,2HAA2H;AAC3H,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAQ;IAC/C,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,sBAAsB,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACrL,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAQ;IAC9C,GAAG,CAAC,eAAe,CAAC,uBAAuB,EAAE;QAC3C,WAAW,EAAE,kFAAkF;QAC/F,MAAM,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;YACtD,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,SAAS,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS;gBAAE,OAAO;YACxD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1F,IAAI,KAAK,KAAK,SAAS,IAAI,cAAc,CAAC,KAAK,CAAC;gBAAE,MAAM,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"process-handlers.js","sourceRoot":"","sources":["../../src/jobs/process-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,10 @@ export declare const processId: (name: string) => string | undefined;
|
|
|
8
8
|
export type ProcessStatus = 'running' | 'succeeded' | 'failed' | 'cancelled' | 'interrupted';
|
|
9
9
|
export declare function processStatus(doc: ProcessDoc): ProcessStatus;
|
|
10
10
|
export type EndPatch = Pick<ProcessDoc, 'end' | 'reported'> & Partial<Pick<ProcessDoc, 'exitCode' | 'signal'>>;
|
|
11
|
-
/**
|
|
11
|
+
/**
|
|
12
|
+
* Records how a process ended, once: the record when this call set the end, `undefined` when it had ended already. A
|
|
13
|
+
* notify line's exit by itself past its startup second stays unreported, for its watcher to report (ADR 0108, 16).
|
|
14
|
+
*/
|
|
12
15
|
export declare function markEnd(ctx: Ctx, id: string, patch: EndPatch): Promise<Stored<ProcessDoc> | undefined>;
|
|
13
16
|
/** A session's process, or `undefined` when the session has none with that id. */
|
|
14
17
|
export declare function sessionProcess(ctx: Ctx, sessionId: string, id: string): Promise<Stored<ProcessDoc> | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-records.d.ts","sourceRoot":"","sources":["../../src/jobs/process-records.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAMxD,uFAAuF;AACvF,eAAO,MAAM,SAAS,mBAAmB,CAAC;AAE1C,eAAO,MAAM,WAAW,GAAI,IAAI,MAAM,KAAG,MAAqB,CAAC;AAE/D,2FAA2F;AAC3F,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,SAA8E,CAAC;AAEjI,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,CAAC;AAE7F,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,aAAa,CAI5D;AAED,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC;AAE/G
|
|
1
|
+
{"version":3,"file":"process-records.d.ts","sourceRoot":"","sources":["../../src/jobs/process-records.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAMxD,uFAAuF;AACvF,eAAO,MAAM,SAAS,mBAAmB,CAAC;AAE1C,eAAO,MAAM,WAAW,GAAI,IAAI,MAAM,KAAG,MAAqB,CAAC;AAE/D,2FAA2F;AAC3F,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,SAA8E,CAAC;AAEjI,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,CAAC;AAE7F,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,aAAa,CAI5D;AAED,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC;AAE/G;;;GAGG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC,CAO5G;AAED,kFAAkF;AAClF,wBAAsB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC,CAGrH"}
|
|
@@ -13,13 +13,17 @@ export function processStatus(doc) {
|
|
|
13
13
|
return doc.exitCode === 0 ? 'succeeded' : 'failed';
|
|
14
14
|
return doc.end === 'interrupted' ? 'interrupted' : 'cancelled';
|
|
15
15
|
}
|
|
16
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Records how a process ended, once: the record when this call set the end, `undefined` when it had ended already. A
|
|
18
|
+
* notify line's exit by itself past its startup second stays unreported, for its watcher to report (ADR 0108, 16).
|
|
19
|
+
*/
|
|
17
20
|
export async function markEnd(ctx, id, patch) {
|
|
18
21
|
return ctx.store.transaction((tx) => {
|
|
19
22
|
const doc = txRecords(tx).processes.get(id);
|
|
20
23
|
if (doc === undefined || doc.end !== undefined)
|
|
21
24
|
return undefined;
|
|
22
|
-
|
|
25
|
+
const watched = doc.notify === true && doc.starting !== true && patch.end === 'exited';
|
|
26
|
+
return txRecords(tx).processes.update(id, { ...patch, ...(watched ? { reported: false } : {}), endedAt: now() });
|
|
23
27
|
});
|
|
24
28
|
}
|
|
25
29
|
/** A session's process, or `undefined` when the session has none with that id. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-records.js","sourceRoot":"","sources":["../../src/jobs/process-records.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,+BAA+B,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAE7D,wHAAwH;AAExH,uFAAuF;AACvF,MAAM,CAAC,MAAM,SAAS,GAAG,gBAAgB,CAAC;AAE1C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAU,EAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;AAE/D,2FAA2F;AAC3F,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAsB,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAIjI,MAAM,UAAU,aAAa,CAAC,GAAe;IAC3C,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC5C,IAAI,GAAG,CAAC,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC7E,OAAO,GAAG,CAAC,GAAG,KAAK,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC;AACjE,CAAC;AAID
|
|
1
|
+
{"version":3,"file":"process-records.js","sourceRoot":"","sources":["../../src/jobs/process-records.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,+BAA+B,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAE7D,wHAAwH;AAExH,uFAAuF;AACvF,MAAM,CAAC,MAAM,SAAS,GAAG,gBAAgB,CAAC;AAE1C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAU,EAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;AAE/D,2FAA2F;AAC3F,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAsB,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAIjI,MAAM,UAAU,aAAa,CAAC,GAAe;IAC3C,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC5C,IAAI,GAAG,CAAC,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC7E,OAAO,GAAG,CAAC,GAAG,KAAK,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC;AACjE,CAAC;AAID;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAQ,EAAE,EAAU,EAAE,KAAe;IACjE,OAAO,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE;QAClC,MAAM,GAAG,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACjE,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,KAAK,IAAI,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC;QACvF,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACnH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAQ,EAAE,SAAiB,EAAE,EAAU;IAC1E,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACvD,OAAO,GAAG,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACxD,CAAC"}
|
|
@@ -4,7 +4,8 @@ import type { ProcessDoc } from '../schemas/records.ts';
|
|
|
4
4
|
export declare function outputTail(ctx: Ctx, id: string, lines: number): Promise<string>;
|
|
5
5
|
/** Deletes the url artifacts an ended process served (ADR 0104); one still in its startup second served none. */
|
|
6
6
|
export declare function deleteEndedArtifacts(ctx: Ctx, doc: Stored<ProcessDoc>): Promise<string[]>;
|
|
7
|
-
|
|
7
|
+
/** Tells the chat how `doc` ended; `startTurn` only for a notify line's watcher, which is no handler's job (ADR 0108, 16). */
|
|
8
|
+
export declare function reportEnd(ctx: Ctx, doc: Stored<ProcessDoc>, deleted: readonly string[], startTurn?: boolean): Promise<void>;
|
|
8
9
|
/** Reports the endings no handler could write into this session (kvman stopped or died), once, in one message. */
|
|
9
10
|
export declare function reportInterrupted(ctx: Ctx, sessionId: string): Promise<void>;
|
|
10
11
|
//# sourceMappingURL=process-report.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-report.d.ts","sourceRoot":"","sources":["../../src/jobs/process-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,GAAG,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"process-report.d.ts","sourceRoot":"","sources":["../../src/jobs/process-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,GAAG,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAcxD,kEAAkE;AAClE,wBAAsB,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOrF;AASD,iHAAiH;AACjH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAG/F;AAED,8HAA8H;AAC9H,wBAAsB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAK/H;AAUD,kHAAkH;AAClH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYlF"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { ProblemError } from '@kvman/sdk';
|
|
2
|
-
import { appendBackground, backgroundText } from "../turns/background.js";
|
|
2
|
+
import { appendBackground, appendEnding, backgroundText } from "../turns/background.js";
|
|
3
3
|
import { plainText } from "../result-text.js";
|
|
4
4
|
import { records } from "../store/collections.js";
|
|
5
5
|
import { deleteServedArtifacts, deletedArtifactsText } from "../artifacts/served-artifacts.js";
|
|
6
6
|
import { processName } from "./process-records.js";
|
|
7
7
|
import { lastLines, outputLines } from "./process-text.js";
|
|
8
8
|
// Telling a session how a background process ended (ADR 0009, 150): one background message with the outcome and the
|
|
9
|
-
// last 20 lines of output. It
|
|
9
|
+
// last 20 lines of output. It starts a turn only for a notify line, from its watcher; a handler's jobs carry the
|
|
10
|
+
// `fromHandler` mark and start none.
|
|
10
11
|
const reportLines = 20;
|
|
11
12
|
/** A process's last lines of output; none when it left no log. */
|
|
12
13
|
export async function outputTail(ctx, id, lines) {
|
|
@@ -34,11 +35,12 @@ export async function deleteEndedArtifacts(ctx, doc) {
|
|
|
34
35
|
return [];
|
|
35
36
|
return deleteServedArtifacts(ctx, doc.sessionId, await outputTail(ctx, doc.id, outputLines));
|
|
36
37
|
}
|
|
37
|
-
|
|
38
|
+
/** Tells the chat how `doc` ended; `startTurn` only for a notify line's watcher, which is no handler's job (ADR 0108, 16). */
|
|
39
|
+
export async function reportEnd(ctx, doc, deleted, startTurn = false) {
|
|
38
40
|
const tail = await outputTail(ctx, doc.id, reportLines);
|
|
39
41
|
const artifacts = deletedArtifactsText(deleted);
|
|
40
42
|
const text = `The process ${outcome(doc)}${artifacts === '' ? '' : `\n${artifacts}`}${tail === '' ? '' : `\nIts last output:\n${tail}`}`;
|
|
41
|
-
await
|
|
43
|
+
await appendEnding(ctx, doc.sessionId, { kind: 'job', jobId: doc.id }, backgroundText(doc.call, doc.id, text), startTurn);
|
|
42
44
|
}
|
|
43
45
|
/** The message that reports the runs that ended while kvman was stopped: one line per run, with no output (ADR 0085, 5). */
|
|
44
46
|
function interruptedText(ended) {
|
|
@@ -48,7 +50,8 @@ function interruptedText(ended) {
|
|
|
48
50
|
/** Reports the endings no handler could write into this session (kvman stopped or died), once, in one message. */
|
|
49
51
|
export async function reportInterrupted(ctx, sessionId) {
|
|
50
52
|
const store = records(ctx.store);
|
|
51
|
-
|
|
53
|
+
// A notify line's exit is its watcher's to report (ADR 0108, 16).
|
|
54
|
+
const ended = (await store.processes.find({ sessionId, reported: false }, { limit: 1000 })).filter((doc) => doc.end !== undefined && !(doc.notify === true && doc.end === 'exited'));
|
|
52
55
|
if (ended.length === 0)
|
|
53
56
|
return;
|
|
54
57
|
const told = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-report.js","sourceRoot":"","sources":["../../src/jobs/process-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAyB,MAAM,YAAY,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"process-report.js","sourceRoot":"","sources":["../../src/jobs/process-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ export declare function startedOutcome(doc: Pick<ProcessDoc, 'end' | 'exitCode'
|
|
|
15
15
|
signal: string | null;
|
|
16
16
|
};
|
|
17
17
|
/** Starts `line` in the real shell for a session, titled by the line (ADR 0089, 1); a line that can't start fails `VALIDATION_FAILED` and leaves no record. */
|
|
18
|
-
export declare function startProcess(ctx: Ctx, sessionId: string, shell: ShellCommand, line: string): Promise<StartedProcess>;
|
|
18
|
+
export declare function startProcess(ctx: Ctx, sessionId: string, shell: ShellCommand, line: string, notify?: boolean): Promise<StartedProcess>;
|
|
19
19
|
/** What a stop did: whether it stopped the run, and the url artifacts of a stopped process it deleted (ADR 0104). */
|
|
20
20
|
export type Stopped = {
|
|
21
21
|
stopped: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-run.d.ts","sourceRoot":"","sources":["../../src/jobs/process-run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,GAAG,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAGjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"process-run.d.ts","sourceRoot":"","sources":["../../src/jobs/process-run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,GAAG,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAGjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAM9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AASxD,MAAM,MAAM,cAAc,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAE/H,+FAA+F;AAC/F,wBAAgB,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,GAAG,UAAU,GAAG,QAAQ,CAAC,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAOvJ;AAED,+JAA+J;AAC/J,wBAAsB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CAoB1I;AAED,qHAAqH;AACrH,MAAM,MAAM,OAAO,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,gBAAgB,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEvE;;;GAGG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,OAAO,GAAG,QAAQ,EAAE,UAAU,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAYjI;AAED,+FAA+F;AAC/F,wBAAsB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM9E"}
|
package/dist/jobs/process-run.js
CHANGED
|
@@ -4,6 +4,7 @@ import { plainEnvironment } from "../result-text.js";
|
|
|
4
4
|
import { now } from "../sessions/session-lookup.js";
|
|
5
5
|
import { records, txRecords } from "../store/collections.js";
|
|
6
6
|
import { markEnd, processName } from "./process-records.js";
|
|
7
|
+
import { watchNotified } from "./notify-watch.js";
|
|
7
8
|
import { deleteEndedArtifacts, outputTail, reportEnd } from "./process-report.js";
|
|
8
9
|
// A background shell line (ADR 0009, 149): it runs in the kernel's process service, and the call returns its id and the
|
|
9
10
|
// first second of its output. Stopping one is kvcoder's own call, since the kernel reports no event for a stop.
|
|
@@ -22,9 +23,9 @@ export function startedOutcome(doc) {
|
|
|
22
23
|
return { ended: true, exitCode: null, signal: null };
|
|
23
24
|
}
|
|
24
25
|
/** Starts `line` in the real shell for a session, titled by the line (ADR 0089, 1); a line that can't start fails `VALIDATION_FAILED` and leaves no record. */
|
|
25
|
-
export async function startProcess(ctx, sessionId, shell, line) {
|
|
26
|
+
export async function startProcess(ctx, sessionId, shell, line, notify = false) {
|
|
26
27
|
const store = records(ctx.store);
|
|
27
|
-
const doc = await store.processes.insert({ workspaceId: ctx.job.workspace.id, sessionId, title: line, call: line, startedAt: now(), reported: false, starting: true });
|
|
28
|
+
const doc = await store.processes.insert({ workspaceId: ctx.job.workspace.id, sessionId, title: line, call: line, startedAt: now(), reported: false, starting: true, ...(notify ? { notify: true } : {}) });
|
|
28
29
|
try {
|
|
29
30
|
await ctx.processes.start(processName(doc.id), { command: shell.program, args: shell.args(line), env: plainEnvironment(process.env) });
|
|
30
31
|
}
|
|
@@ -41,7 +42,10 @@ export async function startProcess(ctx, sessionId, shell, line) {
|
|
|
41
42
|
return undefined;
|
|
42
43
|
return current.end === undefined ? txRecords(tx).processes.update(doc.id, { starting: false }) : current;
|
|
43
44
|
});
|
|
44
|
-
|
|
45
|
+
const outcome = startedOutcome(settled ?? doc);
|
|
46
|
+
if (notify && !outcome.ended)
|
|
47
|
+
await watchNotified(ctx, doc.id);
|
|
48
|
+
return { output, jobId: doc.id, ...outcome };
|
|
45
49
|
}
|
|
46
50
|
/**
|
|
47
51
|
* Stops a running process for `by`, deleting the url artifacts it served unless it starts again (the person's Restart);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-run.js","sourceRoot":"","sources":["../../src/jobs/process-run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAyB,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,GAAG,EAAE,MAAM,+BAA+B,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGlF,wHAAwH;AACxH,gHAAgH;AAEhH,6DAA6D;AAC7D,MAAM,eAAe,GAAG,KAAK,CAAC;AAC9B,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAI7B,+FAA+F;AAC/F,MAAM,UAAU,cAAc,CAAC,GAAoD;IACjF,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACjF,IAAI,GAAG,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QACzB,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACnG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;IAC3E,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACvD,CAAC;AAED,+JAA+J;AAC/J,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAQ,EAAE,SAAiB,EAAE,KAAmB,EAAE,IAAY;IAC/
|
|
1
|
+
{"version":3,"file":"process-run.js","sourceRoot":"","sources":["../../src/jobs/process-run.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/connect.d.ts
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import { type Ctx } from '@kvman/sdk';
|
|
2
2
|
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
3
3
|
import type { RequestOptions } from '@modelcontextprotocol/sdk/shared/protocol.js';
|
|
4
|
-
import type
|
|
5
|
-
|
|
6
|
-
export declare const workspaceVariable = "KVMAN_WORKSPACE";
|
|
4
|
+
import { type McpServer } from './servers.ts';
|
|
5
|
+
export { workspaceVariable } from './servers.ts';
|
|
7
6
|
/** What the work gets: the connected client, and the options every request of this connection takes. */
|
|
8
7
|
export type Connection = {
|
|
9
8
|
client: Client;
|
|
10
9
|
request: RequestOptions;
|
|
11
10
|
};
|
|
12
|
-
/**
|
|
13
|
-
export
|
|
11
|
+
/** A turn's hold on a server: the address its calls reach, the MCP session they share, and how to keep a new one. */
|
|
12
|
+
export type TurnLink = {
|
|
13
|
+
url: string;
|
|
14
|
+
sessionId: string | null;
|
|
15
|
+
keep(sessionId: string | null): Promise<void>;
|
|
16
|
+
};
|
|
17
|
+
/** Connects to a server, through `link` for a kept one, runs `work`, and closes the connection; a failure is a Problem with the reason. */
|
|
18
|
+
export declare function withServer<Result>(ctx: Ctx, server: McpServer, timeoutMs: number, work: (connection: Connection) => Promise<Result>, link?: TurnLink): Promise<Result>;
|
|
14
19
|
//# sourceMappingURL=connect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/mcp/connect.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,GAAG,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAKnF,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/mcp/connect.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,GAAG,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAKnF,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AASjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,wGAAwG;AACxG,MAAM,MAAM,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,CAAC;AAIrE,qHAAqH;AACrH,MAAM,MAAM,QAAQ,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC;AAmChH,2IAA2I;AAC3I,wBAAsB,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAoB5K"}
|
package/dist/mcp/connect.js
CHANGED
|
@@ -9,13 +9,20 @@ import { OAuthError } from '@modelcontextprotocol/sdk/server/auth/errors.js';
|
|
|
9
9
|
import { commandTransport } from "./command-transport.js";
|
|
10
10
|
import { oauthProvider, registeredRedirect } from "./oauth-provider.js";
|
|
11
11
|
import { serverSecrets, withoutSecrets } from "./secrets.js";
|
|
12
|
-
|
|
13
|
-
//
|
|
12
|
+
import { workspaceVariable } from "./servers.js";
|
|
13
|
+
// One connection to an MCP server (plan 08 §8.5, ADR 0020, 4): connect, do the work, close. A server over HTTP, or a
|
|
14
|
+
// command run with a `port`, is reached through its turn's link (ADR 0108, 12): the call joins the MCP session the turn
|
|
15
|
+
// keeps, and closing ends only this call's stream. Otherwise nothing is kept between calls. The connection ends with
|
|
16
|
+
// the job's signal and at the timeout, and a command's process tree is killed then.
|
|
14
17
|
// A command runs in a folder of its own that is deleted with the connection (ADR 0070, 7), so the logs and snapshots a
|
|
15
18
|
// server writes beside itself never land in the person's project; it finds the project in `KVMAN_WORKSPACE`.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
export { workspaceVariable } from "./servers.js";
|
|
20
|
+
async function open(ctx, server, secrets, link) {
|
|
21
|
+
if (link !== undefined && 'command' in server) {
|
|
22
|
+
// The command runs for the turn, with the server's variables; nothing secret goes in a request.
|
|
23
|
+
const resumed = link.sessionId === null ? {} : { sessionId: link.sessionId };
|
|
24
|
+
return { transport: new StreamableHTTPClientTransport(new URL(link.url), resumed) };
|
|
25
|
+
}
|
|
19
26
|
if ('command' in server) {
|
|
20
27
|
const folder = await mkdtemp(path.join(tmpdir(), 'kvman-mcp-'));
|
|
21
28
|
const command = commandTransport({ command: server.command, args: server.args, cwd: folder, env: { [workspaceVariable]: ctx.job.workspace.path, ...secrets } });
|
|
@@ -26,7 +33,8 @@ async function open(ctx, server, secrets) {
|
|
|
26
33
|
// A server the person signed in to is called with its tokens, which are refreshed when they have expired.
|
|
27
34
|
const redirectUrl = await registeredRedirect(ctx, server.name, server.url);
|
|
28
35
|
const signedIn = redirectUrl === undefined ? {} : { authProvider: oauthProvider(ctx, server.name, server.url, { redirectUrl, step: 'call' }) };
|
|
29
|
-
const
|
|
36
|
+
const resumed = link === undefined || link.sessionId === null ? {} : { sessionId: link.sessionId };
|
|
37
|
+
const transport = new StreamableHTTPClientTransport(new URL(server.url), { requestInit: { headers: secrets }, ...signedIn, ...resumed });
|
|
30
38
|
return { transport };
|
|
31
39
|
}
|
|
32
40
|
// The server refused the call for lack of a sign-in it takes: no tokens, or tokens it no longer refreshes.
|
|
@@ -40,21 +48,26 @@ function failure(server, error, opened, secrets, timedOutAfterMs) {
|
|
|
40
48
|
const reason = withoutSecrets([said, opened.command?.errorOutput() ?? ''].filter((part) => part !== '').join('\n'), secrets);
|
|
41
49
|
return new ProblemError({ code: 'kvcoder/MCP_CONNECT_FAILED', message: `The MCP server ${server.name} failed: ${reason}`, params: { server: server.name, reason } });
|
|
42
50
|
}
|
|
43
|
-
/** Connects to a server, runs `work`, and closes the connection; a failure is a Problem with the reason. */
|
|
44
|
-
export async function withServer(ctx, server, timeoutMs, work) {
|
|
51
|
+
/** Connects to a server, through `link` for a kept one, runs `work`, and closes the connection; a failure is a Problem with the reason. */
|
|
52
|
+
export async function withServer(ctx, server, timeoutMs, work, link) {
|
|
45
53
|
const secrets = await serverSecrets(ctx, server);
|
|
46
54
|
const { version } = await ctx.exec('kernel.health.get', {});
|
|
47
|
-
const opened = await open(ctx, server, secrets);
|
|
55
|
+
const opened = await open(ctx, server, secrets, link);
|
|
48
56
|
const deadline = AbortSignal.timeout(timeoutMs);
|
|
49
57
|
const request = { signal: AbortSignal.any([ctx.job.signal, deadline]), timeout: timeoutMs, maxTotalTimeout: timeoutMs };
|
|
50
58
|
const client = new Client({ name: 'kvman', version });
|
|
51
59
|
try {
|
|
52
60
|
await client.connect(opened.transport, request);
|
|
61
|
+
if (link !== undefined && opened.transport.sessionId !== link.sessionId)
|
|
62
|
+
await link.keep(opened.transport.sessionId ?? null);
|
|
53
63
|
return await work({ client, request });
|
|
54
64
|
}
|
|
55
65
|
catch (error) {
|
|
56
66
|
if (error instanceof ProblemError || ctx.job.signal.aborted)
|
|
57
67
|
throw error;
|
|
68
|
+
// A kept session whose connection failed is made again at the next call.
|
|
69
|
+
if (link !== undefined)
|
|
70
|
+
await link.keep(null);
|
|
58
71
|
throw failure(server, error, opened, secrets, deadline.aborted ? timeoutMs : undefined);
|
|
59
72
|
}
|
|
60
73
|
finally {
|
package/dist/mcp/connect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/mcp/connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAY,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,MAAM,oDAAoD,CAAC;AACxH,OAAO,EAAE,UAAU,EAAE,MAAM,iDAAiD,CAAC;AAG7E,OAAO,EAAE,gBAAgB,EAAyB,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/mcp/connect.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/servers.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { z, type Ctx } from '@kvman/sdk';
|
|
2
|
+
/** The variable a command server reads the workspace folder from. */
|
|
3
|
+
export declare const workspaceVariable = "KVMAN_WORKSPACE";
|
|
2
4
|
/** One MCP server: a command, or an address. */
|
|
3
5
|
export declare const mcpServerSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
4
6
|
name: z.ZodString;
|
|
@@ -6,6 +8,7 @@ export declare const mcpServerSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
6
8
|
command: z.ZodString;
|
|
7
9
|
args: z.ZodArray<z.ZodString>;
|
|
8
10
|
env: z.ZodArray<z.ZodString>;
|
|
11
|
+
port: z.ZodExactOptional<z.ZodNumber>;
|
|
9
12
|
}, z.core.$strict>, z.ZodObject<{
|
|
10
13
|
name: z.ZodString;
|
|
11
14
|
description: z.ZodString;
|
|
@@ -19,6 +22,7 @@ export declare const mcpServersSchema: z.ZodArray<z.ZodUnion<readonly [z.ZodObje
|
|
|
19
22
|
command: z.ZodString;
|
|
20
23
|
args: z.ZodArray<z.ZodString>;
|
|
21
24
|
env: z.ZodArray<z.ZodString>;
|
|
25
|
+
port: z.ZodExactOptional<z.ZodNumber>;
|
|
22
26
|
}, z.core.$strict>, z.ZodObject<{
|
|
23
27
|
name: z.ZodString;
|
|
24
28
|
description: z.ZodString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"servers.d.ts","sourceRoot":"","sources":["../../src/mcp/servers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,CAAC,EAAE,KAAK,GAAG,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"servers.d.ts","sourceRoot":"","sources":["../../src/mcp/servers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,CAAC,EAAE,KAAK,GAAG,EAAE,MAAM,YAAY,CAAC;AAOvD,qEAAqE;AACrE,eAAO,MAAM,iBAAiB,oBAAoB,CAAC;AAenD,gDAAgD;AAChD,eAAO,MAAM,eAAe;;;;;;;;;;;;oBAAkD,CAAC;AAE/E,uEAAuE;AACvE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;qBAAyJ,CAAC;AAEvL,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC;AAEzD,kEAAkE;AAClE,wBAAsB,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAE/D;AAED,uFAAuF;AACvF,wBAAsB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAM1E"}
|
package/dist/mcp/servers.js
CHANGED
|
@@ -3,13 +3,17 @@ import { wordSchema } from "../schemas/registry.js";
|
|
|
3
3
|
// The MCP servers the person added (plan 08 §8.5, ADR 0020, 4, 6, and 9): the setting `kvcoder.mcp.servers`. A server
|
|
4
4
|
// is a command that speaks MCP on its standard input and output, or an address reached over Streamable HTTP. `env` and
|
|
5
5
|
// `headers` hold names only: each value is one of kvcoder's secrets.
|
|
6
|
+
/** The variable a command server reads the workspace folder from. */
|
|
7
|
+
export const workspaceVariable = 'KVMAN_WORKSPACE';
|
|
6
8
|
const text = z.string().min(1);
|
|
7
9
|
const variableName = z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/, 'Use letters, digits, and _, not starting with a digit.');
|
|
8
10
|
const headerName = z.string().regex(/^[A-Za-z0-9!#$%&'*+.^_`|~-]+$/, 'Use the characters of an HTTP header name.');
|
|
9
11
|
function isHttpAddress(value) {
|
|
10
12
|
return URL.canParse(value) && ['http:', 'https:'].includes(new URL(value).protocol);
|
|
11
13
|
}
|
|
12
|
-
|
|
14
|
+
// A command server with `port` serves MCP over HTTP on that port of this machine: kvman runs it for a turn, and the
|
|
15
|
+
// turn's calls share its session (ADR 0108, 12).
|
|
16
|
+
const commandServerSchema = z.strictObject({ name: wordSchema, description: text, command: text, args: z.array(z.string()), env: z.array(variableName), port: z.number().int().min(1024).max(65535).exactOptional() });
|
|
13
17
|
const urlServerSchema = z.strictObject({ name: wordSchema, description: text, url: z.string().refine(isHttpAddress, 'Give an http or https address.'), headers: z.array(headerName) });
|
|
14
18
|
/** One MCP server: a command, or an address. */
|
|
15
19
|
export const mcpServerSchema = z.union([commandServerSchema, urlServerSchema]);
|
package/dist/mcp/servers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"servers.js","sourceRoot":"","sources":["../../src/mcp/servers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,CAAC,EAAY,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,sHAAsH;AACtH,uHAAuH;AACvH,qEAAqE;AAErE,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/B,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,0BAA0B,EAAE,wDAAwD,CAAC,CAAC;AAC5H,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,+BAA+B,EAAE,4CAA4C,CAAC,CAAC;AAEnH,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,mBAAmB,GAAG,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"servers.js","sourceRoot":"","sources":["../../src/mcp/servers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type Ctx } from '@kvman/sdk';
|
|
2
|
+
import type { TurnLink } from './connect.ts';
|
|
3
|
+
import { type McpServer } from './servers.ts';
|
|
4
|
+
/** The turn's link to a kept server, or `undefined` for a command server without a port, which connects per call. */
|
|
5
|
+
export declare function turnLink(ctx: Ctx, sessionId: string, server: McpServer): Promise<TurnLink | undefined>;
|
|
6
|
+
/** Stops the servers a turn kept and forgets them, when the turn ends. */
|
|
7
|
+
export declare function closeTurnServers(ctx: Ctx, turnId: string): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=turn-servers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn-servers.d.ts","sourceRoot":"","sources":["../../src/mcp/turn-servers.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,KAAK,GAAG,EAAe,MAAM,YAAY,CAAC;AAKjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AA8CjE,qHAAqH;AACrH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAa5G;AAED,0EAA0E;AAC1E,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAa9E"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { mkdtemp, rm } from 'node:fs/promises';
|
|
2
|
+
import { connect } from 'node:net';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { ProblemError } from '@kvman/sdk';
|
|
6
|
+
import { delay } from "../delay.js";
|
|
7
|
+
import { now } from "../sessions/session-lookup.js";
|
|
8
|
+
import { records } from "../store/collections.js";
|
|
9
|
+
import { workspaceVariable } from "./servers.js";
|
|
10
|
+
// The servers a turn keeps for its life (plan 08 §8.5, ADR 0108, 12): a server over HTTP keeps its MCP session, and a
|
|
11
|
+
// command with a `port` is started once, through the kernel's process service, as an HTTP server on that port of this
|
|
12
|
+
// machine. The turn's calls join the same session, so a browser keeps its page; the turn's end stops them all.
|
|
13
|
+
const startWithinMs = 20_000;
|
|
14
|
+
const lookEveryMs = 200;
|
|
15
|
+
const processNameOf = (turnId, server) => `mcp-${turnId}-${server}`;
|
|
16
|
+
// Whether something on this machine accepts a connection at `port`.
|
|
17
|
+
function listening(port) {
|
|
18
|
+
return new Promise((resolve) => {
|
|
19
|
+
const socket = connect({ host: '127.0.0.1', port });
|
|
20
|
+
const settle = (answered) => { socket.destroy(); resolve(answered); };
|
|
21
|
+
socket.once('connect', () => settle(true));
|
|
22
|
+
socket.once('error', () => settle(false));
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
async function record(ctx, turnId, server) {
|
|
26
|
+
const store = records(ctx.store).mcpSessions;
|
|
27
|
+
return (await store.find({ turnId, server }, { limit: 1 }))[0] ?? store.insert({ turnId, server, mcpSessionId: null, processName: null, folder: null, createdAt: now() });
|
|
28
|
+
}
|
|
29
|
+
// Starts the turn's command server unless it runs, and waits until its port answers.
|
|
30
|
+
async function started(ctx, doc, server, port) {
|
|
31
|
+
const name = processNameOf(doc.turnId, server.name);
|
|
32
|
+
if ((await ctx.processes.list()).some((process) => process.name === name))
|
|
33
|
+
return;
|
|
34
|
+
const folder = doc.folder ?? (await mkdtemp(path.join(tmpdir(), 'kvman-mcp-')));
|
|
35
|
+
await records(ctx.store).mcpSessions.update(doc.id, { processName: name, folder, mcpSessionId: null });
|
|
36
|
+
// The secrets module loads the MCP SDK, which only an MCP call needs.
|
|
37
|
+
const { serverSecrets } = await import("./secrets.js");
|
|
38
|
+
try {
|
|
39
|
+
await ctx.processes.start(name, { command: server.command, args: server.args, cwd: folder, env: { [workspaceVariable]: ctx.job.workspace.path, ...(await serverSecrets(ctx, server)) } });
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
if (!(error instanceof ProblemError) || error.problem.code !== 'PROCESS_RUNNING')
|
|
43
|
+
throw error;
|
|
44
|
+
}
|
|
45
|
+
for (const until = Date.now() + startWithinMs; Date.now() < until; await delay(lookEveryMs, ctx.job.signal)) {
|
|
46
|
+
ctx.job.signal.throwIfAborted();
|
|
47
|
+
if (await listening(port))
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
throw new ProblemError({ code: 'kvcoder/MCP_CONNECT_FAILED', message: `The MCP server ${server.name} failed: nothing answered on port ${String(port)} within ${String(startWithinMs / 1000)} s`, params: { server: server.name, reason: 'not listening' } });
|
|
51
|
+
}
|
|
52
|
+
/** The turn's link to a kept server, or `undefined` for a command server without a port, which connects per call. */
|
|
53
|
+
export async function turnLink(ctx, sessionId, server) {
|
|
54
|
+
const port = 'command' in server ? server.port : undefined;
|
|
55
|
+
if ('command' in server && port === undefined)
|
|
56
|
+
return undefined;
|
|
57
|
+
const turnId = (await records(ctx.store).sessions.get(sessionId))?.turnId ?? null;
|
|
58
|
+
if (turnId === null)
|
|
59
|
+
return undefined;
|
|
60
|
+
const doc = await record(ctx, turnId, server.name);
|
|
61
|
+
if ('command' in server && port !== undefined)
|
|
62
|
+
await started(ctx, doc, server, port);
|
|
63
|
+
const current = (await records(ctx.store).mcpSessions.get(doc.id)) ?? doc;
|
|
64
|
+
return {
|
|
65
|
+
url: 'url' in server ? server.url : `http://127.0.0.1:${String(port)}/mcp`,
|
|
66
|
+
sessionId: current.mcpSessionId,
|
|
67
|
+
keep: async (mcpSessionId) => { await records(ctx.store).mcpSessions.update(doc.id, { mcpSessionId }); },
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/** Stops the servers a turn kept and forgets them, when the turn ends. */
|
|
71
|
+
export async function closeTurnServers(ctx, turnId) {
|
|
72
|
+
const store = records(ctx.store).mcpSessions;
|
|
73
|
+
for (const doc of await store.find({ turnId }, { limit: 1000 })) {
|
|
74
|
+
if (doc.processName !== null) {
|
|
75
|
+
try {
|
|
76
|
+
await ctx.processes.stop(doc.processName);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
if (!(error instanceof ProblemError) || error.problem.code !== 'NOT_FOUND')
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (doc.folder !== null)
|
|
84
|
+
await rm(doc.folder, { recursive: true, force: true });
|
|
85
|
+
await store.delete(doc.id);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=turn-servers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn-servers.js","sourceRoot":"","sources":["../../src/mcp/turn-servers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-prompt.d.ts","sourceRoot":"","sources":["../../src/prompt/build-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAEhE,OAAO,EAA+B,KAAK,MAAM,EAAE,KAAK,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAK1F,MAAM,MAAM,WAAW,GAAG;IACxB,8GAA8G;IAC9G,IAAI,EAAE,IAAI,CAAC;IACX,2HAA2H;IAC3H,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,wEAAwE;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0FAA0F;IAC1F,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACpE,UAAU,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"build-prompt.d.ts","sourceRoot":"","sources":["../../src/prompt/build-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAEhE,OAAO,EAA+B,KAAK,MAAM,EAAE,KAAK,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAK1F,MAAM,MAAM,WAAW,GAAG;IACxB,8GAA8G;IAC9G,IAAI,EAAE,IAAI,CAAC;IACX,2HAA2H;IAC3H,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,wEAAwE;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0FAA0F;IAC1F,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACpE,UAAU,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAA;KAAE,EAAE,CAAC;CACzI,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAAC,IAAI,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE,CAAC;AASvG,6EAA6E;AAC7E,eAAO,MAAM,UAAU,+KAA+K,CAAC;AAoDvM,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAO3D"}
|
|
@@ -30,11 +30,10 @@ function connectorLine(connector) {
|
|
|
30
30
|
const signatures = connector.signatures;
|
|
31
31
|
const names = [...connector.commands, 'help'];
|
|
32
32
|
const width = Math.max(...names.map((name) => name.length));
|
|
33
|
+
// A command whose payload has no signature (one that isn't an object with properties) is its name alone.
|
|
33
34
|
const rows = connector.commands.map((name, index) => {
|
|
34
35
|
const signature = signatures[index];
|
|
35
|
-
|
|
36
|
-
throw new Error(`The connector ${connector.name} has no signature for the command ${name}.`);
|
|
37
|
-
return ` ${name.padEnd(width)} ${signature}`;
|
|
36
|
+
return signature === undefined ? ` ${name}` : ` ${name.padEnd(width)} ${signature}`;
|
|
38
37
|
});
|
|
39
38
|
rows.push(` ${'help'.padEnd(width)} { command? }`);
|
|
40
39
|
return [`- ${connector.name}: ${description}`, ...rows].join('\n');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-prompt.js","sourceRoot":"","sources":["../../src/prompt/build-prompt.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"build-prompt.js","sourceRoot":"","sources":["../../src/prompt/build-prompt.ts"],"names":[],"mappings":"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"}
|