- Claude Code as an engine: chats on a "claude-code/<alias>" model run through the claude CLI (stream-json); tool approvals go through our permission system. Sign in from the web UI (URL + pasted code), CLI version and update from Settings; the Docker image contains the CLI. - Small models (8k context) for side tasks: input is cut to the model's context window; one-line chat status, "What does this do?" on approvals, "Plan as automation" (job draft from a chat). - Mobile: top bar no longer widens the page, image viewer (zoom, swipe, mark up, use in message), jump to previous own message, message menu, time under every message. - Approvals: push actions (allow/reject), "always allow in this project" (never for dangerous commands) with revoke. - Per turn: changed files with diffs and rollback; project check command with a green/red badge and "let the agent fix it". - Colour tags for chats in the colours of the active theme. - Project defaults for new chats, project page (timeline), offline queue. Tested in a throwaway container with a mock model (8k small model): 26 API checks passed (permissions, diffs, checks, defaults, job draft, side-task budget, Claude Code status/login URL, unsigned-in chat). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
21 lines
723 B
TypeScript
21 lines
723 B
TypeScript
/** Put content into the composer of a chat from anywhere in the app (quote, image viewer, …). */
|
|
export interface ComposeDetail {
|
|
sessionId: string;
|
|
/** Appended to the text field (a blank line before it if there is text already). */
|
|
text?: string;
|
|
/** Attached like dropped files (images stay images). */
|
|
files?: File[];
|
|
}
|
|
|
|
export const COMPOSE_EVENT = "codecraft:compose";
|
|
|
|
export function compose(detail: ComposeDetail) {
|
|
window.dispatchEvent(new CustomEvent<ComposeDetail>(COMPOSE_EVENT, { detail }));
|
|
}
|
|
|
|
/** "> quoted\n> lines\n\n" for the composer. */
|
|
export function asQuote(text: string) {
|
|
const lines = text.trim().split("\n").map((l) => `> ${l}`.trimEnd());
|
|
return `${lines.join("\n")}\n\n`;
|
|
}
|