teamix-evo 0.7.0 → 0.8.0

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.
package/README.md CHANGED
@@ -167,30 +167,34 @@ TEAMIX_DEBUG=1 teamix-evo tokens init opentrek
167
167
 
168
168
  ## 命令参考
169
169
 
170
- | 命令 | 说明 |
171
- | --------------------------------------------------- | -------------------------------------------------------------- |
172
- | `teamix-evo tokens init <variant>` | 初始化 tokens |
173
- | `teamix-evo tokens list-variants` | 列出可用 variant |
174
- | `teamix-evo tokens list` | 查看已装机的 variant |
175
- | `teamix-evo tokens update` | 更新已装资源(stub,v0.7 ADR 0019) |
176
- | `teamix-evo tokens uninstall` | 卸载已装 tokens |
177
- | `teamix-evo skills init` | 自举 skills(按 variant + scope 全装 — ADR 0034) |
178
- | `teamix-evo skills add <name...>` | 增量装指定 skill(`<name...>` 必填) |
179
- | `teamix-evo skills list` | 列出所有 skill 的安装状态 |
180
- | `teamix-evo skills update [name...] [--dry-run]` | 升级 skills(双闸 + version 短路 — ADR 0035) |
181
- | `teamix-evo skills sync [name...]` | IDE 镜像(漂移恢复用) |
182
- | `teamix-evo skills doctor` | 检测源/镜像漂移(ADR 0013) |
183
- | `teamix-evo skills uninstall` | 卸载 skills(源 + 镜像 + lock) |
184
- | `teamix-evo ui init` | 初始化 ui 配置(aliases / iconLibrary / tsx / rsc) |
185
- | `teamix-evo ui add <id...>` | 安装指定 ui 组件源码 |
186
- | `teamix-evo ui list [--installed]` | 列出可用/已安装 ui 组件 |
187
- | `teamix-evo biz-ui list-variants` | 列出 biz-ui 包内提供的业务变体 |
188
- | `teamix-evo biz-ui add <id...> --variant <name>` | 安装变体感知业务组件(`--variant` 必填) |
189
- | `teamix-evo templates list-variants` | 列出 templates 包内提供的页面模板变体 |
190
- | `teamix-evo templates add <id...> --variant <name>` | 安装变体感知页面模板(`--variant` 必填) |
191
- | `teamix-evo lint init [-y]` | 一键安装 ESLint + Stylelint token-discipline 规则集 |
192
- | `teamix-evo logs analyze [...]` | 分析 vibe-logger AI 调用链(`.log/ai/**/*.jsonl`) |
193
- | `teamix-evo logs trace [...]` | 按会话还原 AI 调用链(prompt → PreToolUse → PostToolUse → Stop) |
170
+ | 命令 | 说明 |
171
+ | --------------------------------------------------- | ------------------------------------------------------------------------------- |
172
+ | `teamix-evo init [-y] [--dry-run] [--variant <n>]` | 普通版接入:检测冲突 → wizard → 静默落地(已有 npm 工程入口) |
173
+ | `teamix-evo update [--dry-run] [--cwd <dir>]` | 一键升级已装资源(tokens + skills,ADR 0003 三态 + ADR 0035 短路) |
174
+ | `teamix-evo restore [ts] [--list] [-y]` | 回滚 `.teamix-evo/` 到指定 snapshot(ADR 0019 §2 — 自身可逆) |
175
+ | `teamix-evo switch <new-variant> [--apply] [-y]` | variant 切换:默认 dry-run 展示 file-level diff,--apply 才真写(ADR 0019 §D3) |
176
+ | `teamix-evo tokens init <variant>` | 初始化 tokens |
177
+ | `teamix-evo tokens list-variants` | 列出可用 variant |
178
+ | `teamix-evo tokens list` | 查看已装机的 variant |
179
+ | `teamix-evo tokens update` | 更新已装资源(stub,v0.7 ADR 0019) |
180
+ | `teamix-evo tokens uninstall` | 卸载已装 tokens |
181
+ | `teamix-evo skills init` | 自举 skills(按 variant + scope 全装 — ADR 0034) |
182
+ | `teamix-evo skills add <name...>` | 增量装指定 skill(`<name...>` 必填) |
183
+ | `teamix-evo skills list` | 列出所有 skill 的安装状态 |
184
+ | `teamix-evo skills update [name...] [--dry-run]` | 升级 skills(双闸 + version 短路 ADR 0035) |
185
+ | `teamix-evo skills sync [name...]` | IDE 镜像(漂移恢复用) |
186
+ | `teamix-evo skills doctor` | 检测源/镜像漂移(ADR 0013) |
187
+ | `teamix-evo skills uninstall` | 卸载 skills(源 + 镜像 + lock) |
188
+ | `teamix-evo ui init` | 初始化 ui 配置(aliases / iconLibrary / tsx / rsc) |
189
+ | `teamix-evo ui add <id...>` | 安装指定 ui 组件源码 |
190
+ | `teamix-evo ui list [--installed]` | 列出可用/已安装 ui 组件 |
191
+ | `teamix-evo biz-ui list-variants` | 列出 biz-ui 包内提供的业务变体 |
192
+ | `teamix-evo biz-ui add <id...> --variant <name>` | 安装变体感知业务组件(`--variant` 必填) |
193
+ | `teamix-evo templates list-variants` | 列出 templates 包内提供的页面模板变体 |
194
+ | `teamix-evo templates add <id...> --variant <name>` | 安装变体感知页面模板(`--variant` 必填) |
195
+ | `teamix-evo lint init [-y]` | 一键安装 ESLint + Stylelint token-discipline 规则集 |
196
+ | `teamix-evo logs analyze [...]` | 分析 vibe-logger AI 调用链(`.log/ai/**/*.jsonl`) |
197
+ | `teamix-evo logs trace [...]` | 按会话还原 AI 调用链(prompt → PreToolUse → PostToolUse → Stop) |
194
198
 
