@assemblyline-agents/runtime 2.0.0 → 3.0.0
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/LICENSE +1 -1
- package/dist/a2a-client.d.ts +22 -0
- package/dist/a2a-client.d.ts.map +1 -0
- package/dist/a2a-client.js +211 -0
- package/dist/a2a-client.js.map +1 -0
- package/dist/agent-hook-context.d.ts +6 -1
- package/dist/agent-hook-context.d.ts.map +1 -1
- package/dist/agent-hook-context.js +24 -11
- package/dist/agent-hook-context.js.map +1 -1
- package/dist/agent-hook-evaluation.d.ts +6 -1
- package/dist/agent-hook-evaluation.d.ts.map +1 -1
- package/dist/agent-hook-evaluation.js +16 -5
- package/dist/agent-hook-evaluation.js.map +1 -1
- package/dist/agent-hook-run-lifecycle.d.ts +5 -1
- package/dist/agent-hook-run-lifecycle.d.ts.map +1 -1
- package/dist/agent-hook-run-lifecycle.js +11 -13
- package/dist/agent-hook-run-lifecycle.js.map +1 -1
- package/dist/agent-surface.d.ts +32 -0
- package/dist/agent-surface.d.ts.map +1 -0
- package/dist/agent-surface.js +85 -0
- package/dist/agent-surface.js.map +1 -0
- package/dist/attachments.d.ts +5 -1
- package/dist/attachments.d.ts.map +1 -1
- package/dist/attachments.js +58 -32
- package/dist/attachments.js.map +1 -1
- package/dist/audience.d.ts +30 -0
- package/dist/audience.d.ts.map +1 -0
- package/dist/audience.js +68 -0
- package/dist/audience.js.map +1 -0
- package/dist/automation-event-match.d.ts +8 -0
- package/dist/automation-event-match.d.ts.map +1 -0
- package/dist/automation-event-match.js +25 -0
- package/dist/automation-event-match.js.map +1 -0
- package/dist/background-review-trigger.d.ts.map +1 -1
- package/dist/background-review-trigger.js +14 -16
- package/dist/background-review-trigger.js.map +1 -1
- package/dist/background-review-types.d.ts +9 -2
- package/dist/background-review-types.d.ts.map +1 -1
- package/dist/background-review-worker.js +2 -2
- package/dist/background-review-worker.js.map +1 -1
- package/dist/background-review.d.ts.map +1 -1
- package/dist/background-review.js +27 -10
- package/dist/background-review.js.map +1 -1
- package/dist/builtin-tool-executors.d.ts +47 -21
- package/dist/builtin-tool-executors.d.ts.map +1 -1
- package/dist/builtin-tool-executors.js +293 -121
- package/dist/builtin-tool-executors.js.map +1 -1
- package/dist/builtin-tools.d.ts +16 -8
- package/dist/builtin-tools.d.ts.map +1 -1
- package/dist/builtin-tools.js +309 -70
- package/dist/builtin-tools.js.map +1 -1
- package/dist/capability-catalog.d.ts +3 -2
- package/dist/capability-catalog.d.ts.map +1 -1
- package/dist/capability-catalog.js +10 -6
- package/dist/capability-catalog.js.map +1 -1
- package/dist/capability-inspection.d.ts +31 -0
- package/dist/capability-inspection.d.ts.map +1 -0
- package/dist/capability-inspection.js +58 -0
- package/dist/capability-inspection.js.map +1 -0
- package/dist/channel-http-util.d.ts.map +1 -1
- package/dist/channel-http-util.js +6 -2
- package/dist/channel-http-util.js.map +1 -1
- package/dist/channel-ingress.d.ts +16 -1
- package/dist/channel-ingress.d.ts.map +1 -1
- package/dist/channel-ingress.js +117 -7
- package/dist/channel-ingress.js.map +1 -1
- package/dist/channel.d.ts +58 -2
- package/dist/channel.d.ts.map +1 -1
- package/dist/checkpoints.d.ts +1 -1
- package/dist/checkpoints.d.ts.map +1 -1
- package/dist/checkpoints.js +6 -6
- package/dist/checkpoints.js.map +1 -1
- package/dist/child-process-env.d.ts +7 -0
- package/dist/child-process-env.d.ts.map +1 -0
- package/dist/child-process-env.js +41 -0
- package/dist/child-process-env.js.map +1 -0
- package/dist/computer-relay-protocol.d.ts.map +1 -1
- package/dist/computer-relay-protocol.js +4 -4
- package/dist/computer-relay-protocol.js.map +1 -1
- package/dist/concurrency.d.ts +1 -1
- package/dist/concurrency.js +1 -1
- package/dist/connection-auth-util.d.ts +1 -0
- package/dist/connection-auth-util.d.ts.map +1 -1
- package/dist/connection-auth-util.js +1 -1
- package/dist/connection-auth-util.js.map +1 -1
- package/dist/connection-clients.d.ts +11 -3
- package/dist/connection-clients.d.ts.map +1 -1
- package/dist/connection-clients.js +71 -8
- package/dist/connection-clients.js.map +1 -1
- package/dist/connection-event-store.d.ts +98 -0
- package/dist/connection-event-store.d.ts.map +1 -0
- package/dist/connection-event-store.js +162 -0
- package/dist/connection-event-store.js.map +1 -0
- package/dist/connection-events.d.ts +51 -0
- package/dist/connection-events.d.ts.map +1 -0
- package/dist/connection-events.js +343 -0
- package/dist/connection-events.js.map +1 -0
- package/dist/connection-stores.d.ts +3 -0
- package/dist/connection-stores.d.ts.map +1 -1
- package/dist/connection-stores.js +4 -1
- package/dist/connection-stores.js.map +1 -1
- package/dist/connection-util.d.ts +3 -2
- package/dist/connection-util.d.ts.map +1 -1
- package/dist/connection-util.js +18 -1
- package/dist/connection-util.js.map +1 -1
- package/dist/connections.d.ts +54 -5
- package/dist/connections.d.ts.map +1 -1
- package/dist/connections.js +342 -53
- package/dist/connections.js.map +1 -1
- package/dist/context-policy-util.d.ts.map +1 -1
- package/dist/context-policy-util.js +1 -3
- package/dist/context-policy-util.js.map +1 -1
- package/dist/conversation-context.d.ts +6 -2
- package/dist/conversation-context.d.ts.map +1 -1
- package/dist/conversation-context.js +45 -12
- package/dist/conversation-context.js.map +1 -1
- package/dist/conversation-transcript.d.ts +8 -5
- package/dist/conversation-transcript.d.ts.map +1 -1
- package/dist/conversation-transcript.js +24 -5
- package/dist/conversation-transcript.js.map +1 -1
- package/dist/conversation-turn-coalescing.d.ts +22 -0
- package/dist/conversation-turn-coalescing.d.ts.map +1 -0
- package/dist/conversation-turn-coalescing.js +121 -0
- package/dist/conversation-turn-coalescing.js.map +1 -0
- package/dist/conversation-turn-dispatch.d.ts +5 -2
- package/dist/conversation-turn-dispatch.d.ts.map +1 -1
- package/dist/conversation-turn-dispatch.js +59 -22
- package/dist/conversation-turn-dispatch.js.map +1 -1
- package/dist/default-outbound-route.d.ts +29 -0
- package/dist/default-outbound-route.d.ts.map +1 -0
- package/dist/default-outbound-route.js +105 -0
- package/dist/default-outbound-route.js.map +1 -0
- package/dist/delivery-artifacts.d.ts +2 -0
- package/dist/delivery-artifacts.d.ts.map +1 -0
- package/dist/delivery-artifacts.js +34 -0
- package/dist/delivery-artifacts.js.map +1 -0
- package/dist/delivery-files.d.ts +5 -0
- package/dist/delivery-files.d.ts.map +1 -0
- package/dist/delivery-files.js +33 -0
- package/dist/delivery-files.js.map +1 -0
- package/dist/delivery-queue.d.ts +21 -1
- package/dist/delivery-queue.d.ts.map +1 -1
- package/dist/delivery-queue.js +144 -1
- package/dist/delivery-queue.js.map +1 -1
- package/dist/delivery-send.d.ts +2 -2
- package/dist/delivery-send.d.ts.map +1 -1
- package/dist/delivery-send.js +256 -100
- package/dist/delivery-send.js.map +1 -1
- package/dist/durable-files.d.ts +37 -0
- package/dist/durable-files.d.ts.map +1 -0
- package/dist/durable-files.js +63 -0
- package/dist/durable-files.js.map +1 -0
- package/dist/harness-loop.d.ts +6 -1
- package/dist/harness-loop.d.ts.map +1 -1
- package/dist/harness-loop.js +110 -25
- package/dist/harness-loop.js.map +1 -1
- package/dist/heic-transcode-worker.d.ts +2 -0
- package/dist/heic-transcode-worker.d.ts.map +1 -0
- package/dist/heic-transcode-worker.js +59 -0
- package/dist/heic-transcode-worker.js.map +1 -0
- package/dist/heic-transcode.d.ts +18 -0
- package/dist/heic-transcode.d.ts.map +1 -0
- package/dist/heic-transcode.js +99 -0
- package/dist/heic-transcode.js.map +1 -0
- package/dist/human-input-routing.d.ts +22 -0
- package/dist/human-input-routing.d.ts.map +1 -0
- package/dist/human-input-routing.js +26 -0
- package/dist/human-input-routing.js.map +1 -0
- package/dist/in-memory-conversation-turn-store.d.ts +3 -1
- package/dist/in-memory-conversation-turn-store.d.ts.map +1 -1
- package/dist/in-memory-conversation-turn-store.js +41 -2
- package/dist/in-memory-conversation-turn-store.js.map +1 -1
- package/dist/in-memory-run-store.d.ts +8 -0
- package/dist/in-memory-run-store.d.ts.map +1 -1
- package/dist/in-memory-run-store.js +28 -5
- package/dist/in-memory-run-store.js.map +1 -1
- package/dist/in-memory-sandbox-session-store.d.ts +2 -1
- package/dist/in-memory-sandbox-session-store.d.ts.map +1 -1
- package/dist/in-memory-sandbox-session-store.js +65 -1
- package/dist/in-memory-sandbox-session-store.js.map +1 -1
- package/dist/in-memory-small-stores.d.ts +18 -1
- package/dist/in-memory-small-stores.d.ts.map +1 -1
- package/dist/in-memory-small-stores.js +107 -1
- package/dist/in-memory-small-stores.js.map +1 -1
- package/dist/in-memory-workspace-store.d.ts +40 -0
- package/dist/in-memory-workspace-store.d.ts.map +1 -0
- package/dist/in-memory-workspace-store.js +370 -0
- package/dist/in-memory-workspace-store.js.map +1 -0
- package/dist/index.d.ts +73 -36
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +390 -258
- package/dist/index.js.map +1 -1
- package/dist/json-util.d.ts +8 -0
- package/dist/json-util.d.ts.map +1 -1
- package/dist/json-util.js +8 -0
- package/dist/json-util.js.map +1 -1
- package/dist/local-sandbox.d.ts +3 -2
- package/dist/local-sandbox.d.ts.map +1 -1
- package/dist/local-sandbox.js +69 -25
- package/dist/local-sandbox.js.map +1 -1
- package/dist/mcp-client.d.ts.map +1 -1
- package/dist/mcp-client.js +3 -2
- package/dist/mcp-client.js.map +1 -1
- package/dist/media-processor.d.ts +42 -0
- package/dist/media-processor.d.ts.map +1 -0
- package/dist/media-processor.js +2 -0
- package/dist/media-processor.js.map +1 -0
- package/dist/model-media.d.ts +13 -1
- package/dist/model-media.d.ts.map +1 -1
- package/dist/model-media.js +81 -18
- package/dist/model-media.js.map +1 -1
- package/dist/model-visible-interrupts.d.ts +10 -0
- package/dist/model-visible-interrupts.d.ts.map +1 -0
- package/dist/model-visible-interrupts.js +41 -0
- package/dist/model-visible-interrupts.js.map +1 -0
- package/dist/operator-controls.d.ts.map +1 -1
- package/dist/operator-controls.js +16 -3
- package/dist/operator-controls.js.map +1 -1
- package/dist/outbound-http-policy.d.ts +7 -0
- package/dist/outbound-http-policy.d.ts.map +1 -0
- package/dist/outbound-http-policy.js +155 -0
- package/dist/outbound-http-policy.js.map +1 -0
- package/dist/public-api.d.ts +21 -0
- package/dist/public-api.d.ts.map +1 -0
- package/dist/public-api.js +19 -0
- package/dist/public-api.js.map +1 -0
- package/dist/replay-resume.d.ts +8 -0
- package/dist/replay-resume.d.ts.map +1 -1
- package/dist/replay-resume.js +141 -11
- package/dist/replay-resume.js.map +1 -1
- package/dist/resource-projection-util.d.ts +1 -1
- package/dist/resource-projection-util.d.ts.map +1 -1
- package/dist/resource-projection-util.js +21 -10
- package/dist/resource-projection-util.js.map +1 -1
- package/dist/resource-projection.d.ts +8 -1
- package/dist/resource-projection.d.ts.map +1 -1
- package/dist/resource-projection.js +229 -29
- package/dist/resource-projection.js.map +1 -1
- package/dist/run-heartbeat.d.ts +12 -2
- package/dist/run-heartbeat.d.ts.map +1 -1
- package/dist/run-heartbeat.js +31 -4
- package/dist/run-heartbeat.js.map +1 -1
- package/dist/run-outcome.d.ts +9 -5
- package/dist/run-outcome.d.ts.map +1 -1
- package/dist/run-outcome.js +14 -5
- package/dist/run-outcome.js.map +1 -1
- package/dist/run-recovery.d.ts +19 -3
- package/dist/run-recovery.d.ts.map +1 -1
- package/dist/run-recovery.js +205 -34
- package/dist/run-recovery.js.map +1 -1
- package/dist/run-replay.d.ts +35 -0
- package/dist/run-replay.d.ts.map +1 -0
- package/dist/run-replay.js +193 -0
- package/dist/run-replay.js.map +1 -0
- package/dist/run-result.d.ts +4 -0
- package/dist/run-result.d.ts.map +1 -0
- package/dist/run-result.js +18 -0
- package/dist/run-result.js.map +1 -0
- package/dist/run-timeline-query.d.ts +38 -0
- package/dist/run-timeline-query.d.ts.map +1 -0
- package/dist/run-timeline-query.js +99 -0
- package/dist/run-timeline-query.js.map +1 -0
- package/dist/runs-query.d.ts.map +1 -1
- package/dist/runs-query.js +11 -3
- package/dist/runs-query.js.map +1 -1
- package/dist/runtime-bundle.d.ts.map +1 -1
- package/dist/runtime-bundle.js +2 -0
- package/dist/runtime-bundle.js.map +1 -1
- package/dist/runtime-learning.d.ts +15 -13
- package/dist/runtime-learning.d.ts.map +1 -1
- package/dist/runtime-learning.js +79 -58
- package/dist/runtime-learning.js.map +1 -1
- package/dist/runtime-types.d.ts +68 -9
- package/dist/runtime-types.d.ts.map +1 -1
- package/dist/sandbox-fs.d.ts +8 -5
- package/dist/sandbox-fs.d.ts.map +1 -1
- package/dist/sandbox-fs.js +30 -31
- package/dist/sandbox-fs.js.map +1 -1
- package/dist/sandbox-handle.d.ts +25 -0
- package/dist/sandbox-handle.d.ts.map +1 -0
- package/dist/sandbox-handle.js +120 -0
- package/dist/sandbox-handle.js.map +1 -0
- package/dist/sandbox-session-identity.d.ts +14 -0
- package/dist/sandbox-session-identity.d.ts.map +1 -0
- package/dist/sandbox-session-identity.js +33 -0
- package/dist/sandbox-session-identity.js.map +1 -0
- package/dist/sandbox-session-key.d.ts.map +1 -1
- package/dist/sandbox-session-key.js +12 -9
- package/dist/sandbox-session-key.js.map +1 -1
- package/dist/sandbox-session-lifecycle.d.ts.map +1 -1
- package/dist/sandbox-session-lifecycle.js +187 -44
- package/dist/sandbox-session-lifecycle.js.map +1 -1
- package/dist/sandbox-snapshot-policy.js +3 -3
- package/dist/sandbox-snapshot-policy.js.map +1 -1
- package/dist/sandbox-state-sync.d.ts +4 -2
- package/dist/sandbox-state-sync.d.ts.map +1 -1
- package/dist/sandbox-state-sync.js +47 -15
- package/dist/sandbox-state-sync.js.map +1 -1
- package/dist/sandbox-sync-worker.d.ts +11 -2
- package/dist/sandbox-sync-worker.d.ts.map +1 -1
- package/dist/sandbox-sync-worker.js +143 -31
- package/dist/sandbox-sync-worker.js.map +1 -1
- package/dist/schedule-execution.d.ts.map +1 -1
- package/dist/schedule-execution.js +127 -23
- package/dist/schedule-execution.js.map +1 -1
- package/dist/sdk-api-client.d.ts +17 -0
- package/dist/sdk-api-client.d.ts.map +1 -0
- package/dist/sdk-api-client.js +55 -0
- package/dist/sdk-api-client.js.map +1 -0
- package/dist/security.js +2 -2
- package/dist/security.js.map +1 -1
- package/dist/self-improvement.d.ts +5 -1
- package/dist/self-improvement.d.ts.map +1 -1
- package/dist/self-improvement.js +28 -14
- package/dist/self-improvement.js.map +1 -1
- package/dist/skill-bundles.d.ts +55 -0
- package/dist/skill-bundles.d.ts.map +1 -0
- package/dist/skill-bundles.js +134 -0
- package/dist/skill-bundles.js.map +1 -0
- package/dist/source-loader.js +7 -7
- package/dist/source-loader.js.map +1 -1
- package/dist/state-store-helpers.d.ts +2 -0
- package/dist/state-store-helpers.d.ts.map +1 -1
- package/dist/state-store-helpers.js +11 -1
- package/dist/state-store-helpers.js.map +1 -1
- package/dist/state-stores.d.ts +1 -0
- package/dist/state-stores.d.ts.map +1 -1
- package/dist/state-stores.js +26 -7
- package/dist/state-stores.js.map +1 -1
- package/dist/state.d.ts +305 -5
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +41 -2
- package/dist/state.js.map +1 -1
- package/dist/storage.d.ts +47 -2
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +158 -6
- package/dist/storage.js.map +1 -1
- package/dist/subagent-execution.d.ts +1 -1
- package/dist/subagent-execution.d.ts.map +1 -1
- package/dist/subagent-execution.js +10 -12
- package/dist/subagent-execution.js.map +1 -1
- package/dist/target-instructions.js +1 -1
- package/dist/target-instructions.js.map +1 -1
- package/dist/tool-apis.d.ts.map +1 -1
- package/dist/tool-apis.js +33 -9
- package/dist/tool-apis.js.map +1 -1
- package/dist/tool-execution.d.ts +22 -12
- package/dist/tool-execution.d.ts.map +1 -1
- package/dist/tool-execution.js +368 -238
- package/dist/tool-execution.js.map +1 -1
- package/dist/turn-media.d.ts +29 -0
- package/dist/turn-media.d.ts.map +1 -0
- package/dist/turn-media.js +233 -0
- package/dist/turn-media.js.map +1 -0
- package/dist/usage-reconciliation.d.ts +1 -1
- package/dist/usage-reconciliation.js +1 -1
- package/dist/workspace-id.d.ts +10 -0
- package/dist/workspace-id.d.ts.map +1 -0
- package/dist/workspace-id.js +55 -0
- package/dist/workspace-id.js.map +1 -0
- package/dist/workspace-manifest.d.ts +24 -0
- package/dist/workspace-manifest.d.ts.map +1 -0
- package/dist/workspace-manifest.js +111 -0
- package/dist/workspace-manifest.js.map +1 -0
- package/dist/workspace-operation-limiter.d.ts +16 -0
- package/dist/workspace-operation-limiter.d.ts.map +1 -0
- package/dist/workspace-operation-limiter.js +31 -0
- package/dist/workspace-operation-limiter.js.map +1 -0
- package/dist/workspace-operations.d.ts +145 -0
- package/dist/workspace-operations.d.ts.map +1 -0
- package/dist/workspace-operations.js +420 -0
- package/dist/workspace-operations.js.map +1 -0
- package/dist/workspace-runtime.d.ts +110 -0
- package/dist/workspace-runtime.d.ts.map +1 -0
- package/dist/workspace-runtime.js +240 -0
- package/dist/workspace-runtime.js.map +1 -0
- package/dist/workspace-search.d.ts +55 -0
- package/dist/workspace-search.d.ts.map +1 -0
- package/dist/workspace-search.js +262 -0
- package/dist/workspace-search.js.map +1 -0
- package/dist/workspace-service.d.ts +173 -0
- package/dist/workspace-service.d.ts.map +1 -0
- package/dist/workspace-service.js +619 -0
- package/dist/workspace-service.js.map +1 -0
- package/dist/workspace.d.ts +7 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +7 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +7 -4
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { FILES_MOUNT_TOOL_NAME, FILES_SEARCH_TOOL_NAME } from "./builtin-tools.js";
|
|
2
|
+
import { resolvePositiveIntegerEnv } from "./env-config.js";
|
|
3
|
+
import { isJsonObject, safeJson } from "./json-util.js";
|
|
4
|
+
import { SlidingWindowWorkspaceOperationLimiter } from "./workspace-operation-limiter.js";
|
|
5
|
+
import { DurableFileService, durableFileEntryJson } from "./durable-files.js";
|
|
6
|
+
import { WorkspaceService } from "./workspace-service.js";
|
|
7
|
+
export class RuntimeWorkspaceManager {
|
|
8
|
+
options;
|
|
9
|
+
service;
|
|
10
|
+
files;
|
|
11
|
+
constructor(options) {
|
|
12
|
+
this.options = options;
|
|
13
|
+
const env = options.env;
|
|
14
|
+
this.service = new WorkspaceService({
|
|
15
|
+
state: options.state,
|
|
16
|
+
blob: options.blob,
|
|
17
|
+
agentScope: options.agentScope,
|
|
18
|
+
now: options.now,
|
|
19
|
+
operationLimiter: new SlidingWindowWorkspaceOperationLimiter({
|
|
20
|
+
windowMs: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_RATE_WINDOW_MS, 60_000),
|
|
21
|
+
limits: {
|
|
22
|
+
checkpoint: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_CHECKPOINTS_PER_WINDOW, 60),
|
|
23
|
+
restore: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_RESTORES_PER_WINDOW, 20),
|
|
24
|
+
fork: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_FORKS_PER_WINDOW, 20),
|
|
25
|
+
hydrate: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_HYDRATES_PER_WINDOW, 120),
|
|
26
|
+
sync: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_SYNCS_PER_WINDOW, 120)
|
|
27
|
+
}
|
|
28
|
+
}),
|
|
29
|
+
maxCheckpoints: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_MAX_CHECKPOINTS, 1_000),
|
|
30
|
+
...(options.embeddingProvider && (options.state.supportsWorkspaceEmbeddings?.() ?? true)
|
|
31
|
+
? { embeddingProvider: options.embeddingProvider }
|
|
32
|
+
: {}),
|
|
33
|
+
limits: {
|
|
34
|
+
maxFiles: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_MAX_FILES, 10_000),
|
|
35
|
+
maxFileBytes: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_MAX_FILE_BYTES, 100 * 1024 * 1024),
|
|
36
|
+
maxTotalBytes: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_MAX_TOTAL_BYTES, 1024 * 1024 * 1024)
|
|
37
|
+
},
|
|
38
|
+
searchLimits: {
|
|
39
|
+
maxIndexedFileBytes: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_SEARCH_MAX_FILE_BYTES, 1024 * 1024),
|
|
40
|
+
maxChunkChars: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_SEARCH_MAX_CHUNK_CHARS, 12_000),
|
|
41
|
+
chunkOverlapLines: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_SEARCH_CHUNK_OVERLAP_LINES, 5),
|
|
42
|
+
maxChunks: resolvePositiveIntegerEnv(env.ASSEMBLY_LINE_WORKSPACE_SEARCH_MAX_CHUNKS, 50_000)
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
this.files = new DurableFileService({
|
|
46
|
+
state: options.state,
|
|
47
|
+
blob: options.blob,
|
|
48
|
+
workspaces: this.service
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
async executeTool(run, toolName, input, sandboxHandle) {
|
|
52
|
+
const raw = isJsonObject(input) ? input : {};
|
|
53
|
+
if (toolName === FILES_SEARCH_TOOL_NAME) {
|
|
54
|
+
const query = stringValue(raw.query);
|
|
55
|
+
const limit = typeof raw.limit === "number" && Number.isFinite(raw.limit) ? raw.limit : undefined;
|
|
56
|
+
const result = await this.files.list(run, {
|
|
57
|
+
...(query ? { query } : {}),
|
|
58
|
+
...(limit !== undefined ? { limit } : {})
|
|
59
|
+
});
|
|
60
|
+
return safeJson({
|
|
61
|
+
workspaceId: result.workspaceId,
|
|
62
|
+
files: result.files.map(durableFileEntryJson)
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
if (toolName === FILES_MOUNT_TOOL_NAME) {
|
|
66
|
+
const fileId = stringValue(raw.fileId);
|
|
67
|
+
if (!fileId)
|
|
68
|
+
throw new Error(`${FILES_MOUNT_TOOL_NAME} requires fileId.`);
|
|
69
|
+
const sandbox = await sandboxHandle.get();
|
|
70
|
+
const result = await this.files.mount(run, fileId, sandbox);
|
|
71
|
+
return safeJson({
|
|
72
|
+
workspaceId: result.workspaceId,
|
|
73
|
+
file: durableFileEntryJson(result.file)
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
const workspace = await this.service.resolveForRun(run);
|
|
77
|
+
if (toolName === "workspace_search") {
|
|
78
|
+
const query = stringValue(raw.query);
|
|
79
|
+
if (!query)
|
|
80
|
+
throw new Error("workspace_search requires query.");
|
|
81
|
+
const versionId = stringValue(raw.versionId);
|
|
82
|
+
const limit = typeof raw.limit === "number" && Number.isFinite(raw.limit) ? raw.limit : undefined;
|
|
83
|
+
return safeJson(await this.service.search(workspace.id, query, {
|
|
84
|
+
...(versionId ? { versionId } : {}),
|
|
85
|
+
...(limit !== undefined ? { limit } : {})
|
|
86
|
+
}));
|
|
87
|
+
}
|
|
88
|
+
if (toolName === "workspace_status")
|
|
89
|
+
return safeJson(await this.service.status(workspace.id));
|
|
90
|
+
if (toolName === "workspace_checkpoint_create") {
|
|
91
|
+
const name = stringValue(raw.name);
|
|
92
|
+
if (!name)
|
|
93
|
+
throw new Error("workspace_checkpoint_create requires name.");
|
|
94
|
+
return safeJson(await this.service.createCheckpoint({
|
|
95
|
+
workspaceId: workspace.id,
|
|
96
|
+
name,
|
|
97
|
+
replace: raw.replace === true,
|
|
98
|
+
runId: run.id
|
|
99
|
+
}));
|
|
100
|
+
}
|
|
101
|
+
if (toolName === "workspace_checkpoint_list") {
|
|
102
|
+
return safeJson({ workspaceId: workspace.id, checkpoints: await this.service.listCheckpoints(workspace.id) });
|
|
103
|
+
}
|
|
104
|
+
if (toolName === "workspace_checkpoint_restore") {
|
|
105
|
+
const name = stringValue(raw.name);
|
|
106
|
+
if (!name)
|
|
107
|
+
throw new Error("workspace_checkpoint_restore requires name.");
|
|
108
|
+
const sessionKey = this.options.sandboxSessionKey(run);
|
|
109
|
+
const session = await this.options.state.getSandboxSession(sessionKey);
|
|
110
|
+
if (session?.dirty)
|
|
111
|
+
throw new Error("Sync the dirty workspace before restoring a checkpoint.");
|
|
112
|
+
const restored = await this.service.restoreCheckpoint({
|
|
113
|
+
workspaceId: workspace.id,
|
|
114
|
+
name,
|
|
115
|
+
runId: run.id,
|
|
116
|
+
idempotencyKey: `workspace-restore-tool:${run.id}:${name}`
|
|
117
|
+
});
|
|
118
|
+
const activeSandbox = sandboxHandle.current();
|
|
119
|
+
if (activeSandbox)
|
|
120
|
+
await this.service.hydrate(run, activeSandbox, sessionKey);
|
|
121
|
+
return safeJson(restored);
|
|
122
|
+
}
|
|
123
|
+
if (toolName === "workspace_fork") {
|
|
124
|
+
const checkpointName = stringValue(raw.checkpoint);
|
|
125
|
+
const name = stringValue(raw.name);
|
|
126
|
+
const tenantId = stringValue(run.input.tenantId);
|
|
127
|
+
const forked = await this.service.fork({
|
|
128
|
+
sourceWorkspaceId: workspace.id,
|
|
129
|
+
...(checkpointName ? { checkpointName } : {}),
|
|
130
|
+
...(name ? { name } : {}),
|
|
131
|
+
...(tenantId ? { tenantId } : {})
|
|
132
|
+
});
|
|
133
|
+
await this.options.state.appendEvent(run.id, "workspace.forked", {
|
|
134
|
+
sourceWorkspaceId: workspace.id,
|
|
135
|
+
sourceVersionId: forked.sourceVersionId ?? null,
|
|
136
|
+
workspaceId: forked.id
|
|
137
|
+
});
|
|
138
|
+
return safeJson(forked);
|
|
139
|
+
}
|
|
140
|
+
throw new Error(`Unsupported workspace tool: ${toolName}`);
|
|
141
|
+
}
|
|
142
|
+
listWorkspaces() {
|
|
143
|
+
return this.options.state.listWorkspaces({ agentScope: this.options.agentScope });
|
|
144
|
+
}
|
|
145
|
+
async listVersions(workspaceId, input = {}) {
|
|
146
|
+
await this.service.status(workspaceId);
|
|
147
|
+
return this.options.state.listWorkspaceVersions(workspaceId, input);
|
|
148
|
+
}
|
|
149
|
+
async sync(run, sandbox, job) {
|
|
150
|
+
const workspaceId = stringValue(job.manifest.workspaceId);
|
|
151
|
+
if (!workspaceId)
|
|
152
|
+
throw new Error(`Sandbox sync job is missing workspaceId: ${job.id}`);
|
|
153
|
+
const rawBaseVersionId = job.manifest.baseVersionId;
|
|
154
|
+
const baseVersionId = typeof rawBaseVersionId === "string"
|
|
155
|
+
? rawBaseVersionId
|
|
156
|
+
: rawBaseVersionId === null
|
|
157
|
+
? null
|
|
158
|
+
: undefined;
|
|
159
|
+
if (baseVersionId === undefined)
|
|
160
|
+
throw new Error(`Sandbox sync job is missing baseVersionId: ${job.id}`);
|
|
161
|
+
return this.service.sync({
|
|
162
|
+
run,
|
|
163
|
+
sandbox,
|
|
164
|
+
syncJobId: job.id,
|
|
165
|
+
sessionKey: this.options.sandboxSessionKey(run),
|
|
166
|
+
workspaceId,
|
|
167
|
+
baseVersionId
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
export class WorkspaceRuntimeMethods {
|
|
172
|
+
workspaceRuntime;
|
|
173
|
+
getWorkspaceStatus(workspaceId) {
|
|
174
|
+
return this.workspaceRuntime.service.status(workspaceId);
|
|
175
|
+
}
|
|
176
|
+
listWorkspaces() {
|
|
177
|
+
return this.workspaceRuntime.listWorkspaces();
|
|
178
|
+
}
|
|
179
|
+
listWorkspaceVersions(workspaceId, input = {}) {
|
|
180
|
+
return this.workspaceRuntime.listVersions(workspaceId, input);
|
|
181
|
+
}
|
|
182
|
+
readWorkspaceFile(workspaceId, path, versionId) {
|
|
183
|
+
return this.workspaceRuntime.service.readFile(workspaceId, path, versionId);
|
|
184
|
+
}
|
|
185
|
+
listWorkspaceFiles(workspaceId, input = {}) {
|
|
186
|
+
return this.workspaceRuntime.service.listFiles(workspaceId, input);
|
|
187
|
+
}
|
|
188
|
+
grepWorkspace(workspaceId, pattern, input = {}) {
|
|
189
|
+
return this.workspaceRuntime.service.grep(workspaceId, pattern, input);
|
|
190
|
+
}
|
|
191
|
+
searchWorkspace(workspaceId, query, input = {}) {
|
|
192
|
+
return this.workspaceRuntime.service.search(workspaceId, query, input);
|
|
193
|
+
}
|
|
194
|
+
applyWorkspaceRetention(workspaceId, input = {}) {
|
|
195
|
+
return this.workspaceRuntime.service.retention(workspaceId, input);
|
|
196
|
+
}
|
|
197
|
+
getWorkspaceReachability() {
|
|
198
|
+
return this.workspaceRuntime.service.reachability();
|
|
199
|
+
}
|
|
200
|
+
garbageCollectWorkspaces(input = {}) {
|
|
201
|
+
return this.workspaceRuntime.service.garbageCollect(input);
|
|
202
|
+
}
|
|
203
|
+
getWorkspaceUsage() {
|
|
204
|
+
return this.workspaceRuntime.service.usage();
|
|
205
|
+
}
|
|
206
|
+
getWorkspaceDiagnostics() {
|
|
207
|
+
return this.workspaceRuntime.service.diagnostics();
|
|
208
|
+
}
|
|
209
|
+
verifyWorkspaces(workspaceId) {
|
|
210
|
+
return this.workspaceRuntime.service.verify(workspaceId);
|
|
211
|
+
}
|
|
212
|
+
repairWorkspaceBlob(input) {
|
|
213
|
+
return this.workspaceRuntime.service.repairBlob(input);
|
|
214
|
+
}
|
|
215
|
+
repairWorkspaceHead(input) {
|
|
216
|
+
return this.workspaceRuntime.service.repairHead(input);
|
|
217
|
+
}
|
|
218
|
+
createWorkspaceCheckpoint(input) {
|
|
219
|
+
return this.workspaceRuntime.service.createCheckpoint(input);
|
|
220
|
+
}
|
|
221
|
+
listWorkspaceCheckpoints(workspaceId) {
|
|
222
|
+
return this.workspaceRuntime.service.listCheckpoints(workspaceId);
|
|
223
|
+
}
|
|
224
|
+
inspectWorkspaceCheckpoint(workspaceId, name) {
|
|
225
|
+
return this.workspaceRuntime.service.getCheckpoint(workspaceId, name);
|
|
226
|
+
}
|
|
227
|
+
deleteWorkspaceCheckpoint(workspaceId, name) {
|
|
228
|
+
return this.workspaceRuntime.service.deleteCheckpoint({ workspaceId, name });
|
|
229
|
+
}
|
|
230
|
+
restoreWorkspaceCheckpoint(input) {
|
|
231
|
+
return this.workspaceRuntime.service.restoreCheckpoint(input);
|
|
232
|
+
}
|
|
233
|
+
forkWorkspace(input) {
|
|
234
|
+
return this.workspaceRuntime.service.fork(input);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
function stringValue(value) {
|
|
238
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=workspace-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-runtime.js","sourceRoot":"","sources":["../src/workspace-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { BlobAdapter } from "./runtime-types.js";
|
|
2
|
+
import type { MemoryEmbeddingProvider, WorkspaceManifest, WorkspaceManifestEntry, WorkspaceSearchChunk, WorkspaceSearchResult } from "./state.js";
|
|
3
|
+
export interface WorkspaceSearchLimits {
|
|
4
|
+
maxIndexedFileBytes: number;
|
|
5
|
+
maxChunkChars: number;
|
|
6
|
+
chunkOverlapLines: number;
|
|
7
|
+
maxChunks: number;
|
|
8
|
+
}
|
|
9
|
+
export declare const DEFAULT_WORKSPACE_SEARCH_LIMITS: WorkspaceSearchLimits;
|
|
10
|
+
export interface WorkspaceSearchBuildResult {
|
|
11
|
+
chunks: WorkspaceSearchChunk[];
|
|
12
|
+
excluded: Array<{
|
|
13
|
+
path: string;
|
|
14
|
+
reason: "binary" | "oversized" | "ignored" | "secret";
|
|
15
|
+
}>;
|
|
16
|
+
embeddingModel?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function buildWorkspaceSearchChunks(input: {
|
|
19
|
+
workspaceId: string;
|
|
20
|
+
versionId: string;
|
|
21
|
+
manifest: WorkspaceManifest;
|
|
22
|
+
blob: BlobAdapter;
|
|
23
|
+
now: Date;
|
|
24
|
+
embeddingProvider?: MemoryEmbeddingProvider;
|
|
25
|
+
limits?: WorkspaceSearchLimits;
|
|
26
|
+
}): Promise<WorkspaceSearchBuildResult>;
|
|
27
|
+
export declare function directWorkspaceSearch(input: {
|
|
28
|
+
workspaceId: string;
|
|
29
|
+
versionId: string;
|
|
30
|
+
manifest: WorkspaceManifest;
|
|
31
|
+
blob: BlobAdapter;
|
|
32
|
+
query: string;
|
|
33
|
+
limit?: number;
|
|
34
|
+
limits?: WorkspaceSearchLimits;
|
|
35
|
+
}): Promise<WorkspaceSearchResult[]>;
|
|
36
|
+
export declare function semanticWorkspaceSearch(input: {
|
|
37
|
+
chunks: WorkspaceSearchChunk[];
|
|
38
|
+
query: string;
|
|
39
|
+
provider: MemoryEmbeddingProvider;
|
|
40
|
+
limit?: number;
|
|
41
|
+
}): Promise<WorkspaceSearchResult[]>;
|
|
42
|
+
export declare function embedWorkspaceSearchQuery(provider: MemoryEmbeddingProvider, query: string): Promise<{
|
|
43
|
+
embedding: number[];
|
|
44
|
+
model: string;
|
|
45
|
+
}>;
|
|
46
|
+
export declare function mergeWorkspaceSearchResults(fullText: WorkspaceSearchResult[], semantic: WorkspaceSearchResult[], limit?: number): WorkspaceSearchResult[];
|
|
47
|
+
export declare function workspaceSearchExclusion(entry: WorkspaceManifestEntry, limits?: WorkspaceSearchLimits): WorkspaceSearchBuildResult["excluded"][number]["reason"] | undefined;
|
|
48
|
+
export declare function chunkWorkspaceText(text: string, limits?: WorkspaceSearchLimits): Array<{
|
|
49
|
+
startLine: number;
|
|
50
|
+
endLine: number;
|
|
51
|
+
content: string;
|
|
52
|
+
}>;
|
|
53
|
+
export declare function workspaceSearchTerms(query: string): string[];
|
|
54
|
+
export declare function workspaceLexicalScore(path: string, content: string, terms: string[]): number;
|
|
55
|
+
//# sourceMappingURL=workspace-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-search.d.ts","sourceRoot":"","sources":["../src/workspace-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
export const DEFAULT_WORKSPACE_SEARCH_LIMITS = {
|
|
3
|
+
maxIndexedFileBytes: 1024 * 1024,
|
|
4
|
+
maxChunkChars: 12_000,
|
|
5
|
+
chunkOverlapLines: 5,
|
|
6
|
+
maxChunks: 50_000
|
|
7
|
+
};
|
|
8
|
+
export async function buildWorkspaceSearchChunks(input) {
|
|
9
|
+
const limits = input.limits ?? DEFAULT_WORKSPACE_SEARCH_LIMITS;
|
|
10
|
+
const chunks = [];
|
|
11
|
+
const excluded = [];
|
|
12
|
+
let embeddingModel;
|
|
13
|
+
for (const entry of input.manifest.entries) {
|
|
14
|
+
const exclusion = workspaceSearchExclusion(entry, limits);
|
|
15
|
+
if (exclusion) {
|
|
16
|
+
excluded.push({ path: entry.path, reason: exclusion });
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
const contents = await verifiedBlob(input.blob, entry);
|
|
20
|
+
if (contents.includes(0)) {
|
|
21
|
+
excluded.push({ path: entry.path, reason: "binary" });
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
const text = contents.toString("utf8");
|
|
25
|
+
if (Buffer.from(text, "utf8").byteLength !== contents.byteLength) {
|
|
26
|
+
excluded.push({ path: entry.path, reason: "binary" });
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
for (const part of chunkWorkspaceText(text, limits)) {
|
|
30
|
+
if (chunks.length >= limits.maxChunks)
|
|
31
|
+
break;
|
|
32
|
+
const metadata = { contentSha256: entry.sha256 };
|
|
33
|
+
const chunk = {
|
|
34
|
+
id: searchChunkId(input.workspaceId, input.versionId, entry.path, part.startLine, part.content),
|
|
35
|
+
workspaceId: input.workspaceId,
|
|
36
|
+
versionId: input.versionId,
|
|
37
|
+
path: entry.path,
|
|
38
|
+
startLine: part.startLine,
|
|
39
|
+
endLine: part.endLine,
|
|
40
|
+
content: part.content,
|
|
41
|
+
contentSha256: entry.sha256,
|
|
42
|
+
contentType: entry.contentType,
|
|
43
|
+
metadata,
|
|
44
|
+
createdAt: input.now.toISOString()
|
|
45
|
+
};
|
|
46
|
+
if (input.embeddingProvider) {
|
|
47
|
+
const embedded = await embedWorkspaceText(input.embeddingProvider, `${entry.path}\n${part.content}`, "document", {
|
|
48
|
+
workspaceId: input.workspaceId,
|
|
49
|
+
versionId: input.versionId,
|
|
50
|
+
path: entry.path,
|
|
51
|
+
startLine: part.startLine,
|
|
52
|
+
endLine: part.endLine
|
|
53
|
+
});
|
|
54
|
+
chunk.embedding = embedded.embedding;
|
|
55
|
+
chunk.embeddingModel = embedded.model;
|
|
56
|
+
embeddingModel = embedded.model;
|
|
57
|
+
}
|
|
58
|
+
chunks.push(chunk);
|
|
59
|
+
}
|
|
60
|
+
if (chunks.length >= limits.maxChunks)
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
return { chunks, excluded, ...(embeddingModel ? { embeddingModel } : {}) };
|
|
64
|
+
}
|
|
65
|
+
export async function directWorkspaceSearch(input) {
|
|
66
|
+
const limits = input.limits ?? DEFAULT_WORKSPACE_SEARCH_LIMITS;
|
|
67
|
+
const terms = workspaceSearchTerms(input.query);
|
|
68
|
+
const results = [];
|
|
69
|
+
let scannedChunks = 0;
|
|
70
|
+
outer: for (const entry of input.manifest.entries) {
|
|
71
|
+
if (workspaceSearchExclusion(entry, limits))
|
|
72
|
+
continue;
|
|
73
|
+
const contents = await verifiedBlob(input.blob, entry);
|
|
74
|
+
if (contents.includes(0))
|
|
75
|
+
continue;
|
|
76
|
+
const text = contents.toString("utf8");
|
|
77
|
+
if (Buffer.from(text, "utf8").byteLength !== contents.byteLength)
|
|
78
|
+
continue;
|
|
79
|
+
for (const part of chunkWorkspaceText(text, limits)) {
|
|
80
|
+
if (scannedChunks >= limits.maxChunks)
|
|
81
|
+
break outer;
|
|
82
|
+
scannedChunks += 1;
|
|
83
|
+
const score = workspaceLexicalScore(entry.path, part.content, terms);
|
|
84
|
+
if (score <= 0)
|
|
85
|
+
continue;
|
|
86
|
+
results.push({
|
|
87
|
+
path: entry.path,
|
|
88
|
+
versionId: input.versionId,
|
|
89
|
+
startLine: part.startLine,
|
|
90
|
+
endLine: part.endLine,
|
|
91
|
+
snippet: part.content,
|
|
92
|
+
score,
|
|
93
|
+
rankingSource: "direct",
|
|
94
|
+
pathScore: entry.path.toLowerCase().includes(input.query.toLowerCase()) ? 1 : 0
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return results
|
|
99
|
+
.sort((a, b) => b.score - a.score || b.pathScore - a.pathScore || a.path.localeCompare(b.path) || a.startLine - b.startLine)
|
|
100
|
+
.slice(0, boundedLimit(input.limit))
|
|
101
|
+
.map(({ pathScore: _pathScore, ...result }) => result);
|
|
102
|
+
}
|
|
103
|
+
export async function semanticWorkspaceSearch(input) {
|
|
104
|
+
const embedded = await embedWorkspaceSearchQuery(input.provider, input.query);
|
|
105
|
+
return input.chunks
|
|
106
|
+
.filter((chunk) => chunk.embedding && (!chunk.embeddingModel || chunk.embeddingModel === embedded.model))
|
|
107
|
+
.map((chunk) => ({ chunk, score: cosineSimilarity(embedded.embedding, chunk.embedding ?? []) }))
|
|
108
|
+
.filter(({ score }) => score > 0)
|
|
109
|
+
.sort((a, b) => b.score - a.score || a.chunk.path.localeCompare(b.chunk.path) || a.chunk.startLine - b.chunk.startLine)
|
|
110
|
+
.slice(0, boundedLimit(input.limit))
|
|
111
|
+
.map(({ chunk, score }) => ({
|
|
112
|
+
path: chunk.path,
|
|
113
|
+
versionId: chunk.versionId,
|
|
114
|
+
startLine: chunk.startLine,
|
|
115
|
+
endLine: chunk.endLine,
|
|
116
|
+
snippet: chunk.content,
|
|
117
|
+
score,
|
|
118
|
+
rankingSource: "semantic"
|
|
119
|
+
}));
|
|
120
|
+
}
|
|
121
|
+
export function embedWorkspaceSearchQuery(provider, query) {
|
|
122
|
+
return embedWorkspaceText(provider, query, "query", { kind: "workspace_search" });
|
|
123
|
+
}
|
|
124
|
+
export function mergeWorkspaceSearchResults(fullText, semantic, limit) {
|
|
125
|
+
const ranked = new Map();
|
|
126
|
+
for (const [source, results] of [["full_text", fullText], ["semantic", semantic]]) {
|
|
127
|
+
results.forEach((result, index) => {
|
|
128
|
+
const key = `${result.path}\u0000${result.startLine}\u0000${result.endLine}`;
|
|
129
|
+
const current = ranked.get(key) ?? { ...result, combined: 0, sources: new Set() };
|
|
130
|
+
current.combined += 1 / (60 + index + 1);
|
|
131
|
+
current.sources.add(source);
|
|
132
|
+
if (source === "semantic" && !current.snippet)
|
|
133
|
+
current.snippet = result.snippet;
|
|
134
|
+
ranked.set(key, current);
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
return [...ranked.values()]
|
|
138
|
+
.sort((a, b) => b.combined - a.combined || a.path.localeCompare(b.path) || a.startLine - b.startLine)
|
|
139
|
+
.slice(0, boundedLimit(limit))
|
|
140
|
+
.map(({ combined, sources, ...result }) => ({
|
|
141
|
+
...result,
|
|
142
|
+
score: combined,
|
|
143
|
+
rankingSource: sources.size > 1 ? "hybrid" : sources.has("semantic") ? "semantic" : "full_text"
|
|
144
|
+
}));
|
|
145
|
+
}
|
|
146
|
+
export function workspaceSearchExclusion(entry, limits = DEFAULT_WORKSPACE_SEARCH_LIMITS) {
|
|
147
|
+
const path = entry.path.toLowerCase();
|
|
148
|
+
const parts = path.split("/");
|
|
149
|
+
const name = parts.at(-1) ?? path;
|
|
150
|
+
if (entry.sizeBytes > limits.maxIndexedFileBytes)
|
|
151
|
+
return "oversized";
|
|
152
|
+
if (parts.some((part) => SEARCH_IGNORED_DIRECTORIES.has(part)))
|
|
153
|
+
return "ignored";
|
|
154
|
+
if (parts.some((part) => SECRET_DIRECTORIES.has(part)) || isSecretFileName(name))
|
|
155
|
+
return "secret";
|
|
156
|
+
if (!isTextContent(entry))
|
|
157
|
+
return "binary";
|
|
158
|
+
return undefined;
|
|
159
|
+
}
|
|
160
|
+
export function chunkWorkspaceText(text, limits = DEFAULT_WORKSPACE_SEARCH_LIMITS) {
|
|
161
|
+
if (!text)
|
|
162
|
+
return [];
|
|
163
|
+
const lines = text.split("\n");
|
|
164
|
+
const chunks = [];
|
|
165
|
+
let start = 0;
|
|
166
|
+
while (start < lines.length) {
|
|
167
|
+
let end = start;
|
|
168
|
+
let chars = 0;
|
|
169
|
+
while (end < lines.length) {
|
|
170
|
+
const next = lines[end] ?? "";
|
|
171
|
+
if (end > start && chars + next.length + 1 > limits.maxChunkChars)
|
|
172
|
+
break;
|
|
173
|
+
chars += next.length + (end > start ? 1 : 0);
|
|
174
|
+
end += 1;
|
|
175
|
+
if (chars >= limits.maxChunkChars)
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
if (end === start)
|
|
179
|
+
end += 1;
|
|
180
|
+
const content = lines.slice(start, end).join("\n").slice(0, limits.maxChunkChars);
|
|
181
|
+
chunks.push({ startLine: start + 1, endLine: end, content });
|
|
182
|
+
if (end >= lines.length)
|
|
183
|
+
break;
|
|
184
|
+
start = Math.max(start + 1, end - limits.chunkOverlapLines);
|
|
185
|
+
}
|
|
186
|
+
return chunks;
|
|
187
|
+
}
|
|
188
|
+
export function workspaceSearchTerms(query) {
|
|
189
|
+
return [...new Set(query.toLowerCase().match(/[\p{L}\p{N}_-]+/gu) ?? [])];
|
|
190
|
+
}
|
|
191
|
+
export function workspaceLexicalScore(path, content, terms) {
|
|
192
|
+
if (terms.length === 0)
|
|
193
|
+
return 0;
|
|
194
|
+
const normalizedPath = path.toLowerCase();
|
|
195
|
+
const normalizedContent = content.toLowerCase();
|
|
196
|
+
let score = 0;
|
|
197
|
+
for (const term of terms) {
|
|
198
|
+
if (normalizedPath.includes(term))
|
|
199
|
+
score += 3;
|
|
200
|
+
let index = normalizedContent.indexOf(term);
|
|
201
|
+
while (index >= 0) {
|
|
202
|
+
score += 1;
|
|
203
|
+
index = normalizedContent.indexOf(term, index + Math.max(1, term.length));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return score;
|
|
207
|
+
}
|
|
208
|
+
async function verifiedBlob(blob, entry) {
|
|
209
|
+
const value = await blob.get(entry.blobKey);
|
|
210
|
+
if (!value)
|
|
211
|
+
throw new Error(`Workspace content blob is missing: ${entry.blobKey}`);
|
|
212
|
+
const bytes = Buffer.from(value);
|
|
213
|
+
if (bytes.byteLength !== entry.sizeBytes || createHash("sha256").update(bytes).digest("hex") !== entry.sha256) {
|
|
214
|
+
throw new Error(`Workspace content failed integrity verification: ${entry.path}`);
|
|
215
|
+
}
|
|
216
|
+
return bytes;
|
|
217
|
+
}
|
|
218
|
+
async function embedWorkspaceText(provider, text, purpose, metadata) {
|
|
219
|
+
const bounded = text.slice(0, Math.max(1, provider.maxInputTokens ?? 2_000) * 4);
|
|
220
|
+
const output = await provider.embed({ text: bounded, purpose, model: provider.model, metadata });
|
|
221
|
+
return { embedding: output.embedding.filter(Number.isFinite), model: output.model ?? provider.model };
|
|
222
|
+
}
|
|
223
|
+
function cosineSimilarity(left, right) {
|
|
224
|
+
if (left.length === 0 || left.length !== right.length)
|
|
225
|
+
return 0;
|
|
226
|
+
let dot = 0;
|
|
227
|
+
let leftMagnitude = 0;
|
|
228
|
+
let rightMagnitude = 0;
|
|
229
|
+
for (let index = 0; index < left.length; index += 1) {
|
|
230
|
+
const a = left[index] ?? 0;
|
|
231
|
+
const b = right[index] ?? 0;
|
|
232
|
+
dot += a * b;
|
|
233
|
+
leftMagnitude += a * a;
|
|
234
|
+
rightMagnitude += b * b;
|
|
235
|
+
}
|
|
236
|
+
if (leftMagnitude === 0 || rightMagnitude === 0)
|
|
237
|
+
return 0;
|
|
238
|
+
return dot / (Math.sqrt(leftMagnitude) * Math.sqrt(rightMagnitude));
|
|
239
|
+
}
|
|
240
|
+
function searchChunkId(workspaceId, versionId, path, startLine, content) {
|
|
241
|
+
return createHash("sha256").update(`${workspaceId}\u0000${versionId}\u0000${path}\u0000${startLine}\u0000${content}`).digest("hex");
|
|
242
|
+
}
|
|
243
|
+
function boundedLimit(value) {
|
|
244
|
+
return Math.max(1, Math.min(100, Math.floor(value ?? 8)));
|
|
245
|
+
}
|
|
246
|
+
function isTextContent(entry) {
|
|
247
|
+
if (entry.contentType.startsWith("text/") || entry.contentType === "application/json")
|
|
248
|
+
return true;
|
|
249
|
+
return SEARCHABLE_EXTENSIONS.some((extension) => entry.path.toLowerCase().endsWith(extension));
|
|
250
|
+
}
|
|
251
|
+
function isSecretFileName(name) {
|
|
252
|
+
return name === ".env" || name.startsWith(".env.") || name === ".npmrc" || name === ".pypirc" || name === ".netrc" ||
|
|
253
|
+
/^(?:credentials|secrets?)(?:\.|$)/u.test(name) || /\.(?:pem|key|p12|pfx|keystore)$/u.test(name);
|
|
254
|
+
}
|
|
255
|
+
const SEARCH_IGNORED_DIRECTORIES = new Set([".git", "node_modules", "vendor", "dist", "build", "coverage", ".next", ".cache"]);
|
|
256
|
+
const SECRET_DIRECTORIES = new Set([".ssh", ".aws", ".gnupg"]);
|
|
257
|
+
const SEARCHABLE_EXTENSIONS = [
|
|
258
|
+
".md", ".mdx", ".txt", ".json", ".jsonl", ".yaml", ".yml", ".toml", ".ini", ".cfg", ".conf",
|
|
259
|
+
".csv", ".tsv", ".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".css", ".scss", ".html", ".xml",
|
|
260
|
+
".sh", ".bash", ".zsh", ".py", ".rb", ".go", ".rs", ".java", ".kt", ".swift", ".sql", ".graphql"
|
|
261
|
+
];
|
|
262
|
+
//# sourceMappingURL=workspace-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-search.js","sourceRoot":"","sources":["../src/workspace-search.ts"],"names":[],"mappings":"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"}
|