diff --git a/.askman/tasks/20251114-2255-rebuild-multi-agent-comm-demo/README.md b/.askman/tasks/20251114-2255-rebuild-multi-agent-comm-demo/README.md new file mode 100644 index 0000000..a871839 --- /dev/null +++ b/.askman/tasks/20251114-2255-rebuild-multi-agent-comm-demo/README.md @@ -0,0 +1,59 @@ +# Rebuild Multi-Agent Communication (Quick Dev Flow Demo) + +## Requirement (2025-11-14T16:13:10.912Z) +- The Feature-Plan stage MUST support interrupt/abort when it detects conflicts with existing requirements. +- On interrupt, the sequential pipeline MUST short-circuit and emit a structured failure payload (e.g., { ok: false, code: 'CONFLICT', message, details }) or a controlled abort that the orchestrator maps to a failure, preventing downstream stages (feature-edit, YAML validator, report). + +- Task ID: 20251114-2255-rebuild-multi-agent-comm-demo +- Goal: Rebuild/streamline multi-agent communication (DevHub ↔ LoopAgent/SequentialAgent) for a quick development flow demo. +- Notes: + - Focus on task-id centric collaboration across agents + - Keep CLI UX stable; prefer npx usage + - Prepare minimal demo path via DevHub + Blueprint + Coder/Review + +## Additional Notes (2025-11-14T15:00:15.263Z) +- Atomic agent types: Prompt Agent and Programming Agent +- Prompt Agent is prompt-driven, focusing on a specific task type's working method +- Programming Agent can have multiple nodes; nodes are connected via program logic, and can be defined so each node can be emitted independently + +## Design Target & Use Case (2025-11-14T15:08:00.563Z) +- Agent design is centered on artifacts + working method, not just raw prompts. +- Use Case: feature-updater agent + - Goal: After edits, ensure features.yaml remains well-structured. + - Validate: No duplicate or conflicting feature entries (避免重复/冲突). + - Problem with pure Prompt Agent: LLM can introduce subtle structural mistakes that propagate downstream. + - Decision: Use Programming Agent architecture (multi-node, logic-enforced) to guarantee deterministic validation & merge rules before committing updates. +- Rationale: Programming Agent nodes can emit structured events (parse, diff, validate, normalize) ensuring post-edit artifact integrity and reducing cascading errors in later workflow stages. + +## Code Review By Features Agent (2025-11-14T15:40:26.943Z) +- Purpose: Verify whether new code changes (commit diffs) risk breaking previously implemented features. +- Context: When adding new features quickly, we validate the new one but often skip deep regression of old ones. +- Approach: Iterate existing features (from features.yaml or feature artifacts) and cross-check each feature's logic paths against changed code segments. +- Detection: Identify overlaps (cross points) where modified functions, modules, or data contracts intersect a feature's required invariants. +- Output: Structured report listing per-feature risk status, with: + - feature_id / name + - risk_level (none/low/medium/high) + - impacted elements (files, functions, lines) + - rationale (what change introduces the potential break) +- Architecture Choice: Programming Agent (multi-node) for deterministic traversal: nodes = [collect_diff, enumerate_features, map_dependencies, detect_cross, score_risk, generate_report]. +- Benefit: Early surfacing of silent regressions without full test suite expansion. + +## Planned Upgrade: Feature-Updater Sequential Agent (2025-11-14T15:59:12.767Z) +- Goal: Upgrade to feature-updater with a sequential architecture; rename feature-writer to feature-edit. +- Composition: + - Feature-Plan (Prompt Agent; new agent) + - Loop (LoopAgent; current: blueprint loop) + - Stage: feature-edit (Prompt Agent; renamed from feature-writer; supports add/delete/change) → YAML validator + - Feature-Changes Review (Prompt Agent) to check and produce a report +- Pipeline: feature-plan → loop(feature-edit → yaml validator) → feature-changes report. +- Rationale: Combine prompt-driven ideation with programmatic validation to reduce LLM-induced structural errors while producing a final human-readable risk/change report. + +> 2025-11-14T16:00:41.950Z: Note — feature-edit is a Prompt Agent. + +## Additional Agent Evolution (2025-11-14T16:21:31.043Z) +- Blueprint will become a Prompt Agent (was LoopAgent) focused on direct user dialogue and selectively invoking other agents when needed (not a full orchestrator/central workflow controller). +- Selection logic: interpret user intent → choose Feature-Updater, UI Review, Notes Agent, or others; skip calls when no added value. +- UI Review (ui-review) remains a Prompt Agent for UI/UX; legacy structure requires audit/refactor. +- Notes Agent (new Prompt Agent): writes fragments to notes-.md in task workspace; appends decisions, conflicts, risks chronologically. +- Example interaction path: user intent → blueprint (dialog) → conditional calls: (feature-updater loop) and/or (ui-review) → notes-agent summary. +- Abort policy: On conflict detected in feature-plan or validation failure, blueprint stops further calls and invokes notes-agent to persist the issue. diff --git a/.gitignore b/.gitignore index 05194ad..1ecadaa 100644 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,7 @@ coverage/ # Bundlers and frameworks .parcel-cache/ +.vite-cache/ .next/ .nuxt/ .svelte-kit/ diff --git a/.pnp.cjs b/.pnp.cjs index 5d7d782..8e97b95 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -90,6 +90,8 @@ const RAW_RUNTIME_STATE = ["tsup", "virtual:f0cbd1e59e07c13b8e4e1c3d41410653e788ddde93a0a60414066228154c888e2c66988978762360aa3691c90ab4c34a8a27563dd80f0dacd6b1cbe601d30129#npm:8.5.1"],\ ["tsx", "npm:4.20.6"],\ ["typescript", "patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5"],\ + ["vite", "virtual:f0cbd1e59e07c13b8e4e1c3d41410653e788ddde93a0a60414066228154c888e2c66988978762360aa3691c90ab4c34a8a27563dd80f0dacd6b1cbe601d30129#npm:6.4.1"],\ + ["vite-tsconfig-paths", "virtual:f0cbd1e59e07c13b8e4e1c3d41410653e788ddde93a0a60414066228154c888e2c66988978762360aa3691c90ab4c34a8a27563dd80f0dacd6b1cbe601d30129#npm:5.1.4"],\ ["vitest", "virtual:f0cbd1e59e07c13b8e4e1c3d41410653e788ddde93a0a60414066228154c888e2c66988978762360aa3691c90ab4c34a8a27563dd80f0dacd6b1cbe601d30129#npm:4.0.6"],\ ["zod", "npm:3.25.76"]\ ],\ @@ -250,6 +252,8 @@ const RAW_RUNTIME_STATE = ["tsup", "virtual:f0cbd1e59e07c13b8e4e1c3d41410653e788ddde93a0a60414066228154c888e2c66988978762360aa3691c90ab4c34a8a27563dd80f0dacd6b1cbe601d30129#npm:8.5.1"],\ ["tsx", "npm:4.20.6"],\ ["typescript", "patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5"],\ + ["vite", "virtual:f0cbd1e59e07c13b8e4e1c3d41410653e788ddde93a0a60414066228154c888e2c66988978762360aa3691c90ab4c34a8a27563dd80f0dacd6b1cbe601d30129#npm:6.4.1"],\ + ["vite-tsconfig-paths", "virtual:f0cbd1e59e07c13b8e4e1c3d41410653e788ddde93a0a60414066228154c888e2c66988978762360aa3691c90ab4c34a8a27563dd80f0dacd6b1cbe601d30129#npm:5.1.4"],\ ["vitest", "virtual:f0cbd1e59e07c13b8e4e1c3d41410653e788ddde93a0a60414066228154c888e2c66988978762360aa3691c90ab4c34a8a27563dd80f0dacd6b1cbe601d30129#npm:4.0.6"],\ ["zod", "npm:3.25.76"]\ ],\ @@ -2732,6 +2736,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["globrex", [\ + ["npm:0.1.2", {\ + "packageLocation": "../../../.yarn/berry/cache/globrex-npm-0.1.2-ddda94f2d0-10c0.zip/node_modules/globrex/",\ + "packageDependencies": [\ + ["globrex", "npm:0.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["graceful-fs", [\ ["npm:4.2.11", {\ "packageLocation": "../../../.yarn/berry/cache/graceful-fs-npm-4.2.11-24bb648a68-10c0.zip/node_modules/graceful-fs/",\ @@ -4312,6 +4325,28 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["tsconfck", [\ + ["npm:3.1.6", {\ + "packageLocation": "../../../.yarn/berry/cache/tsconfck-npm-3.1.6-2dccdb1bd5-10c0.zip/node_modules/tsconfck/",\ + "packageDependencies": [\ + ["tsconfck", "npm:3.1.6"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:f124b25ac4aad36f9f9db4312d8cf113ad3ed0e1cf7cda8279cfa82ad1e223419c4e52655f89cc642278127d42d9a540a065b50504080e716604e9a98f541a43#npm:3.1.6", {\ + "packageLocation": "./.yarn/__virtual__/tsconfck-virtual-7c6ef46e0a/4/.yarn/berry/cache/tsconfck-npm-3.1.6-2dccdb1bd5-10c0.zip/node_modules/tsconfck/",\ + "packageDependencies": [\ + ["@types/typescript", null],\ + ["tsconfck", "virtual:f124b25ac4aad36f9f9db4312d8cf113ad3ed0e1cf7cda8279cfa82ad1e223419c4e52655f89cc642278127d42d9a540a065b50504080e716604e9a98f541a43#npm:3.1.6"],\ + ["typescript", null]\ + ],\ + "packagePeers": [\ + "@types/typescript",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["tslib", [\ ["npm:2.8.1", {\ "packageLocation": "../../../.yarn/berry/cache/tslib-npm-2.8.1-66590b21b8-10c0.zip/node_modules/tslib/",\ @@ -4466,6 +4501,13 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["vite", [\ + ["npm:6.4.1", {\ + "packageLocation": "../../../.yarn/berry/cache/vite-npm-6.4.1-67e9cf9ded-10c0.zip/node_modules/vite/",\ + "packageDependencies": [\ + ["vite", "npm:6.4.1"]\ + ],\ + "linkType": "SOFT"\ + }],\ ["npm:7.1.12", {\ "packageLocation": "../../../.yarn/berry/cache/vite-npm-7.1.12-4c5705516c-10c0.zip/node_modules/vite/",\ "packageDependencies": [\ @@ -4530,6 +4572,89 @@ const RAW_RUNTIME_STATE = "yaml"\ ],\ "linkType": "HARD"\ + }],\ + ["virtual:f0cbd1e59e07c13b8e4e1c3d41410653e788ddde93a0a60414066228154c888e2c66988978762360aa3691c90ab4c34a8a27563dd80f0dacd6b1cbe601d30129#npm:6.4.1", {\ + "packageLocation": "./.yarn/__virtual__/vite-virtual-8eec90997a/4/.yarn/berry/cache/vite-npm-6.4.1-67e9cf9ded-10c0.zip/node_modules/vite/",\ + "packageDependencies": [\ + ["@types/jiti", null],\ + ["@types/less", null],\ + ["@types/lightningcss", null],\ + ["@types/node", "npm:24.10.0"],\ + ["@types/sass", null],\ + ["@types/sass-embedded", null],\ + ["@types/stylus", null],\ + ["@types/sugarss", null],\ + ["@types/terser", null],\ + ["@types/tsx", null],\ + ["@types/yaml", null],\ + ["esbuild", "npm:0.25.12"],\ + ["fdir", "virtual:0e783aadbd2b4b8e6f6056033c0b290501892d23bc7c5dad5477e00e48ad8bd3e4434c3962a52dd75a58e06dbb7218094a494bac954ef2f7f6fdb65d9717e5f4#npm:6.5.0"],\ + ["fsevents", "patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1"],\ + ["jiti", null],\ + ["less", null],\ + ["lightningcss", null],\ + ["picomatch", "npm:4.0.3"],\ + ["postcss", "npm:8.5.6"],\ + ["rollup", "npm:4.53.2"],\ + ["sass", null],\ + ["sass-embedded", null],\ + ["stylus", null],\ + ["sugarss", null],\ + ["terser", null],\ + ["tinyglobby", "npm:0.2.15"],\ + ["tsx", "npm:4.20.6"],\ + ["vite", "virtual:f0cbd1e59e07c13b8e4e1c3d41410653e788ddde93a0a60414066228154c888e2c66988978762360aa3691c90ab4c34a8a27563dd80f0dacd6b1cbe601d30129#npm:6.4.1"],\ + ["yaml", null]\ + ],\ + "packagePeers": [\ + "@types/jiti",\ + "@types/less",\ + "@types/lightningcss",\ + "@types/node",\ + "@types/sass-embedded",\ + "@types/sass",\ + "@types/stylus",\ + "@types/sugarss",\ + "@types/terser",\ + "@types/tsx",\ + "@types/yaml",\ + "jiti",\ + "less",\ + "lightningcss",\ + "sass-embedded",\ + "sass",\ + "stylus",\ + "sugarss",\ + "terser",\ + "tsx",\ + "yaml"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["vite-tsconfig-paths", [\ + ["npm:5.1.4", {\ + "packageLocation": "../../../.yarn/berry/cache/vite-tsconfig-paths-npm-5.1.4-7b9978a4d1-10c0.zip/node_modules/vite-tsconfig-paths/",\ + "packageDependencies": [\ + ["vite-tsconfig-paths", "npm:5.1.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:f0cbd1e59e07c13b8e4e1c3d41410653e788ddde93a0a60414066228154c888e2c66988978762360aa3691c90ab4c34a8a27563dd80f0dacd6b1cbe601d30129#npm:5.1.4", {\ + "packageLocation": "./.yarn/__virtual__/vite-tsconfig-paths-virtual-f124b25ac4/4/.yarn/berry/cache/vite-tsconfig-paths-npm-5.1.4-7b9978a4d1-10c0.zip/node_modules/vite-tsconfig-paths/",\ + "packageDependencies": [\ + ["@types/vite", null],\ + ["debug", "virtual:643ed7cc338bcf145a82d8b05b3bef6bcf150ca545df386225596f10ce53cc90b88b3ca83e348ade1ccea5f3f8e76c92d2f0e2ba544da60d40aff9921c56872d#npm:4.4.3"],\ + ["globrex", "npm:0.1.2"],\ + ["tsconfck", "virtual:f124b25ac4aad36f9f9db4312d8cf113ad3ed0e1cf7cda8279cfa82ad1e223419c4e52655f89cc642278127d42d9a540a065b50504080e716604e9a98f541a43#npm:3.1.6"],\ + ["vite", "virtual:f0cbd1e59e07c13b8e4e1c3d41410653e788ddde93a0a60414066228154c888e2c66988978762360aa3691c90ab4c34a8a27563dd80f0dacd6b1cbe601d30129#npm:6.4.1"],\ + ["vite-tsconfig-paths", "virtual:f0cbd1e59e07c13b8e4e1c3d41410653e788ddde93a0a60414066228154c888e2c66988978762360aa3691c90ab4c34a8a27563dd80f0dacd6b1cbe601d30129#npm:5.1.4"]\ + ],\ + "packagePeers": [\ + "@types/vite",\ + "vite"\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["vitest", [\ diff --git a/package.json b/package.json index 65cb764..0385c55 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,8 @@ "tsup": "^8.5.1", "tsx": "^4.20.6", "typescript": "^5.9.3", + "vite": "^6.0.1", + "vite-tsconfig-paths": "^5.1.2", "vitest": "^4.0.6" }, "keywords": [], @@ -45,7 +47,7 @@ "scripts": { "start": "tsx packages/cli/main.tsx --", "build": "tsup --config tsup.config.ts && node scripts/copy-assets.js", - "prepublishOnly": "yarn build", + "prepack": "yarn build", "start:test": "concurrently --raw --kill-others --success first \"yarn start\" \"sleep 10\"", "test:story": "yarn start -- --blueprint -p \"Say [Hi]. Don't say anything else.\" --auto-allow --auto-exit", "test:glossary": "yarn start -- --glossary -p \"Say [Hi]. Don't say anything else.\" --auto-allow --auto-exit", @@ -57,7 +59,7 @@ "test:devhub:add_pending": "concurrently --raw --kill-others --success first \"yarn start -- --workspace $(mktemp -d)/taskagent-tmp --newsession --devhub --auto-allow --auto-exit -p 'Hello, please use send_to_looper tool with command add_pending and task Refactor logging system'\" \"sleep 20\"", "test:devhub:stop": "concurrently --raw --kill-others --success first \"yarn start -- --workspace $(mktemp -d)/taskagent-tmp --newsession --devhub --auto-allow --auto-exit -p 'Hello, please use send_to_looper tool with command stop'\" \"sleep 20\"", "test:watch": "vitest watch", - "publish": "echo \"Use yarn npm publish --access public\"", + "publish": "yarn npm publish --access public", "test:pack": "node scripts/test-pack.js" }, "_note_postbuild": "Yarn 4 hardened mode skips postbuild hooks, so asset copy runs inline in the build script.", diff --git a/packages/agents/blueprint/BlueprintLoop.ts b/packages/agents/blueprint/BlueprintLoop.ts index 899138e..27fce5a 100644 --- a/packages/agents/blueprint/BlueprintLoop.ts +++ b/packages/agents/blueprint/BlueprintLoop.ts @@ -11,8 +11,8 @@ import yaml from 'js-yaml'; import { LoopAgent } from '../workflow-agents/LoopAgent.js'; import type { RunnableAgent, AgentStartContext, AgentStartSinks, AgentToolContext } from '../runtime/types.js'; import type { AgentRegistry } from '../registry/AgentRegistry.js'; -import type { EventBus } from '@taskagent/core/event-bus'; -import { addLog } from '@taskagent/shared/logger'; +import type { EventBus } from '@core/event-bus'; +import { addLog } from '@shared/logger'; import { runAgent, emitProgress } from '../runtime/async-task/helpers.js'; import type { AsyncTaskContext } from '../runtime/async-task/types.js'; diff --git a/packages/agents/blueprint/index.ts b/packages/agents/blueprint/index.ts index a28ee31..47dbaae 100644 --- a/packages/agents/blueprint/index.ts +++ b/packages/agents/blueprint/index.ts @@ -1,5 +1,6 @@ import type { RunnableAgent } from '../runtime/types.js'; -import type { EventBus } from '@taskagent/core/event-bus'; + +import type { EventBus } from '@core/event-bus'; import { BlueprintLoop } from './BlueprintLoop.js'; export async function createAgent(options?: { diff --git a/packages/agents/coder/CoderAgent.ts b/packages/agents/coder/CoderAgent.ts index 795d3b1..b138cef 100644 --- a/packages/agents/coder/CoderAgent.ts +++ b/packages/agents/coder/CoderAgent.ts @@ -1,7 +1,7 @@ import { PromptAgent, type AgentContext, type AgentToolContext, type RunnableAgent, type AgentStartContext, type AgentStartSinks, type ExecutionHandle } from '../runtime/types.js'; import { buildPromptAgentStart } from '../runtime/runPromptAgentStart.js'; import type { AgentRegistry } from '../registry/AgentRegistry.js'; -import type { EventBus } from '@taskagent/core/event-bus'; +import type { EventBus } from '@core/event-bus'; import type { AgentDefinition } from '@anthropic-ai/claude-agent-sdk'; const CODER_AGENT_ID = 'coder'; diff --git a/packages/agents/coder/index.ts b/packages/agents/coder/index.ts index bb47ecf..401e0b2 100644 --- a/packages/agents/coder/index.ts +++ b/packages/agents/coder/index.ts @@ -3,7 +3,7 @@ import { fileURLToPath } from 'url'; import { loadAgentPipelineConfig } from '../runtime/agentLoader.js'; import type { RunnableAgent } from '../runtime/types.js'; import type { TabExecutor } from '../../execution/TabExecutor.js'; -import type { EventBus } from '@taskagent/core/event-bus'; +import type { EventBus } from '@core/event-bus'; import type { AgentRegistry } from '../registry/AgentRegistry.js'; import { CoderAgent } from './CoderAgent.js'; diff --git a/packages/agents/desktop/index.ts b/packages/agents/desktop/index.ts index 81d6cdc..0b7edbe 100644 --- a/packages/agents/desktop/index.ts +++ b/packages/agents/desktop/index.ts @@ -15,8 +15,8 @@ import { buildPromptAgentStart } from '../runtime/runPromptAgentStart.js'; import { loadAgentPipelineConfig } from '../runtime/agentLoader.js'; import type { tool as createSdkTool } from '@anthropic-ai/claude-agent-sdk'; import type { AgentContext, AgentStartContext, AgentStartSinks, ExecutionHandle, RunnableAgent } from '../runtime/types.js'; -import type { EventBus } from '@taskagent/core/event-bus'; -import { addLog } from '@taskagent/shared/logger'; +import type { EventBus } from '@core/event-bus'; +import { addLog } from '@shared/logger'; import type { AgentRegistry } from '../registry/AgentRegistry.js'; const START_AGENT_ID = 'start'; diff --git a/packages/agents/devhub/DevHub.ts b/packages/agents/devhub/DevHub.ts index 06da022..e04693e 100644 --- a/packages/agents/devhub/DevHub.ts +++ b/packages/agents/devhub/DevHub.ts @@ -14,12 +14,12 @@ import { PromptAgent, type AgentContext, type AgentToolContext, type RunnableAge import { buildPromptAgentStart } from '../runtime/runPromptAgentStart.js'; import { loadAgentPipelineConfig } from '../runtime/agentLoader.js'; import type { AgentDefinition } from '@anthropic-ai/claude-agent-sdk'; -import type { EventBus } from '@taskagent/core/event-bus'; -import type { TaskManager } from '@taskagent/shared/task-manager'; +import type { EventBus } from '@core/event-bus'; +import type { TaskManager } from '@shared/task-manager'; import type { AgentRegistry } from '../registry/AgentRegistry.js'; import { CodingLoop } from './coding-loop/index.js'; import type { LooperCommand } from './coding-loop/command.js'; -import { addLog } from '@taskagent/shared/logger'; +import { addLog } from '@shared/logger'; const DEV_HUB_AGENT_ID = 'devhub'; const DEV_HUB_DESCRIPTION = 'DevHub Agent - 理解开发需求,协调 Coder 与 Reviewer 循环开发直到代码通过审查'; diff --git a/packages/agents/devhub/coding-loop/SummarizationCallback.ts b/packages/agents/devhub/coding-loop/SummarizationCallback.ts index 9db479f..a5de230 100644 --- a/packages/agents/devhub/coding-loop/SummarizationCallback.ts +++ b/packages/agents/devhub/coding-loop/SummarizationCallback.ts @@ -8,7 +8,7 @@ import type { AgentCallback } from '../../workflow-agents/AgentCallback.js'; import type { RunnableAgent } from '../../runtime/types.js'; import { EventCollector } from './event-collector.js'; -import { addLog } from '@taskagent/shared/logger'; +import { addLog } from '@shared/logger'; export class SummarizationCallback implements AgentCallback { private eventCollector = new EventCollector(); diff --git a/packages/agents/devhub/coding-loop/event-collector.ts b/packages/agents/devhub/coding-loop/event-collector.ts index 22d09ce..80e696a 100644 --- a/packages/agents/devhub/coding-loop/event-collector.ts +++ b/packages/agents/devhub/coding-loop/event-collector.ts @@ -7,7 +7,7 @@ * - Determine when to trigger summary (time-based or count-based) */ -import { addLog } from '@taskagent/shared/logger'; +import { addLog } from '@shared/logger'; export interface TruncatedEvent { type: string; diff --git a/packages/agents/devhub/coding-loop/index.ts b/packages/agents/devhub/coding-loop/index.ts index 86ffff2..f6237bf 100644 --- a/packages/agents/devhub/coding-loop/index.ts +++ b/packages/agents/devhub/coding-loop/index.ts @@ -17,7 +17,7 @@ import { createJudgeAgent, parseJudgeOutput } from '../judge/index.js'; import { createSummarizerAgent } from '../summarizer/index.js'; import { SummarizationCallback } from './SummarizationCallback.js'; import { SinglePass } from './SinglePass.js'; -import { addLog } from '@taskagent/shared/logger'; +import { addLog } from '@shared/logger'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; diff --git a/packages/agents/devhub/judge/JudgeAgent.ts b/packages/agents/devhub/judge/JudgeAgent.ts index 3e1245b..6f5e2b0 100644 --- a/packages/agents/devhub/judge/JudgeAgent.ts +++ b/packages/agents/devhub/judge/JudgeAgent.ts @@ -12,7 +12,7 @@ import { fileURLToPath } from 'url'; import { PromptAgent, type AgentContext, type AgentToolContext, type RunnableAgent, type AgentStartContext, type AgentStartSinks, type ExecutionHandle } from '../../runtime/types.js'; import { buildPromptAgentStart } from '../../runtime/runPromptAgentStart.js'; import { JudgeDecisionSchema, type JudgeDecision } from './schema.js'; -import { addLog } from '@taskagent/shared/logger'; +import { addLog } from '@shared/logger'; import fs from 'fs/promises'; const JUDGE_AGENT_ID = 'judge'; diff --git a/packages/agents/devhub/summarizer/SummarizerAgent.ts b/packages/agents/devhub/summarizer/SummarizerAgent.ts index b49456b..cfd9c9b 100644 --- a/packages/agents/devhub/summarizer/SummarizerAgent.ts +++ b/packages/agents/devhub/summarizer/SummarizerAgent.ts @@ -11,7 +11,7 @@ import { fileURLToPath } from 'url'; import { PromptAgent, type AgentContext, type AgentToolContext, type RunnableAgent, type AgentStartContext, type AgentStartSinks, type ExecutionHandle } from '../../runtime/types.js'; import { buildPromptAgentStart } from '../../runtime/runPromptAgentStart.js'; import { loadAgentPipelineConfig } from '../../runtime/agentLoader.js'; -import { addLog } from '@taskagent/shared/logger'; +import { addLog } from '@shared/logger'; const SUMMARIZER_AGENT_ID = 'summarizer'; const SUMMARIZER_DESCRIPTION = 'Generate concise progress summaries from event logs'; diff --git a/packages/agents/feature-writer/FeatureWriterAgent.ts b/packages/agents/feature-writer/FeatureWriterAgent.ts index d8a518a..2cca228 100644 --- a/packages/agents/feature-writer/FeatureWriterAgent.ts +++ b/packages/agents/feature-writer/FeatureWriterAgent.ts @@ -1,11 +1,8 @@ -import { z } from 'zod'; -import path from 'path'; import { PromptAgent, type AgentContext, type AgentToolContext, type RunnableAgent, type AgentStartContext, type AgentStartSinks, type ExecutionHandle } from '../runtime/types.js'; import { buildPromptAgentStart } from '../runtime/runPromptAgentStart.js'; import type { AgentRegistry } from '../registry/AgentRegistry.js'; -import type { EventBus } from '@taskagent/core/event-bus'; +import type { EventBus } from '@core/event-bus'; import type { AgentDefinition } from '@anthropic-ai/claude-agent-sdk'; -import { addLog } from '@taskagent/shared/logger'; const FEATURE_WRITER_AGENT_ID = 'feature-writer'; const FEATURE_WRITER_DESCRIPTION = 'Feature Writer - Write structured feature YAML files'; diff --git a/packages/agents/feature-writer/index.ts b/packages/agents/feature-writer/index.ts index 03f6a0e..5be97d4 100644 --- a/packages/agents/feature-writer/index.ts +++ b/packages/agents/feature-writer/index.ts @@ -3,7 +3,7 @@ import { fileURLToPath } from 'url'; import { loadAgentPipelineConfig } from '../runtime/agentLoader.js'; import type { RunnableAgent } from '../runtime/types.js'; import type { TabExecutor } from '../../execution/TabExecutor.js'; -import type { EventBus } from '@taskagent/core/event-bus'; +import type { EventBus } from '@core/event-bus'; import type { AgentRegistry } from '../registry/AgentRegistry.js'; import { FeatureWriterAgent } from './FeatureWriterAgent.js'; diff --git a/packages/agents/registry/AgentRegistry.ts b/packages/agents/registry/AgentRegistry.ts index 4bb1a37..092dad5 100644 --- a/packages/agents/registry/AgentRegistry.ts +++ b/packages/agents/registry/AgentRegistry.ts @@ -5,9 +5,9 @@ * Provides unified interface for agent discovery and instantiation. */ -import type { EventBus } from '@taskagent/core/event-bus'; +import type { EventBus } from '@core/event-bus'; import type { AgentStartContext, AgentStartSinks, ExecutionHandle, RunnableAgent } from '../runtime/types.js'; -import { MessageAdapter } from '@taskagent/execution/MessageAdapter.js'; +import { MessageAdapter } from '@execution/MessageAdapter.js'; /** * Agent Factory - creates agent instances diff --git a/packages/agents/review/ReviewAgent.ts b/packages/agents/review/ReviewAgent.ts index 800ac6a..8e25419 100644 --- a/packages/agents/review/ReviewAgent.ts +++ b/packages/agents/review/ReviewAgent.ts @@ -1,4 +1,4 @@ -import { addLog } from '@taskagent/shared/logger'; +import { addLog } from '@shared/logger'; import { PromptAgent, type AgentContext, type AgentToolContext, type RunnableAgent, type AgentStartContext, type AgentStartSinks, type ExecutionHandle } from '../runtime/types.js'; import { buildPromptAgentStart } from '../runtime/runPromptAgentStart.js'; import type { AgentDefinition } from '@anthropic-ai/claude-agent-sdk'; diff --git a/packages/agents/review/index.ts b/packages/agents/review/index.ts index a85d7f2..c202a30 100644 --- a/packages/agents/review/index.ts +++ b/packages/agents/review/index.ts @@ -3,7 +3,7 @@ import { fileURLToPath } from 'url'; import { loadAgentPipelineConfig } from '../runtime/agentLoader.js'; import type { RunnableAgent } from '../runtime/types.js'; import type { TabExecutor } from '../../execution/TabExecutor.js'; -import type { EventBus } from '@taskagent/core/event-bus'; +import type { EventBus } from '@core/event-bus'; import type { AgentRegistry } from '../registry/AgentRegistry.js'; import { ReviewAgent } from './ReviewAgent.js'; diff --git a/packages/agents/runtime/async-task/helpers.ts b/packages/agents/runtime/async-task/helpers.ts index c48b1ab..abe2c09 100644 --- a/packages/agents/runtime/async-task/helpers.ts +++ b/packages/agents/runtime/async-task/helpers.ts @@ -1,10 +1,12 @@ /** - * AsyncTask - Shared helper functions + * Async Task Helpers + * + * Progress reporting and task coordination utilities */ +import { addLog } from '@shared/logger'; import type { AsyncTaskContext } from './types.js'; -import type { AgentStartContext, AgentStartSinks } from '../types.js'; -import { addLog } from '@taskagent/shared/logger'; +import type { AgentStartSinks, AgentStartContext } from '../types.js'; /** * Run an agent and collect its output diff --git a/packages/agents/runtime/async-task/types.ts b/packages/agents/runtime/async-task/types.ts index bb986d0..ca88291 100644 --- a/packages/agents/runtime/async-task/types.ts +++ b/packages/agents/runtime/async-task/types.ts @@ -3,7 +3,7 @@ */ import type { AgentRegistry } from '../../registry/AgentRegistry.js'; -import type { EventBus } from '@taskagent/core/event-bus'; +import type { EventBus } from '@core/event-bus'; /** * Context passed to async tasks diff --git a/packages/agents/runtime/flows/baseClaudeFlow.ts b/packages/agents/runtime/flows/baseClaudeFlow.ts index 9740da7..abeb898 100644 --- a/packages/agents/runtime/flows/baseClaudeFlow.ts +++ b/packages/agents/runtime/flows/baseClaudeFlow.ts @@ -1,8 +1,8 @@ import type { AgentDefinition, PermissionUpdate } from '@anthropic-ai/claude-agent-sdk'; -import { EventBus } from '@taskagent/core/event-bus'; -import type { AgentEvent, AgentTextPayload, AgentReasoningPayload, AgentEventPayload } from '@taskagent/core/types/AgentEvent.js'; -import type { Message } from '@taskagent/core/types/Message.js'; +import { EventBus } from '@core/event-bus'; +import type { AgentEvent, AgentTextPayload, AgentReasoningPayload, AgentEventPayload } from '@core/types/AgentEvent.js'; +import type { Message } from '@core/types/Message.js'; import { runClaudeStream, type ToolResultEvent, type ToolUseEvent } from '../runClaudeStream.js'; diff --git a/packages/agents/runtime/runClaudeStream.ts b/packages/agents/runtime/runClaudeStream.ts index e1e457d..6e0a115 100644 --- a/packages/agents/runtime/runClaudeStream.ts +++ b/packages/agents/runtime/runClaudeStream.ts @@ -1,7 +1,7 @@ import { inspect } from 'util'; import { query, type SDKAssistantMessage, type PermissionUpdate, type McpServerConfig } from '@anthropic-ai/claude-agent-sdk'; -import { addLog } from '@taskagent/shared/logger'; +import { addLog } from '@shared/logger'; const truncate = (s: string, n = 200) => (s.length <= n ? s : `${s.slice(0, n)}…`); diff --git a/packages/agents/runtime/runPromptAgentStart.ts b/packages/agents/runtime/runPromptAgentStart.ts index 4edf1f6..7c0e8a0 100644 --- a/packages/agents/runtime/runPromptAgentStart.ts +++ b/packages/agents/runtime/runPromptAgentStart.ts @@ -1,6 +1,6 @@ import crypto from 'crypto'; import { inspect } from 'util'; -import { addLog } from '@taskagent/shared/logger'; +import { addLog } from '@shared/logger'; import { runClaudeStream } from './runClaudeStream.js'; import { createSdkMcpServer } from '@anthropic-ai/claude-agent-sdk'; import type { AgentDefinition, McpServerConfig, tool as createSdkTool } from '@anthropic-ai/claude-agent-sdk'; diff --git a/packages/agents/runtime/types.ts b/packages/agents/runtime/types.ts index aa1a5c2..ed747c2 100644 --- a/packages/agents/runtime/types.ts +++ b/packages/agents/runtime/types.ts @@ -1,10 +1,10 @@ import type { AgentDefinition } from '@anthropic-ai/claude-agent-sdk'; import { tool as createSdkTool } from '@anthropic-ai/claude-agent-sdk'; -import type { Message } from '@taskagent/core/types/Message.js'; -import type { TaskEvent } from '@taskagent/core/types/TaskEvent.js'; +import type { Message } from '@core/types/Message.js'; +import type { TaskEvent } from '@core/types/TaskEvent.js'; import type { PermissionUpdate } from '@anthropic-ai/claude-agent-sdk'; import type { ToolUseEvent, ToolResultEvent } from './runClaudeStream.js'; -import { addLog } from '@taskagent/shared/logger'; +import { addLog } from '@shared/logger'; import { z } from 'zod'; /** * Agent execution context diff --git a/packages/agents/runtime/workflowTools.ts b/packages/agents/runtime/workflowTools.ts index b528c2f..0dde3fa 100644 --- a/packages/agents/runtime/workflowTools.ts +++ b/packages/agents/runtime/workflowTools.ts @@ -1,7 +1,7 @@ import { tool } from '@anthropic-ai/claude-agent-sdk'; import type { TabExecutor } from '../../execution/TabExecutor.js'; import type { AgentRegistry } from '../registry/AgentRegistry.js'; -import type { EventBus } from '@taskagent/core/event-bus'; +import type { EventBus } from '@core/event-bus'; import type { ZodTypeAny } from 'zod'; export interface WorkflowSharedDependencies { diff --git a/packages/agents/tsconfig.json b/packages/agents/tsconfig.json index f71ef1a..c091085 100644 --- a/packages/agents/tsconfig.json +++ b/packages/agents/tsconfig.json @@ -1,6 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "composite": true, "outDir": "./dist", "rootDir": "." }, diff --git a/packages/agents/workflow-agents/LoopAgent.ts b/packages/agents/workflow-agents/LoopAgent.ts index 1926e7e..c2ab6ee 100644 --- a/packages/agents/workflow-agents/LoopAgent.ts +++ b/packages/agents/workflow-agents/LoopAgent.ts @@ -1,7 +1,7 @@ import type { RunnableAgent, AgentStartContext, AgentStartSinks, ExecutionHandle } from '../runtime/types.js'; import { BaseAgent } from '../runtime/types.js'; import type { AgentCallback } from './AgentCallback.js'; -import { addLog } from '@taskagent/shared/logger'; +import { addLog } from '@shared/logger'; /** * LoopAgent - Execute sub-agents in a loop until termination condition is met diff --git a/packages/cli/cli/args.ts b/packages/cli/cli/args.ts index 359cf3c..b2f4d57 100644 --- a/packages/cli/cli/args.ts +++ b/packages/cli/cli/args.ts @@ -1,6 +1,8 @@ import minimist from 'minimist'; -import { addLog } from '@taskagent/shared/logger'; +import fs from 'fs'; +import path from 'path'; +import { addLog } from '@shared/logger'; import { DRIVER_NAMES, type DriverName } from '../drivers/types.js'; interface CliArgs { diff --git a/packages/cli/cli/config.ts b/packages/cli/cli/config.ts index 33cead8..eca46ff 100644 --- a/packages/cli/cli/config.ts +++ b/packages/cli/cli/config.ts @@ -1,8 +1,8 @@ import { join } from 'node:path'; -import { loadEnv } from '@taskagent/shared/env'; +import { loadEnv } from '@shared/env'; import { parseCliArgs } from './args.js'; import { printCliUsage } from './help.js'; -import { addLog } from '@taskagent/shared/logger'; +import { addLog } from '@shared/logger'; import type { DriverName } from '../drivers/types.js'; export interface CliConfig { diff --git a/packages/cli/components/ChatPanel.tsx b/packages/cli/components/ChatPanel.tsx index 028ed30..b01dfee 100644 --- a/packages/cli/components/ChatPanel.tsx +++ b/packages/cli/components/ChatPanel.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { Box, Newline, Static, Text, useStdout } from 'ink'; import * as Types from '../types.js'; -import { addLog } from '@taskagent/shared/logger'; +import { addLog } from '@shared/logger'; /** * Thinking animation component - displays walking dots diff --git a/packages/cli/components/InputBar.tsx b/packages/cli/components/InputBar.tsx index fa428f7..2b65d6c 100644 --- a/packages/cli/components/InputBar.tsx +++ b/packages/cli/components/InputBar.tsx @@ -2,7 +2,7 @@ import React, { useState, useEffect, useRef, useCallback } from 'react'; import { Box, Text } from 'ink'; import { CommandMenu } from './CommandMenu.js'; import { SimpleTextDisplay } from './SimpleTextDisplay.js'; -import { addLog } from '@taskagent/shared/logger'; +import { addLog } from '@shared/logger'; import { useCommand } from '../src/hooks/useCommand.js'; import { useKeypress, type Key } from '../src/hooks/useKeypress.js'; import { Command as KeyCommand } from '../src/config/keyBindings.js'; diff --git a/packages/cli/components/StatusControls.tsx b/packages/cli/components/StatusControls.tsx index 16cb25b..2adbb19 100644 --- a/packages/cli/components/StatusControls.tsx +++ b/packages/cli/components/StatusControls.tsx @@ -1,7 +1,7 @@ import { Box, Text } from 'ink'; import React, { useCallback } from 'react'; -import type { Task } from '@taskagent/shared/task-manager'; -import { addLog } from '@taskagent/shared/logger'; +import type { Task } from '@shared/task-manager'; +import { addLog } from '@shared/logger'; import { useCommand } from '../src/hooks/useCommand.js'; import { Command } from '../src/config/keyBindings.js'; import { ACTIVE_TAB_BACKGROUND_COLOR } from './theme.js'; diff --git a/packages/cli/components/TaskSpecificView.tsx b/packages/cli/components/TaskSpecificView.tsx index 191f59d..bb9c6db 100644 --- a/packages/cli/components/TaskSpecificView.tsx +++ b/packages/cli/components/TaskSpecificView.tsx @@ -1,6 +1,6 @@ import React, { useEffect, useState } from 'react'; import { Box, Text, useInput } from 'ink'; -import type { Task } from '@taskagent/shared/task-manager'; +import type { Task } from '@shared/task-manager'; const TASK_PAGE_SIZE = 5; diff --git a/packages/cli/config/ai-provider.ts b/packages/cli/config/ai-provider.ts index 6d7b1db..4745cb9 100644 --- a/packages/cli/config/ai-provider.ts +++ b/packages/cli/config/ai-provider.ts @@ -1,5 +1,6 @@ import { createOpenRouter } from '@openrouter/ai-sdk-provider'; -import { addLog } from '@taskagent/shared/logger'; + +import { addLog } from '@shared/logger'; type ChatModelFactory = ReturnType['chat']; diff --git a/packages/cli/domain/taskStore.ts b/packages/cli/domain/taskStore.ts index 5067550..87597e4 100644 --- a/packages/cli/domain/taskStore.ts +++ b/packages/cli/domain/taskStore.ts @@ -1,6 +1,7 @@ import { useEffect, useMemo, useState } from 'react'; -import { TaskManager, type Task, type TaskWithEmitter } from '@taskagent/shared/task-manager'; -import type { PromptAgent } from '@taskagent/agents/runtime/types.js'; + +import { TaskManager, type Task, type TaskWithEmitter } from '@shared/task-manager'; +import type { PromptAgent } from '@agents/runtime/types.js'; interface UseTaskStoreOptions { pollIntervalMs?: number; diff --git a/packages/cli/drivers/plan-review-do/flow.ts b/packages/cli/drivers/plan-review-do/flow.ts index b1fce35..d19e894 100644 --- a/packages/cli/drivers/plan-review-do/flow.ts +++ b/packages/cli/drivers/plan-review-do/flow.ts @@ -9,7 +9,7 @@ * 5. Conditional routing: plan exists → execute, no plan → END */ -import { addLog } from '@taskagent/shared/logger'; +import { addLog } from '@shared/logger'; import type { Message } from '../../types.js'; import { agentsConfig } from './agents-config.js'; diff --git a/packages/cli/drivers/plan-review-do/index.ts b/packages/cli/drivers/plan-review-do/index.ts index 0e00c99..730f336 100644 --- a/packages/cli/drivers/plan-review-do/index.ts +++ b/packages/cli/drivers/plan-review-do/index.ts @@ -6,7 +6,7 @@ import type { Message } from '../../types.js'; import type { MessageStore } from '../../store/MessageStore.js'; -import { addLog } from '@taskagent/shared/logger'; +import { addLog } from '@shared/logger'; import { runTask, type TaskRunState } from './flow.js'; /** diff --git a/packages/cli/drivers/registry.ts b/packages/cli/drivers/registry.ts index b0c8f74..746a00c 100644 --- a/packages/cli/drivers/registry.ts +++ b/packages/cli/drivers/registry.ts @@ -9,7 +9,7 @@ import { type DriverPrepareFn } from './types.js'; import { handlePlanReviewDo } from './plan-review-do/index.js'; -import { buildPromptAgentStart } from '@taskagent/agents/runtime/runPromptAgentStart.js'; +import { buildPromptAgentStart } from '@agents/runtime/runPromptAgentStart.js'; // Import placeholder views // import StoryView from '../views/StoryView.js'; // Will be replaced by StackAgentView diff --git a/packages/cli/drivers/types.ts b/packages/cli/drivers/types.ts index 3c9dc6d..aa5c819 100644 --- a/packages/cli/drivers/types.ts +++ b/packages/cli/drivers/types.ts @@ -1,6 +1,6 @@ import type React from 'react'; import type { AgentDefinition, PermissionUpdate } from '@anthropic-ai/claude-agent-sdk'; -import type { Task, TaskWithEmitter } from '@taskagent/shared/task-manager'; +import type { Task, TaskWithEmitter } from '@shared/task-manager'; import type { Message } from '../types.js'; import type { DriverPrepareResult } from './pipeline.js'; import type { MessageStore } from '../store/MessageStore.js'; diff --git a/packages/cli/hooks/useAgentEventBridge.ts b/packages/cli/hooks/useAgentEventBridge.ts index aa6885a..b33d037 100644 --- a/packages/cli/hooks/useAgentEventBridge.ts +++ b/packages/cli/hooks/useAgentEventBridge.ts @@ -1,10 +1,10 @@ import { useCallback, useEffect, useRef } from 'react'; -import { addLog } from '@taskagent/shared/logger'; -import type { EventBus } from '@taskagent/core/event-bus'; -import type { AgentEvent } from '@taskagent/core/types/AgentEvent.js'; +import { addLog } from '@shared/logger'; +import type { EventBus } from '@core/event-bus'; +import type { AgentEvent } from '@core/types/AgentEvent.js'; import type { MessageStore } from '../store/MessageStore.js'; import type { Message } from '../types.js'; -import type { ToolUseEvent, ToolResultEvent } from '@taskagent/agents/runtime/runClaudeStream.js'; +import type { ToolUseEvent, ToolResultEvent } from '@agents/runtime/runClaudeStream.js'; type ConversationStatus = 'queued' | 'active'; diff --git a/packages/cli/hooks/useMessageQueue.ts b/packages/cli/hooks/useMessageQueue.ts index 1a084dc..ea28638 100644 --- a/packages/cli/hooks/useMessageQueue.ts +++ b/packages/cli/hooks/useMessageQueue.ts @@ -1,5 +1,5 @@ import { useCallback, useRef } from 'react'; -import { addLog } from '@taskagent/shared/logger'; +import { addLog } from '@shared/logger'; import type { Message } from '../types.js'; export interface QueuedUserInput { diff --git a/packages/cli/hooks/useStreamSession.ts b/packages/cli/hooks/useStreamSession.ts index 8c8bccb..f9e50bf 100644 --- a/packages/cli/hooks/useStreamSession.ts +++ b/packages/cli/hooks/useStreamSession.ts @@ -1,6 +1,6 @@ import { useState, useRef } from 'react'; import { streamText } from 'ai'; -import { addLog } from '@taskagent/shared/logger'; +import { addLog } from '@shared/logger'; import type { AiChatProvider } from '../config/ai-provider.js'; import type { Message, LogMessage } from '../types.js'; import type { MessageStore } from '../store/MessageStore.js'; diff --git a/packages/cli/main.tsx b/packages/cli/main.tsx index d5c0a4f..95eeded 100644 --- a/packages/cli/main.tsx +++ b/packages/cli/main.tsx @@ -6,9 +6,9 @@ import { randomUUID } from 'crypto'; import { inspect } from 'util'; import { type PermissionUpdate, type PermissionResult } from '@anthropic-ai/claude-agent-sdk'; -import { addLog } from '@taskagent/shared/logger'; +import { addLog } from '@shared/logger'; import { loadCliConfig } from './cli/config.js'; -import type { Task } from '@taskagent/shared/task-manager'; +import type { Task } from '@shared/task-manager'; import { ensureAiProvider, type AiChatProvider } from './config/ai-provider.js'; import * as Types from './types.js'; import { ChatPanel } from './components/ChatPanel.js'; @@ -34,25 +34,24 @@ import { getDriverCommandEntries, } from './drivers/registry.js'; import type { AgentPipelineOverrides } from './drivers/pipeline.js'; -import { closeTaskLogger } from '@taskagent/shared/task-logger'; +import { closeTaskLogger } from '@shared/task-logger'; import { loadWorkspaceSettings, writeWorkspaceSettings, type WorkspaceSettings } from './workspace/settings.js'; -import { getGlobalTabRegistry, type TabConfig } from '@taskagent/tabs'; -import { chatTabConfig } from '@taskagent/tabs/configs/chat'; -import { agentTabConfig } from '@taskagent/tabs/configs/agent'; -import { startTabConfig } from '@taskagent/tabs/configs/start'; -import { blueprintTabConfig } from '@taskagent/tabs/configs/blueprint'; -import { glossaryTabConfig } from '@taskagent/tabs/configs/glossary'; -import { uiReviewTabConfig } from '@taskagent/tabs/configs/ui-review'; -import { monitorTabConfig } from '@taskagent/tabs/configs/monitor'; -import { getPresetOrDefault } from '@taskagent/presets'; -import { globalAgentRegistry, registerAllAgents } from '@taskagent/agents/registry'; -import type { AgentStartContext, AgentStartSinks } from '@taskagent/agents/runtime/types.js'; -import { EventBus } from '@taskagent/core/event-bus'; +import { getGlobalTabRegistry, type TabConfig } from '@tabs'; +import { chatTabConfig } from '@tabs/configs/chat'; +import { agentTabConfig } from '@tabs/configs/agent'; +import { startTabConfig } from '@tabs/configs/start'; +import { blueprintTabConfig } from '@tabs/configs/blueprint'; +import { glossaryTabConfig } from '@tabs/configs/glossary'; +import { uiReviewTabConfig } from '@tabs/configs/ui-review'; +import { monitorTabConfig } from '@tabs/configs/monitor'; +import { getPresetOrDefault } from '@presets'; +import { globalAgentRegistry, registerAllAgents } from '@agents/registry'; +import { EventBus } from '@core/event-bus'; import { MessageStore } from './store/MessageStore.js'; import { useMessageStoreTab } from './hooks/useMessageStoreTab.js'; import { useAgentEventBridge } from './hooks/useAgentEventBridge.js'; -import { TabExecutionManager, TabExecutor } from '@taskagent/execution'; -import type { ExecutionContext, ExecutionResult } from '@taskagent/execution'; +import { TabExecutionManager, TabExecutor } from '@execution'; +import type { ExecutionContext, ExecutionResult } from '@execution'; import { KeypressProvider } from './src/contexts/KeypressProvider.js'; // Guard to prevent double submission in dev double-mount scenarios @@ -1446,7 +1445,7 @@ const lastAnnouncedDriverRef = useRef(null); )} - {(isEscActive ? "[Press ESC again to clear input]" : "Switch Driver: Ctrl+P/N") + ((bootstrapConfig.autoExit || bootstrapConfig.autoAllowPermissions) ? ` | Params: ${[bootstrapConfig.autoExit && '--auto-exit', bootstrapConfig.autoAllowPermissions && '--auto-allow'].filter(Boolean).join(' ')}` : '')} + {(isEscActive ? "[Press ESC again to clear input]" : "Switch Agent: Ctrl+P/N") + ((bootstrapConfig.autoExit || bootstrapConfig.autoAllowPermissions) ? ` | Params: ${[bootstrapConfig.autoExit && '--auto-exit', bootstrapConfig.autoAllowPermissions && '--auto-allow'].filter(Boolean).join(' ')}` : '')} diff --git a/packages/cli/src/contexts/KeypressProvider.tsx b/packages/cli/src/contexts/KeypressProvider.tsx index 555a467..5e41ce2 100644 --- a/packages/cli/src/contexts/KeypressProvider.tsx +++ b/packages/cli/src/contexts/KeypressProvider.tsx @@ -20,7 +20,7 @@ import { } from 'react'; import { useStdin } from 'ink'; import readline from 'node:readline'; -import { addLog } from '@taskagent/shared/logger'; +import { addLog } from '@shared/logger'; // Bracketed paste protocol markers const PASTE_MODE_PREFIX = '\x1B[200~'; diff --git a/packages/cli/store/MessageStore.ts b/packages/cli/store/MessageStore.ts index 6c88a14..69c8ad6 100644 --- a/packages/cli/store/MessageStore.ts +++ b/packages/cli/store/MessageStore.ts @@ -12,7 +12,7 @@ import { EventEmitter } from 'node:events'; import type { Message } from '../types.js'; import type { EventBus } from '../../core/event-bus/EventBus.js'; -import { addLog } from '@taskagent/shared/logger'; +import { addLog } from '@shared/logger'; export interface MessageStoreConfig { /** diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json index 3882a02..abfd920 100644 --- a/packages/cli/tsconfig.json +++ b/packages/cli/tsconfig.json @@ -2,7 +2,7 @@ "extends": "../../tsconfig.json", "compilerOptions": { "outDir": "./dist", - "rootDir": ".", + "rootDir": "..", "jsx": "react" }, "include": [ @@ -11,7 +11,8 @@ ], "references": [ { "path": "../core" }, - { "path": "../agents" } + { "path": "../agents" }, + { "path": "../execution" } ] } diff --git a/packages/cli/types.ts b/packages/cli/types.ts index 6bf1ae8..0abd947 100644 --- a/packages/cli/types.ts +++ b/packages/cli/types.ts @@ -24,5 +24,5 @@ export type LogMessage = { content: string; }; -// Task event types for background tasks - re-exported from @taskagent/core -export type { TaskEvent, TaskEventLevel } from '@taskagent/core/types/TaskEvent.js'; +// Task event types for background tasks - re-exported from @core +export type { TaskEvent, TaskEventLevel } from '@core/types/TaskEvent.js'; diff --git a/packages/cli/workspace/settings.ts b/packages/cli/workspace/settings.ts index 1ae59aa..58f9052 100644 --- a/packages/cli/workspace/settings.ts +++ b/packages/cli/workspace/settings.ts @@ -1,6 +1,6 @@ -import { promises as fs } from 'node:fs'; -import { join } from 'node:path'; -import { addLog } from '@taskagent/shared/logger'; +import { promises as fs } from 'fs'; +import { join } from 'path'; +import { addLog } from '@shared/logger'; const SETTINGS_DIR = '.askman'; const SETTINGS_FILE = 'settings.json'; diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index 80b43f0..327a04e 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -1,6 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "composite": true, "outDir": "./dist", "rootDir": ".", "types": [] // Don't inherit root types limitation diff --git a/packages/execution/MessageAdapter.ts b/packages/execution/MessageAdapter.ts index 7b4c732..79c790d 100644 --- a/packages/execution/MessageAdapter.ts +++ b/packages/execution/MessageAdapter.ts @@ -13,8 +13,8 @@ * - Errors → agent:failed event */ -import type { EventBus } from '@taskagent/core/event-bus'; -import type { AgentStartSinks } from '@taskagent/agents/runtime/types.js'; +import type { EventBus } from '@core/event-bus'; +import type { AgentStartSinks } from '@agents/runtime/types.js'; import { addLog } from '../shared/logger.js'; export interface MessageAdapterOptions { diff --git a/packages/execution/TabExecutor.ts b/packages/execution/TabExecutor.ts index 6f64fef..e9227f2 100644 --- a/packages/execution/TabExecutor.ts +++ b/packages/execution/TabExecutor.ts @@ -21,12 +21,12 @@ * ``` */ -import type { EventBus } from '@taskagent/core/event-bus'; -import type { AgentRegistry } from '@taskagent/agents/registry/AgentRegistry.js'; +import type { EventBus } from '@core/event-bus'; +import type { AgentRegistry } from '@agents/registry/AgentRegistry.js'; import { TabExecutionManager } from './TabExecutionManager.js'; import { MessageAdapter } from './MessageAdapter.js'; import type { ExecutionContext, ExecutionResult } from './types.js'; -import type { AgentStartSinks } from '@taskagent/agents/runtime/types.js'; +import type { AgentStartSinks } from '@agents/runtime/types.js'; export class TabExecutor { constructor( diff --git a/packages/execution/types.ts b/packages/execution/types.ts index bbd6397..705a2fd 100644 --- a/packages/execution/types.ts +++ b/packages/execution/types.ts @@ -1,11 +1,10 @@ /** - * Execution Layer Types + * Execution module types * - * Types for the execution coordination layer that decouples - * Agent execution from UI rendering. + * Provides types for tab execution and agent coordination */ -import type { ExecutionHandle, AgentStartSinks } from '@taskagent/agents/runtime/types.js'; +import type { ExecutionHandle, AgentStartSinks } from '@agents/runtime/types.js'; /** * Execution context passed to agents diff --git a/packages/presets/index.ts b/packages/presets/index.ts index 26f118f..db8fed2 100644 --- a/packages/presets/index.ts +++ b/packages/presets/index.ts @@ -6,7 +6,7 @@ * * Usage: * ```typescript - * import { getPreset, PRESETS } from '@taskagent/presets'; + * import { getPreset, PRESETS } from '@presets'; * * const preset = getPreset('default'); * // or diff --git a/tsconfig.json b/tsconfig.json index c7a7cfd..4a7a79c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,18 +19,30 @@ "types": ["node"], "baseUrl": ".", "paths": { - "@taskagent/agents": ["packages/agents/index.ts"], - "@taskagent/agents/*": ["packages/agents/*"], - "@taskagent/shared": ["packages/shared/index.ts"], - "@taskagent/shared/*": ["packages/shared/*"], - "@taskagent/core": ["packages/core/index.ts"], - "@taskagent/core/*": ["packages/core/*"], - "@taskagent/execution": ["packages/execution/index.ts"], - "@taskagent/execution/*": ["packages/execution/*"], - "@taskagent/presets": ["packages/presets/index.ts"], - "@taskagent/presets/*": ["packages/presets/*"], - "@taskagent/tabs": ["packages/tabs/index.ts"], - "@taskagent/tabs/*": ["packages/tabs/*"] + "@agents": ["packages/agents/index.ts"], + "@agents/registry": ["packages/agents/registry/index.ts"], + "@agents/*": ["packages/agents/*"], + "@shared/logger": ["packages/shared/logger.ts"], + "@shared/task-logger": ["packages/shared/task-logger.ts"], + "@shared/env": ["packages/shared/env.ts"], + "@shared/types": ["packages/shared/types.ts"], + "@shared/task-manager": ["packages/shared/task-manager.ts"], + "@core": ["packages/core/index.ts"], + "@core/event-bus": ["packages/core/event-bus/index.ts"], + "@core/*": ["packages/core/*"], + "@execution": ["packages/execution/index.ts"], + "@execution/*": ["packages/execution/*"], + "@presets": ["packages/presets/index.ts"], + "@presets/*": ["packages/presets/*"], + "@tabs": ["packages/tabs/index.ts"], + "@tabs/configs/chat": ["packages/tabs/configs/chat.ts"], + "@tabs/configs/agent": ["packages/tabs/configs/agent.ts"], + "@tabs/configs/start": ["packages/tabs/configs/start.ts"], + "@tabs/configs/blueprint": ["packages/tabs/configs/blueprint.ts"], + "@tabs/configs/glossary": ["packages/tabs/configs/glossary.ts"], + "@tabs/configs/ui-review": ["packages/tabs/configs/ui-review.ts"], + "@tabs/configs/monitor": ["packages/tabs/configs/monitor.ts"], + "@tabs/configs/*": ["packages/tabs/configs/*"] } }, "include": [ diff --git a/vitest.config.ts b/vitest.config.ts index 5a7cb67..cb5a020 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -1,7 +1,9 @@ import { defineConfig } from 'vitest/config'; +import tsconfigPaths from 'vite-tsconfig-paths'; export default defineConfig({ + cacheDir: '.vite-cache', test: { include: ['tests/**/*.test.ts'], environment: 'node', @@ -19,4 +21,5 @@ export default defineConfig({ }, }, }, + plugins: [tsconfigPaths()], }); diff --git a/yarn.lock b/yarn.lock index 02bd5e0..8ac2fc8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -121,6 +121,8 @@ __metadata: tsup: "npm:^8.5.1" tsx: "npm:^4.20.6" typescript: "npm:^5.9.3" + vite: "npm:^6.0.1" + vite-tsconfig-paths: "npm:^5.1.2" vitest: "npm:^4.0.6" zod: "npm:^3.22.4" bin: @@ -2206,7 +2208,7 @@ __metadata: languageName: node linkType: hard -"fdir@npm:^6.5.0": +"fdir@npm:^6.4.4, fdir@npm:^6.5.0": version: 6.5.0 resolution: "fdir@npm:6.5.0" peerDependencies: @@ -2341,6 +2343,13 @@ __metadata: languageName: node linkType: hard +"globrex@npm:^0.1.2": + version: 0.1.2 + resolution: "globrex@npm:0.1.2" + checksum: 10c0/a54c029520cf58bda1d8884f72bd49b4cd74e977883268d931fd83bcbd1a9eb96d57c7dbd4ad80148fb9247467ebfb9b215630b2ed7563b2a8de02e1ff7f89d1 + languageName: node + linkType: hard + "graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" @@ -3092,7 +3101,7 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^4.0.3": +"picomatch@npm:^4.0.2, picomatch@npm:^4.0.3": version: 4.0.3 resolution: "picomatch@npm:4.0.3" checksum: 10c0/9582c951e95eebee5434f59e426cddd228a7b97a0161a375aed4be244bd3fe8e3a31b846808ea14ef2c8a2527a6eeab7b3946a67d5979e81694654f939473ae2 @@ -3140,7 +3149,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.5.6": +"postcss@npm:^8.5.3, postcss@npm:^8.5.6": version: 8.5.6 resolution: "postcss@npm:8.5.6" dependencies: @@ -3247,7 +3256,7 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^4.34.8": +"rollup@npm:^4.34.8, rollup@npm:^4.34.9": version: 4.53.2 resolution: "rollup@npm:4.53.2" dependencies: @@ -3725,7 +3734,7 @@ __metadata: languageName: node linkType: hard -"tinyglobby@npm:^0.2.11, tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.15": +"tinyglobby@npm:^0.2.11, tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.13, tinyglobby@npm:^0.2.15": version: 0.2.15 resolution: "tinyglobby@npm:0.2.15" dependencies: @@ -3758,6 +3767,20 @@ __metadata: languageName: node linkType: hard +"tsconfck@npm:^3.0.3": + version: 3.1.6 + resolution: "tsconfck@npm:3.1.6" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + bin: + tsconfck: bin/tsconfck.js + checksum: 10c0/269c3c513540be44844117bb9b9258fe6f8aeab026d32aeebf458d5299125f330711429dbb556dbf125a0bc25f4a81e6c24ac96de2740badd295c3fb400f66c4 + languageName: node + linkType: hard + "tslib@npm:^2.1.0": version: 2.8.1 resolution: "tslib@npm:2.8.1" @@ -3907,6 +3930,22 @@ __metadata: languageName: node linkType: hard +"vite-tsconfig-paths@npm:^5.1.2": + version: 5.1.4 + resolution: "vite-tsconfig-paths@npm:5.1.4" + dependencies: + debug: "npm:^4.1.1" + globrex: "npm:^0.1.2" + tsconfck: "npm:^3.0.3" + peerDependencies: + vite: "*" + peerDependenciesMeta: + vite: + optional: true + checksum: 10c0/6228f23155ea25d92b1e1702284cf8dc52ad3c683c5ca691edd5a4c82d2913e7326d00708cef1cbfde9bb226261df0e0a12e03ef1d43b6a92d8f02b483ef37e3 + languageName: node + linkType: hard + "vite@npm:^6.0.0 || ^7.0.0": version: 7.1.12 resolution: "vite@npm:7.1.12" @@ -3962,6 +4001,61 @@ __metadata: languageName: node linkType: hard +"vite@npm:^6.0.1": + version: 6.4.1 + resolution: "vite@npm:6.4.1" + dependencies: + esbuild: "npm:^0.25.0" + fdir: "npm:^6.4.4" + fsevents: "npm:~2.3.3" + picomatch: "npm:^4.0.2" + postcss: "npm:^8.5.3" + rollup: "npm:^4.34.9" + tinyglobby: "npm:^0.2.13" + peerDependencies: + "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: ">=1.21.0" + less: "*" + lightningcss: ^1.21.0 + sass: "*" + sass-embedded: "*" + stylus: "*" + sugarss: "*" + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + bin: + vite: bin/vite.js + checksum: 10c0/77bb4c5b10f2a185e7859cc9a81c789021bc18009b02900347d1583b453b58e4b19ff07a5e5a5b522b68fc88728460bb45a63b104d969e8c6a6152aea3b849f7 + languageName: node + linkType: hard + "vitest@npm:^4.0.6": version: 4.0.6 resolution: "vitest@npm:4.0.6"