@kvman/kvcoder 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api.d.ts +49 -3
- package/dist/api.d.ts.map +1 -1
- package/dist/calls/run-shell.d.ts.map +1 -1
- package/dist/calls/run-shell.js +39 -9
- package/dist/calls/run-shell.js.map +1 -1
- package/dist/connector-call.d.ts +1 -1
- package/dist/connector-call.d.ts.map +1 -1
- package/dist/connector-call.js +4 -2
- package/dist/connector-call.js.map +1 -1
- package/dist/connectors/artifact.d.ts +1 -1
- package/dist/connectors/artifact.d.ts.map +1 -1
- package/dist/connectors/artifact.js +4 -4
- package/dist/connectors/artifact.js.map +1 -1
- package/dist/connectors/ask.d.ts +24 -0
- package/dist/connectors/ask.d.ts.map +1 -1
- package/dist/connectors/ask.js +20 -11
- package/dist/connectors/ask.js.map +1 -1
- package/dist/connectors/background.d.ts +14 -1
- package/dist/connectors/background.d.ts.map +1 -1
- package/dist/connectors/background.js +53 -23
- package/dist/connectors/background.js.map +1 -1
- package/dist/connectors/builtin-connectors.d.ts +110 -0
- package/dist/connectors/builtin-connectors.d.ts.map +1 -1
- package/dist/connectors/builtin-connectors.js +4 -1
- package/dist/connectors/builtin-connectors.js.map +1 -1
- package/dist/connectors/delegate.d.ts +3 -2
- package/dist/connectors/delegate.d.ts.map +1 -1
- package/dist/connectors/delegate.js +27 -9
- package/dist/connectors/delegate.js.map +1 -1
- package/dist/connectors/execution-map.d.ts +62 -0
- package/dist/connectors/execution-map.d.ts.map +1 -0
- package/dist/connectors/execution-map.js +142 -0
- package/dist/connectors/execution-map.js.map +1 -0
- package/dist/connectors/fs.d.ts +32 -1
- package/dist/connectors/fs.d.ts.map +1 -1
- package/dist/connectors/fs.js +76 -45
- package/dist/connectors/fs.js.map +1 -1
- package/dist/connectors/mcp.d.ts +18 -1
- package/dist/connectors/mcp.d.ts.map +1 -1
- package/dist/connectors/mcp.js +54 -6
- package/dist/connectors/mcp.js.map +1 -1
- package/dist/connectors/payload-fields.d.ts.map +1 -1
- package/dist/connectors/payload-fields.js +1 -1
- package/dist/connectors/payload-fields.js.map +1 -1
- package/dist/delegate/approved-run.d.ts +4 -6
- package/dist/delegate/approved-run.d.ts.map +1 -1
- package/dist/delegate/approved-run.js +74 -34
- package/dist/delegate/approved-run.js.map +1 -1
- package/dist/delegate/git-staging.d.ts +12 -0
- package/dist/delegate/git-staging.d.ts.map +1 -0
- package/dist/delegate/git-staging.js +54 -0
- package/dist/delegate/git-staging.js.map +1 -0
- package/dist/delegate/permission.d.ts +240 -0
- package/dist/delegate/permission.d.ts.map +1 -0
- package/dist/delegate/permission.js +78 -0
- package/dist/delegate/permission.js.map +1 -0
- package/dist/delegate/program-permission.d.ts +27 -0
- package/dist/delegate/program-permission.d.ts.map +1 -0
- package/dist/delegate/program-permission.js +53 -0
- package/dist/delegate/program-permission.js.map +1 -0
- package/dist/delegate/register-worker-run.d.ts.map +1 -1
- package/dist/delegate/register-worker-run.js +27 -11
- package/dist/delegate/register-worker-run.js.map +1 -1
- package/dist/delegate/run-program.d.ts.map +1 -1
- package/dist/delegate/run-program.js +29 -8
- package/dist/delegate/run-program.js.map +1 -1
- package/dist/delegate/runs.d.ts +14 -4
- package/dist/delegate/runs.d.ts.map +1 -1
- package/dist/delegate/runs.js +49 -19
- package/dist/delegate/runs.js.map +1 -1
- package/dist/delegate/staging-guard.d.ts +9 -0
- package/dist/delegate/staging-guard.d.ts.map +1 -0
- package/dist/delegate/staging-guard.js +55 -0
- package/dist/delegate/staging-guard.js.map +1 -0
- package/dist/delegate/start-background.d.ts +7 -0
- package/dist/delegate/start-background.d.ts.map +1 -0
- package/dist/delegate/start-background.js +32 -0
- package/dist/delegate/start-background.js.map +1 -0
- package/dist/delegate/start-pending.d.ts +5 -0
- package/dist/delegate/start-pending.d.ts.map +1 -0
- package/dist/delegate/start-pending.js +42 -0
- package/dist/delegate/start-pending.js.map +1 -0
- package/dist/delegate/workers.d.ts +5 -2
- package/dist/delegate/workers.d.ts.map +1 -1
- package/dist/delegate/workers.js +44 -8
- package/dist/delegate/workers.js.map +1 -1
- package/dist/files/file-change.d.ts +28 -0
- package/dist/files/file-change.d.ts.map +1 -0
- package/dist/files/file-change.js +125 -0
- package/dist/files/file-change.js.map +1 -0
- package/dist/files/file-parts.d.ts +18 -0
- package/dist/files/file-parts.d.ts.map +1 -0
- package/dist/files/file-parts.js +40 -0
- package/dist/files/file-parts.js.map +1 -0
- package/dist/files/read-file.d.ts +9 -1
- package/dist/files/read-file.d.ts.map +1 -1
- package/dist/files/read-file.js +35 -13
- package/dist/files/read-file.js.map +1 -1
- package/dist/files/search-text.d.ts +12 -2
- package/dist/files/search-text.d.ts.map +1 -1
- package/dist/files/search-text.js +87 -23
- package/dist/files/search-text.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/jobs/job-rows.d.ts +11 -2
- package/dist/jobs/job-rows.d.ts.map +1 -1
- package/dist/jobs/job-rows.js +24 -13
- package/dist/jobs/job-rows.js.map +1 -1
- package/dist/jobs/process-handlers.d.ts.map +1 -1
- package/dist/jobs/process-handlers.js +12 -1
- package/dist/jobs/process-handlers.js.map +1 -1
- package/dist/jobs/process-report.d.ts.map +1 -1
- package/dist/jobs/process-report.js +2 -1
- package/dist/jobs/process-report.js.map +1 -1
- package/dist/jobs/process-run.d.ts.map +1 -1
- package/dist/jobs/process-run.js +2 -1
- package/dist/jobs/process-run.js.map +1 -1
- package/dist/jobs/register-jobs.d.ts.map +1 -1
- package/dist/jobs/register-jobs.js +1 -0
- package/dist/jobs/register-jobs.js.map +1 -1
- package/dist/maps/map-reminder.d.ts +7 -0
- package/dist/maps/map-reminder.d.ts.map +1 -0
- package/dist/maps/map-reminder.js +24 -0
- package/dist/maps/map-reminder.js.map +1 -0
- package/dist/maps/map-rules.d.ts +36 -0
- package/dist/maps/map-rules.d.ts.map +1 -0
- package/dist/maps/map-rules.js +86 -0
- package/dist/maps/map-rules.js.map +1 -0
- package/dist/maps/map-schema.d.ts +55 -0
- package/dist/maps/map-schema.d.ts.map +1 -0
- package/dist/maps/map-schema.js +27 -0
- package/dist/maps/map-schema.js.map +1 -0
- package/dist/maps/register-maps.d.ts +3 -0
- package/dist/maps/register-maps.d.ts.map +1 -0
- package/dist/maps/register-maps.js +21 -0
- package/dist/maps/register-maps.js.map +1 -0
- package/dist/mcp/connect.d.ts +2 -0
- package/dist/mcp/connect.d.ts.map +1 -1
- package/dist/mcp/connect.js +16 -4
- package/dist/mcp/connect.js.map +1 -1
- package/dist/mcp/oauth-provider.d.ts +8 -5
- package/dist/mcp/oauth-provider.d.ts.map +1 -1
- package/dist/mcp/oauth-provider.js +31 -22
- package/dist/mcp/oauth-provider.js.map +1 -1
- package/dist/mcp/secrets.d.ts +2 -0
- package/dist/mcp/secrets.d.ts.map +1 -1
- package/dist/mcp/secrets.js +6 -0
- package/dist/mcp/secrets.js.map +1 -1
- package/dist/mcp/sign-in.d.ts.map +1 -1
- package/dist/mcp/sign-in.js +12 -4
- package/dist/mcp/sign-in.js.map +1 -1
- package/dist/messages/receive-message.d.ts +2 -1
- package/dist/messages/receive-message.d.ts.map +1 -1
- package/dist/messages/receive-message.js +34 -9
- package/dist/messages/receive-message.js.map +1 -1
- package/dist/messages/register-messages.d.ts.map +1 -1
- package/dist/messages/register-messages.js +13 -8
- package/dist/messages/register-messages.js.map +1 -1
- package/dist/messages/send-receipt.d.ts +10 -0
- package/dist/messages/send-receipt.d.ts.map +1 -0
- package/dist/messages/send-receipt.js +14 -0
- package/dist/messages/send-receipt.js.map +1 -0
- package/dist/prompt/build-prompt.d.ts +1 -0
- package/dist/prompt/build-prompt.d.ts.map +1 -1
- package/dist/prompt/build-prompt.js +5 -1
- package/dist/prompt/build-prompt.js.map +1 -1
- package/dist/prompt/project-rules.d.ts +6 -0
- package/dist/prompt/project-rules.d.ts.map +1 -0
- package/dist/prompt/project-rules.js +37 -0
- package/dist/prompt/project-rules.js.map +1 -0
- package/dist/prompt/session-grants.d.ts +209 -0
- package/dist/prompt/session-grants.d.ts.map +1 -0
- package/dist/prompt/session-grants.js +50 -0
- package/dist/prompt/session-grants.js.map +1 -0
- package/dist/prompt/session-prompt.d.ts +3 -2
- package/dist/prompt/session-prompt.d.ts.map +1 -1
- package/dist/prompt/session-prompt.js +24 -40
- package/dist/prompt/session-prompt.js.map +1 -1
- package/dist/prompt/working-method.d.ts.map +1 -1
- package/dist/prompt/working-method.js +22 -16
- package/dist/prompt/working-method.js.map +1 -1
- package/dist/register-settings.d.ts +3 -1
- package/dist/register-settings.d.ts.map +1 -1
- package/dist/register-settings.js +5 -4
- package/dist/register-settings.js.map +1 -1
- package/dist/registry/register-connectors.d.ts +9 -0
- package/dist/registry/register-connectors.d.ts.map +1 -1
- package/dist/registry/register-connectors.js +20 -12
- package/dist/registry/register-connectors.js.map +1 -1
- package/dist/result-text.d.ts +4 -0
- package/dist/result-text.d.ts.map +1 -1
- package/dist/result-text.js +9 -0
- package/dist/result-text.js.map +1 -1
- package/dist/schemas/records.d.ts +142 -0
- package/dist/schemas/records.d.ts.map +1 -1
- package/dist/schemas/records.js +60 -2
- package/dist/schemas/records.js.map +1 -1
- package/dist/sessions/execution-root.d.ts +8 -0
- package/dist/sessions/execution-root.d.ts.map +1 -0
- package/dist/sessions/execution-root.js +25 -0
- package/dist/sessions/execution-root.js.map +1 -0
- package/dist/sessions/new-session.d.ts +5 -1
- package/dist/sessions/new-session.d.ts.map +1 -1
- package/dist/sessions/new-session.js +17 -4
- package/dist/sessions/new-session.js.map +1 -1
- package/dist/sessions/register-context.d.ts.map +1 -1
- package/dist/sessions/register-context.js +6 -5
- package/dist/sessions/register-context.js.map +1 -1
- package/dist/sessions/register-fork-export.d.ts.map +1 -1
- package/dist/sessions/register-fork-export.js +5 -3
- package/dist/sessions/register-fork-export.js.map +1 -1
- package/dist/sessions/register-lifecycle.d.ts.map +1 -1
- package/dist/sessions/register-lifecycle.js +14 -5
- package/dist/sessions/register-lifecycle.js.map +1 -1
- package/dist/sessions/register-sessions.d.ts.map +1 -1
- package/dist/sessions/register-sessions.js +0 -2
- package/dist/sessions/register-sessions.js.map +1 -1
- package/dist/sessions/session-view.d.ts +23 -0
- package/dist/sessions/session-view.d.ts.map +1 -1
- package/dist/sessions/session-view.js +4 -1
- package/dist/sessions/session-view.js.map +1 -1
- package/dist/store/all-docs.d.ts +4 -0
- package/dist/store/all-docs.d.ts.map +1 -0
- package/dist/store/all-docs.js +14 -0
- package/dist/store/all-docs.js.map +1 -0
- package/dist/store/collections.d.ts +230 -0
- package/dist/store/collections.d.ts.map +1 -1
- package/dist/store/collections.js +16 -1
- package/dist/store/collections.js.map +1 -1
- package/dist/turns/answer-fingerprint.d.ts +4 -0
- package/dist/turns/answer-fingerprint.d.ts.map +1 -0
- package/dist/turns/answer-fingerprint.js +18 -0
- package/dist/turns/answer-fingerprint.js.map +1 -0
- package/dist/turns/apply-answer.d.ts +19 -0
- package/dist/turns/apply-answer.d.ts.map +1 -0
- package/dist/turns/apply-answer.js +47 -0
- package/dist/turns/apply-answer.js.map +1 -0
- package/dist/turns/background.d.ts +3 -0
- package/dist/turns/background.d.ts.map +1 -1
- package/dist/turns/background.js +13 -12
- package/dist/turns/background.js.map +1 -1
- package/dist/turns/call-permission.d.ts +22 -0
- package/dist/turns/call-permission.d.ts.map +1 -0
- package/dist/turns/call-permission.js +49 -0
- package/dist/turns/call-permission.js.map +1 -0
- package/dist/turns/cancel-step-job.d.ts +14 -0
- package/dist/turns/cancel-step-job.d.ts.map +1 -0
- package/dist/turns/cancel-step-job.js +35 -0
- package/dist/turns/cancel-step-job.js.map +1 -0
- package/dist/turns/child-result.d.ts +7 -0
- package/dist/turns/child-result.d.ts.map +1 -0
- package/dist/turns/child-result.js +24 -0
- package/dist/turns/child-result.js.map +1 -0
- package/dist/turns/compaction.d.ts +15 -1
- package/dist/turns/compaction.d.ts.map +1 -1
- package/dist/turns/compaction.js +44 -16
- package/dist/turns/compaction.js.map +1 -1
- package/dist/turns/end-turn-state.d.ts +42 -0
- package/dist/turns/end-turn-state.d.ts.map +1 -0
- package/dist/turns/end-turn-state.js +64 -0
- package/dist/turns/end-turn-state.js.map +1 -0
- package/dist/turns/end-turn.d.ts +7 -8
- package/dist/turns/end-turn.d.ts.map +1 -1
- package/dist/turns/end-turn.js +52 -55
- package/dist/turns/end-turn.js.map +1 -1
- package/dist/turns/helper-calls.d.ts +6 -0
- package/dist/turns/helper-calls.d.ts.map +1 -0
- package/dist/turns/helper-calls.js +8 -0
- package/dist/turns/helper-calls.js.map +1 -0
- package/dist/turns/history.d.ts +3 -1
- package/dist/turns/history.d.ts.map +1 -1
- package/dist/turns/history.js +15 -7
- package/dist/turns/history.js.map +1 -1
- package/dist/turns/lost-reply.d.ts +7 -0
- package/dist/turns/lost-reply.d.ts.map +1 -1
- package/dist/turns/lost-reply.js +12 -0
- package/dist/turns/lost-reply.js.map +1 -1
- package/dist/turns/message-blocks.d.ts +2 -0
- package/dist/turns/message-blocks.d.ts.map +1 -1
- package/dist/turns/message-blocks.js +7 -0
- package/dist/turns/message-blocks.js.map +1 -1
- package/dist/turns/model-context.d.ts +2 -0
- package/dist/turns/model-context.d.ts.map +1 -1
- package/dist/turns/model-context.js +23 -4
- package/dist/turns/model-context.js.map +1 -1
- package/dist/turns/model-retry.d.ts +2 -1
- package/dist/turns/model-retry.d.ts.map +1 -1
- package/dist/turns/model-retry.js +5 -1
- package/dist/turns/model-retry.js.map +1 -1
- package/dist/turns/read-only.d.ts +6 -0
- package/dist/turns/read-only.d.ts.map +1 -0
- package/dist/turns/read-only.js +12 -0
- package/dist/turns/read-only.js.map +1 -0
- package/dist/turns/receipt-job.d.ts +5 -0
- package/dist/turns/receipt-job.d.ts.map +1 -0
- package/dist/turns/receipt-job.js +40 -0
- package/dist/turns/receipt-job.js.map +1 -0
- package/dist/turns/recover-workspace.d.ts +9 -0
- package/dist/turns/recover-workspace.d.ts.map +1 -0
- package/dist/turns/recover-workspace.js +79 -0
- package/dist/turns/recover-workspace.js.map +1 -0
- package/dist/turns/recovery-state.d.ts +19 -0
- package/dist/turns/recovery-state.d.ts.map +1 -0
- package/dist/turns/recovery-state.js +87 -0
- package/dist/turns/recovery-state.js.map +1 -0
- package/dist/turns/register-interruptions.d.ts.map +1 -1
- package/dist/turns/register-interruptions.js +19 -8
- package/dist/turns/register-interruptions.js.map +1 -1
- package/dist/turns/register-turns.d.ts.map +1 -1
- package/dist/turns/register-turns.js +42 -31
- package/dist/turns/register-turns.js.map +1 -1
- package/dist/turns/resolve.d.ts +4 -0
- package/dist/turns/resolve.d.ts.map +1 -1
- package/dist/turns/resolve.js +19 -17
- package/dist/turns/resolve.js.map +1 -1
- package/dist/turns/retry-turn.d.ts +4 -0
- package/dist/turns/retry-turn.d.ts.map +1 -0
- package/dist/turns/retry-turn.js +20 -0
- package/dist/turns/retry-turn.js.map +1 -0
- package/dist/turns/run-calls.d.ts +21 -4
- package/dist/turns/run-calls.d.ts.map +1 -1
- package/dist/turns/run-calls.js +157 -41
- package/dist/turns/run-calls.js.map +1 -1
- package/dist/turns/run-command.d.ts +5 -3
- package/dist/turns/run-command.d.ts.map +1 -1
- package/dist/turns/run-command.js +21 -12
- package/dist/turns/run-command.js.map +1 -1
- package/dist/turns/settle-calls.d.ts +2 -8
- package/dist/turns/settle-calls.d.ts.map +1 -1
- package/dist/turns/settle-calls.js +26 -35
- package/dist/turns/settle-calls.js.map +1 -1
- package/dist/turns/start-turn.d.ts +8 -83
- package/dist/turns/start-turn.d.ts.map +1 -1
- package/dist/turns/start-turn.js +35 -24
- package/dist/turns/start-turn.js.map +1 -1
- package/dist/turns/step-claim.d.ts +39 -0
- package/dist/turns/step-claim.d.ts.map +1 -0
- package/dist/turns/step-claim.js +72 -0
- package/dist/turns/step-claim.js.map +1 -0
- package/dist/turns/step-intents.d.ts +31 -0
- package/dist/turns/step-intents.d.ts.map +1 -0
- package/dist/turns/step-intents.js +101 -0
- package/dist/turns/step-intents.js.map +1 -0
- package/dist/turns/step-next.d.ts +17 -0
- package/dist/turns/step-next.d.ts.map +1 -0
- package/dist/turns/step-next.js +25 -0
- package/dist/turns/step-next.js.map +1 -0
- package/dist/turns/step.d.ts +1 -1
- package/dist/turns/step.d.ts.map +1 -1
- package/dist/turns/step.js +108 -88
- package/dist/turns/step.js.map +1 -1
- package/dist/turns/summary-facts.d.ts +25 -0
- package/dist/turns/summary-facts.d.ts.map +1 -0
- package/dist/turns/summary-facts.js +63 -0
- package/dist/turns/summary-facts.js.map +1 -0
- package/dist/turns/usage.d.ts +7 -0
- package/dist/turns/usage.d.ts.map +1 -0
- package/dist/turns/usage.js +18 -0
- package/dist/turns/usage.js.map +1 -0
- package/dist/ui/register-ui.js +3 -3
- package/dist/ui/register-ui.js.map +1 -1
- package/dist/web/components/approval.css +2 -0
- package/dist/web/components/approval.js +233 -0
- package/dist/web/components/call.css +1 -1
- package/dist/web/components/call.js +383 -287
- package/dist/web/components/connectors.css +1 -1
- package/dist/web/components/connectors.js +595 -592
- package/dist/web/components/conversation.css +1 -1
- package/dist/web/components/conversation.js +2902 -1593
- package/dist/web/components/mcp-sign-in.css +1 -1
- package/dist/web/components/model.css +1 -1
- package/dist/web/components/model.js +138 -134
- package/dist/web/components/question.css +1 -1
- package/dist/web/components/question.js +148 -78
- package/dist/web/components/sessions.css +1 -1
- package/docs/connectors.md +2 -2
- package/locales/ar.json +88 -12
- package/locales/en.json +88 -12
- package/package.json +6 -6
- package/dist/turns/cancel-turn.d.ts +0 -3
- package/dist/turns/cancel-turn.d.ts.map +0 -1
- package/dist/turns/cancel-turn.js +0 -31
- package/dist/turns/cancel-turn.js.map +0 -1
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { chmodSync, readFileSync, renameSync, rmSync, statSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { readFile } from 'node:fs/promises';
|
|
4
|
+
import { ProblemError } from '@kvman/sdk';
|
|
5
|
+
import { invalid, notFound } from "../problems.js";
|
|
6
|
+
import { now } from "../sessions/session-lookup.js";
|
|
7
|
+
import { txRecords } from "../store/collections.js";
|
|
8
|
+
import { resolveInWorkspace } from "./workspace-path.js";
|
|
9
|
+
// A change to a workspace file (ADR 0053): its read, its checks, and its replace run inside one store transaction, whose
|
|
10
|
+
// write lock makes kvman's workers take turns. A chat changes an existing file only as it last saw it, the new content
|
|
11
|
+
// is renamed over the file, and the previous content is kept so the change can be undone.
|
|
12
|
+
/** The copies a chat keeps, and the largest previous content one holds. */
|
|
13
|
+
export const copiesKept = 20;
|
|
14
|
+
export const copyLimit = 1024 * 1024;
|
|
15
|
+
export const fingerprintOf = (bytes) => createHash('sha256').update(bytes).digest('hex');
|
|
16
|
+
const codeOf = (error) => (error instanceof Error && 'code' in error && typeof error.code === 'string' ? error.code : undefined);
|
|
17
|
+
// The file system's own refusals are the model's to read and fix; anything else is a fault.
|
|
18
|
+
function refusal(error) {
|
|
19
|
+
return !(error instanceof ProblemError) && error instanceof Error && /^E[A-Z]+$/.test(codeOf(error) ?? '') ? invalid(error.message) : error;
|
|
20
|
+
}
|
|
21
|
+
function existing(file) {
|
|
22
|
+
try {
|
|
23
|
+
const found = statSync(file.real);
|
|
24
|
+
if (found.isDirectory())
|
|
25
|
+
throw invalid(`${file.shown} is a folder.`, { path: file.shown });
|
|
26
|
+
return { bytes: readFileSync(file.real), mode: found.mode & 0o777 };
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
if (codeOf(error) === 'ENOENT')
|
|
30
|
+
return undefined;
|
|
31
|
+
throw refusal(error);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Written beside the file and renamed over it, so a reader sees the old content or the new, never part of one.
|
|
35
|
+
function replace(real, content, mode, jobId) {
|
|
36
|
+
const beside = `${real}.${jobId}.kvman-tmp`;
|
|
37
|
+
try {
|
|
38
|
+
writeFileSync(beside, content);
|
|
39
|
+
if (mode !== undefined)
|
|
40
|
+
chmodSync(beside, mode);
|
|
41
|
+
renameSync(beside, real);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
rmSync(beside, { force: true });
|
|
45
|
+
throw refusal(error);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function setView(store, file, fingerprint) {
|
|
49
|
+
const [view] = store.fileViews.find({ sessionId: file.sessionId, path: file.real }, { limit: 1 });
|
|
50
|
+
if (view === undefined)
|
|
51
|
+
store.fileViews.insert({ sessionId: file.sessionId, path: file.real, fingerprint, updatedAt: now() });
|
|
52
|
+
else
|
|
53
|
+
store.fileViews.update(view.id, { fingerprint, updatedAt: now() });
|
|
54
|
+
}
|
|
55
|
+
function requireSeen(store, file, bytes) {
|
|
56
|
+
const [view] = store.fileViews.find({ sessionId: file.sessionId, path: file.real }, { limit: 1 });
|
|
57
|
+
if (view === undefined)
|
|
58
|
+
throw invalid(`${file.shown} exists and this chat hasn't read it. Read it first with fs read, then make the change.`, { path: file.shown });
|
|
59
|
+
if (view.fingerprint !== fingerprintOf(bytes))
|
|
60
|
+
throw invalid(`${file.shown} changed since this chat read it. Read it again with fs read, then make the change.`, { path: file.shown });
|
|
61
|
+
}
|
|
62
|
+
function saveCopy(store, file, previous, written) {
|
|
63
|
+
if (previous !== undefined && previous.length > copyLimit)
|
|
64
|
+
return;
|
|
65
|
+
store.fileBackups.insert({ sessionId: file.sessionId, path: file.real, previous: previous === undefined ? null : previous.toString('base64'), written, createdAt: now() });
|
|
66
|
+
for (const old of store.fileBackups.find({ sessionId: file.sessionId }, { limit: 1000, order: 'desc' }).slice(copiesKept))
|
|
67
|
+
store.fileBackups.delete(old.id);
|
|
68
|
+
}
|
|
69
|
+
/** Changes the file to what `plan` makes of its current content; `created` says whether it was new. */
|
|
70
|
+
export function changeFile(ctx, file, plan) {
|
|
71
|
+
return ctx.store.transaction((tx) => {
|
|
72
|
+
const store = txRecords(tx);
|
|
73
|
+
const found = existing(file);
|
|
74
|
+
// What is wrong with the change itself is said first; then whether the chat may make it.
|
|
75
|
+
const planned = plan(found?.bytes, store);
|
|
76
|
+
if (found !== undefined)
|
|
77
|
+
requireSeen(store, file, found.bytes);
|
|
78
|
+
const written = fingerprintOf(planned.content);
|
|
79
|
+
saveCopy(store, file, found?.bytes, written);
|
|
80
|
+
setView(store, file, written);
|
|
81
|
+
replace(file.real, planned.content, found?.mode, ctx.job.id);
|
|
82
|
+
return { ...planned.value, created: found === undefined };
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
/** Takes back the chat's latest change to the file, when the file still holds what that change wrote. */
|
|
86
|
+
export function undoChange(ctx, file) {
|
|
87
|
+
return ctx.store.transaction((tx) => {
|
|
88
|
+
const store = txRecords(tx);
|
|
89
|
+
const [copy] = store.fileBackups.find({ sessionId: file.sessionId, path: file.real }, { limit: 1, order: 'desc' });
|
|
90
|
+
if (copy === undefined)
|
|
91
|
+
throw notFound(`This chat has no change of ${file.shown} to undo.`, { path: file.shown });
|
|
92
|
+
const found = existing(file);
|
|
93
|
+
if (found === undefined || fingerprintOf(found.bytes) !== copy.written)
|
|
94
|
+
throw invalid(`${file.shown} changed since that change, so it isn't undone. Read it to see what it holds now.`, { path: file.shown });
|
|
95
|
+
store.fileBackups.delete(copy.id);
|
|
96
|
+
const previous = copy.previous === null ? undefined : Buffer.from(copy.previous, 'base64');
|
|
97
|
+
if (previous === undefined) {
|
|
98
|
+
for (const view of store.fileViews.find({ sessionId: file.sessionId, path: file.real }, { limit: 1 }))
|
|
99
|
+
store.fileViews.delete(view.id);
|
|
100
|
+
try {
|
|
101
|
+
unlinkSync(file.real);
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
throw refusal(error);
|
|
105
|
+
}
|
|
106
|
+
return { path: file.shown, removed: true, bytes: 0 };
|
|
107
|
+
}
|
|
108
|
+
setView(store, file, fingerprintOf(previous));
|
|
109
|
+
replace(file.real, previous, found.mode, ctx.job.id);
|
|
110
|
+
return { path: file.shown, removed: false, bytes: previous.length };
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/** Records the file as the chat has just read it; a file that is gone again records nothing. */
|
|
114
|
+
export async function recordFileView(ctx, sessionId, requested) {
|
|
115
|
+
const real = await resolveInWorkspace(ctx.job.workspace.path, requested);
|
|
116
|
+
const bytes = await readFile(real).catch((error) => {
|
|
117
|
+
if (codeOf(error) === 'ENOENT')
|
|
118
|
+
return undefined;
|
|
119
|
+
throw error;
|
|
120
|
+
});
|
|
121
|
+
if (bytes === undefined)
|
|
122
|
+
return;
|
|
123
|
+
await ctx.store.transaction((tx) => setView(txRecords(tx), { sessionId, shown: requested, real }, fingerprintOf(bytes)));
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=file-change.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-change.js","sourceRoot":"","sources":["../../src/files/file-change.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Ctx } from '@kvman/sdk';
|
|
2
|
+
import { type ChangedFile } from './file-change.ts';
|
|
3
|
+
/** The most pieces of one file, and the bytes one piece holds at most. */
|
|
4
|
+
export declare const partsLimit = 200;
|
|
5
|
+
export declare const partBytes: number;
|
|
6
|
+
export declare function savePart(ctx: Ctx, file: ChangedFile, part: number, content: string): Promise<{
|
|
7
|
+
path: string;
|
|
8
|
+
part: number;
|
|
9
|
+
parts: number[];
|
|
10
|
+
bytes: number;
|
|
11
|
+
}>;
|
|
12
|
+
export declare function assembleParts(ctx: Ctx, file: ChangedFile): Promise<{
|
|
13
|
+
path: string;
|
|
14
|
+
created: boolean;
|
|
15
|
+
bytes: number;
|
|
16
|
+
parts: number;
|
|
17
|
+
}>;
|
|
18
|
+
//# sourceMappingURL=file-parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-parts.d.ts","sourceRoot":"","sources":["../../src/files/file-parts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAItC,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAKhE,0EAA0E;AAC1E,eAAO,MAAM,UAAU,MAAM,CAAC;AAC9B,eAAO,MAAM,SAAS,QAAY,CAAC;AAInC,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAU5J;AAED,wBAAgB,aAAa,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,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAWpI"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { invalid, notFound, tooLarge } from "../problems.js";
|
|
2
|
+
import { now } from "../sessions/session-lookup.js";
|
|
3
|
+
import { txRecords } from "../store/collections.js";
|
|
4
|
+
import { changeFile } from "./file-change.js";
|
|
5
|
+
// A long file written in numbered pieces (ADR 0054, 2 and 3): each piece is held in kvman's store, a number sent again
|
|
6
|
+
// replaces its piece, and `assemble` writes the whole file at once through the safe change.
|
|
7
|
+
/** The most pieces of one file, and the bytes one piece holds at most. */
|
|
8
|
+
export const partsLimit = 200;
|
|
9
|
+
export const partBytes = 64 * 1024;
|
|
10
|
+
const held = (store, file) => store.fileParts.find({ sessionId: file.sessionId, path: file.real }, { limit: partsLimit }).sort((left, right) => left.part - right.part);
|
|
11
|
+
export function savePart(ctx, file, part, content) {
|
|
12
|
+
if (Buffer.byteLength(content) > partBytes)
|
|
13
|
+
throw tooLarge(`Part ${String(part)} of ${file.shown} is over ${String(partBytes)} bytes. Send it as smaller parts.`, partBytes);
|
|
14
|
+
return ctx.store.transaction((tx) => {
|
|
15
|
+
const store = txRecords(tx);
|
|
16
|
+
const [same] = store.fileParts.find({ sessionId: file.sessionId, path: file.real, part }, { limit: 1 });
|
|
17
|
+
if (same === undefined)
|
|
18
|
+
store.fileParts.insert({ sessionId: file.sessionId, path: file.real, part, content, updatedAt: now() });
|
|
19
|
+
else
|
|
20
|
+
store.fileParts.update(same.id, { content, updatedAt: now() });
|
|
21
|
+
const parts = held(store, file);
|
|
22
|
+
return { path: file.shown, part, parts: parts.map((saved) => saved.part), bytes: parts.reduce((total, saved) => total + Buffer.byteLength(saved.content), 0) };
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
export function assembleParts(ctx, file) {
|
|
26
|
+
return changeFile(ctx, file, (_previous, store) => {
|
|
27
|
+
const parts = held(store, file);
|
|
28
|
+
const last = parts.at(-1)?.part;
|
|
29
|
+
if (last === undefined)
|
|
30
|
+
throw notFound(`This chat holds no parts of ${file.shown}. Save them with fs part first.`, { path: file.shown });
|
|
31
|
+
const missing = Array.from({ length: last }, (_, index) => index + 1).filter((number) => !parts.some((saved) => saved.part === number));
|
|
32
|
+
if (missing.length > 0)
|
|
33
|
+
throw invalid(`${file.shown} is missing part ${missing.join(', ')}. Save it with fs part, then assemble again. Nothing was written.`, { path: file.shown });
|
|
34
|
+
const content = Buffer.from(parts.map((saved) => saved.content).join(''), 'utf8');
|
|
35
|
+
for (const saved of parts)
|
|
36
|
+
store.fileParts.delete(saved.id);
|
|
37
|
+
return { content, value: { path: file.shown, bytes: content.length, parts: parts.length } };
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=file-parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-parts.js","sourceRoot":"","sources":["../../src/files/file-parts.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,10 +8,18 @@ export type FileRead = {
|
|
|
8
8
|
fromLine: number;
|
|
9
9
|
totalLines: number;
|
|
10
10
|
content: string;
|
|
11
|
+
truncated: boolean;
|
|
12
|
+
next?: {
|
|
13
|
+
fromLine: number;
|
|
14
|
+
fromColumn?: number;
|
|
15
|
+
};
|
|
11
16
|
};
|
|
17
|
+
/** What the chat last saw of a file, by its real path, when it has read it. */
|
|
18
|
+
export type SeenFile = (real: string) => Promise<string | undefined>;
|
|
12
19
|
export declare function readLines(workspace: string, input: {
|
|
13
20
|
path: string;
|
|
14
21
|
fromLine?: number | undefined;
|
|
22
|
+
fromColumn?: number | undefined;
|
|
15
23
|
lines?: number | undefined;
|
|
16
|
-
}): Promise<FileRead>;
|
|
24
|
+
}, seen?: SeenFile): Promise<FileRead>;
|
|
17
25
|
//# sourceMappingURL=read-file.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-file.d.ts","sourceRoot":"","sources":["../../src/files/read-file.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"read-file.d.ts","sourceRoot":"","sources":["../../src/files/read-file.ts"],"names":[],"mappings":"AASA,wDAAwD;AACxD,eAAO,MAAM,cAAc,OAAO,CAAC;AAMnC,eAAO,MAAM,SAAS,GAAI,OAAO,OAAO,KAAG,OAA6G,CAAC;AAEzJ,+FAA+F;AAC/F,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAOhE;AAED,MAAM,MAAM,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAErK,+EAA+E;AAC/E,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAcrE,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAiC1M"}
|
package/dist/files/read-file.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { readFile, stat } from 'node:fs/promises';
|
|
2
2
|
import { invalid, notFound } from "../problems.js";
|
|
3
|
+
import { fingerprintOf } from "./file-change.js";
|
|
3
4
|
import { resolveInWorkspace } from "./workspace-path.js";
|
|
4
5
|
// `fs read` (plan 08 §8.5, ADR 0011, 8): whole lines of a text file inside the workspace folder, at most 2000 of them
|
|
5
|
-
// and 30 KB, with the file's line count
|
|
6
|
+
// and 30 KB, with the file's line count, and where to read on when something was left out, also inside one very long
|
|
7
|
+
// line (ADR 0055, 1).
|
|
6
8
|
/** The most lines one read returns, and the default. */
|
|
7
9
|
export const readLinesLimit = 2000;
|
|
8
10
|
const contentLimit = 30 * 1024;
|
|
@@ -19,11 +21,19 @@ export function decodeText(bytes) {
|
|
|
19
21
|
throw error;
|
|
20
22
|
}
|
|
21
23
|
}
|
|
22
|
-
// The
|
|
23
|
-
function
|
|
24
|
-
|
|
24
|
+
// The whole characters of `text` that fit the limit, counted from its start.
|
|
25
|
+
function fitting(characters) {
|
|
26
|
+
let bytes = 0;
|
|
27
|
+
let count = 0;
|
|
28
|
+
for (const character of characters) {
|
|
29
|
+
bytes += Buffer.byteLength(character);
|
|
30
|
+
if (bytes > contentLimit)
|
|
31
|
+
break;
|
|
32
|
+
count += 1;
|
|
33
|
+
}
|
|
34
|
+
return count;
|
|
25
35
|
}
|
|
26
|
-
export async function readLines(workspace, input) {
|
|
36
|
+
export async function readLines(workspace, input, seen) {
|
|
27
37
|
const target = await resolveInWorkspace(workspace, input.path);
|
|
28
38
|
const found = await stat(target).catch((error) => {
|
|
29
39
|
if (isMissing(error))
|
|
@@ -32,22 +42,34 @@ export async function readLines(workspace, input) {
|
|
|
32
42
|
});
|
|
33
43
|
if (found.isDirectory())
|
|
34
44
|
throw invalid(`${input.path} is a folder; list it with fs list.`, { path: input.path });
|
|
35
|
-
const
|
|
45
|
+
const bytes = await readFile(target);
|
|
46
|
+
const decoded = decodeText(bytes);
|
|
36
47
|
if (decoded === undefined)
|
|
37
48
|
throw invalid(`${input.path} isn't valid UTF-8 text, so it isn't read.`, { path: input.path });
|
|
49
|
+
// Reading on inside a line joins two reads, so both must be of the same content (ADR 0055, 1).
|
|
50
|
+
const view = input.fromColumn === undefined ? undefined : await seen?.(target);
|
|
51
|
+
if (view !== undefined && view !== fingerprintOf(bytes))
|
|
52
|
+
throw invalid(`${input.path} changed since you started reading it. Read it again from its start.`, { path: input.path });
|
|
38
53
|
const all = decoded.match(/[^\n]*\n|[^\n]+$/g) ?? [];
|
|
39
54
|
const fromLine = input.fromLine ?? 1;
|
|
55
|
+
const fromColumn = input.fromColumn ?? 1;
|
|
40
56
|
const wanted = all.slice(fromLine - 1, fromLine - 1 + (input.lines ?? readLinesLimit));
|
|
57
|
+
const first = [...(wanted[0] ?? '')].slice(fromColumn - 1);
|
|
58
|
+
const lines = wanted.length === 0 ? [] : [first.join(''), ...wanted.slice(1)];
|
|
41
59
|
const kept = [];
|
|
42
|
-
let
|
|
43
|
-
for (const line of
|
|
44
|
-
|
|
45
|
-
if (
|
|
60
|
+
let size = 0;
|
|
61
|
+
for (const line of lines) {
|
|
62
|
+
size += Buffer.byteLength(line);
|
|
63
|
+
if (size > contentLimit)
|
|
46
64
|
break;
|
|
47
65
|
kept.push(line);
|
|
48
66
|
}
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
67
|
+
const base = { path: input.path, fromLine, totalLines: all.length };
|
|
68
|
+
if (kept.length === 0 && lines.length > 0) {
|
|
69
|
+
const taken = fitting(first);
|
|
70
|
+
return { ...base, content: first.slice(0, taken).join(''), truncated: true, next: { fromLine, fromColumn: fromColumn + taken } };
|
|
71
|
+
}
|
|
72
|
+
const nextLine = fromLine + kept.length;
|
|
73
|
+
return nextLine > all.length ? { ...base, content: kept.join(''), truncated: false } : { ...base, content: kept.join(''), truncated: true, next: { fromLine: nextLine } };
|
|
52
74
|
}
|
|
53
75
|
//# sourceMappingURL=read-file.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-file.js","sourceRoot":"","sources":["../../src/files/read-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,sHAAsH;AACtH,
|
|
1
|
+
{"version":3,"file":"read-file.js","sourceRoot":"","sources":["../../src/files/read-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/** The time one file's matching gets, and a whole search. */
|
|
2
|
+
export type SearchLimits = {
|
|
3
|
+
fileMs: number;
|
|
4
|
+
totalMs: number;
|
|
5
|
+
};
|
|
6
|
+
export declare const searchLimits: SearchLimits;
|
|
1
7
|
export type Match = {
|
|
2
8
|
line: number;
|
|
3
9
|
text: string;
|
|
@@ -10,9 +16,13 @@ export type FileMatches = {
|
|
|
10
16
|
export type SearchResult = {
|
|
11
17
|
files: FileMatches[];
|
|
12
18
|
truncated: boolean;
|
|
19
|
+
reason?: 'matches' | 'time';
|
|
13
20
|
};
|
|
14
|
-
export
|
|
21
|
+
export type SearchInput = {
|
|
15
22
|
pattern: string;
|
|
16
23
|
path?: string | undefined;
|
|
17
|
-
|
|
24
|
+
literal?: boolean | undefined;
|
|
25
|
+
glob?: string | undefined;
|
|
26
|
+
};
|
|
27
|
+
export declare function searchText(workspace: string, input: SearchInput, signal: AbortSignal, limits?: SearchLimits): Promise<SearchResult>;
|
|
18
28
|
//# sourceMappingURL=search-text.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-text.d.ts","sourceRoot":"","sources":["../../src/files/search-text.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"search-text.d.ts","sourceRoot":"","sources":["../../src/files/search-text.ts"],"names":[],"mappings":"AAiBA,6DAA6D;AAC7D,MAAM,MAAM,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAC/D,eAAO,MAAM,YAAY,EAAE,YAAiD,CAAC;AAE7E,MAAM,MAAM,KAAK,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnD,sEAAsE;AACtE,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,EAAE,CAAA;CAAE,CAAC;AAE7D,MAAM,MAAM,YAAY,GAAG;IAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;CAAE,CAAC;AACrG,MAAM,MAAM,WAAW,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAyEnI,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAE,YAA2B,GAAG,OAAO,CAAC,YAAY,CAAC,CAmCvJ"}
|
|
@@ -1,14 +1,20 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { lstat, readdir, readFile, realpath, stat } from 'node:fs/promises';
|
|
2
3
|
import path from 'node:path';
|
|
4
|
+
import { promisify } from 'node:util';
|
|
5
|
+
import { createContext, Script } from 'node:vm';
|
|
3
6
|
import { invalid, notFound } from "../problems.js";
|
|
4
7
|
import { decodeText, isMissing } from "./read-file.js";
|
|
5
8
|
import { resolveInWorkspace } from "./workspace-path.js";
|
|
6
|
-
// `fs search` (plan 08 §8.5, ADR 0011, 8): the lines that match a regular expression
|
|
7
|
-
// inside the workspace folder, in path order. Dependency and dot folders are skipped, and so is
|
|
8
|
-
// UTF-8 text; a symlink is never followed, so the walk can't leave the
|
|
9
|
+
// `fs search` (plan 08 §8.5, ADR 0011, 8; ADR 0055): the lines that match a regular expression or a plain text, in a
|
|
10
|
+
// file or under a folder inside the workspace folder, in path order. Dependency and dot folders are skipped, and so is
|
|
11
|
+
// what Git ignores and anything that isn't UTF-8 text; a symlink is never followed, so the walk can't leave the
|
|
12
|
+
// workspace or loop. A file's matching runs where it can be interrupted, so a slow expression is stopped.
|
|
9
13
|
const matchesLimit = 200;
|
|
10
14
|
const lineLimit = 500;
|
|
15
|
+
export const searchLimits = { fileMs: 2_000, totalMs: 10_000 };
|
|
11
16
|
const skipped = (name) => name === 'node_modules' || name.startsWith('.');
|
|
17
|
+
const run = promisify(execFile);
|
|
12
18
|
function expression(pattern) {
|
|
13
19
|
try {
|
|
14
20
|
return new RegExp(pattern);
|
|
@@ -19,6 +25,11 @@ function expression(pattern) {
|
|
|
19
25
|
throw error;
|
|
20
26
|
}
|
|
21
27
|
}
|
|
28
|
+
// A glob as an expression: `**` is any run, `*` any run but `/`, `?` one character but `/`.
|
|
29
|
+
function globExpression(glob) {
|
|
30
|
+
const body = glob.replace(/[.+^${}()|[\]\\]/g, '\\$&').replace(/\*\*\/?|\*|\?/g, (found) => (found.startsWith('**') ? '.*' : found === '*' ? '[^/]*' : '[^/]'));
|
|
31
|
+
return new RegExp(`^${body}$`);
|
|
32
|
+
}
|
|
22
33
|
// Every file under `folder`, in path order.
|
|
23
34
|
async function* filesUnder(folder, signal) {
|
|
24
35
|
for (const entry of (await readdir(folder, { withFileTypes: true })).sort((first, second) => (first.name < second.name ? -1 : 1))) {
|
|
@@ -32,8 +43,52 @@ async function* filesUnder(folder, signal) {
|
|
|
32
43
|
yield child;
|
|
33
44
|
}
|
|
34
45
|
}
|
|
35
|
-
|
|
36
|
-
|
|
46
|
+
// Git lists symlinks too, and a folder on the way may be one: only a regular file whose real path is under the
|
|
47
|
+
// searched folder is read, as the walk never follows a link.
|
|
48
|
+
async function regularInside(file, folder) {
|
|
49
|
+
const found = await lstat(file).catch(() => undefined);
|
|
50
|
+
if (found?.isFile() !== true)
|
|
51
|
+
return false;
|
|
52
|
+
const inside = path.relative(folder, await realpath(file));
|
|
53
|
+
return inside !== '' && !inside.startsWith('..') && !path.isAbsolute(inside);
|
|
54
|
+
}
|
|
55
|
+
// The files Git lists under `folder` as tracked or untracked and not ignored; `undefined` where Git can't say.
|
|
56
|
+
// A repository's own configuration may name a program as its file monitor, which listing would run: it is turned off.
|
|
57
|
+
async function gitFiles(folder, signal) {
|
|
58
|
+
let listed;
|
|
59
|
+
try {
|
|
60
|
+
listed = (await run('git', ['-c', 'core.fsmonitor=false', 'ls-files', '--cached', '--others', '--exclude-standard', '-z'], { cwd: folder, signal, maxBuffer: 64 * 1024 * 1024 })).stdout;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
signal.throwIfAborted();
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
const real = await realpath(folder);
|
|
67
|
+
const files = [];
|
|
68
|
+
for (const name of listed.split('\0').filter((entry) => entry !== '' && !entry.split('/').some(skipped)).sort()) {
|
|
69
|
+
const file = path.join(real, name);
|
|
70
|
+
if (await regularInside(file, real))
|
|
71
|
+
files.push(file);
|
|
72
|
+
}
|
|
73
|
+
return files;
|
|
74
|
+
}
|
|
75
|
+
const matching = new Script('lines.flatMap((line, index) => (pattern.test(line) ? [index] : []))');
|
|
76
|
+
// The numbers of the matching lines, or `undefined` when the expression passed its time (ADR 0055, 4).
|
|
77
|
+
function matchingLines(lines, pattern, timeoutMs) {
|
|
78
|
+
if (typeof pattern === 'string')
|
|
79
|
+
return lines.flatMap((line, index) => (line.includes(pattern) ? [index] : []));
|
|
80
|
+
try {
|
|
81
|
+
return matching.runInContext(createContext({ lines, pattern }), { timeout: Math.max(Math.ceil(timeoutMs), 1) });
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
// The error comes from the script's own context, so it is no `Error` of this one.
|
|
85
|
+
if (typeof error === 'object' && error !== null && 'code' in error && error.code === 'ERR_SCRIPT_EXECUTION_TIMEOUT')
|
|
86
|
+
return undefined;
|
|
87
|
+
throw error;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
export async function searchText(workspace, input, signal, limits = searchLimits) {
|
|
91
|
+
const pattern = input.literal === true ? input.pattern : expression(input.pattern);
|
|
37
92
|
const requested = input.path === undefined || input.path === '' ? '.' : input.path;
|
|
38
93
|
const target = await resolveInWorkspace(workspace, requested);
|
|
39
94
|
const found = await stat(target).catch((error) => {
|
|
@@ -42,28 +97,37 @@ export async function searchText(workspace, input, signal) {
|
|
|
42
97
|
throw error;
|
|
43
98
|
});
|
|
44
99
|
const base = await realpath(workspace);
|
|
45
|
-
const
|
|
100
|
+
const named = input.glob === undefined ? undefined : globExpression(input.glob);
|
|
101
|
+
const wanted = (file) => named === undefined || named.test(input.glob?.includes('/') === true ? path.relative(target, file).split(path.sep).join('/') : path.basename(file));
|
|
102
|
+
const files = !found.isDirectory() ? [target] : ((await gitFiles(target, signal)) ?? filesUnder(target, signal));
|
|
46
103
|
const grouped = [];
|
|
104
|
+
const started = Date.now();
|
|
47
105
|
let count = 0;
|
|
48
106
|
for await (const file of files) {
|
|
49
|
-
|
|
107
|
+
signal.throwIfAborted();
|
|
108
|
+
if (found.isDirectory() && !wanted(file))
|
|
109
|
+
continue;
|
|
110
|
+
const left = limits.totalMs - (Date.now() - started);
|
|
111
|
+
if (left <= 0)
|
|
112
|
+
return { files: grouped, truncated: true, reason: 'time' };
|
|
113
|
+
const bytes = await readFile(file).catch((error) => {
|
|
114
|
+
if (isMissing(error))
|
|
115
|
+
return undefined;
|
|
116
|
+
throw error;
|
|
117
|
+
});
|
|
118
|
+
const text = bytes === undefined ? undefined : decodeText(bytes);
|
|
50
119
|
if (text === undefined)
|
|
51
120
|
continue;
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
if (matches.length > 0)
|
|
64
|
-
grouped.push({ path: path.relative(base, file).split(path.sep).join('/'), matches });
|
|
65
|
-
if (full)
|
|
66
|
-
return { files: grouped, truncated: true };
|
|
121
|
+
const lines = text.split(/\r?\n/);
|
|
122
|
+
const hits = matchingLines(lines, pattern, Math.min(limits.fileMs, left));
|
|
123
|
+
if (hits === undefined)
|
|
124
|
+
return { files: grouped, truncated: true, reason: 'time' };
|
|
125
|
+
const kept = hits.slice(0, matchesLimit - count);
|
|
126
|
+
count += kept.length;
|
|
127
|
+
if (kept.length > 0)
|
|
128
|
+
grouped.push({ path: path.relative(base, file).split(path.sep).join('/'), matches: kept.map((index) => ({ line: index + 1, text: (lines[index] ?? '').slice(0, lineLimit) })) });
|
|
129
|
+
if (kept.length < hits.length)
|
|
130
|
+
return { files: grouped, truncated: true, reason: 'matches' };
|
|
67
131
|
}
|
|
68
132
|
return { files: grouped, truncated: false };
|
|
69
133
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-text.js","sourceRoot":"","sources":["../../src/files/search-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"search-text.js","sourceRoot":"","sources":["../../src/files/search-text.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAkCtC,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AACzE,YAAY,EAAE,MAAM,UAAU,CAAC;yBAGf,KAAK,GAAG,KAAG,IAAI;AAA/B,wBA0CE"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { registerArtifacts } from "./artifacts/register-artifacts.js";
|
|
2
2
|
import { registerConnectorHelp } from "./calls/connector-help.js";
|
|
3
3
|
import { registerArtifactConnector } from "./connectors/artifact.js";
|
|
4
|
+
import { registerExecutionMapConnector } from "./connectors/execution-map.js";
|
|
5
|
+
import { registerMaps } from "./maps/register-maps.js";
|
|
4
6
|
import { registerAskConnector } from "./connectors/ask.js";
|
|
5
7
|
import { registerBackgroundConnector } from "./connectors/background.js";
|
|
6
8
|
import { registerBinaryConnector } from "./connectors/binary.js";
|
|
@@ -42,6 +44,8 @@ export default (ctx) => {
|
|
|
42
44
|
registerBinaryConnector(ctx);
|
|
43
45
|
registerFsConnector(ctx);
|
|
44
46
|
registerArtifactConnector(ctx);
|
|
47
|
+
registerExecutionMapConnector(ctx);
|
|
48
|
+
registerMaps(ctx);
|
|
45
49
|
registerBackgroundConnector(ctx);
|
|
46
50
|
registerAskConnector(ctx);
|
|
47
51
|
registerDelegateConnector(ctx);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAClG,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAKjD,uHAAuH;AACvH,eAAe,CAAC,GAAQ,EAAQ,EAAE;IAChC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACtB,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACtB,eAAe,CAAC,GAAG,CAAC,CAAC;IACrB,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACxB,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACtB,aAAa,CAAC,GAAG,CAAC,CAAC;IACnB,YAAY,CAAC,GAAG,CAAC,CAAC;IAClB,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC5B,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC7B,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAC/B,6BAA6B,CAAC,GAAG,CAAC,CAAC;IACnC,YAAY,CAAC,GAAG,CAAC,CAAC;IAClB,2BAA2B,CAAC,GAAG,CAAC,CAAC;IACjC,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1B,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAC/B,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1B,WAAW,CAAC,GAAG,CAAC,CAAC;IACjB,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,YAAY,CAAC,GAAG,CAAC,CAAC;IAClB,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC7B,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACxB,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACtB,YAAY,CAAC,GAAG,CAAC,CAAC;IAClB,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,cAAc,CAAC,GAAG,CAAC,CAAC;IACpB,UAAU,CAAC,GAAG,CAAC,CAAC;IAChB,GAAG,CAAC,eAAe,CAAC,gBAAgB,EAAE;QACpC,WAAW,EAAE,yJAAyJ;QACtK,MAAM,EAAE,KAAK,IAAI,EAAE;YACjB,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;YAC3B,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAC9B,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAC9B,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;KACF,CAAC,CAAC;AACL,CAAC,CAAC"}
|
package/dist/jobs/job-rows.d.ts
CHANGED
|
@@ -8,15 +8,24 @@ export type JobRow = {
|
|
|
8
8
|
startedAt: string;
|
|
9
9
|
endedAt?: string;
|
|
10
10
|
exitCode?: number;
|
|
11
|
+
staging?: {
|
|
12
|
+
state: 'changed' | 'restored';
|
|
13
|
+
paths: number;
|
|
14
|
+
headMoved: boolean;
|
|
15
|
+
};
|
|
11
16
|
};
|
|
12
17
|
export type JobDetail = {
|
|
13
18
|
row: JobRow;
|
|
14
19
|
detail: Record<string, Json>;
|
|
15
20
|
};
|
|
21
|
+
/** How many of a process's last lines a read returns when it names no number. */
|
|
22
|
+
export declare const outputLines = 100;
|
|
16
23
|
/** One job of the session by its id, with its output or problem; `undefined` when the session started no such job. */
|
|
17
|
-
export declare function jobDetail(ctx: Ctx, sessionId: string, id: string): Promise<JobDetail | undefined>;
|
|
18
|
-
/** The session's newest
|
|
24
|
+
export declare function jobDetail(ctx: Ctx, sessionId: string, id: string, lines?: number): Promise<JobDetail | undefined>;
|
|
25
|
+
/** The session's jobs, newest first: every one still running, however old, and its newest ended ones to 50 rows in all (ADR 0057, 2). */
|
|
19
26
|
export declare function jobRows(ctx: Ctx, sessionId: string): Promise<JobRow[]>;
|
|
27
|
+
/** The chat's runs that are still running and that no turn waits on, as the agent is told of them (ADR 0068, 4). */
|
|
28
|
+
export declare function runningInBackground(ctx: Ctx, sessionId: string): Promise<string[]>;
|
|
20
29
|
/** What the person's list adds to a row: the localhost links in a process's output. */
|
|
21
30
|
export declare function linksOf(ctx: Ctx, sessionId: string, row: JobRow): Promise<string[]>;
|
|
22
31
|
/** Stops a process or a run, or cancels a subagent and tells the session; `false` for a process or a run that had ended already. */
|