Compare commits

..

1 Commits

Author SHA1 Message Date
9c28ace65b feat: execute agent actions 2026-06-14 23:05:40 +01:00
9 changed files with 14 additions and 25 deletions

View File

@@ -1,5 +1,4 @@
import { LocationSource } from "@freya/source-location"
import { ReminderSource } from "@freya/source-reminders"
import { WebSearchSource } from "@freya/source-web-search"
import { describe, expect, test } from "bun:test"
@@ -56,12 +55,8 @@ function createRecordingDb(): RecordingDb {
}
describe("default user sources", () => {
test("defines default enabled sources", () => {
expect(DEFAULT_ENABLED_SOURCE_IDS).toEqual([
LocationSource.id,
ReminderSource.id,
WebSearchSource.id,
])
test("defines location and web search as default enabled sources", () => {
expect(DEFAULT_ENABLED_SOURCE_IDS).toEqual([LocationSource.id, WebSearchSource.id])
})
test("inserts default enabled source rows for a user", async () => {
@@ -75,7 +70,7 @@ describe("default user sources", () => {
}
expect(recording.table()).toBe(userSources)
expect(rows).toHaveLength(3)
expect(rows).toHaveLength(2)
expect(rows.map((row) => row.sourceId)).toEqual([...DEFAULT_ENABLED_SOURCE_IDS])
expect(recording.conflictTarget()).toEqual([userSources.userId, userSources.sourceId])

View File

@@ -1,16 +1,11 @@
import { LocationSource } from "@freya/source-location"
import { ReminderSource } from "@freya/source-reminders"
import { WebSearchSource } from "@freya/source-web-search"
import type { Database } from "../db/index.ts"
import { userSources } from "../db/schema.ts"
export const DEFAULT_ENABLED_SOURCE_IDS = [
LocationSource.id,
ReminderSource.id,
WebSearchSource.id,
] as const
export const DEFAULT_ENABLED_SOURCE_IDS = [LocationSource.id, WebSearchSource.id] as const
export type DefaultEnabledSourceId = (typeof DEFAULT_ENABLED_SOURCE_IDS)[number]

View File

@@ -37,13 +37,13 @@ export function meta({}: Route.MetaArgs) {
},
{ property: "og:title", content: PAGE_TITLE },
{ property: "og:description", content: PAGE_DESCRIPTION },
{ property: "og:image", content: "https://freya.chat/social-media-preview.jpg" },
{ property: "og:url", content: "https://freya.chat" },
{ property: "og:image", content: "https://ael.is/social-media-preview.png" },
{ property: "og:url", content: "https://ael.is" },
{ property: "og:type", content: "website" },
{ name: "twitter:card", content: "summary_large_image" },
{ name: "twitter:title", content: PAGE_TITLE },
{ name: "twitter:description", content: PAGE_DESCRIPTION },
{ name: "twitter:image", content: "https://freya.chat/social-media-preview.jpg" },
{ name: "twitter:image", content: "https://ael.is/social-media-preview.png" },
]
}
@@ -84,7 +84,7 @@ export async function action({ request }: Route.ActionArgs) {
await new Promise((resolve) => setTimeout(resolve, 1000))
const emailRes = await resend.emails.send({
from: "Freya <no-reply@freya.chat>",
from: "Freya <no-reply@ael.is>",
to: email,
template: {
id: "waitlist-confirmation",
@@ -380,6 +380,7 @@ function SystemMessageBubble({
isAnimating={isStreaming}
linkSafety={{ enabled: false }}
components={{
// @ts-expect-error
a: ({ className, ...props }) => <a className={`underline ${className}`} {...props} />,
}}
>

View File

@@ -40,7 +40,7 @@ const POLICY = `# Privacy Policy
**Last updated:** March 5, 2026
This Privacy Policy describes how **Freya** ("we", "us", or "our") collects, uses, and protects your personal information when you visit **https://freya.chat** or interact with our services.
This Privacy Policy describes how **Freya** ("we", "us", or "our") collects, uses, and protects your personal information when you visit **https://ael.is** or interact with our services.
If you do not agree with this Privacy Policy, please do not use the website.

View File

@@ -1,4 +1,4 @@
User-agent: *
Allow: /
Sitemap: https://freya.chat/sitemap.xml
Sitemap: https://ael.is/sitemap.xml

View File

@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://freya.chat/</loc>
<loc>https://ael.is/</loc>
</url>
<url>
<loc>https://freya.chat/privacy</loc>
<loc>https://ael.is/privacy</loc>
</url>
</urlset>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

View File

@@ -84,9 +84,7 @@ const ONE_DAY_MS = 24 * 60 * 60 * 1000
* It owns recurrence expansion, edit-scope semantics, and feed item signals.
*/
export class ReminderSource implements FeedSource<ReminderFeedItem> {
static readonly id = "freya.reminders"
readonly id = ReminderSource.id
readonly id = "freya.reminders"
private readonly storage: ReminderStorage
private readonly lookAheadMs: number