aico-cli 0.4.1 → 0.4.4

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.
Files changed (51) hide show
  1. package/dist/chunks/run-command.mjs +47 -0
  2. package/dist/chunks/simple-config.mjs +41 -15
  3. package/dist/cli.mjs +509 -119
  4. package/package.json +4 -1
  5. package/templates/skills/slack-gif-creator/LICENSE.txt +202 -0
  6. package/templates/skills/slack-gif-creator/SKILL.md +646 -0
  7. package/templates/skills/slack-gif-creator/core/color_palettes.py +302 -0
  8. package/templates/skills/slack-gif-creator/core/easing.py +230 -0
  9. package/templates/skills/slack-gif-creator/core/frame_composer.py +469 -0
  10. package/templates/skills/slack-gif-creator/core/gif_builder.py +246 -0
  11. package/templates/skills/slack-gif-creator/core/typography.py +357 -0
  12. package/templates/skills/slack-gif-creator/core/validators.py +264 -0
  13. package/templates/skills/slack-gif-creator/core/visual_effects.py +494 -0
  14. package/templates/skills/slack-gif-creator/requirements.txt +4 -0
  15. package/templates/skills/slack-gif-creator/templates/bounce.py +106 -0
  16. package/templates/skills/slack-gif-creator/templates/explode.py +331 -0
  17. package/templates/skills/slack-gif-creator/templates/fade.py +329 -0
  18. package/templates/skills/slack-gif-creator/templates/flip.py +291 -0
  19. package/templates/skills/slack-gif-creator/templates/kaleidoscope.py +211 -0
  20. package/templates/skills/slack-gif-creator/templates/morph.py +329 -0
  21. package/templates/skills/slack-gif-creator/templates/move.py +293 -0
  22. package/templates/skills/slack-gif-creator/templates/pulse.py +268 -0
  23. package/templates/skills/slack-gif-creator/templates/shake.py +127 -0
  24. package/templates/skills/slack-gif-creator/templates/slide.py +291 -0
  25. package/templates/skills/slack-gif-creator/templates/spin.py +269 -0
  26. package/templates/skills/slack-gif-creator/templates/wiggle.py +300 -0
  27. package/templates/skills/slack-gif-creator/templates/zoom.py +312 -0
  28. package/templates/skills/swimlane-diagram/README.md +373 -0
  29. package/templates/skills/swimlane-diagram/SKILL.md +242 -0
  30. package/templates/skills/swimlane-diagram/examples.md +405 -0
  31. package/templates/skills/swimlane-diagram/generators.mjs +258 -0
  32. package/templates/skills/swimlane-diagram/package.json +126 -0
  33. package/templates/skills/swimlane-diagram/reference.md +368 -0
  34. package/templates/skills/swimlane-diagram/swimlane-diagram.mjs +215 -0
  35. package/templates/skills/swimlane-diagram/swimlane-diagram.test.mjs +358 -0
  36. package/templates/skills/swimlane-diagram/validators.mjs +291 -0
  37. package/templates/skills/theme-factory/LICENSE.txt +202 -0
  38. package/templates/skills/theme-factory/SKILL.md +59 -0
  39. package/templates/skills/theme-factory/theme-showcase.pdf +0 -0
  40. package/templates/skills/theme-factory/themes/arctic-frost.md +19 -0
  41. package/templates/skills/theme-factory/themes/botanical-garden.md +19 -0
  42. package/templates/skills/theme-factory/themes/desert-rose.md +19 -0
  43. package/templates/skills/theme-factory/themes/forest-canopy.md +19 -0
  44. package/templates/skills/theme-factory/themes/golden-hour.md +19 -0
  45. package/templates/skills/theme-factory/themes/midnight-galaxy.md +19 -0
  46. package/templates/skills/theme-factory/themes/modern-minimalist.md +19 -0
  47. package/templates/skills/theme-factory/themes/ocean-depths.md +19 -0
  48. package/templates/skills/theme-factory/themes/sunset-boulevard.md +19 -0
  49. package/templates/skills/theme-factory/themes/tech-innovation.md +19 -0
  50. package/templates/code.md +0 -70
  51. package/templates/windows-bootstrap.ps1 +0 -390
