@coze-arch/cli 0.0.1-alpha.ecba20 → 0.0.1-alpha.ee5d83

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 (43) hide show
  1. package/lib/__templates__/expo/.coze +1 -1
  2. package/lib/__templates__/expo/.cozeproj/scripts/dev_build.sh +19 -82
  3. package/lib/__templates__/expo/.cozeproj/scripts/dev_run.sh +62 -81
  4. package/lib/__templates__/expo/README.md +22 -14
  5. package/lib/__templates__/expo/client/app/index.tsx +1 -0
  6. package/lib/__templates__/expo/client/app.config.ts +64 -60
  7. package/lib/__templates__/expo/client/constants/theme.ts +22 -18
  8. package/lib/__templates__/expo/client/hooks/useColorScheme.ts +34 -1
  9. package/lib/__templates__/expo/client/package.json +1 -0
  10. package/lib/__templates__/expo/client/screens/home/index.tsx +12 -37
  11. package/lib/__templates__/expo/client/screens/home/styles.ts +19 -51
  12. package/lib/__templates__/expo/pnpm-lock.yaml +57 -5
  13. package/lib/__templates__/expo/server/package.json +3 -1
  14. package/lib/__templates__/expo/server/src/index.ts +8 -2
  15. package/lib/__templates__/expo/template.config.js +1 -0
  16. package/lib/__templates__/nextjs/.coze +1 -0
  17. package/lib/__templates__/nextjs/_npmrc +1 -0
  18. package/lib/__templates__/nextjs/next.config.ts +11 -0
  19. package/lib/__templates__/nextjs/package.json +3 -5
  20. package/lib/__templates__/nextjs/pnpm-lock.yaml +13 -1025
  21. package/lib/__templates__/nextjs/scripts/dev.sh +1 -1
  22. package/lib/__templates__/nextjs/scripts/prepare.sh +9 -0
  23. package/lib/__templates__/nextjs/src/app/globals.css +10 -2
  24. package/lib/__templates__/nextjs/src/app/layout.tsx +1 -16
  25. package/lib/__templates__/nextjs/src/app/page.tsx +33 -21
  26. package/lib/__templates__/nextjs/src/components/ui/resizable.tsx +29 -22
  27. package/lib/__templates__/nextjs/src/components/ui/sidebar.tsx +228 -230
  28. package/lib/__templates__/nextjs/template.config.js +30 -0
  29. package/lib/__templates__/templates.json +61 -70
  30. package/lib/__templates__/vite/.coze +1 -0
  31. package/lib/__templates__/vite/_npmrc +1 -0
  32. package/lib/__templates__/vite/eslint.config.mjs +9 -0
  33. package/lib/__templates__/vite/package.json +5 -1
  34. package/lib/__templates__/vite/pnpm-lock.yaml +3481 -14
  35. package/lib/__templates__/vite/scripts/prepare.sh +9 -0
  36. package/lib/__templates__/vite/template.config.js +28 -4
  37. package/lib/cli.js +46 -22
  38. package/package.json +1 -1
  39. package/lib/__templates__/nextjs/.babelrc +0 -15
  40. package/lib/__templates__/nextjs/.vscode/settings.json +0 -121
  41. package/lib/__templates__/nextjs/server.mjs +0 -50
  42. package/lib/__templates__/vite/.vscode/settings.json +0 -7
  43. /package/lib/__templates__/expo/client/app/{index.ts → home.tsx} +0 -0
@@ -0,0 +1,9 @@
1
+ #!/bin/bash
2
+ set -Eeuo pipefail
3
+
4
+ COZE_WORKSPACE_PATH="${COZE_WORKSPACE_PATH:-$(pwd)}"
5
+
6
+ cd "${COZE_WORKSPACE_PATH}"
7
+
8
+ echo "Installing dependencies..."
9
+ pnpm install --prefer-frozen-lockfile --prefer-offline --loglevel debug --reporter=append-only
@@ -37,7 +37,11 @@ export const paramsSchema = {
37
37
  additionalProperties: false,
38
38
  };
39
39
 
