Commit Graph
145 Commits
Author SHA1 Message Date
ZacharyZhang-NYandClaude Opus 5.5 6e210301db Q136: remove rollback records that marked restores nothing performed
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 21:53:26 -04:00
ZacharyZhang-NYandClaude Opus 5.5 f8f852c326 Q135: remove the thread replay that only digested events and reconstructed nothing
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 21:47:48 -04:00
ZacharyZhang-NYandClaude Opus 5.5 403c57785c Q134: a signal's category comes from its runtime source, so self-checks cannot pass as real traffic
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 21:43:21 -04:00
ZacharyZhang-NYandClaude Opus 5.5 3849b96192 Q133: remove chaos drills that never injected a fault, and the signals they wrote
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 21:39:36 -04:00
ZacharyZhang-NYandClaude Opus 5.5 e562444487 Q132: remove PR bot gates that no task completion or goal close consulted
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 21:36:07 -04:00
ZacharyZhang-NYandClaude Opus 5.5 fe45cd4d46 Q131: remove review agents and eval suites whose pass only counted configuration rows
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 21:33:03 -04:00
ZacharyZhang-NYandClaude Opus 5.5 074a1fc8e3 Q130: every open task says why it is not moving, when it resumes, and who must act
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 21:27:29 -04:00
ZacharyZhang-NYandClaude Opus 5.5 6afd7bef2a Q128: every model call of a run is recorded with its purpose and listed in the run
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 20:55:18 -04:00
ZacharyZhang-NYandClaude Opus 5.5 91fa6b5f1e Q123: files shared in a private conversation stay with its members
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 19:52:37 -04:00
ZacharyZhang-NYandClaude Opus 5.5 8f192eabe7 Q121: a file id keeps the bytes it was recorded with; rewrites get new ids
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 19:34:44 -04:00
ZacharyZhang-NYandClaude Opus 5.5 abfcbf4824 Q114: goal audits use the org's own auditor model and see pointers, not the executor's account
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 18:35:39 -04:00
ZacharyZhang-NYandClaude Opus 5.5 5aab82b7c3 Q110: an approval pins the content it approved, and later changes show against it
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 18:01:15 -04:00
ZacharyZhang-NYandClaude Opus 5.5 4765683b86 Q107: a task approval covers the content it was given; edits need a fresh one
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 17:34:40 -04:00
ZacharyZhang-NYandClaude Opus 5.5 170b977bf8 Q105: the Connectors page grants and revokes connector access
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 17:12:59 -04:00
ZacharyZhang-NYandClaude Opus 5.5 558d678ba2 Q104: connector grants can narrow a toolkit to named actions and fixed argument values
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 17:05:23 -04:00
ZacharyZhang-NYandClaude Opus 5.5 4a6641fd49 Q101: a connector can hold several labelled company accounts, each granted and used by name
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 16:46:46 -04:00
ZacharyZhang-NYandClaude Opus 5.5 736c45c0ee Q100: reconnecting keeps the working connector account until the new one is authorized
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 16:32:46 -04:00
ZacharyZhang-NYandClaude Opus 5.5 f6447319a3 Q95: a run names the capabilities it could not load
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 15:55:33 -04:00
ZacharyZhang-NYandClaude Opus 5.5 7cd386a38c Q93: disconnect erases the secret here and revokes at the provider where it can
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 15:33:58 -04:00
ZacharyZhang-NYandClaude Opus 5.5 7eef3d459f Q88: a sign-in is saved only if a run can use and renew it
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 15:02:12 -04:00
ZacharyZhang-NYandClaude Opus 5.5 4668396f25 Q87: provider errors keep status and provider code; text never decides recovery
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 14:52:31 -04:00
ZacharyZhang-NYandClaude Opus 5.5 da0b94ce59 Q85: custom endpoints accept local HTTP servers and keyless access
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 14:28:01 -04:00
ZacharyZhang-NYandClaude Opus 5.5 665bf3cae1 Q83: a model passes an agent check before it does agent work
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 14:19:48 -04:00
ZacharyZhang-NYandClaude Opus 5.5 8b4df5e11f Q75: charts and billing use full-period statistics computed per org
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 12:41:44 -04:00
ZacharyZhang-NYandClaude Opus 5.5 daea9797d4 Q74: billing shows money spent against allocations, not an allocation ratio
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 12:32:32 -04:00
ZacharyZhang-NYandClaude Opus 5.5 90b7306aee Q72: usage views show provider-reported tokens, not characters
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 12:25:21 -04:00
ZacharyZhang-NYandClaude Opus 5.5 c6a0460035 Q69: provider failures classify by status and code; cooldowns follow Retry-After or back off
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 12:03:37 -04:00
ZacharyZhang-NYandClaude Opus 5.5 c2f8e656f6 Q65: every call path records real tokens, cache, reasoning and cost
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 11:24:54 -04:00
ZacharyZhang-NYandClaude Opus 5.5 168572dd76 Q63: model calls are priced and agent and department budgets limit real spend
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 11:08:38 -04:00
ZacharyZhang-NYandClaude Opus 5.5 9e1f8da11c Q55: the operator can stop in-flight runs; pause stops them too
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 09:59:03 -04:00
ZacharyZhang-NYandClaude Opus 5.5 ec2698575d Q53: stalled goal reviews leave a visible state and a resume path
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 09:25:46 -04:00
ZacharyZhang-NYandClaude Opus 5.5 ddc8b485e9 Q50: work moved to review gets a reviewer; review closes with the verdict
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 08:50:02 -04:00
ZacharyZhang-NYandClaude Opus 5.5 7659adbbdd Q49: a task that spends its run budget shows as stalled; edits start a fresh budget
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 08:38:02 -04:00
ZacharyZhang-NYandClaude Opus 5.5 7be072f8c5 Q40: tasks choose a writing mode; house style applies to conversational work only
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 07:28:47 -04:00
ZacharyZhang-NYandClaude Opus 5.5 645ce686bb Q39: runs load only model-compatible skills and state each skill's contract
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 07:22:08 -04:00
ZacharyZhang-NYandClaude Opus 5.5 66de4ef015 Q33: document edits and content deletions leave attributed audit records
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 06:45:51 -04:00
ZacharyZhang-NYandClaude Opus 5.5 cb464c3ee4 Q32: documents and knowledge appear in global search
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 06:33:00 -04:00
ZacharyZhang-NYandClaude Opus 5.5 5c8233d258 Q31: a Library page to read and manage documents and knowledge
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 06:26:15 -04:00
ZacharyZhang-NYandClaude Opus 5.5 4c475e5ceb Q30: documents keep every version
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 06:10:25 -04:00
ZacharyZhang-NYandClaude Opus 5.5 ec9d74d128 Q27: knowledge corrections keep a revision history
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 05:51:32 -04:00
ZacharyZhang-NYandClaude Opus 5.5 18128b5ad4 Q26: knowledge has scope, expiry, and supersession
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 05:47:03 -04:00
ZacharyZhang-NYandClaude Opus 5.5 b32e784469 Q19: pack the skills most relevant to the task first
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 04:48:44 -04:00
ZacharyZhang-NYandClaude Opus 5.5 f4d16eb46a Q17: budget every model request against the provider's context window
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 04:40:02 -04:00
ZacharyZhang-NYandClaude Opus 5.5 469f2f2c35 Q15: show which messages each agent actually read
Runs record a context manifest once a model turn succeeds; the chat
marks each human message with the agents that read its current version.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 04:21:57 -04:00
ZacharyZhang-NYandClaude Opus 5.5 56b0594f91 Move Composio, logo.dev and Antigravity keys into Settings
The three third-party keys were hardcoded or read from the environment.
Operators now enter them in Settings > Integrations; they are stored
encrypted in the app-wide integration_keys table (migration 058).
An agent holding connector grants fails loudly when no Composio key is
saved. The goal-review test no longer depends on absolute dates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 01:34:14 -04:00
ZacharyZhang-NY 327de38e78 Kimi Code joins as an OAuth plan provider: RFC 8628 device flow, verified against the live endpoints
- New oauth/kimi-code-flow.ts mirrors the official kimi-cli: form-encoded device_authorization + token polling at auth.kimi.com with the required X-Msh-* device headers, pure poll interpreter, 15-minute tokens refreshed via refresh_token grant
- Agent loop runs chat completions at https://api.kimi.com/coding/v1 with the Bearer access token; default model kimi-for-coding (kimi-for-coding-highspeed for Allegretto+ plans)
- Live model listing via /coding/v1/models; credential refresh wired into the turn credential resolver
- Migration 057 seeds the provider (disabled) into existing organizations
- Wire protocol probed live: device code issued, authorization_pending poll observed, 401 envelope on the coding API confirmed
2026-07-10 17:18:31 -04:00
ZacharyZhang-NY 813276de71 Kimi and Kimi CN join the provider catalog: OpenAI-compatible endpoints, verified live
- kimi -> https://api.moonshot.ai/v1 (platform.kimi.ai keys), kimi-cn -> https://api.moonshot.cn/v1 (platform.kimi.com keys)
- Adapters via openAiCompatibleAdapter; agent loop via makeChatCompletionsTurn; live model listing
- Curated fallback models per current docs: kimi-k2.7-code, kimi-k2.7-code-highspeed, kimi-k2.6
- Migration 056 seeds both providers (disabled) into existing organizations
- Both endpoints probed live: OpenAI-style 401 error envelope confirmed
2026-07-10 17:12:16 -04:00
ZacharyZhang-NY 26de3129b1 Goals end at achieved, not at an empty board: the goal-review loop
The board draining to 280/280 done left the company idle under a
still-active goal, with 24 markdown files and zero code as its life's work.
Two structural gaps caused it: goals had no lifecycle (status was written
once as 'active' and never read again — nothing re-engages anyone when the
last task closes), and nothing anywhere distinguished plans from product,
so every "engineering" objective closed on documents.

