q792602257
7b3892c42e
feat(config,workspace,user): jobs/notify config + workspace fetch repo + user ListAdmins
2026-05-06 09:10:43 +08:00
q792602257
895799a6c9
fix(jobs): timer leak in Module.Stop and warn on unknown runner names
...
Module.Stop used time.After which leaks the timer if the done channel
wins first; switch to time.NewTimer + defer Stop() to align with the
codebase convention.
scheduleEntry silently returned {0, false} for unknown runner names —
typos in production wiring were invisible. Return (entry, known) and
log Warn at NewModule registration time so misconfiguration surfaces.
2026-05-06 08:37:09 +08:00
q792602257
895a816221
feat(jobs): Module wiring + WorkerOptions.OnDeadLetter hook
2026-05-06 08:31:24 +08:00
q792602257
2d0c45a52b
feat(jobs/runners): job_reaper (lease timeout) + job_purge (retention)
2026-05-06 08:20:29 +08:00
q792602257
f6add1598e
test(jobs/runners): cover partial-storage-success, list-error isolation, DB-delete-error branches
2026-05-06 08:14:47 +08:00
q792602257
f56fe449fd
feat(jobs/runners): attachment cleanup + chat DeleteAttachments query/method
2026-05-06 08:07:49 +08:00
q792602257
c50621eeca
feat(jobs/runners): worktree prune two-phase + workspace prune queries/repo methods
2026-05-06 07:55:56 +08:00
q792602257
0111135e78
test(jobs/runners): cover CAS-lost, MarkSyncing-error, MarkFetchResult-error branches
2026-05-06 07:33:40 +08:00
q792602257
af1855b753
feat(jobs/runners): workspace fetch runner with notify dispatch on failure
2026-05-05 23:35:58 +08:00
q792602257
e361670539
feat(jobs): WebhookNotifier enqueues webhook.deliver jobs (topic whitelist + disabled short-circuit)
2026-05-05 23:26:47 +08:00
q792602257
9f290335b2
feat(jobs/handlers): webhook handler with HMAC sign + 4xx permanent / 5xx retry
2026-05-05 23:17:47 +08:00
q792602257
3aa19c8f7e
fix(jobs): log repo write errors in worker.execute
...
Previously, write-back errors from Complete/DeadLetter/FailWithRetry
were silently dropped via underscore assignment. A transient DB
failure here would leave a job stuck (still 'running' with active
lease) until the reaper resets it, with zero observability into why.
Log each write-back error at Error level so operators can correlate
stuck jobs with DB symptoms. Code quality review of T8.
2026-05-05 23:12:43 +08:00
q792602257
1a83a5b1cf
feat(jobs): worker pool with retry/dead-letter/panic-recovery
2026-05-05 19:57:23 +08:00
q792602257
f235b1be63
feat(jobs): periodic scheduler with panic-recovery and per-entry enable flag
2026-05-05 19:47:51 +08:00
q792602257
2e8135bcdf
feat(jobs): postgres repository with SKIP LOCKED lease + retry/dead-letter/purge
2026-05-05 19:40:39 +08:00
q792602257
ff3f27c1dc
feat(jobs): sqlc queries for jobs table
2026-05-05 16:59:03 +08:00
q792602257
215c1bb821
feat(jobs): domain types + Handler interface + Config
2026-05-05 16:52:17 +08:00
q792602257
ba1d657973
feat(workspace): clear prune_warning_at on SetWorktreeActive/Idle
2026-05-05 16:45:25 +08:00
q792602257
e768adb3ff
chore(sqlc): regenerate per-module models for migration 0005 schema
...
T1 added jobs table and workspace_worktrees.prune_warning_at column but
sqlc generate was not re-run for all modules. This catches the audit,
notify, project, and user models up; chat partially regenerated already.
Workspace's regen is part of T3 (next commit).
2026-05-05 14:28:09 +08:00
q792602257
c47d99d3d8
feat(infra/clock): injectable Clock with Real and Fake implementations
2026-05-05 14:16:32 +08:00
q792602257
967f390b1e
feat(jobs): migration 0005 + errs codes for jobs module
2026-05-05 14:09:10 +08:00
q792602257
b8d29d8ea7
fix(web): code review pass — scroll watch, SSE same-origin, store concurrency, modal reset, admin validation
2026-05-04 20:58:48 +08:00
q792602257
ff283013da
feat(web): prompt-templates view + chat/admin routes + nav + isAdmin guard
2026-05-04 20:15:49 +08:00
q792602257
372af06b01
feat(web): admin views for LLM endpoints/models + usage dashboard
2026-05-04 20:11:55 +08:00
q792602257
f294ac649c
feat(web): chat views (Home/Detail/CreateModal) + Bubble/Uploader/ModelSelector + markdown-it
2026-05-04 20:09:11 +08:00
q792602257
d06ff1bf8c
feat(web): chat pinia store + useChatStream (fetch+ReadableStream SSE)
2026-05-04 20:02:58 +08:00
q792602257
00daad07a9
feat(web): chat + llmAdmin api clients with FormData support
2026-05-04 19:48:26 +08:00
q792602257
8effeee063
feat(app): wire chat module + LocalFS storage + LLM registry into app.New
2026-05-04 19:37:14 +08:00
q792602257
7aa8456b1b
fix(chat): NewStreamerHub accepts ConversationService interface; SSE handler drains ready events before ctx
2026-05-04 19:32:24 +08:00
q792602257
d3ef9c941b
feat(chat): SSE writer + multipart upload endpoint with mime whitelist
2026-05-04 19:28:46 +08:00
q792602257
175e9be36a
feat(chat): http handler + DTO + admin guard for endpoints/models/usage
2026-05-04 17:59:22 +08:00
q792602257
8b5dc70146
feat(chat): UsageService for cost/token summarization
2026-05-04 17:42:36 +08:00
q792602257
c42887498b
feat(chat): MessageService Send/Stream/Cancel/Retry with attachment + capability + history truncation
2026-05-04 17:39:28 +08:00
q792602257
617794c7a3
feat(chat): StreamerHub with ring buffer + cond + Done/Error/Cancel flows
2026-05-04 17:27:50 +08:00
q792602257
d1be9e6eb0
feat(chat): ConversationService with title generation hook
2026-05-04 17:15:37 +08:00
q792602257
8e8edfe3ff
fix(chat): align template service with actual repo method names
2026-05-04 16:57:22 +08:00
q792602257
45fdf63d11
feat(chat): TemplateService for prompt templates with system/user scope auth
2026-05-04 16:54:28 +08:00
q792602257
959dc2d571
feat(chat): EndpointService for admin LLM endpoints/models with cache invalidation + EndpointLoader
2026-05-04 16:52:49 +08:00
q792602257
98b4f01b10
fix(chat): cast date_trunc to timestamptz, drop interval hack
2026-05-04 16:43:54 +08:00
q792602257
daf13fff8a
feat(chat): postgres repository with tx + pending unique index translation
2026-05-04 16:39:25 +08:00
q792602257
a1d0fbc3d3
feat(chat): sqlc queries for conversations/messages/attachments/templates/endpoints/models/usage
2026-05-04 09:52:06 +08:00
q792602257
ca5a018cd4
feat(chat): domain types + service interfaces + cross-module Reader interfaces
2026-05-04 09:49:30 +08:00
q792602257
9bc9873e3c
feat(infra/llm): LLMRegistry with endpoint cache + invalidation
2026-05-04 09:48:03 +08:00
q792602257
a08a7249f0
feat(infra/llm): Gemini client with stream + count_tokens via google.golang.org/genai
2026-05-04 09:46:47 +08:00
q792602257
be751e76f6
feat(infra/llm): OpenAI client + base_url override + reasoning_content compat
2026-05-04 09:40:41 +08:00
q792602257
027b5d5eba
fix(infra/llm): anthropic stream goroutine respects ctx cancel on send
2026-05-04 09:35:19 +08:00
q792602257
a1ba157d29
feat(infra/llm): Anthropic client with stream + count_tokens via official SDK
2026-05-04 09:29:35 +08:00
q792602257
9c8e4175c4
feat(infra/llm): neutral types + LLMClient interface + estimate tokenizer + fake
2026-05-04 00:37:04 +08:00
q792602257
547b339ed3
fix(storage): reject empty key + nil ReadCloser on Get error
2026-05-04 00:34:42 +08:00
q792602257
33838f1820
feat(storage): LocalFS implementation with sha256 + path safety
2026-05-04 00:22:38 +08:00