ๆ–‡ไปถๆœ€ๅŽๆไบค่ฎฐๅฝ•ๆœ€ๅŽๆ›ดๆ–ฐๆ—ถ้—ด
๐Ÿ“ docs: simplify and refresh skill docs (#14785)9 ๅคฉๅ‰
๐Ÿ“ docs: simplify and refresh skill docs (#14785)9 ๅคฉๅ‰
๐Ÿ”จ chore: add the agent runtime tools call hooks (#13874) * feat: add the agent runtime tools call hooks * feat: add more agent runtime hooks * fix: add the lost hooks * fix: add the agent runtimes hooks test * fix: slove some error * fix: change the as any to hooksEvent * fix: slove the lint error * fix: slove the lint error * fix: slove the lint error * fix: clean the code * fix: change the toolCallCounts into all mode & add all hooks into qstash runtime way * ๐Ÿ› fix: harden beforeToolCall mock validation and remove userId fallbacks - dispatchBeforeToolCall returns { content, isMocked } instead of { content } | null for explicit mock detection (avoids falsy content edge cases) - mock() rejects invalid content: empty string, undefined, object, array, number, null - Remove all `userId: ctx.userId || ''` fallbacks โ€” userId absence should surface, not silently degrade - beforeToolCall adds separate dispatch() observation path for QStash webhook delivery - Add BeforeToolCallObservationEvent type for production webhook payload - Add 3 unit tests for mock content validation edge cases Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>29 ๅคฉๅ‰
๐Ÿ”จ chore(.agents): added skill for agent-signal (#14206)25 ๅคฉๅ‰
๐Ÿ› fix(agent-runtime): route context engine payload out of the events stream (#15151) * ๐Ÿ› fix(agent-runtime): route context engine payload out of the events stream `call_llm` previously pushed a `context_engine_result` event carrying the full `contextEngineInput` (agentDocuments, systemRole, knowledge, โ€ฆ) into the per-step events array. That array is the same one persisted into Redis `agent_runtime_events`, so every step shipped the heavy CE payload into the state pipeline even though the only consumer was the trace recorder, which extracted CE into the typed `contextEngine` snapshot field and immediately filtered the event back out. Wire a typed `recordContextEngine` callback through `RuntimeExecutorContext` instead. `AgentRuntimeService.executeStep` buffers the call per step and hands it to `OperationTraceRecorder.appendStep` via a new `contextEngine` param. Trace snapshots are byte-identical; the events stream โ€” and therefore the Redis state blob โ€” no longer carries CE. Step toward LOBE-9110 (split state vs trace pipeline). Viewer keeps the legacy `context_engine_result` reader for back-compat with older on-disk snapshots. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * ๐ŸŽจ refactor(agent-runtime): rename recordContextEngine to tracingContextEngine The callback name now signals its role as the trace-pipeline channel, matching the `tracing` prefix used elsewhere for non-state observability wiring. Pure rename, no behavior change. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>8 ๅฐๆ—ถๅ‰
โœจ feat(follow-up): extend follow-up chip suggestions to general chat (#15101) * โœจ feat(follow-up): add foundation types for chat follow-up chips - FollowUpExtractInput.threadId for portal thread isolation - UserSystemAgentConfig.followUpAction (global enable + model) - LobeAgentChatConfig.enableFollowUpChips (per-agent opt-in) - ConversationHooks.onAssistantTurnSettled first-class member - Remove dead onGenerationStart/Complete/Cancelled hooks - DEFAULT_SYSTEM_AGENT_CONFIG.followUpAction off by default - DEFAULT_AGENT_CHAT_CONFIG.enableFollowUpChips false default * โ™ป๏ธ refactor(follow-up): key follow-up store by conversation for concurrency - Convert useFollowUpActionStore from single-slot to slots map - conversationKey = messageMapKey(agentId, topicId, threadId?) for parity with chat store - contextSelectors.conversationKey exposes the key from ConversationProvider - FollowUpChips and ChatItem consume conversationKey - Onboarding hook adopts the new keyed API - Pass threadId through to extract (server filter lands in T3) * ๐Ÿ› fix(follow-up): address T2 code review feedback - Restore design-intent comments for 20s timeout and race guard - Remove dead pendingMessageId field from FollowUpActionSlot - Remove unused slotFor selector - Trim chipsFor / FollowUpActionSlot JSDoc to design intent only - Gate useOnboardingFollowUp against missing onboardingAgentId - removeSlot uses destructure; slotStatus uses ?? for falsy safety * โœจ feat(follow-up): filter extract by threadId for portal thread isolation - FollowUpActionService.extract honours optional threadId - threadId provided โ†’ eq(messages.threadId, threadId) - threadId absent โ†’ isNull(messages.threadId) so main topic never surfaces thread replies - Tests cover both branches * โœจ feat(conversation): emit onAssistantTurnSettled hook from provider - AssistantTurnSettledWatcher fires hooks.onAssistantTurnSettled(messageId, { reason }) once per turn - Reason derived from the most recent terminal Operation for the message id - Reason mapping: cancelled โ†’ stopped, type=regenerate โ†’ regenerated, type=continue โ†’ continued, else โ†’ completed - Settlement gated on idle + no pending tool intervention (mirrors Onboarding's logic) - Tests cover all four reason branches + intervention gating + no double-fire + fallback log - Onboarding bespoke prop untouched (migrates in T6) * ๐Ÿ› fix(conversation): scope settlement reason to turn-level operations - TURN_LEVEL_TYPES filter excludes child sub-ops (callLLM, executeToolCall, etc.) before sorting by endTime - Prevents successful regenerate/continue being misreported as 'completed' when a child finishes after the parent - Tests cover parent/child ordering for all reason branches * โœจ feat(follow-up): add useChatFollowUp hook and wire chat mount sites - New mergeConversationHooks composes multiple hooks with boolean short-circuit - useChatFollowUp computes effective enable (global ร— per-agent ร— valid model) - Registers onBeforeSendMessage/Continue/Regenerate to clear slot and onAssistantTurnSettled to extract - Mount sites: agent route ConversationArea, FloatingChatPanel, Portal Thread Chat (last in chain per ยง4.6) - Skips on reason='stopped'; skips when effective is false - Group chat intentionally not mounted * โ™ป๏ธ refactor(onboarding): migrate settlement to ConversationHooks first-class - Drop bespoke onAssistantTurnSettled prop and duplicate useEffect from AgentOnboardingConversation - useOnboardingFollowUp returns ConversationHooks { onBeforeSendMessage, onAssistantTurnSettled } - Split settlement work: context-sync + builtin refresh runs first, chip extract runs after - Phase snapshot captured at memoize time preserves original prevPhase semantics - Settlement detection now lives solely in AssistantTurnSettledWatcher * โœจ feat(settings): add Follow-up suggestions controls (global + per-agent) - Global System Agent page: new Follow-up Suggestions panel (model picker + enable toggle) - Per-agent chat controls: enableFollowUpChips toggle with hint when global not configured - i18n keys: setting.systemAgent.followUpAction.*, setting.settingChat.enableFollowUpChips.* - Hint surfaces when user toggles per-agent ON but global is disabled/unmodeled * ๐Ÿ”ง chore(follow-up): T8 โ€” scoped lint cleanup and comment discipline pass * ๐Ÿ› fix(follow-up): align conversationKey selector with callsite + wrap single hook - contextSelectors.conversationKey forwards full context (scope/isNew/groupId/subAgentId) so portal-thread NEW state matches callsite-computed keys - ConversationArea wraps chat-follow-up via mergeConversationHooks for spec ยง4.6 ordering robustness - Both per final-review Important concerns * โœ… test(settings): update follow-up defaults snapshots * โœจ feat(follow-up): surface model in service-model page + default to mini - Add followUpAction to /service-model OPTIONAL_FEATURE_ITEMS so model/provider and enable Switch render alongside inputCompletion and promptRewrite - Seed DEFAULT_FOLLOW_UP_ACTION_SYSTEM_AGENT_ITEM with DEFAULT_MINI model/provider so out-of-box config has a valid model; users only need to flip enabled - Sync settings selector snapshot1 ๅคฉๅ‰
๐Ÿ“ docs(skills): frontmatter cleanup + argument-hint (#14683) * ๐Ÿ”จ chore: control skill triggering via frontmatter flags - Rename debug skill to debug-package (avoid confusion with debugging workflows) - Add disable-model-invocation to add-* skills so they are manual-only - Add user-invocable: false to reference/architecture skills so they auto-load only when relevant * ๐Ÿ”จ chore: rename skill reference dirs to plural references Align with the skill-creator convention (scripts/, references/, assets/). * ๐Ÿ“ docs(skills): split oversized SKILL.md files and refine triggers - upstash-workflow: 1126L โ†’ 189L, extract implementation / best-practices / examples references - data-fetching: 854L โ†’ 613L, move parent-keyed-map walkthrough to references - store-data-structures: 625L โ†’ 314L, extract types and reducer references - upstash-workflow/cloud.md, version-release/release-notes-style.md: add TOCs - linear: rewrite ALL-CAPS MUSTs into prose explaining why; mark user-invocable: false - version-release: mark disable-model-invocation: true (manual /version-release only) - debug-package: expand description with concrete trigger phrases and tokens * ๐Ÿ“ docs(skills): regularize microcopy structure Move language-specific guidelines into references/zh.md and references/en.md so SKILL.md can point to them via the standard progressive-disclosure pattern. Previously the two files sat next to SKILL.md but were not referenced anywhere, making them invisible to Claude Code loading. * ๐Ÿ“ docs(skills): move builtin-tool refs into references subdir Aligns builtin-tool with the references/ layout used elsewhere (microcopy, store-data-structures). 3 md files move, SKILL.md links updated. * ๐Ÿ“ docs(skills): broaden trigger descriptions for core skills Adds concrete API names, file paths and natural-language phrases so auto-triggering catches more relevant prompts. Touches zustand, drizzle, i18n, react, typescript, modal, hotkey. * ๐Ÿ“ docs(skills): add argument-hint to user-only skills12 ๅคฉๅ‰
๐Ÿ”จ chore: support nested subtask tree in task.detail (#13625) * โœจ feat: support nested subtask tree in task.detail Replace flat subtask list with recursive nested tree structure. Backend builds the complete subtask tree in one response, eliminating the need for separate getTaskTree API calls. Fixes LOBE-6814 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * ๐Ÿ› fix: return empty array for root subtasks instead of undefined Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * ๐Ÿ“ docs: add cli-backend-testing skill Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>1 ไธชๆœˆๅ‰
๐Ÿ“ docs: simplify and refresh skill docs (#14785)9 ๅคฉๅ‰
๐Ÿ“ docs(skills): frontmatter cleanup + argument-hint (#14683) * ๐Ÿ”จ chore: control skill triggering via frontmatter flags - Rename debug skill to debug-package (avoid confusion with debugging workflows) - Add disable-model-invocation to add-* skills so they are manual-only - Add user-invocable: false to reference/architecture skills so they auto-load only when relevant * ๐Ÿ”จ chore: rename skill reference dirs to plural references Align with the skill-creator convention (scripts/, references/, assets/). * ๐Ÿ“ docs(skills): split oversized SKILL.md files and refine triggers - upstash-workflow: 1126L โ†’ 189L, extract implementation / best-practices / examples references - data-fetching: 854L โ†’ 613L, move parent-keyed-map walkthrough to references - store-data-structures: 625L โ†’ 314L, extract types and reducer references - upstash-workflow/cloud.md, version-release/release-notes-style.md: add TOCs - linear: rewrite ALL-CAPS MUSTs into prose explaining why; mark user-invocable: false - version-release: mark disable-model-invocation: true (manual /version-release only) - debug-package: expand description with concrete trigger phrases and tokens * ๐Ÿ“ docs(skills): regularize microcopy structure Move language-specific guidelines into references/zh.md and references/en.md so SKILL.md can point to them via the standard progressive-disclosure pattern. Previously the two files sat next to SKILL.md but were not referenced anywhere, making them invisible to Claude Code loading. * ๐Ÿ“ docs(skills): move builtin-tool refs into references subdir Aligns builtin-tool with the references/ layout used elsewhere (microcopy, store-data-structures). 3 md files move, SKILL.md links updated. * ๐Ÿ“ docs(skills): broaden trigger descriptions for core skills Adds concrete API names, file paths and natural-language phrases so auto-triggering catches more relevant prompts. Touches zustand, drizzle, i18n, react, typescript, modal, hotkey. * ๐Ÿ“ docs(skills): add argument-hint to user-only skills12 ๅคฉๅ‰
๐Ÿ“ docs(skills): frontmatter cleanup + argument-hint (#14683) * ๐Ÿ”จ chore: control skill triggering via frontmatter flags - Rename debug skill to debug-package (avoid confusion with debugging workflows) - Add disable-model-invocation to add-* skills so they are manual-only - Add user-invocable: false to reference/architecture skills so they auto-load only when relevant * ๐Ÿ”จ chore: rename skill reference dirs to plural references Align with the skill-creator convention (scripts/, references/, assets/). * ๐Ÿ“ docs(skills): split oversized SKILL.md files and refine triggers - upstash-workflow: 1126L โ†’ 189L, extract implementation / best-practices / examples references - data-fetching: 854L โ†’ 613L, move parent-keyed-map walkthrough to references - store-data-structures: 625L โ†’ 314L, extract types and reducer references - upstash-workflow/cloud.md, version-release/release-notes-style.md: add TOCs - linear: rewrite ALL-CAPS MUSTs into prose explaining why; mark user-invocable: false - version-release: mark disable-model-invocation: true (manual /version-release only) - debug-package: expand description with concrete trigger phrases and tokens * ๐Ÿ“ docs(skills): regularize microcopy structure Move language-specific guidelines into references/zh.md and references/en.md so SKILL.md can point to them via the standard progressive-disclosure pattern. Previously the two files sat next to SKILL.md but were not referenced anywhere, making them invisible to Claude Code loading. * ๐Ÿ“ docs(skills): move builtin-tool refs into references subdir Aligns builtin-tool with the references/ layout used elsewhere (microcopy, store-data-structures). 3 md files move, SKILL.md links updated. * ๐Ÿ“ docs(skills): broaden trigger descriptions for core skills Adds concrete API names, file paths and natural-language phrases so auto-triggering catches more relevant prompts. Touches zustand, drizzle, i18n, react, typescript, modal, hotkey. * ๐Ÿ“ docs(skills): add argument-hint to user-only skills12 ๅคฉๅ‰
๐Ÿ“ docs(skills): frontmatter cleanup + argument-hint (#14683) * ๐Ÿ”จ chore: control skill triggering via frontmatter flags - Rename debug skill to debug-package (avoid confusion with debugging workflows) - Add disable-model-invocation to add-* skills so they are manual-only - Add user-invocable: false to reference/architecture skills so they auto-load only when relevant * ๐Ÿ”จ chore: rename skill reference dirs to plural references Align with the skill-creator convention (scripts/, references/, assets/). * ๐Ÿ“ docs(skills): split oversized SKILL.md files and refine triggers - upstash-workflow: 1126L โ†’ 189L, extract implementation / best-practices / examples references - data-fetching: 854L โ†’ 613L, move parent-keyed-map walkthrough to references - store-data-structures: 625L โ†’ 314L, extract types and reducer references - upstash-workflow/cloud.md, version-release/release-notes-style.md: add TOCs - linear: rewrite ALL-CAPS MUSTs into prose explaining why; mark user-invocable: false - version-release: mark disable-model-invocation: true (manual /version-release only) - debug-package: expand description with concrete trigger phrases and tokens * ๐Ÿ“ docs(skills): regularize microcopy structure Move language-specific guidelines into references/zh.md and references/en.md so SKILL.md can point to them via the standard progressive-disclosure pattern. Previously the two files sat next to SKILL.md but were not referenced anywhere, making them invisible to Claude Code loading. * ๐Ÿ“ docs(skills): move builtin-tool refs into references subdir Aligns builtin-tool with the references/ layout used elsewhere (microcopy, store-data-structures). 3 md files move, SKILL.md links updated. * ๐Ÿ“ docs(skills): broaden trigger descriptions for core skills Adds concrete API names, file paths and natural-language phrases so auto-triggering catches more relevant prompts. Touches zustand, drizzle, i18n, react, typescript, modal, hotkey. * ๐Ÿ“ docs(skills): add argument-hint to user-only skills12 ๅคฉๅ‰
๐Ÿ“ docs: simplify and refresh skill docs (#14785)9 ๅคฉๅ‰
๐Ÿ“ docs: update release changelog skills (#13899) docs: add release changelog skills1 ไธชๆœˆๅ‰
๐Ÿ“ docs(skills): frontmatter cleanup + argument-hint (#14683) * ๐Ÿ”จ chore: control skill triggering via frontmatter flags - Rename debug skill to debug-package (avoid confusion with debugging workflows) - Add disable-model-invocation to add-* skills so they are manual-only - Add user-invocable: false to reference/architecture skills so they auto-load only when relevant * ๐Ÿ”จ chore: rename skill reference dirs to plural references Align with the skill-creator convention (scripts/, references/, assets/). * ๐Ÿ“ docs(skills): split oversized SKILL.md files and refine triggers - upstash-workflow: 1126L โ†’ 189L, extract implementation / best-practices / examples references - data-fetching: 854L โ†’ 613L, move parent-keyed-map walkthrough to references - store-data-structures: 625L โ†’ 314L, extract types and reducer references - upstash-workflow/cloud.md, version-release/release-notes-style.md: add TOCs - linear: rewrite ALL-CAPS MUSTs into prose explaining why; mark user-invocable: false - version-release: mark disable-model-invocation: true (manual /version-release only) - debug-package: expand description with concrete trigger phrases and tokens * ๐Ÿ“ docs(skills): regularize microcopy structure Move language-specific guidelines into references/zh.md and references/en.md so SKILL.md can point to them via the standard progressive-disclosure pattern. Previously the two files sat next to SKILL.md but were not referenced anywhere, making them invisible to Claude Code loading. * ๐Ÿ“ docs(skills): move builtin-tool refs into references subdir Aligns builtin-tool with the references/ layout used elsewhere (microcopy, store-data-structures). 3 md files move, SKILL.md links updated. * ๐Ÿ“ docs(skills): broaden trigger descriptions for core skills Adds concrete API names, file paths and natural-language phrases so auto-triggering catches more relevant prompts. Touches zustand, drizzle, i18n, react, typescript, modal, hotkey. * ๐Ÿ“ docs(skills): add argument-hint to user-only skills12 ๅคฉๅ‰
โœจ feat(heterogeneous-agent): add Codex desktop integration (#14067) * โœจ feat(heterogeneous-agent): integrate Codex desktop MVP * โœจ feat(heterogeneous-agent): polish Codex profile and install guidance * ๐Ÿ› fix(heterogeneous-agent): stabilize Codex desktop error handling * :sparkles: improve codex desktop integration * โœจ feat(desktop): support custom heterogeneous CLI commands * ๐Ÿ’„ style(profile): refine heterogeneous CLI status card * ๐Ÿ› fix(chat): persist heterogeneous CLI auth errors * ๐Ÿ’„ style(profile): align CLI card radius with container * โœจ feat(chat): add heterogeneous CLI rate-limit guide * ๐Ÿ› fix(heterogeneous-agent): split Codex multi-turn steps * ๐Ÿ“ docs(skill): add heterogeneous-agent debugging guide * โ™ป๏ธ refactor: split heterogeneous agent status guide and fix i18n fallback * ๐Ÿ› fix(heterogeneous-agent): align Codex step and tool-call boundaries * ๐Ÿ’„ style(skills): use capsule chip in activate inspector * ๐Ÿ› fix(chat): resolve status guide type errors30 ๅคฉๅ‰
๐Ÿ“ docs(skills): frontmatter cleanup + argument-hint (#14683) * ๐Ÿ”จ chore: control skill triggering via frontmatter flags - Rename debug skill to debug-package (avoid confusion with debugging workflows) - Add disable-model-invocation to add-* skills so they are manual-only - Add user-invocable: false to reference/architecture skills so they auto-load only when relevant * ๐Ÿ”จ chore: rename skill reference dirs to plural references Align with the skill-creator convention (scripts/, references/, assets/). * ๐Ÿ“ docs(skills): split oversized SKILL.md files and refine triggers - upstash-workflow: 1126L โ†’ 189L, extract implementation / best-practices / examples references - data-fetching: 854L โ†’ 613L, move parent-keyed-map walkthrough to references - store-data-structures: 625L โ†’ 314L, extract types and reducer references - upstash-workflow/cloud.md, version-release/release-notes-style.md: add TOCs - linear: rewrite ALL-CAPS MUSTs into prose explaining why; mark user-invocable: false - version-release: mark disable-model-invocation: true (manual /version-release only) - debug-package: expand description with concrete trigger phrases and tokens * ๐Ÿ“ docs(skills): regularize microcopy structure Move language-specific guidelines into references/zh.md and references/en.md so SKILL.md can point to them via the standard progressive-disclosure pattern. Previously the two files sat next to SKILL.md but were not referenced anywhere, making them invisible to Claude Code loading. * ๐Ÿ“ docs(skills): move builtin-tool refs into references subdir Aligns builtin-tool with the references/ layout used elsewhere (microcopy, store-data-structures). 3 md files move, SKILL.md links updated. * ๐Ÿ“ docs(skills): broaden trigger descriptions for core skills Adds concrete API names, file paths and natural-language phrases so auto-triggering catches more relevant prompts. Touches zustand, drizzle, i18n, react, typescript, modal, hotkey. * ๐Ÿ“ docs(skills): add argument-hint to user-only skills12 ๅคฉๅ‰
๐Ÿ“ docs(skills): frontmatter cleanup + argument-hint (#14683) * ๐Ÿ”จ chore: control skill triggering via frontmatter flags - Rename debug skill to debug-package (avoid confusion with debugging workflows) - Add disable-model-invocation to add-* skills so they are manual-only - Add user-invocable: false to reference/architecture skills so they auto-load only when relevant * ๐Ÿ”จ chore: rename skill reference dirs to plural references Align with the skill-creator convention (scripts/, references/, assets/). * ๐Ÿ“ docs(skills): split oversized SKILL.md files and refine triggers - upstash-workflow: 1126L โ†’ 189L, extract implementation / best-practices / examples references - data-fetching: 854L โ†’ 613L, move parent-keyed-map walkthrough to references - store-data-structures: 625L โ†’ 314L, extract types and reducer references - upstash-workflow/cloud.md, version-release/release-notes-style.md: add TOCs - linear: rewrite ALL-CAPS MUSTs into prose explaining why; mark user-invocable: false - version-release: mark disable-model-invocation: true (manual /version-release only) - debug-package: expand description with concrete trigger phrases and tokens * ๐Ÿ“ docs(skills): regularize microcopy structure Move language-specific guidelines into references/zh.md and references/en.md so SKILL.md can point to them via the standard progressive-disclosure pattern. Previously the two files sat next to SKILL.md but were not referenced anywhere, making them invisible to Claude Code loading. * ๐Ÿ“ docs(skills): move builtin-tool refs into references subdir Aligns builtin-tool with the references/ layout used elsewhere (microcopy, store-data-structures). 3 md files move, SKILL.md links updated. * ๐Ÿ“ docs(skills): broaden trigger descriptions for core skills Adds concrete API names, file paths and natural-language phrases so auto-triggering catches more relevant prompts. Touches zustand, drizzle, i18n, react, typescript, modal, hotkey. * ๐Ÿ“ docs(skills): add argument-hint to user-only skills12 ๅคฉๅ‰
๐Ÿ“ docs(skills): frontmatter cleanup + argument-hint (#14683) * ๐Ÿ”จ chore: control skill triggering via frontmatter flags - Rename debug skill to debug-package (avoid confusion with debugging workflows) - Add disable-model-invocation to add-* skills so they are manual-only - Add user-invocable: false to reference/architecture skills so they auto-load only when relevant * ๐Ÿ”จ chore: rename skill reference dirs to plural references Align with the skill-creator convention (scripts/, references/, assets/). * ๐Ÿ“ docs(skills): split oversized SKILL.md files and refine triggers - upstash-workflow: 1126L โ†’ 189L, extract implementation / best-practices / examples references - data-fetching: 854L โ†’ 613L, move parent-keyed-map walkthrough to references - store-data-structures: 625L โ†’ 314L, extract types and reducer references - upstash-workflow/cloud.md, version-release/release-notes-style.md: add TOCs - linear: rewrite ALL-CAPS MUSTs into prose explaining why; mark user-invocable: false - version-release: mark disable-model-invocation: true (manual /version-release only) - debug-package: expand description with concrete trigger phrases and tokens * ๐Ÿ“ docs(skills): regularize microcopy structure Move language-specific guidelines into references/zh.md and references/en.md so SKILL.md can point to them via the standard progressive-disclosure pattern. Previously the two files sat next to SKILL.md but were not referenced anywhere, making them invisible to Claude Code loading. * ๐Ÿ“ docs(skills): move builtin-tool refs into references subdir Aligns builtin-tool with the references/ layout used elsewhere (microcopy, store-data-structures). 3 md files move, SKILL.md links updated. * ๐Ÿ“ docs(skills): broaden trigger descriptions for core skills Adds concrete API names, file paths and natural-language phrases so auto-triggering catches more relevant prompts. Touches zustand, drizzle, i18n, react, typescript, modal, hotkey. * ๐Ÿ“ docs(skills): add argument-hint to user-only skills12 ๅคฉๅ‰
โœจ feat(hetero-agent): support AskUserQuestion tools for claude code (#14639) * โœจ feat(hetero-agent): AskUserQuestion MCP server + bridge skeleton (LOBE-8725 step 1+2) Foundation for LOBE-8725 โ€” interactive AskUserQuestion via local MCP. CC's built-in tool short-circuits in `-p` mode, so we host an in-process MCP server that exposes an equivalent `ask_user_question` tool. The handler blocks until the consumer submits an answer (or the 5min deadline / op shutdown fires), surfacing a structured `agent_intervention_request` / `agent_intervention_response` round-trip on the existing event stream. Added in this commit: - `packages/heterogeneous-agents/src/askUser/` - `AskUserBridge` โ€” per-op pending map with timeout / cancel / progress keepalive support; emits an async-iterable of outbound events - `AskUserMcpServer` โ€” process-wide HTTP/Streamable MCP server, `?op=<id>` query routes via `AsyncLocalStorage` โ†’ `onsessioninitialized` โ†’ sessionIdโ†”opId map; tool handler hands off to the matching bridge and pumps `notifications/progress` back to CC every 30s as wire-level keepalive (required for >5min waits, see spike notes) - `constants.ts` โ€” shared tool/server names + the stable `apiName` the adapter rewrites to - Unit tests cover bridge lifecycle (resolve / cancel / timeout / progress / event stream) and an end-to-end MCP probe via `StreamableHTTPClientTransport` - `packages/agent-gateway-client/src/types.ts` โ€” wire-level `agent_intervention_request` / `agent_intervention_response` event variants + payload interfaces. Re-exported through the package barrel. - `packages/heterogeneous-agents/src/adapters/claudeCode.ts` โ€” when CC's `tool_use` carries `mcp__lobe_cc__ask_user_question`, the adapter rewrites `apiName` to `askUserQuestion` so the renderer routes on a clean domain key. Identifier stays `claude-code`. Applied to both the main-agent and subagent paths for symmetry (subagent ask isn't expected today, but doesn't hurt). - `src/server/routers/lambda/aiAgent.ts` โ€” Zod input schema for `aiAgent.heteroIngest` extended with the two new event types so the CLI sandbox can forward them through the server. No producer wiring yet โ€” Steps 3-5 plug this into Electron main, the renderer executor, and the new UI. * โœจ feat(hetero-agent): wire AskUserQuestion MCP into Electron CC driver (LOBE-8725 step 3) Plug the Step 1 skeleton (`AskUserMcpServer` + `AskUserBridge`) into the desktop Claude Code spawn path. CC's local MCP `ask_user_question` tool now goes live during real prompts; renderer-submitted answers route back via new IPC. Changes - `apps/desktop/src/main/modules/heterogeneousAgent/types.ts` โ€” add optional `mcpConfigPath` to `HeterogeneousAgentBuildPlanParams` so controller-managed temp configs flow into the driver. - `apps/desktop/src/main/modules/heterogeneousAgent/drivers/claudeCode.ts` โ€” append `--mcp-config <path>` when provided. Disallowed-tools pin stays so CC's built-in AskUserQuestion remains off (avoids double- registration of the same tool name). - `apps/desktop/src/main/controllers/HeterogeneousAgentCtr.ts` - Lazy-singleton `AskUserMcpServer` started on first claude-code prompt (de-duped concurrent first-callers via in-flight promise). - Per-op `setupInterventionForOp(opId, sessionId)`: registers an `AskUserBridge`, writes `os.tmpdir()/lobe-cc-mcp-<opId>.json` with `alwaysLoad: true` so CC eager-loads the tool (1-hop call, no ToolSearch detour โ€” see LOBE-8725 spike), pumps `bridge.events()` into the existing `heteroAgentEvent` broadcast. - Cleanup paths: exit handler `await intervention.cleanup()` settles pending MCP handlers + unlinks the temp config; pre-spawn errors short-circuit the same cleanup so we don't leak bridges on `buildSpawnPlan` / trace-session failures. - `before-quit` stops the MCP server (in addition to killing CC processes). - New `@IpcMethod() submitIntervention({ operationId, toolCallId, result?, cancelled?, cancelReason? })` โ€” renderer side will dispatch answers / cancellations through this in Step 4/5. - codex unchanged โ€” bridge setup is gated on `agentType === 'claude-code'`. - `src/services/electron/heterogeneousAgent.ts` โ€” renderer-side proxy for `submitIntervention`. - New `claudeCode.test.ts` covers the four driver-arg paths (`--mcp-config` presence, ordering vs `--resume`, AskUserQuestion stay disallowed). Existing 28 controller tests still pass. What still doesn't run end-to-end - The renderer `heteroExecutor` doesn't consume `agent_intervention_request` yet โ€” events go through the broadcast but the chat store ignores them. - No UI to render the intervention card or to call `submitIntervention`. Both lands in Steps 4/5 next. * โœจ feat(hetero-agent): correlate intervention with tool message + renderer handler (LOBE-8725 step 3.5+4) Bridge now uses the caller-supplied toolCallId (CC's `claudecode/toolUseId` from MCP `_meta`) instead of a random UUID, so the `agent_intervention_request` event references the same id as the existing tool message on the renderer side. Renderer-side `heteroExecutor` learns the new event: - Added `persistInterventionRequest(...)` next to `persistToolResult` โ€” stamps `pluginState.askUserQuestion` (apiName + identifier + questions parsed from `arguments` + deadline + status='pending' + toolCallId) onto the matching tool message via `messageService.updateToolMessage`. - New branch in `handleStreamEvent` for `'agent_intervention_request'`: defers behind `persistQueue` (so it lands AFTER `persistToolBatch` populates `toolMsgIdByCallId`), then mirrors the same pluginState onto the in-memory message via `internal_dispatchMessage` so the UI lights up immediately โ€” no fetchAndReplaceMessages round-trip needed. - The eventual `tool_result` for the same toolCallId hits the existing `tool_result` branch unchanged: it overwrites `pluginState` with whatever the result carries (typically undefined for our MCP tool, so `pluginState.askUserQuestion` clears and the intervention UI yields to the regular Render). Bridge tests cover the new contract: - caller-supplied toolCallId becomes the wire correlation key - duplicate-toolCallId pendings reject loudly so two-handler clobbers surface immediately 153 package tests + 1167 desktop main tests + 51 hetero executor tests still green; type-check clean. * โœจ feat(claude-code): AskUserQuestion intervention render component (LOBE-8725 step 5) Dedicated Render for the synthetic `askUserQuestion` apiName the adapter rewrites the local MCP `mcp__lobe_cc__ask_user_question` tool to. Lives under CC's render registry so the existing chat tool-detail flow picks it up automatically โ€” no changes to the conversation framework. - New `AskUserQuestionItem` / `AskUserQuestionArgs` / `AskUserQuestionPluginState` types (mirrors CC's own AskUserQuestion schema verbatim). - `ClaudeCodeApiName` gains an `AskUserQuestion = 'askUserQuestion'` member so the renders / inspectors / streamings registries can key off the same enum value. - `client/Render/AskUserQuestion/index.tsx` is the component: - `pluginState.askUserQuestion?.status === 'pending'` โ†’ renders the questions form (Select for single-select, CheckboxGroup for multi-select), a 5-min countdown ticking once a second, Submit / Skip buttons. Reads `operationId` via `messageOperationMap` so we can route through `heterogeneousAgentService.submitIntervention`. - Otherwise โ†’ renders the questions as muted captions plus the final answer text from `content`. Surfaces a warning when the tool_result was an error (timeout / cancelled / session ended). - Submit button stays disabled until every question has a selection; Skip always enabled (sends `cancelled: true`). - `ClaudeCodeRenders[ClaudeCodeApiName.AskUserQuestion]` registers the new component. What this does NOT do - Doesn't touch `BuiltinToolInterventions` โ€” the form is rendered inside the regular tool body (Render slot), not the canonical intervention slot. Cleanest for now: the framework intervention flow assumes `submitToolInteraction` store actions, which would fight our IPC path. We can refactor onto that surface later if CC grows additional interactions (approval, file picker). - Doesn't translate strings โ€” i18n in a follow-up. Type-check clean. Step 6 (real desktop e2e via CC) is next. * โœจ feat(claude-code): render AskUserQuestion form during pending state (LOBE-8725 step 5 follow-up) Step 5 registered the Render component but stopped at the registry โ€” the chat tool-detail still returned the loading placeholder while `isToolCalling` was true, so users only ever saw a spinner during the 5 min intervention window. Detect `pluginState.askUserQuestion?.status === 'pending'` (only set on CC + apiName=askUserQuestion tool messages) and route to the registered builtin Render inline before the placeholder branch. Once the intervention resolves, the eventual `tool_result` clears `pluginState.askUserQuestion` and the regular Render takes over. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * โœจ feat(hetero-agent): wire regenerate / continue for hetero runtime (LOBE-8519 follow-up) LOBE-8519 left two TODOs in `generationSlice` where hetero runtime silently fell through to client mode โ€” regenerate would secretly hit the agent's underlying LLM, and continue would synthesize a fake "please continue" turn that confuses CC / Codex. - regenerateMessage: re-create the assistant row branched off the same user message, resolve resume sessionId (drop on cwd mismatch), then spawn a child `execHeterogeneousAgent` op so Stop only kills the executor, not the parent regenerate op. Mirrors sendMessage's hetero branch. - continueGenerationMessage: hetero CLIs have no continue primitive โ€” each prompt is a fresh user turn โ€” so bail out instead of polluting the session. - continueGenerationMessage: gateway mode now branches a server-side resume run instead of falling through to client. Surfaced while testing CC AskUserQuestion end-to-end on the LOBE-8725 branch (regenerating after an answered question went through the wrong runtime). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ๐Ÿ› fix(local-testing): electron-dev.sh boots on macOS bash 3.2 Two bugs surfaced when invoking the local-testing helper from a fresh session on macOS: - `find_project_pids` / `do_stop` end with `grep -v '^$'` whose exit code propagates through `pipefail`. With `set -e`, an empty pid set silently kills the whole script โ€” `do_start` reported success, no Electron, no error. Trail with `|| true`. - `setsid` is GNU coreutils, not on macOS. Fall back to plain `bash -c`; process-tree teardown still works because `expand_descendants` walks the tree directly. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ๐Ÿ› fix(hetero-agent): per-session MCP transport for sequential ops (LOBE-8725) `AskUserMcpServer` shared a single `StreamableHTTPServerTransport` across every CC subprocess. The SDK transport latches `_initialized=true` after the first `initialize`, so the second op's CC subprocess sees `Invalid Request: Server already initialized` (400) and reports the `lobe_cc` server as `failed`. From the model's POV the MCP tool is absent โ€” it falls back to ToolSearch, can't find anything, and verbalizes the question instead. Refactor to the canonical multi-tenant pattern: one transport + one `McpServer` per session, looked up by the SDK-managed `mcp-session-id` header. New transports are minted on the first POST without a session id (must be an `initialize` request); subsequent requests route via the stored map; `onsessionclosed` cleans up. The first run of any process still works as before โ€” this only matters once a second op spins up. Added a 3-op sequential regression test that fails on the old single-transport implementation and passes now. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * โ™ป๏ธ refactor(claude-code): move AskUserQuestion onto canonical Intervention surface (LOBE-8725) Step 5's first cut shoehorned the pending form into the Render slot and drove submit/skip with a custom `pluginState.askUserQuestion.status` field, which forced three layers of glue: - `Tool/Detail` had to bypass the loading placeholder via an identifier+apiName hardcode so the form would surface during `isToolCalling` - The executor had to `messageService.getMessages โ†’ replaceMessages` after `agent_intervention_request` to drag the freshly-created tool row into in-memory state (the framework's own `tool_end โ†’ fetchAndReplaceMessages` only fires after the user answers) - The executor also had to `associateMessageWithOperation` for the tool row so the form could look up the running CC op for IPC All three were patches around skipping the canonical surface. This commit moves AskUserQuestion onto `pluginIntervention.status='pending'` and the `BuiltinToolInterventions` registry, which the framework already drives end-to-end: - `packages/builtin-tool-claude-code/src/client/Intervention/AskUserQuestion.tsx` โ€” pure form, no IPC, no store reads. Resolves through the standard `onInteractionAction({type:'submit'|'skip'|'cancel'})` callback. - `Render/AskUserQuestion` shrinks to the answered/aborted view only; the framework hides Render while pending, so no status switching. - New `Inspector/AskUserQuestion` shows a compact "askUserQuestion ยท {header}" chip in the inline tool body, matching the rest of CC's tools. - Registries: `ClaudeCodeInspectors`, `ClaudeCodeRenders`, and the new `ClaudeCodeInterventions` all key off `ClaudeCodeApiName.AskUserQuestion`; `BuiltinToolInterventions` gains a `[ClaudeCodeIdentifier]` entry. Hetero needs a different action handler than `submitToolInteraction` (which spawns `executeClientAgent` โ€” wrong for a CC subprocess that's already blocked on an MCP call). Two thin pieces wire that: - `submitHeteroIntervention` (chat store) โ€” sets `pluginIntervention` via `optimisticUpdateMessagePlugin` (which already syncs DB + in-memory + parent-assistant `tools[].intervention` in one shot), then forwards the answer through `heterogeneousAgentService.submitIntervention` IPC. Operation lookup walks the tool message's `parentId` to hit the assistant's `messageOperationMap` entry โ€” drops the explicit `associateMessageWithOperation` call from the executor. - `customInteractionHandlers.isHeteroInteractionIdentifier` flags `ClaudeCodeIdentifier`; `Tool/Detail/Intervention` short-circuits there before reaching the existing `submitToolInteraction` path. Executor change collapses to one line: `optimisticUpdateMessagePlugin(toolMsgId, { intervention: { status: 'pending' } })`. The post-intervention refresh, the associate call, and the `persistInterventionRequest` helper all go away. Removed: - `AskUserQuestionPluginState` type (custom field is gone) - `Tool/Detail` `askUserPending` inline-render branch - Executor `messageService.getMessages + replaceMessages` round-trip - Executor `associateMessageWithOperation` for tool rows - `persistInterventionRequest` helper Verified end-to-end against a real CC subprocess on desktop: - Inline body shows the new Inspector chip; pending form lives in the bottom InterventionBar (canonical surface) - Submit ships answer through MCP, CC continues with structured result - Skip flips status to `rejected`, framework's RejectedResponse shows "User skipped"; CC receives isError and falls back to text - `mcp_servers.lobe_cc.status === 'connected'` on a 3rd sequential op (the per-session transport fix from the previous commit) - `alwaysLoad: true` still produces 1-hop calls (no ToolSearch hop) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ๐Ÿ’„ style(claude-code): inline numbered option cards for AskUserQuestion intervention (LOBE-8725) Select dropdown was the wrong primitive โ€” it hides options behind an extra click and doesn't read like a question to answer. CC's underlying tool is 1-4 questions ร— 2-4 options, so the whole option set always fits inline. - Each option renders as a clickable card: numbered chip (1/2/3/4) + bold label + secondary description on a single row. Hover tints the background; selected state lights up `colorPrimary` on both the chip and the card outline so the pick is unmistakable at a glance. - Multi-select (`q.multiSelect`) toggles instead of replacing, with a "(multi-select)" hint in the question header. - Multi-question support gets a proper visual hierarchy: each question past the first sits below a dashed divider, headed by a `Q1/N` tag + the original `q.header` chip. The `Q*/N` lets the user track progress without counting. - Inspector picks up the question count too: now shows "askUserQuestion ยท {first header} +N" when multiple are queued. Verified end-to-end on desktop with a CC-driven 2-question prompt (4-option + 3-option). Both selections feed back to CC as a single "User answers" payload, CC echoes both picks in its continuation. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * โœจ feat(claude-code): tabbed multi-question + draft + timeout fallback for AskUserQuestion (LOBE-8725) - Multi-question forms now use a top tab strip; single question renders inline. - Picking a single-select option auto-advances to the next unanswered question. - Drafts persist to tool message `pluginState.askUserDraft` so picks survive remount / HMR; new `setInterventionDraft` action on the chat store dispatches the pluginState patch. - Timeout fallback: when the 5-min countdown expires, auto-submit option 1 for every unanswered question instead of letting the bridge time out into a cancelled isError โ€” model gets a structured answer it can act on. - Visual: selected option now uses filled `colorPrimaryBg` + right-aligned check icon; index chip stays neutral. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ๐Ÿ› fix(hetero-agent): synchronously unlink temp mcp.json on app quit (LOBE-8725) The async exit-handler cleanup raced Electron's main-process teardown and left `lobe-cc-mcp-<opId>.json` files in `os.tmpdir()` after every quit. Sync unlink in the quit hook is the only reliable guarantee. Also handle SIGTERM / SIGINT โ€” `before-quit` only fires on user-driven Cmd+Q or `app.quit()`, not on external kills (test harness, OS shutdown). Verified by manual test: pending askUserQuestion forms now leave zero residue after both Cmd+Q and SIGTERM paths. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * โœจ feat(claude-code): persist structured AskUserQuestion answers + Q&A render (LOBE-8725) Submit now writes the structured `{ questionText: pickedLabel(s) }` payload to the tool message's `pluginState.askUserAnswers` (in-memory + DB merge), so Render no longer has to scrape the bridge's prose `User answers:` content. Render shows one Q&A block per question โ€” header + question + a checkmark card per picked option (multi-select fans out into multiple rows). Falls back to a `โ€”` placeholder when answers are missing (older messages or skipped flows), and keeps the existing `pluginError` warning for cancel / no-answer paths. Also surfaces the answers in the Skill state inspector tab, which was previously empty for completed askUserQuestion messages. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * โœ… test(hetero-agent): cover synchronous quit cleanup of AskUserQuestion temp configs (LOBE-8725) Locks down the regression fixed in c0de0cdb7c โ€” async exit-handler cleanup losing to Electron's main-process teardown. Four cases: `before-quit` (Cmd+Q / `app.quit()` path), `SIGTERM` (test harness / OS shutdown), `SIGINT` (Ctrl-C), and idempotency (already-deleted temp file must not throw on the second pass). `process.on` and `process.exit` are stubbed in the signal-path tests so the controller's listener attaches to a spy, not the test runner's process โ€” otherwise we'd leak a real SIGTERM listener every test. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>13 ๅคฉๅ‰
๐Ÿ“ docs(skills): frontmatter cleanup + argument-hint (#14683) * ๐Ÿ”จ chore: control skill triggering via frontmatter flags - Rename debug skill to debug-package (avoid confusion with debugging workflows) - Add disable-model-invocation to add-* skills so they are manual-only - Add user-invocable: false to reference/architecture skills so they auto-load only when relevant * ๐Ÿ”จ chore: rename skill reference dirs to plural references Align with the skill-creator convention (scripts/, references/, assets/). * ๐Ÿ“ docs(skills): split oversized SKILL.md files and refine triggers - upstash-workflow: 1126L โ†’ 189L, extract implementation / best-practices / examples references - data-fetching: 854L โ†’ 613L, move parent-keyed-map walkthrough to references - store-data-structures: 625L โ†’ 314L, extract types and reducer references - upstash-workflow/cloud.md, version-release/release-notes-style.md: add TOCs - linear: rewrite ALL-CAPS MUSTs into prose explaining why; mark user-invocable: false - version-release: mark disable-model-invocation: true (manual /version-release only) - debug-package: expand description with concrete trigger phrases and tokens * ๐Ÿ“ docs(skills): regularize microcopy structure Move language-specific guidelines into references/zh.md and references/en.md so SKILL.md can point to them via the standard progressive-disclosure pattern. Previously the two files sat next to SKILL.md but were not referenced anywhere, making them invisible to Claude Code loading. * ๐Ÿ“ docs(skills): move builtin-tool refs into references subdir Aligns builtin-tool with the references/ layout used elsewhere (microcopy, store-data-structures). 3 md files move, SKILL.md links updated. * ๐Ÿ“ docs(skills): broaden trigger descriptions for core skills Adds concrete API names, file paths and natural-language phrases so auto-triggering catches more relevant prompts. Touches zustand, drizzle, i18n, react, typescript, modal, hotkey. * ๐Ÿ“ docs(skills): add argument-hint to user-only skills12 ๅคฉๅ‰
๐Ÿ“ docs(skills): frontmatter cleanup + argument-hint (#14683) * ๐Ÿ”จ chore: control skill triggering via frontmatter flags - Rename debug skill to debug-package (avoid confusion with debugging workflows) - Add disable-model-invocation to add-* skills so they are manual-only - Add user-invocable: false to reference/architecture skills so they auto-load only when relevant * ๐Ÿ”จ chore: rename skill reference dirs to plural references Align with the skill-creator convention (scripts/, references/, assets/). * ๐Ÿ“ docs(skills): split oversized SKILL.md files and refine triggers - upstash-workflow: 1126L โ†’ 189L, extract implementation / best-practices / examples references - data-fetching: 854L โ†’ 613L, move parent-keyed-map walkthrough to references - store-data-structures: 625L โ†’ 314L, extract types and reducer references - upstash-workflow/cloud.md, version-release/release-notes-style.md: add TOCs - linear: rewrite ALL-CAPS MUSTs into prose explaining why; mark user-invocable: false - version-release: mark disable-model-invocation: true (manual /version-release only) - debug-package: expand description with concrete trigger phrases and tokens * ๐Ÿ“ docs(skills): regularize microcopy structure Move language-specific guidelines into references/zh.md and references/en.md so SKILL.md can point to them via the standard progressive-disclosure pattern. Previously the two files sat next to SKILL.md but were not referenced anywhere, making them invisible to Claude Code loading. * ๐Ÿ“ docs(skills): move builtin-tool refs into references subdir Aligns builtin-tool with the references/ layout used elsewhere (microcopy, store-data-structures). 3 md files move, SKILL.md links updated. * ๐Ÿ“ docs(skills): broaden trigger descriptions for core skills Adds concrete API names, file paths and natural-language phrases so auto-triggering catches more relevant prompts. Touches zustand, drizzle, i18n, react, typescript, modal, hotkey. * ๐Ÿ“ docs(skills): add argument-hint to user-only skills12 ๅคฉๅ‰
๐Ÿ”จ chore: fix skill frontmatter key to use kebab-case (#13730)1 ไธชๆœˆๅ‰
๐Ÿ“ docs: simplify and refresh skill docs (#14785)9 ๅคฉๅ‰
๐Ÿ’„ style(home): polish brief recommendations layout (#14871)7 ๅคฉๅ‰
๐Ÿ”จ chore: add Response API support (#12918) * add response api framework * finish response api structure * finish response api structure * โœจ feat: implement basic text generation for Response API (LOBE-5858) - Add instructions extraction from system/developer input messages - Add instructions param to ExecAgentParams, append to agent systemRole - Implement extractPrompt, extractAssistantContent, extractUsage in ResponsesService - Wire up execAgent + executeSync flow for non-streaming and streaming - Add logprobs field to output_text content parts for schema compliance - Fix truncation field to output string enum instead of object Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * โœจ feat: implement real token-level streaming for Response API (LOBE-5859) - Replace fake streaming (executeSync โ†’ emit events) with real streaming - Subscribe to InMemoryStreamEventManager for live stream_chunk events - Run executeSync in background, convert text chunks to output_text.delta SSE events - Add missing schema fields: item_id on content_part/text events, logprobs on delta/done events - Fix content_part.added/done to include item_id per OpenResponses spec Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * โœจ feat: implement tool calling output extraction for Response API (LOBE-5860) - Add extractOutputItems to convert AgentState messages to OpenResponses output items - Extract assistant tool_calls โ†’ function_call output items - Extract tool result messages โ†’ function_call_output output items - Skip message items for assistant messages that have tool_calls (avoid duplicates) - Add status field to function_call_output items per OpenResponses spec - Update FunctionCallOutputItemSchema with optional status field - Output array reflects execution order: function_call โ†’ function_call_output โ†’ message Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * โœจ feat: implement multi-turn conversations via previous_response_id (LOBE-5861) Encode topicId in response.id to enable stateless multi-turn conversation chaining. When previous_response_id is provided, extract topicId and pass to execAgent via appContext, which automatically loads history messages. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ๐Ÿ› fix: add missing type fields for OpenResponses compliance (logprobs, item_id, input_tokens_details) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>2 ไธชๆœˆๅ‰
๐Ÿ“ docs(skills): frontmatter cleanup + argument-hint (#14683) * ๐Ÿ”จ chore: control skill triggering via frontmatter flags - Rename debug skill to debug-package (avoid confusion with debugging workflows) - Add disable-model-invocation to add-* skills so they are manual-only - Add user-invocable: false to reference/architecture skills so they auto-load only when relevant * ๐Ÿ”จ chore: rename skill reference dirs to plural references Align with the skill-creator convention (scripts/, references/, assets/). * ๐Ÿ“ docs(skills): split oversized SKILL.md files and refine triggers - upstash-workflow: 1126L โ†’ 189L, extract implementation / best-practices / examples references - data-fetching: 854L โ†’ 613L, move parent-keyed-map walkthrough to references - store-data-structures: 625L โ†’ 314L, extract types and reducer references - upstash-workflow/cloud.md, version-release/release-notes-style.md: add TOCs - linear: rewrite ALL-CAPS MUSTs into prose explaining why; mark user-invocable: false - version-release: mark disable-model-invocation: true (manual /version-release only) - debug-package: expand description with concrete trigger phrases and tokens * ๐Ÿ“ docs(skills): regularize microcopy structure Move language-specific guidelines into references/zh.md and references/en.md so SKILL.md can point to them via the standard progressive-disclosure pattern. Previously the two files sat next to SKILL.md but were not referenced anywhere, making them invisible to Claude Code loading. * ๐Ÿ“ docs(skills): move builtin-tool refs into references subdir Aligns builtin-tool with the references/ layout used elsewhere (microcopy, store-data-structures). 3 md files move, SKILL.md links updated. * ๐Ÿ“ docs(skills): broaden trigger descriptions for core skills Adds concrete API names, file paths and natural-language phrases so auto-triggering catches more relevant prompts. Touches zustand, drizzle, i18n, react, typescript, modal, hotkey. * ๐Ÿ“ docs(skills): add argument-hint to user-only skills12 ๅคฉๅ‰
โœจ feat(agent-mock): add agent mock devtools with playback & fixture viewer (#14436) * :package: feat(agent-mock): scaffold package skeleton * :wrench: chore(agent-mock): align deps + add vitest config * :sparkles: feat(agent-mock): add core types * :sparkles: feat(agent-mock): add chunkSplitter with code-point safety * :sparkles: feat(agent-mock): map ExecutionSnapshot โ†’ MockEvent[] * :sparkles: feat(agent-mock): add defineCase / llmStep / toolStep / errorStep DSL * :sparkles: feat(agent-mock): add snapshotToMockCase helper * :sparkles: feat(agent-mock): add todo-write-stress builtin case + registry * :sparkles: feat(agent-mock): add generator registry + tool-stress generator * :sparkles: feat(agent-mock): add 4 more builtin cases (long-reasoning, mixed, error, subagent) * :sparkles: feat(agent-mock): add subagent-tree + long-reasoning generators * :sparkles: feat(agent-mock): add MockPlayer state machine + step navigation * :sparkles: feat(agent-mock): add __agentMockSilent flag + signal bridge guard * :sparkles: feat(agent-mock): add executeMockStream with side-effect gating * :sparkles: feat(agent-mock): add dev-only devClearMockTopics TRPC procedure * :sparkles: feat(agent-mock): add dev API to list/read .agent-tracing snapshots * :sparkles: feat(agent-mock): add agentMockStore zustand * :sparkles: feat(agent-mock): add useMockCases hook * :sparkles: feat(agent-mock): add useAgentMockPlayer hook * :sparkles: feat(agent-mock): add useMockTopicCleanup hook * :sparkles: feat(agent-mock): add Fab entry component * :sparkles: feat(agent-mock): add Modal shell with tab bar * :sparkles: feat(agent-mock): add CaseList sidebar with search + groups * :sparkles: feat(agent-mock): add MiniBar floating playback controls * :sparkles: feat(agent-mock): add StatusGrid component * :sparkles: feat(agent-mock): add Controls (play/pause/step/speed) * :sparkles: feat(agent-mock): add ProgressBar * :sparkles: feat(agent-mock): add TargetPicker * :sparkles: feat(agent-mock): compose PlayerPanel * :sparkles: feat(agent-mock): add TimelinePanel + virtualized EventRow * :sparkles: feat(agent-mock): add read-only FixtureViewer with copy button * :sparkles: feat(agent-mock): add SettingsPanel with toggles + clear topics * :recycle: refactor(agent-mock): address quality review (stable itemContent, type-safe error handling, clipboard catch) * :sparkles: feat(agent-mock): wire entry component (FAB + Modal + MiniBar) * :sparkles: feat(agent-mock): mount AgentMockDevtools in SPAGlobalProvider * :recycle: refactor(agent-mock): switch Modal to imperative createModal API * :bug: fix(agent-mock): use close() + onOpenChangeComplete to preserve motion exit animation * work Signed-off-by: Innei <tukon479@gmail.com> * minify Signed-off-by: Innei <tukon479@gmail.com> * :lipstick: refactor(agent-mock): rebuild devtools UI/UX with mono palette and IA reorg Replace the in-modal sidebar + tab strip + MiniBar with a Fab-anchored draggable Popover (case picker, transport, replay/loop, scrubbable progress, stop, Open DevTools) and a token-driven Modal layout (two-row header, Segmented view tabs, StatsStrip, sticky TransportBar). Wire EventRow and the progress bars to seekToEventIndex (resolves the prior TODO), swap alert() for toast.warning, persist loop and popover position to localStorage. * work Signed-off-by: Innei <tukon479@gmail.com> * :broom: chore(agent-mock): remove replay debug logs * ๐Ÿ‘ท build: add @google/genai to pnpm allowBuilds Fixes ERR_PNPM_IGNORED_BUILDS in CI โ€” pnpm v11 blocks install when a dependency with install scripts is not in the allowBuilds list. * ๐Ÿ› fix: resolve TS type errors in useAgentMockPlayer - parentMessageId: coerce `undefined` to `null` to match `string | null` - threadId: coerce `null` to `undefined` for cancelOperations param * :recycle: refactor: revert ConversationArea & sync-import AgentMockDevtools - ConversationArea: restore messageMapKey(context), avoid needless field spread - SPAGlobalProvider: switch AgentMockDevtools to sync import (dev-only, no need to lazy) --------- Signed-off-by: Innei <tukon479@gmail.com>17 ๅคฉๅ‰
๐Ÿ“ docs(skills): frontmatter cleanup + argument-hint (#14683) * ๐Ÿ”จ chore: control skill triggering via frontmatter flags - Rename debug skill to debug-package (avoid confusion with debugging workflows) - Add disable-model-invocation to add-* skills so they are manual-only - Add user-invocable: false to reference/architecture skills so they auto-load only when relevant * ๐Ÿ”จ chore: rename skill reference dirs to plural references Align with the skill-creator convention (scripts/, references/, assets/). * ๐Ÿ“ docs(skills): split oversized SKILL.md files and refine triggers - upstash-workflow: 1126L โ†’ 189L, extract implementation / best-practices / examples references - data-fetching: 854L โ†’ 613L, move parent-keyed-map walkthrough to references - store-data-structures: 625L โ†’ 314L, extract types and reducer references - upstash-workflow/cloud.md, version-release/release-notes-style.md: add TOCs - linear: rewrite ALL-CAPS MUSTs into prose explaining why; mark user-invocable: false - version-release: mark disable-model-invocation: true (manual /version-release only) - debug-package: expand description with concrete trigger phrases and tokens * ๐Ÿ“ docs(skills): regularize microcopy structure Move language-specific guidelines into references/zh.md and references/en.md so SKILL.md can point to them via the standard progressive-disclosure pattern. Previously the two files sat next to SKILL.md but were not referenced anywhere, making them invisible to Claude Code loading. * ๐Ÿ“ docs(skills): move builtin-tool refs into references subdir Aligns builtin-tool with the references/ layout used elsewhere (microcopy, store-data-structures). 3 md files move, SKILL.md links updated. * ๐Ÿ“ docs(skills): broaden trigger descriptions for core skills Adds concrete API names, file paths and natural-language phrases so auto-triggering catches more relevant prompts. Touches zustand, drizzle, i18n, react, typescript, modal, hotkey. * ๐Ÿ“ docs(skills): add argument-hint to user-only skills12 ๅคฉๅ‰
๐Ÿ“ docs(skills): frontmatter cleanup + argument-hint (#14683) * ๐Ÿ”จ chore: control skill triggering via frontmatter flags - Rename debug skill to debug-package (avoid confusion with debugging workflows) - Add disable-model-invocation to add-* skills so they are manual-only - Add user-invocable: false to reference/architecture skills so they auto-load only when relevant * ๐Ÿ”จ chore: rename skill reference dirs to plural references Align with the skill-creator convention (scripts/, references/, assets/). * ๐Ÿ“ docs(skills): split oversized SKILL.md files and refine triggers - upstash-workflow: 1126L โ†’ 189L, extract implementation / best-practices / examples references - data-fetching: 854L โ†’ 613L, move parent-keyed-map walkthrough to references - store-data-structures: 625L โ†’ 314L, extract types and reducer references - upstash-workflow/cloud.md, version-release/release-notes-style.md: add TOCs - linear: rewrite ALL-CAPS MUSTs into prose explaining why; mark user-invocable: false - version-release: mark disable-model-invocation: true (manual /version-release only) - debug-package: expand description with concrete trigger phrases and tokens * ๐Ÿ“ docs(skills): regularize microcopy structure Move language-specific guidelines into references/zh.md and references/en.md so SKILL.md can point to them via the standard progressive-disclosure pattern. Previously the two files sat next to SKILL.md but were not referenced anywhere, making them invisible to Claude Code loading. * ๐Ÿ“ docs(skills): move builtin-tool refs into references subdir Aligns builtin-tool with the references/ layout used elsewhere (microcopy, store-data-structures). 3 md files move, SKILL.md links updated. * ๐Ÿ“ docs(skills): broaden trigger descriptions for core skills Adds concrete API names, file paths and natural-language phrases so auto-triggering catches more relevant prompts. Touches zustand, drizzle, i18n, react, typescript, modal, hotkey. * ๐Ÿ“ docs(skills): add argument-hint to user-only skills12 ๅคฉๅ‰
๐Ÿ“ docs(skills): frontmatter cleanup + argument-hint (#14683) * ๐Ÿ”จ chore: control skill triggering via frontmatter flags - Rename debug skill to debug-package (avoid confusion with debugging workflows) - Add disable-model-invocation to add-* skills so they are manual-only - Add user-invocable: false to reference/architecture skills so they auto-load only when relevant * ๐Ÿ”จ chore: rename skill reference dirs to plural references Align with the skill-creator convention (scripts/, references/, assets/). * ๐Ÿ“ docs(skills): split oversized SKILL.md files and refine triggers - upstash-workflow: 1126L โ†’ 189L, extract implementation / best-practices / examples references - data-fetching: 854L โ†’ 613L, move parent-keyed-map walkthrough to references - store-data-structures: 625L โ†’ 314L, extract types and reducer references - upstash-workflow/cloud.md, version-release/release-notes-style.md: add TOCs - linear: rewrite ALL-CAPS MUSTs into prose explaining why; mark user-invocable: false - version-release: mark disable-model-invocation: true (manual /version-release only) - debug-package: expand description with concrete trigger phrases and tokens * ๐Ÿ“ docs(skills): regularize microcopy structure Move language-specific guidelines into references/zh.md and references/en.md so SKILL.md can point to them via the standard progressive-disclosure pattern. Previously the two files sat next to SKILL.md but were not referenced anywhere, making them invisible to Claude Code loading. * ๐Ÿ“ docs(skills): move builtin-tool refs into references subdir Aligns builtin-tool with the references/ layout used elsewhere (microcopy, store-data-structures). 3 md files move, SKILL.md links updated. * ๐Ÿ“ docs(skills): broaden trigger descriptions for core skills Adds concrete API names, file paths and natural-language phrases so auto-triggering catches more relevant prompts. Touches zustand, drizzle, i18n, react, typescript, modal, hotkey. * ๐Ÿ“ docs(skills): add argument-hint to user-only skills12 ๅคฉๅ‰
๐Ÿ“ docs(skills): frontmatter cleanup + argument-hint (#14683) * ๐Ÿ”จ chore: control skill triggering via frontmatter flags - Rename debug skill to debug-package (avoid confusion with debugging workflows) - Add disable-model-invocation to add-* skills so they are manual-only - Add user-invocable: false to reference/architecture skills so they auto-load only when relevant * ๐Ÿ”จ chore: rename skill reference dirs to plural references Align with the skill-creator convention (scripts/, references/, assets/). * ๐Ÿ“ docs(skills): split oversized SKILL.md files and refine triggers - upstash-workflow: 1126L โ†’ 189L, extract implementation / best-practices / examples references - data-fetching: 854L โ†’ 613L, move parent-keyed-map walkthrough to references - store-data-structures: 625L โ†’ 314L, extract types and reducer references - upstash-workflow/cloud.md, version-release/release-notes-style.md: add TOCs - linear: rewrite ALL-CAPS MUSTs into prose explaining why; mark user-invocable: false - version-release: mark disable-model-invocation: true (manual /version-release only) - debug-package: expand description with concrete trigger phrases and tokens * ๐Ÿ“ docs(skills): regularize microcopy structure Move language-specific guidelines into references/zh.md and references/en.md so SKILL.md can point to them via the standard progressive-disclosure pattern. Previously the two files sat next to SKILL.md but were not referenced anywhere, making them invisible to Claude Code loading. * ๐Ÿ“ docs(skills): move builtin-tool refs into references subdir Aligns builtin-tool with the references/ layout used elsewhere (microcopy, store-data-structures). 3 md files move, SKILL.md links updated. * ๐Ÿ“ docs(skills): broaden trigger descriptions for core skills Adds concrete API names, file paths and natural-language phrases so auto-triggering catches more relevant prompts. Touches zustand, drizzle, i18n, react, typescript, modal, hotkey. * ๐Ÿ“ docs(skills): add argument-hint to user-only skills12 ๅคฉๅ‰
โ™ป๏ธ refactor: add shared guard helpers (#15122)1 ๅคฉๅ‰
๐Ÿ“ docs(skills): frontmatter cleanup + argument-hint (#14683) * ๐Ÿ”จ chore: control skill triggering via frontmatter flags - Rename debug skill to debug-package (avoid confusion with debugging workflows) - Add disable-model-invocation to add-* skills so they are manual-only - Add user-invocable: false to reference/architecture skills so they auto-load only when relevant * ๐Ÿ”จ chore: rename skill reference dirs to plural references Align with the skill-creator convention (scripts/, references/, assets/). * ๐Ÿ“ docs(skills): split oversized SKILL.md files and refine triggers - upstash-workflow: 1126L โ†’ 189L, extract implementation / best-practices / examples references - data-fetching: 854L โ†’ 613L, move parent-keyed-map walkthrough to references - store-data-structures: 625L โ†’ 314L, extract types and reducer references - upstash-workflow/cloud.md, version-release/release-notes-style.md: add TOCs - linear: rewrite ALL-CAPS MUSTs into prose explaining why; mark user-invocable: false - version-release: mark disable-model-invocation: true (manual /version-release only) - debug-package: expand description with concrete trigger phrases and tokens * ๐Ÿ“ docs(skills): regularize microcopy structure Move language-specific guidelines into references/zh.md and references/en.md so SKILL.md can point to them via the standard progressive-disclosure pattern. Previously the two files sat next to SKILL.md but were not referenced anywhere, making them invisible to Claude Code loading. * ๐Ÿ“ docs(skills): move builtin-tool refs into references subdir Aligns builtin-tool with the references/ layout used elsewhere (microcopy, store-data-structures). 3 md files move, SKILL.md links updated. * ๐Ÿ“ docs(skills): broaden trigger descriptions for core skills Adds concrete API names, file paths and natural-language phrases so auto-triggering catches more relevant prompts. Touches zustand, drizzle, i18n, react, typescript, modal, hotkey. * ๐Ÿ“ docs(skills): add argument-hint to user-only skills12 ๅคฉๅ‰
๐Ÿ“ docs: simplify and refresh skill docs (#14785)9 ๅคฉๅ‰
๐Ÿ“ docs(skills): frontmatter cleanup + argument-hint (#14683) * ๐Ÿ”จ chore: control skill triggering via frontmatter flags - Rename debug skill to debug-package (avoid confusion with debugging workflows) - Add disable-model-invocation to add-* skills so they are manual-only - Add user-invocable: false to reference/architecture skills so they auto-load only when relevant * ๐Ÿ”จ chore: rename skill reference dirs to plural references Align with the skill-creator convention (scripts/, references/, assets/). * ๐Ÿ“ docs(skills): split oversized SKILL.md files and refine triggers - upstash-workflow: 1126L โ†’ 189L, extract implementation / best-practices / examples references - data-fetching: 854L โ†’ 613L, move parent-keyed-map walkthrough to references - store-data-structures: 625L โ†’ 314L, extract types and reducer references - upstash-workflow/cloud.md, version-release/release-notes-style.md: add TOCs - linear: rewrite ALL-CAPS MUSTs into prose explaining why; mark user-invocable: false - version-release: mark disable-model-invocation: true (manual /version-release only) - debug-package: expand description with concrete trigger phrases and tokens * ๐Ÿ“ docs(skills): regularize microcopy structure Move language-specific guidelines into references/zh.md and references/en.md so SKILL.md can point to them via the standard progressive-disclosure pattern. Previously the two files sat next to SKILL.md but were not referenced anywhere, making them invisible to Claude Code loading. * ๐Ÿ“ docs(skills): move builtin-tool refs into references subdir Aligns builtin-tool with the references/ layout used elsewhere (microcopy, store-data-structures). 3 md files move, SKILL.md links updated. * ๐Ÿ“ docs(skills): broaden trigger descriptions for core skills Adds concrete API names, file paths and natural-language phrases so auto-triggering catches more relevant prompts. Touches zustand, drizzle, i18n, react, typescript, modal, hotkey. * ๐Ÿ“ docs(skills): add argument-hint to user-only skills12 ๅคฉๅ‰