Goal: Build an all-in-one agent platform for Global × China enterprises — delivered through three progressive modes: Standalone (portal assistant), Copilot (embedded in host system), Hub (central cross-system orchestration). Principles: Provider-agnostic (no vendor lock-in), minimal-abstraction, protocol-first, connector-first (integration is the core value).
Product Vision
FIM One is an all-in-one agent platform that serves three progressive delivery modes:Known Issues
Tracked bugs that are reproducible in production but not yet fixed. Each entry names the symptom, the suspected surface area, and the workaround (if any). Items move to a version section once a fix is scoped and scheduled.- Playground stop-and-retry shows transient visual artefacts that a page refresh always clears. Three concurrent render sources —
activeConversation.messages(DB snapshot), the SSEmessagesstream, and the optimisticpendingQueryplaceholder — are not collapsed into a single derived state, so between clicking “Retry” and the paired assistant response landing, the UI can (a) briefly render the same query twice in the pre-stream window, (b) drop prior orphan user bubbles from the retry history whilehasLiveMessagesis true and before the snapshot reloads, and (c) flicker in the narrow window between the SSE “done” event and the nextselectConversationrefresh. Data is never lost — every user message (including aborted retries) is persisted inconversation.messages, carried into the next LLM call vianormalize_alternating_messages, and rendered correctly after refresh viaHistoryTurn.orphanUserContentsintroduced in the48ba08c6render fix. For context, Claude’s own web UI exhibits an analogous class of bug — stopping mid-response and immediately sending a follow-up query sometimes forks the follow-up as a sibling-edit branch of the first query rather than appending it as a new turn — so this is a known hard problem in optimistic-UI + SSE + persisted-history designs, not a FIM-One-specific defect. A proper fix requires collapsing the three render sources into a single derived state; deferred until a broader Playground state-machine refactor.
Shipped Versions
v0.1 (2026-02-22) — MVP: ReAct + DAG Planner
- ReActAgent with tools (calculator, python_exec, web_search)
- DAG Planner (LLM generates dependency graphs)
- Portal UI with streaming + KaTeX
v0.2 (2026-02-24) — Multi-Model + Memory
- Retry / rate limiting / usage tracking
- Native function calling (no JSON-only parsing)
- Multi-model support (fast + main LLM)
- Memory: WindowMemory, SummaryMemory
- FastAPI backend with SSE streaming
v0.3 (2026-02-25) — Web Tools + MCP
- Web tools (web_search, web_fetch) via Jina/Tavily/Brave
- File operations tool
- MCP client (standard tool integration)
- Tool auto-discovery + categories
- DAG visualization with click-to-scroll
- Code exec in Docker (
--network=none)
v0.4 (2026-02-25) — Multi-Turn + Agents
- Multi-turn conversations (DbMemory)
- Tool step folding UI
- HTTP request + shell exec tools
- Agent management (create, configure, publish)
- JWT authentication
- Per-agent execution mode + temperature control
v0.5 (2026-02-28) — Full RAG + Grounded Gen
- Full RAG pipeline (embedding + vector store + FTS + RRF + reranker)
- Grounded Generation (citations, confidence scores)
- Knowledge base document management (CRUD, search, retry, schema migration)
- ContextGuard + pinned messages (token budget manager)
- DbMemory persistence + LLM Compact
- DAG Re-Planning (up to 3 rounds)
v0.6 (2026-03-01) — Connector Platform
- Connector CRUD: create, read, update, delete
- ConnectorToolAdapter: converts Connector → BaseTool
- Per-user credentials: AES-GCM encryption
- Confirmation gate: write operation approval
- Audit logging: all tool calls recorded
- Circuit breaker: graceful degradation on failures
- Utility tools: email_send, json_transform, template_render, text_utils
- Embedding options: Jina, OpenAI, custom providers
v0.7 (2026-03-06) — Admin Platform + Multi-Tenant
- Admin Platform: user management, role toggle, password reset, account enable/disable
- Invite-only registration: three modes (open/invite/disabled) + invite code CRUD
- Storage management: per-user disk usage, clear, orphan cleanup
- Conversation moderation: admin list/delete all
- Per-user force logout: revoke all tokens
- API health dashboard: system stats, connector metrics
- First-run setup wizard: guided admin account creation
- Personal Center: per-user global instructions, language preference
- JWT auth: token-based SSE auth, conversation ownership
- Global MCP servers: admin-provisioned, loaded in all sessions
- Backward-compat: registration_enabled → registration_mode auto-migration
v0.7.x (2026-03-07 to 2026-03-12) — Stability + Refinements
- Invite code management
- Per-user quotas (429 enforcement)
- Structured audit logging
- Sensitive word filtering
- Admin login history
- Admin file browser
- Enhanced admin views (model_name, tools, kb_ids fields)
- Docker Compose deployment (single image, named volumes)
- OAuth auto-detection from window.location
- Extended thinking / reasoning support (
LLM_REASONING_EFFORT,LLM_REASONING_BUDGET_TOKENS) for OpenAI o-series, Gemini 2.5+, Claude - Admin per-tool enable/disable (disabled tools excluded from chat at runtime)
- MCP servers management moved to Connectors page
- Dual database support: SQLite (zero-config default) + PostgreSQL (production); Docker Compose auto-provisions PostgreSQL
- Models configuration documentation page with extended thinking setup per provider
- SSE Protocol v2: real-time answer streaming with
delta_reasoning,usagefields, and splitdone/suggestions/title/endevents; SQLite pool size 5 -> 20 - AI Builder expansion: 7 new builder tools (GetSettings, TestConnection, ImportOpenAPI for connectors; ListConnectors, AddConnector, RemoveConnector, SetModel for agents),
is_builderflag on agents, builder prompt auto-refresh, SSRF guard - SSE v2 frontend: streaming dot-pulse cursor, DAG re-plan round snapshots as collapsible cards, DAG layout decoupled from step states
- AI Builder concept documentation page with connector and agent builder guides
- Organization system: full CRUD with role-based membership (owner/admin/member), admin management UI
- Three-tier resource visibility (personal/org/global) for agents, connectors, knowledge bases, MCP servers
- Publish/unpublish API for all resource types; owner delegation for published agents
- Admin set-visibility endpoint (replaces clone-to-global); unified
build_visibility_filter()query helper - Database Connectors (Phase 1-3): direct SQL access to PG/MySQL/Oracle/SQL Server + Chinese legacy DBs; schema introspection, AI annotation, read-only query execution, encrypted credentials, 3 tools per connector (
list_tables,describe_table,query) - Evaluation Center: quantitative agent quality benchmarking — test dataset CRUD (prompt + expected behavior + assertions), eval runs (parallel execution + LLM grader + per-case pass/fail/latency/token results), results viewer with auto-polling; migration
r8t0v2x4z567 - Three model roles (General/Fast/Reasoning) with per-tier env config isolation; fast model no longer inherits main model settings
StepOutputdataclass replacing plain string step results for structured data and artifact passing- Tool cache for DAG execution — identical tool calls cached per-run with async lock stampede prevention (
DAG_TOOL_CACHE) - Per-step LLM verification with 1 retry on failure (
DAG_STEP_VERIFICATION) - Auto-routing: fast LLM classifies queries as ReAct or DAG;
/api/autoendpoint; frontend 3-way mode toggle (AUTO_ROUTING) -
Shadow Market Organization + Resource Subscriptions: Built-in Market org (shadow, no auto-join) replaces Platform org; resources discovered via marketplace browsing and explicitly subscribed (pull model); Market API for subscribing to shared resources; publish-to-Market always requires review; Resource subscriptions table; org-based resource sharing replacing global visibility -
Agent Auto-discovery and Sub-agent Binding:discoverableflag on agents;sub_agent_idswhitelist; CallAgentTool for delegating tasks to specialist agents -
MCP Server Credentials + Per-User Override:mcp_server_credentialstable;PUT /api/mcp-servers/{id}/my-credentialsendpoint;allow_fallbackflag for credential fallback behavior -
Connector/KB Toggle:POST /api/connectors/{id}/toggleandPOST /api/knowledge-bases/{id}/togglefor suspending/resuming resources -
Standalone KB Conversations:kb_idsfield on conversations for direct KB chat without agent binding
v0.8 (2026-03-20) — Connector Declarative Config + Progressive Disclosure
- Database connectors: direct SQL access (PostgreSQL, MySQL, Oracle) (shipped in v0.7.x — Phase 1-3)
- RBAC: per-user/role connector access control (shipped in v0.7.x — org system + three-tier visibility)
- Connector credential encryption + per-user override:
connector_credentialstable, Fernet encryption viaCREDENTIAL_ENCRYPTION_KEY,allow_fallbackflag,GET/PUT/DELETE /my-credentialsendpoints, per-user credential resolution in chat tool loading - Publish review UI: Org-level publish review system — review toggle per org, ReviewsSheet with approve/reject workflow, status badges on resource cards, review notice in publish dialog, resubmit for rejected resources
- Connector Progressive Disclosure (Phase 1-2): single
ConnectorMetaToolreplaces per-action tools; system prompt receives lightweight stubs only (name + 1-line description, ~30 tokens/connector vs ~250 tokens/action); agent callsdiscover(connector)to load full action schema on demand — schema only loads when the model selects a connector, keeping the prompt prefix stable for caching. Follows the deferred tool-loading pattern common in modern agent frameworks.executesubcommand; feature flag for backward compatibility. - Agent Skill System + Compact Instructions: On-demand skill loading for agent instructions —
Skillmodel (name, content/SOP, optional scripts) attached to agents; referenced in system prompt by name only (~10 tokens/skill); agent callsread_skill(name)to load full content on demand. Reduces per-conversation instruction token cost by ~80% while allowing richer SOP libraries. Counterpart to ConnectorMetaTool’s progressive disclosure applied at the instruction level. Enables the “指令 + 工具 + 技能” differentiation story. Also addscompact_instructionsfield to Agent model — per-agent compression priority list injected intoContextGuardwhen compacting (e.g., “preserve order IDs and amounts, drop raw API responses”), replacing the current static generic prompt. Follows the Compact Instructions convention widely adopted in modern agent frameworks. - Connector import/export: share connector templates
- Connector fork: clone + customize existing connectors
- Workflow Phase 2 Nodes: Iterator, Loop, VariableAggregator, ParameterExtractor, ListOperation, Transform, DocumentExtractor, QuestionUnderstanding, HumanIntervention — 9 advanced node types with full frontend + backend + 150 new tests (275 total). Node retry with exponential backoff, safe expression evaluation. Stats panel with success rate bar. 12 built-in templates. Pane context menu (Paste, Select All, Fit View, Auto Layout).
- Workflow Phase 3 Nodes: SubWorkflow + ENV — 2 new node types (25 nodes total), 14 new tests (306 total), 14 built-in templates. SubWorkflow: full DB-backed nested workflow executor with target workflow selection, variable mapping, and configurable depth limit to prevent infinite recursion. ENV: reads encrypted environment variables with key picker and fallback defaults. Full frontend (node components, config panels, palette entries, minimap colors). Per-node execution statistics panel (success rates, durations, failure counts sorted worst-first).
getNodeStatsAPI client +NodeStatEntrytype. Keyboard shortcuts dialog (?key). - Workflow Scheduled Triggers: Per-workflow cron configuration with timezone, default inputs, and next-run-at calculation. Preset cron buttons, 30 trigger tests.
- Workflow API Triggers: Public per-workflow API keys (
wf_prefix) for external execution without user auth, with rate limiting. API key management dialog with generate/regenerate/revoke, trigger URL, and cURL/JS examples. - Workflow Batch Execution:
POST /batch-runwith up to 100 input sets, configurable parallelism (1-10), collapsible per-item results, JSON export. 14 batch execution tests. - Workflow Execution Log Viewer: Real-time chronological SSE event stream in the run panel with timestamps, color-coded badges, and event type filter toggles.
- Workflow Run Stats: Backend batch-fetches run counts and success rates via GROUP BY subquery; frontend displays stats on workflow cards with color-coded success rate indicators.
- Workflow Scheduler Daemon: Background async service polling every 60s for due cron-based workflows. Croniter timezone support, semaphore concurrency,
last_scheduled_attracking, webhook delivery. 14 tests. - Workflow Import Conflict Resolver: Detects unresolved agent/connector/KB/MCP references during import. Batch DB queries with visibility filtering, frontend toast warnings. 17 tests.
- Workflow Test-Node Execution: Isolated single-node testing with mock variables, integrated into editor (config panel Test button + context menu). 23 tests.
- Workflow Version Diff: Side-by-side blueprint comparison with node/edge change detection, color-coded indicators (added/removed/modified).
- Workflow Run Management: Delete individual runs (
DELETE /runs/{run_id}) and clear all completed runs (DELETE /runs), with frontend confirmation dialogs. - Workflow Run Replay Overlay: “View on Canvas” button in run history to overlay past execution results on the canvas, showing per-node status and output without re-executing.
- Workflow Favorites/Pinning: Star/pin workflows to the top of the list with localStorage persistence.
- Workflow Run History Export: Export run history as JSON file download with full run metadata and per-node results.
- Admin Workflows Management: Admin panel tab for managing all workflows across users — list, toggle active/inactive, delete with confirmation. Batch endpoints for delete, toggle, and publish with audit logging.
- Workflow Templates System:
WorkflowTemplateORM model with admin CRUD, public listing/clone API, and 5 seed templates auto-inserted on first startup. - Workflow Inline Validation Badges: Real-time per-node
ValidationBadgeon canvas with error/warning tooltips for immediate visual feedback during editing. - Workflow Execution Trace Viewer: Timeline-based trace viewer Sheet with engine
trace_levelparameter and per-node variable snapshots for step-through debugging. - Workflow Rate Limiting and Timeout: Per-user
WorkflowRateLimiter(sliding window 10 runs/min, 3 concurrent) and default 10-minute global run timeout. - Workflow Blueprint System: Visual workflow editor for designing and executing multi-step automation blueprints —
Workflow/WorkflowRunORM models, full CRUD + SSE execution API, import/export, duplicate, blueprint validation endpoint,WorkflowEnginewith topological sort + semaphore-based concurrency + condition branching and 12 node types (Start, End, LLM, ConditionBranch, QuestionClassifier, Agent, KnowledgeRetrieval, Connector, HTTPRequest, VariableAssign, TemplateTransform, CodeExecution),VariableStorewith{{node_id.output}}interpolation andenv.*namespace, error strategies per node (STOP_WORKFLOW / CONTINUE / FAIL_BRANCH) with per-node timeout and advanced config UI, React Flow v12 visual editor with drag-and-drop palette + node config panel + variable picker combobox + add-node-on-edge + auto-layout (ELK.js) + run history sheet, Dify-style compact node design with ring-based run status styling and animated edge transitions, 4 built-in starter templates (Simple LLM Chain, Conditional Router, Knowledge-Augmented QA, HTTP API Pipeline) with template picker dialog andGET /templates+POST /from-templateAPI, stats endpoint,?run=trueURL param auto-open, subprocess-based code execution security, 105-test suite (templates, eval namespace flattening, blueprint validation warnings, node/edge deletion, import/export/duplicate, deadlock detection, multi-condition branching) - Operation audit: detailed logging of who did what — admin review log audit tab added (publish review trail per org/resource)
- Semantic Schema Annotations: extend connector schema fields with
semantic_tag,description, andpiiflags; annotations surfaced in LLM tool descriptions so the agent understands field intent without guessing from column names
v0.8.1 (2026-03-29) — Progressive Disclosure Maturity + ReAct Hardening
- Progressive disclosure for DB connectors (
DatabaseMetaTool), MCP servers (MCPServerMetaTool), and on-demand tool loading (request_toolsmeta-tool) - DAG quality overhaul (5 improvements: model upgrade, skill auto-discovery, citation verifier, structured content preservation, domain-aware routing)
- Domain model escalation in ReAct (specialist domains auto-escalate to reasoning model)
- Per-model Native Function Calling toggle (
tool_choice_enabled) - ReAct cycle detection (deterministic duplicate tool call prevention)
- ReAct completion checklist (pre-answer verification when tools were used)
- Resource Fork Phase 1 (MCP Server + Skill fork endpoints with lineage tracking)
- Workflow Connection Dep Auto-Subscribe (recursive sub-workflow dependency resolution)
- Prebuilt Solution Templates (8 vertical solutions seeded to Market on first registration)
- Admin notification improvements (timezone-aware, master switch, SMTP Reply-To)
- Per-turn token budget circuit breaker (
REACT_MAX_TURN_TOKENS) - Centralized tool truncation, dynamic system prompt budgeting
- File attachment download, duplicate message submission fix
v0.8.2 (2026-04-10) — Agent Core Hardening + Vision Documents
- Agent Core Phase 0 — Compact prompt upgraded to 9-section structured format; empty tool result protection (descriptive message instead of
(no output)); anti-loop prompt + cycle detection threshold lowered to 2; domain classifier + pre-flight DB config resolution parallelized (400–1100 ms saved per request); SSEendevent sent immediately after answer, with title/suggestions moved to background tasks - Agent Core Phase 1 (Context Anti-Bloat) —
MicroCompactrule-based old tool result cleanup (keep last 6);REACT_TOOL_RESULT_BUDGET=40000aggregate cap; reactive compact on context overflow (auto-compact to 50% budget and retry instead of crashing) - Agent Core Phase 2 (Speed) — Keyword-based tool pre-selection (skips LLM call on obvious matches, 200–500 ms saved);
SharedHttpClientLLM connection pooling; completion check skipped for answers >200 tokens;FallbackLLMwraps primary+fast with automatic failover on 429/503/529/connection errors - Intelligent Document Processing (Vision-Aware) — Adaptive document handling: PDF pages rendered as images via PyMuPDF for vision-capable models (GPT-4o, Claude 3/4, Gemini), text-only fallback via pdfplumber. Per-model
supports_visionflag. Modes viaDOCUMENT_PROCESSING_MODE,DOCUMENT_VISION_DPI,DOCUMENT_VISION_MAX_PAGES. DOCX/PPTX embedded image extraction. Multi-turn vision persistence across conversation turns. Smart PDF processing (text-rich pages extract text + images; scanned pages render as full-page PNG). Pre-built sandbox image (Dockerfile.sandbox) with common data-science packages for--network=nonecode execution - Resource Fork completion — Agent / Connector / Workflow fork endpoints added, completing the five-type lineage tracking (KB fork removed — inherently user-local)
- File integrity guardrail — System prompt rule prevents the agent from substituting unrelated file contents when a target file is unreadable; uploaded files now include
file_idin message context for directread_uploaded_fileaccess
v0.8.3 (2026-04-16) — Universal Document Conversion + Agent Core Phase 3
- Universal Document Conversion (
convert_to_markdown+ OCR) — Built-in Agent tool wrapping Microsoft MarkItDown; converts PDF, Word, Excel, PowerPoint, HTML, JSON, CSV, XML, ZIP, EPUB, Outlook .msg, images, audio, YouTube URLs to Markdown.LiteLLMOpenAIShimenables OCR via any vision-capable LLM (Claude, Gemini, Bedrock, Azure). Vision-aware RAG ingestion with zero-regression text-only fallback.LLM_SUPPORTS_VISIONenv var for opt-out - Agent Core Phase 3 (Runtime Invariant Hardening) — Conversation recovery (dangling
tool_useauto-repair); structured compact work card (WorkCardtyped merge across compaction rounds); turn-level profiler (REACT_TURN_PROFILE_ENABLED); per-user rate limiting (LLM_RATE_LIMIT_PER_USER); empty-content assistant message withtool_callsno longer dropped
v0.8.4 (2026-04-17) — Prompt Cache + Reasoning Correctness
- System prompt section registry with cache breakpoints — Memoized
PromptRegistrysplits system prompts into stable prefix + dynamic suffix; cache-capable providers (Claude, Bedrock Anthropic, Vertex Claude) receivecache_control: {"type": "ephemeral"}on the prefix for ~60-80% per-turn input token savings. Non-cache providers get a single concatenated message (zero behavior change) - Prompt cache observability —
cache_read_input_tokensandcache_creation_input_tokenstracked throughUsageSummary→TurnProfiler→done_payload.cachefield. Structuredturn_cachelog line per turn. Doubles as relay cache-honesty probe - Conversation recovery MVP — Synthetic
tool_resultrows persist after interrupted turns;POST /chat/resumereplays cached SSE events from a monotonic cursor; frontenduseSseResumehook auto-reconnects with exponential backoff (300ms → 1s → 3s, max 3 attempts) and “Reconnecting…” indicator - Thinking-block persistence with signature —
reasoning_content+ Anthropicsignaturepersisted inmetadata_["thinking"]and replayed on subsequent turns; fixes HTTP 400 signature mismatch on Claude 4 multi-turn conversations - Provider-aware reasoning replay policy — Centralized
reasoning_replay_policy()incore/prompt/reasoning.pygates serialization per provider family: Claude replays thinking blocks with signature; DeepSeek-R1/Qwen-QwQ/Gemini-thinking/o-series dropreasoning_contenton outbound (previously leaked, breaking provider KV caches and violating API docs)
v0.8.5 (2026-04-23) — Channel Integration + Hook System + Contributor i18n
- Feishu Channel (Phase 1 subset) — Org-scoped
Channelresource with Fernet-encrypted credentials;FeishuChannelsupports interactive card send + callback (signature verification + URL challenge); Settings → Channels management UI (list, create/edit with dirty-state protection, details with copyable callback URL, test-send); CRUD API (/api/channels) and event callback endpoint (/api/channels/{id}/callback). Shipped early for 2026-04-24 roadshow - Agent Hook System (live in ReAct + DAG runtime) —
PreToolUseHook/PostToolUseHookabstraction insrc/fim_one/core/hooks/; agents declaringhooks.class_hooksinmodel_config_jsonhave hooks instantiated and registered per chat session. First consumerFeishuGateHookposts an Approve/Reject card to the linked Feishu group when an agent calls arequires_confirmation=Truetool, blocks execution, and resumes or aborts based on verdict - Configurable confirmation gate (inline OR channel) — Every agent gets an Approval section with three routing modes (Auto / Inline only / Channel only), approver-scope selector (initiator / owner / anyone in org), per-tool override, and explicit approval-channel picker. Auto mode gracefully falls back to an inline approval card when no channel is linked.
POST /api/confirmations/{id}/respondshares a single decision-recording path with the Feishu webhook - Per-agent task completion notifications — Long-running ReAct or DAG agents can push a summary card to the org’s channel when a task finishes. First consumer of the generic outbound notification pattern
- Hook Approval Playground — Channels details sheet has a “Test Approval Flow” action that exercises the full production path (genuine
ConfirmationRequestrow, real Feishu callback, status transitions) — same code path a production hook uses - Contributor-friendly i18n CI fallback —
.github/workflows/i18n-sync.ymltranslates EN → ZH/JA/KO/DE/FR on master after PR merge and auto-commits with[skip ci]; contributors no longer needLLM_API_KEYlocally. Pre-commit locale-edit guard refuses manual edits to generated locale files (ALLOW_LOCALE_EDIT=1override for legitimate translation fixes). End-to-end verified via smoke-test push - Exa integration docs — Dedicated Integrations section with a first-class Exa page covering the full Exa search surface (neural / fast / deep-reasoning / instant), filtering, content retrieval, and three tuned presets
- Xinchuang (信创) database support — Database Connector now lists KingbaseES (人大金仓), HighGo (瀚高), and DM8 (达梦) alongside PostgreSQL/MySQL. PG-compatible drivers reuse
asyncpg; DM8 usesdmPython.scripts/test_xinchuang_dbs.pyverifies live connectivity from the CLI - Channels + Hook System architecture docs —
docs/architecture/hook-system.mdxexplains the three hook points and walks through FeishuGateHook end-to-end; existing architecture pages cross-link; README lists Messaging Channels as a first-class capability - Hardening — Duplicate Feishu callback clicks produce a replacement card instead of double-deciding; concurrent callback clicks resolved via conditional
UPDATE ... WHERE status='pending'rowcount check; pending approvals auto-expire afterCHANNEL_CONFIRMATION_TTL_MINUTES(default 24h) via background sweeper; Settings → Channels respects org role (members see read-only UI); parallel tool-call aggregator handles providers that reuseindex=0for every delta; session-expiry redirect preserves query string
v0.8.6 (2026-05-08) — Stripe Billing + Refinements
- Stripe billing MVP — Free + Pro tiers; Checkout, Customer Portal, webhook lifecycle;
/settings?tab=billing; admin plan/subscription CRUD; quota enforcement respects each user’s plan - Admin-controlled billing feature flag —
system_settings.billing_enabledgates the entire Stripe pipeline so private deployments without Stripe credentials never surface a non-functional payment UX - Per-user unlimited quota — empty inherits global default,
0grants unlimited; previously both collapsed into the same state - Translation glossary as single source of truth —
scripts/translation-glossary.mdconsolidates per-locale rules; pre-commit unconditionally refuses manual edits to generated locale files - License + governing law migrated to FIM Labs Pte. Ltd. (Singapore); SIAC arbitration in English; new top-level
NOTICEfile - Playground follow-up suggestions restored, opt-in per agent
- Stability fixes — strict-alternation provider history, parallel tool-call boundary detection, unbound-agent confirmation flow, channel role gating, retry-duplicate suppression, post-rejection no-paraphrase
v0.8.7 (2026-06-10) — Security Hardening + Guardrails v0 + Billing Correctness
- JWT token-type confinement — closes a 2FA bypass where any same-signed token (temp/refresh/ticket) could authenticate API and SSE endpoints
- OAuth hardening — email auto-link requires a provider-verified email (account-takeover fix); OAuth refresh tokens stored hashed so session rotation works
- Content guardrails v0 — input/output tripwire layer (
core/agent/guardrail); ships jailbreak detector + max-length output guardrail, env-var configured -
file_ops.apply_patch— V4A diff patches with fuzzy whitespace matching, complementsfind_replace - Billing-cycle correctness — quota resets on the subscription anniversary (not calendar month); renewals advance the period via authoritative Stripe lookup; usage display aligned to the enforcement window
- Reliability fixes — pseudo-protocol tool-call leak stripped from answers; tunable HTTP keep-alive ends
APIConnectionErrorbursts; API-key usage stats persist on read-only requests - Billing tab visual overhaul — full-width, consistent with other Settings tabs
v0.8.8 (2026-06-22) — SSRF Hardening + Reliability & Reasoning Fixes
- SSRF hardening — blocklist unwraps IPv4-mapped IPv6 (
::ffff:instance-metadata bypass); MCP SSE/Streamable-HTTP server URLs SSRF-validated on create + connect - LLM reliability — shared HTTP pool self-heals after a LiteLLM client-cache eviction closes it; chat sends stream instantly (history folded in background, no full reload)
- Anthropic adaptive-thinking protocol for Opus 4.6+/Sonnet 4.6/Fable 5 — extended thinking works where the old fixed-budget param 400s on 4.7/4.8; warns on OpenAI-proxy misroute
- Reasoning detail preserved end-to-end — genuine final answer streamed verbatim; survives compaction, context rebuilds, and sub-agent steps (no lossy re-synthesis)
- PreToolUse enforcement hooks fail closed on error — a crashing approval gate no longer silently allows the call; non-enforcement hooks keep fail-open via
fail_open - Force-logout timestamp comparison normalized to UTC by conversion + Docker Compose
POSTGRES_*credential override (no shippedfim:fimdefault)
v0.8.9 (2026-07-08) — Module Slim-down + Sharing Convergence + Approval Hardening
- Skills & Workflows soft-shelved behind admin module flags (default off) — core-only boot; nothing deleted, reversible from Admin → Settings → Modules
- Sharing converged — KB sharing removed (KBs reach others only via shared Agents), DB connectors unshareable + raw SQL owner-only, workflow builder trimmed to 9 reference-only nodes
- Feishu approval hardening — card clicks enforce approver identity, callback signatures fail closed + encrypted envelopes decrypted, approvals never routed to an unintended chat
- Use-time access re-checks — shared MCP servers and bound KBs re-verified per run; leaving an org revokes subscriptions and saved credentials immediately
- Agent loop hardening — plan board, background tools, incremental DAG replan + checkpoint resume, compaction keeps tool pairing, truncation continuation, 529/504 retry
-
run_workflowagent tool + workflow correctness — Agent node runs the full agent, confirmation gates fail closed, connector calls access-checked and audit-logged - Account deletion unified — admin and self-serve funnel through one purge routine covering every record and on-disk file; org owners must transfer ownership first
- Owner-credential fallback now opt-in (breaking) — connectors/MCP servers default
allow_fallbackoff, existing rows flipped; no-fallback resources you lack credentials for are hidden from the toolset - Webhook/cron workflow runs metered to the owner’s token quota — the unmetered free-LLM trigger path is closed
- Resource binding unified on visibility — subscribed connectors/KBs/MCP servers bindable to agents; workflow connector steps enforce the runner’s access
- Conversation workspace wired into chat —
workspace://offload of oversized tool results, budget-truncation rescue, pre-compaction transcript snapshots
v0.8.10 (2026-08-28) — Streamed Answers + Rich Rendering + GPT-5 Responses + Access Model
- Final answers stream natively via a
finishhandoff; streamed markdown renders per block, stable and flicker-free - Answers render Mermaid diagrams, SVG figures and card-style comparison tables, with copy/export and file downloads on answers, code blocks and tables
- Rendered markdown sanitized (raw-HTML injection closed); conversation exports typeset for CJK (PDF embeds a real font, DOCX declares an East Asian font)
- Reasoning folds to one-line previews; running agent steps show generated one-line titles kept in conversation history
- Sidebar reorganized around the chat cluster;
/clearcommand; admin model lists get checkbox multi-select with Shift-click ranges and bulk delete - A newly sent message rises to the top of the transcript; list pages stagger cards in; all animation honours reduce-motion
- Agents ask clarifying multiple-choice questions mid-run (ask_user_question) — the turn pauses on an in-chat card and resumes with the answers
- Composer keeps unsent drafts per conversation, warns when an image would reach a text-only model, and waits for in-flight uploads on send
- GPT-5.x goes Responses-API-first with encrypted reasoning replay across tool rounds (
FIM_GPT5_RESPONSES_MODEto roll back) - An output-limit cut discards the whole tool-call batch and asks for a smaller retry
- Typed DAG steps — pure transform/synthesis steps run as one direct LLM call; ask-first goals finish in one round
- Context budgets sit 8% below the model hard limit; plan-board discipline (repetition/no-plan reminders, verification before finish)
- Approval gates hold across delegation —
call_agentand workflow AGENT nodes run the agent’s own hooks instead of none - OAuth auto-link requires a verified address on both sides; refresh-token rotation carries a unique
jtiso the old token dies immediately - Feishu callback URL passes verification — unsigned pushes authenticate by Encrypt Key envelope + Verification Token
- Instance access model for billing — no-subscriptions / included+paid / paid-only postures, included default plan undeletable
v0.8.11 (2026-09-03) — Floating Composer
- Chat composer is one floating pill over the message stream — attachments, mode/agent selectors and send in one input; messages scroll beneath it
v0.8.12 (2026-09-04) — Shared Composer + ENV Sync
- KB / agent / connector AI assistants use the same floating composer as the chat; Enter during IME composition no longer sends
-
scripts/env_from_active_group.pykeeps the.envmodel fallback in step with the admin-panel active group - Image generation works against OpenAI
gpt-image-*models
Planned Versions
Replanned 2026-09-06. The kernel is built: ReAct engine, connectors, credentials, approval gate, audit, multi-tenant orgs. Work from here is finishing what is already in the codebase and keeping it correct, not opening new feature areas. Anything not listed below is not planned; see the closing note.v0.9 — Safe to Share
Goal: a database connector is safe to hand to a colleague, taking one back actually takes it back, and the half-finished paths already in the tree get closed out.DB Connector Fences
- PII column marking — marked columns stay in the schema, values come back masked in every query result
- Schema visibility — table/column allow-deny + verb blocking (read-only enforcement)
- Fence auditability —
scope_rules_appliedinConnectorCallLogrecords the fences each call ran under
Sharing revocation
- Unpublishing works — a subscription grants access only while the resource is still shared, re-checked at use time
- Admin Market takedown reverts the resource to private instead of only hiding it from the listing
- Unsubscribing from a solution no longer removes connectors, or credentials, the user set up themselves
- Deleting an org returns its published resources to their owners and revokes org-scoped subscriptions
Finishing what is already in
- Chunked compaction input and model-aware budgets on the main chat path, so any model mix stays within window
- Verify Responses-bridge streaming usage numbers on the next LiteLLM upgrade (upstream mis-mapping suspected)
- Retire the LiteLLM chat→responses bridge once the native GPT-5.x path has run a full release
- Stripe billing go-live — nightly reconcile against Stripe for missed webhooks, full-stack regression tests, live price ID
Shipped from the pre-replan v0.9 plan
-
Auth & security: JWT token-type confinement + OAuth fixes (v0.8.7); PG tz-aware timestamps (v0.8.6); force-logout UTC +POSTGRES_*override + SSRF IPv6-mapped fix (v0.8.8); owner-fallback opt-in + visibility-unified binding + webhook/cron metering (v0.8.9) -
Provider compat: Anthropic adaptive thinking + shared LLM pool self-heal (v0.8.8) -
Content guardrails v0: tripwire layer + jailbreak detector (v0.8.7) -
Hook system: skeleton + FeishuGateHook + Approval Playground + ReAct/DAG runtime (v0.8.5); PreToolUse enforcement fail-closed (v0.8.8) -
Feishu channel Phase 1 + task completion notification (v0.8.5) -
run_workflowagent tool (v0.8.9); reasoning detail preserved end-to-end (v0.8.8); workspace tool-output offloading wired into chat (v0.8.9) -
Agent loop hardening: plan board, LLM-call resilience, background tools, incremental DAG replan + checkpoint resume, compaction tool-pairing (v0.8.9) -
Circuit breaker, Workflow run retention cleanup, Workflow version diff summaries(v0.8 / v0.8.1) -
DAG quality overhaul, Domain model escalation, Per-model NFC toggle(v0.8.1) -
DatabaseMetaTool, MCPServerMetaTool, On-demand(v0.8.1)request_tools -
Workflow Connection Dep Auto-Subscribe, Workflow real executors(v0.8.1) -
ReAct Cycle Detection, Completion Checklist(v0.8.1) -
Prebuilt Solution Templates (8 vertical bundles), Resource Fork (MCP/Skill/Agent/Connector/Workflow)(v0.8.1) -
Vision document processing (PDF / DOCX / PPTX), MarkItDown OCR(v0.8.2 / v0.8.3) -
Smart File Content Injection +(v0.8)read_uploaded_file -
Agent Core Phase 3: Conversation Recovery MVP, Compact Work Card, Turn Profiler, Per-user Rate Limiting(v0.8.3) -
Conversation resume MVP, System prompt registry + cache, Thinking-block persistence, Reasoning replay policy, Cache observability(v0.8.4)