@schlenkr/ragents 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -11
- package/apps/server/package.json +8 -6
- package/apps/server/src/access-projection.ts +3 -3
- package/apps/server/src/access-service.ts +19 -8
- package/apps/server/src/access-session.ts +6 -2
- package/apps/server/src/api/contracts.ts +19 -18
- package/apps/server/src/api/core-methods.ts +45 -26
- package/apps/server/src/api/delivery.ts +4 -4
- package/apps/server/src/api/reference.ts +1 -1
- package/apps/server/src/api/rights.ts +86 -7
- package/apps/server/src/chat-context.ts +1 -1
- package/apps/server/src/chat-handler.ts +14 -7
- package/apps/server/src/config-file.ts +25 -6
- package/apps/server/src/config.ts +4 -4
- package/apps/server/src/data-directory.ts +1 -1
- package/apps/server/src/folder-install.ts +115 -0
- package/apps/server/src/host-api.json +1256 -0
- package/apps/server/src/host-api.ts +190 -0
- package/apps/server/src/host-resolution-hooks.mjs +50 -1
- package/apps/server/src/host-resolution.ts +26 -1
- package/apps/server/src/host-version.ts +41 -0
- package/apps/server/src/host-web.ts +59 -0
- package/apps/server/src/layout.ts +1 -1
- package/apps/server/src/main.ts +3 -2
- package/apps/server/src/missing-environment.ts +47 -0
- package/apps/server/src/parent-watch.ts +37 -0
- package/apps/server/src/plugin-build/build.ts +650 -0
- package/apps/server/src/plugin-build/host-api-names.ts +185 -0
- package/apps/server/src/plugin-build/plugin-description.ts +118 -0
- package/apps/server/src/plugin-build/typecheck.ts +66 -0
- package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/app-project.ts +16 -15
- package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/client-compiler.ts +4 -4
- package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/client-contracts.ts +4 -4
- package/apps/server/src/plugin-support/actor-programs/client-runtime.ts +27 -0
- package/{plugins/ragents.actor-programs → apps/server/src/plugin-support/actor-programs}/contract.ts +3 -3
- package/apps/server/src/plugin-support/actor-programs/service.ts +1 -1
- package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/tailwind.ts +2 -3
- package/{plugins/ragents.actor-programs → apps/server/src/plugin-support/actor-programs}/workflow/index.ts +48 -48
- package/apps/server/src/plugin-support/agent-tool.ts +10 -5
- package/apps/server/src/plugin-support/http.ts +1 -1
- package/apps/server/src/plugin-support/language-server/contract.ts +37 -6
- package/apps/server/src/plugin-support/language-server/plugin.ts +18 -8
- package/apps/server/src/plugin-support/language-server/snapshot-method.ts +32 -7
- package/apps/server/src/plugin-support/language-server/tools.ts +59 -15
- package/apps/server/src/plugin-support/model-aliases.ts +77 -0
- package/apps/server/src/plugin-support/model-choice.ts +17 -7
- package/apps/server/src/plugin-support/model-completion.ts +58 -0
- package/apps/server/src/plugin-support/model-upstreams.ts +2 -2
- package/apps/server/src/plugin-support/native-typescript-executor.ts +10 -7
- package/apps/server/src/plugin-support/plugin-config.ts +1 -1
- package/apps/server/src/plugin-support/plugin-folder.ts +4 -1
- package/apps/server/src/plugin-support/plugin-module.ts +1 -1
- package/apps/server/src/plugin-support/plugins-root.ts +6 -10
- package/apps/server/src/plugin-support/process-sandbox.ts +312 -0
- package/apps/server/src/plugin-support/product-model-settings-contract.ts +14 -5
- package/apps/server/src/plugin-support/product-model-settings.ts +10 -9
- package/{plugins/ragents.product/server/relay.ts → apps/server/src/plugin-support/product-relay.ts} +2 -2
- package/apps/server/src/plugin-support/product-start-options.ts +8 -3
- package/apps/server/src/plugin-support/prompt.ts +1 -1
- package/apps/server/src/plugin-support/provision.ts +6 -0
- package/apps/server/src/plugin-support/run-scripts.ts +16 -2
- package/apps/server/src/plugin-support/skills.ts +32 -16
- package/apps/server/src/plugin-support/start-entries-contract.ts +12 -3
- package/apps/server/src/plugin-support/start-options-contract.ts +5 -1
- package/apps/server/src/plugin-support/thinking-level.ts +6 -1
- package/apps/server/src/plugin-support/tool-availability.ts +1 -7
- package/apps/server/src/plugin-support/workspace-ownership.ts +12 -6
- package/apps/server/src/plugin-support/workspace-sandbox-host.ts +184 -37
- package/apps/server/src/profile/bundle-manifest.ts +183 -0
- package/apps/server/src/profile/compose.ts +19 -10
- package/apps/server/src/profile/plugin-discovery.ts +98 -46
- package/apps/server/src/profile/provisioning.ts +30 -26
- package/apps/server/src/profile-target.ts +3 -0
- package/apps/server/src/provider.ts +182 -99
- package/apps/server/src/ragents/actor-chat-history.ts +23 -22
- package/apps/server/src/ragents/chat-projection.ts +25 -14
- package/apps/server/src/ragents/chat-text-positions.ts +4 -4
- package/apps/server/src/ragents/coordinator.ts +27 -1
- package/apps/server/src/ragents/document-store.ts +1 -1
- package/apps/server/src/ragents/engine.ts +69 -36
- package/apps/server/src/ragents/global-chat.ts +26 -13
- package/apps/server/src/ragents/host-services.ts +15 -6
- package/apps/server/src/ragents/journal-chat-events.ts +31 -15
- package/apps/server/src/ragents/product-runtime.ts +1 -1
- package/apps/server/src/ragents/run-owner.ts +17 -0
- package/apps/server/src/ragents/runtime-bridge.ts +1 -1
- package/apps/server/src/ragents/session.ts +181 -82
- package/apps/server/src/ragents/start-option-state.ts +1 -1
- package/apps/server/src/ragents/typescript-tools.ts +35 -27
- package/apps/server/src/ragents/workspace-runtime.ts +74 -8
- package/apps/server/src/rpc/dispatcher.ts +17 -8
- package/apps/server/src/rpc/http-transport.ts +1 -3
- package/apps/server/src/rpc/stdio-transport.ts +1 -1
- package/apps/server/src/run-preparation-contract.ts +1 -1
- package/apps/server/src/run-preparation-input.ts +1 -1
- package/apps/server/src/run-preparation.ts +13 -20
- package/apps/server/src/run-transfer.ts +2 -2
- package/apps/server/src/server.ts +112 -33
- package/apps/server/src/settings.ts +7 -8
- package/apps/server/src/title-compactor.ts +5 -8
- package/apps/server/src/title-settings.ts +3 -3
- package/apps/server/src/web-bundles.ts +79 -0
- package/apps/server/src/web-stylesheet.ts +85 -0
- package/apps/server/tsconfig.json +4 -4
- package/apps/server/tsconfig.plugin.json +58 -0
- package/apps/web/dist/assets/highlighted-body-KPVGNVTW-B9qYBARS.js +1 -0
- package/apps/web/dist/assets/main-BCjvD2Hh.js +6 -0
- package/apps/web/dist/assets/mermaid-HWGCJPDP-BPn4aV2r.css +1 -0
- package/apps/web/dist/assets/mermaid-HWGCJPDP-CvYYFK_n.js +478 -0
- package/apps/web/dist/assets/runPanel-CG7kRMJh.js +21 -0
- package/apps/web/dist/help/guide-access.html +199 -0
- package/apps/web/dist/help/guide-access.md +84 -0
- package/apps/web/dist/help/guide-clients.html +421 -0
- package/apps/web/dist/help/guide-clients.md +336 -0
- package/apps/web/dist/help/guide-distributed.html +320 -0
- package/apps/web/dist/help/guide-distributed.md +225 -0
- package/apps/web/dist/help/guide-functions.html +231 -0
- package/apps/web/dist/help/guide-functions.md +127 -0
- package/apps/web/dist/help/guide-getting-started.html +230 -0
- package/apps/web/dist/help/guide-getting-started.md +123 -0
- package/apps/web/dist/help/guide-ideas.html +183 -0
- package/apps/web/dist/help/guide-ideas.md +71 -0
- package/apps/web/dist/help/guide-plugins.html +450 -0
- package/apps/web/dist/help/guide-plugins.md +341 -0
- package/apps/web/dist/help/guide-programs.html +359 -0
- package/apps/web/dist/help/guide-programs.md +271 -0
- package/apps/web/dist/help/guide-runtime.html +338 -0
- package/apps/web/dist/help/guide-runtime.md +225 -0
- package/apps/web/dist/help/guide.html +133 -0
- package/apps/web/dist/help/guide.md +13 -0
- package/apps/web/dist/help/homepage-bullets.js +12 -0
- package/apps/web/dist/help/homepage-distributed.js +261 -0
- package/apps/web/dist/help/homepage-plugins.js +30 -0
- package/apps/web/dist/help/homepage-scenes.js +368 -0
- package/apps/web/dist/help/homepage-stickers.js +69 -0
- package/apps/web/dist/help/homepage-story-nav.js +11 -0
- package/apps/web/dist/help/homepage-subnav.js +61 -0
- package/apps/web/dist/help/homepage.css +833 -0
- package/apps/web/dist/help/index.html +1167 -0
- package/apps/web/dist/help/mini-app.css +7056 -0
- package/apps/web/dist/help/mini-app.html +15 -0
- package/apps/web/dist/help/mini-app.js +131 -0
- package/apps/web/dist/help/screenshots/release-checklist-vscode.png +0 -0
- package/apps/web/dist/help/screenshots/release-checklist-web.png +0 -0
- package/apps/web/dist/help/scroll-vendor.js +73 -0
- package/apps/web/dist/help/site.css +63 -0
- package/apps/web/dist/help/site.js +103 -0
- package/apps/web/dist/host-web.json +143 -0
- package/apps/web/dist/index.html +15 -0
- package/apps/web/dist/run-panel.html +15 -0
- package/apps/web/package.json +2 -2
- package/apps/web/src/App.tsx +8 -6
- package/apps/web/src/Overview.tsx +5 -5
- package/apps/web/src/PluginActivation.ts +25 -5
- package/apps/web/src/PluginChat.tsx +163 -129
- package/apps/web/src/PluginFailureNotice.tsx +15 -0
- package/apps/web/src/PluginRegistry.tsx +106 -68
- package/apps/web/src/RunPreparationChat.tsx +40 -28
- package/apps/web/src/RunStore.ts +2 -2
- package/apps/web/src/SettingsModal.tsx +37 -37
- package/apps/web/src/StartOptions.tsx +81 -26
- package/apps/web/src/StartSelection.tsx +111 -0
- package/apps/web/src/StartTiles.tsx +73 -0
- package/apps/web/src/{CanvasShortcuts.tsx → SurfaceShortcuts.tsx} +2 -2
- package/apps/web/src/ThemeSettings.tsx +1 -1
- package/apps/web/src/WorkspacePanel.tsx +4 -4
- package/apps/web/src/access-session.ts +4 -1
- package/{plugins/ragents.orchestration/web → apps/web/src}/actor-conversation.ts +3 -3
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/DataTable.tsx +9 -9
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/FilePicker.tsx +4 -4
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/FlowDiagram.tsx +16 -14
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/FlowDiagramRenderer.tsx +3 -3
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/Form.tsx +12 -12
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/Layout.tsx +1 -1
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/MessageList.tsx +5 -5
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/Viewers.tsx +8 -7
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/WorkflowDiagram.tsx +1 -1
- package/apps/web/src/actor-programs/client-ui/chat-contracts.d.ts +64 -0
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/contracts.d.ts +2 -2
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/file-selection.ts +5 -5
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/index.tsx +22 -16
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/layout-contracts.d.ts +1 -1
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/message-list-contracts.d.ts +2 -2
- package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/workflow-diagram-contracts.d.ts +1 -1
- package/apps/web/src/api.ts +43 -22
- package/apps/web/src/chat/QuasselHost.tsx +12 -0
- package/apps/web/src/chat/StoppedActorNotice.tsx +39 -0
- package/apps/web/src/chat/chat-target.ts +14 -5
- package/apps/web/src/chat/requests.ts +13 -5
- package/apps/web/src/chat/useAttachmentCapabilities.ts +2 -2
- package/apps/web/src/chat/useChat.ts +8 -7
- package/apps/web/src/chat/user-location.ts +1 -1
- package/apps/web/src/chat-view-settings.tsx +49 -0
- package/apps/web/src/host-modules.ts +90 -0
- package/apps/web/src/language-server/api.ts +24 -0
- package/{plugins/ragents.lsp-roslyn/web → apps/web/src/language-server}/language-server-plugin.tsx +133 -6
- package/apps/web/src/main.tsx +4 -2
- package/apps/web/src/offered-machines.ts +11 -0
- package/apps/web/src/panel/ConnectionsPage.tsx +117 -0
- package/apps/web/src/panel/LoginForm.tsx +9 -9
- package/apps/web/src/panel/PanelDialogs.tsx +44 -27
- package/apps/web/src/panel/PanelHeader.tsx +11 -0
- package/apps/web/src/panel/PanelPage.tsx +8 -5
- package/apps/web/src/panel/RunLine.tsx +48 -0
- package/apps/web/src/panel/RunsPage.tsx +84 -0
- package/apps/web/src/panel/StartPage.tsx +163 -0
- package/apps/web/src/panel/connection-state.ts +40 -0
- package/apps/web/src/panel/contract.ts +64 -21
- package/apps/web/src/panel/page-props.ts +6 -0
- package/apps/web/src/plugin-bootstrap.ts +60 -31
- package/{plugins/ragents.product/web → apps/web/src/product}/ModelControl.tsx +3 -3
- package/{plugins/ragents.product/web → apps/web/src/product}/ProductModelSettings.tsx +7 -7
- package/{plugins/ragents.product/web → apps/web/src/product}/SystemPromptControl.tsx +3 -3
- package/{plugins/ragents.product/web → apps/web/src/product}/model-settings.ts +3 -3
- package/{plugins/ragents.product/web → apps/web/src/product}/start-options.tsx +2 -2
- package/apps/web/src/rpc/client.ts +28 -6
- package/apps/web/src/run-panel/RunPanelApp.tsx +334 -0
- package/apps/web/src/{column/ColumnRunHeader.tsx → run-panel/RunPanelHeader.tsx} +2 -2
- package/apps/web/src/{column/ColumnMenu.tsx → run-panel/RunPanelMenu.tsx} +4 -4
- package/apps/web/src/run-panel/RunPanelRail.tsx +38 -0
- package/apps/web/src/run-panel/RunPanelWorkspace.tsx +55 -0
- package/apps/web/src/{column → run-panel}/clipboard.ts +21 -10
- package/apps/web/src/run-panel/host-contract.ts +123 -0
- package/apps/web/src/{column → run-panel}/host.ts +31 -23
- package/apps/web/src/run-panel/input-bridge.ts +75 -0
- package/apps/web/src/run-panel/keyboard.ts +53 -0
- package/apps/web/src/run-panel/run-panel-location.ts +35 -0
- package/apps/web/src/{column → run-panel}/use-session-list.ts +3 -3
- package/apps/web/src/run-panel/workspace-state.ts +43 -0
- package/apps/web/src/{column.tsx → run-panel.tsx} +20 -13
- package/apps/web/src/run-preparation.ts +1 -1
- package/{plugins/ragents.orchestration/web → apps/web/src}/run-view.ts +25 -7
- package/apps/web/src/settings-contributions.ts +16 -18
- package/apps/web/src/title-model-settings.ts +1 -1
- package/apps/web/src/toolLine.ts +1 -1
- package/apps/web/src/ui/ListDetail.tsx +1 -1
- package/apps/web/src/ui/dialog.tsx +5 -5
- package/apps/web/src/ui/frame.css +1 -0
- package/apps/web/src/ui/index.ts +5 -0
- package/apps/web/src/ui/popover.tsx +2 -2
- package/apps/web/src/ui/quassel.css +41 -0
- package/apps/web/src/ui/relative-time.ts +36 -0
- package/apps/web/src/ui/startup-notice.tsx +22 -0
- package/apps/web/src/ui/state-icon.tsx +60 -0
- package/apps/web/src/ui/state-vocabulary.ts +31 -0
- package/apps/web/src/ui/stop-button.tsx +22 -0
- package/apps/web/src/ui/tailwind.css +2 -3
- package/apps/web/src/ui/theme.css +19 -19
- package/apps/web/tsconfig.json +4 -5
- package/apps/web/tsconfig.plugin.json +44 -0
- package/bundles/ragents.activity/ragents-bundle.json +38 -0
- package/bundles/ragents.activity/server/index.js +14 -0
- package/bundles/ragents.activity/server/index.js.map +7 -0
- package/bundles/ragents.activity/web/classes.json +1 -0
- package/bundles/ragents.activity/web/index.js +2 -0
- package/bundles/ragents.activity/web/index.js.map +7 -0
- package/bundles/ragents.actor-programs/prompt.hbs +80 -0
- package/bundles/ragents.actor-programs/ragents-bundle.json +214 -0
- package/bundles/ragents.actor-programs/server/index.js +2071 -0
- package/bundles/ragents.actor-programs/server/index.js.map +7 -0
- package/bundles/ragents.actor-programs/summary.hbs +17 -0
- package/bundles/ragents.actor-programs/web/classes.json +1 -0
- package/bundles/ragents.actor-programs/web/index.js +27 -0
- package/bundles/ragents.actor-programs/web/index.js.map +7 -0
- package/bundles/ragents.ask/ask.hbs +4 -0
- package/bundles/ragents.ask/ragents-bundle.json +97 -0
- package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js +13 -0
- package/bundles/ragents.ask/server/chunks/chunk-PDJO75SQ.js.map +7 -0
- package/bundles/ragents.ask/server/exports/server/contract.js +11 -0
- package/bundles/ragents.ask/server/exports/server/contract.js.map +7 -0
- package/bundles/ragents.ask/server/index.js +279 -0
- package/bundles/ragents.ask/server/index.js.map +7 -0
- package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js +2 -0
- package/bundles/ragents.ask/web/chunks/chunk-4VXWWEG7.js.map +7 -0
- package/bundles/ragents.ask/web/chunks/chunk-HGFDGTNC.js +2 -0
- package/bundles/ragents.ask/web/chunks/chunk-HGFDGTNC.js.map +7 -0
- package/bundles/ragents.ask/web/chunks/chunk-V7W3QDVS.js +25 -0
- package/bundles/ragents.ask/web/chunks/chunk-V7W3QDVS.js.map +7 -0
- package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js +2 -0
- package/bundles/ragents.ask/web/chunks/chunk-VUBJDIKQ.js.map +7 -0
- package/bundles/ragents.ask/web/classes.json +1 -0
- package/bundles/ragents.ask/web/exports/ask-payload.js +2 -0
- package/bundles/ragents.ask/web/exports/ask-payload.js.map +7 -0
- package/bundles/ragents.ask/web/exports/web/QuestionCard.js +2 -0
- package/bundles/ragents.ask/web/exports/web/QuestionCard.js.map +7 -0
- package/bundles/ragents.ask/web/exports/web/api.js +2 -0
- package/bundles/ragents.ask/web/exports/web/api.js.map +7 -0
- package/bundles/ragents.ask/web/index.js +2 -0
- package/bundles/ragents.ask/web/index.js.map +7 -0
- package/bundles/ragents.browser/ragents-bundle.json +53 -0
- package/bundles/ragents.browser/server/chunks/chunk-2GKLLCBE.js +11 -0
- package/bundles/ragents.browser/server/chunks/chunk-2GKLLCBE.js.map +7 -0
- package/bundles/ragents.browser/server/exports/server/contract.js +9 -0
- package/bundles/ragents.browser/server/exports/server/contract.js.map +7 -0
- package/bundles/ragents.browser/server/index.js +479 -0
- package/bundles/ragents.browser/server/index.js.map +7 -0
- package/bundles/ragents.browser/skills/browser-testing/SKILL.md +38 -0
- package/bundles/ragents.documents/prompt.hbs +18 -0
- package/bundles/ragents.documents/ragents-bundle.json +120 -0
- package/bundles/ragents.documents/server/chunks/chunk-QIECRZ7C.js +37 -0
- package/bundles/ragents.documents/server/chunks/chunk-QIECRZ7C.js.map +7 -0
- package/bundles/ragents.documents/server/exports/contract.js +11 -0
- package/bundles/ragents.documents/server/exports/contract.js.map +7 -0
- package/bundles/ragents.documents/server/index.js +290 -0
- package/bundles/ragents.documents/server/index.js.map +7 -0
- package/bundles/ragents.documents/web/classes.json +1 -0
- package/bundles/ragents.documents/web/index.js +26 -0
- package/bundles/ragents.documents/web/index.js.map +7 -0
- package/bundles/ragents.lsp-fsharp/ragents-bundle.json +49 -0
- package/bundles/ragents.lsp-fsharp/server/index.js +82 -0
- package/bundles/ragents.lsp-fsharp/server/index.js.map +7 -0
- package/bundles/ragents.lsp-fsharp/web/classes.json +1 -0
- package/bundles/ragents.lsp-fsharp/web/index.js +2 -0
- package/bundles/ragents.lsp-fsharp/web/index.js.map +7 -0
- package/bundles/ragents.lsp-roslyn/ragents-bundle.json +61 -0
- package/bundles/ragents.lsp-roslyn/server/index.js +208 -0
- package/bundles/ragents.lsp-roslyn/server/index.js.map +7 -0
- package/bundles/ragents.lsp-roslyn/web/classes.json +1 -0
- package/bundles/ragents.lsp-roslyn/web/index.js +2 -0
- package/bundles/ragents.lsp-roslyn/web/index.js.map +7 -0
- package/bundles/ragents.lsp-typescript/ragents-bundle.json +36 -0
- package/bundles/ragents.lsp-typescript/server/index.js +13 -0
- package/bundles/ragents.lsp-typescript/server/index.js.map +7 -0
- package/bundles/ragents.lsp-typescript/web/classes.json +1 -0
- package/bundles/ragents.lsp-typescript/web/index.js +2 -0
- package/bundles/ragents.lsp-typescript/web/index.js.map +7 -0
- package/bundles/ragents.model-relay/ragents-bundle.json +33 -0
- package/bundles/ragents.model-relay/server/index.js +230 -0
- package/bundles/ragents.model-relay/server/index.js.map +7 -0
- package/bundles/ragents.orchestration/orchestration.hbs +106 -0
- package/bundles/ragents.orchestration/ragents-bundle.json +194 -0
- package/bundles/ragents.orchestration/server/index.js +277 -0
- package/bundles/ragents.orchestration/server/index.js.map +7 -0
- package/bundles/ragents.orchestration/web/chunks/chunk-ODMMQGX2.js +2 -0
- package/bundles/ragents.orchestration/web/chunks/chunk-ODMMQGX2.js.map +7 -0
- package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js +2 -0
- package/bundles/ragents.orchestration/web/chunks/chunk-OQYCNYXN.js.map +7 -0
- package/bundles/ragents.orchestration/web/chunks/chunk-OSKPH6SZ.js +2 -0
- package/bundles/ragents.orchestration/web/chunks/chunk-OSKPH6SZ.js.map +7 -0
- package/bundles/ragents.orchestration/web/chunks/chunk-XGPPQCZR.js +2 -0
- package/bundles/ragents.orchestration/web/chunks/chunk-XGPPQCZR.js.map +7 -0
- package/bundles/ragents.orchestration/web/classes.json +1 -0
- package/bundles/ragents.orchestration/web/exports/web/program-slot.js +2 -0
- package/bundles/ragents.orchestration/web/exports/web/program-slot.js.map +7 -0
- package/bundles/ragents.orchestration/web/exports/web/surface-entities.js +2 -0
- package/bundles/ragents.orchestration/web/exports/web/surface-entities.js.map +7 -0
- package/bundles/ragents.orchestration/web/exports/web/tile-docking.js +2 -0
- package/bundles/ragents.orchestration/web/exports/web/tile-docking.js.map +7 -0
- package/bundles/ragents.orchestration/web/index.js +51 -0
- package/bundles/ragents.orchestration/web/index.js.map +7 -0
- package/bundles/ragents.overseer/ragents-bundle.json +144 -0
- package/bundles/ragents.overseer/server/index.js +652 -0
- package/bundles/ragents.overseer/server/index.js.map +7 -0
- package/bundles/ragents.overseer/web/classes.json +1 -0
- package/bundles/ragents.overseer/web/index.js +25 -0
- package/bundles/ragents.overseer/web/index.js.map +7 -0
- package/bundles/ragents.processes/ragents-bundle.json +93 -0
- package/bundles/ragents.processes/server/index.js +204 -0
- package/bundles/ragents.processes/server/index.js.map +7 -0
- package/bundles/ragents.processes/web/classes.json +1 -0
- package/bundles/ragents.processes/web/index.js +4 -0
- package/bundles/ragents.processes/web/index.js.map +7 -0
- package/bundles/ragents.product/preamble.hbs +9 -0
- package/bundles/ragents.product/ragents-bundle.json +93 -0
- package/bundles/ragents.product/server/index.js +208 -0
- package/bundles/ragents.product/server/index.js.map +7 -0
- package/bundles/ragents.product/web/classes.json +1 -0
- package/bundles/ragents.product/web/index.js +2 -0
- package/bundles/ragents.product/web/index.js.map +7 -0
- package/bundles/ragents.profile-distribution/ragents-bundle.json +64 -0
- package/bundles/ragents.profile-distribution/server/index.js +241 -0
- package/bundles/ragents.profile-distribution/server/index.js.map +7 -0
- package/bundles/ragents.reference/ragents-bundle.json +39 -0
- package/bundles/ragents.reference/run-scripts/balcony-wizard/RUN.md +27 -0
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/package.json +10 -0
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +80 -0
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/conversation.ts +82 -0
- package/bundles/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/tests/conversation.test.ts +154 -0
- package/bundles/ragents.reference/run-scripts/balcony-wizard/package.json +9 -0
- package/bundles/ragents.reference/run-scripts/balcony-wizard/src/server.ts +32 -0
- package/bundles/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +59 -0
- package/bundles/ragents.reference/run-scripts/conversation-circle/RUN.md +13 -0
- package/bundles/ragents.reference/run-scripts/conversation-circle/package.json +9 -0
- package/bundles/ragents.reference/run-scripts/conversation-circle/src/server.ts +81 -0
- package/bundles/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +26 -0
- package/bundles/ragents.reference/run-scripts/conversation-circle/tests/program.test.ts +34 -0
- package/bundles/ragents.reference/run-scripts/learning-afternoon/RUN.md +24 -0
- package/bundles/ragents.reference/run-scripts/learning-afternoon/package.json +10 -0
- package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/experiment.md +1 -0
- package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/helper.md +5 -0
- package/bundles/ragents.reference/run-scripts/learning-afternoon/prompts/quiz.md +1 -0
- package/bundles/ragents.reference/run-scripts/learning-afternoon/src/client.tsx +27 -0
- package/bundles/ragents.reference/run-scripts/learning-afternoon/src/server.ts +137 -0
- package/bundles/ragents.reference/run-scripts/learning-afternoon/src/state.ts +38 -0
- package/bundles/ragents.reference/run-scripts/learning-afternoon/src/view.tsx +42 -0
- package/bundles/ragents.reference/run-scripts/learning-afternoon/src/workflow.ts +38 -0
- package/bundles/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +218 -0
- package/bundles/ragents.reference/run-scripts/moderated-round/RUN.md +12 -0
- package/bundles/ragents.reference/run-scripts/moderated-round/package.json +9 -0
- package/bundles/ragents.reference/run-scripts/moderated-round/src/server.ts +60 -0
- package/bundles/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +26 -0
- package/bundles/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +24 -0
- package/bundles/ragents.reference/run-scripts/shared-actor-list/RUN.md +18 -0
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/package.json +16 -0
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/client.tsx +39 -0
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/contract.ts +15 -0
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/server.ts +14 -0
- package/bundles/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/tests/program.test.ts +13 -0
- package/bundles/ragents.reference/run-scripts/shared-actor-list/package.json +9 -0
- package/bundles/ragents.reference/run-scripts/shared-actor-list/src/server.ts +65 -0
- package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +26 -0
- package/bundles/ragents.reference/run-scripts/shared-actor-list/tests/program.test.ts +42 -0
- package/bundles/ragents.reference/run-scripts/word-game/RUN.md +25 -0
- package/bundles/ragents.reference/run-scripts/word-game/package.json +11 -0
- package/bundles/ragents.reference/run-scripts/word-game/src/client.tsx +27 -0
- package/bundles/ragents.reference/run-scripts/word-game/src/contract.ts +23 -0
- package/bundles/ragents.reference/run-scripts/word-game/src/server.ts +105 -0
- package/bundles/ragents.reference/run-scripts/word-game/src/state.ts +22 -0
- package/bundles/ragents.reference/run-scripts/word-game/src/view.tsx +54 -0
- package/bundles/ragents.reference/run-scripts/word-game/tests/program.test.ts +252 -0
- package/bundles/ragents.reference/server/index.js +16 -0
- package/bundles/ragents.reference/server/index.js.map +7 -0
- package/bundles/ragents.reference/skills/100-shared-actor-list/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/110-all-card-slots/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/150-editorial-workbench/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/160-learning-companion/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/170-photo-collection/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/180-decision-workbench/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/190-review-queue/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/20-circle-of-four/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/200-typescript-diagnostics/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/210-moderator-handover/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/220-actor-approval-list/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/230-shared-state-views/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/240-live-result-list/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/250-balcony-wizard/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/30-llm-without-runtime-knowledge/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/35-actor-input-fifo/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/40-subscription-matrix/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/50-subscription-removal/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/60-stop-in-the-circle/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/65-artifact-least-privilege/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/70-headless-counter/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/75-lsp-demo/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/80-actor-text-analysis/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/90-actor-notes/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/95-hello-world/SKILL.md +12 -0
- package/bundles/ragents.reference/skills/decision-brief/SKILL.md +33 -0
- package/bundles/ragents.reference/skills/learning-sprint/SKILL.md +33 -0
- package/bundles/ragents.reference/web/classes.json +1 -0
- package/bundles/ragents.reference/web/index.js +2 -0
- package/bundles/ragents.reference/web/index.js.map +7 -0
- package/bundles/ragents.todo/ragents-bundle.json +48 -0
- package/bundles/ragents.todo/server/index.js +108 -0
- package/bundles/ragents.todo/server/index.js.map +7 -0
- package/bundles/ragents.todo/web/classes.json +1 -0
- package/bundles/ragents.todo/web/index.js +2 -0
- package/bundles/ragents.todo/web/index.js.map +7 -0
- package/bundles/ragents.transcript/ragents-bundle.json +34 -0
- package/bundles/ragents.transcript/server/index.js +102 -0
- package/bundles/ragents.transcript/server/index.js.map +7 -0
- package/bundles/ragents.watch/ragents-bundle.json +39 -0
- package/bundles/ragents.watch/server/chunks/chunk-FHAM6OML.js +11 -0
- package/bundles/ragents.watch/server/chunks/chunk-FHAM6OML.js.map +7 -0
- package/bundles/ragents.watch/server/chunks/chunk-RPBX3J4P.js +10 -0
- package/bundles/ragents.watch/server/chunks/chunk-RPBX3J4P.js.map +7 -0
- package/bundles/ragents.watch/server/exports/contract.js +9 -0
- package/bundles/ragents.watch/server/exports/contract.js.map +7 -0
- package/bundles/ragents.watch/server/exports/server/contract.js +9 -0
- package/bundles/ragents.watch/server/exports/server/contract.js.map +7 -0
- package/bundles/ragents.watch/server/index.js +482 -0
- package/bundles/ragents.watch/server/index.js.map +7 -0
- package/bundles/ragents.workspace/prompt.hbs +7 -0
- package/bundles/ragents.workspace/ragents-bundle.json +148 -0
- package/bundles/ragents.workspace/server/index.js +1049 -0
- package/bundles/ragents.workspace/server/index.js.map +7 -0
- package/bundles/ragents.workspace/web/classes.json +1 -0
- package/bundles/ragents.workspace/web/index.js +39 -0
- package/bundles/ragents.workspace/web/index.js.map +7 -0
- package/package.json +5 -16
- package/packages/agent/dist/core/agent-session-runtime.d.ts +33 -0
- package/packages/agent/dist/core/agent-session-services.d.ts +35 -0
- package/packages/agent/dist/core/agent-session.d.ts +234 -0
- package/packages/agent/dist/core/agent-settings.d.ts +27 -0
- package/packages/agent/dist/core/auth-guidance.d.ts +4 -0
- package/packages/agent/dist/core/compaction/compaction.d.ts +116 -0
- package/packages/agent/dist/core/compaction/index.d.ts +6 -0
- package/packages/agent/dist/core/compaction/utils.d.ts +39 -0
- package/packages/agent/dist/core/defaults.d.ts +3 -0
- package/packages/agent/dist/core/extensions/index.d.ts +11 -0
- package/packages/agent/dist/core/extensions/loader.d.ts +12 -0
- package/packages/agent/dist/core/extensions/runner.d.ts +39 -0
- package/packages/agent/dist/core/extensions/types.d.ts +156 -0
- package/packages/agent/dist/core/extensions/wrapper.d.ts +12 -0
- package/packages/agent/dist/core/messages.d.ts +37 -0
- package/packages/agent/dist/core/model-runtime.d.ts +32 -0
- package/packages/agent/dist/core/provider-composer.d.ts +25 -0
- package/packages/agent/dist/core/resource-loader.d.ts +39 -0
- package/packages/agent/dist/core/sdk.d.ts +38 -0
- package/packages/agent/dist/core/session-manager.d.ts +189 -0
- package/packages/agent/dist/core/skills.d.ts +20 -0
- package/packages/agent/dist/core/source-info.d.ts +16 -0
- package/packages/agent/dist/core/system-prompt.d.ts +21 -0
- package/packages/agent/dist/core/tools/bash.d.ts +63 -0
- package/packages/agent/dist/core/tools/edit-diff.d.ts +98 -0
- package/packages/agent/dist/core/tools/edit.d.ts +41 -0
- package/packages/agent/dist/core/tools/file-mutation-queue.d.ts +6 -0
- package/packages/agent/dist/core/tools/index.d.ts +5 -0
- package/packages/agent/dist/core/tools/output-accumulator.d.ts +58 -0
- package/packages/agent/dist/core/tools/path-utils.d.ts +8 -0
- package/packages/agent/dist/core/tools/read.d.ts +33 -0
- package/packages/agent/dist/core/tools/truncate.d.ts +61 -0
- package/packages/agent/dist/core/tools/write.d.ts +23 -0
- package/packages/agent/dist/index.d.ts +13 -0
- package/packages/agent/dist/loop/agent-loop.d.ts +13 -0
- package/packages/agent/dist/loop/agent.d.ts +103 -0
- package/packages/agent/dist/loop/index.d.ts +5 -0
- package/packages/agent/dist/loop/types.d.ts +333 -0
- package/packages/agent/dist/loop/uuid.d.ts +2 -0
- package/packages/agent/dist/utils/child-process.d.ts +17 -0
- package/packages/agent/dist/utils/exif-orientation.d.ts +5 -0
- package/packages/agent/dist/utils/frontmatter.d.ts +8 -0
- package/packages/agent/dist/utils/image-convert.d.ts +2 -0
- package/packages/agent/dist/utils/image-process.d.ts +18 -0
- package/packages/agent/dist/utils/image-resize-core.d.ts +30 -0
- package/packages/agent/dist/utils/image-resize-worker.d.ts +2 -0
- package/packages/agent/dist/utils/image-resize.d.ts +16 -0
- package/packages/agent/dist/utils/mime.d.ts +3 -0
- package/packages/agent/dist/utils/paths.d.ts +15 -0
- package/packages/agent/dist/utils/photon.d.ts +21 -0
- package/packages/agent/dist/utils/shell.d.ts +17 -0
- package/packages/agent/dist/utils/sleep.d.ts +5 -0
- package/packages/agent/package.json +3 -32
- package/packages/agent/src/core/agent-session-runtime.ts +15 -469
- package/packages/agent/src/core/agent-session-services.ts +17 -167
- package/packages/agent/src/core/agent-session.ts +154 -2403
- package/packages/agent/src/core/agent-settings.ts +20 -0
- package/packages/agent/src/core/auth-guidance.ts +0 -4
- package/packages/agent/src/core/compaction/compaction.ts +4 -33
- package/packages/agent/src/core/compaction/index.ts +0 -1
- package/packages/agent/src/core/compaction/utils.ts +2 -2
- package/packages/agent/src/core/defaults.ts +1 -1
- package/packages/agent/src/core/extensions/index.ts +6 -117
- package/packages/agent/src/core/extensions/loader.ts +21 -605
- package/packages/agent/src/core/extensions/runner.ts +48 -969
- package/packages/agent/src/core/extensions/types.ts +35 -1298
- package/packages/agent/src/core/extensions/wrapper.ts +13 -34
- package/packages/agent/src/core/messages.ts +5 -109
- package/packages/agent/src/core/model-runtime.ts +109 -467
- package/packages/agent/src/core/provider-composer.ts +21 -451
- package/packages/agent/src/core/resource-loader.ts +18 -822
- package/packages/agent/src/core/sdk.ts +46 -281
- package/packages/agent/src/core/session-manager.ts +11 -891
- package/packages/agent/src/core/skills.ts +8 -440
- package/packages/agent/src/core/source-info.ts +0 -12
- package/packages/agent/src/core/system-prompt.ts +2 -41
- package/packages/agent/src/core/tools/bash.ts +20 -32
- package/packages/agent/src/core/tools/edit-diff.ts +0 -60
- package/packages/agent/src/core/tools/edit.ts +2 -18
- package/packages/agent/src/core/tools/index.ts +4 -130
- package/packages/agent/src/core/tools/output-accumulator.ts +33 -5
- package/packages/agent/src/core/tools/path-utils.ts +2 -49
- package/packages/agent/src/core/tools/read.ts +4 -12
- package/packages/agent/src/core/tools/truncate.ts +0 -15
- package/packages/agent/src/core/tools/write.ts +1 -8
- package/packages/agent/src/index.ts +11 -272
- package/packages/{agent-core/src → agent/src/loop}/agent-loop.ts +127 -273
- package/packages/{agent-core/src → agent/src/loop}/agent.ts +12 -164
- package/packages/{agent-core/src → agent/src/loop}/types.ts +6 -105
- package/packages/agent/src/utils/child-process.ts +0 -13
- package/packages/agent/src/utils/image-convert.ts +0 -25
- package/packages/agent/src/utils/paths.ts +1 -71
- package/packages/agent/src/utils/shell.ts +13 -156
- package/packages/ai/dist/api/ai-sdk-messages.d.ts +9 -0
- package/packages/ai/dist/api/ai-sdk-transport.d.ts +13 -0
- package/packages/ai/dist/api/ai-sdk.d.ts +13 -0
- package/packages/ai/dist/api/ai-sdk.lazy.d.ts +3 -0
- package/packages/ai/dist/api/lazy.d.ts +15 -0
- package/packages/ai/dist/api/simple-options.d.ts +4 -0
- package/packages/ai/dist/api/transform-messages.d.ts +8 -0
- package/packages/ai/dist/api-registry.d.ts +25 -0
- package/packages/ai/dist/auth/context.d.ts +4 -0
- package/packages/ai/dist/auth/helpers.d.ts +4 -0
- package/packages/ai/dist/auth/resolve.d.ts +19 -0
- package/packages/ai/dist/auth/types.d.ts +51 -0
- package/packages/ai/dist/env-api-keys.d.ts +8 -0
- package/packages/ai/dist/index.d.ts +19 -0
- package/packages/ai/dist/models.d.ts +71 -0
- package/packages/ai/dist/models.generated.d.ts +8021 -0
- package/packages/ai/dist/providers/all.d.ts +15 -0
- package/packages/ai/dist/providers/faux.d.ts +97 -0
- package/packages/ai/dist/providers/openrouter.d.ts +3 -0
- package/packages/ai/dist/providers/openrouter.models.d.ts +8019 -0
- package/packages/ai/dist/types.d.ts +541 -0
- package/packages/ai/dist/utils/diagnostics.d.ts +13 -0
- package/packages/ai/dist/utils/error-body.d.ts +25 -0
- package/packages/ai/dist/utils/estimate.d.ts +17 -0
- package/packages/ai/dist/utils/event-stream.d.ts +21 -0
- package/packages/ai/dist/utils/headers.d.ts +2 -0
- package/packages/ai/dist/utils/json-parse.d.ts +16 -0
- package/packages/ai/dist/utils/overflow.d.ts +54 -0
- package/packages/ai/dist/utils/provider-env.d.ts +7 -0
- package/packages/ai/dist/utils/retry.d.ts +12 -0
- package/packages/ai/dist/utils/sanitize-unicode.d.ts +22 -0
- package/packages/ai/dist/utils/typebox-helpers.d.ts +17 -0
- package/packages/ai/dist/utils/validation.d.ts +10 -0
- package/packages/ai/package.json +2 -6
- package/packages/ai/src/api/ai-sdk-transport.ts +2 -2
- package/packages/ai/src/api/simple-options.ts +0 -34
- package/packages/ai/src/api-registry.ts +1 -12
- package/packages/ai/src/auth/context.ts +1 -30
- package/packages/ai/src/auth/helpers.ts +3 -34
- package/packages/ai/src/auth/resolve.ts +10 -108
- package/packages/ai/src/auth/types.ts +9 -176
- package/packages/ai/src/index.ts +1 -13
- package/packages/ai/src/models.ts +41 -407
- package/packages/ai/src/providers/all.ts +3 -31
- package/packages/ai/src/providers/openrouter.models.ts +14 -0
- package/packages/ai/src/types.ts +0 -104
- package/packages/ai/src/utils/diagnostics.ts +0 -32
- package/packages/ai/src/utils/headers.ts +0 -11
- package/packages/ai/src/utils/overflow.ts +0 -7
- package/packages/ai/src/utils/validation.ts +0 -15
- package/packages/ragents/package.json +3 -6
- package/packages/ragents/src/access.ts +2 -1
- package/packages/ragents/src/agents/actor-input.ts +14 -18
- package/packages/ragents/src/agents/catalog.ts +3 -3
- package/packages/ragents/src/agents/plugins.ts +0 -4
- package/packages/ragents/src/agents/scheduler.ts +232 -78
- package/packages/ragents/src/agents/schemas.ts +1 -36
- package/packages/ragents/src/agents/tool-orientation.ts +1 -1
- package/packages/ragents/src/agents/tools.ts +72 -73
- package/packages/ragents/src/agents/toolset.ts +5 -5
- package/packages/ragents/src/agents/turn.ts +2 -14
- package/packages/ragents/src/agents/workspaces.ts +18 -0
- package/packages/ragents/src/domain/actor-reference.ts +22 -0
- package/packages/ragents/src/domain/driver.ts +0 -9
- package/packages/ragents/src/domain/event-semantics.ts +62 -74
- package/packages/ragents/src/domain/event-validation.ts +22 -21
- package/packages/ragents/src/domain/events.ts +19 -7
- package/packages/ragents/src/domain/json.ts +2 -0
- package/packages/ragents/src/domain/model.ts +40 -18
- package/packages/ragents/src/domain/projection.ts +43 -15
- package/packages/ragents/src/domain/schema-errors.ts +3 -3
- package/packages/ragents/src/drivers/agent-hooks.ts +40 -0
- package/packages/ragents/src/drivers/agent-runtime.ts +118 -186
- package/packages/ragents/src/drivers/agent.ts +5 -20
- package/packages/ragents/src/drivers/attachments.ts +4 -24
- package/packages/ragents/src/drivers/skill-preload.ts +4 -16
- package/packages/ragents/src/drivers/types.ts +20 -3
- package/packages/ragents/src/http/contracts.ts +16 -3
- package/packages/ragents/src/http/methods.ts +32 -33
- package/packages/ragents/src/index.ts +5 -15
- package/packages/ragents/src/plugin-host.ts +151 -105
- package/packages/ragents/src/plugin-types.ts +86 -23
- package/packages/ragents/src/rpc/peer.ts +6 -0
- package/packages/ragents/src/runtime/decisions/actions.ts +40 -37
- package/packages/ragents/src/runtime/decisions/actors.ts +90 -51
- package/packages/ragents/src/runtime/decisions/artifacts.ts +2 -2
- package/packages/ragents/src/runtime/decisions/inputs.ts +3 -3
- package/packages/ragents/src/runtime/decisions/subscriptions.ts +9 -7
- package/packages/ragents/src/runtime/decisions/turns.ts +37 -4
- package/packages/ragents/src/runtime/guards.ts +12 -21
- package/packages/ragents/src/runtime/journal-storage.ts +4 -2
- package/packages/ragents/src/runtime/journal.ts +1 -1
- package/packages/ragents/src/runtime/orchestration.ts +31 -14
- package/packages/ragents/src/runtime/serial-queue.ts +24 -0
- package/packages/ragents/src/runtime/stop.ts +19 -44
- package/packages/ragents/src/script/mediators.ts +4 -5
- package/packages/ragents/src/typescript/index.ts +2 -0
- package/packages/ragents/src/typescript/run-context.ts +10 -8
- package/packages/ragents/src/typescript/snippet.ts +7 -6
- package/packages/workspace-executor/package.json +2 -2
- package/packages/workspace-executor/src/bash-launch.ts +45 -0
- package/packages/workspace-executor/src/browser/contract.ts +71 -0
- package/packages/workspace-executor/src/browser/module.ts +74 -0
- package/packages/workspace-executor/src/browser/pages.ts +298 -0
- package/packages/workspace-executor/src/browser/playwright.ts +52 -0
- package/packages/workspace-executor/src/commands.ts +170 -0
- package/packages/workspace-executor/src/context.ts +34 -6
- package/packages/workspace-executor/src/errors.ts +12 -0
- package/packages/workspace-executor/src/executor.ts +62 -104
- package/packages/workspace-executor/src/files.ts +287 -0
- package/packages/workspace-executor/src/index.ts +82 -18
- package/packages/workspace-executor/src/language-server/adapters/roslyn.ts +1 -0
- package/packages/workspace-executor/src/language-server/contract.ts +14 -0
- package/packages/workspace-executor/src/language-server/host.ts +82 -26
- package/packages/workspace-executor/src/language-server/module.ts +107 -0
- package/packages/workspace-executor/src/language-server/workspace-solutions.ts +90 -0
- package/packages/workspace-executor/src/managed-process.ts +1 -1
- package/packages/workspace-executor/src/module.ts +35 -0
- package/packages/workspace-executor/src/modules.ts +25 -0
- package/packages/workspace-executor/src/paths.ts +57 -5
- package/packages/workspace-executor/src/process-sandbox.ts +16 -0
- package/packages/workspace-executor/src/processes/module.ts +48 -0
- package/{plugins/ragents.processes/server → packages/workspace-executor/src/processes}/process-table.ts +80 -57
- package/packages/workspace-executor/src/processes/scanner.ts +106 -0
- package/{plugins/ragents.processes/server → packages/workspace-executor/src/processes}/snapshot.ts +23 -11
- package/{plugins/ragents.processes/server → packages/workspace-executor/src/processes}/terminator.ts +19 -20
- package/packages/workspace-executor/src/run-folders.ts +33 -0
- package/packages/workspace-executor/src/safe-environment.ts +14 -0
- package/packages/workspace-executor/src/sandbox-tools.ts +206 -36
- package/packages/workspace-executor/src/shell-platform.ts +2 -2
- package/plugins/package.json +1 -1
- package/plugins/ragents.activity/ragents-plugin.json +3 -0
- package/plugins/ragents.activity/server/index.ts +2 -2
- package/plugins/ragents.activity/web/ActivityHeader.tsx +2 -2
- package/plugins/ragents.activity/web/activity.ts +1 -1
- package/plugins/ragents.activity/web/index.tsx +1 -1
- package/plugins/ragents.actor-programs/prompt.hbs +8 -7
- package/plugins/ragents.actor-programs/ragents-plugin.json +3 -0
- package/plugins/ragents.actor-programs/server/agent-tools.ts +3 -3
- package/{apps/server/src/plugin-support/actor-programs → plugins/ragents.actor-programs/server}/capability-resolver.ts +1 -16
- package/plugins/ragents.actor-programs/server/controls-template.ts +5 -18
- package/plugins/ragents.actor-programs/server/controls-tool.ts +8 -11
- package/plugins/ragents.actor-programs/server/index.ts +10 -10
- package/{apps/server/src/plugin-support/actor-programs → plugins/ragents.actor-programs/server}/limits.ts +4 -4
- package/plugins/ragents.actor-programs/server/methods.ts +2 -2
- package/{apps/server/src/plugin-support/actor-programs → plugins/ragents.actor-programs/server}/operations.ts +2 -4
- package/plugins/ragents.actor-programs/server/project-diagnostics.ts +65 -70
- package/plugins/ragents.actor-programs/server/prompts.ts +4 -4
- package/plugins/ragents.actor-programs/server/routes.ts +14 -8
- package/plugins/ragents.actor-programs/server/runtime.ts +132 -55
- package/plugins/ragents.actor-programs/server/templates.ts +35 -80
- package/plugins/ragents.actor-programs/server/test-report.ts +106 -0
- package/plugins/ragents.actor-programs/server/tool-contributor.ts +4 -4
- package/plugins/ragents.actor-programs/summary.hbs +1 -1
- package/plugins/ragents.actor-programs/web/ActorViewFrame.tsx +15 -10
- package/plugins/ragents.actor-programs/web/AppsPanel.tsx +47 -30
- package/plugins/ragents.actor-programs/web/EmbeddedApps.tsx +15 -17
- package/plugins/ragents.actor-programs/web/FullscreenHost.tsx +3 -3
- package/plugins/ragents.actor-programs/web/FunctionForm.tsx +3 -3
- package/plugins/ragents.actor-programs/web/ProgramSource.tsx +12 -3
- package/plugins/ragents.actor-programs/web/api.ts +5 -5
- package/plugins/ragents.actor-programs/web/bridge.ts +2 -3
- package/plugins/ragents.actor-programs/web/chat-state.ts +9 -8
- package/plugins/ragents.actor-programs/web/index.tsx +7 -17
- package/plugins/ragents.actor-programs/web/program-state.ts +3 -3
- package/plugins/ragents.actor-programs/web/state-revision.ts +2 -2
- package/plugins/ragents.ask/ask-payload.ts +25 -0
- package/plugins/ragents.ask/contract.ts +2 -2
- package/plugins/ragents.ask/ragents-plugin.json +7 -0
- package/plugins/ragents.ask/server/answer-method.ts +1 -1
- package/plugins/ragents.ask/server/ask-service.ts +43 -19
- package/plugins/ragents.ask/server/ask-tool.ts +2 -2
- package/plugins/ragents.ask/server/contract.ts +9 -1
- package/plugins/ragents.ask/server/index.ts +8 -10
- package/plugins/ragents.ask/server/tool-contributor.ts +3 -3
- package/plugins/ragents.ask/web/AskActionView.tsx +36 -0
- package/{apps/web/src/chat → plugins/ragents.ask/web}/QuestionCard.tsx +7 -5
- package/plugins/ragents.ask/web/QuestionSection.tsx +22 -21
- package/plugins/ragents.ask/web/api.ts +1 -1
- package/plugins/ragents.ask/web/index.tsx +11 -8
- package/plugins/ragents.browser/provision.ts +9 -8
- package/plugins/ragents.browser/ragents-plugin.json +6 -0
- package/plugins/ragents.browser/server/browser.ts +165 -286
- package/plugins/ragents.browser/server/contract.ts +8 -19
- package/plugins/ragents.browser/server/index.ts +8 -7
- package/plugins/ragents.browser/server/tools.ts +29 -37
- package/plugins/ragents.browser/skills/browser-testing/SKILL.md +3 -1
- package/plugins/ragents.documents/contract.ts +4 -2
- package/plugins/ragents.documents/ragents-plugin.json +6 -0
- package/plugins/ragents.documents/server/config.ts +1 -1
- package/plugins/ragents.documents/server/document-write-tool.ts +2 -2
- package/plugins/ragents.documents/server/files-route.ts +2 -3
- package/plugins/ragents.documents/server/index.ts +10 -11
- package/plugins/ragents.documents/server/show-document-tool.ts +2 -2
- package/plugins/ragents.documents/server/store.ts +3 -3
- package/plugins/ragents.documents/server/tool-contributor.ts +3 -3
- package/plugins/ragents.documents/web/DocumentViewer.tsx +5 -6
- package/plugins/ragents.documents/web/api.ts +1 -1
- package/plugins/ragents.documents/web/index.tsx +4 -4
- package/plugins/ragents.lsp-fsharp/provision.ts +2 -2
- package/plugins/ragents.lsp-fsharp/ragents-plugin.json +3 -0
- package/plugins/ragents.lsp-fsharp/server/index.ts +3 -3
- package/plugins/ragents.lsp-fsharp/web/index.tsx +1 -1
- package/plugins/ragents.lsp-roslyn/provision.ts +2 -2
- package/plugins/ragents.lsp-roslyn/ragents-plugin.json +3 -0
- package/plugins/ragents.lsp-roslyn/server/index.ts +47 -8
- package/plugins/ragents.lsp-roslyn/server/solution-on-start.ts +145 -0
- package/plugins/ragents.lsp-roslyn/web/index.tsx +1 -1
- package/plugins/ragents.lsp-typescript/ragents-plugin.json +3 -0
- package/plugins/ragents.lsp-typescript/server/index.ts +3 -3
- package/plugins/ragents.lsp-typescript/web/index.tsx +1 -1
- package/plugins/ragents.model-relay/ragents-plugin.json +3 -0
- package/plugins/ragents.model-relay/server/config.ts +5 -31
- package/plugins/ragents.model-relay/server/index.ts +5 -6
- package/plugins/ragents.model-relay/server/relay.ts +8 -9
- package/plugins/ragents.orchestration/contract.ts +13 -14
- package/plugins/ragents.orchestration/orchestration.hbs +4 -3
- package/plugins/ragents.orchestration/ragents-plugin.json +6 -0
- package/plugins/ragents.orchestration/server/index.ts +13 -16
- package/plugins/ragents.orchestration/server/run-stop-tool.ts +4 -4
- package/plugins/ragents.orchestration/server/{canvas-tool.ts → surface-tool.ts} +42 -43
- package/plugins/ragents.orchestration/surface.hbs +34 -0
- package/plugins/ragents.orchestration/tiled-layout.ts +16 -16
- package/plugins/ragents.orchestration/web/ActorChat.tsx +16 -14
- package/plugins/ragents.orchestration/web/ActorChatControls.tsx +23 -26
- package/plugins/ragents.orchestration/web/ActorChatPreview.tsx +5 -6
- package/plugins/ragents.orchestration/web/ActorPopout.tsx +7 -5
- package/plugins/ragents.orchestration/web/ActorShortcut.tsx +16 -16
- package/plugins/ragents.orchestration/web/{ActorCanvasControls.tsx → ActorSurfaceControls.tsx} +23 -28
- package/plugins/ragents.orchestration/web/ActorTile.tsx +2 -2
- package/plugins/ragents.orchestration/web/Center.tsx +47 -55
- package/plugins/ragents.orchestration/web/DocumentsSection.tsx +4 -4
- package/plugins/ragents.orchestration/web/ExecutionsPanel.tsx +7 -7
- package/plugins/ragents.orchestration/web/FlowInspector.tsx +24 -42
- package/plugins/ragents.orchestration/web/JournalStatus.tsx +8 -8
- package/plugins/ragents.orchestration/web/MaterialBody.tsx +5 -5
- package/plugins/ragents.orchestration/web/StopRunButton.tsx +6 -6
- package/plugins/ragents.orchestration/web/SurfaceStartup.tsx +8 -0
- package/plugins/ragents.orchestration/web/{CanvasTiles.tsx → SurfaceTiles.tsx} +18 -18
- package/plugins/ragents.orchestration/web/{TiledCanvas.tsx → TiledSurface.tsx} +22 -22
- package/plugins/ragents.orchestration/web/actor-header-settings.ts +2 -2
- package/plugins/ragents.orchestration/web/api.ts +4 -10
- package/plugins/ragents.orchestration/web/constants.ts +0 -1
- package/plugins/ragents.orchestration/web/executions.ts +3 -3
- package/plugins/ragents.orchestration/web/index.tsx +19 -124
- package/plugins/ragents.orchestration/web/program-slot.ts +14 -0
- package/plugins/ragents.orchestration/web/run-panel/AddresseeControl.tsx +95 -0
- package/plugins/ragents.orchestration/web/run-panel/AddresseeTree.tsx +109 -0
- package/plugins/ragents.orchestration/web/{column/RunColumn.tsx → run-panel/RunPanel.tsx} +211 -83
- package/plugins/ragents.orchestration/web/{column/ColumnSettings.tsx → run-panel/RunPanelSettings.tsx} +13 -13
- package/plugins/ragents.orchestration/web/run-panel/addressee-tree.ts +165 -0
- package/plugins/ragents.orchestration/web/{column/column-actors.ts → run-panel/run-panel-actors.ts} +14 -13
- package/plugins/ragents.orchestration/web/run-panel/run-panel-settings.ts +47 -0
- package/plugins/ragents.orchestration/web/run-panel/run-panel-startup.ts +30 -0
- package/plugins/ragents.orchestration/web/run-panel/run-panel-state.ts +71 -0
- package/plugins/ragents.orchestration/web/{column → run-panel}/sheet-status.ts +4 -4
- package/plugins/ragents.orchestration/web/{canvas-stage.ts → surface-entities.ts} +2 -2
- package/plugins/ragents.orchestration/web/{canvas-startup.ts → surface-startup.ts} +7 -10
- package/plugins/ragents.orchestration/web/surface-view-settings.ts +42 -0
- package/plugins/ragents.orchestration/web/tile-docking.ts +14 -14
- package/plugins/ragents.orchestration/web/tiled-view-settings.ts +26 -26
- package/plugins/ragents.overseer/contract.ts +20 -14
- package/plugins/ragents.overseer/ragents-plugin.json +3 -0
- package/plugins/ragents.overseer/server/api.ts +34 -23
- package/plugins/ragents.overseer/server/coordinator-prompt.ts +3 -3
- package/plugins/ragents.overseer/server/coordinator.ts +19 -0
- package/plugins/ragents.overseer/server/index.ts +39 -27
- package/plugins/ragents.overseer/server/orientation.ts +4 -5
- package/plugins/ragents.overseer/server/quick-answer.ts +5 -4
- package/plugins/ragents.overseer/server/reset-method.ts +4 -3
- package/plugins/ragents.overseer/server/run-directory.ts +5 -5
- package/plugins/ragents.overseer/server/settings-method.ts +1 -1
- package/plugins/ragents.overseer/server/settings.ts +6 -6
- package/plugins/ragents.overseer/server/user-location.ts +20 -19
- package/plugins/ragents.overseer/web/ModelSettings.tsx +4 -4
- package/plugins/ragents.overseer/web/chat-display.ts +1 -1
- package/plugins/ragents.overseer/web/index.tsx +51 -26
- package/plugins/ragents.overseer/web/model-settings.ts +1 -1
- package/plugins/ragents.overseer/web/quick-answers.ts +2 -2
- package/plugins/ragents.processes/contract.ts +5 -5
- package/plugins/ragents.processes/ragents-plugin.json +3 -0
- package/plugins/ragents.processes/server/index.ts +13 -19
- package/plugins/ragents.processes/server/methods.ts +18 -20
- package/plugins/ragents.processes/server/observer.ts +64 -104
- package/plugins/ragents.processes/server/run-processes.ts +24 -0
- package/plugins/ragents.processes/web/ProcessHeader.tsx +13 -16
- package/plugins/ragents.processes/web/index.tsx +2 -1
- package/plugins/ragents.processes/web/processes.ts +1 -1
- package/plugins/ragents.product/ragents-plugin.json +3 -0
- package/plugins/ragents.product/server/config.ts +12 -13
- package/plugins/ragents.product/server/index.ts +15 -16
- package/plugins/ragents.product/server/runtime.ts +2 -2
- package/plugins/ragents.product/web/index.tsx +3 -3
- package/plugins/ragents.profile-distribution/contract.ts +6 -9
- package/plugins/ragents.profile-distribution/ragents-plugin.json +3 -0
- package/plugins/ragents.profile-distribution/server/archive.ts +26 -51
- package/plugins/ragents.profile-distribution/server/config.ts +2 -2
- package/plugins/ragents.profile-distribution/server/index.ts +9 -16
- package/plugins/ragents.reference/examples.ts +1 -1
- package/plugins/ragents.reference/ragents-plugin.json +3 -0
- package/plugins/ragents.reference/run-scripts/balcony-wizard/RUN.md +2 -2
- package/plugins/ragents.reference/run-scripts/balcony-wizard/actors/balcony-app/src/client.tsx +1 -1
- package/plugins/ragents.reference/run-scripts/balcony-wizard/src/server.ts +1 -1
- package/plugins/ragents.reference/run-scripts/balcony-wizard/tests/program.test.ts +4 -4
- package/plugins/ragents.reference/run-scripts/conversation-circle/RUN.md +1 -1
- package/plugins/ragents.reference/run-scripts/conversation-circle/src/server.ts +1 -1
- package/plugins/ragents.reference/run-scripts/conversation-circle/tests/helpers.ts +1 -1
- package/plugins/ragents.reference/run-scripts/learning-afternoon/RUN.md +2 -2
- package/plugins/ragents.reference/run-scripts/learning-afternoon/src/client.tsx +1 -1
- package/plugins/ragents.reference/run-scripts/learning-afternoon/src/server.ts +1 -1
- package/plugins/ragents.reference/run-scripts/learning-afternoon/src/state.ts +2 -2
- package/plugins/ragents.reference/run-scripts/learning-afternoon/src/view.tsx +11 -11
- package/plugins/ragents.reference/run-scripts/learning-afternoon/src/workflow.ts +15 -15
- package/plugins/ragents.reference/run-scripts/learning-afternoon/tests/program.test.ts +3 -8
- package/plugins/ragents.reference/run-scripts/moderated-round/src/server.ts +1 -1
- package/plugins/ragents.reference/run-scripts/moderated-round/tests/helpers.ts +1 -1
- package/plugins/ragents.reference/run-scripts/moderated-round/tests/program.test.ts +2 -2
- package/plugins/ragents.reference/run-scripts/shared-actor-list/actors/shared-list/src/client.tsx +6 -6
- package/plugins/ragents.reference/run-scripts/shared-actor-list/src/server.ts +3 -3
- package/plugins/ragents.reference/run-scripts/shared-actor-list/tests/helpers.ts +1 -1
- package/plugins/ragents.reference/run-scripts/word-game/RUN.md +1 -1
- package/plugins/ragents.reference/run-scripts/word-game/src/client.tsx +1 -1
- package/plugins/ragents.reference/run-scripts/word-game/src/server.ts +1 -2
- package/plugins/ragents.reference/run-scripts/word-game/src/state.ts +6 -6
- package/plugins/ragents.reference/run-scripts/word-game/src/view.tsx +14 -14
- package/plugins/ragents.reference/run-scripts/word-game/tests/program.test.ts +4 -5
- package/plugins/ragents.reference/server/index.ts +2 -2
- package/plugins/ragents.reference/skills/160-learning-companion/SKILL.md +1 -1
- package/plugins/ragents.reference/skills/240-live-result-list/SKILL.md +1 -1
- package/plugins/ragents.reference/skills/250-balcony-wizard/SKILL.md +1 -1
- package/plugins/ragents.reference/skills/90-actor-notes/SKILL.md +1 -1
- package/plugins/ragents.reference/skills/95-hello-world/SKILL.md +2 -2
- package/plugins/ragents.reference/skills/decision-brief/SKILL.md +2 -2
- package/plugins/ragents.reference/walkthroughs.ts +26 -26
- package/plugins/ragents.reference/web/StartGuides.tsx +2 -2
- package/plugins/ragents.reference/web/index.tsx +1 -1
- package/plugins/ragents.todo/ragents-plugin.json +3 -0
- package/plugins/ragents.todo/server/index.ts +2 -2
- package/plugins/ragents.todo/server/todo-tool.ts +4 -5
- package/plugins/ragents.todo/server/tool-contributor.ts +2 -2
- package/plugins/ragents.todo/web/TodoSection.tsx +3 -3
- package/plugins/ragents.todo/web/index.ts +1 -1
- package/plugins/ragents.transcript/ragents-plugin.json +3 -0
- package/plugins/ragents.transcript/server/index.ts +4 -4
- package/plugins/ragents.transcript/server/transcript.ts +2 -3
- package/plugins/ragents.watch/ragents-plugin.json +6 -0
- package/plugins/ragents.watch/server/condition.ts +2 -2
- package/plugins/ragents.watch/server/contract.ts +1 -1
- package/plugins/ragents.watch/server/functions.ts +3 -3
- package/plugins/ragents.watch/server/index.ts +3 -3
- package/plugins/ragents.watch/server/observation.ts +6 -6
- package/plugins/ragents.watch/server/service.ts +5 -5
- package/plugins/ragents.workspace/client/workspace-client.ts +129 -58
- package/plugins/ragents.workspace/contract.ts +98 -35
- package/plugins/ragents.workspace/prompt.hbs +1 -8
- package/plugins/ragents.workspace/ragents-plugin.json +3 -0
- package/plugins/ragents.workspace/server/binding.ts +122 -39
- package/plugins/ragents.workspace/server/browse-route.ts +96 -103
- package/plugins/ragents.workspace/server/clients.ts +236 -68
- package/plugins/ragents.workspace/server/config.ts +30 -0
- package/plugins/ragents.workspace/server/index.ts +61 -26
- package/plugins/ragents.workspace/server/runtime.ts +271 -46
- package/{apps/server/src/plugin-support → plugins/ragents.workspace/server}/shell-platform.ts +3 -5
- package/{apps/server/src/plugin-support → plugins/ragents.workspace/server}/workspace-tool-naming.ts +7 -1
- package/plugins/ragents.workspace/web/FileBrowser.tsx +11 -8
- package/plugins/ragents.workspace/web/WorkspaceBinding.tsx +115 -61
- package/plugins/ragents.workspace/web/api.ts +1 -1
- package/plugins/ragents.workspace/web/index.tsx +1 -1
- package/ragents.config.core.ts +2 -8
- package/ragents.config.showcase.ts +61 -0
- package/scripts/agent/agent-cli.ts +265 -107
- package/scripts/agent/journal.ts +3 -1
- package/scripts/agent/turn-control.ts +19 -0
- package/scripts/package/build-package.ts +70 -15
- package/scripts/package/ragents.mjs +4 -2
- package/scripts/plugin/build-builtin-plugins.ts +52 -0
- package/scripts/plugin/plugin-cli.ts +99 -0
- package/scripts/provision/run-provision.ts +20 -18
- package/scripts/remote/connect.ts +75 -53
- package/scripts/remote/start.ts +3 -4
- package/scripts/workspace-client/run-workspace-client.ts +15 -9
- package/apps/server/agent-home/settings.json +0 -3
- package/apps/server/src/chat-attachments.ts +0 -52
- package/apps/server/src/chat-events.ts +0 -185
- package/apps/server/src/plugin-support/asset-path.ts +0 -4
- package/apps/server/src/profile/plugin-list.ts +0 -19
- package/apps/server/src/web-build.ts +0 -82
- package/apps/web/column.html +0 -12
- package/apps/web/index.html +0 -12
- package/apps/web/src/StartSurface.tsx +0 -161
- package/apps/web/src/chat/ChatInputToolbar.tsx +0 -488
- package/apps/web/src/chat/ChatMessages.tsx +0 -666
- package/apps/web/src/chat/ChatPanel.tsx +0 -61
- package/apps/web/src/chat/DetailModeSwitch.tsx +0 -58
- package/apps/web/src/chat/Markdown.tsx +0 -104
- package/apps/web/src/chat/StepPopover.tsx +0 -82
- package/apps/web/src/chat/WorkingScenes.tsx +0 -235
- package/apps/web/src/chat/attachments.ts +0 -53
- package/apps/web/src/chat/chat-scroll.ts +0 -41
- package/apps/web/src/chat/texts.ts +0 -61
- package/apps/web/src/chat/types.ts +0 -26
- package/apps/web/src/column/ColumnApp.tsx +0 -234
- package/apps/web/src/column/column-location.ts +0 -30
- package/apps/web/src/column/host-contract.ts +0 -93
- package/apps/web/src/panel/OverviewPage.tsx +0 -215
- package/apps/web/src/panel/SettingsPage.tsx +0 -98
- package/apps/web/src/panel/target-state.ts +0 -78
- package/apps/web/src/plugin-discovery.ts +0 -5
- package/apps/web/src/virtual-plugins.d.ts +0 -3
- package/apps/web/vite.config.ts +0 -140
- package/packages/agent/src/config.ts +0 -161
- package/packages/agent/src/core/auth-storage.ts +0 -271
- package/packages/agent/src/core/bash-executor.ts +0 -156
- package/packages/agent/src/core/compaction/branch-summarization.ts +0 -372
- package/packages/agent/src/core/diagnostics.ts +0 -15
- package/packages/agent/src/core/event-bus.ts +0 -33
- package/packages/agent/src/core/exec.ts +0 -107
- package/packages/agent/src/core/experimental.ts +0 -3
- package/packages/agent/src/core/footer-data-provider.ts +0 -388
- package/packages/agent/src/core/http-dispatcher.ts +0 -106
- package/packages/agent/src/core/index.ts +0 -78
- package/packages/agent/src/core/model-config.ts +0 -287
- package/packages/agent/src/core/model-registry.ts +0 -126
- package/packages/agent/src/core/model-resolver.ts +0 -675
- package/packages/agent/src/core/output-guard.ts +0 -108
- package/packages/agent/src/core/package-manager.ts +0 -2441
- package/packages/agent/src/core/prompt-templates.ts +0 -284
- package/packages/agent/src/core/resolve-config-value.ts +0 -287
- package/packages/agent/src/core/runtime-credentials.ts +0 -48
- package/packages/agent/src/core/session-cwd.ts +0 -59
- package/packages/agent/src/core/settings-manager.ts +0 -1212
- package/packages/agent/src/core/slash-commands.ts +0 -41
- package/packages/agent/src/core/timings.ts +0 -50
- package/packages/agent/src/core/tools/tool-definition-wrapper.ts +0 -45
- package/packages/agent/src/core/trust-manager.ts +0 -244
- package/packages/agent/src/utils/ansi.ts +0 -60
- package/packages/agent/src/utils/fs-watch.ts +0 -30
- package/packages/agent/src/utils/git.ts +0 -226
- package/packages/agent/src/utils/json.ts +0 -6
- package/packages/agent/src/utils/tools-manager.ts +0 -63
- package/packages/agent-core/package.json +0 -32
- package/packages/ai/src/api/openrouter-images.lazy.ts +0 -10
- package/packages/ai/src/api/openrouter-images.ts +0 -98
- package/packages/ai/src/auth/credential-store.ts +0 -51
- package/packages/ai/src/compat/extension-oauth-types.ts +0 -45
- package/packages/ai/src/image-models.generated.ts +0 -533
- package/packages/ai/src/images-models.ts +0 -274
- package/packages/ai/src/models-store.ts +0 -38
- package/packages/ai/src/oauth.ts +0 -10
- package/packages/ai/src/providers/openrouter-images.ts +0 -14
- package/packages/ai/src/session-resources.ts +0 -24
- package/packages/ai/src/utils/abort-signals.ts +0 -41
- package/packages/ai/src/utils/deferred-tools.ts +0 -39
- package/packages/ai/src/utils/hash.ts +0 -13
- package/packages/ai/src/utils/node-http-proxy.ts +0 -112
- package/plugins/ragents.actor-programs/server/client-runtime.ts +0 -16
- package/plugins/ragents.ask/web/constants.ts +0 -1
- package/plugins/ragents.lsp-roslyn/web/api.ts +0 -10
- package/plugins/ragents.orchestration/web/CanvasStartup.tsx +0 -14
- package/plugins/ragents.orchestration/web/canvas-view-settings.ts +0 -42
- package/plugins/ragents.orchestration/web/column/AddresseeControl.tsx +0 -116
- package/plugins/ragents.orchestration/web/column/column-settings.ts +0 -47
- package/plugins/ragents.orchestration/web/column/column-state.ts +0 -68
- package/plugins/ragents.orchestration/web/contract.ts +0 -25
- package/plugins/ragents.product/model-settings-contract.ts +0 -10
- package/plugins/ragents.profile-distribution/server/web.ts +0 -24
- /package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/authoring-contracts.ts +0 -0
- /package/{plugins/ragents.actor-programs/server → apps/server/src/plugin-support/actor-programs}/runtime-libraries.ts +0 -0
- /package/{plugins/ragents.actor-programs → apps/server/src/plugin-support/actor-programs}/workflow/prompt-reader.ts +0 -0
- /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/file-contracts.d.ts +0 -0
- /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/flow-diagram-contracts.d.ts +0 -0
- /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/flow-diagram.css +0 -0
- /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/form-contracts.d.ts +0 -0
- /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/frame-layout.ts +0 -0
- /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/table-contracts.d.ts +0 -0
- /package/{plugins/ragents.actor-programs → apps/web/src/actor-programs}/client-ui/viewer-contracts.d.ts +0 -0
- /package/{plugins/ragents.orchestration/canvas.hbs → bundles/ragents.orchestration/surface.hbs} +0 -0
- /package/packages/{agent-core/src → agent/src/loop}/index.ts +0 -0
- /package/packages/{agent-core/src → agent/src/loop}/uuid.ts +0 -0
|
@@ -1,31 +1,11 @@
|
|
|
1
|
-
import { type AgentMessage, uuidv7 } from "
|
|
2
|
-
import type { Message
|
|
1
|
+
import { type AgentMessage, uuidv7 } from "../loop/index.ts";
|
|
2
|
+
import type { Message } from "@ragents/ai";
|
|
3
3
|
import { randomUUID } from "crypto";
|
|
4
|
-
import {
|
|
5
|
-
appendFileSync,
|
|
6
|
-
closeSync,
|
|
7
|
-
createReadStream,
|
|
8
|
-
existsSync,
|
|
9
|
-
mkdirSync,
|
|
10
|
-
openSync,
|
|
11
|
-
readdirSync,
|
|
12
|
-
readSync,
|
|
13
|
-
statSync,
|
|
14
|
-
writeFileSync,
|
|
15
|
-
} from "fs";
|
|
16
|
-
import { readdir, stat } from "fs/promises";
|
|
4
|
+
import { appendFileSync, closeSync, existsSync, mkdirSync, openSync, readSync, statSync, writeFileSync } from "fs";
|
|
17
5
|
import { join, resolve } from "path";
|
|
18
|
-
import { createInterface } from "readline";
|
|
19
6
|
import { StringDecoder } from "string_decoder";
|
|
20
|
-
import { getAgentDir as getDefaultAgentDir, getSessionsDir } from "../config.ts";
|
|
21
7
|
import { normalizePath, resolvePath } from "../utils/paths.ts";
|
|
22
|
-
import {
|
|
23
|
-
type BashExecutionMessage,
|
|
24
|
-
type CustomMessage,
|
|
25
|
-
createBranchSummaryMessage,
|
|
26
|
-
createCompactionSummaryMessage,
|
|
27
|
-
createCustomMessage,
|
|
28
|
-
} from "./messages.ts";
|
|
8
|
+
import { type CustomMessage, createCompactionSummaryMessage } from "./messages.ts";
|
|
29
9
|
|
|
30
10
|
export const CURRENT_SESSION_VERSION = 3;
|
|
31
11
|
|
|
@@ -77,16 +57,6 @@ export interface CompactionEntry<T = unknown> extends SessionEntryBase {
|
|
|
77
57
|
fromHook?: boolean;
|
|
78
58
|
}
|
|
79
59
|
|
|
80
|
-
export interface BranchSummaryEntry<T = unknown> extends SessionEntryBase {
|
|
81
|
-
type: "branch_summary";
|
|
82
|
-
fromId: string;
|
|
83
|
-
summary: string;
|
|
84
|
-
/** Extension-specific data (not sent to LLM) */
|
|
85
|
-
details?: T;
|
|
86
|
-
/** True if generated by an extension, false if agent-generated */
|
|
87
|
-
fromHook?: boolean;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
60
|
/**
|
|
91
61
|
* Custom entry for extensions to store extension-specific data in the session.
|
|
92
62
|
* Use customType to identify your extension's entries.
|
|
@@ -103,103 +73,24 @@ export interface CustomEntry<T = unknown> extends SessionEntryBase {
|
|
|
103
73
|
data?: T;
|
|
104
74
|
}
|
|
105
75
|
|
|
106
|
-
/** Label entry for user-defined bookmarks/markers on entries. */
|
|
107
|
-
export interface LabelEntry extends SessionEntryBase {
|
|
108
|
-
type: "label";
|
|
109
|
-
targetId: string;
|
|
110
|
-
label: string | undefined;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/** Session metadata entry (e.g., user-defined display name). */
|
|
114
|
-
export interface SessionInfoEntry extends SessionEntryBase {
|
|
115
|
-
type: "session_info";
|
|
116
|
-
name?: string;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Custom message entry for extensions to inject messages into LLM context.
|
|
121
|
-
* Use customType to identify your extension's entries.
|
|
122
|
-
*
|
|
123
|
-
* Unlike CustomEntry, this DOES participate in LLM context.
|
|
124
|
-
* The content is converted to a user message in buildSessionContext().
|
|
125
|
-
* Use details for extension-specific metadata (not sent to LLM).
|
|
126
|
-
*
|
|
127
|
-
* display controls TUI rendering:
|
|
128
|
-
* - false: hidden entirely
|
|
129
|
-
* - true: rendered with distinct styling (different from user messages)
|
|
130
|
-
*/
|
|
131
|
-
export interface CustomMessageEntry<T = unknown> extends SessionEntryBase {
|
|
132
|
-
type: "custom_message";
|
|
133
|
-
customType: string;
|
|
134
|
-
content: string | UserContent[];
|
|
135
|
-
details?: T;
|
|
136
|
-
display: boolean;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
76
|
/** Session entry - has id/parentId for tree structure (returned by "read" methods in SessionManager) */
|
|
140
77
|
export type SessionEntry =
|
|
141
78
|
| SessionMessageEntry
|
|
142
79
|
| ThinkingLevelChangeEntry
|
|
143
80
|
| ModelChangeEntry
|
|
144
81
|
| CompactionEntry
|
|
145
|
-
|
|
|
146
|
-
| CustomEntry
|
|
147
|
-
| CustomMessageEntry
|
|
148
|
-
| LabelEntry
|
|
149
|
-
| SessionInfoEntry;
|
|
82
|
+
| CustomEntry;
|
|
150
83
|
|
|
151
84
|
/** Raw file entry (includes header) */
|
|
152
85
|
export type FileEntry = SessionHeader | SessionEntry;
|
|
153
86
|
|
|
154
|
-
/** Tree node for getTree() - defensive copy of session structure */
|
|
155
|
-
export interface SessionTreeNode {
|
|
156
|
-
entry: SessionEntry;
|
|
157
|
-
children: SessionTreeNode[];
|
|
158
|
-
/** Resolved label for this entry, if any */
|
|
159
|
-
label?: string;
|
|
160
|
-
/** Timestamp of the latest label change for this entry, if any */
|
|
161
|
-
labelTimestamp?: string;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
87
|
export interface SessionContext {
|
|
165
88
|
messages: AgentMessage[];
|
|
166
89
|
thinkingLevel: string;
|
|
167
90
|
model: { provider: string; modelId: string } | null;
|
|
168
91
|
}
|
|
169
92
|
|
|
170
|
-
export
|
|
171
|
-
path: string;
|
|
172
|
-
id: string;
|
|
173
|
-
/** Working directory where the session was started. Empty string for old sessions. */
|
|
174
|
-
cwd: string;
|
|
175
|
-
/** User-defined display name from session_info entries. */
|
|
176
|
-
name?: string;
|
|
177
|
-
/** Path to the parent session (if this session was forked). */
|
|
178
|
-
parentSessionPath?: string;
|
|
179
|
-
created: Date;
|
|
180
|
-
modified: Date;
|
|
181
|
-
messageCount: number;
|
|
182
|
-
firstMessage: string;
|
|
183
|
-
allMessagesText: string;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
export type ReadonlySessionManager = Pick<
|
|
187
|
-
SessionManager,
|
|
188
|
-
| "getCwd"
|
|
189
|
-
| "getSessionDir"
|
|
190
|
-
| "getSessionId"
|
|
191
|
-
| "getSessionFile"
|
|
192
|
-
| "getLeafId"
|
|
193
|
-
| "getLeafEntry"
|
|
194
|
-
| "getEntry"
|
|
195
|
-
| "getLabel"
|
|
196
|
-
| "getBranch"
|
|
197
|
-
| "buildContextEntries"
|
|
198
|
-
| "getHeader"
|
|
199
|
-
| "getEntries"
|
|
200
|
-
| "getTree"
|
|
201
|
-
| "getSessionName"
|
|
202
|
-
>;
|
|
93
|
+
export type ReadonlySessionManager = Pick<SessionManager, "getBranch">;
|
|
203
94
|
|
|
204
95
|
function createSessionId(): string {
|
|
205
96
|
return uuidv7();
|
|
@@ -286,29 +177,6 @@ function migrateToCurrentVersion(entries: FileEntry[]): boolean {
|
|
|
286
177
|
return true;
|
|
287
178
|
}
|
|
288
179
|
|
|
289
|
-
/** Exported for testing */
|
|
290
|
-
export function migrateSessionEntries(entries: FileEntry[]): void {
|
|
291
|
-
migrateToCurrentVersion(entries);
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
/** Exported for compaction.test.ts */
|
|
295
|
-
export function parseSessionEntries(content: string): FileEntry[] {
|
|
296
|
-
const entries: FileEntry[] = [];
|
|
297
|
-
const lines = content.trim().split("\n");
|
|
298
|
-
|
|
299
|
-
for (const line of lines) {
|
|
300
|
-
if (!line.trim()) continue;
|
|
301
|
-
try {
|
|
302
|
-
const entry = JSON.parse(line) as FileEntry;
|
|
303
|
-
entries.push(entry);
|
|
304
|
-
} catch {
|
|
305
|
-
// Skip malformed lines
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
return entries;
|
|
310
|
-
}
|
|
311
|
-
|
|
312
180
|
export function getLatestCompactionEntry(entries: SessionEntry[]): CompactionEntry | null {
|
|
313
181
|
for (let i = entries.length - 1; i >= 0; i--) {
|
|
314
182
|
if (entries[i].type === "compaction") {
|
|
@@ -389,14 +257,6 @@ export function sessionEntryToContextMessages(entry: SessionEntry): AgentMessage
|
|
|
389
257
|
}
|
|
390
258
|
return [message];
|
|
391
259
|
}
|
|
392
|
-
if (entry.type === "custom_message") {
|
|
393
|
-
return [
|
|
394
|
-
createCustomMessage(entry.customType, entry.content ?? [], entry.display, entry.details, entry.timestamp),
|
|
395
|
-
];
|
|
396
|
-
}
|
|
397
|
-
if (entry.type === "branch_summary" && entry.summary) {
|
|
398
|
-
return [createBranchSummaryMessage(entry.summary, entry.fromId, entry.timestamp)];
|
|
399
|
-
}
|
|
400
260
|
if (entry.type === "compaction") {
|
|
401
261
|
return [createCompactionSummaryMessage(entry.summary, entry.tokensBefore, entry.timestamp)];
|
|
402
262
|
}
|
|
@@ -465,25 +325,6 @@ export function buildSessionContext(
|
|
|
465
325
|
return { messages, thinkingLevel, model };
|
|
466
326
|
}
|
|
467
327
|
|
|
468
|
-
/**
|
|
469
|
-
* Compute the default session directory for a cwd.
|
|
470
|
-
* Encodes cwd into a safe directory name under ~/.agent/sessions/.
|
|
471
|
-
*/
|
|
472
|
-
function getDefaultSessionDirPath(cwd: string, agentDir: string = getDefaultAgentDir()): string {
|
|
473
|
-
const resolvedCwd = resolvePath(cwd);
|
|
474
|
-
const resolvedAgentDir = resolvePath(agentDir);
|
|
475
|
-
const safePath = `--${resolvedCwd.replace(/^[/\\]/, "").replace(/[/\\:]/g, "-")}--`;
|
|
476
|
-
return join(resolvedAgentDir, "sessions", safePath);
|
|
477
|
-
}
|
|
478
|
-
|
|
479
|
-
export function getDefaultSessionDir(cwd: string, agentDir: string = getDefaultAgentDir()): string {
|
|
480
|
-
const sessionDir = getDefaultSessionDirPath(cwd, agentDir);
|
|
481
|
-
if (!existsSync(sessionDir)) {
|
|
482
|
-
mkdirSync(sessionDir, { recursive: true });
|
|
483
|
-
}
|
|
484
|
-
return sessionDir;
|
|
485
|
-
}
|
|
486
|
-
|
|
487
328
|
const SESSION_READ_BUFFER_SIZE = 1024 * 1024;
|
|
488
329
|
|
|
489
330
|
function parseSessionEntryLine(line: string): FileEntry | null {
|
|
@@ -541,242 +382,6 @@ export function loadEntriesFromFile(filePath: string): FileEntry[] {
|
|
|
541
382
|
return entries;
|
|
542
383
|
}
|
|
543
384
|
|
|
544
|
-
function readSessionHeader(filePath: string): SessionHeader | null {
|
|
545
|
-
try {
|
|
546
|
-
const fd = openSync(filePath, "r");
|
|
547
|
-
const buffer = Buffer.alloc(512);
|
|
548
|
-
const bytesRead = readSync(fd, buffer, 0, 512, 0);
|
|
549
|
-
closeSync(fd);
|
|
550
|
-
const firstLine = buffer.toString("utf8", 0, bytesRead).split("\n")[0];
|
|
551
|
-
if (!firstLine) return null;
|
|
552
|
-
const header = JSON.parse(firstLine) as Record<string, unknown>;
|
|
553
|
-
if (header.type !== "session" || typeof header.id !== "string") {
|
|
554
|
-
return null;
|
|
555
|
-
}
|
|
556
|
-
return header as unknown as SessionHeader;
|
|
557
|
-
} catch {
|
|
558
|
-
return null;
|
|
559
|
-
}
|
|
560
|
-
}
|
|
561
|
-
|
|
562
|
-
function getSessionHeaderCwd(header: SessionHeader): string | undefined {
|
|
563
|
-
const cwd = (header as { cwd?: unknown }).cwd;
|
|
564
|
-
return typeof cwd === "string" ? cwd : undefined;
|
|
565
|
-
}
|
|
566
|
-
|
|
567
|
-
function sessionCwdMatches(cwd: string | undefined, resolvedCwd: string): boolean {
|
|
568
|
-
return cwd !== undefined && cwd !== "" && resolvePath(cwd) === resolvedCwd;
|
|
569
|
-
}
|
|
570
|
-
|
|
571
|
-
/** Exported for testing */
|
|
572
|
-
export function findMostRecentSession(sessionDir: string, cwd?: string): string | null {
|
|
573
|
-
const resolvedSessionDir = normalizePath(sessionDir);
|
|
574
|
-
const resolvedCwd = cwd ? resolvePath(cwd) : undefined;
|
|
575
|
-
try {
|
|
576
|
-
const files = readdirSync(resolvedSessionDir)
|
|
577
|
-
.filter((f) => f.endsWith(".jsonl"))
|
|
578
|
-
.map((f) => join(resolvedSessionDir, f))
|
|
579
|
-
.map((path) => ({ path, header: readSessionHeader(path) }))
|
|
580
|
-
.filter(
|
|
581
|
-
(file): file is { path: string; header: SessionHeader } =>
|
|
582
|
-
file.header !== null &&
|
|
583
|
-
(!resolvedCwd || sessionCwdMatches(getSessionHeaderCwd(file.header), resolvedCwd)),
|
|
584
|
-
)
|
|
585
|
-
.map(({ path }) => ({ path, mtime: statSync(path).mtime }))
|
|
586
|
-
.sort((a, b) => b.mtime.getTime() - a.mtime.getTime());
|
|
587
|
-
|
|
588
|
-
return files[0]?.path || null;
|
|
589
|
-
} catch {
|
|
590
|
-
return null;
|
|
591
|
-
}
|
|
592
|
-
}
|
|
593
|
-
|
|
594
|
-
function isMessageWithContent(message: AgentMessage): message is Message {
|
|
595
|
-
return typeof (message as Message).role === "string" && "content" in message;
|
|
596
|
-
}
|
|
597
|
-
|
|
598
|
-
function extractTextContent(message: Message): string {
|
|
599
|
-
const content = message.content;
|
|
600
|
-
if (typeof content === "string") {
|
|
601
|
-
return content;
|
|
602
|
-
}
|
|
603
|
-
return content
|
|
604
|
-
.filter((block): block is TextContent => block.type === "text")
|
|
605
|
-
.map((block) => block.text)
|
|
606
|
-
.join(" ");
|
|
607
|
-
}
|
|
608
|
-
|
|
609
|
-
function getMessageActivityTime(entry: SessionMessageEntry): number | undefined {
|
|
610
|
-
const message = entry.message;
|
|
611
|
-
if (!isMessageWithContent(message)) return undefined;
|
|
612
|
-
if (message.role !== "user" && message.role !== "assistant") return undefined;
|
|
613
|
-
|
|
614
|
-
const msgTimestamp = (message as { timestamp?: number }).timestamp;
|
|
615
|
-
if (typeof msgTimestamp === "number") {
|
|
616
|
-
return msgTimestamp;
|
|
617
|
-
}
|
|
618
|
-
|
|
619
|
-
const t = new Date(entry.timestamp).getTime();
|
|
620
|
-
return Number.isNaN(t) ? undefined : t;
|
|
621
|
-
}
|
|
622
|
-
|
|
623
|
-
async function buildSessionInfo(filePath: string): Promise<SessionInfo | null> {
|
|
624
|
-
try {
|
|
625
|
-
const stats = await stat(filePath);
|
|
626
|
-
let header: SessionHeader | null = null;
|
|
627
|
-
let messageCount = 0;
|
|
628
|
-
let firstMessage = "";
|
|
629
|
-
const allMessages: string[] = [];
|
|
630
|
-
let name: string | undefined;
|
|
631
|
-
let lastActivityTime: number | undefined;
|
|
632
|
-
|
|
633
|
-
const rl = createInterface({
|
|
634
|
-
input: createReadStream(filePath, { encoding: "utf8" }),
|
|
635
|
-
crlfDelay: Infinity,
|
|
636
|
-
});
|
|
637
|
-
|
|
638
|
-
for await (const line of rl) {
|
|
639
|
-
const entry = parseSessionEntryLine(line);
|
|
640
|
-
if (!entry) continue;
|
|
641
|
-
|
|
642
|
-
if (!header) {
|
|
643
|
-
if (entry.type !== "session") return null;
|
|
644
|
-
header = entry;
|
|
645
|
-
continue;
|
|
646
|
-
}
|
|
647
|
-
|
|
648
|
-
// Extract session name (use latest, including explicit clears)
|
|
649
|
-
if (entry.type === "session_info") {
|
|
650
|
-
name = entry.name?.trim() || undefined;
|
|
651
|
-
}
|
|
652
|
-
|
|
653
|
-
if (entry.type !== "message") continue;
|
|
654
|
-
messageCount++;
|
|
655
|
-
|
|
656
|
-
const activityTime = getMessageActivityTime(entry);
|
|
657
|
-
if (typeof activityTime === "number") {
|
|
658
|
-
lastActivityTime = Math.max(lastActivityTime ?? 0, activityTime);
|
|
659
|
-
}
|
|
660
|
-
|
|
661
|
-
const message = entry.message;
|
|
662
|
-
if (!isMessageWithContent(message)) continue;
|
|
663
|
-
if (message.role !== "user" && message.role !== "assistant") continue;
|
|
664
|
-
|
|
665
|
-
const textContent = extractTextContent(message);
|
|
666
|
-
if (!textContent) continue;
|
|
667
|
-
|
|
668
|
-
allMessages.push(textContent);
|
|
669
|
-
if (!firstMessage && message.role === "user") {
|
|
670
|
-
firstMessage = textContent;
|
|
671
|
-
}
|
|
672
|
-
}
|
|
673
|
-
|
|
674
|
-
if (!header) return null;
|
|
675
|
-
|
|
676
|
-
const cwd = typeof header.cwd === "string" ? header.cwd : "";
|
|
677
|
-
const parentSessionPath = header.parentSession;
|
|
678
|
-
const headerTime = typeof header.timestamp === "string" ? new Date(header.timestamp).getTime() : NaN;
|
|
679
|
-
const modified =
|
|
680
|
-
typeof lastActivityTime === "number" && lastActivityTime > 0
|
|
681
|
-
? new Date(lastActivityTime)
|
|
682
|
-
: !Number.isNaN(headerTime)
|
|
683
|
-
? new Date(headerTime)
|
|
684
|
-
: stats.mtime;
|
|
685
|
-
|
|
686
|
-
return {
|
|
687
|
-
path: filePath,
|
|
688
|
-
id: header.id,
|
|
689
|
-
cwd,
|
|
690
|
-
name,
|
|
691
|
-
parentSessionPath,
|
|
692
|
-
created: new Date(header.timestamp),
|
|
693
|
-
modified,
|
|
694
|
-
messageCount,
|
|
695
|
-
firstMessage: firstMessage || "(no messages)",
|
|
696
|
-
allMessagesText: allMessages.join(" "),
|
|
697
|
-
};
|
|
698
|
-
} catch {
|
|
699
|
-
return null;
|
|
700
|
-
}
|
|
701
|
-
}
|
|
702
|
-
|
|
703
|
-
export type SessionListProgress = (loaded: number, total: number) => void;
|
|
704
|
-
|
|
705
|
-
const MAX_CONCURRENT_SESSION_INFO_LOADS = 10;
|
|
706
|
-
|
|
707
|
-
async function buildSessionInfosWithConcurrency(
|
|
708
|
-
files: string[],
|
|
709
|
-
onLoaded: () => void,
|
|
710
|
-
): Promise<(SessionInfo | null)[]> {
|
|
711
|
-
const results: (SessionInfo | null)[] = new Array(files.length).fill(null);
|
|
712
|
-
const inFlight = new Set<Promise<void>>();
|
|
713
|
-
let nextIndex = 0;
|
|
714
|
-
|
|
715
|
-
const startNext = (): void => {
|
|
716
|
-
const index = nextIndex++;
|
|
717
|
-
const file = files[index];
|
|
718
|
-
if (!file) return;
|
|
719
|
-
|
|
720
|
-
let task: Promise<void>;
|
|
721
|
-
task = buildSessionInfo(file)
|
|
722
|
-
.then((info) => {
|
|
723
|
-
results[index] = info;
|
|
724
|
-
})
|
|
725
|
-
.catch(() => {
|
|
726
|
-
results[index] = null;
|
|
727
|
-
})
|
|
728
|
-
.finally(() => {
|
|
729
|
-
inFlight.delete(task);
|
|
730
|
-
onLoaded();
|
|
731
|
-
});
|
|
732
|
-
inFlight.add(task);
|
|
733
|
-
};
|
|
734
|
-
|
|
735
|
-
while (nextIndex < files.length || inFlight.size > 0) {
|
|
736
|
-
while (nextIndex < files.length && inFlight.size < MAX_CONCURRENT_SESSION_INFO_LOADS) {
|
|
737
|
-
startNext();
|
|
738
|
-
}
|
|
739
|
-
if (inFlight.size > 0) {
|
|
740
|
-
await Promise.race(inFlight);
|
|
741
|
-
}
|
|
742
|
-
}
|
|
743
|
-
|
|
744
|
-
return results;
|
|
745
|
-
}
|
|
746
|
-
|
|
747
|
-
async function listSessionsFromDir(
|
|
748
|
-
dir: string,
|
|
749
|
-
onProgress?: SessionListProgress,
|
|
750
|
-
progressOffset = 0,
|
|
751
|
-
progressTotal?: number,
|
|
752
|
-
): Promise<SessionInfo[]> {
|
|
753
|
-
const sessions: SessionInfo[] = [];
|
|
754
|
-
if (!existsSync(dir)) {
|
|
755
|
-
return sessions;
|
|
756
|
-
}
|
|
757
|
-
|
|
758
|
-
try {
|
|
759
|
-
const dirEntries = await readdir(dir);
|
|
760
|
-
const files = dirEntries.filter((f) => f.endsWith(".jsonl")).map((f) => join(dir, f));
|
|
761
|
-
const total = progressTotal ?? files.length;
|
|
762
|
-
|
|
763
|
-
let loaded = 0;
|
|
764
|
-
const results = await buildSessionInfosWithConcurrency(files, () => {
|
|
765
|
-
loaded++;
|
|
766
|
-
onProgress?.(progressOffset + loaded, total);
|
|
767
|
-
});
|
|
768
|
-
for (const info of results) {
|
|
769
|
-
if (info) {
|
|
770
|
-
sessions.push(info);
|
|
771
|
-
}
|
|
772
|
-
}
|
|
773
|
-
} catch {
|
|
774
|
-
// Return empty list on error
|
|
775
|
-
}
|
|
776
|
-
|
|
777
|
-
return sessions;
|
|
778
|
-
}
|
|
779
|
-
|
|
780
385
|
/**
|
|
781
386
|
* Manages conversation sessions as append-only trees stored in JSONL files.
|
|
782
387
|
*
|
|
@@ -797,8 +402,6 @@ export class SessionManager {
|
|
|
797
402
|
private flushed: boolean = false;
|
|
798
403
|
private fileEntries: FileEntry[] = [];
|
|
799
404
|
private byId: Map<string, SessionEntry> = new Map();
|
|
800
|
-
private labelsById: Map<string, string> = new Map();
|
|
801
|
-
private labelTimestampsById: Map<string, string> = new Map();
|
|
802
405
|
private leafId: string | null = null;
|
|
803
406
|
|
|
804
407
|
private constructor(
|
|
@@ -874,8 +477,6 @@ export class SessionManager {
|
|
|
874
477
|
};
|
|
875
478
|
this.fileEntries = [header];
|
|
876
479
|
this.byId.clear();
|
|
877
|
-
this.labelsById.clear();
|
|
878
|
-
this.labelTimestampsById.clear();
|
|
879
480
|
this.leafId = null;
|
|
880
481
|
this.flushed = false;
|
|
881
482
|
|
|
@@ -888,22 +489,11 @@ export class SessionManager {
|
|
|
888
489
|
|
|
889
490
|
private _buildIndex(): void {
|
|
890
491
|
this.byId.clear();
|
|
891
|
-
this.labelsById.clear();
|
|
892
|
-
this.labelTimestampsById.clear();
|
|
893
492
|
this.leafId = null;
|
|
894
493
|
for (const entry of this.fileEntries) {
|
|
895
494
|
if (entry.type === "session") continue;
|
|
896
495
|
this.byId.set(entry.id, entry);
|
|
897
496
|
this.leafId = entry.id;
|
|
898
|
-
if (entry.type === "label") {
|
|
899
|
-
if (entry.label) {
|
|
900
|
-
this.labelsById.set(entry.targetId, entry.label);
|
|
901
|
-
this.labelTimestampsById.set(entry.targetId, entry.timestamp);
|
|
902
|
-
} else {
|
|
903
|
-
this.labelsById.delete(entry.targetId);
|
|
904
|
-
this.labelTimestampsById.delete(entry.targetId);
|
|
905
|
-
}
|
|
906
|
-
}
|
|
907
497
|
}
|
|
908
498
|
}
|
|
909
499
|
|
|
@@ -931,10 +521,6 @@ export class SessionManager {
|
|
|
931
521
|
return this.sessionDir;
|
|
932
522
|
}
|
|
933
523
|
|
|
934
|
-
usesDefaultSessionDir(): boolean {
|
|
935
|
-
return this.sessionDir === getDefaultSessionDirPath(this.cwd);
|
|
936
|
-
}
|
|
937
|
-
|
|
938
524
|
getSessionId(): string {
|
|
939
525
|
return this.sessionId;
|
|
940
526
|
}
|
|
@@ -980,12 +566,9 @@ export class SessionManager {
|
|
|
980
566
|
}
|
|
981
567
|
|
|
982
568
|
/** Append a message as child of current leaf, then advance leaf. Returns entry id.
|
|
983
|
-
*
|
|
984
|
-
* Reason: we want these to be top-level entries in the session, not message session entries,
|
|
985
|
-
* so it is easier to find them.
|
|
986
|
-
* These need to be appended via appendCompaction() and appendBranchSummary() methods.
|
|
569
|
+
* Compaction summaries are top-level entries appended via appendCompaction(), not message entries.
|
|
987
570
|
*/
|
|
988
|
-
appendMessage(message: Message | CustomMessage
|
|
571
|
+
appendMessage(message: Message | CustomMessage): string {
|
|
989
572
|
const entry: SessionMessageEntry = {
|
|
990
573
|
type: "message",
|
|
991
574
|
id: generateId(this.byId),
|
|
@@ -1061,62 +644,6 @@ export class SessionManager {
|
|
|
1061
644
|
return entry.id;
|
|
1062
645
|
}
|
|
1063
646
|
|
|
1064
|
-
/** Append a session info entry (e.g., display name). Returns entry id. */
|
|
1065
|
-
appendSessionInfo(name: string): string {
|
|
1066
|
-
const sanitizedName = name.replace(/[\r\n]+/g, " ").trim();
|
|
1067
|
-
const entry: SessionInfoEntry = {
|
|
1068
|
-
type: "session_info",
|
|
1069
|
-
id: generateId(this.byId),
|
|
1070
|
-
parentId: this.leafId,
|
|
1071
|
-
timestamp: new Date().toISOString(),
|
|
1072
|
-
name: sanitizedName,
|
|
1073
|
-
};
|
|
1074
|
-
this._appendEntry(entry);
|
|
1075
|
-
return entry.id;
|
|
1076
|
-
}
|
|
1077
|
-
|
|
1078
|
-
/** Get the current session name from the latest session_info entry, if any. */
|
|
1079
|
-
getSessionName(): string | undefined {
|
|
1080
|
-
// Walk entries in reverse to find the latest session_info entry.
|
|
1081
|
-
// Empty names explicitly clear the session title.
|
|
1082
|
-
const entries = this.getEntries();
|
|
1083
|
-
for (let i = entries.length - 1; i >= 0; i--) {
|
|
1084
|
-
const entry = entries[i];
|
|
1085
|
-
if (entry.type === "session_info") {
|
|
1086
|
-
return entry.name?.trim() || undefined;
|
|
1087
|
-
}
|
|
1088
|
-
}
|
|
1089
|
-
return undefined;
|
|
1090
|
-
}
|
|
1091
|
-
|
|
1092
|
-
/**
|
|
1093
|
-
* Append a custom message entry (for extensions) that participates in LLM context.
|
|
1094
|
-
* @param customType Extension identifier for filtering on reload
|
|
1095
|
-
* @param content Message content (string or TextContent/ImageContent array)
|
|
1096
|
-
* @param display Whether to show in TUI (true = styled display, false = hidden)
|
|
1097
|
-
* @param details Optional extension-specific metadata (not sent to LLM)
|
|
1098
|
-
* @returns Entry id
|
|
1099
|
-
*/
|
|
1100
|
-
appendCustomMessageEntry<T = unknown>(
|
|
1101
|
-
customType: string,
|
|
1102
|
-
content: string | UserContent[],
|
|
1103
|
-
display: boolean,
|
|
1104
|
-
details?: T,
|
|
1105
|
-
): string {
|
|
1106
|
-
const entry: CustomMessageEntry<T> = {
|
|
1107
|
-
type: "custom_message",
|
|
1108
|
-
customType,
|
|
1109
|
-
content,
|
|
1110
|
-
display,
|
|
1111
|
-
details,
|
|
1112
|
-
id: generateId(this.byId),
|
|
1113
|
-
parentId: this.leafId,
|
|
1114
|
-
timestamp: new Date().toISOString(),
|
|
1115
|
-
};
|
|
1116
|
-
this._appendEntry(entry);
|
|
1117
|
-
return entry.id;
|
|
1118
|
-
}
|
|
1119
|
-
|
|
1120
647
|
// =========================================================================
|
|
1121
648
|
// Tree Traversal
|
|
1122
649
|
// =========================================================================
|
|
@@ -1133,54 +660,6 @@ export class SessionManager {
|
|
|
1133
660
|
return this.byId.get(id);
|
|
1134
661
|
}
|
|
1135
662
|
|
|
1136
|
-
/**
|
|
1137
|
-
* Get all direct children of an entry.
|
|
1138
|
-
*/
|
|
1139
|
-
getChildren(parentId: string): SessionEntry[] {
|
|
1140
|
-
const children: SessionEntry[] = [];
|
|
1141
|
-
for (const entry of this.byId.values()) {
|
|
1142
|
-
if (entry.parentId === parentId) {
|
|
1143
|
-
children.push(entry);
|
|
1144
|
-
}
|
|
1145
|
-
}
|
|
1146
|
-
return children;
|
|
1147
|
-
}
|
|
1148
|
-
|
|
1149
|
-
/**
|
|
1150
|
-
* Get the label for an entry, if any.
|
|
1151
|
-
*/
|
|
1152
|
-
getLabel(id: string): string | undefined {
|
|
1153
|
-
return this.labelsById.get(id);
|
|
1154
|
-
}
|
|
1155
|
-
|
|
1156
|
-
/**
|
|
1157
|
-
* Set or clear a label on an entry.
|
|
1158
|
-
* Labels are user-defined markers for bookmarking/navigation.
|
|
1159
|
-
* Pass undefined or empty string to clear the label.
|
|
1160
|
-
*/
|
|
1161
|
-
appendLabelChange(targetId: string, label: string | undefined): string {
|
|
1162
|
-
if (!this.byId.has(targetId)) {
|
|
1163
|
-
throw new Error(`Entry ${targetId} not found`);
|
|
1164
|
-
}
|
|
1165
|
-
const entry: LabelEntry = {
|
|
1166
|
-
type: "label",
|
|
1167
|
-
id: generateId(this.byId),
|
|
1168
|
-
parentId: this.leafId,
|
|
1169
|
-
timestamp: new Date().toISOString(),
|
|
1170
|
-
targetId,
|
|
1171
|
-
label,
|
|
1172
|
-
};
|
|
1173
|
-
this._appendEntry(entry);
|
|
1174
|
-
if (label) {
|
|
1175
|
-
this.labelsById.set(targetId, label);
|
|
1176
|
-
this.labelTimestampsById.set(targetId, entry.timestamp);
|
|
1177
|
-
} else {
|
|
1178
|
-
this.labelsById.delete(targetId);
|
|
1179
|
-
this.labelTimestampsById.delete(targetId);
|
|
1180
|
-
}
|
|
1181
|
-
return entry.id;
|
|
1182
|
-
}
|
|
1183
|
-
|
|
1184
663
|
/**
|
|
1185
664
|
* Walk from entry to root, returning all entries in path order.
|
|
1186
665
|
* Includes all entry types (messages, compaction, model changes, etc.).
|
|
@@ -1231,216 +710,13 @@ export class SessionManager {
|
|
|
1231
710
|
return this.fileEntries.filter((e): e is SessionEntry => e.type !== "session");
|
|
1232
711
|
}
|
|
1233
712
|
|
|
1234
|
-
/**
|
|
1235
|
-
* Get the session as a tree structure. Returns a shallow defensive copy of all entries.
|
|
1236
|
-
* A well-formed session has exactly one root (first entry with parentId === null).
|
|
1237
|
-
* Orphaned entries (broken parent chain) are also returned as roots.
|
|
1238
|
-
*/
|
|
1239
|
-
getTree(): SessionTreeNode[] {
|
|
1240
|
-
const entries = this.getEntries();
|
|
1241
|
-
const nodeMap = new Map<string, SessionTreeNode>();
|
|
1242
|
-
const roots: SessionTreeNode[] = [];
|
|
1243
|
-
|
|
1244
|
-
// Create nodes with resolved labels
|
|
1245
|
-
for (const entry of entries) {
|
|
1246
|
-
const label = this.labelsById.get(entry.id);
|
|
1247
|
-
const labelTimestamp = this.labelTimestampsById.get(entry.id);
|
|
1248
|
-
nodeMap.set(entry.id, { entry, children: [], label, labelTimestamp });
|
|
1249
|
-
}
|
|
1250
|
-
|
|
1251
|
-
// Build tree
|
|
1252
|
-
for (const entry of entries) {
|
|
1253
|
-
const node = nodeMap.get(entry.id)!;
|
|
1254
|
-
if (entry.parentId === null || entry.parentId === entry.id) {
|
|
1255
|
-
roots.push(node);
|
|
1256
|
-
} else {
|
|
1257
|
-
const parent = nodeMap.get(entry.parentId);
|
|
1258
|
-
if (parent) {
|
|
1259
|
-
parent.children.push(node);
|
|
1260
|
-
} else {
|
|
1261
|
-
// Orphan - treat as root
|
|
1262
|
-
roots.push(node);
|
|
1263
|
-
}
|
|
1264
|
-
}
|
|
1265
|
-
}
|
|
1266
|
-
|
|
1267
|
-
// Sort children by timestamp (oldest first, newest at bottom)
|
|
1268
|
-
// Use iterative approach to avoid stack overflow on deep trees
|
|
1269
|
-
const stack: SessionTreeNode[] = [...roots];
|
|
1270
|
-
while (stack.length > 0) {
|
|
1271
|
-
const node = stack.pop()!;
|
|
1272
|
-
node.children.sort((a, b) => new Date(a.entry.timestamp).getTime() - new Date(b.entry.timestamp).getTime());
|
|
1273
|
-
stack.push(...node.children);
|
|
1274
|
-
}
|
|
1275
|
-
|
|
1276
|
-
return roots;
|
|
1277
|
-
}
|
|
1278
|
-
|
|
1279
|
-
// =========================================================================
|
|
1280
|
-
// Branching
|
|
1281
|
-
// =========================================================================
|
|
1282
|
-
|
|
1283
|
-
/**
|
|
1284
|
-
* Start a new branch from an earlier entry.
|
|
1285
|
-
* Moves the leaf pointer to the specified entry. The next appendXXX() call
|
|
1286
|
-
* will create a child of that entry, forming a new branch. Existing entries
|
|
1287
|
-
* are not modified or deleted.
|
|
1288
|
-
*/
|
|
1289
|
-
branch(branchFromId: string): void {
|
|
1290
|
-
if (!this.byId.has(branchFromId)) {
|
|
1291
|
-
throw new Error(`Entry ${branchFromId} not found`);
|
|
1292
|
-
}
|
|
1293
|
-
this.leafId = branchFromId;
|
|
1294
|
-
}
|
|
1295
|
-
|
|
1296
|
-
/**
|
|
1297
|
-
* Reset the leaf pointer to null (before any entries).
|
|
1298
|
-
* The next appendXXX() call will create a new root entry (parentId = null).
|
|
1299
|
-
* Use this when navigating to re-edit the first user message.
|
|
1300
|
-
*/
|
|
1301
|
-
resetLeaf(): void {
|
|
1302
|
-
this.leafId = null;
|
|
1303
|
-
}
|
|
1304
|
-
|
|
1305
|
-
/**
|
|
1306
|
-
* Start a new branch with a summary of the abandoned path.
|
|
1307
|
-
* Same as branch(), but also appends a branch_summary entry that captures
|
|
1308
|
-
* context from the abandoned conversation path.
|
|
1309
|
-
*/
|
|
1310
|
-
branchWithSummary(branchFromId: string | null, summary: string, details?: unknown, fromHook?: boolean): string {
|
|
1311
|
-
if (branchFromId !== null && !this.byId.has(branchFromId)) {
|
|
1312
|
-
throw new Error(`Entry ${branchFromId} not found`);
|
|
1313
|
-
}
|
|
1314
|
-
this.leafId = branchFromId;
|
|
1315
|
-
const entry: BranchSummaryEntry = {
|
|
1316
|
-
type: "branch_summary",
|
|
1317
|
-
id: generateId(this.byId),
|
|
1318
|
-
parentId: branchFromId,
|
|
1319
|
-
timestamp: new Date().toISOString(),
|
|
1320
|
-
fromId: branchFromId ?? "root",
|
|
1321
|
-
summary,
|
|
1322
|
-
details,
|
|
1323
|
-
fromHook,
|
|
1324
|
-
};
|
|
1325
|
-
this._appendEntry(entry);
|
|
1326
|
-
return entry.id;
|
|
1327
|
-
}
|
|
1328
|
-
|
|
1329
|
-
/**
|
|
1330
|
-
* Create a new session file containing only the path from root to the specified leaf.
|
|
1331
|
-
* Useful for extracting a single conversation path from a branched session.
|
|
1332
|
-
* Returns the new session file path, or undefined if not persisting.
|
|
1333
|
-
*/
|
|
1334
|
-
createBranchedSession(leafId: string): string | undefined {
|
|
1335
|
-
const previousSessionFile = this.sessionFile;
|
|
1336
|
-
const path = this.getBranch(leafId);
|
|
1337
|
-
if (path.length === 0) {
|
|
1338
|
-
throw new Error(`Entry ${leafId} not found`);
|
|
1339
|
-
}
|
|
1340
|
-
|
|
1341
|
-
// Filter out LabelEntry from path - we'll recreate them from the resolved map.
|
|
1342
|
-
// Because labels are real tree entries, later entries can be children of labels;
|
|
1343
|
-
// removing labels requires re-chaining the retained path to avoid orphaned subtrees.
|
|
1344
|
-
const pathWithoutLabels: SessionEntry[] = [];
|
|
1345
|
-
let pathParentId: string | null = null;
|
|
1346
|
-
for (const entry of path) {
|
|
1347
|
-
if (entry.type === "label") continue;
|
|
1348
|
-
pathWithoutLabels.push({ ...entry, parentId: pathParentId });
|
|
1349
|
-
pathParentId = entry.id;
|
|
1350
|
-
}
|
|
1351
|
-
|
|
1352
|
-
const newSessionId = createSessionId();
|
|
1353
|
-
const timestamp = new Date().toISOString();
|
|
1354
|
-
const fileTimestamp = timestamp.replace(/[:.]/g, "-");
|
|
1355
|
-
const newSessionFile = join(this.getSessionDir(), `${fileTimestamp}_${newSessionId}.jsonl`);
|
|
1356
|
-
|
|
1357
|
-
const header: SessionHeader = {
|
|
1358
|
-
type: "session",
|
|
1359
|
-
version: CURRENT_SESSION_VERSION,
|
|
1360
|
-
id: newSessionId,
|
|
1361
|
-
timestamp,
|
|
1362
|
-
cwd: this.cwd,
|
|
1363
|
-
parentSession: this.persist ? previousSessionFile : undefined,
|
|
1364
|
-
};
|
|
1365
|
-
|
|
1366
|
-
// Collect labels for entries in the path
|
|
1367
|
-
const pathEntryIds = new Set(pathWithoutLabels.map((e) => e.id));
|
|
1368
|
-
const labelsToWrite: Array<{ targetId: string; label: string; timestamp: string }> = [];
|
|
1369
|
-
for (const [targetId, label] of this.labelsById) {
|
|
1370
|
-
if (pathEntryIds.has(targetId)) {
|
|
1371
|
-
labelsToWrite.push({ targetId, label, timestamp: this.labelTimestampsById.get(targetId)! });
|
|
1372
|
-
}
|
|
1373
|
-
}
|
|
1374
|
-
|
|
1375
|
-
if (this.persist) {
|
|
1376
|
-
// Build label entries
|
|
1377
|
-
const lastEntryId = pathWithoutLabels[pathWithoutLabels.length - 1]?.id || null;
|
|
1378
|
-
let parentId = lastEntryId;
|
|
1379
|
-
const labelEntries: LabelEntry[] = [];
|
|
1380
|
-
for (const { targetId, label, timestamp: labelTimestamp } of labelsToWrite) {
|
|
1381
|
-
const labelEntry: LabelEntry = {
|
|
1382
|
-
type: "label",
|
|
1383
|
-
id: generateId(new Set(pathEntryIds)),
|
|
1384
|
-
parentId,
|
|
1385
|
-
timestamp: labelTimestamp,
|
|
1386
|
-
targetId,
|
|
1387
|
-
label,
|
|
1388
|
-
};
|
|
1389
|
-
pathEntryIds.add(labelEntry.id);
|
|
1390
|
-
labelEntries.push(labelEntry);
|
|
1391
|
-
parentId = labelEntry.id;
|
|
1392
|
-
}
|
|
1393
|
-
|
|
1394
|
-
this.fileEntries = [header, ...pathWithoutLabels, ...labelEntries];
|
|
1395
|
-
this.sessionId = newSessionId;
|
|
1396
|
-
this.sessionFile = newSessionFile;
|
|
1397
|
-
this._buildIndex();
|
|
1398
|
-
|
|
1399
|
-
// Only write the file now if it contains an assistant message.
|
|
1400
|
-
// Otherwise defer to _persist(), which creates the file on the
|
|
1401
|
-
// first assistant response, matching the newSession() contract
|
|
1402
|
-
// and avoiding the duplicate-header bug when _persist()'s
|
|
1403
|
-
// no-assistant guard later resets flushed to false.
|
|
1404
|
-
const hasAssistant = this.fileEntries.some((e) => e.type === "message" && e.message.role === "assistant");
|
|
1405
|
-
if (hasAssistant) {
|
|
1406
|
-
this._rewriteFile();
|
|
1407
|
-
this.flushed = true;
|
|
1408
|
-
} else {
|
|
1409
|
-
this.flushed = false;
|
|
1410
|
-
}
|
|
1411
|
-
|
|
1412
|
-
return newSessionFile;
|
|
1413
|
-
}
|
|
1414
|
-
|
|
1415
|
-
// In-memory mode: replace current session with the path + labels
|
|
1416
|
-
const labelEntries: LabelEntry[] = [];
|
|
1417
|
-
let parentId = pathWithoutLabels[pathWithoutLabels.length - 1]?.id || null;
|
|
1418
|
-
for (const { targetId, label, timestamp: labelTimestamp } of labelsToWrite) {
|
|
1419
|
-
const labelEntry: LabelEntry = {
|
|
1420
|
-
type: "label",
|
|
1421
|
-
id: generateId(new Set([...pathEntryIds, ...labelEntries.map((e) => e.id)])),
|
|
1422
|
-
parentId,
|
|
1423
|
-
timestamp: labelTimestamp,
|
|
1424
|
-
targetId,
|
|
1425
|
-
label,
|
|
1426
|
-
};
|
|
1427
|
-
labelEntries.push(labelEntry);
|
|
1428
|
-
parentId = labelEntry.id;
|
|
1429
|
-
}
|
|
1430
|
-
this.fileEntries = [header, ...pathWithoutLabels, ...labelEntries];
|
|
1431
|
-
this.sessionId = newSessionId;
|
|
1432
|
-
this._buildIndex();
|
|
1433
|
-
return undefined;
|
|
1434
|
-
}
|
|
1435
|
-
|
|
1436
713
|
/**
|
|
1437
714
|
* Create a new session.
|
|
1438
715
|
* @param cwd Working directory (stored in session header)
|
|
1439
|
-
* @param sessionDir
|
|
716
|
+
* @param sessionDir Session directory
|
|
1440
717
|
*/
|
|
1441
|
-
static create(cwd: string, sessionDir
|
|
1442
|
-
|
|
1443
|
-
return new SessionManager(cwd, dir, undefined, true, options);
|
|
718
|
+
static create(cwd: string, sessionDir: string, options?: NewSessionOptions): SessionManager {
|
|
719
|
+
return new SessionManager(cwd, normalizePath(sessionDir), undefined, true, options);
|
|
1444
720
|
}
|
|
1445
721
|
|
|
1446
722
|
/**
|
|
@@ -1460,164 +736,8 @@ export class SessionManager {
|
|
|
1460
736
|
return new SessionManager(cwd, dir, resolvedPath, true);
|
|
1461
737
|
}
|
|
1462
738
|
|
|
1463
|
-
/**
|
|
1464
|
-
* Continue the most recent session, or create new if none.
|
|
1465
|
-
* @param cwd Working directory
|
|
1466
|
-
* @param sessionDir Optional session directory. If omitted, uses default (~/.agent/sessions/<encoded-cwd>/).
|
|
1467
|
-
*/
|
|
1468
|
-
static continueRecent(cwd: string, sessionDir?: string): SessionManager {
|
|
1469
|
-
const dir = sessionDir ? normalizePath(sessionDir) : getDefaultSessionDir(cwd);
|
|
1470
|
-
const filterCwd = sessionDir !== undefined && dir !== getDefaultSessionDirPath(cwd);
|
|
1471
|
-
const mostRecent = findMostRecentSession(dir, filterCwd ? cwd : undefined);
|
|
1472
|
-
if (mostRecent) {
|
|
1473
|
-
return new SessionManager(cwd, dir, mostRecent, true);
|
|
1474
|
-
}
|
|
1475
|
-
return new SessionManager(cwd, dir, undefined, true);
|
|
1476
|
-
}
|
|
1477
|
-
|
|
1478
739
|
/** Create an in-memory session (no file persistence) */
|
|
1479
740
|
static inMemory(cwd: string = process.cwd(), options?: NewSessionOptions): SessionManager {
|
|
1480
741
|
return new SessionManager(cwd, "", undefined, false, options);
|
|
1481
742
|
}
|
|
1482
|
-
|
|
1483
|
-
/**
|
|
1484
|
-
* Fork a session from another project directory into the current project.
|
|
1485
|
-
* Creates a new session in the target cwd with the full history from the source session.
|
|
1486
|
-
* @param sourcePath Path to the source session file
|
|
1487
|
-
* @param targetCwd Target working directory (where the new session will be stored)
|
|
1488
|
-
* @param sessionDir Optional session directory. If omitted, uses default for targetCwd.
|
|
1489
|
-
*/
|
|
1490
|
-
static forkFrom(
|
|
1491
|
-
sourcePath: string,
|
|
1492
|
-
targetCwd: string,
|
|
1493
|
-
sessionDir?: string,
|
|
1494
|
-
options?: NewSessionOptions,
|
|
1495
|
-
): SessionManager {
|
|
1496
|
-
const resolvedSourcePath = resolvePath(sourcePath);
|
|
1497
|
-
const resolvedTargetCwd = resolvePath(targetCwd);
|
|
1498
|
-
const sourceEntries = loadEntriesFromFile(resolvedSourcePath);
|
|
1499
|
-
if (sourceEntries.length === 0) {
|
|
1500
|
-
throw new Error(`Cannot fork: source session file is empty or invalid: ${resolvedSourcePath}`);
|
|
1501
|
-
}
|
|
1502
|
-
|
|
1503
|
-
const sourceHeader = sourceEntries.find((e) => e.type === "session") as SessionHeader | undefined;
|
|
1504
|
-
if (!sourceHeader) {
|
|
1505
|
-
throw new Error(`Cannot fork: source session has no header: ${resolvedSourcePath}`);
|
|
1506
|
-
}
|
|
1507
|
-
|
|
1508
|
-
const dir = sessionDir ? normalizePath(sessionDir) : getDefaultSessionDir(resolvedTargetCwd);
|
|
1509
|
-
if (!existsSync(dir)) {
|
|
1510
|
-
mkdirSync(dir, { recursive: true });
|
|
1511
|
-
}
|
|
1512
|
-
|
|
1513
|
-
// Create new session file with new ID but forked content
|
|
1514
|
-
if (options?.id !== undefined) {
|
|
1515
|
-
assertValidSessionId(options.id);
|
|
1516
|
-
}
|
|
1517
|
-
const newSessionId = options?.id ?? createSessionId();
|
|
1518
|
-
const timestamp = new Date().toISOString();
|
|
1519
|
-
const fileTimestamp = timestamp.replace(/[:.]/g, "-");
|
|
1520
|
-
const newSessionFile = join(dir, `${fileTimestamp}_${newSessionId}.jsonl`);
|
|
1521
|
-
|
|
1522
|
-
// Write new header pointing to source as parent, with updated cwd
|
|
1523
|
-
const newHeader: SessionHeader = {
|
|
1524
|
-
type: "session",
|
|
1525
|
-
version: CURRENT_SESSION_VERSION,
|
|
1526
|
-
id: newSessionId,
|
|
1527
|
-
timestamp,
|
|
1528
|
-
cwd: resolvedTargetCwd,
|
|
1529
|
-
parentSession: resolvedSourcePath,
|
|
1530
|
-
};
|
|
1531
|
-
writeFileSync(newSessionFile, `${JSON.stringify(newHeader)}\n`, { flag: "wx" });
|
|
1532
|
-
|
|
1533
|
-
// Copy all non-header entries from source
|
|
1534
|
-
for (const entry of sourceEntries) {
|
|
1535
|
-
if (entry.type !== "session") {
|
|
1536
|
-
appendFileSync(newSessionFile, `${JSON.stringify(entry)}\n`);
|
|
1537
|
-
}
|
|
1538
|
-
}
|
|
1539
|
-
|
|
1540
|
-
return new SessionManager(resolvedTargetCwd, dir, newSessionFile, true);
|
|
1541
|
-
}
|
|
1542
|
-
|
|
1543
|
-
/**
|
|
1544
|
-
* List all sessions for a directory.
|
|
1545
|
-
* @param cwd Working directory (used to compute default session directory)
|
|
1546
|
-
* @param sessionDir Optional session directory. If omitted, uses default (~/.agent/sessions/<encoded-cwd>/).
|
|
1547
|
-
* @param onProgress Optional callback for progress updates (loaded, total)
|
|
1548
|
-
*/
|
|
1549
|
-
static async list(cwd: string, sessionDir?: string, onProgress?: SessionListProgress): Promise<SessionInfo[]> {
|
|
1550
|
-
const dir = sessionDir ? normalizePath(sessionDir) : getDefaultSessionDir(cwd);
|
|
1551
|
-
const filterCwd = sessionDir !== undefined && dir !== getDefaultSessionDirPath(cwd);
|
|
1552
|
-
const resolvedCwd = resolvePath(cwd);
|
|
1553
|
-
const sessions = (await listSessionsFromDir(dir, onProgress)).filter(
|
|
1554
|
-
(session) => !filterCwd || sessionCwdMatches(session.cwd, resolvedCwd),
|
|
1555
|
-
);
|
|
1556
|
-
sessions.sort((a, b) => b.modified.getTime() - a.modified.getTime());
|
|
1557
|
-
return sessions;
|
|
1558
|
-
}
|
|
1559
|
-
|
|
1560
|
-
/**
|
|
1561
|
-
* List all sessions across all project directories.
|
|
1562
|
-
* @param onProgress Optional callback for progress updates (loaded, total)
|
|
1563
|
-
*/
|
|
1564
|
-
static async listAll(onProgress?: SessionListProgress): Promise<SessionInfo[]>;
|
|
1565
|
-
static async listAll(sessionDir?: string, onProgress?: SessionListProgress): Promise<SessionInfo[]>;
|
|
1566
|
-
static async listAll(
|
|
1567
|
-
sessionDirOrOnProgress?: string | SessionListProgress,
|
|
1568
|
-
onProgress?: SessionListProgress,
|
|
1569
|
-
): Promise<SessionInfo[]> {
|
|
1570
|
-
const customSessionDir =
|
|
1571
|
-
typeof sessionDirOrOnProgress === "string" ? normalizePath(sessionDirOrOnProgress) : undefined;
|
|
1572
|
-
const progress = typeof sessionDirOrOnProgress === "function" ? sessionDirOrOnProgress : onProgress;
|
|
1573
|
-
if (customSessionDir) {
|
|
1574
|
-
const sessions = await listSessionsFromDir(customSessionDir, progress);
|
|
1575
|
-
sessions.sort((a, b) => b.modified.getTime() - a.modified.getTime());
|
|
1576
|
-
return sessions;
|
|
1577
|
-
}
|
|
1578
|
-
|
|
1579
|
-
const sessionsDir = getSessionsDir();
|
|
1580
|
-
|
|
1581
|
-
try {
|
|
1582
|
-
if (!existsSync(sessionsDir)) {
|
|
1583
|
-
return [];
|
|
1584
|
-
}
|
|
1585
|
-
const entries = await readdir(sessionsDir, { withFileTypes: true });
|
|
1586
|
-
const dirs = entries.filter((e) => e.isDirectory()).map((e) => join(sessionsDir, e.name));
|
|
1587
|
-
|
|
1588
|
-
// Count total files first for accurate progress
|
|
1589
|
-
let totalFiles = 0;
|
|
1590
|
-
const dirFiles: string[][] = [];
|
|
1591
|
-
for (const dir of dirs) {
|
|
1592
|
-
try {
|
|
1593
|
-
const files = (await readdir(dir)).filter((f) => f.endsWith(".jsonl"));
|
|
1594
|
-
dirFiles.push(files.map((f) => join(dir, f)));
|
|
1595
|
-
totalFiles += files.length;
|
|
1596
|
-
} catch {
|
|
1597
|
-
dirFiles.push([]);
|
|
1598
|
-
}
|
|
1599
|
-
}
|
|
1600
|
-
|
|
1601
|
-
// Process all files with progress tracking
|
|
1602
|
-
let loaded = 0;
|
|
1603
|
-
const sessions: SessionInfo[] = [];
|
|
1604
|
-
const allFiles = dirFiles.flat();
|
|
1605
|
-
|
|
1606
|
-
const results = await buildSessionInfosWithConcurrency(allFiles, () => {
|
|
1607
|
-
loaded++;
|
|
1608
|
-
progress?.(loaded, totalFiles);
|
|
1609
|
-
});
|
|
1610
|
-
|
|
1611
|
-
for (const info of results) {
|
|
1612
|
-
if (info) {
|
|
1613
|
-
sessions.push(info);
|
|
1614
|
-
}
|
|
1615
|
-
}
|
|
1616
|
-
|
|
1617
|
-
sessions.sort((a, b) => b.modified.getTime() - a.modified.getTime());
|
|
1618
|
-
return sessions;
|
|
1619
|
-
} catch {
|
|
1620
|
-
return [];
|
|
1621
|
-
}
|
|
1622
|
-
}
|
|
1623
743
|
}
|