@notis_ai/cli 0.2.1 → 0.2.3

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.
Files changed (117) hide show
  1. package/README.md +106 -170
  2. package/config/notis_app_boundary_rules.json +50 -0
  3. package/dist/scaffolds/notis-database/app/globals.css +44 -0
  4. package/dist/scaffolds/notis-database/app/layout.tsx +6 -0
  5. package/dist/scaffolds/notis-database/app/page.tsx +1091 -0
  6. package/dist/scaffolds/notis-database/components/ui/badge.tsx +28 -0
  7. package/dist/scaffolds/notis-database/components/ui/button.tsx +53 -0
  8. package/dist/scaffolds/notis-database/components/ui/card.tsx +56 -0
  9. package/dist/scaffolds/notis-database/components/ui/table.tsx +120 -0
  10. package/dist/scaffolds/notis-database/components.json +20 -0
  11. package/dist/scaffolds/notis-database/index.html +12 -0
  12. package/dist/scaffolds/notis-database/lib/types.ts +134 -0
  13. package/dist/scaffolds/notis-database/lib/utils.ts +6 -0
  14. package/dist/scaffolds/notis-database/metadata/cover.png +0 -0
  15. package/dist/scaffolds/notis-database/metadata/screenshot-1.png +0 -0
  16. package/dist/scaffolds/notis-database/metadata/screenshot-2.png +0 -0
  17. package/dist/scaffolds/notis-database/metadata/screenshot-3.png +0 -0
  18. package/dist/scaffolds/notis-database/notis.config.ts +27 -0
  19. package/dist/scaffolds/notis-database/package.json +31 -0
  20. package/dist/scaffolds/notis-database/postcss.config.mjs +8 -0
  21. package/dist/scaffolds/notis-database/src/dev-main.tsx +23 -0
  22. package/dist/scaffolds/notis-database/src/mock-runtime.ts +557 -0
  23. package/dist/scaffolds/notis-database/tailwind.config.ts +59 -0
  24. package/dist/scaffolds/notis-database/tsconfig.json +23 -0
  25. package/dist/scaffolds/notis-database/vite.config.ts +22 -0
  26. package/dist/scaffolds/notis-notes/app/globals.css +3 -0
  27. package/dist/scaffolds/notis-notes/app/layout.tsx +6 -0
  28. package/dist/scaffolds/notis-notes/app/page.tsx +2168 -0
  29. package/dist/scaffolds/notis-notes/components/ui/badge.tsx +28 -0
  30. package/dist/scaffolds/notis-notes/components/ui/button.tsx +53 -0
  31. package/dist/scaffolds/notis-notes/components/ui/card.tsx +56 -0
  32. package/dist/scaffolds/notis-notes/components.json +20 -0
  33. package/dist/scaffolds/notis-notes/lib/utils.ts +6 -0
  34. package/dist/scaffolds/notis-notes/metadata/cover.png +0 -0
  35. package/dist/scaffolds/notis-notes/metadata/screenshot-1.png +0 -0
  36. package/dist/scaffolds/notis-notes/metadata/screenshot-2.png +0 -0
  37. package/dist/scaffolds/notis-notes/metadata/screenshot-3.png +0 -0
  38. package/dist/scaffolds/notis-notes/notis.config.ts +36 -0
  39. package/dist/scaffolds/notis-notes/package.json +31 -0
  40. package/dist/scaffolds/notis-notes/postcss.config.mjs +8 -0
  41. package/dist/scaffolds/notis-notes/tailwind.config.ts +58 -0
  42. package/dist/scaffolds/notis-notes/tsconfig.json +23 -0
  43. package/dist/scaffolds/notis-notes/vite.config.ts +10 -0
  44. package/dist/scaffolds/notis-random/README.md +33 -0
  45. package/dist/scaffolds/notis-random/app/globals.css +11 -0
  46. package/dist/scaffolds/notis-random/app/history/page.tsx +66 -0
  47. package/dist/scaffolds/notis-random/app/layout.tsx +7 -0
  48. package/dist/scaffolds/notis-random/app/page.tsx +222 -0
  49. package/dist/scaffolds/notis-random/index.html +12 -0
  50. package/dist/scaffolds/notis-random/lib/notis-tools.ts +109 -0
  51. package/dist/scaffolds/notis-random/lib/rng.ts +42 -0
  52. package/dist/scaffolds/notis-random/lib/roll-record.ts +102 -0
  53. package/dist/scaffolds/notis-random/lib/utils.ts +25 -0
  54. package/dist/scaffolds/notis-random/metadata/cover.png +0 -0
  55. package/dist/scaffolds/notis-random/metadata/screenshot-1.png +0 -0
  56. package/dist/scaffolds/notis-random/metadata/screenshot-2.png +0 -0
  57. package/dist/scaffolds/notis-random/metadata/screenshot-3.png +0 -0
  58. package/dist/scaffolds/notis-random/notis.config.ts +43 -0
  59. package/dist/scaffolds/notis-random/package.json +32 -0
  60. package/dist/scaffolds/notis-random/postcss.config.mjs +6 -0
  61. package/dist/scaffolds/notis-random/src/dev-main.tsx +70 -0
  62. package/dist/scaffolds/notis-random/src/mock-runtime.ts +128 -0
  63. package/dist/scaffolds/notis-random/tailwind.config.ts +43 -0
  64. package/dist/scaffolds/notis-random/tsconfig.json +23 -0
  65. package/dist/scaffolds/notis-random/vite.config.ts +11 -0
  66. package/dist/scaffolds.json +36 -0
  67. package/package.json +8 -3
  68. package/skills/notis-apps/SKILL.md +162 -0
  69. package/skills/notis-apps/cli.md +208 -0
  70. package/skills/notis-cli/SKILL.md +260 -0
  71. package/skills/notis-query/cli.md +39 -0
  72. package/src/cli.js +31 -3
  73. package/src/command-specs/apps.js +248 -56
  74. package/src/command-specs/helpers.js +72 -104
  75. package/src/command-specs/index.js +0 -6
  76. package/src/command-specs/meta.js +14 -13
  77. package/src/command-specs/tools.js +196 -115
  78. package/src/runtime/app-boundary-validator.js +65 -14
  79. package/src/runtime/app-dev-server.js +32 -4
  80. package/src/runtime/app-platform.js +404 -24
  81. package/src/runtime/profiles.js +12 -6
  82. package/src/runtime/transport.js +124 -39
  83. package/template/.harness/index.html.tmpl +1 -50
  84. package/template/app/page.tsx +41 -6
  85. package/template/metadata/cover.png +0 -0
  86. package/template/metadata/screenshot-1.png +0 -0
  87. package/template/metadata/screenshot-2.png +0 -0
  88. package/template/metadata/screenshot-3.png +0 -0
  89. package/template/notis.config.ts +10 -6
  90. package/template/package.json +2 -2
  91. package/template/packages/{notis-sdk → sdk}/package.json +6 -0
  92. package/template/packages/{notis-sdk → sdk}/src/components/MultiSelectActionBar.tsx +2 -1
  93. package/template/packages/{notis-sdk → sdk}/src/components/MultiSelectCheckbox.tsx +2 -2
  94. package/template/packages/{notis-sdk → sdk}/src/components/MultiSelectDragOverlay.tsx +2 -2
  95. package/template/packages/{notis-sdk → sdk}/src/config.ts +1 -1
  96. package/template/packages/{notis-sdk → sdk}/src/hooks/useDatabase.ts +1 -13
  97. package/template/packages/{notis-sdk → sdk}/src/hooks/useMultiSelect.ts +4 -3
  98. package/template/packages/{notis-sdk → sdk}/src/hooks/useNotis.ts +4 -3
  99. package/template/packages/{notis-sdk → sdk}/src/hooks/useNotisNavigation.ts +3 -3
  100. package/template/packages/{notis-sdk → sdk}/src/hooks/useTool.ts +22 -7
  101. package/template/packages/{notis-sdk → sdk}/src/hooks/useUpsertDocument.ts +0 -8
  102. package/template/packages/{notis-sdk → sdk}/src/index.ts +2 -15
  103. package/template/packages/{notis-sdk → sdk}/src/provider.tsx +1 -1
  104. package/template/packages/{notis-sdk → sdk}/src/runtime.ts +5 -26
  105. package/src/command-specs/auth.js +0 -178
  106. package/src/command-specs/db.js +0 -163
  107. package/template/packages/notis-sdk/src/helpers.ts +0 -131
  108. package/template/packages/notis-sdk/src/hooks/useAppState.ts +0 -50
  109. package/template/packages/notis-sdk/src/hooks/useCollectionItem.ts +0 -58
  110. package/template/packages/notis-sdk/src/hooks/useDocument.ts +0 -61
  111. /package/template/packages/{notis-sdk → sdk}/src/hooks/useBackend.ts +0 -0
  112. /package/template/packages/{notis-sdk → sdk}/src/hooks/useTools.ts +0 -0
  113. /package/template/packages/{notis-sdk → sdk}/src/hooks/useTopBarSearch.ts +0 -0
  114. /package/template/packages/{notis-sdk → sdk}/src/styles.css +0 -0
  115. /package/template/packages/{notis-sdk → sdk}/src/ui.ts +0 -0
  116. /package/template/packages/{notis-sdk → sdk}/src/vite.ts +0 -0
  117. /package/template/packages/{notis-sdk → sdk}/tsconfig.json +0 -0