The loop, closed:
- tasks.origin (migration 055) records provenance: chat_wake for mention
  vehicles (backfilled from their runs), goal_review for checkpoints, null
  for real work. Chatter and checkpoints can therefore never count as
  progress.
- spawnGoalReviews (each worker tick): an active goal with zero open tasks
  and real progress since the last review gets ONE review task for the goal
  owner. The review demands evidence — list the workspace, read the code,
  run the tests; documents are how work starts, not proof it happened — and
  must end in exactly one of: complete_goal, or the next wave of tasks with
  requires_filesystem engineering. A review closed with neither spawns
  nothing: termination is structural, not a counter.
- complete_goal (CEO or goal owner) finally lets someone say a goal is
  achieved, audited.
- CEO and department-head voices now state the doctrine: a goal that
  promises software closes on code that builds and passes tests in the
  workspace, and implementation is delegated with requires_filesystem: true.

On the live profile this arms one review: the active platform goal has 0
open tasks and 21 real completed ones, so the CEO gets the checkpoint on
next launch and the company starts building instead of stopping.
2026-07-09 20:29:42 -04:00
ZacharyZhang-NY 927bdc91f2 Self-healing queue: transient provider failures park the provider, never burn retries
The July 9 run died at 07:22 when the GPT account hit its plan-side usage
limit: every later request failed with "The usage limit has been reached",
each failure counted against the 3-attempt retry budget, and 31 tasks were
abandoned for good while the worker kept hammering 12 doomed requests a
minute until the queue drained.

