chore(release): v0.8.33 — sub-agent and RLM renovation with persistent sessions
- Persistent RLM sessions (rlm_open/rlm_eval/rlm_close) with bounded REPL helpers - Fork-aware sub-agent sessions (agent_open/agent_eval/agent_close) with handle_read - Shared handle_read storage with slice/range/count/JSONPath projections - Slash-command routing: /rlm, /agent, /relay (/接力) for handoff prompts - Sidebar renamed to "Work" tab, consistent across Plan/Agent/YOLO modes - Tool papercuts: file_search excludes, grep_files strings, fetch_url JSON, edit_file fuzz, exec_shell merged stdout/stderr, revert_turn no-op reject - CLI reasoning-effort honoured on non-auto exec routes (#1511 @h3c-hexin) - Edit-file replacement boundaries clarified (#1516) - Pandoc output validated before probing (#1523) - Running turns steerable/repaintable (#1533, #1537) - Tasks/Activity Detail calmer under load - npm retry timeout hint (#1538 @reidliu41) - Issue templates improved (#1525 @reidliu41) - Shell: kill process group to prevent UI freeze (#828 @CrepuscularIRIS) - TUI: ignore leaked SGR mouse reports in composer (#1421 @reidliu41) - Footer: keep chips within available width (#1417 @Wenjunyun123) - Session picker: scope Ctrl+R to current workspace (#1395 @LinQ) - Removed stale competitive-analysis doc - Prompts/docs teach only new tool names
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { fetchFeed, fetchRepoStats } from "@/lib/github";
|
||||
import { curate } from "@/lib/deepseek";
|
||||
import { putDispatch } from "@/lib/kv";
|
||||
import { putDispatchWithKv } from "@/lib/kv";
|
||||
import {
|
||||
agentChat,
|
||||
TRIAGE_PROMPT,
|
||||
@@ -32,6 +32,8 @@ export interface AgentEnv {
|
||||
MAINTAINER_GITHUB_PAT?: string;
|
||||
}
|
||||
|
||||
const CRON_STATUS_TTL = 60 * 60 * 24 * 14;
|
||||
|
||||
function dsEnv(env: AgentEnv): DeepSeekEnv {
|
||||
return {
|
||||
baseUrl: env.DEEPSEEK_BASE_URL ?? process.env.DEEPSEEK_BASE_URL,
|
||||
@@ -49,10 +51,29 @@ export async function runCurate(env: AgentEnv): Promise<Record<string, unknown>>
|
||||
fetchFeed(env.GITHUB_TOKEN, 30),
|
||||
]);
|
||||
const dispatch = await curate(env.DEEPSEEK_API_KEY, stats, feed, dsEnv(env));
|
||||
await putDispatch(dispatch);
|
||||
return { ok: true, headline: dispatch.headline };
|
||||
await putDispatchWithKv(env.CURATED_KV, dispatch);
|
||||
await env.CURATED_KV?.put(
|
||||
"cron:curate:last",
|
||||
JSON.stringify({
|
||||
ok: true,
|
||||
generatedAt: dispatch.generatedAt,
|
||||
headline: dispatch.headline,
|
||||
}),
|
||||
{ expirationTtl: CRON_STATUS_TTL }
|
||||
);
|
||||
return { ok: true, headline: dispatch.headline, stored: env.CURATED_KV ? "kv" : "memory" };
|
||||
} catch (e) {
|
||||
return { ok: false, error: String(e) };
|
||||
const error = String(e);
|
||||
await env.CURATED_KV?.put(
|
||||
"cron:curate:last",
|
||||
JSON.stringify({
|
||||
ok: false,
|
||||
generatedAt: new Date().toISOString(),
|
||||
error,
|
||||
}),
|
||||
{ expirationTtl: CRON_STATUS_TTL }
|
||||
);
|
||||
return { ok: false, error };
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -18,8 +18,8 @@ export interface RepoFacts {
|
||||
}
|
||||
|
||||
export const FACTS: RepoFacts = {
|
||||
"generatedAt": "2026-05-12T19:02:49.213Z",
|
||||
"version": "0.8.32",
|
||||
"generatedAt": "2026-05-12T22:56:03.599Z",
|
||||
"version": "0.8.33",
|
||||
"crates": [
|
||||
"agent",
|
||||
"app-server",
|
||||
@@ -90,7 +90,7 @@ export const FACTS: RepoFacts = {
|
||||
],
|
||||
"defaultModel": "deepseek-v4-pro",
|
||||
"nodeEngines": ">=18",
|
||||
"toolCount": 64,
|
||||
"toolCount": 68,
|
||||
"license": "MIT",
|
||||
"latestRelease": null
|
||||
};
|
||||
|
||||
+7
-3
@@ -6,7 +6,7 @@ import type { CuratedDispatch } from "./types";
|
||||
|
||||
const MEM = new Map<string, string>();
|
||||
|
||||
interface KVNamespace {
|
||||
export interface KVNamespace {
|
||||
get(key: string): Promise<string | null>;
|
||||
put(key: string, value: string, opts?: { expirationTtl?: number }): Promise<void>;
|
||||
list(opts?: { prefix?: string; limit?: number }): Promise<{ keys: { name: string }[] }>;
|
||||
@@ -53,9 +53,13 @@ export async function getDispatch(): Promise<CuratedDispatch | null> {
|
||||
|
||||
export async function putDispatch(d: CuratedDispatch): Promise<void> {
|
||||
const env = await getEnv();
|
||||
await putDispatchWithKv(env.CURATED_KV, d);
|
||||
}
|
||||
|
||||
export async function putDispatchWithKv(kv: KVNamespace | undefined, d: CuratedDispatch): Promise<void> {
|
||||
const value = JSON.stringify(d);
|
||||
if (env.CURATED_KV) {
|
||||
await env.CURATED_KV.put("dispatch:latest", value, { expirationTtl: 60 * 60 * 24 * 7 });
|
||||
if (kv) {
|
||||
await kv.put("dispatch:latest", value, { expirationTtl: 60 * 60 * 24 * 7 });
|
||||
} else {
|
||||
MEM.set("dispatch:latest", value);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user