@kvman/kvcoder 0.1.6 → 0.1.8
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 +23 -17
- 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 +430 -304
- 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 +2978 -1637
- 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 +3 -3
- package/locales/ar.json +95 -13
- package/locales/en.json +95 -13
- 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/delegate/runs.d.ts
CHANGED
|
@@ -1,20 +1,30 @@
|
|
|
1
1
|
import type { Ctx, Stored } from '@kvman/sdk';
|
|
2
|
-
import type { HeldResult, RunDoc } from '../schemas/records.ts';
|
|
2
|
+
import type { HeldResult, RunDoc, RunStaging } from '../schemas/records.ts';
|
|
3
|
+
import { type TxRecords } from '../store/collections.ts';
|
|
4
|
+
import { type CreationGuard } from './permission.ts';
|
|
3
5
|
import type { ProgramWorker } from './workers.ts';
|
|
4
6
|
export type RunEnd = {
|
|
5
7
|
status: Exclude<RunDoc['status'], 'running'>;
|
|
6
8
|
exitCode: number | null;
|
|
7
9
|
text: string;
|
|
8
10
|
isError: boolean;
|
|
11
|
+
staging?: RunStaging;
|
|
9
12
|
};
|
|
10
13
|
/** Records a run of `worker` on `task`; `toolCallId` is the call that waits on it, or `null` for a background run. */
|
|
14
|
+
export declare function recordRun(store: TxRecords, sessionId: string, worker: ProgramWorker, call: {
|
|
15
|
+
description: string;
|
|
16
|
+
task: string;
|
|
17
|
+
}, toolCallId: string | null): Stored<RunDoc>;
|
|
11
18
|
export declare function createRun(ctx: Ctx, sessionId: string, worker: ProgramWorker, call: {
|
|
12
19
|
description: string;
|
|
13
20
|
task: string;
|
|
14
|
-
}, toolCallId: string | null): Promise<Stored<RunDoc>>;
|
|
21
|
+
}, toolCallId: string | null, guard: CreationGuard): Promise<Stored<RunDoc>>;
|
|
15
22
|
/** Queues the job that runs a recorded run. */
|
|
16
|
-
export declare function launchRun(ctx: Ctx, runId: string): Promise<void>;
|
|
17
|
-
/**
|
|
23
|
+
export declare function launchRun(ctx: Ctx, runId: string, guard: CreationGuard): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Ends a run and, in the same transaction (ADR 0052, 2), gives its result to the call that waits on it, or to the chat
|
|
26
|
+
* as a background message, which may start a turn.
|
|
27
|
+
*/
|
|
18
28
|
export declare function finishRun(ctx: Ctx, runId: string, end: RunEnd, startTurn: boolean): Promise<boolean>;
|
|
19
29
|
/** Stops a run for the agent or the person: its result is that it was stopped (ADR 0021, 34). `false` for one that had ended. */
|
|
20
30
|
export declare function stopRun(ctx: Ctx, run: Stored<RunDoc>): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/delegate/runs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/delegate/runs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAE5E,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAMvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAMlD,MAAM,MAAM,MAAM,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,UAAU,CAAA;CAAE,CAAC;AAErJ,sHAAsH;AACtH,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAG5K;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAMzM;AAED,+CAA+C;AAC/C,wBAAsB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ5F;AAiBD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAc1G;AAOD,iIAAiI;AACjI,wBAAsB,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAI7E;AAED,+EAA+E;AAC/E,wBAAsB,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1E;AAED,gGAAgG;AAChG,wBAAsB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMzE;AAED,kDAAkD;AAClD,eAAO,MAAM,UAAU,GAAI,YAAY,MAAM,EAAE,MAAM,MAAM,KAAG,UAA8C,CAAC"}
|
package/dist/delegate/runs.js
CHANGED
|
@@ -1,41 +1,71 @@
|
|
|
1
1
|
import { now } from "../sessions/session-lookup.js";
|
|
2
2
|
import { records, txRecords } from "../store/collections.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { runAuthorityInTx } from "./permission.js";
|
|
4
|
+
import { invalid } from "../problems.js";
|
|
5
|
+
import { appendBackgroundInTx, backgroundText } from "../turns/background.js";
|
|
6
|
+
import { heldText, resolvePendingInTx } from "../turns/resolve.js";
|
|
7
|
+
import { beginTurn, dispatchStep } from "../turns/start-turn.js";
|
|
5
8
|
import { commandLine } from "./programs.js";
|
|
6
9
|
/** Records a run of `worker` on `task`; `toolCallId` is the call that waits on it, or `null` for a background run. */
|
|
7
|
-
export
|
|
10
|
+
export function recordRun(store, sessionId, worker, call, toolCallId) {
|
|
8
11
|
const line = commandLine(worker, call.task);
|
|
9
|
-
return
|
|
12
|
+
return store.runs.insert({ sessionId, toolCallId, worker: worker.name, kind: worker.kind, call: call.description, command: line.command, args: line.args, timeoutMs: worker.timeoutMs, jobId: null, status: 'running', startedAt: now(), endedAt: null, exitCode: null, output: null, staging: null });
|
|
13
|
+
}
|
|
14
|
+
export async function createRun(ctx, sessionId, worker, call, toolCallId, guard) {
|
|
15
|
+
return ctx.store.transaction(tx => {
|
|
16
|
+
const store = txRecords(tx);
|
|
17
|
+
guard(store);
|
|
18
|
+
return recordRun(store, sessionId, worker, call, toolCallId);
|
|
19
|
+
});
|
|
10
20
|
}
|
|
11
21
|
/** Queues the job that runs a recorded run. */
|
|
12
|
-
export async function launchRun(ctx, runId) {
|
|
22
|
+
export async function launchRun(ctx, runId, guard) {
|
|
23
|
+
await ctx.store.transaction(tx => {
|
|
24
|
+
const store = txRecords(tx), parent = guard(store), run = store.runs.get(runId);
|
|
25
|
+
if (run?.status !== 'running' || run.sessionId !== parent.id)
|
|
26
|
+
throw invalid('The worker run is no longer current.');
|
|
27
|
+
});
|
|
28
|
+
ctx.job.signal.throwIfAborted();
|
|
13
29
|
const jobId = await ctx.execAsync('kvcoder.delegate.worker.run', { runId });
|
|
14
30
|
await records(ctx.store).runs.update(runId, { jobId });
|
|
15
31
|
}
|
|
16
|
-
// Records how a run ended, once: `
|
|
32
|
+
// Records how a run ended, once: `false` when something else ended it first.
|
|
17
33
|
async function markEnded(ctx, runId, end) {
|
|
18
34
|
return ctx.store.transaction((tx) => {
|
|
19
|
-
const
|
|
20
|
-
const run = runs.get(runId);
|
|
35
|
+
const store = txRecords(tx), run = store.runs.get(runId);
|
|
21
36
|
if (run === undefined || run.status !== 'running')
|
|
22
|
-
return
|
|
23
|
-
|
|
37
|
+
return false;
|
|
38
|
+
store.runs.update(runId, { status: end.status, endedAt: now(), exitCode: end.exitCode, output: end.text });
|
|
39
|
+
return true;
|
|
24
40
|
});
|
|
25
41
|
}
|
|
26
42
|
function heldRun(run, toolCallId, end) {
|
|
27
43
|
const durationMs = Math.max(Date.now() - Date.parse(run.startedAt), 0);
|
|
28
|
-
return { toolCallId, text: end.text, isError: end.isError, run: null, details: { description: run.call, connector: 'delegate', command: 'run', output: end.text, durationMs } };
|
|
44
|
+
return { toolCallId, text: end.text, isError: end.isError, run: null, details: { description: run.call, connector: 'delegate', command: 'run', output: end.text, durationMs, ...(end.staging === undefined ? {} : { staging: { runId: run.id } }) } };
|
|
29
45
|
}
|
|
30
|
-
/**
|
|
46
|
+
/**
|
|
47
|
+
* Ends a run and, in the same transaction (ADR 0052, 2), gives its result to the call that waits on it, or to the chat
|
|
48
|
+
* as a background message, which may start a turn.
|
|
49
|
+
*/
|
|
31
50
|
export async function finishRun(ctx, runId, end, startTurn) {
|
|
32
|
-
const
|
|
33
|
-
|
|
51
|
+
const next = await ctx.store.transaction((tx) => {
|
|
52
|
+
const store = txRecords(tx), found = store.runs.get(runId);
|
|
53
|
+
if (found === undefined || found.status !== 'running')
|
|
54
|
+
return undefined;
|
|
55
|
+
const authority = runAuthorityInTx(store, found);
|
|
56
|
+
const run = store.runs.update(runId, { status: end.status, endedAt: now(), exitCode: end.exitCode, output: end.text, ...(end.staging === undefined ? {} : { staging: end.staging }) });
|
|
57
|
+
if (run.toolCallId === null)
|
|
58
|
+
return { turnId: appendBackgroundInTx(store, run.sessionId, { kind: 'job', jobId: run.id }, backgroundText(run.call, run.id, end.text), startTurn), sessionId: run.sessionId };
|
|
59
|
+
return { step: authority === undefined ? null : resolvePendingInTx(store, run.sessionId, authority.pending.toolCallId, heldRun(run, run.toolCallId, end)) };
|
|
60
|
+
});
|
|
61
|
+
if (next === undefined)
|
|
34
62
|
return false;
|
|
35
|
-
if (
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
63
|
+
if ('step' in next) {
|
|
64
|
+
if (next.step !== null)
|
|
65
|
+
await dispatchStep(ctx, next.step, false);
|
|
66
|
+
}
|
|
67
|
+
else if (next.turnId !== undefined)
|
|
68
|
+
await beginTurn(ctx, next.sessionId, next.turnId, true);
|
|
39
69
|
return true;
|
|
40
70
|
}
|
|
41
71
|
async function cancelJobOf(ctx, run) {
|
|
@@ -52,7 +82,7 @@ export async function stopRun(ctx, run) {
|
|
|
52
82
|
}
|
|
53
83
|
/** Stops a run whose turn or chat is going away: nothing is told to anyone. */
|
|
54
84
|
export async function dropRun(ctx, run) {
|
|
55
|
-
if (
|
|
85
|
+
if (await markEnded(ctx, run.id, { status: 'cancelled', exitCode: null, text: `${run.worker} was stopped`, isError: true }))
|
|
56
86
|
await cancelJobOf(ctx, run);
|
|
57
87
|
}
|
|
58
88
|
/** Stops every run a session still has going, and forgets all of them (the chat is deleted). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runs.js","sourceRoot":"","sources":["../../src/delegate/runs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,+BAA+B,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"runs.js","sourceRoot":"","sources":["../../src/delegate/runs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type Ctx } from '@kvman/sdk';
|
|
2
|
+
import type { RunStaging } from '../schemas/records.ts';
|
|
3
|
+
import { type StagingMark } from './git-staging.ts';
|
|
4
|
+
/** What a run changed, from the mark made before it; `undefined` when there was no mark or nothing changed. */
|
|
5
|
+
export declare function stagingChange(folder: string, before: StagingMark | undefined, signal: AbortSignal): Promise<RunStaging | undefined>;
|
|
6
|
+
/** The lines a changed run's result ends with, for the model. */
|
|
7
|
+
export declare function stagingLines(change: RunStaging, before: StagingMark): string;
|
|
8
|
+
export declare function registerStagingRestore(ctx: Ctx): void;
|
|
9
|
+
//# sourceMappingURL=staging-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staging-guard.d.ts","sourceRoot":"","sources":["../../src/delegate/staging-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,KAAK,GAAG,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,EAAmD,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAMrG,+GAA+G;AAC/G,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAMzI;AAID,iEAAiE;AACjE,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CAI5E;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAwBrD"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from '@kvman/sdk';
|
|
2
|
+
import { invalid } from "../problems.js";
|
|
3
|
+
import { findSession, userOnly } from "../sessions/session-lookup.js";
|
|
4
|
+
import { records } from "../store/collections.js";
|
|
5
|
+
import { restoreStaging, stagedPathsBetween, stagingMark } from "./git-staging.js";
|
|
6
|
+
// The guard on the Git staging area around a program worker's run (plan 08 §8.5; ADR 0060, 4): what the run changed
|
|
7
|
+
// is kept on its record and told to the model, and the person may put what was staged back while nothing has been
|
|
8
|
+
// staged or committed since.
|
|
9
|
+
/** What a run changed, from the mark made before it; `undefined` when there was no mark or nothing changed. */
|
|
10
|
+
export async function stagingChange(folder, before, signal) {
|
|
11
|
+
if (before === undefined)
|
|
12
|
+
return undefined;
|
|
13
|
+
const after = await stagingMark(folder, signal);
|
|
14
|
+
if (after === undefined || (after.tree === before.tree && after.head === before.head))
|
|
15
|
+
return undefined;
|
|
16
|
+
const paths = after.tree === before.tree ? 0 : await stagedPathsBetween(folder, before.tree, after.tree, signal);
|
|
17
|
+
return { tree: before.tree, after: after.tree, head: after.head, headMoved: after.head !== before.head, paths, restored: false };
|
|
18
|
+
}
|
|
19
|
+
const shown = (commit) => (commit === null ? 'no commit' : commit.slice(0, 12));
|
|
20
|
+
/** The lines a changed run's result ends with, for the model. */
|
|
21
|
+
export function stagingLines(change, before) {
|
|
22
|
+
const staged = change.tree === change.after ? [] : [`kvman: this run changed what is staged in Git (${change.paths} paths differ from before it ran).`];
|
|
23
|
+
const moved = change.headMoved ? [`kvman: this run moved HEAD from ${shown(before.head)} to ${shown(change.head)}.`] : [];
|
|
24
|
+
return [...staged, ...moved].join('\n');
|
|
25
|
+
}
|
|
26
|
+
export function registerStagingRestore(ctx) {
|
|
27
|
+
ctx.registerCommand('kvcoder.delegate.staging.restore', {
|
|
28
|
+
description: "Puts back what was staged in Git before a program worker's run; it changes no file and no commit.",
|
|
29
|
+
input: z.strictObject({ sessionId: z.string(), runId: z.string() }),
|
|
30
|
+
output: z.object({}),
|
|
31
|
+
public: true,
|
|
32
|
+
retries: 0,
|
|
33
|
+
handle: async ({ sessionId, runId }) => {
|
|
34
|
+
userOnly(ctx, 'kvcoder.delegate.staging.restore');
|
|
35
|
+
await findSession(ctx, sessionId);
|
|
36
|
+
const store = records(ctx.store);
|
|
37
|
+
const run = await store.runs.get(runId);
|
|
38
|
+
if (run === undefined || run.sessionId !== sessionId)
|
|
39
|
+
throw ctx.problem('kvcoder/JOB_NOT_FOUND', { sessionId, id: runId });
|
|
40
|
+
const kept = run.staging;
|
|
41
|
+
if (kept === null || kept.restored)
|
|
42
|
+
throw invalid('This run has no staging change to restore.');
|
|
43
|
+
if (kept.headMoved)
|
|
44
|
+
throw invalid('This run moved HEAD, so its staging change cannot be restored here.');
|
|
45
|
+
const folder = ctx.job.workspace.path;
|
|
46
|
+
const current = await stagingMark(folder, ctx.job.signal);
|
|
47
|
+
if (current === undefined || current.tree !== kept.after || current.head !== kept.head)
|
|
48
|
+
throw invalid('The staging area or HEAD has changed since the run.');
|
|
49
|
+
await restoreStaging(folder, kept.tree, ctx.job.signal);
|
|
50
|
+
await store.runs.update(runId, { staging: { ...kept, restored: true } });
|
|
51
|
+
return {};
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=staging-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staging-guard.js","sourceRoot":"","sources":["../../src/delegate/staging-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type Ctx, type Stored } from '@kvman/sdk';
|
|
2
|
+
import type { RunDoc } from '../schemas/records.ts';
|
|
3
|
+
import { type TxRecords } from '../store/collections.ts';
|
|
4
|
+
import type { CreationGuard } from './permission.ts';
|
|
5
|
+
/** Local proof for this newly created attempt only, not a durable/background-origin launch permit. */
|
|
6
|
+
export declare function startBackgroundRun(ctx: Ctx, run: Stored<RunDoc>, prepare: () => Promise<CreationGuard>, current: (store: TxRecords) => boolean): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=start-background.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-background.d.ts","sourceRoot":"","sources":["../../src/delegate/start-background.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,GAAG,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAEjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD,sGAAsG;AACtG,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBpK"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
2
|
+
import { ProblemError } from '@kvman/sdk';
|
|
3
|
+
import { errorOutput } from "../connector-call.js";
|
|
4
|
+
import { now } from "../sessions/session-lookup.js";
|
|
5
|
+
import { txRecords } from "../store/collections.js";
|
|
6
|
+
import { launchRun } from "./runs.js";
|
|
7
|
+
/** Local proof for this newly created attempt only, not a durable/background-origin launch permit. */
|
|
8
|
+
export async function startBackgroundRun(ctx, run, prepare, current) {
|
|
9
|
+
let dispatchEligible = false;
|
|
10
|
+
try {
|
|
11
|
+
const guard = await prepare();
|
|
12
|
+
await launchRun(ctx, run.id, store => {
|
|
13
|
+
const parent = guard(store);
|
|
14
|
+
dispatchEligible = true;
|
|
15
|
+
return parent;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
if (!(error instanceof ProblemError) || ctx.job.signal.aborted)
|
|
20
|
+
throw error;
|
|
21
|
+
// After guard success, an enqueue error could have unknown effects: never infer "unstarted" from jobId:null.
|
|
22
|
+
if (!dispatchEligible)
|
|
23
|
+
await ctx.store.transaction(tx => {
|
|
24
|
+
const store = txRecords(tx);
|
|
25
|
+
if (current(store) && run.jobId === null && isDeepStrictEqual(store.runs.get(run.id), run)) {
|
|
26
|
+
store.runs.update(run.id, { status: 'failed', endedAt: now(), output: errorOutput(error.problem).output });
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=start-background.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-background.js","sourceRoot":"","sources":["../../src/delegate/start-background.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAyB,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,GAAG,EAAE,MAAM,+BAA+B,CAAC;AACpD,OAAO,EAAE,SAAS,EAAkB,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,sGAAsG;AACtG,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAQ,EAAE,GAAmB,EAAE,OAAqC,EAAE,OAAsC;IACnJ,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,OAAO,EAAE,CAAC;QAC9B,MAAM,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE;YACnC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5B,gBAAgB,GAAG,IAAI,CAAC;YACxB,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,YAAY,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO;YAAE,MAAM,KAAK,CAAC;QAC5E,6GAA6G;QAC7G,IAAI,CAAC,gBAAgB;YAAE,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE;gBACtD,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;gBAC5B,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;oBAC3F,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC7G,CAAC;YACH,CAAC,CAAC,CAAC;QACH,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type Ctx } from '@kvman/sdk';
|
|
2
|
+
import { type PendingAuthority } from './permission.ts';
|
|
3
|
+
/** Parent grants, not child tool scope, authorize a newly published foreground resource. */
|
|
4
|
+
export declare function startPending(ctx: Ctx, authority: PendingAuthority): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=start-pending.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-pending.d.ts","sourceRoot":"","sources":["../../src/delegate/start-pending.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,GAAG,EAAE,MAAM,YAAY,CAAC;AAIpD,OAAO,EAAkE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxH,4FAA4F;AAC5F,wBAAsB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BvF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { ProblemError } from '@kvman/sdk';
|
|
2
|
+
import { startChild } from "../connectors/delegate.js";
|
|
3
|
+
import { invalid } from "../problems.js";
|
|
4
|
+
import { prepareGrants } from "../prompt/session-grants.js";
|
|
5
|
+
import { delegationInTx, refusePending, waitingInTx } from "./permission.js";
|
|
6
|
+
import { launchRun } from "./runs.js";
|
|
7
|
+
/** Parent grants, not child tool scope, authorize a newly published foreground resource. */
|
|
8
|
+
export async function startPending(ctx, authority) {
|
|
9
|
+
const { sessionId, pending } = authority;
|
|
10
|
+
try {
|
|
11
|
+
const prepared = await prepareGrants(ctx);
|
|
12
|
+
const guard = store => {
|
|
13
|
+
ctx.job.signal.throwIfAborted();
|
|
14
|
+
if (waitingInTx(store, authority) === undefined)
|
|
15
|
+
throw invalid('The originating delegation is no longer current.');
|
|
16
|
+
if (pending.kind === 'worker' && pending.runId !== null && pending.childSessionId === null && pending.questionId === null && pending.question === null) {
|
|
17
|
+
const run = store.runs.get(pending.runId);
|
|
18
|
+
if (run?.status !== 'running' || run.sessionId !== sessionId || run.toolCallId !== pending.toolCallId)
|
|
19
|
+
throw invalid('The worker run is no longer current.');
|
|
20
|
+
return delegationInTx(store, sessionId, prepared, run.worker, run.kind).session;
|
|
21
|
+
}
|
|
22
|
+
if (pending.kind === 'subagent' && pending.childSessionId !== null && pending.runId === null && pending.questionId === null && pending.question === null) {
|
|
23
|
+
const child = store.sessions.get(pending.childSessionId);
|
|
24
|
+
if (child?.parentId !== sessionId || child.worker === null || child === undefined)
|
|
25
|
+
throw invalid('The child no longer belongs to its originating session.');
|
|
26
|
+
return delegationInTx(store, sessionId, prepared, child.worker.name, 'subagent').session;
|
|
27
|
+
}
|
|
28
|
+
throw invalid('The delegation binding is invalid.');
|
|
29
|
+
};
|
|
30
|
+
if (pending.childSessionId !== null)
|
|
31
|
+
await startChild(ctx, pending.childSessionId, guard);
|
|
32
|
+
else if (pending.runId !== null)
|
|
33
|
+
await launchRun(ctx, pending.runId, guard);
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (!(error instanceof ProblemError) || ctx.job.signal.aborted)
|
|
37
|
+
throw error;
|
|
38
|
+
await refusePending(ctx, authority, error);
|
|
39
|
+
// Stale resources are retained for separately approved owned cleanup, not used to mutate a newer turn.
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=start-pending.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-pending.js","sourceRoot":"","sources":["../../src/delegate/start-pending.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { z, type Ctx } from '@kvman/sdk';
|
|
2
|
-
/** A worker that runs a subagent: a child session with its own connectors, model, and thinking. */
|
|
2
|
+
/** A worker that runs a subagent: a child session with its own connectors, model, and thinking; `readOnly` refuses its helper every call that could change something (ADR 0056, 1). */
|
|
3
3
|
export declare const subagentWorkerSchema: z.ZodObject<{
|
|
4
4
|
kind: z.ZodLiteral<"subagent">;
|
|
5
|
+
readOnly: z.ZodDefault<z.ZodBoolean>;
|
|
5
6
|
connectors: z.ZodNullable<z.ZodArray<z.ZodString>>;
|
|
6
7
|
model: z.ZodNullable<z.ZodString>;
|
|
7
8
|
thinking: z.ZodNullable<z.ZodEnum<{
|
|
@@ -86,6 +87,7 @@ export declare const claudeWorkerSchema: z.ZodObject<{
|
|
|
86
87
|
/** One worker: a subagent, or a program of one of the kinds kvcoder knows (ADR 0021, 3). */
|
|
87
88
|
export declare const workerSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
88
89
|
kind: z.ZodLiteral<"subagent">;
|
|
90
|
+
readOnly: z.ZodDefault<z.ZodBoolean>;
|
|
89
91
|
connectors: z.ZodNullable<z.ZodArray<z.ZodString>>;
|
|
90
92
|
model: z.ZodNullable<z.ZodString>;
|
|
91
93
|
thinking: z.ZodNullable<z.ZodEnum<{
|
|
@@ -165,6 +167,7 @@ export declare const workerSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
165
167
|
/** The `kvcoder.delegate.workers` setting: each worker has its own name. */
|
|
166
168
|
export declare const workersSchema: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
167
169
|
kind: z.ZodLiteral<"subagent">;
|
|
170
|
+
readOnly: z.ZodDefault<z.ZodBoolean>;
|
|
168
171
|
connectors: z.ZodNullable<z.ZodArray<z.ZodString>>;
|
|
169
172
|
model: z.ZodNullable<z.ZodString>;
|
|
170
173
|
thinking: z.ZodNullable<z.ZodEnum<{
|
|
@@ -248,7 +251,7 @@ export type ProgramWorker = Exclude<Worker, SubagentWorker>;
|
|
|
248
251
|
export declare const isProgram: (worker: Worker) => worker is ProgramWorker;
|
|
249
252
|
/** The name a program worker's check has among a session's checks (ADR 0021, 37). */
|
|
250
253
|
export declare const workerCheckName: (name: string) => string;
|
|
251
|
-
/** The workers kvcoder ships with: they differ by their instructions only (ADR 0021, 5). */
|
|
254
|
+
/** The workers kvcoder ships with: they differ by their instructions, and the architect and the reviewer are read-only (ADR 0021, 5; ADR 0056, 1; ADR 0076). */
|
|
252
255
|
export declare const shippedWorkers: SubagentWorker[];
|
|
253
256
|
/** The workers of the job's workspace, in the setting's order. */
|
|
254
257
|
export declare function listedWorkers(ctx: Ctx): Promise<Worker[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workers.d.ts","sourceRoot":"","sources":["../../src/delegate/workers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,CAAC,EAAE,KAAK,GAAG,EAAE,MAAM,YAAY,CAAC;AAkBvD,
|
|
1
|
+
{"version":3,"file":"workers.d.ts","sourceRoot":"","sources":["../../src/delegate/workers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,CAAC,EAAE,KAAK,GAAG,EAAE,MAAM,YAAY,CAAC;AAkBvD,uLAAuL;AACvL,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;kBAAyN,CAAC;AAW3P,4EAA4E;AAC5E,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAA6C,CAAC;AAExF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;kBAAmM,CAAC;AACrO,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;kBAA6M,CAAC;AACzO,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;kBAM8E,CAAC;AAE9G,4FAA4F;AAC5F,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAAiH,CAAC;AAE3I,4EAA4E;AAC5E,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAAsJ,CAAC;AAEjL,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,YAAY,CAAC,CAAC;AACnD,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACnE,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAE5D,uDAAuD;AACvD,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,KAAG,MAAM,IAAI,aAA2C,CAAC;AAEjG,qFAAqF;AACrF,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,KAAG,MAA0B,CAAC;AA4C1E,gKAAgK;AAChK,eAAO,MAAM,cAAc,EAAE,cAAc,EAM1C,CAAC;AAEF,kEAAkE;AAClE,wBAAsB,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAE/D;AAED,KAAK,MAAM,GAAG,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,EAAE,GAAG,IAAI,CAAC;AAElE,0GAA0G;AAC1G,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAGlF;AAMD,6FAA6F;AAC7F,wBAAsB,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAK7F;AAED,wDAAwD;AACxD,wBAAsB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAK1E"}
|
package/dist/delegate/workers.js
CHANGED
|
@@ -12,8 +12,8 @@ const common = {
|
|
|
12
12
|
enabled: z.boolean(),
|
|
13
13
|
instructions: z.string().refine((text) => Buffer.byteLength(text, 'utf8') <= instructionsLimit, 'Instructions hold at most 16 KB.'),
|
|
14
14
|
};
|
|
15
|
-
/** A worker that runs a subagent: a child session with its own connectors, model, and thinking. */
|
|
16
|
-
export const subagentWorkerSchema = z.strictObject({ ...common, kind: z.literal('subagent'), connectors: z.array(z.string()).nullable(), model: z.string().min(1).nullable(), thinking: thinkingSchema.nullable() });
|
|
15
|
+
/** A worker that runs a subagent: a child session with its own connectors, model, and thinking; `readOnly` refuses its helper every call that could change something (ADR 0056, 1). */
|
|
16
|
+
export const subagentWorkerSchema = z.strictObject({ ...common, kind: z.literal('subagent'), readOnly: z.boolean().default(false), connectors: z.array(z.string()).nullable(), model: z.string().min(1).nullable(), thinking: thinkingSchema.nullable() });
|
|
17
17
|
// A worker that runs a program on this computer (ADR 0021, 12, 13, and 31): whether a run asks first, how long it may
|
|
18
18
|
// take, and the flags that matter, each `null` to leave its flag out.
|
|
19
19
|
const program = { ...common, approval: z.enum(['ask', 'auto']), timeoutMs: z.number().int().min(60_000).max(7_200_000) };
|
|
@@ -40,14 +40,50 @@ export const workersSchema = z.array(workerSchema).refine((workers) => new Set(w
|
|
|
40
40
|
export const isProgram = (worker) => worker.kind !== 'subagent';
|
|
41
41
|
/** The name a program worker's check has among a session's checks (ADR 0021, 37). */
|
|
42
42
|
export const workerCheckName = (name) => `worker:${name}`;
|
|
43
|
-
const shipped = (name, description, instructions) => ({ name, description, enabled: true, kind: 'subagent', instructions, connectors: null, model: null, thinking: null });
|
|
44
|
-
|
|
43
|
+
const shipped = (name, description, instructions, readOnly = false) => ({ name, description, enabled: true, kind: 'subagent', readOnly, instructions, connectors: null, model: null, thinking: null });
|
|
44
|
+
// The shipped specialists' instructions (ADR 0076): each adds its role's craft to the worker's method, which already says
|
|
45
|
+
// how a helper understands, does, and returns, so none of them repeats it.
|
|
46
|
+
const designer = [
|
|
47
|
+
'You are a senior UI/UX designer. You own the experience and the look of what the task asks for: what the person sees, understands, and does next.',
|
|
48
|
+
"Start from the person: who uses this, what they came to do, and the shortest clear way there. Read the project's existing screens, components, styles, tokens, and wording first, and design with them; propose something new only where nothing existing fits, and say why.",
|
|
49
|
+
"Experience: one main action on a screen, the common path in the fewest steps, plain wording in the person's own words, a visible response to every action, a way back or a confirmation for what can't be undone, errors that say what happened and what to do next, and every state designed: empty, loading, partial, error, success, and disabled.",
|
|
50
|
+
"Visuals: a clear hierarchy, where size, weight, spacing, and contrast show what matters first; one spacing scale and one type scale; alignment to a grid; color that carries meaning and is never the only signal; and the project's light and dark themes.",
|
|
51
|
+
'Standards: WCAG 2.2 AA (text contrast of 4.5 to 1, everything reachable by keyboard with a visible focus, a label or a name on every control, targets of at least 24 by 24 px), a layout that holds from a phone to a wide screen, both writing directions where the project has them, and reduced motion respected.',
|
|
52
|
+
"Return the design in your answer: the flow step by step, each screen's layout, states, and exact wording, the components and tokens it uses, the choices you made and why, and a page's HTML and CSS when layout matters. Don't change the project's files unless the task asks you to build the design; when it does, build it with the project's own components and check it as the person will see it.",
|
|
53
|
+
].join('\n');
|
|
54
|
+
const architect = [
|
|
55
|
+
'You are a senior software architect. You own the structure of what the task asks for: the parts, their boundaries, and how they fit what the project already is.',
|
|
56
|
+
"Read before you propose: the code the task touches, the code beside it that solves a similar problem, and the project's rules (its guides, `AGENTS.md`, config, lint rules, and tests). Work out the project's patterns and conventions from them (its layers, naming, error handling, data access, and tests) and design inside them. Where your design departs from one, say so and why.",
|
|
57
|
+
"Design on sound engineering practice: one clear responsibility per part, high cohesion and low coupling, dependencies that point one way and never in a circle, an explicit contract at every boundary (inputs, outputs, errors), one owner for each piece of data, validation at the edges, failures handled where something can be done about them, and security, performance, and testability thought through on the paths that need them.",
|
|
58
|
+
"Prefer the simplest design that does what was asked: reuse what exists, and add no layer, abstraction, option, or dependency the task doesn't need. For a decision that matters, weigh at least one real alternative and say why you chose as you did.",
|
|
59
|
+
"Return the design in your answer: the parts and each one's responsibility, the shapes and contracts that pass between them, the files and modules to add or change, the order to build them in and what can be built side by side, the trade-offs you weighed, the risks and how each is contained, and how the result is tested. Don't edit the project's files.",
|
|
60
|
+
].join('\n');
|
|
61
|
+
const tester = [
|
|
62
|
+
"You are a senior QA engineer. You test what the task names the way the people who depend on it will use it, and you report what is wrong; you don't fix it.",
|
|
63
|
+
"Choose the test cases by risk, before you test. Read what was asked and what was built. First come the flows the business depends on: the main thing a person comes to do, and anything that touches money, data, or access. Then security, then performance. Then the edges of those: empty, very large, wrong, repeated, and out-of-order input, and a step that fails midway. Spend nothing on what can't break or doesn't matter.",
|
|
64
|
+
"Automated: write the cases in the project's own test setup and style, each checking one behavior with real values and named for what it checks, and run them. A test must fail when the behavior breaks; one that only repeats the code proves nothing.",
|
|
65
|
+
"By hand: use it as a person would. Run the app or the command and go through each flow from start to end, with the `mcp` connector's browser when there is one, and with requests and the shell when there isn't. Look at what a person would see, and try what a person would try: wrong input, going back, doing it twice, and an action they aren't allowed.",
|
|
66
|
+
'Security: check that every input is validated, that a person reaches only what they are allowed to (try as someone else, and as no one), that no secret appears in an output, a log, or a file, and the injection that fits the technology (SQL, command, path, script).',
|
|
67
|
+
'Performance: measure the critical paths with a realistic amount of data, and report the numbers and how you measured them. Name whatever grows faster than the data does.',
|
|
68
|
+
"Report each issue with its severity (critical, high, medium, or low), the steps that reproduce it, what you expected, what happened, and the evidence. List the cases you ran, each passed or failed, and what you couldn't test. Don't change production code to make a test pass; report the defect. Stop what you started, and leave behind only the tests the task asked for.",
|
|
69
|
+
].join('\n');
|
|
70
|
+
const reviewer = [
|
|
71
|
+
'You are a senior code reviewer. You read a change as the engineer who will maintain it, and you report what makes the code wrong, harder to read, or harder to change.',
|
|
72
|
+
"Read the changes the task names in full, then the code around them, the code nearby that does a similar job, and the project's rules (its guides, `AGENTS.md`, and lint and format config). Judge against the project's own style and never against your taste.",
|
|
73
|
+
"Style: whatever goes against the project's conventions in naming, layout, file and module structure, idiom, error handling, and comments.",
|
|
74
|
+
'Complexity: a function or module that does more than one thing, deep nesting, a long parameter list, clever code where plain code would do, an abstraction, option, or layer with one user, and the same thing written twice.',
|
|
75
|
+
'Unclean code: dead or commented-out code, leftovers (debug output, a TODO, a temporary file), stubs, workarounds, a swallowed error, and a value with no name.',
|
|
76
|
+
"Unclear code: a name that doesn't say what the thing is, a function that does something other than its name says, a hidden side effect, a flow you had to read twice, a non-obvious reason with no comment, and a comment that repeats the code.",
|
|
77
|
+
'A correctness or security defect you meet on the way is reported too, and comes first.',
|
|
78
|
+
"Report each finding with its severity (must fix, should fix, or consider), its file and line, what is wrong, why it matters, and what you expect instead, with a line or two of code when that is clearer. Order the findings by severity, and leave out what the project's formatter or linter already settles. Say so plainly when you find nothing. Don't edit the project's files.",
|
|
79
|
+
].join('\n');
|
|
80
|
+
/** The workers kvcoder ships with: they differ by their instructions, and the architect and the reviewer are read-only (ADR 0021, 5; ADR 0056, 1; ADR 0076). */
|
|
45
81
|
export const shippedWorkers = [
|
|
46
82
|
shipped('general', 'Any separate, self-contained task', ''),
|
|
47
|
-
shipped('ui-ux', 'Designs
|
|
48
|
-
shipped('architect',
|
|
49
|
-
shipped('tester', '
|
|
50
|
-
shipped('reviewer', 'Reviews
|
|
83
|
+
shipped('ui-ux', 'Designs the experience and the look of a screen or flow, to usability and accessibility standards', designer),
|
|
84
|
+
shipped('architect', "Designs the structure of a change, on sound engineering practice and the project's own patterns and conventions", architect, true),
|
|
85
|
+
shipped('tester', 'QA engineer: writes and runs test cases, automated and by hand as a person would, on the critical flows, security, and performance, and reports the issues', tester),
|
|
86
|
+
shipped('reviewer', 'Reviews code and reports wrong style, needless complexity, and unclean or unclear code', reviewer, true),
|
|
51
87
|
];
|
|
52
88
|
/** The workers of the job's workspace, in the setting's order. */
|
|
53
89
|
export async function listedWorkers(ctx) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workers.js","sourceRoot":"","sources":["../../src/delegate/workers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,CAAC,EAAY,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,6GAA6G;AAC7G,sHAAsH;AACtH,sEAAsE;AAEtE,8DAA8D;AAC9D,MAAM,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC;AAEpC,MAAM,MAAM,GAAG;IACb,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,iBAAiB,EAAE,kCAAkC,CAAC;CACpI,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"workers.js","sourceRoot":"","sources":["../../src/delegate/workers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type Ctx } from '@kvman/sdk';
|
|
2
|
+
import { type TxRecords } from '../store/collections.ts';
|
|
3
|
+
/** The copies a chat keeps, and the largest previous content one holds. */
|
|
4
|
+
export declare const copiesKept = 20;
|
|
5
|
+
export declare const copyLimit: number;
|
|
6
|
+
/** A file as a chat names it and as the file system knows it. */
|
|
7
|
+
export type ChangedFile = {
|
|
8
|
+
sessionId: string;
|
|
9
|
+
shown: string;
|
|
10
|
+
real: string;
|
|
11
|
+
};
|
|
12
|
+
export declare const fingerprintOf: (bytes: Uint8Array) => string;
|
|
13
|
+
/** Changes the file to what `plan` makes of its current content; `created` says whether it was new. */
|
|
14
|
+
export declare function changeFile<Value>(ctx: Ctx, file: ChangedFile, plan: (previous: Buffer | undefined, store: TxRecords) => {
|
|
15
|
+
content: Buffer;
|
|
16
|
+
value: Value;
|
|
17
|
+
}): Promise<Value & {
|
|
18
|
+
created: boolean;
|
|
19
|
+
}>;
|
|
20
|
+
/** Takes back the chat's latest change to the file, when the file still holds what that change wrote. */
|
|
21
|
+
export declare function undoChange(ctx: Ctx, file: ChangedFile): Promise<{
|
|
22
|
+
path: string;
|
|
23
|
+
removed: boolean;
|
|
24
|
+
bytes: number;
|
|
25
|
+
}>;
|
|
26
|
+
/** Records the file as the chat has just read it; a file that is gone again records nothing. */
|
|
27
|
+
export declare function recordFileView(ctx: Ctx, sessionId: string, requested: string): Promise<void>;
|
|
28
|
+
//# sourceMappingURL=file-change.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-change.d.ts","sourceRoot":"","sources":["../../src/files/file-change.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,GAAG,EAAE,MAAM,YAAY,CAAC;AAGpD,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAOpE,2EAA2E;AAC3E,eAAO,MAAM,UAAU,KAAK,CAAC;AAC7B,eAAO,MAAM,SAAS,QAAc,CAAC;AAErC,iEAAiE;AACjE,MAAM,MAAM,WAAW,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7E,eAAO,MAAM,aAAa,GAAI,OAAO,UAAU,KAAG,MAA0D,CAAC;AAmD7G,uGAAuG;AACvG,wBAAgB,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,SAAS,KAAK;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAAG,OAAO,CAAC,KAAK,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAajM;AAED,yGAAyG;AACzG,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAsBlH;AAED,gGAAgG;AAChG,wBAAsB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQlG"}
|