teamix-evo 0.10.1 → 0.12.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
@@ -197,8 +197,11 @@ TEAMIX_DEBUG=1 teamix-evo tokens init opentrek
197
197
  | `teamix-evo ui promote-to-biz <id...>` | 把 ui 组件提升为业务组件(8 模式:Coexist/Preset/Wrapper/Compose/Variant/Fork/TokenOnly/ManualReview) |
198
198
  | `teamix-evo biz-ui list-variants` | 列出 biz-ui 包内提供的业务变体 |
199
199
  | `teamix-evo biz-ui add <id...> --variant <name>` | 安装变体感知业务组件(`--variant` 必填) |
200
- | `teamix-evo templates list-variants` | 列出 templates 包内提供的页面模板变体 |
201
- | `teamix-evo templates add <id...> --variant <name>` | 安装变体感知页面模板(`--variant` 必填) |
200
+ | `teamix-evo blocks add <id...>` | 安装营销页区块(保留目录结构) |
201
+ | `teamix-evo blocks list [--installed] [--json]` | 列出可用/已安装区块 |
202
+ | `teamix-evo blocks upgrade [<id...>]` | 升级已安装的区块源码 |
203
+ | `teamix-evo templates list-variants` | _(deprecated → blocks)_ 列出 templates 包内提供的页面模板变体 |
204
+ | `teamix-evo templates add <id...> --variant <name>` | _(deprecated → blocks)_ 安装变体感知页面模板 |
202
205
  | `teamix-evo lint init [-y]` | 一键安装 ESLint + Stylelint token-discipline 规则集 |
203
206
  | `teamix-evo logs analyze [...]` | 分析 vibe-logger AI 调用链(`.log/ai/**/*.jsonl`) |
204
207
  | `teamix-evo logs trace [...]` | 按会话还原 AI 调用链(prompt → PreToolUse → PostToolUse → Stop) |