package/README.md CHANGED
@@ -1,21 +1,23 @@
1
1
  # @notis_ai/cli
2
2
 
3
- Agent-first Notis CLI for apps, databases, and generic tool execution.
3
+ Agent-first Notis CLI for apps and generic tool execution.
4
4
 
5
5
  ## Install
6
6
 
7
- The Notis CLI is bundled automatically with the Notis desktop app.
7
+ Use the Notis CLI through NPX. Install and sign into Notis Desktop to keep the local CLI auth profile current; do not rely on an installed `notis` command. Related skills such as `notis-cli` and `notis-apps` are delivered through normal Notis skill sync for the signed-in user.
8
+
9
+ For CI, hosted agents, or internal scripts, pass a non-persisted token with `NOTIS_JWT=<token>`.
8
10
 
9
11
  ## Quick Start
10
12
 
11
13
  ```bash
12
- notis --help
13
- notis auth status
14
- notis apps list
15
- notis db list
14
+ npx --package @notis_ai/cli@latest -- notis --help
15
+ npx --package @notis_ai/cli@latest -- notis doctor
16
+ npx --package @notis_ai/cli@latest -- notis apps list
17
+ npx --package @notis_ai/cli@latest -- notis tools search "list Notis databases"
16
18
  ```
17
19
 