40
+ const description = `Vite(简单项目):\`coze init \${COZE_WORKSPACE_PATH} --template vite\`
41
+ - 适用:轻量级 SPA、纯前端交互、仪表盘等轻量级项目。`;
42
+
40
43
  const config = {
44
+ description: description,
41
45
  paramsSchema,
42
46
 
43
47
  defaultParams: {
@@ -55,11 +59,31 @@ const config = {
55
59
 
56
60
  onAfterRender: async (context, outputPath) => {
57
61
  console.log(`\nProject created at: ${outputPath}`);
58
- console.log(`\nConfiguration:`);
59
- console.log(` - TypeScript: enabled`);
60
- console.log(` - Framework: None (Vanilla JS/TS)`);
61
- console.log(` - Build Tool: Vite`);
62
+ console.log('\nConfiguration:');
63
+ console.log(' - Framework: vite');
64
+ console.log(' - TypeScript: enabled');
65
+ console.log(' - App Router: enabled');
62
66
  console.log(` - Port: ${context.port}`);
67
+
68
+ // Skip pnpm add in test environment to avoid monorepo workspace issues
69
+ if (process.env.NODE_ENV === 'test') {
70
+ console.log('⊘ Skipping dependency update in test environment');
71
+ return;
72
+ }
73
+
74
+ const cmd = `pnpm add coze-coding-dev-sdk@"^0.7.0"`;
75
+ console.log(`${cmd}`);
76
+ try {
77
+ const projectRoot = resolve(outputPath);
78
+ execSync(cmd, {
79
+ cwd: projectRoot,
80
+ stdio: 'inherit',
81
+ });
82
+ console.log('✓ coze-coding-dev-sdk updated successfully');
83
+ } catch (error) {
84
+ console.error('✗ Failed to update coze-coding-dev-sdk:', error);
85
+ throw error;
86
+ }
63
87
  },
64
88
  };
65
89
 
package/lib/cli.js CHANGED
@@ -7,10 +7,10 @@ var fs = require('fs');
7
7
  var shelljs = require('shelljs');
8
8
  var perf_hooks = require('perf_hooks');
9
9
  var fs$1 = require('fs/promises');
10
+ var os = require('os');
10
11
  var toml = require('@iarna/toml');
11
12
  var jsYaml = require('js-yaml');
12
13
  var child_process = require('child_process');
13
- var os = require('os');
14
14
  var addFormats = require('ajv-formats');
15
15
  var Ajv = require('ajv');
16
16
  var minimist = require('minimist');
@@ -826,23 +826,48 @@ const getCommandConfig = (
826
826
  function _nullishCoalesce$1(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
827
827
 
828
828
  /**
829
- * 创建日志管理器
829
+ * 日志文件名常量
830
830
  */
831
- const createLogManager = (logDir = '.coze-logs') => {
832
- const ensureLogDir = () => {
833
- if (!fs.existsSync(logDir)) {
834
- fs.mkdirSync(logDir, { recursive: true });
835
- }
836
- };
831
+ const LOG_FILE_NAME = 'dev.log';
837
832
 
838
- const getLogPath = (logFile) => path.join(logDir, logFile);
833
+ /**
834
+ * 获取日志目录
835
+ * 优先使用环境变量 COZE_LOG_DIR,否则使用 ~/.coze-logs
836
+ */
837
+ const getLogDir = () =>
838
+ process.env.COZE_LOG_DIR || path.join(os.homedir(), '.coze-logs');
839
839
 
840
- return {
841
- createWriteStream: (logFile) => {
842
- ensureLogDir();
843
- return fs.createWriteStream(getLogPath(logFile), { flags: 'a' });
844
- },
845
- };
840
+ /**
841
+ * 解析日志文件路径
842
+ * - 如果是绝对路径,直接使用
843
+ * - 如果是相对路径,基于 getLogDir() + 相对路径
844
+ * - 如果为空,使用 getLogDir() + LOG_FILE_NAME
845
+ */
846
+ const resolveLogFilePath = (logFile) => {
847
+ if (!logFile) {
848
+ return path.join(getLogDir(), LOG_FILE_NAME);
849
+ }
850
+
851
+ if (path.isAbsolute(logFile)) {
852
+ return logFile;
853
+ }
854
+
855
+ return path.join(getLogDir(), logFile);
856
+ };
857
+
858
+ /**
859
+ * 创建日志写入流
860
+ */
861
+ const createLogStream = (logFilePath) => {
862
+ const logDir = path.dirname(logFilePath);
863
+
864
+ // 确保日志目录存在
865
+ if (!fs.existsSync(logDir)) {
866
+ fs.mkdirSync(logDir, { recursive: true });
867
+ }
868
+
869
+ // 使用 'w' 标志覆盖之前的日志
870
+ return fs.createWriteStream(logFilePath, { flags: 'w' });
846
871
  };
847
872
 
848
873
  /**
@@ -860,16 +885,15 @@ const executeRun = async (
860
885
  const commandArgs = getCommandConfig(config, commandName);
861
886
 
862
887
  // 2. 准备日志
863
- const logManager = createLogManager();
864
- const logFile = options.logFile || `${commandName}.log`;
865
- const logStream = logManager.createWriteStream(logFile);
888
+ const logFilePath = resolveLogFilePath(options.logFile);
889
+ const logStream = createLogStream(logFilePath);
866
890
 
867
891
  // 3. 执行命令
868
892
  const commandString = commandArgs.join(' ');
869
893
 
870
894
  logger.info(`Executing: ${commandString}`);
871
895
  logger.info(`Working directory: ${process.cwd()}`);
872
- logger.info(`Log file: ${logFile}`);
896
+ logger.info(`Log file: ${logFilePath}`);
873
897
 
874
898
  const childProcess = shelljs.exec(commandString, {
875
899
  async: true,
@@ -898,11 +922,11 @@ const executeRun = async (
898
922
  logger.error(
899
923
  `Command exited with code ${_nullishCoalesce$1(code, () => ( 'unknown'))}${signal ? ` and signal ${signal}` : ''}`,
900
924
  );
901
- logger.error(`Check log file for details: ${logFile}`);
925
+ logger.error(`Check log file for details: ${logFilePath}`);
902
926
  process.exit(code || 1);
903
927
  } else {
904
928
  logger.success('Command completed successfully');
905
- logger.info(`Log file: ${logFile}`);
929
+ logger.info(`Log file: ${logFilePath}`);
906
930
  }
907
931
  });
908
932
 
@@ -1854,7 +1878,7 @@ const registerCommand = program => {
1854
1878
  });
1855
1879
  };
1856
1880
 
1857
- var version = "0.0.1-alpha.ecba20";
1881
+ var version = "0.0.1-alpha.ee5d83";
1858
1882
  var packageJson = {
1859
1883
  version: version};
1860
1884
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coze-arch/cli",
3
- "version": "0.0.1-alpha.ecba20",
3
+ "version": "0.0.1-alpha.ee5d83",
4
4
  "private": false,
5
5
  "description": "coze coding devtools cli",
6
6
  "license": "MIT",
@@ -1,15 +0,0 @@
1
- {
2
- "presets": [
3
- [
4
- "next/babel",
5
- {
6
- "preset-react": {
7
- "development": true
8
- }
9
- }
10
- ]
11
- ],
12
- "plugins": [
13
- "@react-dev-inspector/babel-plugin"
14
- ]
15
- }
@@ -1,121 +0,0 @@
1
- {
2
- "[css]": {
3
- "editor.defaultFormatter": "esbenp.prettier-vscode"
4
- },
5
- "[dotenv]": {
6
- "editor.defaultFormatter": "foxundermoon.shell-format"
7
- },
8
- "[html]": {
9
- "editor.defaultFormatter": "esbenp.prettier-vscode"
10
- },
11
- "[ignore]": {
12
- "editor.defaultFormatter": "foxundermoon.shell-format"
13
- },
14
- "[javascript]": {
15
- "editor.defaultFormatter": "esbenp.prettier-vscode"
16
- },
17
- "[javascriptreact]": {
18
- "editor.defaultFormatter": "esbenp.prettier-vscode"
19
- },
20
- "[json]": {
21
- "editor.defaultFormatter": "esbenp.prettier-vscode"
22
- },
23
- "[jsonc]": {
24
- "editor.defaultFormatter": "esbenp.prettier-vscode"
25
- },
26
- "[less]": {
27
- "editor.defaultFormatter": "stylelint.vscode-stylelint"
28
- },
29
- "[scss]": {
30
- "editor.defaultFormatter": "esbenp.prettier-vscode"
31
- },
32
- "[shellscript]": {
33
- "editor.defaultFormatter": "foxundermoon.shell-format"
34
- },
35
- "[sql]": {
36
- "editor.defaultFormatter": "adpyke.vscode-sql-formatter"
37
- },
38
- "[svg]": {
39
- "editor.defaultFormatter": "jock.svg"
40
- },
41
- "[typescript]": {
42
- "editor.defaultFormatter": "esbenp.prettier-vscode"
43
- },
44
- "[typescriptreact]": {
45
- "editor.defaultFormatter": "esbenp.prettier-vscode"
46
- },
47
- "[xml]": {
48
- "editor.defaultFormatter": "mblode.pretty-formatter"
49
- },
50
- "[yaml]": {
51
- "editor.defaultFormatter": "esbenp.prettier-vscode"
52
- },
53
- "cSpell.diagnosticLevel": "Warning",
54
- "css.validate": false,
55
- "editor.codeActionsOnSave": {
56
- "source.fixAll": "never",
57
- "source.fixAll.eslint": "explicit",
58
- "source.organizeImports": "never",
59
- "source.removeUnused": "never",
60
- "source.removeUnused.ts": "never",
61
- "source.removeUnusedImports": "never",
62
- "source.sort.json": "never"
63
- // "source.sortImports": "always"
64
- },
65
- "editor.defaultFormatter": "esbenp.prettier-vscode",
66
- "editor.formatOnPaste": false,
67
- "editor.formatOnSave": true,
68
- "editor.formatOnType": false,
69
- "editor.insertSpaces": true,
70
- "editor.minimap.enabled": true,
71
- //
72
- "editor.rulers": [80, 120],
73
- "editor.semanticHighlighting.enabled": false,
74
- "editor.tabSize": 2,
75
- "emmet.triggerExpansionOnTab": true,
76
- "files.associations": {
77
- ".babelrc": "json",
78
- ".code-workspace": "jsonc",
79
- ".eslintrc": "jsonc",
80
- ".eslintrc*.json": "jsonc",
81
- ".htmlhintrc": "jsonc",
82
- ".stylelintrc": "javascript",
83
- "*.json": "jsonc",
84
- "*.log": "plaintext",
85
- "*.map": "plaintext",
86
- "**/coverage/**/*.*": "plaintext",
87
- "**/pnpm-lock.yaml": "plaintext",
88
- "htmlhintrc": "jsonc",
89
- "package.json": "json",
90
- "README": "markdown",
91
- "stylelintrc": "jsonc",
92
- ".coze": "toml"
93
- },
94
- "files.defaultLanguage": "plaintext",
95
- "files.eol": "\n",
96
- "files.exclude": {
97
- "**/.DS_Store": true,
98
- "**/.git": true,
99
- "**/.hg": true,
100
- "**/.svn": true,
101
- // "**/.lintcache": true,
102
- "**/.swc": true,
103
- "**/CVS": true,
104
- "**/Thumbs.db": true
105
- },
106
- "files.insertFinalNewline": true,
107
- "files.trimTrailingWhitespace": true,
108
- "files.watcherExclude": {
109
- "**/.git/objects/**": true,
110
- "**/.git/subtree-cache/**": true,
111
- "**/node_modules/*/**": true
112
- },
113
- "git.openRepositoryInParentFolders": "always",
114
- "search.exclude": {
115
- "**/dist": true,
116
- "**/node_modules": true
117
- },
118
- // "editor.formatOnSaveMode": "modificationsIfAvailable",
119
- "search.followSymlinks": false,
120
- "search.useIgnoreFiles": true
121
- }
@@ -1,50 +0,0 @@
1
- import { createServer } from 'node:http';
2
- import next from 'next';
3
- import { launchEditorMiddleware } from '@react-dev-inspector/middleware';
4
-
5
- const dev = process.env.NODE_ENV !== 'production';
6
- const hostname = process.env.HOSTNAME || 'localhost';
7
- const port = parseInt(process.env.PORT || '3000', 10);
8
-
9
- const app = next({ dev, hostname, port });
10
- const handle = app.getRequestHandler();
11
-
12
- app.prepare().then(() => {
13
- createServer((req, res) => {
14
- /**
15
- * Middlewares, from top to bottom
16
- */
17
- const middlewares = [
18
- /**
19
- * react-dev-inspector middleware for launching editor
20
- * Only active in development mode
21
- */
22
- ...(dev ? [launchEditorMiddleware] : []),
23
-
24
- /**
25
- * Next.js default app handler
26
- */
27
- (req, res) => handle(req, res),
28
- ];
29
-
30
- /**
31
- * Build middleware pipeline using reduceRight
32
- * Executes middlewares from top to bottom
33
- */
34
- const middlewarePipeline = middlewares.reduceRight(
35
- (next, middleware) => () => {
36
- middleware(req, res, next);
37
- },
38
- () => {},
39
- );
40
-
41
- middlewarePipeline();
42
- })
43
- .once('error', (err) => {
44
- console.error(err);
45
- process.exit(1);
46
- })
47
- .listen(port, () => {
48
- console.log(`> Ready on http://${hostname}:${port}`);
49
- });
50
- });
@@ -1,7 +0,0 @@
1
- {
2
- "editor.formatOnSave": true,
3
- "editor.codeActionsOnSave": {
4
- "source.fixAll.eslint": "explicit"
5
- },
6
- "typescript.tsdk": "node_modules/typescript/lib"
7
- }