Root fix, three parts sharing one classifier:
- isTransientProviderFailure() in provider-runtime-domain recognises
  provider-side verdicts (usage limit, rate limit, 429, overloaded) plus the
  internal monthly-quota message; matching is against recorded
  task_runs.error_message rows, so historical damage heals retroactively.
- enqueueHeartbeatRuns computes the retry budget with that predicate instead
  of an exact match on the internal quota string alone.
- A transient failure parks the provider for a 10-minute cooldown: the
  heartbeat stops enqueuing its tasks and the worker leaves its queued runs
  unclaimed, then a single probe run re-arms or clears the park. Transitions
  are logged once each way.

Tests: predicate unit tests, budget-exemption regression on the raw provider
message, cooldown park/resume with an injected clock, claim exclusion.
2026-07-09 19:04:44 -04:00
ZacharyZhang-NY cb71afa6b7 Avatar photo uploads and a global handbrake for the agent engine
Two operator asks, one review gate:

Avatar portraits (migration 052): the avatar editor gains "Upload
photo" - the renderer downscales the chosen picture to a ~96px cover
crop and stores it as a small data URL (PNG keeps transparency, the
rest compresses to JPEG), so the snapshot stays light and the CSP needs
nothing new. The portrait wins over emoji and initials everywhere the
shared Avatar renders (chat, org chart, office card, sidebar), and
"Remove photo" falls back cleanly. The main process validates scheme
and size (base64 image data URL, <=300k chars) so a rogue caller cannot
re-bloat the snapshot. e2e uploads a real PNG through the profile
dialog and sees the portrait land in the sidebar.

Global pause (migration 053): when agents start talking in circles,
one topbar toggle - visible on every page - pulls the handbrake.
app_state.autorun_paused survives restarts; the queue worker checks it
each tick and neither enqueues nor claims while set (the run already in
flight finishes). Queued work simply waits and the paused state renders
as an amber "resume" pill. A unit test drives the real worker: paused
leaves a queued run untouched through many ticks, resuming claims it
within moments; e2e flips the toggle in the live shell.
2026-07-09 00:09:02 -04:00