@askrjs/cli 0.0.2 → 0.0.4

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 (310) hide show
  1. package/README.md +46 -7
  2. package/dist/add.d.ts +16 -0
  3. package/dist/add.js +558 -1
  4. package/dist/cli.d.ts +5 -0
  5. package/dist/cli.js +43 -16
  6. package/dist/create.d.ts +5 -0
  7. package/dist/create.js +104 -26
  8. package/dist/directory-swap-DWoHtx7C.js +35 -0
  9. package/dist/discovery-Difb7Y4G.js +323 -0
  10. package/dist/generate.d.ts +5 -0
  11. package/dist/generate.js +461 -0
  12. package/dist/is-direct-execution-Cdlr-ZUl.js +0 -2
  13. package/dist/openapi.d.ts +25 -0
  14. package/dist/openapi.js +49 -16
  15. package/dist/planner-VAj7qlxr.js +285 -0
  16. package/dist/range-YUs9eimn.js +125 -0
  17. package/dist/registry-CyrRHRG5.js +209 -0
  18. package/dist/skills/askr-dashboard-charts/SKILL.md +61 -44
  19. package/dist/skills/askr-dashboard-charts/agents/openai.yaml +2 -2
  20. package/dist/skills/askr-ssr-ssg/SKILL.md +3 -1
  21. package/dist/{skills-Bh0mEhIx.js → skills-B7CbWur9.js} +89 -26
  22. package/dist/skills.d.ts +18 -0
  23. package/dist/skills.js +1 -1
  24. package/dist/specification-DXnDOC-0.js +49 -0
  25. package/dist/ssg-config.d.ts +41 -0
  26. package/dist/ssg-config.js +1 -0
  27. package/dist/ssg.d.ts +61 -0
  28. package/dist/ssg.js +360 -24
  29. package/dist/templates/full-stack/AGENTS.md +0 -1
  30. package/dist/templates/full-stack/README.md +0 -1
  31. package/dist/templates/full-stack/index.html +0 -1
  32. package/dist/templates/full-stack/package.json +5 -3
  33. package/dist/templates/full-stack/server.ts +5 -9
  34. package/dist/templates/full-stack/src/action-authorizations.ts +2 -2
  35. package/dist/templates/full-stack/src/actions/create-message.ts +5 -5
  36. package/dist/templates/full-stack/src/i18n.ts +4 -4
  37. package/dist/templates/full-stack/src/main.tsx +4 -5
  38. package/dist/templates/full-stack/src/pages/home.tsx +5 -5
  39. package/dist/templates/full-stack/src/pages/layout.tsx +15 -5
  40. package/dist/templates/full-stack/src/pages/not-found.tsx +5 -2
  41. package/dist/templates/full-stack/src/routes.tsx +11 -12
  42. package/dist/templates/full-stack/src/schemas.ts +1 -2
  43. package/dist/templates/full-stack/src/server/action-registry.ts +5 -10
  44. package/dist/templates/full-stack/src/server/actions/create-message.ts +4 -4
  45. package/dist/templates/full-stack/src/server/app.ts +67 -57
  46. package/dist/templates/full-stack/src/server/dependencies.ts +10 -10
  47. package/dist/templates/full-stack/src/server/entry-server.ts +3 -3
  48. package/dist/templates/full-stack/src/telemetry.ts +1 -2
  49. package/dist/templates/full-stack/tests/actions/create-message.test.ts +7 -8
  50. package/dist/templates/full-stack/tsconfig.json +1 -2
  51. package/dist/templates/full-stack/vite.config.ts +5 -6
  52. package/dist/templates/spa/AGENTS.md +1 -1
  53. package/dist/templates/spa/package.json +3 -4
  54. package/dist/templates/spa/src/adapters/operations-client.ts +7 -2
  55. package/dist/templates/spa/src/pages/app/_routes.tsx +2 -0
  56. package/dist/templates/spa/src/pages/app/admin-home.tsx +21 -3
  57. package/dist/templates/spa/src/pages/public/_routes.tsx +2 -0
  58. package/dist/templates/spa/src/styles.css +1 -1
  59. package/dist/templates/spa/tsconfig.json +2 -1
  60. package/dist/templates/spa/vitest.config.ts +0 -4
  61. package/dist/templates/ssg/README.md +1 -1
  62. package/dist/templates/ssg/package.json +1 -1
  63. package/dist/templates/ssg/ssg.config.ts +7 -0
  64. package/dist/templates/ssg/tests/ssg-config.test.ts +5 -3
  65. package/dist/templates/ssg/tsconfig.json +2 -1
  66. package/dist/templates/ssg/vitest.config.ts +0 -4
  67. package/dist/templates/ssr/package.json +2 -2
  68. package/dist/templates/ssr/server.ts +4 -10
  69. package/dist/templates/ssr/src/entry-server.tsx +6 -4
  70. package/dist/templates/startkit/package.json +2 -2
  71. package/dist/templates/startkit/src/lib/mock-data.ts +17 -39
  72. package/dist/templates/startkit/tsconfig.json +2 -1
  73. package/dist/update.d.ts +41 -0
  74. package/dist/update.js +282 -2
  75. package/dist/writer-D8qe_7ud.js +226 -0
  76. package/package.json +23 -22
  77. package/dist/add-DqhqRzBQ.js +0 -555
  78. package/dist/add-DqhqRzBQ.js.map +0 -1
  79. package/dist/cli.js.map +0 -1
  80. package/dist/create.js.map +0 -1
  81. package/dist/is-direct-execution-Cdlr-ZUl.js.map +0 -1
  82. package/dist/openapi.js.map +0 -1
  83. package/dist/skills-Bh0mEhIx.js.map +0 -1
  84. package/dist/ssg.js.map +0 -1
  85. package/dist/templates/full-stack/src/vite-server.d.ts +0 -6
  86. package/dist/templates/spa/src/styles.d.ts +0 -1
  87. package/dist/templates/ssg/src/vite-env.d.ts +0 -5
  88. package/dist/templates/ssr/src/vite-server.d.ts +0 -7
  89. package/dist/templates/startkit/src/vite-env.d.ts +0 -5
  90. package/dist/update-DyW1na5V.js +0 -1140
  91. package/dist/update-DyW1na5V.js.map +0 -1
  92. package/skills/askr-accessibility/SKILL.md +0 -68
  93. package/skills/askr-accessibility/agents/openai.yaml +0 -4
  94. package/skills/askr-agent-execution/SKILL.md +0 -85
  95. package/skills/askr-agent-execution/agents/openai.yaml +0 -4
  96. package/skills/askr-agent-workflows/SKILL.md +0 -57
  97. package/skills/askr-agent-workflows/agents/openai.yaml +0 -4
  98. package/skills/askr-api-integration/SKILL.md +0 -79
  99. package/skills/askr-api-integration/agents/openai.yaml +0 -4
  100. package/skills/askr-app-builder/SKILL.md +0 -99
  101. package/skills/askr-app-builder/agents/openai.yaml +0 -4
  102. package/skills/askr-auth-access/SKILL.md +0 -74
  103. package/skills/askr-auth-access/agents/openai.yaml +0 -4
  104. package/skills/askr-cli-vite/SKILL.md +0 -76
  105. package/skills/askr-cli-vite/agents/openai.yaml +0 -4
  106. package/skills/askr-dashboard-charts/SKILL.md +0 -82
  107. package/skills/askr-dashboard-charts/agents/openai.yaml +0 -4
  108. package/skills/askr-design-system/SKILL.md +0 -86
  109. package/skills/askr-design-system/agents/openai.yaml +0 -4
  110. package/skills/askr-env-config/SKILL.md +0 -74
  111. package/skills/askr-env-config/agents/openai.yaml +0 -4
  112. package/skills/askr-error-loading-empty/SKILL.md +0 -89
  113. package/skills/askr-error-loading-empty/agents/openai.yaml +0 -4
  114. package/skills/askr-file-upload-artifacts/SKILL.md +0 -77
  115. package/skills/askr-file-upload-artifacts/agents/openai.yaml +0 -4
  116. package/skills/askr-forms-tables-crud/SKILL.md +0 -98
  117. package/skills/askr-forms-tables-crud/agents/openai.yaml +0 -4
  118. package/skills/askr-mental-model/SKILL.md +0 -109
  119. package/skills/askr-mental-model/agents/openai.yaml +0 -4
  120. package/skills/askr-migration-react/SKILL.md +0 -81
  121. package/skills/askr-migration-react/agents/openai.yaml +0 -4
  122. package/skills/askr-observability-debugging/SKILL.md +0 -83
  123. package/skills/askr-observability-debugging/agents/openai.yaml +0 -4
  124. package/skills/askr-project-structure/SKILL.md +0 -79
  125. package/skills/askr-project-structure/agents/openai.yaml +0 -4
  126. package/skills/askr-query-mutation/SKILL.md +0 -115
  127. package/skills/askr-query-mutation/agents/openai.yaml +0 -4
  128. package/skills/askr-realtime-streaming/SKILL.md +0 -76
  129. package/skills/askr-realtime-streaming/agents/openai.yaml +0 -4
  130. package/skills/askr-resources-data/SKILL.md +0 -100
  131. package/skills/askr-resources-data/agents/openai.yaml +0 -4
  132. package/skills/askr-routing-layouts/SKILL.md +0 -107
  133. package/skills/askr-routing-layouts/agents/openai.yaml +0 -4
  134. package/skills/askr-runtime-reactivity/SKILL.md +0 -92
  135. package/skills/askr-runtime-reactivity/agents/openai.yaml +0 -4
  136. package/skills/askr-ssr-ssg/SKILL.md +0 -76
  137. package/skills/askr-ssr-ssg/agents/openai.yaml +0 -4
  138. package/skills/askr-testing-determinism/SKILL.md +0 -75
  139. package/skills/askr-testing-determinism/agents/openai.yaml +0 -4
  140. package/skills/askr-theming/SKILL.md +0 -86
  141. package/skills/askr-theming/agents/openai.yaml +0 -4
  142. package/skills/askr-ui-composition/SKILL.md +0 -92
  143. package/skills/askr-ui-composition/agents/openai.yaml +0 -4
  144. package/templates/full-stack/AGENTS.md +0 -12
  145. package/templates/full-stack/README.md +0 -18
  146. package/templates/full-stack/gitignore.template +0 -4
  147. package/templates/full-stack/index.html +0 -14
  148. package/templates/full-stack/package.json +0 -37
  149. package/templates/full-stack/server.ts +0 -13
  150. package/templates/full-stack/src/action-authorizations.ts +0 -10
  151. package/templates/full-stack/src/actions/create-message.ts +0 -10
  152. package/templates/full-stack/src/i18n.ts +0 -8
  153. package/templates/full-stack/src/main.tsx +0 -12
  154. package/templates/full-stack/src/pages/home.tsx +0 -25
  155. package/templates/full-stack/src/pages/layout.tsx +0 -33
  156. package/templates/full-stack/src/pages/not-found.tsx +0 -4
  157. package/templates/full-stack/src/routes.tsx +0 -20
  158. package/templates/full-stack/src/schemas.ts +0 -11
  159. package/templates/full-stack/src/server/action-registry.ts +0 -12
  160. package/templates/full-stack/src/server/actions/create-message.ts +0 -14
  161. package/templates/full-stack/src/server/app.ts +0 -66
  162. package/templates/full-stack/src/server/dependencies.ts +0 -55
  163. package/templates/full-stack/src/server/entry-server.ts +0 -8
  164. package/templates/full-stack/src/telemetry.ts +0 -4
  165. package/templates/full-stack/src/vite-server.d.ts +0 -6
  166. package/templates/full-stack/tests/actions/create-message.test.ts +0 -13
  167. package/templates/full-stack/tsconfig.json +0 -16
  168. package/templates/full-stack/vite.config.ts +0 -11
  169. package/templates/spa/AGENTS.md +0 -60
  170. package/templates/spa/README.md +0 -96
  171. package/templates/spa/gitignore.template +0 -16
  172. package/templates/spa/index.html +0 -13
  173. package/templates/spa/package.json +0 -35
  174. package/templates/spa/src/adapters/operations-client.ts +0 -90
  175. package/templates/spa/src/components/shared/metric-card.tsx +0 -27
  176. package/templates/spa/src/components/shared/status-badge.tsx +0 -24
  177. package/templates/spa/src/features/operations/operations.query.ts +0 -9
  178. package/templates/spa/src/main.tsx +0 -10
  179. package/templates/spa/src/pages/_layout.tsx +0 -9
  180. package/templates/spa/src/pages/_routes.tsx +0 -27
  181. package/templates/spa/src/pages/app/_layout.tsx +0 -94
  182. package/templates/spa/src/pages/app/_routes.tsx +0 -10
  183. package/templates/spa/src/pages/app/admin-home.tsx +0 -152
  184. package/templates/spa/src/pages/app/agent-runs.tsx +0 -93
  185. package/templates/spa/src/pages/app/settings.tsx +0 -91
  186. package/templates/spa/src/pages/auth/_layout.tsx +0 -38
  187. package/templates/spa/src/pages/auth/_routes.tsx +0 -6
  188. package/templates/spa/src/pages/auth/login.tsx +0 -63
  189. package/templates/spa/src/pages/not-found.tsx +0 -22
  190. package/templates/spa/src/pages/public/_layout.tsx +0 -47
  191. package/templates/spa/src/pages/public/_routes.tsx +0 -6
  192. package/templates/spa/src/pages/public/home.tsx +0 -143
  193. package/templates/spa/src/shared/format.ts +0 -12
  194. package/templates/spa/src/shared/navigation.ts +0 -15
  195. package/templates/spa/src/styles/components.css +0 -49
  196. package/templates/spa/src/styles/layout.css +0 -192
  197. package/templates/spa/src/styles/reset.css +0 -44
  198. package/templates/spa/src/styles/theme.css +0 -57
  199. package/templates/spa/src/styles/tokens.css +0 -20
  200. package/templates/spa/src/styles.css +0 -7
  201. package/templates/spa/src/styles.d.ts +0 -1
  202. package/templates/spa/tests/app.test.tsx +0 -37
  203. package/templates/spa/tests/components/shared.test.tsx +0 -12
  204. package/templates/spa/tests/resources.test.ts +0 -22
  205. package/templates/spa/tsconfig.json +0 -20
  206. package/templates/spa/tsconfig.node.json +0 -10
  207. package/templates/spa/vite.config.ts +0 -24
  208. package/templates/spa/vitest.config.ts +0 -17
  209. package/templates/ssg/AGENTS.md +0 -55
  210. package/templates/ssg/README.md +0 -39
  211. package/templates/ssg/gitignore.template +0 -17
  212. package/templates/ssg/index.html +0 -13
  213. package/templates/ssg/package.json +0 -35
  214. package/templates/ssg/src/app.tsx +0 -14
  215. package/templates/ssg/src/components/badge.tsx +0 -3
  216. package/templates/ssg/src/components/counter.tsx +0 -30
  217. package/templates/ssg/src/components/site-shell.tsx +0 -111
  218. package/templates/ssg/src/jsx.d.ts +0 -23
  219. package/templates/ssg/src/main.tsx +0 -8
  220. package/templates/ssg/src/pages/about.tsx +0 -82
  221. package/templates/ssg/src/pages/content.tsx +0 -63
  222. package/templates/ssg/src/pages/example.tsx +0 -97
  223. package/templates/ssg/src/pages/home.tsx +0 -51
  224. package/templates/ssg/src/resources/user.ts +0 -15
  225. package/templates/ssg/src/routes.tsx +0 -15
  226. package/templates/ssg/src/styles.css +0 -89
  227. package/templates/ssg/src/vite-env.d.ts +0 -5
  228. package/templates/ssg/ssg.config.ts +0 -34
  229. package/templates/ssg/tests/app.test.tsx +0 -19
  230. package/templates/ssg/tests/components/counter.test.tsx +0 -18
  231. package/templates/ssg/tests/resources.test.ts +0 -11
  232. package/templates/ssg/tests/ssg-config.test.ts +0 -11
  233. package/templates/ssg/tsconfig.json +0 -20
  234. package/templates/ssg/tsconfig.node.json +0 -10
  235. package/templates/ssg/vite.config.ts +0 -24
  236. package/templates/ssg/vitest.config.ts +0 -17
  237. package/templates/ssr/AGENTS.md +0 -28
  238. package/templates/ssr/README.md +0 -38
  239. package/templates/ssr/gitignore.template +0 -16
  240. package/templates/ssr/index.html +0 -13
  241. package/templates/ssr/package.json +0 -34
  242. package/templates/ssr/server.ts +0 -16
  243. package/templates/ssr/src/app.tsx +0 -21
  244. package/templates/ssr/src/components/counter.tsx +0 -26
  245. package/templates/ssr/src/entry-server.tsx +0 -10
  246. package/templates/ssr/src/main.tsx +0 -11
  247. package/templates/ssr/src/pages/about.tsx +0 -75
  248. package/templates/ssr/src/pages/example.tsx +0 -113
  249. package/templates/ssr/src/pages/home.tsx +0 -56
  250. package/templates/ssr/src/resources/user.ts +0 -15
  251. package/templates/ssr/src/routes.tsx +0 -13
  252. package/templates/ssr/src/styles.css +0 -148
  253. package/templates/ssr/src/vite-server.d.ts +0 -7
  254. package/templates/ssr/tests/app.test.tsx +0 -24
  255. package/templates/ssr/tests/components/counter.test.tsx +0 -13
  256. package/templates/ssr/tests/resources.test.ts +0 -11
  257. package/templates/ssr/tsconfig.json +0 -22
  258. package/templates/ssr/tsconfig.node.json +0 -10
  259. package/templates/ssr/tsconfig.server.json +0 -15
  260. package/templates/ssr/vite.config.ts +0 -25
  261. package/templates/ssr/vitest.config.ts +0 -13
  262. package/templates/startkit/AGENTS.md +0 -77
  263. package/templates/startkit/README.md +0 -192
  264. package/templates/startkit/gitignore.template +0 -16
  265. package/templates/startkit/index.html +0 -13
  266. package/templates/startkit/package.json +0 -35
  267. package/templates/startkit/src/components/app-header.tsx +0 -93
  268. package/templates/startkit/src/components/app-sidebar.tsx +0 -95
  269. package/templates/startkit/src/components/data-table.tsx +0 -80
  270. package/templates/startkit/src/components/empty-state.tsx +0 -13
  271. package/templates/startkit/src/components/page-header.tsx +0 -23
  272. package/templates/startkit/src/components/stat-card.tsx +0 -24
  273. package/templates/startkit/src/features/accounts/account-filters.tsx +0 -61
  274. package/templates/startkit/src/features/accounts/account-table.tsx +0 -79
  275. package/templates/startkit/src/lib/format.ts +0 -31
  276. package/templates/startkit/src/lib/mock-data.ts +0 -441
  277. package/templates/startkit/src/lib/routes.ts +0 -116
  278. package/templates/startkit/src/main.tsx +0 -12
  279. package/templates/startkit/src/pages/_layout.tsx +0 -56
  280. package/templates/startkit/src/pages/auth/_layout.tsx +0 -7
  281. package/templates/startkit/src/pages/auth/login.tsx +0 -129
  282. package/templates/startkit/src/pages/home.tsx +0 -83
  283. package/templates/startkit/src/pages/not-found.tsx +0 -24
  284. package/templates/startkit/src/pages/workspace/_layout.tsx +0 -17
  285. package/templates/startkit/src/pages/workspace/accounts/index.tsx +0 -217
  286. package/templates/startkit/src/pages/workspace/dashboard.tsx +0 -118
  287. package/templates/startkit/src/pages/workspace/settings.tsx +0 -218
  288. package/templates/startkit/src/router.tsx +0 -7
  289. package/templates/startkit/src/routes/auth-config.ts +0 -38
  290. package/templates/startkit/src/routes/auth.ts +0 -8
  291. package/templates/startkit/src/routes/index.ts +0 -28
  292. package/templates/startkit/src/routes/public.ts +0 -8
  293. package/templates/startkit/src/routes/workspace/accounts.ts +0 -8
  294. package/templates/startkit/src/routes/workspace/index.ts +0 -14
  295. package/templates/startkit/src/styles/components.css +0 -396
  296. package/templates/startkit/src/styles/layout.css +0 -192
  297. package/templates/startkit/src/styles/reset.css +0 -38
  298. package/templates/startkit/src/styles/theme.css +0 -76
  299. package/templates/startkit/src/styles/tokens.css +0 -67
  300. package/templates/startkit/src/styles.css +0 -7
  301. package/templates/startkit/src/toast.ts +0 -55
  302. package/templates/startkit/src/utils/join-classes.ts +0 -4
  303. package/templates/startkit/src/vite-env.d.ts +0 -5
  304. package/templates/startkit/tests/app.test.tsx +0 -32
  305. package/templates/startkit/tests/preferences.test.ts +0 -43
  306. package/templates/startkit/tests/resources.test.ts +0 -82
  307. package/templates/startkit/tsconfig.json +0 -20
  308. package/templates/startkit/tsconfig.node.json +0 -10
  309. package/templates/startkit/vite.config.ts +0 -32
  310. package/templates/startkit/vitest.config.ts +0 -13
