@xrkseek/harness 0.4.2 → 0.4.4
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/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/a2a/README.md +43 -0
- package/node_modules/@xrkseek/a2a/dist/client.d.ts +35 -0
- package/node_modules/@xrkseek/a2a/dist/client.d.ts.map +1 -0
- package/node_modules/@xrkseek/a2a/dist/client.js +229 -0
- package/node_modules/@xrkseek/a2a/dist/client.js.map +1 -0
- package/node_modules/@xrkseek/a2a/dist/inbound.d.ts +42 -0
- package/node_modules/@xrkseek/a2a/dist/inbound.d.ts.map +1 -0
- package/node_modules/@xrkseek/a2a/dist/inbound.js +263 -0
- package/node_modules/@xrkseek/a2a/dist/inbound.js.map +1 -0
- package/node_modules/@xrkseek/a2a/dist/index.d.ts +6 -0
- package/node_modules/@xrkseek/a2a/dist/index.d.ts.map +1 -0
- package/node_modules/@xrkseek/a2a/dist/index.js +6 -0
- package/node_modules/@xrkseek/a2a/dist/index.js.map +1 -0
- package/node_modules/@xrkseek/a2a/dist/peers.d.ts +25 -0
- package/node_modules/@xrkseek/a2a/dist/peers.d.ts.map +1 -0
- package/node_modules/@xrkseek/a2a/dist/peers.js +90 -0
- package/node_modules/@xrkseek/a2a/dist/peers.js.map +1 -0
- package/node_modules/@xrkseek/a2a/dist/protocol.d.ts +45 -0
- package/node_modules/@xrkseek/a2a/dist/protocol.d.ts.map +1 -0
- package/node_modules/@xrkseek/a2a/dist/protocol.js +172 -0
- package/node_modules/@xrkseek/a2a/dist/protocol.js.map +1 -0
- package/node_modules/@xrkseek/a2a/dist/tools.d.ts +10 -0
- package/node_modules/@xrkseek/a2a/dist/tools.d.ts.map +1 -0
- package/node_modules/@xrkseek/a2a/dist/tools.js +145 -0
- package/node_modules/@xrkseek/a2a/dist/tools.js.map +1 -0
- package/node_modules/@xrkseek/a2a/package.json +28 -0
- package/node_modules/@xrkseek/attachment/README.md +23 -17
- package/node_modules/@xrkseek/attachment/dist/image-tokens.d.ts +30 -0
- package/node_modules/@xrkseek/attachment/dist/image-tokens.d.ts.map +1 -0
- package/node_modules/@xrkseek/attachment/dist/image-tokens.js +142 -0
- package/node_modules/@xrkseek/attachment/dist/image-tokens.js.map +1 -0
- package/node_modules/@xrkseek/attachment/dist/index.d.ts +2 -0
- package/node_modules/@xrkseek/attachment/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/attachment/dist/index.js +2 -0
- package/node_modules/@xrkseek/attachment/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/attachment/dist/request-projection.d.ts +20 -0
- package/node_modules/@xrkseek/attachment/dist/request-projection.d.ts.map +1 -0
- package/node_modules/@xrkseek/attachment/dist/request-projection.js +49 -0
- package/node_modules/@xrkseek/attachment/dist/request-projection.js.map +1 -0
- package/node_modules/@xrkseek/attachment-local/dist/request-image.d.ts +2 -11
- package/node_modules/@xrkseek/attachment-local/dist/request-image.d.ts.map +1 -1
- package/node_modules/@xrkseek/attachment-local/dist/request-image.js +3 -29
- package/node_modules/@xrkseek/attachment-local/dist/request-image.js.map +1 -1
- package/node_modules/@xrkseek/checkpoint/README.md +4 -2
- package/node_modules/@xrkseek/checkpoint/dist/process-git.d.ts +6 -0
- package/node_modules/@xrkseek/checkpoint/dist/process-git.d.ts.map +1 -1
- package/node_modules/@xrkseek/checkpoint/dist/process-git.js +23 -1
- package/node_modules/@xrkseek/checkpoint/dist/process-git.js.map +1 -1
- package/node_modules/@xrkseek/checkpoint/dist/store.d.ts +30 -2
- package/node_modules/@xrkseek/checkpoint/dist/store.d.ts.map +1 -1
- package/node_modules/@xrkseek/checkpoint/dist/store.js +58 -15
- package/node_modules/@xrkseek/checkpoint/dist/store.js.map +1 -1
- package/node_modules/@xrkseek/checkpoint/dist/types.d.ts +14 -4
- package/node_modules/@xrkseek/checkpoint/dist/types.d.ts.map +1 -1
- package/node_modules/@xrkseek/checkpoint/dist/types.js.map +1 -1
- package/node_modules/@xrkseek/checkpoint/package.json +4 -1
- package/node_modules/@xrkseek/context-fragments/dist/index.d.ts +14 -0
- package/node_modules/@xrkseek/context-fragments/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/context-fragments/dist/index.js +33 -0
- package/node_modules/@xrkseek/context-fragments/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/core-agent/dist/index.d.ts +7 -0
- package/node_modules/@xrkseek/core-agent/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-agent/dist/index.js +6 -0
- package/node_modules/@xrkseek/core-agent/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/core-agent-loop/dist/compaction.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-agent-loop/dist/compaction.js +1 -0
- package/node_modules/@xrkseek/core-agent-loop/dist/compaction.js.map +1 -1
- package/node_modules/@xrkseek/core-agent-loop/dist/index.d.ts +18 -0
- package/node_modules/@xrkseek/core-agent-loop/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-agent-loop/dist/index.js +98 -50
- package/node_modules/@xrkseek/core-agent-loop/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/core-agent-loop/dist/tool-result-bound.d.ts +7 -2
- package/node_modules/@xrkseek/core-agent-loop/dist/tool-result-bound.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-agent-loop/dist/tool-result-bound.js +7 -3
- package/node_modules/@xrkseek/core-agent-loop/dist/tool-result-bound.js.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/compaction.d.ts +23 -2
- package/node_modules/@xrkseek/core-session/dist/compaction.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/compaction.js +50 -3
- package/node_modules/@xrkseek/core-session/dist/compaction.js.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/drain-hub.d.ts +2 -2
- package/node_modules/@xrkseek/core-session/dist/drain-hub.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/drain-hub.js +2 -2
- package/node_modules/@xrkseek/core-session/dist/drain-hub.js.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/index.d.ts +2 -2
- package/node_modules/@xrkseek/core-session/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/index.js +1 -1
- package/node_modules/@xrkseek/core-session/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/latch.d.ts +25 -3
- package/node_modules/@xrkseek/core-session/dist/latch.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/latch.js +33 -12
- package/node_modules/@xrkseek/core-session/dist/latch.js.map +1 -1
- package/node_modules/@xrkseek/core-session/package.json +1 -0
- package/node_modules/@xrkseek/core-system-prompt/dist/index.d.ts +1 -0
- package/node_modules/@xrkseek/core-system-prompt/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-system-prompt/dist/index.js +1 -0
- package/node_modules/@xrkseek/core-system-prompt/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/core-system-prompt/dist/time-context.d.ts +22 -0
- package/node_modules/@xrkseek/core-system-prompt/dist/time-context.d.ts.map +1 -0
- package/node_modules/@xrkseek/core-system-prompt/dist/time-context.js +47 -0
- package/node_modules/@xrkseek/core-system-prompt/dist/time-context.js.map +1 -0
- package/node_modules/@xrkseek/core-tools/dist/definition.d.ts +14 -0
- package/node_modules/@xrkseek/core-tools/dist/definition.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-tools/dist/definition.js.map +1 -1
- package/node_modules/@xrkseek/core-tools/dist/index.d.ts +2 -2
- package/node_modules/@xrkseek/core-tools/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-tools/dist/index.js +1 -1
- package/node_modules/@xrkseek/core-tools/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/core-tools/dist/materialize.d.ts +9 -3
- package/node_modules/@xrkseek/core-tools/dist/materialize.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-tools/dist/materialize.js +38 -8
- package/node_modules/@xrkseek/core-tools/dist/materialize.js.map +1 -1
- package/node_modules/@xrkseek/exec-computer-use/dist/format.d.ts +2 -0
- package/node_modules/@xrkseek/exec-computer-use/dist/format.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-computer-use/dist/format.js +4 -1
- package/node_modules/@xrkseek/exec-computer-use/dist/format.js.map +1 -1
- package/node_modules/@xrkseek/exec-environment/README.md +21 -0
- package/node_modules/@xrkseek/exec-environment/dist/http.d.ts +34 -0
- package/node_modules/@xrkseek/exec-environment/dist/http.d.ts.map +1 -0
- package/node_modules/@xrkseek/exec-environment/dist/http.js +259 -0
- package/node_modules/@xrkseek/exec-environment/dist/http.js.map +1 -0
- package/node_modules/@xrkseek/exec-environment/dist/index.d.ts +5 -0
- package/node_modules/@xrkseek/exec-environment/dist/index.d.ts.map +1 -0
- package/node_modules/@xrkseek/exec-environment/dist/index.js +4 -0
- package/node_modules/@xrkseek/exec-environment/dist/index.js.map +1 -0
- package/node_modules/@xrkseek/exec-environment/dist/local.d.ts +11 -0
- package/node_modules/@xrkseek/exec-environment/dist/local.d.ts.map +1 -0
- package/node_modules/@xrkseek/exec-environment/dist/local.js +30 -0
- package/node_modules/@xrkseek/exec-environment/dist/local.js.map +1 -0
- package/node_modules/@xrkseek/exec-environment/dist/resolve.d.ts +23 -0
- package/node_modules/@xrkseek/exec-environment/dist/resolve.d.ts.map +1 -0
- package/node_modules/@xrkseek/exec-environment/dist/resolve.js +39 -0
- package/node_modules/@xrkseek/exec-environment/dist/resolve.js.map +1 -0
- package/node_modules/@xrkseek/exec-environment/dist/types.d.ts +33 -0
- package/node_modules/@xrkseek/exec-environment/dist/types.d.ts.map +1 -0
- package/node_modules/@xrkseek/exec-environment/dist/types.js +9 -0
- package/node_modules/@xrkseek/exec-environment/dist/types.js.map +1 -0
- package/node_modules/@xrkseek/exec-environment/package.json +28 -0
- package/node_modules/@xrkseek/exec-fs/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-fs/dist/index.js +1 -0
- package/node_modules/@xrkseek/exec-fs/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/exec-fs/dist/present.d.ts +5 -2
- package/node_modules/@xrkseek/exec-fs/dist/present.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-fs/dist/present.js +22 -4
- package/node_modules/@xrkseek/exec-fs/dist/present.js.map +1 -1
- package/node_modules/@xrkseek/exec-image-gen/README.md +6 -4
- package/node_modules/@xrkseek/exec-image-gen/dist/format.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-image-gen/dist/format.js +6 -3
- package/node_modules/@xrkseek/exec-image-gen/dist/format.js.map +1 -1
- package/node_modules/@xrkseek/exec-image-gen/dist/index.d.ts +4 -2
- package/node_modules/@xrkseek/exec-image-gen/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-image-gen/dist/index.js +4 -2
- package/node_modules/@xrkseek/exec-image-gen/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/exec-image-gen/dist/memory.d.ts +4 -1
- package/node_modules/@xrkseek/exec-image-gen/dist/memory.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-image-gen/dist/memory.js +16 -1
- package/node_modules/@xrkseek/exec-image-gen/dist/memory.js.map +1 -1
- package/node_modules/@xrkseek/exec-image-gen/dist/openai-http.d.ts +5 -2
- package/node_modules/@xrkseek/exec-image-gen/dist/openai-http.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-image-gen/dist/openai-http.js +88 -38
- package/node_modules/@xrkseek/exec-image-gen/dist/openai-http.js.map +1 -1
- package/node_modules/@xrkseek/exec-image-gen/dist/references.d.ts +21 -0
- package/node_modules/@xrkseek/exec-image-gen/dist/references.d.ts.map +1 -0
- package/node_modules/@xrkseek/exec-image-gen/dist/references.js +145 -0
- package/node_modules/@xrkseek/exec-image-gen/dist/references.js.map +1 -0
- package/node_modules/@xrkseek/exec-image-gen/dist/schema.d.ts +15 -0
- package/node_modules/@xrkseek/exec-image-gen/dist/schema.d.ts.map +1 -0
- package/node_modules/@xrkseek/exec-image-gen/dist/schema.js +67 -0
- package/node_modules/@xrkseek/exec-image-gen/dist/schema.js.map +1 -0
- package/node_modules/@xrkseek/exec-image-gen/dist/tools.d.ts +5 -2
- package/node_modules/@xrkseek/exec-image-gen/dist/tools.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-image-gen/dist/tools.js +38 -36
- package/node_modules/@xrkseek/exec-image-gen/dist/tools.js.map +1 -1
- package/node_modules/@xrkseek/exec-image-gen/dist/types.d.ts +34 -2
- package/node_modules/@xrkseek/exec-image-gen/dist/types.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-image-gen/dist/types.js +16 -1
- package/node_modules/@xrkseek/exec-image-gen/dist/types.js.map +1 -1
- package/node_modules/@xrkseek/exec-memory/README.md +3 -2
- package/node_modules/@xrkseek/exec-memory/dist/index.d.ts +2 -1
- package/node_modules/@xrkseek/exec-memory/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-memory/dist/index.js +2 -1
- package/node_modules/@xrkseek/exec-memory/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/exec-memory/dist/provider.d.ts +1 -1
- package/node_modules/@xrkseek/exec-memory/dist/provider.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-memory/dist/resolve.d.ts +15 -4
- package/node_modules/@xrkseek/exec-memory/dist/resolve.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-memory/dist/resolve.js +13 -3
- package/node_modules/@xrkseek/exec-memory/dist/resolve.js.map +1 -1
- package/node_modules/@xrkseek/exec-memory/dist/sqlite.d.ts +19 -0
- package/node_modules/@xrkseek/exec-memory/dist/sqlite.d.ts.map +1 -0
- package/node_modules/@xrkseek/exec-memory/dist/sqlite.js +190 -0
- package/node_modules/@xrkseek/exec-memory/dist/sqlite.js.map +1 -0
- package/node_modules/@xrkseek/exec-memory/dist/write-path.d.ts +21 -0
- package/node_modules/@xrkseek/exec-memory/dist/write-path.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-memory/dist/write-path.js +128 -25
- package/node_modules/@xrkseek/exec-memory/dist/write-path.js.map +1 -1
- package/node_modules/@xrkseek/exec-shell/dist/index.d.ts +8 -1
- package/node_modules/@xrkseek/exec-shell/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-shell/dist/index.js +3 -1
- package/node_modules/@xrkseek/exec-shell/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/exec-video-gen/README.md +27 -19
- package/node_modules/@xrkseek/exec-video-gen/dist/catalog.d.ts +16 -0
- package/node_modules/@xrkseek/exec-video-gen/dist/catalog.d.ts.map +1 -0
- package/node_modules/@xrkseek/exec-video-gen/dist/catalog.js +90 -0
- package/node_modules/@xrkseek/exec-video-gen/dist/catalog.js.map +1 -0
- package/node_modules/@xrkseek/exec-video-gen/dist/format.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-video-gen/dist/format.js +3 -1
- package/node_modules/@xrkseek/exec-video-gen/dist/format.js.map +1 -1
- package/node_modules/@xrkseek/exec-video-gen/dist/index.d.ts +5 -2
- package/node_modules/@xrkseek/exec-video-gen/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-video-gen/dist/index.js +5 -2
- package/node_modules/@xrkseek/exec-video-gen/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/exec-video-gen/dist/memory.d.ts +3 -2
- package/node_modules/@xrkseek/exec-video-gen/dist/memory.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-video-gen/dist/memory.js +45 -4
- package/node_modules/@xrkseek/exec-video-gen/dist/memory.js.map +1 -1
- package/node_modules/@xrkseek/exec-video-gen/dist/openai-http.d.ts +3 -6
- package/node_modules/@xrkseek/exec-video-gen/dist/openai-http.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-video-gen/dist/openai-http.js +81 -2
- package/node_modules/@xrkseek/exec-video-gen/dist/openai-http.js.map +1 -1
- package/node_modules/@xrkseek/exec-video-gen/dist/references.d.ts +24 -0
- package/node_modules/@xrkseek/exec-video-gen/dist/references.d.ts.map +1 -0
- package/node_modules/@xrkseek/exec-video-gen/dist/references.js +151 -0
- package/node_modules/@xrkseek/exec-video-gen/dist/references.js.map +1 -0
- package/node_modules/@xrkseek/exec-video-gen/dist/schema.d.ts +15 -0
- package/node_modules/@xrkseek/exec-video-gen/dist/schema.d.ts.map +1 -0
- package/node_modules/@xrkseek/exec-video-gen/dist/schema.js +104 -0
- package/node_modules/@xrkseek/exec-video-gen/dist/schema.js.map +1 -0
- package/node_modules/@xrkseek/exec-video-gen/dist/tools.d.ts +4 -2
- package/node_modules/@xrkseek/exec-video-gen/dist/tools.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-video-gen/dist/tools.js +99 -70
- package/node_modules/@xrkseek/exec-video-gen/dist/tools.js.map +1 -1
- package/node_modules/@xrkseek/exec-video-gen/dist/types.d.ts +73 -2
- package/node_modules/@xrkseek/exec-video-gen/dist/types.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-video-gen/dist/types.js +20 -1
- package/node_modules/@xrkseek/exec-video-gen/dist/types.js.map +1 -1
- package/node_modules/@xrkseek/exec-web/README.md +2 -2
- package/node_modules/@xrkseek/exec-web/dist/browser-tools.d.ts +3 -0
- package/node_modules/@xrkseek/exec-web/dist/browser-tools.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-web/dist/browser-tools.js +3 -0
- package/node_modules/@xrkseek/exec-web/dist/browser-tools.js.map +1 -1
- package/node_modules/@xrkseek/exec-web/dist/browser-vault-tools.d.ts +32 -0
- package/node_modules/@xrkseek/exec-web/dist/browser-vault-tools.d.ts.map +1 -0
- package/node_modules/@xrkseek/exec-web/dist/browser-vault-tools.js +141 -0
- package/node_modules/@xrkseek/exec-web/dist/browser-vault-tools.js.map +1 -0
- package/node_modules/@xrkseek/exec-web/dist/index.d.ts +1 -0
- package/node_modules/@xrkseek/exec-web/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-web/dist/index.js +1 -0
- package/node_modules/@xrkseek/exec-web/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/llm-deepseek/dist/index.d.ts +1 -0
- package/node_modules/@xrkseek/llm-deepseek/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/llm-deepseek/dist/index.js +2 -1
- package/node_modules/@xrkseek/llm-deepseek/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/llm-deepseek/dist/request-policy.d.ts +13 -3
- package/node_modules/@xrkseek/llm-deepseek/dist/request-policy.d.ts.map +1 -1
- package/node_modules/@xrkseek/llm-deepseek/dist/request-policy.js +27 -4
- package/node_modules/@xrkseek/llm-deepseek/dist/request-policy.js.map +1 -1
- package/node_modules/@xrkseek/preset-harness/README.md +8 -8
- package/node_modules/@xrkseek/preset-harness/dist/preset.d.ts +11 -1
- package/node_modules/@xrkseek/preset-harness/dist/preset.d.ts.map +1 -1
- package/node_modules/@xrkseek/preset-harness/dist/preset.js +11 -3
- package/node_modules/@xrkseek/preset-harness/dist/preset.js.map +1 -1
- package/node_modules/@xrkseek/preset-harness/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@xrkseek/preset-minimal/README.md +2 -2
- package/node_modules/@xrkseek/preset-minimal/dist/preset.js +1 -1
- package/node_modules/@xrkseek/preset-minimal/dist/preset.js.map +1 -1
- package/node_modules/@xrkseek/preset-minimal/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@xrkseek/preset-server/README.md +5 -5
- package/node_modules/@xrkseek/preset-server/dist/preset.d.ts.map +1 -1
- package/node_modules/@xrkseek/preset-server/dist/preset.js +3 -2
- package/node_modules/@xrkseek/preset-server/dist/preset.js.map +1 -1
- package/node_modules/@xrkseek/preset-server/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@xrkseek/protocol/dist/session-events.d.ts +9 -0
- package/node_modules/@xrkseek/protocol/dist/session-events.d.ts.map +1 -1
- package/node_modules/@xrkseek/protocol/dist/session-events.js.map +1 -1
- package/node_modules/@xrkseek/protocol/dist/validate.d.ts.map +1 -1
- package/node_modules/@xrkseek/protocol/dist/validate.js +9 -0
- package/node_modules/@xrkseek/protocol/dist/validate.js.map +1 -1
- package/node_modules/@xrkseek/server-config/dist/index.d.ts +1 -0
- package/node_modules/@xrkseek/server-config/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-config/dist/index.js +1 -0
- package/node_modules/@xrkseek/server-config/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/server-config/dist/json-text.d.ts +8 -0
- package/node_modules/@xrkseek/server-config/dist/json-text.d.ts.map +1 -0
- package/node_modules/@xrkseek/server-config/dist/json-text.js +12 -0
- package/node_modules/@xrkseek/server-config/dist/json-text.js.map +1 -0
- package/node_modules/@xrkseek/server-cron/README.md +3 -2
- package/node_modules/@xrkseek/server-cron/dist/executions.d.ts +31 -0
- package/node_modules/@xrkseek/server-cron/dist/executions.d.ts.map +1 -0
- package/node_modules/@xrkseek/server-cron/dist/executions.js +95 -0
- package/node_modules/@xrkseek/server-cron/dist/executions.js.map +1 -0
- package/node_modules/@xrkseek/server-cron/dist/index.d.ts +1 -0
- package/node_modules/@xrkseek/server-cron/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-cron/dist/index.js +6 -0
- package/node_modules/@xrkseek/server-cron/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/server-cron/dist/scheduler.d.ts +4 -0
- package/node_modules/@xrkseek/server-cron/dist/scheduler.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-cron/dist/scheduler.js +33 -24
- package/node_modules/@xrkseek/server-cron/dist/scheduler.js.map +1 -1
- package/node_modules/@xrkseek/server-cron/dist/tools.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-cron/dist/tools.js +44 -6
- package/node_modules/@xrkseek/server-cron/dist/tools.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/context.d.ts +2 -2
- package/node_modules/@xrkseek/server-face/dist/context.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/dispatch.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/dispatch.js +2 -0
- package/node_modules/@xrkseek/server-face/dist/dispatch.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/external-agent-runtime.d.ts +37 -2
- package/node_modules/@xrkseek/server-face/dist/external-agent-runtime.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/external-agent-runtime.js +191 -28
- package/node_modules/@xrkseek/server-face/dist/external-agent-runtime.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/session.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/session.js +31 -5
- package/node_modules/@xrkseek/server-face/dist/handlers/session.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/worktree.d.ts +10 -0
- package/node_modules/@xrkseek/server-face/dist/handlers/worktree.d.ts.map +1 -0
- package/node_modules/@xrkseek/server-face/dist/handlers/worktree.js +33 -0
- package/node_modules/@xrkseek/server-face/dist/handlers/worktree.js.map +1 -0
- package/node_modules/@xrkseek/server-face/dist/host-open-path.d.ts +9 -0
- package/node_modules/@xrkseek/server-face/dist/host-open-path.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/host-open-path.js +13 -7
- package/node_modules/@xrkseek/server-face/dist/host-open-path.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/index.d.ts +2 -2
- package/node_modules/@xrkseek/server-face/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/index.js +1 -1
- package/node_modules/@xrkseek/server-face/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/llm-provider-context.d.ts +2 -0
- package/node_modules/@xrkseek/server-face/dist/llm-provider-context.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/llm-provider-context.js +13 -0
- package/node_modules/@xrkseek/server-face/dist/llm-provider-context.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/llm-resolve.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/llm-resolve.js +3 -1
- package/node_modules/@xrkseek/server-face/dist/llm-resolve.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/model-catalog.d.ts +4 -0
- package/node_modules/@xrkseek/server-face/dist/model-catalog.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/model-catalog.js +24 -5
- package/node_modules/@xrkseek/server-face/dist/model-catalog.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/presets-catalog.js +5 -5
- package/node_modules/@xrkseek/server-face/dist/presets-catalog.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/runtime.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/runtime.js +14 -2
- package/node_modules/@xrkseek/server-face/dist/runtime.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/select-session-model.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/select-session-model.js +8 -0
- package/node_modules/@xrkseek/server-face/dist/select-session-model.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/session-model-store.d.ts +11 -0
- package/node_modules/@xrkseek/server-face/dist/session-model-store.d.ts.map +1 -0
- package/node_modules/@xrkseek/server-face/dist/session-model-store.js +66 -0
- package/node_modules/@xrkseek/server-face/dist/session-model-store.js.map +1 -0
- package/node_modules/@xrkseek/server-face/dist/session-status.d.ts +64 -13
- package/node_modules/@xrkseek/server-face/dist/session-status.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/session-status.js +173 -5
- package/node_modules/@xrkseek/server-face/dist/session-status.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/settings-credentials.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/settings-credentials.js +4 -5
- package/node_modules/@xrkseek/server-face/dist/settings-credentials.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/settings-schemas.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/settings-schemas.js +36 -4
- package/node_modules/@xrkseek/server-face/dist/settings-schemas.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/subagent-tools.d.ts +1 -1
- package/node_modules/@xrkseek/server-face/dist/subagent-tools.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/subagent-tools.js +33 -2
- package/node_modules/@xrkseek/server-face/dist/subagent-tools.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/workspace-checkpoint.d.ts +15 -1
- package/node_modules/@xrkseek/server-face/dist/workspace-checkpoint.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/workspace-checkpoint.js +35 -7
- package/node_modules/@xrkseek/server-face/dist/workspace-checkpoint.js.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/a2a-inbound-public.d.ts +11 -0
- package/node_modules/@xrkseek/server-host/dist/a2a-inbound-public.d.ts.map +1 -0
- package/node_modules/@xrkseek/server-host/dist/a2a-inbound-public.js +22 -0
- package/node_modules/@xrkseek/server-host/dist/a2a-inbound-public.js.map +1 -0
- package/node_modules/@xrkseek/server-host/dist/drain-status.d.ts +2 -2
- package/node_modules/@xrkseek/server-host/dist/drain-status.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/drain-status.js +2 -2
- package/node_modules/@xrkseek/server-host/dist/drain-status.js.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/index.d.ts +19 -0
- package/node_modules/@xrkseek/server-host/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/index.js +248 -33
- package/node_modules/@xrkseek/server-host/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/mcp-wire.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/mcp-wire.js +3 -3
- package/node_modules/@xrkseek/server-host/dist/mcp-wire.js.map +1 -1
- package/node_modules/@xrkseek/server-host/package.json +2 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/audit-community-client.d.ts +13 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/audit-community-client.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/audit-community-client.js +24 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/audit-community-client.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-client-scan.d.ts +1 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-client-scan.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-client-scan.js +18 -2
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-client-scan.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-compat-matrix.d.ts +6 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-compat-matrix.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-compat-matrix.js +26 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/dsh-compat-matrix.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/embedded-vector-store.d.ts +2 -2
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/embedded-vector-store.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/embedded-vector-store.js +9 -4
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/embedded-vector-store.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/memory-embeddings.d.ts +37 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/memory-embeddings.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/memory-embeddings.js +125 -9
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/memory-embeddings.js.map +1 -1
- package/node_modules/@xrkseek/spill/dist/index.d.ts +1 -1
- package/node_modules/@xrkseek/spill/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/spill/dist/index.js +1 -1
- package/node_modules/@xrkseek/spill/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/spill/dist/policy.d.ts +35 -0
- package/node_modules/@xrkseek/spill/dist/policy.d.ts.map +1 -1
- package/node_modules/@xrkseek/spill/dist/policy.js +45 -4
- package/node_modules/@xrkseek/spill/dist/policy.js.map +1 -1
- package/node_modules/@xrkseek/workspace/dist/index.d.ts +1 -0
- package/node_modules/@xrkseek/workspace/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/workspace/dist/index.js +1 -0
- package/node_modules/@xrkseek/workspace/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/workspace/dist/skill-curator.d.ts +46 -0
- package/node_modules/@xrkseek/workspace/dist/skill-curator.d.ts.map +1 -0
- package/node_modules/@xrkseek/workspace/dist/skill-curator.js +114 -0
- package/node_modules/@xrkseek/workspace/dist/skill-curator.js.map +1 -0
- package/package.json +5 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model-facing A2A tools (Hermes `a2a` toolset subset).
|
|
3
|
+
*/
|
|
4
|
+
import type { ToolDefinition } from "@xrkseek/core-tools";
|
|
5
|
+
import { type A2aClient, type A2aClientOptions } from "./client.js";
|
|
6
|
+
export interface CreateA2aToolsOptions extends A2aClientOptions {
|
|
7
|
+
readonly client?: A2aClient;
|
|
8
|
+
}
|
|
9
|
+
export declare function createA2aTools(options?: CreateA2aToolsOptions): ToolDefinition[];
|
|
10
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAmB,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGrF,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC7D,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;CAC7B;AAMD,wBAAgB,cAAc,CAC5B,OAAO,GAAE,qBAA0B,GAClC,cAAc,EAAE,CA2JlB"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model-facing A2A tools (Hermes `a2a` toolset subset).
|
|
3
|
+
*/
|
|
4
|
+
import { createA2aClient } from "./client.js";
|
|
5
|
+
import { ROLE_AGENT, ROLE_USER } from "./protocol.js";
|
|
6
|
+
function str(v) {
|
|
7
|
+
return typeof v === "string" ? v.trim() : "";
|
|
8
|
+
}
|
|
9
|
+
export function createA2aTools(options = {}) {
|
|
10
|
+
const client = options.client ?? createA2aClient(options);
|
|
11
|
+
const discover = {
|
|
12
|
+
name: "a2a_discover",
|
|
13
|
+
description: "Fetch and summarize an A2A peer Agent Card (skills, auth, protocol URL).",
|
|
14
|
+
parameters: {
|
|
15
|
+
type: "object",
|
|
16
|
+
properties: {
|
|
17
|
+
url: { type: "string", description: "Peer base URL (e.g. http://host:9900)." },
|
|
18
|
+
},
|
|
19
|
+
required: ["url"],
|
|
20
|
+
additionalProperties: false,
|
|
21
|
+
},
|
|
22
|
+
async execute(args) {
|
|
23
|
+
const url = str(args.url);
|
|
24
|
+
return { content: await client.discover(url) };
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
const call = {
|
|
28
|
+
name: "a2a_call",
|
|
29
|
+
description: "Send a task to an A2A peer (configured name or http(s) URL). Pass context_id from a prior reply to continue multi-turn. Anti-loop caps turns per context.",
|
|
30
|
+
parameters: {
|
|
31
|
+
type: "object",
|
|
32
|
+
properties: {
|
|
33
|
+
agent: {
|
|
34
|
+
type: "string",
|
|
35
|
+
description: "Configured peer name or full http(s) URL.",
|
|
36
|
+
},
|
|
37
|
+
message: { type: "string", description: "Task text for the peer." },
|
|
38
|
+
context_id: {
|
|
39
|
+
type: "string",
|
|
40
|
+
description: "Optional context id from a prior reply.",
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
required: ["agent", "message"],
|
|
44
|
+
additionalProperties: false,
|
|
45
|
+
},
|
|
46
|
+
async execute(args) {
|
|
47
|
+
const a = args;
|
|
48
|
+
const agent = str(a.agent || a.agent_name || a.name);
|
|
49
|
+
const message = str(a.message || a.text || a.task);
|
|
50
|
+
const contextId = str(a.context_id || a.contextId);
|
|
51
|
+
if (!agent || !message) {
|
|
52
|
+
return {
|
|
53
|
+
content: "Error: both 'agent' and 'message' are required.",
|
|
54
|
+
isError: true,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const result = await client.call(agent, message, contextId);
|
|
58
|
+
return { content: result.content, ...(result.ok ? {} : { isError: true }) };
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
const list = {
|
|
62
|
+
name: "a2a_list",
|
|
63
|
+
description: "List configured A2A peers and persisted conversation context ids (for a2a_history).",
|
|
64
|
+
parameters: {
|
|
65
|
+
type: "object",
|
|
66
|
+
properties: {},
|
|
67
|
+
additionalProperties: false,
|
|
68
|
+
},
|
|
69
|
+
async execute() {
|
|
70
|
+
const peers = client.listPeers();
|
|
71
|
+
const lines = ["Configured peers:"];
|
|
72
|
+
const names = Object.keys(peers);
|
|
73
|
+
if (names.length === 0) {
|
|
74
|
+
lines.push(" (none — set XRK_A2A_AGENTS or ~/.xrk/a2a_agents.json)");
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
for (const name of names.sort()) {
|
|
78
|
+
const p = peers[name];
|
|
79
|
+
const caps = p.capabilities?.length
|
|
80
|
+
? ` caps=[${p.capabilities.join(",")}]`
|
|
81
|
+
: "";
|
|
82
|
+
lines.push(` - ${name}: ${p.url}${caps}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const convos = client.listConversations();
|
|
86
|
+
lines.push(`Persisted conversations (${convos.length}) — recall with a2a_history:`);
|
|
87
|
+
for (const id of convos.slice(0, 40)) {
|
|
88
|
+
lines.push(` - ${id}`);
|
|
89
|
+
}
|
|
90
|
+
return { content: lines.join("\n") };
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
const history = {
|
|
94
|
+
name: "a2a_history",
|
|
95
|
+
description: "Recall a persisted A2A conversation transcript by context_id (survives restarts and session compaction).",
|
|
96
|
+
parameters: {
|
|
97
|
+
type: "object",
|
|
98
|
+
properties: {
|
|
99
|
+
context_id: {
|
|
100
|
+
type: "string",
|
|
101
|
+
description: "Context id of the conversation to recall.",
|
|
102
|
+
},
|
|
103
|
+
limit: {
|
|
104
|
+
type: "number",
|
|
105
|
+
description: "Max messages to return (default 50).",
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
required: ["context_id"],
|
|
109
|
+
additionalProperties: false,
|
|
110
|
+
},
|
|
111
|
+
async execute(args) {
|
|
112
|
+
const a = args;
|
|
113
|
+
const contextId = str(a.context_id || a.contextId);
|
|
114
|
+
if (!contextId) {
|
|
115
|
+
return {
|
|
116
|
+
content: "Error: 'context_id' is required (see a2a_list for known conversations).",
|
|
117
|
+
isError: true,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
const limit = typeof a.limit === "number" && Number.isFinite(a.limit)
|
|
121
|
+
? Math.max(1, Math.trunc(a.limit))
|
|
122
|
+
: 50;
|
|
123
|
+
const messages = client.history(contextId, limit);
|
|
124
|
+
if (messages.length === 0) {
|
|
125
|
+
return {
|
|
126
|
+
content: `No persisted conversation for context '${contextId}'.`,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
const lines = [
|
|
130
|
+
`Conversation ${contextId} (last ${messages.length} messages):`,
|
|
131
|
+
];
|
|
132
|
+
for (const m of messages) {
|
|
133
|
+
const role = m.role === ROLE_AGENT || m.role === "agent"
|
|
134
|
+
? "agent"
|
|
135
|
+
: m.role === ROLE_USER || m.role === "user"
|
|
136
|
+
? "user"
|
|
137
|
+
: m.role;
|
|
138
|
+
lines.push(`[${role}] ${m.text}`);
|
|
139
|
+
}
|
|
140
|
+
return { content: lines.join("\n") };
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
return [discover, call, list, history];
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@xrkseek/a2a",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "A2A client helpers: context_id persistence, history recall, anti-loop turn caps",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": {
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"import": "./dist/index.js",
|
|
10
|
+
"default": "./dist/index.js"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"files": [
|
|
14
|
+
"dist",
|
|
15
|
+
"README.md"
|
|
16
|
+
],
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"@xrkseek/core-tools": "workspace:*",
|
|
19
|
+
"@xrkseek/xrk-home-paths": "workspace:*"
|
|
20
|
+
},
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "git+https://github.com/xrkseek/XRK-harness.git",
|
|
25
|
+
"directory": "packages/a2a"
|
|
26
|
+
},
|
|
27
|
+
"private": true
|
|
28
|
+
}
|
|
@@ -1,17 +1,23 @@
|
|
|
1
|
-
# `@xrkseek/attachment`
|
|
2
|
-
|
|
3
|
-
Durable **image** blob store (DSH-aligned). Session events hold
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
- `
|
|
9
|
-
- `
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
|
|
1
|
+
# `@xrkseek/attachment`
|
|
2
|
+
|
|
3
|
+
Durable **image** + generic-file blob store (DSH-aligned). Session events hold
|
|
4
|
+
`ImageAttachmentRef` / `FileAttachmentRef` only; bytes live here.
|
|
5
|
+
|
|
6
|
+
## Exports
|
|
7
|
+
|
|
8
|
+
- `createMemoryAttachmentStore` — content-addressed in-memory store
|
|
9
|
+
- `AttachmentStore` — `validateImage` / `saveImages` / `readImage` / `readImageRequest`
|
|
10
|
+
- `AttachmentError` — stable `code` (`IMAGE_TOO_LARGE`, `IMAGE_TOO_MANY_PIXELS`, …)
|
|
11
|
+
- `sniffImageMediaType` / `readImageSize` — header sniff + intrinsic size
|
|
12
|
+
- `requestImageDimensions` / `longEdgeDimensions` — pure projection geometry
|
|
13
|
+
- `estimateImageTokens` / `requestImageTokenDimensions` — DeepSeek V41 vision-token
|
|
14
|
+
accounting (soft-budget + route request projection)
|
|
15
|
+
- `offloadRequestImages` — wire safety net for oversized base64 payloads
|
|
16
|
+
|
|
17
|
+
## Non-goals (v1)
|
|
18
|
+
|
|
19
|
+
- Disk / `$HOME` layout (see `@xrkseek/attachment-local`)
|
|
20
|
+
- PDF / audio / video
|
|
21
|
+
- GC / retention
|
|
22
|
+
|
|
23
|
+
文件地图:[docs/modules/attachment.md](../../docs/modules/attachment.md)(若有)· [docs/status.md](../../docs/status.md)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DeepSeek vision-token accounting (api-docs.deepseek.com Token & Token Usage,
|
|
3
|
+
* published `v41` configuration) ported for soft-budget / request projection.
|
|
4
|
+
*
|
|
5
|
+
* The provider scales an image below 544×544 total pixels up, aligns it to a
|
|
6
|
+
* 14px-patch grid, downsamples 3:1 per axis into token cells, and caps one
|
|
7
|
+
* image at 1024 tokens. The count is exact for this configuration (no
|
|
8
|
+
* alignment pad, no aspect-ratio clamp). Provider usage remains authoritative.
|
|
9
|
+
*/
|
|
10
|
+
import { type ProjectedDimensions } from "./request-projection.js";
|
|
11
|
+
/** Provider cap on tokens for one request image. */
|
|
12
|
+
export declare const MAX_IMAGE_TOKENS = 1024;
|
|
13
|
+
/**
|
|
14
|
+
* Provider per-side limit when many images share a request (DSH
|
|
15
|
+
* `REQUEST_IMAGE_MAX_DIMENSION`). Applied after token-grid projection.
|
|
16
|
+
*/
|
|
17
|
+
export declare const REQUEST_IMAGE_MAX_DIMENSION = 4096;
|
|
18
|
+
/**
|
|
19
|
+
* Dimensions the harness should send so the provider keeps the whole image:
|
|
20
|
+
* the source itself when its patch-padded grid fits the token cap, otherwise
|
|
21
|
+
* the source aspect ratio at the solved grid's long edge. Small images are
|
|
22
|
+
* never enlarged.
|
|
23
|
+
*/
|
|
24
|
+
export declare function requestImageTokenDimensions(width: number, height: number): ProjectedDimensions;
|
|
25
|
+
/**
|
|
26
|
+
* Vision tokens charged for one request image of the given dimensions
|
|
27
|
+
* (DeepSeek V41 published calculator). At most {@link MAX_IMAGE_TOKENS}.
|
|
28
|
+
*/
|
|
29
|
+
export declare function estimateImageTokens(width: number, height: number): number;
|
|
30
|
+
//# sourceMappingURL=image-tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-tokens.d.ts","sourceRoot":"","sources":["../src/image-tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAC;AAMjC,oDAAoD;AACpD,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAKrC;;;GAGG;AACH,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAsHhD;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,mBAAmB,CAerB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAUzE"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DeepSeek vision-token accounting (api-docs.deepseek.com Token & Token Usage,
|
|
3
|
+
* published `v41` configuration) ported for soft-budget / request projection.
|
|
4
|
+
*
|
|
5
|
+
* The provider scales an image below 544×544 total pixels up, aligns it to a
|
|
6
|
+
* 14px-patch grid, downsamples 3:1 per axis into token cells, and caps one
|
|
7
|
+
* image at 1024 tokens. The count is exact for this configuration (no
|
|
8
|
+
* alignment pad, no aspect-ratio clamp). Provider usage remains authoritative.
|
|
9
|
+
*/
|
|
10
|
+
import { longEdgeDimensions, } from "./request-projection.js";
|
|
11
|
+
/** Vision patch edge in pixels. */
|
|
12
|
+
const PATCH_SIZE = 14;
|
|
13
|
+
/** Per-axis patch-to-token downsampling ratio. */
|
|
14
|
+
const DOWNSAMPLE_RATIO = 3;
|
|
15
|
+
/** Provider cap on tokens for one request image. */
|
|
16
|
+
export const MAX_IMAGE_TOKENS = 1024;
|
|
17
|
+
/** Total-pixel floor; smaller images are scaled up before grid projection. */
|
|
18
|
+
const MIN_PIXELS = 544 * 544;
|
|
19
|
+
/** Pixels covered by one token cell along either axis. */
|
|
20
|
+
const CELL_SIZE = PATCH_SIZE * DOWNSAMPLE_RATIO;
|
|
21
|
+
/**
|
|
22
|
+
* Provider per-side limit when many images share a request (DSH
|
|
23
|
+
* `REQUEST_IMAGE_MAX_DIMENSION`). Applied after token-grid projection.
|
|
24
|
+
*/
|
|
25
|
+
export const REQUEST_IMAGE_MAX_DIMENSION = 4096;
|
|
26
|
+
const intDiv = (value, divisor) => Math.floor(value / divisor);
|
|
27
|
+
const ceilDiv = (value, divisor) => Math.floor((value + divisor - 1) / divisor);
|
|
28
|
+
/** Token count of one grid: every row carries a separator, plus two framing tokens. */
|
|
29
|
+
function gridTokens(gridHeight, gridWidth) {
|
|
30
|
+
return gridHeight * (gridWidth + 1) + 2;
|
|
31
|
+
}
|
|
32
|
+
/** Token-cell count along one padded pixel axis. */
|
|
33
|
+
function gridCells(paddedLength) {
|
|
34
|
+
return ceilDiv(intDiv(paddedLength, PATCH_SIZE), DOWNSAMPLE_RATIO);
|
|
35
|
+
}
|
|
36
|
+
/** Solve the largest grid within `budget` tokens preserving the aspect ratio. */
|
|
37
|
+
function solveResizeRatio(height, width, budget) {
|
|
38
|
+
const aspect = height / width;
|
|
39
|
+
const idealGridWidth = Math.sqrt((budget - 2) / aspect + 0.25) - 0.5;
|
|
40
|
+
const idealGridHeight = idealGridWidth * aspect;
|
|
41
|
+
let bestHeight;
|
|
42
|
+
let bestWidth;
|
|
43
|
+
if (idealGridWidth < 1) {
|
|
44
|
+
const solvedGridWidth = 1;
|
|
45
|
+
const solvedGridHeight = intDiv(budget - 2, solvedGridWidth + 1);
|
|
46
|
+
bestWidth = solvedGridWidth * CELL_SIZE;
|
|
47
|
+
bestHeight = solvedGridHeight * CELL_SIZE;
|
|
48
|
+
}
|
|
49
|
+
else if (idealGridHeight < 1) {
|
|
50
|
+
const solvedGridHeight = 1;
|
|
51
|
+
const solvedGridWidth = intDiv(budget - 2, solvedGridHeight) - 1;
|
|
52
|
+
bestWidth = solvedGridWidth * CELL_SIZE;
|
|
53
|
+
bestHeight = solvedGridHeight * CELL_SIZE;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
const solvedGridWidth = Math.trunc(idealGridWidth);
|
|
57
|
+
const solvedGridHeight = Math.trunc(idealGridHeight);
|
|
58
|
+
const scale = Math.min((solvedGridWidth * CELL_SIZE) / width, (solvedGridHeight * CELL_SIZE) / height);
|
|
59
|
+
bestWidth = Math.trunc((width * scale) / PATCH_SIZE) * PATCH_SIZE;
|
|
60
|
+
bestHeight = Math.trunc((height * scale) / PATCH_SIZE) * PATCH_SIZE;
|
|
61
|
+
}
|
|
62
|
+
const gridHeight = gridCells(bestHeight);
|
|
63
|
+
const gridWidth = gridCells(bestWidth);
|
|
64
|
+
return {
|
|
65
|
+
gridHeight,
|
|
66
|
+
gridWidth,
|
|
67
|
+
bestHeight,
|
|
68
|
+
bestWidth,
|
|
69
|
+
numTokens: gridTokens(gridHeight, gridWidth),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/** Project padded pixel dimensions onto the largest in-budget token grid. */
|
|
73
|
+
function safeResize(height, width, paddedHeight, paddedWidth) {
|
|
74
|
+
const gridHeight = gridCells(paddedHeight);
|
|
75
|
+
const gridWidth = gridCells(paddedWidth);
|
|
76
|
+
const direct = {
|
|
77
|
+
gridHeight,
|
|
78
|
+
gridWidth,
|
|
79
|
+
bestHeight: paddedHeight,
|
|
80
|
+
bestWidth: paddedWidth,
|
|
81
|
+
numTokens: gridTokens(gridHeight, gridWidth),
|
|
82
|
+
};
|
|
83
|
+
if (direct.numTokens <= MAX_IMAGE_TOKENS)
|
|
84
|
+
return direct;
|
|
85
|
+
const solved = solveResizeRatio(height, width, MAX_IMAGE_TOKENS);
|
|
86
|
+
if (solved.numTokens > MAX_IMAGE_TOKENS) {
|
|
87
|
+
throw new Error(`image tokens: no grid fits the token budget for ${width}x${height}`);
|
|
88
|
+
}
|
|
89
|
+
return solved;
|
|
90
|
+
}
|
|
91
|
+
/** One scale-pad-project pass; the caller iterates it to a fixpoint. */
|
|
92
|
+
function resizeOnce(width, height) {
|
|
93
|
+
let scaledWidth = width;
|
|
94
|
+
let scaledHeight = height;
|
|
95
|
+
const pixels = scaledWidth * scaledHeight;
|
|
96
|
+
if (pixels < MIN_PIXELS && pixels > 0) {
|
|
97
|
+
const scale = Math.sqrt(MIN_PIXELS / pixels);
|
|
98
|
+
scaledWidth = Math.trunc(scaledWidth * scale);
|
|
99
|
+
scaledHeight = Math.trunc(scaledHeight * scale);
|
|
100
|
+
}
|
|
101
|
+
const paddedWidth = ceilDiv(scaledWidth, PATCH_SIZE) * PATCH_SIZE;
|
|
102
|
+
const paddedHeight = ceilDiv(scaledHeight, PATCH_SIZE) * PATCH_SIZE;
|
|
103
|
+
return safeResize(scaledHeight, scaledWidth, paddedHeight, paddedWidth);
|
|
104
|
+
}
|
|
105
|
+
function sameResize(a, b) {
|
|
106
|
+
return (a.gridHeight === b.gridHeight &&
|
|
107
|
+
a.gridWidth === b.gridWidth &&
|
|
108
|
+
a.bestHeight === b.bestHeight &&
|
|
109
|
+
a.bestWidth === b.bestWidth &&
|
|
110
|
+
a.numTokens === b.numTokens);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Dimensions the harness should send so the provider keeps the whole image:
|
|
114
|
+
* the source itself when its patch-padded grid fits the token cap, otherwise
|
|
115
|
+
* the source aspect ratio at the solved grid's long edge. Small images are
|
|
116
|
+
* never enlarged.
|
|
117
|
+
*/
|
|
118
|
+
export function requestImageTokenDimensions(width, height) {
|
|
119
|
+
const paddedWidth = ceilDiv(width, PATCH_SIZE) * PATCH_SIZE;
|
|
120
|
+
const paddedHeight = ceilDiv(height, PATCH_SIZE) * PATCH_SIZE;
|
|
121
|
+
if (gridTokens(gridCells(paddedHeight), gridCells(paddedWidth)) <=
|
|
122
|
+
MAX_IMAGE_TOKENS) {
|
|
123
|
+
return { width, height };
|
|
124
|
+
}
|
|
125
|
+
const solved = solveResizeRatio(height, width, MAX_IMAGE_TOKENS);
|
|
126
|
+
return longEdgeDimensions(width, height, width >= height ? solved.bestWidth : solved.bestHeight);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Vision tokens charged for one request image of the given dimensions
|
|
130
|
+
* (DeepSeek V41 published calculator). At most {@link MAX_IMAGE_TOKENS}.
|
|
131
|
+
*/
|
|
132
|
+
export function estimateImageTokens(width, height) {
|
|
133
|
+
let result = resizeOnce(width, height);
|
|
134
|
+
for (let iteration = 1; iteration < 10; iteration += 1) {
|
|
135
|
+
const next = resizeOnce(result.bestWidth, result.bestHeight);
|
|
136
|
+
if (sameResize(next, result))
|
|
137
|
+
return result.numTokens;
|
|
138
|
+
result = next;
|
|
139
|
+
}
|
|
140
|
+
throw new Error(`image tokens: resize did not converge for ${width}x${height}`);
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=image-tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-tokens.js","sourceRoot":"","sources":["../src/image-tokens.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,4 +10,6 @@ export { createMemoryAttachmentStore, type CreateMemoryAttachmentStoreOptions, }
|
|
|
10
10
|
export { sniffImageMediaType, readImageSize } from "./image-meta.js";
|
|
11
11
|
export { attachmentIdForBytes } from "./digest.js";
|
|
12
12
|
export { DEFAULT_MAX_REQUEST_IMAGE_BYTES, REQUEST_IMAGE_OFFLOAD_PLACEHOLDER, offloadRequestImages, } from "./request-image-bound.js";
|
|
13
|
+
export { longEdgeDimensions, requestImageDimensions, type ProjectedDimensions, } from "./request-projection.js";
|
|
14
|
+
export { MAX_IMAGE_TOKENS, REQUEST_IMAGE_MAX_DIMENSION, estimateImageTokens, requestImageTokenDimensions, } from "./image-tokens.js";
|
|
13
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EACV,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,KAAK,mBAAmB,GACzB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EACL,2BAA2B,EAC3B,KAAK,kCAAkC,GACxC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,+BAA+B,EAC/B,iCAAiC,EACjC,oBAAoB,GACrB,MAAM,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EACV,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,KAAK,mBAAmB,GACzB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EACL,2BAA2B,EAC3B,KAAK,kCAAkC,GACxC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,+BAA+B,EAC/B,iCAAiC,EACjC,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,gBAAgB,EAChB,2BAA2B,EAC3B,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC"}
|
|
@@ -8,4 +8,6 @@ export { createMemoryAttachmentStore, } from "./memory.js";
|
|
|
8
8
|
export { sniffImageMediaType, readImageSize } from "./image-meta.js";
|
|
9
9
|
export { attachmentIdForBytes } from "./digest.js";
|
|
10
10
|
export { DEFAULT_MAX_REQUEST_IMAGE_BYTES, REQUEST_IMAGE_OFFLOAD_PLACEHOLDER, offloadRequestImages, } from "./request-image-bound.js";
|
|
11
|
+
export { longEdgeDimensions, requestImageDimensions, } from "./request-projection.js";
|
|
12
|
+
export { MAX_IMAGE_TOKENS, REQUEST_IMAGE_MAX_DIMENSION, estimateImageTokens, requestImageTokenDimensions, } from "./image-tokens.js";
|
|
11
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,qBAAqB,GAEtB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,2BAA2B,GAE5B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,+BAA+B,EAC/B,iCAAiC,EACjC,oBAAoB,GACrB,MAAM,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,qBAAqB,GAEtB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,2BAA2B,GAE5B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,+BAA+B,EAC/B,iCAAiC,EACjC,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,kBAAkB,EAClB,sBAAsB,GAEvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,gBAAgB,EAChB,2BAA2B,EAC3B,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure request-projection geometry shared by model routes and soft-budget
|
|
3
|
+
* pricing. Aligned with DSH `@deepseek-ai/dsh-attachment` request-projection.
|
|
4
|
+
*/
|
|
5
|
+
/** Integer width and height of one projected image. */
|
|
6
|
+
export interface ProjectedDimensions {
|
|
7
|
+
readonly width: number;
|
|
8
|
+
readonly height: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Aspect-preserving integer dimensions within a hard total-pixel budget.
|
|
12
|
+
* Small images are not enlarged.
|
|
13
|
+
*/
|
|
14
|
+
export declare function requestImageDimensions(width: number, height: number, maxPixels: number): ProjectedDimensions;
|
|
15
|
+
/**
|
|
16
|
+
* Aspect-preserving dimensions with an exact long edge (short edge rounds).
|
|
17
|
+
* A long edge at or above the source returns the source unchanged.
|
|
18
|
+
*/
|
|
19
|
+
export declare function longEdgeDimensions(width: number, height: number, longEdge: number): ProjectedDimensions;
|
|
20
|
+
//# sourceMappingURL=request-projection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-projection.d.ts","sourceRoot":"","sources":["../src/request-projection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,uDAAuD;AACvD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,mBAAmB,CAqCrB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,mBAAmB,CAWrB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure request-projection geometry shared by model routes and soft-budget
|
|
3
|
+
* pricing. Aligned with DSH `@deepseek-ai/dsh-attachment` request-projection.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Aspect-preserving integer dimensions within a hard total-pixel budget.
|
|
7
|
+
* Small images are not enlarged.
|
|
8
|
+
*/
|
|
9
|
+
export function requestImageDimensions(width, height, maxPixels) {
|
|
10
|
+
const scale = Math.min(1, Math.sqrt(maxPixels / (width * height)));
|
|
11
|
+
if (scale === 1)
|
|
12
|
+
return { width, height };
|
|
13
|
+
if (width >= height) {
|
|
14
|
+
let projectedWidth = Math.max(1, Math.floor(width * scale));
|
|
15
|
+
let projectedHeight = Math.max(1, Math.round((projectedWidth * height) / width));
|
|
16
|
+
while (projectedWidth * projectedHeight > maxPixels &&
|
|
17
|
+
projectedWidth > 1) {
|
|
18
|
+
projectedWidth -= 1;
|
|
19
|
+
projectedHeight = Math.max(1, Math.round((projectedWidth * height) / width));
|
|
20
|
+
}
|
|
21
|
+
return { width: projectedWidth, height: projectedHeight };
|
|
22
|
+
}
|
|
23
|
+
let projectedHeight = Math.max(1, Math.floor(height * scale));
|
|
24
|
+
let projectedWidth = Math.max(1, Math.round((projectedHeight * width) / height));
|
|
25
|
+
while (projectedWidth * projectedHeight > maxPixels &&
|
|
26
|
+
projectedHeight > 1) {
|
|
27
|
+
projectedHeight -= 1;
|
|
28
|
+
projectedWidth = Math.max(1, Math.round((projectedHeight * width) / height));
|
|
29
|
+
}
|
|
30
|
+
return { width: projectedWidth, height: projectedHeight };
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Aspect-preserving dimensions with an exact long edge (short edge rounds).
|
|
34
|
+
* A long edge at or above the source returns the source unchanged.
|
|
35
|
+
*/
|
|
36
|
+
export function longEdgeDimensions(width, height, longEdge) {
|
|
37
|
+
if (longEdge >= Math.max(width, height))
|
|
38
|
+
return { width, height };
|
|
39
|
+
return width >= height
|
|
40
|
+
? {
|
|
41
|
+
width: longEdge,
|
|
42
|
+
height: Math.max(1, Math.round((longEdge * height) / width)),
|
|
43
|
+
}
|
|
44
|
+
: {
|
|
45
|
+
width: Math.max(1, Math.round((longEdge * width) / height)),
|
|
46
|
+
height: longEdge,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=request-projection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-projection.js","sourceRoot":"","sources":["../src/request-projection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAa,EACb,MAAc,EACd,SAAiB;IAEjB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACnE,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC1C,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;QACpB,IAAI,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;QAC5D,IAAI,eAAe,GAAG,IAAI,CAAC,GAAG,CAC5B,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,CAC9C,CAAC;QACF,OACE,cAAc,GAAG,eAAe,GAAG,SAAS;YAC5C,cAAc,GAAG,CAAC,EAClB,CAAC;YACD,cAAc,IAAI,CAAC,CAAC;YACpB,eAAe,GAAG,IAAI,CAAC,GAAG,CACxB,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,CAC9C,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IAC5D,CAAC;IACD,IAAI,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;IAC9D,IAAI,cAAc,GAAG,IAAI,CAAC,GAAG,CAC3B,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,CAC/C,CAAC;IACF,OACE,cAAc,GAAG,eAAe,GAAG,SAAS;QAC5C,eAAe,GAAG,CAAC,EACnB,CAAC;QACD,eAAe,IAAI,CAAC,CAAC;QACrB,cAAc,GAAG,IAAI,CAAC,GAAG,CACvB,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,CAC/C,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAa,EACb,MAAc,EACd,QAAgB;IAEhB,IAAI,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAClE,OAAO,KAAK,IAAI,MAAM;QACpB,CAAC,CAAC;YACE,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC;SAC7D;QACH,CAAC,CAAC;YACE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC;YAC3D,MAAM,EAAE,QAAQ;SACjB,CAAC;AACR,CAAC"}
|
|
@@ -4,17 +4,8 @@ import type { ImageAttachmentRef, ImageRequestPolicy, RequestImageAttachment, St
|
|
|
4
4
|
export declare const REQUEST_IMAGE_TRANSFORM_VERSION = "request-image-v4";
|
|
5
5
|
/** DeepSeek request versions normally fit at these two preferred qualities. */
|
|
6
6
|
export declare const REQUEST_IMAGE_QUALITIES: readonly [85, 80];
|
|
7
|
-
/**
|
|
8
|
-
|
|
9
|
-
* @param width - positive source width.
|
|
10
|
-
* @param height - positive source height.
|
|
11
|
-
* @param maxPixels - positive width-times-height cap.
|
|
12
|
-
* @returns inward-rounded dimensions; small images are not enlarged.
|
|
13
|
-
*/
|
|
14
|
-
export declare function requestImageDimensions(width: number, height: number, maxPixels: number): {
|
|
15
|
-
width: number;
|
|
16
|
-
height: number;
|
|
17
|
-
};
|
|
7
|
+
/** Re-export shared projection (callers historically imported from this module). */
|
|
8
|
+
export { requestImageDimensions } from '@xrkseek/attachment';
|
|
18
9
|
/**
|
|
19
10
|
* Complete deterministic identity for one attachment and route-owned request policy.
|
|
20
11
|
* @param attachment - provider-independent durable normalized attachment reference.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-image.d.ts","sourceRoot":"","sources":["../src/request-image.ts"],"names":[],"mappings":"AAAA,8DAA8D;
|
|
1
|
+
{"version":3,"file":"request-image.d.ts","sourceRoot":"","sources":["../src/request-image.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAU9D,OAAO,KAAK,EAEV,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,qBAAqB,CAAA;AAM5B,2EAA2E;AAC3E,eAAO,MAAM,+BAA+B,qBAAqB,CAAA;AACjE,+EAA+E;AAC/E,eAAO,MAAM,uBAAuB,mBAAoB,CAAA;AAExD,oFAAoF;AACpF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AA6C5D;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,kBAAkB,EAC9B,MAAM,EAAE,kBAAkB,GACzB,MAAM,CAER;AAmID;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,qBAAqB,EACjC,MAAM,EAAE,kBAAkB,EAC1B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,sBAAsB,CAAC,CA0BjC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { createHash, randomUUID } from 'node:crypto';
|
|
3
3
|
import { mkdir, readFile, rename, rm, writeFile } from 'node:fs/promises';
|
|
4
4
|
import { dirname, join } from 'node:path';
|
|
5
|
-
import { AttachmentError } from '@xrkseek/attachment';
|
|
5
|
+
import { AttachmentError, requestImageDimensions, } from '@xrkseek/attachment';
|
|
6
6
|
import { hasLowColourCount } from './normalization.js';
|
|
7
7
|
import { encodeFirstWithinLimit, isExhaustedEncoding } from './encoding.js';
|
|
8
8
|
import { detectImage, encodedAlphaIsCompatible, probeImage } from './image.js';
|
|
@@ -11,37 +11,11 @@ import { getSharp } from './sharp-module.js';
|
|
|
11
11
|
export const REQUEST_IMAGE_TRANSFORM_VERSION = 'request-image-v4';
|
|
12
12
|
/** DeepSeek request versions normally fit at these two preferred qualities. */
|
|
13
13
|
export const REQUEST_IMAGE_QUALITIES = [85, 80];
|
|
14
|
+
/** Re-export shared projection (callers historically imported from this module). */
|
|
15
|
+
export { requestImageDimensions } from '@xrkseek/attachment';
|
|
14
16
|
function digest(value) {
|
|
15
17
|
return createHash('sha256').update(value).digest('hex');
|
|
16
18
|
}
|
|
17
|
-
/**
|
|
18
|
-
* Compute aspect-preserving integer dimensions within a hard total-pixel budget.
|
|
19
|
-
* @param width - positive source width.
|
|
20
|
-
* @param height - positive source height.
|
|
21
|
-
* @param maxPixels - positive width-times-height cap.
|
|
22
|
-
* @returns inward-rounded dimensions; small images are not enlarged.
|
|
23
|
-
*/
|
|
24
|
-
export function requestImageDimensions(width, height, maxPixels) {
|
|
25
|
-
const scale = Math.min(1, Math.sqrt(maxPixels / (width * height)));
|
|
26
|
-
if (scale === 1)
|
|
27
|
-
return { width, height };
|
|
28
|
-
if (width >= height) {
|
|
29
|
-
let projectedWidth = Math.max(1, Math.floor(width * scale));
|
|
30
|
-
let projectedHeight = Math.max(1, Math.round(projectedWidth * height / width));
|
|
31
|
-
while (projectedWidth * projectedHeight > maxPixels && projectedWidth > 1) {
|
|
32
|
-
projectedWidth -= 1;
|
|
33
|
-
projectedHeight = Math.max(1, Math.round(projectedWidth * height / width));
|
|
34
|
-
}
|
|
35
|
-
return { width: projectedWidth, height: projectedHeight };
|
|
36
|
-
}
|
|
37
|
-
let projectedHeight = Math.max(1, Math.floor(height * scale));
|
|
38
|
-
let projectedWidth = Math.max(1, Math.round(projectedHeight * width / height));
|
|
39
|
-
while (projectedWidth * projectedHeight > maxPixels && projectedHeight > 1) {
|
|
40
|
-
projectedHeight -= 1;
|
|
41
|
-
projectedWidth = Math.max(1, Math.round(projectedHeight * width / height));
|
|
42
|
-
}
|
|
43
|
-
return { width: projectedWidth, height: projectedHeight };
|
|
44
|
-
}
|
|
45
19
|
function checkedInteger(value, name) {
|
|
46
20
|
if (!Number.isSafeInteger(value) || value <= 0) {
|
|
47
21
|
throw new AttachmentError(`${name} must be a positive integer.`, 'INVALID_ATTACHMENT_REF');
|