@agent-native/core 0.4.2 → 0.4.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.
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +9 -3
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/types.d.ts +2 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/application-state/emitter.d.ts +10 -0
- package/dist/application-state/emitter.d.ts.map +1 -0
- package/dist/application-state/emitter.js +18 -0
- package/dist/application-state/emitter.js.map +1 -0
- package/dist/application-state/handlers.d.ts +20 -0
- package/dist/application-state/handlers.d.ts.map +1 -0
- package/dist/application-state/handlers.js +94 -0
- package/dist/application-state/handlers.js.map +1 -0
- package/dist/application-state/index.d.ts +5 -0
- package/dist/application-state/index.d.ts.map +1 -0
- package/dist/application-state/index.js +9 -0
- package/dist/application-state/index.js.map +1 -0
- package/dist/application-state/script-helpers.d.ts +17 -0
- package/dist/application-state/script-helpers.d.ts.map +1 -0
- package/dist/application-state/script-helpers.js +28 -0
- package/dist/application-state/script-helpers.js.map +1 -0
- package/dist/application-state/store.d.ts +9 -0
- package/dist/application-state/store.d.ts.map +1 -0
- package/dist/application-state/store.js +93 -0
- package/dist/application-state/store.js.map +1 -0
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +38 -24
- package/dist/cli/create.js.map +1 -1
- package/dist/client/AgentPanel.d.ts +53 -0
- package/dist/client/AgentPanel.d.ts.map +1 -0
- package/dist/client/AgentPanel.js +70 -0
- package/dist/client/AgentPanel.js.map +1 -0
- package/dist/client/AssistantChat.d.ts +27 -0
- package/dist/client/AssistantChat.d.ts.map +1 -0
- package/dist/client/AssistantChat.js +165 -0
- package/dist/client/AssistantChat.js.map +1 -0
- package/dist/client/ErrorBoundary.d.ts +4 -0
- package/dist/client/ErrorBoundary.d.ts.map +1 -0
- package/dist/client/ErrorBoundary.js +22 -0
- package/dist/client/ErrorBoundary.js.map +1 -0
- package/dist/client/MultiTabAssistantChat.d.ts +4 -0
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -0
- package/dist/client/MultiTabAssistantChat.js +125 -0
- package/dist/client/MultiTabAssistantChat.js.map +1 -0
- package/dist/client/ProductionAgentPanel.d.ts +3 -7
- package/dist/client/ProductionAgentPanel.d.ts.map +1 -1
- package/dist/client/ProductionAgentPanel.js +3 -118
- package/dist/client/ProductionAgentPanel.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts +10 -0
- package/dist/client/agent-chat-adapter.d.ts.map +1 -0
- package/dist/client/agent-chat-adapter.js +235 -0
- package/dist/client/agent-chat-adapter.js.map +1 -0
- package/dist/client/agent-chat.d.ts +9 -1
- package/dist/client/agent-chat.d.ts.map +1 -1
- package/dist/client/agent-chat.js +11 -1
- package/dist/client/agent-chat.js.map +1 -1
- package/dist/client/index.d.ts +8 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +9 -2
- package/dist/client/index.js.map +1 -1
- package/dist/client/terminal/AgentTerminal.d.ts +35 -0
- package/dist/client/terminal/AgentTerminal.d.ts.map +1 -0
- package/dist/client/terminal/AgentTerminal.js +346 -0
- package/dist/client/terminal/AgentTerminal.js.map +1 -0
- package/dist/client/terminal/index.d.ts +7 -0
- package/dist/client/terminal/index.d.ts.map +1 -0
- package/dist/client/terminal/index.js +7 -0
- package/dist/client/terminal/index.js.map +1 -0
- package/dist/client/use-agent-chat.d.ts +1 -1
- package/dist/client/use-agent-chat.d.ts.map +1 -1
- package/dist/client/use-agent-chat.js +1 -1
- package/dist/client/use-agent-chat.js.map +1 -1
- package/dist/client/useProductionAgent.d.ts +6 -1
- package/dist/client/useProductionAgent.d.ts.map +1 -1
- package/dist/client/useProductionAgent.js +4 -2
- package/dist/client/useProductionAgent.js.map +1 -1
- package/dist/db/create-get-db.d.ts +3 -0
- package/dist/db/create-get-db.d.ts.map +1 -0
- package/dist/db/create-get-db.js +18 -0
- package/dist/db/create-get-db.js.map +1 -0
- package/dist/db/index.d.ts +2 -0
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +2 -0
- package/dist/db/index.js.map +1 -1
- package/dist/db/migrations.d.ts +7 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/migrations.js +35 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/oauth-tokens/index.d.ts +2 -0
- package/dist/oauth-tokens/index.d.ts.map +1 -0
- package/dist/oauth-tokens/index.js +2 -0
- package/dist/oauth-tokens/index.js.map +1 -0
- package/dist/oauth-tokens/store.d.ts +9 -0
- package/dist/oauth-tokens/store.d.ts.map +1 -0
- package/dist/oauth-tokens/store.js +90 -0
- package/dist/oauth-tokens/store.js.map +1 -0
- package/dist/scripts/db/exec.d.ts.map +1 -1
- package/dist/scripts/db/exec.js +31 -16
- package/dist/scripts/db/exec.js.map +1 -1
- package/dist/scripts/db/query.d.ts.map +1 -1
- package/dist/scripts/db/query.js +24 -8
- package/dist/scripts/db/query.js.map +1 -1
- package/dist/scripts/db/schema.d.ts.map +1 -1
- package/dist/scripts/db/schema.js +56 -28
- package/dist/scripts/db/schema.js.map +1 -1
- package/dist/scripts/dev/index.d.ts +15 -0
- package/dist/scripts/dev/index.d.ts.map +1 -0
- package/dist/scripts/dev/index.js +118 -0
- package/dist/scripts/dev/index.js.map +1 -0
- package/dist/scripts/dev/list-files.d.ts +5 -0
- package/dist/scripts/dev/list-files.d.ts.map +1 -0
- package/dist/scripts/dev/list-files.js +102 -0
- package/dist/scripts/dev/list-files.js.map +1 -0
- package/dist/scripts/dev/read-file.d.ts +5 -0
- package/dist/scripts/dev/read-file.d.ts.map +1 -0
- package/dist/scripts/dev/read-file.js +68 -0
- package/dist/scripts/dev/read-file.js.map +1 -0
- package/dist/scripts/dev/search-files.d.ts +5 -0
- package/dist/scripts/dev/search-files.d.ts.map +1 -0
- package/dist/scripts/dev/search-files.js +133 -0
- package/dist/scripts/dev/search-files.js.map +1 -0
- package/dist/scripts/dev/shell.d.ts +5 -0
- package/dist/scripts/dev/shell.d.ts.map +1 -0
- package/dist/scripts/dev/shell.js +65 -0
- package/dist/scripts/dev/shell.js.map +1 -0
- package/dist/scripts/dev/write-file.d.ts +5 -0
- package/dist/scripts/dev/write-file.d.ts.map +1 -0
- package/dist/scripts/dev/write-file.js +50 -0
- package/dist/scripts/dev/write-file.js.map +1 -0
- package/dist/scripts/index.d.ts +1 -0
- package/dist/scripts/index.d.ts.map +1 -1
- package/dist/scripts/index.js +1 -0
- package/dist/scripts/index.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +43 -0
- package/dist/server/agent-chat-plugin.d.ts.map +1 -0
- package/dist/server/agent-chat-plugin.js +92 -0
- package/dist/server/agent-chat-plugin.js.map +1 -0
- package/dist/server/auth-plugin.d.ts +6 -0
- package/dist/server/auth-plugin.d.ts.map +1 -0
- package/dist/server/auth-plugin.js +8 -0
- package/dist/server/auth-plugin.js.map +1 -0
- package/dist/server/auth.d.ts +18 -2
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +103 -46
- package/dist/server/auth.js.map +1 -1
- package/dist/server/create-server.d.ts +7 -0
- package/dist/server/create-server.d.ts.map +1 -1
- package/dist/server/create-server.js +7 -1
- package/dist/server/create-server.js.map +1 -1
- package/dist/server/default-watcher.d.ts +17 -0
- package/dist/server/default-watcher.d.ts.map +1 -0
- package/dist/server/default-watcher.js +37 -0
- package/dist/server/default-watcher.js.map +1 -0
- package/dist/server/file-sync-plugin.d.ts +7 -0
- package/dist/server/file-sync-plugin.d.ts.map +1 -0
- package/dist/server/file-sync-plugin.js +38 -0
- package/dist/server/file-sync-plugin.js.map +1 -0
- package/dist/server/google-auth-plugin.d.ts +22 -0
- package/dist/server/google-auth-plugin.d.ts.map +1 -0
- package/dist/server/google-auth-plugin.js +122 -0
- package/dist/server/google-auth-plugin.js.map +1 -0
- package/dist/server/index.d.ts +9 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +9 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/sse.d.ts +9 -4
- package/dist/server/sse.d.ts.map +1 -1
- package/dist/server/sse.js +19 -12
- package/dist/server/sse.js.map +1 -1
- package/dist/settings/handlers.d.ts +9 -0
- package/dist/settings/handlers.d.ts.map +1 -0
- package/dist/settings/handlers.js +29 -0
- package/dist/settings/handlers.js.map +1 -0
- package/dist/settings/index.d.ts +5 -0
- package/dist/settings/index.d.ts.map +1 -0
- package/dist/settings/index.js +9 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/settings/script-helpers.d.ts +9 -0
- package/dist/settings/script-helpers.d.ts.map +1 -0
- package/dist/settings/script-helpers.js +16 -0
- package/dist/settings/script-helpers.js.map +1 -0
- package/dist/settings/store.d.ts +7 -0
- package/dist/settings/store.d.ts.map +1 -0
- package/dist/settings/store.js +88 -0
- package/dist/settings/store.js.map +1 -0
- package/dist/settings/user-settings.d.ts +21 -0
- package/dist/settings/user-settings.d.ts.map +1 -0
- package/dist/settings/user-settings.js +35 -0
- package/dist/settings/user-settings.js.map +1 -0
- package/dist/tailwind.preset.js +1 -1
- package/dist/tailwind.preset.js.map +1 -1
- package/dist/terminal/cli-registry.d.ts +16 -0
- package/dist/terminal/cli-registry.d.ts.map +1 -0
- package/dist/terminal/cli-registry.js +42 -0
- package/dist/terminal/cli-registry.js.map +1 -0
- package/dist/terminal/index.d.ts +9 -0
- package/dist/terminal/index.d.ts.map +1 -0
- package/dist/terminal/index.js +9 -0
- package/dist/terminal/index.js.map +1 -0
- package/dist/terminal/pty-server.d.ts +31 -0
- package/dist/terminal/pty-server.d.ts.map +1 -0
- package/dist/terminal/pty-server.js +252 -0
- package/dist/terminal/pty-server.js.map +1 -0
- package/dist/terminal/terminal-plugin.d.ts +23 -0
- package/dist/terminal/terminal-plugin.d.ts.map +1 -0
- package/dist/terminal/terminal-plugin.js +90 -0
- package/dist/terminal/terminal-plugin.js.map +1 -0
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +19 -1
- package/dist/vite/client.js.map +1 -1
- package/dist/vite/dev-api-server.d.ts.map +1 -1
- package/dist/vite/dev-api-server.js +12 -0
- package/dist/vite/dev-api-server.js.map +1 -1
- package/package.json +50 -4
- package/src/templates/default/.agents/skills/create-skill/SKILL.md +1 -1
- package/src/templates/default/.agents/skills/delegate-to-agent/SKILL.md +3 -3
- package/src/templates/default/.agents/skills/files-as-database/SKILL.md +82 -63
- package/src/templates/default/.agents/skills/frontend-design/SKILL.md +2 -2
- package/src/templates/default/.agents/skills/scripts/SKILL.md +20 -17
- package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +2 -2
- package/src/templates/default/.agents/skills/sse-file-watcher/SKILL.md +49 -64
- package/src/templates/default/.ignore +0 -0
- package/src/templates/default/AGENTS.md +30 -55
- package/src/templates/default/app/global.css +95 -0
- package/src/templates/default/{client → app}/root.tsx +22 -9
- package/src/templates/default/app/routes/_index.tsx +62 -0
- package/src/templates/default/application-state/.gitkeep +0 -0
- package/src/templates/default/components.json +1 -1
- package/src/templates/default/data/sync-config.json +1 -0
- package/src/templates/default/package.json +2 -1
- package/src/templates/default/react-router.config.ts +1 -1
- package/src/templates/default/scripts/run.ts +1 -8
- package/src/templates/default/server/plugins/agent-chat.ts +1 -0
- package/src/templates/default/server/plugins/auth.ts +1 -5
- package/src/templates/default/server/plugins/file-sync.ts +1 -39
- package/src/templates/default/server/plugins/terminal.ts +1 -0
- package/src/templates/default/server/routes/api/events.get.ts +2 -6
- package/src/templates/default/server/routes/api/file-sync/status.get.ts +2 -11
- package/src/templates/default/tailwind.config.ts +1 -1
- package/src/templates/default/tsconfig.json +1 -1
- package/tsconfig.base.json +2 -2
- package/src/templates/default/client/App.tsx +0 -56
- package/src/templates/default/client/global.css +0 -75
- package/src/templates/default/client/routes/_index.tsx +0 -19
- package/src/templates/default/server/lib/watcher.ts +0 -21
- /package/src/templates/default/{client → app}/entry.client.tsx +0 -0
- /package/src/templates/default/{client → app}/entry.server.tsx +0 -0
- /package/src/templates/default/{client → app}/lib/utils.ts +0 -0
- /package/src/templates/default/{client → app}/routes.ts +0 -0
- /package/src/templates/default/{client → app}/vite-env.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-api-server.js","sourceRoot":"","sources":["../../src/vite/dev-api-server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dev-api-server.js","sourceRoot":"","sources":["../../src/vite/dev-api-server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Framework for agent-native application development — where AI agents and UI share state via files",
|
|
6
6
|
"license": "MIT",
|
|
@@ -23,6 +23,9 @@
|
|
|
23
23
|
"./client": "./dist/client/index.js",
|
|
24
24
|
"./shared": "./dist/shared/index.js",
|
|
25
25
|
"./scripts": "./dist/scripts/index.js",
|
|
26
|
+
"./application-state": "./dist/application-state/index.js",
|
|
27
|
+
"./settings": "./dist/settings/index.js",
|
|
28
|
+
"./oauth-tokens": "./dist/oauth-tokens/index.js",
|
|
26
29
|
"./adapters/sync": "./dist/adapters/sync/index.js",
|
|
27
30
|
"./adapters/drizzle": "./dist/adapters/drizzle/index.js",
|
|
28
31
|
"./adapters/firestore": "./dist/adapters/firestore/index.js",
|
|
@@ -31,6 +34,8 @@
|
|
|
31
34
|
"./adapters/cli": "./dist/adapters/cli/index.js",
|
|
32
35
|
"./router": "./dist/router/index.js",
|
|
33
36
|
"./a2a": "./dist/a2a/index.js",
|
|
37
|
+
"./terminal": "./dist/client/terminal/index.js",
|
|
38
|
+
"./terminal/server": "./dist/terminal/index.js",
|
|
34
39
|
"./tailwind": "./dist/tailwind.preset.js",
|
|
35
40
|
"./tsconfig.base.json": "./tsconfig.base.json"
|
|
36
41
|
},
|
|
@@ -50,26 +55,37 @@
|
|
|
50
55
|
},
|
|
51
56
|
"dependencies": {
|
|
52
57
|
"@anthropic-ai/sdk": "^0.80.0",
|
|
58
|
+
"@libsql/client": "^0.15.0",
|
|
53
59
|
"@react-router/dev": "^7.13.1",
|
|
54
60
|
"@react-router/fs-routes": "^7.13.1",
|
|
61
|
+
"@tailwindcss/typography": "^0.5.19",
|
|
55
62
|
"better-sqlite3": "^12.8.0",
|
|
56
63
|
"chokidar": "^4.0.0",
|
|
57
64
|
"clsx": "^2.1.1",
|
|
58
65
|
"dotenv": "^17.2.1",
|
|
59
|
-
"drizzle-orm": "^0.
|
|
66
|
+
"drizzle-orm": "^0.44.0",
|
|
60
67
|
"h3": "^1.14.0",
|
|
68
|
+
"isbot": "^5",
|
|
61
69
|
"minimatch": "^10.0.0",
|
|
62
70
|
"nitro": "^3.0.0",
|
|
63
71
|
"p-limit": "^7.3.0",
|
|
72
|
+
"react-markdown": "^10.1.0",
|
|
64
73
|
"react-router": "^7.13.1",
|
|
74
|
+
"remark-gfm": "^4.0.1",
|
|
65
75
|
"tailwind-merge": "^2.6.0"
|
|
66
76
|
},
|
|
67
77
|
"peerDependencies": {
|
|
78
|
+
"@assistant-ui/react": ">=0.12",
|
|
79
|
+
"@assistant-ui/react-markdown": ">=0.12",
|
|
68
80
|
"@supabase/supabase-js": ">=2",
|
|
69
81
|
"@tanstack/react-query": ">=5",
|
|
70
82
|
"@vitejs/plugin-react-swc": ">=4",
|
|
83
|
+
"@xterm/addon-fit": ">=0.10",
|
|
84
|
+
"@xterm/addon-web-links": ">=0.11",
|
|
85
|
+
"@xterm/xterm": ">=5",
|
|
71
86
|
"autoprefixer": ">=10",
|
|
72
87
|
"convex": ">=1",
|
|
88
|
+
"node-pty": ">=1",
|
|
73
89
|
"postcss": ">=8",
|
|
74
90
|
"react": ">=18",
|
|
75
91
|
"react-dom": ">=18",
|
|
@@ -77,9 +93,16 @@
|
|
|
77
93
|
"tailwindcss": ">=3",
|
|
78
94
|
"tailwindcss-animate": ">=1",
|
|
79
95
|
"typescript": ">=5",
|
|
80
|
-
"vite": ">=7"
|
|
96
|
+
"vite": ">=7",
|
|
97
|
+
"ws": ">=8"
|
|
81
98
|
},
|
|
82
99
|
"peerDependenciesMeta": {
|
|
100
|
+
"@assistant-ui/react": {
|
|
101
|
+
"optional": true
|
|
102
|
+
},
|
|
103
|
+
"@assistant-ui/react-markdown": {
|
|
104
|
+
"optional": true
|
|
105
|
+
},
|
|
83
106
|
"@tanstack/react-query": {
|
|
84
107
|
"optional": true
|
|
85
108
|
},
|
|
@@ -109,9 +132,26 @@
|
|
|
109
132
|
},
|
|
110
133
|
"convex": {
|
|
111
134
|
"optional": true
|
|
135
|
+
},
|
|
136
|
+
"@xterm/xterm": {
|
|
137
|
+
"optional": true
|
|
138
|
+
},
|
|
139
|
+
"@xterm/addon-fit": {
|
|
140
|
+
"optional": true
|
|
141
|
+
},
|
|
142
|
+
"@xterm/addon-web-links": {
|
|
143
|
+
"optional": true
|
|
144
|
+
},
|
|
145
|
+
"node-pty": {
|
|
146
|
+
"optional": true
|
|
147
|
+
},
|
|
148
|
+
"ws": {
|
|
149
|
+
"optional": true
|
|
112
150
|
}
|
|
113
151
|
},
|
|
114
152
|
"devDependencies": {
|
|
153
|
+
"@assistant-ui/react": "^0.12.19",
|
|
154
|
+
"@assistant-ui/react-markdown": "^0.12.6",
|
|
115
155
|
"@react-router/dev": "^7.13.1",
|
|
116
156
|
"@react-router/fs-routes": "^7.13.1",
|
|
117
157
|
"@supabase/supabase-js": "^2.49.0",
|
|
@@ -120,10 +160,15 @@
|
|
|
120
160
|
"@types/express": "^5.0.6",
|
|
121
161
|
"@types/node": "^24.2.1",
|
|
122
162
|
"@types/react": "^18.3.23",
|
|
163
|
+
"@types/ws": "^8.18.1",
|
|
123
164
|
"@vitejs/plugin-react-swc": "^4.0.0",
|
|
165
|
+
"@xterm/addon-fit": "^0.10.0",
|
|
166
|
+
"@xterm/addon-web-links": "^0.11.0",
|
|
167
|
+
"@xterm/xterm": "^5.5.0",
|
|
124
168
|
"autoprefixer": "^10.4.21",
|
|
125
169
|
"express": "^5.2.1",
|
|
126
170
|
"firebase-admin": "^13.0.0",
|
|
171
|
+
"node-pty": "^1.1.0",
|
|
127
172
|
"postcss": "^8.5.6",
|
|
128
173
|
"react": "^18.3.1",
|
|
129
174
|
"react-router": "^7.13.1",
|
|
@@ -131,6 +176,7 @@
|
|
|
131
176
|
"tailwindcss-animate": "^1.0.7",
|
|
132
177
|
"typescript": "^5.9.2",
|
|
133
178
|
"vite": "^8.0.0",
|
|
134
|
-
"vitest": "^3.2.4"
|
|
179
|
+
"vitest": "^3.2.4",
|
|
180
|
+
"ws": "^8.18.0"
|
|
135
181
|
}
|
|
136
182
|
}
|
|
@@ -135,7 +135,7 @@ description: >-
|
|
|
135
135
|
## Naming Conventions
|
|
136
136
|
|
|
137
137
|
- Hyphen-case only: `[a-z0-9-]`, max 64 characters
|
|
138
|
-
- Pattern skills: descriptive names (`
|
|
138
|
+
- Pattern skills: descriptive names (`storing-data`, `delegate-to-agent`)
|
|
139
139
|
- Workflow/generator skills: verb-noun (`create-script`, `capture-learnings`)
|
|
140
140
|
|
|
141
141
|
## Tips
|
|
@@ -14,7 +14,7 @@ The UI and server never call an LLM directly. All AI work is delegated to the ag
|
|
|
14
14
|
|
|
15
15
|
## Why
|
|
16
16
|
|
|
17
|
-
The agent is the single AI interface. It has context about the full project, can read/write
|
|
17
|
+
The agent is the single AI interface. It has context about the full project, can read/write the database, and can run scripts. Inline LLM calls bypass this — they create a shadow AI that doesn't know what the agent knows and can't coordinate with it.
|
|
18
18
|
|
|
19
19
|
## How
|
|
20
20
|
|
|
@@ -86,5 +86,5 @@ Scripts may call external APIs (image generation, search, etc.) — but the AI r
|
|
|
86
86
|
|
|
87
87
|
- **scripts** — The agent invokes scripts via `pnpm script <name>` to perform complex operations
|
|
88
88
|
- **self-modifying-code** — The agent operates through the chat bridge to make code changes
|
|
89
|
-
- **
|
|
90
|
-
- **
|
|
89
|
+
- **storing-data** — The agent writes results to the database after processing requests
|
|
90
|
+
- **real-time-sync** — The UI updates automatically when the agent writes to the database
|
|
@@ -1,91 +1,110 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: storing-data
|
|
3
3
|
description: >-
|
|
4
|
-
How to store
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
How and where to store application data. Use when adding new data models,
|
|
5
|
+
deciding between settings vs Drizzle tables, reading/writing app config,
|
|
6
|
+
or working with application state.
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
#
|
|
9
|
+
# Storing Data
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## Where Data Goes
|
|
12
12
|
|
|
13
|
-
All
|
|
13
|
+
All data lives in one SQLite database (`data/app.db`). In production, set `DATABASE_URL` to point to Turso, Neon, Supabase, or D1 — same code, no changes needed.
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
There are three storage layers, each for a different kind of data:
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
### 1. Settings — app configuration
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
Key-value store for persistent config that the user or agent can change. Theme, preferences, integration API keys, availability schedules.
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
```ts
|
|
22
|
+
import { getSetting, putSetting } from "@agent-native/core/settings";
|
|
23
|
+
|
|
24
|
+
// Read (returns null if not set)
|
|
25
|
+
const prefs = await getSetting("user-preferences");
|
|
26
|
+
|
|
27
|
+
// Write (creates or replaces)
|
|
28
|
+
await putSetting("user-preferences", { theme: "dark", density: "comfortable" });
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
From scripts:
|
|
32
|
+
```ts
|
|
33
|
+
import { readSetting, writeSetting } from "@agent-native/core/settings";
|
|
34
|
+
const prefs = await readSetting("user-preferences");
|
|
35
|
+
```
|
|
26
36
|
|
|
27
|
-
|
|
37
|
+
SSE: writes automatically notify the UI via `{ source: "settings", type: "change", key }`.
|
|
28
38
|
|
|
29
|
-
|
|
30
|
-
- Don't store app state in localStorage, sessionStorage, or cookies
|
|
31
|
-
- Don't keep state only in memory (server variables, global stores)
|
|
32
|
-
- Don't use Redis or any external state store
|
|
33
|
-
- Don't interpolate user input directly into file paths (see Security below)
|
|
39
|
+
### 2. Application State — ephemeral UI state
|
|
34
40
|
|
|
35
|
-
|
|
41
|
+
For state the agent and UI share in real-time: what the user is looking at, compose drafts, navigation commands. Scoped by session — cleared between sessions.
|
|
36
42
|
|
|
37
43
|
```ts
|
|
38
|
-
import
|
|
39
|
-
|
|
40
|
-
//
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
);
|
|
45
|
-
|
|
46
|
-
//
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
});
|
|
44
|
+
import { readAppState, writeAppState, deleteAppState, listAppState } from "@agent-native/core/application-state";
|
|
45
|
+
|
|
46
|
+
// Write state (UI updates instantly via SSE)
|
|
47
|
+
await writeAppState("navigate", { view: "inbox", threadId: "t-123" });
|
|
48
|
+
|
|
49
|
+
// Read state
|
|
50
|
+
const nav = await readAppState("navigation");
|
|
51
|
+
|
|
52
|
+
// List by prefix (e.g., all compose drafts)
|
|
53
|
+
const drafts = await listAppState("compose-");
|
|
54
|
+
|
|
55
|
+
// Delete (one-shot commands: UI reads, then agent or UI deletes)
|
|
56
|
+
await deleteAppState("navigate");
|
|
52
57
|
```
|
|
53
58
|
|
|
54
|
-
|
|
59
|
+
SSE: writes automatically notify the UI via `{ source: "app-state", type: "change", key }`.
|
|
60
|
+
|
|
61
|
+
### 3. Drizzle Tables — structured domain data
|
|
62
|
+
|
|
63
|
+
For data with schemas, relationships, and queries: forms, bookings, emails, compositions. Define tables in `server/db/schema.ts` using Drizzle ORM.
|
|
64
|
+
|
|
65
|
+
```ts
|
|
66
|
+
import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core";
|
|
67
|
+
|
|
68
|
+
export const bookings = sqliteTable("bookings", {
|
|
69
|
+
id: text("id").primaryKey(),
|
|
70
|
+
name: text("name").notNull(),
|
|
71
|
+
email: text("email").notNull(),
|
|
72
|
+
startTime: integer("start_time").notNull(),
|
|
73
|
+
endTime: integer("end_time").notNull(),
|
|
74
|
+
});
|
|
75
|
+
```
|
|
55
76
|
|
|
56
|
-
|
|
77
|
+
Query via `getDb()` singleton from `server/db/index.ts`.
|
|
57
78
|
|
|
58
|
-
|
|
59
|
-
2. **Create the data directory** — `data/<model>/<id>.json` (one file per item) or `data/<model>.json` (single collection)
|
|
60
|
-
3. **Add API routes** in `server/` that read/write the files (sanitize IDs from params)
|
|
61
|
-
4. **Wire SSE invalidation** — Add the query key to `useFileWatcher()` so the UI refreshes on changes
|
|
79
|
+
### 4. OAuth Tokens — credentials
|
|
62
80
|
|
|
63
|
-
|
|
81
|
+
For OAuth tokens acquired at runtime (Google, etc.). Never store these in settings — use the dedicated encrypted store.
|
|
64
82
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
| Are items independently addressable? | No — use one file | Yes — one file per item |
|
|
68
|
-
| Will there be >50 items? | Probably fine | Definitely split |
|
|
69
|
-
| Do items need individual URLs? | No | Yes |
|
|
70
|
-
| Do items change independently? | No | Yes — avoids write conflicts |
|
|
83
|
+
```ts
|
|
84
|
+
import { saveOAuthTokens, getOAuthTokens, listOAuthAccounts } from "@agent-native/core/oauth-tokens";
|
|
71
85
|
|
|
72
|
-
|
|
86
|
+
await saveOAuthTokens("google", "user@gmail.com", { access_token: "...", refresh_token: "..." });
|
|
87
|
+
const tokens = await getOAuthTokens("google", "user@gmail.com");
|
|
88
|
+
const accounts = await listOAuthAccounts("google");
|
|
89
|
+
```
|
|
73
90
|
|
|
74
|
-
|
|
75
|
-
| ---------- | --------------------------------------------------------------------- |
|
|
76
|
-
| Under 50 | Read-all with `readdirSync` + `readFileSync` is fine |
|
|
77
|
-
| 50–200 | Add an index file (`data/<model>/_index.json`) with IDs and summaries |
|
|
78
|
-
| 200+ | Partition into subdirectories |
|
|
91
|
+
## Which Layer to Use
|
|
79
92
|
|
|
80
|
-
|
|
93
|
+
| Data | Layer | Why |
|
|
94
|
+
|------|-------|-----|
|
|
95
|
+
| User preferences, theme, config | Settings | Persistent KV, SSE notifications, simple read/write |
|
|
96
|
+
| What the user sees on screen | Application State | Ephemeral, real-time sync, agent ↔ UI bridge |
|
|
97
|
+
| Compose drafts, wizard steps | Application State | Temporary, deleted when done |
|
|
98
|
+
| Domain records (forms, bookings) | Drizzle table | Needs schema, queries, relationships |
|
|
99
|
+
| OAuth refresh tokens | OAuth Tokens | Secure, per-provider, per-account |
|
|
81
100
|
|
|
82
|
-
##
|
|
101
|
+
## Environment Variables
|
|
83
102
|
|
|
84
|
-
|
|
85
|
-
- **Validate before writing** — Check data shape before writing files, especially for user-submitted data. A malformed write can break all subsequent reads.
|
|
103
|
+
Infrastructure config stays in `.env` — these differ per deployment:
|
|
86
104
|
|
|
87
|
-
|
|
105
|
+
- `DATABASE_URL` — database connection (default: `file:./data/app.db`)
|
|
106
|
+
- `DATABASE_AUTH_TOKEN` — for remote databases
|
|
107
|
+
- `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` — OAuth app credentials
|
|
108
|
+
- `ACCESS_TOKEN` — production auth token
|
|
88
109
|
|
|
89
|
-
|
|
90
|
-
- **scripts** — Create scripts that read/write data files for complex operations
|
|
91
|
-
- **self-modifying-code** — The agent writes data files as Tier 1 (auto-apply) modifications
|
|
110
|
+
Everything else (user settings, tokens, app state) goes in SQL.
|
|
@@ -61,9 +61,9 @@ In the agent-native framework context:
|
|
|
61
61
|
- For complex visual effects, use a `<style>` tag in the component or a dedicated CSS file
|
|
62
62
|
- Fonts can be loaded from Google Fonts via `@import` in a CSS file or `<link>` in `index.html`
|
|
63
63
|
- Animation libraries: prefer CSS transitions and keyframes; use Framer Motion for complex sequences
|
|
64
|
-
- All new UI components should be placed in `
|
|
64
|
+
- All new UI components should be placed in `app/components/`
|
|
65
65
|
|
|
66
66
|
## Related Skills
|
|
67
67
|
|
|
68
68
|
- **self-modifying-code** — The agent can edit source code to apply design changes
|
|
69
|
-
- **
|
|
69
|
+
- **storing-data** — Design configuration can be stored in the settings table for agent-editable theming
|
|
@@ -21,8 +21,9 @@ Scripts give the agent callable tools with structured input/output. They keep th
|
|
|
21
21
|
Create `scripts/my-script.ts`:
|
|
22
22
|
|
|
23
23
|
```ts
|
|
24
|
-
import fs from "fs";
|
|
25
24
|
import { parseArgs, loadEnv, fail, agentChat } from "@agent-native/core";
|
|
25
|
+
import { readSetting, writeSetting } from "@agent-native/core/settings";
|
|
26
|
+
import { readAppState, writeAppState } from "@agent-native/core/application-state";
|
|
26
27
|
|
|
27
28
|
export default async function myScript(args: string[]) {
|
|
28
29
|
loadEnv();
|
|
@@ -31,19 +32,21 @@ export default async function myScript(args: string[]) {
|
|
|
31
32
|
const input = parsed.input;
|
|
32
33
|
if (!input) fail("--input is required");
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
const
|
|
36
|
-
|
|
35
|
+
// Read/write settings (persistent config)
|
|
36
|
+
const settings = await readSetting("my-settings");
|
|
37
|
+
await writeSetting("my-settings", { ...settings, lastRun: new Date().toISOString() });
|
|
38
|
+
|
|
39
|
+
// Read/write app state (ephemeral UI state)
|
|
40
|
+
await writeAppState("processing-status", { status: "done", input });
|
|
37
41
|
|
|
38
|
-
|
|
39
|
-
agentChat.submit(`Processed ${input}, result saved to ${outputPath}`);
|
|
42
|
+
agentChat.submit(`Processed ${input}`);
|
|
40
43
|
}
|
|
41
44
|
```
|
|
42
45
|
|
|
43
46
|
## How to Run
|
|
44
47
|
|
|
45
48
|
```bash
|
|
46
|
-
pnpm script my-script --input
|
|
49
|
+
pnpm script my-script --input some-value
|
|
47
50
|
```
|
|
48
51
|
|
|
49
52
|
## Script Dispatcher
|
|
@@ -63,7 +66,7 @@ This is the canonical approach for new apps. Script names must be lowercase with
|
|
|
63
66
|
- **Use `parseArgs()`** for structured argument parsing. It converts `--key value` pairs to a `Record<string, string>`.
|
|
64
67
|
- **Use `loadEnv()`** if the script needs environment variables (API keys, etc.).
|
|
65
68
|
- **Use `fail()`** for user-friendly error messages (exits with message, no stack trace).
|
|
66
|
-
- **Write results to
|
|
69
|
+
- **Write results to the database.** Use `writeSetting()` or `writeAppState()` for structured data. The UI will pick up changes via SSE.
|
|
67
70
|
- **Use `agentChat.submit()`** to report results or errors back to the agent chat.
|
|
68
71
|
- **Import from `@agent-native/core`** — Don't redefine `parseArgs()` or other utilities locally.
|
|
69
72
|
|
|
@@ -91,17 +94,17 @@ export default async function generateImage(args: string[]) {
|
|
|
91
94
|
**Data processing script:**
|
|
92
95
|
|
|
93
96
|
```ts
|
|
94
|
-
import fs from "fs";
|
|
95
97
|
import { parseArgs, fail } from "@agent-native/core";
|
|
98
|
+
import { readSetting, writeSetting } from "@agent-native/core/settings";
|
|
96
99
|
|
|
97
100
|
export default async function transform(args: string[]) {
|
|
98
101
|
const parsed = parseArgs(args);
|
|
99
|
-
const
|
|
100
|
-
if (!
|
|
102
|
+
const key = parsed.key;
|
|
103
|
+
if (!key) fail("--key is required");
|
|
101
104
|
|
|
102
|
-
const data =
|
|
103
|
-
const result = data
|
|
104
|
-
|
|
105
|
+
const data = await readSetting(key);
|
|
106
|
+
const result = processData(data);
|
|
107
|
+
await writeSetting(key, result);
|
|
105
108
|
}
|
|
106
109
|
```
|
|
107
110
|
|
|
@@ -109,10 +112,10 @@ export default async function transform(args: string[]) {
|
|
|
109
112
|
|
|
110
113
|
- **Script not found** — Check that the filename matches the command name exactly. `pnpm script foo-bar` looks for `scripts/foo-bar.ts`.
|
|
111
114
|
- **Args not parsing** — Ensure args use `--key value` or `--key=value` format. Boolean flags use `--flag` (sets value to `"true"`).
|
|
112
|
-
- **Script runs but UI doesn't update** — Make sure
|
|
115
|
+
- **Script runs but UI doesn't update** — Make sure you're using core store helpers (`writeSetting`, `writeAppState`) which emit SSE events automatically. Direct SQL writes don't emit events.
|
|
113
116
|
|
|
114
117
|
## Related Skills
|
|
115
118
|
|
|
116
|
-
- **
|
|
119
|
+
- **storing-data** — Scripts read/write data via core SQL stores and Drizzle ORM
|
|
117
120
|
- **delegate-to-agent** — The agent invokes scripts via `pnpm script <name>`
|
|
118
|
-
- **
|
|
121
|
+
- **real-time-sync** — Database writes from scripts trigger SSE events to update the UI
|
|
@@ -73,7 +73,7 @@ el.dataset.selectedId = selectedItem?.id || "";
|
|
|
73
73
|
|
|
74
74
|
## Related Skills
|
|
75
75
|
|
|
76
|
-
- **
|
|
76
|
+
- **storing-data** — Tier 1 modifications (database writes) are the safest and most common
|
|
77
77
|
- **scripts** — The agent can create or modify scripts to add new capabilities
|
|
78
78
|
- **delegate-to-agent** — Self-modification requests come through the agent chat
|
|
79
|
-
- **
|
|
79
|
+
- **real-time-sync** — Source edits and database writes trigger SSE events to update the UI
|
|
@@ -1,95 +1,80 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: real-time-sync
|
|
3
3
|
description: >-
|
|
4
|
-
How
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
How the UI stays in sync when the agent writes data. Use when wiring up
|
|
5
|
+
query invalidation, debugging UI not updating, or understanding how SSE
|
|
6
|
+
connects the agent to the browser.
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
#
|
|
10
|
-
|
|
11
|
-
## Rule
|
|
12
|
-
|
|
13
|
-
The UI stays in sync with agent changes through Server-Sent Events. When the agent writes a file, the UI updates automatically — no polling, no manual refresh.
|
|
14
|
-
|
|
15
|
-
## Why
|
|
16
|
-
|
|
17
|
-
The agent modifies files on disk, but the UI runs in the browser. SSE bridges this gap: a file watcher on the server detects changes, streams them to the browser, and React Query invalidates the relevant caches. This is what makes the "files as database" pattern feel real-time.
|
|
9
|
+
# Real-Time Sync
|
|
18
10
|
|
|
19
11
|
## How It Works
|
|
20
12
|
|
|
21
|
-
|
|
13
|
+
When the agent writes data (via scripts or server handlers), the UI updates instantly. No polling, no manual refresh.
|
|
22
14
|
|
|
23
|
-
|
|
24
|
-
import { createFileWatcher, createSSEHandler } from "@agent-native/core";
|
|
25
|
-
const watcher = createFileWatcher("./data");
|
|
26
|
-
app.get("/api/events", createSSEHandler(watcher));
|
|
27
|
-
```
|
|
15
|
+
The flow:
|
|
28
16
|
|
|
29
|
-
|
|
17
|
+
1. **Agent writes** → `writeAppState("navigate", { view: "starred" })`
|
|
18
|
+
2. **Store emits SSE event** → `{ source: "app-state", type: "change", key: "navigate" }`
|
|
19
|
+
3. **Browser receives** → `useFileWatcher()` hook gets the event
|
|
20
|
+
4. **React Query invalidates** → relevant queries refetch, UI re-renders
|
|
30
21
|
|
|
31
|
-
|
|
32
|
-
import { useFileWatcher } from "@agent-native/core";
|
|
33
|
-
useFileWatcher({ queryClient, queryKeys: ["files", "projects"] });
|
|
34
|
-
```
|
|
22
|
+
This happens automatically for all writes through `@agent-native/core/application-state` and `@agent-native/core/settings`.
|
|
35
23
|
|
|
36
|
-
|
|
24
|
+
## SSE Events
|
|
37
25
|
|
|
38
|
-
|
|
26
|
+
| Source | Emitted by | Example |
|
|
27
|
+
|--------|-----------|---------|
|
|
28
|
+
| `"app-state"` | `writeAppState`, `deleteAppState` | `{ source: "app-state", type: "change", key: "navigation" }` |
|
|
29
|
+
| `"settings"` | `putSetting`, `deleteSetting` | `{ source: "settings", type: "change", key: "mail-settings" }` |
|
|
39
30
|
|
|
40
|
-
|
|
41
|
-
- Don't create per-model `fs.watch()` instances — `createFileWatcher("./data")` watches recursively. One watcher is enough.
|
|
42
|
-
- Don't create your own EventSource connections alongside `useFileWatcher` — use the `onEvent` callback for custom handling
|
|
31
|
+
## Client Setup
|
|
43
32
|
|
|
44
|
-
|
|
33
|
+
Every template has an SSE endpoint and a `useFileWatcher` hook in `root.tsx`:
|
|
45
34
|
|
|
46
|
-
|
|
35
|
+
```ts
|
|
36
|
+
// server/routes/api/events.get.ts
|
|
37
|
+
import { createDefaultSSEHandler } from "@agent-native/core/server";
|
|
38
|
+
export default createDefaultSSEHandler();
|
|
39
|
+
```
|
|
47
40
|
|
|
48
41
|
```ts
|
|
42
|
+
// In root.tsx
|
|
49
43
|
useFileWatcher({
|
|
50
|
-
queryClient,
|
|
51
|
-
queryKeys: [],
|
|
44
|
+
queryClient: qc,
|
|
45
|
+
queryKeys: [],
|
|
52
46
|
onEvent: (data) => {
|
|
53
|
-
if (data.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
47
|
+
if (data.source === "app-state") {
|
|
48
|
+
// Invalidate queries affected by app state changes
|
|
49
|
+
qc.invalidateQueries({ queryKey: ["compose-drafts"] });
|
|
50
|
+
} else if (data.source === "settings") {
|
|
51
|
+
qc.invalidateQueries({ queryKey: ["settings"] });
|
|
57
52
|
}
|
|
58
53
|
},
|
|
59
54
|
});
|
|
60
55
|
```
|
|
61
56
|
|
|
62
|
-
|
|
57
|
+
Use the `key` field to selectively invalidate — don't invalidate everything on every event.
|
|
63
58
|
|
|
64
|
-
|
|
65
|
-
useQuery({
|
|
66
|
-
queryKey: ["projects"],
|
|
67
|
-
queryFn: fetchProjects,
|
|
68
|
-
staleTime: 2000, // don't refetch within 2 seconds
|
|
69
|
-
});
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
## Performance
|
|
59
|
+
## For Custom Domain Data
|
|
73
60
|
|
|
74
|
-
|
|
61
|
+
If your template has Drizzle tables and you want SSE notifications after writes, emit from your handler:
|
|
75
62
|
|
|
76
|
-
|
|
63
|
+
```ts
|
|
64
|
+
import { getAppStateEmitter } from "@agent-native/core/application-state";
|
|
77
65
|
|
|
78
|
-
|
|
79
|
-
|
|
66
|
+
// After inserting a booking:
|
|
67
|
+
getAppStateEmitter().emit("app-state", {
|
|
68
|
+
source: "app-state",
|
|
69
|
+
type: "change",
|
|
70
|
+
key: "bookings-updated",
|
|
71
|
+
});
|
|
72
|
+
```
|
|
80
73
|
|
|
81
74
|
## Troubleshooting
|
|
82
75
|
|
|
83
|
-
| Symptom
|
|
84
|
-
|
|
85
|
-
| UI not updating after
|
|
86
|
-
| SSE not
|
|
87
|
-
|
|
|
88
|
-
| Constant reconnections | Check for server crashes in terminal output. |
|
|
89
|
-
| High CPU / event storms | The agent is writing many files rapidly. Add `staleTime` to queries and use path-based filtering. |
|
|
90
|
-
|
|
91
|
-
## Related Skills
|
|
92
|
-
|
|
93
|
-
- **files-as-database** — SSE watches the data files that store application state
|
|
94
|
-
- **scripts** — Script outputs written to `data/` trigger SSE events
|
|
95
|
-
- **self-modifying-code** — Agent code edits trigger SSE events; rapid edits can cause event storms
|
|
76
|
+
| Symptom | Check |
|
|
77
|
+
|---------|-------|
|
|
78
|
+
| UI not updating after script writes | Is the script using `writeAppState`/`writeSetting`? Direct SQL writes don't emit SSE. |
|
|
79
|
+
| SSE not connected | Browser devtools → Network → EventStream. Is `/api/events` connected? |
|
|
80
|
+
| Wrong queries invalidating | Check the `onEvent` callback — filter by `data.source` and `data.key` |
|
|
File without changes
|