18
- If you're using the desktop app, login and logout keep the CLI profile in sync automatically.
20
+ The desktop app owns sign-in and keeps the CLI profile in sync automatically.
19
21
 
20
22
  The CLI defaults to `json` output in agent or non-TTY contexts and `table` output in interactive terminals.
21
23
 
@@ -29,107 +31,79 @@ The CLI defaults to `json` output in agent or non-TTY contexts and `table` outpu
29
31
  - `--timeout-ms <n>` — HTTP timeout in milliseconds
30
32
  - `--idempotency-key <key>` — Override the generated idempotency key for mutating commands
31
33
 
32
- ## Auth
33
-
34
- ### `notis auth login`
35
-
36
- Store credentials for a named CLI profile.
37
-
38
- When to use: Use this before authenticated commands, especially in fresh environments or CI profiles.
39
-
40
- Options:
41
- - `--jwt <token>` — JWT token to store for the profile.
42
-
43
- Examples:
44
- - `notis auth login --jwt <token>`
45
- - `notis auth login --profile staging --api-base http://localhost:3001`
34
+ ## Apps
46
35
 
47
- ### `notis auth logout`
36
+ ### `npx --package @notis_ai/cli@latest -- notis apps list`
48
37
 
49
- Remove the stored JWT for the active profile.
38
+ List apps the current profile can access.
50
39
 
51
- When to use: Use this to clear local credentials without touching other profiles.
40
+ When to use: Discover existing apps before linking or deploying.
52
41
 
53
42
  Examples:
54
- - `notis auth logout`
55
- - `notis auth logout --profile staging`
43
+ - `npx --package @notis_ai/cli@latest -- notis apps list`
44
+ - `npx --package @notis_ai/cli@latest -- notis apps list --json`
56
45
 
57
- ### `notis auth status`
46
+ ### `npx --package @notis_ai/cli@latest -- notis apps init <name> [dir]`
58
47
 
59
- Inspect local auth configuration and optionally verify it against the API.
48
+ Scaffold a new Notis app project.
60
49
 
61
- When to use: Use this before automating commands to confirm the active profile and token health.
50
+ When to use: Start a new Notis app. Use --from with a bundled scaffold when one is close to the desired app; otherwise creates the bare Vite + React project.
62
51
 
63
52
  Options:
64
- - `--verify`Perform a live authenticated roundtrip to the API.
65
-
66
- Examples:
67
- - `notis auth status`
68
- - `notis auth status --verify --json`
69
-
70
-
71
- ## Apps
72
-
73
- ### `notis apps list`
74
-
75
- List apps the current profile can access.
76
-
77
- When to use: Discover existing apps before linking or deploying.
53
+ - `--from <slug>` Start from a bundled scaffold listed by `notis apps scaffolds list`.
78
54
 
79
55
  Examples:
80
- - `notis apps list`
81
- - `notis apps list --json`
56
+ - `npx --package @notis_ai/cli@latest -- notis apps scaffolds list`
57
+ - `npx --package @notis_ai/cli@latest -- notis apps init "Mind the Flo"`
58
+ - `npx --package @notis_ai/cli@latest -- notis apps init "My CRM" --from notis-database`
59
+ - `npx --package @notis_ai/cli@latest -- notis apps init "My App" ./my-app`
82
60
 