@@ -1,38 +0,0 @@
1
- import { Link } from '@askrjs/askr/router';
2
- import { MoonIcon, SunIcon } from '@askrjs/lucide';
3
- import { Button } from '@askrjs/themes/components';
4
- import { Container, Inline } from '@askrjs/themes/components';
5
- import { Header } from '@askrjs/themes/components';
6
- import { ThemeToggle } from '@askrjs/themes/theme';
7
-
8
- export default function AuthLayout({ children }: { children?: unknown }) {
9
- return (
10
- <div class="auth-shell">
11
- <Header position="sticky" class="auth-header">
12
- <Container size="full">
13
- <Inline justify="between" align="center" gap="3" wrap="wrap">
14
- <Link href="/" class="brand-link">
15
- <span class="brand-mark">A</span>
16
- <strong>{'{{appName}}'}</strong>
17
- </Link>
18
- <Inline gap="2" align="center" wrap="wrap">
19
- <ThemeToggle
20
- variant="ghost"
21
- size="icon"
22
- aria-label="Toggle color theme"
23
- lightIcon={<SunIcon size={18} aria-hidden="true" />}
24
- darkIcon={<MoonIcon size={18} aria-hidden="true" />}
25
- />
26
- <Button variant="secondary" asChild>
27
- <Link href="/">Back to site</Link>
28
- </Button>
29
- </Inline>
30
- </Inline>
31
- </Container>
32
- </Header>
33
- <main class="auth-main">
34
- <Container size="sm">{children}</Container>
35
- </main>
36
- </div>
37
- );
38
- }
@@ -1,6 +0,0 @@
1
- import { route } from '@askrjs/askr/router';
2
- import LoginPage from './login';
3
-
4
- export function registerAuthRoutes(): void {
5
- route('/login', LoginPage);
6
- }
@@ -1,63 +0,0 @@
1
- import { state } from '@askrjs/askr';
2
- import { navigate } from '@askrjs/askr/router';
3
- import { LockKeyholeIcon } from '@askrjs/lucide';
4
- import { Input } from '@askrjs/ui';
5
- import {
6
- Button,
7
- Container,
8
- Field,
9
- FieldHint,
10
- InputGroup,
11
- InputGroupText,
12
- } from '@askrjs/themes/components';
13
- import {
14
- Card,
15
- CardContent,
16
- CardDescription,
17
- CardHeader,
18
- CardTitle,
19
- } from '@askrjs/themes/components';
20
- import { Stack } from '@askrjs/themes/components';
21
-
22
- export default function LoginPage() {
23
- const [email, setEmail] = state('ops@example.com');
24
-
25
- return (
26
- <Container size="sm" class="auth-page">
27
- <Card variant="raised">
28
- <CardHeader>
29
- <span class="card-icon">
30
- <LockKeyholeIcon size={18} aria-hidden="true" />
31
- </span>
32
- <CardTitle>Sign in</CardTitle>
33
- <CardDescription>
34
- This starter keeps auth mocked, but the auth shell is isolated from
35
- the public landing layout and ready for a real session provider.
36
- </CardDescription>
37
- </CardHeader>
38
- <CardContent>
39
- <Stack gap="4">
40
- <Field>
41
- <label htmlFor="email">Work email</label>
42
- <InputGroup>
43
- <InputGroupText>@</InputGroupText>
44
- <Input
45
- id="email"
46
- type="email"
47
- value={email()}
48
- onInput={(event: Event) =>
49
- setEmail((event.currentTarget as HTMLInputElement).value)
50
- }
51
- />
52
- </InputGroup>
53
- <FieldHint>Use any address to enter the demo console.</FieldHint>
54
- </Field>
55
- <Button onPress={() => navigate('/app')}>
56
- Continue to console
57
- </Button>
58
- </Stack>
59
- </CardContent>
60
- </Card>
61
- </Container>
62
- );
63
- }
@@ -1,22 +0,0 @@
1
- import { Link } from '@askrjs/askr/router';
2
- import { Button } from '@askrjs/themes/components';
3
- import { Container, Section } from '@askrjs/themes/components';
4
- import { EmptyState } from '@askrjs/themes/components';
5
-
6
- export default function NotFoundPage() {
7
- return (
8
- <Section paddingY="2xl">
9
- <Container size="sm">
10
- <EmptyState
11
- title="Page not found"
12
- description="The route tree is explicit, so unknown paths fall back here."
13
- actions={
14
- <Button asChild>
15
- <Link href="/">Return home</Link>
16
- </Button>
17
- }
18
- />
19
- </Container>
20
- </Section>
21
- );
22
- }
@@ -1,47 +0,0 @@
1
- import { MoonIcon, SunIcon } from '@askrjs/lucide';
2
- import { Link } from '@askrjs/askr/router';
3
- import { Button } from '@askrjs/themes/components';
4
- import { Container, Inline } from '@askrjs/themes/components';
5
- import { Header } from '@askrjs/themes/components';
6
- import { NavBrand, NavGroup, Navbar, NavLink } from '@askrjs/themes/components';
7
- import { ThemeToggle } from '@askrjs/themes/theme';
8
-
9
- export default function PublicLayout({ children }: { children?: unknown }) {
10
- return (
11
- <div class="public-shell">
12
- <Header position="sticky" class="public-header">
13
- <Container>
14
- <Navbar aria-label="Public navigation" breakpoint="md">
15
- <NavBrand>
16
- <Link href="/" class="brand-link">
17
- <span class="brand-mark">A</span>
18
- <strong>{'{{appName}}'}</strong>
19
- </Link>
20
- </NavBrand>
21
- <NavGroup align="center">
22
- <NavLink href="/" match="exact">
23
- Overview
24
- </NavLink>
25
- <NavLink href="/login">Sign in</NavLink>
26
- </NavGroup>
27
- <NavGroup align="end">
28
- <Inline gap="2" align="center">
29
- <ThemeToggle
30
- variant="ghost"
31
- size="icon"
32
- aria-label="Toggle color theme"
33
- lightIcon={<SunIcon size={18} aria-hidden="true" />}
34
- darkIcon={<MoonIcon size={18} aria-hidden="true" />}
35
- />
36
- <Button asChild>
37
- <Link href="/login">Open console</Link>
38
- </Button>
39
- </Inline>
40
- </NavGroup>
41
- </Navbar>
42
- </Container>
43
- </Header>
44
- <main class="public-main">{children}</main>
45
- </div>
46
- );
47
- }
@@ -1,6 +0,0 @@
1
- import { route } from '@askrjs/askr/router';
2
- import HomePage from './home';
3
-
4
- export function registerPublicRoutes(): void {
5
- route('/', HomePage);
6
- }
@@ -1,143 +0,0 @@
1
- import {
2
- ActivityIcon,
3
- ArrowRightIcon,
4
- BotIcon,
5
- CheckCircle2Icon,
6
- ShieldCheckIcon,
7
- } from '@askrjs/lucide';
8
- import { Link } from '@askrjs/askr/router';
9
- import { Button } from '@askrjs/themes/components';
10
- import {
11
- Badge,
12
- Card,
13
- CardContent,
14
- CardDescription,
15
- CardHeader,
16
- CardTitle,
17
- } from '@askrjs/themes/components';
18
- import {
19
- Block,
20
- Box,
21
- Container,
22
- Inline,
23
- Section,
24
- Stack,
25
- } from '@askrjs/themes/components';
26
- import { EmptyState } from '@askrjs/themes/components';
27
-
28
- const capabilities = [
29
- {
30
- icon: <BotIcon size={16} aria-hidden="true" />,
31
- title: 'Agent runs',
32
- description:
33
- 'Track queued, running, approval, and completed work without collapsing it into one loading state.',
34
- },
35
- {
36
- icon: <ActivityIcon size={16} aria-hidden="true" />,
37
- title: 'Evented operations',
38
- description:
39
- 'Make pending writes, projection lag, and stale read models visible before users need to ask.',
40
- },
41
- {
42
- icon: <ShieldCheckIcon size={16} aria-hidden="true" />,
43
- title: 'App-ready shell',
44
- description:
45
- 'Use route branches, layouts, and theme primitives instead of a one-page demo wrapper.',
46
- },
47
- ];
48
-
49
- export default function HomePage() {
50
- return (
51
- <>
52
- <Section paddingY="2xl">
53
- <Container size="xl">
54
- <Block gap="lg" align="center" class="hero-grid">
55
- <Stack gap="lg" class="hero-copy">
56
- <Badge>Route-first Askr SPA</Badge>
57
- <Stack gap="md">
58
- <h1>Operate agent workflows with a UI that tells the truth.</h1>
59
- <p class="lead">
60
- {'{{appName}}'} is a focused Askr console for agentic
61
- products: public branch, auth branch, app branch, theme
62
- primitives, consistency-aware states, and no invented layout
63
- system.
64
- </p>
65
- </Stack>
66
- <Inline gap="3" wrap="wrap">
67
- <Button asChild>
68
- <Link href="/login">
69
- Open console <ArrowRightIcon size={16} aria-hidden="true" />
70
- </Link>
71
- </Button>
72
- <Button variant="secondary" asChild>
73
- <Link href="/app">View demo dashboard</Link>
74
- </Button>
75
- </Inline>
76
- </Stack>
77
-
78
- <Card variant="raised" class="hero-card">
79
- <CardHeader>
80
- <Inline gap="2" align="center">
81
- <span class="status-dot" />
82
- <Badge>Projection current</Badge>
83
- </Inline>
84
- <CardTitle>Command center</CardTitle>
85
- <CardDescription>
86
- A concise preview of the authenticated shell users see after
87
- sign-in.
88
- </CardDescription>
89
- </CardHeader>
90
- <CardContent>
91
- <Stack gap="3">
92
- <Box class="hero-row" p="3">
93
- <strong>12 active runs</strong>
94
- <span>3 need review</span>
95
- </Box>
96
- <Box class="hero-row" p="3">
97
- <strong>98.7% success rate</strong>
98
- <span>last 24 hours</span>
99
- </Box>
100
- <Box class="hero-row" p="3">
101
- <strong>event id 18,442</strong>
102
- <span>read model synced</span>
103
- </Box>
104
- </Stack>
105
- </CardContent>
106
- </Card>
107
- </Block>
108
- </Container>
109
- </Section>
110
-
111
- <Section paddingY="xl">
112
- <Container size="xl">
113
- <Block gap="md" class="feature-grid">
114
- {capabilities.map((item) => (
115
- <Card>
116
- <CardHeader>
117
- <span class="card-icon">{item.icon}</span>
118
- <CardTitle>{item.title}</CardTitle>
119
- <CardDescription>{item.description}</CardDescription>
120
- </CardHeader>
121
- </Card>
122
- ))}
123
- </Block>
124
- </Container>
125
- </Section>
126
-
127
- <Section paddingY="xl">
128
- <Container size="lg">
129
- <EmptyState
130
- icon={<CheckCircle2Icon size={26} aria-hidden="true" />}
131
- title="Built from solved primitives"
132
- description="The page uses Container, Section, Block, Stack, Inline, Box, Card, Badge, Button, Header, Navbar, and EmptyState from @askrjs/themes."
133
- actions={
134
- <Button asChild>
135
- <Link href="/app/agents">Inspect agent runs</Link>
136
- </Button>
137
- }
138
- />
139
- </Container>
140
- </Section>
141
- </>
142
- );
143
- }
@@ -1,12 +0,0 @@
1
- export function formatRelativeTime(value: string): string {
2
- const date = new Date(value);
3
- const diffMs = Date.now() - date.getTime();
4
- const diffMinutes = Math.max(1, Math.round(diffMs / 60000));
5
-
6
- if (diffMinutes < 60) {
7
- return `${diffMinutes}m ago`;
8
- }
9
-
10
- const diffHours = Math.round(diffMinutes / 60);
11
- return `${diffHours}h ago`;
12
- }
@@ -1,15 +0,0 @@
1
- export const appNavItems = [
2
- { href: '/app', label: 'Dashboard', icon: 'home', match: 'exact' as const },
3
- {
4
- href: '/app/agents',
5
- label: 'Agent runs',
6
- icon: 'agents',
7
- match: 'exact' as const,
8
- },
9
- {
10
- href: '/app/settings',
11
- label: 'Settings',
12
- icon: 'settings',
13
- match: 'exact' as const,
14
- },
15
- ] as const;
@@ -1,49 +0,0 @@
1
- @layer components {
2
- .brand-link,
3
- .sidebar-brand {
4
- display: inline-flex;
5
- align-items: center;
6
- gap: var(--ak-space-sm);
7
- }
8
-
9
- .brand-mark {
10
- display: inline-grid;
11
- place-items: center;
12
- width: 2rem;
13
- height: 2rem;
14
- border-radius: var(--ak-radius-md);
15
- background: var(--ak-color-primary);
16
- color: var(--ak-color-primary-contrast);
17
- font-weight: var(--ak-font-weight-bold);
18
- }
19
-
20
- .eyebrow {
21
- color: var(--ak-color-text-muted);
22
- font-size: var(--ak-font-size-xs);
23
- font-weight: var(--ak-font-weight-bold);
24
- letter-spacing: 0.08em;
25
- text-transform: uppercase;
26
- }
27
-
28
- .lead {
29
- color: var(--ak-color-text);
30
- font-size: var(--ak-font-size-lg);
31
- }
32
-
33
- .status-dot {
34
- width: 0.625rem;
35
- height: 0.625rem;
36
- border-radius: 999px;
37
- background: var(--ak-color-success);
38
- }
39
-
40
- .card-icon {
41
- display: inline-grid;
42
- place-items: center;
43
- width: 2.25rem;
44
- height: 2.25rem;
45
- border-radius: var(--ak-radius-md);
46
- background: var(--ak-color-primary-soft);
47
- color: var(--ak-color-primary);
48
- }
49
- }
@@ -1,192 +0,0 @@
1
- @layer layout {
2
- .app-root {
3
- min-block-size: 100dvh;
4
- background: var(--spa-surface-glow), var(--ak-color-bg);
5
- }
6
-
7
- .public-shell,
8
- .auth-shell,
9
- .app-shell {
10
- min-block-size: 100dvh;
11
- }
12
-
13
- .public-shell,
14
- .auth-shell {
15
- display: grid;
16
- grid-template-rows: auto 1fr;
17
- }
18
-
19
- .public-header,
20
- .auth-header,
21
- .app-header {
22
- position: sticky;
23
- z-index: 20;
24
- top: 0;
25
- border-bottom: 1px solid var(--ak-color-border-subtle);
26
- background: var(--spa-header-backdrop);
27
- backdrop-filter: blur(14px);
28
- }
29
-
30
- .public-main,
31
- .auth-main,
32
- .app-main {
33
- min-width: 0;
34
- }
35
-
36
- .public-main {
37
- inline-size: min(100%, var(--spa-shell-max-width));
38
- margin-inline: auto;
39
- padding: var(--ak-space-xl) var(--spa-shell-gutter) var(--ak-space-2xl);
40
- }
41
-
42
- .auth-main {
43
- display: grid;
44
- place-items: center;
45
- padding: var(--ak-space-xl) var(--spa-shell-gutter);
46
- }
47
-
48
- .auth-page {
49
- inline-size: min(100%, var(--spa-auth-card-width));
50
- }
51
-
52
- .page-heading {
53
- display: flex;
54
- gap: var(--ak-space-md);
55
- align-items: flex-start;
56
- justify-content: space-between;
57
- }
58
-
59
- .hero-grid,
60
- .operations-grid,
61
- .settings-grid {
62
- display: grid;
63
- grid-template-columns: minmax(0, 1.16fr) minmax(20rem, 0.84fr);
64
- gap: clamp(1rem, 0.7rem + 1.5vw, 2rem);
65
- align-items: start;
66
- }
67
-
68
- .feature-grid,
69
- .metric-grid,
70
- .agent-grid {
71
- display: grid;
72
- grid-template-columns: repeat(3, minmax(0, 1fr));
73
- gap: var(--ak-space-md);
74
- }
75
-
76
- .chart-grid {
77
- display: grid;
78
- grid-template-columns: minmax(0, 1fr) minmax(18rem, 0.72fr);
79
- gap: var(--ak-space-md);
80
- }
81
-
82
- .hero-copy {
83
- max-inline-size: 48rem;
84
- }
85
-
86
- .hero-card {
87
- width: 100%;
88
- }
89
-
90
- .hero-row {
91
- display: flex;
92
- gap: var(--ak-space-md);
93
- align-items: center;
94
- justify-content: space-between;
95
- border: 1px solid var(--ak-color-border-subtle);
96
- border-radius: var(--ak-radius-md);
97
- background: var(--ak-color-surface-muted);
98
- }
99
-
100
- .hero-row span {
101
- color: var(--ak-color-text-muted);
102
- }
103
-
104
- .run-table {
105
- width: 100%;
106
- border-collapse: collapse;
107
- font-size: var(--ak-font-size-sm);
108
- }
109
-
110
- .run-table th,
111
- .run-table td {
112
- padding: 0.75rem 0.5rem;
113
- border-bottom: 1px solid var(--ak-color-border-subtle);
114
- text-align: left;
115
- vertical-align: top;
116
- }
117
-
118
- .run-table th {
119
- color: var(--ak-color-text-muted);
120
- font-size: var(--ak-font-size-xs);
121
- font-weight: var(--ak-font-weight-bold);
122
- letter-spacing: 0.04em;
123
- text-transform: uppercase;
124
- }
125
-
126
- .run-table td:last-child,
127
- .run-table th:last-child {
128
- text-align: right;
129
- }
130
-
131
- .run-table-wrap {
132
- min-width: 0;
133
- }
134
-
135
- .timeline {
136
- display: grid;
137
- gap: var(--ak-space-md);
138
- }
139
-
140
- .timeline-item {
141
- display: grid;
142
- grid-template-columns: auto minmax(0, 1fr);
143
- gap: var(--ak-space-md);
144
- }
145
-
146
- .timeline-dot {
147
- display: grid;
148
- place-items: center;
149
- width: 2rem;
150
- height: 2rem;
151
- border-radius: 999px;
152
- background: var(--ak-color-surface-muted);
153
- color: var(--ak-color-primary);
154
- }
155
-
156
- @media (max-width: 64rem) {
157
- .hero-grid,
158
- .operations-grid,
159
- .settings-grid,
160
- .chart-grid {
161
- grid-template-columns: 1fr;
162
- }
163
-
164
- .feature-grid,
165
- .metric-grid,
166
- .agent-grid {
167
- grid-template-columns: repeat(2, minmax(0, 1fr));
168
- }
169
- }
170
-
171
- @media (max-width: 42rem) {
172
- .feature-grid,
173
- .metric-grid,
174
- .agent-grid {
175
- grid-template-columns: 1fr;
176
- }
177
-
178
- .run-table {
179
- min-width: 42rem;
180
- }
181
-
182
- .run-table-wrap {
183
- overflow-x: auto;
184
- }
185
-
186
- .page-heading,
187
- .hero-row {
188
- align-items: stretch;
189
- flex-direction: column;
190
- }
191
- }
192
- }
@@ -1,44 +0,0 @@
1
- @layer reset {
2
- *,
3
- *::before,
4
- *::after {
5
- box-sizing: border-box;
6
- }
7
-
8
- html,
9
- body,
10
- #app {
11
- margin: 0;
12
- min-height: 100%;
13
- }
14
-
15
- body {
16
- min-block-size: 100dvh;
17
- text-rendering: optimizeLegibility;
18
- -webkit-font-smoothing: antialiased;
19
- }
20
-
21
- button,
22
- input,
23
- select,
24
- textarea {
25
- font: inherit;
26
- }
27
-
28
- a {
29
- color: inherit;
30
- text-decoration: none;
31
- }
32
-
33
- h1,
34
- h2,
35
- h3,
36
- p {
37
- margin: 0;
38
- }
39
-
40
- svg {
41
- display: block;
42
- flex: 0 0 auto;
43
- }
44
- }