@notis_ai/cli 0.2.14 → 0.2.15
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 +82 -20
- package/dist/agent-hooks/notis-agent-hook.mjs +19750 -0
- package/{skills → dist/base-skills}/notis-apps/SKILL.md +84 -53
- package/{skills → dist/base-skills}/notis-cli/SKILL.md +9 -9
- package/dist/base-skills/notis-query/SKILL.md +705 -0
- package/dist/skill-sync/index.js +1528 -0
- package/dist/skill-sync/index.js.map +7 -0
- package/package.json +5 -2
- package/skills/notis-apps/cli.md +38 -17
- package/skills/notis-cli/AGENT_INSTRUCTIONS.md +39 -0
- package/skills/notis-onboarding/BRIEF.md +16 -0
- package/src/agent-hook-entry.js +5 -0
- package/src/cli.js +23 -14
- package/src/command-specs/agents.js +392 -0
- package/src/command-specs/apps.js +871 -387
- package/src/command-specs/auth.js +63 -10
- package/src/command-specs/index.js +6 -0
- package/src/command-specs/onboarding.js +69 -5
- package/src/command-specs/skills.js +56 -0
- package/src/runtime/agent-memory-state.js +126 -0
- package/src/runtime/agent-setup.js +383 -0
- package/src/runtime/app-dev-consumers.js +154 -0
- package/src/runtime/app-dev-host-lock.js +80 -0
- package/src/runtime/app-dev-roots.js +284 -0
- package/src/runtime/app-dev-server.js +212 -22
- package/src/runtime/app-dev-sessions.js +105 -145
- package/src/runtime/app-platform.js +1291 -165
- package/src/runtime/app-registry-scaffolds.js +367 -0
- package/src/runtime/base-skills.d.ts +20 -0
- package/src/runtime/base-skills.js +167 -0
- package/src/runtime/login-listener.js +15 -0
- package/src/runtime/oauth.js +1506 -141
- package/src/runtime/output.js +7 -0
- package/src/runtime/ports.js +16 -0
- package/src/runtime/profiles.js +0 -5
- package/src/runtime/skill-sync/cloud-client.ts +96 -0
- package/src/runtime/skill-sync/index.ts +644 -0
- package/src/runtime/skill-sync/local-scanner.ts +1046 -0
- package/src/runtime/skill-sync/symlink-manager.ts +383 -0
- package/src/runtime/skill-sync/sync-plan.ts +22 -0
- package/src/runtime/skill-sync/types.ts +103 -0
- package/src/runtime/skill-sync/write-cloud-skill.ts +50 -0
- package/src/runtime/store-screenshot.js +6 -1
- package/src/runtime/sync-skills.d.ts +37 -0
- package/src/runtime/sync-skills.js +215 -0
- package/template/app/layout.tsx +5 -1
- package/template/notis.config.ts +1 -0
- package/template/packages/sdk/package.json +2 -1
- package/template/packages/sdk/src/components/DocumentEditor.tsx +13 -3
- package/template/packages/sdk/src/components/MarkdownEditor.tsx +121 -0
- package/template/packages/sdk/src/components/MultiSelectActionBar.tsx +37 -119
- package/template/packages/sdk/src/components/MultiSelectCheckbox.tsx +5 -1
- package/template/packages/sdk/src/components/MultiSelectDragOverlay.tsx +1 -1
- package/template/packages/sdk/src/components/NotisSelectionBoundary.tsx +55 -0
- package/template/packages/sdk/src/components/ShortcutHints.tsx +56 -0
- package/template/packages/sdk/src/config.ts +19 -0
- package/template/packages/sdk/src/documents.ts +7 -1
- package/template/packages/sdk/src/hooks/useActiveResource.ts +19 -0
- package/template/packages/sdk/src/hooks/useCollectionInteractions.ts +709 -0
- package/template/packages/sdk/src/hooks/useHandover.ts +3 -0
- package/template/packages/sdk/src/hooks/useMultiSelect.ts +44 -482
- package/template/packages/sdk/src/hooks/useTool.ts +5 -4
- package/template/packages/sdk/src/index.ts +47 -2
- package/template/packages/sdk/src/interactions/actions.ts +46 -0
- package/template/packages/sdk/src/interactions/shortcuts.tsx +628 -0
- package/template/packages/sdk/src/interactions.ts +41 -0
- package/template/packages/sdk/src/provider.tsx +2 -1
- package/template/packages/sdk/src/runtime.ts +89 -4
- package/dist/scaffolds/notis-database/CHANGELOG.md +0 -5
- package/dist/scaffolds/notis-database/app/globals.css +0 -44
- package/dist/scaffolds/notis-database/app/layout.tsx +0 -6
- package/dist/scaffolds/notis-database/app/page.tsx +0 -1088
- package/dist/scaffolds/notis-database/components/ui/badge.tsx +0 -28
- package/dist/scaffolds/notis-database/components/ui/button.tsx +0 -53
- package/dist/scaffolds/notis-database/components/ui/card.tsx +0 -56
- package/dist/scaffolds/notis-database/components/ui/table.tsx +0 -120
- package/dist/scaffolds/notis-database/components.json +0 -20
- package/dist/scaffolds/notis-database/index.html +0 -12
- package/dist/scaffolds/notis-database/lib/types.ts +0 -132
- package/dist/scaffolds/notis-database/lib/utils.ts +0 -6
- package/dist/scaffolds/notis-database/metadata/screenshot-1.png +0 -0
- package/dist/scaffolds/notis-database/metadata/screenshot-2.png +0 -0
- package/dist/scaffolds/notis-database/metadata/screenshot-3.png +0 -0
- package/dist/scaffolds/notis-database/metadata/screenshot-4.png +0 -0
- package/dist/scaffolds/notis-database/metadata/screenshot-5.png +0 -0
- package/dist/scaffolds/notis-database/metadata/screenshot-fixtures.json +0 -1839
- package/dist/scaffolds/notis-database/notis.config.ts +0 -73
- package/dist/scaffolds/notis-database/package-lock.json +0 -3935
- package/dist/scaffolds/notis-database/package.json +0 -32
- package/dist/scaffolds/notis-database/packages/sdk/package.json +0 -36
- package/dist/scaffolds/notis-database/packages/sdk/src/components/DocumentEditor.tsx +0 -93
- package/dist/scaffolds/notis-database/packages/sdk/src/components/Markdown.tsx +0 -60
- package/dist/scaffolds/notis-database/packages/sdk/src/components/MultiSelectActionBar.tsx +0 -278
- package/dist/scaffolds/notis-database/packages/sdk/src/components/MultiSelectCheckbox.tsx +0 -91
- package/dist/scaffolds/notis-database/packages/sdk/src/components/MultiSelectDragOverlay.tsx +0 -39
- package/dist/scaffolds/notis-database/packages/sdk/src/config.ts +0 -234
- package/dist/scaffolds/notis-database/packages/sdk/src/documents.ts +0 -250
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useBackend.ts +0 -41
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useCloudComputer.ts +0 -97
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useDatabaseSchema.ts +0 -85
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useDatabaseSubscription.ts +0 -76
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useDocument.ts +0 -78
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useDocuments.ts +0 -121
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useHandover.ts +0 -75
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useMultiSelect.ts +0 -539
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useNotis.ts +0 -34
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useNotisNavigation.ts +0 -49
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useTool.ts +0 -64
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useTools.ts +0 -56
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useTopBarSearch.ts +0 -73
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useUpsertDocument.ts +0 -95
- package/dist/scaffolds/notis-database/packages/sdk/src/index.ts +0 -100
- package/dist/scaffolds/notis-database/packages/sdk/src/provider.tsx +0 -43
- package/dist/scaffolds/notis-database/packages/sdk/src/runtime.ts +0 -351
- package/dist/scaffolds/notis-database/packages/sdk/src/styles.css +0 -186
- package/dist/scaffolds/notis-database/packages/sdk/src/ui.ts +0 -15
- package/dist/scaffolds/notis-database/packages/sdk/src/vite.ts +0 -56
- package/dist/scaffolds/notis-database/packages/sdk/tsconfig.json +0 -15
- package/dist/scaffolds/notis-database/postcss.config.mjs +0 -8
- package/dist/scaffolds/notis-database/src/dev-main.tsx +0 -23
- package/dist/scaffolds/notis-database/src/mock-runtime.ts +0 -561
- package/dist/scaffolds/notis-database/tailwind.config.ts +0 -59
- package/dist/scaffolds/notis-database/tsconfig.json +0 -23
- package/dist/scaffolds/notis-database/vite.config.ts +0 -22
- package/dist/scaffolds/notis-journal/CHANGELOG.md +0 -29
- package/dist/scaffolds/notis-journal/app/globals.css +0 -37
- package/dist/scaffolds/notis-journal/app/insights/page.tsx +0 -513
- package/dist/scaffolds/notis-journal/app/journal-core.tsx +0 -362
- package/dist/scaffolds/notis-journal/app/journal-ui.tsx +0 -337
- package/dist/scaffolds/notis-journal/app/layout.tsx +0 -6
- package/dist/scaffolds/notis-journal/app/page.tsx +0 -486
- package/dist/scaffolds/notis-journal/components/ui/badge.tsx +0 -28
- package/dist/scaffolds/notis-journal/components/ui/button.tsx +0 -53
- package/dist/scaffolds/notis-journal/components/ui/card.tsx +0 -56
- package/dist/scaffolds/notis-journal/components.json +0 -20
- package/dist/scaffolds/notis-journal/index.html +0 -12
- package/dist/scaffolds/notis-journal/lib/utils.ts +0 -6
- package/dist/scaffolds/notis-journal/metadata/screenshot-1.png +0 -0
- package/dist/scaffolds/notis-journal/metadata/screenshot-2.png +0 -0
- package/dist/scaffolds/notis-journal/metadata/screenshot-3.png +0 -0
- package/dist/scaffolds/notis-journal/metadata/screenshot-4.png +0 -0
- package/dist/scaffolds/notis-journal/metadata/screenshot-5.png +0 -0
- package/dist/scaffolds/notis-journal/metadata/screenshot-6.png +0 -0
- package/dist/scaffolds/notis-journal/metadata/screenshot-fixtures.json +0 -132
- package/dist/scaffolds/notis-journal/notis.config.ts +0 -93
- package/dist/scaffolds/notis-journal/package-lock.json +0 -4615
- package/dist/scaffolds/notis-journal/package.json +0 -34
- package/dist/scaffolds/notis-journal/packages/sdk/package.json +0 -36
- package/dist/scaffolds/notis-journal/packages/sdk/src/components/DocumentEditor.tsx +0 -93
- package/dist/scaffolds/notis-journal/packages/sdk/src/components/Markdown.tsx +0 -60
- package/dist/scaffolds/notis-journal/packages/sdk/src/components/MultiSelectActionBar.tsx +0 -278
- package/dist/scaffolds/notis-journal/packages/sdk/src/components/MultiSelectCheckbox.tsx +0 -91
- package/dist/scaffolds/notis-journal/packages/sdk/src/components/MultiSelectDragOverlay.tsx +0 -39
- package/dist/scaffolds/notis-journal/packages/sdk/src/config.ts +0 -234
- package/dist/scaffolds/notis-journal/packages/sdk/src/documents.ts +0 -250
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useBackend.ts +0 -41
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useCloudComputer.ts +0 -97
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useDatabaseSchema.ts +0 -85
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useDatabaseSubscription.ts +0 -76
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useDocument.ts +0 -78
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useDocuments.ts +0 -121
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useHandover.ts +0 -75
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useMultiSelect.ts +0 -539
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useNotis.ts +0 -34
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useNotisNavigation.ts +0 -49
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useTool.ts +0 -64
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useTools.ts +0 -56
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useTopBarSearch.ts +0 -73
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useUpsertDocument.ts +0 -95
- package/dist/scaffolds/notis-journal/packages/sdk/src/index.ts +0 -100
- package/dist/scaffolds/notis-journal/packages/sdk/src/provider.tsx +0 -43
- package/dist/scaffolds/notis-journal/packages/sdk/src/runtime.ts +0 -351
- package/dist/scaffolds/notis-journal/packages/sdk/src/styles.css +0 -186
- package/dist/scaffolds/notis-journal/packages/sdk/src/ui.ts +0 -15
- package/dist/scaffolds/notis-journal/packages/sdk/src/vite.ts +0 -56
- package/dist/scaffolds/notis-journal/packages/sdk/tsconfig.json +0 -15
- package/dist/scaffolds/notis-journal/postcss.config.mjs +0 -8
- package/dist/scaffolds/notis-journal/skills/journal-onboarding/SKILL.md +0 -120
- package/dist/scaffolds/notis-journal/src/dev-main.tsx +0 -58
- package/dist/scaffolds/notis-journal/src/mock-runtime.ts +0 -199
- package/dist/scaffolds/notis-journal/tailwind.config.ts +0 -58
- package/dist/scaffolds/notis-journal/tsconfig.json +0 -23
- package/dist/scaffolds/notis-journal/vite.config.ts +0 -10
- package/dist/scaffolds/notis-notes/CHANGELOG.md +0 -5
- package/dist/scaffolds/notis-notes/app/globals.css +0 -3
- package/dist/scaffolds/notis-notes/app/layout.tsx +0 -6
- package/dist/scaffolds/notis-notes/app/page.tsx +0 -1943
- package/dist/scaffolds/notis-notes/app/phosphor-icons.ts +0 -596
- package/dist/scaffolds/notis-notes/components/ui/badge.tsx +0 -28
- package/dist/scaffolds/notis-notes/components/ui/button.tsx +0 -53
- package/dist/scaffolds/notis-notes/components/ui/card.tsx +0 -56
- package/dist/scaffolds/notis-notes/components.json +0 -20
- package/dist/scaffolds/notis-notes/lib/utils.ts +0 -6
- package/dist/scaffolds/notis-notes/lib/visible-properties.ts +0 -144
- package/dist/scaffolds/notis-notes/metadata/screenshot-1.png +0 -0
- package/dist/scaffolds/notis-notes/metadata/screenshot-2.png +0 -0
- package/dist/scaffolds/notis-notes/metadata/screenshot-3.png +0 -0
- package/dist/scaffolds/notis-notes/metadata/screenshot-4.png +0 -0
- package/dist/scaffolds/notis-notes/metadata/screenshot-5.png +0 -0
- package/dist/scaffolds/notis-notes/metadata/screenshot-fixtures.json +0 -752
- package/dist/scaffolds/notis-notes/notis.config.ts +0 -80
- package/dist/scaffolds/notis-notes/package-lock.json +0 -4636
- package/dist/scaffolds/notis-notes/package.json +0 -35
- package/dist/scaffolds/notis-notes/packages/sdk/package.json +0 -36
- package/dist/scaffolds/notis-notes/packages/sdk/src/components/DocumentEditor.tsx +0 -93
- package/dist/scaffolds/notis-notes/packages/sdk/src/components/Markdown.tsx +0 -60
- package/dist/scaffolds/notis-notes/packages/sdk/src/components/MultiSelectActionBar.tsx +0 -278
- package/dist/scaffolds/notis-notes/packages/sdk/src/components/MultiSelectCheckbox.tsx +0 -91
- package/dist/scaffolds/notis-notes/packages/sdk/src/components/MultiSelectDragOverlay.tsx +0 -39
- package/dist/scaffolds/notis-notes/packages/sdk/src/config.ts +0 -234
- package/dist/scaffolds/notis-notes/packages/sdk/src/documents.ts +0 -250
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useBackend.ts +0 -41
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useCloudComputer.ts +0 -97
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useDatabaseSchema.ts +0 -85
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useDatabaseSubscription.ts +0 -76
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useDocument.ts +0 -78
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useDocuments.ts +0 -121
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useHandover.ts +0 -75
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useMultiSelect.ts +0 -539
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useNotis.ts +0 -34
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useNotisNavigation.ts +0 -49
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useTool.ts +0 -64
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useTools.ts +0 -56
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useTopBarSearch.ts +0 -73
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useUpsertDocument.ts +0 -95
- package/dist/scaffolds/notis-notes/packages/sdk/src/index.ts +0 -100
- package/dist/scaffolds/notis-notes/packages/sdk/src/provider.tsx +0 -43
- package/dist/scaffolds/notis-notes/packages/sdk/src/runtime.ts +0 -351
- package/dist/scaffolds/notis-notes/packages/sdk/src/styles.css +0 -186
- package/dist/scaffolds/notis-notes/packages/sdk/src/ui.ts +0 -15
- package/dist/scaffolds/notis-notes/packages/sdk/src/vite.ts +0 -56
- package/dist/scaffolds/notis-notes/packages/sdk/tsconfig.json +0 -15
- package/dist/scaffolds/notis-notes/postcss.config.mjs +0 -8
- package/dist/scaffolds/notis-notes/tailwind.config.ts +0 -58
- package/dist/scaffolds/notis-notes/tsconfig.json +0 -23
- package/dist/scaffolds/notis-notes/vite.config.ts +0 -10
- package/dist/scaffolds/notis-random/CHANGELOG.md +0 -15
- package/dist/scaffolds/notis-random/README.md +0 -33
- package/dist/scaffolds/notis-random/app/globals.css +0 -11
- package/dist/scaffolds/notis-random/app/history/page.tsx +0 -67
- package/dist/scaffolds/notis-random/app/layout.tsx +0 -7
- package/dist/scaffolds/notis-random/app/page.tsx +0 -289
- package/dist/scaffolds/notis-random/components/ui/button.tsx +0 -50
- package/dist/scaffolds/notis-random/components/ui/card.tsx +0 -16
- package/dist/scaffolds/notis-random/components/ui/input.tsx +0 -23
- package/dist/scaffolds/notis-random/components.json +0 -20
- package/dist/scaffolds/notis-random/index.html +0 -12
- package/dist/scaffolds/notis-random/lib/notis-tools.ts +0 -128
- package/dist/scaffolds/notis-random/lib/rng.ts +0 -202
- package/dist/scaffolds/notis-random/lib/roll-record.ts +0 -189
- package/dist/scaffolds/notis-random/lib/utils.ts +0 -25
- package/dist/scaffolds/notis-random/metadata/screenshot-1.png +0 -0
- package/dist/scaffolds/notis-random/metadata/screenshot-2.png +0 -0
- package/dist/scaffolds/notis-random/metadata/screenshot-3.png +0 -0
- package/dist/scaffolds/notis-random/metadata/screenshot-4.png +0 -0
- package/dist/scaffolds/notis-random/metadata/screenshot-5.png +0 -0
- package/dist/scaffolds/notis-random/metadata/screenshot-fixtures.json +0 -753
- package/dist/scaffolds/notis-random/notis.config.ts +0 -86
- package/dist/scaffolds/notis-random/package-lock.json +0 -4513
- package/dist/scaffolds/notis-random/package.json +0 -36
- package/dist/scaffolds/notis-random/packages/sdk/package.json +0 -36
- package/dist/scaffolds/notis-random/packages/sdk/src/components/DocumentEditor.tsx +0 -93
- package/dist/scaffolds/notis-random/packages/sdk/src/components/Markdown.tsx +0 -60
- package/dist/scaffolds/notis-random/packages/sdk/src/components/MultiSelectActionBar.tsx +0 -278
- package/dist/scaffolds/notis-random/packages/sdk/src/components/MultiSelectCheckbox.tsx +0 -91
- package/dist/scaffolds/notis-random/packages/sdk/src/components/MultiSelectDragOverlay.tsx +0 -39
- package/dist/scaffolds/notis-random/packages/sdk/src/config.ts +0 -234
- package/dist/scaffolds/notis-random/packages/sdk/src/documents.ts +0 -250
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useBackend.ts +0 -41
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useCloudComputer.ts +0 -97
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useDatabaseSchema.ts +0 -85
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useDatabaseSubscription.ts +0 -76
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useDocument.ts +0 -78
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useDocuments.ts +0 -121
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useHandover.ts +0 -75
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useMultiSelect.ts +0 -539
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useNotis.ts +0 -34
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useNotisNavigation.ts +0 -49
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useTool.ts +0 -64
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useTools.ts +0 -56
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useTopBarSearch.ts +0 -73
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useUpsertDocument.ts +0 -95
- package/dist/scaffolds/notis-random/packages/sdk/src/index.ts +0 -100
- package/dist/scaffolds/notis-random/packages/sdk/src/provider.tsx +0 -43
- package/dist/scaffolds/notis-random/packages/sdk/src/runtime.ts +0 -351
- package/dist/scaffolds/notis-random/packages/sdk/src/styles.css +0 -186
- package/dist/scaffolds/notis-random/packages/sdk/src/ui.ts +0 -15
- package/dist/scaffolds/notis-random/packages/sdk/src/vite.ts +0 -56
- package/dist/scaffolds/notis-random/packages/sdk/tsconfig.json +0 -15
- package/dist/scaffolds/notis-random/postcss.config.mjs +0 -6
- package/dist/scaffolds/notis-random/src/dev-main.tsx +0 -70
- package/dist/scaffolds/notis-random/src/mock-runtime.ts +0 -129
- package/dist/scaffolds/notis-random/tailwind.config.ts +0 -50
- package/dist/scaffolds/notis-random/tsconfig.json +0 -23
- package/dist/scaffolds/notis-random/vite.config.ts +0 -11
- package/dist/scaffolds.json +0 -49
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { useCallback, useEffect, useState } from 'react';
|
|
4
|
-
import { useNotisRuntime } from '../provider';
|
|
5
|
-
import { normalizeDatabaseProperty, optionalString } from '../documents';
|
|
6
|
-
import type { DatabaseProperty } from '../runtime';
|
|
7
|
-
|
|
8
|
-
interface GetDatabaseResult {
|
|
9
|
-
database?: {
|
|
10
|
-
name?: string;
|
|
11
|
-
description?: string | null;
|
|
12
|
-
schema?: {
|
|
13
|
-
properties?: unknown[];
|
|
14
|
-
};
|
|
15
|
-
};
|
|
16
|
-
message?: string;
|
|
17
|
-
error?: string;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export interface UseDatabaseSchemaResult {
|
|
21
|
-
name: string | null;
|
|
22
|
-
description: string | null;
|
|
23
|
-
properties: DatabaseProperty[];
|
|
24
|
-
loading: boolean;
|
|
25
|
-
error: Error | null;
|
|
26
|
-
refetch: () => void;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/** Fetch a database's schema (normalized properties + metadata). */
|
|
30
|
-
export function useDatabaseSchema(databaseSlug: string): UseDatabaseSchemaResult {
|
|
31
|
-
const runtime = useNotisRuntime();
|
|
32
|
-
const [name, setName] = useState<string | null>(null);
|
|
33
|
-
const [description, setDescription] = useState<string | null>(null);
|
|
34
|
-
const [properties, setProperties] = useState<DatabaseProperty[]>([]);
|
|
35
|
-
const [loading, setLoading] = useState(true);
|
|
36
|
-
const [error, setError] = useState<Error | null>(null);
|
|
37
|
-
const [fetchKey, setFetchKey] = useState(0);
|
|
38
|
-
|
|
39
|
-
const refetch = useCallback(() => {
|
|
40
|
-
setFetchKey((key) => key + 1);
|
|
41
|
-
}, []);
|
|
42
|
-
|
|
43
|
-
useEffect(() => {
|
|
44
|
-
if (!runtime) {
|
|
45
|
-
setLoading(false);
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
let cancelled = false;
|
|
50
|
-
setLoading(true);
|
|
51
|
-
setError(null);
|
|
52
|
-
|
|
53
|
-
runtime
|
|
54
|
-
.callTool<GetDatabaseResult>('LOCAL_NOTIS_DATABASE_GET_DATABASE', {
|
|
55
|
-
database_slug: databaseSlug,
|
|
56
|
-
})
|
|
57
|
-
.then((result) => {
|
|
58
|
-
if (cancelled) return;
|
|
59
|
-
const message = result.error ?? result.message;
|
|
60
|
-
if (!result.database && message) {
|
|
61
|
-
throw new Error(message);
|
|
62
|
-
}
|
|
63
|
-
setName(optionalString(result.database?.name));
|
|
64
|
-
setDescription(optionalString(result.database?.description));
|
|
65
|
-
const rawProperties = result.database?.schema?.properties ?? [];
|
|
66
|
-
setProperties(
|
|
67
|
-
rawProperties
|
|
68
|
-
.map(normalizeDatabaseProperty)
|
|
69
|
-
.filter((property): property is DatabaseProperty => Boolean(property)),
|
|
70
|
-
);
|
|
71
|
-
setLoading(false);
|
|
72
|
-
})
|
|
73
|
-
.catch((err) => {
|
|
74
|
-
if (cancelled) return;
|
|
75
|
-
setError(err instanceof Error ? err : new Error(String(err)));
|
|
76
|
-
setLoading(false);
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
return () => {
|
|
80
|
-
cancelled = true;
|
|
81
|
-
};
|
|
82
|
-
}, [runtime, databaseSlug, fetchKey]);
|
|
83
|
-
|
|
84
|
-
return { name, description, properties, loading, error, refetch };
|
|
85
|
-
}
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { useEffect, useRef, useState } from 'react';
|
|
4
|
-
import { useNotisRuntime } from '../provider';
|
|
5
|
-
import { useDocuments, type UseDocumentsOptions, type UseDocumentsResult } from './useDocuments';
|
|
6
|
-
import type { DocumentRecord } from '../runtime';
|
|
7
|
-
|
|
8
|
-
export interface UseDatabaseSubscriptionOptions extends UseDocumentsOptions {
|
|
9
|
-
/** Set to false to keep the query but skip the change feed. */
|
|
10
|
-
subscribe?: boolean;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export interface UseDatabaseSubscriptionResult extends UseDocumentsResult {
|
|
14
|
-
/** Alias of `documents`, for views that think in rows. */
|
|
15
|
-
rows: DocumentRecord[];
|
|
16
|
-
/** True while a live change feed is attached to this database. */
|
|
17
|
-
live: boolean;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Query a Notis database and keep it fresh without polling.
|
|
22
|
-
*
|
|
23
|
-
* ```tsx
|
|
24
|
-
* const { rows, live, refetch } = useDatabaseSubscription('workspaces');
|
|
25
|
-
* ```
|
|
26
|
-
*
|
|
27
|
-
* A change on the database wakes the hook, which then refetches through the
|
|
28
|
-
* usual `LOCAL_NOTIS_DATABASE_QUERY` path — the change feed is a signal only
|
|
29
|
-
* and never carries row data. Hosts without a change feed (the dev harness,
|
|
30
|
-
* the screenshot stub, the vite preview) still return rows; `live` is false
|
|
31
|
-
* there and the app should keep offering its manual refresh.
|
|
32
|
-
*/
|
|
33
|
-
export function useDatabaseSubscription(
|
|
34
|
-
databaseSlug: string,
|
|
35
|
-
options: UseDatabaseSubscriptionOptions = {},
|
|
36
|
-
): UseDatabaseSubscriptionResult {
|
|
37
|
-
const runtime = useNotisRuntime();
|
|
38
|
-
const { subscribe = true, ...documentOptions } = options;
|
|
39
|
-
const { documents, loading, error, refetch } = useDocuments(databaseSlug, documentOptions);
|
|
40
|
-
const [live, setLive] = useState(false);
|
|
41
|
-
|
|
42
|
-
const refetchRef = useRef(refetch);
|
|
43
|
-
useEffect(() => {
|
|
44
|
-
refetchRef.current = refetch;
|
|
45
|
-
}, [refetch]);
|
|
46
|
-
|
|
47
|
-
const enabled = options.enabled !== false && subscribe;
|
|
48
|
-
|
|
49
|
-
useEffect(() => {
|
|
50
|
-
if (!runtime?.subscribeDatabase || !enabled || !databaseSlug) {
|
|
51
|
-
setLive(false);
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
let cancelled = false;
|
|
56
|
-
const unsubscribe = runtime.subscribeDatabase(
|
|
57
|
-
databaseSlug,
|
|
58
|
-
() => {
|
|
59
|
-
refetchRef.current();
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
onStatusChange: (isLive) => {
|
|
63
|
-
if (!cancelled) setLive(isLive);
|
|
64
|
-
},
|
|
65
|
-
},
|
|
66
|
-
);
|
|
67
|
-
|
|
68
|
-
return () => {
|
|
69
|
-
cancelled = true;
|
|
70
|
-
setLive(false);
|
|
71
|
-
unsubscribe?.();
|
|
72
|
-
};
|
|
73
|
-
}, [runtime, databaseSlug, enabled]);
|
|
74
|
-
|
|
75
|
-
return { documents, rows: documents, loading, error, refetch, live };
|
|
76
|
-
}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { useCallback, useEffect, useState } from 'react';
|
|
4
|
-
import { useNotisRuntime } from '../provider';
|
|
5
|
-
import { normalizeDocumentRecord } from '../documents';
|
|
6
|
-
import type { DocumentRecord } from '../runtime';
|
|
7
|
-
|
|
8
|
-
interface GetDocumentResult {
|
|
9
|
-
status?: string;
|
|
10
|
-
document?: unknown;
|
|
11
|
-
message?: string;
|
|
12
|
-
error?: string;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export interface UseDocumentOptions {
|
|
16
|
-
enabled?: boolean;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export interface UseDocumentResult {
|
|
20
|
-
document: DocumentRecord | null;
|
|
21
|
-
loading: boolean;
|
|
22
|
-
error: Error | null;
|
|
23
|
-
refetch: () => void;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/** Fetch a single document (with content) by id, normalized. */
|
|
27
|
-
export function useDocument(
|
|
28
|
-
documentId: string | null | undefined,
|
|
29
|
-
options: UseDocumentOptions = {},
|
|
30
|
-
): UseDocumentResult {
|
|
31
|
-
const runtime = useNotisRuntime();
|
|
32
|
-
const [document, setDocument] = useState<DocumentRecord | null>(null);
|
|
33
|
-
const [loading, setLoading] = useState(Boolean(documentId));
|
|
34
|
-
const [error, setError] = useState<Error | null>(null);
|
|
35
|
-
const [fetchKey, setFetchKey] = useState(0);
|
|
36
|
-
|
|
37
|
-
const enabled = options.enabled !== false && Boolean(documentId);
|
|
38
|
-
|
|
39
|
-
const refetch = useCallback(() => {
|
|
40
|
-
setFetchKey((key) => key + 1);
|
|
41
|
-
}, []);
|
|
42
|
-
|
|
43
|
-
useEffect(() => {
|
|
44
|
-
if (!runtime || !enabled || !documentId) {
|
|
45
|
-
setDocument(null);
|
|
46
|
-
setLoading(false);
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
let cancelled = false;
|
|
51
|
-
setLoading(true);
|
|
52
|
-
setError(null);
|
|
53
|
-
|
|
54
|
-
runtime
|
|
55
|
-
.callTool<GetDocumentResult>('LOCAL_NOTIS_DATABASE_GET_DOCUMENT', {
|
|
56
|
-
document_id: documentId,
|
|
57
|
-
})
|
|
58
|
-
.then((result) => {
|
|
59
|
-
if (cancelled) return;
|
|
60
|
-
if (!result.document) {
|
|
61
|
-
throw new Error(result.error ?? result.message ?? 'Document not found');
|
|
62
|
-
}
|
|
63
|
-
setDocument(normalizeDocumentRecord(result.document));
|
|
64
|
-
setLoading(false);
|
|
65
|
-
})
|
|
66
|
-
.catch((err) => {
|
|
67
|
-
if (cancelled) return;
|
|
68
|
-
setError(err instanceof Error ? err : new Error(String(err)));
|
|
69
|
-
setLoading(false);
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
return () => {
|
|
73
|
-
cancelled = true;
|
|
74
|
-
};
|
|
75
|
-
}, [runtime, documentId, enabled, fetchKey]);
|
|
76
|
-
|
|
77
|
-
return { document, loading, error, refetch };
|
|
78
|
-
}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { useCallback, useEffect, useState } from 'react';
|
|
4
|
-
import { useNotisRuntime } from '../provider';
|
|
5
|
-
import { normalizeDocumentRecord } from '../documents';
|
|
6
|
-
import type { DocumentRecord, QueryFilter } from '../runtime';
|
|
7
|
-
|
|
8
|
-
interface QueryDatabaseResult {
|
|
9
|
-
documents?: unknown[];
|
|
10
|
-
has_more?: boolean;
|
|
11
|
-
next_offset?: number | null;
|
|
12
|
-
message?: string;
|
|
13
|
-
error?: string;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export interface UseDocumentsOptions {
|
|
17
|
-
filter?: QueryFilter;
|
|
18
|
-
pageSize?: number;
|
|
19
|
-
offset?: number;
|
|
20
|
-
/** Fetch every page, starting at offset, instead of returning only one page. */
|
|
21
|
-
fetchAll?: boolean;
|
|
22
|
-
enabled?: boolean;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export interface UseDocumentsResult {
|
|
26
|
-
documents: DocumentRecord[];
|
|
27
|
-
loading: boolean;
|
|
28
|
-
error: Error | null;
|
|
29
|
-
refetch: () => void;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Query a Notis database and get normalized `DocumentRecord`s.
|
|
34
|
-
*
|
|
35
|
-
* ```tsx
|
|
36
|
-
* const { documents, loading, refetch } = useDocuments('notes', {
|
|
37
|
-
* filter: { filters: [{ property: 'Folder', operator: 'contains', type: 'relation', value: folderId }] },
|
|
38
|
-
* pageSize: 250,
|
|
39
|
-
* });
|
|
40
|
-
* ```
|
|
41
|
-
*/
|
|
42
|
-
export function useDocuments(
|
|
43
|
-
databaseSlug: string,
|
|
44
|
-
options: UseDocumentsOptions = {},
|
|
45
|
-
): UseDocumentsResult {
|
|
46
|
-
const runtime = useNotisRuntime();
|
|
47
|
-
const [documents, setDocuments] = useState<DocumentRecord[]>([]);
|
|
48
|
-
const [loading, setLoading] = useState(true);
|
|
49
|
-
const [error, setError] = useState<Error | null>(null);
|
|
50
|
-
const [fetchKey, setFetchKey] = useState(0);
|
|
51
|
-
|
|
52
|
-
const enabled = options.enabled !== false;
|
|
53
|
-
const filterKey = JSON.stringify(options.filter ?? null);
|
|
54
|
-
|
|
55
|
-
const refetch = useCallback(() => {
|
|
56
|
-
setFetchKey((key) => key + 1);
|
|
57
|
-
}, []);
|
|
58
|
-
|
|
59
|
-
useEffect(() => {
|
|
60
|
-
if (!runtime || !enabled) {
|
|
61
|
-
setLoading(false);
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
let cancelled = false;
|
|
66
|
-
setLoading(true);
|
|
67
|
-
setError(null);
|
|
68
|
-
|
|
69
|
-
const filter = filterKey === 'null' ? null : (JSON.parse(filterKey) as QueryFilter);
|
|
70
|
-
|
|
71
|
-
const fetchDocuments = async (): Promise<unknown[]> => {
|
|
72
|
-
const allDocuments: unknown[] = [];
|
|
73
|
-
let offset = options.offset ?? 0;
|
|
74
|
-
|
|
75
|
-
while (true) {
|
|
76
|
-
const result = await runtime.callTool<QueryDatabaseResult>('LOCAL_NOTIS_DATABASE_QUERY', {
|
|
77
|
-
database_slug: databaseSlug,
|
|
78
|
-
query: {
|
|
79
|
-
...(filter ?? {}),
|
|
80
|
-
...(options.pageSize !== undefined ? { page_size: options.pageSize } : {}),
|
|
81
|
-
},
|
|
82
|
-
...(offset > 0 ? { offset } : {}),
|
|
83
|
-
});
|
|
84
|
-
const message = result.error ?? result.message;
|
|
85
|
-
if (!result.documents && message) {
|
|
86
|
-
throw new Error(message);
|
|
87
|
-
}
|
|
88
|
-
allDocuments.push(...(result.documents ?? []));
|
|
89
|
-
if (!options.fetchAll || !result.has_more) return allDocuments;
|
|
90
|
-
|
|
91
|
-
const nextOffset = result.next_offset;
|
|
92
|
-
if (typeof nextOffset !== 'number' || nextOffset <= offset) {
|
|
93
|
-
throw new Error('Database query returned an invalid pagination offset');
|
|
94
|
-
}
|
|
95
|
-
offset = nextOffset;
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
fetchDocuments()
|
|
100
|
-
.then((result) => {
|
|
101
|
-
if (cancelled) return;
|
|
102
|
-
setDocuments(
|
|
103
|
-
result
|
|
104
|
-
.map(normalizeDocumentRecord)
|
|
105
|
-
.filter((document) => document.id),
|
|
106
|
-
);
|
|
107
|
-
setLoading(false);
|
|
108
|
-
})
|
|
109
|
-
.catch((err) => {
|
|
110
|
-
if (cancelled) return;
|
|
111
|
-
setError(err instanceof Error ? err : new Error(String(err)));
|
|
112
|
-
setLoading(false);
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
return () => {
|
|
116
|
-
cancelled = true;
|
|
117
|
-
};
|
|
118
|
-
}, [runtime, databaseSlug, enabled, fetchKey, filterKey, options.fetchAll, options.offset, options.pageSize]);
|
|
119
|
-
|
|
120
|
-
return { documents, loading, error, refetch };
|
|
121
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { useCallback, useState } from 'react';
|
|
4
|
-
import { useNotisRuntime } from '../provider';
|
|
5
|
-
import type { HandoverPayload, HandoverResult } from '../runtime';
|
|
6
|
-
|
|
7
|
-
export interface UseHandoverResult {
|
|
8
|
-
/** Hand the work over. Rejects when the host has no manager chat. */
|
|
9
|
-
handover: (payload: HandoverPayload) => Promise<HandoverResult>;
|
|
10
|
-
/** True while the manager chat is being prepared. */
|
|
11
|
-
pending: boolean;
|
|
12
|
-
error: Error | null;
|
|
13
|
-
/**
|
|
14
|
-
* False when the host cannot hand work over (dev harness, vite preview).
|
|
15
|
-
* Render the app's own fallback — a copyable prompt, say — when it is false.
|
|
16
|
-
*/
|
|
17
|
-
available: boolean;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Hand a piece of work from app code to the Notis manager chat.
|
|
22
|
-
*
|
|
23
|
-
* An app displays work; the manager runs it. `handover` puts the message in
|
|
24
|
-
* the chat surface that already owns streaming progress, billing, cancellation
|
|
25
|
-
* and the transcript, and the app watches its own databases for the result.
|
|
26
|
-
*
|
|
27
|
-
* ```tsx
|
|
28
|
-
* const { handover, pending, available } = useHandover();
|
|
29
|
-
*
|
|
30
|
-
* return available ? (
|
|
31
|
-
* <Button
|
|
32
|
-
* disabled={pending}
|
|
33
|
-
* onClick={() => { void handover({ prompt: 'Create a workspace on notis to ...' }); }}
|
|
34
|
-
* >
|
|
35
|
-
* Send to Notis
|
|
36
|
-
* </Button>
|
|
37
|
-
* ) : (
|
|
38
|
-
* <CopyablePrompt prompt="Create a workspace on notis to ..." />
|
|
39
|
-
* );
|
|
40
|
-
* ```
|
|
41
|
-
*
|
|
42
|
-
* Pass `skill` to bind the work to a skill declared in `notis.config.ts`; the
|
|
43
|
-
* host rejects a key the app does not declare. `autoSend` is accepted for
|
|
44
|
-
* forward compatibility; today's hosts always return `drafted` and let the
|
|
45
|
-
* user press send.
|
|
46
|
-
*/
|
|
47
|
-
export function useHandover(): UseHandoverResult {
|
|
48
|
-
const runtime = useNotisRuntime();
|
|
49
|
-
const [pending, setPending] = useState(false);
|
|
50
|
-
const [error, setError] = useState<Error | null>(null);
|
|
51
|
-
|
|
52
|
-
const handover = useCallback(
|
|
53
|
-
async (payload: HandoverPayload): Promise<HandoverResult> => {
|
|
54
|
-
if (!runtime?.handover) {
|
|
55
|
-
throw new Error('This Notis host cannot hand work to the manager chat.');
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
setPending(true);
|
|
59
|
-
setError(null);
|
|
60
|
-
|
|
61
|
-
try {
|
|
62
|
-
return await runtime.handover(payload);
|
|
63
|
-
} catch (err) {
|
|
64
|
-
const e = err instanceof Error ? err : new Error(String(err));
|
|
65
|
-
setError(e);
|
|
66
|
-
throw e;
|
|
67
|
-
} finally {
|
|
68
|
-
setPending(false);
|
|
69
|
-
}
|
|
70
|
-
},
|
|
71
|
-
[runtime],
|
|
72
|
-
);
|
|
73
|
-
|
|
74
|
-
return { handover, pending, error, available: Boolean(runtime?.handover) };
|
|
75
|
-
}
|