83
- ### `notis apps init <name> [dir]`
61
+ ### `npx --package @notis_ai/cli@latest -- notis apps scaffolds list`
84
62
 
85
- Scaffold a new Notis app project.
63
+ List bundled Notis app scaffolds.
86
64
 
87
- When to use: Start a new Notis app. Creates a Vite + React project with @notis/sdk pre-configured.
65
+ When to use: Discover the fixed scaffold catalog shipped with the CLI before starting a new app.
88
66
 
89
67
  Examples:
90
- - `notis apps init "Mind the Flo"`
91
- - `notis apps init "My App" ./my-app`
68
+ - `npx --package @notis_ai/cli@latest -- notis apps scaffolds list`
69
+ - `npx --package @notis_ai/cli@latest -- notis apps init "My App" --from notis-database`
92
70
 
93
- ### `notis apps create <name> [dir]`
71
+ ### `npx --package @notis_ai/cli@latest -- notis apps create <name> [dir]`
94
72
 
95
73
  Create a new remote Notis app and optionally link a local project to it.
96
74
 
97
75
  When to use: Provision a fresh remote app before the first deploy. Pass a project directory to link it immediately.
98
76
 
99
- Options:
100
- - `--description <text>` — Optional app description.
101
- - `--icon <lucide:icon>` — Optional Lucide icon, for example lucide:dices.
102
-
103
77
  Examples:
104
- - `notis apps create "My App"`
105
- - `notis apps create "My App" . --description "Internal tool" --icon lucide:layout-dashboard`
78
+ - `npx --package @notis_ai/cli@latest -- notis apps create "My App"`
79
+ - `npx --package @notis_ai/cli@latest -- notis apps create "My App" .`
106
80
 
107
- ### `notis apps dev [dir]`
81
+ ### `npx --package @notis_ai/cli@latest -- notis apps dev [dir]`
108
82
 
109
83
  Develop Notis apps inside the Electron desktop Portal with automatic local bundle reloads.
110
84
 
111
- When to use: Run this inside a single app or a monorepo root with apps/<name>/notis.config.ts. It discovers every app, starts the local bundle server, registers desktop-local dev sessions, and opens the Electron Portal Development tab.
85
+ When to use: Run this inside a single app or a monorepo root with apps/<name>/notis.config.ts. It discovers every app, starts the local bundle server, registers desktop-local dev sessions, and opens the Electron Portal to the local development app.
112
86
 
113
87
  Options:
114
88
  - `--port <number>` — Local bundle server port (default: 5173).
115
- - `--no-open` — Do not auto-open the desktop Portal Development tab.
89
+ - `--no-open` — Do not auto-open the desktop Portal local development app.
116
90
 
117
91
  Examples:
118
- - `notis apps dev`
119
- - `notis apps dev ./my-app`
120
- - `notis apps dev ./workspace --port 5200`
92
+ - `npx --package @notis_ai/cli@latest -- notis apps dev`
93
+ - `npx --package @notis_ai/cli@latest -- notis apps dev ./my-app`
94
+ - `npx --package @notis_ai/cli@latest -- notis apps dev ./workspace --port 5200`
121
95
 
122
- ### `notis apps build [dir]`
96
+ ### `npx --package @notis_ai/cli@latest -- notis apps build [dir]`
123
97
 
124
98
  Build and package the app into .notis/output/.
125
99
 
126
100
  When to use: Prepare the app for verification or deployment.
127
101
 
128
102
  Examples:
129
- - `notis apps build`
130
- - `notis apps build ./my-app`
103
+ - `npx --package @notis_ai/cli@latest -- notis apps build`
104
+ - `npx --package @notis_ai/cli@latest -- notis apps build ./my-app`
131
105
 
132
- ### `notis apps verify [dir]`
106
+ ### `npx --package @notis_ai/cli@latest -- notis apps verify [dir]`
133
107
 
134
108
  Headless render smoke each route in a stub-runtime harness.
135
109
 
@@ -144,36 +118,36 @@ Options:
144
118
  - `--keep-open` — Leave server + browser session running after report (for manual triage).
145
119
 
146
120
  Examples:
147
- - `notis apps verify`
148
- - `notis apps verify --routes notes`
149
- - `notis apps verify --mode live`
150
- - `notis apps verify --no-browser # start the harness, drive agent-browser yourself`
121
+ - `npx --package @notis_ai/cli@latest -- notis apps verify`
122
+ - `npx --package @notis_ai/cli@latest -- notis apps verify --routes notes`
123
+ - `npx --package @notis_ai/cli@latest -- notis apps verify --mode live`
124
+ - `npx --package @notis_ai/cli@latest -- notis apps verify --no-browser # start the harness, drive agent-browser yourself`
151
125
 
