dsh-vibe-math 2.0.1 → 2.0.2

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 (2) hide show
  1. package/installer.js +35 -1
  2. package/package.json +1 -1
package/installer.js CHANGED
@@ -24,7 +24,7 @@
24
24
  // are preserved and reported via the logger.
25
25
  // - same version: no-op (idempotent). Missing files are ALWAYS restored.
26
26
  // - force a full refresh at any time: delete the preset dirs and restart DSH.
27
- import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs'
27
+ import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync, unlinkSync, rmdirSync } from 'node:fs'
28
28
  import { createHash } from 'node:crypto'
29
29
  import { homedir } from 'node:os'
30
30
  import { dirname, join } from 'node:path'
@@ -195,8 +195,42 @@ export async function apply(ctx) {
195
195
  }
196
196
  }
197
197
 
198
+ // Clean up preset dirs that this bundle NO LONGER manages (e.g. vibe-math-v1 after it was
199
+ // removed at v2.0.0). The copy loop only adds/updates PRESETS; it never deletes a preset that
200
+ // was dropped, so an old removed preset would linger in the picker forever. Here we remove the
201
+ // files this installer previously recorded as package-owned under a prefix that is no longer in
202
+ // PRESETS, then drop the dir if it became empty. User-owned files (provenance 'user') are kept.
203
+ const currentPrefixes = new Set(PRESETS.map(p => p.src + '/'))
204
+ let removedFiles = 0
205
+ let removedDirs = []
206
+ const stale = new Map() // prefix -> [keys]
207
+ for (const key of Object.keys(prevFiles)) {
208
+ const slash = key.indexOf('/')
209
+ if (slash === -1) continue
210
+ const prefix = key.slice(0, slash + 1)
211
+ if (currentPrefixes.has(prefix)) continue
212
+ if (!stale.has(prefix)) stale.set(prefix, [])
213
+ stale.get(prefix).push(key)
214
+ }
215
+ for (const [prefix, keys] of stale) {
216
+ let dirEmpty = true
217
+ for (const key of keys) {
218
+ const rec = (prevFiles[key] && typeof prevFiles[key] === 'object') ? prevFiles[key] : { provenance: 'package' }
219
+ if (rec.provenance === 'user') { dirEmpty = false; continue } // 用户文件 → 保留
220
+ const f = join(presetRoot, key)
221
+ if (existsSync(f)) { try { unlinkSync(f); removedFiles += 1 } catch (e) {} }
222
+ if (existsSync(f)) dirEmpty = false
223
+ }
224
+ const dir = join(presetRoot, prefix.slice(0, -1))
225
+ if (dirEmpty && existsSync(dir)) { try { rmdirSync(dir); removedDirs.push(dir) } catch (e) {} }
226
+ }
227
+
198
228
  writeState(stateFile, { version: pkgVersion, files: nextFiles, updatedAt: Date.now() })
199
229
 
230
+ if (removedFiles > 0 || removedDirs.length > 0) {
231
+ logger?.info?.('[dsh-vibe-math] preset cleanup: removed ' + removedFiles + ' file(s) from ' + removedDirs.length + ' stale preset dir(s) (' + removedDirs.map(d => d.split(/[\\/]/).pop()).join(', ') + ') that are no longer shipped.')
232
+ }
233
+
200
234
  if (isUpgrade) {
201
235
  logger?.info?.('[dsh-vibe-math] preset auto-update: version ' + (state.version || '(none)') + ' → ' + pkgVersion +
202
236
  ' — 新增 ' + installed + ' 个文件,更新 ' + updated + ' 个文件' +
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dsh-vibe-math",
3
3
  "description": "Multi-agent mathematical problem-solving & verification frameworks for DeepSeek Harness — THREE agent presets in one install: vibe-math-v2 (probability-driven: qs.json + Propos knowledge base + explorer→solver→review/debate verdict), vibe-math-v3 (THIRD-generation, recommended: paper-style Markdown knowledge base with Problems/Progress/Propos/Methods/Verified + planner-agent scheduling that decides the next N actions + universal theory/method invention library + agents write their own Markdown directly via a per-file write lock), and vibe-math-v4 (FOURTH-generation: persistent self-organizing resident subagents that message & meet to decide all tasks, verify only by unanimous consensus, /compact at a context threshold, and stop only when all agree the problem is solved). Installing this bundle auto-installs all three presets (v1 was removed at v2.0.0).",
4
- "version": "2.0.1",
4
+ "version": "2.0.2",
5
5
  "type": "module",
6
6
  "main": "installer.js",
7
7
  "exports": {