@@ -104,10 +104,12 @@ type RunSkillsInitResult = {
104
104
  addedSkillIds: string[];
105
105
  skippedSkillIds: string[];
106
106
  /**
107
- * Always `[]` for `runSkillsInit` bulk bootstrap deliberately does not
108
- * surface upgrade hints (only `runSkillsAdd` does, ADR 0034). Kept on
109
- * the type so the result shape stays consistent with `RunSkillsAddResult`
110
- * and `finalizeSkillsInstall`'s return.
107
+ * Skill ids that were auto-upgraded because their locked version was
108
+ * older than the manifest version.
109
+ */
110
+ autoUpdatedSkillIds: string[];
111
+ /**
112
+ * @deprecated Outdated skills are now auto-upgraded; kept for compat.
111
113
  */
112
114
  outdatedSkills: OutdatedSkillInfo[];
113
115
  } | {
@@ -168,14 +170,17 @@ type RunSkillsAddResult = {
168
170
  addedSkillIds: string[];
169
171
  /**
170
172
  * Skill ids that were requested but already installed at the latest version;
171
- * nothing to do. Outdated installs are reported separately via
172
- * {@link outdatedSkills}.
173
+ * nothing to do.
173
174
  */
174
175
  skippedSkillIds: string[];
175
176
  /**
176
- * Skill ids that were requested, are already installed, but whose locked
177
- * version is older than the manifest version. Caller should surface a hint
178
- * recommending `skills update <id>`.
177
+ * Skill ids that were auto-upgraded because their locked version was older
178
+ * than the manifest version.
179
+ */
180
+ autoUpdatedSkillIds: string[];
181
+ /**
182
+ * @deprecated Outdated skills are now auto-upgraded; this array is always
183
+ * empty. Kept for backward-compatible callers; will be removed in next major.
179
184
  */
180
185
  outdatedSkills: OutdatedSkillInfo[];
181
186
  };
@@ -670,63 +675,6 @@ interface ConflictReport {
670
675
  */
671
676
  declare function detectConflicts(cwd: string): Promise<ConflictReport>;
672
677
 
673
- /**
674
- * Final answers produced by the init wizard. Every consumer of `teamix-evo
675
- * init` (orchestrator + later sub-commands) reads from this object exclusively
676
- * — flags / prompts must not be re-evaluated downstream (silent sub-commands).
677
- */
678
- interface InitWizardAnswers {
679
- variant: string;
680
- ides: SkillIde[];
681
- scope: SkillScope;
682
- withLint: boolean;
683
- withUi: boolean;
684
- /** 'baseline' = preset 推荐组件子集;'all' = 全量装 */
685
- uiSelection: 'baseline' | 'all';
686
- withBizUi: boolean;
687
- /**
688
- * 每类冲突文件的最终策略。键是 6 类 ConflictKey,值是 user-chosen
689
- * `ConflictStrategy`。当对应 ConflictItem.exists === false 时,值默认为
690
- * `'overwrite'`(即首次写入)。
691
- */
692
- conflictDecisions: Record<ConflictKey, ConflictStrategy>;
693
- }
694
-
695
- interface UiConflictEntry {
696
- /** UI entry id from manifest (e.g. "button") */
697
- id: string;
698
- /** Absolute path on disk that conflicts */
699
- targetPath: string;
700
- /** Project-relative posix path for display */
701
- relativePath: string;
702
- /**
703
- * Heuristic guess: true when the existing file looks like an unmodified
704
- * shadcn/ui original (no `data-slot` attribute from teamix-evo).
705
- * v1 uses filename + content heuristics; future versions may hash-compare.
706
- */
707
- isShadcnOriginal: boolean;
708
- }
709
- interface UiConflictReport {
710
- /** Entries whose target file already exists on disk */
711
- conflictEntries: UiConflictEntry[];
712
- /** Number of manifest entries with no on-disk conflict */
713
- unconflictedTargets: number;
714
- /** Total manifest entries checked */
715
- totalEntries: number;
716
- /** True when at least one conflict exists — caller should block */
717
- shouldBlock: boolean;
718
- /** Distinct target alias directories that have conflicts */
719
- conflictDirs: string[];
720
- }
721
-
722
- /** Result of `createSnapshot` when a snapshot was actually taken. */
723
- interface SnapshotResult {
724
- /** Filesystem-safe UTC timestamp identifier (e.g. `2026-06-11T20-59-03-000Z`). */
725
- ts: string;
726
- /** Absolute path to the snapshot directory. */
727
- path: string;
728
- }
729
-
730
678
  type FileChangeKind = 'created' | 'modified' | 'backed-up' | 'deleted';
731
679
  interface FileChange {
732
680
  kind: FileChangeKind;
@@ -739,267 +687,62 @@ interface FileChange {
739
687
  }
740
688
 
741
689
  /**
742
- * Programmatic orchestrator for `teamix-evo init` (existing-project adoption).
743
- *
744
- * Consumes {@link InitWizardAnswers} produced by `runInitWizard` and drives
745
- * the existing core sub-commands (`runTokensInit`, `runSkillsAdd`,
746
- * `runGenerateAgentsMd`, `runUiInit`, `runUiAdd`, `runLintInit`) in a fixed
747
- * order. Sub-commands are invoked silently — no interactive prompts here.
690
+ * Programmatic orchestrator for `teamix-evo init` (ADR 0043).
748
691
  *
749
- * Conflict handling:
750
- * - `conflictDecisions[key] === 'skip'` skips the corresponding step entirely.
751
- * - `'overwrite'` is the trivial path (the underlying core APIs already write).
752
- * - `'merge-managed'` (agents-md) is implemented today via
753
- * `runGenerateAgentsMd` which writes managed regions natively.
754
- * - `'skip-existing'` (shadcn-source) maps to `runUiAdd({ overwrite: false })`,
755
- * the existing default.
756
- * - All other strategies (`diff-prompt`, `backup-overwrite`, `migrate`,
757
- * `coexist`, `append`, `per-file-prompt`) require the managed-region engine
758
- * from batch 4 — they are recorded to `pendingConflictWork` so the CLI
759
- * surface can guide the user to the followup `teamix-evo conflict resolve`
760
- * step (post-batch-4).
692
+ * Drives the 8-step pipeline that installs the full teamix-evo suite into an
693
+ * existing project. Each step is idempotent re-running `init` picks up from
694
+ * where it left off.
761
695
  *
762
- * No interactive prompts, no `process.exit`. Throws on hard failure (P8).
696
+ * Conflict handling is intentionally thin (ADR 0043 §3): detect → terminate →
697
+ * structured output → AI decides. The orchestrator only checks `force` — when
698
+ * true, it skips conflict detection entirely.
763
699
  */
764
700
 
765
- /**
766
- * Strategy for handling UI component conflicts when existing shadcn/ui
767
- * components are found in the target project.
768
- *
769
- * - `isolate-progressive` (Path A): move existing → shadcn-ui/, install
770
- * fresh teamix-evo components into ui/, rewrite imports, let user
771
- * migrate at their own pace.
772
- * - `isolate-aggressive` (Path C): same as A + immediately generate
773
- * upgrade staging so user can batch-replace.
774
- * - `frozen-skip`: legacy behaviour — skip existing files, no migration.
775
- */
776
- type UiConflictStrategy = 'isolate-progressive' | 'isolate-aggressive' | 'frozen-skip';
777
- type ProjectInitStepName = 'tokens' | 'skills' | 'agents-md' | 'ui-init' | 'ui-add' | 'lint' | 'gitignore';
701
+ type ProjectInitStepName = 'tokens' | 'skills' | 'agents-md' | 'ui-init' | 'ui-add' | 'biz-ui-add' | 'lint' | 'gitignore';
778
702
  type ProjectInitStepStatus = 'ok' | 'skip' | 'fail' | 'planned';
779
703
  interface ProjectInitStep {
780
704
  name: ProjectInitStepName;
781
705
  status: ProjectInitStepStatus;
782
706
  detail?: string;
783
- /**
784
- * Files this step touched (Phase 1.A1). Empty when the step skipped or
785
- * failed before any I/O. The `kind` is `created` by default; the orchestrator
786
- * upgrades entries to `modified` post-hoc by checking the backup ledger
787
- * (`.teamix-evo/.backups/`).
788
- */
707
+ /** Files this step touched. */
789
708
  changes?: FileChange[];
790
709
  }
791
- interface PendingConflictWork {
792
- key: ConflictKey;
793
- strategy: ConflictStrategy;
794
- reason: string;
795
- }
796
710
  interface ResumeHint {
797
- /** The first step that failed (caller resumes from here). */
798
711
  failedAt: ProjectInitStepName;
799
- /** Steps already finished (status === 'ok'); will short-circuit on resume. */
800
712
  completed: ProjectInitStepName[];
801
- /** All steps that ended in fail status. */
802
713
  failed: ProjectInitStepName[];
803
- /** Human-readable error from the first failed step. */
804
714
  error: string;
805
- /**
806
- * Suggested CLI command to resume. Today this is just `teamix-evo init`
807
- * itself — every sub-step is idempotent (returns `already-initialized`
808
- * when the matching state file already exists), so a re-run continues
809
- * from the failure point automatically. Future batches may grow a
810
- * dedicated `--resume` flag with a richer recovery model (batch 3).
811
- */
812
715
  resumeCommand: string;
813
716
  }
814
717
  interface RunProjectInitOptions {
815
718
  /** Absolute project root (existing repo to adopt teamix-evo into). */
816
719
  projectRoot: string;
817
- /** Wizard outcome (single source of truth for every silent sub-command). */
818
- answers: InitWizardAnswers;
819
- /**
820
- * Override the resolved UI entry list. When provided, replaces the
821
- * `answers.uiSelection`-driven list (`'baseline'` / `'all'`). Useful for
822
- * tests and for callers that want to install a custom subset.
823
- */
824
- uiEntries?: string[];
720
+ /** Tokens variant (e.g. "opentrek" / "uni-manager"). */
721
+ variant: string;
722
+ /** Target IDEs (at least one). */
723
+ ides: SkillIde[];
724
+ /** Skill install scope. Defaults to 'project'. */
725
+ scope?: SkillScope;
825
726
  /**
826
- * If true, skip `npm install` for lint deps. Defaults to `false` so lint
827
- * works out of the box; pass `true` from the create scaffold which installs
828
- * everything in one batch.
727
+ * When true, skip conflict detection and overwrite everything.
728
+ * Distinction: init --force = skip conflict check; create --force = overwrite directory.
829
729
  */
730
+ force?: boolean;
731
+ /** Skip `npm install` for lint deps. */
830
732
  skipInstall?: boolean;
831
- /**
832
- * Legacy token CSS files (paths relative to `projectRoot`) detected by
833
- * `detectConflicts` for the `tokens` key. When `conflictDecisions.tokens`
834
- * is `'migrate'` and this list is non-empty, the orchestrator appends
835
- * each file's content into `tokens/tokens.overrides.css` and backs the
836
- * legacy files up to `.teamix-evo/.backups/` (W1.4 of the manage-entry
837
- * plan; see [`legacy-tokens-migrate`](./legacy-tokens-migrate.ts)).
838
- *
839
- * Ignored for any other `tokens` decision. The caller (init command) is
840
- * responsible for filtering out paths already inside `tokens/`.
841
- */
842
- legacyTokensPaths?: string[];
843
- /**
844
- * Phase 3.E: existing ESLint config paths (relative to `projectRoot`)
845
- * detected by `detectConflicts` for the `eslint-config` key. Used to
846
- * back up the consumer's file before writing the teamix-evo template,
847
- * and to gate the `merge` / `backup-overwrite` / `skip` strategies in
848
- * `runLintInit`.
849
- */
850
- legacyEslintPaths?: string[];
851
- /**
852
- * Phase 3.E: existing Stylelint config paths (relative to `projectRoot`).
853
- */
854
- legacyStylelintPaths?: string[];
855
- /**
856
- * UI conflict resolution strategy. When omitted AND conflicts are
857
- * detected, the orchestrator returns `uiDecisionRequired` so the
858
- * caller can prompt the user. When `-y` (non-interactive), defaults
859
- * to `'isolate-progressive'`.
860
- */
861
- uiConflictStrategy?: UiConflictStrategy;
862
- /**
863
- * When true, treat the invocation as non-interactive (`-y` flag).
864
- * Affects default conflict strategy selection.
865
- */
866
- nonInteractive?: boolean;
867
- /** Step-level progress hook (caller controls presentation). */
733
+ /** Step-level progress hook. */
868
734
  onStep?: (step: ProjectInitStep) => void;
869
- /**
870
- * If true, plan-only mode: compute the full step list without running any
871
- * sub-command. Returns each step with `status: 'planned'`.
872
- */
735
+ /** Plan-only mode: compute steps without running sub-commands. */
873
736
  dryRun?: boolean;
874
737
  }
875
- /**
876
- * Returned when UI conflicts are detected and no `uiConflictStrategy` was
877
- * provided. The caller should present the options to the user and re-invoke
878
- * `runProjectInit` with the chosen strategy.
879
- */
880
- interface UiDecisionRequired {
881
- /** The full conflict report for display */
882
- report: UiConflictReport;
883
- /** Available strategies with human-readable descriptions */
884
- options: Array<{
885
- strategy: UiConflictStrategy;
886
- label: string;
887
- description: string;
888
- }>;
889
- }
890
738
  interface RunProjectInitResult {
891
739
  status: 'installed' | 'partial' | 'dry-run';
892
740
  steps: ProjectInitStep[];
893
- /** Conflicts whose strategy needs the post-batch-4 managed-region engine. */
894
- pendingConflictWork: PendingConflictWork[];
895
- /**
896
- * Aggregated, classified file-change ledger covering every step
897
- * (Phase 1.A1). Backup entries are surfaced as `kind: 'backed-up'` so the
898
- * CLI can render a four-bucket summary (新建 / 修改 / 备份 / 删除).
899
- */
900
741
  changes: FileChange[];
901
- /**
902
- * Present when at least one step ended in `fail`. Lets the CLI surface a
903
- * structured recovery message instead of just a stack-trace, and gives
904
- * programmatic consumers a deterministic field to branch on.
905
- */
906
742
  resumeHint?: ResumeHint;
907
- /**
908
- * Pre-init snapshot of `.teamix-evo/`, captured automatically before any
909
- * file is written ([ADR 0019](../../../../docs/adr/0019-project-upgrade-flow.md) §2).
910
- *
911
- * - `null` on first-ever init (`.teamix-evo/` did not yet exist) and on
912
- * `dryRun`.
913
- * - Failure to capture a snapshot is **non-fatal** — surfaced via
914
- * {@link snapshotError} so the CLI can warn the user. The init pipeline
915
- * itself still runs.
916
- */
917
- snapshot?: SnapshotResult | null;
918
- /** Reason a snapshot capture failed (best-effort — never blocks init). */
919
- snapshotError?: string;
920
- /**
921
- * Present when UI conflicts are detected and no `uiConflictStrategy`
922
- * was provided (interactive mode). Caller should prompt the user with
923
- * `options`, then re-invoke with the chosen strategy.
924
- */
925
- uiDecisionRequired?: UiDecisionRequired;
926
743
  }
927
- /**
928
- * Existing-project init pipeline.
929
- *
930
- * Order:
931
- * 1. tokens init (auto-installs `teamix-evo-design-${variant}` skill)
932
- * 2. skills add (`teamix-evo-code-${variant}`; entry skill is global, ADR 0033)
933
- * 3. AGENTS.md (skill trigger fallback, ADR 0038)
934
- * 4. ui init + ui add (gated by `withUi`)
935
- * 5. lint init (gated by `withLint`)
936
- */
937
744
  declare function runProjectInit(options: RunProjectInitOptions): Promise<RunProjectInitResult>;
938
745
 
939
- type ProjectUpdateStepName = 'tokens' | 'skills' | 'ui' | 'biz-ui';
940
- type ProjectUpdateStepStatus = 'ok' | 'skip' | 'fail' | 'planned';
941
- interface ProjectUpdateStep {
942
- name: ProjectUpdateStepName;
943
- status: ProjectUpdateStepStatus;
944
- detail?: string;
945
- }
946
- interface ProjectUpdateResumeHint {
947
- /** The first step that failed (caller resumes from here). */
948
- failedAt: ProjectUpdateStepName;
949
- /** Steps already finished (status === 'ok'); will short-circuit on resume. */
950
- completed: ProjectUpdateStepName[];
951
- /** All steps that ended in fail status. */
952
- failed: ProjectUpdateStepName[];
953
- /** Human-readable error from the first failed step. */
954
- error: string;
955
- /**
956
- * Suggested CLI command to resume. Today this is just `teamix-evo update`
957
- * itself — every sub-step is idempotent (version-diff short-circuits when
958
- * up-to-date), so a re-run continues from the failure point automatically.
959
- */
960
- resumeCommand: string;
961
- }
962
- interface RunProjectUpdateOptions {
963
- /** Absolute project root (must already be teamix-evo-installed). */
964
- projectRoot: string;
965
- /**
966
- * If true, plan-only mode: compute version deltas without writing any
967
- * file. Returns each step with `status: 'planned'`.
968
- */
969
- dryRun?: boolean;
970
- /** Step-level progress hook (caller controls presentation). */
971
- onStep?: (step: ProjectUpdateStep) => void;
972
- /** Override the tokens package name (defaults to `@teamix-evo/tokens`). */
973
- tokensPackageName?: string;
974
- /** Override the skills package name (defaults to `@teamix-evo/skills`). */
975
- skillsPackageName?: string;
976
- }
977
- type RunProjectUpdateResult = {
978
- status: 'not-initialized';
979
- } | {
980
- status: 'up-to-date' | 'updated' | 'partial' | 'dry-run';
981
- steps: ProjectUpdateStep[];
982
- resumeHint?: ProjectUpdateResumeHint;
983
- /**
984
- * Pre-update snapshot of `.teamix-evo/` ([ADR 0019](../../../../docs/adr/0019-project-upgrade-flow.md) §2).
985
- * `null` on `dryRun`. Best-effort — capture failures surface via
986
- * {@link snapshotError} but never abort the pipeline.
987
- */
988
- snapshot?: SnapshotResult | null;
989
- /** Reason a snapshot capture failed (best-effort — never blocks update). */
990
- snapshotError?: string;
991
- };
992
- /**
993
- * Post-init refresh pipeline.
994
- *
995
- * Order:
996
- * 1. tokens update (regenerable rewrite + frozen preserved — ADR 0003 三态)
997
- * 2. skills update (lock ∩ scope ∩ version-diff short-circuit — ADR 0035)
998
- *
999
- * Re-runs are safe: each sub-step short-circuits when already at latest.
1000
- */
1001
- declare function runProjectUpdate(options: RunProjectUpdateOptions): Promise<RunProjectUpdateResult>;
1002
-
1003
746
  interface InstallOptions {
1004
747
  /** Project root directory */
1005
748
  projectRoot: string;
@@ -1157,6 +900,8 @@ interface UiInstallOptions {
1157
900
  requested: string[];
1158
901
  /** When true, skip writing entries whose target file already exists (frozen-on-add). */
1159
902
  skipExisting?: boolean;
903
+ /** When false, preserve directory structure in import paths (skip flattenRestPath). Defaults to true. */
904
+ flatten?: boolean;
1160
905
  }
1161
906
  interface UiInstallResult {
1162
907
  /** Ordered list of entry ids that were processed (deps + requested) */
@@ -1247,4 +992,4 @@ declare function readInstalledManifest(projectRoot: string): Promise<InstalledMa
1247
992
  */
1248
993
  declare function writeInstalledManifest(projectRoot: string, manifest: InstalledManifest): Promise<void>;
1249
994
 
1250
- 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 };
995
+ 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 ProjectInitStep, type ProjectInitStepName, type ProjectInitStepStatus, type ProjectState, type ProjectStateReport, type ResumeHint, type RunGenerateAgentsMdOptions, type RunGenerateAgentsMdResult, type RunLintInitOptions, type RunLintInitResult, type RunProjectInitOptions, type RunProjectInitResult, 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, runSkillsAdd, runSkillsInit, runSkillsUpdate, runTemplatesAdd, runTokensInit, runUiAdd, runUiInit, runUiList, syncSkillsToIdes, updateSkills, writeInstalledManifest, writeProjectConfig };