@nomix-ai/nomix-harness 0.2.5 → 0.2.6
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/README.md +2 -9
- package/dist/assets/web/assets/index-BnapMmQ_.css +1 -0
- package/dist/assets/web/assets/index-Dx7Ws_OC.js +96 -0
- package/dist/assets/web/assets/langs/{php-D-uCvoST.js → php-DDkx9sim.js} +2 -2
- package/dist/{kernel/web-frontend/dist/assets/langs/ruby-DEItuUFs.js → assets/web/assets/langs/ruby-DCxyoPen.js} +2 -2
- package/dist/assets/web/assets/{vendor-Cjbwl5VI.js → vendor-D22_Mp1f.js} +2 -2
- package/dist/assets/web/favicon.svg +8 -0
- package/dist/assets/web/index.html +5 -5
- package/dist/bundles/base/cordis.patch.yml +31 -6
- package/dist/bundles/web-app/cordis.patch.yml +27 -6
- package/dist/cli/bin.js +4 -5
- package/dist/cli/builtin-registry.js +34 -4
- package/dist/cli/{dump-config-d3ECray2.js → dump-config-BEj2GlJo.js} +1 -1
- package/dist/cli/{plugin-Bw9wgrmj.js → plugin-D_gLgCYL.js} +1 -1
- package/dist/cli/profile-boot-BSrYtiQI.js +2 -0
- package/dist/cli/{profile-boot-DFHdh9Xq.js → profile-boot-CByqUxLM.js} +0 -2
- package/dist/cli/runtime.js +0 -2
- package/dist/config/agent-presets/code/agent.cordis.yml +4 -3
- package/dist/config/agent-presets/cordis/agent.cordis.yml +4 -3
- package/dist/config/agent-presets/cordis/skills/editing-cordis-compositions/SKILL.md +13 -2
- package/dist/config/agent-presets/minimal/agent.cordis.yml +27 -1
- package/dist/config/agent-presets/standard/agent.cordis.yml +4 -3
- package/dist/kernel/acp/package.json +1 -1
- package/dist/kernel/agent/package.json +1 -1
- package/dist/kernel/agent-default-model/package.json +1 -1
- package/dist/kernel/agent-instructions/package.json +1 -1
- package/dist/kernel/agent-loop/lib/index.js +33 -10
- package/dist/kernel/agent-loop/lib/types/agent.js +26 -6
- package/dist/kernel/agent-loop/package.json +1 -1
- package/dist/kernel/agent-presets/package.json +1 -1
- package/dist/kernel/agent-tool-presentation/package.json +1 -1
- package/dist/kernel/anonymous-user-id/package.json +1 -1
- package/dist/kernel/api-gateway/lib/client.js +84 -55
- package/dist/kernel/api-gateway/lib/types/client/index.js +93 -61
- package/dist/kernel/api-gateway/package.json +1 -1
- package/dist/kernel/api-remotes/lib/client.js +166 -27
- package/dist/kernel/api-remotes/lib/index.js +1 -1
- package/dist/kernel/api-remotes/lib/types/client/index.d.ts +4 -0
- package/dist/kernel/api-remotes/lib/types/client/index.js +4 -1
- package/dist/kernel/api-remotes/lib/types/remote-events.d.ts +1 -1
- package/dist/kernel/api-remotes/lib/types/remote-events.js +1 -1
- package/dist/kernel/api-remotes/package.json +11 -7
- package/dist/kernel/app-boot/lib/index.js +19 -41
- package/dist/kernel/app-boot/lib/types/index.d.ts +0 -1
- package/dist/kernel/app-boot/lib/types/index.js +2 -3
- package/dist/kernel/app-boot/lib/types/profile.d.ts +15 -12
- package/dist/kernel/app-boot/lib/types/profile.js +15 -25
- package/dist/kernel/app-boot/package.json +1 -1
- package/dist/kernel/atomic-write/lib/index.js +36 -16
- package/dist/kernel/atomic-write/lib/types/index.d.ts +21 -5
- package/dist/kernel/atomic-write/lib/types/index.js +40 -16
- package/dist/kernel/atomic-write/package.json +1 -1
- package/dist/kernel/attachment/lib/index.js +62 -3
- package/dist/kernel/attachment/lib/types/admission.d.ts +15 -0
- package/dist/kernel/attachment/lib/types/admission.js +33 -0
- package/dist/kernel/attachment/lib/types/brand.d.ts +8 -0
- package/dist/kernel/attachment/lib/types/brand.js +8 -0
- package/dist/kernel/attachment/lib/types/error.d.ts +2 -2
- package/dist/kernel/attachment/lib/types/error.js +1 -0
- package/dist/kernel/attachment/lib/types/index.d.ts +23 -5
- package/dist/kernel/attachment/lib/types/index.js +24 -2
- package/dist/kernel/attachment/lib/types/types.d.ts +47 -2
- package/dist/kernel/attachment/package.json +3 -2
- package/dist/kernel/attachment-local/lib/index.js +640 -48
- package/dist/kernel/attachment-local/lib/types/compression-limiter.d.ts +18 -0
- package/dist/kernel/attachment-local/lib/types/compression-limiter.js +43 -0
- package/dist/kernel/attachment-local/lib/types/encoding.d.ts +23 -0
- package/dist/kernel/attachment-local/lib/types/encoding.js +33 -0
- package/dist/kernel/attachment-local/lib/types/image.d.ts +31 -2
- package/dist/kernel/attachment-local/lib/types/image.js +43 -4
- package/dist/kernel/attachment-local/lib/types/index.d.ts +45 -10
- package/dist/kernel/attachment-local/lib/types/index.js +140 -10
- package/dist/kernel/attachment-local/lib/types/normalization.d.ts +44 -0
- package/dist/kernel/attachment-local/lib/types/normalization.js +148 -0
- package/dist/kernel/attachment-local/lib/types/request-image.d.ts +35 -0
- package/dist/kernel/attachment-local/lib/types/request-image.js +208 -0
- package/dist/kernel/attachment-local/lib/types/store.d.ts +36 -9
- package/dist/kernel/attachment-local/lib/types/store.js +60 -24
- package/dist/kernel/attachment-local/package.json +1 -1
- package/dist/kernel/authorization/lib/index.js +248 -0
- package/dist/kernel/authorization/lib/invariant.js +36 -0
- package/dist/kernel/authorization/lib/types/index.d.ts +223 -0
- package/dist/kernel/authorization/lib/types/index.js +299 -0
- package/dist/kernel/authorization/lib/types/invariant.d.ts +16 -0
- package/dist/kernel/authorization/lib/types/invariant.js +38 -0
- package/dist/kernel/authorization/lib/types/types.d.ts +83 -0
- package/dist/kernel/authorization/lib/types/types.js +8 -0
- package/dist/kernel/{client-web-react → authorization}/package.json +19 -16
- package/dist/kernel/base/cordis.patch.yml +31 -6
- package/dist/kernel/base/package.json +3 -1
- package/dist/kernel/bash-local/package.json +1 -1
- package/dist/kernel/bash-sandbox/package.json +1 -1
- package/dist/kernel/brand/package.json +1 -1
- package/dist/kernel/client-connection/lib/client.js +148 -28
- package/dist/kernel/client-connection/lib/index.js +4 -4
- package/dist/kernel/client-connection/lib/types/client/fixture.js +112 -20
- package/dist/kernel/client-connection/lib/types/client/index.d.ts +21 -1
- package/dist/kernel/client-connection/lib/types/client/index.js +3 -2
- package/dist/kernel/client-connection/lib/types/client/rpc.d.ts +4 -1
- package/dist/kernel/client-connection/lib/types/client/rpc.js +4 -2
- package/dist/kernel/client-connection/lib/types/http-bridge.d.ts +2 -2
- package/dist/kernel/client-connection/lib/types/http-bridge.js +3 -3
- package/dist/kernel/client-connection/lib/types/index.d.ts +1 -1
- package/dist/kernel/client-connection/package.json +15 -9
- package/dist/kernel/client-hmr/package.json +1 -1
- package/dist/kernel/client-locale/lib/client.js +48 -9
- package/dist/kernel/client-locale/lib/types/client/index.d.ts +19 -3
- package/dist/kernel/client-locale/lib/types/client/index.js +48 -7
- package/dist/kernel/client-locale/package.json +6 -6
- package/dist/kernel/client-modules/lib/client.js +188 -123
- package/dist/kernel/client-modules/lib/index.js +177 -31
- package/dist/kernel/client-modules/lib/types/client/index.d.ts +19 -8
- package/dist/kernel/client-modules/lib/types/client/index.js +25 -8
- package/dist/kernel/client-modules/lib/types/client/manifest.d.ts +90 -41
- package/dist/kernel/client-modules/lib/types/client/manifest.js +45 -12
- package/dist/kernel/client-modules/lib/types/client/system.d.ts +15 -17
- package/dist/kernel/client-modules/lib/types/client/system.js +85 -56
- package/dist/kernel/client-modules/lib/types/index.d.ts +28 -12
- package/dist/kernel/client-modules/lib/types/index.js +128 -34
- package/dist/kernel/client-modules/package.json +4 -2
- package/dist/kernel/client-runtime/lib/client.js +43 -8
- package/dist/kernel/client-runtime/lib/types/client/contract/session.d.ts +1 -1
- package/dist/kernel/client-runtime/lib/types/client/contract/store.d.ts +1 -1
- package/dist/kernel/client-runtime/lib/types/client/contract/store.js +2 -2
- package/dist/kernel/client-runtime/lib/types/client/index.d.ts +2 -2
- package/dist/kernel/client-runtime/lib/types/client/index.js +3 -3
- package/dist/kernel/client-runtime/lib/types/client/sessions/context-provenance.d.ts +8 -0
- package/dist/kernel/client-runtime/lib/types/client/sessions/context-provenance.js +13 -0
- package/dist/kernel/client-runtime/lib/types/client/sessions/conversation.d.ts +11 -7
- package/dist/kernel/client-runtime/lib/types/client/sessions/projection-store.d.ts +1 -1
- package/dist/kernel/client-runtime/lib/types/client/sessions/session.d.ts +1 -1
- package/dist/kernel/client-runtime/lib/types/client/sessions/session.js +4 -4
- package/dist/kernel/client-runtime/lib/types/client/slots.d.ts +1 -1
- package/dist/kernel/client-runtime/lib/types/client/slots.js +1 -1
- package/dist/kernel/client-runtime/lib/types/client/workspaces/path.d.ts +9 -0
- package/dist/kernel/client-runtime/lib/types/client/workspaces/path.js +27 -1
- package/dist/kernel/client-runtime/package.json +25 -14
- package/dist/kernel/client-ui-agent-preset/lib/client.js +55 -55
- package/dist/kernel/client-ui-agent-preset/lib/types/client/index.js +2 -2
- package/dist/kernel/client-ui-agent-preset/lib/types/client/settings-store.d.ts +7 -1
- package/dist/kernel/client-ui-agent-preset/lib/types/client/settings-store.js +21 -20
- package/dist/kernel/client-ui-agent-preset/package.json +2 -7
- package/dist/kernel/client-ui-attachment/lib/client.js +782 -0
- package/dist/kernel/client-ui-attachment/lib/index.js +5 -505
- package/dist/kernel/client-ui-attachment/lib/invariant.js +2 -3
- package/dist/kernel/client-ui-attachment/lib/types/client/ComposerAttachments.d.ts +4 -0
- package/dist/kernel/client-ui-attachment/lib/types/client/ComposerAttachments.js +85 -0
- package/dist/kernel/client-ui-attachment/lib/types/client/MessageImages.d.ts +4 -0
- package/dist/kernel/client-ui-attachment/lib/types/client/MessageImages.js +8 -0
- package/dist/kernel/client-ui-attachment/lib/types/client/index.d.ts +7 -0
- package/dist/kernel/client-ui-attachment/lib/types/client/index.js +16 -0
- package/dist/kernel/client-ui-attachment/lib/types/client/labels.d.ts +35 -0
- package/dist/kernel/client-ui-attachment/lib/types/client/labels.js +52 -0
- package/dist/kernel/client-ui-attachment/lib/types/index.d.ts +3 -15
- package/dist/kernel/client-ui-attachment/lib/types/index.js +3 -11
- package/dist/kernel/client-ui-attachment/lib/types/invariant.js +2 -3
- package/dist/kernel/client-ui-attachment/package.json +32 -9
- package/dist/kernel/client-ui-brand-official/lib/client.js +50 -0
- package/dist/kernel/client-ui-brand-official/lib/index.js +9 -0
- package/dist/kernel/{client-web-react → client-ui-brand-official}/lib/invariant.js +6 -8
- package/dist/kernel/client-ui-brand-official/lib/types/client/Brand.d.ts +16 -0
- package/dist/kernel/client-ui-brand-official/lib/types/client/Brand.js +18 -0
- package/dist/kernel/client-ui-brand-official/lib/types/client/index.d.ts +10 -0
- package/dist/kernel/client-ui-brand-official/lib/types/client/index.js +17 -0
- package/dist/kernel/client-ui-brand-official/lib/types/index.d.ts +7 -0
- package/dist/kernel/client-ui-brand-official/lib/types/index.js +7 -0
- package/dist/kernel/client-ui-brand-official/lib/types/invariant.d.ts +16 -0
- package/dist/kernel/{client-web-react → client-ui-brand-official}/lib/types/invariant.js +6 -8
- package/dist/kernel/client-ui-brand-official/package.json +72 -0
- package/dist/kernel/client-ui-commands/lib/client.js +44 -15
- package/dist/kernel/client-ui-commands/lib/types/client/locales.d.ts +2 -0
- package/dist/kernel/client-ui-commands/lib/types/client/locales.js +2 -0
- package/dist/kernel/client-ui-commands/lib/types/client/service.d.ts +11 -1
- package/dist/kernel/client-ui-commands/lib/types/client/service.js +39 -7
- package/dist/kernel/client-ui-commands/package.json +2 -5
- package/dist/kernel/client-ui-conversation/lib/client.js +949 -531
- package/dist/kernel/client-ui-conversation/lib/types/client/apply.js +6 -4
- package/dist/kernel/client-ui-conversation/lib/types/client/chat/AssistantMarkdown.d.ts +4 -5
- package/dist/kernel/client-ui-conversation/lib/types/client/chat/AssistantMarkdown.js +6 -6
- package/dist/kernel/client-ui-conversation/lib/types/client/chat/AssistantNodeView.d.ts +1 -1
- package/dist/kernel/client-ui-conversation/lib/types/client/chat/AssistantNodeView.js +2 -2
- package/dist/kernel/client-ui-conversation/lib/types/client/chat/ChatNodeSeat.d.ts +1 -1
- package/dist/kernel/client-ui-conversation/lib/types/client/chat/ChatNodeSeat.js +5 -3
- package/dist/kernel/client-ui-conversation/lib/types/client/chat/ChatView.js +53 -10
- package/dist/kernel/client-ui-conversation/lib/types/client/chat/ContextInjectionRow.js +4 -1
- package/dist/kernel/client-ui-conversation/lib/types/client/chat/MessageItem.d.ts +4 -5
- package/dist/kernel/client-ui-conversation/lib/types/client/chat/MessageItem.js +46 -16
- package/dist/kernel/client-ui-conversation/lib/types/client/chat/StatsLine.d.ts +5 -3
- package/dist/kernel/client-ui-conversation/lib/types/client/chat/StatsLine.js +54 -5
- package/dist/kernel/client-ui-conversation/lib/types/client/contract/slots.d.ts +90 -8
- package/dist/kernel/client-ui-conversation/lib/types/client/conversation-nodes/assistant.js +1 -0
- package/dist/kernel/client-ui-conversation/lib/types/client/conversation-nodes/chat-snapshot-builder.d.ts +1 -0
- package/dist/kernel/client-ui-conversation/lib/types/client/conversation-nodes/chat-snapshot-builder.js +95 -6
- package/dist/kernel/client-ui-conversation/lib/types/client/conversation-nodes/message.d.ts +11 -3
- package/dist/kernel/client-ui-conversation/lib/types/client/conversation-nodes/turn-error.d.ts +6 -3
- package/dist/kernel/client-ui-conversation/lib/types/client/conversation-nodes/turn-error.js +10 -26
- package/dist/kernel/client-ui-conversation/lib/types/client/image-labels.d.ts +1 -33
- package/dist/kernel/client-ui-conversation/lib/types/client/image-labels.js +5 -54
- package/dist/kernel/client-ui-conversation/lib/types/client/index.d.ts +1 -1
- package/dist/kernel/client-ui-conversation/lib/types/client/input/contract.d.ts +17 -14
- package/dist/kernel/client-ui-conversation/lib/types/client/input/decorations.d.ts +13 -5
- package/dist/kernel/client-ui-conversation/lib/types/client/input/decorations.js +26 -10
- package/dist/kernel/client-ui-conversation/lib/types/client/input/facade.d.ts +34 -14
- package/dist/kernel/client-ui-conversation/lib/types/client/input/facade.js +116 -34
- package/dist/kernel/client-ui-conversation/lib/types/client/input/hub.d.ts +1 -1
- package/dist/kernel/client-ui-conversation/lib/types/client/input/hub.js +21 -19
- package/dist/kernel/client-ui-conversation/lib/types/client/input/machine.d.ts +35 -14
- package/dist/kernel/client-ui-conversation/lib/types/client/input/machine.js +71 -34
- package/dist/kernel/client-ui-conversation/lib/types/client/locales.d.ts +16 -0
- package/dist/kernel/client-ui-conversation/lib/types/client/locales.js +16 -0
- package/dist/kernel/client-ui-conversation/lib/types/client/reference/ReferenceIcon.d.ts +16 -0
- package/dist/kernel/client-ui-conversation/lib/types/client/reference/ReferenceIcon.js +16 -0
- package/dist/kernel/client-ui-conversation/lib/types/client/service.d.ts +14 -1
- package/dist/kernel/client-ui-conversation/lib/types/client/service.js +26 -6
- package/dist/kernel/client-ui-conversation/lib/types/client/skeleton/ConversationRoot.js +1 -1
- package/dist/kernel/client-ui-conversation/lib/types/client/skeleton/ConversationSession.js +18 -3
- package/dist/kernel/client-ui-conversation/lib/types/client/skeleton/EmptyHero.d.ts +3 -1
- package/dist/kernel/client-ui-conversation/lib/types/client/skeleton/EmptyHero.js +4 -2
- package/dist/kernel/client-ui-conversation/lib/types/client/skeleton/InputBar.js +141 -126
- package/dist/kernel/client-ui-conversation/package.json +9 -8
- package/dist/kernel/client-ui-cordis/lib/client.js +48 -48
- package/dist/kernel/client-ui-cordis/package.json +2 -5
- package/dist/kernel/client-ui-deliverables/lib/client.js +5 -5
- package/dist/kernel/client-ui-deliverables/package.json +4 -6
- package/dist/kernel/client-ui-directory-picker-browse/lib/client.js +26 -26
- package/dist/kernel/client-ui-directory-picker-browse/package.json +2 -5
- package/dist/kernel/client-ui-directory-picker-native/package.json +2 -5
- package/dist/kernel/client-ui-goal/lib/client.js +8 -8
- package/dist/kernel/client-ui-goal/package.json +6 -5
- package/dist/kernel/client-ui-input-trigger/lib/client.js +82 -26
- package/dist/kernel/client-ui-input-trigger/lib/types/client/MenuView.js +13 -9
- package/dist/kernel/client-ui-input-trigger/lib/types/client/controller.d.ts +5 -3
- package/dist/kernel/client-ui-input-trigger/lib/types/client/controller.js +19 -7
- package/dist/kernel/client-ui-input-trigger/lib/types/client/index.d.ts +1 -1
- package/dist/kernel/client-ui-input-trigger/lib/types/core/contract.d.ts +7 -2
- package/dist/kernel/client-ui-input-trigger/lib/types/core/detect.d.ts +4 -4
- package/dist/kernel/client-ui-input-trigger/lib/types/core/detect.js +24 -6
- package/dist/kernel/client-ui-input-trigger/lib/types/core/menu.d.ts +15 -2
- package/dist/kernel/client-ui-input-trigger/lib/types/core/menu.js +13 -4
- package/dist/kernel/client-ui-input-trigger/lib/types/types.d.ts +52 -8
- package/dist/kernel/client-ui-input-trigger/package.json +4 -5
- package/dist/kernel/client-ui-jobs/lib/client.js +10 -10
- package/dist/kernel/client-ui-jobs/package.json +3 -7
- package/dist/kernel/client-ui-layout/lib/client.js +3 -3
- package/dist/kernel/client-ui-layout/package.json +2 -4
- package/dist/kernel/client-ui-message-feedback/lib/client.js +174 -58
- package/dist/kernel/client-ui-message-feedback/lib/types/client/MessageFeedbackActions.d.ts +9 -3
- package/dist/kernel/client-ui-message-feedback/lib/types/client/MessageFeedbackActions.js +164 -25
- package/dist/kernel/client-ui-message-feedback/lib/types/client/locales.d.ts +2 -0
- package/dist/kernel/client-ui-message-feedback/lib/types/client/locales.js +2 -0
- package/dist/kernel/client-ui-message-feedback/package.json +3 -5
- package/dist/kernel/client-ui-model-selection/lib/client.js +18 -18
- package/dist/kernel/client-ui-model-selection/package.json +7 -9
- package/dist/kernel/client-ui-permission-presets/lib/client.js +97 -83
- package/dist/kernel/client-ui-permission-presets/lib/types/client/index.js +6 -19
- package/dist/kernel/client-ui-permission-presets/lib/types/client/settings-store.d.ts +27 -18
- package/dist/kernel/client-ui-permission-presets/lib/types/client/settings-store.js +95 -68
- package/dist/kernel/client-ui-permission-presets/package.json +2 -8
- package/dist/kernel/client-ui-plan/lib/client.js +1 -1
- package/dist/kernel/client-ui-plan/lib/types/client/index.js +1 -1
- package/dist/kernel/client-ui-plan/package.json +2 -6
- package/dist/kernel/client-ui-primitives/lib/Button.module.css +79 -0
- package/dist/kernel/client-ui-primitives/lib/ConnectionBanner.module.css +13 -0
- package/dist/kernel/client-ui-primitives/lib/DiffBlock.module.css +107 -0
- package/dist/kernel/client-ui-primitives/lib/DisclosureRow.module.css +69 -0
- package/dist/kernel/client-ui-primitives/lib/HoverCard.module.css +54 -0
- package/dist/kernel/client-ui-primitives/lib/Input.module.css +38 -0
- package/dist/kernel/client-ui-primitives/lib/JsonTree.module.css +222 -0
- package/dist/kernel/client-ui-primitives/lib/Menu.module.css +242 -0
- package/dist/kernel/client-ui-primitives/lib/Modal.module.css +103 -0
- package/dist/kernel/client-ui-primitives/lib/OnboardingSurface.module.css +29 -0
- package/dist/kernel/client-ui-primitives/lib/Pill.module.css +27 -0
- package/dist/kernel/client-ui-primitives/lib/ReadBlock.module.css +117 -0
- package/dist/kernel/client-ui-primitives/lib/RiskConfirmation.module.css +73 -0
- package/dist/kernel/client-ui-primitives/lib/SearchBlock.module.css +120 -0
- package/dist/kernel/client-ui-primitives/lib/StateDot.module.css +65 -0
- package/dist/kernel/client-ui-primitives/lib/TerminalBlock.module.css +211 -0
- package/dist/kernel/client-ui-primitives/lib/Toast.module.css +70 -0
- package/dist/kernel/client-ui-primitives/lib/Tooltip.module.css +49 -0
- package/dist/kernel/client-ui-primitives/lib/WebBlock.module.css +130 -0
- package/dist/kernel/client-ui-primitives/lib/index.js +291 -261
- package/dist/kernel/client-ui-primitives/lib/invariant.js +2 -0
- package/dist/kernel/client-ui-primitives/lib/markdown/CodeBlock.module.css +96 -0
- package/dist/kernel/client-ui-primitives/lib/markdown/JsonBlock.module.css +32 -0
- package/dist/kernel/client-ui-primitives/lib/markdown/MarkdownText.module.css +304 -0
- package/dist/kernel/client-ui-primitives/lib/markdown/MessageText.module.css +9 -0
- package/dist/kernel/client-ui-primitives/lib/types/BrandWordmark.d.ts +7 -1
- package/dist/kernel/client-ui-primitives/lib/types/BrandWordmark.js +4 -2
- package/dist/kernel/client-ui-primitives/lib/types/index.d.ts +4 -1
- package/dist/kernel/client-ui-primitives/lib/types/index.js +2 -1
- package/dist/kernel/client-ui-primitives/lib/types/markdown/render.d.ts +2 -0
- package/dist/kernel/client-ui-primitives/lib/types/markdown/render.js +10 -2
- package/dist/kernel/client-ui-primitives/lib/types/useAnchoredPosition.d.ts +32 -0
- package/dist/kernel/client-ui-primitives/lib/types/useAnchoredPosition.js +69 -0
- package/dist/kernel/client-ui-primitives/package.json +2 -1
- package/dist/kernel/client-ui-reference/lib/client.js +149 -0
- package/dist/kernel/client-ui-reference/lib/index.js +11 -0
- package/dist/kernel/{client-schema-form → client-ui-reference}/lib/invariant.js +7 -8
- package/dist/kernel/client-ui-reference/lib/types/client/index.d.ts +9 -0
- package/dist/kernel/client-ui-reference/lib/types/client/index.js +106 -0
- package/dist/kernel/client-ui-reference/lib/types/client/locales.d.ts +30 -0
- package/dist/kernel/client-ui-reference/lib/types/client/locales.js +22 -0
- package/dist/kernel/client-ui-reference/lib/types/index.d.ts +9 -0
- package/dist/kernel/client-ui-reference/lib/types/index.js +9 -0
- package/dist/kernel/{client-schema-form → client-ui-reference}/lib/types/invariant.d.ts +3 -3
- package/dist/kernel/{client-schema-form → client-ui-reference}/lib/types/invariant.js +7 -8
- package/dist/kernel/client-ui-reference/package.json +77 -0
- package/dist/kernel/client-ui-renderer/lib/client.js +989 -0
- package/dist/kernel/client-ui-renderer/lib/index.js +6 -0
- package/dist/kernel/client-ui-renderer/lib/invariant.js +23 -0
- package/dist/kernel/{client-web/lib/types → client-ui-renderer/lib/types/client}/DocumentTitle.d.ts +4 -4
- package/dist/kernel/client-ui-renderer/lib/types/client/DocumentTitle.js +17 -0
- package/dist/kernel/client-ui-renderer/lib/types/client/app.d.ts +18 -0
- package/dist/kernel/{client-web/lib/types → client-ui-renderer/lib/types/client}/app.js +5 -5
- package/dist/kernel/{client-web-react/lib/types → client-ui-renderer/lib/types/client}/bind.d.ts +1 -1
- package/dist/kernel/client-ui-renderer/lib/types/client/index.d.ts +29 -0
- package/dist/kernel/client-ui-renderer/lib/types/client/index.js +51 -0
- package/dist/kernel/{client-web-react/lib/types → client-ui-renderer/lib/types/client}/scoped-slots.d.ts +1 -1
- package/dist/kernel/{client-web-react/lib/types → client-ui-renderer/lib/types/client}/scoped-slots.js +1 -1
- package/dist/kernel/{client-web-react/lib/types → client-ui-renderer/lib/types/client}/session-provider.d.ts +1 -1
- package/dist/kernel/client-ui-renderer/lib/types/index.d.ts +4 -0
- package/dist/kernel/client-ui-renderer/lib/types/index.js +4 -0
- package/dist/kernel/{client-web-react → client-ui-renderer}/lib/types/invariant.d.ts +3 -3
- package/dist/kernel/client-ui-renderer/lib/types/invariant.js +22 -0
- package/dist/kernel/client-ui-renderer/package.json +71 -0
- package/dist/kernel/client-ui-settings/lib/client.js +1177 -67
- package/dist/kernel/client-ui-settings/lib/types/client/index.d.ts +20 -12
- package/dist/kernel/client-ui-settings/lib/types/client/index.js +25 -6
- package/dist/kernel/client-ui-settings/lib/types/client/schema.d.ts +72 -0
- package/dist/kernel/client-ui-settings/lib/types/client/schema.js +152 -0
- package/dist/kernel/client-ui-settings/lib/types/client/settings-mirror.d.ts +118 -0
- package/dist/kernel/client-ui-settings/lib/types/client/settings-mirror.js +160 -0
- package/dist/kernel/client-ui-settings/lib/types/client/settings-scope.d.ts +51 -24
- package/dist/kernel/client-ui-settings/lib/types/client/settings-scope.js +88 -71
- package/dist/kernel/client-ui-settings/package.json +7 -7
- package/dist/kernel/client-ui-settings-general/lib/client.js +60 -64
- package/dist/kernel/client-ui-settings-general/lib/types/client/SettingsDocumentAction.d.ts +7 -6
- package/dist/kernel/client-ui-settings-general/lib/types/client/index.js +10 -11
- package/dist/kernel/client-ui-settings-general/lib/types/client/settings-document-store.d.ts +13 -11
- package/dist/kernel/client-ui-settings-general/lib/types/client/settings-document-store.js +37 -40
- package/dist/kernel/client-ui-settings-general/package.json +4 -8
- package/dist/kernel/client-ui-settings-models/lib/client.js +280 -210
- package/dist/kernel/client-ui-settings-models/lib/types/client/DeepSeekOnboardingDialog.d.ts +3 -0
- package/dist/kernel/client-ui-settings-models/lib/types/client/DeepSeekOnboardingDialog.js +2 -2
- package/dist/kernel/client-ui-settings-models/lib/types/client/ModelListEditor.js +11 -1
- package/dist/kernel/client-ui-settings-models/lib/types/client/ModelsSection.d.ts +10 -5
- package/dist/kernel/client-ui-settings-models/lib/types/client/ModelsSection.js +9 -6
- package/dist/kernel/client-ui-settings-models/lib/types/client/ProviderEditor.d.ts +3 -0
- package/dist/kernel/client-ui-settings-models/lib/types/client/ProviderEditor.js +30 -29
- package/dist/kernel/client-ui-settings-models/lib/types/client/index.js +27 -22
- package/dist/kernel/client-ui-settings-models/lib/types/client/locales.d.ts +2 -0
- package/dist/kernel/client-ui-settings-models/lib/types/client/locales.js +4 -0
- package/dist/kernel/client-ui-settings-models/lib/types/client/schema-operations.d.ts +10 -0
- package/dist/kernel/client-ui-settings-models/lib/types/client/schema-operations.js +17 -0
- package/dist/kernel/client-ui-settings-models/lib/types/client/store.d.ts +15 -7
- package/dist/kernel/client-ui-settings-models/lib/types/client/store.js +30 -21
- package/dist/kernel/client-ui-settings-models/lib/types/client/welcome-store.d.ts +35 -18
- package/dist/kernel/client-ui-settings-models/lib/types/client/welcome-store.js +89 -82
- package/dist/kernel/client-ui-settings-models/package.json +3 -8
- package/dist/kernel/client-ui-settings-plugin-inventory/lib/client.js +11 -11
- package/dist/kernel/client-ui-settings-plugin-inventory/package.json +2 -5
- package/dist/kernel/client-ui-settings-plugins/lib/client.js +42 -65
- package/dist/kernel/client-ui-settings-plugins/lib/types/client/index.js +5 -8
- package/dist/kernel/client-ui-settings-plugins/lib/types/client/tab-store.d.ts +8 -17
- package/dist/kernel/client-ui-settings-plugins/lib/types/client/tab-store.js +22 -44
- package/dist/kernel/client-ui-settings-plugins/package.json +2 -7
- package/dist/kernel/client-ui-sidebar/lib/client.js +50 -20
- package/dist/kernel/client-ui-sidebar/lib/types/client/SidebarRoot.js +7 -3
- package/dist/kernel/client-ui-sidebar/lib/types/client/contract/slots.d.ts +30 -1
- package/dist/kernel/client-ui-sidebar/lib/types/client/index.d.ts +1 -1
- package/dist/kernel/client-ui-sidebar/lib/types/client/index.js +2 -0
- package/dist/kernel/client-ui-sidebar/package.json +2 -4
- package/dist/kernel/client-ui-skill/lib/client.js +12 -12
- package/dist/kernel/client-ui-skill/package.json +2 -5
- package/dist/kernel/client-ui-slots/lib/index.js +2 -0
- package/dist/kernel/client-ui-slots/lib/invariant.js +2 -0
- package/dist/kernel/client-ui-slots/lib/types/renderer.d.ts +1 -1
- package/dist/kernel/client-ui-slots/lib/types/store.d.ts +1 -1
- package/dist/kernel/client-ui-slots/package.json +1 -1
- package/dist/kernel/client-ui-subagent/lib/client.js +289 -157
- package/dist/kernel/client-ui-subagent/lib/types/client/SubagentHeaderLineage.d.ts +18 -0
- package/dist/kernel/client-ui-subagent/lib/types/client/{SubagentCatalogAction.js → SubagentHeaderLineage.js} +153 -25
- package/dist/kernel/client-ui-subagent/lib/types/client/index.d.ts +4 -16
- package/dist/kernel/client-ui-subagent/lib/types/client/index.js +7 -45
- package/dist/kernel/client-ui-subagent/lib/types/client/locales.d.ts +1 -0
- package/dist/kernel/client-ui-subagent/lib/types/client/locales.js +2 -0
- package/dist/kernel/client-ui-subagent/package.json +6 -8
- package/dist/kernel/client-ui-theme/lib/client.js +46 -3
- package/dist/kernel/client-ui-theme/lib/index.js +22 -23
- package/dist/kernel/client-ui-theme/lib/types/boot-theme.d.ts +9 -10
- package/dist/kernel/client-ui-theme/lib/types/boot-theme.js +12 -19
- package/dist/kernel/client-ui-theme/lib/types/client/index.d.ts +1 -1
- package/dist/kernel/client-ui-theme/lib/types/client/index.js +3 -1
- package/dist/kernel/client-ui-theme/lib/types/client/styles.d.ts +7 -0
- package/dist/kernel/client-ui-theme/lib/types/client/styles.js +32 -0
- package/dist/kernel/client-ui-theme/lib/types/index.d.ts +4 -3
- package/dist/kernel/client-ui-theme/lib/types/index.js +7 -6
- package/dist/kernel/client-ui-theme/package.json +4 -6
- package/dist/kernel/client-ui-tool/lib/client.js +105 -65
- package/dist/kernel/client-ui-tool/lib/types/client/apply.d.ts +1 -2
- package/dist/kernel/client-ui-tool/lib/types/client/apply.js +6 -2
- package/dist/kernel/client-ui-tool/lib/types/client/contract/slots.d.ts +13 -3
- package/dist/kernel/client-ui-tool/lib/types/client/index.d.ts +1 -1
- package/dist/kernel/client-ui-tool/lib/types/client/tool/ToolCallTree.d.ts +1 -1
- package/dist/kernel/client-ui-tool/lib/types/client/tool/ToolCallTree.js +8 -6
- package/dist/kernel/client-ui-tool/lib/types/client/tool/ToolDetails.d.ts +2 -9
- package/dist/kernel/client-ui-tool/lib/types/client/tool/ToolDetails.js +4 -3
- package/dist/kernel/client-ui-tool/lib/types/client/tool/models/read-card-model.d.ts +4 -18
- package/dist/kernel/client-ui-tool/lib/types/client/tool/models/read-card-model.js +21 -4
- package/dist/kernel/client-ui-tool/lib/types/client/tool/models/tool-call-model.d.ts +2 -9
- package/dist/kernel/client-ui-tool/lib/types/client/tool/models/tool-call-model.js +22 -2
- package/dist/kernel/client-ui-tool/lib/types/client/tool/toolviews/GenericToolCard.d.ts +1 -1
- package/dist/kernel/client-ui-tool/lib/types/client/tool/toolviews/GenericToolCard.js +3 -3
- package/dist/kernel/client-ui-tool/lib/types/client/tool/toolviews/file-mutation-row.d.ts +1 -1
- package/dist/kernel/client-ui-tool/lib/types/client/tool/toolviews/file-mutation-row.js +2 -2
- package/dist/kernel/client-ui-tool/lib/types/client/tool/toolviews/read-row.d.ts +1 -1
- package/dist/kernel/client-ui-tool/lib/types/client/tool/toolviews/read-row.js +3 -3
- package/dist/kernel/client-ui-tool/package.json +4 -6
- package/dist/kernel/client-ui-trajectory/lib/client.js +144 -143
- package/dist/kernel/client-ui-trajectory/lib/types/client/trajectory-assistant-definition.js +2 -1
- package/dist/kernel/client-ui-trajectory/package.json +2 -4
- package/dist/kernel/client-ui-user-questions/lib/client.js +73 -36
- package/dist/kernel/client-ui-user-questions/lib/types/client/QuestionComposer.js +24 -6
- package/dist/kernel/client-ui-user-questions/package.json +12 -10
- package/dist/kernel/client-ui-workflow-run/lib/client.js +262 -87
- package/dist/kernel/client-ui-workflow-run/lib/types/client/WorkflowRunPanel.js +162 -23
- package/dist/kernel/client-ui-workflow-run/package.json +3 -7
- package/dist/kernel/client-ui-workspace/lib/client.js +96 -60
- package/dist/kernel/client-ui-workspace/lib/types/client/WorkspaceBrowser.d.ts +1 -1
- package/dist/kernel/client-ui-workspace/lib/types/client/WorkspaceBrowser.js +38 -6
- package/dist/kernel/client-ui-workspace/lib/types/client/contract/slots.d.ts +9 -7
- package/dist/kernel/client-ui-workspace/lib/types/client/index.js +4 -2
- package/dist/kernel/client-ui-workspace/lib/types/client/rows/Rows.d.ts +4 -1
- package/dist/kernel/client-ui-workspace/lib/types/client/rows/Rows.js +5 -3
- package/dist/kernel/client-ui-workspace/package.json +6 -4
- package/dist/kernel/client-web/lib/base.css +41 -0
- package/dist/kernel/client-web/lib/boot-page.module.css +104 -0
- package/dist/kernel/client-web/lib/index.js +154 -308
- package/dist/kernel/client-web/lib/invariant.js +2 -0
- package/dist/kernel/client-web/lib/types/boot-page.d.ts +46 -0
- package/dist/kernel/client-web/lib/types/boot-page.js +93 -0
- package/dist/kernel/client-web/lib/types/boot.d.ts +20 -33
- package/dist/kernel/client-web/lib/types/boot.js +76 -149
- package/dist/kernel/client-web/lib/types/index.d.ts +5 -11
- package/dist/kernel/client-web/lib/types/index.js +4 -10
- package/dist/kernel/client-web/lib/types/loader-status.d.ts +3 -51
- package/dist/kernel/client-web/lib/types/loader-status.js +0 -35
- package/dist/kernel/client-web/lib/types/platform.d.ts +3 -1
- package/dist/kernel/client-web/lib/types/platform.js +4 -3
- package/dist/kernel/client-web/lib/types/seed.js +0 -6
- package/dist/kernel/client-web/package.json +8 -15
- package/dist/kernel/cmdline/package.json +1 -1
- package/dist/kernel/code-runtime/package.json +1 -1
- package/dist/kernel/code-runtime-python/lib/index.js +413 -0
- package/dist/kernel/code-runtime-python/lib/invariant.js +24 -0
- package/dist/kernel/code-runtime-python/lib/types/index.d.ts +12 -0
- package/dist/kernel/code-runtime-python/lib/types/index.js +11 -0
- package/dist/kernel/code-runtime-python/lib/types/invariant.d.ts +16 -0
- package/dist/kernel/code-runtime-python/lib/types/invariant.js +23 -0
- package/dist/kernel/code-runtime-python/lib/types/protocol.d.ts +329 -0
- package/dist/kernel/code-runtime-python/lib/types/protocol.js +496 -0
- package/dist/kernel/{client-schema-form → code-runtime-python}/package.json +11 -14
- package/dist/kernel/code-runtime-python/py/protocol.py +138 -0
- package/dist/kernel/code-runtime-worker-thread/package.json +1 -1
- package/dist/kernel/command-compact/package.json +1 -1
- package/dist/kernel/command-feedback/package.json +1 -1
- package/dist/kernel/command-goal/lib/index.js +40 -6
- package/dist/kernel/command-goal/lib/types/index.js +35 -6
- package/dist/kernel/command-goal/package.json +2 -1
- package/dist/kernel/commands/lib/index.js +78 -21
- package/dist/kernel/commands/lib/typert.host.js +53 -9
- package/dist/kernel/commands/lib/typert.remote-client.d.ts +4 -3
- package/dist/kernel/commands/lib/typert.remote-client.js +18 -2
- package/dist/kernel/commands/lib/types/index.d.ts +20 -1
- package/dist/kernel/commands/lib/types/index.js +77 -20
- package/dist/kernel/commands/lib/types/types.d.ts +8 -0
- package/dist/kernel/commands/package.json +5 -1
- package/dist/kernel/compaction/package.json +1 -1
- package/dist/kernel/compaction-basic/package.json +1 -1
- package/dist/kernel/compaction-tool-result-pruner/package.json +1 -1
- package/dist/kernel/cordis/package.json +3 -1
- package/dist/kernel/cordis-client-runner/lib/client.js +171 -37
- package/dist/kernel/cordis-client-runner/lib/types/client/api-catalog.js +3 -3
- package/dist/kernel/cordis-client-runner/lib/types/client/slot-catalog.js +208 -30
- package/dist/kernel/cordis-client-runner/package.json +2 -5
- package/dist/kernel/cordis-host-runner/lib/index.js +28 -5
- package/dist/kernel/cordis-host-runner/lib/typert.host.js +54 -6
- package/dist/kernel/cordis-host-runner/lib/types/sandbox.d.ts +9 -3
- package/dist/kernel/cordis-host-runner/lib/types/sandbox.js +34 -6
- package/dist/kernel/cordis-host-runner/package.json +1 -1
- package/dist/kernel/cordis-plugin-group/package.json +3 -1
- package/dist/kernel/cordis-plugin-hmr/lib/types/index.js +1 -1
- package/dist/kernel/cordis-plugin-hmr/package.json +3 -1
- package/dist/kernel/cordis-plugin-include/lib/index.js +2 -2
- package/dist/kernel/cordis-plugin-include/lib/types/index.d.ts +2 -2
- package/dist/kernel/cordis-plugin-include/lib/types/index.js +2 -2
- package/dist/kernel/cordis-plugin-include/package.json +3 -1
- package/dist/kernel/cordis-plugin-loader/package.json +3 -1
- package/dist/kernel/cordis-plugin-logger-console/package.json +3 -1
- package/dist/kernel/cordis-plugin-timer/package.json +3 -1
- package/dist/kernel/cosmokit/package.json +3 -1
- package/dist/kernel/credentials/lib/index.js +104 -13
- package/dist/kernel/credentials/lib/invariant.js +3 -3
- package/dist/kernel/credentials/lib/types/index.d.ts +136 -7
- package/dist/kernel/credentials/lib/types/index.js +114 -15
- package/dist/kernel/credentials/lib/types/invariant.js +3 -3
- package/dist/kernel/credentials/lib/types/types.d.ts +58 -5
- package/dist/kernel/credentials/lib/types/types.js +4 -4
- package/dist/kernel/credentials/package.json +1 -1
- package/dist/kernel/credentials-local/lib/index.js +387 -29
- package/dist/kernel/credentials-local/lib/invariant.js +1 -1
- package/dist/kernel/credentials-local/lib/types/index.d.ts +57 -12
- package/dist/kernel/credentials-local/lib/types/index.js +445 -30
- package/dist/kernel/credentials-local/lib/types/invariant.js +1 -1
- package/dist/kernel/credentials-local/package.json +1 -1
- package/dist/kernel/e2b/package.json +1 -1
- package/dist/kernel/experimental-agent-team/lib/index.js +1728 -0
- package/dist/kernel/experimental-agent-team/lib/invariant.js +354 -0
- package/dist/kernel/experimental-agent-team/lib/types/activity.d.ts +23 -0
- package/dist/kernel/experimental-agent-team/lib/types/activity.js +85 -0
- package/dist/kernel/experimental-agent-team/lib/types/error.d.ts +13 -0
- package/dist/kernel/experimental-agent-team/lib/types/error.js +23 -0
- package/dist/kernel/experimental-agent-team/lib/types/fold.d.ts +44 -0
- package/dist/kernel/experimental-agent-team/lib/types/fold.js +243 -0
- package/dist/kernel/experimental-agent-team/lib/types/index.d.ts +115 -0
- package/dist/kernel/experimental-agent-team/lib/types/index.js +205 -0
- package/dist/kernel/experimental-agent-team/lib/types/invariant.d.ts +9 -0
- package/dist/kernel/experimental-agent-team/lib/types/invariant.js +29 -0
- package/dist/kernel/experimental-agent-team/lib/types/journal.d.ts +39 -0
- package/dist/kernel/experimental-agent-team/lib/types/journal.js +59 -0
- package/dist/kernel/experimental-agent-team/lib/types/lifecycle.d.ts +33 -0
- package/dist/kernel/experimental-agent-team/lib/types/lifecycle.js +85 -0
- package/dist/kernel/experimental-agent-team/lib/types/mailbox.d.ts +79 -0
- package/dist/kernel/experimental-agent-team/lib/types/mailbox.js +303 -0
- package/dist/kernel/experimental-agent-team/lib/types/roster.d.ts +113 -0
- package/dist/kernel/experimental-agent-team/lib/types/roster.js +445 -0
- package/dist/kernel/experimental-agent-team/lib/types/session-message.d.ts +11 -0
- package/dist/kernel/experimental-agent-team/lib/types/session-message.js +23 -0
- package/dist/kernel/experimental-agent-team/lib/types/task-board.d.ts +62 -0
- package/dist/kernel/experimental-agent-team/lib/types/task-board.js +275 -0
- package/dist/kernel/experimental-agent-team/lib/types/task-graph.d.ts +21 -0
- package/dist/kernel/experimental-agent-team/lib/types/task-graph.js +62 -0
- package/dist/kernel/experimental-agent-team/lib/types/types.d.ts +192 -0
- package/dist/kernel/experimental-agent-team/lib/types/types.js +26 -0
- package/dist/kernel/experimental-agent-team/lib/types/validation.d.ts +16 -0
- package/dist/kernel/experimental-agent-team/lib/types/validation.js +33 -0
- package/dist/kernel/experimental-agent-team/package.json +62 -0
- package/dist/kernel/experimental-tool-agent-team/lib/index.js +555 -0
- package/dist/kernel/experimental-tool-agent-team/lib/invariant.js +13 -0
- package/dist/kernel/experimental-tool-agent-team/lib/types/index.d.ts +19 -0
- package/dist/kernel/experimental-tool-agent-team/lib/types/index.js +379 -0
- package/dist/kernel/experimental-tool-agent-team/lib/types/invariant.d.ts +9 -0
- package/dist/kernel/experimental-tool-agent-team/lib/types/invariant.js +11 -0
- package/dist/kernel/experimental-tool-agent-team/package.json +61 -0
- package/dist/kernel/file-reference/lib/index.js +138 -0
- package/dist/kernel/file-reference/lib/invariant.js +23 -0
- package/dist/kernel/file-reference/lib/typert.host.d.ts +3 -0
- package/dist/kernel/file-reference/lib/typert.host.js +436 -0
- package/dist/kernel/file-reference/lib/typert.remote-client.d.ts +26 -0
- package/dist/kernel/file-reference/lib/typert.remote-client.js +59 -0
- package/dist/kernel/file-reference/lib/types/grammar.d.ts +33 -0
- package/dist/kernel/file-reference/lib/types/grammar.js +43 -0
- package/dist/kernel/file-reference/lib/types/index.d.ts +42 -0
- package/dist/kernel/file-reference/lib/types/index.js +75 -0
- package/dist/kernel/file-reference/lib/types/invariant.d.ts +16 -0
- package/dist/kernel/file-reference/lib/types/invariant.js +22 -0
- package/dist/kernel/file-reference/lib/types/types.d.ts +13 -0
- package/dist/kernel/file-reference/lib/types/types.js +7 -0
- package/dist/kernel/file-reference/package.json +70 -0
- package/dist/kernel/file-reference-local/lib/index.js +327 -0
- package/dist/kernel/file-reference-local/lib/invariant.js +23 -0
- package/dist/kernel/file-reference-local/lib/types/index.d.ts +35 -0
- package/dist/kernel/file-reference-local/lib/types/index.js +105 -0
- package/dist/kernel/file-reference-local/lib/types/invariant.d.ts +16 -0
- package/dist/kernel/file-reference-local/lib/types/invariant.js +22 -0
- package/dist/kernel/file-reference-local/lib/types/search.d.ts +52 -0
- package/dist/kernel/file-reference-local/lib/types/search.js +258 -0
- package/dist/kernel/file-reference-local/package.json +58 -0
- package/dist/kernel/fs/package.json +1 -1
- package/dist/kernel/fs-e2b/package.json +1 -1
- package/dist/kernel/fs-local/package.json +1 -1
- package/dist/kernel/fs-observation-policy/package.json +1 -1
- package/dist/kernel/fs-sandbox/package.json +1 -1
- package/dist/kernel/goal/lib/index.js +5 -2
- package/dist/kernel/goal/lib/typert.host.js +27 -3
- package/dist/kernel/goal/lib/types/index.js +2 -2
- package/dist/kernel/goal/lib/types/types.d.ts +3 -0
- package/dist/kernel/goal/package.json +1 -1
- package/dist/kernel/goal-round-driver/package.json +1 -1
- package/dist/kernel/headless/package.json +1 -1
- package/dist/kernel/home-paths/package.json +1 -1
- package/dist/kernel/hook-protocol/package.json +1 -1
- package/dist/kernel/hooks-claude-code/package.json +1 -1
- package/dist/kernel/hooks-codex/package.json +1 -1
- package/dist/kernel/host-apiproxy/lib/index.js +25 -57
- package/dist/kernel/host-apiproxy/lib/types/api/host.d.ts +2 -0
- package/dist/kernel/host-apiproxy/lib/types/api/host.schema.d.ts +1 -0
- package/dist/kernel/host-apiproxy/lib/types/api/host.schema.js +1 -0
- package/dist/kernel/host-apiproxy/lib/types/api/sessions.d.ts +4 -0
- package/dist/kernel/host-apiproxy/lib/types/api/sessions.schema.js +1 -0
- package/dist/kernel/host-apiproxy/lib/types/api-proxy.js +15 -53
- package/dist/kernel/host-apiproxy/package.json +1 -1
- package/dist/kernel/host-directory-picker/package.json +1 -1
- package/dist/kernel/host-directory-picker-auto/package.json +1 -1
- package/dist/kernel/host-directory-picker-browse/package.json +1 -1
- package/dist/kernel/host-directory-picker-native/package.json +1 -1
- package/dist/kernel/host-frontend-static/lib/index.js +34 -26
- package/dist/kernel/host-frontend-static/lib/types/index.d.ts +10 -10
- package/dist/kernel/host-frontend-static/lib/types/index.js +38 -27
- package/dist/kernel/host-frontend-static/package.json +2 -2
- package/dist/kernel/host-plugin-inventory/package.json +1 -1
- package/dist/kernel/host-webserver/lib/index.js +102 -6
- package/dist/kernel/host-webserver/lib/types/index.d.ts +33 -5
- package/dist/kernel/host-webserver/lib/types/index.js +28 -5
- package/dist/kernel/host-webserver/lib/types/injections.d.ts +56 -0
- package/dist/kernel/host-webserver/lib/types/injections.js +82 -0
- package/dist/kernel/host-webserver/package.json +1 -1
- package/dist/kernel/invariants/package.json +1 -1
- package/dist/kernel/jobs/package.json +1 -1
- package/dist/kernel/jobs-local/package.json +1 -1
- package/dist/kernel/launch-environment/package.json +1 -1
- package/dist/kernel/llm/lib/index.js +247 -25
- package/dist/kernel/llm/lib/types/assembler.d.ts +10 -1
- package/dist/kernel/llm/lib/types/assembler.js +20 -1
- package/dist/kernel/llm/lib/types/content.d.ts +59 -0
- package/dist/kernel/llm/lib/types/content.js +149 -0
- package/dist/kernel/llm/lib/types/index.d.ts +24 -1
- package/dist/kernel/llm/lib/types/index.js +61 -8
- package/dist/kernel/llm/lib/types/retry-policy.d.ts +1 -1
- package/dist/kernel/llm/lib/types/retry-policy.js +6 -2
- package/dist/kernel/llm/package.json +1 -1
- package/dist/kernel/llm-deepseek/lib/index.js +1100 -70
- package/dist/kernel/llm-deepseek/lib/types/adapter.d.ts +69 -1
- package/dist/kernel/llm-deepseek/lib/types/adapter.js +296 -60
- package/dist/kernel/llm-deepseek/lib/types/file-id.d.ts +19 -0
- package/dist/kernel/llm-deepseek/lib/types/file-id.js +18 -0
- package/dist/kernel/llm-deepseek/lib/types/file-store.d.ts +83 -0
- package/dist/kernel/llm-deepseek/lib/types/file-store.js +261 -0
- package/dist/kernel/llm-deepseek/lib/types/files-api.d.ts +103 -0
- package/dist/kernel/llm-deepseek/lib/types/files-api.js +206 -0
- package/dist/kernel/llm-deepseek/lib/types/index.d.ts +31 -3
- package/dist/kernel/llm-deepseek/lib/types/index.js +139 -3
- package/dist/kernel/llm-deepseek/lib/types/serialize.d.ts +55 -6
- package/dist/kernel/llm-deepseek/lib/types/serialize.js +179 -23
- package/dist/kernel/llm-deepseek/lib/types/types.d.ts +28 -5
- package/dist/kernel/llm-deepseek/lib/types/upload-index.d.ts +68 -0
- package/dist/kernel/llm-deepseek/lib/types/upload-index.js +171 -0
- package/dist/kernel/llm-deepseek/package.json +9 -1
- package/dist/kernel/llm-pi-ai/lib/index.js +1758 -1171
- package/dist/kernel/llm-pi-ai/lib/types/adapter.d.ts +30 -5
- package/dist/kernel/llm-pi-ai/lib/types/adapter.js +43 -23
- package/dist/kernel/llm-pi-ai/lib/types/auth.d.ts +60 -0
- package/dist/kernel/llm-pi-ai/lib/types/auth.js +196 -0
- package/dist/kernel/llm-pi-ai/lib/types/catalog.d.ts +176 -38
- package/dist/kernel/llm-pi-ai/lib/types/catalog.js +245 -50
- package/dist/kernel/llm-pi-ai/lib/types/config.d.ts +37 -5
- package/dist/kernel/llm-pi-ai/lib/types/config.js +67 -2
- package/dist/kernel/llm-pi-ai/lib/types/context.d.ts +8 -3
- package/dist/kernel/llm-pi-ai/lib/types/context.js +60 -16
- package/dist/kernel/llm-pi-ai/lib/types/index.d.ts +1 -0
- package/dist/kernel/llm-pi-ai/lib/types/index.js +21 -19
- package/dist/kernel/llm-pi-ai/lib/types/login.d.ts +21 -0
- package/dist/kernel/llm-pi-ai/lib/types/login.js +154 -0
- package/dist/kernel/llm-pi-ai/lib/types/stream.js +4 -0
- package/dist/kernel/llm-pi-ai/package.json +3 -1
- package/dist/kernel/llm-retry/package.json +1 -1
- package/dist/kernel/lsp/package.json +1 -1
- package/dist/kernel/lsp-stdio/package.json +1 -1
- package/dist/kernel/manifest.json +10 -2
- package/dist/kernel/mcp-client/package.json +1 -1
- package/dist/kernel/message-feedback/package.json +1 -1
- package/dist/kernel/native-command/package.json +1 -1
- package/dist/kernel/node-addon-landlock-run/lib/index.js +1 -1
- package/dist/kernel/node-addon-landlock-run/package.json +4 -2
- package/dist/kernel/output-retention/package.json +1 -1
- package/dist/kernel/permission-presets/lib/index.js +14 -2
- package/dist/kernel/permission-presets/lib/types/index.d.ts +5 -0
- package/dist/kernel/permission-presets/lib/types/index.js +11 -2
- package/dist/kernel/permission-presets/package.json +1 -1
- package/dist/kernel/persona/package.json +1 -1
- package/dist/kernel/plan-mode/lib/index.js +49 -15
- package/dist/kernel/plan-mode/lib/types/index.d.ts +22 -0
- package/dist/kernel/plan-mode/lib/types/index.js +45 -19
- package/dist/kernel/plan-mode/lib/types/types.d.ts +5 -4
- package/dist/kernel/plan-mode/package.json +1 -1
- package/dist/kernel/pwsh-local/package.json +1 -1
- package/dist/kernel/pwsh-sandbox/package.json +1 -1
- package/dist/kernel/repeat-tool-reminder/lib/index.js +1 -1
- package/dist/kernel/repeat-tool-reminder/package.json +1 -1
- package/dist/kernel/sandbox/package.json +1 -1
- package/dist/kernel/sandbox-local/lib/index.js +8 -13
- package/dist/kernel/sandbox-local/lib/types/index.d.ts +1 -3
- package/dist/kernel/sandbox-local/lib/types/index.js +4 -7
- package/dist/kernel/sandbox-local/lib/types/profiles.js +1 -1
- package/dist/kernel/sandbox-local/package.json +1 -1
- package/dist/kernel/sandbox-policy/package.json +1 -1
- package/dist/kernel/sandbox-windows-acl/package.json +1 -1
- package/dist/kernel/schedule/package.json +1 -1
- package/dist/kernel/schemastery/package.json +3 -1
- package/dist/kernel/scope/package.json +1 -1
- package/dist/kernel/sdk-client/lib/index.js +2 -2
- package/dist/kernel/sdk-client/lib/types/api.js +2 -2
- package/dist/kernel/sdk-client/lib/types/types.d.ts +4 -4
- package/dist/kernel/sdk-client/package.json +1 -1
- package/dist/kernel/sdk-jsonrpc-server/lib/index.js +12 -5
- package/dist/kernel/sdk-jsonrpc-server/lib/types/index.js +7 -0
- package/dist/kernel/sdk-jsonrpc-server/lib/types/server.d.ts +2 -1
- package/dist/kernel/sdk-jsonrpc-server/lib/types/server.js +15 -6
- package/dist/kernel/sdk-jsonrpc-server/package.json +2 -1
- package/dist/kernel/sdk-protocol/package.json +1 -1
- package/dist/kernel/session/lib/index.js +4 -0
- package/dist/kernel/session/lib/types/known-event-types.js +4 -0
- package/dist/kernel/session/lib/types/types.d.ts +6 -1
- package/dist/kernel/session/package.json +1 -1
- package/dist/kernel/session-checkpoint-policy/package.json +1 -1
- package/dist/kernel/session-log-export/package.json +2 -5
- package/dist/kernel/session-persistence/lib/index.js +1 -1
- package/dist/kernel/session-persistence/lib/types/coordinator.js +2 -1
- package/dist/kernel/session-persistence/package.json +1 -1
- package/dist/kernel/session-persistence-jsonl/package.json +1 -1
- package/dist/kernel/session-persistence-sqlite/lib/index.js +1105 -375
- package/dist/kernel/session-persistence-sqlite/lib/invariant.js +2 -2
- package/dist/kernel/session-persistence-sqlite/lib/types/codec.d.ts +72 -0
- package/dist/kernel/session-persistence-sqlite/lib/types/codec.js +304 -0
- package/dist/kernel/session-persistence-sqlite/lib/types/compression.d.ts +46 -0
- package/dist/kernel/session-persistence-sqlite/lib/types/compression.js +234 -0
- package/dist/kernel/session-persistence-sqlite/lib/types/index.d.ts +22 -80
- package/dist/kernel/session-persistence-sqlite/lib/types/index.js +27 -278
- package/dist/kernel/session-persistence-sqlite/lib/types/invariant.js +2 -2
- package/dist/kernel/session-persistence-sqlite/lib/types/schema.d.ts +63 -85
- package/dist/kernel/session-persistence-sqlite/lib/types/schema.js +293 -159
- package/dist/kernel/session-persistence-sqlite/lib/types/sql.d.ts +15 -0
- package/dist/kernel/session-persistence-sqlite/lib/types/sql.js +57 -0
- package/dist/kernel/session-persistence-sqlite/lib/types/store.d.ts +66 -0
- package/dist/kernel/session-persistence-sqlite/lib/types/store.js +394 -0
- package/dist/kernel/session-persistence-sqlite/package.json +9 -3
- package/dist/kernel/session-persistence-sqlite/resources/sql/begin-immediate.sql +1 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/begin.sql +1 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/commit.sql +1 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/delete-events-from.sql +2 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/foreign-keys-on.sql +1 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/insert-event.sql +3 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/insert-persistence-state.sql +2 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/journal-mode-delete.sql +1 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/journal-mode-persist.sql +1 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/journal-mode-truncate.sql +1 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/journal-mode-wal.sql +1 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/mmap-off.sql +1 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/rollback.sql +1 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/schema.sql +30 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/select-application-id.sql +1 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/select-events-from.sql +4 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/select-events.sql +4 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/select-mmap-size.sql +1 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/select-packed-predecessors.sql +6 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/select-schema-objects.sql +4 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/select-session.sql +4 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/select-sessions.sql +3 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/select-store-id.sql +3 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/select-synchronous.sql +1 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/select-tail-events.sql +5 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/select-trusted-schema.sql +1 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/select-user-object-count.sql +3 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/select-user-version.sql +1 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/set-application-id.sql +1 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/set-user-version-17.sql +1 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/synchronous-full.sql +1 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/trusted-schema-off.sql +1 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/update-session-revision.sql +3 -0
- package/dist/kernel/session-persistence-sqlite/resources/sql/upsert-session.sql +13 -0
- package/dist/kernel/session-projection/lib/index.js +55 -30
- package/dist/kernel/session-projection/lib/types/index.d.ts +57 -34
- package/dist/kernel/session-projection/lib/types/index.js +61 -36
- package/dist/kernel/session-projection/lib/types/types.d.ts +11 -4
- package/dist/kernel/session-projection/package.json +1 -1
- package/dist/kernel/session-projection-cache/lib/index.js +1 -1
- package/dist/kernel/session-projection-cache/lib/types/index.d.ts +1 -1
- package/dist/kernel/session-projection-cache/lib/types/index.js +4 -5
- package/dist/kernel/session-projection-cache/package.json +1 -1
- package/dist/kernel/session-query/package.json +1 -1
- package/dist/kernel/session-query-sqlite/package.json +1 -1
- package/dist/kernel/session-reference/lib/index.js +232 -110
- package/dist/kernel/session-reference/lib/typert.host.d.ts +3 -0
- package/dist/kernel/session-reference/lib/typert.host.js +458 -0
- package/dist/kernel/session-reference/lib/typert.remote-client.d.ts +26 -0
- package/dist/kernel/session-reference/lib/typert.remote-client.js +62 -0
- package/dist/kernel/session-reference/lib/types/index.d.ts +25 -5
- package/dist/kernel/session-reference/lib/types/index.js +230 -126
- package/dist/kernel/session-reference/lib/types/types.d.ts +14 -3
- package/dist/kernel/session-reference/lib/types/types.js +6 -1
- package/dist/kernel/session-reference/package.json +23 -3
- package/dist/kernel/session-stats/lib/index.js +31 -12
- package/dist/kernel/session-stats/lib/types/projection.d.ts +64 -2
- package/dist/kernel/session-stats/lib/types/projection.js +31 -12
- package/dist/kernel/session-stats/package.json +1 -1
- package/dist/kernel/session-telemetry/package.json +1 -1
- package/dist/kernel/session-telemetry-otel/package.json +1 -1
- package/dist/kernel/session-title/lib/index.js +6 -2
- package/dist/kernel/session-title/lib/types/index.js +3 -2
- package/dist/kernel/session-title/lib/types/types.d.ts +3 -0
- package/dist/kernel/session-title/package.json +1 -1
- package/dist/kernel/session-title-all-prompts-llm/package.json +1 -1
- package/dist/kernel/session-title-first-prompt-llm/package.json +1 -1
- package/dist/kernel/session-title-llm/package.json +1 -1
- package/dist/kernel/settings/package.json +1 -1
- package/dist/kernel/settings-file/package.json +1 -1
- package/dist/kernel/shell/package.json +1 -1
- package/dist/kernel/shell-env/package.json +1 -1
- package/dist/kernel/skill/package.json +1 -1
- package/dist/kernel/skill-badge/assets/nomix-badge.md +6 -6
- package/dist/kernel/skill-badge/assets/nomix-badge.png +0 -0
- package/dist/kernel/skill-badge/lib/index.js +1 -1
- package/dist/kernel/skill-badge/lib/types/index.js +1 -1
- package/dist/kernel/skill-badge/package.json +1 -1
- package/dist/kernel/skill-filesystem/package.json +1 -1
- package/dist/kernel/spill/package.json +1 -1
- package/dist/kernel/spill-local/package.json +1 -1
- package/dist/kernel/spill-policy/package.json +1 -1
- package/dist/kernel/storage/package.json +1 -1
- package/dist/kernel/storage-domain/package.json +1 -1
- package/dist/kernel/storage-json/package.json +1 -1
- package/dist/kernel/storage-sqlite/package.json +1 -1
- package/dist/kernel/subagent/lib/index.js +123 -20
- package/dist/kernel/subagent/lib/types/continuation.d.ts +21 -2
- package/dist/kernel/subagent/lib/types/continuation.js +58 -7
- package/dist/kernel/subagent/lib/types/index.d.ts +11 -0
- package/dist/kernel/subagent/lib/types/index.js +16 -0
- package/dist/kernel/subagent/lib/types/out-of-process.d.ts +2 -0
- package/dist/kernel/subagent/lib/types/out-of-process.js +31 -1
- package/dist/kernel/subagent/lib/types/projection.d.ts +55 -8
- package/dist/kernel/subagent/lib/types/projection.js +30 -15
- package/dist/kernel/subagent/lib/types/run-settlement.js +10 -3
- package/dist/kernel/subagent/lib/types/types.d.ts +7 -0
- package/dist/kernel/subagent/package.json +1 -1
- package/dist/kernel/subagent-acp/package.json +1 -1
- package/dist/kernel/subagent-claude-code/cordis.patch.yml +6 -0
- package/dist/kernel/subagent-claude-code/lib/index.js +267 -73
- package/dist/kernel/subagent-claude-code/lib/types/index.d.ts +16 -6
- package/dist/kernel/subagent-claude-code/lib/types/index.js +35 -14
- package/dist/kernel/subagent-claude-code/lib/types/process.d.ts +5 -7
- package/dist/kernel/subagent-claude-code/lib/types/process.js +12 -24
- package/dist/kernel/subagent-claude-code/lib/types/run.d.ts +24 -7
- package/dist/kernel/subagent-claude-code/lib/types/run.js +266 -40
- package/dist/kernel/subagent-claude-code/package.json +10 -2
- package/dist/kernel/subagent-codex/cordis.patch.yml +5 -0
- package/dist/kernel/subagent-codex/lib/index.js +482 -91
- package/dist/kernel/subagent-codex/lib/types/index.d.ts +11 -6
- package/dist/kernel/subagent-codex/lib/types/index.js +33 -12
- package/dist/kernel/subagent-codex/lib/types/run.d.ts +17 -8
- package/dist/kernel/subagent-codex/lib/types/run.js +235 -42
- package/dist/kernel/subagent-codex/lib/types/wire.d.ts +49 -1
- package/dist/kernel/subagent-codex/lib/types/wire.js +280 -33
- package/dist/kernel/subagent-codex/package.json +10 -5
- package/dist/kernel/subagent-fork-in-process/package.json +1 -1
- package/dist/kernel/subagent-in-process-driver/package.json +1 -1
- package/dist/kernel/subagent-nomix-sdk/package.json +1 -1
- package/dist/kernel/subagent-spawn-in-process/package.json +1 -1
- package/dist/kernel/subprocess/package.json +1 -1
- package/dist/kernel/subprocess-e2b/package.json +1 -1
- package/dist/kernel/subprocess-local/lib/index.js +303 -1
- package/dist/kernel/subprocess-local/lib/types/process-inspector.js +3 -0
- package/dist/kernel/subprocess-local/lib/types/terminal.d.ts +6 -1
- package/dist/kernel/subprocess-local/lib/types/terminal.js +78 -1
- package/dist/kernel/subprocess-local/lib/types/windows-inspector.d.ts +80 -0
- package/dist/kernel/subprocess-local/lib/types/windows-inspector.js +259 -0
- package/dist/kernel/subprocess-local/package.json +2 -1
- package/dist/kernel/system-prompt/package.json +1 -1
- package/dist/kernel/terminal/package.json +1 -1
- package/dist/kernel/terminal-bash/lib/index.js +85 -20
- package/dist/kernel/terminal-bash/lib/types/config.d.ts +29 -5
- package/dist/kernel/terminal-bash/lib/types/config.js +33 -3
- package/dist/kernel/terminal-bash/lib/types/index.d.ts +7 -0
- package/dist/kernel/terminal-bash/lib/types/index.js +65 -13
- package/dist/kernel/terminal-bash/package.json +2 -1
- package/dist/kernel/time-context/lib/index.js +1 -1
- package/dist/kernel/time-context/lib/invariant.js +1 -1
- package/dist/kernel/time-context/package.json +1 -1
- package/dist/kernel/timeout/package.json +1 -1
- package/dist/kernel/tmux-context/lib/index.js +1 -1
- package/dist/kernel/tmux-context/package.json +1 -1
- package/dist/kernel/token-meter/lib/index.js +77 -21
- package/dist/kernel/token-meter/lib/types/breakdown-projection.d.ts +76 -9
- package/dist/kernel/token-meter/lib/types/breakdown-projection.js +22 -6
- package/dist/kernel/token-meter/lib/types/usage-projection.d.ts +186 -25
- package/dist/kernel/token-meter/lib/types/usage-projection.js +44 -15
- package/dist/kernel/token-meter/package.json +1 -1
- package/dist/kernel/tool-ask-user/package.json +1 -1
- package/dist/kernel/tool-bash/package.json +1 -1
- package/dist/kernel/tool-bash-persistent/lib/index.js +15 -5
- package/dist/kernel/tool-bash-persistent/lib/types/index.js +23 -6
- package/dist/kernel/tool-bash-persistent/package.json +1 -1
- package/dist/kernel/tool-call-timeout-policy/package.json +1 -1
- package/dist/kernel/tool-cordis/lib/index.js +655 -83
- package/dist/kernel/tool-cordis/lib/types/api-catalog.js +439 -41
- package/dist/kernel/tool-cordis/package.json +1 -1
- package/dist/kernel/tool-fs/lib/index.js +80 -52
- package/dist/kernel/tool-fs/lib/types/read-image.d.ts +16 -12
- package/dist/kernel/tool-fs/lib/types/read-image.js +73 -29
- package/dist/kernel/tool-fs/package.json +1 -1
- package/dist/kernel/tool-fs-search/lib/index.js +11 -7
- package/dist/kernel/tool-fs-search/lib/types/search-core.d.ts +5 -6
- package/dist/kernel/tool-fs-search/lib/types/search-core.js +12 -7
- package/dist/kernel/tool-fs-search/package.json +1 -1
- package/dist/kernel/tool-goal/package.json +1 -1
- package/dist/kernel/tool-jobs/package.json +1 -1
- package/dist/kernel/tool-lsp/package.json +1 -1
- package/dist/kernel/tool-pwsh/package.json +1 -1
- package/dist/kernel/tool-pwsh-persistent/lib/index.js +407 -0
- package/dist/kernel/tool-pwsh-persistent/lib/invariant.js +24 -0
- package/dist/kernel/tool-pwsh-persistent/lib/types/index.d.ts +24 -0
- package/dist/kernel/tool-pwsh-persistent/lib/types/index.js +465 -0
- package/dist/kernel/tool-pwsh-persistent/lib/types/invariant.d.ts +16 -0
- package/dist/kernel/tool-pwsh-persistent/lib/types/invariant.js +23 -0
- package/dist/kernel/tool-pwsh-persistent/package.json +62 -0
- package/dist/kernel/tool-ralph/package.json +1 -1
- package/dist/kernel/tool-session-query/package.json +1 -1
- package/dist/kernel/tool-skill/package.json +1 -1
- package/dist/kernel/tool-str-replace-editor/package.json +1 -1
- package/dist/kernel/tool-subagent/lib/index.js +10 -8
- package/dist/kernel/tool-subagent/lib/types/index.js +15 -8
- package/dist/kernel/tool-subagent/package.json +1 -1
- package/dist/kernel/tool-subagent-control/package.json +1 -1
- package/dist/kernel/tool-subagent-report/lib/index.js +1 -1
- package/dist/kernel/tool-subagent-report/lib/types/index.d.ts +3 -3
- package/dist/kernel/tool-subagent-report/lib/types/index.js +1 -1
- package/dist/kernel/tool-subagent-report/package.json +1 -1
- package/dist/kernel/tool-terminal/package.json +1 -1
- package/dist/kernel/tool-todo/lib/index.js +5 -2
- package/dist/kernel/tool-todo/lib/types/index.js +2 -2
- package/dist/kernel/tool-todo/lib/types/types.d.ts +3 -0
- package/dist/kernel/tool-todo/package.json +1 -1
- package/dist/kernel/tool-web/lib/index.js +101 -26
- package/dist/kernel/tool-web/lib/types/index.d.ts +4 -2
- package/dist/kernel/tool-web/lib/types/index.js +5 -3
- package/dist/kernel/tool-web/lib/types/search.d.ts +23 -20
- package/dist/kernel/tool-web/lib/types/search.js +109 -20
- package/dist/kernel/tool-web/package.json +1 -1
- package/dist/kernel/tool-workflow/package.json +1 -1
- package/dist/kernel/tools/package.json +1 -1
- package/dist/kernel/typert-generator/lib/index.js +8 -3
- package/dist/kernel/typert-generator/lib/types/cordis-catalog.js +8 -3
- package/dist/kernel/typert-generator/package.json +1 -1
- package/dist/kernel/typert-loader/package.json +1 -1
- package/dist/kernel/typert-protocol/package.json +1 -1
- package/dist/kernel/typert-registry/package.json +1 -1
- package/dist/kernel/user-approval/package.json +1 -1
- package/dist/kernel/user-questions/package.json +1 -1
- package/dist/kernel/web/lib/types/types.d.ts +4 -3
- package/dist/kernel/web/package.json +1 -1
- package/dist/kernel/web-app/cordis.patch.yml +27 -6
- package/dist/kernel/web-app/lib/index.js +111 -15
- package/dist/kernel/web-app/lib/startup.js +4 -2
- package/dist/kernel/web-app/lib/types/index.d.ts +8 -4
- package/dist/kernel/web-app/lib/types/index.js +116 -23
- package/dist/kernel/web-app/lib/types/startup.d.ts +3 -1
- package/dist/kernel/web-app/lib/types/startup.js +4 -1
- package/dist/kernel/web-app/package.json +12 -2
- package/dist/kernel/web-fetch-http/lib/index.js +1 -1
- package/dist/kernel/web-fetch-http/lib/types/index.d.ts +1 -1
- package/dist/kernel/web-fetch-http/lib/types/index.js +1 -1
- package/dist/kernel/web-fetch-http/package.json +1 -1
- package/dist/kernel/web-frontend/dist/assets/index-BnapMmQ_.css +1 -0
- package/dist/kernel/web-frontend/dist/assets/index-Dx7Ws_OC.js +96 -0
- package/dist/kernel/web-frontend/dist/assets/langs/{php-D-uCvoST.js → php-DDkx9sim.js} +2 -2
- package/dist/{assets/web/assets/langs/ruby-DEItuUFs.js → kernel/web-frontend/dist/assets/langs/ruby-DCxyoPen.js} +2 -2
- package/dist/kernel/web-frontend/dist/assets/{vendor-Cjbwl5VI.js → vendor-D22_Mp1f.js} +2 -2
- package/dist/kernel/web-frontend/dist/favicon.svg +8 -0
- package/dist/kernel/web-frontend/dist/index.html +5 -5
- package/dist/kernel/web-frontend/package.json +5 -8
- package/dist/kernel/web-search-deepseek/lib/index.js +1 -1
- package/dist/kernel/web-search-deepseek/lib/types/provider.js +1 -1
- package/dist/kernel/web-search-deepseek/package.json +1 -1
- package/dist/kernel/web-search-exa/lib/index.js +1 -1
- package/dist/kernel/web-search-exa/lib/types/provider.js +1 -1
- package/dist/kernel/web-search-exa/package.json +1 -1
- package/dist/kernel/web-search-perplexity/lib/index.js +1 -1
- package/dist/kernel/web-search-perplexity/lib/types/provider.js +1 -1
- package/dist/kernel/web-search-perplexity/package.json +1 -1
- package/dist/kernel/workflow/package.json +1 -1
- package/dist/kernel/workflow-worker-thread/package.json +1 -1
- package/dist/kernel/workspace/package.json +1 -1
- package/dist/plugins/manifest.json +50 -10
- package/dist/runtime/index.js +0 -2
- package/package.json +8 -6
- package/dist/assets/web/assets/index-B_fSXASy.css +0 -1
- package/dist/assets/web/assets/index-B_sZ-Gsu.js +0 -112
- package/dist/cli/builtin-registry.d.ts +0 -5
- package/dist/cli/profile-boot-CeU09iFc.js +0 -2
- package/dist/kernel/app-boot/lib/types/legacy-branding.d.ts +0 -6
- package/dist/kernel/app-boot/lib/types/legacy-branding.js +0 -18
- package/dist/kernel/client-schema-form/lib/index.js +0 -137
- package/dist/kernel/client-schema-form/lib/types/index.d.ts +0 -10
- package/dist/kernel/client-schema-form/lib/types/index.js +0 -9
- package/dist/kernel/client-schema-form/lib/types/model.d.ts +0 -66
- package/dist/kernel/client-schema-form/lib/types/model.js +0 -153
- package/dist/kernel/client-ui-subagent/lib/types/client/SubagentCatalogAction.d.ts +0 -18
- package/dist/kernel/client-ui-theme/lib/styles/base.css +0 -15
- package/dist/kernel/client-ui-theme/lib/styles/design-platform.css +0 -338
- package/dist/kernel/client-ui-theme/lib/styles/gradient-shadow-text.css +0 -232
- package/dist/kernel/client-ui-theme/lib/styles/scrollbar.css +0 -90
- package/dist/kernel/client-ui-theme/lib/styles/shiki.css +0 -31
- package/dist/kernel/client-web/lib/types/AppRoot.d.ts +0 -16
- package/dist/kernel/client-web/lib/types/AppRoot.js +0 -27
- package/dist/kernel/client-web/lib/types/DocumentTitle.js +0 -16
- package/dist/kernel/client-web/lib/types/app-shell.d.ts +0 -28
- package/dist/kernel/client-web/lib/types/app-shell.js +0 -27
- package/dist/kernel/client-web/lib/types/app.d.ts +0 -21
- package/dist/kernel/client-web-react/lib/index.js +0 -810
- package/dist/kernel/client-web-react/lib/types/index.d.ts +0 -16
- package/dist/kernel/client-web-react/lib/types/index.js +0 -6
- package/dist/kernel/client-web-react/lib/types/use-invoke.d.ts +0 -9
- package/dist/kernel/client-web-react/lib/types/use-invoke.js +0 -52
- package/dist/kernel/skill-badge/assets/nomix-badge.svg +0 -8
- package/dist/kernel/web-frontend/dist/assets/index-B_fSXASy.css +0 -1
- package/dist/kernel/web-frontend/dist/assets/index-B_sZ-Gsu.js +0 -112
- /package/dist/kernel/{client-web-react/lib/types → client-ui-renderer/lib/types/client}/bind.js +0 -0
- /package/dist/kernel/{client-web-react/lib/types → client-ui-renderer/lib/types/client}/session-provider.js +0 -0
|
@@ -1,27 +1,117 @@
|
|
|
1
1
|
import { dirname, join, parse, resolve } from "node:path";
|
|
2
2
|
import z from "../../schemastery/lib/index.mjs";
|
|
3
|
-
import { AttachmentError, AttachmentId, AttachmentStore } from "../../attachment/lib/index.js";
|
|
3
|
+
import { AttachmentError, AttachmentId, AttachmentStore, ImageVariantId } from "../../attachment/lib/index.js";
|
|
4
4
|
import { resolveNomixHome } from "../../home-paths/lib/index.js";
|
|
5
5
|
import { createHash, randomUUID } from "node:crypto";
|
|
6
6
|
import { constants } from "node:fs";
|
|
7
|
-
import { chmod, link, mkdir, open, readFile, unlink } from "node:fs/promises";
|
|
7
|
+
import { chmod, link, mkdir, open, readFile, rename, rm, unlink, writeFile } from "node:fs/promises";
|
|
8
8
|
import sharp from "sharp";
|
|
9
|
+
//#region lib/types/compression-limiter.js
|
|
10
|
+
/** Instance-owned concurrency bound for native image transformations. */
|
|
11
|
+
/** FIFO limiter for asynchronous compression work. */
|
|
12
|
+
var CompressionLimiter = class {
|
|
13
|
+
concurrency;
|
|
14
|
+
active = 0;
|
|
15
|
+
waiting = [];
|
|
16
|
+
/**
|
|
17
|
+
* @param concurrency - positive maximum number of active tasks.
|
|
18
|
+
*/
|
|
19
|
+
constructor(concurrency) {
|
|
20
|
+
this.concurrency = concurrency;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Run one task after an instance slot becomes available.
|
|
24
|
+
* @param task - compression operation occupying one slot until settlement.
|
|
25
|
+
* @returns the task result.
|
|
26
|
+
*/
|
|
27
|
+
run(task) {
|
|
28
|
+
return new Promise((resolve, reject) => {
|
|
29
|
+
const start = () => {
|
|
30
|
+
this.active += 1;
|
|
31
|
+
const release = () => {
|
|
32
|
+
this.active -= 1;
|
|
33
|
+
this.waiting.shift()?.();
|
|
34
|
+
};
|
|
35
|
+
Promise.resolve().then(task).then((value) => {
|
|
36
|
+
release();
|
|
37
|
+
resolve(value);
|
|
38
|
+
}, (error) => {
|
|
39
|
+
release();
|
|
40
|
+
reject(error instanceof Error ? error : new Error("Image compression task rejected with a non-Error value.", { cause: error }));
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
if (this.active < this.concurrency) start();
|
|
44
|
+
else this.waiting.push(start);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
//#endregion
|
|
49
|
+
//#region lib/types/encoding.js
|
|
50
|
+
/** Shared lazy candidate execution for normalization and request-image encoders. */
|
|
51
|
+
/**
|
|
52
|
+
* Execute encoding candidates in preference order and stop after the first fitting output.
|
|
53
|
+
* @param attempts - lazy encoders ordered from preferred to fallback representation.
|
|
54
|
+
* @param maxBytes - positive encoded-byte cap.
|
|
55
|
+
* @returns the first fitting candidate, otherwise the smallest completed fallback.
|
|
56
|
+
*/
|
|
57
|
+
async function encodeFirstWithinLimit(attempts, maxBytes) {
|
|
58
|
+
const [first, ...remaining] = attempts;
|
|
59
|
+
if (first === void 0) throw new Error("image encoding requires at least one candidate");
|
|
60
|
+
let smallest = await first();
|
|
61
|
+
if (smallest.data.byteLength <= maxBytes) return smallest;
|
|
62
|
+
for (const attempt of remaining) {
|
|
63
|
+
const candidate = await attempt();
|
|
64
|
+
if (candidate.data.byteLength <= maxBytes) return candidate;
|
|
65
|
+
if (candidate.data.byteLength < smallest.data.byteLength) smallest = candidate;
|
|
66
|
+
}
|
|
67
|
+
return { smallest };
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Whether a lazy encoding result exhausted every candidate at one size.
|
|
71
|
+
* @param result - first fitting candidate or exhausted result.
|
|
72
|
+
* @returns whether every candidate exceeded the byte cap.
|
|
73
|
+
*/
|
|
74
|
+
function isExhaustedEncoding(result) {
|
|
75
|
+
return "smallest" in result;
|
|
76
|
+
}
|
|
77
|
+
//#endregion
|
|
9
78
|
//#region lib/types/image.js
|
|
10
79
|
/** Raster inspection: full decode at admission, header-only probe on verified reads. */
|
|
80
|
+
/**
|
|
81
|
+
* Check alpha metadata for bytes produced by this package's encoders.
|
|
82
|
+
* Sharp/libvips may omit an all-opaque alpha plane from WebP output; every
|
|
83
|
+
* other addition or removal indicates that the encoded result is incompatible
|
|
84
|
+
* with its source facts.
|
|
85
|
+
* @param sourceHasAlpha - whether the source bytes declare an alpha plane, or undefined when the source frame is unspecified.
|
|
86
|
+
* @param output - decoded media type and alpha metadata from the encoded result.
|
|
87
|
+
* @returns whether the output alpha metadata is compatible with the source.
|
|
88
|
+
*/
|
|
89
|
+
function encodedAlphaIsCompatible(sourceHasAlpha, output) {
|
|
90
|
+
return sourceHasAlpha === void 0 || output.hasAlpha === sourceHasAlpha || sourceHasAlpha && !output.hasAlpha && output.mediaType === "image/webp";
|
|
91
|
+
}
|
|
11
92
|
const MEDIA_TYPES = {
|
|
12
93
|
png: "image/png",
|
|
13
94
|
jpeg: "image/jpeg",
|
|
14
95
|
webp: "image/webp",
|
|
15
96
|
gif: "image/gif"
|
|
16
97
|
};
|
|
98
|
+
function carriesRetainedMetadata(metadata) {
|
|
99
|
+
return metadata.exif !== void 0 || metadata.xmp !== void 0 || metadata.iptc !== void 0 || metadata.icc !== void 0 || metadata.hasProfile || metadata.tifftagPhotoshop !== void 0 || metadata.comments !== void 0 || metadata.orientation !== void 0;
|
|
100
|
+
}
|
|
17
101
|
async function imageMetadata(image) {
|
|
18
102
|
const metadata = await image.metadata();
|
|
19
103
|
const mediaType = MEDIA_TYPES[metadata.format];
|
|
20
104
|
if (mediaType === void 0) throw new AttachmentError("Unsupported or malformed image data.", "INVALID_IMAGE");
|
|
105
|
+
const transposed = metadata.orientation !== void 0 && metadata.orientation >= 5;
|
|
21
106
|
return {
|
|
22
107
|
mediaType,
|
|
23
|
-
width: metadata.width,
|
|
24
|
-
height: metadata.height
|
|
108
|
+
width: transposed ? metadata.height : metadata.width,
|
|
109
|
+
height: transposed ? metadata.width : metadata.height,
|
|
110
|
+
animated: (metadata.pages ?? 1) > 1,
|
|
111
|
+
carriesMetadata: carriesRetainedMetadata(metadata),
|
|
112
|
+
depth: metadata.depth,
|
|
113
|
+
space: metadata.space,
|
|
114
|
+
hasAlpha: metadata.hasAlpha
|
|
25
115
|
};
|
|
26
116
|
}
|
|
27
117
|
/**
|
|
@@ -46,17 +136,18 @@ async function probeImage(data) {
|
|
|
46
136
|
/**
|
|
47
137
|
* Fully decode a supported raster and return its intrinsic metadata.
|
|
48
138
|
* @param data - complete encoded image bytes.
|
|
49
|
-
* @param
|
|
139
|
+
* @param limits - intrinsic-dimension admission limits.
|
|
50
140
|
* @returns verified format and dimensions.
|
|
51
141
|
*/
|
|
52
|
-
async function detectImage(data,
|
|
142
|
+
async function detectImage(data, limits) {
|
|
53
143
|
try {
|
|
54
144
|
const image = sharp(data, {
|
|
55
145
|
failOn: "error",
|
|
56
146
|
limitInputPixels: false
|
|
57
147
|
});
|
|
58
148
|
const detected = await imageMetadata(image);
|
|
59
|
-
if (maxPixels !== void 0 && detected.width * detected.height > maxPixels) throw new AttachmentError("Image exceeds the configured decoded-pixel limit.", "IMAGE_TOO_MANY_PIXELS");
|
|
149
|
+
if (limits?.maxPixels !== void 0 && detected.width * detected.height > limits.maxPixels) throw new AttachmentError("Image exceeds the configured decoded-pixel limit.", "IMAGE_TOO_MANY_PIXELS");
|
|
150
|
+
if (limits?.maxDimension !== void 0 && Math.max(detected.width, detected.height) > limits.maxDimension) throw new AttachmentError("Image exceeds the configured per-side pixel limit.", "IMAGE_DIMENSION_TOO_LARGE");
|
|
60
151
|
await image.raw().toBuffer();
|
|
61
152
|
return detected;
|
|
62
153
|
} catch (error) {
|
|
@@ -65,11 +156,144 @@ async function detectImage(data, maxPixels) {
|
|
|
65
156
|
}
|
|
66
157
|
}
|
|
67
158
|
//#endregion
|
|
159
|
+
//#region lib/types/normalization.js
|
|
160
|
+
/** Deterministic provider-independent image normalization. */
|
|
161
|
+
const NORMALIZATION_QUALITIES = [
|
|
162
|
+
85,
|
|
163
|
+
80,
|
|
164
|
+
75
|
|
165
|
+
];
|
|
166
|
+
const LOW_COLOUR_SAMPLE_EDGE = 128;
|
|
167
|
+
const LOW_COLOUR_LIMIT = 256;
|
|
168
|
+
const MIN_SCALE_STEP = .9;
|
|
169
|
+
/** Encode one prepared pipeline and report exact output facts. */
|
|
170
|
+
async function encode(pipeline, mediaType, quality, palette = true) {
|
|
171
|
+
const { data, info } = await (mediaType === "image/png" ? pipeline.png({
|
|
172
|
+
compressionLevel: 9,
|
|
173
|
+
palette
|
|
174
|
+
}) : mediaType === "image/webp" ? pipeline.webp({ quality }) : pipeline.jpeg({ quality })).toBuffer({ resolveWithObject: true });
|
|
175
|
+
return {
|
|
176
|
+
data: new Uint8Array(data),
|
|
177
|
+
mediaType,
|
|
178
|
+
width: info.width,
|
|
179
|
+
height: info.height
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Whether bytes already satisfy the normalization requirements.
|
|
184
|
+
* @param detected - fully decoded source facts.
|
|
185
|
+
* @param bytes - encoded source length.
|
|
186
|
+
* @param policy - resolved normalization limits.
|
|
187
|
+
* @returns whether the source can pass through byte-identically.
|
|
188
|
+
*/
|
|
189
|
+
function canPassThroughNormalization(detected, bytes, policy) {
|
|
190
|
+
return detected.mediaType !== "image/gif" && !detected.animated && !detected.carriesMetadata && detected.depth === "uchar" && detected.space === "srgb" && bytes <= policy.maxBytes && Math.max(detected.width, detected.height) <= policy.maxDimension;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Classify a bounded pixel sample without assuming that a PNG source is a screenshot.
|
|
194
|
+
* @param pipeline - oriented sRGB source pipeline before output resizing.
|
|
195
|
+
* @returns whether the nearest-neighbour sample stays within the low-color threshold.
|
|
196
|
+
*/
|
|
197
|
+
async function hasLowColourCount(pipeline) {
|
|
198
|
+
const { data, info } = await pipeline.clone().resize({
|
|
199
|
+
width: LOW_COLOUR_SAMPLE_EDGE,
|
|
200
|
+
height: LOW_COLOUR_SAMPLE_EDGE,
|
|
201
|
+
fit: "inside",
|
|
202
|
+
withoutEnlargement: true,
|
|
203
|
+
kernel: sharp.kernel.nearest,
|
|
204
|
+
fastShrinkOnLoad: false
|
|
205
|
+
}).raw().toBuffer({ resolveWithObject: true });
|
|
206
|
+
const colours = /* @__PURE__ */ new Set();
|
|
207
|
+
for (let offset = 0; offset < data.length; offset += info.channels) {
|
|
208
|
+
const red = data.readUInt8(offset);
|
|
209
|
+
const green = data.readUInt8(offset + 1);
|
|
210
|
+
const blue = data.readUInt8(offset + 2);
|
|
211
|
+
const alpha = info.channels === 4 ? data.readUInt8(offset + 3) : 255;
|
|
212
|
+
colours.add(red >> 3 << 15 | green >> 3 << 10 | blue >> 3 << 5 | alpha >> 3);
|
|
213
|
+
if (colours.size > LOW_COLOUR_LIMIT) return false;
|
|
214
|
+
}
|
|
215
|
+
return true;
|
|
216
|
+
}
|
|
217
|
+
/** Assert that a normalized output is an 8-bit sRGB/sRGBA single-frame image with matching facts. */
|
|
218
|
+
async function verifyNormalizedImage(image, expectedAlpha) {
|
|
219
|
+
const detected = await detectImage(image.data);
|
|
220
|
+
if (detected.mediaType !== image.mediaType || detected.width !== image.width || detected.height !== image.height || detected.animated || detected.carriesMetadata || detected.depth !== "uchar" || detected.space !== "srgb" || !encodedAlphaIsCompatible(expectedAlpha, detected)) throw new AttachmentError("Image normalization did not produce a single-frame 8-bit sRGB image with matching metadata.", "ATTACHMENT_WRITE_FAILED");
|
|
221
|
+
return image;
|
|
222
|
+
}
|
|
223
|
+
/** Build one fixed-size, oriented, metadata-free sRGB pipeline from submitted bytes. */
|
|
224
|
+
function preparedPipeline(data, width, height) {
|
|
225
|
+
return sharp(data, {
|
|
226
|
+
failOn: "error",
|
|
227
|
+
limitInputPixels: false
|
|
228
|
+
}).rotate().toColourspace("srgb").resize({
|
|
229
|
+
width,
|
|
230
|
+
height,
|
|
231
|
+
fit: "inside",
|
|
232
|
+
withoutEnlargement: true
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
/** Dimensions after the long edge is capped without changing aspect ratio. */
|
|
236
|
+
function initialDimensions(detected, maxDimension) {
|
|
237
|
+
const scale = Math.min(1, maxDimension / Math.max(detected.width, detected.height));
|
|
238
|
+
return {
|
|
239
|
+
width: Math.max(1, Math.round(detected.width * scale)),
|
|
240
|
+
height: Math.max(1, Math.round(detected.height * scale))
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
/** Lazy encoding order for one size, separated by sampled colour complexity and alpha. */
|
|
244
|
+
function encodingAttemptsAtSize(data, width, height, hasAlpha, lowColour) {
|
|
245
|
+
const prepared = preparedPipeline(data, width, height);
|
|
246
|
+
const webp = NORMALIZATION_QUALITIES.map((quality) => (() => encode(prepared.clone(), "image/webp", quality)));
|
|
247
|
+
if (lowColour) return [() => encode(prepared.clone(), "image/png", void 0, !hasAlpha), ...webp];
|
|
248
|
+
if (hasAlpha) return webp;
|
|
249
|
+
return NORMALIZATION_QUALITIES.map((quality) => (() => encode(prepared.clone(), "image/jpeg", quality)));
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Produce the persisted provider-independent normalized version of one fully decoded source.
|
|
253
|
+
* The source is passed through only when it is already clean, single-frame, 8-bit sRGB/sRGBA,
|
|
254
|
+
* and inside both normalization limits. Re-encoding never removes transparency. After the fixed
|
|
255
|
+
* quality floor is reached, dimensions continue shrinking until the independent byte cap holds.
|
|
256
|
+
* @param data - complete admitted source bytes.
|
|
257
|
+
* @param detected - fully decoded source facts.
|
|
258
|
+
* @param policy - resolved independent normalization limits.
|
|
259
|
+
* @returns verified provider-independent normalized bytes and metadata.
|
|
260
|
+
*/
|
|
261
|
+
async function normalizeImage(data, detected, policy) {
|
|
262
|
+
if (canPassThroughNormalization(detected, data.byteLength, policy)) return {
|
|
263
|
+
data,
|
|
264
|
+
mediaType: detected.mediaType,
|
|
265
|
+
width: detected.width,
|
|
266
|
+
height: detected.height
|
|
267
|
+
};
|
|
268
|
+
try {
|
|
269
|
+
let { width, height } = initialDimensions(detected, policy.maxDimension);
|
|
270
|
+
const lowColour = await hasLowColourCount(sharp(data, {
|
|
271
|
+
failOn: "error",
|
|
272
|
+
limitInputPixels: false
|
|
273
|
+
}).rotate().toColourspace("srgb"));
|
|
274
|
+
for (;;) {
|
|
275
|
+
const encoded = await encodeFirstWithinLimit(encodingAttemptsAtSize(data, width, height, detected.hasAlpha, lowColour), policy.maxBytes);
|
|
276
|
+
if (!isExhaustedEncoding(encoded)) return await verifyNormalizedImage(encoded, detected.mediaType === "image/gif" ? void 0 : detected.hasAlpha);
|
|
277
|
+
if (width === 1 && height === 1) break;
|
|
278
|
+
const sizeScale = Math.sqrt(policy.maxBytes / encoded.smallest.data.byteLength) * .95;
|
|
279
|
+
const scale = Math.min(MIN_SCALE_STEP, sizeScale);
|
|
280
|
+
const nextWidth = Math.max(1, Math.floor(width * scale));
|
|
281
|
+
const nextHeight = Math.max(1, Math.floor(height * scale));
|
|
282
|
+
width = nextWidth;
|
|
283
|
+
height = nextHeight;
|
|
284
|
+
}
|
|
285
|
+
} catch (error) {
|
|
286
|
+
if (error instanceof AttachmentError) throw error;
|
|
287
|
+
throw new AttachmentError(`The ${detected.mediaType === "image/png" && detected.depth !== "uchar" ? `${detected.depth === "ushort" ? "16-bit" : detected.depth} PNG` : `${detected.depth} ${detected.mediaType.slice(6).toUpperCase()}`} could not be converted to the normalized 8-bit sRGB form.`, "ATTACHMENT_WRITE_FAILED", { cause: error });
|
|
288
|
+
}
|
|
289
|
+
throw new AttachmentError("Image cannot be encoded within the configured normalized-image byte cap.", "IMAGE_TOO_LARGE");
|
|
290
|
+
}
|
|
291
|
+
//#endregion
|
|
68
292
|
//#region lib/types/store.js
|
|
69
293
|
/** Content-addressed, owner-private local attachment storage. */
|
|
70
294
|
const ID_PATTERN = /^sha256:([a-f0-9]{64})$/;
|
|
71
295
|
const durableHomes = /* @__PURE__ */ new Set();
|
|
72
|
-
function digest(data) {
|
|
296
|
+
function digest$1(data) {
|
|
73
297
|
return createHash("sha256").update(data).digest("hex");
|
|
74
298
|
}
|
|
75
299
|
function displayName(value) {
|
|
@@ -85,24 +309,56 @@ function ensureReference(ref) {
|
|
|
85
309
|
if (match?.[1] === void 0) throw new AttachmentError("Attachment reference is invalid.", "INVALID_ATTACHMENT_REF");
|
|
86
310
|
return match[1];
|
|
87
311
|
}
|
|
88
|
-
async function inspectMetadata(data, declaredMediaType,
|
|
312
|
+
async function inspectMetadata(data, declaredMediaType, limits) {
|
|
89
313
|
if (data.byteLength === 0) throw new AttachmentError("Image is empty.", "INVALID_IMAGE");
|
|
90
|
-
const detected = await detectImage(data,
|
|
314
|
+
const detected = await detectImage(data, {
|
|
315
|
+
maxPixels: limits.maxImagePixels,
|
|
316
|
+
maxDimension: limits.maxImageDimension
|
|
317
|
+
});
|
|
91
318
|
if (detected.mediaType !== declaredMediaType) throw new AttachmentError("Declared image type does not match its bytes.", "IMAGE_TYPE_MISMATCH");
|
|
92
|
-
return
|
|
93
|
-
...detected,
|
|
94
|
-
bytes: data.byteLength
|
|
95
|
-
};
|
|
319
|
+
return detected;
|
|
96
320
|
}
|
|
97
321
|
/**
|
|
98
|
-
* Run the full admission policy for one image without touching storage
|
|
322
|
+
* Run the full admission policy for one image without touching storage,
|
|
323
|
+
* including normalization: a batch whose members all validate cannot later
|
|
324
|
+
* be refused by the normalized image byte cap during publication.
|
|
99
325
|
* @param input - encoded bytes and declared metadata.
|
|
100
|
-
* @param limits - resolved
|
|
101
|
-
* @
|
|
326
|
+
* @param limits - resolved source admission policy.
|
|
327
|
+
* @param policy - resolved normalization policy.
|
|
328
|
+
* @returns completion after the raster has been decoded and its normalized version proven to fit.
|
|
329
|
+
*/
|
|
330
|
+
async function validateImageFile(input, limits, policy) {
|
|
331
|
+
await prepareImageFile(input, limits, policy);
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Decode, normalize, and verify one submitted image without touching storage.
|
|
335
|
+
* @param input - submitted encoded bytes and declared media type.
|
|
336
|
+
* @param limits - source admission policy.
|
|
337
|
+
* @param policy - independent normalization policy.
|
|
338
|
+
* @returns immutable reference facts beside bytes ready for atomic publication.
|
|
102
339
|
*/
|
|
103
|
-
async function
|
|
340
|
+
async function prepareImageFile(input, limits, policy) {
|
|
104
341
|
if (input.data.byteLength > limits.maxImageBytes) throw new AttachmentError("Image exceeds the configured byte limit.", "IMAGE_TOO_LARGE");
|
|
105
|
-
await inspectMetadata(input.data, input.mediaType, limits
|
|
342
|
+
const detected = await inspectMetadata(input.data, input.mediaType, limits);
|
|
343
|
+
const normalized = await normalizeImage(input.data, detected, policy);
|
|
344
|
+
const sha256 = digest$1(normalized.data);
|
|
345
|
+
const name = displayName(input.name);
|
|
346
|
+
const downscaled = detected.width !== normalized.width || detected.height !== normalized.height;
|
|
347
|
+
return {
|
|
348
|
+
data: normalized.data,
|
|
349
|
+
ref: {
|
|
350
|
+
attachmentId: AttachmentId(`sha256:${sha256}`),
|
|
351
|
+
mediaType: normalized.mediaType,
|
|
352
|
+
width: normalized.width,
|
|
353
|
+
height: normalized.height,
|
|
354
|
+
bytes: normalized.data.byteLength,
|
|
355
|
+
...name !== void 0 ? { name } : {},
|
|
356
|
+
...downscaled ? { originalDimensions: {
|
|
357
|
+
width: detected.width,
|
|
358
|
+
height: detected.height
|
|
359
|
+
} } : {}
|
|
360
|
+
}
|
|
361
|
+
};
|
|
106
362
|
}
|
|
107
363
|
/**
|
|
108
364
|
* Make a directory's entries durable (fsync on a read-only directory handle).
|
|
@@ -164,16 +420,15 @@ async function ensureDurableHome(path) {
|
|
|
164
420
|
return home;
|
|
165
421
|
}
|
|
166
422
|
/**
|
|
167
|
-
*
|
|
423
|
+
* Publish one already verified normalized image below a versioned attachment root.
|
|
168
424
|
* @param root - absolute `NOMIX_HOME/attachments/v1` root.
|
|
169
|
-
* @param
|
|
170
|
-
* @
|
|
171
|
-
* @returns durable content-addressed reference.
|
|
425
|
+
* @param prepared - deterministic normalized bytes and reference.
|
|
426
|
+
* @returns durable content-addressed normalized image reference.
|
|
172
427
|
*/
|
|
173
|
-
async function
|
|
174
|
-
|
|
175
|
-
const
|
|
176
|
-
|
|
428
|
+
async function commitPreparedImageFile(root, prepared) {
|
|
429
|
+
const normalized = prepared.data;
|
|
430
|
+
const sha256 = ensureReference(prepared.ref);
|
|
431
|
+
if (digest$1(normalized) !== sha256 || normalized.byteLength !== prepared.ref.bytes) throw new AttachmentError("Prepared attachment bytes do not match their reference.", "ATTACHMENT_CORRUPT");
|
|
177
432
|
const bucket = join(root, "objects", sha256.slice(0, 2));
|
|
178
433
|
const staging = join(root, "tmp");
|
|
179
434
|
const boundary = await ensureDurableHome(dirname(dirname(resolve(root))));
|
|
@@ -184,7 +439,7 @@ async function saveImageFile(root, input, limits) {
|
|
|
184
439
|
let handle;
|
|
185
440
|
try {
|
|
186
441
|
handle = await open(temporary, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY, 384);
|
|
187
|
-
await handle.writeFile(
|
|
442
|
+
await handle.writeFile(normalized);
|
|
188
443
|
await handle.sync();
|
|
189
444
|
await handle.close();
|
|
190
445
|
handle = void 0;
|
|
@@ -193,7 +448,7 @@ async function saveImageFile(root, input, limits) {
|
|
|
193
448
|
} catch (error) {
|
|
194
449
|
/* v8 ignore next -- Private same-filesystem directories make EEXIST the only recoverable link race. */
|
|
195
450
|
if (!(error instanceof Error && "code" in error && error.code === "EEXIST")) throw error;
|
|
196
|
-
if (digest(new Uint8Array(await readFile(target))) !== sha256) throw new AttachmentError("Stored attachment failed integrity verification.", "ATTACHMENT_CORRUPT");
|
|
451
|
+
if (digest$1(new Uint8Array(await readFile(target))) !== sha256) throw new AttachmentError("Stored attachment failed integrity verification.", "ATTACHMENT_CORRUPT");
|
|
197
452
|
}
|
|
198
453
|
await syncDirectory(bucket);
|
|
199
454
|
await syncDirectory(join(root, "objects"));
|
|
@@ -214,12 +469,18 @@ async function saveImageFile(root, input, limits) {
|
|
|
214
469
|
if (error instanceof AttachmentError) throw error;
|
|
215
470
|
throw new AttachmentError("Unable to persist image attachment.", "ATTACHMENT_WRITE_FAILED", { cause: error });
|
|
216
471
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
472
|
+
return prepared.ref;
|
|
473
|
+
}
|
|
474
|
+
/**
|
|
475
|
+
* Decode and normalize one image once, then publish the prepared object.
|
|
476
|
+
* @param root - absolute `NOMIX_HOME/attachments/v1` root.
|
|
477
|
+
* @param input - submitted encoded bytes and declared media type.
|
|
478
|
+
* @param limits - resolved source admission policy.
|
|
479
|
+
* @param policy - resolved normalization policy.
|
|
480
|
+
* @returns durable content-addressed normalized image reference.
|
|
481
|
+
*/
|
|
482
|
+
async function saveImageFile(root, input, limits, policy) {
|
|
483
|
+
return commitPreparedImageFile(root, await prepareImageFile(input, limits, policy));
|
|
223
484
|
}
|
|
224
485
|
/**
|
|
225
486
|
* Read and verify one content-addressed image.
|
|
@@ -241,7 +502,7 @@ async function readImageFile(root, ref, signal) {
|
|
|
241
502
|
throw new AttachmentError("Unable to read image attachment.", "ATTACHMENT_READ_FAILED", { cause: error });
|
|
242
503
|
}
|
|
243
504
|
signal?.throwIfAborted();
|
|
244
|
-
if (digest(data) !== sha256) throw new AttachmentError("Stored attachment failed integrity verification.", "ATTACHMENT_CORRUPT");
|
|
505
|
+
if (digest$1(data) !== sha256) throw new AttachmentError("Stored attachment failed integrity verification.", "ATTACHMENT_CORRUPT");
|
|
245
506
|
const metadata = await probeImage(data);
|
|
246
507
|
signal?.throwIfAborted();
|
|
247
508
|
if (metadata.mediaType !== ref.mediaType || data.byteLength !== ref.bytes || metadata.width !== ref.width || metadata.height !== ref.height) throw new AttachmentError("Stored attachment metadata does not match its reference.", "ATTACHMENT_CORRUPT");
|
|
@@ -251,16 +512,298 @@ async function readImageFile(root, ref, signal) {
|
|
|
251
512
|
};
|
|
252
513
|
}
|
|
253
514
|
//#endregion
|
|
515
|
+
//#region lib/types/request-image.js
|
|
516
|
+
/** Deterministic cached image versions for model requests. */
|
|
517
|
+
/** Transform version included in every cache and upload-index identity. */
|
|
518
|
+
const REQUEST_IMAGE_TRANSFORM_VERSION = "request-image-v4";
|
|
519
|
+
/** DeepSeek request versions normally fit at these two preferred qualities. */
|
|
520
|
+
const REQUEST_IMAGE_QUALITIES = [85, 80];
|
|
521
|
+
function digest(value) {
|
|
522
|
+
return createHash("sha256").update(value).digest("hex");
|
|
523
|
+
}
|
|
524
|
+
/**
|
|
525
|
+
* Compute aspect-preserving integer dimensions within a hard total-pixel budget.
|
|
526
|
+
* @param width - positive source width.
|
|
527
|
+
* @param height - positive source height.
|
|
528
|
+
* @param maxPixels - positive width-times-height cap.
|
|
529
|
+
* @returns inward-rounded dimensions; small images are not enlarged.
|
|
530
|
+
*/
|
|
531
|
+
function requestImageDimensions(width, height, maxPixels) {
|
|
532
|
+
const scale = Math.min(1, Math.sqrt(maxPixels / (width * height)));
|
|
533
|
+
if (scale === 1) return {
|
|
534
|
+
width,
|
|
535
|
+
height
|
|
536
|
+
};
|
|
537
|
+
if (width >= height) {
|
|
538
|
+
let projectedWidth = Math.max(1, Math.floor(width * scale));
|
|
539
|
+
let projectedHeight = Math.max(1, Math.round(projectedWidth * height / width));
|
|
540
|
+
while (projectedWidth * projectedHeight > maxPixels && projectedWidth > 1) {
|
|
541
|
+
projectedWidth -= 1;
|
|
542
|
+
projectedHeight = Math.max(1, Math.round(projectedWidth * height / width));
|
|
543
|
+
}
|
|
544
|
+
return {
|
|
545
|
+
width: projectedWidth,
|
|
546
|
+
height: projectedHeight
|
|
547
|
+
};
|
|
548
|
+
}
|
|
549
|
+
let projectedHeight = Math.max(1, Math.floor(height * scale));
|
|
550
|
+
let projectedWidth = Math.max(1, Math.round(projectedHeight * width / height));
|
|
551
|
+
while (projectedWidth * projectedHeight > maxPixels && projectedHeight > 1) {
|
|
552
|
+
projectedHeight -= 1;
|
|
553
|
+
projectedWidth = Math.max(1, Math.round(projectedHeight * width / height));
|
|
554
|
+
}
|
|
555
|
+
return {
|
|
556
|
+
width: projectedWidth,
|
|
557
|
+
height: projectedHeight
|
|
558
|
+
};
|
|
559
|
+
}
|
|
560
|
+
function checkedInteger(value, name) {
|
|
561
|
+
if (!Number.isSafeInteger(value) || value <= 0) throw new AttachmentError(`${name} must be a positive integer.`, "INVALID_ATTACHMENT_REF");
|
|
562
|
+
return value;
|
|
563
|
+
}
|
|
564
|
+
function validatePolicy(policy) {
|
|
565
|
+
checkedInteger(policy.maxPixels, "Image request maxPixels");
|
|
566
|
+
checkedInteger(policy.maxBytes, "Image request maxBytes");
|
|
567
|
+
}
|
|
568
|
+
function descriptor(attachment, policy) {
|
|
569
|
+
return JSON.stringify({
|
|
570
|
+
transformVersion: REQUEST_IMAGE_TRANSFORM_VERSION,
|
|
571
|
+
attachmentId: attachment.attachmentId,
|
|
572
|
+
routePixelBudget: policy.maxPixels,
|
|
573
|
+
encodedByteBudget: policy.maxBytes,
|
|
574
|
+
encoding: {
|
|
575
|
+
png: {
|
|
576
|
+
compressionLevel: 9,
|
|
577
|
+
palette: "opaque-only"
|
|
578
|
+
},
|
|
579
|
+
webpQualities: REQUEST_IMAGE_QUALITIES,
|
|
580
|
+
jpegQualities: REQUEST_IMAGE_QUALITIES,
|
|
581
|
+
order: [
|
|
582
|
+
"low-colour:png-webp",
|
|
583
|
+
"alpha:webp",
|
|
584
|
+
"opaque:jpeg"
|
|
585
|
+
],
|
|
586
|
+
colourspace: "srgb"
|
|
587
|
+
}
|
|
588
|
+
});
|
|
589
|
+
}
|
|
590
|
+
/**
|
|
591
|
+
* Complete deterministic identity for one attachment and route-owned request policy.
|
|
592
|
+
* @param attachment - provider-independent durable normalized attachment reference.
|
|
593
|
+
* @param policy - route-owned pixel and byte policy.
|
|
594
|
+
* @returns branded digest over every request transform input.
|
|
595
|
+
*/
|
|
596
|
+
function requestImageVariantId(attachment, policy) {
|
|
597
|
+
return ImageVariantId(`sha256:${digest(descriptor(attachment, policy))}`);
|
|
598
|
+
}
|
|
599
|
+
function pipeline(attachment, width, height) {
|
|
600
|
+
return sourcePipeline(attachment).resize({
|
|
601
|
+
width,
|
|
602
|
+
height,
|
|
603
|
+
fit: "inside",
|
|
604
|
+
withoutEnlargement: true
|
|
605
|
+
});
|
|
606
|
+
}
|
|
607
|
+
function sourcePipeline(attachment) {
|
|
608
|
+
return sharp(attachment.data, {
|
|
609
|
+
failOn: "error",
|
|
610
|
+
limitInputPixels: false
|
|
611
|
+
}).toColourspace("srgb");
|
|
612
|
+
}
|
|
613
|
+
async function encoded(image, mediaType, quality, palette = true) {
|
|
614
|
+
const { data, info } = await (mediaType === "image/png" ? image.png({
|
|
615
|
+
compressionLevel: 9,
|
|
616
|
+
palette
|
|
617
|
+
}) : mediaType === "image/webp" ? image.webp({ quality }) : image.jpeg({ quality })).toBuffer({ resolveWithObject: true });
|
|
618
|
+
return {
|
|
619
|
+
data: new Uint8Array(data),
|
|
620
|
+
mediaType,
|
|
621
|
+
width: info.width,
|
|
622
|
+
height: info.height
|
|
623
|
+
};
|
|
624
|
+
}
|
|
625
|
+
function encodingAttempts(attachment, width, height, hasAlpha, lowColour) {
|
|
626
|
+
const prepared = pipeline(attachment, width, height);
|
|
627
|
+
const webp = REQUEST_IMAGE_QUALITIES.map((quality) => (() => encoded(prepared.clone(), "image/webp", quality)));
|
|
628
|
+
if (lowColour) return [() => encoded(prepared.clone(), "image/png", void 0, !hasAlpha), ...webp];
|
|
629
|
+
if (hasAlpha) return webp;
|
|
630
|
+
return REQUEST_IMAGE_QUALITIES.map((quality) => (() => encoded(prepared.clone(), "image/jpeg", quality)));
|
|
631
|
+
}
|
|
632
|
+
async function createRequestImage(attachment, policy, hasAlpha) {
|
|
633
|
+
let dimensions = requestImageDimensions(attachment.ref.width, attachment.ref.height, policy.maxPixels);
|
|
634
|
+
if (dimensions.width === attachment.ref.width && dimensions.height === attachment.ref.height && attachment.data.byteLength <= policy.maxBytes) return {
|
|
635
|
+
data: attachment.data,
|
|
636
|
+
mediaType: attachment.ref.mediaType,
|
|
637
|
+
width: attachment.ref.width,
|
|
638
|
+
height: attachment.ref.height
|
|
639
|
+
};
|
|
640
|
+
const lowColour = await hasLowColourCount(sourcePipeline(attachment));
|
|
641
|
+
for (;;) {
|
|
642
|
+
const encodedVersion = await encodeFirstWithinLimit(encodingAttempts(attachment, dimensions.width, dimensions.height, hasAlpha, lowColour), policy.maxBytes);
|
|
643
|
+
if (!isExhaustedEncoding(encodedVersion)) return encodedVersion;
|
|
644
|
+
if (dimensions.width === 1 && dimensions.height === 1) break;
|
|
645
|
+
const scale = Math.min(.9, Math.sqrt(policy.maxBytes / encodedVersion.smallest.data.byteLength) * .95);
|
|
646
|
+
dimensions = {
|
|
647
|
+
width: Math.max(1, Math.floor(dimensions.width * scale)),
|
|
648
|
+
height: Math.max(1, Math.floor(dimensions.height * scale))
|
|
649
|
+
};
|
|
650
|
+
}
|
|
651
|
+
throw new AttachmentError("Image cannot be encoded within the model-request byte budget.", "IMAGE_TOO_LARGE");
|
|
652
|
+
}
|
|
653
|
+
function cachePath(root, hash) {
|
|
654
|
+
return join(root, "request-images", hash.slice(0, 2), hash);
|
|
655
|
+
}
|
|
656
|
+
async function readCached(path, attachment, policy, expectedAlpha, signal) {
|
|
657
|
+
try {
|
|
658
|
+
const data = new Uint8Array(await readFile(path, { signal }));
|
|
659
|
+
const detected = await probeImage(data);
|
|
660
|
+
const maximum = requestImageDimensions(attachment.ref.width, attachment.ref.height, policy.maxPixels);
|
|
661
|
+
if (data.byteLength > policy.maxBytes || detected.depth !== "uchar" || detected.space !== "srgb" || detected.width > maximum.width || detected.height > maximum.height || !encodedAlphaIsCompatible(expectedAlpha, detected)) return void 0;
|
|
662
|
+
return {
|
|
663
|
+
data,
|
|
664
|
+
mediaType: detected.mediaType,
|
|
665
|
+
width: detected.width,
|
|
666
|
+
height: detected.height,
|
|
667
|
+
hasAlpha: detected.hasAlpha
|
|
668
|
+
};
|
|
669
|
+
} catch (error) {
|
|
670
|
+
if (error?.code === "ENOENT") return void 0;
|
|
671
|
+
signal?.throwIfAborted();
|
|
672
|
+
return;
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
async function verifyRequestImage(image, expectedAlpha) {
|
|
676
|
+
const detected = await detectImage(image.data);
|
|
677
|
+
if (detected.depth !== "uchar" || detected.space !== "srgb" || detected.width !== image.width || detected.height !== image.height || detected.mediaType !== image.mediaType || !encodedAlphaIsCompatible(expectedAlpha, detected)) throw new AttachmentError("Encoded model-request image does not match its verified 8-bit sRGB metadata.", "ATTACHMENT_WRITE_FAILED");
|
|
678
|
+
return {
|
|
679
|
+
...image,
|
|
680
|
+
hasAlpha: detected.hasAlpha
|
|
681
|
+
};
|
|
682
|
+
}
|
|
683
|
+
async function writeCached(path, data) {
|
|
684
|
+
await mkdir(dirname(path), {
|
|
685
|
+
recursive: true,
|
|
686
|
+
mode: 448
|
|
687
|
+
});
|
|
688
|
+
const temporary = `${path}.${randomUUID()}.tmp`;
|
|
689
|
+
try {
|
|
690
|
+
await writeFile(temporary, data, {
|
|
691
|
+
mode: 384,
|
|
692
|
+
flag: "wx"
|
|
693
|
+
});
|
|
694
|
+
await rename(temporary, path);
|
|
695
|
+
} finally {
|
|
696
|
+
await rm(temporary, { force: true });
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
/**
|
|
700
|
+
* Generate or reuse one request image below the local attachment root.
|
|
701
|
+
* @param root - absolute versioned attachment storage root.
|
|
702
|
+
* @param attachment - verified normalized attachment bytes and reference.
|
|
703
|
+
* @param policy - exact route request-image policy.
|
|
704
|
+
* @param signal - optional cancellation for cache I/O and image transformation.
|
|
705
|
+
* @returns verified request bytes and deterministic variant identity.
|
|
706
|
+
*/
|
|
707
|
+
async function readRequestImageFile(root, attachment, policy, signal) {
|
|
708
|
+
signal?.throwIfAborted();
|
|
709
|
+
validatePolicy(policy);
|
|
710
|
+
const source = await probeImage(attachment.data);
|
|
711
|
+
const variantId = requestImageVariantId(attachment.ref, policy);
|
|
712
|
+
const path = cachePath(root, String(variantId).slice(7));
|
|
713
|
+
const cached = await readCached(path, attachment, policy, source.hasAlpha, signal);
|
|
714
|
+
const created = cached ?? await createRequestImage(attachment, policy, source.hasAlpha);
|
|
715
|
+
const version = cached ?? (created.data === attachment.data ? {
|
|
716
|
+
...created,
|
|
717
|
+
hasAlpha: source.hasAlpha
|
|
718
|
+
} : await verifyRequestImage(created, source.hasAlpha));
|
|
719
|
+
signal?.throwIfAborted();
|
|
720
|
+
if (cached === void 0 && version.data !== attachment.data) await writeCached(path, version.data);
|
|
721
|
+
return {
|
|
722
|
+
variantId,
|
|
723
|
+
attachment: attachment.ref,
|
|
724
|
+
data: version.data,
|
|
725
|
+
mediaType: version.mediaType,
|
|
726
|
+
bytes: version.data.byteLength,
|
|
727
|
+
width: version.width,
|
|
728
|
+
height: version.height,
|
|
729
|
+
depth: "uchar",
|
|
730
|
+
space: "srgb",
|
|
731
|
+
hasAlpha: version.hasAlpha
|
|
732
|
+
};
|
|
733
|
+
}
|
|
734
|
+
//#endregion
|
|
254
735
|
//#region lib/types/index.js
|
|
255
736
|
/** Local durable attachment backend rooted below `NOMIX_HOME`. @module @nomix-ai/nomix-attachment-local */
|
|
256
|
-
/** Default maximum encoded bytes for one image. */
|
|
257
|
-
const DEFAULT_MAX_IMAGE_BYTES =
|
|
737
|
+
/** Default maximum encoded bytes for one submitted image; oversized sources are refused, not shrunk. */
|
|
738
|
+
const DEFAULT_MAX_IMAGE_BYTES = 20 * 1024 * 1024;
|
|
258
739
|
/** Default maximum images in one prompt. */
|
|
259
740
|
const DEFAULT_MAX_IMAGES_PER_MESSAGE = 20;
|
|
260
741
|
/** Default maximum aggregate image bytes in one prompt. */
|
|
261
|
-
const DEFAULT_MAX_MESSAGE_IMAGE_BYTES =
|
|
262
|
-
/** Default maximum intrinsic pixels for one image. */
|
|
263
|
-
const DEFAULT_MAX_IMAGE_PIXELS =
|
|
742
|
+
const DEFAULT_MAX_MESSAGE_IMAGE_BYTES = 200 * 1024 * 1024;
|
|
743
|
+
/** Default maximum intrinsic pixels for one submitted image. */
|
|
744
|
+
const DEFAULT_MAX_IMAGE_PIXELS = 64e6;
|
|
745
|
+
/** Default per-side pixel cap for one submitted image. */
|
|
746
|
+
const DEFAULT_MAX_IMAGE_DIMENSION = 8192;
|
|
747
|
+
/**
|
|
748
|
+
* Default long-edge target of the stored normalized image. A larger source
|
|
749
|
+
* is admitted and downscaled to this edge, so admission bounds what rides
|
|
750
|
+
* every later model request without refusing ordinary large sources.
|
|
751
|
+
*/
|
|
752
|
+
const DEFAULT_NORMALIZED_IMAGE_MAX_DIMENSION = 2048;
|
|
753
|
+
/** Default independent safety cap for one stored normalized image. */
|
|
754
|
+
const DEFAULT_NORMALIZED_IMAGE_MAX_BYTES = 4 * 1024 * 1024;
|
|
755
|
+
/** Conservative default number of simultaneous native image transformations per store. */
|
|
756
|
+
const DEFAULT_IMAGE_COMPRESSION_CONCURRENCY = 2;
|
|
757
|
+
/** Maximum configurable native image transformations per store. */
|
|
758
|
+
const MAX_IMAGE_COMPRESSION_CONCURRENCY = 8;
|
|
759
|
+
function abortReason(signal) {
|
|
760
|
+
const reason = signal.reason;
|
|
761
|
+
return reason instanceof Error ? reason : new Error("Attachment request cancelled with a non-Error reason.", { cause: reason });
|
|
762
|
+
}
|
|
763
|
+
var SharedRequest = class {
|
|
764
|
+
controller = new AbortController();
|
|
765
|
+
promise;
|
|
766
|
+
settled = false;
|
|
767
|
+
waiters = 0;
|
|
768
|
+
constructor(start) {
|
|
769
|
+
this.promise = start(this.controller.signal).finally(() => {
|
|
770
|
+
this.settled = true;
|
|
771
|
+
});
|
|
772
|
+
}
|
|
773
|
+
wait(signal) {
|
|
774
|
+
signal?.throwIfAborted();
|
|
775
|
+
this.waiters += 1;
|
|
776
|
+
if (signal === void 0) return this.promise.finally(() => {
|
|
777
|
+
this.release(false);
|
|
778
|
+
});
|
|
779
|
+
let released = false;
|
|
780
|
+
const release = (cancelled) => {
|
|
781
|
+
if (released) return;
|
|
782
|
+
released = true;
|
|
783
|
+
this.release(cancelled, signal);
|
|
784
|
+
};
|
|
785
|
+
return new Promise((resolve, reject) => {
|
|
786
|
+
const abort = () => {
|
|
787
|
+
release(true);
|
|
788
|
+
reject(abortReason(signal));
|
|
789
|
+
};
|
|
790
|
+
signal.addEventListener("abort", abort, { once: true });
|
|
791
|
+
this.promise.then((value) => {
|
|
792
|
+
signal.removeEventListener("abort", abort);
|
|
793
|
+
release(false);
|
|
794
|
+
resolve(value);
|
|
795
|
+
}, (error) => {
|
|
796
|
+
signal.removeEventListener("abort", abort);
|
|
797
|
+
release(false);
|
|
798
|
+
reject(error);
|
|
799
|
+
});
|
|
800
|
+
});
|
|
801
|
+
}
|
|
802
|
+
release(cancelled, signal) {
|
|
803
|
+
this.waiters -= 1;
|
|
804
|
+
if (cancelled && this.waiters === 0 && !this.settled && signal !== void 0) this.controller.abort(abortReason(signal));
|
|
805
|
+
}
|
|
806
|
+
};
|
|
264
807
|
/** Persistent content-addressed local attachment store. */
|
|
265
808
|
var LocalAttachmentStore = class extends AttachmentStore {
|
|
266
809
|
static Config = z.object({
|
|
@@ -268,19 +811,30 @@ var LocalAttachmentStore = class extends AttachmentStore {
|
|
|
268
811
|
maxImageBytes: z.number().step(1).min(1).default(DEFAULT_MAX_IMAGE_BYTES),
|
|
269
812
|
maxImagesPerMessage: z.number().step(1).min(1).default(20),
|
|
270
813
|
maxMessageImageBytes: z.number().step(1).min(1).default(DEFAULT_MAX_MESSAGE_IMAGE_BYTES),
|
|
271
|
-
maxImagePixels: z.number().step(1).min(1).default(DEFAULT_MAX_IMAGE_PIXELS)
|
|
814
|
+
maxImagePixels: z.number().step(1).min(1).default(DEFAULT_MAX_IMAGE_PIXELS),
|
|
815
|
+
maxImageDimension: z.number().step(1).min(1).default(DEFAULT_MAX_IMAGE_DIMENSION),
|
|
816
|
+
normalizedImageMaxDimension: z.number().step(1).min(1).default(DEFAULT_NORMALIZED_IMAGE_MAX_DIMENSION),
|
|
817
|
+
normalizedImageMaxBytes: z.number().step(1).min(1).default(DEFAULT_NORMALIZED_IMAGE_MAX_BYTES),
|
|
818
|
+
imageCompressionConcurrency: z.number().step(1).min(1).max(8).default(2)
|
|
272
819
|
});
|
|
273
820
|
/** Absolute versioned storage root. */
|
|
274
821
|
root;
|
|
275
822
|
imageLimits;
|
|
823
|
+
/** Resolved provider-independent normalization policy. */
|
|
824
|
+
normalizationPolicy;
|
|
825
|
+
/** Resolved instance-level compression limit. */
|
|
826
|
+
imageCompressionConcurrency;
|
|
827
|
+
compression;
|
|
828
|
+
requestInflight = /* @__PURE__ */ new Map();
|
|
276
829
|
constructor(ctx, config) {
|
|
277
830
|
super(ctx);
|
|
278
831
|
this.root = resolve(join(resolveNomixHome(config.nomixHome), "attachments", "v1"));
|
|
279
832
|
this.imageLimits = Object.freeze({
|
|
280
|
-
maxImageBytes: config.maxImageBytes ??
|
|
833
|
+
maxImageBytes: config.maxImageBytes ?? 20971520,
|
|
281
834
|
maxImagesPerMessage: config.maxImagesPerMessage ?? 20,
|
|
282
|
-
maxMessageImageBytes: config.maxMessageImageBytes ??
|
|
283
|
-
maxImagePixels: config.maxImagePixels ??
|
|
835
|
+
maxMessageImageBytes: config.maxMessageImageBytes ?? 209715200,
|
|
836
|
+
maxImagePixels: config.maxImagePixels ?? 64e6,
|
|
837
|
+
maxImageDimension: config.maxImageDimension ?? 8192,
|
|
284
838
|
mediaTypes: Object.freeze([
|
|
285
839
|
"image/png",
|
|
286
840
|
"image/jpeg",
|
|
@@ -288,16 +842,54 @@ var LocalAttachmentStore = class extends AttachmentStore {
|
|
|
288
842
|
"image/gif"
|
|
289
843
|
])
|
|
290
844
|
});
|
|
845
|
+
this.normalizationPolicy = Object.freeze({
|
|
846
|
+
maxDimension: config.normalizedImageMaxDimension ?? 2048,
|
|
847
|
+
maxBytes: config.normalizedImageMaxBytes ?? 4194304
|
|
848
|
+
});
|
|
849
|
+
const compressionConcurrency = config.imageCompressionConcurrency ?? 2;
|
|
850
|
+
if (!Number.isSafeInteger(compressionConcurrency) || compressionConcurrency < 1 || compressionConcurrency > 8) throw new Error(`attachment-local: imageCompressionConcurrency must be an integer from 1 through 8`);
|
|
851
|
+
this.imageCompressionConcurrency = compressionConcurrency;
|
|
852
|
+
this.compression = new CompressionLimiter(compressionConcurrency);
|
|
291
853
|
}
|
|
292
854
|
async validateImage(input) {
|
|
293
|
-
await validateImageFile(input, this.imageLimits);
|
|
855
|
+
await this.compression.run(() => validateImageFile(input, this.imageLimits, this.normalizationPolicy));
|
|
856
|
+
}
|
|
857
|
+
async saveImages(inputs) {
|
|
858
|
+
this.validateImageBatch(inputs);
|
|
859
|
+
const prepared = await Promise.all(inputs.map((input) => this.compression.run(() => prepareImageFile(input, this.imageLimits, this.normalizationPolicy))));
|
|
860
|
+
const refs = [];
|
|
861
|
+
for (const image of prepared) refs.push(await commitPreparedImageFile(this.root, image));
|
|
862
|
+
return refs;
|
|
294
863
|
}
|
|
295
864
|
async saveImage(input) {
|
|
296
|
-
|
|
865
|
+
const prepared = await this.compression.run(() => prepareImageFile(input, this.imageLimits, this.normalizationPolicy));
|
|
866
|
+
return commitPreparedImageFile(this.root, prepared);
|
|
297
867
|
}
|
|
298
868
|
async readImage(ref, signal) {
|
|
299
869
|
return readImageFile(this.root, ref, signal);
|
|
300
870
|
}
|
|
871
|
+
async readImageRequest(ref, policy, signal) {
|
|
872
|
+
return this.requestVersion(ref, policy, void 0, signal);
|
|
873
|
+
}
|
|
874
|
+
requestVersion(ref, policy, stored, signal) {
|
|
875
|
+
signal?.throwIfAborted();
|
|
876
|
+
const variantId = requestImageVariantId(ref, policy);
|
|
877
|
+
const key = String(variantId);
|
|
878
|
+
let operation = this.requestInflight.get(key);
|
|
879
|
+
if (operation?.controller.signal.aborted) {
|
|
880
|
+
this.requestInflight.delete(key);
|
|
881
|
+
operation = void 0;
|
|
882
|
+
}
|
|
883
|
+
if (operation === void 0) {
|
|
884
|
+
const shared = new SharedRequest((sharedSignal) => this.compression.run(async () => readRequestImageFile(this.root, stored ?? await this.readImage(ref, sharedSignal), policy, sharedSignal)));
|
|
885
|
+
operation = shared;
|
|
886
|
+
this.requestInflight.set(key, shared);
|
|
887
|
+
shared.promise.finally(() => {
|
|
888
|
+
if (this.requestInflight.get(key) === shared) this.requestInflight.delete(key);
|
|
889
|
+
}).catch(() => {});
|
|
890
|
+
}
|
|
891
|
+
return operation.wait(signal);
|
|
892
|
+
}
|
|
301
893
|
};
|
|
302
894
|
//#endregion
|
|
303
|
-
export { DEFAULT_MAX_IMAGES_PER_MESSAGE, DEFAULT_MAX_IMAGE_BYTES, DEFAULT_MAX_IMAGE_PIXELS, DEFAULT_MAX_MESSAGE_IMAGE_BYTES, LocalAttachmentStore, LocalAttachmentStore as default,
|
|
895
|
+
export { DEFAULT_IMAGE_COMPRESSION_CONCURRENCY, DEFAULT_MAX_IMAGES_PER_MESSAGE, DEFAULT_MAX_IMAGE_BYTES, DEFAULT_MAX_IMAGE_DIMENSION, DEFAULT_MAX_IMAGE_PIXELS, DEFAULT_MAX_MESSAGE_IMAGE_BYTES, DEFAULT_NORMALIZED_IMAGE_MAX_BYTES, DEFAULT_NORMALIZED_IMAGE_MAX_DIMENSION, LocalAttachmentStore, LocalAttachmentStore as default, MAX_IMAGE_COMPRESSION_CONCURRENCY, canPassThroughNormalization, commitPreparedImageFile, normalizeImage, prepareImageFile, readImageFile, readRequestImageFile, requestImageDimensions, requestImageVariantId, saveImageFile, validateImageFile };
|