195
199
  > 占位组件 → 真组件的升级流程**不是** CLI 子命令,由
196
200
  > [`teamix-evo-manage`](../../packages/skills/src/teamix-evo-manage/SKILL.md)
@@ -415,6 +415,368 @@ type RunLintInitResult = {
415
415
  */
416
416
  declare function runLintInit(options: RunLintInitOptions): Promise<RunLintInitResult>;
417
417
 
418
+ /**
419
+ * Generate `<projectRoot>/AGENTS.md` as a skill-trigger fallback (ADR 0038).
420
+ *
421
+ * The file is **regenerable**: it consolidates TRIGGER / SKIP excerpts from
422
+ * each installed SKILL.md frontmatter description into one terse index, so
423
+ * AGENTS.md-aware IDEs (Codex / Cursor / Claude Code / Qoder) preheat the
424
+ * skill activation conditions even when the user prompt does not directly
425
+ * hit the description-based trigger.
426
+ *
427
+ * Out of scope (per ADR 0038):
428
+ * - Does NOT copy skill body / rules / patterns — those stay in the skill.
429
+ * - Does NOT include `teamix-evo-manage` (entry skill, global scope, ADR 0033).
430
+ *
431
+ * Lifted from `create-teamix-evo` (v0.5) into `teamix-evo/core` so both
432
+ * `npm create teamix-evo` (scaffold path) and `teamix-evo init` (existing-
433
+ * project path, ADR 0019 task #5) emit identical AGENTS.md output.
434
+ *
435
+ * @module teamix-evo/core/agents-md
436
+ */
437
+ interface RunGenerateAgentsMdOptions {
438
+ /** Absolute path to the consumer project root. */
439
+ projectRoot: string;
440
+ /** Tokens / skills variant (e.g. "opentrek"). Used for header context. */
441
+ variant: string;
442
+ /**
443
+ * Skill ids whose `<projectRoot>/.teamix-evo/skills/<id>/SKILL.md` should be
444
+ * indexed. Caller is responsible for filtering out global-only skills
445
+ * (e.g. `teamix-evo-manage`).
446
+ */
447
+ skillIds: string[];
448
+ }
449
+ interface RunGenerateAgentsMdResult {
450
+ /** Absolute path of the written `AGENTS.md`. */
451
+ path: string;
452
+ /** Number of skill sections rendered (excludes missing SKILL.md degradations are still counted). */
453
+ skillCount: number;
454
+ /** Skill ids whose SKILL.md could not be read (rendered as degraded section). */
455
+ missingSkillIds: string[];
456
+ }
457
+ interface SkillDescriptionParts {
458
+ /** First non-empty line(s) of `description` (the capability statement). */
459
+ capability: string;
460
+ trigger: string | null;
461
+ skip: string | null;
462
+ coordinates: string | null;
463
+ }
464
+ /**
465
+ * Generate and write the `AGENTS.md` file. Idempotent — repeated invocations
466
+ * fully overwrite the file (regenerable per ADR 0038 §4).
467
+ */
468
+ declare function runGenerateAgentsMd(options: RunGenerateAgentsMdOptions): Promise<RunGenerateAgentsMdResult>;
469
+ /**
470
+ * Parse a SKILL.md frontmatter description into capability / TRIGGER / SKIP /
471
+ * Coordinates parts.
472
+ *
473
+ * Why hand-rolled (no gray-matter): we only need the `description: |` block.
474
+ * The full YAML grammar is overkill and adds a runtime dep to a CLI / scaffold
475
+ * tool that should stay zero-cost. ADR 0015 keeps frontmatter shape stable.
476
+ */
477
+ declare function extractDescriptionParts(fileContent: string): SkillDescriptionParts | null;
478
+
479
+ /**
480
+ * Three branches of `teamix-evo init` decision tree (ADR 0019 D1).
481
+ *
482
+ * - `empty` : 空目录或仅含可忽略文件 → 推荐用户走 `npm create teamix-evo`(完整版)
483
+ * - `teamix-evo-installed`: 已存在 `.teamix-evo/` → 推荐 `teamix-evo update` / 卸载流程
484
+ * - `non-teamix-evo` : 已有非 teamix-evo 工程 → 走 `teamix-evo init` 普通版接入
485
+ */
486
+ type ProjectState = 'empty' | 'teamix-evo-installed' | 'non-teamix-evo';
487
+ interface ProjectStateReport {
488
+ /** Decision-tree branch the caller should take. */
489
+ state: ProjectState;
490
+ /** Absolute path that was inspected. */
491
+ cwd: string;
492
+ /** Whether `.teamix-evo/` exists at `cwd`. */
493
+ hasTeamixDir: boolean;
494
+ /** Whether `package.json` exists at `cwd`. */
495
+ hasPackageJson: boolean;
496
+ /**
497
+ * Up to 20 entries (relative to `cwd`) that caused us to consider the
498
+ * directory non-empty. Useful for explaining the decision to humans.
499
+ */
500
+ significantEntries: string[];
501
+ }
502
+ /**
503
+ * Inspect `cwd` and decide which branch of the `teamix-evo init` decision
504
+ * tree applies. Pure read-only — never mutates the filesystem.
505
+ *
506
+ * Resolution order (first match wins):
507
+ * 1. `.teamix-evo/` exists → `teamix-evo-installed`
508
+ * 2. cwd missing OR all entries are in the IGNORED_TOP_LEVEL set
509
+ * → `empty`
510
+ * 3. otherwise → `non-teamix-evo`
511
+ */
512
+ declare function detectProjectState(cwd: string): Promise<ProjectStateReport>;
513
+
514
+ /**
515
+ * The 6 categories of consumer-side files that `teamix-evo init` may
516
+ * conflict with when running against a non-teamix-evo project.
517
+ *
518
+ * See ADR 0019 D1 task #5 — these are the only files we mutate at
519
+ * `init` time, so they're the only ones we ask the user about.
520
+ */
521
+ type ConflictKey = 'agents-md' | 'components-json' | 'tailwind-config' | 'tokens' | 'index-css' | 'shadcn-source';
522
+ /** Strategy options per conflict category. */
523
+ type ConflictStrategy = 'overwrite' | 'merge-managed' | 'skip' | 'diff-prompt' | 'backup-overwrite' | 'migrate' | 'coexist' | 'append' | 'skip-existing' | 'per-file-prompt';
524
+ interface ConflictItem {
525
+ /** Stable id for the category. */
526
+ key: ConflictKey;
527
+ /** True if at least one path in `paths` matched on disk. */
528
+ exists: boolean;
529
+ /**
530
+ * Project-relative paths that matched. Empty when `exists === false`.
531
+ * For `shadcn-source`, may contain a directory path (with trailing `/`).
532
+ */
533
+ paths: string[];
534
+ /** sha256 fingerprint of (sorted) matched contents. Omitted for directories or when nothing matched. */
535
+ fingerprint?: string;
536
+ /** Default strategy presented to the user. */
537
+ recommendedStrategy: ConflictStrategy;
538
+ /** All allowed strategies for this category, in display order. */
539
+ availableStrategies: ConflictStrategy[];
540
+ /** Category-specific metadata (e.g. detected tailwind major version). */
541
+ meta?: Record<string, unknown>;
542
+ }
543
+ interface ConflictReport {
544
+ cwd: string;
545
+ /** Always 6 items, ordered by ConflictKey enumeration above. */
546
+ items: ConflictItem[];
547
+ /** True if any item has `exists === true`. */
548
+ hasAnyConflict: boolean;
549
+ }
550
+ /**
551
+ * Inspect `cwd` for the 6 categories of files that `teamix-evo init` may
552
+ * touch. Pure read-only — never mutates the filesystem. Returns one
553
+ * `ConflictItem` per category in stable order so callers can render a
554
+ * deterministic wizard.
555
+ */
556
+ declare function detectConflicts(cwd: string): Promise<ConflictReport>;
557
+
558
+ /**
559
+ * Final answers produced by the init wizard. Every consumer of `teamix-evo
560
+ * init` (orchestrator + later sub-commands) reads from this object exclusively
561
+ * — flags / prompts must not be re-evaluated downstream (silent sub-commands).
562
+ */
563
+ interface InitWizardAnswers {
564
+ variant: string;
565
+ ides: SkillIde[];
566
+ scope: SkillScope;
567
+ withLint: boolean;
568
+ withUi: boolean;
569
+ /** 'baseline' = preset 推荐组件子集;'all' = 全量装 */
570
+ uiSelection: 'baseline' | 'all';
571
+ withBizUi: boolean;
572
+ /**
573
+ * 每类冲突文件的最终策略。键是 6 类 ConflictKey,值是 user-chosen
574
+ * `ConflictStrategy`。当对应 ConflictItem.exists === false 时,值默认为
575
+ * `'overwrite'`(即首次写入)。
576
+ */
577
+ conflictDecisions: Record<ConflictKey, ConflictStrategy>;
578
+ }
579
+
580
+ /** Result of `createSnapshot` when a snapshot was actually taken. */
581
+ interface SnapshotResult {
582
+ /** Filesystem-safe UTC timestamp identifier (e.g. `2026-06-11T20-59-03-000Z`). */
583
+ ts: string;
584
+ /** Absolute path to the snapshot directory. */
585
+ path: string;
586
+ }
587
+
588
+ /**
589
+ * Programmatic orchestrator for `teamix-evo init` (existing-project adoption).
590
+ *
591
+ * Consumes {@link InitWizardAnswers} produced by `runInitWizard` and drives
592
+ * the existing core sub-commands (`runTokensInit`, `runSkillsAdd`,
593
+ * `runGenerateAgentsMd`, `runUiInit`, `runUiAdd`, `runLintInit`) in a fixed
594
+ * order. Sub-commands are invoked silently — no interactive prompts here.
595
+ *
596
+ * Conflict handling:
597
+ * - `conflictDecisions[key] === 'skip'` skips the corresponding step entirely.
598
+ * - `'overwrite'` is the trivial path (the underlying core APIs already write).
599
+ * - `'merge-managed'` (agents-md) is implemented today via
600
+ * `runGenerateAgentsMd` which writes managed regions natively.
601
+ * - `'skip-existing'` (shadcn-source) maps to `runUiAdd({ overwrite: false })`,
602
+ * the existing default.
603
+ * - All other strategies (`diff-prompt`, `backup-overwrite`, `migrate`,
604
+ * `coexist`, `append`, `per-file-prompt`) require the managed-region engine
605
+ * from batch 4 — they are recorded to `pendingConflictWork` so the CLI
606
+ * surface can guide the user to the followup `teamix-evo conflict resolve`
607
+ * step (post-batch-4).
608
+ *
609
+ * No interactive prompts, no `process.exit`. Throws on hard failure (P8).
610
+ */
611
+
612
+ type ProjectInitStepName = 'tokens' | 'skills' | 'agents-md' | 'ui-init' | 'ui-add' | 'lint';
613
+ type ProjectInitStepStatus = 'ok' | 'skip' | 'fail' | 'planned';
614
+ interface ProjectInitStep {
615
+ name: ProjectInitStepName;
616
+ status: ProjectInitStepStatus;
617
+ detail?: string;
618
+ }
619
+ interface PendingConflictWork {
620
+ key: ConflictKey;
621
+ strategy: ConflictStrategy;
622
+ reason: string;
623
+ }
624
+ interface ResumeHint {
625
+ /** The first step that failed (caller resumes from here). */
626
+ failedAt: ProjectInitStepName;
627
+ /** Steps already finished (status === 'ok'); will short-circuit on resume. */
628
+ completed: ProjectInitStepName[];
629
+ /** All steps that ended in fail status. */
630
+ failed: ProjectInitStepName[];
631
+ /** Human-readable error from the first failed step. */
632
+ error: string;
633
+ /**
634
+ * Suggested CLI command to resume. Today this is just `teamix-evo init`
635
+ * itself — every sub-step is idempotent (returns `already-initialized`
636
+ * when the matching state file already exists), so a re-run continues
637
+ * from the failure point automatically. Future batches may grow a
638
+ * dedicated `--resume` flag with a richer recovery model (batch 3).
639
+ */
640
+ resumeCommand: string;
641
+ }
642
+ interface RunProjectInitOptions {
643
+ /** Absolute project root (existing repo to adopt teamix-evo into). */
644
+ projectRoot: string;
645
+ /** Wizard outcome (single source of truth for every silent sub-command). */
646
+ answers: InitWizardAnswers;
647
+ /**
648
+ * Override the resolved UI entry list. When provided, replaces the
649
+ * `answers.uiSelection`-driven list (`'baseline'` / `'all'`). Useful for
650
+ * tests and for callers that want to install a custom subset.
651
+ */
652
+ uiEntries?: string[];
653
+ /**
654
+ * If true, skip `npm install` for lint deps. Defaults to `false` so lint
655
+ * works out of the box; pass `true` from the create scaffold which installs
656
+ * everything in one batch.
657
+ */
658
+ skipInstall?: boolean;
659
+ /**
660
+ * Legacy token CSS files (paths relative to `projectRoot`) detected by
661
+ * `detectConflicts` for the `tokens` key. When `conflictDecisions.tokens`
662
+ * is `'migrate'` and this list is non-empty, the orchestrator appends
663
+ * each file's content into `tokens/tokens.overrides.css` and backs the
664
+ * legacy files up to `.teamix-evo/.backups/` (W1.4 of the manage-entry
665
+ * plan; see [`legacy-tokens-migrate`](./legacy-tokens-migrate.ts)).
666
+ *
667
+ * Ignored for any other `tokens` decision. The caller (init command) is
668
+ * responsible for filtering out paths already inside `tokens/`.
669
+ */
670
+ legacyTokensPaths?: string[];
671
+ /** Step-level progress hook (caller controls presentation). */
672
+ onStep?: (step: ProjectInitStep) => void;
673
+ /**
674
+ * If true, plan-only mode: compute the full step list without running any
675
+ * sub-command. Returns each step with `status: 'planned'`.
676
+ */
677
+ dryRun?: boolean;
678
+ }
679
+ interface RunProjectInitResult {
680
+ status: 'installed' | 'partial' | 'dry-run';
681
+ steps: ProjectInitStep[];
682
+ /** Conflicts whose strategy needs the post-batch-4 managed-region engine. */
683
+ pendingConflictWork: PendingConflictWork[];
684
+ /**
685
+ * Present when at least one step ended in `fail`. Lets the CLI surface a
686
+ * structured recovery message instead of just a stack-trace, and gives
687
+ * programmatic consumers a deterministic field to branch on.
688
+ */
689
+ resumeHint?: ResumeHint;
690
+ /**
691
+ * Pre-init snapshot of `.teamix-evo/`, captured automatically before any
692
+ * file is written ([ADR 0019](../../../../docs/adr/0019-project-upgrade-flow.md) §2).
693
+ *
694
+ * - `null` on first-ever init (`.teamix-evo/` did not yet exist) and on
695
+ * `dryRun`.
696
+ * - Failure to capture a snapshot is **non-fatal** — surfaced via
697
+ * {@link snapshotError} so the CLI can warn the user. The init pipeline
698
+ * itself still runs.
699
+ */
700
+ snapshot?: SnapshotResult | null;
701
+ /** Reason a snapshot capture failed (best-effort — never blocks init). */
702
+ snapshotError?: string;
703
+ }
704
+ /**
705
+ * Existing-project init pipeline.
706
+ *
707
+ * Order:
708
+ * 1. tokens init (auto-installs `teamix-evo-design-${variant}` skill)
709
+ * 2. skills add (`teamix-evo-code-${variant}`; entry skill is global, ADR 0033)
710
+ * 3. AGENTS.md (skill trigger fallback, ADR 0038)
711
+ * 4. ui init + ui add (gated by `withUi`)
712
+ * 5. lint init (gated by `withLint`)
713
+ */
714
+ declare function runProjectInit(options: RunProjectInitOptions): Promise<RunProjectInitResult>;
715
+
716
+ type ProjectUpdateStepName = 'tokens' | 'skills' | 'ui' | 'biz-ui';
717
+ type ProjectUpdateStepStatus = 'ok' | 'skip' | 'fail' | 'planned';
718
+ interface ProjectUpdateStep {
719
+ name: ProjectUpdateStepName;
720
+ status: ProjectUpdateStepStatus;
721
+ detail?: string;
722
+ }
723
+ interface ProjectUpdateResumeHint {
724
+ /** The first step that failed (caller resumes from here). */
725
+ failedAt: ProjectUpdateStepName;
726
+ /** Steps already finished (status === 'ok'); will short-circuit on resume. */
727
+ completed: ProjectUpdateStepName[];
728
+ /** All steps that ended in fail status. */
729
+ failed: ProjectUpdateStepName[];
730
+ /** Human-readable error from the first failed step. */
731
+ error: string;
732
+ /**
733
+ * Suggested CLI command to resume. Today this is just `teamix-evo update`
734
+ * itself — every sub-step is idempotent (version-diff short-circuits when
735
+ * up-to-date), so a re-run continues from the failure point automatically.
736
+ */
737
+ resumeCommand: string;
738
+ }
739
+ interface RunProjectUpdateOptions {
740
+ /** Absolute project root (must already be teamix-evo-installed). */
741
+ projectRoot: string;
742
+ /**
743
+ * If true, plan-only mode: compute version deltas without writing any
744
+ * file. Returns each step with `status: 'planned'`.
745
+ */
746
+ dryRun?: boolean;
747
+ /** Step-level progress hook (caller controls presentation). */
748
+ onStep?: (step: ProjectUpdateStep) => void;
749
+ /** Override the tokens package name (defaults to `@teamix-evo/tokens`). */
750
+ tokensPackageName?: string;
751
+ /** Override the skills package name (defaults to `@teamix-evo/skills`). */
752
+ skillsPackageName?: string;
753
+ }
754
+ type RunProjectUpdateResult = {
755
+ status: 'not-initialized';
756
+ } | {
757
+ status: 'up-to-date' | 'updated' | 'partial' | 'dry-run';
758
+ steps: ProjectUpdateStep[];
759
+ resumeHint?: ProjectUpdateResumeHint;
760
+ /**
761
+ * Pre-update snapshot of `.teamix-evo/` ([ADR 0019](../../../../docs/adr/0019-project-upgrade-flow.md) §2).
762
+ * `null` on `dryRun`. Best-effort — capture failures surface via
763
+ * {@link snapshotError} but never abort the pipeline.
764
+ */
765
+ snapshot?: SnapshotResult | null;
766
+ /** Reason a snapshot capture failed (best-effort — never blocks update). */
767
+ snapshotError?: string;
768
+ };
769
+ /**
770
+ * Post-init refresh pipeline.
771
+ *
772
+ * Order:
773
+ * 1. tokens update (regenerable rewrite + frozen preserved — ADR 0003 三态)
774
+ * 2. skills update (lock ∩ scope ∩ version-diff short-circuit — ADR 0035)
775
+ *
776
+ * Re-runs are safe: each sub-step short-circuits when already at latest.
777
+ */
778
+ declare function runProjectUpdate(options: RunProjectUpdateOptions): Promise<RunProjectUpdateResult>;
779
+
418
780
  interface InstallOptions {
419
781
  /** Project root directory */
420
782
  projectRoot: string;
@@ -662,4 +1024,4 @@ declare function readInstalledManifest(projectRoot: string): Promise<InstalledMa
662
1024
  */
663
1025
  declare function writeInstalledManifest(projectRoot: string, manifest: InstalledManifest): Promise<void>;
664
1026
 
665
- export { DEFAULT_UI_ALIASES, DEFAULT_UI_ICON_LIBRARY, type InstallOptions, type InstallResult, type ListVariantUiEntriesResult, type ListVariantUiResult, type ListVariantsResult, type RunLintInitOptions, type RunLintInitResult, type RunSkillsAddOptions, type RunSkillsAddResult, type RunSkillsInitOptions, type RunSkillsInitResult, type RunSkillsUpdateOptions, type RunSkillsUpdateResult, type RunTokensInitOptions, type RunTokensInitResult, type RunUiAddOptions, type RunUiAddResult, type RunUiInitOptions, type RunUiInitResult, type RunUiListOptions, type RunUiListResult, type RunVariantUiAddOptions, type RunVariantUiAddResult, type SkillInstallOptions, type SkillInstallResult, type SkillSyncOptions, type SkillSyncResult, type SkillUpdateOptions, type SkillUpdateResult, type UiEntryListItem, type UiInstallOptions, type UiInstallResult, type UpdatePlanItem, ensureTeamixDir, getTeamixDir, installResources, installSkills, installUiEntries, listBizUiEntries, listBizUiVariants, listTemplatesEntries, listTemplatesVariants, listTokenVariants, loadSkillsData, loadUiData, loadVariantData, readInstalledManifest, readProjectConfig, removeSkillFiles, removeUiFiles, runBizUiAdd, runLintInit, runSkillsAdd, runSkillsInit, runSkillsUpdate, runTemplatesAdd, runTokensInit, runUiAdd, runUiInit, runUiList, syncSkillsToIdes, updateSkills, writeInstalledManifest, writeProjectConfig };
1027
+ export { type ConflictItem, type ConflictKey, type ConflictReport, type ConflictStrategy, DEFAULT_UI_ALIASES, DEFAULT_UI_ICON_LIBRARY, type InstallOptions, type InstallResult, type ListVariantUiEntriesResult, type ListVariantUiResult, type ListVariantsResult, type PendingConflictWork, type ProjectInitStep, type ProjectInitStepName, type ProjectInitStepStatus, type ProjectState, type ProjectStateReport, type ProjectUpdateResumeHint, type ProjectUpdateStep, type ProjectUpdateStepName, type ProjectUpdateStepStatus, type ResumeHint, type RunGenerateAgentsMdOptions, type RunGenerateAgentsMdResult, type RunLintInitOptions, type RunLintInitResult, type RunProjectInitOptions, type RunProjectInitResult, type RunProjectUpdateOptions, type RunProjectUpdateResult, type RunSkillsAddOptions, type RunSkillsAddResult, type RunSkillsInitOptions, type RunSkillsInitResult, type RunSkillsUpdateOptions, type RunSkillsUpdateResult, type RunTokensInitOptions, type RunTokensInitResult, type RunUiAddOptions, type RunUiAddResult, type RunUiInitOptions, type RunUiInitResult, type RunUiListOptions, type RunUiListResult, type RunVariantUiAddOptions, type RunVariantUiAddResult, type SkillInstallOptions, type SkillInstallResult, type SkillSyncOptions, type SkillSyncResult, type SkillUpdateOptions, type SkillUpdateResult, type UiEntryListItem, type UiInstallOptions, type UiInstallResult, type UpdatePlanItem, detectConflicts, detectProjectState, ensureTeamixDir, extractDescriptionParts, getTeamixDir, installResources, installSkills, installUiEntries, listBizUiEntries, listBizUiVariants, listTemplatesEntries, listTemplatesVariants, listTokenVariants, loadSkillsData, loadUiData, loadVariantData, readInstalledManifest, readProjectConfig, removeSkillFiles, removeUiFiles, runBizUiAdd, runGenerateAgentsMd, runLintInit, runProjectInit, runProjectUpdate, runSkillsAdd, runSkillsInit, runSkillsUpdate, runTemplatesAdd, runTokensInit, runUiAdd, runUiInit, runUiList, syncSkillsToIdes, updateSkills, writeInstalledManifest, writeProjectConfig };