@deveco/deveco-code 0.1.10-rc.0 → 0.2.0-s-rc.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/CHANGELOG.md CHANGED
@@ -1,168 +1,5 @@
1
1
  # Changelog
2
2
 
3
- ## v0.1.10 (2026-08-29)
4
-
5
- ### DevEco Code 核心
6
-
7
- #### 新特性
8
-
9
- - 新增 `--auto`/`--yolo` 权限自动批准标志,跳过工具调用确认(`89c7804`)
10
- - 更新内置 DevEco CLI 至 v1.3.0(`c95e744`、`ecd05b6`)
11
-
12
- #### 优化
13
-
14
- - 移除过时的 `DEVECO_DEFAULTS` 回退逻辑(`f353e9a`)
15
-
16
- #### 缺陷修复
17
-
18
- - 修复登录 URL 在 Windows 上无法通过 shell 打开的问题(`185b685`)
19
- - 限制会话重试次数,配额耗尽时提前终止(`10f8246`)
20
-
21
- ### TUI 终端界面
22
-
23
- #### 新特性
24
-
25
- - 新增 subagent 监控侧边栏面板(`57be7fa`)
26
- - 流式编辑统计改为按行计数(`690909f`)
27
-
28
- #### 缺陷修复
29
-
30
- - 修复模板化技能体的技能徽章渲染问题(`0c326df`)
31
- - 优化收集对话框交互细节(`e1816523`)
32
-
33
- ## v0.1.9 (2026-08-20)
34
-
35
- ### DevEco Code 核心
36
-
37
- #### 新特性
38
-
39
- - 内置 [DevEco CLI](https://gitcode.com/openharmony-sig/deveco-cli),封装 `ohpm`、`hvigor`、`hdc` 等工具链,集成脚手架、技能安装与 MCP 服务
40
-
41
- #### 优化
42
-
43
- - 加固 Windows 安装程序:新增互斥锁防并发安装、失败自动重试、原子切换启动器(`1452fe8`)
44
-
45
- #### 缺陷修复
46
-
47
- - 修复 Windows baseline 包 CLI 入口缺失问题(`437de3d`)
48
-
49
- ### TUI 终端界面
50
-
51
- #### 优化
52
-
53
- - 音频播放支持设备热切换:输出设备变更时自动重新绑定,恢复播放(`2bf3a39`)
54
- - 更新日志导出命令的国际化描述(`73882b9`)
55
-
56
- ## v0.1.8 (2026-08-18)
57
-
58
- ### DevEco Code 核心
59
-
60
- #### 新特性
61
-
62
- - 新增 Web UI 服务,支持通过浏览器直接访问 DevEco Code(`9d0e9ad`、`f11cd68`)
63
- - 凭证存储采用操作系统钥匙串加密,提升静态安全性(`02271d0`)
64
- - 登录流程新增第三方供应商确认环节(`1cf075d`)
65
- - 地区访问策略新增欧洲时区限制(`cf5b6c0`)
66
-
67
- #### 优化
68
-
69
- - 版本检查改为后台异步执行,不阻塞启动流程(`6174dc9`)
70
-
71
- #### 缺陷修复
72
-
73
- - 多项安全加固:防御路径穿越与 SQL 注入、SSRF 与 HTML 注入防护、认证 Cookie 加固、分享 ID 防猜测、图标上传校验、账单 URL 加固、管理员权限校验、密钥字段重命名、移除 URL 中的认证参数(`86d6cfc`、`d75cad2`、`8ef8464`、`e1442c6`、`6b5f93f`、`4957539`、`e26bc29`、`ba09517`、`d033446`、`67b45f3`、`9fec08d`、`76dc880`、`e89f08d`、`96f78c1`、`5ffe841`、`c6f60db`、`5bb6e89`、`745d33a`、`598b1c4`、`35e5a31`)
74
- - 修复 TLS 密码套件兼容性问题,适配 BoringSSL 环境(`2e16be9`、`cded53e`、`86d5be8`、`f1d0b45`、`7982bc8`、`bf1f25a`)
75
- - 修复版本检查挂起导致自升级失败,消除重复升级通知(`1a03fa6`、`f3c75ba`、`6b92f54`、`44fd3e1`)
76
- - 修复会话排序因 ID 回绕导致乱序(`340893e`)
77
- - 修复重跑失败命令问题,新增 list-issues 命令(`5de32c2`)
78
- - 加固 ui-verification 进程清理与环境变量限制(`bead02d`、`0cc4a4d`)
79
- - 修复 Web 搜索 API 密钥传递方式(`a7d9a23`)
80
- - 修复地区受限错误未正确展示(`5b4eb0e`)
81
- - 移除内置默认模型回退逻辑(`53c7042`)
82
- - 修复实名认证状态检查返回缓存数据导致状态不同步(`e4d8905`)
83
- - 修复 token 刷新失败时未正确触发重新登录(`e842e4e`)
84
-
85
- #### 文档
86
-
87
- - 统一 CLAUDE.md 与 AGENTS.md 规范(`119f9f7`、`b4766ae`)
88
-
89
- ### TUI 终端界面
90
-
91
- #### 新特性
92
-
93
- - 新增 token 用量统计,支持 verbose 模式查看(`51c36bd`)
94
-
95
- #### 优化
96
-
97
- - 版本检查流程重构:后台异步检查并展示 spinner 动画,升级等待界面显示 logo(`d6472f5`、`1a7c557`、`44fd3e1`)
98
-
99
- #### 缺陷修复
100
-
101
- - 修复升级状态管理:成功后清除状态、消除重复通知弹窗(`f3c75ba`、`6b92f54`)
102
- - 修复升级进度条卡顿问题(`1a7c557`)
103
- - 修复日志导出对话框 URL 校验(`31ac49c`)
104
-
105
- ## v0.1.7 (2026-08-03)
106
-
107
- ### DevEco Code 核心
108
-
109
- #### 新特性
110
-
111
- - 地区访问策略新增 UTC+8 偏移回退与系统区域检测,扩展中国时区白名单(`bc637c8`)
112
-
113
- ### TUI 终端界面
114
-
115
- #### 缺陷修复
116
-
117
- - 修复流式编辑/写入字数统计因 JSON 转义未解码导致计数虚高(`a6e432e`)
118
- - 修复启动时布局竞争导致的偶现启动失败问题(`c17c895`)
119
-
120
- ## v0.1.6 (2026-08-01)
121
-
122
- ### DevEco Code 核心
123
-
124
- #### 新特性
125
-
126
- - 新增地区访问策略,基于时区与实名国籍限制中国大陆区域使用(`5810c71`、`2e408b5`)
127
- - 集成 Magpie 埋点:采集工具调用链路,复用端点配置,过滤非 DevEco 事件,优化归因精度与统一同意管理(`8a0413a`、`6e6043e`、`1776688`、`766509a`、`fbfd228`、`4a888ee`)
128
- - 新增 GitCode CI/CD 工作流,涵盖发版、类型检查与测试(`7df5df8`)
129
-
130
- #### 缺陷修复
131
-
132
- - 安全加固:密码采用恒定时间比对、登录 URL 防命令注入、工具参数限制为 JSON(`20e4567`、`9fb4045`、`273b7d7`)
133
-
134
- ### TUI 终端界面
135
-
136
- #### 新特性
137
-
138
- - 编辑流式输出时实时显示字数统计(`af0d72d`)
139
-
140
- #### 优化
141
-
142
- - 移除 `/btw` 命令说明文本(`c0191d1`)
143
-
144
- ## v0.1.5 (2026-07-27)
145
-
146
- ### DevEco Code 核心
147
-
148
- #### 新特性
149
-
150
- - 启动前弹出工作区信任确认,防止在不受信目录下误执行(`e4c18b6`)
151
-
152
- ### TUI 终端界面
153
-
154
- #### 新特性
155
-
156
- - 新增通知设置对话框,支持全局开关、音量调节及 6 类事件的独立音效选择(`c3f91a6`)
157
-
158
- #### 优化
159
-
160
- - 移除日志收集菜单与崩溃后自动上报弹窗(`0483e25`)
161
-
162
- #### 缺陷修复
163
-
164
- - 规范化 btw 浮层错误展示:按错误码映射 i18n 文案,修复出错时提示键误显示(`1f0e98e`)
165
-
166
3
  ## v0.1.4 (2026-07-24)
167
4
 
168
5
  ### DevEco Code 核心
package/bin/deveco.exe ADDED
@@ -0,0 +1,10 @@
1
+ echo "Error: deveco-ai's postinstall script was not run." >&2
2
+ echo "" >&2
3
+ echo "This occurs when using --ignore-scripts during installation, or when using a" >&2
4
+ echo "package manager like pnpm that does not run postinstall scripts by default." >&2
5
+ echo "" >&2
6
+ echo "To fix this, run the postinstall script manually:" >&2
7
+ echo " cd node_modules/deveco-ai && node postinstall.mjs" >&2
8
+ echo "" >&2
9
+ echo "Or reinstall deveco-ai without the --ignore-scripts flag." >&2
10
+ exit 1
package/package.json CHANGED
@@ -1,13 +1,22 @@
1
1
  {
2
2
  "name": "@deveco/deveco-code",
3
3
  "bin": {
4
- "deveco": "./bin/deveco"
4
+ "deveco": "./bin/deveco.exe"
5
5
  },
6
6
  "scripts": {
7
- "postinstall": "bun ./postinstall.mjs || node ./postinstall.mjs"
7
+ "postinstall": "node ./postinstall.mjs"
8
8
  },
9
- "version": "0.1.10-rc.0",
9
+ "version": "0.2.0-s-rc.0",
10
10
  "license": "MIT",
11
+ "os": [
12
+ "darwin",
13
+ "linux",
14
+ "win32"
15
+ ],
16
+ "cpu": [
17
+ "arm64",
18
+ "x64"
19
+ ],
11
20
  "files": [
12
21
  "bin/**/*",
13
22
  "postinstall.mjs",
@@ -16,12 +25,12 @@
16
25
  "CHANGELOG.md"
17
26
  ],
18
27
  "optionalDependencies": {
19
- "@deveco/deveco-code-darwin-x64": "0.1.10-rc.0",
20
- "@deveco/deveco-code-darwin-arm64": "0.1.10-rc.0",
21
- "@deveco/deveco-code-windows-x64-baseline": "0.1.10-rc.0",
22
- "@deveco/deveco-code-windows-x64": "0.1.10-rc.0"
28
+ "@deveco/deveco-code-darwin-x64": "0.2.0-s-rc.0",
29
+ "@deveco/deveco-code-windows-x64-baseline": "0.2.0-s-rc.0",
30
+ "@deveco/deveco-code-darwin-arm64": "0.2.0-s-rc.0",
31
+ "@deveco/deveco-code-windows-x64": "0.2.0-s-rc.0"
23
32
  },
24
33
  "dependencies": {
25
- "@deveco/deveco-cli": "1.3.0"
34
+ "@deveco/deveco-cli": "1.3.0-stable"
26
35
  }
27
36
  }
package/postinstall.mjs CHANGED
@@ -28,6 +28,7 @@ const scope = packageJson.name && packageJson.name.includes("/") ? packageJson.n
28
28
  const base = `${scope}/deveco-code-${platform}-${arch}`
29
29
  const sourceBinary = platform === "windows" ? "deveco.exe" : "deveco"
30
30
  const targetBinary = path.join(__dirname, "bin", "deveco.exe")
31
+ const devecoCliEntryMarker = path.join(__dirname, "vendor", ".deveco-cli-entry")
31
32
  const devecoCliPackageName = "@deveco/deveco-cli"
32
33
 
33
34
  function resolveLocalDevecoCliEntry() {
@@ -37,10 +38,9 @@ function resolveLocalDevecoCliEntry() {
37
38
  throw new Error(`Local dependency "${devecoCliPackageName}" has no CLI entry at ${entry}.`)
38
39
  }
39
40
 
40
- function writeDevecoCliEntryMarker(installRoot) {
41
- const marker = path.join(installRoot, "vendor", ".deveco-cli-entry")
42
- fs.mkdirSync(path.dirname(marker), { recursive: true })
43
- fs.writeFileSync(marker, `${resolveLocalDevecoCliEntry()}\n`, "utf8")
41
+ function writeDevecoCliEntryMarker() {
42
+ fs.mkdirSync(path.dirname(devecoCliEntryMarker), { recursive: true })
43
+ fs.writeFileSync(devecoCliEntryMarker, `${resolveLocalDevecoCliEntry()}\n`, "utf8")
44
44
  }
45
45
 
46
46
  function supportsAvx2() {
@@ -244,14 +244,12 @@ function verifyBinary() {
244
244
  }
245
245
 
246
246
  function main() {
247
- writeDevecoCliEntryMarker(__dirname)
247
+ writeDevecoCliEntryMarker()
248
248
 
249
249
  for (const name of packageNames()) {
250
250
  try {
251
- const packageDir = resolvePackageDir(name)
252
251
  copyBinary(resolveBinary(name), targetBinary)
253
- copyVendor(packageDir)
254
- writeDevecoCliEntryMarker(packageDir)
252
+ copyVendor(resolvePackageDir(name))
255
253
  if (verifyBinary()) return
256
254
  } catch {
257
255
  if (installPackage(name) && verifyBinary()) return
package/bin/deveco DELETED
@@ -1,206 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- const childProcess = require("child_process")
4
- const fs = require("fs")
5
- const path = require("path")
6
- const os = require("os")
7
-
8
- const forwardedSignals = ["SIGINT", "SIGTERM", "SIGHUP"]
9
-
10
- function run(target) {
11
- const child = childProcess.spawn(target, process.argv.slice(2), {
12
- stdio: "inherit",
13
- })
14
-
15
- child.on("error", (error) => {
16
- console.error(error.message)
17
- process.exit(1)
18
- })
19
-
20
- const forwarders = {}
21
- for (const signal of forwardedSignals) {
22
- forwarders[signal] = () => {
23
- try {
24
- child.kill(signal)
25
- } catch {
26
- // The child may have already exited.
27
- }
28
- }
29
- process.on(signal, forwarders[signal])
30
- }
31
-
32
- child.on("exit", (code, signal) => {
33
- for (const forwardedSignal of forwardedSignals) {
34
- process.removeListener(forwardedSignal, forwarders[forwardedSignal])
35
- }
36
-
37
- if (signal) {
38
- process.kill(process.pid, signal)
39
- return
40
- }
41
-
42
- process.exit(typeof code === "number" ? code : 0)
43
- })
44
- }
45
-
46
- const envPath = process.env.DEVECO_BIN_PATH
47
-
48
- const scriptPath = fs.realpathSync(__filename)
49
- const scriptDir = path.dirname(scriptPath)
50
-
51
- //
52
- const cached = path.join(scriptDir, ".deveco")
53
-
54
- const platformMap = {
55
- darwin: "darwin",
56
- linux: "linux",
57
- win32: "windows",
58
- }
59
- const archMap = {
60
- x64: "x64",
61
- arm64: "arm64",
62
- arm: "arm",
63
- }
64
-
65
- let platform = platformMap[os.platform()]
66
- if (!platform) {
67
- platform = os.platform()
68
- }
69
- let arch = archMap[os.arch()]
70
- if (!arch) {
71
- arch = os.arch()
72
- }
73
- let mainPkg = {}
74
- try {
75
- mainPkg = JSON.parse(fs.readFileSync(path.join(scriptDir, "..", "package.json"), "utf8"))
76
- } catch {
77
- // dev mode or missing package.json
78
- }
79
- const scope = mainPkg.name && mainPkg.name.includes("/") ? mainPkg.name.split("/")[0] : "@deveco"
80
- const base = scope + "/deveco-code-" + platform + "-" + arch
81
- const binary = platform === "windows" ? "deveco.exe" : "deveco"
82
-
83
- function supportsAvx2() {
84
- if (arch !== "x64") return false
85
-
86
- if (platform === "linux") {
87
- try {
88
- return /(^|\s)avx2(\s|$)/i.test(fs.readFileSync("/proc/cpuinfo", "utf8"))
89
- } catch {
90
- return false
91
- }
92
- }
93
-
94
- if (platform === "darwin") {
95
- try {
96
- const result = childProcess.spawnSync("sysctl", ["-n", "hw.optional.avx2_0"], {
97
- encoding: "utf8",
98
- timeout: 1500,
99
- })
100
- if (result.status !== 0) return false
101
- return (result.stdout || "").trim() === "1"
102
- } catch {
103
- return false
104
- }
105
- }
106
-
107
- if (platform === "windows") {
108
- const cmd =
109
- '(Add-Type -MemberDefinition "[DllImport(""kernel32.dll"")] public static extern bool IsProcessorFeaturePresent(int ProcessorFeature);" -Name Kernel32 -Namespace Win32 -PassThru)::IsProcessorFeaturePresent(40)'
110
-
111
- for (const exe of ["powershell.exe", "pwsh.exe", "pwsh", "powershell"]) {
112
- try {
113
- const result = childProcess.spawnSync(exe, ["-NoProfile", "-NonInteractive", "-Command", cmd], {
114
- encoding: "utf8",
115
- timeout: 3000,
116
- windowsHide: true,
117
- })
118
- if (result.status !== 0) continue
119
- const out = (result.stdout || "").trim().toLowerCase()
120
- if (out === "true" || out === "1") return true
121
- if (out === "false" || out === "0") return false
122
- } catch {
123
- continue
124
- }
125
- }
126
-
127
- return false
128
- }
129
-
130
- return false
131
- }
132
-
133
- const names = (() => {
134
- const avx2 = supportsAvx2()
135
- const baseline = arch === "x64" && !avx2
136
-
137
- if (platform === "linux") {
138
- const musl = (() => {
139
- try {
140
- if (fs.existsSync("/etc/alpine-release")) return true
141
- } catch {
142
- // ignore
143
- }
144
-
145
- try {
146
- const result = childProcess.spawnSync("ldd", ["--version"], { encoding: "utf8" })
147
- const text = ((result.stdout || "") + (result.stderr || "")).toLowerCase()
148
- if (text.includes("musl")) return true
149
- } catch {
150
- // ignore
151
- }
152
-
153
- return false
154
- })()
155
-
156
- if (musl) {
157
- if (arch === "x64") {
158
- if (baseline) return [`${base}-baseline-musl`, `${base}-musl`, `${base}-baseline`, base]
159
- return [`${base}-musl`, `${base}-baseline-musl`, base, `${base}-baseline`]
160
- }
161
- return [`${base}-musl`, base]
162
- }
163
-
164
- if (arch === "x64") {
165
- if (baseline) return [`${base}-baseline`, base, `${base}-baseline-musl`, `${base}-musl`]
166
- return [base, `${base}-baseline`, `${base}-musl`, `${base}-baseline-musl`]
167
- }
168
- return [base, `${base}-musl`]
169
- }
170
-
171
- if (arch === "x64") {
172
- if (baseline) return [`${base}-baseline`, base]
173
- return [base, `${base}-baseline`]
174
- }
175
- return [base]
176
- })()
177
-
178
- function findBinary(startDir) {
179
- let current = startDir
180
- for (;;) {
181
- const modules = path.join(current, "node_modules")
182
- if (fs.existsSync(modules)) {
183
- for (const name of names) {
184
- const candidate = path.join(modules, name, "bin", binary)
185
- if (fs.existsSync(candidate)) return candidate
186
- }
187
- }
188
- const parent = path.dirname(current)
189
- if (parent === current) {
190
- return
191
- }
192
- current = parent
193
- }
194
- }
195
-
196
- const resolved = envPath || (fs.existsSync(cached) ? cached : findBinary(scriptDir))
197
- if (!resolved) {
198
- console.error(
199
- "It seems that your package manager failed to install the right version of the deveco CLI for your platform. You can try manually installing " +
200
- names.map((n) => `\"${n}\"`).join(" or ") +
201
- " package",
202
- )
203
- process.exit(1)
204
- }
205
-
206
- run(resolved)