152
- ### `notis apps link <app-id> [dir]`
126
+ ### `npx --package @notis_ai/cli@latest -- notis apps link <app-id> [dir]`
153
127
 
154
128
  Link a local project to a remote Notis app.
155
129
 
156
130
  When to use: Connect a local project to an existing app for deployment.
157
131
 
158
132
  Examples:
159
- - `notis apps link abc123`
160
- - `notis apps link abc123 ./my-app`
133
+ - `npx --package @notis_ai/cli@latest -- notis apps link abc123`
134
+ - `npx --package @notis_ai/cli@latest -- notis apps link abc123 ./my-app`
161
135
 
162
- ### `notis apps pull <app-id> [dir]`
136
+ ### `npx --package @notis_ai/cli@latest -- notis apps pull <app-id> [dir]`
163
137
 
164
138
  Download a Notis app source snapshot into a local project folder.
165
139
 
166
- When to use: Edit an installed app locally. Pulls the persisted source and links the directory to the app.
140
+ When to use: Edit an installed app locally. Pulls the persisted source, links the directory to the app/version, then continue with npm install, notis apps dev, notis apps build, and notis apps deploy.
167
141
 
168
142
  Options:
169
143
  - `--force` — Overwrite a non-empty target directory.
170
144
  - `--version <n>` — Pull a specific app source version (default: latest).
171
145
 
172
146
  Examples:
173
- - `notis apps pull abc123`
174
- - `notis apps pull abc123 ./my-app --force`
147
+ - `npx --package @notis_ai/cli@latest -- notis apps pull abc123`
148
+ - `npx --package @notis_ai/cli@latest -- notis apps pull abc123 ./my-app --force`
175
149
 
176
- ### `notis apps deploy [dir]`
150
+ ### `npx --package @notis_ai/cli@latest -- notis apps deploy [dir]`
177
151
 
178
152
  Build and upload the app to the linked Notis app.
179
153
 
@@ -185,109 +159,58 @@ Options:
185
159
  - `--direct` — Upload directly to Supabase storage, bypassing the backend server. Auto-fallback on network errors.
186
160
 
187
161
  Examples:
188
- - `notis apps deploy`
189
- - `notis apps deploy --skip-build`
190
- - `notis apps deploy --app-id abc123`
191
- - `notis apps deploy --direct`
162
+ - `npx --package @notis_ai/cli@latest -- notis apps deploy`
163
+ - `npx --package @notis_ai/cli@latest -- notis apps deploy --skip-build`
164
+ - `npx --package @notis_ai/cli@latest -- notis apps deploy --app-id abc123`
165
+ - `npx --package @notis_ai/cli@latest -- notis apps deploy --direct`
192
166
 
193
- ### `notis apps doctor [dir]`
167
+ ### `npx --package @notis_ai/cli@latest -- notis apps doctor [dir]`
194
168
 
195
169
  Check project health and readiness.
196
170
 
197
171
  When to use: Diagnose issues with a Notis app project.
198
172
 
199
173
  Examples:
200
- - `notis apps doctor`
201
- - `notis apps doctor ./my-app`
202
-
203
-
204
- ## Databases
205
-
206
- ### `notis db list`
207
-
208
- List native Notis databases.
209
-
210
- When to use: Use this to find database ids and slugs before querying or updating schemas.
211
-
212
- Examples:
213
- - `notis db list`
214
- - `notis db list --json`
215
-
216
- ### `notis db upsert`
217
-
218
- Create or update a native database schema.
219
-
220
- When to use: Use this when you need to provision a new database or adjust an existing schema.
221
-
222
- Options:
223
- - `--operation <create|update>` — Create a new database or update an existing one.
224
- - `--database-id <id>` — Database id for update operations.
225
- - `--title <text>` — Database title.
226
- - `--description <text>` — Database description.
227
- - `--icon <lucide-icon-name>` — Database icon (Lucide icon name, e.g. database).
228
- - `--properties <json>` — JSON array of property definitions.
229
-
230
- Examples:
231
- - `notis db upsert --operation create --title "Tasks"`
232
- - `notis db upsert --operation update --database-id db_123 --title "Tasks V2"`
233
-
234
- ### `notis db query <database-slug>`
235
-
236
- Run a structured query against a native Notis database.
237
-
238
- When to use: Use this when the database slug is known and you need direct filters, sorts, or pagination.
239
-
240
- Options:
241
- - `--filter <json>` — Structured query filter JSON.
242
- - `--sort <json>` — Sort JSON object or array.
243
- - `--page-size <n>` — Page size between 1 and 100.
244
- - `--offset <n>` — Zero-based offset.
245
- - `--cursor <value>` — Pagination cursor alias for next_offset.
246
-
247
- Examples:
248
- - `notis db query tasks --page-size 50`
249
- - `notis db query tasks --filter '{"property":"Status"}'`
174
+ - `npx --package @notis_ai/cli@latest -- notis apps doctor`
175
+ - `npx --package @notis_ai/cli@latest -- notis apps doctor ./my-app`
250
176
 