@@ -0,0 +1,47 @@
1
+ import { p as processManager } from '../cli.mjs';
2
+ import 'cac';
3
+ import 'ansis';
4
+ import './simple-config.mjs';
5
+ import 'inquirer';
6
+ import 'tinyexec';
7
+ import 'node:os';
8
+ import 'node:fs';
9
+ import 'node:child_process';
10
+ import 'node:util';
11
+ import 'child_process';
12
+ import 'util';
13
+ import 'ora';
14
+ import 'dayjs';
15
+ import 'node:path';
16
+ import 'pathe';
17
+ import 'node:url';
18
+ import 'node:events';
19
+
20
+ async function run(command) {
21
+ try {
22
+ const parts = command.split(" ").filter((part) => part.trim());
23
+ if (parts.length === 0) {
24
+ throw new Error("\u547D\u4EE4\u4E0D\u80FD\u4E3A\u7A7A");
25
+ }
26
+ const cmd = parts[0];
27
+ const args = parts.slice(1);
28
+ const result = await processManager.spawn(cmd, args, {
29
+ name: cmd,
30
+ timeout: 6e4,
31
+ // 60秒超时
32
+ stdio: "pipe"
33
+ });
34
+ return {
35
+ stdout: result.stdout || "",
36
+ stderr: result.stderr || ""
37
+ };
38
+ } catch (error) {
39
+ if (error instanceof Error) {
40
+ throw new Error(`Command failed: ${command}
41
+ Error: ${error.message}`);
42
+ }
43
+ throw error;
44
+ }
45
+ }
46
+
47
+ export { run };
@@ -13,7 +13,7 @@ import { join as join$1 } from 'node:path';
13
13
  import { join, dirname, basename } from 'pathe';
14
14
  import { fileURLToPath } from 'node:url';
15
15
 
16
- const version = "0.4.1";
16
+ const version = "0.4.4";
17
17
 
18
18
  function displayBanner(subtitle) {
19
19
  const defaultSubtitle = "\u4E00\u952E\u914D\u7F6E\u4F60\u7684\u5F00\u53D1\u73AF\u5883";
@@ -4678,18 +4678,18 @@ const DEFAULT_FILE_COPY_CONFIGS = [
4678
4678
  }
4679
4679
  },
4680
4680
  {
4681
- source: "templates/personality.md",
4682
- destination: join(CLAUDE_DIR, "personality.md"),
4683
- type: "file",
4681
+ source: "templates/skills",
4682
+ destination: join(CLAUDE_DIR, "skills"),
4683
+ type: "directory",
4684
4684
  options: {
4685
- mergeStrategy: "merge",
4685
+ mergeStrategy: "copy",
4686
4686
  backupBeforeCopy: true,
4687
4687
  deleteBeforeCopy: true
4688
4688
  }
4689
4689
  },
