@schlenkr/ragents 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +166 -0
- package/README.md +88 -0
- package/apps/server/agent-home/settings.json +3 -0
- package/apps/server/package.json +29 -0
- package/apps/server/src/access-projection.ts +97 -0
- package/apps/server/src/access-service.ts +22 -0
- package/apps/server/src/access-session.ts +204 -0
- package/apps/server/src/api/contracts.ts +203 -0
- package/apps/server/src/api/core-methods.ts +163 -0
- package/apps/server/src/api/delivery.ts +40 -0
- package/apps/server/src/api/reference.ts +146 -0
- package/apps/server/src/api/rights.ts +26 -0
- package/apps/server/src/chat-attachments.ts +52 -0
- package/apps/server/src/chat-context.ts +6 -0
- package/apps/server/src/chat-events.ts +185 -0
- package/apps/server/src/chat-handler.ts +37 -0
- package/apps/server/src/config-definition.ts +80 -0
- package/apps/server/src/config-file.ts +324 -0
- package/apps/server/src/config.ts +46 -0
- package/apps/server/src/data-directory.ts +42 -0
- package/apps/server/src/external-access.ts +40 -0
- package/apps/server/src/help-files.ts +63 -0
- package/apps/server/src/host-resolution-hooks.mjs +31 -0
- package/apps/server/src/host-resolution.ts +3 -0
- package/apps/server/src/host-version.ts +74 -0
- package/apps/server/src/layout.ts +36 -0
- package/apps/server/src/main.ts +54 -0
- package/apps/server/src/plugin-support/actor-programs/capability-resolver.ts +107 -0
- package/apps/server/src/plugin-support/actor-programs/limits.ts +33 -0
- package/apps/server/src/plugin-support/actor-programs/operations.ts +19 -0
- package/apps/server/src/plugin-support/actor-programs/service.ts +16 -0
- package/apps/server/src/plugin-support/agent-tool.ts +60 -0
- package/apps/server/src/plugin-support/asset-path.ts +4 -0
- package/apps/server/src/plugin-support/await-with-signal.ts +18 -0
- package/apps/server/src/plugin-support/chat-display-contract.ts +7 -0
- package/apps/server/src/plugin-support/chat-display-policy.ts +55 -0
- package/apps/server/src/plugin-support/front-matter.ts +44 -0
- package/apps/server/src/plugin-support/http.ts +93 -0
- package/apps/server/src/plugin-support/language-server/contract.ts +18 -0
- package/apps/server/src/plugin-support/language-server/plugin.ts +32 -0
- package/apps/server/src/plugin-support/language-server/snapshot-method.ts +17 -0
- package/apps/server/src/plugin-support/language-server/tools.ts +73 -0
- package/apps/server/src/plugin-support/model-choice.ts +109 -0
- package/apps/server/src/plugin-support/model-upstreams.ts +12 -0
- package/apps/server/src/plugin-support/native-typescript-child.ts +78 -0
- package/apps/server/src/plugin-support/native-typescript-executor.ts +260 -0
- package/apps/server/src/plugin-support/plugin-config.ts +48 -0
- package/apps/server/src/plugin-support/plugin-folder.ts +81 -0
- package/apps/server/src/plugin-support/plugin-module.ts +14 -0
- package/apps/server/src/plugin-support/plugins-root.ts +41 -0
- package/apps/server/src/plugin-support/product-model-settings-contract.ts +24 -0
- package/apps/server/src/plugin-support/product-model-settings.ts +120 -0
- package/apps/server/src/plugin-support/product-start-options.ts +104 -0
- package/apps/server/src/plugin-support/prompt.ts +68 -0
- package/apps/server/src/plugin-support/provision.ts +85 -0
- package/apps/server/src/plugin-support/run-scripts.ts +88 -0
- package/apps/server/src/plugin-support/shell-platform.ts +21 -0
- package/apps/server/src/plugin-support/skills.ts +97 -0
- package/apps/server/src/plugin-support/start-entries-contract.ts +71 -0
- package/apps/server/src/plugin-support/start-options-contract.ts +65 -0
- package/apps/server/src/plugin-support/system-prompts.ts +138 -0
- package/apps/server/src/plugin-support/thinking-level.ts +8 -0
- package/apps/server/src/plugin-support/tool-availability.ts +20 -0
- package/apps/server/src/plugin-support/workspace-ownership.ts +36 -0
- package/apps/server/src/plugin-support/workspace-sandbox-host.ts +213 -0
- package/apps/server/src/plugin-support/workspace-tool-naming.ts +11 -0
- package/apps/server/src/plugin-support/zip.ts +69 -0
- package/apps/server/src/profile/compose.ts +69 -0
- package/apps/server/src/profile/plugin-discovery.ts +112 -0
- package/apps/server/src/profile/plugin-list.ts +19 -0
- package/apps/server/src/profile/provisioning.ts +81 -0
- package/apps/server/src/protocol.ts +106 -0
- package/apps/server/src/provider.ts +817 -0
- package/apps/server/src/ragents/actor-chat-history.ts +111 -0
- package/apps/server/src/ragents/chat-projection.ts +55 -0
- package/apps/server/src/ragents/chat-text-positions.ts +43 -0
- package/apps/server/src/ragents/coordinator.ts +5 -0
- package/apps/server/src/ragents/document-store.ts +12 -0
- package/apps/server/src/ragents/engine.ts +417 -0
- package/apps/server/src/ragents/global-chat.ts +40 -0
- package/apps/server/src/ragents/host-services.ts +26 -0
- package/apps/server/src/ragents/journal-chat-events.ts +52 -0
- package/apps/server/src/ragents/product-runtime.ts +31 -0
- package/apps/server/src/ragents/runtime-bridge.ts +7 -0
- package/apps/server/src/ragents/session.ts +859 -0
- package/apps/server/src/ragents/start-option-state.ts +37 -0
- package/apps/server/src/ragents/typescript-tools.ts +182 -0
- package/apps/server/src/ragents/workspace-runtime.ts +64 -0
- package/apps/server/src/rpc/dispatcher.ts +178 -0
- package/apps/server/src/rpc/http-transport.ts +178 -0
- package/apps/server/src/rpc/stdio-transport.ts +44 -0
- package/apps/server/src/run-preparation-contract.ts +20 -0
- package/apps/server/src/run-preparation-input.ts +16 -0
- package/apps/server/src/run-preparation.ts +147 -0
- package/apps/server/src/run-transfer.ts +264 -0
- package/apps/server/src/server.ts +312 -0
- package/apps/server/src/settings.ts +209 -0
- package/apps/server/src/startup.ts +13 -0
- package/apps/server/src/title-compactor.ts +131 -0
- package/apps/server/src/title-settings-contract.ts +9 -0
- package/apps/server/src/title-settings.ts +67 -0
- package/apps/web/package.json +41 -0
- package/apps/web/src/AccessContext.tsx +125 -0
- package/apps/web/src/App.tsx +315 -0
- package/apps/web/src/CanvasShortcuts.tsx +60 -0
- package/apps/web/src/DiffCode.tsx +89 -0
- package/apps/web/src/HelpDialog.tsx +87 -0
- package/apps/web/src/MaterialSettings.tsx +40 -0
- package/apps/web/src/Overview.tsx +201 -0
- package/apps/web/src/PluginActivation.ts +41 -0
- package/apps/web/src/PluginChat.tsx +552 -0
- package/apps/web/src/PluginRegistry.tsx +689 -0
- package/apps/web/src/RunPreparationChat.tsx +111 -0
- package/apps/web/src/RunStore.ts +86 -0
- package/apps/web/src/SessionList.tsx +148 -0
- package/apps/web/src/SettingsModal.tsx +949 -0
- package/apps/web/src/SourceCode.tsx +49 -0
- package/apps/web/src/StartOptions.tsx +231 -0
- package/apps/web/src/StartSurface.tsx +161 -0
- package/apps/web/src/StatusGroup.tsx +18 -0
- package/apps/web/src/ThemeSettings.tsx +46 -0
- package/apps/web/src/TitleModelSettings.tsx +100 -0
- package/apps/web/src/Toolbar.tsx +28 -0
- package/apps/web/src/WorkspacePanel.tsx +309 -0
- package/apps/web/src/access-session.ts +27 -0
- package/apps/web/src/access-token.ts +31 -0
- package/apps/web/src/api.ts +368 -0
- package/apps/web/src/chat/ChatInputToolbar.tsx +488 -0
- package/apps/web/src/chat/ChatMessages.tsx +666 -0
- package/apps/web/src/chat/ChatPanel.tsx +61 -0
- package/apps/web/src/chat/DetailModeSwitch.tsx +58 -0
- package/apps/web/src/chat/Markdown.tsx +104 -0
- package/apps/web/src/chat/QuestionCard.tsx +107 -0
- package/apps/web/src/chat/StepPopover.tsx +82 -0
- package/apps/web/src/chat/WorkingScenes.tsx +235 -0
- package/apps/web/src/chat/attachments.ts +53 -0
- package/apps/web/src/chat/chat-scroll.ts +41 -0
- package/apps/web/src/chat/chat-target.ts +21 -0
- package/apps/web/src/chat/requests.ts +23 -0
- package/apps/web/src/chat/texts.ts +61 -0
- package/apps/web/src/chat/types.ts +26 -0
- package/apps/web/src/chat/useAttachmentCapabilities.ts +35 -0
- package/apps/web/src/chat/useChat.ts +46 -0
- package/apps/web/src/chat/user-location.ts +22 -0
- package/apps/web/src/column/ColumnApp.tsx +158 -0
- package/apps/web/src/column/ColumnMenu.tsx +37 -0
- package/apps/web/src/column/ColumnRunHeader.tsx +43 -0
- package/apps/web/src/column/column-location.ts +30 -0
- package/apps/web/src/column/host-contract.ts +83 -0
- package/apps/web/src/column/host.ts +101 -0
- package/apps/web/src/column/use-session-list.ts +42 -0
- package/apps/web/src/column.tsx +43 -0
- package/apps/web/src/diff-view.css +38 -0
- package/apps/web/src/help-samples.ts +11 -0
- package/apps/web/src/highlighting.css +74 -0
- package/apps/web/src/highlighting.ts +262 -0
- package/apps/web/src/lib/format.ts +5 -0
- package/apps/web/src/lib/guards.ts +8 -0
- package/apps/web/src/lib/http.ts +9 -0
- package/apps/web/src/lib/labels.ts +11 -0
- package/apps/web/src/lib/local-storage-setting.ts +39 -0
- package/apps/web/src/main.tsx +30 -0
- package/apps/web/src/material-settings.ts +104 -0
- package/apps/web/src/model-settings-events.ts +1 -0
- package/apps/web/src/page-opener.tsx +14 -0
- package/apps/web/src/panel/LoginForm.tsx +31 -0
- package/apps/web/src/panel/OverviewPage.tsx +90 -0
- package/apps/web/src/panel/PanelPage.tsx +9 -0
- package/apps/web/src/panel/SettingsPage.tsx +102 -0
- package/apps/web/src/panel/contract.ts +101 -0
- package/apps/web/src/panel/target-state.ts +53 -0
- package/apps/web/src/panel.tsx +30 -0
- package/apps/web/src/plugin-bootstrap.ts +90 -0
- package/apps/web/src/plugin-discovery.ts +5 -0
- package/apps/web/src/rpc/client.ts +301 -0
- package/apps/web/src/rpc.ts +4 -0
- package/apps/web/src/run-overview.ts +34 -0
- package/apps/web/src/run-preparation.ts +16 -0
- package/apps/web/src/run-read-state.ts +33 -0
- package/apps/web/src/settings-contributions.ts +274 -0
- package/apps/web/src/theme.ts +135 -0
- package/apps/web/src/title-model-settings.ts +51 -0
- package/apps/web/src/toolLine.ts +67 -0
- package/apps/web/src/ui/ListDetail.tsx +149 -0
- package/apps/web/src/ui/SectionLabel.tsx +7 -0
- package/apps/web/src/ui/SvgEdge.tsx +39 -0
- package/apps/web/src/ui/alert.tsx +75 -0
- package/apps/web/src/ui/badge.tsx +51 -0
- package/apps/web/src/ui/button.tsx +57 -0
- package/apps/web/src/ui/card.tsx +102 -0
- package/apps/web/src/ui/checkbox.tsx +26 -0
- package/apps/web/src/ui/dialog.tsx +250 -0
- package/apps/web/src/ui/dropdown-menu.tsx +265 -0
- package/apps/web/src/ui/empty.tsx +103 -0
- package/apps/web/src/ui/field.tsx +236 -0
- package/apps/web/src/ui/frame.css +4 -0
- package/apps/web/src/ui/index.ts +43 -0
- package/apps/web/src/ui/input.tsx +19 -0
- package/apps/web/src/ui/label.tsx +17 -0
- package/apps/web/src/ui/modal-controller.ts +70 -0
- package/apps/web/src/ui/modal.tsx +62 -0
- package/apps/web/src/ui/popover.tsx +102 -0
- package/apps/web/src/ui/progress.tsx +80 -0
- package/apps/web/src/ui/radio-group.tsx +35 -0
- package/apps/web/src/ui/select.tsx +198 -0
- package/apps/web/src/ui/separator.tsx +22 -0
- package/apps/web/src/ui/skeleton.tsx +13 -0
- package/apps/web/src/ui/spinner.tsx +10 -0
- package/apps/web/src/ui/switch.tsx +29 -0
- package/apps/web/src/ui/table.tsx +113 -0
- package/apps/web/src/ui/tabs.tsx +79 -0
- package/apps/web/src/ui/tailwind.css +21 -0
- package/apps/web/src/ui/textarea.tsx +17 -0
- package/apps/web/src/ui/theme.css +300 -0
- package/apps/web/src/ui/toggle-group.tsx +87 -0
- package/apps/web/src/ui/toggle.tsx +42 -0
- package/apps/web/src/ui/tooltip.tsx +63 -0
- package/apps/web/src/ui/useFileInput.ts +50 -0
- package/apps/web/src/virtual-plugins.d.ts +3 -0
- package/apps/web/src/vite-env.d.ts +1 -0
- package/package.json +82 -0
- package/packages/agent/package.json +64 -0
- package/packages/agent/src/config.ts +161 -0
- package/packages/agent/src/core/agent-session-runtime.ts +548 -0
- package/packages/agent/src/core/agent-session-services.ts +224 -0
- package/packages/agent/src/core/agent-session.ts +3357 -0
- package/packages/agent/src/core/auth-guidance.ts +18 -0
- package/packages/agent/src/core/auth-storage.ts +271 -0
- package/packages/agent/src/core/bash-executor.ts +156 -0
- package/packages/agent/src/core/compaction/branch-summarization.ts +372 -0
- package/packages/agent/src/core/compaction/compaction.ts +875 -0
- package/packages/agent/src/core/compaction/index.ts +7 -0
- package/packages/agent/src/core/compaction/utils.ts +174 -0
- package/packages/agent/src/core/defaults.ts +3 -0
- package/packages/agent/src/core/diagnostics.ts +15 -0
- package/packages/agent/src/core/event-bus.ts +33 -0
- package/packages/agent/src/core/exec.ts +107 -0
- package/packages/agent/src/core/experimental.ts +3 -0
- package/packages/agent/src/core/extensions/index.ts +149 -0
- package/packages/agent/src/core/extensions/loader.ts +709 -0
- package/packages/agent/src/core/extensions/runner.ts +1132 -0
- package/packages/agent/src/core/extensions/types.ts +1460 -0
- package/packages/agent/src/core/extensions/wrapper.ts +45 -0
- package/packages/agent/src/core/footer-data-provider.ts +388 -0
- package/packages/agent/src/core/http-dispatcher.ts +106 -0
- package/packages/agent/src/core/index.ts +78 -0
- package/packages/agent/src/core/messages.ts +195 -0
- package/packages/agent/src/core/model-config.ts +287 -0
- package/packages/agent/src/core/model-registry.ts +126 -0
- package/packages/agent/src/core/model-resolver.ts +675 -0
- package/packages/agent/src/core/model-runtime.ts +517 -0
- package/packages/agent/src/core/output-guard.ts +108 -0
- package/packages/agent/src/core/package-manager.ts +2441 -0
- package/packages/agent/src/core/prompt-templates.ts +284 -0
- package/packages/agent/src/core/provider-composer.ts +549 -0
- package/packages/agent/src/core/resolve-config-value.ts +287 -0
- package/packages/agent/src/core/resource-loader.ts +946 -0
- package/packages/agent/src/core/runtime-credentials.ts +48 -0
- package/packages/agent/src/core/sdk.ts +358 -0
- package/packages/agent/src/core/session-cwd.ts +59 -0
- package/packages/agent/src/core/session-manager.ts +1623 -0
- package/packages/agent/src/core/settings-manager.ts +1212 -0
- package/packages/agent/src/core/skills.ts +487 -0
- package/packages/agent/src/core/slash-commands.ts +41 -0
- package/packages/agent/src/core/source-info.ts +40 -0
- package/packages/agent/src/core/system-prompt.ts +147 -0
- package/packages/agent/src/core/timings.ts +50 -0
- package/packages/agent/src/core/tools/bash.ts +314 -0
- package/packages/agent/src/core/tools/edit-diff.ts +704 -0
- package/packages/agent/src/core/tools/edit.ts +222 -0
- package/packages/agent/src/core/tools/file-mutation-queue.ts +61 -0
- package/packages/agent/src/core/tools/index.ts +130 -0
- package/packages/agent/src/core/tools/output-accumulator.ts +222 -0
- package/packages/agent/src/core/tools/path-utils.ts +118 -0
- package/packages/agent/src/core/tools/read.ts +195 -0
- package/packages/agent/src/core/tools/tool-definition-wrapper.ts +45 -0
- package/packages/agent/src/core/tools/truncate.ts +276 -0
- package/packages/agent/src/core/tools/write.ts +90 -0
- package/packages/agent/src/core/trust-manager.ts +244 -0
- package/packages/agent/src/index.ts +287 -0
- package/packages/agent/src/utils/ansi.ts +60 -0
- package/packages/agent/src/utils/child-process.ts +137 -0
- package/packages/agent/src/utils/exif-orientation.ts +183 -0
- package/packages/agent/src/utils/frontmatter.ts +39 -0
- package/packages/agent/src/utils/fs-watch.ts +30 -0
- package/packages/agent/src/utils/git.ts +226 -0
- package/packages/agent/src/utils/image-convert.ts +49 -0
- package/packages/agent/src/utils/image-process.ts +119 -0
- package/packages/agent/src/utils/image-resize-core.ts +164 -0
- package/packages/agent/src/utils/image-resize-worker.ts +42 -0
- package/packages/agent/src/utils/image-resize.ts +123 -0
- package/packages/agent/src/utils/json.ts +6 -0
- package/packages/agent/src/utils/mime.ts +116 -0
- package/packages/agent/src/utils/paths.ts +118 -0
- package/packages/agent/src/utils/photon.ts +139 -0
- package/packages/agent/src/utils/shell.ts +225 -0
- package/packages/agent/src/utils/sleep.ts +18 -0
- package/packages/agent/src/utils/tools-manager.ts +63 -0
- package/packages/agent-core/package.json +32 -0
- package/packages/agent-core/src/agent-loop.ts +877 -0
- package/packages/agent-core/src/agent.ts +598 -0
- package/packages/agent-core/src/index.ts +4 -0
- package/packages/agent-core/src/types.ts +455 -0
- package/packages/agent-core/src/uuid.ts +54 -0
- package/packages/ai/package.json +46 -0
- package/packages/ai/src/api/ai-sdk-messages.ts +102 -0
- package/packages/ai/src/api/ai-sdk-transport.ts +53 -0
- package/packages/ai/src/api/ai-sdk.lazy.ts +4 -0
- package/packages/ai/src/api/ai-sdk.ts +273 -0
- package/packages/ai/src/api/lazy.ts +75 -0
- package/packages/ai/src/api/openrouter-images.lazy.ts +10 -0
- package/packages/ai/src/api/openrouter-images.ts +98 -0
- package/packages/ai/src/api/simple-options.ts +77 -0
- package/packages/ai/src/api/transform-messages.ts +185 -0
- package/packages/ai/src/api-registry.ts +226 -0
- package/packages/ai/src/auth/context.ts +45 -0
- package/packages/ai/src/auth/credential-store.ts +51 -0
- package/packages/ai/src/auth/helpers.ts +47 -0
- package/packages/ai/src/auth/resolve.ts +139 -0
- package/packages/ai/src/auth/types.ts +220 -0
- package/packages/ai/src/compat/extension-oauth-types.ts +45 -0
- package/packages/ai/src/env-api-keys.ts +24 -0
- package/packages/ai/src/image-models.generated.ts +533 -0
- package/packages/ai/src/images-models.ts +274 -0
- package/packages/ai/src/index.ts +33 -0
- package/packages/ai/src/models-store.ts +38 -0
- package/packages/ai/src/models.generated.ts +6 -0
- package/packages/ai/src/models.ts +705 -0
- package/packages/ai/src/oauth.ts +10 -0
- package/packages/ai/src/providers/all.ts +64 -0
- package/packages/ai/src/providers/faux.ts +539 -0
- package/packages/ai/src/providers/openrouter-images.ts +14 -0
- package/packages/ai/src/providers/openrouter.models.ts +6050 -0
- package/packages/ai/src/providers/openrouter.ts +15 -0
- package/packages/ai/src/session-resources.ts +24 -0
- package/packages/ai/src/types.ts +692 -0
- package/packages/ai/src/utils/abort-signals.ts +41 -0
- package/packages/ai/src/utils/deferred-tools.ts +39 -0
- package/packages/ai/src/utils/diagnostics.ts +45 -0
- package/packages/ai/src/utils/error-body.ts +129 -0
- package/packages/ai/src/utils/estimate.ts +146 -0
- package/packages/ai/src/utils/event-stream.ts +88 -0
- package/packages/ai/src/utils/hash.ts +13 -0
- package/packages/ai/src/utils/headers.ts +18 -0
- package/packages/ai/src/utils/json-parse.ts +124 -0
- package/packages/ai/src/utils/node-http-proxy.ts +112 -0
- package/packages/ai/src/utils/overflow.ts +165 -0
- package/packages/ai/src/utils/provider-env.ts +52 -0
- package/packages/ai/src/utils/retry.ts +101 -0
- package/packages/ai/src/utils/sanitize-unicode.ts +25 -0
- package/packages/ai/src/utils/typebox-helpers.ts +24 -0
- package/packages/ai/src/utils/validation.ts +383 -0
- package/packages/ragents/package.json +31 -0
- package/packages/ragents/src/access.ts +54 -0
- package/packages/ragents/src/agents/actor-input.ts +191 -0
- package/packages/ragents/src/agents/catalog.ts +220 -0
- package/packages/ragents/src/agents/delivery.ts +187 -0
- package/packages/ragents/src/agents/live.ts +71 -0
- package/packages/ragents/src/agents/plugins.ts +130 -0
- package/packages/ragents/src/agents/scheduler.ts +1048 -0
- package/packages/ragents/src/agents/schemas.ts +64 -0
- package/packages/ragents/src/agents/tool-orientation.ts +12 -0
- package/packages/ragents/src/agents/tools.ts +709 -0
- package/packages/ragents/src/agents/toolset.ts +324 -0
- package/packages/ragents/src/agents/turn.ts +65 -0
- package/packages/ragents/src/agents/workspace-tools.ts +11 -0
- package/packages/ragents/src/agents/workspaces.ts +15 -0
- package/packages/ragents/src/domain/draft.ts +11 -0
- package/packages/ragents/src/domain/driver.ts +56 -0
- package/packages/ragents/src/domain/event-semantics.ts +668 -0
- package/packages/ragents/src/domain/event-validation.ts +620 -0
- package/packages/ragents/src/domain/events.ts +236 -0
- package/packages/ragents/src/domain/json-patch.ts +77 -0
- package/packages/ragents/src/domain/json.ts +86 -0
- package/packages/ragents/src/domain/model.ts +267 -0
- package/packages/ragents/src/domain/plugin-state.ts +33 -0
- package/packages/ragents/src/domain/portable-id.ts +9 -0
- package/packages/ragents/src/domain/projection.ts +506 -0
- package/packages/ragents/src/domain/schema-errors.ts +56 -0
- package/packages/ragents/src/domain/vocabulary.ts +37 -0
- package/packages/ragents/src/drivers/agent-runtime.ts +1503 -0
- package/packages/ragents/src/drivers/agent.ts +108 -0
- package/packages/ragents/src/drivers/attachments.ts +56 -0
- package/packages/ragents/src/drivers/skill-preload.ts +205 -0
- package/packages/ragents/src/drivers/types.ts +77 -0
- package/packages/ragents/src/http/contracts.ts +80 -0
- package/packages/ragents/src/http/methods.ts +150 -0
- package/packages/ragents/src/index.ts +161 -0
- package/packages/ragents/src/plugin-host.ts +1184 -0
- package/packages/ragents/src/plugin-types.ts +373 -0
- package/packages/ragents/src/rpc/contract.ts +76 -0
- package/packages/ragents/src/rpc/contribution.ts +67 -0
- package/packages/ragents/src/rpc/peer.ts +208 -0
- package/packages/ragents/src/rpc/protocol.ts +129 -0
- package/packages/ragents/src/runtime/artifacts.ts +95 -0
- package/packages/ragents/src/runtime/canonical-hash.ts +5 -0
- package/packages/ragents/src/runtime/canonical-json.ts +41 -0
- package/packages/ragents/src/runtime/command.ts +35 -0
- package/packages/ragents/src/runtime/decisions/actions.ts +77 -0
- package/packages/ragents/src/runtime/decisions/actors.ts +283 -0
- package/packages/ragents/src/runtime/decisions/artifacts.ts +28 -0
- package/packages/ragents/src/runtime/decisions/inputs.ts +79 -0
- package/packages/ragents/src/runtime/decisions/subscriptions.ts +135 -0
- package/packages/ragents/src/runtime/decisions/turns.ts +166 -0
- package/packages/ragents/src/runtime/domain-error.ts +10 -0
- package/packages/ragents/src/runtime/durable-fs.ts +13 -0
- package/packages/ragents/src/runtime/failures.ts +18 -0
- package/packages/ragents/src/runtime/guards.ts +196 -0
- package/packages/ragents/src/runtime/journal-storage.ts +228 -0
- package/packages/ragents/src/runtime/journal.ts +952 -0
- package/packages/ragents/src/runtime/orchestration.ts +711 -0
- package/packages/ragents/src/runtime/serial-queue.ts +13 -0
- package/packages/ragents/src/runtime/services.ts +15 -0
- package/packages/ragents/src/runtime/stop.ts +186 -0
- package/packages/ragents/src/script/driver.ts +18 -0
- package/packages/ragents/src/script/mediators.ts +386 -0
- package/packages/ragents/src/script/programs.ts +10 -0
- package/packages/ragents/src/script/std.ts +27 -0
- package/packages/ragents/src/script/types.ts +6 -0
- package/packages/ragents/src/typescript/async-compiler.ts +322 -0
- package/packages/ragents/src/typescript/build-contract.ts +14 -0
- package/packages/ragents/src/typescript/compiler-worker.ts +52 -0
- package/packages/ragents/src/typescript/compiler.ts +304 -0
- package/packages/ragents/src/typescript/index.ts +48 -0
- package/packages/ragents/src/typescript/native-executor.ts +40 -0
- package/packages/ragents/src/typescript/native-program.ts +5 -0
- package/packages/ragents/src/typescript/run-context.ts +199 -0
- package/packages/ragents/src/typescript/schema.ts +176 -0
- package/packages/ragents/src/typescript/snippet.ts +121 -0
- package/packages/workspace-executor/package.json +25 -0
- package/packages/workspace-executor/src/context.ts +123 -0
- package/packages/workspace-executor/src/executor.ts +134 -0
- package/packages/workspace-executor/src/git-config-environment.ts +10 -0
- package/packages/workspace-executor/src/index.ts +52 -0
- package/packages/workspace-executor/src/language-server/adapters/fsharp.ts +59 -0
- package/packages/workspace-executor/src/language-server/adapters/index.ts +7 -0
- package/packages/workspace-executor/src/language-server/adapters/roslyn.ts +54 -0
- package/packages/workspace-executor/src/language-server/adapters/typescript.ts +46 -0
- package/packages/workspace-executor/src/language-server/contract.ts +23 -0
- package/packages/workspace-executor/src/language-server/diagnostics.ts +62 -0
- package/packages/workspace-executor/src/language-server/host.ts +409 -0
- package/packages/workspace-executor/src/language-server/json-rpc.ts +103 -0
- package/packages/workspace-executor/src/language-server/roots.ts +29 -0
- package/packages/workspace-executor/src/language-server/session.ts +442 -0
- package/packages/workspace-executor/src/language-server/solution.ts +13 -0
- package/packages/workspace-executor/src/managed-process.ts +329 -0
- package/packages/workspace-executor/src/paths.ts +43 -0
- package/packages/workspace-executor/src/run-marker.ts +6 -0
- package/packages/workspace-executor/src/safe-environment.ts +47 -0
- package/packages/workspace-executor/src/sandbox-tools.ts +258 -0
- package/packages/workspace-executor/src/session-ident.ts +37 -0
- package/packages/workspace-executor/src/shell-platform.ts +11 -0
- package/packages/workspace-executor/src/tools.ts +28 -0
- package/plugins/package.json +8 -0
- package/plugins/ragents.activity/server/index.ts +9 -0
- package/plugins/ragents.activity/web/ActivityHeader.tsx +58 -0
- package/plugins/ragents.activity/web/activity.ts +144 -0
- package/plugins/ragents.activity/web/index.tsx +13 -0
- package/plugins/ragents.actor-programs/client-ui/DataTable.tsx +100 -0
- package/plugins/ragents.actor-programs/client-ui/FilePicker.tsx +65 -0
- package/plugins/ragents.actor-programs/client-ui/FlowDiagram.tsx +234 -0
- package/plugins/ragents.actor-programs/client-ui/FlowDiagramRenderer.tsx +85 -0
- package/plugins/ragents.actor-programs/client-ui/Form.tsx +126 -0
- package/plugins/ragents.actor-programs/client-ui/Layout.tsx +27 -0
- package/plugins/ragents.actor-programs/client-ui/MessageList.tsx +30 -0
- package/plugins/ragents.actor-programs/client-ui/Viewers.tsx +41 -0
- package/plugins/ragents.actor-programs/client-ui/WorkflowDiagram.tsx +14 -0
- package/plugins/ragents.actor-programs/client-ui/contracts.d.ts +84 -0
- package/plugins/ragents.actor-programs/client-ui/file-contracts.d.ts +19 -0
- package/plugins/ragents.actor-programs/client-ui/file-selection.ts +24 -0
- package/plugins/ragents.actor-programs/client-ui/flow-diagram-contracts.d.ts +27 -0
- package/plugins/ragents.actor-programs/client-ui/flow-diagram.css +23 -0
- package/plugins/ragents.actor-programs/client-ui/form-contracts.d.ts +38 -0
- package/plugins/ragents.actor-programs/client-ui/frame-layout.ts +4 -0
- package/plugins/ragents.actor-programs/client-ui/index.tsx +81 -0
- package/plugins/ragents.actor-programs/client-ui/layout-contracts.d.ts +33 -0
- package/plugins/ragents.actor-programs/client-ui/message-list-contracts.d.ts +33 -0
- package/plugins/ragents.actor-programs/client-ui/table-contracts.d.ts +35 -0
- package/plugins/ragents.actor-programs/client-ui/viewer-contracts.d.ts +37 -0
- package/plugins/ragents.actor-programs/client-ui/workflow-diagram-contracts.d.ts +10 -0
- package/plugins/ragents.actor-programs/contract.ts +180 -0
- package/plugins/ragents.actor-programs/parameter-types.ts +3 -0
- package/plugins/ragents.actor-programs/prompt.hbs +79 -0
- package/plugins/ragents.actor-programs/server/agent-tools.ts +31 -0
- package/plugins/ragents.actor-programs/server/app-project.ts +284 -0
- package/plugins/ragents.actor-programs/server/authoring-contracts.ts +10 -0
- package/plugins/ragents.actor-programs/server/client-compiler.ts +174 -0
- package/plugins/ragents.actor-programs/server/client-contracts.ts +187 -0
- package/plugins/ragents.actor-programs/server/client-runtime.ts +16 -0
- package/plugins/ragents.actor-programs/server/controls-template.ts +118 -0
- package/plugins/ragents.actor-programs/server/controls-tool.ts +48 -0
- package/plugins/ragents.actor-programs/server/index.ts +51 -0
- package/plugins/ragents.actor-programs/server/methods.ts +72 -0
- package/plugins/ragents.actor-programs/server/project-diagnostics.ts +138 -0
- package/plugins/ragents.actor-programs/server/prompts.ts +21 -0
- package/plugins/ragents.actor-programs/server/routes.ts +235 -0
- package/plugins/ragents.actor-programs/server/runtime-libraries.ts +4 -0
- package/plugins/ragents.actor-programs/server/runtime.ts +721 -0
- package/plugins/ragents.actor-programs/server/tailwind.ts +22 -0
- package/plugins/ragents.actor-programs/server/templates.ts +400 -0
- package/plugins/ragents.actor-programs/server/tool-contributor.ts +29 -0
- package/plugins/ragents.actor-programs/summary.hbs +17 -0
- package/plugins/ragents.actor-programs/web/ActorViewFrame.tsx +463 -0
- package/plugins/ragents.actor-programs/web/AppsPanel.tsx +436 -0
- package/plugins/ragents.actor-programs/web/EmbeddedApps.tsx +116 -0
- package/plugins/ragents.actor-programs/web/ExpandIcon.tsx +5 -0
- package/plugins/ragents.actor-programs/web/FullscreenHost.tsx +31 -0
- package/plugins/ragents.actor-programs/web/FunctionForm.tsx +102 -0
- package/plugins/ragents.actor-programs/web/ProgramSource.tsx +81 -0
- package/plugins/ragents.actor-programs/web/api.ts +353 -0
- package/plugins/ragents.actor-programs/web/bridge.ts +122 -0
- package/plugins/ragents.actor-programs/web/chat-state.ts +37 -0
- package/plugins/ragents.actor-programs/web/context.ts +30 -0
- package/plugins/ragents.actor-programs/web/function-call.ts +28 -0
- package/plugins/ragents.actor-programs/web/function-input.ts +40 -0
- package/plugins/ragents.actor-programs/web/index.tsx +96 -0
- package/plugins/ragents.actor-programs/web/invocations.ts +43 -0
- package/plugins/ragents.actor-programs/web/program-state.ts +68 -0
- package/plugins/ragents.actor-programs/web/state-revision.ts +16 -0
- package/plugins/ragents.actor-programs/workflow/index.ts +202 -0
- package/plugins/ragents.actor-programs/workflow/prompt-reader.ts +15 -0
- package/plugins/ragents.ask/ask.hbs +4 -0
- package/plugins/ragents.ask/contract.ts +17 -0
- package/plugins/ragents.ask/server/answer-method.ts +15 -0
- package/plugins/ragents.ask/server/ask-service.ts +152 -0
- package/plugins/ragents.ask/server/ask-tool.ts +39 -0
- package/plugins/ragents.ask/server/contract.ts +22 -0
- package/plugins/ragents.ask/server/index.ts +26 -0
- package/plugins/ragents.ask/server/tool-contributor.ts +11 -0
- package/plugins/ragents.ask/web/QuestionSection.tsx +47 -0
- package/plugins/ragents.ask/web/api.ts +6 -0
- package/plugins/ragents.ask/web/constants.ts +1 -0
- package/plugins/ragents.ask/web/index.tsx +50 -0
- package/plugins/ragents.browser/provision.ts +48 -0
- package/plugins/ragents.browser/server/browser.ts +393 -0
- package/plugins/ragents.browser/server/contract.ts +36 -0
- package/plugins/ragents.browser/server/index.ts +35 -0
- package/plugins/ragents.browser/server/tools.ts +197 -0
- package/plugins/ragents.browser/skills/browser-testing/SKILL.md +36 -0
- package/plugins/ragents.documents/contract.ts +33 -0
- package/plugins/ragents.documents/prompt.hbs +18 -0
- package/plugins/ragents.documents/server/config.ts +14 -0
- package/plugins/ragents.documents/server/document-write-tool.ts +45 -0
- package/plugins/ragents.documents/server/files-route.ts +137 -0
- package/plugins/ragents.documents/server/index.ts +38 -0
- package/plugins/ragents.documents/server/show-document-tool.ts +73 -0
- package/plugins/ragents.documents/server/store.ts +35 -0
- package/plugins/ragents.documents/server/tool-contributor.ts +16 -0
- package/plugins/ragents.documents/web/DocumentViewer.tsx +450 -0
- package/plugins/ragents.documents/web/api.ts +8 -0
- package/plugins/ragents.documents/web/index.tsx +279 -0
- package/plugins/ragents.lsp-fsharp/provision.ts +74 -0
- package/plugins/ragents.lsp-fsharp/server/index.ts +16 -0
- package/plugins/ragents.lsp-fsharp/web/index.tsx +7 -0
- package/plugins/ragents.lsp-roslyn/provision.ts +54 -0
- package/plugins/ragents.lsp-roslyn/server/index.ts +15 -0
- package/plugins/ragents.lsp-roslyn/web/api.ts +10 -0
- package/plugins/ragents.lsp-roslyn/web/index.tsx +7 -0
- package/plugins/ragents.lsp-roslyn/web/language-server-plugin.tsx +236 -0
- package/plugins/ragents.lsp-typescript/server/index.ts +7 -0
- package/plugins/ragents.lsp-typescript/web/index.tsx +7 -0
- package/plugins/ragents.model-relay/server/config.ts +37 -0
- package/plugins/ragents.model-relay/server/index.ts +31 -0
- package/plugins/ragents.model-relay/server/relay.ts +213 -0
- package/plugins/ragents.orchestration/canvas.hbs +50 -0
- package/plugins/ragents.orchestration/contract.ts +322 -0
- package/plugins/ragents.orchestration/orchestration.hbs +105 -0
- package/plugins/ragents.orchestration/server/canvas-tool.ts +248 -0
- package/plugins/ragents.orchestration/server/index.ts +64 -0
- package/plugins/ragents.orchestration/server/run-stop-tool.ts +30 -0
- package/plugins/ragents.orchestration/tiled-layout.ts +47 -0
- package/plugins/ragents.orchestration/web/ActorCanvasControls.tsx +159 -0
- package/plugins/ragents.orchestration/web/ActorChat.tsx +56 -0
- package/plugins/ragents.orchestration/web/ActorChatControls.tsx +64 -0
- package/plugins/ragents.orchestration/web/ActorChatPreview.tsx +36 -0
- package/plugins/ragents.orchestration/web/ActorNet.tsx +607 -0
- package/plugins/ragents.orchestration/web/ActorPopout.tsx +36 -0
- package/plugins/ragents.orchestration/web/ActorShortcut.tsx +76 -0
- package/plugins/ragents.orchestration/web/ActorTile.tsx +22 -0
- package/plugins/ragents.orchestration/web/CanvasStartup.tsx +14 -0
- package/plugins/ragents.orchestration/web/CanvasTiles.tsx +47 -0
- package/plugins/ragents.orchestration/web/CardSizeSettings.tsx +42 -0
- package/plugins/ragents.orchestration/web/Center.tsx +576 -0
- package/plugins/ragents.orchestration/web/DocumentsSection.tsx +37 -0
- package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +109 -0
- package/plugins/ragents.orchestration/web/FlowInspector.tsx +932 -0
- package/plugins/ragents.orchestration/web/JournalStatus.tsx +87 -0
- package/plugins/ragents.orchestration/web/MaterialBody.tsx +104 -0
- package/plugins/ragents.orchestration/web/ScriptActorCard.tsx +56 -0
- package/plugins/ragents.orchestration/web/StopRunButton.tsx +52 -0
- package/plugins/ragents.orchestration/web/TiledCanvas.tsx +281 -0
- package/plugins/ragents.orchestration/web/ZoomSettings.tsx +38 -0
- package/plugins/ragents.orchestration/web/actor-conversation.ts +64 -0
- package/plugins/ragents.orchestration/web/actor-header-settings.ts +41 -0
- package/plugins/ragents.orchestration/web/api.ts +33 -0
- package/plugins/ragents.orchestration/web/canvas-layout-storage.ts +39 -0
- package/plugins/ragents.orchestration/web/canvas-layout.ts +326 -0
- package/plugins/ragents.orchestration/web/canvas-scene.ts +311 -0
- package/plugins/ragents.orchestration/web/canvas-stage.ts +21 -0
- package/plugins/ragents.orchestration/web/canvas-startup.ts +36 -0
- package/plugins/ragents.orchestration/web/canvas-view-settings.ts +48 -0
- package/plugins/ragents.orchestration/web/card-size-settings.ts +36 -0
- package/plugins/ragents.orchestration/web/column/AddresseeControl.tsx +116 -0
- package/plugins/ragents.orchestration/web/column/ColumnSettings.tsx +50 -0
- package/plugins/ragents.orchestration/web/column/RunColumn.tsx +370 -0
- package/plugins/ragents.orchestration/web/column/column-actors.ts +38 -0
- package/plugins/ragents.orchestration/web/column/column-settings.ts +47 -0
- package/plugins/ragents.orchestration/web/column/column-state.ts +59 -0
- package/plugins/ragents.orchestration/web/column/sheet-status.ts +30 -0
- package/plugins/ragents.orchestration/web/constants.ts +10 -0
- package/plugins/ragents.orchestration/web/contract.ts +25 -0
- package/plugins/ragents.orchestration/web/executions.ts +124 -0
- package/plugins/ragents.orchestration/web/format.ts +4 -0
- package/plugins/ragents.orchestration/web/index.tsx +182 -0
- package/plugins/ragents.orchestration/web/keyboard-navigation.ts +55 -0
- package/plugins/ragents.orchestration/web/material-layout.ts +14 -0
- package/plugins/ragents.orchestration/web/run-view.ts +199 -0
- package/plugins/ragents.orchestration/web/tile-docking.ts +99 -0
- package/plugins/ragents.orchestration/web/tiled-view-settings.ts +76 -0
- package/plugins/ragents.orchestration/web/useCanvasMeasurements.ts +78 -0
- package/plugins/ragents.orchestration/web/zoom-settings.ts +28 -0
- package/plugins/ragents.overseer/contract.ts +165 -0
- package/plugins/ragents.overseer/server/api.ts +82 -0
- package/plugins/ragents.overseer/server/coordinator-prompt.ts +13 -0
- package/plugins/ragents.overseer/server/index.ts +71 -0
- package/plugins/ragents.overseer/server/orientation.ts +33 -0
- package/plugins/ragents.overseer/server/quick-answer.ts +54 -0
- package/plugins/ragents.overseer/server/reset-method.ts +5 -0
- package/plugins/ragents.overseer/server/run-directory.ts +49 -0
- package/plugins/ragents.overseer/server/settings-method.ts +8 -0
- package/plugins/ragents.overseer/server/settings.ts +83 -0
- package/plugins/ragents.overseer/server/user-location.ts +96 -0
- package/plugins/ragents.overseer/web/ModelSettings.tsx +70 -0
- package/plugins/ragents.overseer/web/chat-display.ts +10 -0
- package/plugins/ragents.overseer/web/index.tsx +208 -0
- package/plugins/ragents.overseer/web/model-settings.ts +61 -0
- package/plugins/ragents.overseer/web/quick-answers.ts +64 -0
- package/plugins/ragents.processes/contract.ts +61 -0
- package/plugins/ragents.processes/server/index.ts +36 -0
- package/plugins/ragents.processes/server/methods.ts +39 -0
- package/plugins/ragents.processes/server/observer.ts +179 -0
- package/plugins/ragents.processes/server/process-table.ts +395 -0
- package/plugins/ragents.processes/server/snapshot.ts +63 -0
- package/plugins/ragents.processes/server/terminator.ts +164 -0
- package/plugins/ragents.processes/web/ProcessHeader.tsx +157 -0
- package/plugins/ragents.processes/web/index.tsx +23 -0
- package/plugins/ragents.processes/web/processes.ts +75 -0
- package/plugins/ragents.product/model-settings-contract.ts +10 -0
- package/plugins/ragents.product/preamble.hbs +9 -0
- package/plugins/ragents.product/server/config.ts +73 -0
- package/plugins/ragents.product/server/index.ts +117 -0
- package/plugins/ragents.product/server/relay.ts +118 -0
- package/plugins/ragents.product/server/runtime.ts +30 -0
- package/plugins/ragents.product/web/ModelControl.tsx +81 -0
- package/plugins/ragents.product/web/ProductModelSettings.tsx +131 -0
- package/plugins/ragents.product/web/SystemPromptControl.tsx +136 -0
- package/plugins/ragents.product/web/index.tsx +29 -0
- package/plugins/ragents.product/web/model-settings.ts +39 -0
- package/plugins/ragents.product/web/start-options.tsx +12 -0
- package/plugins/ragents.profile-distribution/contract.ts +38 -0
- package/plugins/ragents.profile-distribution/server/archive.ts +159 -0
- package/plugins/ragents.profile-distribution/server/config.ts +27 -0
- package/plugins/ragents.profile-distribution/server/index.ts +93 -0
- package/plugins/ragents.profile-distribution/server/web.ts +48 -0
- package/plugins/ragents.reference/examples.ts +33 -0
- package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +27 -0
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +10 -0
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +80 -0
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +82 -0
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +154 -0
- package/plugins/ragents.reference/run-scripts/balcony-wizard/package.json +9 -0
- package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +32 -0
- package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +59 -0
- package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +14 -0
- package/plugins/ragents.reference/run-scripts/conversation-circle/package.json +9 -0
- package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +87 -0
- package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +26 -0
- package/plugins/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +32 -0
- package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +24 -0
- package/plugins/ragents.reference/run-scripts/learning-afternoon/package.json +10 -0
- package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -0
- package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +5 -0
- package/plugins/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -0
- package/plugins/ragents.reference/run-scripts/learning-afternoon/src/client.tsx +27 -0
- package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +127 -0
- package/plugins/ragents.reference/run-scripts/learning-afternoon/src/state.ts +38 -0
- package/plugins/ragents.reference/run-scripts/learning-afternoon/src/view.tsx +42 -0
- package/plugins/ragents.reference/run-scripts/learning-afternoon/src/workflow.ts +38 -0
- package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +223 -0
- package/plugins/ragents.reference/run-scripts/moderated-round/RUN.md +12 -0
- package/plugins/ragents.reference/run-scripts/moderated-round/package.json +9 -0
- package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +60 -0
- package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +26 -0
- package/plugins/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +24 -0
- package/plugins/ragents.reference/run-scripts/shared-actor-list/RUN.md +18 -0
- package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +16 -0
- package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/client.tsx +39 -0
- package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +15 -0
- package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/server.ts +14 -0
- package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +13 -0
- package/plugins/ragents.reference/run-scripts/shared-actor-list/package.json +9 -0
- package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +65 -0
- package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +26 -0
- package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +42 -0
- package/plugins/ragents.reference/run-scripts/word-game/RUN.md +25 -0
- package/plugins/ragents.reference/run-scripts/word-game/package.json +11 -0
- package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +27 -0
- package/plugins/ragents.reference/run-scripts/word-game/src/contract.ts +23 -0
- package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +106 -0
- package/plugins/ragents.reference/run-scripts/word-game/src/state.ts +22 -0
- package/plugins/ragents.reference/run-scripts/word-game/src/view.tsx +54 -0
- package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +253 -0
- package/plugins/ragents.reference/server/index.ts +12 -0
- package/plugins/ragents.reference/skills/100-shared-actor-list/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/110-all-card-slots/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/120-canvas-conversation-circle/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/130-canvas-pipeline-with-approval/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/140-canvas-team-tree-and-topic-grid/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/150-editorial-workbench/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/170-photo-collection/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/180-decision-workbench/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/190-review-queue/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/20-circle-of-four/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/210-moderator-handover/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/220-actor-approval-list/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/230-shared-state-views/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/35-actor-input-fifo/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/40-subscription-matrix/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/50-subscription-removal/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/70-headless-counter/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/75-lsp-demo/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/80-actor-text-analysis/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +12 -0
- package/plugins/ragents.reference/skills/decision-brief/SKILL.md +33 -0
- package/plugins/ragents.reference/skills/learning-sprint/SKILL.md +33 -0
- package/plugins/ragents.reference/walkthroughs.ts +219 -0
- package/plugins/ragents.reference/web/StartGuides.tsx +89 -0
- package/plugins/ragents.reference/web/index.tsx +10 -0
- package/plugins/ragents.todo/contract.ts +60 -0
- package/plugins/ragents.todo/server/index.ts +10 -0
- package/plugins/ragents.todo/server/todo-tool.ts +70 -0
- package/plugins/ragents.todo/server/tool-contributor.ts +9 -0
- package/plugins/ragents.todo/web/TodoSection.tsx +47 -0
- package/plugins/ragents.todo/web/index.ts +12 -0
- package/plugins/ragents.transcript/server/index.ts +20 -0
- package/plugins/ragents.transcript/server/transcript.ts +78 -0
- package/plugins/ragents.watch/contract.ts +48 -0
- package/plugins/ragents.watch/server/condition.ts +56 -0
- package/plugins/ragents.watch/server/contract.ts +4 -0
- package/plugins/ragents.watch/server/functions.ts +62 -0
- package/plugins/ragents.watch/server/index.ts +39 -0
- package/plugins/ragents.watch/server/observation.ts +69 -0
- package/plugins/ragents.watch/server/service.ts +294 -0
- package/plugins/ragents.workspace/client/transport.ts +13 -0
- package/plugins/ragents.workspace/client/workspace-client.ts +247 -0
- package/plugins/ragents.workspace/contract.ts +182 -0
- package/plugins/ragents.workspace/prompt.hbs +14 -0
- package/plugins/ragents.workspace/server/binding.ts +92 -0
- package/plugins/ragents.workspace/server/browse-route.ts +134 -0
- package/plugins/ragents.workspace/server/clients.ts +161 -0
- package/plugins/ragents.workspace/server/index.ts +91 -0
- package/plugins/ragents.workspace/server/runtime.ts +170 -0
- package/plugins/ragents.workspace/web/FileBrowser.tsx +271 -0
- package/plugins/ragents.workspace/web/WorkspaceBinding.tsx +216 -0
- package/plugins/ragents.workspace/web/api.ts +8 -0
- package/plugins/ragents.workspace/web/file-icons.tsx +94 -0
- package/plugins/ragents.workspace/web/index.tsx +37 -0
- package/ragents.config.core.ts +65 -0
- package/ragents.config.developer.ts +46 -0
- package/scripts/agent/agent-cli.ts +461 -0
- package/scripts/agent/journal.ts +125 -0
- package/scripts/package/build-package.ts +249 -0
- package/scripts/package/host-links.d.mts +1 -0
- package/scripts/package/host-links.mjs +39 -0
- package/scripts/package/publish-package.ts +129 -0
- package/scripts/package/ragents.mjs +59 -0
- package/scripts/provision/run-provision.ts +72 -0
- package/scripts/remote/connect.ts +265 -0
- package/scripts/remote/start.ts +91 -0
- package/scripts/workspace-client/run-workspace-client.ts +112 -0
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { Alert, AlertDescription, Badge, Button, Empty, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Spinner } from "@aicontainer/web/ui";
|
|
2
|
+
import { useEffect, useState, type ComponentType } from "react";
|
|
3
|
+
import type {
|
|
4
|
+
LanguageServerSeverity,
|
|
5
|
+
LanguageServerSnapshot,
|
|
6
|
+
} from "@aicontainer/server/plugin-support/language-server/contract";
|
|
7
|
+
import {
|
|
8
|
+
type WebPlugin,
|
|
9
|
+
type WebPluginDescriptor,
|
|
10
|
+
type WorkspaceTabContext,
|
|
11
|
+
} from "@aicontainer/web/PluginRegistry";
|
|
12
|
+
import { fetchLanguageServerSnapshot } from "./api";
|
|
13
|
+
|
|
14
|
+
const POLL_MS = 5000;
|
|
15
|
+
const BADGE_POLL_MS = 15000;
|
|
16
|
+
|
|
17
|
+
interface TabSettings {
|
|
18
|
+
label: string;
|
|
19
|
+
openTool: string;
|
|
20
|
+
pluginId: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const severityLabels: Readonly<Record<LanguageServerSeverity, string>> = {
|
|
24
|
+
error: "Fehler",
|
|
25
|
+
warning: "Warnung",
|
|
26
|
+
information: "Hinweis",
|
|
27
|
+
hint: "Tipp",
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const textFrom = (config: Readonly<Record<string, unknown>>, key: string, pluginId: string): string => {
|
|
31
|
+
const value = config[key];
|
|
32
|
+
if (typeof value !== "string" || !value) throw new Error(`Plugin-Konfiguration für ${pluginId} enthält kein ${key}`);
|
|
33
|
+
return value;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const stateLabel = (snapshot: LanguageServerSnapshot | undefined): string => {
|
|
37
|
+
if (!snapshot) return "wird geladen";
|
|
38
|
+
if (snapshot.state === "closed") return "nicht gestartet";
|
|
39
|
+
if (snapshot.state === "opening") return "wird geladen";
|
|
40
|
+
if (snapshot.state === "failed") return "fehlgeschlagen";
|
|
41
|
+
if (snapshot.state === "suspended") return "nach Leerlauf beendet";
|
|
42
|
+
return snapshot.summary ?? "bereit";
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const countLabel = (count: number, singular: string, plural: string): string =>
|
|
46
|
+
`${count} ${count === 1 ? singular : plural}`;
|
|
47
|
+
|
|
48
|
+
const compactEmpty = "h-auto min-h-30 flex-none";
|
|
49
|
+
const severityClass = "text-[0.64rem] uppercase tracking-[0.04em]"
|
|
50
|
+
+ " in-data-[severity=error]:text-destructive in-data-[severity=warning]:text-warning"
|
|
51
|
+
+ " in-data-[severity=information]:text-primary in-data-[severity=hint]:text-primary";
|
|
52
|
+
|
|
53
|
+
function IconDiagnostics() {
|
|
54
|
+
return (
|
|
55
|
+
<svg aria-hidden fill="none" height="15" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.7" viewBox="0 0 24 24" width="15">
|
|
56
|
+
<path d="M9 4 4 12l5 8M15 4l5 8-5 8" />
|
|
57
|
+
<path d="M12 9v4M12 16v.5" />
|
|
58
|
+
</svg>
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function IconRefresh({ className }: { className?: string }) {
|
|
63
|
+
return (
|
|
64
|
+
<svg aria-hidden className={className} fill="none" height="15" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.8" viewBox="0 0 24 24" width="15">
|
|
65
|
+
<path d="M20 7v5h-5M4 17v-5h5" />
|
|
66
|
+
<path d="M6.1 9a7 7 0 0 1 11.7-2L20 9M4 15l2.2 2A7 7 0 0 0 18 15" />
|
|
67
|
+
</svg>
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const useSnapshot = (pluginId: string, runId: string, active: boolean, pollMs: number = POLL_MS) => {
|
|
72
|
+
const [snapshot, setSnapshot] = useState<LanguageServerSnapshot>();
|
|
73
|
+
const [error, setError] = useState<string>();
|
|
74
|
+
const [pending, setPending] = useState(false);
|
|
75
|
+
const [refreshKey, setRefreshKey] = useState(0);
|
|
76
|
+
|
|
77
|
+
useEffect(() => {
|
|
78
|
+
if (!active) return;
|
|
79
|
+
let disposed = false;
|
|
80
|
+
let timer: number | undefined;
|
|
81
|
+
|
|
82
|
+
const poll = async () => {
|
|
83
|
+
setPending(true);
|
|
84
|
+
try {
|
|
85
|
+
const value = await fetchLanguageServerSnapshot(pluginId, runId);
|
|
86
|
+
if (disposed) return;
|
|
87
|
+
setSnapshot(value);
|
|
88
|
+
setError(undefined);
|
|
89
|
+
} catch (caught) {
|
|
90
|
+
if (!disposed) setError(caught instanceof Error ? caught.message : String(caught));
|
|
91
|
+
} finally {
|
|
92
|
+
if (!disposed) {
|
|
93
|
+
setPending(false);
|
|
94
|
+
timer = window.setTimeout(() => void poll(), pollMs);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
void poll();
|
|
100
|
+
return () => {
|
|
101
|
+
disposed = true;
|
|
102
|
+
if (timer !== undefined) window.clearTimeout(timer);
|
|
103
|
+
};
|
|
104
|
+
}, [active, pluginId, pollMs, refreshKey, runId]);
|
|
105
|
+
|
|
106
|
+
return { snapshot, error, pending, refresh: () => setRefreshKey((value) => value + 1) };
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
const panelFor = (settings: TabSettings) => {
|
|
110
|
+
function LanguageServerPanel({ active, session }: WorkspaceTabContext) {
|
|
111
|
+
const { snapshot, error, pending, refresh } = useSnapshot(settings.pluginId, session.session.id, active);
|
|
112
|
+
return <LanguageServerPanelView settings={settings} snapshot={snapshot} error={error} pending={pending} onRefresh={refresh} />;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return LanguageServerPanel;
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
export function LanguageServerPanelView({ settings, snapshot, error, pending, onRefresh }: {
|
|
119
|
+
settings: Pick<TabSettings, "label" | "openTool">;
|
|
120
|
+
snapshot?: LanguageServerSnapshot;
|
|
121
|
+
error?: string;
|
|
122
|
+
pending: boolean;
|
|
123
|
+
onRefresh: () => void;
|
|
124
|
+
}) {
|
|
125
|
+
const diagnosticsAvailable = snapshot?.state === "ready" || snapshot?.state === "suspended";
|
|
126
|
+
const files = diagnosticsAvailable ? snapshot.files : [];
|
|
127
|
+
const rows = files.flatMap((file) => file.diagnostics.map((entry) => ({ file: file.path, entry })));
|
|
128
|
+
const errors = rows.filter((row) => row.entry.severity === "error").length;
|
|
129
|
+
const warnings = rows.filter((row) => row.entry.severity === "warning").length;
|
|
130
|
+
|
|
131
|
+
return (
|
|
132
|
+
<div className="flex h-full min-h-0 flex-col">
|
|
133
|
+
<header className="flex items-center gap-2 px-2.5 py-2">
|
|
134
|
+
<div className="flex min-w-0 flex-1 flex-col gap-0.5">
|
|
135
|
+
<span className="text-[0.8rem] font-medium text-foreground">{settings.label}</span>
|
|
136
|
+
<span className="text-xs text-muted-foreground">{stateLabel(snapshot)}</span>
|
|
137
|
+
</div>
|
|
138
|
+
<Button aria-label="Diagnosen aktualisieren" onClick={onRefresh} size="icon" title="Aktualisieren" variant="ghost">
|
|
139
|
+
<IconRefresh className={pending ? "animate-spin" : undefined} />
|
|
140
|
+
</Button>
|
|
141
|
+
</header>
|
|
142
|
+
{error && <Alert variant="destructive"><AlertDescription>{error}</AlertDescription></Alert>}
|
|
143
|
+
{snapshot?.root && <div className="overflow-hidden text-ellipsis whitespace-nowrap px-2.5 pb-2 font-mono text-[0.66rem] text-muted-foreground" title={snapshot.root}>{snapshot.root}</div>}
|
|
144
|
+
{snapshot?.state === "opening" && (
|
|
145
|
+
<Empty className={compactEmpty} role="status">
|
|
146
|
+
<EmptyHeader>
|
|
147
|
+
<EmptyMedia><Spinner aria-label="Wird geladen" /></EmptyMedia>
|
|
148
|
+
<EmptyTitle>Sprachserver wird geladen</EmptyTitle>
|
|
149
|
+
<EmptyDescription>{snapshot.summary || "Die Initialisierung läuft."}</EmptyDescription>
|
|
150
|
+
</EmptyHeader>
|
|
151
|
+
</Empty>
|
|
152
|
+
)}
|
|
153
|
+
{snapshot?.state === "failed" && (
|
|
154
|
+
<Empty className={`${compactEmpty} text-destructive`} role="alert">
|
|
155
|
+
<EmptyHeader>
|
|
156
|
+
<EmptyTitle>Sprachserver nicht verfügbar</EmptyTitle>
|
|
157
|
+
<EmptyDescription className="whitespace-pre-wrap text-destructive [overflow-wrap:anywhere]">{snapshot.summary || "Beim Laden ist ein Fehler aufgetreten."}</EmptyDescription>
|
|
158
|
+
</EmptyHeader>
|
|
159
|
+
</Empty>
|
|
160
|
+
)}
|
|
161
|
+
{snapshot?.state === "closed" && (
|
|
162
|
+
<Empty>
|
|
163
|
+
<EmptyHeader>
|
|
164
|
+
<EmptyMedia><IconDiagnostics /></EmptyMedia>
|
|
165
|
+
<EmptyTitle>Kein Sprachserver</EmptyTitle>
|
|
166
|
+
<EmptyDescription>{`${settings.label}-Sprachserver ist nicht gestartet - ein Agent startet ihn mit ${settings.openTool}.`}</EmptyDescription>
|
|
167
|
+
</EmptyHeader>
|
|
168
|
+
</Empty>
|
|
169
|
+
)}
|
|
170
|
+
{diagnosticsAvailable && rows.length === 0 && (
|
|
171
|
+
<Empty className={compactEmpty}>
|
|
172
|
+
<EmptyHeader>
|
|
173
|
+
<EmptyTitle>Keine Diagnosen</EmptyTitle>
|
|
174
|
+
<EmptyDescription>{files.length === 0 ? "Bisher wurde keine Datei geprüft." : "Alle geprüften Dateien sind fehlerfrei."}</EmptyDescription>
|
|
175
|
+
</EmptyHeader>
|
|
176
|
+
</Empty>
|
|
177
|
+
)}
|
|
178
|
+
{rows.length > 0 && (
|
|
179
|
+
<>
|
|
180
|
+
<div className="border-y border-border-soft px-2.5 py-1.5 text-xs text-muted-foreground">
|
|
181
|
+
{`${countLabel(errors, "Fehler", "Fehler")}, ${countLabel(warnings, "Warnung", "Warnungen")} in ${countLabel(files.length, "Datei", "Dateien")}`}
|
|
182
|
+
</div>
|
|
183
|
+
<div className="min-h-0 flex-1 overflow-y-auto px-1.5 pt-1 pb-2.5">
|
|
184
|
+
{rows.map((row, index) => (
|
|
185
|
+
<div className="grid grid-cols-[minmax(0,1fr)_auto] gap-x-2 gap-y-0.5 border-b border-border-soft px-2 py-1.5 text-[0.7rem]"
|
|
186
|
+
data-severity={row.entry.severity} key={`${row.file}:${row.entry.line}:${row.entry.character}:${index}`}>
|
|
187
|
+
<span className="overflow-hidden text-ellipsis whitespace-nowrap font-mono text-muted-foreground">{`${row.file}:${row.entry.line}`}</span>
|
|
188
|
+
<span className={severityClass}>
|
|
189
|
+
{row.entry.code ? `${severityLabels[row.entry.severity]} ${row.entry.code}` : severityLabels[row.entry.severity]}
|
|
190
|
+
</span>
|
|
191
|
+
<span className="col-span-full leading-[1.4] text-foreground">{row.entry.message}</span>
|
|
192
|
+
</div>
|
|
193
|
+
))}
|
|
194
|
+
</div>
|
|
195
|
+
</>
|
|
196
|
+
)}
|
|
197
|
+
</div>
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
const badgeFor = (settings: TabSettings) => {
|
|
202
|
+
function LanguageServerBadge({ session }: WorkspaceTabContext) {
|
|
203
|
+
const { snapshot } = useSnapshot(settings.pluginId, session.session.id, true, BADGE_POLL_MS);
|
|
204
|
+
const errors = (snapshot?.state === "ready" || snapshot?.state === "suspended" ? snapshot.files : [])
|
|
205
|
+
.flatMap((file) => file.diagnostics)
|
|
206
|
+
.filter((entry) => entry.severity === "error").length;
|
|
207
|
+
return errors > 0 ? <Badge variant="secondary">{errors}</Badge> : null;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
return LanguageServerBadge;
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
const configuredPlugin = (descriptor: WebPluginDescriptor, settings: TabSettings, Icon: ComponentType): WebPlugin => ({
|
|
214
|
+
...descriptor,
|
|
215
|
+
workspaceTabs: [{
|
|
216
|
+
readRight: `${descriptor.id}.read`,
|
|
217
|
+
id: `${descriptor.id}.diagnostics`,
|
|
218
|
+
label: settings.label,
|
|
219
|
+
order: 300,
|
|
220
|
+
Icon,
|
|
221
|
+
Panel: panelFor(settings),
|
|
222
|
+
Badge: badgeFor(settings),
|
|
223
|
+
}],
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
export const languageServerWebPlugin = (pluginId: string, Icon: ComponentType = IconDiagnostics): WebPlugin => {
|
|
227
|
+
const descriptor: WebPluginDescriptor = { id: pluginId };
|
|
228
|
+
return {
|
|
229
|
+
...descriptor,
|
|
230
|
+
activate: (config) => configuredPlugin(descriptor, {
|
|
231
|
+
label: textFrom(config, "label", pluginId),
|
|
232
|
+
openTool: textFrom(config, "openTool", pluginId),
|
|
233
|
+
pluginId,
|
|
234
|
+
}, Icon),
|
|
235
|
+
};
|
|
236
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { typescriptAdapter } from "@aicontainer/workspace-executor";
|
|
2
|
+
import { createLanguageServerPlugin } from "@aicontainer/server/plugin-support/language-server/plugin.js";
|
|
3
|
+
import type { PluginModule } from "@aicontainer/server/plugin-support/plugin-module.js";
|
|
4
|
+
|
|
5
|
+
export const plugin: PluginModule = {
|
|
6
|
+
create: () => createLanguageServerPlugin({ id: "ragents.lsp-typescript", adapter: typescriptAdapter }),
|
|
7
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { languageServerWebPlugin } from "@aicontainer/plugins/ragents.lsp-roslyn/web/language-server-plugin";
|
|
2
|
+
|
|
3
|
+
export const webPlugin = languageServerWebPlugin("ragents.lsp-typescript", LanguageIcon);
|
|
4
|
+
|
|
5
|
+
function LanguageIcon() {
|
|
6
|
+
return <span aria-hidden="true" className="font-mono text-[12px] font-bold">TS</span>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { declaredEnvironment } from "@aicontainer/server/plugin-support/plugin-config.js";
|
|
2
|
+
|
|
3
|
+
export const modelRelayConfigDescriptors = [
|
|
4
|
+
{ key: "RELAY_MODELS", source: "environment" },
|
|
5
|
+
] as const;
|
|
6
|
+
|
|
7
|
+
const env = declaredEnvironment(modelRelayConfigDescriptors);
|
|
8
|
+
|
|
9
|
+
export interface RelayAlias {
|
|
10
|
+
readonly alias: string;
|
|
11
|
+
readonly upstream: string;
|
|
12
|
+
readonly model: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const ALIAS = /^[a-z0-9][a-z0-9._-]{0,63}$/;
|
|
16
|
+
|
|
17
|
+
/** RELAY_MODELS: eine Liste "alias=anbieter/modell"; der Alias ist der einzige Name, den ein Client sieht. */
|
|
18
|
+
export const parseRelayAliases = (entries: readonly string[]): readonly RelayAlias[] => {
|
|
19
|
+
if (entries.length === 0) throw new Error("RELAY_MODELS nennt kein Modell; erwartet wird eine Liste \"alias=anbieter/modell\"");
|
|
20
|
+
const aliases = entries.map((entry) => {
|
|
21
|
+
const separator = entry.indexOf("=");
|
|
22
|
+
const alias = separator > 0 ? entry.slice(0, separator).trim() : "";
|
|
23
|
+
const target = separator > 0 ? entry.slice(separator + 1).trim() : "";
|
|
24
|
+
const slash = target.indexOf("/");
|
|
25
|
+
if (!ALIAS.test(alias) || slash <= 0 || slash === target.length - 1) {
|
|
26
|
+
throw new Error(`RELAY_MODELS: "${entry}" hat nicht das Format "alias=anbieter/modell"`);
|
|
27
|
+
}
|
|
28
|
+
return { alias, upstream: target.slice(0, slash), model: target.slice(slash + 1) };
|
|
29
|
+
});
|
|
30
|
+
const duplicate = aliases.find((entry, index) => aliases.findIndex((other) => other.alias === entry.alias) !== index);
|
|
31
|
+
if (duplicate) throw new Error(`RELAY_MODELS nennt den Alias ${duplicate.alias} mehrfach`);
|
|
32
|
+
return aliases;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export const modelRelayConfig = Object.freeze({
|
|
36
|
+
aliases: () => parseRelayAliases(env.list("RELAY_MODELS")),
|
|
37
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { RAgentsPlugin } from "@aicontainer/ragents";
|
|
2
|
+
import { modelUpstreamsToken } from "@aicontainer/server/plugin-support/model-upstreams.js";
|
|
3
|
+
import type { PluginModule } from "@aicontainer/server/plugin-support/plugin-module.js";
|
|
4
|
+
import { Protocol } from "@aicontainer/server/protocol.js";
|
|
5
|
+
import { modelRelayConfig, modelRelayConfigDescriptors } from "./config.js";
|
|
6
|
+
import { createRelayRoutes, resolveAliases, type ResolvedAlias } from "./relay.js";
|
|
7
|
+
|
|
8
|
+
const modelRelayPlugin: RAgentsPlugin = {
|
|
9
|
+
manifest: { id: "ragents.model-relay" },
|
|
10
|
+
register: (host) => {
|
|
11
|
+
host.config(...modelRelayConfigDescriptors);
|
|
12
|
+
const upstreams = host.service(modelUpstreamsToken);
|
|
13
|
+
let resolved: readonly ResolvedAlias[] | undefined;
|
|
14
|
+
const aliases = (): readonly ResolvedAlias[] => resolved ??= resolveAliases(modelRelayConfig.aliases(), upstreams());
|
|
15
|
+
const log = new Protocol(host.storage.root("relay.log"));
|
|
16
|
+
host.lifecycle({
|
|
17
|
+
id: "ragents.model-relay",
|
|
18
|
+
initialize: () => {
|
|
19
|
+
const list = aliases();
|
|
20
|
+
log.write(`=== Start: ${list.map((entry) => `${entry.alias}=${entry.upstream.id}/${entry.model.id}`).join(", ")} ===`);
|
|
21
|
+
console.log(`Modell-Relay: ${list.length} Aliasse unter /relay/v1 (${list.map((entry) => entry.alias).join(", ")})`);
|
|
22
|
+
},
|
|
23
|
+
shutdown: () => log.close(),
|
|
24
|
+
});
|
|
25
|
+
host.http(...createRelayRoutes({ aliases, log: (line) => log.write(line) }));
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const plugin: PluginModule = {
|
|
30
|
+
create: () => modelRelayPlugin,
|
|
31
|
+
};
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import type { IncomingMessage } from "node:http";
|
|
2
|
+
import { Readable } from "node:stream";
|
|
3
|
+
import { pipeline } from "node:stream/promises";
|
|
4
|
+
import type { ReadableStream } from "node:stream/web";
|
|
5
|
+
import type { Api, Model } from "@aicontainer/ai";
|
|
6
|
+
import type { HttpRouteContribution } from "@aicontainer/ragents";
|
|
7
|
+
import { PayloadTooLargeError, readBody, writeJson } from "@aicontainer/server/plugin-support/http.js";
|
|
8
|
+
import type { ModelUpstream } from "@aicontainer/server/plugin-support/model-upstreams.js";
|
|
9
|
+
import type { RelayAlias } from "./config.js";
|
|
10
|
+
|
|
11
|
+
export const RELAY_PATH_PREFIX = "/relay/v1";
|
|
12
|
+
export const RELAY_RIGHT = "models.use";
|
|
13
|
+
|
|
14
|
+
const MAX_REQUEST_BYTES = 64 * 1024 * 1024;
|
|
15
|
+
const MAX_SCAN_BYTES = 8 * 1024 * 1024;
|
|
16
|
+
const DROPPED_HEADERS = new Set(["host", "authorization", "cookie", "content-length", "connection", "transfer-encoding", "accept-encoding", "expect"]);
|
|
17
|
+
|
|
18
|
+
export interface ResolvedAlias {
|
|
19
|
+
readonly alias: string;
|
|
20
|
+
readonly upstream: ModelUpstream;
|
|
21
|
+
readonly model: Model<Api>;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Jeder Alias muss auf einen konfigurierten Anbieter und ein Modell aus dessen Katalog zeigen. */
|
|
25
|
+
export const resolveAliases = (aliases: readonly RelayAlias[], upstreams: readonly ModelUpstream[]): readonly ResolvedAlias[] =>
|
|
26
|
+
aliases.map((entry) => {
|
|
27
|
+
const upstream = upstreams.find((candidate) => candidate.id === entry.upstream);
|
|
28
|
+
if (!upstream) {
|
|
29
|
+
const available = upstreams.map((candidate) => candidate.id).join(", ") || "keiner";
|
|
30
|
+
throw new Error(`RELAY_MODELS: der Anbieter ${entry.upstream} hinter ${entry.alias} ist auf diesem Server nicht konfiguriert (verfügbar: ${available})`);
|
|
31
|
+
}
|
|
32
|
+
const model = upstream.models.find((candidate) => candidate.id === entry.model);
|
|
33
|
+
if (!model) throw new Error(`RELAY_MODELS: das Modell ${entry.model} hinter ${entry.alias} fehlt im Katalog von ${entry.upstream}`);
|
|
34
|
+
return { alias: entry.alias, upstream, model };
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
/** Der Katalogeintrag nennt nur, was der Verbraucher für den Draht braucht; Name, Anbieter und Kosten bleiben beim Server. */
|
|
38
|
+
export const catalogEntryOf = (resolved: ResolvedAlias) => ({
|
|
39
|
+
id: resolved.alias,
|
|
40
|
+
object: "model" as const,
|
|
41
|
+
owned_by: "relay",
|
|
42
|
+
catalog: {
|
|
43
|
+
reasoning: resolved.model.reasoning,
|
|
44
|
+
...(resolved.model.thinkingLevelMap ? { thinkingLevelMap: resolved.model.thinkingLevelMap } : {}),
|
|
45
|
+
input: [...resolved.model.input],
|
|
46
|
+
contextWindow: resolved.model.contextWindow,
|
|
47
|
+
maxTokens: resolved.model.maxTokens,
|
|
48
|
+
...(resolved.model.compat ? { compat: resolved.model.compat } : {}),
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
interface Usage {
|
|
53
|
+
readonly prompt: number | undefined;
|
|
54
|
+
readonly completion: number | undefined;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** Ersetzt im durchgereichten Strom den echten Modellnamen durch den Alias, entfernt den Anbieter und merkt sich den letzten usage-Block. */
|
|
58
|
+
const responseRewriter = (alias: string) => {
|
|
59
|
+
const decoder = new TextDecoder();
|
|
60
|
+
let pending = "";
|
|
61
|
+
let usage: Usage | undefined;
|
|
62
|
+
let overflow = false;
|
|
63
|
+
const rewrite = (text: string): string => {
|
|
64
|
+
let parsed: unknown;
|
|
65
|
+
try { parsed = JSON.parse(text); }
|
|
66
|
+
catch { return text; }
|
|
67
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return text;
|
|
68
|
+
const body = parsed as { model?: unknown; provider?: unknown; usage?: { prompt_tokens?: unknown; completion_tokens?: unknown } };
|
|
69
|
+
if (body.usage && typeof body.usage === "object") {
|
|
70
|
+
const number = (value: unknown) => typeof value === "number" ? value : undefined;
|
|
71
|
+
usage = { prompt: number(body.usage.prompt_tokens), completion: number(body.usage.completion_tokens) };
|
|
72
|
+
}
|
|
73
|
+
if (typeof body.model !== "string" && body.provider === undefined) return text;
|
|
74
|
+
const rest = Object.fromEntries(Object.entries(body).filter(([key]) => key !== "provider"));
|
|
75
|
+
return JSON.stringify(typeof body.model === "string" ? { ...rest, model: alias } : rest);
|
|
76
|
+
};
|
|
77
|
+
const line = (text: string): string => text.startsWith("data: ") ? `data: ${rewrite(text.slice(6))}` : text;
|
|
78
|
+
return {
|
|
79
|
+
feed: (chunk: Buffer): string => {
|
|
80
|
+
const text = decoder.decode(chunk, { stream: true });
|
|
81
|
+
if (overflow) return text;
|
|
82
|
+
pending += text;
|
|
83
|
+
const lines = pending.split("\n");
|
|
84
|
+
pending = lines.pop() ?? "";
|
|
85
|
+
const forwarded = lines.map((entry) => `${line(entry)}\n`).join("");
|
|
86
|
+
if (pending.length <= MAX_SCAN_BYTES) return forwarded;
|
|
87
|
+
overflow = true;
|
|
88
|
+
const remainder = pending;
|
|
89
|
+
pending = "";
|
|
90
|
+
return `${forwarded}${remainder}`;
|
|
91
|
+
},
|
|
92
|
+
finish: (): string => {
|
|
93
|
+
const rest = overflow || !pending.trim() ? pending : pending.startsWith("data: ") ? line(pending) : rewrite(pending);
|
|
94
|
+
pending = "";
|
|
95
|
+
return rest;
|
|
96
|
+
},
|
|
97
|
+
usage: (): Usage | undefined => usage,
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
const openAiError = (message: string, type: string) => ({ error: { message, type } });
|
|
102
|
+
|
|
103
|
+
const forwardedHeaders = (request: IncomingMessage, apiKey: string): Record<string, string> => {
|
|
104
|
+
const headers: Record<string, string> = {};
|
|
105
|
+
for (const [name, value] of Object.entries(request.headers)) {
|
|
106
|
+
if (DROPPED_HEADERS.has(name) || value === undefined) continue;
|
|
107
|
+
headers[name] = Array.isArray(value) ? value.join(", ") : value;
|
|
108
|
+
}
|
|
109
|
+
headers["content-type"] = "application/json";
|
|
110
|
+
headers.authorization = `Bearer ${apiKey}`;
|
|
111
|
+
return headers;
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
export interface RelayRouteOptions {
|
|
115
|
+
aliases: () => readonly ResolvedAlias[];
|
|
116
|
+
log: (line: string) => void;
|
|
117
|
+
fetch?: typeof fetch;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const modelsPath = `${RELAY_PATH_PREFIX}/models`;
|
|
121
|
+
const completionsPath = `${RELAY_PATH_PREFIX}/chat/completions`;
|
|
122
|
+
|
|
123
|
+
export const createRelayRoutes = (options: RelayRouteOptions): HttpRouteContribution[] => {
|
|
124
|
+
const fetchImpl = options.fetch ?? fetch;
|
|
125
|
+
return [
|
|
126
|
+
{
|
|
127
|
+
id: "ragents.model-relay.models",
|
|
128
|
+
isApiPath: (pathname) => pathname.startsWith(`${RELAY_PATH_PREFIX}/`),
|
|
129
|
+
matches: (request, url) => request.method === "GET" && url.pathname === modelsPath,
|
|
130
|
+
requiredRights: [RELAY_RIGHT],
|
|
131
|
+
handle: ({ response }) => {
|
|
132
|
+
writeJson(response, 200, { object: "list", data: options.aliases().map(catalogEntryOf) });
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
id: "ragents.model-relay.completions",
|
|
137
|
+
isApiPath: (pathname) => pathname.startsWith(`${RELAY_PATH_PREFIX}/`),
|
|
138
|
+
matches: (request, url) => request.method === "POST" && url.pathname === completionsPath,
|
|
139
|
+
requiredRights: [RELAY_RIGHT],
|
|
140
|
+
handle: async ({ request, response, access }) => {
|
|
141
|
+
const user = access.user?.id ?? "anonym";
|
|
142
|
+
let text: string;
|
|
143
|
+
try {
|
|
144
|
+
text = await readBody(request, MAX_REQUEST_BYTES);
|
|
145
|
+
} catch (error) {
|
|
146
|
+
if (!(error instanceof PayloadTooLargeError)) throw error;
|
|
147
|
+
writeJson(response, 413, openAiError(error.message, "invalid_request_error"));
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
let parsed: unknown;
|
|
151
|
+
try { parsed = JSON.parse(text); }
|
|
152
|
+
catch { parsed = undefined; }
|
|
153
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
154
|
+
writeJson(response, 400, openAiError("Der Anfragekörper ist kein JSON-Objekt", "invalid_request_error"));
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const alias = (parsed as { model?: unknown }).model;
|
|
158
|
+
if (typeof alias !== "string" || !alias) {
|
|
159
|
+
writeJson(response, 400, openAiError("Die Anfrage nennt kein Modell", "invalid_request_error"));
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
const resolved = options.aliases().find((candidate) => candidate.alias === alias);
|
|
163
|
+
if (!resolved) {
|
|
164
|
+
writeJson(response, 404, openAiError(`Das Modell ${alias} ist auf diesem Relay unbekannt`, "invalid_request_error"));
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
const controller = new AbortController();
|
|
168
|
+
response.once("close", () => controller.abort());
|
|
169
|
+
const target = `${resolved.upstream.baseUrl}/chat/completions`;
|
|
170
|
+
let upstream: Response;
|
|
171
|
+
try {
|
|
172
|
+
upstream = await fetchImpl(target, {
|
|
173
|
+
method: "POST",
|
|
174
|
+
headers: forwardedHeaders(request, resolved.upstream.apiKey),
|
|
175
|
+
body: JSON.stringify({ ...parsed, model: resolved.model.id }),
|
|
176
|
+
signal: controller.signal,
|
|
177
|
+
});
|
|
178
|
+
} catch (error) {
|
|
179
|
+
if (controller.signal.aborted) return;
|
|
180
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
181
|
+
options.log(`${user} ${alias} -> ${resolved.upstream.id}/${resolved.model.id}: nicht erreichbar (${reason})`);
|
|
182
|
+
writeJson(response, 502, openAiError(`Der Anbieter hinter ${alias} ist nicht erreichbar`, "server_error"));
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
response.writeHead(upstream.status, {
|
|
186
|
+
"Content-Type": upstream.headers.get("content-type") ?? "application/octet-stream",
|
|
187
|
+
"Cache-Control": "no-store",
|
|
188
|
+
});
|
|
189
|
+
const rewriter = responseRewriter(alias);
|
|
190
|
+
if (upstream.body) {
|
|
191
|
+
const source = Readable.fromWeb(upstream.body as ReadableStream<Uint8Array>);
|
|
192
|
+
try {
|
|
193
|
+
await pipeline(source, async function* (chunks: AsyncIterable<Buffer>) {
|
|
194
|
+
for await (const chunk of chunks) {
|
|
195
|
+
const forwarded = rewriter.feed(chunk);
|
|
196
|
+
if (forwarded) yield forwarded;
|
|
197
|
+
}
|
|
198
|
+
const rest = rewriter.finish();
|
|
199
|
+
if (rest) yield rest;
|
|
200
|
+
}, response);
|
|
201
|
+
} catch (error) {
|
|
202
|
+
if (!controller.signal.aborted) throw error;
|
|
203
|
+
}
|
|
204
|
+
} else {
|
|
205
|
+
response.end();
|
|
206
|
+
}
|
|
207
|
+
const usage = rewriter.usage();
|
|
208
|
+
const tokens = usage ? ` tokens in=${usage.prompt ?? "?"} out=${usage.completion ?? "?"}` : "";
|
|
209
|
+
options.log(`${user} ${alias} -> ${resolved.upstream.id}/${resolved.model.id}: ${upstream.status}${tokens}`);
|
|
210
|
+
},
|
|
211
|
+
},
|
|
212
|
+
];
|
|
213
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
## Designing the canvas
|
|
2
|
+
|
|
3
|
+
The canvas shows the personally visible actors and actor views of this run. Use
|
|
4
|
+
`context.functions.canvas_layout_replace` from TypeScript to arrange
|
|
5
|
+
existing participants and explain their relationships. Free canvas is the default; do not switch
|
|
6
|
+
to tiles unless the user requests them or the run setup explicitly specifies them. Read its exact input and result types with
|
|
7
|
+
`typescript_api` before constructing a layout; they define the supported entities,
|
|
8
|
+
groups, shapes, connections and size limits.
|
|
9
|
+
|
|
10
|
+
For a fixed, viewport-filling workspace set mode to "tiled" and supply root. A leaf is
|
|
11
|
+
{entity:"@helper"} or {entity:"app:@workspace/main"}. A split has direction "horizontal"
|
|
12
|
+
(left/right) or "vertical" (top/bottom), two positive weights and exactly two children.
|
|
13
|
+
Children can be split again. For "50:50, app left, chat right", use:
|
|
14
|
+
{mode:"tiled",root:{direction:"horizontal",weights:[1,1],children:[
|
|
15
|
+
{entity:"app:@workspace/main"},{entity:"@helper"}
|
|
16
|
+
]}}. Use [2,1] for two thirds and one third. Use an outer vertical split and an inner
|
|
17
|
+
horizontal split for one pane above two panes below. Resolve the user's actual actor and app
|
|
18
|
+
names before calling; the example names are not existing participants.
|
|
19
|
+
|
|
20
|
+
Tiled mode disables canvas pan, zoom and overview. Users with Actors access can remove panes
|
|
21
|
+
and drag actors/apps from the header or pane title onto docking targets. Split dividers remain
|
|
22
|
+
resizable without Actors access.
|
|
23
|
+
Personal user arrangements take precedence over program suggestions until the user resets them.
|
|
24
|
+
Do not repeatedly resend a layout to fight a personal override. Newly created participants stay
|
|
25
|
+
available in the header without changing existing tiles. A mode/root-only call preserves the free
|
|
26
|
+
canvas arrangement; {mode:"free"} restores it. A root-only call implies tiled mode; root:null
|
|
27
|
+
clears the tiles. Free-layout updates supply nodes and replace the explicit nodes, shapes and
|
|
28
|
+
lines together, so include everything that should remain there.
|
|
29
|
+
|
|
30
|
+
Activate actor programs before placing their views. Reference a view as `app:@handle/view-key`
|
|
31
|
+
or `app:program-name/view-key`, using the handle, program name and view key you chose. The server
|
|
32
|
+
resolves the actual view ID and rejects unknown views before storing the layout. Do not invent
|
|
33
|
+
or copy generated view IDs. The same references work in nodes and connection endpoints.
|
|
34
|
+
`actor_view_set_visibility` uses the same package/view or @handle/view names without the `app:` prefix.
|
|
35
|
+
|
|
36
|
+
Place the essentials first and update the layout when the participants or flow change. The host
|
|
37
|
+
adds unplaced visible participants and visible actor views automatically in free mode. Actors with their own
|
|
38
|
+
views start hidden; their views remain on the canvas and the Actors list opens their inspector.
|
|
39
|
+
A layout never overrides the user's personal actor visibility or connection choice. The user
|
|
40
|
+
participates through the chat and does not need a separate canvas node.
|
|
41
|
+
|
|
42
|
+
Choose arrangements by meaning: peers in a discussion, a sequence of work stages, a hierarchy or
|
|
43
|
+
a collection of independent items. Keep groups small enough to read, preserve a useful order and
|
|
44
|
+
add a frame only where a visible boundary helps. Leave space for expanded content and connection
|
|
45
|
+
labels instead of packing cards tightly together.
|
|
46
|
+
|
|
47
|
+
Connections should explain actual relationships. Give them short, meaningful labels and choose
|
|
48
|
+
direction and line style deliberately. The canvas does not infer the connections for you. Every
|
|
49
|
+
connection must join existing entities. Shapes can represent stages, decisions or topics that are
|
|
50
|
+
not actors; use them to explain the work without inventing additional participants.
|