251
177
 
252
178
  ## Generic Tools
253
179
 
254
- ### `notis tools toolkits`
180
+ ### `npx --package @notis_ai/cli@latest -- notis tools toolkits`
255
181
 
256
- List toolkit namespaces available to the active user.
182
+ List toolkit namespaces and connection statuses available to the active user.
257
183
 
258
- When to use: Use this before searching or executing generic tools.
184
+ When to use: Use this to inspect connection state before searching or executing generic tools.
259
185
 
260
186
  Examples:
261
- - `notis tools toolkits`
262
- - `notis tools toolkits --json`
187
+ - `npx --package @notis_ai/cli@latest -- notis tools toolkits`
188
+ - `npx --package @notis_ai/cli@latest -- notis tools toolkits --json`
263
189
 
264
- ### `notis tools search <query>`
190
+ ### `npx --package @notis_ai/cli@latest -- notis tools search <query>`
265
191
 
266
192
  Search across toolkit namespaces using natural language.
267
193
 
268
194
  When to use: Use this when you need a generic capability that does not have a first-class CLI command.
269
195
 
270
196
  Options:
271
- - `--toolkits <csv-or-json>` — Optional subset of toolkit ids to search.
197
+ - `--known-fields <text>` — Optional known field hints, such as channel_name:general or user_email:a@example.com.
272
198
 
273
199
  Examples:
274
- - `notis tools search "send an email"`
275
- - `notis tools search "update framer page" --toolkits mcp-framer`
200
+ - `npx --package @notis_ai/cli@latest -- notis tools search "send an email"`
201
+ - `npx --package @notis_ai/cli@latest -- notis tools search "post on LinkedIn" --known-fields "platform:linkedin"`
276
202
 
277
- ### `notis tools describe <tool-name>`
203
+ ### `npx --package @notis_ai/cli@latest -- notis tools describe <tool-name>`
278
204
 
279
205
  Describe a generic tool by name.
280
206
 
281
207
  When to use: Use this when you know the tool name and want its parameter schema before execution.
282
208
 
283
- Options:
284
- - `--toolkits <csv-or-json>` — Optional subset of toolkit ids to search.
285
-
286
209
  Examples:
287
- - `notis tools describe composio-gmail-default-send_email`
288
- - `notis tools describe notis-default-query --toolkits notis-default`
210
+ - `npx --package @notis_ai/cli@latest -- notis tools describe composio-gmail-send_email`
211
+ - `npx --package @notis_ai/cli@latest -- notis tools describe LOCAL_NOTIS_DATABASE_QUERY`
289
212
 
290
- ### `notis tools exec <tool-name>`
213
+ ### `npx --package @notis_ai/cli@latest -- notis tools exec <tool-name>`
291
214
 
292
215
  Execute a generic tool by canonical tool name.
293
216
 
@@ -295,66 +218,79 @@ When to use: Use this as the escape hatch for integrations or Notis tools withou
295
218
 
296
219
  Options:
297
220
  - `--arguments <json>` — JSON object, @file path, or - for stdin.
221
+ - `--file <argument-path=local-path>` — Upload a local file into a file-uploadable tool argument. Repeatable.
298
222
  - `--get-schema` — Display the tool parameter schema without executing.
299
223
  - `--dry-run` — Validate arguments against the tool schema without executing.
300
- - `--watch <seconds>` — Re-execute on an interval and stream results.
301
- - `--toolkits <csv-or-json>` — Optional toolkit namespace(s) to use when resolving the tool.
302
224
 
303
225
  Examples:
304
- - `notis tools exec notis-default-query --arguments '{"database_slug":"tasks","query":{}}'`
305
- - `notis tools exec notis-default-query --get-schema`
306
- - `notis tools exec notis-default-query --dry-run --arguments '{"database_slug":"tasks","query":{}}'`
307
- - `notis tools exec notis-default-query --arguments @query.json`
308
- - `notis tools exec notis-default-query --arguments - < query.json`
309
- - `notis tools exec notis-default-query --watch 10 --arguments '{"database_slug":"tasks","query":{}}'`
226
+ - `npx --package @notis_ai/cli@latest -- notis tools exec LOCAL_NOTIS_DATABASE_QUERY --arguments '{"database_slug":"tasks","query":{}}'`
227
+ - `npx --package @notis_ai/cli@latest -- notis tools exec LOCAL_NOTIS_DATABASE_GET_DATABASE --arguments '{"database_slug":"tasks"}'`
228
+ - `npx --package @notis_ai/cli@latest -- notis tools exec LOCAL_NOTIS_DATABASE_QUERY --get-schema`
229
+ - `npx --package @notis_ai/cli@latest -- notis tools exec LOCAL_NOTIS_DATABASE_QUERY --dry-run --arguments '{"database_slug":"tasks","query":{}}'`
230
+ - `npx --package @notis_ai/cli@latest -- notis tools exec LOCAL_NOTIS_DATABASE_QUERY --arguments @query.json`
231
+ - `npx --package @notis_ai/cli@latest -- notis tools exec LOCAL_NOTIS_DATABASE_QUERY --arguments - < query.json`
232
+ - `npx --package @notis_ai/cli@latest -- notis tools exec composio-dropbox-upload_file --arguments '{"path":"/target/in/dropbox.pdf"}' --file content=./Invoice.pdf`
310
233
 
311
- ### `notis tools exec-parallel <calls>`
234
+ ### `npx --package @notis_ai/cli@latest -- notis tools exec-parallel <calls>`
312
235
 
313
236
  Execute multiple tools concurrently.
314
237
 
315
238
  When to use: Use this when you need to run independent tool calls simultaneously for speed.
316
239
 
240
+ Options:
241
+ - `--file <argument-path=local-path>` — Unsupported for exec-parallel; use tools exec for file uploads.
242
+
317
243
  Examples:
318
- - `notis tools exec-parallel '[{"tool_name":"notis-default-query","arguments":{"database_slug":"tasks","query":{}}},{"tool_name":"notis-default-list_databases","arguments":{}}]'`
244
+ - `npx --package @notis_ai/cli@latest -- notis tools exec-parallel '[{"tool_name":"LOCAL_NOTIS_DATABASE_QUERY","arguments":{"database_slug":"tasks","query":{}}},{"tool_name":"LOCAL_NOTIS_DATABASE_LIST_DATABASES","arguments":{}}]'`
319
245
 
320
- ### `notis tools link <toolkit>`
246
+ ### `npx --package @notis_ai/cli@latest -- notis tools link <toolkit>`
321
247
 
322
248
  Get the URL to connect an integration toolkit.
323
249
 
324
250
  When to use: Use this when a tool requires authentication with an external service.
325
251
 
326
252
  Examples:
327
- - `notis tools link github`
328
- - `notis tools link gmail --json`
253
+ - `npx --package @notis_ai/cli@latest -- notis tools link github`
254
+ - `npx --package @notis_ai/cli@latest -- notis tools link gmail --json`
329
255
 
330
256
 
331
257
  ## Meta Commands
332
258
 
333
- ### `notis doctor`
259
+ ### `npx --package @notis_ai/cli@latest -- notis doctor`
334
260
 
335
261
  Run a quick CLI health check for config, auth, and API reachability.
336
262
 
337
263
  When to use: Use this before relying on the CLI in automation or after changing environments.
338
264
 
339
265
  Examples:
340
- - `notis doctor`
341
- - `notis doctor --json`
266
+ - `npx --package @notis_ai/cli@latest -- notis doctor`
267
+ - `npx --package @notis_ai/cli@latest -- notis doctor --json`
268
+
269
+ ### `npx --package @notis_ai/cli@latest -- notis whoami`
270
+
271
+ Display the active profile, user, and available toolkit connection statuses.
272
+
273
+ When to use: Use this to quickly confirm which account and environment a command will target.
274
+
275
+ Examples:
276
+ - `npx --package @notis_ai/cli@latest -- notis whoami`
277
+ - `npx --package @notis_ai/cli@latest -- notis whoami --json`
342
278
 
343
- ### `notis describe <command...>`
279
+ ### `npx --package @notis_ai/cli@latest -- notis describe <command...>`
344
280
 
345
281
  Describe a first-class CLI command in detail.
346
282
 
347
283
  When to use: Use this when an agent or human needs the exact shape, examples, and semantics of a command.
348
284
 
349
285
  Examples:
350
- - `notis describe apps push`
351
- - `notis describe db query`
286
+ - `npx --package @notis_ai/cli@latest -- notis describe apps deploy`
287
+ - `npx --package @notis_ai/cli@latest -- notis describe tools exec`
352
288
 
353
289
 
354
290
  ## Local Development
355
291
 