4690
4690
  {
4691
- source: "templates/code.md",
4692
- destination: join(CLAUDE_DIR, "code.md"),
4691
+ source: "templates/personality.md",
4692
+ destination: join(CLAUDE_DIR, "personality.md"),
4693
4693
  type: "file",
4694
4694
  options: {
4695
4695
  mergeStrategy: "merge",
@@ -4941,7 +4941,10 @@ class ConfigInstaller extends AbstractInstaller {
4941
4941
  const settingsInstalled = existsSync(SETTINGS_FILE);
4942
4942
  const personalityInstalled = existsSync(join(CLAUDE_DIR, "personality.md"));
4943
4943
  const languageInstalled = existsSync(join(CLAUDE_DIR, "language.md"));
4944
- return { isInstalled: settingsInstalled && personalityInstalled && languageInstalled };
4944
+ const skillsInstalled = existsSync(join(CLAUDE_DIR, "skills"));
4945
+ return {
4946
+ isInstalled: settingsInstalled && personalityInstalled && languageInstalled && skillsInstalled
4947
+ };
4945
4948
  }
4946
4949
  async install(options = {}) {
4947
4950
  try {
@@ -5151,35 +5154,58 @@ class ConfigCheckerInstaller extends AbstractInstaller {
5151
5154
  name = "Config Checker";
5152
5155
  async checkStatus() {
5153
5156
  const configType = await this.detectConfigType();
5157
+ const skillsInstalled = exists(join(CLAUDE_DIR, "skills"));
5154
5158
  return {
5155
- isInstalled: configType !== "none",
5159
+ isInstalled: configType !== "none" && skillsInstalled,
5156
5160
  version: void 0
5157
5161
  };
5158
5162
  }
5159
5163
  async install(options = {}) {
5160
5164
  try {
5161
5165
  const configType = await this.detectConfigType();
5162
- if (configType !== "none" && !options.force) {
5163
- this.log(`\u68C0\u6D4B\u5230 ${configType === "company" ? "\u516C\u53F8" : "\u4E2A\u4EBA"} \u914D\u7F6E\uFF0C\u8DF3\u8FC7\u914D\u7F6E`, "success");
5166
+ const skillsInstalled = exists(join(CLAUDE_DIR, "skills"));
5167
+ if (configType !== "none" && skillsInstalled && !options.force) {
5168
+ this.log(`\u68C0\u6D4B\u5230 ${configType === "company" ? "\u516C\u53F8" : "\u4E2A\u4EBA"} \u914D\u7F6E\u4E14\u6280\u80FD\u76EE\u5F55\u5DF2\u5B58\u5728\uFF0C\u8DF3\u8FC7\u914D\u7F6E`, "success");
5164
5169
  return this.createSkipResult(
5165
- `${configType === "company" ? "\u516C\u53F8" : "\u4E2A\u4EBA"} \u914D\u7F6E\u5DF2\u5B58\u5728\uFF0C\u8DF3\u8FC7\u914D\u7F6E`,
5170
+ `${configType === "company" ? "\u516C\u53F8" : "\u4E2A\u4EBA"} \u914D\u7F6E\u548C\u6280\u80FD\u76EE\u5F55\u5DF2\u5B58\u5728\uFF0C\u8DF3\u8FC7\u914D\u7F6E`,
5166
5171
  "already_configured",
5167
- { configType }
5172
+ { configType, skillsInstalled }
5168
5173
  );
5169
5174
  }
5170
5175
  if (!options.silent) {
5171
5176
  if (configType !== "none" && options.force) {
5172
5177
  this.log(`\u5F3A\u5236\u8986\u76D6\u73B0\u6709${configType === "company" ? "\u516C\u53F8" : "\u4E2A\u4EBA"}\u914D\u7F6E...`, "info");
5178
+ } else if (!skillsInstalled) {
5179
+ this.log("\u68C0\u6D4B\u5230\u6280\u80FD\u76EE\u5F55\u672A\u5B89\u88C5\uFF0C\u5C06\u8FDB\u884C\u5B89\u88C5...", "info");
5173
5180
  } else {
5174
5181
  this.log("\u5F00\u59CB\u914D\u7F6E\u68C0\u67E5...", "info");
5175
5182
  }
5176
5183
  }
5177
5184
  const operation = configType !== "none" && options.force ? "\u8986\u76D6\u68C0\u67E5" : "\u914D\u7F6E\u68C0\u67E5";
5178
- return this.createSuccessResult(`\u914D\u7F6E\u68C0\u67E5\u5B8C\u6210\uFF0C${operation}\u6210\u529F`, void 0, { configType });
5185
+ const skillsMessage = skillsInstalled ? "\u6280\u80FD\u76EE\u5F55\u5DF2\u5B58\u5728" : "\u6280\u80FD\u76EE\u5F55\u672A\u5B89\u88C5";
5186
+ return this.createSuccessResult(
5187
+ `\u914D\u7F6E\u68C0\u67E5\u5B8C\u6210\uFF0C${operation}\u6210\u529F\uFF0C${skillsMessage}`,
5188
+ void 0,
5189
+ { configType, skillsInstalled }
5190
+ );
5179
5191
  } catch (error) {
5180
5192
  return this.handleError(error, "\u914D\u7F6E\u68C0\u67E5");
5181
5193
  }
5182
5194
  }
5195
+ /**
5196
+ * 检查版本一致性
5197
+ */
5198
+ async checkVersionConsistency() {
5199
+ try {
5200
+ const aicoConfig = readAicoConfig();
5201
+ if (!aicoConfig) {
5202
+ return false;
5203
+ }
5204
+ return aicoConfig.version === version;
5205
+ } catch (error) {
5206
+ return false;
5207
+ }
5208
+ }
5183
5209
  /**
5184
5210
  * 检测配置类型
5185
5211
  */
@@ -5544,4 +5570,4 @@ async function openSettingsJson() {
5544
5570
  }
5545
5571
  }
5546
5572
 
5547
- export { AICO_CONFIG_FILE as A, getMcpConfigPath as B, CLAUDE_DIR as C, DEFAULT_FILE_COPY_CONFIGS as D, readMcpConfig as E, writeMcpConfig as F, backupMcpConfig as G, mergeMcpServers as H, buildMcpServerConfig as I, fixWindowsMcpConfig as J, addCompletedOnboarding as K, LEGACY_AICO_CONFIG_FILE as L, MCP_SERVICES as M, createEscapablePrompt as N, displayBannerWithInfo as O, executeWithEscapeSupport as P, handleExitPromptError as Q, handleGeneralError as R, SETTINGS_FILE as S, EscapeKeyPressed as T, displayBanner as U, ConfigCheckerInstaller as V, InstallationComposer as W, version as X, readAicoConfig as Y, init$1 as Z, init as a, getPlatform as b, commandExists as c, importRecommendedEnv as d, importRecommendedPermissions as e, cleanupPermissions as f, getTermuxPrefix as g, mergeAndCleanPermissions as h, isTermux as i, CLAUDE_MD_FILE as j, ClAUDE_CONFIG_FILE as k, SUPPORTED_LANGS as l, messages as m, LANG_LABELS as n, openSettingsJson as o, AI_OUTPUT_LANGUAGES as p, ensureClaudeDir as q, backupExistingConfig as r, copyConfigFiles as s, copyConfigFilesWithConfig as t, configureApi as u, mergeConfigs as v, updateDefaultModel as w, mergeSettingsFile as x, getExistingApiConfig as y, applyAiLanguageDirective as z };
5573
+ export { AICO_CONFIG_FILE as A, getMcpConfigPath as B, CLAUDE_DIR as C, DEFAULT_FILE_COPY_CONFIGS as D, readMcpConfig as E, writeMcpConfig as F, backupMcpConfig as G, mergeMcpServers as H, buildMcpServerConfig as I, fixWindowsMcpConfig as J, addCompletedOnboarding as K, LEGACY_AICO_CONFIG_FILE as L, MCP_SERVICES as M, createEscapablePrompt as N, displayBannerWithInfo as O, executeWithEscapeSupport as P, handleExitPromptError as Q, handleGeneralError as R, SETTINGS_FILE as S, EscapeKeyPressed as T, displayBanner as U, ConfigCheckerInstaller as V, updateAicoConfig as W, version as X, InstallationComposer as Y, readAicoConfig as Z, init$1 as _, init as a, getPlatform as b, commandExists as c, importRecommendedEnv as d, importRecommendedPermissions as e, cleanupPermissions as f, getTermuxPrefix as g, mergeAndCleanPermissions as h, isTermux as i, CLAUDE_MD_FILE as j, ClAUDE_CONFIG_FILE as k, SUPPORTED_LANGS as l, messages as m, LANG_LABELS as n, openSettingsJson as o, AI_OUTPUT_LANGUAGES as p, ensureClaudeDir as q, backupExistingConfig as r, copyConfigFiles as s, copyConfigFilesWithConfig as t, configureApi as u, mergeConfigs as v, updateDefaultModel as w, mergeSettingsFile as x, getExistingApiConfig as y, applyAiLanguageDirective as z };