team-anya-cli 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -201,7 +201,7 @@ program
201
201
  });
202
202
  console.log('\n Anya Setup - 交互式配置向导\n');
203
203
  // ── 1. ANYA_HOME ──
204
- const anyaHome = resolveHome(await ask('数据目录 ANYA_HOME', opts.home ?? '~/.anya'));
204
+ const anyaHome = resolveHome(await ask('数据目录 ANYA_HOME', opts.home ?? process.env.ANYA_HOME ?? '~/.anya'));
205
205
  // 创建目录结构
206
206
  const dirs = ['data', 'data/logs', 'office', 'repos', 'media/feishu'];
207
207
  for (const dir of dirs)
@@ -15,6 +15,7 @@ function createMcpServer(deps) {
15
15
  onMessageSent: deps.onMessageSent,
16
16
  yorOrchestrator: deps.yorOrchestrator,
17
17
  getProjectConfig: deps.getProjectConfig,
18
+ onProjectChanged: deps.onProjectChanged,
18
19
  };
19
20
  const router = createToolRouter('loid', routerDeps);
20
21
  const server = new Server({ name: 'loid-mcp', version: '3.0.0' }, { capabilities: { tools: {} } });
@@ -173,6 +173,7 @@ export async function buildServer() {
173
173
  logger: app.log,
174
174
  yorOrchestrator,
175
175
  getProjectConfig: (projectId) => worktreeManager.getProjectConfig(projectId),
176
+ onProjectChanged: () => worktreeManager.invalidateCache(),
176
177
  },
177
178
  });
178
179
  await loidBrain.init();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "team-anya-cli",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "type": "module",
5
5
  "description": "Team Anya - AI 数字员工系统",
6
6
  "bin": {
@@ -47,6 +47,25 @@ export async function taskDispatch(deps, input) {
47
47
  const project = deps.getProjectConfig
48
48
  ? await deps.getProjectConfig(input.project_id)
49
49
  : undefined;
50
+ // 传了 project_id 但未在注册表中找到 → 直接 BLOCKED,不静默降级为 adhoc
51
+ if (input.project_id && project?.mode === 'adhoc') {
52
+ logger?.info(`[anya:pipeline] [Loid] 创建任务 ${taskId} "${input.title}" | project=${input.project_id} 未注册,BLOCKED`);
53
+ assertTransition(TaskStatus.NEW, TaskStatus.BLOCKED);
54
+ updateTask(db, taskId, { status: TaskStatus.BLOCKED });
55
+ insertAuditEvent(db, {
56
+ event_type: 'task_status_changed',
57
+ actor: 'loid',
58
+ task_id: taskId,
59
+ summary: `NEW → BLOCKED: 项目 "${input.project_id}" 未在注册表中找到,请先通过 project.upsert 注册`,
60
+ detail: JSON.stringify({ from: 'NEW', to: 'BLOCKED', reason: 'project_not_found', project_id: input.project_id }),
61
+ });
62
+ return {
63
+ task_id: taskId,
64
+ status: 'blocked',
65
+ brief_path: briefPath,
66
+ error: `项目 "${input.project_id}" 未在注册表中找到。请先调用 project.upsert 注册项目及其仓库配置,然后重新派工。`,
67
+ };
68
+ }
50
69
  logger?.info(`[anya:pipeline] [Loid] 创建任务 ${taskId} "${input.title}"${input.project_id ? ` | project=${input.project_id} mode=${project?.mode}` : ''}`);
51
70
  // 5. 自动准备工作区
52
71
  const workspaceResult = await prepareWorkspace(taskId, taskDir, project, logger);
@@ -644,11 +644,15 @@ export function createToolRouter(role, deps) {
644
644
  // Layer 2: Loid 专属 - 项目管理
645
645
  case 'project.upsert': {
646
646
  const { projectUpsert } = await import('./layer2/loid/project-upsert.js');
647
- return projectUpsert(deps.db, deps.workspacePath, args);
647
+ const result = await projectUpsert(deps.db, deps.workspacePath, args);
648
+ deps.onProjectChanged?.();
649
+ return result;
648
650
  }
649
651
  case 'project.remove': {
650
652
  const { projectRemove } = await import('./layer2/loid/project-remove.js');
651
- return projectRemove(deps.db, deps.workspacePath, args);
653
+ const result = await projectRemove(deps.db, deps.workspacePath, args);
654
+ deps.onProjectChanged?.();
655
+ return result;
652
656
  }
653
657
  // Layer 2: Loid 专属 - yor/delivery
654
658
  case 'yor.spawn': {