@theruansilva/omp-web 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +181 -0
- package/dist/cli/doctor.js +118 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/serviceTemplates.js +55 -0
- package/dist/cli/serviceTemplates.js.map +1 -0
- package/dist/cli/types.js +2 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/cli.js +872 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/assets/CodeViewer-CJNBz-Ox.js +4 -0
- package/dist/client/assets/TerminalPanel-B9-LUv7E.js +126 -0
- package/dist/client/assets/UnifiedDiffViewer-BUqme4se.js +34 -0
- package/dist/client/assets/index-DGBYb2j9.css +1 -0
- package/dist/client/assets/index-uWm_YNRB.js +4427 -0
- package/dist/client/assets/vendor-editor-core-D9EJm1dE.js +10 -0
- package/dist/client/assets/vendor-editor-languages-N6dcxgRO.js +26 -0
- package/dist/client/assets/vendor-terminal-DDGTF8rc.css +1 -0
- package/dist/client/assets/vendor-terminal-DjQ08hXu.js +16 -0
- package/dist/client/favicon-16x16.png +0 -0
- package/dist/client/favicon-180x180.png +0 -0
- package/dist/client/favicon-192x192.png +0 -0
- package/dist/client/favicon-32x32.png +0 -0
- package/dist/client/favicon-512x512.png +0 -0
- package/dist/client/favicon.ico +0 -0
- package/dist/client/favicon.png +0 -0
- package/dist/client/favicon.svg +11 -0
- package/dist/client/index.html +68 -0
- package/dist/client/manifest.webmanifest +36 -0
- package/dist/client-react/assets/index-BQ6zLLfz.js +51 -0
- package/dist/client-react/assets/index-Befs78HG.css +1 -0
- package/dist/client-react/index.html +16 -0
- package/dist/config.js +272 -0
- package/dist/config.js.map +1 -0
- package/dist/docker/ompWebDockerCommandPlan.js +211 -0
- package/dist/docker/ompWebDockerCommandPlan.js.map +1 -0
- package/dist/docker/piWebDockerCommandPlan.js +211 -0
- package/dist/docker/piWebDockerCommandPlan.js.map +1 -0
- package/dist/omp-web-plugins/info/omp-web-plugin.js +51 -0
- package/dist/omp-web-plugins/info/package.json +9 -0
- package/dist/omp-web-plugins/schedule-prompts/omp-web-plugin.js +43 -0
- package/dist/omp-web-plugins/schedule-prompts/package.json +9 -0
- package/dist/omp-web-plugins/schedule-prompts/schedulePromptsPanelElement.js +242 -0
- package/dist/omp-web-plugins/schedule-prompts/types.js +2 -0
- package/dist/omp-web-plugins/updates/omp-web-plugin.js +173 -0
- package/dist/omp-web-plugins/updates/package.json +9 -0
- package/dist/omp-web-plugins/updates/updatesLogic.js +97 -0
- package/dist/ompWebVersionReport.js +217 -0
- package/dist/ompWebVersionReport.js.map +1 -0
- package/dist/pi-web-plugins/info/package.json +9 -0
- package/dist/pi-web-plugins/info/pi-web-plugin.js +51 -0
- package/dist/pi-web-plugins/schedule-prompts/package.json +9 -0
- package/dist/pi-web-plugins/schedule-prompts/pi-web-plugin.js +43 -0
- package/dist/pi-web-plugins/schedule-prompts/schedulePromptsPanelElement.js +226 -0
- package/dist/pi-web-plugins/schedule-prompts/types.js +2 -0
- package/dist/pi-web-plugins/updates/package.json +9 -0
- package/dist/pi-web-plugins/updates/pi-web-plugin.js +173 -0
- package/dist/pi-web-plugins/updates/updatesLogic.js +97 -0
- package/dist/piWebVersionReport.js +225 -0
- package/dist/piWebVersionReport.js.map +1 -0
- package/dist/plugin-api/unstable.d.ts +22 -0
- package/dist/plugin-api.d.ts +197 -0
- package/dist/server/activity/workspaceActivityRoutes.js +4 -0
- package/dist/server/activity/workspaceActivityRoutes.js.map +1 -0
- package/dist/server/activity/workspaceActivityService.js +98 -0
- package/dist/server/activity/workspaceActivityService.js.map +1 -0
- package/dist/server/app.js +217 -0
- package/dist/server/app.js.map +1 -0
- package/dist/server/configRoutes.js +278 -0
- package/dist/server/configRoutes.js.map +1 -0
- package/dist/server/diagnostics/nodePtySpawnHelper.js +130 -0
- package/dist/server/diagnostics/nodePtySpawnHelper.js.map +1 -0
- package/dist/server/git/gitEnv.js +15 -0
- package/dist/server/git/gitEnv.js.map +1 -0
- package/dist/server/git/gitService.js +119 -0
- package/dist/server/git/gitService.js.map +1 -0
- package/dist/server/gitRoutes.js +29 -0
- package/dist/server/gitRoutes.js.map +1 -0
- package/dist/server/index.js +16 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/machines/machineClient.js +162 -0
- package/dist/server/machines/machineClient.js.map +1 -0
- package/dist/server/machines/machinePluginProxyRoutes.js +151 -0
- package/dist/server/machines/machinePluginProxyRoutes.js.map +1 -0
- package/dist/server/machines/machineProxyRoutes.js +152 -0
- package/dist/server/machines/machineProxyRoutes.js.map +1 -0
- package/dist/server/machines/machineRoutes.js +61 -0
- package/dist/server/machines/machineRoutes.js.map +1 -0
- package/dist/server/machines/machineService.js +230 -0
- package/dist/server/machines/machineService.js.map +1 -0
- package/dist/server/machines/machineStore.js +123 -0
- package/dist/server/machines/machineStore.js.map +1 -0
- package/dist/server/machines/proxyUtils.js +39 -0
- package/dist/server/machines/proxyUtils.js.map +1 -0
- package/dist/server/ompWebPluginService.js +298 -0
- package/dist/server/ompWebPluginService.js.map +1 -0
- package/dist/server/ompWebStatus.js +604 -0
- package/dist/server/ompWebStatus.js.map +1 -0
- package/dist/server/ompWebStatusCache.js +31 -0
- package/dist/server/ompWebStatusCache.js.map +1 -0
- package/dist/server/piPackageRoutes.js +85 -0
- package/dist/server/piPackageRoutes.js.map +1 -0
- package/dist/server/piPackageService.js +65 -0
- package/dist/server/piPackageService.js.map +1 -0
- package/dist/server/piWebPluginService.js +283 -0
- package/dist/server/piWebPluginService.js.map +1 -0
- package/dist/server/piWebStatus.js +602 -0
- package/dist/server/piWebStatus.js.map +1 -0
- package/dist/server/piWebStatusCache.js +32 -0
- package/dist/server/piWebStatusCache.js.map +1 -0
- package/dist/server/projects/directorySuggestions.js +37 -0
- package/dist/server/projects/directorySuggestions.js.map +1 -0
- package/dist/server/projects/projectService.js +31 -0
- package/dist/server/projects/projectService.js.map +1 -0
- package/dist/server/push/PushNotificationService.js +137 -0
- package/dist/server/push/PushNotificationService.js.map +1 -0
- package/dist/server/push/pushRoutes.js +50 -0
- package/dist/server/push/pushRoutes.js.map +1 -0
- package/dist/server/realtime/honoRealtimeSocket.js +32 -0
- package/dist/server/realtime/honoRealtimeSocket.js.map +1 -0
- package/dist/server/realtime/sessionEventHub.js +39 -0
- package/dist/server/realtime/sessionEventHub.js.map +1 -0
- package/dist/server/sessiond/sessionProxyRoutes.js +85 -0
- package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -0
- package/dist/server/sessiond.js +104 -0
- package/dist/server/sessiond.js.map +1 -0
- package/dist/server/sessions/attachmentService.js +112 -0
- package/dist/server/sessions/attachmentService.js.map +1 -0
- package/dist/server/sessions/authProviderOptions.js +52 -0
- package/dist/server/sessions/authProviderOptions.js.map +1 -0
- package/dist/server/sessions/authRoutes.js +75 -0
- package/dist/server/sessions/authRoutes.js.map +1 -0
- package/dist/server/sessions/authService.js +105 -0
- package/dist/server/sessions/authService.js.map +1 -0
- package/dist/server/sessions/builtinCommands.js +31 -0
- package/dist/server/sessions/builtinCommands.js.map +1 -0
- package/dist/server/sessions/editPreview.js +196 -0
- package/dist/server/sessions/editPreview.js.map +1 -0
- package/dist/server/sessions/editTool.js +46 -0
- package/dist/server/sessions/editTool.js.map +1 -0
- package/dist/server/sessions/messagePaging.js +41 -0
- package/dist/server/sessions/messagePaging.js.map +1 -0
- package/dist/server/sessions/oauthLoginFlowService.js +136 -0
- package/dist/server/sessions/oauthLoginFlowService.js.map +1 -0
- package/dist/server/sessions/piAgentSession.js +472 -0
- package/dist/server/sessions/piAgentSession.js.map +1 -0
- package/dist/server/sessions/piSessionManagerGateway.js +133 -0
- package/dist/server/sessions/piSessionManagerGateway.js.map +1 -0
- package/dist/server/sessions/piSessionService.js +1737 -0
- package/dist/server/sessions/piSessionService.js.map +1 -0
- package/dist/server/sessions/schedulePrompt/schedulePromptService.js +46 -0
- package/dist/server/sessions/schedulePrompt/schedulePromptService.js.map +1 -0
- package/dist/server/sessions/schedulePrompt/scheduler.js +317 -0
- package/dist/server/sessions/schedulePrompt/scheduler.js.map +1 -0
- package/dist/server/sessions/schedulePrompt/storage.js +118 -0
- package/dist/server/sessions/schedulePrompt/storage.js.map +1 -0
- package/dist/server/sessions/schedulePrompt/tool.js +251 -0
- package/dist/server/sessions/schedulePrompt/tool.js.map +1 -0
- package/dist/server/sessions/schedulePrompt/types.js +2 -0
- package/dist/server/sessions/schedulePrompt/types.js.map +1 -0
- package/dist/server/sessions/sessionArchiveHelpers.js +186 -0
- package/dist/server/sessions/sessionArchiveHelpers.js.map +1 -0
- package/dist/server/sessions/sessionArchiveStore.js +254 -0
- package/dist/server/sessions/sessionArchiveStore.js.map +1 -0
- package/dist/server/sessions/sessionArchiveTree.js +35 -0
- package/dist/server/sessions/sessionArchiveTree.js.map +1 -0
- package/dist/server/sessions/sessionCleanup.js +157 -0
- package/dist/server/sessions/sessionCleanup.js.map +1 -0
- package/dist/server/sessions/sessionCommandService.js +349 -0
- package/dist/server/sessions/sessionCommandService.js.map +1 -0
- package/dist/server/sessions/sessionEventMapper.js +115 -0
- package/dist/server/sessions/sessionEventMapper.js.map +1 -0
- package/dist/server/sessions/sessionNameGenerator.js +61 -0
- package/dist/server/sessions/sessionNameGenerator.js.map +1 -0
- package/dist/server/sessions/sessionRoutes.js +419 -0
- package/dist/server/sessions/sessionRoutes.js.map +1 -0
- package/dist/server/sessions/sessionRuntimeStore.js +2 -0
- package/dist/server/sessions/sessionRuntimeStore.js.map +1 -0
- package/dist/server/sessions/spawnSessionTool.js +41 -0
- package/dist/server/sessions/spawnSessionTool.js.map +1 -0
- package/dist/server/sessions/spawnSubsessionTool.js +203 -0
- package/dist/server/sessions/spawnSubsessionTool.js.map +1 -0
- package/dist/server/sessions/spawnTargetResolver.js +36 -0
- package/dist/server/sessions/spawnTargetResolver.js.map +1 -0
- package/dist/server/sessions/subsessionLinks.js +171 -0
- package/dist/server/sessions/subsessionLinks.js.map +1 -0
- package/dist/server/sessions/subsessionTranscript.js +233 -0
- package/dist/server/sessions/subsessionTranscript.js.map +1 -0
- package/dist/server/storage/projectStore.js +83 -0
- package/dist/server/storage/projectStore.js.map +1 -0
- package/dist/server/terminalProxyRoutes.js +168 -0
- package/dist/server/terminalProxyRoutes.js.map +1 -0
- package/dist/server/terminals/terminalRoutes.js +177 -0
- package/dist/server/terminals/terminalRoutes.js.map +1 -0
- package/dist/server/terminals/terminalService.js +309 -0
- package/dist/server/terminals/terminalService.js.map +1 -0
- package/dist/server/terminals/terminalSize.js +17 -0
- package/dist/server/terminals/terminalSize.js.map +1 -0
- package/dist/server/testUtils.js +43 -0
- package/dist/server/testUtils.js.map +1 -0
- package/dist/server/types.js +2 -0
- package/dist/server/types.js.map +1 -0
- package/dist/server/utils.js +2 -0
- package/dist/server/utils.js.map +1 -0
- package/dist/server/webSocketBridge.js +55 -0
- package/dist/server/webSocketBridge.js.map +1 -0
- package/dist/server/workingDirectory.js +44 -0
- package/dist/server/workingDirectory.js.map +1 -0
- package/dist/server/workspaceExplorerRoutes.js +148 -0
- package/dist/server/workspaceExplorerRoutes.js.map +1 -0
- package/dist/server/workspaces/effectivePathAccess.js +27 -0
- package/dist/server/workspaces/effectivePathAccess.js.map +1 -0
- package/dist/server/workspaces/fileContentService.js +200 -0
- package/dist/server/workspaces/fileContentService.js.map +1 -0
- package/dist/server/workspaces/fileSuggestions.js +512 -0
- package/dist/server/workspaces/fileSuggestions.js.map +1 -0
- package/dist/server/workspaces/fileTreeService.js +27 -0
- package/dist/server/workspaces/fileTreeService.js.map +1 -0
- package/dist/server/workspaces/gitWorktreeDiscovery.js +34 -0
- package/dist/server/workspaces/gitWorktreeDiscovery.js.map +1 -0
- package/dist/server/workspaces/imagePreviewService.js +40 -0
- package/dist/server/workspaces/imagePreviewService.js.map +1 -0
- package/dist/server/workspaces/pathAccessPolicy.js +87 -0
- package/dist/server/workspaces/pathAccessPolicy.js.map +1 -0
- package/dist/server/workspaces/pathSafety.js +54 -0
- package/dist/server/workspaces/pathSafety.js.map +1 -0
- package/dist/server/workspaces/projectOmpWebConfig.js +56 -0
- package/dist/server/workspaces/projectOmpWebConfig.js.map +1 -0
- package/dist/server/workspaces/projectPiWebConfig.js +61 -0
- package/dist/server/workspaces/projectPiWebConfig.js.map +1 -0
- package/dist/server/workspaces/workspaceContext.js +8 -0
- package/dist/server/workspaces/workspaceContext.js.map +1 -0
- package/dist/server/workspaces/workspaceDeletionRoutes.js +113 -0
- package/dist/server/workspaces/workspaceDeletionRoutes.js.map +1 -0
- package/dist/server/workspaces/workspaceService.js +39 -0
- package/dist/server/workspaces/workspaceService.js.map +1 -0
- package/dist/sessiond/config.js +9 -0
- package/dist/sessiond/config.js.map +1 -0
- package/dist/sessiond/sessionDaemonClient.js +34 -0
- package/dist/sessiond/sessionDaemonClient.js.map +1 -0
- package/dist/shared/activity.js +26 -0
- package/dist/shared/activity.js.map +1 -0
- package/dist/shared/apiTypes.d.ts +769 -0
- package/dist/shared/apiTypes.js +11 -0
- package/dist/shared/apiTypes.js.map +1 -0
- package/dist/shared/capabilities.js +52 -0
- package/dist/shared/capabilities.js.map +1 -0
- package/dist/shared/federatedRoutes.js +81 -0
- package/dist/shared/federatedRoutes.js.map +1 -0
- package/dist/shared/machinePluginIds.js +41 -0
- package/dist/shared/machinePluginIds.js.map +1 -0
- package/dist/shared/ompWebStatusParsing.js +100 -0
- package/dist/shared/ompWebStatusParsing.js.map +1 -0
- package/dist/shared/piWebStatusParsing.js +102 -0
- package/dist/shared/piWebStatusParsing.js.map +1 -0
- package/dist/shared/pluginIds.js +5 -0
- package/dist/shared/pluginIds.js.map +1 -0
- package/dist/shared/promptAttachments.js +90 -0
- package/dist/shared/promptAttachments.js.map +1 -0
- package/dist/shared/thinkingLevels.d.ts +19 -0
- package/dist/shared/thinkingLevels.js +24 -0
- package/dist/shared/thinkingLevels.js.map +1 -0
- package/dist/shared/utils.js +10 -0
- package/dist/shared/utils.js.map +1 -0
- package/dist/shared/workspaceDeletion.js +12 -0
- package/dist/shared/workspaceDeletion.js.map +1 -0
- package/dist/shared/workspaceFiles.js +3 -0
- package/dist/shared/workspaceFiles.js.map +1 -0
- package/docs/assets/favicon.svg +11 -0
- package/docs/assets/omp-web-banner.png +0 -0
- package/docs/assets/omp-web-desktop.png +0 -0
- package/docs/assets/omp-web-mobile.png +0 -0
- package/docs/assets/omp-web-tablet.png +0 -0
- package/docs/config.md +208 -0
- package/docs/plugins.md +916 -0
- package/extensions/omp-web.ts +133 -0
- package/install.sh +5 -0
- package/package.json +134 -0
- package/plugin-api/unstable.d.ts +1 -0
- package/plugin-api.d.ts +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root,[data-color-scheme=default]{--bg-base: #0e0e0e;--bg-1: #1a1a1a;--bg-2: #262626;--bg-3: #333333;--bg-4: #404040;--bg-5: #4d4d4d;--bg-6: #5a5a5a;--bg-8: #737373;--bg-9: #a6a6a6;--bg-10: #d9d9d9;--bg-hover: #1f1f1f;--bg-active: #2d2d2d;--text-primary: #e5e5e5;--text-secondary: #a6a6a6;--text-disabled: #737373;--primary: #4d9fff;--primary-hover: #6aafff;--success: #23c343;--warning: #ff9a2e;--danger: #f76560;--info: #4d9fff;--border-base: #333333;--border-light: #262626;--brand: #a1aacb;--brand-light: #3d4150;--brand-hover: #6a749b;--message-user-bg: #1e2a3a;--message-tips-bg: #1a2333;--workspace-btn-bg: #1f1f1f;--fill: #1a1a1a;--inverse: #ffffff;--shadow-soft: 0 2px 12px rgba(0,0,0,.4);--shadow-card: 0 4px 20px rgba(0,0,0,.35);--radius-sm: 6px;--radius-md: 10px;--radius-lg: 14px;--sider-width: 260px;--titlebar-height: 42px}[data-theme=light]{--bg-base: #ffffff;--bg-1: #f9fafb;--bg-2: #f2f3f5;--bg-3: #e5e6eb;--bg-4: #c9cdd4;--bg-5: #adb4c1;--bg-6: #86909c;--bg-8: #4e5969;--bg-9: #1d2129;--bg-10: #0c0e12;--bg-hover: #f3f4f6;--bg-active: #e5e6eb;--text-primary: #1d2129;--text-secondary: #86909c;--text-disabled: #c9cdd4;--primary: #165dff;--primary-hover: #4080ff;--success: #00b42a;--warning: #ff7d00;--danger: #f53f3f;--info: #165dff;--border-base: #e5e6eb;--border-light: #f2f3f5;--brand: #7583b2;--brand-light: #eff0f6;--brand-hover: #b5bcd6;--message-user-bg: #e9efff;--message-tips-bg: #f0f4ff;--workspace-btn-bg: #eff0f1;--fill: #f7f8fa;--shadow-soft: 0 2px 12px rgba(0,0,0,.06);--shadow-card: 0 4px 20px rgba(0,0,0,.08)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%;overflow:hidden}body{font-family:Inter,system-ui,-apple-system,sans-serif;background:var(--bg-base);color:var(--text-primary);-webkit-font-smoothing:antialiased}::-webkit-scrollbar{width:5px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:transparent;border-radius:3px}*:hover::-webkit-scrollbar-thumb{background:#80808033}[data-theme=dark] *:hover::-webkit-scrollbar-thumb{background:#ffffff26}.app-shell{display:grid;grid-template-columns:var(--sider-width) 1fr;height:100vh}.sider{display:flex;flex-direction:column;background:var(--bg-1);border-right:1px solid var(--border-base);height:100vh;overflow:hidden}.sider-header{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;height:var(--titlebar-height);padding:0 12px;border-bottom:1px solid var(--border-base)}.sider-brand{font-size:13px;font-weight:600;color:var(--text-primary);letter-spacing:.2px}.sider-actions{display:flex;gap:4px}.sider-scroll{flex:1 1 auto;overflow-y:auto;overflow-x:hidden;scrollbar-width:none;padding:4px 6px}.sider-scroll::-webkit-scrollbar{width:0}.sider-section{margin-bottom:4px}.sider-section-header{display:flex;align-items:center;justify-content:space-between;padding:8px 8px 4px;font-size:11px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;-webkit-user-select:none;user-select:none}.sider-section-count{font-weight:400;opacity:.6}.sider-item{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:var(--radius-sm);cursor:pointer;transition:background-color .15s ease;font-size:13px;color:var(--text-secondary);line-height:20px;min-height:32px}.sider-item:hover{background:var(--bg-hover);color:var(--text-primary)}.sider-item.active{background:color-mix(in srgb,var(--primary) 12%,transparent);color:var(--primary)}.sider-item-icon{flex:0 0 auto;width:18px;height:18px;display:flex;align-items:center;justify-content:center;opacity:.7}.sider-item.active .sider-item-icon{opacity:1}.sider-item-label{flex:1 1 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sider-item-meta{flex:0 0 auto;font-size:11px;opacity:.5}.sider-footer{flex:0 0 auto;padding:8px 6px 12px;border-top:1px solid var(--border-base)}.sider-footer-btn{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:var(--radius-sm);cursor:pointer;transition:background-color .15s;font-size:13px;color:var(--text-secondary);width:100%}.sider-footer-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.sider-footer-btn.active{background:color-mix(in srgb,var(--primary) 12%,transparent);color:var(--primary)}.main-area{display:flex;flex-direction:column;height:100vh;overflow:hidden;background:var(--bg-base)}.main-header{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;height:var(--titlebar-height);padding:0 16px;border-bottom:1px solid var(--border-base);background:var(--bg-base)}.main-header-title{display:flex;align-items:center;gap:8px;min-width:0}.main-header-title strong{font-size:14px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.main-header-badge{font-size:11px;color:var(--text-secondary);background:var(--bg-2);border:1px solid var(--border-light);border-radius:var(--radius-sm);padding:2px 8px;white-space:nowrap}.main-header-actions{display:flex;gap:4px}.chat-area{flex:1 1 auto;overflow-y:auto;padding:24px 0;display:flex;flex-direction:column;gap:2px;scroll-behavior:smooth}.message-row{max-width:800px;width:100%;margin:0 auto;padding:12px 24px}.message-row.user{background:var(--message-user-bg)}.message-row.assistant{background:transparent}.message-row.system{background:var(--message-tips-bg)}.message-row.tool{background:var(--bg-2);font-size:12px;color:var(--text-secondary);border-radius:var(--radius-sm);margin:2px auto}.message-row.bash{background:var(--bg-2);font-family:SF Mono,Cascadia Code,Fira Code,monospace;font-size:12px;color:var(--text-secondary);border-radius:var(--radius-sm);white-space:pre-wrap}.message-sender{font-size:12px;font-weight:600;color:var(--text-secondary);margin-bottom:6px;display:flex;align-items:center;gap:6px}.message-sender-dot{width:6px;height:6px;border-radius:50%;background:var(--primary)}.message-row.user .message-sender-dot{background:var(--brand)}.message-body{font-size:14px;line-height:1.7;color:var(--text-primary);white-space:pre-wrap;word-break:break-word}.message-body code{font-family:JetBrains Mono,Fira Code,monospace;background:var(--bg-2);border:1px solid var(--border-light);border-radius:4px;padding:1px 5px;font-size:13px}.message-body pre{background:var(--bg-2);border:1px solid var(--border-base);border-radius:var(--radius-sm);padding:12px;overflow-x:auto;margin:8px 0}.message-body pre code{background:transparent;border:none;padding:0;font-size:13px;line-height:1.5}.tool-card{background:var(--bg-2);border:1px solid var(--border-base);border-radius:var(--radius-sm);margin:6px 0;overflow:hidden}.tool-card-header{display:flex;align-items:center;gap:6px;padding:6px 10px;font-size:12px;color:var(--text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none}.tool-card-header:hover{background:var(--bg-hover)}.tool-card-name{font-weight:500;color:var(--primary)}.tool-card-status{margin-left:auto;font-size:11px}.tool-card-body{padding:8px 10px;font-size:12px;line-height:1.5;color:var(--text-secondary);font-family:JetBrains Mono,Fira Code,monospace;max-height:200px;overflow-y:auto;white-space:pre-wrap}.sendbox-wrapper{flex:0 0 auto;padding:0 24px 20px;display:flex;justify-content:center}.sendbox{width:100%;max-width:800px;background:var(--bg-2);border:1px solid var(--border-base);border-radius:var(--radius-lg);padding:12px 14px;display:flex;flex-direction:column;gap:8px;box-shadow:var(--shadow-card);transition:border-color .2s}.sendbox:focus-within{border-color:var(--primary)}.sendbox-input{width:100%;min-height:20px;max-height:200px;border:none;background:transparent;color:var(--text-primary);font-family:inherit;font-size:14px;line-height:1.5;resize:none;outline:none}.sendbox-input::placeholder{color:var(--text-disabled)}.sendbox-toolbar{display:flex;align-items:center;gap:8px}.sendbox-model-btn{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--text-secondary);background:transparent;border:none;padding:4px 8px;border-radius:var(--radius-sm);cursor:pointer;transition:color .15s}.sendbox-model-btn:hover{color:var(--text-primary);background:var(--bg-hover)}.sendbox-send-btn{margin-left:auto;width:28px;height:28px;border-radius:50%;border:none;background:var(--bg-4);color:var(--text-disabled);display:flex;align-items:center;justify-content:center;cursor:not-allowed;transition:background-color .2s,color .2s;flex-shrink:0}.sendbox-send-btn.active{background:var(--primary);color:var(--inverse);cursor:pointer}.sendbox-send-btn.active:hover{background:var(--primary-hover)}.sendbox-attach-btn{width:28px;height:28px;border-radius:50%;border:none;background:transparent;color:var(--text-secondary);display:flex;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0}.sendbox-attach-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.empty-state{flex:1 1 auto;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:var(--text-secondary);padding:40px}.empty-state-icon{width:48px;height:48px;border-radius:var(--radius-md);background:var(--bg-2);border:1px solid var(--border-base);display:flex;align-items:center;justify-content:center;color:var(--text-disabled)}.empty-state h3{font-size:16px;font-weight:600;color:var(--text-primary)}.empty-state p{font-size:13px;text-align:center;max-width:360px;line-height:1.5}.btn-icon{width:28px;height:28px;border-radius:var(--radius-sm);border:none;background:transparent;color:var(--text-secondary);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:background-color .15s,color .15s}.btn-icon:hover{background:var(--bg-hover);color:var(--text-primary)}.btn-icon:active{background:var(--bg-active)}.btn-primary{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border-radius:var(--radius-sm);border:none;background:var(--primary);color:var(--inverse);font-size:12px;font-weight:500;cursor:pointer;transition:background-color .15s;white-space:nowrap}.btn-primary:hover{background:var(--primary-hover)}.btn-primary:disabled{opacity:.4;cursor:not-allowed}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en" data-theme="dark" data-color-scheme="default">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>OMP</title>
|
|
7
|
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
8
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
9
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet" />
|
|
10
|
+
<script type="module" crossorigin src="/assets/index-BQ6zLLfz.js"></script>
|
|
11
|
+
<link rel="stylesheet" crossorigin href="/assets/index-Befs78HG.css">
|
|
12
|
+
</head>
|
|
13
|
+
<body>
|
|
14
|
+
<div id="root"></div>
|
|
15
|
+
</body>
|
|
16
|
+
</html>
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
4
|
+
import { isOmpWebPluginId, ompWebPluginIdPattern } from "./shared/pluginIds.js";
|
|
5
|
+
import { isRecord } from "./server/utils.js";
|
|
6
|
+
export function defaultOmpWebConfigPath(env = process.env) {
|
|
7
|
+
const xdgConfigHome = env["XDG_CONFIG_HOME"];
|
|
8
|
+
return join(xdgConfigHome !== undefined && xdgConfigHome !== "" ? xdgConfigHome : join(homedir(), ".config"), "omp-web", "config.json");
|
|
9
|
+
}
|
|
10
|
+
export function defaultOmpWebDataDir() {
|
|
11
|
+
return join(homedir(), ".omp-web");
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Default maximum HTTP body size (bytes) for the web/API and session daemon.
|
|
15
|
+
* Generous headroom for base64 image attachments (well above pi's 4.5MB
|
|
16
|
+
* per-image inline limit so several images fit in one request).
|
|
17
|
+
*/
|
|
18
|
+
export const DEFAULT_MAX_UPLOAD_BYTES = 64 * 1024 * 1024;
|
|
19
|
+
export const DEFAULT_UPLOADS_FOLDER = ".omp-web/uploads";
|
|
20
|
+
export function effectiveUploadsConfig(config = {}) {
|
|
21
|
+
return { defaultFolder: config.uploads?.defaultFolder ?? DEFAULT_UPLOADS_FOLDER };
|
|
22
|
+
}
|
|
23
|
+
export function maxUploadBytes(env = process.env, config = {}) {
|
|
24
|
+
const fromEnv = env["OMP_WEB_MAX_UPLOAD_BYTES"];
|
|
25
|
+
if (fromEnv !== undefined && fromEnv !== "") {
|
|
26
|
+
const parsed = Number(fromEnv);
|
|
27
|
+
if (Number.isInteger(parsed) && parsed > 0)
|
|
28
|
+
return parsed;
|
|
29
|
+
}
|
|
30
|
+
if (config.maxUploadBytes !== undefined)
|
|
31
|
+
return config.maxUploadBytes;
|
|
32
|
+
return DEFAULT_MAX_UPLOAD_BYTES;
|
|
33
|
+
}
|
|
34
|
+
export function ompWebDataDir(env = process.env, cwd = process.cwd()) {
|
|
35
|
+
const configured = env["OMP_WEB_DATA_DIR"];
|
|
36
|
+
if (configured === undefined || configured === "")
|
|
37
|
+
return defaultOmpWebDataDir();
|
|
38
|
+
return resolve(cwd, configured);
|
|
39
|
+
}
|
|
40
|
+
export function ompWebConfigPath(env = process.env, cwd = process.cwd()) {
|
|
41
|
+
const configured = env["OMP_WEB_CONFIG"];
|
|
42
|
+
if (configured === undefined || configured === "")
|
|
43
|
+
return defaultOmpWebConfigPath(env);
|
|
44
|
+
return resolve(cwd, configured);
|
|
45
|
+
}
|
|
46
|
+
export function loadOmpWebConfig(options = {}) {
|
|
47
|
+
const env = options.env ?? process.env;
|
|
48
|
+
const path = ompWebConfigPath(env, options.cwd ?? process.cwd());
|
|
49
|
+
if (!existsSync(path))
|
|
50
|
+
return { path, exists: false, config: {} };
|
|
51
|
+
const parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
52
|
+
if (!isRecord(parsed))
|
|
53
|
+
throw new Error(`PI WEB config must be a JSON object: ${path}`);
|
|
54
|
+
return { path, exists: true, config: parseOmpWebConfig(parsed, path) };
|
|
55
|
+
}
|
|
56
|
+
export function effectiveOmpWebConfig(options = {}) {
|
|
57
|
+
const loaded = loadOmpWebConfig(options);
|
|
58
|
+
const env = options.env ?? process.env;
|
|
59
|
+
const host = env["OMP_WEB_HOST"];
|
|
60
|
+
const port = env["OMP_WEB_PORT"] ?? env["PORT"];
|
|
61
|
+
const allowedHosts = env["OMP_WEB_ALLOWED_HOSTS"];
|
|
62
|
+
const maxUpload = env["OMP_WEB_MAX_UPLOAD_BYTES"];
|
|
63
|
+
return {
|
|
64
|
+
...loaded,
|
|
65
|
+
config: {
|
|
66
|
+
...loaded.config,
|
|
67
|
+
...(host !== undefined && host !== "" ? { host } : {}),
|
|
68
|
+
...(port !== undefined && port !== "" ? { port: parsePort(port, "OMP_WEB_PORT") } : {}),
|
|
69
|
+
...(allowedHosts !== undefined && allowedHosts !== "" ? { allowedHosts: parseAllowedHostsEnv(allowedHosts) } : {}),
|
|
70
|
+
...(maxUpload !== undefined && maxUpload !== "" ? { maxUploadBytes: parseMaxUploadBytes(maxUpload, "OMP_WEB_MAX_UPLOAD_BYTES") } : {}),
|
|
71
|
+
uploads: effectiveUploadsConfig(loaded.config),
|
|
72
|
+
// Always resolved (on by default) so the effective config is the single
|
|
73
|
+
// source of truth for the runtime state and the settings UI toggle.
|
|
74
|
+
spawnSessions: spawnSessionsEnabled(env, loaded.config),
|
|
75
|
+
// Beta capability, resolved off by default.
|
|
76
|
+
subsessions: subsessionsEnabled(env, loaded.config),
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export function saveOmpWebConfig(config, options = {}) {
|
|
81
|
+
const env = options.env ?? process.env;
|
|
82
|
+
const path = ompWebConfigPath(env, options.cwd ?? process.cwd());
|
|
83
|
+
const normalized = parseOmpWebConfig(ompWebConfigRecord(config), path);
|
|
84
|
+
const existing = readExistingConfigObject(path);
|
|
85
|
+
delete existing["host"];
|
|
86
|
+
delete existing["port"];
|
|
87
|
+
delete existing["allowedHosts"];
|
|
88
|
+
delete existing["shortcuts"];
|
|
89
|
+
delete existing["plugins"];
|
|
90
|
+
delete existing["pathAccess"];
|
|
91
|
+
delete existing["uploads"];
|
|
92
|
+
delete existing["maxUploadBytes"];
|
|
93
|
+
delete existing["spawnSessions"];
|
|
94
|
+
delete existing["subsessions"];
|
|
95
|
+
const merged = { ...existing, ...ompWebConfigRecord(normalized) };
|
|
96
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
97
|
+
writeFileSync(path, `${JSON.stringify(merged, null, 2)}\n`, "utf8");
|
|
98
|
+
return { path, exists: true, config: normalized };
|
|
99
|
+
}
|
|
100
|
+
function readExistingConfigObject(path) {
|
|
101
|
+
if (!existsSync(path))
|
|
102
|
+
return {};
|
|
103
|
+
const parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
104
|
+
if (!isRecord(parsed))
|
|
105
|
+
throw new Error(`PI WEB config must be a JSON object: ${path}`);
|
|
106
|
+
return parsed;
|
|
107
|
+
}
|
|
108
|
+
function ompWebConfigRecord(config) {
|
|
109
|
+
return {
|
|
110
|
+
...(config.host !== undefined ? { host: config.host } : {}),
|
|
111
|
+
...(config.port !== undefined ? { port: config.port } : {}),
|
|
112
|
+
...(config.allowedHosts !== undefined ? { allowedHosts: config.allowedHosts } : {}),
|
|
113
|
+
...(config.shortcuts !== undefined ? { shortcuts: config.shortcuts } : {}),
|
|
114
|
+
...(config.plugins !== undefined ? { plugins: config.plugins } : {}),
|
|
115
|
+
...(config.pathAccess !== undefined ? { pathAccess: config.pathAccess } : {}),
|
|
116
|
+
...(config.uploads !== undefined ? { uploads: config.uploads } : {}),
|
|
117
|
+
...(config.maxUploadBytes !== undefined ? { maxUploadBytes: config.maxUploadBytes } : {}),
|
|
118
|
+
...(config.spawnSessions !== undefined ? { spawnSessions: config.spawnSessions } : {}),
|
|
119
|
+
...(config.subsessions !== undefined ? { subsessions: config.subsessions } : {}),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
function parseOmpWebConfig(value, path) {
|
|
123
|
+
return {
|
|
124
|
+
...(value["host"] !== undefined ? { host: parseString(value["host"], "host", path) } : {}),
|
|
125
|
+
...(value["port"] !== undefined ? { port: parsePort(value["port"], "port", path) } : {}),
|
|
126
|
+
...(value["allowedHosts"] !== undefined ? { allowedHosts: parseAllowedHosts(value["allowedHosts"], path) } : {}),
|
|
127
|
+
...(value["shortcuts"] !== undefined ? { shortcuts: parseShortcuts(value["shortcuts"], path) } : {}),
|
|
128
|
+
...(value["plugins"] !== undefined ? { plugins: parsePlugins(value["plugins"], path) } : {}),
|
|
129
|
+
...(value["pathAccess"] !== undefined ? { pathAccess: parsePathAccessConfig(value["pathAccess"], path) } : {}),
|
|
130
|
+
...(value["uploads"] !== undefined ? { uploads: parseUploadsConfig(value["uploads"], path) } : {}),
|
|
131
|
+
...(value["maxUploadBytes"] !== undefined ? { maxUploadBytes: parseMaxUploadBytes(value["maxUploadBytes"], "maxUploadBytes", path) } : {}),
|
|
132
|
+
...(value["spawnSessions"] !== undefined ? { spawnSessions: parseSpawnSessions(value["spawnSessions"], path) } : {}),
|
|
133
|
+
...(value["subsessions"] !== undefined ? { subsessions: parseSubsessions(value["subsessions"], path) } : {}),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
function parseMaxUploadBytes(value, key, path = "environment") {
|
|
137
|
+
const bytes = typeof value === "number" ? value : typeof value === "string" && value !== "" ? Number(value) : NaN;
|
|
138
|
+
if (!Number.isInteger(bytes) || bytes < 1)
|
|
139
|
+
throw new Error(`PI WEB config ${key} must be a positive integer: ${path}`);
|
|
140
|
+
return bytes;
|
|
141
|
+
}
|
|
142
|
+
function parseSpawnSessions(value, path) {
|
|
143
|
+
if (typeof value !== "boolean")
|
|
144
|
+
throw new Error(`PI WEB config spawnSessions must be a boolean: ${path}`);
|
|
145
|
+
return value;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Whether LLMs may start new sessions via the spawn_session tool. On by default
|
|
149
|
+
* (spawned sessions appear in the session list, so humans notice them); set the
|
|
150
|
+
* env var `OMP_WEB_SPAWN_SESSIONS` or the `spawnSessions` config key to `false`
|
|
151
|
+
* to disable. The env var takes precedence over the config file.
|
|
152
|
+
*/
|
|
153
|
+
export function spawnSessionsEnabled(env = process.env, config = {}) {
|
|
154
|
+
const fromEnv = env["OMP_WEB_SPAWN_SESSIONS"];
|
|
155
|
+
if (fromEnv !== undefined && fromEnv !== "")
|
|
156
|
+
return fromEnv === "1" || fromEnv.toLowerCase() === "true";
|
|
157
|
+
return config.spawnSessions ?? true;
|
|
158
|
+
}
|
|
159
|
+
function parseSubsessions(value, path) {
|
|
160
|
+
if (typeof value !== "boolean")
|
|
161
|
+
throw new Error(`PI WEB config subsessions must be a boolean: ${path}`);
|
|
162
|
+
return value;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Beta: whether LLMs may start tracked child sessions via the spawn_subsession
|
|
166
|
+
* family of tools. Off by default while the capability stabilizes, so it can
|
|
167
|
+
* ship in main without affecting releases; enable with the env var
|
|
168
|
+
* `OMP_WEB_SUBSESSIONS` or the `subsessions` config key. The env var takes
|
|
169
|
+
* precedence over the config file. Subsessions also require spawnSessions to be
|
|
170
|
+
* enabled (they share the same project-scope resolver).
|
|
171
|
+
*/
|
|
172
|
+
export function subsessionsEnabled(env = process.env, config = {}) {
|
|
173
|
+
const fromEnv = env["OMP_WEB_SUBSESSIONS"];
|
|
174
|
+
if (fromEnv !== undefined && fromEnv !== "")
|
|
175
|
+
return fromEnv === "1" || fromEnv.toLowerCase() === "true";
|
|
176
|
+
return config.subsessions ?? false;
|
|
177
|
+
}
|
|
178
|
+
function parseString(value, key, path) {
|
|
179
|
+
if (typeof value !== "string" || value === "")
|
|
180
|
+
throw new Error(`PI WEB config ${key} must be a non-empty string: ${path}`);
|
|
181
|
+
return value;
|
|
182
|
+
}
|
|
183
|
+
function parsePort(value, key, path = "environment") {
|
|
184
|
+
const port = typeof value === "number" ? value : typeof value === "string" && value !== "" ? Number(value) : NaN;
|
|
185
|
+
if (!Number.isInteger(port) || port < 1 || port > 65535)
|
|
186
|
+
throw new Error(`PI WEB config ${key} must be an integer from 1 to 65535: ${path}`);
|
|
187
|
+
return port;
|
|
188
|
+
}
|
|
189
|
+
function parseAllowedHosts(value, path) {
|
|
190
|
+
if (value === true)
|
|
191
|
+
return true;
|
|
192
|
+
if (!isNonEmptyStringArray(value)) {
|
|
193
|
+
throw new Error(`PI WEB config allowedHosts must be true or an array of non-empty strings: ${path}`);
|
|
194
|
+
}
|
|
195
|
+
return value;
|
|
196
|
+
}
|
|
197
|
+
function parseAllowedHostsEnv(value) {
|
|
198
|
+
if (value === "true")
|
|
199
|
+
return true;
|
|
200
|
+
return value.split(",").map((host) => host.trim()).filter((host) => host !== "");
|
|
201
|
+
}
|
|
202
|
+
export function parsePathAccessConfig(value, path) {
|
|
203
|
+
if (!isRecord(value))
|
|
204
|
+
throw new Error(`PI WEB config pathAccess must be an object: ${path}`);
|
|
205
|
+
const allowedPaths = value["allowedPaths"];
|
|
206
|
+
return {
|
|
207
|
+
...(allowedPaths !== undefined ? { allowedPaths: parseAllowedPaths(allowedPaths, path) } : {}),
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
function parseAllowedPaths(value, path) {
|
|
211
|
+
if (!isNonEmptyStringArray(value))
|
|
212
|
+
throw new Error(`PI WEB config pathAccess.allowedPaths must be an array of non-empty strings: ${path}`);
|
|
213
|
+
return value;
|
|
214
|
+
}
|
|
215
|
+
export function parseUploadsConfig(value, path) {
|
|
216
|
+
if (!isRecord(value))
|
|
217
|
+
throw new Error(`PI WEB config uploads must be an object: ${path}`);
|
|
218
|
+
const defaultFolder = value["defaultFolder"];
|
|
219
|
+
return {
|
|
220
|
+
...(defaultFolder !== undefined ? { defaultFolder: parseWorkspaceRelativeFolder(defaultFolder, "uploads.defaultFolder", path) } : {}),
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
function parseWorkspaceRelativeFolder(value, key, path) {
|
|
224
|
+
if (typeof value !== "string" || value.trim() === "")
|
|
225
|
+
throw new Error(`PI WEB config ${key} must be a non-empty workspace-relative path: ${path}`);
|
|
226
|
+
if (isAbsoluteLike(value))
|
|
227
|
+
throw new Error(`PI WEB config ${key} must be workspace-relative: ${path}`);
|
|
228
|
+
const parts = value.split(/[\\/]+/).filter((part) => part !== "" && part !== ".");
|
|
229
|
+
if (parts.length === 0)
|
|
230
|
+
throw new Error(`PI WEB config ${key} must be a non-empty workspace-relative path: ${path}`);
|
|
231
|
+
if (parts.some((part) => part === ".."))
|
|
232
|
+
throw new Error(`PI WEB config ${key} must not contain path traversal: ${path}`);
|
|
233
|
+
return parts.join("/");
|
|
234
|
+
}
|
|
235
|
+
function isAbsoluteLike(value) {
|
|
236
|
+
const withForwardSlashes = value.replace(/\\/g, "/");
|
|
237
|
+
return isAbsolute(value) || withForwardSlashes.startsWith("/") || /^[A-Za-z]:\//.test(withForwardSlashes);
|
|
238
|
+
}
|
|
239
|
+
function parseShortcuts(value, path) {
|
|
240
|
+
if (!isRecord(value))
|
|
241
|
+
throw new Error(`PI WEB config shortcuts must be an object: ${path}`);
|
|
242
|
+
return Object.fromEntries(Object.entries(value).map(([actionId, shortcut]) => {
|
|
243
|
+
if (shortcut !== null && (typeof shortcut !== "string" || shortcut === "")) {
|
|
244
|
+
throw new Error(`PI WEB config shortcut values must be non-empty strings or null: ${path}`);
|
|
245
|
+
}
|
|
246
|
+
return [actionId, shortcut];
|
|
247
|
+
}));
|
|
248
|
+
}
|
|
249
|
+
function parsePlugins(value, path) {
|
|
250
|
+
if (!isRecord(value) || Array.isArray(value))
|
|
251
|
+
throw new Error(`PI WEB config plugins must be an object: ${path}`);
|
|
252
|
+
return Object.fromEntries(Object.entries(value).map(([pluginId, config]) => {
|
|
253
|
+
if (!isOmpWebPluginId(pluginId))
|
|
254
|
+
throw new Error(`PI WEB config plugin ids must match ${ompWebPluginIdPattern.source}: ${path}`);
|
|
255
|
+
if (!isRecord(config) || Array.isArray(config))
|
|
256
|
+
throw new Error(`PI WEB config plugin entries must be objects: ${path}`);
|
|
257
|
+
const enabled = config["enabled"];
|
|
258
|
+
if (enabled !== undefined && typeof enabled !== "boolean")
|
|
259
|
+
throw new Error(`PI WEB config plugin enabled values must be booleans: ${path}`);
|
|
260
|
+
const settings = config["settings"];
|
|
261
|
+
if (settings !== undefined && (!isRecord(settings) || Array.isArray(settings)))
|
|
262
|
+
throw new Error(`PI WEB config plugin settings must be objects: ${path}`);
|
|
263
|
+
return [pluginId, config];
|
|
264
|
+
}));
|
|
265
|
+
}
|
|
266
|
+
function isNonEmptyStringArray(value) {
|
|
267
|
+
return Array.isArray(value) && value.every((item) => typeof item === "string" && item !== "");
|
|
268
|
+
}
|
|
269
|
+
export function exampleOmpWebConfig(config = {}) {
|
|
270
|
+
return `${JSON.stringify({ host: config.host ?? "127.0.0.1", port: config.port ?? 8504, allowedHosts: config.allowedHosts ?? [] }, null, 2)}\n`;
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
export const OMP_WEB_DOCKER_USER_COMMANDS = [
|
|
2
|
+
"install",
|
|
3
|
+
"start",
|
|
4
|
+
"stop",
|
|
5
|
+
"restart",
|
|
6
|
+
"restart-web",
|
|
7
|
+
"restart-sessiond",
|
|
8
|
+
"update",
|
|
9
|
+
"status",
|
|
10
|
+
"logs",
|
|
11
|
+
"shell",
|
|
12
|
+
"doctor",
|
|
13
|
+
"cli",
|
|
14
|
+
];
|
|
15
|
+
const noArgumentCommands = new Set([
|
|
16
|
+
"start",
|
|
17
|
+
"stop",
|
|
18
|
+
"restart",
|
|
19
|
+
"restart-web",
|
|
20
|
+
"restart-sessiond",
|
|
21
|
+
"update",
|
|
22
|
+
"status",
|
|
23
|
+
"doctor",
|
|
24
|
+
"help",
|
|
25
|
+
]);
|
|
26
|
+
const commands = new Set([...OMP_WEB_DOCKER_USER_COMMANDS, "help"]);
|
|
27
|
+
const logsTargets = new Set(["web", "sessiond", "data-init"]);
|
|
28
|
+
const shellTargets = new Set(["web", "sessiond"]);
|
|
29
|
+
export function ompWebDockerCommandPrefix(mode) {
|
|
30
|
+
return mode === "dev" ? "omp-web-docker --dev" : "omp-web-docker";
|
|
31
|
+
}
|
|
32
|
+
export function ompWebDockerCommand(mode, command) {
|
|
33
|
+
return `${ompWebDockerCommandPrefix(mode)} ${command}`;
|
|
34
|
+
}
|
|
35
|
+
export function planOmpWebDockerRuntimeHostCommand(plan) {
|
|
36
|
+
if (plan.mode !== "runtime")
|
|
37
|
+
return undefined;
|
|
38
|
+
switch (plan.command) {
|
|
39
|
+
case "install":
|
|
40
|
+
return { kind: "installer", action: "install", args: [...plan.args], useRuntimeRootAsInstallDir: false };
|
|
41
|
+
case "update":
|
|
42
|
+
return { kind: "installer", action: "update", args: [], useRuntimeRootAsInstallDir: true };
|
|
43
|
+
case "start":
|
|
44
|
+
return composeHostPlan("up", "-d");
|
|
45
|
+
case "stop":
|
|
46
|
+
return composeHostPlan("down");
|
|
47
|
+
case "restart":
|
|
48
|
+
return composeHostPlan("restart", "web", "sessiond");
|
|
49
|
+
case "restart-web":
|
|
50
|
+
return composeHostPlan("restart", "web");
|
|
51
|
+
case "restart-sessiond":
|
|
52
|
+
return composeHostPlan("restart", "sessiond");
|
|
53
|
+
case "status":
|
|
54
|
+
return composeHostPlan("ps");
|
|
55
|
+
case "logs":
|
|
56
|
+
return plan.target === undefined ? composeHostPlan("logs", "-f") : composeHostPlan("logs", "-f", plan.target);
|
|
57
|
+
case "shell":
|
|
58
|
+
return composeHostPlan("exec", plan.target ?? "web", "bash");
|
|
59
|
+
case "cli":
|
|
60
|
+
return { kind: "compose", args: ["exec", "web", "omp-web", ...plan.args] };
|
|
61
|
+
case "doctor":
|
|
62
|
+
return { kind: "diagnostics" };
|
|
63
|
+
case "help":
|
|
64
|
+
return { kind: "usage" };
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export function planOmpWebDockerDevHostCommand(plan) {
|
|
68
|
+
if (plan.mode !== "dev")
|
|
69
|
+
return undefined;
|
|
70
|
+
switch (plan.command) {
|
|
71
|
+
case "install":
|
|
72
|
+
return undefined;
|
|
73
|
+
case "start":
|
|
74
|
+
return devComposeHostPlan("up", "-d", "--build");
|
|
75
|
+
case "stop":
|
|
76
|
+
return devComposeHostPlan("down");
|
|
77
|
+
case "restart":
|
|
78
|
+
return devComposeHostPlan("restart", "web", "sessiond");
|
|
79
|
+
case "restart-web":
|
|
80
|
+
return devComposeHostPlan("restart", "web");
|
|
81
|
+
case "restart-sessiond":
|
|
82
|
+
return devComposeHostPlan("restart", "sessiond");
|
|
83
|
+
case "update":
|
|
84
|
+
return {
|
|
85
|
+
kind: "composeSequence",
|
|
86
|
+
usesGeneratedEnv: true,
|
|
87
|
+
steps: [
|
|
88
|
+
{ args: ["build", "--pull"] },
|
|
89
|
+
{ args: ["up", "-d", "--force-recreate", "--remove-orphans"] },
|
|
90
|
+
],
|
|
91
|
+
};
|
|
92
|
+
case "status":
|
|
93
|
+
return devComposeHostPlan("ps");
|
|
94
|
+
case "logs":
|
|
95
|
+
return plan.target === undefined ? devComposeHostPlan("logs", "-f") : devComposeHostPlan("logs", "-f", plan.target);
|
|
96
|
+
case "shell":
|
|
97
|
+
return devComposeHostPlan("exec", plan.target ?? "web", "bash");
|
|
98
|
+
case "cli":
|
|
99
|
+
return { kind: "compose", args: ["exec", "web", "omp-web", ...plan.args], usesGeneratedEnv: true };
|
|
100
|
+
case "doctor":
|
|
101
|
+
return { kind: "diagnostics", usesGeneratedEnv: true };
|
|
102
|
+
case "help":
|
|
103
|
+
return { kind: "usage" };
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
export function validateOmpWebDockerDevRootSafety(plan, uid) {
|
|
107
|
+
if (plan.mode !== "dev" || plan.allowRoot || plan.command === "help" || uid !== 0)
|
|
108
|
+
return undefined;
|
|
109
|
+
return "refusing to run Docker development mode as root; retry with --allow-root if this is intentional";
|
|
110
|
+
}
|
|
111
|
+
export function parseOmpWebDockerArgs(argv) {
|
|
112
|
+
let mode = "runtime";
|
|
113
|
+
let allowRoot = false;
|
|
114
|
+
let index = 0;
|
|
115
|
+
for (; index < argv.length; index += 1) {
|
|
116
|
+
const arg = argv[index];
|
|
117
|
+
if (arg === undefined)
|
|
118
|
+
break;
|
|
119
|
+
if (arg === "--") {
|
|
120
|
+
index += 1;
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
if (arg === "--dev") {
|
|
124
|
+
mode = "dev";
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
if (arg === "--allow-root") {
|
|
128
|
+
allowRoot = true;
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
if (arg === "--help" || arg === "-h") {
|
|
132
|
+
return { ok: true, plan: { mode, command: "help", allowRoot, args: [] } };
|
|
133
|
+
}
|
|
134
|
+
if (arg.startsWith("-")) {
|
|
135
|
+
return { ok: false, errors: [`Unknown global option: ${arg}`] };
|
|
136
|
+
}
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
const commandValue = argv[index];
|
|
140
|
+
if (commandValue === undefined)
|
|
141
|
+
return { ok: false, errors: ["Missing command"] };
|
|
142
|
+
if (!isOmpWebDockerCommand(commandValue))
|
|
143
|
+
return { ok: false, errors: [`Unknown command: ${commandValue}`] };
|
|
144
|
+
const args = argv.slice(index + 1);
|
|
145
|
+
const plan = { mode, command: commandValue, allowRoot, args };
|
|
146
|
+
return validatePlan(withDefaultTarget(plan));
|
|
147
|
+
}
|
|
148
|
+
function composeHostPlan(...args) {
|
|
149
|
+
return { kind: "compose", args };
|
|
150
|
+
}
|
|
151
|
+
function devComposeHostPlan(...args) {
|
|
152
|
+
return { kind: "compose", args, usesGeneratedEnv: true };
|
|
153
|
+
}
|
|
154
|
+
function withDefaultTarget(plan) {
|
|
155
|
+
if (plan.command === "shell" && plan.target === undefined && plan.args.length === 0)
|
|
156
|
+
return { ...plan, target: "web" };
|
|
157
|
+
return plan;
|
|
158
|
+
}
|
|
159
|
+
function validatePlan(plan) {
|
|
160
|
+
const errors = [];
|
|
161
|
+
if (plan.command === "install" && plan.mode === "dev") {
|
|
162
|
+
errors.push("install is only available in runtime mode");
|
|
163
|
+
}
|
|
164
|
+
if (noArgumentCommands.has(plan.command) && plan.args.length > 0) {
|
|
165
|
+
errors.push(`${plan.command} does not accept positional arguments`);
|
|
166
|
+
}
|
|
167
|
+
if (plan.command === "logs") {
|
|
168
|
+
validateOptionalTarget(plan.args, isLogsTarget, "logs", errors);
|
|
169
|
+
if (plan.args[0] === "data-init" && plan.mode !== "dev")
|
|
170
|
+
errors.push("logs data-init is only available in development mode");
|
|
171
|
+
}
|
|
172
|
+
if (plan.command === "shell") {
|
|
173
|
+
validateOptionalTarget(plan.args, isShellTarget, "shell", errors);
|
|
174
|
+
}
|
|
175
|
+
if (plan.command === "cli" && plan.args.length === 0) {
|
|
176
|
+
errors.push("cli requires omp-web arguments");
|
|
177
|
+
}
|
|
178
|
+
if (errors.length > 0)
|
|
179
|
+
return { ok: false, errors };
|
|
180
|
+
const target = targetFrom(plan.command, plan.args);
|
|
181
|
+
return { ok: true, plan: target === undefined ? plan : { ...plan, target } };
|
|
182
|
+
}
|
|
183
|
+
function validateOptionalTarget(args, isAllowed, command, errors) {
|
|
184
|
+
if (args.length > 1) {
|
|
185
|
+
errors.push(`${command} accepts at most one target`);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
const [target] = args;
|
|
189
|
+
if (target !== undefined && !isAllowed(target))
|
|
190
|
+
errors.push(`Invalid ${command} target: ${target}`);
|
|
191
|
+
}
|
|
192
|
+
function targetFrom(command, args) {
|
|
193
|
+
const [target] = args;
|
|
194
|
+
if (target === undefined)
|
|
195
|
+
return command === "shell" ? "web" : undefined;
|
|
196
|
+
if (command === "logs" && isLogsTarget(target))
|
|
197
|
+
return target;
|
|
198
|
+
if (command === "shell" && isShellTarget(target))
|
|
199
|
+
return target;
|
|
200
|
+
return undefined;
|
|
201
|
+
}
|
|
202
|
+
function isOmpWebDockerCommand(value) {
|
|
203
|
+
return commands.has(value);
|
|
204
|
+
}
|
|
205
|
+
function isLogsTarget(value) {
|
|
206
|
+
return logsTargets.has(value);
|
|
207
|
+
}
|
|
208
|
+
function isShellTarget(value) {
|
|
209
|
+
return shellTargets.has(value);
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=ompWebDockerCommandPlan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ompWebDockerCommandPlan.js","sourceRoot":"","sources":["../../src/docker/ompWebDockerCommandPlan.ts"],"names":[],"mappings":"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"}
|