From 73417f79a821321ce8feb0602779d0239d11d0c0 Mon Sep 17 00:00:00 2001 From: kenneth Date: Thu, 5 Mar 2026 01:28:17 +0000 Subject: [PATCH] refactor: rename aris to aelis Rename all references across the codebase: package names, imports, source IDs, directory names, docs, and configs. Co-authored-by: Ona --- .ona/automations.yaml | 4 +- AGENTS.md | 2 +- README.md | 6 +- .../.env.example | 0 .../package.json | 14 +-- .../src/auth/http.ts | 0 .../src/auth/index.ts | 0 .../src/auth/session-middleware.ts | 0 .../src/auth/session.ts | 0 .../{aris-backend => aelis-backend}/src/db.ts | 0 .../src/enhancement/enhance-feed.ts | 2 +- .../src/enhancement/llm-client.ts | 0 .../src/enhancement/merge.test.ts | 2 +- .../src/enhancement/merge.ts | 2 +- .../src/enhancement/prompt-builder.test.ts | 2 +- .../src/enhancement/prompt-builder.ts | 6 +- .../src/enhancement/prompts/system.txt | 2 +- .../src/enhancement/schema.test.ts | 0 .../src/enhancement/schema.ts | 0 .../src/feed/http.test.ts | 2 +- .../src/feed/http.ts | 0 .../src/lib/error.ts | 0 .../src/location/http.ts | 2 +- .../src/server.ts | 2 +- .../src/session/feed-source-provider.ts | 2 +- .../src/session/index.ts | 0 .../src/session/user-session-manager.test.ts | 22 ++-- .../src/session/user-session-manager.ts | 0 .../src/session/user-session.test.ts | 8 +- .../src/session/user-session.ts | 2 +- .../src/tfl/provider.ts | 2 +- .../src/weather/provider.ts | 2 +- .../tsconfig.json | 0 apps/{aris-client => aelis-client}/.gitignore | 0 .../.vscode/extensions.json | 0 .../.vscode/settings.json | 0 apps/{aris-client => aelis-client}/README.md | 0 apps/{aris-client => aelis-client}/app.json | 10 +- .../assets/fonts/Inter_100Thin.ttf | Bin .../assets/fonts/Inter_100Thin_Italic.ttf | Bin .../assets/fonts/Inter_200ExtraLight.ttf | Bin .../fonts/Inter_200ExtraLight_Italic.ttf | Bin .../assets/fonts/Inter_300Light.ttf | Bin .../assets/fonts/Inter_300Light_Italic.ttf | Bin .../assets/fonts/Inter_400Regular.ttf | Bin .../assets/fonts/Inter_400Regular_Italic.ttf | Bin .../assets/fonts/Inter_500Medium.ttf | Bin .../assets/fonts/Inter_500Medium_Italic.ttf | Bin .../assets/fonts/Inter_600SemiBold.ttf | Bin .../assets/fonts/Inter_600SemiBold_Italic.ttf | Bin .../assets/fonts/Inter_700Bold.ttf | Bin .../assets/fonts/Inter_700Bold_Italic.ttf | Bin .../assets/fonts/Inter_800ExtraBold.ttf | Bin .../fonts/Inter_800ExtraBold_Italic.ttf | Bin .../assets/fonts/Inter_900Black.ttf | Bin .../assets/fonts/Inter_900Black_Italic.ttf | Bin .../fonts/SourceSerif4_200ExtraLight.ttf | Bin .../SourceSerif4_200ExtraLight_Italic.ttf | Bin .../assets/fonts/SourceSerif4_300Light.ttf | Bin .../fonts/SourceSerif4_300Light_Italic.ttf | Bin .../assets/fonts/SourceSerif4_400Regular.ttf | Bin .../fonts/SourceSerif4_400Regular_Italic.ttf | Bin .../assets/fonts/SourceSerif4_500Medium.ttf | Bin .../fonts/SourceSerif4_500Medium_Italic.ttf | Bin .../assets/fonts/SourceSerif4_600SemiBold.ttf | Bin .../fonts/SourceSerif4_600SemiBold_Italic.ttf | Bin .../assets/fonts/SourceSerif4_700Bold.ttf | Bin .../fonts/SourceSerif4_700Bold_Italic.ttf | Bin .../fonts/SourceSerif4_800ExtraBold.ttf | Bin .../SourceSerif4_800ExtraBold_Italic.ttf | Bin .../assets/fonts/SourceSerif4_900Black.ttf | Bin .../fonts/SourceSerif4_900Black_Italic.ttf | Bin .../assets/images/android-icon-background.png | Bin .../assets/images/android-icon-foreground.png | Bin .../assets/images/android-icon-monochrome.png | Bin .../assets/images/favicon.png | Bin .../assets/images/icon.png | Bin .../assets/images/partial-react-logo.png | Bin .../assets/images/react-logo.png | Bin .../assets/images/react-logo@2x.png | Bin .../assets/images/react-logo@3x.png | Bin .../assets/images/splash-icon.png | Bin apps/{aris-client => aelis-client}/eas.json | 0 .../eslint.config.js | 0 .../package.json | 2 +- .../scripts/dev-proxy.ts | 0 .../scripts/open-debugger.ts | 0 .../scripts/reset-project.js | 0 .../scripts/run-dev-server.sh | 0 .../src/app/(tabs)/_layout.tsx | 0 .../src/app/(tabs)/explore.tsx | 0 .../src/app/(tabs)/index.tsx | 0 .../src/app/_layout.tsx | 0 .../src/app/modal.tsx | 0 .../src/components/external-link.tsx | 0 .../src/components/haptic-tab.tsx | 0 .../src/components/hello-wave.tsx | 0 .../src/components/parallax-scroll-view.tsx | 0 .../src/components/themed-text.tsx | 0 .../src/components/themed-view.tsx | 0 .../src/components/ui/collapsible.tsx | 0 .../src/components/ui/icon-symbol.ios.tsx | 0 .../src/components/ui/icon-symbol.tsx | 0 .../src/constants/theme.ts | 0 .../src/hooks/use-color-scheme.ts | 0 .../src/hooks/use-color-scheme.web.ts | 0 .../src/hooks/use-theme-color.ts | 0 .../tsconfig.json | 0 bun.lock | 119 +++++++++--------- docs/ai-agent-ideas.md | 54 ++++---- docs/architecture-draft.md | 12 +- docs/backend-service-architecture-spec.md | 2 +- docs/backend-spec.md | 16 +-- docs/feed-source-actions-spec.md | 26 ++-- package.json | 2 +- packages/{aris-core => aelis-core}/README.md | 12 +- .../{aris-core => aelis-core}/package.json | 2 +- .../{aris-core => aelis-core}/src/action.ts | 2 +- .../src/context-bridge.ts | 0 .../src/context-provider.ts | 0 .../src/context.test.ts | 30 ++--- .../{aris-core => aelis-core}/src/context.ts | 2 +- .../src/data-source.ts | 0 .../src/feed-controller.ts | 0 .../src/feed-engine.test.ts | 0 .../src/feed-engine.ts | 0 .../src/feed-post-processor.test.ts | 8 +- .../src/feed-post-processor.ts | 0 .../src/feed-source.test.ts | 0 .../src/feed-source.ts | 4 +- .../src/feed.test.ts | 0 .../{aris-core => aelis-core}/src/feed.ts | 0 .../{aris-core => aelis-core}/src/index.ts | 0 .../src/reconciler.ts | 0 .../.env.example | 0 .../README.md | 4 +- .../fixtures/san-francisco.json | 0 .../package.json | 4 +- .../scripts/generate-fixtures.ts | 0 .../src/data-source.test.ts | 6 +- .../src/data-source.ts | 6 +- .../src/feed-items.ts | 2 +- .../src/index.ts | 0 .../src/weatherkit.ts | 0 packages/aelis-feed-enhancers/package.json | 17 +++ .../src/index.ts | 0 .../src/time-of-day-enhancer.test.ts | 12 +- .../src/time-of-day-enhancer.ts | 18 +-- .../README.md | 4 +- .../fixtures/all-day-event.ics | 0 .../fixtures/cancelled-event.ics | 0 .../fixtures/daily-recurring-allday.ics | 0 .../fixtures/minimal-event.ics | 0 .../fixtures/recurring-event.ics | 0 .../fixtures/single-event.ics | 0 .../weekly-recurring-with-exception.ics | 0 .../fixtures/weekly-recurring.ics | 0 .../package.json | 4 +- .../scripts/test-live.ts | 2 +- .../src/caldav-source.test.ts | 6 +- .../src/caldav-source.ts | 8 +- .../src/calendar-context.ts | 6 +- .../src/ical-parser.test.ts | 0 .../src/ical-parser.ts | 2 +- .../src/index.ts | 0 .../src/types.ts | 2 +- .../fixtures/events.json | 0 .../package.json | 4 +- .../src/calendar-context.ts | 6 +- .../src/feed-items.ts | 2 +- .../src/google-calendar-api.ts | 0 .../src/google-calendar-source.test.ts | 4 +- .../src/google-calendar-source.ts | 6 +- .../src/index.ts | 0 .../src/types.ts | 0 .../README.md | 18 +-- .../package.json | 4 +- .../src/index.ts | 0 .../src/location-source.test.ts | 2 +- .../src/location-source.ts | 8 +- .../src/types.ts | 0 .../fixtures/tfl-responses.json | 0 .../package.json | 6 +- .../scripts/fetch-fixtures.ts | 0 .../src/index.ts | 0 .../src/tfl-api.ts | 0 .../src/tfl-source.test.ts | 8 +- .../src/tfl-source.ts | 10 +- .../src/types.ts | 2 +- .../README.md | 12 +- .../fixtures/san-francisco.json | 0 .../package.json | 6 +- .../scripts/query.ts | 6 +- .../src/feed-items.ts | 2 +- .../src/index.ts | 0 .../src/prompts/current-weather-insight.txt | 0 .../src/weather-context.ts | 6 +- .../src/weather-source.test.ts | 10 +- .../src/weather-source.ts | 10 +- .../src/weatherkit.ts | 0 packages/aris-feed-enhancers/package.json | 17 --- 201 files changed, 318 insertions(+), 323 deletions(-) rename apps/{aris-backend => aelis-backend}/.env.example (100%) rename apps/{aris-backend => aelis-backend}/package.json (57%) rename apps/{aris-backend => aelis-backend}/src/auth/http.ts (100%) rename apps/{aris-backend => aelis-backend}/src/auth/index.ts (100%) rename apps/{aris-backend => aelis-backend}/src/auth/session-middleware.ts (100%) rename apps/{aris-backend => aelis-backend}/src/auth/session.ts (100%) rename apps/{aris-backend => aelis-backend}/src/db.ts (100%) rename apps/{aris-backend => aelis-backend}/src/enhancement/enhance-feed.ts (96%) rename apps/{aris-backend => aelis-backend}/src/enhancement/llm-client.ts (100%) rename apps/{aris-backend => aelis-backend}/src/enhancement/merge.test.ts (98%) rename apps/{aris-backend => aelis-backend}/src/enhancement/merge.ts (96%) rename apps/{aris-backend => aelis-backend}/src/enhancement/prompt-builder.test.ts (99%) rename apps/{aris-backend => aelis-backend}/src/enhancement/prompt-builder.ts (97%) rename apps/{aris-backend => aelis-backend}/src/enhancement/prompts/system.txt (91%) rename apps/{aris-backend => aelis-backend}/src/enhancement/schema.test.ts (100%) rename apps/{aris-backend => aelis-backend}/src/enhancement/schema.ts (100%) rename apps/{aris-backend => aelis-backend}/src/feed/http.test.ts (99%) rename apps/{aris-backend => aelis-backend}/src/feed/http.ts (100%) rename apps/{aris-backend => aelis-backend}/src/lib/error.ts (100%) rename apps/{aris-backend => aelis-backend}/src/location/http.ts (94%) rename apps/{aris-backend => aelis-backend}/src/server.ts (96%) rename apps/{aris-backend => aelis-backend}/src/session/feed-source-provider.ts (83%) rename apps/{aris-backend => aelis-backend}/src/session/index.ts (100%) rename apps/{aris-backend => aelis-backend}/src/session/user-session-manager.test.ts (86%) rename apps/{aris-backend => aelis-backend}/src/session/user-session-manager.ts (100%) rename apps/{aris-backend => aelis-backend}/src/session/user-session.test.ts (96%) rename apps/{aris-backend => aelis-backend}/src/session/user-session.ts (99%) rename apps/{aris-backend => aelis-backend}/src/tfl/provider.ts (88%) rename apps/{aris-backend => aelis-backend}/src/weather/provider.ts (81%) rename apps/{aris-backend => aelis-backend}/tsconfig.json (100%) rename apps/{aris-client => aelis-client}/.gitignore (100%) rename apps/{aris-client => aelis-client}/.vscode/extensions.json (100%) rename apps/{aris-client => aelis-client}/.vscode/settings.json (100%) rename apps/{aris-client => aelis-client}/README.md (100%) rename apps/{aris-client => aelis-client}/app.json (97%) rename apps/{aris-client => aelis-client}/assets/fonts/Inter_100Thin.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/Inter_100Thin_Italic.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/Inter_200ExtraLight.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/Inter_200ExtraLight_Italic.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/Inter_300Light.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/Inter_300Light_Italic.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/Inter_400Regular.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/Inter_400Regular_Italic.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/Inter_500Medium.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/Inter_500Medium_Italic.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/Inter_600SemiBold.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/Inter_600SemiBold_Italic.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/Inter_700Bold.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/Inter_700Bold_Italic.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/Inter_800ExtraBold.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/Inter_800ExtraBold_Italic.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/Inter_900Black.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/Inter_900Black_Italic.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/SourceSerif4_200ExtraLight.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/SourceSerif4_200ExtraLight_Italic.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/SourceSerif4_300Light.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/SourceSerif4_300Light_Italic.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/SourceSerif4_400Regular.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/SourceSerif4_400Regular_Italic.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/SourceSerif4_500Medium.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/SourceSerif4_500Medium_Italic.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/SourceSerif4_600SemiBold.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/SourceSerif4_600SemiBold_Italic.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/SourceSerif4_700Bold.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/SourceSerif4_700Bold_Italic.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/SourceSerif4_800ExtraBold.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/SourceSerif4_800ExtraBold_Italic.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/SourceSerif4_900Black.ttf (100%) rename apps/{aris-client => aelis-client}/assets/fonts/SourceSerif4_900Black_Italic.ttf (100%) rename apps/{aris-client => aelis-client}/assets/images/android-icon-background.png (100%) rename apps/{aris-client => aelis-client}/assets/images/android-icon-foreground.png (100%) rename apps/{aris-client => aelis-client}/assets/images/android-icon-monochrome.png (100%) rename apps/{aris-client => aelis-client}/assets/images/favicon.png (100%) rename apps/{aris-client => aelis-client}/assets/images/icon.png (100%) rename apps/{aris-client => aelis-client}/assets/images/partial-react-logo.png (100%) rename apps/{aris-client => aelis-client}/assets/images/react-logo.png (100%) rename apps/{aris-client => aelis-client}/assets/images/react-logo@2x.png (100%) rename apps/{aris-client => aelis-client}/assets/images/react-logo@3x.png (100%) rename apps/{aris-client => aelis-client}/assets/images/splash-icon.png (100%) rename apps/{aris-client => aelis-client}/eas.json (100%) rename apps/{aris-client => aelis-client}/eslint.config.js (100%) rename apps/{aris-client => aelis-client}/package.json (98%) rename apps/{aris-client => aelis-client}/scripts/dev-proxy.ts (100%) rename apps/{aris-client => aelis-client}/scripts/open-debugger.ts (100%) rename apps/{aris-client => aelis-client}/scripts/reset-project.js (100%) rename apps/{aris-client => aelis-client}/scripts/run-dev-server.sh (100%) rename apps/{aris-client => aelis-client}/src/app/(tabs)/_layout.tsx (100%) rename apps/{aris-client => aelis-client}/src/app/(tabs)/explore.tsx (100%) rename apps/{aris-client => aelis-client}/src/app/(tabs)/index.tsx (100%) rename apps/{aris-client => aelis-client}/src/app/_layout.tsx (100%) rename apps/{aris-client => aelis-client}/src/app/modal.tsx (100%) rename apps/{aris-client => aelis-client}/src/components/external-link.tsx (100%) rename apps/{aris-client => aelis-client}/src/components/haptic-tab.tsx (100%) rename apps/{aris-client => aelis-client}/src/components/hello-wave.tsx (100%) rename apps/{aris-client => aelis-client}/src/components/parallax-scroll-view.tsx (100%) rename apps/{aris-client => aelis-client}/src/components/themed-text.tsx (100%) rename apps/{aris-client => aelis-client}/src/components/themed-view.tsx (100%) rename apps/{aris-client => aelis-client}/src/components/ui/collapsible.tsx (100%) rename apps/{aris-client => aelis-client}/src/components/ui/icon-symbol.ios.tsx (100%) rename apps/{aris-client => aelis-client}/src/components/ui/icon-symbol.tsx (100%) rename apps/{aris-client => aelis-client}/src/constants/theme.ts (100%) rename apps/{aris-client => aelis-client}/src/hooks/use-color-scheme.ts (100%) rename apps/{aris-client => aelis-client}/src/hooks/use-color-scheme.web.ts (100%) rename apps/{aris-client => aelis-client}/src/hooks/use-theme-color.ts (100%) rename apps/{aris-client => aelis-client}/tsconfig.json (100%) rename packages/{aris-core => aelis-core}/README.md (94%) rename packages/{aris-core => aelis-core}/package.json (88%) rename packages/{aris-core => aelis-core}/src/action.ts (92%) rename packages/{aris-core => aelis-core}/src/context-bridge.ts (100%) rename packages/{aris-core => aelis-core}/src/context-provider.ts (100%) rename packages/{aris-core => aelis-core}/src/context.test.ts (79%) rename packages/{aris-core => aelis-core}/src/context.ts (98%) rename packages/{aris-core => aelis-core}/src/data-source.ts (100%) rename packages/{aris-core => aelis-core}/src/feed-controller.ts (100%) rename packages/{aris-core => aelis-core}/src/feed-engine.test.ts (100%) rename packages/{aris-core => aelis-core}/src/feed-engine.ts (100%) rename packages/{aris-core => aelis-core}/src/feed-post-processor.test.ts (99%) rename packages/{aris-core => aelis-core}/src/feed-post-processor.ts (100%) rename packages/{aris-core => aelis-core}/src/feed-source.test.ts (100%) rename packages/{aris-core => aelis-core}/src/feed-source.ts (98%) rename packages/{aris-core => aelis-core}/src/feed.test.ts (100%) rename packages/{aris-core => aelis-core}/src/feed.ts (100%) rename packages/{aris-core => aelis-core}/src/index.ts (100%) rename packages/{aris-core => aelis-core}/src/reconciler.ts (100%) rename packages/{aris-data-source-weatherkit => aelis-data-source-weatherkit}/.env.example (100%) rename packages/{aris-data-source-weatherkit => aelis-data-source-weatherkit}/README.md (93%) rename packages/{aris-data-source-weatherkit => aelis-data-source-weatherkit}/fixtures/san-francisco.json (100%) rename packages/{aris-data-source-weatherkit => aelis-data-source-weatherkit}/package.json (70%) rename packages/{aris-data-source-weatherkit => aelis-data-source-weatherkit}/scripts/generate-fixtures.ts (100%) rename packages/{aris-data-source-weatherkit => aelis-data-source-weatherkit}/src/data-source.test.ts (97%) rename packages/{aris-data-source-weatherkit => aelis-data-source-weatherkit}/src/data-source.ts (98%) rename packages/{aris-data-source-weatherkit => aelis-data-source-weatherkit}/src/feed-items.ts (98%) rename packages/{aris-data-source-weatherkit => aelis-data-source-weatherkit}/src/index.ts (100%) rename packages/{aris-data-source-weatherkit => aelis-data-source-weatherkit}/src/weatherkit.ts (100%) create mode 100644 packages/aelis-feed-enhancers/package.json rename packages/{aris-feed-enhancers => aelis-feed-enhancers}/src/index.ts (100%) rename packages/{aris-feed-enhancers => aelis-feed-enhancers}/src/time-of-day-enhancer.test.ts (98%) rename packages/{aris-feed-enhancers => aelis-feed-enhancers}/src/time-of-day-enhancer.ts (97%) rename packages/{aris-source-caldav => aelis-source-caldav}/README.md (95%) rename packages/{aris-source-caldav => aelis-source-caldav}/fixtures/all-day-event.ics (100%) rename packages/{aris-source-caldav => aelis-source-caldav}/fixtures/cancelled-event.ics (100%) rename packages/{aris-source-caldav => aelis-source-caldav}/fixtures/daily-recurring-allday.ics (100%) rename packages/{aris-source-caldav => aelis-source-caldav}/fixtures/minimal-event.ics (100%) rename packages/{aris-source-caldav => aelis-source-caldav}/fixtures/recurring-event.ics (100%) rename packages/{aris-source-caldav => aelis-source-caldav}/fixtures/single-event.ics (100%) rename packages/{aris-source-caldav => aelis-source-caldav}/fixtures/weekly-recurring-with-exception.ics (100%) rename packages/{aris-source-caldav => aelis-source-caldav}/fixtures/weekly-recurring.ics (100%) rename packages/{aris-source-caldav => aelis-source-caldav}/package.json (79%) rename packages/{aris-source-caldav => aelis-source-caldav}/scripts/test-live.ts (98%) rename packages/{aris-source-caldav => aelis-source-caldav}/src/caldav-source.test.ts (99%) rename packages/{aris-source-caldav => aelis-source-caldav}/src/caldav-source.ts (97%) rename packages/{aris-source-caldav => aelis-source-caldav}/src/calendar-context.ts (83%) rename packages/{aris-source-caldav => aelis-source-caldav}/src/ical-parser.test.ts (100%) rename packages/{aris-source-caldav => aelis-source-caldav}/src/ical-parser.ts (98%) rename packages/{aris-source-caldav => aelis-source-caldav}/src/index.ts (100%) rename packages/{aris-source-caldav => aelis-source-caldav}/src/types.ts (98%) rename packages/{aris-source-google-calendar => aelis-source-google-calendar}/fixtures/events.json (100%) rename packages/{aris-source-google-calendar => aelis-source-google-calendar}/package.json (70%) rename packages/{aris-source-google-calendar => aelis-source-google-calendar}/src/calendar-context.ts (61%) rename packages/{aris-source-google-calendar => aelis-source-google-calendar}/src/feed-items.ts (92%) rename packages/{aris-source-google-calendar => aelis-source-google-calendar}/src/google-calendar-api.ts (100%) rename packages/{aris-source-google-calendar => aelis-source-google-calendar}/src/google-calendar-source.test.ts (98%) rename packages/{aris-source-google-calendar => aelis-source-google-calendar}/src/google-calendar-source.ts (97%) rename packages/{aris-source-google-calendar => aelis-source-google-calendar}/src/index.ts (100%) rename packages/{aris-source-google-calendar => aelis-source-google-calendar}/src/types.ts (100%) rename packages/{aris-source-location => aelis-source-location}/README.md (84%) rename packages/{aris-source-location => aelis-source-location}/package.json (73%) rename packages/{aris-source-location => aelis-source-location}/src/index.ts (100%) rename packages/{aris-source-location => aelis-source-location}/src/location-source.test.ts (99%) rename packages/{aris-source-location => aelis-source-location}/src/location-source.ts (93%) rename packages/{aris-source-location => aelis-source-location}/src/types.ts (100%) rename packages/{aris-source-tfl => aelis-source-tfl}/fixtures/tfl-responses.json (100%) rename packages/{aris-source-tfl => aelis-source-tfl}/package.json (69%) rename packages/{aris-source-tfl => aelis-source-tfl}/scripts/fetch-fixtures.ts (100%) rename packages/{aris-source-tfl => aelis-source-tfl}/src/index.ts (100%) rename packages/{aris-source-tfl => aelis-source-tfl}/src/tfl-api.ts (100%) rename packages/{aris-source-tfl => aelis-source-tfl}/src/tfl-source.test.ts (98%) rename packages/{aris-source-tfl => aelis-source-tfl}/src/tfl-source.ts (95%) rename packages/{aris-source-tfl => aelis-source-tfl}/src/types.ts (96%) rename packages/{aris-source-weatherkit => aelis-source-weatherkit}/README.md (88%) rename packages/{aris-source-weatherkit => aelis-source-weatherkit}/fixtures/san-francisco.json (100%) rename packages/{aris-source-weatherkit => aelis-source-weatherkit}/package.json (61%) rename packages/{aris-source-weatherkit => aelis-source-weatherkit}/scripts/query.ts (97%) rename packages/{aris-source-weatherkit => aelis-source-weatherkit}/src/feed-items.ts (98%) rename packages/{aris-source-weatherkit => aelis-source-weatherkit}/src/index.ts (100%) rename packages/{aris-source-weatherkit => aelis-source-weatherkit}/src/prompts/current-weather-insight.txt (100%) rename packages/{aris-source-weatherkit => aelis-source-weatherkit}/src/weather-context.ts (73%) rename packages/{aris-source-weatherkit => aelis-source-weatherkit}/src/weather-source.test.ts (96%) rename packages/{aris-source-weatherkit => aelis-source-weatherkit}/src/weather-source.ts (97%) rename packages/{aris-source-weatherkit => aelis-source-weatherkit}/src/weatherkit.ts (100%) delete mode 100644 packages/aris-feed-enhancers/package.json diff --git a/.ona/automations.yaml b/.ona/automations.yaml index 5071d40..6a17260 100644 --- a/.ona/automations.yaml +++ b/.ona/automations.yaml @@ -1,8 +1,8 @@ services: expo: name: Expo Dev Server - description: Expo development server for aris-client + description: Expo development server for aelis-client triggeredBy: - postDevcontainerStart commands: - start: cd apps/aris-client && ./scripts/run-dev-server.sh + start: cd apps/aelis-client && ./scripts/run-dev-server.sh diff --git a/AGENTS.md b/AGENTS.md index d7ffc7e..1411890 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2,7 +2,7 @@ ## Project -ARIS is an AI-powered personal assistant that aggregates data from various sources into a contextual feed. Monorepo with `packages/` (shared libraries) and `apps/` (applications). +AELIS is an AI-powered personal assistant that aggregates data from various sources into a contextual feed. Monorepo with `packages/` (shared libraries) and `apps/` (applications). ## Commands diff --git a/README.md b/README.md index 41655fa..637560c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# aris +# aelis To install dependencies: @@ -8,14 +8,14 @@ bun install ## Packages -### @aris/source-tfl +### @aelis/source-tfl TfL (Transport for London) feed source for tube, overground, and Elizabeth line alerts. #### Testing ```bash -cd packages/aris-source-tfl +cd packages/aelis-source-tfl bun run test ``` diff --git a/apps/aris-backend/.env.example b/apps/aelis-backend/.env.example similarity index 100% rename from apps/aris-backend/.env.example rename to apps/aelis-backend/.env.example diff --git a/apps/aris-backend/package.json b/apps/aelis-backend/package.json similarity index 57% rename from apps/aris-backend/package.json rename to apps/aelis-backend/package.json index 2d829dc..ac5b313 100644 --- a/apps/aris-backend/package.json +++ b/apps/aelis-backend/package.json @@ -1,5 +1,5 @@ { - "name": "@aris/backend", + "name": "@aelis/backend", "version": "0.0.0", "type": "module", "main": "src/server.ts", @@ -9,12 +9,12 @@ "test": "bun test src/" }, "dependencies": { - "@aris/core": "workspace:*", - "@aris/source-caldav": "workspace:*", - "@aris/source-google-calendar": "workspace:*", - "@aris/source-location": "workspace:*", - "@aris/source-tfl": "workspace:*", - "@aris/source-weatherkit": "workspace:*", + "@aelis/core": "workspace:*", + "@aelis/source-caldav": "workspace:*", + "@aelis/source-google-calendar": "workspace:*", + "@aelis/source-location": "workspace:*", + "@aelis/source-tfl": "workspace:*", + "@aelis/source-weatherkit": "workspace:*", "@openrouter/sdk": "^0.9.11", "arktype": "^2.1.29", "better-auth": "^1", diff --git a/apps/aris-backend/src/auth/http.ts b/apps/aelis-backend/src/auth/http.ts similarity index 100% rename from apps/aris-backend/src/auth/http.ts rename to apps/aelis-backend/src/auth/http.ts diff --git a/apps/aris-backend/src/auth/index.ts b/apps/aelis-backend/src/auth/index.ts similarity index 100% rename from apps/aris-backend/src/auth/index.ts rename to apps/aelis-backend/src/auth/index.ts diff --git a/apps/aris-backend/src/auth/session-middleware.ts b/apps/aelis-backend/src/auth/session-middleware.ts similarity index 100% rename from apps/aris-backend/src/auth/session-middleware.ts rename to apps/aelis-backend/src/auth/session-middleware.ts diff --git a/apps/aris-backend/src/auth/session.ts b/apps/aelis-backend/src/auth/session.ts similarity index 100% rename from apps/aris-backend/src/auth/session.ts rename to apps/aelis-backend/src/auth/session.ts diff --git a/apps/aris-backend/src/db.ts b/apps/aelis-backend/src/db.ts similarity index 100% rename from apps/aris-backend/src/db.ts rename to apps/aelis-backend/src/db.ts diff --git a/apps/aris-backend/src/enhancement/enhance-feed.ts b/apps/aelis-backend/src/enhancement/enhance-feed.ts similarity index 96% rename from apps/aris-backend/src/enhancement/enhance-feed.ts rename to apps/aelis-backend/src/enhancement/enhance-feed.ts index ae34da3..649b22b 100644 --- a/apps/aris-backend/src/enhancement/enhance-feed.ts +++ b/apps/aelis-backend/src/enhancement/enhance-feed.ts @@ -1,4 +1,4 @@ -import type { FeedItem } from "@aris/core" +import type { FeedItem } from "@aelis/core" import type { LlmClient } from "./llm-client.ts" diff --git a/apps/aris-backend/src/enhancement/llm-client.ts b/apps/aelis-backend/src/enhancement/llm-client.ts similarity index 100% rename from apps/aris-backend/src/enhancement/llm-client.ts rename to apps/aelis-backend/src/enhancement/llm-client.ts diff --git a/apps/aris-backend/src/enhancement/merge.test.ts b/apps/aelis-backend/src/enhancement/merge.test.ts similarity index 98% rename from apps/aris-backend/src/enhancement/merge.test.ts rename to apps/aelis-backend/src/enhancement/merge.test.ts index 6ba86a3..98cc1cb 100644 --- a/apps/aris-backend/src/enhancement/merge.test.ts +++ b/apps/aelis-backend/src/enhancement/merge.test.ts @@ -1,4 +1,4 @@ -import type { FeedItem } from "@aris/core" +import type { FeedItem } from "@aelis/core" import { describe, expect, test } from "bun:test" diff --git a/apps/aris-backend/src/enhancement/merge.ts b/apps/aelis-backend/src/enhancement/merge.ts similarity index 96% rename from apps/aris-backend/src/enhancement/merge.ts rename to apps/aelis-backend/src/enhancement/merge.ts index 3a51c10..1760d1d 100644 --- a/apps/aris-backend/src/enhancement/merge.ts +++ b/apps/aelis-backend/src/enhancement/merge.ts @@ -1,4 +1,4 @@ -import type { FeedItem } from "@aris/core" +import type { FeedItem } from "@aelis/core" import type { EnhancementResult } from "./schema.ts" diff --git a/apps/aris-backend/src/enhancement/prompt-builder.test.ts b/apps/aelis-backend/src/enhancement/prompt-builder.test.ts similarity index 99% rename from apps/aris-backend/src/enhancement/prompt-builder.test.ts rename to apps/aelis-backend/src/enhancement/prompt-builder.test.ts index 3a78422..47d97d9 100644 --- a/apps/aris-backend/src/enhancement/prompt-builder.test.ts +++ b/apps/aelis-backend/src/enhancement/prompt-builder.test.ts @@ -1,4 +1,4 @@ -import type { FeedItem } from "@aris/core" +import type { FeedItem } from "@aelis/core" import { describe, expect, test } from "bun:test" diff --git a/apps/aris-backend/src/enhancement/prompt-builder.ts b/apps/aelis-backend/src/enhancement/prompt-builder.ts similarity index 97% rename from apps/aris-backend/src/enhancement/prompt-builder.ts rename to apps/aelis-backend/src/enhancement/prompt-builder.ts index 1a7b3ae..4114826 100644 --- a/apps/aris-backend/src/enhancement/prompt-builder.ts +++ b/apps/aelis-backend/src/enhancement/prompt-builder.ts @@ -1,7 +1,7 @@ -import type { FeedItem } from "@aris/core" +import type { FeedItem } from "@aelis/core" -import { CalDavFeedItemType } from "@aris/source-caldav" -import { CalendarFeedItemType } from "@aris/source-google-calendar" +import { CalDavFeedItemType } from "@aelis/source-caldav" +import { CalendarFeedItemType } from "@aelis/source-google-calendar" import systemPromptBase from "./prompts/system.txt" diff --git a/apps/aris-backend/src/enhancement/prompts/system.txt b/apps/aelis-backend/src/enhancement/prompts/system.txt similarity index 91% rename from apps/aris-backend/src/enhancement/prompts/system.txt rename to apps/aelis-backend/src/enhancement/prompts/system.txt index 80eb816..70d247f 100644 --- a/apps/aris-backend/src/enhancement/prompts/system.txt +++ b/apps/aelis-backend/src/enhancement/prompts/system.txt @@ -1,4 +1,4 @@ -You are ARIS, a personal assistant. You enhance a user's feed by filling slots and optionally generating synthetic items. +You are AELIS, a personal assistant. You enhance a user's feed by filling slots and optionally generating synthetic items. The user message is a JSON object with: - "items": feed items with data and named slots to fill. Each slot has a description of what to write. diff --git a/apps/aris-backend/src/enhancement/schema.test.ts b/apps/aelis-backend/src/enhancement/schema.test.ts similarity index 100% rename from apps/aris-backend/src/enhancement/schema.test.ts rename to apps/aelis-backend/src/enhancement/schema.test.ts diff --git a/apps/aris-backend/src/enhancement/schema.ts b/apps/aelis-backend/src/enhancement/schema.ts similarity index 100% rename from apps/aris-backend/src/enhancement/schema.ts rename to apps/aelis-backend/src/enhancement/schema.ts diff --git a/apps/aris-backend/src/feed/http.test.ts b/apps/aelis-backend/src/feed/http.test.ts similarity index 99% rename from apps/aris-backend/src/feed/http.test.ts rename to apps/aelis-backend/src/feed/http.test.ts index a7a5343..7d75f03 100644 --- a/apps/aris-backend/src/feed/http.test.ts +++ b/apps/aelis-backend/src/feed/http.test.ts @@ -1,4 +1,4 @@ -import type { ActionDefinition, ContextEntry, FeedItem, FeedSource } from "@aris/core" +import type { ActionDefinition, ContextEntry, FeedItem, FeedSource } from "@aelis/core" import { describe, expect, test } from "bun:test" import { Hono } from "hono" diff --git a/apps/aris-backend/src/feed/http.ts b/apps/aelis-backend/src/feed/http.ts similarity index 100% rename from apps/aris-backend/src/feed/http.ts rename to apps/aelis-backend/src/feed/http.ts diff --git a/apps/aris-backend/src/lib/error.ts b/apps/aelis-backend/src/lib/error.ts similarity index 100% rename from apps/aris-backend/src/lib/error.ts rename to apps/aelis-backend/src/lib/error.ts diff --git a/apps/aris-backend/src/location/http.ts b/apps/aelis-backend/src/location/http.ts similarity index 94% rename from apps/aris-backend/src/location/http.ts rename to apps/aelis-backend/src/location/http.ts index 083cbd8..0bf1c2d 100644 --- a/apps/aris-backend/src/location/http.ts +++ b/apps/aelis-backend/src/location/http.ts @@ -45,7 +45,7 @@ async function handleUpdateLocation(c: Context) { const user = c.get("user")! const sessionManager = c.get("sessionManager") const session = sessionManager.getOrCreate(user.id) - await session.engine.executeAction("aris.location", "update-location", { + await session.engine.executeAction("aelis.location", "update-location", { lat: result.lat, lng: result.lng, accuracy: result.accuracy, diff --git a/apps/aris-backend/src/server.ts b/apps/aelis-backend/src/server.ts similarity index 96% rename from apps/aris-backend/src/server.ts rename to apps/aelis-backend/src/server.ts index dbfc163..15712a3 100644 --- a/apps/aris-backend/src/server.ts +++ b/apps/aelis-backend/src/server.ts @@ -1,4 +1,4 @@ -import { LocationSource } from "@aris/source-location" +import { LocationSource } from "@aelis/source-location" import { Hono } from "hono" import { registerAuthHandlers } from "./auth/http.ts" diff --git a/apps/aris-backend/src/session/feed-source-provider.ts b/apps/aelis-backend/src/session/feed-source-provider.ts similarity index 83% rename from apps/aris-backend/src/session/feed-source-provider.ts rename to apps/aelis-backend/src/session/feed-source-provider.ts index ef1c1de..b1151ab 100644 --- a/apps/aris-backend/src/session/feed-source-provider.ts +++ b/apps/aelis-backend/src/session/feed-source-provider.ts @@ -1,4 +1,4 @@ -import type { FeedSource } from "@aris/core" +import type { FeedSource } from "@aelis/core" export interface FeedSourceProvider { feedSourceForUser(userId: string): FeedSource diff --git a/apps/aris-backend/src/session/index.ts b/apps/aelis-backend/src/session/index.ts similarity index 100% rename from apps/aris-backend/src/session/index.ts rename to apps/aelis-backend/src/session/index.ts diff --git a/apps/aris-backend/src/session/user-session-manager.test.ts b/apps/aelis-backend/src/session/user-session-manager.test.ts similarity index 86% rename from apps/aris-backend/src/session/user-session-manager.test.ts rename to apps/aelis-backend/src/session/user-session-manager.test.ts index 3a751bf..de3be83 100644 --- a/apps/aris-backend/src/session/user-session-manager.test.ts +++ b/apps/aelis-backend/src/session/user-session-manager.test.ts @@ -1,6 +1,6 @@ -import type { WeatherKitClient, WeatherKitResponse } from "@aris/source-weatherkit" +import type { WeatherKitClient, WeatherKitResponse } from "@aelis/source-weatherkit" -import { LocationSource } from "@aris/source-location" +import { LocationSource } from "@aelis/source-location" import { describe, expect, mock, test } from "bun:test" import { WeatherSourceProvider } from "../weather/provider.ts" @@ -44,8 +44,8 @@ describe("UserSessionManager", () => { const session1 = manager.getOrCreate("user-1") const session2 = manager.getOrCreate("user-2") - const source1 = session1.getSource("aris.location") - const source2 = session2.getSource("aris.location") + const source1 = session1.getSource("aelis.location") + const source2 = session2.getSource("aelis.location") expect(source1).not.toBe(source2) }) @@ -83,7 +83,7 @@ describe("UserSessionManager", () => { const session = manager.getOrCreate("user-1") - expect(session.getSource("aris.weather")).toBeDefined() + expect(session.getSource("aelis.weather")).toBeDefined() }) test("accepts mixed providers", () => { @@ -94,8 +94,8 @@ describe("UserSessionManager", () => { const session = manager.getOrCreate("user-1") - expect(session.getSource("aris.location")).toBeDefined() - expect(session.getSource("aris.weather")).toBeDefined() + expect(session.getSource("aelis.location")).toBeDefined() + expect(session.getSource("aelis.weather")).toBeDefined() }) test("refresh returns feed result through session", async () => { @@ -114,14 +114,14 @@ describe("UserSessionManager", () => { const manager = new UserSessionManager({ providers: [() => new LocationSource()] }) const session = manager.getOrCreate("user-1") - await session.engine.executeAction("aris.location", "update-location", { + await session.engine.executeAction("aelis.location", "update-location", { lat: 51.5074, lng: -0.1278, accuracy: 10, timestamp: new Date(), }) - const source = session.getSource("aris.location") + const source = session.getSource("aelis.location") expect(source?.lastLocation?.lat).toBe(51.5074) }) @@ -132,7 +132,7 @@ describe("UserSessionManager", () => { const session = manager.getOrCreate("user-1") session.engine.subscribe(callback) - await session.engine.executeAction("aris.location", "update-location", { + await session.engine.executeAction("aelis.location", "update-location", { lat: 51.5074, lng: -0.1278, accuracy: 10, @@ -156,7 +156,7 @@ describe("UserSessionManager", () => { // Create new session and push location — old callback should not fire const session2 = manager.getOrCreate("user-1") - await session2.engine.executeAction("aris.location", "update-location", { + await session2.engine.executeAction("aelis.location", "update-location", { lat: 51.5074, lng: -0.1278, accuracy: 10, diff --git a/apps/aris-backend/src/session/user-session-manager.ts b/apps/aelis-backend/src/session/user-session-manager.ts similarity index 100% rename from apps/aris-backend/src/session/user-session-manager.ts rename to apps/aelis-backend/src/session/user-session-manager.ts diff --git a/apps/aris-backend/src/session/user-session.test.ts b/apps/aelis-backend/src/session/user-session.test.ts similarity index 96% rename from apps/aris-backend/src/session/user-session.test.ts rename to apps/aelis-backend/src/session/user-session.test.ts index 241ddb4..f824772 100644 --- a/apps/aris-backend/src/session/user-session.test.ts +++ b/apps/aelis-backend/src/session/user-session.test.ts @@ -1,6 +1,6 @@ -import type { ActionDefinition, ContextEntry, FeedItem, FeedSource } from "@aris/core" +import type { ActionDefinition, ContextEntry, FeedItem, FeedSource } from "@aelis/core" -import { LocationSource } from "@aris/source-location" +import { LocationSource } from "@aelis/source-location" import { describe, expect, test } from "bun:test" import { UserSession } from "./user-session.ts" @@ -36,7 +36,7 @@ describe("UserSession", () => { const location = new LocationSource() const session = new UserSession([location]) - const result = session.getSource("aris.location") + const result = session.getSource("aelis.location") expect(result).toBe(location) }) @@ -59,7 +59,7 @@ describe("UserSession", () => { const location = new LocationSource() const session = new UserSession([location]) - await session.engine.executeAction("aris.location", "update-location", { + await session.engine.executeAction("aelis.location", "update-location", { lat: 51.5, lng: -0.1, accuracy: 10, diff --git a/apps/aris-backend/src/session/user-session.ts b/apps/aelis-backend/src/session/user-session.ts similarity index 99% rename from apps/aris-backend/src/session/user-session.ts rename to apps/aelis-backend/src/session/user-session.ts index 237506f..31633f5 100644 --- a/apps/aris-backend/src/session/user-session.ts +++ b/apps/aelis-backend/src/session/user-session.ts @@ -1,4 +1,4 @@ -import { FeedEngine, type FeedItem, type FeedResult, type FeedSource } from "@aris/core" +import { FeedEngine, type FeedItem, type FeedResult, type FeedSource } from "@aelis/core" import type { FeedEnhancer } from "../enhancement/enhance-feed.ts" diff --git a/apps/aris-backend/src/tfl/provider.ts b/apps/aelis-backend/src/tfl/provider.ts similarity index 88% rename from apps/aris-backend/src/tfl/provider.ts rename to apps/aelis-backend/src/tfl/provider.ts index cdd80b4..d810ec3 100644 --- a/apps/aris-backend/src/tfl/provider.ts +++ b/apps/aelis-backend/src/tfl/provider.ts @@ -1,4 +1,4 @@ -import { TflSource, type ITflApi } from "@aris/source-tfl" +import { TflSource, type ITflApi } from "@aelis/source-tfl" import type { FeedSourceProvider } from "../session/feed-source-provider.ts" diff --git a/apps/aris-backend/src/weather/provider.ts b/apps/aelis-backend/src/weather/provider.ts similarity index 81% rename from apps/aris-backend/src/weather/provider.ts rename to apps/aelis-backend/src/weather/provider.ts index 25d56e4..8af3bc6 100644 --- a/apps/aris-backend/src/weather/provider.ts +++ b/apps/aelis-backend/src/weather/provider.ts @@ -1,4 +1,4 @@ -import { WeatherSource, type WeatherSourceOptions } from "@aris/source-weatherkit" +import { WeatherSource, type WeatherSourceOptions } from "@aelis/source-weatherkit" import type { FeedSourceProvider } from "../session/feed-source-provider.ts" diff --git a/apps/aris-backend/tsconfig.json b/apps/aelis-backend/tsconfig.json similarity index 100% rename from apps/aris-backend/tsconfig.json rename to apps/aelis-backend/tsconfig.json diff --git a/apps/aris-client/.gitignore b/apps/aelis-client/.gitignore similarity index 100% rename from apps/aris-client/.gitignore rename to apps/aelis-client/.gitignore diff --git a/apps/aris-client/.vscode/extensions.json b/apps/aelis-client/.vscode/extensions.json similarity index 100% rename from apps/aris-client/.vscode/extensions.json rename to apps/aelis-client/.vscode/extensions.json diff --git a/apps/aris-client/.vscode/settings.json b/apps/aelis-client/.vscode/settings.json similarity index 100% rename from apps/aris-client/.vscode/settings.json rename to apps/aelis-client/.vscode/settings.json diff --git a/apps/aris-client/README.md b/apps/aelis-client/README.md similarity index 100% rename from apps/aris-client/README.md rename to apps/aelis-client/README.md diff --git a/apps/aris-client/app.json b/apps/aelis-client/app.json similarity index 97% rename from apps/aris-client/app.json rename to apps/aelis-client/app.json index ad09153..af4270b 100644 --- a/apps/aris-client/app.json +++ b/apps/aelis-client/app.json @@ -1,11 +1,11 @@ { "expo": { - "name": "Aris", - "slug": "aris-client", + "name": "Aelis", + "slug": "aelis-client", "version": "1.0.0", "orientation": "portrait", "icon": "./assets/images/icon.png", - "scheme": "aris", + "scheme": "aelis", "userInterfaceStyle": "automatic", "newArchEnabled": true, "ios": { @@ -15,7 +15,7 @@ }, "ITSAppUsesNonExemptEncryption": false }, - "bundleIdentifier": "sh.nym.aris" + "bundleIdentifier": "sh.nym.aelis" }, "android": { "adaptiveIcon": { @@ -26,7 +26,7 @@ }, "edgeToEdgeEnabled": true, "predictiveBackGestureEnabled": false, - "package": "sh.nym.aris" + "package": "sh.nym.aelis" }, "web": { "output": "static", diff --git a/apps/aris-client/assets/fonts/Inter_100Thin.ttf b/apps/aelis-client/assets/fonts/Inter_100Thin.ttf similarity index 100% rename from apps/aris-client/assets/fonts/Inter_100Thin.ttf rename to apps/aelis-client/assets/fonts/Inter_100Thin.ttf diff --git a/apps/aris-client/assets/fonts/Inter_100Thin_Italic.ttf b/apps/aelis-client/assets/fonts/Inter_100Thin_Italic.ttf similarity index 100% rename from apps/aris-client/assets/fonts/Inter_100Thin_Italic.ttf rename to apps/aelis-client/assets/fonts/Inter_100Thin_Italic.ttf diff --git a/apps/aris-client/assets/fonts/Inter_200ExtraLight.ttf b/apps/aelis-client/assets/fonts/Inter_200ExtraLight.ttf similarity index 100% rename from apps/aris-client/assets/fonts/Inter_200ExtraLight.ttf rename to apps/aelis-client/assets/fonts/Inter_200ExtraLight.ttf diff --git a/apps/aris-client/assets/fonts/Inter_200ExtraLight_Italic.ttf b/apps/aelis-client/assets/fonts/Inter_200ExtraLight_Italic.ttf similarity index 100% rename from apps/aris-client/assets/fonts/Inter_200ExtraLight_Italic.ttf rename to apps/aelis-client/assets/fonts/Inter_200ExtraLight_Italic.ttf diff --git a/apps/aris-client/assets/fonts/Inter_300Light.ttf b/apps/aelis-client/assets/fonts/Inter_300Light.ttf similarity index 100% rename from apps/aris-client/assets/fonts/Inter_300Light.ttf rename to apps/aelis-client/assets/fonts/Inter_300Light.ttf diff --git a/apps/aris-client/assets/fonts/Inter_300Light_Italic.ttf b/apps/aelis-client/assets/fonts/Inter_300Light_Italic.ttf similarity index 100% rename from apps/aris-client/assets/fonts/Inter_300Light_Italic.ttf rename to apps/aelis-client/assets/fonts/Inter_300Light_Italic.ttf diff --git a/apps/aris-client/assets/fonts/Inter_400Regular.ttf b/apps/aelis-client/assets/fonts/Inter_400Regular.ttf similarity index 100% rename from apps/aris-client/assets/fonts/Inter_400Regular.ttf rename to apps/aelis-client/assets/fonts/Inter_400Regular.ttf diff --git a/apps/aris-client/assets/fonts/Inter_400Regular_Italic.ttf b/apps/aelis-client/assets/fonts/Inter_400Regular_Italic.ttf similarity index 100% rename from apps/aris-client/assets/fonts/Inter_400Regular_Italic.ttf rename to apps/aelis-client/assets/fonts/Inter_400Regular_Italic.ttf diff --git a/apps/aris-client/assets/fonts/Inter_500Medium.ttf b/apps/aelis-client/assets/fonts/Inter_500Medium.ttf similarity index 100% rename from apps/aris-client/assets/fonts/Inter_500Medium.ttf rename to apps/aelis-client/assets/fonts/Inter_500Medium.ttf diff --git a/apps/aris-client/assets/fonts/Inter_500Medium_Italic.ttf b/apps/aelis-client/assets/fonts/Inter_500Medium_Italic.ttf similarity index 100% rename from apps/aris-client/assets/fonts/Inter_500Medium_Italic.ttf rename to apps/aelis-client/assets/fonts/Inter_500Medium_Italic.ttf diff --git a/apps/aris-client/assets/fonts/Inter_600SemiBold.ttf b/apps/aelis-client/assets/fonts/Inter_600SemiBold.ttf similarity index 100% rename from apps/aris-client/assets/fonts/Inter_600SemiBold.ttf rename to apps/aelis-client/assets/fonts/Inter_600SemiBold.ttf diff --git a/apps/aris-client/assets/fonts/Inter_600SemiBold_Italic.ttf b/apps/aelis-client/assets/fonts/Inter_600SemiBold_Italic.ttf similarity index 100% rename from apps/aris-client/assets/fonts/Inter_600SemiBold_Italic.ttf rename to apps/aelis-client/assets/fonts/Inter_600SemiBold_Italic.ttf diff --git a/apps/aris-client/assets/fonts/Inter_700Bold.ttf b/apps/aelis-client/assets/fonts/Inter_700Bold.ttf similarity index 100% rename from apps/aris-client/assets/fonts/Inter_700Bold.ttf rename to apps/aelis-client/assets/fonts/Inter_700Bold.ttf diff --git a/apps/aris-client/assets/fonts/Inter_700Bold_Italic.ttf b/apps/aelis-client/assets/fonts/Inter_700Bold_Italic.ttf similarity index 100% rename from apps/aris-client/assets/fonts/Inter_700Bold_Italic.ttf rename to apps/aelis-client/assets/fonts/Inter_700Bold_Italic.ttf diff --git a/apps/aris-client/assets/fonts/Inter_800ExtraBold.ttf b/apps/aelis-client/assets/fonts/Inter_800ExtraBold.ttf similarity index 100% rename from apps/aris-client/assets/fonts/Inter_800ExtraBold.ttf rename to apps/aelis-client/assets/fonts/Inter_800ExtraBold.ttf diff --git a/apps/aris-client/assets/fonts/Inter_800ExtraBold_Italic.ttf b/apps/aelis-client/assets/fonts/Inter_800ExtraBold_Italic.ttf similarity index 100% rename from apps/aris-client/assets/fonts/Inter_800ExtraBold_Italic.ttf rename to apps/aelis-client/assets/fonts/Inter_800ExtraBold_Italic.ttf diff --git a/apps/aris-client/assets/fonts/Inter_900Black.ttf b/apps/aelis-client/assets/fonts/Inter_900Black.ttf similarity index 100% rename from apps/aris-client/assets/fonts/Inter_900Black.ttf rename to apps/aelis-client/assets/fonts/Inter_900Black.ttf diff --git a/apps/aris-client/assets/fonts/Inter_900Black_Italic.ttf b/apps/aelis-client/assets/fonts/Inter_900Black_Italic.ttf similarity index 100% rename from apps/aris-client/assets/fonts/Inter_900Black_Italic.ttf rename to apps/aelis-client/assets/fonts/Inter_900Black_Italic.ttf diff --git a/apps/aris-client/assets/fonts/SourceSerif4_200ExtraLight.ttf b/apps/aelis-client/assets/fonts/SourceSerif4_200ExtraLight.ttf similarity index 100% rename from apps/aris-client/assets/fonts/SourceSerif4_200ExtraLight.ttf rename to apps/aelis-client/assets/fonts/SourceSerif4_200ExtraLight.ttf diff --git a/apps/aris-client/assets/fonts/SourceSerif4_200ExtraLight_Italic.ttf b/apps/aelis-client/assets/fonts/SourceSerif4_200ExtraLight_Italic.ttf similarity index 100% rename from apps/aris-client/assets/fonts/SourceSerif4_200ExtraLight_Italic.ttf rename to apps/aelis-client/assets/fonts/SourceSerif4_200ExtraLight_Italic.ttf diff --git a/apps/aris-client/assets/fonts/SourceSerif4_300Light.ttf b/apps/aelis-client/assets/fonts/SourceSerif4_300Light.ttf similarity index 100% rename from apps/aris-client/assets/fonts/SourceSerif4_300Light.ttf rename to apps/aelis-client/assets/fonts/SourceSerif4_300Light.ttf diff --git a/apps/aris-client/assets/fonts/SourceSerif4_300Light_Italic.ttf b/apps/aelis-client/assets/fonts/SourceSerif4_300Light_Italic.ttf similarity index 100% rename from apps/aris-client/assets/fonts/SourceSerif4_300Light_Italic.ttf rename to apps/aelis-client/assets/fonts/SourceSerif4_300Light_Italic.ttf diff --git a/apps/aris-client/assets/fonts/SourceSerif4_400Regular.ttf b/apps/aelis-client/assets/fonts/SourceSerif4_400Regular.ttf similarity index 100% rename from apps/aris-client/assets/fonts/SourceSerif4_400Regular.ttf rename to apps/aelis-client/assets/fonts/SourceSerif4_400Regular.ttf diff --git a/apps/aris-client/assets/fonts/SourceSerif4_400Regular_Italic.ttf b/apps/aelis-client/assets/fonts/SourceSerif4_400Regular_Italic.ttf similarity index 100% rename from apps/aris-client/assets/fonts/SourceSerif4_400Regular_Italic.ttf rename to apps/aelis-client/assets/fonts/SourceSerif4_400Regular_Italic.ttf diff --git a/apps/aris-client/assets/fonts/SourceSerif4_500Medium.ttf b/apps/aelis-client/assets/fonts/SourceSerif4_500Medium.ttf similarity index 100% rename from apps/aris-client/assets/fonts/SourceSerif4_500Medium.ttf rename to apps/aelis-client/assets/fonts/SourceSerif4_500Medium.ttf diff --git a/apps/aris-client/assets/fonts/SourceSerif4_500Medium_Italic.ttf b/apps/aelis-client/assets/fonts/SourceSerif4_500Medium_Italic.ttf similarity index 100% rename from apps/aris-client/assets/fonts/SourceSerif4_500Medium_Italic.ttf rename to apps/aelis-client/assets/fonts/SourceSerif4_500Medium_Italic.ttf diff --git a/apps/aris-client/assets/fonts/SourceSerif4_600SemiBold.ttf b/apps/aelis-client/assets/fonts/SourceSerif4_600SemiBold.ttf similarity index 100% rename from apps/aris-client/assets/fonts/SourceSerif4_600SemiBold.ttf rename to apps/aelis-client/assets/fonts/SourceSerif4_600SemiBold.ttf diff --git a/apps/aris-client/assets/fonts/SourceSerif4_600SemiBold_Italic.ttf b/apps/aelis-client/assets/fonts/SourceSerif4_600SemiBold_Italic.ttf similarity index 100% rename from apps/aris-client/assets/fonts/SourceSerif4_600SemiBold_Italic.ttf rename to apps/aelis-client/assets/fonts/SourceSerif4_600SemiBold_Italic.ttf diff --git a/apps/aris-client/assets/fonts/SourceSerif4_700Bold.ttf b/apps/aelis-client/assets/fonts/SourceSerif4_700Bold.ttf similarity index 100% rename from apps/aris-client/assets/fonts/SourceSerif4_700Bold.ttf rename to apps/aelis-client/assets/fonts/SourceSerif4_700Bold.ttf diff --git a/apps/aris-client/assets/fonts/SourceSerif4_700Bold_Italic.ttf b/apps/aelis-client/assets/fonts/SourceSerif4_700Bold_Italic.ttf similarity index 100% rename from apps/aris-client/assets/fonts/SourceSerif4_700Bold_Italic.ttf rename to apps/aelis-client/assets/fonts/SourceSerif4_700Bold_Italic.ttf diff --git a/apps/aris-client/assets/fonts/SourceSerif4_800ExtraBold.ttf b/apps/aelis-client/assets/fonts/SourceSerif4_800ExtraBold.ttf similarity index 100% rename from apps/aris-client/assets/fonts/SourceSerif4_800ExtraBold.ttf rename to apps/aelis-client/assets/fonts/SourceSerif4_800ExtraBold.ttf diff --git a/apps/aris-client/assets/fonts/SourceSerif4_800ExtraBold_Italic.ttf b/apps/aelis-client/assets/fonts/SourceSerif4_800ExtraBold_Italic.ttf similarity index 100% rename from apps/aris-client/assets/fonts/SourceSerif4_800ExtraBold_Italic.ttf rename to apps/aelis-client/assets/fonts/SourceSerif4_800ExtraBold_Italic.ttf diff --git a/apps/aris-client/assets/fonts/SourceSerif4_900Black.ttf b/apps/aelis-client/assets/fonts/SourceSerif4_900Black.ttf similarity index 100% rename from apps/aris-client/assets/fonts/SourceSerif4_900Black.ttf rename to apps/aelis-client/assets/fonts/SourceSerif4_900Black.ttf diff --git a/apps/aris-client/assets/fonts/SourceSerif4_900Black_Italic.ttf b/apps/aelis-client/assets/fonts/SourceSerif4_900Black_Italic.ttf similarity index 100% rename from apps/aris-client/assets/fonts/SourceSerif4_900Black_Italic.ttf rename to apps/aelis-client/assets/fonts/SourceSerif4_900Black_Italic.ttf diff --git a/apps/aris-client/assets/images/android-icon-background.png b/apps/aelis-client/assets/images/android-icon-background.png similarity index 100% rename from apps/aris-client/assets/images/android-icon-background.png rename to apps/aelis-client/assets/images/android-icon-background.png diff --git a/apps/aris-client/assets/images/android-icon-foreground.png b/apps/aelis-client/assets/images/android-icon-foreground.png similarity index 100% rename from apps/aris-client/assets/images/android-icon-foreground.png rename to apps/aelis-client/assets/images/android-icon-foreground.png diff --git a/apps/aris-client/assets/images/android-icon-monochrome.png b/apps/aelis-client/assets/images/android-icon-monochrome.png similarity index 100% rename from apps/aris-client/assets/images/android-icon-monochrome.png rename to apps/aelis-client/assets/images/android-icon-monochrome.png diff --git a/apps/aris-client/assets/images/favicon.png b/apps/aelis-client/assets/images/favicon.png similarity index 100% rename from apps/aris-client/assets/images/favicon.png rename to apps/aelis-client/assets/images/favicon.png diff --git a/apps/aris-client/assets/images/icon.png b/apps/aelis-client/assets/images/icon.png similarity index 100% rename from apps/aris-client/assets/images/icon.png rename to apps/aelis-client/assets/images/icon.png diff --git a/apps/aris-client/assets/images/partial-react-logo.png b/apps/aelis-client/assets/images/partial-react-logo.png similarity index 100% rename from apps/aris-client/assets/images/partial-react-logo.png rename to apps/aelis-client/assets/images/partial-react-logo.png diff --git a/apps/aris-client/assets/images/react-logo.png b/apps/aelis-client/assets/images/react-logo.png similarity index 100% rename from apps/aris-client/assets/images/react-logo.png rename to apps/aelis-client/assets/images/react-logo.png diff --git a/apps/aris-client/assets/images/react-logo@2x.png b/apps/aelis-client/assets/images/react-logo@2x.png similarity index 100% rename from apps/aris-client/assets/images/react-logo@2x.png rename to apps/aelis-client/assets/images/react-logo@2x.png diff --git a/apps/aris-client/assets/images/react-logo@3x.png b/apps/aelis-client/assets/images/react-logo@3x.png similarity index 100% rename from apps/aris-client/assets/images/react-logo@3x.png rename to apps/aelis-client/assets/images/react-logo@3x.png diff --git a/apps/aris-client/assets/images/splash-icon.png b/apps/aelis-client/assets/images/splash-icon.png similarity index 100% rename from apps/aris-client/assets/images/splash-icon.png rename to apps/aelis-client/assets/images/splash-icon.png diff --git a/apps/aris-client/eas.json b/apps/aelis-client/eas.json similarity index 100% rename from apps/aris-client/eas.json rename to apps/aelis-client/eas.json diff --git a/apps/aris-client/eslint.config.js b/apps/aelis-client/eslint.config.js similarity index 100% rename from apps/aris-client/eslint.config.js rename to apps/aelis-client/eslint.config.js diff --git a/apps/aris-client/package.json b/apps/aelis-client/package.json similarity index 98% rename from apps/aris-client/package.json rename to apps/aelis-client/package.json index 9a56b8b..626730e 100644 --- a/apps/aris-client/package.json +++ b/apps/aelis-client/package.json @@ -1,5 +1,5 @@ { - "name": "aris-client", + "name": "aelis-client", "version": "1.0.0", "private": true, "main": "expo-router/entry", diff --git a/apps/aris-client/scripts/dev-proxy.ts b/apps/aelis-client/scripts/dev-proxy.ts similarity index 100% rename from apps/aris-client/scripts/dev-proxy.ts rename to apps/aelis-client/scripts/dev-proxy.ts diff --git a/apps/aris-client/scripts/open-debugger.ts b/apps/aelis-client/scripts/open-debugger.ts similarity index 100% rename from apps/aris-client/scripts/open-debugger.ts rename to apps/aelis-client/scripts/open-debugger.ts diff --git a/apps/aris-client/scripts/reset-project.js b/apps/aelis-client/scripts/reset-project.js similarity index 100% rename from apps/aris-client/scripts/reset-project.js rename to apps/aelis-client/scripts/reset-project.js diff --git a/apps/aris-client/scripts/run-dev-server.sh b/apps/aelis-client/scripts/run-dev-server.sh similarity index 100% rename from apps/aris-client/scripts/run-dev-server.sh rename to apps/aelis-client/scripts/run-dev-server.sh diff --git a/apps/aris-client/src/app/(tabs)/_layout.tsx b/apps/aelis-client/src/app/(tabs)/_layout.tsx similarity index 100% rename from apps/aris-client/src/app/(tabs)/_layout.tsx rename to apps/aelis-client/src/app/(tabs)/_layout.tsx diff --git a/apps/aris-client/src/app/(tabs)/explore.tsx b/apps/aelis-client/src/app/(tabs)/explore.tsx similarity index 100% rename from apps/aris-client/src/app/(tabs)/explore.tsx rename to apps/aelis-client/src/app/(tabs)/explore.tsx diff --git a/apps/aris-client/src/app/(tabs)/index.tsx b/apps/aelis-client/src/app/(tabs)/index.tsx similarity index 100% rename from apps/aris-client/src/app/(tabs)/index.tsx rename to apps/aelis-client/src/app/(tabs)/index.tsx diff --git a/apps/aris-client/src/app/_layout.tsx b/apps/aelis-client/src/app/_layout.tsx similarity index 100% rename from apps/aris-client/src/app/_layout.tsx rename to apps/aelis-client/src/app/_layout.tsx diff --git a/apps/aris-client/src/app/modal.tsx b/apps/aelis-client/src/app/modal.tsx similarity index 100% rename from apps/aris-client/src/app/modal.tsx rename to apps/aelis-client/src/app/modal.tsx diff --git a/apps/aris-client/src/components/external-link.tsx b/apps/aelis-client/src/components/external-link.tsx similarity index 100% rename from apps/aris-client/src/components/external-link.tsx rename to apps/aelis-client/src/components/external-link.tsx diff --git a/apps/aris-client/src/components/haptic-tab.tsx b/apps/aelis-client/src/components/haptic-tab.tsx similarity index 100% rename from apps/aris-client/src/components/haptic-tab.tsx rename to apps/aelis-client/src/components/haptic-tab.tsx diff --git a/apps/aris-client/src/components/hello-wave.tsx b/apps/aelis-client/src/components/hello-wave.tsx similarity index 100% rename from apps/aris-client/src/components/hello-wave.tsx rename to apps/aelis-client/src/components/hello-wave.tsx diff --git a/apps/aris-client/src/components/parallax-scroll-view.tsx b/apps/aelis-client/src/components/parallax-scroll-view.tsx similarity index 100% rename from apps/aris-client/src/components/parallax-scroll-view.tsx rename to apps/aelis-client/src/components/parallax-scroll-view.tsx diff --git a/apps/aris-client/src/components/themed-text.tsx b/apps/aelis-client/src/components/themed-text.tsx similarity index 100% rename from apps/aris-client/src/components/themed-text.tsx rename to apps/aelis-client/src/components/themed-text.tsx diff --git a/apps/aris-client/src/components/themed-view.tsx b/apps/aelis-client/src/components/themed-view.tsx similarity index 100% rename from apps/aris-client/src/components/themed-view.tsx rename to apps/aelis-client/src/components/themed-view.tsx diff --git a/apps/aris-client/src/components/ui/collapsible.tsx b/apps/aelis-client/src/components/ui/collapsible.tsx similarity index 100% rename from apps/aris-client/src/components/ui/collapsible.tsx rename to apps/aelis-client/src/components/ui/collapsible.tsx diff --git a/apps/aris-client/src/components/ui/icon-symbol.ios.tsx b/apps/aelis-client/src/components/ui/icon-symbol.ios.tsx similarity index 100% rename from apps/aris-client/src/components/ui/icon-symbol.ios.tsx rename to apps/aelis-client/src/components/ui/icon-symbol.ios.tsx diff --git a/apps/aris-client/src/components/ui/icon-symbol.tsx b/apps/aelis-client/src/components/ui/icon-symbol.tsx similarity index 100% rename from apps/aris-client/src/components/ui/icon-symbol.tsx rename to apps/aelis-client/src/components/ui/icon-symbol.tsx diff --git a/apps/aris-client/src/constants/theme.ts b/apps/aelis-client/src/constants/theme.ts similarity index 100% rename from apps/aris-client/src/constants/theme.ts rename to apps/aelis-client/src/constants/theme.ts diff --git a/apps/aris-client/src/hooks/use-color-scheme.ts b/apps/aelis-client/src/hooks/use-color-scheme.ts similarity index 100% rename from apps/aris-client/src/hooks/use-color-scheme.ts rename to apps/aelis-client/src/hooks/use-color-scheme.ts diff --git a/apps/aris-client/src/hooks/use-color-scheme.web.ts b/apps/aelis-client/src/hooks/use-color-scheme.web.ts similarity index 100% rename from apps/aris-client/src/hooks/use-color-scheme.web.ts rename to apps/aelis-client/src/hooks/use-color-scheme.web.ts diff --git a/apps/aris-client/src/hooks/use-theme-color.ts b/apps/aelis-client/src/hooks/use-theme-color.ts similarity index 100% rename from apps/aris-client/src/hooks/use-theme-color.ts rename to apps/aelis-client/src/hooks/use-theme-color.ts diff --git a/apps/aris-client/tsconfig.json b/apps/aelis-client/tsconfig.json similarity index 100% rename from apps/aris-client/tsconfig.json rename to apps/aelis-client/tsconfig.json diff --git a/bun.lock b/bun.lock index 9054a04..cb9743f 100644 --- a/bun.lock +++ b/bun.lock @@ -13,17 +13,14 @@ "typescript": "^5", }, }, - "apps/aris-backend": { - "name": "@aris/backend", + "apps/aelis-backend": { + "name": "@aelis/backend", "version": "0.0.0", "dependencies": { - "@aris/core": "workspace:*", - "@aris/source-caldav": "workspace:*", - "@aris/source-google-calendar": "workspace:*", - "@aris/source-location": "workspace:*", - "@aris/source-tfl": "workspace:*", - "@aris/source-weatherkit": "workspace:*", - "@openrouter/sdk": "^0.9.11", + "@aelis/core": "workspace:*", + "@aelis/source-location": "workspace:*", + "@aelis/source-tfl": "workspace:*", + "@aelis/source-weatherkit": "workspace:*", "arktype": "^2.1.29", "better-auth": "^1", "hono": "^4", @@ -33,8 +30,8 @@ "@types/pg": "^8", }, }, - "apps/aris-client": { - "name": "aris-client", + "apps/aelis-client": { + "name": "aelis-client", "version": "1.0.0", "dependencies": { "@expo-google-fonts/inter": "^0.4.2", @@ -77,72 +74,72 @@ "typescript": "~5.9.2", }, }, - "packages/aris-core": { - "name": "@aris/core", + "packages/aelis-core": { + "name": "@aelis/core", "version": "0.0.0", "dependencies": { "@standard-schema/spec": "^1.1.0", }, }, - "packages/aris-data-source-weatherkit": { - "name": "@aris/data-source-weatherkit", + "packages/aelis-data-source-weatherkit": { + "name": "@aelis/data-source-weatherkit", "version": "0.0.0", "dependencies": { - "@aris/core": "workspace:*", + "@aelis/core": "workspace:*", "arktype": "^2.1.0", }, }, - "packages/aris-feed-enhancers": { - "name": "@aris/feed-enhancers", + "packages/aelis-feed-enhancers": { + "name": "@aelis/feed-enhancers", "version": "0.0.0", "dependencies": { - "@aris/core": "workspace:*", - "@aris/source-caldav": "workspace:*", - "@aris/source-google-calendar": "workspace:*", - "@aris/source-tfl": "workspace:*", - "@aris/source-weatherkit": "workspace:*", + "@aelis/core": "workspace:*", + "@aelis/source-caldav": "workspace:*", + "@aelis/source-google-calendar": "workspace:*", + "@aelis/source-tfl": "workspace:*", + "@aelis/source-weatherkit": "workspace:*", }, }, - "packages/aris-source-caldav": { - "name": "@aris/source-caldav", + "packages/aelis-source-caldav": { + "name": "@aelis/source-caldav", "version": "0.0.0", "dependencies": { - "@aris/core": "workspace:*", + "@aelis/core": "workspace:*", "ical.js": "^2.1.0", "tsdav": "^2.1.7", }, }, - "packages/aris-source-google-calendar": { - "name": "@aris/source-google-calendar", + "packages/aelis-source-google-calendar": { + "name": "@aelis/source-google-calendar", "version": "0.0.0", "dependencies": { - "@aris/core": "workspace:*", + "@aelis/core": "workspace:*", "arktype": "^2.1.0", }, }, - "packages/aris-source-location": { - "name": "@aris/source-location", + "packages/aelis-source-location": { + "name": "@aelis/source-location", "version": "0.0.0", "dependencies": { - "@aris/core": "workspace:*", + "@aelis/core": "workspace:*", "arktype": "^2.1.0", }, }, - "packages/aris-source-tfl": { - "name": "@aris/source-tfl", + "packages/aelis-source-tfl": { + "name": "@aelis/source-tfl", "version": "0.0.0", "dependencies": { - "@aris/core": "workspace:*", - "@aris/source-location": "workspace:*", + "@aelis/core": "workspace:*", + "@aelis/source-location": "workspace:*", "arktype": "^2.1.0", }, }, - "packages/aris-source-weatherkit": { - "name": "@aris/source-weatherkit", + "packages/aelis-source-weatherkit": { + "name": "@aelis/source-weatherkit", "version": "0.0.0", "dependencies": { - "@aris/core": "workspace:*", - "@aris/source-location": "workspace:*", + "@aelis/core": "workspace:*", + "@aelis/source-location": "workspace:*", "arktype": "^2.1.0", }, }, @@ -150,26 +147,26 @@ "packages": { "@0no-co/graphql.web": ["@0no-co/graphql.web@1.2.0", "", { "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" }, "optionalPeers": ["graphql"] }, "sha512-/1iHy9TTr63gE1YcR5idjx8UREz1s0kFhydf3bBLCXyqjhkIc6igAzTOx3zPifCwFR87tsh/4Pa9cNts6d2otw=="], + "@aelis/backend": ["@aelis/backend@workspace:apps/aelis-backend"], + + "@aelis/core": ["@aelis/core@workspace:packages/aelis-core"], + + "@aelis/data-source-weatherkit": ["@aelis/data-source-weatherkit@workspace:packages/aelis-data-source-weatherkit"], + + "@aelis/feed-enhancers": ["@aelis/feed-enhancers@workspace:packages/aelis-feed-enhancers"], + + "@aelis/source-caldav": ["@aelis/source-caldav@workspace:packages/aelis-source-caldav"], + + "@aelis/source-google-calendar": ["@aelis/source-google-calendar@workspace:packages/aelis-source-google-calendar"], + + "@aelis/source-location": ["@aelis/source-location@workspace:packages/aelis-source-location"], + + "@aelis/source-tfl": ["@aelis/source-tfl@workspace:packages/aelis-source-tfl"], + + "@aelis/source-weatherkit": ["@aelis/source-weatherkit@workspace:packages/aelis-source-weatherkit"], + "@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="], - "@aris/backend": ["@aris/backend@workspace:apps/aris-backend"], - - "@aris/core": ["@aris/core@workspace:packages/aris-core"], - - "@aris/data-source-weatherkit": ["@aris/data-source-weatherkit@workspace:packages/aris-data-source-weatherkit"], - - "@aris/feed-enhancers": ["@aris/feed-enhancers@workspace:packages/aris-feed-enhancers"], - - "@aris/source-caldav": ["@aris/source-caldav@workspace:packages/aris-source-caldav"], - - "@aris/source-google-calendar": ["@aris/source-google-calendar@workspace:packages/aris-source-google-calendar"], - - "@aris/source-location": ["@aris/source-location@workspace:packages/aris-source-location"], - - "@aris/source-tfl": ["@aris/source-tfl@workspace:packages/aris-source-tfl"], - - "@aris/source-weatherkit": ["@aris/source-weatherkit@workspace:packages/aris-source-weatherkit"], - "@ark/schema": ["@ark/schema@0.56.0", "", { "dependencies": { "@ark/util": "0.56.0" } }, "sha512-ECg3hox/6Z/nLajxXqNhgPtNdHWC9zNsDyskwO28WinoFEnWow4IsERNz9AnXRhTZJnYIlAJ4uGn3nlLk65vZA=="], "@ark/util": ["@ark/util@0.56.0", "", {}, "sha512-BghfRC8b9pNs3vBoDJhcta0/c1J1rsoS1+HgVUreMFPdhz/CRAKReAu57YEllNaSy98rWAdY1gE+gFup7OXpgA=="], @@ -546,8 +543,6 @@ "@oclif/screen": ["@oclif/screen@3.0.8", "", {}, "sha512-yx6KAqlt3TAHBduS2fMQtJDL2ufIHnDRArrJEOoTTuizxqmjLT+psGYOHpmMl3gvQpFJ11Hs76guUUktzAF9Bg=="], - "@openrouter/sdk": ["@openrouter/sdk@0.9.11", "", { "dependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-BgFu6NcIJO4a9aVjr04y3kZ8pyM71j15I+bzfVAGEvxnj+KQNIkBYQGgwrG3D+aT1QpDKLki8btcQmpaxUas6A=="], - "@oxfmt/darwin-arm64": ["@oxfmt/darwin-arm64@0.24.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-aYXuGf/yq8nsyEcHindGhiz9I+GEqLkVq8CfPbd+6VE259CpPEH+CaGHEO1j6vIOmNr8KHRq+IAjeRO2uJpb8A=="], "@oxfmt/darwin-x64": ["@oxfmt/darwin-x64@0.24.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-vs3b8Bs53hbiNvcNeBilzE/+IhDTWKjSBB3v/ztr664nZk65j0xr+5IHMBNz3CFppmX7o/aBta2PxY+t+4KoPg=="], @@ -828,6 +823,8 @@ "acorn-walk": ["acorn-walk@8.3.4", "", { "dependencies": { "acorn": "^8.11.0" } }, "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g=="], + "aelis-client": ["aelis-client@workspace:apps/aelis-client"], + "agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], "ajv": ["ajv@8.11.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" } }, "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg=="], @@ -854,8 +851,6 @@ "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="], - "aris-client": ["aris-client@workspace:apps/aris-client"], - "arkregex": ["arkregex@0.0.5", "", { "dependencies": { "@ark/util": "0.56.0" } }, "sha512-ncYjBdLlh5/QnVsAA8De16Tc9EqmYM7y/WU9j+236KcyYNUXogpz3sC4ATIZYzzLxwI+0sEOaQLEmLmRleaEXw=="], "arktype": ["arktype@2.1.29", "", { "dependencies": { "@ark/schema": "0.56.0", "@ark/util": "0.56.0", "arkregex": "0.0.5" } }, "sha512-jyfKk4xIOzvYNayqnD8ZJQqOwcrTOUbIU4293yrzAjA3O1dWh61j71ArMQ6tS/u4pD7vabSPe7nG3RCyoXW6RQ=="], diff --git a/docs/ai-agent-ideas.md b/docs/ai-agent-ideas.md index 5437e85..140f7d4 100644 --- a/docs/ai-agent-ideas.md +++ b/docs/ai-agent-ideas.md @@ -1,4 +1,4 @@ -# ARIS Agent Vision +# AELIS Agent Vision ## What We're Building @@ -43,7 +43,7 @@ Sources → Source Graph → FeedEngine The "agents" in this doc describe *behaviors*, not separate running processes. A human PA is one person — they don't have a "calendar agent" and a "follow-up agent" in their head. They look at your whole situation and act on whatever matters. -ARIS works the same way. One LLM harness receives all feed items, all context, all user memory, and all available tools. It returns a single `FeedEnhancement`. Every behavior (preparation, follow-up, anomaly detection, tone adjustment, cross-source reasoning) is an instruction in the system prompt, not a separate agent. +AELIS works the same way. One LLM harness receives all feed items, all context, all user memory, and all available tools. It returns a single `FeedEnhancement`. Every behavior (preparation, follow-up, anomaly detection, tone adjustment, cross-source reasoning) is an instruction in the system prompt, not a separate agent. The advantage: the LLM sees everything at once. It doesn't need agent-to-agent communication because there's no separation. It naturally connects "rain at 6pm" with "dinner at 7pm" because both are in the same context window. @@ -100,9 +100,9 @@ const agentContext = new AgentContext({ }) ``` -This keeps the engine usable as a pure feed library without the AI layer — useful for testing and for anyone who wants `aris-core` without the agent features. +This keeps the engine usable as a pure feed library without the AI layer — useful for testing and for anyone who wants `aelis-core` without the agent features. -**Implementation:** `AgentContext` lives in a new package (`packages/aris-agent-context` or alongside the enhancement layer). It wraps a `FeedEngine` instance and the persistence stores. The ring buffer for recent items (last N=10 refreshes) lives here, not on the engine — `AgentContext` subscribes to the engine via `engine.subscribe()` and accumulates snapshots. The `itemsFrom(sourceId)` method filters the ring buffer by item type prefix. This is Phase 0 work. +**Implementation:** `AgentContext` lives in a new package (`packages/aelis-agent-context` or alongside the enhancement layer). It wraps a `FeedEngine` instance and the persistence stores. The ring buffer for recent items (last N=10 refreshes) lives here, not on the engine — `AgentContext` subscribes to the engine via `engine.subscribe()` and accumulates snapshots. The `itemsFrom(sourceId)` method filters the ring buffer by item type prefix. This is Phase 0 work. --- @@ -199,7 +199,7 @@ interface UserAffinityModel { } ``` -**Implementation:** Build these as individual `FeedPostProcessor` implementations in a `packages/aris-feed-enhancers` package. Each enhancer is a pure function: items in, enhancement out. Start with three: `TimeOfDayEnhancer`, `CalendarGroupingEnhancer`, `UserAffinityEnhancer`. The affinity model needs a persistence layer — a simple JSON blob per user stored in the database, updated on each dismiss/tap event sent from the client via the WebSocket `feed.interact` method (new JSON-RPC method to add). Time buckets: morning (6-12), afternoon (12-17), evening (17-22), night (22-6). +**Implementation:** Build these as individual `FeedPostProcessor` implementations in a `packages/aelis-feed-enhancers` package. Each enhancer is a pure function: items in, enhancement out. Start with three: `TimeOfDayEnhancer`, `CalendarGroupingEnhancer`, `UserAffinityEnhancer`. The affinity model needs a persistence layer — a simple JSON blob per user stored in the database, updated on each dismiss/tap event sent from the client via the WebSocket `feed.interact` method (new JSON-RPC method to add). Time buckets: morning (6-12), afternoon (12-17), evening (17-22), night (22-6). ### LLM-Powered Enhancements @@ -286,7 +286,7 @@ These enhancements are delivered via slots on source-produced feed items. Each s ## Emergent Behavior -Most of what makes ARIS feel like a person isn't hardcoded. It emerges from giving the LLM the right context and the right prompt. +Most of what makes AELIS feel like a person isn't hardcoded. It emerges from giving the LLM the right context and the right prompt. ### What's hardcoded vs. what's emergent @@ -338,10 +338,10 @@ These are ~10 small pure functions. Everything else is the LLM reading context a ### The system prompt -The core of ARIS's behavior is one prompt. Roughly: +The core of AELIS's behavior is one prompt. Roughly: ``` -You are ARIS, a personal assistant. Here is everything happening +You are AELIS, a personal assistant. Here is everything happening in the user's life right now: [serialized feed items from all sources] @@ -564,7 +564,7 @@ Surfaces things that break routine, because those are the things you miss. - "Your calendar is empty tomorrow — did you mean to block time?" - "You have 3 meetings that overlap between 2-3pm" -**Implementation:** Mostly rule-based — no LLM needed for detection. Build as a `FeedSource` (`aris.anomaly`) that depends on calendar sources. Maintain a rolling histogram of the user's meeting start times (stored in the preference/memory DB). On each refresh, compare upcoming events against the histogram. Flag events outside 2 standard deviations. Overlap detection is comparing time ranges. "First free afternoon in N weeks" requires storing daily busyness scores. The anomaly items are `FeedItem`s with type `anomaly` — the LLM is only needed to phrase the message naturally, which can be done with simple templates for v1 ("You have a meeting at {time} — that's unusual for you"). +**Implementation:** Mostly rule-based — no LLM needed for detection. Build as a `FeedSource` (`aelis.anomaly`) that depends on calendar sources. Maintain a rolling histogram of the user's meeting start times (stored in the preference/memory DB). On each refresh, compare upcoming events against the histogram. Flag events outside 2 standard deviations. Overlap detection is comparing time ranges. "First free afternoon in N weeks" requires storing daily busyness scores. The anomaly items are `FeedItem`s with type `anomaly` — the LLM is only needed to phrase the message naturally, which can be done with simple templates for v1 ("You have a meeting at {time} — that's unusual for you"). --- @@ -585,7 +585,7 @@ The key difference from task tracking: this catches things that fell through the The realistic v1 has two channels: -1. **ARIS conversations (free, no privacy concerns).** Every conversation flows through the Query Agent. When the user says "I'll send that to Sarah tomorrow," the system extracts the intent (action: send something, person: Sarah, deadline: tomorrow) and stores it. No extra permissions needed — the user is already talking to ARIS. +1. **AELIS conversations (free, no privacy concerns).** Every conversation flows through the Query Agent. When the user says "I'll send that to Sarah tomorrow," the system extracts the intent (action: send something, person: Sarah, deadline: tomorrow) and stores it. No extra permissions needed — the user is already talking to AELIS. 2. **Email scanning (opt-in).** Connect Gmail/Outlook as a source. Scan outbound emails for commitment language: "I'll get back to you," "let me check on that," "I'll send this by Friday." LLM extracts intent + deadline + person. This catches most professional commitments since email is where they're made. Privacy-sensitive — must be explicit opt-in. @@ -595,7 +595,7 @@ Later channels (harder, deferred): meeting transcripts (Otter, Fireflies, Google Surfaces gentle reminders — not nagging, more like "hey, just in case." Learns which follow-ups the user appreciates vs. dismisses. Backs off on topics the user ignores repeatedly. -**Implementation:** Two parts: extraction and surfacing. Extraction runs as a side-effect of the Query Agent — after every conversation turn, pass the user's message through an LLM with a structured output schema: `{ hasCommitment: boolean, action?: string, person?: string, deadline?: string }`. Store extracted commitments in a `commitments` table (user_id, action, person, deadline, status, created_at, dismissed_count). Surfacing is a `FeedSource` (`aris.followup`) that queries the commitments table for items past their deadline or approaching it. If the user dismisses a follow-up, increment `dismissed_count`; stop showing after 3 dismissals. Email scanning (v2) adds a second extraction path: a background job that processes new sent emails through the same LLM extraction. +**Implementation:** Two parts: extraction and surfacing. Extraction runs as a side-effect of the Query Agent — after every conversation turn, pass the user's message through an LLM with a structured output schema: `{ hasCommitment: boolean, action?: string, person?: string, deadline?: string }`. Store extracted commitments in a `commitments` table (user_id, action, person, deadline, status, created_at, dismissed_count). Surfacing is a `FeedSource` (`aelis.followup`) that queries the commitments table for items past their deadline or approaching it. If the user dismisses a follow-up, increment `dismissed_count`; stop showing after 3 dismissals. Email scanning (v2) adds a second extraction path: a background job that processes new sent emails through the same LLM extraction. #### Memory @@ -725,7 +725,7 @@ Beyond frequency, the assistant can understand relationship *dynamics*: - "You've cancelled on Tom three times — he might be feeling deprioritized." - "Your meetings with the design team have been getting longer — they averaged 30 min last month, now they're 50 min." -**Implementation:** Requires a contacts source (Apple Contacts via CardDAV, or Google People API) — build this as a new `FeedSource` that provides contact context (birthdays, anniversaries) to the graph. The social awareness agent is a `FeedSource` (`aris.social`) that depends on the contacts source and calendar sources. Birthday/anniversary detection: compare contact dates against current date, surface items 7 days before. Meeting frequency: query calendar history for events containing a contact's name, compute average interval, flag when current gap exceeds 2x the average. The "Sarah mentioned she's been sick" level requires email/message scanning — defer to v2. For v1, stick to birthdays + meeting frequency, which are purely rule-based. +**Implementation:** Requires a contacts source (Apple Contacts via CardDAV, or Google People API) — build this as a new `FeedSource` that provides contact context (birthdays, anniversaries) to the graph. The social awareness agent is a `FeedSource` (`aelis.social`) that depends on the contacts source and calendar sources. Birthday/anniversary detection: compare contact dates against current date, surface items 7 days before. Meeting frequency: query calendar history for events containing a contact's name, compute average interval, flag when current gap exceeds 2x the average. The "Sarah mentioned she's been sick" level requires email/message scanning — defer to v2. For v1, stick to birthdays + meeting frequency, which are purely rule-based. #### Ambient Context @@ -741,7 +741,7 @@ Monitors the world for things that affect you, beyond weather and location. A human assistant would flag these without being asked. You shouldn't have to go looking for problems. -**Implementation:** A collection of specialized `FeedSource` nodes, each monitoring a specific external signal. Start with what's closest to existing sources: `aris.tfl` already handles transit — extend it to check for planned strikes/closures (TfL API has this data). Package tracking: a new source (`aris.packages`) that polls tracking APIs (Royal Mail, UPS) given tracking numbers extracted from email (requires email source). News: a source (`aris.news`) that uses a news API (NewsAPI, Google News) filtered by user interests from the preference store. Each of these is independent and produces its own feed items. The cross-source connection ("train strike affects your commute") happens in the LLM enhancement layer, not in the source itself. +**Implementation:** A collection of specialized `FeedSource` nodes, each monitoring a specific external signal. Start with what's closest to existing sources: `aelis.tfl` already handles transit — extend it to check for planned strikes/closures (TfL API has this data). Package tracking: a new source (`aelis.packages`) that polls tracking APIs (Royal Mail, UPS) given tracking numbers extracted from email (requires email source). News: a source (`aelis.news`) that uses a news API (NewsAPI, Google News) filtered by user interests from the preference store. Each of these is independent and produces its own feed items. The cross-source connection ("train strike affects your commute") happens in the LLM enhancement layer, not in the source itself. #### Energy Awareness @@ -846,7 +846,7 @@ Reduces notification fatigue while ensuring important items aren't missed. The primary interface. This isn't a feed query tool — it's the person you talk to. -The user should be able to ask ARIS anything they'd ask a knowledgeable friend. Some questions are about their data. Most aren't. +The user should be able to ask AELIS anything they'd ask a knowledgeable friend. Some questions are about their data. Most aren't. **About their life (reads from the source graph):** - "What's on my calendar tomorrow?" @@ -876,7 +876,7 @@ This is also where intent extraction happens for the Gentle Follow-up Agent. Eve #### Web Search -The backbone for general knowledge. Makes ARIS a person you can ask things, not just a dashboard you look at. +The backbone for general knowledge. Makes AELIS a person you can ask things, not just a dashboard you look at. **Reactive (user asks):** - Recipe ideas, how-to questions, factual lookups, recommendations @@ -936,7 +936,7 @@ Handles practical logistics a human assistant would manage. Combines tasks, calendar, location, and business hours. Groups nearby errands. Warns about deadlines. -**Implementation:** A `FeedSource` (`aris.errands`) that depends on a task source (Todoist, Apple Reminders — needs to be built), calendar sources, and location. On each refresh, it queries tasks tagged as errands or with locations, cross-references against calendar free slots and current location, and uses a simple greedy algorithm to suggest optimal windows. Business hours: either hardcode common defaults or use Google Places API for specific venues. For v1, skip route optimization — just identify "you have a gap near this errand's location." The LLM enhancer can phrase the suggestion naturally. Requires a task source to exist first. +**Implementation:** A `FeedSource` (`aelis.errands`) that depends on a task source (Todoist, Apple Reminders — needs to be built), calendar sources, and location. On each refresh, it queries tasks tagged as errands or with locations, cross-references against calendar free slots and current location, and uses a simple greedy algorithm to suggest optimal windows. Business hours: either hardcode common defaults or use Google Places API for specific venues. For v1, skip route optimization — just identify "you have a gap near this errand's location." The LLM enhancer can phrase the suggestion naturally. Requires a task source to exist first. #### Delegation @@ -1012,7 +1012,7 @@ These aren't features — they're qualities that run through everything the assi #### Personality & Voice -A human assistant has a consistent personality. ARIS needs one too. +A human assistant has a consistent personality. AELIS needs one too. The voice should be: warm but not bubbly, concise but not robotic, occasionally witty but never trying too hard. It says "I" not "we." It has opinions when asked ("I'd skip the design sync — you've been to the last 8 and nothing changes") but defers on big decisions. @@ -1128,7 +1128,7 @@ Expose the source graph to the enhancement layer. Without this, every behavior s - Add `FeedEnhancement` type and merge logic in `refresh()` - Remove `priority` from `FeedItem` — ranking is now entirely post-processing - Add `signals` field to `FeedItem` for source-provided hints (optional urgency, time relevance) -- Create `packages/aris-feed-enhancers` for post-processor implementations +- Create `packages/aelis-feed-enhancers` for post-processor implementations - Add `feed.interact` JSON-RPC method for tap/dismiss/dwell events from client - Add `memories` table to database schema (user_id, key, value_json, confidence, updated_at, source) - Add `feed_snapshots` table for routine learning (user_id, items_json, context_json, timestamp) @@ -1139,10 +1139,10 @@ Expose the source graph to the enhancement layer. Without this, every behavior s The minimum for "this is an AI assistant." 1. **Personality spec** — write the voice/tone document included in all LLM calls. ~500 tokens. This shapes everything that follows. -2. **Rule-based post-processors** — `TimeOfDayEnhancer`, `CalendarGroupingEnhancer`, `DeduplicationEnhancer`, silence/"all clear" card logic in `aris-feed-enhancers`. Pure functions, no external dependencies. +2. **Rule-based post-processors** — `TimeOfDayEnhancer`, `CalendarGroupingEnhancer`, `DeduplicationEnhancer`, silence/"all clear" card logic in `aelis-feed-enhancers`. Pure functions, no external dependencies. 3. **Query Agent** — `query.ask` JSON-RPC method, LLM with tool use, conversation history table. Start with a single model (GPT-4.1 mini or Gemini Flash for cost). 4. **Web Search** — Tavily or Brave Search API wrapper, exposed as an LLM tool. Cache layer with TTL. -5. **Daily Briefing** — `aris.briefing` FeedSource, depends on all content sources, runs in morning/evening time windows. +5. **Daily Briefing** — `aelis.briefing` FeedSource, depends on all content sources, runs in morning/evening time windows. 6. **Graceful degradation** — ensure all post-processors and the LLM harness work with any subset of sources connected. ### Phase 2: It Feels Human @@ -1151,7 +1151,7 @@ The features that make people say "whoa." 7. **LLM Enhancement slow path** — background timer, serializes feed + context into prompt, returns `FeedEnhancement`, caches result. This enables card rewriting, cross-source synthesis, tone adjustment, and ambient personality. Include confidence/uncertainty instructions in the prompt. 8. **User Affinity model** — `UserAffinityEnhancer` post-processor + `feed.interact` event handling. Writes to `memories` table. No LLM. -9. **Contextual Preparation** — `aris.preparation` FeedSource, depends on calendar + web search tool. Includes anticipatory logistics and anticipating questions. Cache prep cards per event ID. +9. **Contextual Preparation** — `aelis.preparation` FeedSource, depends on calendar + web search tool. Includes anticipatory logistics and anticipating questions. Cache prep cards per event ID. 10. **Tone & Timing + Temporal Empathy** — post-processor that infers user state, adjusts suppression, sets `notify` flags, holds emotionally heavy items for appropriate windows. 11. **Context Switching Buffers** — rule-based detection of activity transitions, LLM-generated transition cards. @@ -1161,7 +1161,7 @@ The long-term relationship. 12. **Memory store + decay model** — `memories` table with confidence scores, `last_reinforced` timestamps, nightly decay job. Include in all LLM prompts. 13. **Learning from corrections** — correction extraction as Query Agent side-effect, writes to memory with confidence 1.0. -14. **Gentle Follow-up** — intent extraction as Query Agent side-effect, `commitments` table, `aris.followup` FeedSource. +14. **Gentle Follow-up** — intent extraction as Query Agent side-effect, `commitments` table, `aelis.followup` FeedSource. 15. **Routine Learning** — feed snapshot storage, daily summary compression, weekly LLM pattern discovery with dynamic `DiscoveredPattern[]` output. 16. **Social Awareness** — contacts source (CardDAV or Google People API), birthday detection, meeting frequency analysis. @@ -1170,9 +1170,9 @@ The long-term relationship. Background intelligence. 17. **Push notification infrastructure** — Expo push notifications, driven by `notify` flag from Tone & Timing processor. -18. **Ambient Context sources** — extend TfL for planned disruptions, add `aris.packages` (tracking APIs), add `aris.news` (news API filtered by interests). +18. **Ambient Context sources** — extend TfL for planned disruptions, add `aelis.packages` (tracking APIs), add `aelis.news` (news API filtered by interests). 19. **Energy Awareness + Health Nudges** — rule-based detection (meeting density, sedentary time, late nights), LLM-phrased nudge cards with cooldowns. -20. **Anomaly Detection** — `aris.anomaly` FeedSource, meeting time histogram, overlap detection. Mostly rule-based. +20. **Anomaly Detection** — `aelis.anomaly` FeedSource, meeting time histogram, overlap detection. Mostly rule-based. 21. **Cross-Source Reasoning** — handled by LLM enhancement layer with explicit cross-source instructions in prompt. 22. **Celebration** — positive pattern detection in LLM harness, comparison against daily summary baselines, one per day max. 23. **Seasonal Awareness** — static annual events dataset per locale + personal annual patterns from 6+ months of summaries. @@ -1181,11 +1181,11 @@ Background intelligence. The full PA experience. -24. **Task source** — new `aris.tasks` FeedSource (Todoist API or Apple Reminders). Required for Errand & Logistics. +24. **Task source** — new `aelis.tasks` FeedSource (Todoist API or Apple Reminders). Required for Errand & Logistics. 25. **Decision Support** — conflict detection (rule-based) + comparison card generation (LLM). Structured comparison data for client rendering. 26. **Micro-Moments** — gap detection post-processor + LLM micro-briefing generation for 2-10 minute windows. 27. **Financial Awareness** — financial event extraction from email, `financial_events` table, 48-hour reminder post-processor. -28. **Errand & Logistics** — `aris.errands` FeedSource, depends on tasks + calendar + location. Greedy gap-matching algorithm. +28. **Errand & Logistics** — `aelis.errands` FeedSource, depends on tasks + calendar + location. Greedy gap-matching algorithm. 29. **Actions** — extend OAuth scopes for write access, add `actions` field to `FeedItem`, `feed.action` JSON-RPC method, confirmation flow. 30. **Delegation** — extend Query Agent with write tools, `delegation.confirm` notification, confirmation UI on client. @@ -1211,7 +1211,7 @@ The full PA experience. - Feed snapshot storage cost at scale: compress after N days, or summarize and discard? - System prompt size: as behaviors accumulate, the prompt grows. When does it need to be split or dynamically composed? - Personality consistency: how to ensure the voice stays consistent across enhancement runs and query responses? -- Health nudge liability: should ARIS ever comment on health-related patterns, or is that too risky? +- Health nudge liability: should AELIS ever comment on health-related patterns, or is that too risky? - Celebration frequency: how often is encouraging vs. patronizing? - Emotional weight classification: can the LLM reliably assess how stressful a piece of information is? - Multi-device: how to sync seen-item state and hold queues across phone, laptop, watch? diff --git a/docs/architecture-draft.md b/docs/architecture-draft.md index 6429920..3feb49a 100644 --- a/docs/architecture-draft.md +++ b/docs/architecture-draft.md @@ -1,10 +1,10 @@ -# ARIS Architecture Draft +# AELIS Architecture Draft > This is a working draft from initial architecture discussions. Not final documentation. ## Overview -ARIS is an AI-powered personal assistant. The core aggregates data from various sources and compiles a feed of contextually relevant items - similar to Google Now. The feed shows users useful information based on their current context (date, time, location). +AELIS is an AI-powered personal assistant. The core aggregates data from various sources and compiles a feed of contextually relevant items - similar to Google Now. The feed shows users useful information based on their current context (date, time, location). Examples of feed items: @@ -26,7 +26,7 @@ Examples of feed items: ┌─────────────────────────────────────────────────────────────┐ │ Backend │ │ ┌─────────────┐ ┌─────────────┐ │ -│ │ aris-core │ │ Sources │ │ +│ │ aelis-core │ │ Sources │ │ │ │ │ │ (plugins) │ │ │ │ - FeedEngine│◄───│ - Calendar │ │ │ │ - Context │ │ - Weather │ │ @@ -51,7 +51,7 @@ Examples of feed items: └─────────────────────────────────────────────────────────────┘ ``` -## Core Package (`aris-core`) +## Core Package (`aelis-core`) The core is responsible for: @@ -64,7 +64,7 @@ The core is responsible for: - **Context**: Time and location (with accuracy) passed to all sources. Sources can contribute to context (e.g., location source provides coordinates, weather source provides conditions). - **FeedItem**: Has an ID (source-generated, stable), type, timestamp, JSON-serializable data, optional actions, an optional `ui` tree, and optional `slots` for LLM-fillable content. -- **FeedSource**: Interface that first and third parties implement to provide context, feed items, and actions. Uses reverse-domain IDs (e.g., `aris.weather`, `com.spotify`). +- **FeedSource**: Interface that first and third parties implement to provide context, feed items, and actions. Uses reverse-domain IDs (e.g., `aelis.weather`, `com.spotify`). - **FeedEngine**: Orchestrates sources respecting their dependency graph, runs independent sources in parallel, returns items and any errors. Routes action execution to the correct source. ## Data Sources @@ -113,7 +113,7 @@ The UI for feed items is **server-driven**. Sources describe how their items loo ### Two tiers of UI - **Server-driven (default):** Any source can return a `ui` tree. Covers most cards — weather, tasks, alerts, package tracking, news, etc. Simple interactions go through source actions. This is the default path for both first-party and third-party sources. -- **Bespoke native:** For cards that need rich client interaction (gestures, animations, real-time updates), a native React Native component is registered in the json-render component map and referenced by type. Third parties that need this level of richness work with the ARIS team to get it integrated. +- **Bespoke native:** For cards that need rich client interaction (gestures, animations, real-time updates), a native React Native component is registered in the json-render component map and referenced by type. Third parties that need this level of richness work with the AELIS team to get it integrated. ### Why server-driven diff --git a/docs/backend-service-architecture-spec.md b/docs/backend-service-architecture-spec.md index 34ed763..ed385e6 100644 --- a/docs/backend-service-architecture-spec.md +++ b/docs/backend-service-architecture-spec.md @@ -32,7 +32,7 @@ server.ts ## Scope -**Backend only** (`apps/aris-backend`). No changes to `aris-core` or source packages (`packages/aris-source-*`). The `FeedSource` interface and source implementations remain unchanged. +**Backend only** (`apps/aelis-backend`). No changes to `aelis-core` or source packages (`packages/aelis-source-*`). The `FeedSource` interface and source implementations remain unchanged. ## Architectural Options diff --git a/docs/backend-spec.md b/docs/backend-spec.md index 1ab99e4..17d5d59 100644 --- a/docs/backend-spec.md +++ b/docs/backend-spec.md @@ -1,8 +1,8 @@ -# ARIS Backend Specification +# AELIS Backend Specification ## Problem Statement -ARIS needs a backend service that manages per-user FeedEngine instances and delivers real-time feed updates to clients. The backend must handle authentication, maintain WebSocket connections for live updates, and accept context updates (like location) that trigger feed recalculations. +AELIS needs a backend service that manages per-user FeedEngine instances and delivers real-time feed updates to clients. The backend must handle authentication, maintain WebSocket connections for live updates, and accept context updates (like location) that trigger feed recalculations. ## Requirements @@ -105,7 +105,7 @@ All WebSocket communication uses JSON-RPC 2.0. ### Phase 1: Project Setup -1. Create `apps/aris-backend` with Hono +1. Create `apps/aelis-backend` with Hono 2. Configure TypeScript, add dependencies (hono, better-auth, postgres driver) 3. Set up database connection and BetterAuth @@ -152,7 +152,7 @@ All WebSocket communication uses JSON-RPC 2.0. ## Package Structure ``` -apps/aris-backend/ +apps/aelis-backend/ ├── package.json ├── src/ │ ├── index.ts # Entry point, Hono app @@ -177,10 +177,10 @@ apps/aris-backend/ "hono": "^4", "better-auth": "^1", "postgres": "^3", - "@aris/core": "workspace:*", - "@aris/source-location": "workspace:*", - "@aris/source-weatherkit": "workspace:*", - "@aris/data-source-tfl": "workspace:*" + "@aelis/core": "workspace:*", + "@aelis/source-location": "workspace:*", + "@aelis/source-weatherkit": "workspace:*", + "@aelis/data-source-tfl": "workspace:*" } } ``` diff --git a/docs/feed-source-actions-spec.md b/docs/feed-source-actions-spec.md index 66aa00a..bc01525 100644 --- a/docs/feed-source-actions-spec.md +++ b/docs/feed-source-actions-spec.md @@ -6,7 +6,7 @@ ## Scope -**`aris-core` only.** Add action support to `FeedSource` and `FeedItem`. No changes to existing fields or methods — purely additive. +**`aelis-core` only.** Add action support to `FeedSource` and `FeedItem`. No changes to existing fields or methods — purely additive. ## Design @@ -16,7 +16,7 @@ MCP was considered. It doesn't fit because: - MCP resources don't accept input context (FeedSource needs accumulated context as input) - MCP has no structured feed items (priority, timestamp, type) -- MCP's isolation model conflicts with ARIS's dependency graph +- MCP's isolation model conflicts with AELIS's dependency graph - Adding these as MCP extensions would mean the extensions are the entire protocol The interface is designed to be **protocol-compatible** — a future `RemoteFeedSource` adapter can map each field/method to a JSON-RPC operation without changing the interface: @@ -35,20 +35,20 @@ No interface changes needed when the transport layer is built. ### Source ID & Action ID Convention -Source IDs use reverse domain notation. Built-in sources use `aris.`. Third parties use their own domain. +Source IDs use reverse domain notation. Built-in sources use `aelis.`. Third parties use their own domain. Action IDs are descriptive verb-noun pairs in kebab-case, scoped to their source. The globally unique form is `/`. | Source ID | Action IDs | | --------------- | -------------------------------------------------------------- | -| `aris.location` | `update-location` (migrated from `pushLocation()`) | -| `aris.tfl` | `set-lines-of-interest` (migrated from `setLinesOfInterest()`) | -| `aris.weather` | _(none)_ | +| `aelis.location` | `update-location` (migrated from `pushLocation()`) | +| `aelis.tfl` | `set-lines-of-interest` (migrated from `setLinesOfInterest()`) | +| `aelis.weather` | _(none)_ | | `com.spotify` | `play-track`, `pause-playback`, `skip-track`, `like-track` | -| `aris.calendar` | `rsvp`, `create-event` | +| `aelis.calendar` | `rsvp`, `create-event` | | `com.todoist` | `complete-task`, `snooze-task` | -This means existing source packages need their `id` updated (e.g., `"location"` → `"aris.location"`). +This means existing source packages need their `id` updated (e.g., `"location"` → `"aelis.location"`). ### New Types @@ -270,17 +270,17 @@ class SpotifySource implements FeedSource { ## Implementation Steps -1. Create `action.ts` in `aris-core/src` with `ActionDefinition`, `ActionResult`, `ItemAction` +1. Create `action.ts` in `aelis-core/src` with `ActionDefinition`, `ActionResult`, `ItemAction` 2. Add optional `actions` and `executeAction` to `FeedSource` interface in `feed-source.ts` 3. Add optional `actions` field to `FeedItem` interface in `feed.ts` 4. Add `executeAction()` and `listActions()` to `FeedEngine` in `feed-engine.ts` -5. Export new types from `aris-core/index.ts` +5. Export new types from `aelis-core/index.ts` 6. Add tests for `FeedEngine.executeAction()` routing 7. Add tests for `FeedEngine.listActions()` aggregation 8. Add tests for error cases (unknown action, unknown source, source without actions) -9. Update source IDs to reverse-domain format (`"location"` → `"aris.location"`, etc.) across all source packages -10. Migrate `LocationSource.pushLocation()` → action `update-location` on `aris.location` -11. Migrate `TflSource.setLinesOfInterest()` → action `set-lines-of-interest` on `aris.tfl` +9. Update source IDs to reverse-domain format (`"location"` → `"aelis.location"`, etc.) across all source packages +10. Migrate `LocationSource.pushLocation()` → action `update-location` on `aelis.location` +11. Migrate `TflSource.setLinesOfInterest()` → action `set-lines-of-interest` on `aelis.tfl` 12. Add `async listActions() { return {} }` and no-op `executeAction()` to sources without actions (WeatherSource, GoogleCalendarSource, AppleCalendarSource) 13. Update any tests or code referencing old source IDs 14. Run all tests to confirm nothing breaks diff --git a/package.json b/package.json index 58a7844..51d053a 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "aris", + "name": "aelis", "private": true, "workspaces": [ "packages/*", diff --git a/packages/aris-core/README.md b/packages/aelis-core/README.md similarity index 94% rename from packages/aris-core/README.md rename to packages/aelis-core/README.md index 34df5f0..1d7e2e8 100644 --- a/packages/aris-core/README.md +++ b/packages/aelis-core/README.md @@ -1,6 +1,6 @@ -# @aris/core +# @aelis/core -Core orchestration layer for ARIS feed reconciliation. +Core orchestration layer for AELIS feed reconciliation. ## Overview @@ -63,7 +63,7 @@ A source may: Each package exports typed context keys for type-safe access: ```ts -import { contextKey, type ContextKey } from "@aris/core" +import { contextKey, type ContextKey } from "@aelis/core" interface Location { lat: number @@ -78,7 +78,7 @@ export const LocationKey: ContextKey = contextKey("location") ### Define a Context-Only Source ```ts -import type { FeedSource } from "@aris/core" +import type { FeedSource } from "@aelis/core" const locationSource: FeedSource = { id: "location", @@ -104,8 +104,8 @@ const locationSource: FeedSource = { ### Define a Source with Dependencies ```ts -import type { FeedSource, FeedItem } from "@aris/core" -import { contextValue } from "@aris/core" +import type { FeedSource, FeedItem } from "@aelis/core" +import { contextValue } from "@aelis/core" type WeatherItem = FeedItem<"weather", { temp: number; condition: string }> diff --git a/packages/aris-core/package.json b/packages/aelis-core/package.json similarity index 88% rename from packages/aris-core/package.json rename to packages/aelis-core/package.json index 4efcc73..6f970bc 100644 --- a/packages/aris-core/package.json +++ b/packages/aelis-core/package.json @@ -1,5 +1,5 @@ { - "name": "@aris/core", + "name": "@aelis/core", "version": "0.0.0", "type": "module", "main": "src/index.ts", diff --git a/packages/aris-core/src/action.ts b/packages/aelis-core/src/action.ts similarity index 92% rename from packages/aris-core/src/action.ts rename to packages/aelis-core/src/action.ts index 374f089..b26b7b1 100644 --- a/packages/aris-core/src/action.ts +++ b/packages/aelis-core/src/action.ts @@ -5,7 +5,7 @@ import type { StandardSchemaV1 } from "@standard-schema/spec" * * Action IDs use descriptive verb-noun kebab-case (e.g., "update-location", "play-track"). * Combined with the source's reverse-domain ID, they form a globally unique identifier: - * `/` (e.g., "aris.location/update-location"). + * `/` (e.g., "aelis.location/update-location"). */ export class UnknownActionError extends Error { readonly actionId: string diff --git a/packages/aris-core/src/context-bridge.ts b/packages/aelis-core/src/context-bridge.ts similarity index 100% rename from packages/aris-core/src/context-bridge.ts rename to packages/aelis-core/src/context-bridge.ts diff --git a/packages/aris-core/src/context-provider.ts b/packages/aelis-core/src/context-provider.ts similarity index 100% rename from packages/aris-core/src/context-provider.ts rename to packages/aelis-core/src/context-provider.ts diff --git a/packages/aris-core/src/context.test.ts b/packages/aelis-core/src/context.test.ts similarity index 79% rename from packages/aris-core/src/context.test.ts rename to packages/aelis-core/src/context.test.ts index 81ea212..2ef4d45 100644 --- a/packages/aris-core/src/context.test.ts +++ b/packages/aelis-core/src/context.test.ts @@ -12,8 +12,8 @@ interface NextEvent { title: string } -const WeatherKey: ContextKey = contextKey("aris.weather", "current") -const NextEventKey: ContextKey = contextKey("aris.google-calendar", "nextEvent") +const WeatherKey: ContextKey = contextKey("aelis.weather", "current") +const NextEventKey: ContextKey = contextKey("aelis.google-calendar", "nextEvent") describe("Context", () => { describe("get", () => { @@ -66,10 +66,10 @@ describe("Context", () => { }) test("prefix match returns multiple instances", () => { - const workKey = contextKey("aris.google-calendar", "nextEvent", { + const workKey = contextKey("aelis.google-calendar", "nextEvent", { account: "work", }) - const personalKey = contextKey("aris.google-calendar", "nextEvent", { + const personalKey = contextKey("aelis.google-calendar", "nextEvent", { account: "personal", }) @@ -79,7 +79,7 @@ describe("Context", () => { [personalKey, { title: "Dentist" }], ]) - const prefix = contextKey("aris.google-calendar", "nextEvent") + const prefix = contextKey("aelis.google-calendar", "nextEvent") const results = ctx.find(prefix) expect(results).toHaveLength(2) @@ -88,8 +88,8 @@ describe("Context", () => { }) test("prefix match includes exact match and longer keys", () => { - const baseKey = contextKey("aris.google-calendar", "nextEvent") - const instanceKey = contextKey("aris.google-calendar", "nextEvent", { + const baseKey = contextKey("aelis.google-calendar", "nextEvent") + const instanceKey = contextKey("aelis.google-calendar", "nextEvent", { account: "work", }) @@ -104,8 +104,8 @@ describe("Context", () => { }) test("does not match keys that share a string prefix but differ at segment boundary", () => { - const keyA = contextKey("aris.calendar", "next") - const keyB = contextKey("aris.calendar", "nextEvent") + const keyA = contextKey("aelis.calendar", "next") + const keyB = contextKey("aelis.calendar", "nextEvent") const ctx = new Context() ctx.set([ @@ -137,20 +137,20 @@ describe("Context", () => { test("single-segment prefix matches all keys starting with that segment", () => { const ctx = new Context() ctx.set([ - [contextKey("aris.weather", "current"), { temperature: 20 }], - [contextKey("aris.weather", "forecast"), { high: 25 }], - [contextKey("aris.calendar", "nextEvent"), { title: "Meeting" }], + [contextKey("aelis.weather", "current"), { temperature: 20 }], + [contextKey("aelis.weather", "forecast"), { high: 25 }], + [contextKey("aelis.calendar", "nextEvent"), { title: "Meeting" }], ]) - const results = ctx.find(contextKey("aris.weather")) + const results = ctx.find(contextKey("aelis.weather")) expect(results).toHaveLength(2) }) test("does not match shorter keys", () => { const ctx = new Context() - ctx.set([[contextKey("aris.weather"), "short"]]) + ctx.set([[contextKey("aelis.weather"), "short"]]) - const results = ctx.find(contextKey("aris.weather", "current")) + const results = ctx.find(contextKey("aelis.weather", "current")) expect(results).toHaveLength(0) }) diff --git a/packages/aris-core/src/context.ts b/packages/aelis-core/src/context.ts similarity index 98% rename from packages/aris-core/src/context.ts rename to packages/aelis-core/src/context.ts index 958a362..c2cf12d 100644 --- a/packages/aris-core/src/context.ts +++ b/packages/aelis-core/src/context.ts @@ -2,7 +2,7 @@ * Tuple-keyed context system inspired by React Query's query keys. * * Context keys are arrays that form a hierarchy. Sources write to specific - * keys (e.g., ["aris.google-calendar", "nextEvent", { account: "work" }]) + * keys (e.g., ["aelis.google-calendar", "nextEvent", { account: "work" }]) * and consumers can query by exact match or prefix match to get all values * of a given type across source instances. */ diff --git a/packages/aris-core/src/data-source.ts b/packages/aelis-core/src/data-source.ts similarity index 100% rename from packages/aris-core/src/data-source.ts rename to packages/aelis-core/src/data-source.ts diff --git a/packages/aris-core/src/feed-controller.ts b/packages/aelis-core/src/feed-controller.ts similarity index 100% rename from packages/aris-core/src/feed-controller.ts rename to packages/aelis-core/src/feed-controller.ts diff --git a/packages/aris-core/src/feed-engine.test.ts b/packages/aelis-core/src/feed-engine.test.ts similarity index 100% rename from packages/aris-core/src/feed-engine.test.ts rename to packages/aelis-core/src/feed-engine.test.ts diff --git a/packages/aris-core/src/feed-engine.ts b/packages/aelis-core/src/feed-engine.ts similarity index 100% rename from packages/aris-core/src/feed-engine.ts rename to packages/aelis-core/src/feed-engine.ts diff --git a/packages/aris-core/src/feed-post-processor.test.ts b/packages/aelis-core/src/feed-post-processor.test.ts similarity index 99% rename from packages/aris-core/src/feed-post-processor.test.ts rename to packages/aelis-core/src/feed-post-processor.test.ts index 03abd41..da0107d 100644 --- a/packages/aris-core/src/feed-post-processor.test.ts +++ b/packages/aelis-core/src/feed-post-processor.test.ts @@ -42,7 +42,7 @@ function calendarItem(id: string, title: string): CalendarItem { function createWeatherSource(items: WeatherItem[]) { return { - id: "aris.weather", + id: "aelis.weather", ...noActions, async fetchContext() { return null @@ -55,7 +55,7 @@ function createWeatherSource(items: WeatherItem[]) { function createCalendarSource(items: CalendarItem[]) { return { - id: "aris.calendar", + id: "aelis.calendar", ...noActions, async fetchContext() { return null @@ -480,7 +480,7 @@ describe("FeedPostProcessor", () => { let triggerUpdate: ((entries: readonly ContextEntry[]) => void) | null = null const source: FeedSource = { - id: "aris.reactive", + id: "aelis.reactive", ...noActions, async fetchContext() { return null @@ -522,7 +522,7 @@ describe("FeedPostProcessor", () => { let triggerItemsUpdate: ((items: FeedItem[]) => void) | null = null const source: FeedSource = { - id: "aris.reactive", + id: "aelis.reactive", ...noActions, async fetchContext() { return null diff --git a/packages/aris-core/src/feed-post-processor.ts b/packages/aelis-core/src/feed-post-processor.ts similarity index 100% rename from packages/aris-core/src/feed-post-processor.ts rename to packages/aelis-core/src/feed-post-processor.ts diff --git a/packages/aris-core/src/feed-source.test.ts b/packages/aelis-core/src/feed-source.test.ts similarity index 100% rename from packages/aris-core/src/feed-source.test.ts rename to packages/aelis-core/src/feed-source.test.ts diff --git a/packages/aris-core/src/feed-source.ts b/packages/aelis-core/src/feed-source.ts similarity index 98% rename from packages/aris-core/src/feed-source.ts rename to packages/aelis-core/src/feed-source.ts index cb95c31..eae7ed7 100644 --- a/packages/aris-core/src/feed-source.ts +++ b/packages/aelis-core/src/feed-source.ts @@ -9,7 +9,7 @@ import type { FeedItem } from "./feed" * it depends on, and the graph ensures dependencies are resolved before * dependents run. * - * Source IDs use reverse domain notation. Built-in sources use `aris.`, + * Source IDs use reverse domain notation. Built-in sources use `aelis.`, * third parties use their own domain (e.g., `com.spotify`). * * Every method maps to a protocol operation for remote source support: @@ -24,7 +24,7 @@ import type { FeedItem } from "./feed" * @example * ```ts * const locationSource: FeedSource = { - * id: "aris.location", + * id: "aelis.location", * async listActions() { return { "update-location": { id: "update-location" } } }, * async executeAction(actionId) { throw new UnknownActionError(actionId) }, * async fetchContext() { ... }, diff --git a/packages/aris-core/src/feed.test.ts b/packages/aelis-core/src/feed.test.ts similarity index 100% rename from packages/aris-core/src/feed.test.ts rename to packages/aelis-core/src/feed.test.ts diff --git a/packages/aris-core/src/feed.ts b/packages/aelis-core/src/feed.ts similarity index 100% rename from packages/aris-core/src/feed.ts rename to packages/aelis-core/src/feed.ts diff --git a/packages/aris-core/src/index.ts b/packages/aelis-core/src/index.ts similarity index 100% rename from packages/aris-core/src/index.ts rename to packages/aelis-core/src/index.ts diff --git a/packages/aris-core/src/reconciler.ts b/packages/aelis-core/src/reconciler.ts similarity index 100% rename from packages/aris-core/src/reconciler.ts rename to packages/aelis-core/src/reconciler.ts diff --git a/packages/aris-data-source-weatherkit/.env.example b/packages/aelis-data-source-weatherkit/.env.example similarity index 100% rename from packages/aris-data-source-weatherkit/.env.example rename to packages/aelis-data-source-weatherkit/.env.example diff --git a/packages/aris-data-source-weatherkit/README.md b/packages/aelis-data-source-weatherkit/README.md similarity index 93% rename from packages/aris-data-source-weatherkit/README.md rename to packages/aelis-data-source-weatherkit/README.md index 5aabe5f..64202ce 100644 --- a/packages/aris-data-source-weatherkit/README.md +++ b/packages/aelis-data-source-weatherkit/README.md @@ -1,11 +1,11 @@ -# @aris/data-source-weatherkit +# @aelis/data-source-weatherkit Weather data source using Apple WeatherKit REST API. ## Usage ```typescript -import { WeatherKitDataSource, Units } from "@aris/data-source-weatherkit" +import { WeatherKitDataSource, Units } from "@aelis/data-source-weatherkit" const dataSource = new WeatherKitDataSource({ credentials: { diff --git a/packages/aris-data-source-weatherkit/fixtures/san-francisco.json b/packages/aelis-data-source-weatherkit/fixtures/san-francisco.json similarity index 100% rename from packages/aris-data-source-weatherkit/fixtures/san-francisco.json rename to packages/aelis-data-source-weatherkit/fixtures/san-francisco.json diff --git a/packages/aris-data-source-weatherkit/package.json b/packages/aelis-data-source-weatherkit/package.json similarity index 70% rename from packages/aris-data-source-weatherkit/package.json rename to packages/aelis-data-source-weatherkit/package.json index 9e711b7..6243be0 100644 --- a/packages/aris-data-source-weatherkit/package.json +++ b/packages/aelis-data-source-weatherkit/package.json @@ -1,5 +1,5 @@ { - "name": "@aris/data-source-weatherkit", + "name": "@aelis/data-source-weatherkit", "version": "0.0.0", "type": "module", "main": "src/index.ts", @@ -8,7 +8,7 @@ "test": "bun test ." }, "dependencies": { - "@aris/core": "workspace:*", + "@aelis/core": "workspace:*", "arktype": "^2.1.0" } } diff --git a/packages/aris-data-source-weatherkit/scripts/generate-fixtures.ts b/packages/aelis-data-source-weatherkit/scripts/generate-fixtures.ts similarity index 100% rename from packages/aris-data-source-weatherkit/scripts/generate-fixtures.ts rename to packages/aelis-data-source-weatherkit/scripts/generate-fixtures.ts diff --git a/packages/aris-data-source-weatherkit/src/data-source.test.ts b/packages/aelis-data-source-weatherkit/src/data-source.test.ts similarity index 97% rename from packages/aris-data-source-weatherkit/src/data-source.test.ts rename to packages/aelis-data-source-weatherkit/src/data-source.test.ts index 58b66f1..8efd0a3 100644 --- a/packages/aris-data-source-weatherkit/src/data-source.test.ts +++ b/packages/aelis-data-source-weatherkit/src/data-source.test.ts @@ -1,6 +1,6 @@ -import type { ContextKey } from "@aris/core" +import type { ContextKey } from "@aelis/core" -import { Context, contextKey } from "@aris/core" +import { Context, contextKey } from "@aelis/core" import { describe, expect, test } from "bun:test" import type { WeatherKitClient, WeatherKitResponse } from "./weatherkit" @@ -22,7 +22,7 @@ interface LocationData { accuracy: number } -const LocationKey: ContextKey = contextKey("aris.location", "location") +const LocationKey: ContextKey = contextKey("aelis.location", "location") const createMockClient = (response: WeatherKitResponse): WeatherKitClient => ({ fetch: async () => response, diff --git a/packages/aris-data-source-weatherkit/src/data-source.ts b/packages/aelis-data-source-weatherkit/src/data-source.ts similarity index 98% rename from packages/aris-data-source-weatherkit/src/data-source.ts rename to packages/aelis-data-source-weatherkit/src/data-source.ts index b2f8de9..a0427b7 100644 --- a/packages/aris-data-source-weatherkit/src/data-source.ts +++ b/packages/aelis-data-source-weatherkit/src/data-source.ts @@ -1,6 +1,6 @@ -import type { Context, ContextKey, DataSource, FeedItemSignals } from "@aris/core" +import type { Context, ContextKey, DataSource, FeedItemSignals } from "@aelis/core" -import { TimeRelevance, contextKey } from "@aris/core" +import { TimeRelevance, contextKey } from "@aelis/core" import { WeatherFeedItemType, @@ -45,7 +45,7 @@ interface LocationData { lng: number } -const LocationKey: ContextKey = contextKey("aris.location", "location") +const LocationKey: ContextKey = contextKey("aelis.location", "location") export class WeatherKitDataSource implements DataSource { private readonly DEFAULT_HOURLY_LIMIT = 12 diff --git a/packages/aris-data-source-weatherkit/src/feed-items.ts b/packages/aelis-data-source-weatherkit/src/feed-items.ts similarity index 98% rename from packages/aris-data-source-weatherkit/src/feed-items.ts rename to packages/aelis-data-source-weatherkit/src/feed-items.ts index b118642..3b4ca10 100644 --- a/packages/aris-data-source-weatherkit/src/feed-items.ts +++ b/packages/aelis-data-source-weatherkit/src/feed-items.ts @@ -1,4 +1,4 @@ -import type { FeedItem } from "@aris/core" +import type { FeedItem } from "@aelis/core" import type { Certainty, ConditionCode, PrecipitationType, Severity, Urgency } from "./weatherkit" diff --git a/packages/aris-data-source-weatherkit/src/index.ts b/packages/aelis-data-source-weatherkit/src/index.ts similarity index 100% rename from packages/aris-data-source-weatherkit/src/index.ts rename to packages/aelis-data-source-weatherkit/src/index.ts diff --git a/packages/aris-data-source-weatherkit/src/weatherkit.ts b/packages/aelis-data-source-weatherkit/src/weatherkit.ts similarity index 100% rename from packages/aris-data-source-weatherkit/src/weatherkit.ts rename to packages/aelis-data-source-weatherkit/src/weatherkit.ts diff --git a/packages/aelis-feed-enhancers/package.json b/packages/aelis-feed-enhancers/package.json new file mode 100644 index 0000000..39a37d0 --- /dev/null +++ b/packages/aelis-feed-enhancers/package.json @@ -0,0 +1,17 @@ +{ + "name": "@aelis/feed-enhancers", + "version": "0.0.0", + "type": "module", + "main": "src/index.ts", + "types": "src/index.ts", + "scripts": { + "test": "bun test src/" + }, + "dependencies": { + "@aelis/core": "workspace:*", + "@aelis/source-caldav": "workspace:*", + "@aelis/source-google-calendar": "workspace:*", + "@aelis/source-tfl": "workspace:*", + "@aelis/source-weatherkit": "workspace:*" + } +} diff --git a/packages/aris-feed-enhancers/src/index.ts b/packages/aelis-feed-enhancers/src/index.ts similarity index 100% rename from packages/aris-feed-enhancers/src/index.ts rename to packages/aelis-feed-enhancers/src/index.ts diff --git a/packages/aris-feed-enhancers/src/time-of-day-enhancer.test.ts b/packages/aelis-feed-enhancers/src/time-of-day-enhancer.test.ts similarity index 98% rename from packages/aris-feed-enhancers/src/time-of-day-enhancer.test.ts rename to packages/aelis-feed-enhancers/src/time-of-day-enhancer.test.ts index c45b160..e040793 100644 --- a/packages/aris-feed-enhancers/src/time-of-day-enhancer.test.ts +++ b/packages/aelis-feed-enhancers/src/time-of-day-enhancer.test.ts @@ -1,10 +1,10 @@ -import type { FeedItem, FeedItemSignals } from "@aris/core" +import type { FeedItem, FeedItemSignals } from "@aelis/core" -import { Context, TimeRelevance } from "@aris/core" -import { CalDavFeedItemType } from "@aris/source-caldav" -import { CalendarFeedItemType } from "@aris/source-google-calendar" -import { TflFeedItemType } from "@aris/source-tfl" -import { WeatherFeedItemType } from "@aris/source-weatherkit" +import { Context, TimeRelevance } from "@aelis/core" +import { CalDavFeedItemType } from "@aelis/source-caldav" +import { CalendarFeedItemType } from "@aelis/source-google-calendar" +import { TflFeedItemType } from "@aelis/source-tfl" +import { WeatherFeedItemType } from "@aelis/source-weatherkit" import { describe, expect, test } from "bun:test" import { diff --git a/packages/aris-feed-enhancers/src/time-of-day-enhancer.ts b/packages/aelis-feed-enhancers/src/time-of-day-enhancer.ts similarity index 97% rename from packages/aris-feed-enhancers/src/time-of-day-enhancer.ts rename to packages/aelis-feed-enhancers/src/time-of-day-enhancer.ts index e2b3dca..79fb05a 100644 --- a/packages/aris-feed-enhancers/src/time-of-day-enhancer.ts +++ b/packages/aelis-feed-enhancers/src/time-of-day-enhancer.ts @@ -1,15 +1,15 @@ -import type { Context, FeedEnhancement, FeedItem, FeedPostProcessor } from "@aris/core" +import type { Context, FeedEnhancement, FeedItem, FeedPostProcessor } from "@aelis/core" -import { TimeRelevance } from "@aris/core" +import { TimeRelevance } from "@aelis/core" -import type { CalDavEventData } from "@aris/source-caldav" -import type { CalendarEventData } from "@aris/source-google-calendar" -import type { CurrentWeatherData } from "@aris/source-weatherkit" +import type { CalDavEventData } from "@aelis/source-caldav" +import type { CalendarEventData } from "@aelis/source-google-calendar" +import type { CurrentWeatherData } from "@aelis/source-weatherkit" -import { CalDavFeedItemType } from "@aris/source-caldav" -import { CalendarFeedItemType } from "@aris/source-google-calendar" -import { TflFeedItemType } from "@aris/source-tfl" -import { WeatherFeedItemType } from "@aris/source-weatherkit" +import { CalDavFeedItemType } from "@aelis/source-caldav" +import { CalendarFeedItemType } from "@aelis/source-google-calendar" +import { TflFeedItemType } from "@aelis/source-tfl" +import { WeatherFeedItemType } from "@aelis/source-weatherkit" export const TimePeriod = { diff --git a/packages/aris-source-caldav/README.md b/packages/aelis-source-caldav/README.md similarity index 95% rename from packages/aris-source-caldav/README.md rename to packages/aelis-source-caldav/README.md index 275ce0a..93d4800 100644 --- a/packages/aris-source-caldav/README.md +++ b/packages/aelis-source-caldav/README.md @@ -1,11 +1,11 @@ -# @aris/source-caldav +# @aelis/source-caldav A FeedSource that fetches calendar events from any CalDAV server. ## Usage ```ts -import { CalDavSource } from "@aris/source-caldav" +import { CalDavSource } from "@aelis/source-caldav" // Basic auth (Nextcloud, Radicale, Baikal, iCloud, etc.) const source = new CalDavSource({ diff --git a/packages/aris-source-caldav/fixtures/all-day-event.ics b/packages/aelis-source-caldav/fixtures/all-day-event.ics similarity index 100% rename from packages/aris-source-caldav/fixtures/all-day-event.ics rename to packages/aelis-source-caldav/fixtures/all-day-event.ics diff --git a/packages/aris-source-caldav/fixtures/cancelled-event.ics b/packages/aelis-source-caldav/fixtures/cancelled-event.ics similarity index 100% rename from packages/aris-source-caldav/fixtures/cancelled-event.ics rename to packages/aelis-source-caldav/fixtures/cancelled-event.ics diff --git a/packages/aris-source-caldav/fixtures/daily-recurring-allday.ics b/packages/aelis-source-caldav/fixtures/daily-recurring-allday.ics similarity index 100% rename from packages/aris-source-caldav/fixtures/daily-recurring-allday.ics rename to packages/aelis-source-caldav/fixtures/daily-recurring-allday.ics diff --git a/packages/aris-source-caldav/fixtures/minimal-event.ics b/packages/aelis-source-caldav/fixtures/minimal-event.ics similarity index 100% rename from packages/aris-source-caldav/fixtures/minimal-event.ics rename to packages/aelis-source-caldav/fixtures/minimal-event.ics diff --git a/packages/aris-source-caldav/fixtures/recurring-event.ics b/packages/aelis-source-caldav/fixtures/recurring-event.ics similarity index 100% rename from packages/aris-source-caldav/fixtures/recurring-event.ics rename to packages/aelis-source-caldav/fixtures/recurring-event.ics diff --git a/packages/aris-source-caldav/fixtures/single-event.ics b/packages/aelis-source-caldav/fixtures/single-event.ics similarity index 100% rename from packages/aris-source-caldav/fixtures/single-event.ics rename to packages/aelis-source-caldav/fixtures/single-event.ics diff --git a/packages/aris-source-caldav/fixtures/weekly-recurring-with-exception.ics b/packages/aelis-source-caldav/fixtures/weekly-recurring-with-exception.ics similarity index 100% rename from packages/aris-source-caldav/fixtures/weekly-recurring-with-exception.ics rename to packages/aelis-source-caldav/fixtures/weekly-recurring-with-exception.ics diff --git a/packages/aris-source-caldav/fixtures/weekly-recurring.ics b/packages/aelis-source-caldav/fixtures/weekly-recurring.ics similarity index 100% rename from packages/aris-source-caldav/fixtures/weekly-recurring.ics rename to packages/aelis-source-caldav/fixtures/weekly-recurring.ics diff --git a/packages/aris-source-caldav/package.json b/packages/aelis-source-caldav/package.json similarity index 79% rename from packages/aris-source-caldav/package.json rename to packages/aelis-source-caldav/package.json index 1e69ffa..d52c9ee 100644 --- a/packages/aris-source-caldav/package.json +++ b/packages/aelis-source-caldav/package.json @@ -1,5 +1,5 @@ { - "name": "@aris/source-caldav", + "name": "@aelis/source-caldav", "version": "0.0.0", "type": "module", "main": "src/index.ts", @@ -9,7 +9,7 @@ "test:live": "bun run scripts/test-live.ts" }, "dependencies": { - "@aris/core": "workspace:*", + "@aelis/core": "workspace:*", "ical.js": "^2.1.0", "tsdav": "^2.1.7" } diff --git a/packages/aris-source-caldav/scripts/test-live.ts b/packages/aelis-source-caldav/scripts/test-live.ts similarity index 98% rename from packages/aris-source-caldav/scripts/test-live.ts rename to packages/aelis-source-caldav/scripts/test-live.ts index 3632210..0d77d13 100644 --- a/packages/aris-source-caldav/scripts/test-live.ts +++ b/packages/aelis-source-caldav/scripts/test-live.ts @@ -10,7 +10,7 @@ import { mkdirSync, writeFileSync } from "node:fs" import { join } from "node:path" -import { Context } from "@aris/core" +import { Context } from "@aelis/core" import { CalDavSource } from "../src/index.ts" diff --git a/packages/aris-source-caldav/src/caldav-source.test.ts b/packages/aelis-source-caldav/src/caldav-source.test.ts similarity index 99% rename from packages/aris-source-caldav/src/caldav-source.test.ts rename to packages/aelis-source-caldav/src/caldav-source.test.ts index 968a3a7..d725515 100644 --- a/packages/aris-source-caldav/src/caldav-source.test.ts +++ b/packages/aelis-source-caldav/src/caldav-source.test.ts @@ -1,6 +1,6 @@ -import type { ContextEntry } from "@aris/core" +import type { ContextEntry } from "@aelis/core" -import { Context, TimeRelevance } from "@aris/core" +import { Context, TimeRelevance } from "@aelis/core" import { describe, expect, test } from "bun:test" import { readFileSync } from "node:fs" import { join } from "node:path" @@ -76,7 +76,7 @@ describe("CalDavSource", () => { test("has correct id", () => { const client = new MockDAVClient([], {}) const source = createSource(client) - expect(source.id).toBe("aris.caldav") + expect(source.id).toBe("aelis.caldav") }) test("returns empty array when no calendars exist", async () => { diff --git a/packages/aris-source-caldav/src/caldav-source.ts b/packages/aelis-source-caldav/src/caldav-source.ts similarity index 97% rename from packages/aris-source-caldav/src/caldav-source.ts rename to packages/aelis-source-caldav/src/caldav-source.ts index 6736137..12b3211 100644 --- a/packages/aris-source-caldav/src/caldav-source.ts +++ b/packages/aelis-source-caldav/src/caldav-source.ts @@ -1,6 +1,6 @@ -import type { ActionDefinition, ContextEntry, FeedItemSignals, FeedSource } from "@aris/core" +import type { ActionDefinition, ContextEntry, FeedItemSignals, FeedSource } from "@aelis/core" -import { Context, TimeRelevance, UnknownActionError } from "@aris/core" +import { Context, TimeRelevance, UnknownActionError } from "@aelis/core" import { DAVClient } from "tsdav" import type { CalDavDAVClient, CalDavEventData, CalDavFeedItem } from "./types.ts" @@ -68,7 +68,7 @@ const DEFAULT_LOOK_AHEAD_DAYS = 0 * ``` */ export class CalDavSource implements FeedSource { - readonly id = "aris.caldav" + readonly id = "aelis.caldav" private options: CalDavSourceOptions | null private readonly lookAheadDays: number @@ -177,7 +177,7 @@ export class CalDavSource implements FeedSource { const allEvents: CalDavEventData[] = [] for (const result of results) { if (result.status === "rejected") { - console.warn("[aris.caldav] Failed to fetch calendar:", result.reason) + console.warn("[aelis.caldav] Failed to fetch calendar:", result.reason) continue } const { objects, calendarName } = result.value diff --git a/packages/aris-source-caldav/src/calendar-context.ts b/packages/aelis-source-caldav/src/calendar-context.ts similarity index 83% rename from packages/aris-source-caldav/src/calendar-context.ts rename to packages/aelis-source-caldav/src/calendar-context.ts index 95e149e..6c4ef6e 100644 --- a/packages/aris-source-caldav/src/calendar-context.ts +++ b/packages/aelis-source-caldav/src/calendar-context.ts @@ -1,6 +1,6 @@ -import type { ContextKey } from "@aris/core" +import type { ContextKey } from "@aelis/core" -import { contextKey } from "@aris/core" +import { contextKey } from "@aelis/core" import type { CalDavEventData } from "./types.ts" @@ -21,4 +21,4 @@ export interface CalendarContext { todayEventCount: number } -export const CalDavCalendarKey: ContextKey = contextKey("aris.caldav", "calendar") +export const CalDavCalendarKey: ContextKey = contextKey("aelis.caldav", "calendar") diff --git a/packages/aris-source-caldav/src/ical-parser.test.ts b/packages/aelis-source-caldav/src/ical-parser.test.ts similarity index 100% rename from packages/aris-source-caldav/src/ical-parser.test.ts rename to packages/aelis-source-caldav/src/ical-parser.test.ts diff --git a/packages/aris-source-caldav/src/ical-parser.ts b/packages/aelis-source-caldav/src/ical-parser.ts similarity index 98% rename from packages/aris-source-caldav/src/ical-parser.ts rename to packages/aelis-source-caldav/src/ical-parser.ts index 67e16e8..e8244dc 100644 --- a/packages/aris-source-caldav/src/ical-parser.ts +++ b/packages/aelis-source-caldav/src/ical-parser.ts @@ -125,7 +125,7 @@ export function parseICalEvents( while (next) { if (++iterations > MAX_RECURRENCE_ITERATIONS) { console.warn( - `[aris.caldav] Recurrence expansion for "${masterEvent.uid}" hit iteration limit (${MAX_RECURRENCE_ITERATIONS}), stopping`, + `[aelis.caldav] Recurrence expansion for "${masterEvent.uid}" hit iteration limit (${MAX_RECURRENCE_ITERATIONS}), stopping`, ) break } diff --git a/packages/aris-source-caldav/src/index.ts b/packages/aelis-source-caldav/src/index.ts similarity index 100% rename from packages/aris-source-caldav/src/index.ts rename to packages/aelis-source-caldav/src/index.ts diff --git a/packages/aris-source-caldav/src/types.ts b/packages/aelis-source-caldav/src/types.ts similarity index 98% rename from packages/aris-source-caldav/src/types.ts rename to packages/aelis-source-caldav/src/types.ts index 2575065..859dd0c 100644 --- a/packages/aris-source-caldav/src/types.ts +++ b/packages/aelis-source-caldav/src/types.ts @@ -1,4 +1,4 @@ -import type { FeedItem } from "@aris/core" +import type { FeedItem } from "@aelis/core" // -- Event status -- diff --git a/packages/aris-source-google-calendar/fixtures/events.json b/packages/aelis-source-google-calendar/fixtures/events.json similarity index 100% rename from packages/aris-source-google-calendar/fixtures/events.json rename to packages/aelis-source-google-calendar/fixtures/events.json diff --git a/packages/aris-source-google-calendar/package.json b/packages/aelis-source-google-calendar/package.json similarity index 70% rename from packages/aris-source-google-calendar/package.json rename to packages/aelis-source-google-calendar/package.json index af05f32..e42a7e0 100644 --- a/packages/aris-source-google-calendar/package.json +++ b/packages/aelis-source-google-calendar/package.json @@ -1,5 +1,5 @@ { - "name": "@aris/source-google-calendar", + "name": "@aelis/source-google-calendar", "version": "0.0.0", "type": "module", "main": "src/index.ts", @@ -8,7 +8,7 @@ "test": "bun test ." }, "dependencies": { - "@aris/core": "workspace:*", + "@aelis/core": "workspace:*", "arktype": "^2.1.0" } } diff --git a/packages/aris-source-google-calendar/src/calendar-context.ts b/packages/aelis-source-google-calendar/src/calendar-context.ts similarity index 61% rename from packages/aris-source-google-calendar/src/calendar-context.ts rename to packages/aelis-source-google-calendar/src/calendar-context.ts index c8133da..9543c1c 100644 --- a/packages/aris-source-google-calendar/src/calendar-context.ts +++ b/packages/aelis-source-google-calendar/src/calendar-context.ts @@ -1,6 +1,6 @@ -import type { ContextKey } from "@aris/core" +import type { ContextKey } from "@aelis/core" -import { contextKey } from "@aris/core" +import { contextKey } from "@aelis/core" export interface NextEvent { title: string @@ -10,4 +10,4 @@ export interface NextEvent { location: string | null } -export const NextEventKey: ContextKey = contextKey("aris.google-calendar", "nextEvent") +export const NextEventKey: ContextKey = contextKey("aelis.google-calendar", "nextEvent") diff --git a/packages/aris-source-google-calendar/src/feed-items.ts b/packages/aelis-source-google-calendar/src/feed-items.ts similarity index 92% rename from packages/aris-source-google-calendar/src/feed-items.ts rename to packages/aelis-source-google-calendar/src/feed-items.ts index f040717..28fa87d 100644 --- a/packages/aris-source-google-calendar/src/feed-items.ts +++ b/packages/aelis-source-google-calendar/src/feed-items.ts @@ -1,4 +1,4 @@ -import type { FeedItem } from "@aris/core" +import type { FeedItem } from "@aelis/core" import type { CalendarEventData } from "./types" diff --git a/packages/aris-source-google-calendar/src/google-calendar-api.ts b/packages/aelis-source-google-calendar/src/google-calendar-api.ts similarity index 100% rename from packages/aris-source-google-calendar/src/google-calendar-api.ts rename to packages/aelis-source-google-calendar/src/google-calendar-api.ts diff --git a/packages/aris-source-google-calendar/src/google-calendar-source.test.ts b/packages/aelis-source-google-calendar/src/google-calendar-source.test.ts similarity index 98% rename from packages/aris-source-google-calendar/src/google-calendar-source.test.ts rename to packages/aelis-source-google-calendar/src/google-calendar-source.test.ts index 2ddfe33..b4d073f 100644 --- a/packages/aris-source-google-calendar/src/google-calendar-source.test.ts +++ b/packages/aelis-source-google-calendar/src/google-calendar-source.test.ts @@ -1,4 +1,4 @@ -import { Context, TimeRelevance } from "@aris/core" +import { Context, TimeRelevance } from "@aelis/core" import { describe, expect, test } from "bun:test" import type { ApiCalendarEvent, GoogleCalendarClient, ListEventsOptions } from "./types" @@ -45,7 +45,7 @@ describe("GoogleCalendarSource", () => { describe("constructor", () => { test("has correct id", () => { const source = new GoogleCalendarSource({ client: defaultMockClient() }) - expect(source.id).toBe("aris.google-calendar") + expect(source.id).toBe("aelis.google-calendar") }) }) diff --git a/packages/aris-source-google-calendar/src/google-calendar-source.ts b/packages/aelis-source-google-calendar/src/google-calendar-source.ts similarity index 97% rename from packages/aris-source-google-calendar/src/google-calendar-source.ts rename to packages/aelis-source-google-calendar/src/google-calendar-source.ts index 2f43c02..1722a86 100644 --- a/packages/aris-source-google-calendar/src/google-calendar-source.ts +++ b/packages/aelis-source-google-calendar/src/google-calendar-source.ts @@ -1,6 +1,6 @@ -import type { ActionDefinition, ContextEntry, FeedItemSignals, FeedSource } from "@aris/core" +import type { ActionDefinition, ContextEntry, FeedItemSignals, FeedSource } from "@aelis/core" -import { Context, TimeRelevance, UnknownActionError } from "@aris/core" +import { Context, TimeRelevance, UnknownActionError } from "@aelis/core" import type { ApiCalendarEvent, @@ -65,7 +65,7 @@ const URGENCY_ALL_DAY = 0.4 * ``` */ export class GoogleCalendarSource implements FeedSource { - readonly id = "aris.google-calendar" + readonly id = "aelis.google-calendar" private readonly client: GoogleCalendarClient private readonly calendarIds: string[] | undefined diff --git a/packages/aris-source-google-calendar/src/index.ts b/packages/aelis-source-google-calendar/src/index.ts similarity index 100% rename from packages/aris-source-google-calendar/src/index.ts rename to packages/aelis-source-google-calendar/src/index.ts diff --git a/packages/aris-source-google-calendar/src/types.ts b/packages/aelis-source-google-calendar/src/types.ts similarity index 100% rename from packages/aris-source-google-calendar/src/types.ts rename to packages/aelis-source-google-calendar/src/types.ts diff --git a/packages/aris-source-location/README.md b/packages/aelis-source-location/README.md similarity index 84% rename from packages/aris-source-location/README.md rename to packages/aelis-source-location/README.md index 6a25fb0..8b7c351 100644 --- a/packages/aris-source-location/README.md +++ b/packages/aelis-source-location/README.md @@ -1,6 +1,6 @@ -# @aris/source-location +# @aelis/source-location -A FeedSource that provides location context to the ARIS feed graph. +A FeedSource that provides location context to the AELIS feed graph. ## Overview @@ -9,14 +9,14 @@ This source accepts external location pushes and does not query location itself. ## Installation ```bash -bun add @aris/source-location +bun add @aelis/source-location ``` ## Usage ```ts -import { LocationSource, LocationKey, type Location } from "@aris/source-location" -import { contextValue } from "@aris/core" +import { LocationSource, LocationKey, type Location } from "@aelis/source-location" +import { contextValue } from "@aelis/core" // Create source with default history size (1) const locationSource = new LocationSource() @@ -42,8 +42,8 @@ locationSource.locationHistory // readonly Location[] ### With FeedController ```ts -import { FeedController } from "@aris/core" -import { LocationSource } from "@aris/source-location" +import { FeedController } from "@aelis/core" +import { LocationSource } from "@aelis/source-location" const locationSource = new LocationSource() @@ -63,8 +63,8 @@ locationSource.pushLocation({ ### Reading Location in Downstream Sources ```ts -import { contextValue, type FeedSource } from "@aris/core" -import { LocationKey } from "@aris/source-location" +import { contextValue, type FeedSource } from "@aelis/core" +import { LocationKey } from "@aelis/source-location" const weatherSource: FeedSource = { id: "weather", diff --git a/packages/aris-source-location/package.json b/packages/aelis-source-location/package.json similarity index 73% rename from packages/aris-source-location/package.json rename to packages/aelis-source-location/package.json index bd7c59c..58b56f4 100644 --- a/packages/aris-source-location/package.json +++ b/packages/aelis-source-location/package.json @@ -1,5 +1,5 @@ { - "name": "@aris/source-location", + "name": "@aelis/source-location", "version": "0.0.0", "type": "module", "main": "src/index.ts", @@ -8,7 +8,7 @@ "test": "bun test src/" }, "dependencies": { - "@aris/core": "workspace:*", + "@aelis/core": "workspace:*", "arktype": "^2.1.0" } } diff --git a/packages/aris-source-location/src/index.ts b/packages/aelis-source-location/src/index.ts similarity index 100% rename from packages/aris-source-location/src/index.ts rename to packages/aelis-source-location/src/index.ts diff --git a/packages/aris-source-location/src/location-source.test.ts b/packages/aelis-source-location/src/location-source.test.ts similarity index 99% rename from packages/aris-source-location/src/location-source.test.ts rename to packages/aelis-source-location/src/location-source.test.ts index 8e287a2..8dbcc4e 100644 --- a/packages/aris-source-location/src/location-source.test.ts +++ b/packages/aelis-source-location/src/location-source.test.ts @@ -18,7 +18,7 @@ describe("LocationSource", () => { describe("FeedSource interface", () => { test("has correct id", () => { const source = new LocationSource() - expect(source.id).toBe("aris.location") + expect(source.id).toBe("aelis.location") }) test("fetchItems always returns empty array", async () => { diff --git a/packages/aris-source-location/src/location-source.ts b/packages/aelis-source-location/src/location-source.ts similarity index 93% rename from packages/aris-source-location/src/location-source.ts rename to packages/aelis-source-location/src/location-source.ts index 78f9cfc..7d959a9 100644 --- a/packages/aris-source-location/src/location-source.ts +++ b/packages/aelis-source-location/src/location-source.ts @@ -1,11 +1,11 @@ -import type { ActionDefinition, ContextEntry, FeedSource } from "@aris/core" +import type { ActionDefinition, ContextEntry, FeedSource } from "@aelis/core" -import { Context, UnknownActionError, contextKey, type ContextKey } from "@aris/core" +import { Context, UnknownActionError, contextKey, type ContextKey } from "@aelis/core" import { type } from "arktype" import { Location, type LocationSourceOptions } from "./types.ts" -export const LocationKey: ContextKey = contextKey("aris.location", "location") +export const LocationKey: ContextKey = contextKey("aelis.location", "location") /** * A FeedSource that provides location context. @@ -16,7 +16,7 @@ export const LocationKey: ContextKey = contextKey("aris.location", "lo * Does not produce feed items - always returns empty array from `fetchItems`. */ export class LocationSource implements FeedSource { - readonly id = "aris.location" + readonly id = "aelis.location" private readonly historySize: number private locations: Location[] = [] diff --git a/packages/aris-source-location/src/types.ts b/packages/aelis-source-location/src/types.ts similarity index 100% rename from packages/aris-source-location/src/types.ts rename to packages/aelis-source-location/src/types.ts diff --git a/packages/aris-source-tfl/fixtures/tfl-responses.json b/packages/aelis-source-tfl/fixtures/tfl-responses.json similarity index 100% rename from packages/aris-source-tfl/fixtures/tfl-responses.json rename to packages/aelis-source-tfl/fixtures/tfl-responses.json diff --git a/packages/aris-source-tfl/package.json b/packages/aelis-source-tfl/package.json similarity index 69% rename from packages/aris-source-tfl/package.json rename to packages/aelis-source-tfl/package.json index 4b2c5b4..579f415 100644 --- a/packages/aris-source-tfl/package.json +++ b/packages/aelis-source-tfl/package.json @@ -1,5 +1,5 @@ { - "name": "@aris/source-tfl", + "name": "@aelis/source-tfl", "version": "0.0.0", "type": "module", "main": "src/index.ts", @@ -9,8 +9,8 @@ "fetch-fixtures": "bun run scripts/fetch-fixtures.ts" }, "dependencies": { - "@aris/core": "workspace:*", - "@aris/source-location": "workspace:*", + "@aelis/core": "workspace:*", + "@aelis/source-location": "workspace:*", "arktype": "^2.1.0" } } diff --git a/packages/aris-source-tfl/scripts/fetch-fixtures.ts b/packages/aelis-source-tfl/scripts/fetch-fixtures.ts similarity index 100% rename from packages/aris-source-tfl/scripts/fetch-fixtures.ts rename to packages/aelis-source-tfl/scripts/fetch-fixtures.ts diff --git a/packages/aris-source-tfl/src/index.ts b/packages/aelis-source-tfl/src/index.ts similarity index 100% rename from packages/aris-source-tfl/src/index.ts rename to packages/aelis-source-tfl/src/index.ts diff --git a/packages/aris-source-tfl/src/tfl-api.ts b/packages/aelis-source-tfl/src/tfl-api.ts similarity index 100% rename from packages/aris-source-tfl/src/tfl-api.ts rename to packages/aelis-source-tfl/src/tfl-api.ts diff --git a/packages/aris-source-tfl/src/tfl-source.test.ts b/packages/aelis-source-tfl/src/tfl-source.test.ts similarity index 98% rename from packages/aris-source-tfl/src/tfl-source.test.ts rename to packages/aelis-source-tfl/src/tfl-source.test.ts index cbd368a..b52d42b 100644 --- a/packages/aris-source-tfl/src/tfl-source.test.ts +++ b/packages/aelis-source-tfl/src/tfl-source.test.ts @@ -1,5 +1,5 @@ -import { Context } from "@aris/core" -import { LocationKey, type Location } from "@aris/source-location" +import { Context } from "@aelis/core" +import { LocationKey, type Location } from "@aelis/source-location" import { describe, expect, test } from "bun:test" import type { @@ -93,12 +93,12 @@ describe("TflSource", () => { describe("interface", () => { test("has correct id", () => { const source = new TflSource({ client: api }) - expect(source.id).toBe("aris.tfl") + expect(source.id).toBe("aelis.tfl") }) test("depends on location", () => { const source = new TflSource({ client: api }) - expect(source.dependencies).toEqual(["aris.location"]) + expect(source.dependencies).toEqual(["aelis.location"]) }) test("implements fetchItems", () => { diff --git a/packages/aris-source-tfl/src/tfl-source.ts b/packages/aelis-source-tfl/src/tfl-source.ts similarity index 95% rename from packages/aris-source-tfl/src/tfl-source.ts rename to packages/aelis-source-tfl/src/tfl-source.ts index aa6f1bc..3d2ecb8 100644 --- a/packages/aris-source-tfl/src/tfl-source.ts +++ b/packages/aelis-source-tfl/src/tfl-source.ts @@ -1,7 +1,7 @@ -import type { ActionDefinition, ContextEntry, FeedItemSignals, FeedSource } from "@aris/core" +import type { ActionDefinition, ContextEntry, FeedItemSignals, FeedSource } from "@aelis/core" -import { Context, TimeRelevance, UnknownActionError } from "@aris/core" -import { LocationKey } from "@aris/source-location" +import { Context, TimeRelevance, UnknownActionError } from "@aelis/core" +import { LocationKey } from "@aelis/source-location" import { type } from "arktype" import type { @@ -73,8 +73,8 @@ export class TflSource implements FeedSource { "elizabeth", ] - readonly id = "aris.tfl" - readonly dependencies = ["aris.location"] + readonly id = "aelis.tfl" + readonly dependencies = ["aelis.location"] private readonly client: ITflApi private lines: TflLineId[] diff --git a/packages/aris-source-tfl/src/types.ts b/packages/aelis-source-tfl/src/types.ts similarity index 96% rename from packages/aris-source-tfl/src/types.ts rename to packages/aelis-source-tfl/src/types.ts index 09f1246..f6f368c 100644 --- a/packages/aris-source-tfl/src/types.ts +++ b/packages/aelis-source-tfl/src/types.ts @@ -1,4 +1,4 @@ -import type { FeedItem } from "@aris/core" +import type { FeedItem } from "@aelis/core" import type { TflLineId } from "./tfl-api.ts" diff --git a/packages/aris-source-weatherkit/README.md b/packages/aelis-source-weatherkit/README.md similarity index 88% rename from packages/aris-source-weatherkit/README.md rename to packages/aelis-source-weatherkit/README.md index bd44a95..f21b96f 100644 --- a/packages/aris-source-weatherkit/README.md +++ b/packages/aelis-source-weatherkit/README.md @@ -1,4 +1,4 @@ -# @aris/source-weatherkit +# @aelis/source-weatherkit Weather feed source using Apple WeatherKit API. @@ -7,7 +7,7 @@ Weather feed source using Apple WeatherKit API. ### Basic Setup ```ts -import { WeatherSource, Units } from "@aris/source-weatherkit" +import { WeatherSource, Units } from "@aelis/source-weatherkit" const weatherSource = new WeatherSource({ credentials: { @@ -23,8 +23,8 @@ const weatherSource = new WeatherSource({ ### With Feed Source Graph ```ts -import { LocationSource } from "@aris/source-location" -import { WeatherSource } from "@aris/source-weatherkit" +import { LocationSource } from "@aelis/source-location" +import { WeatherSource } from "@aelis/source-weatherkit" const locationSource = new LocationSource() const weatherSource = new WeatherSource({ credentials }) @@ -38,8 +38,8 @@ const sources = [locationSource, weatherSource] Downstream sources can access weather data: ```ts -import { contextValue } from "@aris/core" -import { WeatherKey } from "@aris/source-weatherkit" +import { contextValue } from "@aelis/core" +import { WeatherKey } from "@aelis/source-weatherkit" async function fetchContext(context: Context) { const weather = contextValue(context, WeatherKey) diff --git a/packages/aris-source-weatherkit/fixtures/san-francisco.json b/packages/aelis-source-weatherkit/fixtures/san-francisco.json similarity index 100% rename from packages/aris-source-weatherkit/fixtures/san-francisco.json rename to packages/aelis-source-weatherkit/fixtures/san-francisco.json diff --git a/packages/aris-source-weatherkit/package.json b/packages/aelis-source-weatherkit/package.json similarity index 61% rename from packages/aris-source-weatherkit/package.json rename to packages/aelis-source-weatherkit/package.json index 56b7b80..1a7b7d3 100644 --- a/packages/aris-source-weatherkit/package.json +++ b/packages/aelis-source-weatherkit/package.json @@ -1,5 +1,5 @@ { - "name": "@aris/source-weatherkit", + "name": "@aelis/source-weatherkit", "version": "0.0.0", "type": "module", "main": "src/index.ts", @@ -8,8 +8,8 @@ "test": "bun test ." }, "dependencies": { - "@aris/core": "workspace:*", - "@aris/source-location": "workspace:*", + "@aelis/core": "workspace:*", + "@aelis/source-location": "workspace:*", "arktype": "^2.1.0" } } diff --git a/packages/aris-source-weatherkit/scripts/query.ts b/packages/aelis-source-weatherkit/scripts/query.ts similarity index 97% rename from packages/aris-source-weatherkit/scripts/query.ts rename to packages/aelis-source-weatherkit/scripts/query.ts index 54c5e75..07605d4 100644 --- a/packages/aris-source-weatherkit/scripts/query.ts +++ b/packages/aelis-source-weatherkit/scripts/query.ts @@ -6,15 +6,15 @@ * then prints the raw API response and processed feed items. * Caches credentials locally and writes response JSON to a file. * - * Usage: bun packages/aris-source-weatherkit/scripts/query.ts + * Usage: bun packages/aelis-source-weatherkit/scripts/query.ts */ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs" import { join } from "node:path" import { createInterface } from "node:readline/promises" -import { Context } from "@aris/core" -import { LocationKey } from "@aris/source-location" +import { Context } from "@aelis/core" +import { LocationKey } from "@aelis/source-location" import { DefaultWeatherKitClient } from "../src/weatherkit" import { WeatherSource, Units } from "../src/weather-source" diff --git a/packages/aris-source-weatherkit/src/feed-items.ts b/packages/aelis-source-weatherkit/src/feed-items.ts similarity index 98% rename from packages/aris-source-weatherkit/src/feed-items.ts rename to packages/aelis-source-weatherkit/src/feed-items.ts index b118642..3b4ca10 100644 --- a/packages/aris-source-weatherkit/src/feed-items.ts +++ b/packages/aelis-source-weatherkit/src/feed-items.ts @@ -1,4 +1,4 @@ -import type { FeedItem } from "@aris/core" +import type { FeedItem } from "@aelis/core" import type { Certainty, ConditionCode, PrecipitationType, Severity, Urgency } from "./weatherkit" diff --git a/packages/aris-source-weatherkit/src/index.ts b/packages/aelis-source-weatherkit/src/index.ts similarity index 100% rename from packages/aris-source-weatherkit/src/index.ts rename to packages/aelis-source-weatherkit/src/index.ts diff --git a/packages/aris-source-weatherkit/src/prompts/current-weather-insight.txt b/packages/aelis-source-weatherkit/src/prompts/current-weather-insight.txt similarity index 100% rename from packages/aris-source-weatherkit/src/prompts/current-weather-insight.txt rename to packages/aelis-source-weatherkit/src/prompts/current-weather-insight.txt diff --git a/packages/aris-source-weatherkit/src/weather-context.ts b/packages/aelis-source-weatherkit/src/weather-context.ts similarity index 73% rename from packages/aris-source-weatherkit/src/weather-context.ts rename to packages/aelis-source-weatherkit/src/weather-context.ts index eadf53e..f758160 100644 --- a/packages/aris-source-weatherkit/src/weather-context.ts +++ b/packages/aelis-source-weatherkit/src/weather-context.ts @@ -1,6 +1,6 @@ -import type { ContextKey } from "@aris/core" +import type { ContextKey } from "@aelis/core" -import { contextKey } from "@aris/core" +import { contextKey } from "@aelis/core" import type { ConditionCode } from "./weatherkit" @@ -24,4 +24,4 @@ export interface Weather { daylight: boolean } -export const WeatherKey: ContextKey = contextKey("aris.weather", "weather") +export const WeatherKey: ContextKey = contextKey("aelis.weather", "weather") diff --git a/packages/aris-source-weatherkit/src/weather-source.test.ts b/packages/aelis-source-weatherkit/src/weather-source.test.ts similarity index 96% rename from packages/aris-source-weatherkit/src/weather-source.test.ts rename to packages/aelis-source-weatherkit/src/weather-source.test.ts index 90ab54a..8d5f763 100644 --- a/packages/aris-source-weatherkit/src/weather-source.test.ts +++ b/packages/aelis-source-weatherkit/src/weather-source.test.ts @@ -1,7 +1,7 @@ -import type { FeedSource } from "@aris/core" +import type { FeedSource } from "@aelis/core" -import { Context } from "@aris/core" -import { LocationKey } from "@aris/source-location" +import { Context } from "@aelis/core" +import { LocationKey } from "@aelis/source-location" import { describe, expect, test } from "bun:test" import type { WeatherKitClient, WeatherKitResponse } from "./weatherkit" @@ -36,12 +36,12 @@ describe("WeatherSource", () => { describe("properties", () => { test("has correct id", () => { const source = new WeatherSource({ credentials: mockCredentials }) - expect(source.id).toBe("aris.weather") + expect(source.id).toBe("aelis.weather") }) test("depends on location", () => { const source = new WeatherSource({ credentials: mockCredentials }) - expect(source.dependencies).toEqual(["aris.location"]) + expect(source.dependencies).toEqual(["aelis.location"]) }) test("throws error if neither client nor credentials provided", () => { diff --git a/packages/aris-source-weatherkit/src/weather-source.ts b/packages/aelis-source-weatherkit/src/weather-source.ts similarity index 97% rename from packages/aris-source-weatherkit/src/weather-source.ts rename to packages/aelis-source-weatherkit/src/weather-source.ts index 7e820d7..bdf0237 100644 --- a/packages/aris-source-weatherkit/src/weather-source.ts +++ b/packages/aelis-source-weatherkit/src/weather-source.ts @@ -1,7 +1,7 @@ -import type { ActionDefinition, ContextEntry, FeedItemSignals, FeedSource } from "@aris/core" +import type { ActionDefinition, ContextEntry, FeedItemSignals, FeedSource } from "@aelis/core" -import { Context, TimeRelevance, UnknownActionError } from "@aris/core" -import { LocationKey } from "@aris/source-location" +import { Context, TimeRelevance, UnknownActionError } from "@aelis/core" +import { LocationKey } from "@aelis/source-location" import { WeatherFeedItemType, type WeatherFeedItem } from "./feed-items" import currentWeatherInsightPrompt from "./prompts/current-weather-insight.txt" @@ -94,8 +94,8 @@ const MODERATE_CONDITIONS = new Set([ * ``` */ export class WeatherSource implements FeedSource { - readonly id = "aris.weather" - readonly dependencies = ["aris.location"] + readonly id = "aelis.weather" + readonly dependencies = ["aelis.location"] private readonly client: WeatherKitClient private readonly hourlyLimit: number diff --git a/packages/aris-source-weatherkit/src/weatherkit.ts b/packages/aelis-source-weatherkit/src/weatherkit.ts similarity index 100% rename from packages/aris-source-weatherkit/src/weatherkit.ts rename to packages/aelis-source-weatherkit/src/weatherkit.ts diff --git a/packages/aris-feed-enhancers/package.json b/packages/aris-feed-enhancers/package.json deleted file mode 100644 index 03a838d..0000000 --- a/packages/aris-feed-enhancers/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "@aris/feed-enhancers", - "version": "0.0.0", - "type": "module", - "main": "src/index.ts", - "types": "src/index.ts", - "scripts": { - "test": "bun test src/" - }, - "dependencies": { - "@aris/core": "workspace:*", - "@aris/source-caldav": "workspace:*", - "@aris/source-google-calendar": "workspace:*", - "@aris/source-tfl": "workspace:*", - "@aris/source-weatherkit": "workspace:*" - } -}