@notis_ai/cli 0.2.17 → 0.2.19
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 +542 -146
- package/bin/check-runtime.js +15 -0
- package/bin/notis.js +2 -0
- package/config/notis_app_design_rules.json +320 -0
- package/config/portal-route-roots.json +45 -0
- package/dist/agent-hooks/notis-agent-hook.mjs +42323 -18258
- package/dist/base-skills/notis-cli/.notis-base-skill.json +1 -0
- package/dist/base-skills/notis-cli/SKILL.md +51 -280
- package/dist/base-skills/notis-cli/references/app-delivery.md +17 -0
- package/dist/base-skills/notis-cli/references/intelligence.md +94 -0
- package/dist/base-skills/notis-cli/references/native-databases.md +21 -0
- package/dist/base-skills/notis-cli/references/tool-examples.md +56 -0
- package/dist/base-skills/notis-cli/references/troubleshooting.md +67 -0
- package/dist/base-skills/notis-query/.notis-base-skill.json +1 -0
- package/dist/base-skills/notis-query/SKILL.md +35 -699
- package/dist/base-skills/notis-query/references/database-discovery.md +59 -0
- package/dist/base-skills/notis-query/references/documents.md +74 -0
- package/dist/base-skills/notis-query/references/query.md +76 -0
- package/dist/base-skills/notis-spaces/.notis-base-skill.json +1 -0
- package/dist/base-skills/notis-spaces/SKILL.md +218 -0
- package/dist/base-skills/notis-spaces/references/architecture.md +116 -0
- package/dist/base-skills/notis-spaces/references/context.md +81 -0
- package/dist/base-skills/notis-spaces/references/design.md +141 -0
- package/dist/base-skills/notis-spaces/references/fixtures.md +29 -0
- package/dist/base-skills/notis-spaces/references/memory.md +58 -0
- package/dist/base-skills/notis-spaces/references/reading.md +73 -0
- package/dist/base-skills/notis-spaces/references/release.md +120 -0
- package/dist/base-skills/notis-spaces/references/reports.md +77 -0
- package/dist/base-skills/notis-spaces/references/sdk.md +273 -0
- package/dist/base-skills/notis-spaces/references/store.md +118 -0
- package/dist/base-skills/notis-spaces/references/troubleshooting.md +28 -0
- package/dist/base-skills/notis-spaces/references/views.md +229 -0
- package/{template/packages → dist}/sdk/package.json +9 -10
- package/dist/sdk/src/agentContext.ts +36 -0
- package/dist/sdk/src/bundleModule.ts +175 -0
- package/dist/sdk/src/components/Dialog.tsx +103 -0
- package/dist/sdk/src/components/DocumentEditor.tsx +113 -0
- package/dist/sdk/src/components/DocumentPage.tsx +184 -0
- package/{template/packages → dist}/sdk/src/components/Markdown.tsx +9 -3
- package/{template/packages → dist}/sdk/src/components/MarkdownEditor.tsx +26 -5
- package/{template/packages → dist}/sdk/src/components/MultiSelectActionBar.tsx +95 -12
- package/{template/packages → dist}/sdk/src/components/MultiSelectCheckbox.tsx +4 -2
- package/dist/sdk/src/components/NotisCommentBoundary.tsx +172 -0
- package/{template/packages → dist}/sdk/src/components/NotisSelectionBoundary.tsx +9 -5
- package/dist/sdk/src/components/RecordComponents.tsx +111 -0
- package/dist/sdk/src/components/Skeleton.tsx +38 -0
- package/dist/sdk/src/config.ts +31 -0
- package/{template/packages → dist}/sdk/src/documents.ts +21 -6
- package/dist/sdk/src/hooks/useAction.ts +28 -0
- package/dist/sdk/src/hooks/useAgentContext.ts +23 -0
- package/{template/packages → dist}/sdk/src/hooks/useBackend.ts +3 -2
- package/dist/sdk/src/hooks/useCloudComputer.ts +94 -0
- package/dist/sdk/src/hooks/useCloudComputerShell.ts +114 -0
- package/{template/packages → dist}/sdk/src/hooks/useCollectionInteractions.ts +157 -147
- package/dist/sdk/src/hooks/useDatabaseSchema.ts +50 -0
- package/{template/packages → dist}/sdk/src/hooks/useDatabaseSubscription.ts +2 -2
- package/dist/sdk/src/hooks/useDocument.ts +51 -0
- package/{template/packages → dist}/sdk/src/hooks/useDocuments.ts +25 -59
- package/{template/packages → dist}/sdk/src/hooks/useHandover.ts +7 -7
- package/dist/sdk/src/hooks/useLongPressSelection.ts +79 -0
- package/dist/sdk/src/hooks/useMarqueeSelection.ts +194 -0
- package/{template/packages → dist}/sdk/src/hooks/useMultiSelect.ts +2 -8
- package/dist/sdk/src/hooks/useNativeDocumentBody.ts +50 -0
- package/dist/sdk/src/hooks/useNativeDocuments.ts +143 -0
- package/{template/packages → dist}/sdk/src/hooks/useNotis.ts +6 -1
- package/dist/sdk/src/hooks/useNotisNavigation.ts +70 -0
- package/dist/sdk/src/hooks/useQuery.ts +81 -0
- package/dist/sdk/src/hooks/useToolQuery.ts +12 -0
- package/dist/sdk/src/hooks/useTopBarSearch.ts +102 -0
- package/dist/sdk/src/hooks/useTopBarTitleLeaf.ts +75 -0
- package/{template/packages → dist}/sdk/src/hooks/useUpsertDocument.ts +1 -1
- package/dist/sdk/src/hooks/useViewParams.ts +195 -0
- package/dist/sdk/src/hooks/useViewerReads.ts +129 -0
- package/{template/packages → dist}/sdk/src/index.ts +64 -1
- package/{template/packages → dist}/sdk/src/interactions/actions.ts +14 -1
- package/{template/packages → dist}/sdk/src/interactions/shortcuts.tsx +129 -23
- package/dist/sdk/src/interactions/visibility.ts +13 -0
- package/{template/packages → dist}/sdk/src/interactions.ts +5 -1
- package/dist/sdk/src/nativeData.ts +39 -0
- package/{template/packages → dist}/sdk/src/provider.tsx +9 -4
- package/dist/sdk/src/queryCache.ts +292 -0
- package/dist/sdk/src/queryErrors.ts +51 -0
- package/dist/sdk/src/runtime.ts +675 -0
- package/dist/sdk/src/runtimeModules.ts +33 -0
- package/dist/sdk/src/space.ts +442 -0
- package/dist/sdk/src/standardViewParams.ts +36 -0
- package/{template/packages → dist}/sdk/src/styles.css +81 -16
- package/dist/sdk/src/tailwind.ts +66 -0
- package/dist/sdk/src/ui/charts/RenderChartData.tsx +25 -0
- package/dist/sdk/src/ui/engine/core.ts +392 -0
- package/dist/sdk/src/ui/engine/dom.ts +183 -0
- package/dist/sdk/src/ui/engine/hooks.ts +195 -0
- package/dist/sdk/src/ui/engine/instance.ts +63 -0
- package/dist/sdk/src/ui/engine/keycapContext.ts +2 -0
- package/dist/sdk/src/ui/engine/registry.ts +262 -0
- package/dist/sdk/src/ui/engine/types.ts +62 -0
- package/dist/sdk/src/ui/icons.tsx +91 -0
- package/dist/sdk/src/ui/util.ts +83 -0
- package/dist/sdk/src/viewPeriod.ts +26 -0
- package/dist/sdk/src/vite.ts +92 -0
- package/dist/sdk/src/words/actions.ts +295 -0
- package/dist/sdk/src/words/clashes.ts +158 -0
- package/dist/sdk/src/words/format.ts +136 -0
- package/dist/sdk/src/words/index.ts +13 -0
- package/dist/sdk/src/words/keymap.ts +72 -0
- package/dist/sdk/src/words/keys.ts +297 -0
- package/dist/sdk/src/words/shell.ts +46 -0
- package/dist/sdk/src/words/types.ts +65 -0
- package/dist/skill-sync/index.js +832 -151
- package/dist/skill-sync/index.js.map +4 -4
- package/dist/skill-sync-worker.mjs +3941 -0
- package/dist/space-harness/host.js +1460 -0
- package/dist/space-sdk/dist/chunk-ZSN57ATH.js +5 -0
- package/dist/space-sdk/dist/index.js +15 -0
- package/dist/space-sdk/dist/ui.js +18 -0
- package/dist/space-sdk/package.json +33 -0
- package/dist/space-sdk/src/agentContext.d.ts +36 -0
- package/dist/space-sdk/src/components/Dialog.d.ts +20 -0
- package/dist/space-sdk/src/components/DocumentEditor.d.ts +46 -0
- package/dist/space-sdk/src/components/DocumentPage.d.ts +53 -0
- package/dist/space-sdk/src/components/Markdown.d.ts +18 -0
- package/dist/space-sdk/src/components/MarkdownEditor.d.ts +11 -0
- package/dist/space-sdk/src/components/MultiSelectActionBar.d.ts +31 -0
- package/dist/space-sdk/src/components/MultiSelectCheckbox.d.ts +14 -0
- package/dist/space-sdk/src/components/MultiSelectDragOverlay.d.ts +8 -0
- package/dist/space-sdk/src/components/NotisCommentBoundary.d.ts +36 -0
- package/dist/space-sdk/src/components/NotisSelectionBoundary.d.ts +16 -0
- package/dist/space-sdk/src/components/RecordComponents.d.ts +64 -0
- package/dist/space-sdk/src/components/ShortcutHints.d.ts +12 -0
- package/dist/space-sdk/src/components/Skeleton.d.ts +23 -0
- package/dist/space-sdk/src/config.ts +31 -0
- package/dist/space-sdk/src/documents.d.ts +59 -0
- package/dist/space-sdk/src/hooks/useAction.d.ts +8 -0
- package/dist/space-sdk/src/hooks/useActiveResource.d.ts +3 -0
- package/dist/space-sdk/src/hooks/useAgentContext.d.ts +7 -0
- package/dist/space-sdk/src/hooks/useBackend.d.ts +23 -0
- package/dist/space-sdk/src/hooks/useCloudComputer.d.ts +45 -0
- package/dist/space-sdk/src/hooks/useCloudComputerShell.d.ts +49 -0
- package/dist/space-sdk/src/hooks/useCollectionInteractions.d.ts +118 -0
- package/dist/space-sdk/src/hooks/useDatabaseSchema.d.ts +14 -0
- package/dist/space-sdk/src/hooks/useDatabaseSubscription.d.ts +26 -0
- package/dist/space-sdk/src/hooks/useDocument.d.ts +22 -0
- package/dist/space-sdk/src/hooks/useDocuments.d.ts +31 -0
- package/dist/space-sdk/src/hooks/useHandover.d.ts +43 -0
- package/dist/space-sdk/src/hooks/useLongPressSelection.d.ts +9 -0
- package/dist/space-sdk/src/hooks/useMarqueeSelection.d.ts +57 -0
- package/dist/space-sdk/src/hooks/useMultiSelect.d.ts +51 -0
- package/dist/space-sdk/src/hooks/useNativeDocumentBody.d.ts +24 -0
- package/dist/space-sdk/src/hooks/useNativeDocuments.d.ts +55 -0
- package/dist/space-sdk/src/hooks/useNotis.d.ts +25 -0
- package/dist/space-sdk/src/hooks/useNotisNavigation.d.ts +33 -0
- package/dist/space-sdk/src/hooks/useQuery.d.ts +22 -0
- package/dist/space-sdk/src/hooks/useTool.d.ts +20 -0
- package/dist/space-sdk/src/hooks/useToolQuery.d.ts +3 -0
- package/dist/space-sdk/src/hooks/useTools.d.ts +15 -0
- package/dist/space-sdk/src/hooks/useTopBarSearch.d.ts +48 -0
- package/dist/space-sdk/src/hooks/useTopBarTitleLeaf.d.ts +24 -0
- package/dist/space-sdk/src/hooks/useUpsertDocument.d.ts +27 -0
- package/dist/space-sdk/src/hooks/useViewParams.d.ts +76 -0
- package/dist/space-sdk/src/hooks/useViewerReads.d.ts +38 -0
- package/dist/space-sdk/src/index.d.ts +98 -0
- package/dist/space-sdk/src/interactions/actions.d.ts +33 -0
- package/dist/space-sdk/src/interactions/shortcuts.d.ts +42 -0
- package/dist/space-sdk/src/interactions/visibility.d.ts +2 -0
- package/dist/space-sdk/src/nativeData.d.ts +66 -0
- package/dist/space-sdk/src/provider.d.ts +17 -0
- package/dist/space-sdk/src/queryCache.d.ts +45 -0
- package/dist/space-sdk/src/queryErrors.ts +51 -0
- package/dist/space-sdk/src/runtime.d.ts +615 -0
- package/dist/space-sdk/src/runtimeModules.ts +33 -0
- package/dist/space-sdk/src/space.ts +442 -0
- package/dist/space-sdk/src/standardViewParams.d.ts +15 -0
- package/dist/space-sdk/src/tailwind-candidates.d.ts +3418 -0
- package/dist/space-sdk/src/tailwind.ts +66 -0
- package/dist/space-sdk/src/ui/actions/ActionToast.d.ts +15 -0
- package/dist/space-sdk/src/ui/actions/actionWords.d.ts +16 -0
- package/dist/space-sdk/src/ui/actions/index.d.ts +7 -0
- package/dist/space-sdk/src/ui/actions/useActions.d.ts +69 -0
- package/dist/space-sdk/src/ui/actions/useToast.d.ts +41 -0
- package/dist/space-sdk/src/ui/blocks/Tabs.d.ts +139 -0
- package/dist/space-sdk/src/ui/blocks/blocks.d.ts +217 -0
- package/dist/space-sdk/src/ui/blocks/index.d.ts +4 -0
- package/dist/space-sdk/src/ui/board/BoardView.d.ts +36 -0
- package/dist/space-sdk/src/ui/board/boardModel.d.ts +46 -0
- package/dist/space-sdk/src/ui/board/boardWords.d.ts +9 -0
- package/dist/space-sdk/src/ui/board/index.d.ts +5 -0
- package/dist/space-sdk/src/ui/calendar/CalendarView.d.ts +49 -0
- package/dist/space-sdk/src/ui/calendar/DayPicker.d.ts +23 -0
- package/dist/space-sdk/src/ui/calendar/calendarMath.d.ts +81 -0
- package/dist/space-sdk/src/ui/charts/Chart.d.ts +203 -0
- package/dist/space-sdk/src/ui/charts/ChartTable.d.ts +37 -0
- package/dist/space-sdk/src/ui/charts/RenderChartData.d.ts +16 -0
- package/dist/space-sdk/src/ui/charts/StatRow.d.ts +59 -0
- package/dist/space-sdk/src/ui/charts/chartData.d.ts +84 -0
- package/dist/space-sdk/src/ui/comments/CommentPane.d.ts +58 -0
- package/dist/space-sdk/src/ui/comments/commentModel.d.ts +157 -0
- package/dist/space-sdk/src/ui/comments/commentWords.d.ts +60 -0
- package/dist/space-sdk/src/ui/comments/index.d.ts +4 -0
- package/dist/space-sdk/src/ui/comments/useComments.d.ts +146 -0
- package/dist/space-sdk/src/ui/engine/HelpSheet.d.ts +12 -0
- package/dist/space-sdk/src/ui/engine/KeyboardEngine.d.ts +27 -0
- package/dist/space-sdk/src/ui/engine/core.d.ts +73 -0
- package/dist/space-sdk/src/ui/engine/hooks.d.ts +64 -0
- package/dist/space-sdk/src/ui/engine/index.d.ts +14 -0
- package/dist/space-sdk/src/ui/engine/instance.d.ts +21 -0
- package/dist/space-sdk/src/ui/engine/keycapContext.d.ts +2 -0
- package/dist/space-sdk/src/ui/engine/registry.d.ts +77 -0
- package/dist/space-sdk/src/ui/engine/step.d.ts +11 -0
- package/dist/space-sdk/src/ui/engine/types.d.ts +54 -0
- package/dist/space-sdk/src/ui/fields/fieldWords.d.ts +56 -0
- package/dist/space-sdk/src/ui/fields/fields.d.ts +162 -0
- package/dist/space-sdk/src/ui/fields/index.d.ts +5 -0
- package/dist/space-sdk/src/ui/fields/useFieldDraft.d.ts +22 -0
- package/dist/space-sdk/src/ui/gallery/AttachmentGallery.d.ts +53 -0
- package/dist/space-sdk/src/ui/gallery/ImageViewer.d.ts +27 -0
- package/dist/space-sdk/src/ui/gallery/galleryWords.d.ts +95 -0
- package/dist/space-sdk/src/ui/gallery/index.d.ts +5 -0
- package/dist/space-sdk/src/ui/icons.d.ts +13 -0
- package/dist/space-sdk/src/ui/index.d.ts +54 -0
- package/dist/space-sdk/src/ui/keycap/Keycap.d.ts +22 -0
- package/dist/space-sdk/src/ui/keycap/index.d.ts +2 -0
- package/dist/space-sdk/src/ui/layout/Panels.d.ts +50 -0
- package/dist/space-sdk/src/ui/layout/chatPanelEdge.d.ts +77 -0
- package/dist/space-sdk/src/ui/layout/index.d.ts +5 -0
- package/dist/space-sdk/src/ui/layout/panelMath.d.ts +91 -0
- package/dist/space-sdk/src/ui/list/ListReader.d.ts +380 -0
- package/dist/space-sdk/src/ui/list/Row.d.ts +145 -0
- package/dist/space-sdk/src/ui/list/SelectionBar.d.ts +65 -0
- package/dist/space-sdk/src/ui/list/index.d.ts +14 -0
- package/dist/space-sdk/src/ui/list/rowState.d.ts +22 -0
- package/dist/space-sdk/src/ui/list/useListKeys.d.ts +89 -0
- package/dist/space-sdk/src/ui/list/useReorder.d.ts +86 -0
- package/dist/space-sdk/src/ui/list/useSelection.d.ts +90 -0
- package/dist/space-sdk/src/ui/open/OpenAsMenu.d.ts +15 -0
- package/dist/space-sdk/src/ui/open/index.d.ts +6 -0
- package/dist/space-sdk/src/ui/open/openModeStore.d.ts +39 -0
- package/dist/space-sdk/src/ui/open/useOpenMode.d.ts +17 -0
- package/dist/space-sdk/src/ui/overlay/Menu.d.ts +88 -0
- package/dist/space-sdk/src/ui/overlay/Popover.d.ts +28 -0
- package/dist/space-sdk/src/ui/overlay/Tooltip.d.ts +19 -0
- package/dist/space-sdk/src/ui/overlay/index.d.ts +9 -0
- package/dist/space-sdk/src/ui/overlay/layerRoot.d.ts +24 -0
- package/dist/space-sdk/src/ui/overlay/position.d.ts +31 -0
- package/dist/space-sdk/src/ui/period/PeriodPicker.d.ts +30 -0
- package/dist/space-sdk/src/ui/period/dateFormat.d.ts +50 -0
- package/dist/space-sdk/src/ui/period/dateWords.d.ts +88 -0
- package/dist/space-sdk/src/ui/period/periods.d.ts +70 -0
- package/dist/space-sdk/src/ui/period/usePeriod.d.ts +23 -0
- package/dist/space-sdk/src/ui/present/index.d.ts +3 -0
- package/dist/space-sdk/src/ui/present/presentWords.d.ts +27 -0
- package/dist/space-sdk/src/ui/present/screens.d.ts +36 -0
- package/dist/space-sdk/src/ui/present/useAudienceScreen.d.ts +38 -0
- package/dist/space-sdk/src/ui/styles.d.ts +21 -0
- package/dist/space-sdk/src/ui/timeline/TimelineView.d.ts +44 -0
- package/dist/space-sdk/src/ui/timeline/timelineMath.d.ts +123 -0
- package/dist/space-sdk/src/viewPeriod.d.ts +8 -0
- package/dist/space-sdk/src/vite.ts +92 -0
- package/dist/space-sdk/src/words/actions.ts +295 -0
- package/dist/space-sdk/src/words/clashes.ts +158 -0
- package/dist/space-sdk/src/words/format.ts +136 -0
- package/dist/space-sdk/src/words/index.ts +13 -0
- package/dist/space-sdk/src/words/keymap.ts +72 -0
- package/dist/space-sdk/src/words/keys.ts +297 -0
- package/dist/space-sdk/src/words/shell.ts +46 -0
- package/dist/space-sdk/src/words/types.ts +65 -0
- package/dist/view-renderer/dist/host.css +1 -0
- package/dist/view-renderer/dist/host.js +2374 -0
- package/dist/view-renderer/dist/theme.css +73 -0
- package/dist/view-renderer/src/dom.js +212 -0
- package/dist/view-renderer/src/errors.js +8 -0
- package/dist/view-renderer/src/host.tsx +250 -0
- package/dist/view-renderer/src/index.js +4 -0
- package/dist/view-renderer/src/png.js +213 -0
- package/dist/view-renderer/src/pool.js +110 -0
- package/dist/view-renderer/src/remote-broker.js +59 -0
- package/dist/view-renderer/src/renderer.js +271 -0
- package/package.json +21 -11
- package/skills/notis-cli/AGENT_INSTRUCTIONS.md +63 -12
- package/skills/notis-onboarding/BRIEF.md +14 -9
- package/skills/notis-query/cli.md +1 -1
- package/skills/notis-spaces/cli.md +540 -0
- package/src/cli.js +8 -8
- package/src/command-specs/agents.js +121 -8
- package/src/command-specs/auth.js +3 -3
- package/src/command-specs/diagnostics.js +97 -20
- package/src/command-specs/documents.js +158 -0
- package/src/command-specs/files.js +29 -0
- package/src/command-specs/handover.js +331 -79
- package/src/command-specs/helpers.js +50 -40
- package/src/command-specs/index.js +14 -5
- package/src/command-specs/meta.js +38 -9
- package/src/command-specs/onboarding.js +1 -1
- package/src/command-specs/profile.js +42 -1
- package/src/command-specs/skills.js +314 -9
- package/src/command-specs/smoke.js +16 -4
- package/src/command-specs/spaces.js +783 -0
- package/src/command-specs/tools.js +118 -21
- package/src/command-specs/version-history.js +20 -0
- package/src/command-specs/views.js +69 -0
- package/src/runtime/agent-browser.js +178 -267
- package/src/runtime/agent-setup.js +172 -13
- package/src/runtime/app-boundary-validator.js +338 -2
- package/src/runtime/app-data-literals.js +82 -0
- package/src/runtime/app-platform.js +750 -1568
- package/src/runtime/auth-recovery.js +17 -0
- package/src/runtime/base-skills.d.ts +11 -0
- package/src/runtime/base-skills.js +100 -3
- package/src/runtime/computer-identity.d.ts +30 -0
- package/src/runtime/computer-identity.js +151 -0
- package/src/runtime/config-lock.js +135 -0
- package/src/runtime/confined-space-build.js +74 -0
- package/src/runtime/confined-space-verify.js +49 -0
- package/src/runtime/delegated-context.js +5 -21
- package/src/runtime/native-record-files.js +47 -0
- package/src/runtime/oauth.js +342 -31
- package/src/runtime/profiles.js +19 -112
- package/src/runtime/retired-sdk-files.js +24 -0
- package/src/runtime/retry.js +150 -0
- package/src/runtime/skill-sync/cloud-client.ts +33 -8
- package/src/runtime/skill-sync/index.ts +443 -106
- package/src/runtime/skill-sync/local-scanner.ts +248 -32
- package/src/runtime/skill-sync/native-identity.ts +102 -0
- package/src/runtime/skill-sync/native-plan.ts +70 -0
- package/src/runtime/skill-sync/symlink-manager.ts +66 -16
- package/src/runtime/skill-sync/sync-plan.ts +34 -2
- package/src/runtime/skill-sync/types.ts +54 -0
- package/src/runtime/skill-sync/write-cloud-skill.ts +4 -4
- package/src/runtime/skill-sync-service.js +109 -0
- package/src/runtime/source-root.js +32 -0
- package/src/runtime/space-collection-scaffold.js +107 -0
- package/src/runtime/space-database-structures.js +229 -0
- package/src/runtime/space-fixture-broker.js +68 -0
- package/src/runtime/space-lock.js +337 -0
- package/src/runtime/space-platform.js +133 -0
- package/src/runtime/space-source.js +290 -0
- package/src/runtime/space-test-server.js +354 -0
- package/src/runtime/space-verification.js +94 -0
- package/src/runtime/space-verify-browser-worker.js +51 -0
- package/src/runtime/space-view-manifest.js +368 -0
- package/src/runtime/sync-skills.d.ts +5 -1
- package/src/runtime/sync-skills.js +11 -2
- package/src/runtime/tool-confirmation.js +138 -0
- package/src/runtime/transport.js +118 -24
- package/src/runtime/upsell.js +219 -0
- package/src/runtime/view-render.js +49 -0
- package/src/skill-sync-worker-entry.js +2 -0
- package/src/skill-sync-worker.js +114 -0
- package/src/space-harness-host.ts +122 -0
- package/template/.harness/index.html.tmpl +9 -352
- package/template/app/globals.css +29 -3
- package/template/app/layout.tsx +2 -6
- package/template/components/ui/badge.tsx +7 -4
- package/template/components/ui/button.tsx +1 -1
- package/template/components/ui/native-select.tsx +24 -0
- package/template/notis.config.ts +4 -36
- package/template/package-lock.json +1800 -1867
- package/template/package.json +16 -14
- package/template/postcss.config.mjs +1 -1
- package/template/tailwind.config.ts +1 -6
- package/template/tsconfig.json +1 -0
- package/template/vite.config.ts +2 -2
- package/dist/base-skills/notis-apps/SKILL.md +0 -613
- package/skills/notis-apps/cli.md +0 -285
- package/src/command-specs/apps.js +0 -3000
- package/src/runtime/app-changelog.js +0 -79
- package/src/runtime/app-dev-consumers.js +0 -154
- package/src/runtime/app-dev-host-lock.js +0 -80
- package/src/runtime/app-dev-process-identity.js +0 -111
- package/src/runtime/app-dev-roots.js +0 -284
- package/src/runtime/app-dev-server.js +0 -1140
- package/src/runtime/app-dev-sessions.js +0 -185
- package/src/runtime/app-registry-scaffolds.js +0 -367
- package/src/runtime/assets/store-screenshot-dark.png +0 -0
- package/src/runtime/cli-mode.generated.js +0 -5
- package/src/runtime/cli-mode.js +0 -34
- package/src/runtime/store-screenshot.js +0 -143
- package/template/CHANGELOG.md +0 -5
- package/template/app/page.tsx +0 -60
- package/template/components/ui/card.tsx +0 -56
- package/template/packages/sdk/src/components/DocumentEditor.tsx +0 -103
- package/template/packages/sdk/src/config.ts +0 -259
- package/template/packages/sdk/src/hooks/useCloudComputer.ts +0 -97
- package/template/packages/sdk/src/hooks/useDatabaseSchema.ts +0 -85
- package/template/packages/sdk/src/hooks/useDocument.ts +0 -78
- package/template/packages/sdk/src/hooks/useNotisNavigation.ts +0 -52
- package/template/packages/sdk/src/hooks/useTopBarSearch.ts +0 -73
- package/template/packages/sdk/src/runtime.ts +0 -439
- package/template/packages/sdk/src/vite.ts +0 -56
- package/template/packages/sdk/tsconfig.json +0 -15
- /package/{template/packages → dist}/sdk/src/components/MultiSelectDragOverlay.tsx +0 -0
- /package/{template/packages → dist}/sdk/src/components/ShortcutHints.tsx +0 -0
- /package/{template/packages → dist}/sdk/src/hooks/useActiveResource.ts +0 -0
- /package/{template/packages → dist}/sdk/src/hooks/useTool.ts +0 -0
- /package/{template/packages → dist}/sdk/src/hooks/useTools.ts +0 -0
- /package/{template/packages → dist}/sdk/src/ui.ts +0 -0
|
@@ -2,7 +2,15 @@ import { accessSync, constants as fsConstants, createReadStream, existsSync, rea
|
|
|
2
2
|
import { createHash } from 'node:crypto';
|
|
3
3
|
import { basename } from 'node:path';
|
|
4
4
|
import { usageError } from '../runtime/errors.js';
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
canPrompt,
|
|
7
|
+
createStderrPrompter,
|
|
8
|
+
extractToolResult,
|
|
9
|
+
findConfirmationPreview,
|
|
10
|
+
renderPreview,
|
|
11
|
+
resolveConfirmation,
|
|
12
|
+
} from '../runtime/tool-confirmation.js';
|
|
13
|
+
import { findUpsell, renderUpsell } from '../runtime/upsell.js';
|
|
6
14
|
import {
|
|
7
15
|
COMPOSIO_GET_TOOL_SCHEMAS,
|
|
8
16
|
COMPOSIO_MULTI_EXECUTE_TOOL,
|
|
@@ -174,6 +182,11 @@ function classifySqlMutation(query) {
|
|
|
174
182
|
|
|
175
183
|
export function classifyToolMutation(toolName, args = {}) {
|
|
176
184
|
const normalized = localNotisToolSlug(toolName).toUpperCase();
|
|
185
|
+
if (normalized === 'LOCAL_NOTIS_SANDBOX_PREVIEW') {
|
|
186
|
+
if (args.action === 'status') return false;
|
|
187
|
+
if (['register', 'open', 'heartbeat', 'stop'].includes(args.action)) return true;
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
177
190
|
if (normalized.includes('EXECUTE_SQL') && typeof args.query === 'string') {
|
|
178
191
|
const query = args.query
|
|
179
192
|
.replace(/\/\*[\s\S]*?\*\//g, ' ')
|
|
@@ -293,18 +306,19 @@ function ensureLongRunningToolTimeout(ctx, toolNames) {
|
|
|
293
306
|
}
|
|
294
307
|
|
|
295
308
|
async function toolsToolkitsHandler(ctx) {
|
|
296
|
-
const toolkits = await fetchToolkits(ctx.runtime);
|
|
309
|
+
const { toolkits, coverage, warnings } = await fetchToolkits(ctx.runtime);
|
|
297
310
|
return ctx.output.emitSuccess({
|
|
298
311
|
command: ctx.spec.command_path.join(' '),
|
|
299
|
-
data: { toolkits },
|
|
300
|
-
|
|
312
|
+
data: { toolkits, coverage },
|
|
313
|
+
warnings,
|
|
314
|
+
humanSummary: `Found ${toolkits.length} toolkits${coverage.complete ? '' : ' (incomplete inventory)'}`,
|
|
301
315
|
hints: [
|
|
302
316
|
{ command: 'notis tools search <query>', reason: 'Search canonical tools and schemas' },
|
|
303
317
|
],
|
|
304
318
|
renderHuman: () =>
|
|
305
319
|
toolkits
|
|
306
320
|
.map((entry) => {
|
|
307
|
-
const status = entry.has_active_connection ? 'connected' : 'needs auth';
|
|
321
|
+
const status = entry.availability === 'not_probed' ? 'configured' : entry.has_active_connection ? 'connected' : 'needs auth';
|
|
308
322
|
return `${entry.id} ${status} ${entry.description}`;
|
|
309
323
|
})
|
|
310
324
|
.join('\n'),
|
|
@@ -381,9 +395,6 @@ async function toolsDescribeHandler(ctx) {
|
|
|
381
395
|
|
|
382
396
|
async function toolsExecHandler(ctx) {
|
|
383
397
|
const requestedToolName = localNotisToolSlug(ctx.args.toolName);
|
|
384
|
-
// `tools exec` is the escape hatch around every first-class command, so the
|
|
385
|
-
// hand-over guard has to live here too or it guards nothing.
|
|
386
|
-
assertToolNotDelegated(requestedToolName);
|
|
387
398
|
let targetMutating = classifyToolMutation(requestedToolName);
|
|
388
399
|
ensureLongRunningToolTimeout(ctx, requestedToolName);
|
|
389
400
|
ctx.output.emitProgress({
|
|
@@ -471,17 +482,94 @@ async function toolsExecHandler(ctx) {
|
|
|
471
482
|
requestId: result.requestId,
|
|
472
483
|
});
|
|
473
484
|
|
|
485
|
+
const meta = {
|
|
486
|
+
mutating: targetMutating,
|
|
487
|
+
mutation_classification: targetMutating === null ? 'unknown' : 'name_hint_only',
|
|
488
|
+
idempotency_key: result.idempotencyKey ?? idempotencyKey,
|
|
489
|
+
attempts: result.attempts ?? 1,
|
|
490
|
+
};
|
|
491
|
+
const preview = findConfirmationPreview(result.payload);
|
|
492
|
+
if (preview) {
|
|
493
|
+
return confirmAndApply(ctx, { requestedToolName, args, preview, result, idempotencyKey, fileBindings, meta });
|
|
494
|
+
}
|
|
495
|
+
return emitToolResult(ctx, { requestedToolName, result, meta });
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
function toolResultUpsell(payload) {
|
|
499
|
+
const toolResult = extractToolResult(payload);
|
|
500
|
+
return toolResult ? findUpsell(toolResult) : null;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
function emitToolResult(ctx, { requestedToolName, result, meta, humanSummary }) {
|
|
504
|
+
const upsellBody = toolResultUpsell(result.payload);
|
|
505
|
+
const rendered = upsellBody ? renderUpsell(upsellBody, { apiBase: ctx.runtime.apiBase }) : null;
|
|
474
506
|
return ctx.output.emitSuccess({
|
|
475
507
|
command: ctx.spec.command_path.join(' '),
|
|
476
508
|
data: result.payload,
|
|
477
|
-
humanSummary: `Executed tool ${requestedToolName}
|
|
509
|
+
humanSummary: rendered ? rendered.message : (humanSummary || `Executed tool ${requestedToolName}`),
|
|
478
510
|
requestId: result.requestId,
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
511
|
+
hints: rendered ? rendered.hints : [],
|
|
512
|
+
meta: rendered ? { ...meta, upsell: rendered.upsell } : meta,
|
|
513
|
+
renderHuman: () => (rendered ? rendered.text : JSON.stringify(result.payload, null, 2)),
|
|
514
|
+
});
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
function confirmationKey(idempotencyKey, globalOptions) {
|
|
518
|
+
// A key the caller chose must not replay the preview, so the confirming call
|
|
519
|
+
// gets a derived key; a generated key is simply replaced by a fresh one.
|
|
520
|
+
return globalOptions.idempotencyKey ? `${idempotencyKey}.confirm` : nextIdempotencyKey({});
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
async function confirmAndApply(ctx, { requestedToolName, args, preview, result, idempotencyKey, fileBindings, meta }) {
|
|
524
|
+
const yes = Boolean(ctx.options.yes);
|
|
525
|
+
const interactive = canPrompt({ runtime: ctx.runtime, output: ctx.output });
|
|
526
|
+
const previewText = renderPreview(preview);
|
|
527
|
+
if (interactive && !yes) {
|
|
528
|
+
process.stderr.write(`${previewText}\n`);
|
|
529
|
+
}
|
|
530
|
+
const prompter = interactive && !yes ? createStderrPrompter() : null;
|
|
531
|
+
let decision;
|
|
532
|
+
try {
|
|
533
|
+
decision = await resolveConfirmation({ preview, args, yes, interactive, ask: (question) => prompter.ask(question) });
|
|
534
|
+
} finally {
|
|
535
|
+
prompter?.close();
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
if (decision.decision !== 'apply') {
|
|
539
|
+
const reason = decision.decision === 'not_interactive'
|
|
540
|
+
? 'Nothing has changed. Run the same command with --yes to apply it.'
|
|
541
|
+
: decision.reason;
|
|
542
|
+
const rerunArgs = decision.decision === 'needs_input' ? { ...args, [decision.field]: '<value>' } : args;
|
|
543
|
+
return ctx.output.emitSuccess({
|
|
544
|
+
command: ctx.spec.command_path.join(' '),
|
|
545
|
+
data: result.payload,
|
|
546
|
+
humanSummary: reason,
|
|
547
|
+
requestId: result.requestId,
|
|
548
|
+
hints: decision.decision === 'declined' ? [] : [{
|
|
549
|
+
command: `notis tools exec ${requestedToolName} --arguments '${JSON.stringify(rerunArgs)}' --yes`,
|
|
550
|
+
reason: 'Apply this change',
|
|
551
|
+
}],
|
|
552
|
+
meta: { ...meta, confirmation: decision.decision, applied: false },
|
|
553
|
+
renderHuman: () => (interactive && !yes ? reason : `${previewText}\n\n${reason}`),
|
|
554
|
+
});
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
const confirmKey = confirmationKey(idempotencyKey, ctx.globalOptions);
|
|
558
|
+
ctx.output.emitProgress({ phase: 'execute', message: `Applying ${requestedToolName}` });
|
|
559
|
+
const applied = await runToolCommand({
|
|
560
|
+
runtime: ctx.runtime,
|
|
561
|
+
toolName: COMPOSIO_MULTI_EXECUTE_TOOL,
|
|
562
|
+
arguments_: { tools: [{ tool_slug: requestedToolName, arguments: decision.arguments }] },
|
|
563
|
+
mutating: true,
|
|
564
|
+
idempotencyKey: confirmKey,
|
|
565
|
+
fileBindings,
|
|
566
|
+
});
|
|
567
|
+
ctx.output.emitProgress({ phase: 'complete', message: `Finished ${requestedToolName}`, requestId: applied.requestId });
|
|
568
|
+
return emitToolResult(ctx, {
|
|
569
|
+
requestedToolName,
|
|
570
|
+
result: applied,
|
|
571
|
+
humanSummary: `Applied ${requestedToolName}`,
|
|
572
|
+
meta: { ...meta, idempotency_key: applied.idempotencyKey ?? confirmKey, attempts: applied.attempts ?? 1, preview_idempotency_key: result.idempotencyKey ?? idempotencyKey, confirmation: 'confirmed', applied: true },
|
|
485
573
|
});
|
|
486
574
|
}
|
|
487
575
|
|
|
@@ -499,8 +587,6 @@ async function toolsExecParallelHandler(ctx) {
|
|
|
499
587
|
if (!call.tool_name || typeof call.tool_name !== 'string') {
|
|
500
588
|
throw usageError(`calls[${i}] missing required "tool_name" string`);
|
|
501
589
|
}
|
|
502
|
-
// A batch is just as good an escape hatch as a single exec.
|
|
503
|
-
assertToolNotDelegated(localNotisToolSlug(call.tool_name));
|
|
504
590
|
}
|
|
505
591
|
ensureLongRunningToolTimeout(ctx, calls.map((call) => localNotisToolSlug(call.tool_name)));
|
|
506
592
|
|
|
@@ -515,8 +601,18 @@ async function toolsExecParallelHandler(ctx) {
|
|
|
515
601
|
mutating: true,
|
|
516
602
|
idempotencyKey: nextIdempotencyKey(ctx.globalOptions),
|
|
517
603
|
})
|
|
518
|
-
.then((r) => ({
|
|
519
|
-
|
|
604
|
+
.then((r) => ({
|
|
605
|
+
tool_name: call.tool_name,
|
|
606
|
+
status: 'ok',
|
|
607
|
+
payload: r.payload,
|
|
608
|
+
attempts: r.attempts ?? 1,
|
|
609
|
+
}))
|
|
610
|
+
.catch((e) => ({
|
|
611
|
+
tool_name: call.tool_name,
|
|
612
|
+
status: 'error',
|
|
613
|
+
error: e.message,
|
|
614
|
+
attempts: e?.details?.attempts ?? 1,
|
|
615
|
+
}))
|
|
520
616
|
)
|
|
521
617
|
);
|
|
522
618
|
|
|
@@ -582,11 +678,11 @@ export const toolsCommandSpecs = [
|
|
|
582
678
|
when_to_use: 'Use this to inspect connection state before searching or executing generic tools.',
|
|
583
679
|
args_schema: { arguments: [], options: [] },
|
|
584
680
|
examples: ['notis tools toolkits', 'notis tools toolkits --json'],
|
|
585
|
-
output_schema: 'Returns
|
|
681
|
+
output_schema: 'Returns deterministic toolkit namespaces, connection statuses and explicit completeness coverage.',
|
|
586
682
|
mutates: false,
|
|
587
683
|
idempotent: true,
|
|
588
684
|
related_commands: ['notis tools search <query>', 'notis tools describe <tool-name>'],
|
|
589
|
-
backend_call: { type: '
|
|
685
|
+
backend_call: { type: 'toolkit_inventory', method: 'POST', path: '/cli_tools' },
|
|
590
686
|
handler: toolsToolkitsHandler,
|
|
591
687
|
},
|
|
592
688
|
{
|
|
@@ -633,6 +729,7 @@ export const toolsCommandSpecs = [
|
|
|
633
729
|
{ flags: '--file <argument-path=local-path>', description: 'Upload a local file into a file-uploadable tool argument. Repeatable.', collect: true },
|
|
634
730
|
{ flags: '--get-schema', description: 'Display the tool parameter schema without executing.' },
|
|
635
731
|
{ flags: '--dry-run', description: 'Validate arguments against the tool schema without executing.' },
|
|
732
|
+
{ flags: '--yes', description: 'Apply a change that asks for confirmation without the Continue? [y/N] prompt.' },
|
|
636
733
|
],
|
|
637
734
|
},
|
|
638
735
|
examples: [
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { usageError } from '../runtime/errors.js';
|
|
2
|
+
|
|
3
|
+
/** The human output of a version comparison: the unified diff text, then its totals. */
|
|
4
|
+
export function unifiedDiffSummary(payload) {
|
|
5
|
+
const diff = payload && typeof payload === 'object' ? payload : {};
|
|
6
|
+
const text = typeof diff.unified_diff === 'string' ? diff.unified_diff.replace(/\n$/, '') : '';
|
|
7
|
+
const files = Array.isArray(diff.files) ? diff.files.length : 0;
|
|
8
|
+
const count = Number.isInteger(diff.file_count) ? diff.file_count : files;
|
|
9
|
+
const totals = `${count} ${count === 1 ? 'file' : 'files'} changed, +${diff.additions ?? 0} -${diff.deletions ?? 0}`
|
|
10
|
+
+ (diff.truncated ? ' (comparison cut short; narrow it with --path or use --json)' : '');
|
|
11
|
+
return text ? `${text}\n\n${totals}` : `No changes. ${totals}`;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/** `--name <name>` sets a version name, `--clear` removes it; exactly one of the two. */
|
|
15
|
+
export function versionName(options) {
|
|
16
|
+
const hasName = typeof options.name === 'string';
|
|
17
|
+
if (hasName === Boolean(options.clear)) throw usageError('Pass --name <name>, or --clear to remove the name.');
|
|
18
|
+
if (hasName && !options.name.trim()) throw usageError('Pass a non-empty --name, or --clear to remove the name.');
|
|
19
|
+
return hasName ? options.name : null;
|
|
20
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { httpRequest } from '../runtime/transport.js';
|
|
2
|
+
import { usageError } from '../runtime/errors.js';
|
|
3
|
+
import { renderViewWithCliRuntime } from '../runtime/view-render.js';
|
|
4
|
+
import { resolve } from 'node:path';
|
|
5
|
+
import { randomUUID } from 'node:crypto';
|
|
6
|
+
|
|
7
|
+
export function viewRenderCommandSpec({ screenshotOnly = false } = {}) {
|
|
8
|
+
const command_path = screenshotOnly ? ['spaces', 'screenshot'] : ['views', 'render'];
|
|
9
|
+
return {
|
|
10
|
+
command_path, summary: screenshotOnly ? 'Capture a full-height PNG of a live view with your current access.' : 'Render a live view as Markdown and a full-height PNG with your current access.',
|
|
11
|
+
when_to_use: 'Check the actual deployed view; writes are blocked and current access is checked again before any output is saved.',
|
|
12
|
+
args_schema: { arguments: [{ token: '<url>', key: 'url', description: 'Current view-qualified or record link.' }], options: [
|
|
13
|
+
...(!screenshotOnly ? [{ flags: '--outputs <kinds>', description: 'Comma-separated markdown,screenshot (default both).' }] : []),
|
|
14
|
+
{ flags: '--width <pixels>', description: '1440 (default) or 390.' },
|
|
15
|
+
{ flags: '--output-dir <path>', description: 'New output directory; defaults to a unique .notis/renders directory. Existing files are never overwritten.' },
|
|
16
|
+
] }, examples: [screenshotOnly ? 'notis spaces screenshot <view-link> --width 390' : 'notis views render <view-link> --outputs markdown,screenshot'],
|
|
17
|
+
mutates: false, idempotent: true, require_auth: true,
|
|
18
|
+
backend_call: { type: 'http', path: '/portal_view_render/prepare' },
|
|
19
|
+
async handler(ctx) {
|
|
20
|
+
const outputs = screenshotOnly ? ['screenshot'] : (ctx.options.outputs || 'markdown,screenshot').split(',');
|
|
21
|
+
if (!outputs.length || new Set(outputs).size !== outputs.length || outputs.some(value => !['markdown', 'screenshot'].includes(value))) {
|
|
22
|
+
throw usageError('Choose markdown, screenshot, or markdown,screenshot.');
|
|
23
|
+
}
|
|
24
|
+
const width = ctx.options.width === undefined ? 1440 : Number(ctx.options.width);
|
|
25
|
+
const directory = resolve(ctx.options.outputDir || `.notis/renders/${randomUUID()}`);
|
|
26
|
+
const controller = new AbortController(), cancel = () => controller.abort();
|
|
27
|
+
process.once('SIGINT', cancel); process.once('SIGTERM', cancel);
|
|
28
|
+
try {
|
|
29
|
+
const { result, artifacts } = await renderViewWithCliRuntime({ runtime: ctx.runtime,
|
|
30
|
+
url: ctx.args.url, outputs, width, directory, signal: controller.signal });
|
|
31
|
+
const data = { ...result, artifacts };
|
|
32
|
+
if (data.screenshot) {
|
|
33
|
+
const { data_base64: _bytes, ...metadata } = data.screenshot;
|
|
34
|
+
data.screenshot = { ...metadata, path: artifacts.screenshot };
|
|
35
|
+
}
|
|
36
|
+
return ctx.output.emitSuccess({ command: command_path.join(' '), data,
|
|
37
|
+
humanSummary: `Rendered ${result.url}. Saved ${Object.values(artifacts).join(' and ')}.`, meta: { mutating: false } });
|
|
38
|
+
} finally { process.removeListener('SIGINT', cancel); process.removeListener('SIGTERM', cancel); }
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export const viewsCommandSpecs = [{
|
|
44
|
+
command_path: ['views', 'find'],
|
|
45
|
+
summary: 'Find the views you can open for a record, database, view link, Space or search.',
|
|
46
|
+
when_to_use: 'Get fresh view-qualified links and declared URL parameters before citing or opening a view.',
|
|
47
|
+
args_schema: { options: [
|
|
48
|
+
{ flags: '--record-key <id>', description: 'Find views that show this exact native record.' },
|
|
49
|
+
{ flags: '--database-id <id>', description: 'Find views over this database.' },
|
|
50
|
+
{ flags: '--url <url>', description: 'Resolve this view link and its current parameters.' },
|
|
51
|
+
{ flags: '--space-id <id>', description: 'Describe this Space view.' },
|
|
52
|
+
{ flags: '--query <text>', description: 'Search accessible view names, descriptions and readable context.' },
|
|
53
|
+
] },
|
|
54
|
+
examples: ['notis views find --record-key <record-key>', 'notis views find --url <view-link>', 'notis views find --query inbox'],
|
|
55
|
+
mutates: false, idempotent: true, require_auth: true,
|
|
56
|
+
backend_call: { type: 'http', path: '/portal_spaces/find-views' },
|
|
57
|
+
async handler(ctx) {
|
|
58
|
+
const options = { record_key: ctx.options.recordKey, database_id: ctx.options.databaseId,
|
|
59
|
+
url: ctx.options.url, space_id: ctx.options.spaceId, query: ctx.options.query };
|
|
60
|
+
const selected = Object.entries(options).filter(([, value]) => value !== undefined);
|
|
61
|
+
if (selected.length !== 1 || typeof selected[0][1] !== 'string' || !selected[0][1].trim()) {
|
|
62
|
+
throw usageError('Choose exactly one of --record-key, --database-id, --url, --space-id or --query.');
|
|
63
|
+
}
|
|
64
|
+
const result = await httpRequest({ runtime: ctx.runtime, method: 'POST', path: '/portal_spaces/find-views',
|
|
65
|
+
body: Object.fromEntries(selected), spacesProtocol: true });
|
|
66
|
+
return ctx.output.emitSuccess({ command: 'views find', data: result.payload,
|
|
67
|
+
humanSummary: JSON.stringify(result.payload, null, 2), meta: { mutating: false, request_id: result.requestId } });
|
|
68
|
+
},
|
|
69
|
+
}, viewRenderCommandSpec()];
|