@kvman/kvcoder 0.1.6 → 0.1.7
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/api.d.ts +49 -3
- package/dist/api.d.ts.map +1 -1
- package/dist/calls/run-shell.d.ts.map +1 -1
- package/dist/calls/run-shell.js +39 -9
- package/dist/calls/run-shell.js.map +1 -1
- package/dist/connector-call.d.ts +1 -1
- package/dist/connector-call.d.ts.map +1 -1
- package/dist/connector-call.js +4 -2
- package/dist/connector-call.js.map +1 -1
- package/dist/connectors/artifact.d.ts +1 -1
- package/dist/connectors/artifact.d.ts.map +1 -1
- package/dist/connectors/artifact.js +4 -4
- package/dist/connectors/artifact.js.map +1 -1
- package/dist/connectors/ask.d.ts +24 -0
- package/dist/connectors/ask.d.ts.map +1 -1
- package/dist/connectors/ask.js +20 -11
- package/dist/connectors/ask.js.map +1 -1
- package/dist/connectors/background.d.ts +14 -1
- package/dist/connectors/background.d.ts.map +1 -1
- package/dist/connectors/background.js +53 -23
- package/dist/connectors/background.js.map +1 -1
- package/dist/connectors/builtin-connectors.d.ts +110 -0
- package/dist/connectors/builtin-connectors.d.ts.map +1 -1
- package/dist/connectors/builtin-connectors.js +4 -1
- package/dist/connectors/builtin-connectors.js.map +1 -1
- package/dist/connectors/delegate.d.ts +3 -2
- package/dist/connectors/delegate.d.ts.map +1 -1
- package/dist/connectors/delegate.js +27 -9
- package/dist/connectors/delegate.js.map +1 -1
- package/dist/connectors/execution-map.d.ts +62 -0
- package/dist/connectors/execution-map.d.ts.map +1 -0
- package/dist/connectors/execution-map.js +142 -0
- package/dist/connectors/execution-map.js.map +1 -0
- package/dist/connectors/fs.d.ts +32 -1
- package/dist/connectors/fs.d.ts.map +1 -1
- package/dist/connectors/fs.js +76 -45
- package/dist/connectors/fs.js.map +1 -1
- package/dist/connectors/mcp.d.ts +18 -1
- package/dist/connectors/mcp.d.ts.map +1 -1
- package/dist/connectors/mcp.js +54 -6
- package/dist/connectors/mcp.js.map +1 -1
- package/dist/connectors/payload-fields.d.ts.map +1 -1
- package/dist/connectors/payload-fields.js +1 -1
- package/dist/connectors/payload-fields.js.map +1 -1
- package/dist/delegate/approved-run.d.ts +4 -6
- package/dist/delegate/approved-run.d.ts.map +1 -1
- package/dist/delegate/approved-run.js +74 -34
- package/dist/delegate/approved-run.js.map +1 -1
- package/dist/delegate/git-staging.d.ts +12 -0
- package/dist/delegate/git-staging.d.ts.map +1 -0
- package/dist/delegate/git-staging.js +54 -0
- package/dist/delegate/git-staging.js.map +1 -0
- package/dist/delegate/permission.d.ts +240 -0
- package/dist/delegate/permission.d.ts.map +1 -0
- package/dist/delegate/permission.js +78 -0
- package/dist/delegate/permission.js.map +1 -0
- package/dist/delegate/program-permission.d.ts +27 -0
- package/dist/delegate/program-permission.d.ts.map +1 -0
- package/dist/delegate/program-permission.js +53 -0
- package/dist/delegate/program-permission.js.map +1 -0
- package/dist/delegate/register-worker-run.d.ts.map +1 -1
- package/dist/delegate/register-worker-run.js +27 -11
- package/dist/delegate/register-worker-run.js.map +1 -1
- package/dist/delegate/run-program.d.ts.map +1 -1
- package/dist/delegate/run-program.js +29 -8
- package/dist/delegate/run-program.js.map +1 -1
- package/dist/delegate/runs.d.ts +14 -4
- package/dist/delegate/runs.d.ts.map +1 -1
- package/dist/delegate/runs.js +49 -19
- package/dist/delegate/runs.js.map +1 -1
- package/dist/delegate/staging-guard.d.ts +9 -0
- package/dist/delegate/staging-guard.d.ts.map +1 -0
- package/dist/delegate/staging-guard.js +55 -0
- package/dist/delegate/staging-guard.js.map +1 -0
- package/dist/delegate/start-background.d.ts +7 -0
- package/dist/delegate/start-background.d.ts.map +1 -0
- package/dist/delegate/start-background.js +32 -0
- package/dist/delegate/start-background.js.map +1 -0
- package/dist/delegate/start-pending.d.ts +5 -0
- package/dist/delegate/start-pending.d.ts.map +1 -0
- package/dist/delegate/start-pending.js +42 -0
- package/dist/delegate/start-pending.js.map +1 -0
- package/dist/delegate/workers.d.ts +5 -2
- package/dist/delegate/workers.d.ts.map +1 -1
- package/dist/delegate/workers.js +44 -8
- package/dist/delegate/workers.js.map +1 -1
- package/dist/files/file-change.d.ts +28 -0
- package/dist/files/file-change.d.ts.map +1 -0
- package/dist/files/file-change.js +125 -0
- package/dist/files/file-change.js.map +1 -0
- package/dist/files/file-parts.d.ts +18 -0
- package/dist/files/file-parts.d.ts.map +1 -0
- package/dist/files/file-parts.js +40 -0
- package/dist/files/file-parts.js.map +1 -0
- package/dist/files/read-file.d.ts +9 -1
- package/dist/files/read-file.d.ts.map +1 -1
- package/dist/files/read-file.js +35 -13
- package/dist/files/read-file.js.map +1 -1
- package/dist/files/search-text.d.ts +12 -2
- package/dist/files/search-text.d.ts.map +1 -1
- package/dist/files/search-text.js +87 -23
- package/dist/files/search-text.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/job-rows.d.ts +11 -2
- package/dist/jobs/job-rows.d.ts.map +1 -1
- package/dist/jobs/job-rows.js +24 -13
- package/dist/jobs/job-rows.js.map +1 -1
- package/dist/jobs/process-handlers.d.ts.map +1 -1
- package/dist/jobs/process-handlers.js +12 -1
- package/dist/jobs/process-handlers.js.map +1 -1
- package/dist/jobs/process-report.d.ts.map +1 -1
- package/dist/jobs/process-report.js +2 -1
- package/dist/jobs/process-report.js.map +1 -1
- package/dist/jobs/process-run.d.ts.map +1 -1
- package/dist/jobs/process-run.js +2 -1
- package/dist/jobs/process-run.js.map +1 -1
- package/dist/jobs/register-jobs.d.ts.map +1 -1
- package/dist/jobs/register-jobs.js +1 -0
- package/dist/jobs/register-jobs.js.map +1 -1
- package/dist/maps/map-reminder.d.ts +7 -0
- package/dist/maps/map-reminder.d.ts.map +1 -0
- package/dist/maps/map-reminder.js +24 -0
- package/dist/maps/map-reminder.js.map +1 -0
- package/dist/maps/map-rules.d.ts +36 -0
- package/dist/maps/map-rules.d.ts.map +1 -0
- package/dist/maps/map-rules.js +86 -0
- package/dist/maps/map-rules.js.map +1 -0
- package/dist/maps/map-schema.d.ts +55 -0
- package/dist/maps/map-schema.d.ts.map +1 -0
- package/dist/maps/map-schema.js +27 -0
- package/dist/maps/map-schema.js.map +1 -0
- package/dist/maps/register-maps.d.ts +3 -0
- package/dist/maps/register-maps.d.ts.map +1 -0
- package/dist/maps/register-maps.js +21 -0
- package/dist/maps/register-maps.js.map +1 -0
- package/dist/mcp/connect.d.ts +2 -0
- package/dist/mcp/connect.d.ts.map +1 -1
- package/dist/mcp/connect.js +16 -4
- package/dist/mcp/connect.js.map +1 -1
- package/dist/mcp/oauth-provider.d.ts +8 -5
- package/dist/mcp/oauth-provider.d.ts.map +1 -1
- package/dist/mcp/oauth-provider.js +31 -22
- package/dist/mcp/oauth-provider.js.map +1 -1
- package/dist/mcp/secrets.d.ts +2 -0
- package/dist/mcp/secrets.d.ts.map +1 -1
- package/dist/mcp/secrets.js +6 -0
- package/dist/mcp/secrets.js.map +1 -1
- package/dist/mcp/sign-in.d.ts.map +1 -1
- package/dist/mcp/sign-in.js +12 -4
- package/dist/mcp/sign-in.js.map +1 -1
- package/dist/messages/receive-message.d.ts +2 -1
- package/dist/messages/receive-message.d.ts.map +1 -1
- package/dist/messages/receive-message.js +34 -9
- package/dist/messages/receive-message.js.map +1 -1
- package/dist/messages/register-messages.d.ts.map +1 -1
- package/dist/messages/register-messages.js +13 -8
- package/dist/messages/register-messages.js.map +1 -1
- package/dist/messages/send-receipt.d.ts +10 -0
- package/dist/messages/send-receipt.d.ts.map +1 -0
- package/dist/messages/send-receipt.js +14 -0
- package/dist/messages/send-receipt.js.map +1 -0
- package/dist/prompt/build-prompt.d.ts +1 -0
- package/dist/prompt/build-prompt.d.ts.map +1 -1
- package/dist/prompt/build-prompt.js +5 -1
- package/dist/prompt/build-prompt.js.map +1 -1
- package/dist/prompt/project-rules.d.ts +6 -0
- package/dist/prompt/project-rules.d.ts.map +1 -0
- package/dist/prompt/project-rules.js +37 -0
- package/dist/prompt/project-rules.js.map +1 -0
- package/dist/prompt/session-grants.d.ts +209 -0
- package/dist/prompt/session-grants.d.ts.map +1 -0
- package/dist/prompt/session-grants.js +50 -0
- package/dist/prompt/session-grants.js.map +1 -0
- package/dist/prompt/session-prompt.d.ts +3 -2
- package/dist/prompt/session-prompt.d.ts.map +1 -1
- package/dist/prompt/session-prompt.js +24 -40
- package/dist/prompt/session-prompt.js.map +1 -1
- package/dist/prompt/working-method.d.ts.map +1 -1
- package/dist/prompt/working-method.js +22 -16
- package/dist/prompt/working-method.js.map +1 -1
- package/dist/register-settings.d.ts +3 -1
- package/dist/register-settings.d.ts.map +1 -1
- package/dist/register-settings.js +5 -4
- package/dist/register-settings.js.map +1 -1
- package/dist/registry/register-connectors.d.ts +9 -0
- package/dist/registry/register-connectors.d.ts.map +1 -1
- package/dist/registry/register-connectors.js +20 -12
- package/dist/registry/register-connectors.js.map +1 -1
- package/dist/result-text.d.ts +4 -0
- package/dist/result-text.d.ts.map +1 -1
- package/dist/result-text.js +9 -0
- package/dist/result-text.js.map +1 -1
- package/dist/schemas/records.d.ts +142 -0
- package/dist/schemas/records.d.ts.map +1 -1
- package/dist/schemas/records.js +60 -2
- package/dist/schemas/records.js.map +1 -1
- package/dist/sessions/execution-root.d.ts +8 -0
- package/dist/sessions/execution-root.d.ts.map +1 -0
- package/dist/sessions/execution-root.js +25 -0
- package/dist/sessions/execution-root.js.map +1 -0
- package/dist/sessions/new-session.d.ts +5 -1
- package/dist/sessions/new-session.d.ts.map +1 -1
- package/dist/sessions/new-session.js +17 -4
- package/dist/sessions/new-session.js.map +1 -1
- package/dist/sessions/register-context.d.ts.map +1 -1
- package/dist/sessions/register-context.js +6 -5
- package/dist/sessions/register-context.js.map +1 -1
- package/dist/sessions/register-fork-export.d.ts.map +1 -1
- package/dist/sessions/register-fork-export.js +5 -3
- package/dist/sessions/register-fork-export.js.map +1 -1
- package/dist/sessions/register-lifecycle.d.ts.map +1 -1
- package/dist/sessions/register-lifecycle.js +14 -5
- package/dist/sessions/register-lifecycle.js.map +1 -1
- package/dist/sessions/register-sessions.d.ts.map +1 -1
- package/dist/sessions/register-sessions.js +0 -2
- package/dist/sessions/register-sessions.js.map +1 -1
- package/dist/sessions/session-view.d.ts +23 -0
- package/dist/sessions/session-view.d.ts.map +1 -1
- package/dist/sessions/session-view.js +4 -1
- package/dist/sessions/session-view.js.map +1 -1
- package/dist/store/all-docs.d.ts +4 -0
- package/dist/store/all-docs.d.ts.map +1 -0
- package/dist/store/all-docs.js +14 -0
- package/dist/store/all-docs.js.map +1 -0
- package/dist/store/collections.d.ts +230 -0
- package/dist/store/collections.d.ts.map +1 -1
- package/dist/store/collections.js +16 -1
- package/dist/store/collections.js.map +1 -1
- package/dist/turns/answer-fingerprint.d.ts +4 -0
- package/dist/turns/answer-fingerprint.d.ts.map +1 -0
- package/dist/turns/answer-fingerprint.js +18 -0
- package/dist/turns/answer-fingerprint.js.map +1 -0
- package/dist/turns/apply-answer.d.ts +19 -0
- package/dist/turns/apply-answer.d.ts.map +1 -0
- package/dist/turns/apply-answer.js +47 -0
- package/dist/turns/apply-answer.js.map +1 -0
- package/dist/turns/background.d.ts +3 -0
- package/dist/turns/background.d.ts.map +1 -1
- package/dist/turns/background.js +13 -12
- package/dist/turns/background.js.map +1 -1
- package/dist/turns/call-permission.d.ts +22 -0
- package/dist/turns/call-permission.d.ts.map +1 -0
- package/dist/turns/call-permission.js +49 -0
- package/dist/turns/call-permission.js.map +1 -0
- package/dist/turns/cancel-step-job.d.ts +14 -0
- package/dist/turns/cancel-step-job.d.ts.map +1 -0
- package/dist/turns/cancel-step-job.js +35 -0
- package/dist/turns/cancel-step-job.js.map +1 -0
- package/dist/turns/child-result.d.ts +7 -0
- package/dist/turns/child-result.d.ts.map +1 -0
- package/dist/turns/child-result.js +24 -0
- package/dist/turns/child-result.js.map +1 -0
- package/dist/turns/compaction.d.ts +15 -1
- package/dist/turns/compaction.d.ts.map +1 -1
- package/dist/turns/compaction.js +44 -16
- package/dist/turns/compaction.js.map +1 -1
- package/dist/turns/end-turn-state.d.ts +42 -0
- package/dist/turns/end-turn-state.d.ts.map +1 -0
- package/dist/turns/end-turn-state.js +64 -0
- package/dist/turns/end-turn-state.js.map +1 -0
- package/dist/turns/end-turn.d.ts +7 -8
- package/dist/turns/end-turn.d.ts.map +1 -1
- package/dist/turns/end-turn.js +52 -55
- package/dist/turns/end-turn.js.map +1 -1
- package/dist/turns/helper-calls.d.ts +6 -0
- package/dist/turns/helper-calls.d.ts.map +1 -0
- package/dist/turns/helper-calls.js +8 -0
- package/dist/turns/helper-calls.js.map +1 -0
- package/dist/turns/history.d.ts +3 -1
- package/dist/turns/history.d.ts.map +1 -1
- package/dist/turns/history.js +15 -7
- package/dist/turns/history.js.map +1 -1
- package/dist/turns/lost-reply.d.ts +7 -0
- package/dist/turns/lost-reply.d.ts.map +1 -1
- package/dist/turns/lost-reply.js +12 -0
- package/dist/turns/lost-reply.js.map +1 -1
- package/dist/turns/message-blocks.d.ts +2 -0
- package/dist/turns/message-blocks.d.ts.map +1 -1
- package/dist/turns/message-blocks.js +7 -0
- package/dist/turns/message-blocks.js.map +1 -1
- package/dist/turns/model-context.d.ts +2 -0
- package/dist/turns/model-context.d.ts.map +1 -1
- package/dist/turns/model-context.js +23 -4
- package/dist/turns/model-context.js.map +1 -1
- package/dist/turns/model-retry.d.ts +2 -1
- package/dist/turns/model-retry.d.ts.map +1 -1
- package/dist/turns/model-retry.js +5 -1
- package/dist/turns/model-retry.js.map +1 -1
- package/dist/turns/read-only.d.ts +6 -0
- package/dist/turns/read-only.d.ts.map +1 -0
- package/dist/turns/read-only.js +12 -0
- package/dist/turns/read-only.js.map +1 -0
- package/dist/turns/receipt-job.d.ts +5 -0
- package/dist/turns/receipt-job.d.ts.map +1 -0
- package/dist/turns/receipt-job.js +40 -0
- package/dist/turns/receipt-job.js.map +1 -0
- package/dist/turns/recover-workspace.d.ts +9 -0
- package/dist/turns/recover-workspace.d.ts.map +1 -0
- package/dist/turns/recover-workspace.js +79 -0
- package/dist/turns/recover-workspace.js.map +1 -0
- package/dist/turns/recovery-state.d.ts +19 -0
- package/dist/turns/recovery-state.d.ts.map +1 -0
- package/dist/turns/recovery-state.js +87 -0
- package/dist/turns/recovery-state.js.map +1 -0
- package/dist/turns/register-interruptions.d.ts.map +1 -1
- package/dist/turns/register-interruptions.js +19 -8
- package/dist/turns/register-interruptions.js.map +1 -1
- package/dist/turns/register-turns.d.ts.map +1 -1
- package/dist/turns/register-turns.js +42 -31
- package/dist/turns/register-turns.js.map +1 -1
- package/dist/turns/resolve.d.ts +4 -0
- package/dist/turns/resolve.d.ts.map +1 -1
- package/dist/turns/resolve.js +19 -17
- package/dist/turns/resolve.js.map +1 -1
- package/dist/turns/retry-turn.d.ts +4 -0
- package/dist/turns/retry-turn.d.ts.map +1 -0
- package/dist/turns/retry-turn.js +20 -0
- package/dist/turns/retry-turn.js.map +1 -0
- package/dist/turns/run-calls.d.ts +21 -4
- package/dist/turns/run-calls.d.ts.map +1 -1
- package/dist/turns/run-calls.js +157 -41
- package/dist/turns/run-calls.js.map +1 -1
- package/dist/turns/run-command.d.ts +5 -3
- package/dist/turns/run-command.d.ts.map +1 -1
- package/dist/turns/run-command.js +21 -12
- package/dist/turns/run-command.js.map +1 -1
- package/dist/turns/settle-calls.d.ts +2 -8
- package/dist/turns/settle-calls.d.ts.map +1 -1
- package/dist/turns/settle-calls.js +26 -35
- package/dist/turns/settle-calls.js.map +1 -1
- package/dist/turns/start-turn.d.ts +8 -83
- package/dist/turns/start-turn.d.ts.map +1 -1
- package/dist/turns/start-turn.js +35 -24
- package/dist/turns/start-turn.js.map +1 -1
- package/dist/turns/step-claim.d.ts +39 -0
- package/dist/turns/step-claim.d.ts.map +1 -0
- package/dist/turns/step-claim.js +72 -0
- package/dist/turns/step-claim.js.map +1 -0
- package/dist/turns/step-intents.d.ts +31 -0
- package/dist/turns/step-intents.d.ts.map +1 -0
- package/dist/turns/step-intents.js +101 -0
- package/dist/turns/step-intents.js.map +1 -0
- package/dist/turns/step-next.d.ts +17 -0
- package/dist/turns/step-next.d.ts.map +1 -0
- package/dist/turns/step-next.js +25 -0
- package/dist/turns/step-next.js.map +1 -0
- package/dist/turns/step.d.ts +1 -1
- package/dist/turns/step.d.ts.map +1 -1
- package/dist/turns/step.js +108 -88
- package/dist/turns/step.js.map +1 -1
- package/dist/turns/summary-facts.d.ts +25 -0
- package/dist/turns/summary-facts.d.ts.map +1 -0
- package/dist/turns/summary-facts.js +63 -0
- package/dist/turns/summary-facts.js.map +1 -0
- package/dist/turns/usage.d.ts +7 -0
- package/dist/turns/usage.d.ts.map +1 -0
- package/dist/turns/usage.js +18 -0
- package/dist/turns/usage.js.map +1 -0
- package/dist/ui/register-ui.js +3 -3
- package/dist/ui/register-ui.js.map +1 -1
- package/dist/web/components/approval.css +2 -0
- package/dist/web/components/approval.js +233 -0
- package/dist/web/components/call.css +1 -1
- package/dist/web/components/call.js +383 -287
- package/dist/web/components/connectors.css +1 -1
- package/dist/web/components/connectors.js +595 -592
- package/dist/web/components/conversation.css +1 -1
- package/dist/web/components/conversation.js +2902 -1593
- package/dist/web/components/mcp-sign-in.css +1 -1
- package/dist/web/components/model.css +1 -1
- package/dist/web/components/model.js +138 -134
- package/dist/web/components/question.css +1 -1
- package/dist/web/components/question.js +148 -78
- package/dist/web/components/sessions.css +1 -1
- package/docs/connectors.md +2 -2
- package/locales/ar.json +88 -12
- package/locales/en.json +88 -12
- package/package.json +6 -6
- package/dist/turns/cancel-turn.d.ts +0 -3
- package/dist/turns/cancel-turn.d.ts.map +0 -1
- package/dist/turns/cancel-turn.js +0 -31
- package/dist/turns/cancel-turn.js.map +0 -1
package/dist/turns/end-turn.js
CHANGED
|
@@ -1,67 +1,64 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { dropRun } from "../delegate/runs.js";
|
|
2
2
|
import { firePoint } from "../registry/session-points.js";
|
|
3
|
-
import { now } from "../sessions/session-lookup.js";
|
|
4
3
|
import { records, txRecords } from "../store/collections.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
import { cancelStepJob } from "./cancel-step-job.js";
|
|
5
|
+
import { childResultInTx } from "./child-result.js";
|
|
6
|
+
import { endTurnState } from "./end-turn-state.js";
|
|
7
|
+
import { beginTurn, dispatchStep } from "./start-turn.js";
|
|
8
|
+
// Ending a turn (plan 08 §8.1): the turn records its outcome and time, the session goes idle, and the `turn.ended`
|
|
9
|
+
// point fires. A subagent's end reaches its parent in the transaction that ends it (ADR 0052, 2): its answer resolves
|
|
10
|
+
// the parent's pending call, or arrives as a background message, and an interrupted child ends its parent's turn too
|
|
11
|
+
// (ADR 0009, 95). What that started, and what the ended turn still waited on, is handled here after the commit.
|
|
12
|
+
export async function endTurn(ctx, sessionId, turnId, outcome, by, notice, authority) {
|
|
13
|
+
const ended = await ctx.store.transaction(tx => endTurnState(txRecords(tx), sessionId, turnId, outcome, by, notice, authority));
|
|
14
|
+
if (ended === undefined)
|
|
15
|
+
return false;
|
|
16
|
+
await notifyEnded(ctx, ended);
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
// The helpers and worker runs a turn still waited on when it ended go with it (ADR 0052, 4).
|
|
20
|
+
async function stopDependents(ctx, ended) {
|
|
21
|
+
for (const child of ended.children)
|
|
22
|
+
await cancelTurn(ctx, child, false);
|
|
23
|
+
for (const runId of ended.runs) {
|
|
24
|
+
const run = await records(ctx.store).runs.get(runId);
|
|
25
|
+
if (run !== undefined)
|
|
26
|
+
await dropRun(ctx, run);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/** Effects for an already committed end; never used to decide whether a turn may end. */
|
|
30
|
+
export async function notifyEnded(ctx, ended) {
|
|
31
|
+
const { turnId, outcome, session, delivery } = ended;
|
|
32
|
+
await firePoint(ctx, 'kvcoder.turn.ended', { sessionId: session.id, turnId, outcome, usage: ended.usage, durationMs: ended.durationMs });
|
|
33
|
+
if (session.parentId === null && session.autoTitle && session.endedTurns === 1)
|
|
34
|
+
await ctx.execAsync('kvcoder.session.title', { sessionId: session.id });
|
|
35
|
+
await stopDependents(ctx, ended);
|
|
36
|
+
if (delivery === undefined)
|
|
37
|
+
return;
|
|
38
|
+
if ('step' in delivery)
|
|
39
|
+
await dispatchStep(ctx, delivery.step, false);
|
|
40
|
+
else if ('turn' in delivery)
|
|
41
|
+
await beginTurn(ctx, delivery.turn.sessionId, delivery.turn.turnId, true);
|
|
42
|
+
else
|
|
43
|
+
await notifyEnded(ctx, delivery.ended);
|
|
44
|
+
}
|
|
45
|
+
// Invalidate/end and capture the current owned jobs in one transaction. A late publisher loses and cancels its
|
|
46
|
+
// candidate; background policy remains unchanged. External cancellation and notifications are never in SQLite.
|
|
47
|
+
// With `only`, the turn is cancelled when it is still the session's current one, and left alone otherwise (ADR 0049, 1).
|
|
48
|
+
export async function cancelTurn(ctx, sessionId, notice, only) {
|
|
49
|
+
const ended = await ctx.store.transaction(tx => {
|
|
11
50
|
const store = txRecords(tx);
|
|
12
51
|
const session = store.sessions.get(sessionId);
|
|
13
|
-
|
|
14
|
-
if (session?.turnId !== turnId || turn === undefined || turn.outcome !== null)
|
|
15
|
-
return undefined;
|
|
16
|
-
const endedAt = now();
|
|
17
|
-
const durationMs = Math.max(Date.parse(endedAt) - Date.parse(turn.startedAt), 0);
|
|
18
|
-
store.turns.update(turnId, { endedAt, durationMs, outcome, calls: [], pending: [], results: [] });
|
|
19
|
-
for (const question of store.questions.find({ sessionId }, { limit: 1000 }))
|
|
20
|
-
store.questions.delete(question.id);
|
|
21
|
-
appendQueued(store, session, null);
|
|
22
|
-
if (notice !== undefined)
|
|
23
|
-
appendNotice(store, session, notice.code, notice.params ?? {}, turnId);
|
|
24
|
-
const updated = store.sessions.update(sessionId, { status: 'idle', turnId: null, stepJobId: null, endedTurns: session.endedTurns + 1, durationMs: session.durationMs + durationMs, updatedAt: endedAt });
|
|
25
|
-
return { session: updated, usage: turn.usage, durationMs };
|
|
52
|
+
return session?.turnId === null || session === undefined || (only !== undefined && session.turnId !== only) ? undefined : endTurnState(store, sessionId, session.turnId, 'cancelled', 'cancel', notice ? { code: 'CANCELLED' } : undefined);
|
|
26
53
|
});
|
|
27
54
|
if (ended === undefined)
|
|
28
55
|
return false;
|
|
29
|
-
await
|
|
30
|
-
|
|
31
|
-
await ctx.execAsync('kvcoder.session.title', { sessionId });
|
|
32
|
-
if (ended.session.parentId !== null && by !== 'cancel')
|
|
33
|
-
await childEnded(ctx, ended.session, outcome, by, notice);
|
|
56
|
+
await cancelStepJob(ctx, ended);
|
|
57
|
+
await notifyEnded(ctx, ended);
|
|
34
58
|
return true;
|
|
35
59
|
}
|
|
36
|
-
|
|
37
|
-
const [answer] = await records(ctx.store).messages.find({ sessionId, kind: 'assistant' }, { limit: 1, order: 'desc' });
|
|
38
|
-
return answer === undefined ? '' : textOf(answer.content['content']);
|
|
39
|
-
}
|
|
40
|
-
/** What a finished subagent returns (ADR 0009, 102). */
|
|
60
|
+
/** What a finished subagent returns, for the job list. */
|
|
41
61
|
export async function childResult(ctx, childId, outcome) {
|
|
42
|
-
|
|
43
|
-
return outcome === 'done' ? { text: truncate(answer), isError: false } : { text: truncate(`subagent ended ${outcome}\n${answer}`), isError: true };
|
|
44
|
-
}
|
|
45
|
-
async function childEnded(ctx, child, outcome, by, notice) {
|
|
46
|
-
const store = records(ctx.store);
|
|
47
|
-
const parent = child.parentId === null ? undefined : await store.sessions.get(child.parentId);
|
|
48
|
-
if (parent === undefined)
|
|
49
|
-
return;
|
|
50
|
-
const turn = parent.turnId === null ? undefined : await store.turns.get(parent.turnId);
|
|
51
|
-
const waiting = turn?.pending.find((item) => item.childSessionId === child.id);
|
|
52
|
-
if (waiting !== undefined && turn !== undefined) {
|
|
53
|
-
if (by === 'handler') {
|
|
54
|
-
await endTurn(ctx, parent.id, turn.id, outcome === 'interrupted' ? 'interrupted' : 'failed', 'handler', notice);
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
const result = await childResult(ctx, child.id, outcome);
|
|
58
|
-
await resolvePending(ctx, parent.id, waiting.toolCallId, heldText(waiting.toolCallId, result.text, result.isError), false);
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
const [entry] = await store.background.find({ sessionId: parent.id, ref: child.id }, { limit: 1 });
|
|
62
|
-
if (entry === undefined)
|
|
63
|
-
return;
|
|
64
|
-
const result = await childResult(ctx, child.id, outcome);
|
|
65
|
-
await appendBackground(ctx, parent.id, { kind: 'subagent', sessionId: child.id }, backgroundText(entry.call, child.id, result.text), by === 'step');
|
|
62
|
+
return ctx.store.transaction(tx => childResultInTx(txRecords(tx), childId, outcome));
|
|
66
63
|
}
|
|
67
64
|
//# sourceMappingURL=end-turn.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"end-turn.js","sourceRoot":"","sources":["../../src/turns/end-turn.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"end-turn.js","sourceRoot":"","sources":["../../src/turns/end-turn.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ConnectorCommand } from '../connectors/connector-command.ts';
|
|
2
|
+
/** Whether a helper may run the command: `builtin` is its built-in entry, or `undefined` for a registered command or a binary. */
|
|
3
|
+
export declare const helperAllows: (builtin: ConnectorCommand | undefined) => boolean;
|
|
4
|
+
/** What the model reads when a helper's artifact call is refused. */
|
|
5
|
+
export declare const helperRefusal = "A helper writes no artifact: return it in your answer, and the lead agent shows the person what is worth showing.";
|
|
6
|
+
//# sourceMappingURL=helper-calls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helper-calls.d.ts","sourceRoot":"","sources":["../../src/turns/helper-calls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAO3E,kIAAkI;AAClI,eAAO,MAAM,YAAY,GAAI,SAAS,gBAAgB,GAAG,SAAS,KAAG,OAAuE,CAAC;AAE7I,qEAAqE;AACrE,eAAO,MAAM,aAAa,sHAAsH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// What no helper runs (ADR 0063, 1): an artifact is for the person, and only the lead of a chat shows them one. A
|
|
2
|
+
// helper returns what it made in its answer.
|
|
3
|
+
const leadOnly = new Set(['kvcoder.artifact.write', 'kvcoder.artifact.edit']);
|
|
4
|
+
/** Whether a helper may run the command: `builtin` is its built-in entry, or `undefined` for a registered command or a binary. */
|
|
5
|
+
export const helperAllows = (builtin) => builtin === undefined || !leadOnly.has(builtin.registration);
|
|
6
|
+
/** What the model reads when a helper's artifact call is refused. */
|
|
7
|
+
export const helperRefusal = 'A helper writes no artifact: return it in your answer, and the lead agent shows the person what is worth showing.';
|
|
8
|
+
//# sourceMappingURL=helper-calls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helper-calls.js","sourceRoot":"","sources":["../../src/turns/helper-calls.ts"],"names":[],"mappings":"AAEA,kHAAkH;AAClH,6CAA6C;AAE7C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,wBAAwB,EAAE,uBAAuB,CAAC,CAAC,CAAC;AAE9E,kIAAkI;AAClI,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAqC,EAAW,EAAE,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AAE7I,qEAAqE;AACrE,MAAM,CAAC,MAAM,aAAa,GAAG,mHAAmH,CAAC"}
|
package/dist/turns/history.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export type NewMessage = {
|
|
|
10
10
|
fileNames?: readonly string[] | null;
|
|
11
11
|
model?: string | null;
|
|
12
12
|
usage?: Usage | null;
|
|
13
|
+
basis?: string | null;
|
|
13
14
|
durationMs?: number | null;
|
|
14
15
|
};
|
|
15
16
|
/** Messages are found in blocks of 500 by `seq`, since the store pages only by equality. */
|
|
@@ -17,7 +18,8 @@ export declare const blockSize = 500;
|
|
|
17
18
|
export declare const blockOf: (seq: number) => number;
|
|
18
19
|
export declare function appendMessage(tx: TxRecords, session: Stored<SessionDoc>, message: NewMessage): Stored<MessageDoc>;
|
|
19
20
|
/** A user message's content, as pi-ai has it. */
|
|
20
|
-
|
|
21
|
+
/** A user message's content; `running` names the chat's background runs when the person sent it (ADR 0068, 4). */
|
|
22
|
+
export declare function userContent(text: string, running?: readonly string[]): Record<string, JsonValue>;
|
|
21
23
|
/** Moves the session's queued messages into its history, in the order they came; returns how many moved. */
|
|
22
24
|
export declare function appendQueued(tx: TxRecords, session: Stored<SessionDoc>, turnId: string | null): number;
|
|
23
25
|
/** A notice (plan 08 §8.1): kvcoder's own display-only message, shown as `kvcoder.notices.<code>`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/turns/history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAKzD,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC;AAEF,4FAA4F;AAC5F,eAAO,MAAM,SAAS,MAAM,CAAC;AAE7B,eAAO,MAAM,OAAO,GAAI,KAAK,MAAM,KAAG,MAAqC,CAAC;AAE5E,wBAAgB,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/turns/history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAKzD,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC;AAEF,4FAA4F;AAC5F,eAAO,MAAM,SAAS,MAAM,CAAC;AAE7B,eAAO,MAAM,OAAO,GAAI,KAAK,MAAM,KAAG,MAAqC,CAAC;AAE5E,wBAAgB,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAmBjH;AAED,iDAAiD;AACjD,kHAAkH;AAClH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,SAAS,MAAM,EAAO,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAEpG;AAED,4GAA4G;AAC5G,wBAAgB,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAYtG;AAED,sGAAsG;AACtG,wBAAgB,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAM,EAAE,MAAM,GAAE,MAAM,GAAG,IAAW,GAAG,IAAI,CAEjK;AAID,oBAAoB;AACpB,eAAO,MAAM,OAAO,QAAO,KAAsB,CAAC;AAElD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAG,KAAK,CAE3D"}
|
package/dist/turns/history.js
CHANGED
|
@@ -17,22 +17,30 @@ export function appendMessage(tx, session, message) {
|
|
|
17
17
|
fileNames: message.fileNames === undefined || message.fileNames === null ? null : [...message.fileNames],
|
|
18
18
|
model: message.model ?? null,
|
|
19
19
|
usage: message.usage ?? null,
|
|
20
|
+
basis: message.basis ?? null,
|
|
20
21
|
durationMs: message.durationMs ?? null,
|
|
21
22
|
createdAt: now(),
|
|
22
23
|
});
|
|
23
24
|
}
|
|
24
25
|
/** A user message's content, as pi-ai has it. */
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
/** A user message's content; `running` names the chat's background runs when the person sent it (ADR 0068, 4). */
|
|
27
|
+
export function userContent(text, running = []) {
|
|
28
|
+
return { role: 'user', content: text, timestamp: Date.now(), ...(running.length === 0 ? {} : { running: [...running] }) };
|
|
27
29
|
}
|
|
28
30
|
/** Moves the session's queued messages into its history, in the order they came; returns how many moved. */
|
|
29
31
|
export function appendQueued(tx, session, turnId) {
|
|
30
|
-
|
|
31
|
-
for (
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
let appended = 0;
|
|
33
|
+
for (;;) {
|
|
34
|
+
// Deleted rows make the next bounded page advance inside this same transaction.
|
|
35
|
+
const queued = tx.queued.find({ sessionId: session.id }, { limit: 1000 });
|
|
36
|
+
for (const message of queued) {
|
|
37
|
+
tx.queued.delete(message.id);
|
|
38
|
+
appendMessage(tx, session, { kind: 'user', content: userContent(message.text, message.running), turnId, source: message.source, fileIds: message.fileIds, fileNames: message.fileNames });
|
|
39
|
+
}
|
|
40
|
+
appended += queued.length;
|
|
41
|
+
if (queued.length < 1000)
|
|
42
|
+
return appended;
|
|
34
43
|
}
|
|
35
|
-
return queued.length;
|
|
36
44
|
}
|
|
37
45
|
/** A notice (plan 08 §8.1): kvcoder's own display-only message, shown as `kvcoder.notices.<code>`. */
|
|
38
46
|
export function appendNotice(tx, session, code, params = {}, turnId = null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/turns/history.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/turns/history.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,13 @@ export declare function lostTokens(blocks: readonly ReplyBlock[], usage: {
|
|
|
17
17
|
}): number | undefined;
|
|
18
18
|
/** What the model is told about its lost reply. */
|
|
19
19
|
export declare function lostHint(tokens: number): string;
|
|
20
|
+
/** A reply with no call that is empty, or that the provider cut at its length limit (ADR 0054, 1). */
|
|
21
|
+
export type Incomplete = 'empty' | 'length';
|
|
22
|
+
/** The automatic retries of an incomplete reply in one turn. */
|
|
23
|
+
export declare const incompleteRetries = 1;
|
|
24
|
+
export declare function incompleteReply(blocks: readonly ReplyBlock[], stopReason: string): Incomplete | undefined;
|
|
25
|
+
/** What the model is told about its incomplete reply. */
|
|
26
|
+
export declare function incompleteHint(reason: Incomplete): string;
|
|
20
27
|
type CallBlock = {
|
|
21
28
|
type: string;
|
|
22
29
|
id?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lost-reply.d.ts","sourceRoot":"","sources":["../../src/turns/lost-reply.ts"],"names":[],"mappings":"AAMA,8DAA8D;AAC9D,eAAO,MAAM,WAAW,IAAI,CAAC;AAO7B,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAI5E,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,EAAE,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG,MAAM,CAGlI;AAED,6GAA6G;AAC7G,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,EAAE,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG,MAAM,GAAG,SAAS,CAIvI;AAED,mDAAmD;AACnD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED,KAAK,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9D,qIAAqI;AACrI,wBAAgB,aAAa,CAAC,KAAK,SAAS,SAAS,EAAE,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG;IAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CASpH"}
|
|
1
|
+
{"version":3,"file":"lost-reply.d.ts","sourceRoot":"","sources":["../../src/turns/lost-reply.ts"],"names":[],"mappings":"AAMA,8DAA8D;AAC9D,eAAO,MAAM,WAAW,IAAI,CAAC;AAO7B,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAI5E,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,EAAE,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG,MAAM,CAGlI;AAED,6GAA6G;AAC7G,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,EAAE,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG,MAAM,GAAG,SAAS,CAIvI;AAED,mDAAmD;AACnD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED,sGAAsG;AACtG,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE5C,gEAAgE;AAChE,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAGzG;AAED,yDAAyD;AACzD,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAGzD;AAED,KAAK,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9D,qIAAqI;AACrI,wBAAgB,aAAa,CAAC,KAAK,SAAS,SAAS,EAAE,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG;IAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CASpH"}
|
package/dist/turns/lost-reply.js
CHANGED
|
@@ -26,6 +26,18 @@ export function lostHint(tokens) {
|
|
|
26
26
|
const about = Math.round(tokens / 100) * 100;
|
|
27
27
|
return `Your last reply was lost on the way: the provider produced about ${String(about)} tokens, but no tool call or text reached me. Send it again now, calling the tool directly. If it was a large file, send the content in smaller pieces: one file per reply, under about 150 lines each, with \`fs write\`.`;
|
|
28
28
|
}
|
|
29
|
+
/** The automatic retries of an incomplete reply in one turn. */
|
|
30
|
+
export const incompleteRetries = 1;
|
|
31
|
+
export function incompleteReply(blocks, stopReason) {
|
|
32
|
+
if (stopReason === 'length')
|
|
33
|
+
return 'length';
|
|
34
|
+
return blocks.some((block) => block.type === 'text' && (block.text ?? '').trim() !== '') ? undefined : 'empty';
|
|
35
|
+
}
|
|
36
|
+
/** What the model is told about its incomplete reply. */
|
|
37
|
+
export function incompleteHint(reason) {
|
|
38
|
+
const what = reason === 'empty' ? 'empty: no text and no tool call reached me' : 'cut off at the length limit before it finished';
|
|
39
|
+
return `Your last reply was ${what}. Go on from where it stopped, in smaller pieces: one tool call per reply, and for a long file save it in parts with fs part and then write it with fs assemble.`;
|
|
40
|
+
}
|
|
29
41
|
/** A reply's blocks with a call that has a name but no id given one, and a call with no name dropped and counted (ADR 0009, 192). */
|
|
30
42
|
export function repairedCalls(blocks) {
|
|
31
43
|
const kept = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lost-reply.js","sourceRoot":"","sources":["../../src/turns/lost-reply.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lost-reply.js","sourceRoot":"","sources":["../../src/turns/lost-reply.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,8 @@ import type { MessageDoc } from '../schemas/records.ts';
|
|
|
4
4
|
export declare function messagesFrom(ctx: Ctx, sessionId: string, fromSeq: number, nextSeq: number): Promise<Stored<MessageDoc>[]>;
|
|
5
5
|
/** The newest `limit` messages, in order. */
|
|
6
6
|
export declare function newestMessages(ctx: Ctx, sessionId: string, limit: number, nextSeq: number): Promise<Stored<MessageDoc>[]>;
|
|
7
|
+
/** The newest `limit` messages whose `seq` is below `beforeSeq`, in order (ADR 0059, 2). */
|
|
8
|
+
export declare function messagesBefore(ctx: Ctx, sessionId: string, limit: number, beforeSeq: number): Promise<Stored<MessageDoc>[]>;
|
|
7
9
|
/** The latest summary, if the session has one. */
|
|
8
10
|
export declare function latestSummary(ctx: Ctx, sessionId: string): Promise<Stored<MessageDoc> | undefined>;
|
|
9
11
|
//# sourceMappingURL=message-blocks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-blocks.d.ts","sourceRoot":"","sources":["../../src/turns/message-blocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAUxD,gDAAgD;AAChD,wBAAsB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAI/H;AAED,6CAA6C;AAC7C,wBAAsB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAI/H;AAED,kDAAkD;AAClD,wBAAsB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC,CAExG"}
|
|
1
|
+
{"version":3,"file":"message-blocks.d.ts","sourceRoot":"","sources":["../../src/turns/message-blocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAUxD,gDAAgD;AAChD,wBAAsB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAI/H;AAED,6CAA6C;AAC7C,wBAAsB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAI/H;AAED,4FAA4F;AAC5F,wBAAsB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAIjI;AAED,kDAAkD;AAClD,wBAAsB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC,CAExG"}
|
|
@@ -18,6 +18,13 @@ export async function newestMessages(ctx, sessionId, limit, nextSeq) {
|
|
|
18
18
|
found.unshift(...(await block(ctx, sessionId, index)));
|
|
19
19
|
return found.slice(Math.max(found.length - limit, 0));
|
|
20
20
|
}
|
|
21
|
+
/** The newest `limit` messages whose `seq` is below `beforeSeq`, in order (ADR 0059, 2). */
|
|
22
|
+
export async function messagesBefore(ctx, sessionId, limit, beforeSeq) {
|
|
23
|
+
const found = [];
|
|
24
|
+
for (let index = blockOf(Math.max(beforeSeq - 1, 0)); index >= 0 && found.length < limit; index -= 1)
|
|
25
|
+
found.unshift(...(await block(ctx, sessionId, index)).filter((message) => message.seq < beforeSeq));
|
|
26
|
+
return found.slice(Math.max(found.length - limit, 0));
|
|
27
|
+
}
|
|
21
28
|
/** The latest summary, if the session has one. */
|
|
22
29
|
export async function latestSummary(ctx, sessionId) {
|
|
23
30
|
return (await records(ctx.store).messages.find({ sessionId, kind: 'summary' }, { limit: 1, order: 'desc' }))[0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-blocks.js","sourceRoot":"","sources":["../../src/turns/message-blocks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,4DAA4D;AAE5D,KAAK,UAAU,KAAK,CAAC,GAAQ,EAAE,SAAiB,EAAE,KAAa;IAC7D,OAAO,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AAChJ,CAAC;AAED,gDAAgD;AAChD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAQ,EAAE,SAAiB,EAAE,OAAe,EAAE,OAAe;IAC9F,MAAM,KAAK,GAAyB,EAAE,CAAC;IACvC,KAAK,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,IAAI,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IACpN,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6CAA6C;AAC7C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAQ,EAAE,SAAiB,EAAE,KAAa,EAAE,OAAe;IAC9F,MAAM,KAAK,GAAyB,EAAE,CAAC;IACvC,KAAK,IAAI,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC;QAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3J,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,kDAAkD;AAClD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAQ,EAAE,SAAiB;IAC7D,OAAO,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClH,CAAC"}
|
|
1
|
+
{"version":3,"file":"message-blocks.js","sourceRoot":"","sources":["../../src/turns/message-blocks.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,8 @@ export type History = {
|
|
|
8
8
|
export declare function sentHistory(ctx: Ctx, sessionId: string, nextSeq: number): Promise<History>;
|
|
9
9
|
/** A message's text: a string, or its text blocks joined. */
|
|
10
10
|
export declare function textOf(content: Json | undefined): string;
|
|
11
|
+
/** A stored summary as it is sent: the model's text, then what kvman added when it stored it (ADR 0066, 2). */
|
|
12
|
+
export declare function summaryText(summary: Pick<MessageDoc, 'content'> | undefined): string;
|
|
11
13
|
/** The messages a step sends, checked as kvai takes them. */
|
|
12
14
|
export declare function modelMessages(ctx: Ctx, history: History): Promise<({
|
|
13
15
|
role: "user";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-context.d.ts","sourceRoot":"","sources":["../../src/turns/model-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,GAAG,EAAE,KAAK,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAE5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAUxD,MAAM,MAAM,OAAO,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,CAAA;CAAE,CAAC;AAIlG,2DAA2D;AAC3D,wBAAsB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOhG;AAED,6DAA6D;AAC7D,wBAAgB,MAAM,CAAC,OAAO,EAAE,IAAI,GAAG,SAAS,GAAG,MAAM,CAMxD;
|
|
1
|
+
{"version":3,"file":"model-context.d.ts","sourceRoot":"","sources":["../../src/turns/model-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,GAAG,EAAE,KAAK,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAE5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAUxD,MAAM,MAAM,OAAO,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,CAAA;CAAE,CAAC;AAIlG,2DAA2D;AAC3D,wBAAsB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOhG;AAED,6DAA6D;AAC7D,wBAAgB,MAAM,CAAC,OAAO,EAAE,IAAI,GAAG,SAAS,GAAG,MAAM,CAMxD;AA0CD,+GAA+G;AAC/G,wBAAgB,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,SAAS,GAAG,MAAM,CAIpF;AAED,6DAA6D;AAC7D,wBAAsB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAI7D"}
|
|
@@ -36,23 +36,42 @@ async function imageBlock(ctx, fileId, name) {
|
|
|
36
36
|
throw error;
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
+
const isImage = (block) => typeof block === 'object' && block !== null && !Array.isArray(block) && block['type'] === 'image';
|
|
40
|
+
// What was running in the background when the person wrote, as their message stored it (ADR 0068, 4).
|
|
41
|
+
function runningNote(running) {
|
|
42
|
+
const runs = Array.isArray(running) ? running.filter((run) => typeof run === 'string') : [];
|
|
43
|
+
return runs.length === 0 ? '' : `\n\n[kvman: still running in the background: ${runs.join('; ')}. Use the background connector to wait for, read, or stop one.]`;
|
|
44
|
+
}
|
|
39
45
|
// The person's own message starts with its date (ADR 0032, 5); one from a job, a subagent, or an extension doesn't.
|
|
40
46
|
function sentText(message) {
|
|
41
47
|
const text = textOf(message.content['content']);
|
|
42
48
|
if (message.source?.kind !== 'user')
|
|
43
49
|
return text;
|
|
44
|
-
return `${messageStamp(message.createdAt, -new Date(message.createdAt).getTimezoneOffset())}\n${text}`;
|
|
50
|
+
return `${messageStamp(message.createdAt, -new Date(message.createdAt).getTimezoneOffset())}\n${text}${runningNote(message.content['running'])}`;
|
|
51
|
+
}
|
|
52
|
+
// The images a message shows, named in its text (ADR 0073, 1 and 2): they are in no folder the model could look in.
|
|
53
|
+
function imagesNote(names) {
|
|
54
|
+
return names.length === 0 ? '' : `\n\nAttached images, shown in this message and not saved as files in the workspace:\n${names.map((name) => `- ${name}`).join('\n')}`;
|
|
45
55
|
}
|
|
46
56
|
async function userMessage(ctx, message) {
|
|
47
57
|
if (message.fileIds === null || message.fileIds.length === 0)
|
|
48
58
|
return { ...message.content, content: sentText(message) };
|
|
49
|
-
const
|
|
50
|
-
|
|
59
|
+
const names = message.fileIds.map((fileId, index) => message.fileNames?.[index] ?? fileId);
|
|
60
|
+
const images = await Promise.all(message.fileIds.map((fileId, index) => imageBlock(ctx, fileId, names[index] ?? fileId)));
|
|
61
|
+
const shown = names.filter((_name, index) => isImage(images[index]));
|
|
62
|
+
return { ...message.content, content: [{ type: 'text', text: `${sentText(message)}${imagesNote(shown)}` }, ...images] };
|
|
51
63
|
}
|
|
52
64
|
const summaryLead = 'A summary of the earlier conversation:';
|
|
65
|
+
/** A stored summary as it is sent: the model's text, then what kvman added when it stored it (ADR 0066, 2). */
|
|
66
|
+
export function summaryText(summary) {
|
|
67
|
+
if (summary === undefined)
|
|
68
|
+
return '';
|
|
69
|
+
const facts = summary.content['facts'];
|
|
70
|
+
return typeof facts === 'string' ? `${String(summary.content['text'] ?? '')}\n\n${facts}` : String(summary.content['text'] ?? '');
|
|
71
|
+
}
|
|
53
72
|
/** The messages a step sends, checked as kvai takes them. */
|
|
54
73
|
export async function modelMessages(ctx, history) {
|
|
55
|
-
const lead = history.summary === undefined ? [] : [{ role: 'user', content: `${summaryLead}\n${
|
|
74
|
+
const lead = history.summary === undefined ? [] : [{ role: 'user', content: `${summaryLead}\n${summaryText(history.summary)}`, timestamp: Date.parse(history.summary.createdAt) }];
|
|
56
75
|
const rest = await Promise.all(history.messages.map((message) => (message.kind === 'user' ? userMessage(ctx, message) : Promise.resolve(message.content))));
|
|
57
76
|
return messageSchema.array().parse([...lead, ...rest]);
|
|
58
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-context.js","sourceRoot":"","sources":["../../src/turns/model-context.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"model-context.js","sourceRoot":"","sources":["../../src/turns/model-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { type Ctx, type InputOf, type OutputOf } from '@kvman/sdk';
|
|
2
|
-
|
|
2
|
+
import { type StepLease } from './step-claim.ts';
|
|
3
|
+
export declare function completeWithRetries(ctx: Ctx, input: InputOf<'kvai.complete'>, lease: StepLease): Promise<OutputOf<'kvai.complete'>>;
|
|
3
4
|
//# sourceMappingURL=model-retry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-retry.d.ts","sourceRoot":"","sources":["../../src/turns/model-retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,GAAG,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"model-retry.d.ts","sourceRoot":"","sources":["../../src/turns/model-retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,GAAG,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAIjF,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAS9D,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAczI"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { ProblemError } from '@kvman/sdk';
|
|
2
2
|
import { delay } from "../delay.js";
|
|
3
|
+
import { invalid } from "../problems.js";
|
|
4
|
+
import { currentStep } from "./step-claim.js";
|
|
3
5
|
// A step's model call, tried again when it fails for a temporary reason (plan 08 §8.2, ADR 0009, 154, 155, and 203):
|
|
4
6
|
// four tries in all, after 1 s, 4 s, and then 15 s. Any other failure, and a stop, end it at once.
|
|
5
7
|
const waitsMs = [1_000, 4_000, 15_000];
|
|
6
8
|
const transient = (error) => error.problem.code === 'kvai/RATE_LIMITED' || (error.problem.code === 'kvai/PROVIDER_ERROR' && error.problem.params?.['transient'] === true);
|
|
7
|
-
export async function completeWithRetries(ctx, input) {
|
|
9
|
+
export async function completeWithRetries(ctx, input, lease) {
|
|
8
10
|
for (let attempt = 1;; attempt += 1) {
|
|
11
|
+
if (await currentStep(ctx, lease) === undefined)
|
|
12
|
+
throw invalid('The originating step is no longer current.');
|
|
9
13
|
try {
|
|
10
14
|
return await ctx.exec('kvai.complete', input);
|
|
11
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-retry.js","sourceRoot":"","sources":["../../src/turns/model-retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAyC,MAAM,YAAY,CAAC;AAEjF,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"model-retry.js","sourceRoot":"","sources":["../../src/turns/model-retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAyC,MAAM,YAAY,CAAC;AAEjF,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAkB,MAAM,iBAAiB,CAAC;AAE9D,qHAAqH;AACrH,mGAAmG;AAEnG,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAU,CAAC;AAEhD,MAAM,SAAS,GAAG,CAAC,KAAmB,EAAW,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,mBAAmB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,qBAAqB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,CAAC;AAEjM,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAAQ,EAAE,KAA+B,EAAE,KAAgB;IACnG,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,MAAM,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,SAAS;YAAE,MAAM,OAAO,CAAC,4CAA4C,CAAC,CAAC;QAC7G,IAAI,CAAC;YACH,OAAO,MAAM,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,CAAC,KAAK,YAAY,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO;gBAAE,MAAM,KAAK,CAAC;YACvH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,2DAA2D,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YACjH,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC;YAClF,MAAM,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAClC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ConnectorCommand } from '../connectors/connector-command.ts';
|
|
2
|
+
/** Whether a read-only helper may run the command: `builtin` is its built-in entry, or `undefined` for a registered command or a binary. */
|
|
3
|
+
export declare function readOnlyAllows(command: string, builtin: ConnectorCommand | undefined): boolean;
|
|
4
|
+
/** What the model reads when a read-only helper's call is refused. */
|
|
5
|
+
export declare const readOnlyRefusal: (connector: string, command: string) => string;
|
|
6
|
+
//# sourceMappingURL=read-only.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-only.d.ts","sourceRoot":"","sources":["../../src/turns/read-only.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAO3E,4IAA4I;AAC5I,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,SAAS,GAAG,OAAO,CAG9F;AAED,sEAAsE;AACtE,eAAO,MAAM,eAAe,GAAI,WAAW,MAAM,EAAE,SAAS,MAAM,KAAG,MAAqI,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// What a read-only worker's helper may run (ADR 0056, 3): reads and help; it reports in its answer (ADR 0063).
|
|
2
|
+
// Anything that could change something is refused, and so is every command kvcoder doesn't know the effect of.
|
|
3
|
+
const changing = new Set(['kvcoder.fs.part', 'kvcoder.background.stop', 'kvcoder.delegate.check']);
|
|
4
|
+
/** Whether a read-only helper may run the command: `builtin` is its built-in entry, or `undefined` for a registered command or a binary. */
|
|
5
|
+
export function readOnlyAllows(command, builtin) {
|
|
6
|
+
if (command === 'help')
|
|
7
|
+
return true;
|
|
8
|
+
return builtin !== undefined && !builtin.asks && !changing.has(builtin.registration);
|
|
9
|
+
}
|
|
10
|
+
/** What the model reads when a read-only helper's call is refused. */
|
|
11
|
+
export const readOnlyRefusal = (connector, command) => `This helper is read-only: ${connector} ${command} could change something, so it isn't run. Report what you found instead.`;
|
|
12
|
+
//# sourceMappingURL=read-only.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-only.js","sourceRoot":"","sources":["../../src/turns/read-only.ts"],"names":[],"mappings":"AAEA,+GAA+G;AAC/G,+GAA+G;AAE/G,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,iBAAiB,EAAE,yBAAyB,EAAE,wBAAwB,CAAC,CAAC,CAAC;AAEnG,4IAA4I;AAC5I,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,OAAqC;IACnF,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACvF,CAAC;AAED,sEAAsE;AACtE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,SAAiB,EAAE,OAAe,EAAU,EAAE,CAAC,6BAA6B,SAAS,IAAI,OAAO,0EAA0E,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type Ctx } from '@kvman/sdk';
|
|
2
|
+
import type { AnswerReceiptDoc } from '../schemas/records.ts';
|
|
3
|
+
/** Acknowledgment only: never recover, enqueue, cancel, notify or attach to a newer turn. */
|
|
4
|
+
export declare function receiptJob(ctx: Ctx, receipt: AnswerReceiptDoc): Promise<string | null>;
|
|
5
|
+
//# sourceMappingURL=receipt-job.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipt-job.d.ts","sourceRoot":"","sources":["../../src/turns/receipt-job.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,GAAG,EAAY,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAU9D,6FAA6F;AAC7F,wBAAsB,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuB5F"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ProblemError } from '@kvman/sdk';
|
|
2
|
+
import { txRecords } from "../store/collections.js";
|
|
3
|
+
import { recoveryJobMatches } from "./recover-workspace.js";
|
|
4
|
+
import { boundRecoveryIntent, recoveryState } from "./recovery-state.js";
|
|
5
|
+
function receiptState(store, receipt) {
|
|
6
|
+
const state = recoveryState(store, receipt.sessionId);
|
|
7
|
+
return state?.turn.id === receipt.turnId && state.intent?.legacyJobId === null && boundRecoveryIntent(state) ? state : undefined;
|
|
8
|
+
}
|
|
9
|
+
/** Acknowledgment only: never recover, enqueue, cancel, notify or attach to a newer turn. */
|
|
10
|
+
export async function receiptJob(ctx, receipt) {
|
|
11
|
+
ctx.job.signal.throwIfAborted();
|
|
12
|
+
const state = await ctx.store.transaction(tx => {
|
|
13
|
+
ctx.job.signal.throwIfAborted();
|
|
14
|
+
return receiptState(txRecords(tx), receipt);
|
|
15
|
+
});
|
|
16
|
+
const jobId = state?.session.stepJobId;
|
|
17
|
+
if (state === undefined || jobId === null || jobId === undefined)
|
|
18
|
+
return null;
|
|
19
|
+
let job;
|
|
20
|
+
try {
|
|
21
|
+
job = await ctx.exec('kernel.jobs.get', { id: jobId });
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
ctx.job.signal.throwIfAborted();
|
|
25
|
+
if (error instanceof ProblemError && error.problem.code === 'NOT_FOUND')
|
|
26
|
+
return null;
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
ctx.job.signal.throwIfAborted();
|
|
30
|
+
if (!recoveryJobMatches(state, job, ctx.job.workspace.id))
|
|
31
|
+
return null;
|
|
32
|
+
return ctx.store.transaction(tx => {
|
|
33
|
+
ctx.job.signal.throwIfAborted();
|
|
34
|
+
const current = receiptState(txRecords(tx), receipt);
|
|
35
|
+
if (current === undefined || current.session.stepIntentId !== state.session.stepIntentId || current.session.stepGeneration !== state.session.stepGeneration || current.session.stepJobId !== jobId)
|
|
36
|
+
return null;
|
|
37
|
+
return recoveryJobMatches(current, job, ctx.job.workspace.id) ? jobId : null;
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=receipt-job.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipt-job.js","sourceRoot":"","sources":["../../src/turns/receipt-job.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAsB,MAAM,YAAY,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAkB,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzE,SAAS,YAAY,CAAC,KAAgB,EAAE,OAAyB;IAC/D,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACtD,OAAO,KAAK,EAAE,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACnI,CAAC;AAED,6FAA6F;AAC7F,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAQ,EAAE,OAAyB;IAClE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE;QAC7C,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAChC,OAAO,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC;IACvC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC9E,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QAAC,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAAC,CAAC;IAC/D,OAAO,KAAK,EAAE,CAAC;QACb,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAChC,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,IAAI,CAAC;QACrF,MAAM,KAAK,CAAC;IACd,CAAC;IACD,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;IAChC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IACvE,OAAO,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE;QAChC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QACrD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,YAAY,KAAK,KAAK,CAAC,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,cAAc,KAAK,KAAK,CAAC,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;QAChN,OAAO,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/E,CAAC,CAAC,CAAC;AACL,CAAC"}
|