@notis_ai/cli 0.2.6 → 0.2.8
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 +17 -0
- package/dist/scaffolds/notis-database/app/page.tsx +38 -41
- package/dist/scaffolds/notis-database/lib/types.ts +5 -7
- 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 +1839 -0
- package/dist/scaffolds/notis-database/notis.config.ts +48 -1
- package/dist/scaffolds/notis-database/package-lock.json +3935 -0
- package/dist/scaffolds/notis-database/package.json +2 -1
- package/dist/scaffolds/notis-database/packages/sdk/package.json +36 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/components/DocumentEditor.tsx +93 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/components/Markdown.tsx +60 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/components/MultiSelectActionBar.tsx +278 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/components/MultiSelectCheckbox.tsx +91 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/components/MultiSelectDragOverlay.tsx +39 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/config.ts +196 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/documents.ts +229 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useBackend.ts +41 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useDatabaseSchema.ts +85 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useDocument.ts +78 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useDocuments.ts +121 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useMultiSelect.ts +539 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useNotis.ts +34 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useNotisNavigation.ts +49 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useTool.ts +64 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useTools.ts +56 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useTopBarSearch.ts +73 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useUpsertDocument.ts +95 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/index.ts +83 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/provider.tsx +43 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/runtime.ts +220 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/styles.css +186 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/ui.ts +15 -0
- package/dist/scaffolds/notis-database/packages/sdk/src/vite.ts +56 -0
- package/dist/scaffolds/notis-database/packages/sdk/tsconfig.json +15 -0
- package/dist/scaffolds/notis-database/src/mock-runtime.ts +4 -1
- package/dist/scaffolds/notis-journal/CHANGELOG.md +4 -0
- package/dist/scaffolds/notis-journal/app/page.tsx +1 -0
- package/dist/scaffolds/notis-journal/package-lock.json +4615 -0
- package/dist/scaffolds/notis-journal/package.json +2 -2
- package/dist/scaffolds/notis-journal/packages/sdk/src/config.ts +52 -1
- package/dist/scaffolds/notis-notes/app/page.tsx +39 -46
- package/dist/scaffolds/notis-notes/app/phosphor-icons.ts +596 -0
- package/dist/scaffolds/notis-notes/lib/visible-properties.ts +144 -0
- 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 +752 -0
- package/dist/scaffolds/notis-notes/notis.config.ts +48 -3
- package/dist/scaffolds/notis-notes/package-lock.json +4636 -0
- package/dist/scaffolds/notis-notes/package.json +7 -3
- package/dist/scaffolds/notis-notes/packages/sdk/package.json +36 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/components/DocumentEditor.tsx +93 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/components/Markdown.tsx +60 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/components/MultiSelectActionBar.tsx +278 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/components/MultiSelectCheckbox.tsx +91 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/components/MultiSelectDragOverlay.tsx +39 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/config.ts +196 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/documents.ts +229 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useBackend.ts +41 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useDatabaseSchema.ts +85 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useDocument.ts +78 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useDocuments.ts +121 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useMultiSelect.ts +539 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useNotis.ts +34 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useNotisNavigation.ts +49 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useTool.ts +64 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useTools.ts +56 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useTopBarSearch.ts +73 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useUpsertDocument.ts +95 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/index.ts +83 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/provider.tsx +43 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/runtime.ts +220 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/styles.css +186 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/ui.ts +15 -0
- package/dist/scaffolds/notis-notes/packages/sdk/src/vite.ts +56 -0
- package/dist/scaffolds/notis-notes/packages/sdk/tsconfig.json +15 -0
- package/dist/scaffolds/notis-random/CHANGELOG.md +12 -2
- package/dist/scaffolds/notis-random/app/history/page.tsx +5 -4
- package/dist/scaffolds/notis-random/app/page.tsx +141 -74
- package/dist/scaffolds/notis-random/components/ui/button.tsx +50 -0
- package/dist/scaffolds/notis-random/components/ui/card.tsx +16 -0
- package/dist/scaffolds/notis-random/components/ui/input.tsx +23 -0
- package/dist/scaffolds/notis-random/components.json +20 -0
- package/dist/scaffolds/notis-random/lib/notis-tools.ts +26 -7
- package/dist/scaffolds/notis-random/lib/rng.ts +179 -19
- package/dist/scaffolds/notis-random/lib/roll-record.ts +103 -16
- 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 +753 -0
- package/dist/scaffolds/notis-random/notis.config.ts +47 -3
- package/dist/scaffolds/notis-random/package-lock.json +4513 -0
- package/dist/scaffolds/notis-random/package.json +6 -2
- package/dist/scaffolds/notis-random/packages/sdk/package.json +36 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/components/DocumentEditor.tsx +93 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/components/Markdown.tsx +60 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/components/MultiSelectActionBar.tsx +278 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/components/MultiSelectCheckbox.tsx +91 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/components/MultiSelectDragOverlay.tsx +39 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/config.ts +196 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/documents.ts +229 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useBackend.ts +41 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useDatabaseSchema.ts +85 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useDocument.ts +78 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useDocuments.ts +121 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useMultiSelect.ts +539 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useNotis.ts +34 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useNotisNavigation.ts +49 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useTool.ts +64 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useTools.ts +56 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useTopBarSearch.ts +73 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useUpsertDocument.ts +95 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/index.ts +83 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/provider.tsx +43 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/runtime.ts +220 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/styles.css +186 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/ui.ts +15 -0
- package/dist/scaffolds/notis-random/packages/sdk/src/vite.ts +56 -0
- package/dist/scaffolds/notis-random/packages/sdk/tsconfig.json +15 -0
- package/dist/scaffolds/notis-random/tailwind.config.ts +8 -1
- package/dist/scaffolds.json +8 -6
- package/package.json +2 -1
- package/skills/notis-apps/SKILL.md +449 -144
- package/skills/notis-apps/cli.md +15 -0
- package/skills/notis-cli/SKILL.md +8 -4
- package/skills/notis-onboarding/BRIEF.md +93 -0
- package/src/cli.js +52 -7
- package/src/command-specs/apps.js +154 -21
- package/src/command-specs/diagnostics.js +674 -0
- package/src/command-specs/helpers.js +4 -1
- package/src/command-specs/index.js +8 -0
- package/src/command-specs/onboarding.js +216 -0
- package/src/command-specs/smoke.js +386 -0
- package/src/command-specs/tools.js +189 -5
- package/src/runtime/app-platform.js +65 -4
- package/src/runtime/desktop-auth.js +66 -17
- package/src/runtime/errors.js +1 -0
- package/src/runtime/output.js +21 -3
- package/src/runtime/profiles.js +214 -18
- package/src/runtime/telemetry.js +92 -0
- package/src/runtime/transport.js +29 -1
- package/template/.harness/index.html.tmpl +30 -2
- package/template/packages/sdk/src/config.ts +38 -1
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-folder column selection for the notes table.
|
|
3
|
+
*
|
|
4
|
+
* A folder decides what you SEE, never what a note IS. This is view config:
|
|
5
|
+
* hiding a column never removes a property, never hides it from query, and
|
|
6
|
+
* moving a note between folders changes only its folder.
|
|
7
|
+
*
|
|
8
|
+
* The selection is stored on the folder as a JSON array of note PROPERTY IDS in
|
|
9
|
+
* a rich_text property. Ids rather than names because a property id is stable
|
|
10
|
+
* across renames, and rich_text rather than multi_select because a multi_select
|
|
11
|
+
* would silently drop any selection whose name is not already an option, would
|
|
12
|
+
* need its option list kept in sync with the notes schema forever, and would
|
|
13
|
+
* leak note column names into the agent's folder-writing tool as an enum.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
export const VISIBLE_PROPERTIES_PROPERTY = 'Visible properties';
|
|
17
|
+
|
|
18
|
+
/** Columns shown when a folder expresses no preference. */
|
|
19
|
+
export const DEFAULT_VISIBLE_COLUMN_COUNT = 6;
|
|
20
|
+
|
|
21
|
+
export interface SchemaProperty {
|
|
22
|
+
id?: string | null;
|
|
23
|
+
name: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export type VisibleColumnSource = 'folder' | 'union' | 'fallback';
|
|
27
|
+
|
|
28
|
+
export interface ResolvedVisibleColumns<T extends SchemaProperty> {
|
|
29
|
+
columns: T[];
|
|
30
|
+
source: VisibleColumnSource;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Read a stored selection into a list of tokens.
|
|
35
|
+
*
|
|
36
|
+
* Tolerant on purpose: the value may arrive as a JSON array (the format written
|
|
37
|
+
* here), as a plain array once projected, or as a comma-separated string typed
|
|
38
|
+
* by a human or an agent.
|
|
39
|
+
*/
|
|
40
|
+
export function parseVisibleProperties(rawValue: unknown): string[] {
|
|
41
|
+
if (rawValue == null) return [];
|
|
42
|
+
|
|
43
|
+
if (Array.isArray(rawValue)) {
|
|
44
|
+
return rawValue.map((entry) => String(entry).trim()).filter(Boolean);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (typeof rawValue !== 'string') return [];
|
|
48
|
+
const trimmed = rawValue.trim();
|
|
49
|
+
if (!trimmed) return [];
|
|
50
|
+
|
|
51
|
+
if (trimmed.startsWith('[')) {
|
|
52
|
+
try {
|
|
53
|
+
const parsed = JSON.parse(trimmed);
|
|
54
|
+
if (Array.isArray(parsed)) {
|
|
55
|
+
return parsed.map((entry) => String(entry).trim()).filter(Boolean);
|
|
56
|
+
}
|
|
57
|
+
} catch {
|
|
58
|
+
// Fall through to the comma-separated reading below.
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return trimmed.split(',').map((entry) => entry.trim()).filter(Boolean);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function serializeVisibleProperties(propertyIds: string[]): string {
|
|
66
|
+
return JSON.stringify(propertyIds.filter(Boolean));
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Resolve tokens against the live schema, by id first and then by name.
|
|
71
|
+
*
|
|
72
|
+
* Name matching keeps a hand-written or pre-rename selection working. Tokens
|
|
73
|
+
* that match nothing are dropped rather than rendered as empty columns.
|
|
74
|
+
*/
|
|
75
|
+
function resolveTokens<T extends SchemaProperty>(tokens: string[], properties: T[]): T[] {
|
|
76
|
+
const byId = new Map<string, T>();
|
|
77
|
+
const byName = new Map<string, T>();
|
|
78
|
+
for (const property of properties) {
|
|
79
|
+
if (property.id) byId.set(property.id, property);
|
|
80
|
+
byName.set(property.name.toLowerCase(), property);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const resolved: T[] = [];
|
|
84
|
+
const seen = new Set<T>();
|
|
85
|
+
for (const token of tokens) {
|
|
86
|
+
const match = byId.get(token) ?? byName.get(token.toLowerCase());
|
|
87
|
+
if (match && !seen.has(match)) {
|
|
88
|
+
seen.add(match);
|
|
89
|
+
resolved.push(match);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return resolved;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Decide which columns the table shows.
|
|
97
|
+
*
|
|
98
|
+
* - A folder with a usable selection gets exactly that, in schema order.
|
|
99
|
+
* - With no folder selected, the union of every folder's selection, so the
|
|
100
|
+
* unfiltered view still reflects how the user has set their folders up.
|
|
101
|
+
* - Otherwise today's behaviour: the first few properties after the title.
|
|
102
|
+
*
|
|
103
|
+
* Never returns an empty column set - a folder configured entirely from
|
|
104
|
+
* properties that no longer exist falls back rather than rendering nothing.
|
|
105
|
+
*/
|
|
106
|
+
export function resolveVisibleColumns<T extends SchemaProperty>({
|
|
107
|
+
metadataProperties,
|
|
108
|
+
activeFolderSelection,
|
|
109
|
+
activeFolderSelected = false,
|
|
110
|
+
allFolderSelections = [],
|
|
111
|
+
limit = DEFAULT_VISIBLE_COLUMN_COUNT,
|
|
112
|
+
}: {
|
|
113
|
+
metadataProperties: T[];
|
|
114
|
+
activeFolderSelection: unknown;
|
|
115
|
+
activeFolderSelected?: boolean;
|
|
116
|
+
allFolderSelections?: unknown[];
|
|
117
|
+
limit?: number;
|
|
118
|
+
}): ResolvedVisibleColumns<T> {
|
|
119
|
+
const fallback = { columns: metadataProperties.slice(0, limit), source: 'fallback' as const };
|
|
120
|
+
|
|
121
|
+
const activeTokens = parseVisibleProperties(activeFolderSelection);
|
|
122
|
+
if (activeTokens.length) {
|
|
123
|
+
const resolved = resolveTokens(activeTokens, metadataProperties);
|
|
124
|
+
if (resolved.length) {
|
|
125
|
+
// An explicit per-folder choice is honoured in full; the table scrolls.
|
|
126
|
+
const order = new Map(metadataProperties.map((property, index) => [property, index]));
|
|
127
|
+
resolved.sort((a, b) => (order.get(a) ?? 0) - (order.get(b) ?? 0));
|
|
128
|
+
return { columns: resolved, source: 'folder' };
|
|
129
|
+
}
|
|
130
|
+
return fallback;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (!activeFolderSelected && allFolderSelections.length) {
|
|
134
|
+
const unionTokens = allFolderSelections.flatMap((value) => parseVisibleProperties(value));
|
|
135
|
+
const resolved = resolveTokens(unionTokens, metadataProperties);
|
|
136
|
+
if (resolved.length) {
|
|
137
|
+
const order = new Map(metadataProperties.map((property, index) => [property, index]));
|
|
138
|
+
resolved.sort((a, b) => (order.get(a) ?? 0) - (order.get(b) ?? 0));
|
|
139
|
+
return { columns: resolved.slice(0, limit), source: 'union' };
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return fallback;
|
|
144
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|