@kvman/kvcoder 0.1.5 → 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 +111 -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 +9 -3
- package/dist/connectors/delegate.d.ts.map +1 -1
- package/dist/connectors/delegate.js +29 -10
- 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 +25 -14
- 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-groups.d.ts +9 -0
- package/dist/turns/call-groups.d.ts.map +1 -0
- package/dist/turns/call-groups.js +18 -0
- package/dist/turns/call-groups.js.map +1 -0
- 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 +48 -18
- 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 +29 -5
- 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 +841 -131
- 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 +3341 -1418
- 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 +119 -12
- package/locales/en.json +119 -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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from '@kvman/sdk';
|
|
2
|
-
import { checkSchema, outcomeSchema, pendingSchema, sourceSchema, statusSchema, thinkingSchema, titleSchema, usageSchema, messageKindSchema } from "../schemas/records.js";
|
|
2
|
+
import { checkSchema, outcomeSchema, pendingSchema, sourceSchema, statusSchema, thinkingSchema, titleSchema, usageBySchema, usageSchema, messageKindSchema } from "../schemas/records.js";
|
|
3
3
|
// The public shapes of sessions, messages, and turns (plan 08 §8.1), from kvcoder's records.
|
|
4
4
|
export const sessionSchema = z.object({
|
|
5
5
|
id: z.string(),
|
|
@@ -11,6 +11,7 @@ export const sessionSchema = z.object({
|
|
|
11
11
|
thinking: thinkingSchema,
|
|
12
12
|
stepJobId: z.string().exactOptional(),
|
|
13
13
|
usage: usageSchema,
|
|
14
|
+
usageBy: usageBySchema.exactOptional(),
|
|
14
15
|
durationMs: z.number(),
|
|
15
16
|
checks: z.array(checkSchema).exactOptional(),
|
|
16
17
|
createdAt: z.string(),
|
|
@@ -55,6 +56,8 @@ export function sessionView(doc) {
|
|
|
55
56
|
thinking: doc.thinking,
|
|
56
57
|
...(doc.stepJobId === null ? {} : { stepJobId: doc.stepJobId }),
|
|
57
58
|
usage: doc.usage,
|
|
59
|
+
// Only a session that spent something apart from its own replies says how (ADR 0058, 1).
|
|
60
|
+
...(Object.values(doc.usageBy).every((part) => part.input + part.output + part.cacheRead + part.cacheWrite === 0) ? {} : { usageBy: doc.usageBy }),
|
|
58
61
|
durationMs: doc.durationMs,
|
|
59
62
|
...(doc.checks === null ? {} : { checks: doc.checks }),
|
|
60
63
|
createdAt: doc.createdAt,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-view.js","sourceRoot":"","sources":["../../src/sessions/session-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAe,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAkE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"session-view.js","sourceRoot":"","sources":["../../src/sessions/session-view.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { FindOptions, Stored } from '@kvman/sdk';
|
|
2
|
+
/** All the records `find` gives, in `order`. */
|
|
3
|
+
export declare function allDocs<Doc>(find: (options: FindOptions) => Promise<Stored<Doc>[]>, order?: 'asc' | 'desc'): Promise<Stored<Doc>[]>;
|
|
4
|
+
//# sourceMappingURL=all-docs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"all-docs.d.ts","sourceRoot":"","sources":["../../src/store/all-docs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAOtD,gDAAgD;AAChD,wBAAsB,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,GAAE,KAAK,GAAG,MAAc,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAOhJ"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Every record of a collection that can grow without limit (ADR 0057, 1): read in pages, each from the last id of the
|
|
2
|
+
// one before, so a list, an export, or a cleanup never stops at the first thousand.
|
|
3
|
+
const pageSize = 1000;
|
|
4
|
+
/** All the records `find` gives, in `order`. */
|
|
5
|
+
export async function allDocs(find, order = 'asc') {
|
|
6
|
+
const found = [];
|
|
7
|
+
for (let page = await find({ limit: pageSize, order }); page.length > 0; page = await find({ limit: pageSize, order, after: found.at(-1)?.id ?? '' })) {
|
|
8
|
+
found.push(...page);
|
|
9
|
+
if (page.length < pageSize)
|
|
10
|
+
break;
|
|
11
|
+
}
|
|
12
|
+
return found;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=all-docs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"all-docs.js","sourceRoot":"","sources":["../../src/store/all-docs.ts"],"names":[],"mappings":"AAEA,sHAAsH;AACtH,oFAAoF;AAEpF,MAAM,QAAQ,GAAG,IAAI,CAAC;AAEtB,gDAAgD;AAChD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAM,IAAsD,EAAE,QAAwB,KAAK;IACtH,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,KAAK,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;QACtJ,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACpB,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ;YAAE,MAAM;IACpC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -4,15 +4,42 @@ export declare function records(store: Store): {
|
|
|
4
4
|
sessions: import("@kvman/sdk").Collection<{
|
|
5
5
|
title: string;
|
|
6
6
|
autoTitle: boolean;
|
|
7
|
+
deleting: boolean;
|
|
7
8
|
status: "idle" | "running" | "waiting";
|
|
8
9
|
parentId: string | null;
|
|
9
10
|
worker: {
|
|
10
11
|
name: string;
|
|
11
12
|
instructions: string;
|
|
13
|
+
readOnly: boolean;
|
|
12
14
|
} | null;
|
|
13
15
|
model: string | null;
|
|
14
16
|
thinking: "off" | "minimal" | "low" | "medium" | "high";
|
|
17
|
+
usageBy: {
|
|
18
|
+
summary: {
|
|
19
|
+
input: number;
|
|
20
|
+
output: number;
|
|
21
|
+
cacheRead: number;
|
|
22
|
+
cacheWrite: number;
|
|
23
|
+
cost: number;
|
|
24
|
+
};
|
|
25
|
+
title: {
|
|
26
|
+
input: number;
|
|
27
|
+
output: number;
|
|
28
|
+
cacheRead: number;
|
|
29
|
+
cacheWrite: number;
|
|
30
|
+
cost: number;
|
|
31
|
+
};
|
|
32
|
+
helpers: {
|
|
33
|
+
input: number;
|
|
34
|
+
output: number;
|
|
35
|
+
cacheRead: number;
|
|
36
|
+
cacheWrite: number;
|
|
37
|
+
cost: number;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
15
40
|
stepJobId: string | null;
|
|
41
|
+
stepGeneration: number;
|
|
42
|
+
stepIntentId: string | null;
|
|
16
43
|
turnId: string | null;
|
|
17
44
|
endedTurns: number;
|
|
18
45
|
nextSeq: number;
|
|
@@ -33,6 +60,17 @@ export declare function records(store: Store): {
|
|
|
33
60
|
createdAt: string;
|
|
34
61
|
updatedAt: string;
|
|
35
62
|
}>;
|
|
63
|
+
stepIntents: import("@kvman/sdk").Collection<{
|
|
64
|
+
sessionId: string;
|
|
65
|
+
turnId: string;
|
|
66
|
+
generation: number;
|
|
67
|
+
phase: "prepared" | "claimed" | "settled" | "invalidated" | "needs-review";
|
|
68
|
+
jobId: string | null;
|
|
69
|
+
legacyJobId: string | null;
|
|
70
|
+
reason: string | null;
|
|
71
|
+
createdAt: string;
|
|
72
|
+
updatedAt: string;
|
|
73
|
+
}>;
|
|
36
74
|
messages: import("@kvman/sdk").Collection<{
|
|
37
75
|
sessionId: string;
|
|
38
76
|
turnId: string | null;
|
|
@@ -62,6 +100,7 @@ export declare function records(store: Store): {
|
|
|
62
100
|
cacheWrite: number;
|
|
63
101
|
cost: number;
|
|
64
102
|
} | null;
|
|
103
|
+
basis: string | null;
|
|
65
104
|
durationMs: number | null;
|
|
66
105
|
createdAt: string;
|
|
67
106
|
}>;
|
|
@@ -83,6 +122,7 @@ export declare function records(store: Store): {
|
|
|
83
122
|
fileIds: string[] | null;
|
|
84
123
|
fileNames: string[] | null;
|
|
85
124
|
createdAt: string;
|
|
125
|
+
running?: string[];
|
|
86
126
|
}>;
|
|
87
127
|
turns: import("@kvman/sdk").Collection<{
|
|
88
128
|
sessionId: string;
|
|
@@ -91,6 +131,7 @@ export declare function records(store: Store): {
|
|
|
91
131
|
durationMs: number;
|
|
92
132
|
steps: number;
|
|
93
133
|
lost: number;
|
|
134
|
+
incomplete: number;
|
|
94
135
|
usage: {
|
|
95
136
|
input: number;
|
|
96
137
|
output: number;
|
|
@@ -126,6 +167,15 @@ export declare function records(store: Store): {
|
|
|
126
167
|
timeoutMs: number;
|
|
127
168
|
} | null;
|
|
128
169
|
}[];
|
|
170
|
+
deferredCalls: {
|
|
171
|
+
toolCallId: string;
|
|
172
|
+
call: {
|
|
173
|
+
description: string;
|
|
174
|
+
connector: string;
|
|
175
|
+
command: string;
|
|
176
|
+
payload: Record<string, import("zod").JSONType>;
|
|
177
|
+
};
|
|
178
|
+
}[];
|
|
129
179
|
}>;
|
|
130
180
|
questions: import("@kvman/sdk").Collection<{
|
|
131
181
|
sessionId: string;
|
|
@@ -135,6 +185,41 @@ export declare function records(store: Store): {
|
|
|
135
185
|
kind: "text" | "approval" | "choice" | "confirm";
|
|
136
186
|
question: Record<string, import("zod").JSONType>;
|
|
137
187
|
}>;
|
|
188
|
+
answerReceipts: import("@kvman/sdk").Collection<{
|
|
189
|
+
questionId: string;
|
|
190
|
+
sessionId: string;
|
|
191
|
+
turnId: string;
|
|
192
|
+
toolCallId: string;
|
|
193
|
+
questionKind: "text" | "approval" | "choice" | "confirm";
|
|
194
|
+
answerFingerprint: string;
|
|
195
|
+
createdAt: string;
|
|
196
|
+
}>;
|
|
197
|
+
sendReceipts: import("@kvman/sdk").Collection<{
|
|
198
|
+
sendId: string;
|
|
199
|
+
sessionId: string;
|
|
200
|
+
messageFingerprint: string;
|
|
201
|
+
createdAt: string;
|
|
202
|
+
}>;
|
|
203
|
+
fileViews: import("@kvman/sdk").Collection<{
|
|
204
|
+
sessionId: string;
|
|
205
|
+
path: string;
|
|
206
|
+
fingerprint: string;
|
|
207
|
+
updatedAt: string;
|
|
208
|
+
}>;
|
|
209
|
+
fileBackups: import("@kvman/sdk").Collection<{
|
|
210
|
+
sessionId: string;
|
|
211
|
+
path: string;
|
|
212
|
+
previous: string | null;
|
|
213
|
+
written: string;
|
|
214
|
+
createdAt: string;
|
|
215
|
+
}>;
|
|
216
|
+
fileParts: import("@kvman/sdk").Collection<{
|
|
217
|
+
sessionId: string;
|
|
218
|
+
path: string;
|
|
219
|
+
part: number;
|
|
220
|
+
content: string;
|
|
221
|
+
updatedAt: string;
|
|
222
|
+
}>;
|
|
138
223
|
artifacts: import("@kvman/sdk").Collection<{
|
|
139
224
|
sessionId: string;
|
|
140
225
|
artifactId: string;
|
|
@@ -145,6 +230,28 @@ export declare function records(store: Store): {
|
|
|
145
230
|
createdAt: string;
|
|
146
231
|
updatedAt: string;
|
|
147
232
|
}>;
|
|
233
|
+
maps: import("@kvman/sdk").Collection<{
|
|
234
|
+
sessionId: string;
|
|
235
|
+
goal: string;
|
|
236
|
+
steps: {
|
|
237
|
+
id: string;
|
|
238
|
+
title: string;
|
|
239
|
+
description: string | null;
|
|
240
|
+
after: string[];
|
|
241
|
+
uses: string | null;
|
|
242
|
+
check: string;
|
|
243
|
+
status: "done" | "failed" | "todo" | "doing" | "skipped";
|
|
244
|
+
evidence: string | null;
|
|
245
|
+
note: string | null;
|
|
246
|
+
}[];
|
|
247
|
+
notes: {
|
|
248
|
+
text: string;
|
|
249
|
+
createdAt: string;
|
|
250
|
+
}[];
|
|
251
|
+
version: number;
|
|
252
|
+
createdAt: string;
|
|
253
|
+
updatedAt: string;
|
|
254
|
+
}>;
|
|
148
255
|
background: import("@kvman/sdk").Collection<{
|
|
149
256
|
sessionId: string;
|
|
150
257
|
ref: string;
|
|
@@ -167,6 +274,14 @@ export declare function records(store: Store): {
|
|
|
167
274
|
endedAt: string | null;
|
|
168
275
|
exitCode: number | null;
|
|
169
276
|
output: string | null;
|
|
277
|
+
staging: {
|
|
278
|
+
tree: string;
|
|
279
|
+
after: string;
|
|
280
|
+
head: string | null;
|
|
281
|
+
headMoved: boolean;
|
|
282
|
+
paths: number;
|
|
283
|
+
restored: boolean;
|
|
284
|
+
} | null;
|
|
170
285
|
}>;
|
|
171
286
|
sections: import("@kvman/sdk").Collection<{
|
|
172
287
|
owner: string;
|
|
@@ -247,15 +362,42 @@ export declare function txRecords(tx: Transaction): {
|
|
|
247
362
|
sessions: import("@kvman/sdk").TransactionCollection<{
|
|
248
363
|
title: string;
|
|
249
364
|
autoTitle: boolean;
|
|
365
|
+
deleting: boolean;
|
|
250
366
|
status: "idle" | "running" | "waiting";
|
|
251
367
|
parentId: string | null;
|
|
252
368
|
worker: {
|
|
253
369
|
name: string;
|
|
254
370
|
instructions: string;
|
|
371
|
+
readOnly: boolean;
|
|
255
372
|
} | null;
|
|
256
373
|
model: string | null;
|
|
257
374
|
thinking: "off" | "minimal" | "low" | "medium" | "high";
|
|
375
|
+
usageBy: {
|
|
376
|
+
summary: {
|
|
377
|
+
input: number;
|
|
378
|
+
output: number;
|
|
379
|
+
cacheRead: number;
|
|
380
|
+
cacheWrite: number;
|
|
381
|
+
cost: number;
|
|
382
|
+
};
|
|
383
|
+
title: {
|
|
384
|
+
input: number;
|
|
385
|
+
output: number;
|
|
386
|
+
cacheRead: number;
|
|
387
|
+
cacheWrite: number;
|
|
388
|
+
cost: number;
|
|
389
|
+
};
|
|
390
|
+
helpers: {
|
|
391
|
+
input: number;
|
|
392
|
+
output: number;
|
|
393
|
+
cacheRead: number;
|
|
394
|
+
cacheWrite: number;
|
|
395
|
+
cost: number;
|
|
396
|
+
};
|
|
397
|
+
};
|
|
258
398
|
stepJobId: string | null;
|
|
399
|
+
stepGeneration: number;
|
|
400
|
+
stepIntentId: string | null;
|
|
259
401
|
turnId: string | null;
|
|
260
402
|
endedTurns: number;
|
|
261
403
|
nextSeq: number;
|
|
@@ -276,6 +418,17 @@ export declare function txRecords(tx: Transaction): {
|
|
|
276
418
|
createdAt: string;
|
|
277
419
|
updatedAt: string;
|
|
278
420
|
}>;
|
|
421
|
+
stepIntents: import("@kvman/sdk").TransactionCollection<{
|
|
422
|
+
sessionId: string;
|
|
423
|
+
turnId: string;
|
|
424
|
+
generation: number;
|
|
425
|
+
phase: "prepared" | "claimed" | "settled" | "invalidated" | "needs-review";
|
|
426
|
+
jobId: string | null;
|
|
427
|
+
legacyJobId: string | null;
|
|
428
|
+
reason: string | null;
|
|
429
|
+
createdAt: string;
|
|
430
|
+
updatedAt: string;
|
|
431
|
+
}>;
|
|
279
432
|
messages: import("@kvman/sdk").TransactionCollection<{
|
|
280
433
|
sessionId: string;
|
|
281
434
|
turnId: string | null;
|
|
@@ -305,6 +458,7 @@ export declare function txRecords(tx: Transaction): {
|
|
|
305
458
|
cacheWrite: number;
|
|
306
459
|
cost: number;
|
|
307
460
|
} | null;
|
|
461
|
+
basis: string | null;
|
|
308
462
|
durationMs: number | null;
|
|
309
463
|
createdAt: string;
|
|
310
464
|
}>;
|
|
@@ -326,6 +480,7 @@ export declare function txRecords(tx: Transaction): {
|
|
|
326
480
|
fileIds: string[] | null;
|
|
327
481
|
fileNames: string[] | null;
|
|
328
482
|
createdAt: string;
|
|
483
|
+
running?: string[];
|
|
329
484
|
}>;
|
|
330
485
|
turns: import("@kvman/sdk").TransactionCollection<{
|
|
331
486
|
sessionId: string;
|
|
@@ -334,6 +489,7 @@ export declare function txRecords(tx: Transaction): {
|
|
|
334
489
|
durationMs: number;
|
|
335
490
|
steps: number;
|
|
336
491
|
lost: number;
|
|
492
|
+
incomplete: number;
|
|
337
493
|
usage: {
|
|
338
494
|
input: number;
|
|
339
495
|
output: number;
|
|
@@ -369,6 +525,15 @@ export declare function txRecords(tx: Transaction): {
|
|
|
369
525
|
timeoutMs: number;
|
|
370
526
|
} | null;
|
|
371
527
|
}[];
|
|
528
|
+
deferredCalls: {
|
|
529
|
+
toolCallId: string;
|
|
530
|
+
call: {
|
|
531
|
+
description: string;
|
|
532
|
+
connector: string;
|
|
533
|
+
command: string;
|
|
534
|
+
payload: Record<string, import("zod").JSONType>;
|
|
535
|
+
};
|
|
536
|
+
}[];
|
|
372
537
|
}>;
|
|
373
538
|
questions: import("@kvman/sdk").TransactionCollection<{
|
|
374
539
|
sessionId: string;
|
|
@@ -378,6 +543,41 @@ export declare function txRecords(tx: Transaction): {
|
|
|
378
543
|
kind: "text" | "approval" | "choice" | "confirm";
|
|
379
544
|
question: Record<string, import("zod").JSONType>;
|
|
380
545
|
}>;
|
|
546
|
+
answerReceipts: import("@kvman/sdk").TransactionCollection<{
|
|
547
|
+
questionId: string;
|
|
548
|
+
sessionId: string;
|
|
549
|
+
turnId: string;
|
|
550
|
+
toolCallId: string;
|
|
551
|
+
questionKind: "text" | "approval" | "choice" | "confirm";
|
|
552
|
+
answerFingerprint: string;
|
|
553
|
+
createdAt: string;
|
|
554
|
+
}>;
|
|
555
|
+
sendReceipts: import("@kvman/sdk").TransactionCollection<{
|
|
556
|
+
sendId: string;
|
|
557
|
+
sessionId: string;
|
|
558
|
+
messageFingerprint: string;
|
|
559
|
+
createdAt: string;
|
|
560
|
+
}>;
|
|
561
|
+
fileViews: import("@kvman/sdk").TransactionCollection<{
|
|
562
|
+
sessionId: string;
|
|
563
|
+
path: string;
|
|
564
|
+
fingerprint: string;
|
|
565
|
+
updatedAt: string;
|
|
566
|
+
}>;
|
|
567
|
+
fileBackups: import("@kvman/sdk").TransactionCollection<{
|
|
568
|
+
sessionId: string;
|
|
569
|
+
path: string;
|
|
570
|
+
previous: string | null;
|
|
571
|
+
written: string;
|
|
572
|
+
createdAt: string;
|
|
573
|
+
}>;
|
|
574
|
+
fileParts: import("@kvman/sdk").TransactionCollection<{
|
|
575
|
+
sessionId: string;
|
|
576
|
+
path: string;
|
|
577
|
+
part: number;
|
|
578
|
+
content: string;
|
|
579
|
+
updatedAt: string;
|
|
580
|
+
}>;
|
|
381
581
|
artifacts: import("@kvman/sdk").TransactionCollection<{
|
|
382
582
|
sessionId: string;
|
|
383
583
|
artifactId: string;
|
|
@@ -388,6 +588,28 @@ export declare function txRecords(tx: Transaction): {
|
|
|
388
588
|
createdAt: string;
|
|
389
589
|
updatedAt: string;
|
|
390
590
|
}>;
|
|
591
|
+
maps: import("@kvman/sdk").TransactionCollection<{
|
|
592
|
+
sessionId: string;
|
|
593
|
+
goal: string;
|
|
594
|
+
steps: {
|
|
595
|
+
id: string;
|
|
596
|
+
title: string;
|
|
597
|
+
description: string | null;
|
|
598
|
+
after: string[];
|
|
599
|
+
uses: string | null;
|
|
600
|
+
check: string;
|
|
601
|
+
status: "done" | "failed" | "todo" | "doing" | "skipped";
|
|
602
|
+
evidence: string | null;
|
|
603
|
+
note: string | null;
|
|
604
|
+
}[];
|
|
605
|
+
notes: {
|
|
606
|
+
text: string;
|
|
607
|
+
createdAt: string;
|
|
608
|
+
}[];
|
|
609
|
+
version: number;
|
|
610
|
+
createdAt: string;
|
|
611
|
+
updatedAt: string;
|
|
612
|
+
}>;
|
|
391
613
|
background: import("@kvman/sdk").TransactionCollection<{
|
|
392
614
|
sessionId: string;
|
|
393
615
|
ref: string;
|
|
@@ -410,6 +632,14 @@ export declare function txRecords(tx: Transaction): {
|
|
|
410
632
|
endedAt: string | null;
|
|
411
633
|
exitCode: number | null;
|
|
412
634
|
output: string | null;
|
|
635
|
+
staging: {
|
|
636
|
+
tree: string;
|
|
637
|
+
after: string;
|
|
638
|
+
head: string | null;
|
|
639
|
+
headMoved: boolean;
|
|
640
|
+
paths: number;
|
|
641
|
+
restored: boolean;
|
|
642
|
+
} | null;
|
|
413
643
|
}>;
|
|
414
644
|
sections: import("@kvman/sdk").TransactionCollection<{
|
|
415
645
|
owner: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../../src/store/collections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../../src/store/collections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAUrD,yDAAyD;AACzD,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BnC;AAED,iDAAiD;AACjD,wBAAgB,SAAS,CAAC,EAAE,EAAE,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BxC;AAED,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { artifactDocSchema, backgroundDocSchema, messageDocSchema, processDocSchema, questionDocSchema, queuedDocSchema, runDocSchema, sessionDocSchema, turnDocSchema } from "../schemas/records.js";
|
|
1
|
+
import { answerReceiptDocSchema, artifactDocSchema, backgroundDocSchema, fileBackupDocSchema, filePartDocSchema, fileViewDocSchema, messageDocSchema, processDocSchema, questionDocSchema, queuedDocSchema, runDocSchema, sendReceiptDocSchema, sessionDocSchema, stepIntentDocSchema, turnDocSchema } from "../schemas/records.js";
|
|
2
|
+
import { mapDocSchema } from "../maps/map-schema.js";
|
|
2
3
|
import { signInDocSchema } from "../mcp/sign-in-record.js";
|
|
3
4
|
import { connectorDocSchema, handlerDocSchema, handlerJobDocSchema, sectionDocSchema, slashDocSchema } from "../schemas/registry.js";
|
|
4
5
|
// kvcoder's collections (plan 08 §8.4 "Where entries live"): sessions and their records, and workspace sections, in
|
|
@@ -8,11 +9,18 @@ import { connectorDocSchema, handlerDocSchema, handlerJobDocSchema, sectionDocSc
|
|
|
8
9
|
export function records(store) {
|
|
9
10
|
return {
|
|
10
11
|
sessions: store.collection('sessions', sessionDocSchema),
|
|
12
|
+
stepIntents: store.collection('step-intents', stepIntentDocSchema),
|
|
11
13
|
messages: store.collection('messages', messageDocSchema),
|
|
12
14
|
queued: store.collection('queued', queuedDocSchema),
|
|
13
15
|
turns: store.collection('turns', turnDocSchema),
|
|
14
16
|
questions: store.collection('questions', questionDocSchema),
|
|
17
|
+
answerReceipts: store.collection('answer-receipts', answerReceiptDocSchema),
|
|
18
|
+
sendReceipts: store.collection('send-receipts', sendReceiptDocSchema),
|
|
19
|
+
fileViews: store.collection('file-views', fileViewDocSchema),
|
|
20
|
+
fileBackups: store.collection('file-backups', fileBackupDocSchema),
|
|
21
|
+
fileParts: store.collection('file-parts', filePartDocSchema),
|
|
15
22
|
artifacts: store.collection('artifacts', artifactDocSchema),
|
|
23
|
+
maps: store.collection('maps', mapDocSchema),
|
|
16
24
|
background: store.collection('background', backgroundDocSchema),
|
|
17
25
|
runs: store.collection('runs', runDocSchema),
|
|
18
26
|
sections: store.collection('sections', sectionDocSchema),
|
|
@@ -29,11 +37,18 @@ export function records(store) {
|
|
|
29
37
|
export function txRecords(tx) {
|
|
30
38
|
return {
|
|
31
39
|
sessions: tx.collection('sessions', sessionDocSchema),
|
|
40
|
+
stepIntents: tx.collection('step-intents', stepIntentDocSchema),
|
|
32
41
|
messages: tx.collection('messages', messageDocSchema),
|
|
33
42
|
queued: tx.collection('queued', queuedDocSchema),
|
|
34
43
|
turns: tx.collection('turns', turnDocSchema),
|
|
35
44
|
questions: tx.collection('questions', questionDocSchema),
|
|
45
|
+
answerReceipts: tx.collection('answer-receipts', answerReceiptDocSchema),
|
|
46
|
+
sendReceipts: tx.collection('send-receipts', sendReceiptDocSchema),
|
|
47
|
+
fileViews: tx.collection('file-views', fileViewDocSchema),
|
|
48
|
+
fileBackups: tx.collection('file-backups', fileBackupDocSchema),
|
|
49
|
+
fileParts: tx.collection('file-parts', filePartDocSchema),
|
|
36
50
|
artifacts: tx.collection('artifacts', artifactDocSchema),
|
|
51
|
+
maps: tx.collection('maps', mapDocSchema),
|
|
37
52
|
background: tx.collection('background', backgroundDocSchema),
|
|
38
53
|
runs: tx.collection('runs', runDocSchema),
|
|
39
54
|
sections: tx.collection('sections', sectionDocSchema),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/store/collections.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/store/collections.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type QuestionKind } from '../connectors/ask.ts';
|
|
2
|
+
/** First application must additionally call checkedAnswer with the current question to validate choice membership. */
|
|
3
|
+
export declare function answerFingerprint(kind: QuestionKind, answer: unknown): string;
|
|
4
|
+
//# sourceMappingURL=answer-fingerprint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answer-fingerprint.d.ts","sourceRoot":"","sources":["../../src/turns/answer-fingerprint.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAc1E,sHAAsH;AACtH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAE7E"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { normalizeAnswer } from "../connectors/ask.js";
|
|
3
|
+
// Canonical object keys, exact strings and ordered arrays (ADR0042). This only receives validated values,
|
|
4
|
+
// never parses arbitrary tool output or text, and is a retry identifier rather than a secret-hiding guarantee.
|
|
5
|
+
function canonical(value) {
|
|
6
|
+
if (Array.isArray(value))
|
|
7
|
+
return `[${value.map(canonical).join(',')}]`;
|
|
8
|
+
if (value !== null && typeof value === 'object') {
|
|
9
|
+
const entries = Object.entries(value).sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0);
|
|
10
|
+
return `{${entries.map(([key, child]) => `${JSON.stringify(key)}:${canonical(child)}`).join(',')}}`;
|
|
11
|
+
}
|
|
12
|
+
return JSON.stringify(value);
|
|
13
|
+
}
|
|
14
|
+
/** First application must additionally call checkedAnswer with the current question to validate choice membership. */
|
|
15
|
+
export function answerFingerprint(kind, answer) {
|
|
16
|
+
return createHash('sha256').update(canonical(normalizeAnswer(kind, answer))).digest('hex');
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=answer-fingerprint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answer-fingerprint.js","sourceRoot":"","sources":["../../src/turns/answer-fingerprint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAqB,MAAM,sBAAsB,CAAC;AAG1E,0GAA0G;AAC1G,+GAA+G;AAC/G,SAAS,SAAS,CAAC,KAAgB;IACjC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACvE,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1G,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACtG,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,sHAAsH;AACtH,MAAM,UAAU,iBAAiB,CAAC,IAAkB,EAAE,MAAe;IACnE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7F,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Ctx, Json, Stored } from '@kvman/sdk';
|
|
2
|
+
import { type AnswerReceiptDoc, type QuestionDoc, type RunCallDoc } from '../schemas/records.ts';
|
|
3
|
+
import type { TxRecords } from '../store/collections.ts';
|
|
4
|
+
import type { StepIdentity } from './step-intents.ts';
|
|
5
|
+
export type AnswerApplication = {
|
|
6
|
+
kind: 'acknowledged';
|
|
7
|
+
receipt: Stored<AnswerReceiptDoc>;
|
|
8
|
+
} | {
|
|
9
|
+
kind: 'applied';
|
|
10
|
+
receipt: Stored<AnswerReceiptDoc>;
|
|
11
|
+
identity: StepIdentity | null;
|
|
12
|
+
} | {
|
|
13
|
+
kind: 'delegate';
|
|
14
|
+
question: Stored<QuestionDoc>;
|
|
15
|
+
call: RunCallDoc;
|
|
16
|
+
};
|
|
17
|
+
/** No awaits or effects: the first valid ordinary application and all its records commit together. */
|
|
18
|
+
export declare function applyAnswer(ctx: Ctx, store: TxRecords, questionId: string, answer: Json, expected?: Stored<QuestionDoc>): AnswerApplication;
|
|
19
|
+
//# sourceMappingURL=apply-answer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-answer.d.ts","sourceRoot":"","sources":["../../src/turns/apply-answer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAIpD,OAAO,EAAiB,KAAK,gBAAgB,EAAmB,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEjI,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAA;CAAE,GACrF;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAE1E,sGAAsG;AACtG,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,iBAAiB,CA+B3I"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { checkedAnswer } from "../connectors/ask.js";
|
|
2
|
+
import { isDelegateRun } from "../delegate/approved-run.js";
|
|
3
|
+
import { invalid } from "../problems.js";
|
|
4
|
+
import { runCallSchema } from "../schemas/records.js";
|
|
5
|
+
import { now } from "../sessions/session-lookup.js";
|
|
6
|
+
import { answerFingerprint } from "./answer-fingerprint.js";
|
|
7
|
+
import { heldText, resolvePendingInTx } from "./resolve.js";
|
|
8
|
+
/** No awaits or effects: the first valid ordinary application and all its records commit together. */
|
|
9
|
+
export function applyAnswer(ctx, store, questionId, answer, expected) {
|
|
10
|
+
ctx.job.signal.throwIfAborted();
|
|
11
|
+
const [receipt] = store.answerReceipts.find({ questionId }, { limit: 1 });
|
|
12
|
+
if (receipt !== undefined) {
|
|
13
|
+
if (answerFingerprint(receipt.questionKind, answer) !== receipt.answerFingerprint)
|
|
14
|
+
throw invalid('This question already has a different answer.');
|
|
15
|
+
return { kind: 'acknowledged', receipt };
|
|
16
|
+
}
|
|
17
|
+
const question = store.questions.get(questionId);
|
|
18
|
+
const missing = () => ctx.problem('kvcoder/QUESTION_NOT_FOUND', { questionId });
|
|
19
|
+
if (question === undefined)
|
|
20
|
+
throw missing();
|
|
21
|
+
if (expected !== undefined && (question.sessionId !== expected.sessionId || question.turnId !== expected.turnId || question.toolCallId !== expected.toolCallId || question.kind !== expected.kind || JSON.stringify(question.question) !== JSON.stringify(expected.question)))
|
|
22
|
+
throw missing();
|
|
23
|
+
const session = store.sessions.get(question.sessionId), turn = store.turns.get(question.turnId);
|
|
24
|
+
if (session?.status !== 'waiting' || session.turnId !== question.turnId || turn?.sessionId !== question.sessionId || turn.outcome !== null || turn.endedAt !== null)
|
|
25
|
+
throw missing();
|
|
26
|
+
const candidates = turn.pending.filter(item => item.toolCallId === question.toolCallId || item.questionId === questionId);
|
|
27
|
+
const pending = candidates[0];
|
|
28
|
+
if (candidates.length !== 1 || pending?.toolCallId !== question.toolCallId || pending.questionId !== questionId || pending.kind !== (question.kind === 'approval' ? 'approval' : 'question') || pending.childSessionId !== null || pending.runId !== null || pending.question === null || turn.results.some(item => item.toolCallId === question.toolCallId))
|
|
29
|
+
throw missing();
|
|
30
|
+
const checked = checkedAnswer(question, answer);
|
|
31
|
+
const call = checked.kind === 'approval' && checked.approved ? runCallSchema.parse(question.question) : undefined;
|
|
32
|
+
// Existing run records cannot prove durable launch. Keep grants on their existing separate flow, WITHOUT receipts.
|
|
33
|
+
if (call !== undefined && isDelegateRun(call))
|
|
34
|
+
return { kind: 'delegate', question, call };
|
|
35
|
+
const held = checked.kind === 'result'
|
|
36
|
+
? heldText(question.toolCallId, checked.text, false)
|
|
37
|
+
: call !== undefined
|
|
38
|
+
? { toolCallId: question.toolCallId, text: '', details: null, isError: false, run: call }
|
|
39
|
+
: heldText(question.toolCallId, 'denied by the user', true);
|
|
40
|
+
const fingerprint = answerFingerprint(question.kind, answer);
|
|
41
|
+
ctx.job.signal.throwIfAborted();
|
|
42
|
+
store.questions.delete(questionId);
|
|
43
|
+
const identity = resolvePendingInTx(store, question.sessionId, question.toolCallId, held);
|
|
44
|
+
const saved = store.answerReceipts.insert({ questionId, sessionId: question.sessionId, turnId: question.turnId, toolCallId: question.toolCallId, questionKind: question.kind, answerFingerprint: fingerprint, createdAt: now() });
|
|
45
|
+
return { kind: 'applied', receipt: saved, identity };
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=apply-answer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-answer.js","sourceRoot":"","sources":["../../src/turns/apply-answer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { Ctx } from '@kvman/sdk';
|
|
2
2
|
import type { Source } from '../schemas/records.ts';
|
|
3
|
+
import { type TxRecords } from '../store/collections.ts';
|
|
3
4
|
/** The text a background result reaches the model with. */
|
|
4
5
|
export declare function backgroundText(call: string, ref: string, result: string): string;
|
|
6
|
+
/** Appends or queues the result in the caller's transaction; gives the turn it opened, for the caller to begin after its commit. */
|
|
7
|
+
export declare function appendBackgroundInTx(store: TxRecords, sessionId: string, source: Source, text: string, startTurn: boolean): string | undefined;
|
|
5
8
|
export declare function appendBackground(ctx: Ctx, sessionId: string, source: Source, text: string, startTurn: boolean): Promise<void>;
|
|
6
9
|
//# sourceMappingURL=background.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../../src/turns/background.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../../src/turns/background.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAOpE,2DAA2D;AAC3D,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEhF;AAED,oIAAoI;AACpI,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAS9I;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnI"}
|