356
292
  ```bash
357
- cd cli/npm
293
+ cd packages/cli
358
294
  npm install
359
295
  node ./bin/notis.js --help
360
296
  npm run docs:generate
@@ -0,0 +1,50 @@
1
+ {
2
+ "javascript": [
3
+ {
4
+ "pattern": "window\\.__NOTIS_RUNTIME__",
5
+ "message": "window.__NOTIS_RUNTIME__ is forbidden; rely on the portal-injected NotisProvider runtime."
6
+ },
7
+ {
8
+ "pattern": "document\\.(?:body|head|documentElement)\\b",
9
+ "message": "document.body, document.head, and document.documentElement are forbidden; apps must stay inside the app surface."
10
+ },
11
+ {
12
+ "pattern": "document\\.(?:querySelector|querySelectorAll|getElementById|getElementsByClassName|getElementsByTagName)\\s*\\(\\s*(['\"`])[^\\n]*\\[data-notis-",
13
+ "message": "querying portal-owned [data-notis-*] hooks is forbidden."
14
+ },
15
+ {
16
+ "pattern": "createPortal\\s*\\(",
17
+ "message": "React portals are unsupported in Notis apps until a shadow-safe overlay contract exists."
18
+ },
19
+ {
20
+ "pattern": "@radix-ui/react-portal",
21
+ "message": "@radix-ui/react-portal is unsupported in Notis apps until a shadow-safe overlay contract exists."
22
+ },
23
+ {
24
+ "pattern": "PortalPrimitive",
25
+ "message": "Radix portal primitives are unsupported in Notis apps until a shadow-safe overlay contract exists."
26
+ }
27
+ ],
28
+ "css": [
29
+ {
30
+ "pattern": ":root\\b",
31
+ "message": ":root selectors are forbidden; styles must stay inside the app surface."
32
+ },
33
+ {
34
+ "pattern": "(^|[\\s,>+~])html(?=[\\s.#[:{>+~,]|$)",
35
+ "message": "html selectors are forbidden; styles must stay inside the app surface."
36
+ },
37
+ {
38
+ "pattern": "(^|[\\s,>+~])body(?=[\\s.#[:{>+~,]|$)",
39
+ "message": "body selectors are forbidden; styles must stay inside the app surface."
40
+ },
41
+ {
42
+ "pattern": "\\[data-notis-(?!app-root\\b)[^\\]]*\\]",
43
+ "message": "portal-owned [data-notis-*] selectors are forbidden. Use [data-notis-app-root] only for the app surface itself."
44
+ },
45
+ {
46
+ "pattern": "\\[data-sidebar(?:=[^\\]]+)?\\]",
47
+ "message": "portal sidebar selectors are forbidden."
48
+ }
49
+ ]
50
+ }
@@ -0,0 +1,44 @@
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
4
+
5
+ /*
6
+ * The portal mounts the app inside [data-notis-app-root] (display: block,
7
+ * min-height: 100% from @notis/sdk/styles.css). Width 100% ensures the
8
+ * two-pane layout can stretch to the full content area; height stays on
9
+ * the SDK's min-height: 100% default so the page can grow with content.
10
+ * The page itself uses `h-screen` to guarantee a fixed viewport height
11
+ * for the two-pane divider and centered empty states.
12
+ */
13
+ [data-notis-app-root] {
14
+ width: 100%;
15
+ }
16
+
17
+ /*
18
+ * Dev-preview fallback tokens. Active only when the dev entrypoint sets the
19
+ * data-dev-preview attribute. Production bundle runs inside the portal
20
+ * shadow root where the host injects real theme tokens, so this rule is
21
+ * scoped narrowly enough to never collide with portal-provided values.
22
+ */
23
+ [data-dev-preview] {
24
+ --background: 0 0% 100%;
25
+ --foreground: 0 0% 4%;
26
+ --card: 0 0% 100%;
27
+ --card-foreground: 0 0% 4%;
28
+ --popover: 0 0% 100%;
29
+ --popover-foreground: 0 0% 4%;
30
+ --primary: 0 0% 9%;
31
+ --primary-foreground: 0 0% 98%;
32
+ --secondary: 240 5% 96%;
33
+ --secondary-foreground: 0 0% 9%;
34
+ --muted: 240 5% 96%;
35
+ --muted-foreground: 240 4% 46%;
36
+ --accent: 240 5% 96%;
37
+ --accent-foreground: 0 0% 9%;
38
+ --destructive: 0 84% 60%;
39
+ --destructive-foreground: 0 0% 98%;
40
+ --border: 240 6% 90%;
41
+ --input: 240 6% 90%;
42
+ --ring: 0 0% 4%;
43
+ --radius: 0.5rem;
44
+ }
@@ -0,0 +1,6 @@
1
+ import '@notis/sdk/styles.css';
2
+ import './globals.css';
3
+
4
+ export default function AppShell({ children }: { children: React.ReactNode }) {
5
+ return children;
6
+ }