v0.3.0: rename app Daybook -> AgentFeed

Removes the "Daybook" name from everything user- and agent-facing, since no
agents are configured yet and this is the cheap moment to do it.

- UI brand, docs, README, CLAUDE.md -> AgentFeed.
- Ingest env vars DAYBOOK_URL/TOKEN/SOURCE/DATA_DIR/BIND_ADDR/HOST_DATA_DIR/
  KEY_PROVISIONING_API -> AGENTFEED_* (token *values* unchanged).
- Skill: skills/daybook-posting -> skills/agentfeed-posting, daybook_post.py
  -> agentfeed_post.py (+ scripts/ wrapper and its test).
- static/daybook.css -> static/agentfeed.css; localStorage daybook.* ->
  agentfeed.*; templatetag daybook_extras -> agentfeed_extras; multipart
  boundaries; json/csv viewer element ids; daybook_exception_handler ->
  agentfeed_exception_handler; compose service/container -> agentfeed.
- Key-provisioning API now OFF by default (independent of DEBUG); enable with
  AGENTFEED_KEY_PROVISIONING_API=1 on test installs only.
- Posting helper now points at Settings -> API Keys.

Deferred on purpose (a later, separate step): the Django package
`daybook_project`, the `/opt/daybook` install path, and the Forgejo repo name.
The sibling AGENT_DAYBOOK__LLM_TEST name is intentionally untouched.

Full suite: 129 passing; live server verified serving under the new name.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
peter 2026-09-04 13:10:28 +01:00
parent 4cacd8f64e
commit d30e2436ab
39 changed files with 303 additions and 284 deletions

View file

@ -1,4 +1,4 @@
{% load daybook_extras %}
{% load agentfeed_extras %}
<header class="topbar">
<div class="brandline">
<a class="brand-link" href="{% url 'feed' %}"><img class="brand-logo" src="/static/logo.png" alt=""><h1>AgentFeed</h1></a>
@ -48,10 +48,10 @@
const isDark = document.documentElement.getAttribute("data-theme") === "dark";
if (isDark) {
document.documentElement.removeAttribute("data-theme");
try { localStorage.setItem("daybook.theme", "light"); } catch (e) {}
try { localStorage.setItem("agentfeed.theme", "light"); } catch (e) {}
} else {
document.documentElement.setAttribute("data-theme", "dark");
try { localStorage.setItem("daybook.theme", "dark"); } catch (e) {}
try { localStorage.setItem("agentfeed.theme", "dark"); } catch (e) {}
}
syncLabel();
});

View file

@ -6,12 +6,12 @@
<title>AgentFeed</title>
<link rel="icon" type="image/png" href="/static/favicon.png">
<link rel="apple-touch-icon" href="/static/apple-touch-icon.png">
<link rel="stylesheet" href="/static/daybook.css">
<link rel="stylesheet" href="/static/agentfeed.css">
<script>
// Set the theme before first paint so dark-mode users never see a light flash.
(function () {
try {
if (localStorage.getItem("daybook.theme") === "dark") {
if (localStorage.getItem("agentfeed.theme") === "dark") {
document.documentElement.setAttribute("data-theme", "dark");
}
} catch (e) {}
@ -141,8 +141,8 @@
const sourceSelected = Boolean(feed.dataset.selectedSource);
const sizes = {
days: Number(localStorage.getItem("daybook.daysWidth")) || 144,
artifacts: Number(localStorage.getItem("daybook.artifactsWidth")) || 280,
days: Number(localStorage.getItem("agentfeed.daysWidth")) || 144,
artifacts: Number(localStorage.getItem("agentfeed.artifactsWidth")) || 280,
};
const applySizes = () => {
@ -177,7 +177,7 @@
};
const up = () => {
localStorage.setItem(`daybook.${target}Width`, String(sizes[target]));
localStorage.setItem(`agentfeed.${target}Width`, String(sizes[target]));
document.body.classList.remove("is-resizing");
splitter.removeEventListener("pointermove", move);
splitter.removeEventListener("pointerup", up);

View file

@ -6,12 +6,12 @@
<title>Log in — AgentFeed</title>
<link rel="icon" type="image/png" href="/static/favicon.png">
<link rel="apple-touch-icon" href="/static/apple-touch-icon.png">
<link rel="stylesheet" href="/static/daybook.css">
<link rel="stylesheet" href="/static/agentfeed.css">
<script>
// Set the theme before first paint so dark-mode users never see a light flash.
(function () {
try {
if (localStorage.getItem("daybook.theme") === "dark") {
if (localStorage.getItem("agentfeed.theme") === "dark") {
document.documentElement.setAttribute("data-theme", "dark");
}
} catch (e) {}

View file

@ -4,7 +4,7 @@
<div class="about-head">
<img class="about-logo" src="/static/logo.png" alt="">
<div>
<h2>Daybook</h2>
<h2>AgentFeed</h2>
<p class="about-version">Version {{ version }}</p>
</div>
</div>

View file

@ -6,7 +6,7 @@
<h3>API Keys</h3>
<p>
Posting to Daybook uses named API keys — one per agent or script, each
Posting to AgentFeed uses named API keys — one per agent or script, each
revocable on its own. You have {{ key_count }} key{{ key_count|pluralize }}.
</p>
<p><a href="{% url 'settings-api-keys' %}">Manage API keys &rarr;</a></p>

View file

@ -4,7 +4,7 @@
<h2>API Keys</h2>
<p>
One key per agent or script. Name each key so you know which agent it's
for, copy it into that agent's <code>DAYBOOK_TOKEN</code>, and revoke keys
for, copy it into that agent's <code>AGENTFEED_TOKEN</code>, and revoke keys
individually here. Use a key as
<code>Authorization: Bearer &lt;key&gt;</code> when posting.
</p>

View file

@ -6,12 +6,12 @@
<title>Settings — AgentFeed</title>
<link rel="icon" type="image/png" href="/static/favicon.png">
<link rel="apple-touch-icon" href="/static/apple-touch-icon.png">
<link rel="stylesheet" href="/static/daybook.css">
<link rel="stylesheet" href="/static/agentfeed.css">
<script>
// Set the theme before first paint so dark-mode users never see a light flash.
(function () {
try {
if (localStorage.getItem("daybook.theme") === "dark") {
if (localStorage.getItem("agentfeed.theme") === "dark") {
document.documentElement.setAttribute("data-theme", "dark");
}
} catch (e) {}