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

View File

@@ -1,16 +1,11 @@
import { LocationSource } from "@freya/source-location" import { LocationSource } from "@freya/source-location"
import { ReminderSource } from "@freya/source-reminders"
import { WebSearchSource } from "@freya/source-web-search" import { WebSearchSource } from "@freya/source-web-search"
import type { Database } from "../db/index.ts" import type { Database } from "../db/index.ts"
import { userSources } from "../db/schema.ts" import { userSources } from "../db/schema.ts"
export const DEFAULT_ENABLED_SOURCE_IDS = [ export const DEFAULT_ENABLED_SOURCE_IDS = [LocationSource.id, WebSearchSource.id] as const
LocationSource.id,
ReminderSource.id,
WebSearchSource.id,
] as const
export type DefaultEnabledSourceId = (typeof DEFAULT_ENABLED_SOURCE_IDS)[number] 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:title", content: PAGE_TITLE },
{ property: "og:description", content: PAGE_DESCRIPTION }, { property: "og:description", content: PAGE_DESCRIPTION },
{ property: "og:image", content: "https://freya.chat/social-media-preview.jpg" }, { property: "og:image", content: "https://ael.is/social-media-preview.png" },
{ property: "og:url", content: "https://freya.chat" }, { property: "og:url", content: "https://ael.is" },
{ property: "og:type", content: "website" }, { property: "og:type", content: "website" },
{ name: "twitter:card", content: "summary_large_image" }, { name: "twitter:card", content: "summary_large_image" },
{ name: "twitter:title", content: PAGE_TITLE }, { name: "twitter:title", content: PAGE_TITLE },
{ name: "twitter:description", content: PAGE_DESCRIPTION }, { 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)) await new Promise((resolve) => setTimeout(resolve, 1000))
const emailRes = await resend.emails.send({ const emailRes = await resend.emails.send({
from: "Freya <no-reply@freya.chat>", from: "Freya <no-reply@ael.is>",
to: email, to: email,
template: { template: {
id: "waitlist-confirmation", id: "waitlist-confirmation",
@@ -380,6 +380,7 @@ function SystemMessageBubble({
isAnimating={isStreaming} isAnimating={isStreaming}
linkSafety={{ enabled: false }} linkSafety={{ enabled: false }}
components={{ components={{
// @ts-expect-error
a: ({ className, ...props }) => <a className={`underline ${className}`} {...props} />, a: ({ className, ...props }) => <a className={`underline ${className}`} {...props} />,
}} }}
> >

View File

@@ -40,7 +40,7 @@ const POLICY = `# Privacy Policy
**Last updated:** March 5, 2026 **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. If you do not agree with this Privacy Policy, please do not use the website.

View File

@@ -1,4 +1,4 @@
User-agent: * User-agent: *
Allow: / 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"?> <?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url> <url>
<loc>https://freya.chat/</loc> <loc>https://ael.is/</loc>
</url> </url>
<url> <url>
<loc>https://freya.chat/privacy</loc> <loc>https://ael.is/privacy</loc>
</url> </url>
</urlset> </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. * It owns recurrence expansion, edit-scope semantics, and feed item signals.
*/ */
export class ReminderSource implements FeedSource<ReminderFeedItem> { export class ReminderSource implements FeedSource<ReminderFeedItem> {
static readonly id = "freya.reminders" readonly id = "freya.reminders"
readonly id = ReminderSource.id
private readonly storage: ReminderStorage private readonly storage: ReminderStorage
private readonly lookAheadMs: number private readonly lookAheadMs: number