@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,265 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { existsSync } from "node:fs";
|
|
4
|
+
import { mkdir, readdir, readFile, rename, rm, writeFile } from "node:fs/promises";
|
|
5
|
+
import { homedir } from "node:os";
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
import { fileURLToPath } from "node:url";
|
|
8
|
+
import { extract as extractTar } from "tar";
|
|
9
|
+
import { ragentsDataRoot } from "../../apps/server/src/data-directory.ts";
|
|
10
|
+
import { hostRoot, readHostPackage, readHostVersion } from "../../apps/server/src/host-version.ts";
|
|
11
|
+
import { RpcClient } from "../../apps/web/src/rpc/client.ts";
|
|
12
|
+
import { profileDistributionContracts, type ClientProfileDescription } from "../../plugins/ragents.profile-distribution/contract.ts";
|
|
13
|
+
|
|
14
|
+
const usage = (): string => `Verwendung: RAGENTS_TOKEN=<token> ragents connect <server-url> [--port <n>] [--clean] [--no-start]
|
|
15
|
+
Holt das Client-Profil des Servers samt gebautem Web in den lokalen Cache, prüft die Host-Version
|
|
16
|
+
gegen diesen Host und startet den lokalen Server mit dem Profil. --clean entfernt ältere Stände,
|
|
17
|
+
--no-start endet nach dem Holen und nennt Profildatei und Datenordner. Im Checkout heißt der
|
|
18
|
+
Befehl pnpm connect.`;
|
|
19
|
+
|
|
20
|
+
export interface ConnectOptions {
|
|
21
|
+
readonly serverUrl: string;
|
|
22
|
+
readonly token: string;
|
|
23
|
+
readonly dataRoot?: string;
|
|
24
|
+
/** Der Host, dessen Fassung zur verlangten Host-Version passen muss: Checkout oder Paket; Vorgabe ist dieser hier. */
|
|
25
|
+
readonly hostPath?: string;
|
|
26
|
+
readonly localVersion?: string;
|
|
27
|
+
readonly clean?: boolean;
|
|
28
|
+
readonly fetch?: typeof fetch;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface ConnectedProfile {
|
|
32
|
+
readonly description: ClientProfileDescription;
|
|
33
|
+
readonly profileFile: string;
|
|
34
|
+
readonly webDirectory: string;
|
|
35
|
+
readonly dataDirectory: string;
|
|
36
|
+
readonly cacheDirectory: string;
|
|
37
|
+
readonly downloaded: boolean;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** Der Stand, den ragents start ohne den Server wieder hochfährt. */
|
|
41
|
+
export interface CachedProfile {
|
|
42
|
+
readonly serverUrl: string;
|
|
43
|
+
readonly profile: string;
|
|
44
|
+
readonly version: string;
|
|
45
|
+
readonly hostVersion: string;
|
|
46
|
+
readonly profileFile: string;
|
|
47
|
+
readonly webDirectory: string;
|
|
48
|
+
readonly dataDirectory: string;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export const parseArguments = (argv: readonly string[]): { serverUrl: string; port: number | undefined; clean: boolean; start: boolean } => {
|
|
52
|
+
let serverUrl: string | undefined;
|
|
53
|
+
let port: number | undefined;
|
|
54
|
+
let clean = false;
|
|
55
|
+
let start = true;
|
|
56
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
57
|
+
const argument = argv[index]!;
|
|
58
|
+
if (argument === "--clean") { clean = true; continue; }
|
|
59
|
+
if (argument === "--no-start") { start = false; continue; }
|
|
60
|
+
if (argument === "--port") {
|
|
61
|
+
const value = Number(argv[index + 1]);
|
|
62
|
+
if (!Number.isInteger(value) || value < 0 || value > 65535) throw new Error(`--port braucht eine ganze Zahl von 0 bis 65535, nicht ${argv[index + 1]}`);
|
|
63
|
+
port = value;
|
|
64
|
+
index += 1;
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (argument.startsWith("-") || serverUrl) throw new Error(`Unbekanntes Argument: ${argument}\n${usage()}`);
|
|
68
|
+
serverUrl = argument;
|
|
69
|
+
}
|
|
70
|
+
if (!serverUrl) throw new Error(`Die Serveradresse fehlt.\n${usage()}`);
|
|
71
|
+
return { serverUrl, port, clean, start };
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
/** Ein Ordnername je Server: Hostname und Port, damit zwei Server nie denselben Cache teilen. */
|
|
75
|
+
export const serverFolderName = (serverUrl: string): string => {
|
|
76
|
+
const parsed = new URL(serverUrl);
|
|
77
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") throw new Error(`Die Serveradresse braucht http oder https: ${serverUrl}`);
|
|
78
|
+
const host = parsed.hostname.toLowerCase().replace(/[^a-z0-9.-]/g, "_");
|
|
79
|
+
return parsed.port ? `${host}-${parsed.port}` : host;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export const remoteLayout = (dataRoot: string, serverUrl: string, profile: string) => {
|
|
83
|
+
const base = path.join(dataRoot, "remote", serverFolderName(serverUrl), profile);
|
|
84
|
+
return { base, profiles: path.join(base, "profiles"), data: path.join(base, "data"), current: path.join(base, "current.json") };
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const describeProfile = async (options: ConnectOptions): Promise<ClientProfileDescription> => {
|
|
88
|
+
const baseUrl = options.serverUrl.replace(/\/+$/, "");
|
|
89
|
+
const fetchImpl = options.fetch ?? fetch;
|
|
90
|
+
const rpc = new RpcClient({
|
|
91
|
+
baseUrl,
|
|
92
|
+
fetch: (input, init) => fetchImpl(input, { ...init, headers: { ...init?.headers as Record<string, string> | undefined, authorization: `Bearer ${options.token}` } }),
|
|
93
|
+
});
|
|
94
|
+
try {
|
|
95
|
+
return await rpc.call(profileDistributionContracts.describe, {});
|
|
96
|
+
} catch (error) {
|
|
97
|
+
throw new Error(`Der Server ${baseUrl} liefert kein Client-Profil: ${error instanceof Error ? error.message : String(error)}`);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
const downloadArchive = async (options: ConnectOptions, description: ClientProfileDescription): Promise<Buffer> => {
|
|
102
|
+
const address = `${options.serverUrl.replace(/\/+$/, "")}${description.archivePath}`;
|
|
103
|
+
const response = await (options.fetch ?? fetch)(address, { headers: { authorization: `Bearer ${options.token}` } });
|
|
104
|
+
if (!response.ok) throw new Error(`Das Archiv ${address} kommt nicht an: ${response.status} ${(await response.text()).slice(0, 200)}`);
|
|
105
|
+
const archive = Buffer.from(await response.arrayBuffer());
|
|
106
|
+
const digest = createHash("sha256").update(archive).digest("hex");
|
|
107
|
+
if (digest !== description.version) throw new Error(`Das Archiv ${address} passt nicht zum angesagten Stand: erwartet ${description.version}, erhalten ${digest}`);
|
|
108
|
+
if (archive.byteLength !== description.size) throw new Error(`Das Archiv ${address} hat ${archive.byteLength} Byte, angesagt sind ${description.size}`);
|
|
109
|
+
return archive;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/** Profildatei und Archiv-Plugins sind ESM; ohne diese Marke liest Node sie im Cache als CommonJS. */
|
|
113
|
+
const markAsModule = async (directory: string): Promise<void> => {
|
|
114
|
+
const file = path.join(directory, "package.json");
|
|
115
|
+
if (!existsSync(file)) {
|
|
116
|
+
await writeFile(file, `${JSON.stringify({ private: true, type: "module" }, null, 2)}\n`);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const declared = (JSON.parse(await readFile(file, "utf8")) as { type?: unknown }).type;
|
|
120
|
+
if (declared !== "module") throw new Error(`Das Archiv bringt eine package.json mit type ${JSON.stringify(declared)}; RAgents-Profile sind ESM`);
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
/** Der Rat bei einer falschen Fassung hängt daran, woher der Host kommt: Paket oder Checkout. */
|
|
124
|
+
const versionMismatch = (hostPath: string, localVersion: string, description: ClientProfileDescription): Error => {
|
|
125
|
+
const packaged = readHostPackage(hostPath);
|
|
126
|
+
const advice = packaged
|
|
127
|
+
? `Hol die passende Fassung: npm install -g ${packaged.name}@${description.packageVersion} (installiert ist ${packaged.version}).`
|
|
128
|
+
: `Wechseln mit: git -C ${JSON.stringify(hostPath)} fetch && git -C ${JSON.stringify(hostPath)} checkout ${description.hostVersion}`;
|
|
129
|
+
return new Error(`Der Server verlangt den Host ${description.hostVersion}, ${packaged ? "das Paket" : "der Checkout"} ${hostPath} `
|
|
130
|
+
+ `steht auf ${localVersion}.\n${advice}`);
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
/** Holt Beschreibung und Archiv, prüft Host-Version und Stand und legt den Stand im Cache ab; startet nichts. */
|
|
134
|
+
export const prepareProfile = async (options: ConnectOptions): Promise<ConnectedProfile> => {
|
|
135
|
+
const description = await describeProfile(options);
|
|
136
|
+
const hostPath = options.hostPath ?? hostRoot();
|
|
137
|
+
const localVersion = options.localVersion ?? readHostVersion(hostPath);
|
|
138
|
+
if (localVersion !== description.hostVersion) throw versionMismatch(hostPath, localVersion, description);
|
|
139
|
+
const layout = remoteLayout(options.dataRoot ?? ragentsDataRoot(), options.serverUrl, description.profile);
|
|
140
|
+
const cacheDirectory = path.join(layout.profiles, description.version);
|
|
141
|
+
const profileFile = path.join(cacheDirectory, ...description.file.split("/"));
|
|
142
|
+
const webDirectory = path.join(cacheDirectory, ...description.web.split("/"));
|
|
143
|
+
let downloaded = false;
|
|
144
|
+
if (!existsSync(profileFile)) {
|
|
145
|
+
const archive = await downloadArchive(options, description);
|
|
146
|
+
const staging = `${cacheDirectory}.part`;
|
|
147
|
+
await rm(staging, { recursive: true, force: true });
|
|
148
|
+
await mkdir(staging, { recursive: true });
|
|
149
|
+
const file = path.join(staging, "profile.tar.gz");
|
|
150
|
+
await writeFile(file, archive);
|
|
151
|
+
await extractTar({ file, cwd: staging, strict: true });
|
|
152
|
+
await rm(file);
|
|
153
|
+
if (!existsSync(path.join(staging, ...description.file.split("/")))) throw new Error(`Das Archiv enthält die Profildatei ${description.file} nicht`);
|
|
154
|
+
if (!existsSync(path.join(staging, ...description.web.split("/"), "index.html"))) {
|
|
155
|
+
throw new Error(`Das Archiv enthält das gebaute Web ${description.web}/index.html nicht`);
|
|
156
|
+
}
|
|
157
|
+
await markAsModule(staging);
|
|
158
|
+
await rm(cacheDirectory, { recursive: true, force: true });
|
|
159
|
+
await rename(staging, cacheDirectory);
|
|
160
|
+
downloaded = true;
|
|
161
|
+
}
|
|
162
|
+
if (options.clean) {
|
|
163
|
+
for (const entry of await readdir(layout.profiles)) {
|
|
164
|
+
if (entry !== description.version) await rm(path.join(layout.profiles, entry), { recursive: true, force: true });
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
await mkdir(layout.data, { recursive: true });
|
|
168
|
+
const cached: CachedProfile = {
|
|
169
|
+
serverUrl: options.serverUrl,
|
|
170
|
+
profile: description.profile,
|
|
171
|
+
version: description.version,
|
|
172
|
+
hostVersion: description.hostVersion,
|
|
173
|
+
profileFile,
|
|
174
|
+
webDirectory,
|
|
175
|
+
dataDirectory: layout.data,
|
|
176
|
+
};
|
|
177
|
+
await writeFile(layout.current, `${JSON.stringify(cached, null, 2)}\n`);
|
|
178
|
+
return { description, profileFile, webDirectory, dataDirectory: layout.data, cacheDirectory, downloaded };
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
/** Startet ein Host-Skript wie der Checkout: Node mit dem tsx-Loader, Arbeitsverzeichnis apps/server, ohne pnpm. */
|
|
182
|
+
export const hostScript = (script: string, args: readonly string[] = []): { file: string; args: readonly string[]; cwd: string } => ({
|
|
183
|
+
file: process.execPath,
|
|
184
|
+
args: ["--import", "tsx", path.join(hostRoot(), script), ...args],
|
|
185
|
+
cwd: path.join(hostRoot(), "apps/server"),
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
const run = (command: { file: string; args: readonly string[]; cwd: string }, env: NodeJS.ProcessEnv): Promise<number> => new Promise((resolve, reject) => {
|
|
189
|
+
const child = spawn(command.file, [...command.args], { cwd: command.cwd, env, stdio: "inherit" });
|
|
190
|
+
const forward = (signal: NodeJS.Signals) => () => child.kill(signal);
|
|
191
|
+
const onInterrupt = forward("SIGINT");
|
|
192
|
+
const onTerminate = forward("SIGTERM");
|
|
193
|
+
process.on("SIGINT", onInterrupt);
|
|
194
|
+
process.on("SIGTERM", onTerminate);
|
|
195
|
+
child.once("error", reject);
|
|
196
|
+
child.once("exit", (code, signal) => {
|
|
197
|
+
process.off("SIGINT", onInterrupt);
|
|
198
|
+
process.off("SIGTERM", onTerminate);
|
|
199
|
+
resolve(code ?? (signal ? 1 : 0));
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
const main = async (): Promise<void> => {
|
|
204
|
+
const arguments_ = parseArguments(process.argv.slice(2));
|
|
205
|
+
const token = process.env.RAGENTS_TOKEN;
|
|
206
|
+
if (!token) throw new Error(`RAGENTS_TOKEN fehlt: der persönliche Token aus dem Serverprofil.\n${usage()}`);
|
|
207
|
+
const prepared = await prepareProfile({ serverUrl: arguments_.serverUrl, token, clean: arguments_.clean });
|
|
208
|
+
const { description } = prepared;
|
|
209
|
+
console.log(`== Profil ${description.profile} vom Server ${arguments_.serverUrl}, Stand ${description.version.slice(0, 12)} (${prepared.downloaded ? "geholt" : "im Cache"})`);
|
|
210
|
+
console.log(`== Profildatei ${prepared.profileFile}`);
|
|
211
|
+
console.log(`== Daten ${prepared.dataDirectory}`);
|
|
212
|
+
if (!arguments_.start) return;
|
|
213
|
+
process.exitCode = await startCached({
|
|
214
|
+
serverUrl: arguments_.serverUrl,
|
|
215
|
+
profile: description.profile,
|
|
216
|
+
version: description.version,
|
|
217
|
+
hostVersion: description.hostVersion,
|
|
218
|
+
profileFile: prepared.profileFile,
|
|
219
|
+
webDirectory: prepared.webDirectory,
|
|
220
|
+
dataDirectory: prepared.dataDirectory,
|
|
221
|
+
}, arguments_.port);
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
export interface StartedProfile {
|
|
225
|
+
readonly profile: string;
|
|
226
|
+
readonly profileFile: string;
|
|
227
|
+
/** Nur bei einem geholten Stand gesetzt; ein Profil des Hosts nimmt die Vorgaben seiner eigenen Konfiguration. */
|
|
228
|
+
readonly dataDirectory?: string;
|
|
229
|
+
readonly webDirectory?: string;
|
|
230
|
+
readonly port: number | undefined;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/** Provisioniert die Werkzeuge des Profils und startet den Server damit. */
|
|
234
|
+
export const startProfile = async (started: StartedProfile): Promise<number> => {
|
|
235
|
+
const env: NodeJS.ProcessEnv = {
|
|
236
|
+
...process.env,
|
|
237
|
+
PRODUCT_PROFILE: started.profile,
|
|
238
|
+
PRODUCT_PROFILE_FILE: started.profileFile,
|
|
239
|
+
...(started.dataDirectory ? { DATA_DIR: started.dataDirectory } : {}),
|
|
240
|
+
...(started.webDirectory ? { WEB_DIST_DIR: started.webDirectory } : {}),
|
|
241
|
+
};
|
|
242
|
+
console.log("== Werkzeuge provisionieren");
|
|
243
|
+
const provisioned = await run(hostScript("scripts/provision/run-provision.ts"), env);
|
|
244
|
+
if (provisioned !== 0) throw new Error(`Die Provisionierung endete mit Code ${provisioned}`);
|
|
245
|
+
console.log(started.webDirectory ? `== Server starten (Web ${started.webDirectory})` : "== Server starten");
|
|
246
|
+
return run(hostScript("apps/server/src/main.ts", started.port !== undefined ? ["--port", String(started.port)] : []), env);
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
/** Startet einen Stand, den connect geholt hat, mit dem Web aus dem Cache. */
|
|
250
|
+
export const startCached = (cached: CachedProfile, port: number | undefined): Promise<number> => startProfile({
|
|
251
|
+
profile: cached.profile,
|
|
252
|
+
profileFile: cached.profileFile,
|
|
253
|
+
dataDirectory: cached.dataDirectory,
|
|
254
|
+
webDirectory: cached.webDirectory,
|
|
255
|
+
port,
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
// Im Bundle der Erweiterung ist import.meta leer; dann gibt es keinen Kommandozeileneinstieg.
|
|
259
|
+
const moduleUrl: string | undefined = import.meta.url;
|
|
260
|
+
if (moduleUrl && process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(moduleUrl)) {
|
|
261
|
+
main().catch((error: unknown) => {
|
|
262
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
263
|
+
process.exit(1);
|
|
264
|
+
});
|
|
265
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { statSync } from "node:fs";
|
|
2
|
+
import { readFile, readdir } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { profileFileName } from "../../apps/server/src/config-file.ts";
|
|
6
|
+
import { ragentsDataRoot } from "../../apps/server/src/data-directory.ts";
|
|
7
|
+
import { hostRoot } from "../../apps/server/src/host-version.ts";
|
|
8
|
+
import { startCached, startProfile, type CachedProfile } from "./connect.ts";
|
|
9
|
+
|
|
10
|
+
const usage = (): string => `Verwendung: ragents start <profil> [--port <n>]
|
|
11
|
+
Startet ein Profil dieses Hosts (core, developer) oder einen Stand, den ragents connect schon
|
|
12
|
+
geholt hat, ohne den Server zu fragen. Ein geholter Stand bringt sein Web aus demselben Cache
|
|
13
|
+
mit. Ohne Argument nennt der Befehl die Profile im Cache.`;
|
|
14
|
+
|
|
15
|
+
export const parseArguments = (argv: readonly string[]): { profile: string; port: number | undefined } => {
|
|
16
|
+
let profile: string | undefined;
|
|
17
|
+
let port: number | undefined;
|
|
18
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
19
|
+
const argument = argv[index]!;
|
|
20
|
+
if (argument === "--port") {
|
|
21
|
+
const value = Number(argv[index + 1]);
|
|
22
|
+
if (!Number.isInteger(value) || value < 0 || value > 65535) throw new Error(`--port braucht eine ganze Zahl von 0 bis 65535, nicht ${argv[index + 1]}`);
|
|
23
|
+
port = value;
|
|
24
|
+
index += 1;
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (argument.startsWith("-") || profile) throw new Error(`Unbekanntes Argument: ${argument}\n${usage()}`);
|
|
28
|
+
profile = argument;
|
|
29
|
+
}
|
|
30
|
+
if (!profile) throw new Error(`Der Profilname fehlt.\n${usage()}`);
|
|
31
|
+
return { profile, port };
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const directories = async (folder: string): Promise<readonly string[]> =>
|
|
35
|
+
(await readdir(folder, { withFileTypes: true }).catch(() => [])).filter((entry) => entry.isDirectory()).map((entry) => entry.name);
|
|
36
|
+
|
|
37
|
+
/** Alle Stände, die connect in diesem Datenordner hinterlassen hat. */
|
|
38
|
+
export const cachedProfiles = async (dataRoot: string): Promise<readonly CachedProfile[]> => {
|
|
39
|
+
const remote = path.join(dataRoot, "remote");
|
|
40
|
+
const found: CachedProfile[] = [];
|
|
41
|
+
for (const server of await directories(remote)) {
|
|
42
|
+
for (const profile of await directories(path.join(remote, server))) {
|
|
43
|
+
const file = path.join(remote, server, profile, "current.json");
|
|
44
|
+
const content = await readFile(file, "utf8").catch(() => undefined);
|
|
45
|
+
if (content !== undefined) found.push(JSON.parse(content) as CachedProfile);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return found.sort((left, right) => `${left.profile} ${left.serverUrl}`.localeCompare(`${right.profile} ${right.serverUrl}`, "en"));
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
export const selectCachedProfile = (cached: readonly CachedProfile[], profile: string): CachedProfile => {
|
|
52
|
+
const matching = cached.filter((entry) => entry.profile === profile);
|
|
53
|
+
if (matching.length === 1) return matching[0]!;
|
|
54
|
+
if (matching.length === 0) {
|
|
55
|
+
const known = cached.map((entry) => `${entry.profile} (${entry.serverUrl})`);
|
|
56
|
+
throw new Error(`Das Profil ${profile} liegt nicht im Cache. `
|
|
57
|
+
+ (known.length ? `Geholt sind: ${known.join(", ")}.` : "Es ist noch kein Profil geholt; hol es mit ragents connect <server-url>."));
|
|
58
|
+
}
|
|
59
|
+
throw new Error(`Das Profil ${profile} kommt von mehreren Servern (${matching.map((entry) => entry.serverUrl).join(", ")}); `
|
|
60
|
+
+ "nimm ragents connect <server-url>.");
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
/** Ein Profil, das neben dem Host liegt: im Checkout die Datei im Repo, im Paket die mitgelieferte. */
|
|
64
|
+
export const hostProfileFile = (profile: string, root = hostRoot()): string | undefined => {
|
|
65
|
+
const file = path.join(root, profileFileName(profile));
|
|
66
|
+
return statSync(file, { throwIfNoEntry: false })?.isFile() ? file : undefined;
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const main = async (): Promise<void> => {
|
|
70
|
+
const arguments_ = parseArguments(process.argv.slice(2));
|
|
71
|
+
const own = hostProfileFile(arguments_.profile);
|
|
72
|
+
if (own) {
|
|
73
|
+
console.log(`== Profil ${arguments_.profile} dieses Hosts`);
|
|
74
|
+
console.log(`== Profildatei ${own}`);
|
|
75
|
+
process.exitCode = await startProfile({ profile: arguments_.profile, profileFile: own, port: arguments_.port });
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const cached = selectCachedProfile(await cachedProfiles(ragentsDataRoot()), arguments_.profile);
|
|
79
|
+
console.log(`== Profil ${cached.profile} vom Server ${cached.serverUrl}, Stand ${cached.version.slice(0, 12)} (aus dem Cache)`);
|
|
80
|
+
console.log(`== Profildatei ${cached.profileFile}`);
|
|
81
|
+
console.log(`== Daten ${cached.dataDirectory}`);
|
|
82
|
+
process.exitCode = await startCached(cached, arguments_.port);
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
const moduleUrl: string | undefined = import.meta.url;
|
|
86
|
+
if (moduleUrl && process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(moduleUrl)) {
|
|
87
|
+
main().catch((error: unknown) => {
|
|
88
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
89
|
+
process.exit(1);
|
|
90
|
+
});
|
|
91
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { statSync } from "node:fs";
|
|
3
|
+
import { hostname } from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { provisionWorkspace } from "../../apps/server/src/profile/provisioning.ts";
|
|
7
|
+
import { workspaceClientTransport } from "../../plugins/ragents.workspace/client/transport.ts";
|
|
8
|
+
import { WorkspaceClient } from "../../plugins/ragents.workspace/client/workspace-client.ts";
|
|
9
|
+
|
|
10
|
+
const usage = (): string => `Verwendung: [RAGENTS_TOKEN=<token>] pnpm workspace-client <server-url> [ordner ...] [--id <kennung>] [--label <name>]
|
|
11
|
+
Meldet die Ordner als Arbeitsplatz beim Server an und führt dessen Aufträge mit dem Executor
|
|
12
|
+
dieses Rechners aus - dasselbe, was die VS-Code-Erweiterung tut, nur ohne VS Code. Ohne Ordner
|
|
13
|
+
gilt das aktuelle Verzeichnis. Jeder Werkzeugaufruf erscheint als eine Zeile auf stdout.
|
|
14
|
+
Die Sprachserver holt der Start in den Werkzeugordner dieses Rechners (dasselbe wie
|
|
15
|
+
pnpm provision --workspace); ROSLYN_LANGUAGE_SERVER und FSHARP_LANGUAGE_SERVER übersteuern ihn,
|
|
16
|
+
TypeScript bringt der Executor mit. Das Skript läuft, bis es mit Strg-C beendet wird.`;
|
|
17
|
+
|
|
18
|
+
export interface WorkspaceClientArguments {
|
|
19
|
+
readonly serverUrl: string;
|
|
20
|
+
readonly folders: readonly string[];
|
|
21
|
+
readonly id: string | undefined;
|
|
22
|
+
readonly label: string | undefined;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const parseArguments = (argv: readonly string[]): WorkspaceClientArguments => {
|
|
26
|
+
const folders: string[] = [];
|
|
27
|
+
let serverUrl: string | undefined;
|
|
28
|
+
let id: string | undefined;
|
|
29
|
+
let label: string | undefined;
|
|
30
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
31
|
+
const argument = argv[index]!;
|
|
32
|
+
if (argument === "--id" || argument === "--label") {
|
|
33
|
+
const value = argv[index + 1];
|
|
34
|
+
if (!value || value.startsWith("-")) throw new Error(`${argument} braucht einen Wert.\n${usage()}`);
|
|
35
|
+
if (argument === "--id") id = value;
|
|
36
|
+
else label = value;
|
|
37
|
+
index += 1;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (argument.startsWith("-")) throw new Error(`Unbekanntes Argument: ${argument}\n${usage()}`);
|
|
41
|
+
if (serverUrl === undefined) serverUrl = argument;
|
|
42
|
+
else folders.push(argument);
|
|
43
|
+
}
|
|
44
|
+
if (!serverUrl) throw new Error(`Die Serveradresse fehlt.\n${usage()}`);
|
|
45
|
+
if (id !== undefined && !/^[A-Za-z0-9_-]{8,64}$/.test(id)) throw new Error("--id braucht 8 bis 64 Zeichen aus A-Z, a-z, 0-9, _ und -.");
|
|
46
|
+
return { serverUrl, folders, id, label };
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/** Eine stabile Kennung je Rechner und Ordnersatz, damit der Server denselben Arbeitsplatz wiedererkennt. */
|
|
50
|
+
export const workspaceClientId = (host: string, folders: readonly string[]): string =>
|
|
51
|
+
`cli-${createHash("sha256").update([host, ...folders].join("\n")).digest("hex").slice(0, 32)}`;
|
|
52
|
+
|
|
53
|
+
export const resolvedFolders = (folders: readonly string[], cwd: string): string[] => {
|
|
54
|
+
const resolved = (folders.length > 0 ? folders : [cwd]).map((folder) => path.resolve(cwd, folder));
|
|
55
|
+
for (const folder of resolved) {
|
|
56
|
+
if (!statSync(folder, { throwIfNoEntry: false })?.isDirectory()) throw new Error(`Kein Verzeichnis: ${folder}`);
|
|
57
|
+
}
|
|
58
|
+
return resolved;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const main = async (): Promise<void> => {
|
|
62
|
+
const parsed = parseArguments(process.argv.slice(2));
|
|
63
|
+
const folders = resolvedFolders(parsed.folders, process.cwd());
|
|
64
|
+
const host = hostname();
|
|
65
|
+
const identity = {
|
|
66
|
+
id: parsed.id ?? workspaceClientId(host, folders),
|
|
67
|
+
label: parsed.label ?? `${host} (${path.basename(folders[0]!)})`,
|
|
68
|
+
hostname: host,
|
|
69
|
+
platform: process.platform,
|
|
70
|
+
folders,
|
|
71
|
+
};
|
|
72
|
+
const transport = workspaceClientTransport(parsed.serverUrl, process.env.RAGENTS_TOKEN);
|
|
73
|
+
const client = new WorkspaceClient(transport, identity, {
|
|
74
|
+
onExecuted: ({ runId, tool, durationMs, error }) =>
|
|
75
|
+
console.log(`== ${runId.slice(0, 8)} ${tool} ${durationMs} ms ${error ?? "ok"}`),
|
|
76
|
+
});
|
|
77
|
+
console.log(`== Arbeitsplatz ${identity.label} (${identity.id})`);
|
|
78
|
+
for (const folder of folders) console.log(`== Ordner ${folder}`);
|
|
79
|
+
console.log("== Werkzeuge provisionieren");
|
|
80
|
+
await provisionWorkspace((line) => console.log(line));
|
|
81
|
+
console.log(`== Server ${parsed.serverUrl}`);
|
|
82
|
+
client.onChange(() => {
|
|
83
|
+
const status = client.status;
|
|
84
|
+
console.log(status.kind === "failed" ? `== Anmeldung fehlgeschlagen: ${status.message}` : `== Zustand ${status.kind}`);
|
|
85
|
+
});
|
|
86
|
+
await client.register();
|
|
87
|
+
if (client.status.kind !== "registered") {
|
|
88
|
+
process.exitCode = 1;
|
|
89
|
+
transport.rpc.close();
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
console.log("== Angemeldet; Strg-C beendet den Arbeitsplatz");
|
|
93
|
+
await new Promise<void>((finish) => {
|
|
94
|
+
const stop = () => {
|
|
95
|
+
process.off("SIGINT", stop);
|
|
96
|
+
process.off("SIGTERM", stop);
|
|
97
|
+
finish();
|
|
98
|
+
};
|
|
99
|
+
process.on("SIGINT", stop);
|
|
100
|
+
process.on("SIGTERM", stop);
|
|
101
|
+
});
|
|
102
|
+
await client.unregister();
|
|
103
|
+
transport.rpc.close();
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
const moduleUrl: string | undefined = import.meta.url;
|
|
107
|
+
if (moduleUrl && process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(moduleUrl)) {
|
|
108
|
+
main().catch((error: unknown) => {
|
|
109
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
110
|
+
process.exit(1);
|
|
111
|
+
});
|
|
112
|
+
}
|