openmoneta-dev-kit 1.9.0 → 1.9.1

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/install.sh ADDED
@@ -0,0 +1,172 @@
1
+ #!/usr/bin/env bash
2
+ # install.sh - Cài OpenMoneta Dev Kit vào ~/.cursor/
3
+ # STRICT MODE: overwrite hoàn toàn các config (templates/skills/agents/hooks/scripts/hooks.json).
4
+ # An toàn: backup config cũ vào ~/.cursor/.backup-YYYYMMDD-HHMMSS/ trước khi overwrite.
5
+ #
6
+ # Usage:
7
+ # bash install.sh # Cài bình thường (interactive confirm)
8
+ # bash install.sh --yes # Cài không hỏi xác nhận (cho CI/auto)
9
+ # bash install.sh --no-backup # Skip backup (không khuyến nghị)
10
+
11
+ set -euo pipefail
12
+
13
+ AUTO_YES=0
14
+ DO_BACKUP=1
15
+ for arg in "$@"; do
16
+ case "$arg" in
17
+ --yes|-y) AUTO_YES=1 ;;
18
+ --no-backup) DO_BACKUP=0 ;;
19
+ --help|-h)
20
+ grep '^#' "$0" | sed 's/^# \?//' | head -10
21
+ exit 0
22
+ ;;
23
+ esac
24
+ done
25
+
26
+ REPO_DIR="$(cd "$(dirname "$0")" && pwd)"
27
+ CURSOR_DIR="$HOME/.cursor"
28
+ TIMESTAMP=$(date +%Y%m%d-%H%M%S)
29
+ BACKUP_DIR="$CURSOR_DIR/.backup-$TIMESTAMP"
30
+
31
+ echo "==> OpenMoneta Dev Kit Installer"
32
+ echo " Source: $REPO_DIR"
33
+ echo " Target: $CURSOR_DIR"
34
+ echo ""
35
+
36
+ if [[ ! -f "$REPO_DIR/VERSION" ]]; then
37
+ echo "[!] Không phải repo OpenMoneta Dev Kit (thiếu VERSION). Abort." >&2
38
+ exit 1
39
+ fi
40
+ NEW_VERSION=$(cat "$REPO_DIR/VERSION")
41
+
42
+ case "$(uname -s)" in
43
+ Darwin*|Linux*) ;;
44
+ *)
45
+ echo "[!] OS $(uname -s) không hỗ trợ bởi install.sh. Dùng install.ps1 cho Windows." >&2
46
+ exit 1
47
+ ;;
48
+ esac
49
+
50
+ MISSING_DEPS=()
51
+ for cmd in bash cp mkdir rm; do
52
+ command -v "$cmd" >/dev/null 2>&1 || MISSING_DEPS+=("$cmd")
53
+ done
54
+ if ! command -v jq >/dev/null 2>&1; then
55
+ echo "[WARNING] 'jq' không có trên PATH. Hooks vẫn chạy nhưng nên cài jq để có error message tốt hơn:"
56
+ echo " macOS: brew install jq"
57
+ echo " Ubuntu/Debian: sudo apt install jq"
58
+ echo ""
59
+ fi
60
+ if [[ ${#MISSING_DEPS[@]} -gt 0 ]]; then
61
+ echo "[!] Thiếu dependencies: ${MISSING_DEPS[*]}" >&2
62
+ exit 1
63
+ fi
64
+
65
+ # === Migration từ tên cũ "Cursor Team Developer" (v1.0.0) ===
66
+ LEGACY_VERSION_FILE="$CURSOR_DIR/.cursor-team-dev-version"
67
+ LEGACY_REPO_FILE="$CURSOR_DIR/.cursor-team-dev-repo"
68
+ LEGACY_INSTALL_FILE="$CURSOR_DIR/.cursor-team-dev-installed-at"
69
+ LEGACY_CHECK_FILE="$CURSOR_DIR/.cursor-team-dev-update-check"
70
+
71
+ NEW_VERSION_FILE="$CURSOR_DIR/.openmoneta-version"
72
+ NEW_REPO_FILE="$CURSOR_DIR/.openmoneta-repo"
73
+ NEW_INSTALL_FILE="$CURSOR_DIR/.openmoneta-installed-at"
74
+ NEW_CHECK_FILE="$CURSOR_DIR/.openmoneta-update-check"
75
+
76
+ if [[ -f "$LEGACY_VERSION_FILE" && ! -f "$NEW_VERSION_FILE" ]]; then
77
+ echo "==> Phát hiện cài đặt cũ 'Cursor Team Developer'. Migration sang 'OpenMoneta Dev Kit'..."
78
+ [[ -f "$LEGACY_VERSION_FILE" ]] && mv "$LEGACY_VERSION_FILE" "$NEW_VERSION_FILE" 2>/dev/null || true
79
+ [[ -f "$LEGACY_REPO_FILE" ]] && mv "$LEGACY_REPO_FILE" "$NEW_REPO_FILE" 2>/dev/null || true
80
+ [[ -f "$LEGACY_INSTALL_FILE" ]] && mv "$LEGACY_INSTALL_FILE" "$NEW_INSTALL_FILE" 2>/dev/null || true
81
+ [[ -f "$LEGACY_CHECK_FILE" ]] && rm -f "$LEGACY_CHECK_FILE"
82
+ echo " + Migration tracking files xong."
83
+ fi
84
+
85
+ EXISTING_VERSION=""
86
+ if [[ -f "$NEW_VERSION_FILE" ]]; then
87
+ EXISTING_VERSION=$(cat "$NEW_VERSION_FILE" 2>/dev/null || echo "unknown")
88
+ fi
89
+
90
+ if [[ -n "$EXISTING_VERSION" ]]; then
91
+ echo "Phát hiện cài đặt hiện tại: v$EXISTING_VERSION → sẽ ghi đè bằng v$NEW_VERSION"
92
+ else
93
+ echo "Cài đặt mới: v$NEW_VERSION"
94
+ fi
95
+
96
+ if [[ -d "$CURSOR_DIR" && $DO_BACKUP -eq 1 ]]; then
97
+ echo "Backup config cũ vào: $BACKUP_DIR"
98
+ fi
99
+
100
+ if [[ $AUTO_YES -eq 0 ]]; then
101
+ read -r -p "Tiếp tục? [y/N] " ans
102
+ if [[ "$ans" != "y" && "$ans" != "Y" ]]; then
103
+ echo "Hủy."
104
+ exit 0
105
+ fi
106
+ fi
107
+
108
+ mkdir -p "$CURSOR_DIR"
109
+ if [[ $DO_BACKUP -eq 1 ]]; then
110
+ echo ""
111
+ echo "==> Backup config hiện tại..."
112
+ mkdir -p "$BACKUP_DIR"
113
+ for item in templates skills agents hooks scripts hooks.json .openmoneta-version; do
114
+ SRC="$CURSOR_DIR/$item"
115
+ if [[ -e "$SRC" ]]; then
116
+ cp -R "$SRC" "$BACKUP_DIR/" 2>/dev/null || true
117
+ echo " + $item"
118
+ fi
119
+ done
120
+ if [[ -z "$(ls -A "$BACKUP_DIR" 2>/dev/null)" ]]; then
121
+ rmdir "$BACKUP_DIR" 2>/dev/null || true
122
+ echo " (không có gì để backup)"
123
+ fi
124
+ fi
125
+
126
+ echo ""
127
+ echo "==> Cài đặt config mới..."
128
+ for dir in templates skills agents hooks scripts; do
129
+ TARGET="$CURSOR_DIR/$dir"
130
+ if [[ -d "$TARGET" ]]; then
131
+ rm -rf "$TARGET"
132
+ fi
133
+ cp -R "$REPO_DIR/$dir" "$TARGET"
134
+ echo " + $dir/ (overwrite)"
135
+ done
136
+
137
+ cp "$REPO_DIR/hooks.json" "$CURSOR_DIR/hooks.json"
138
+ echo " + hooks.json"
139
+
140
+ echo ""
141
+ echo "==> Set executable permissions..."
142
+ chmod +x "$CURSOR_DIR/hooks/"*.sh 2>/dev/null || true
143
+ chmod +x "$CURSOR_DIR/scripts/"*.sh 2>/dev/null || true
144
+ chmod +x "$CURSOR_DIR/skills/automated-testing/scripts/"*.sh 2>/dev/null || true
145
+
146
+ echo "$NEW_VERSION" > "$NEW_VERSION_FILE"
147
+ echo "$REPO_DIR" > "$NEW_REPO_FILE"
148
+ date -Iseconds > "$NEW_INSTALL_FILE"
149
+ rm -f "$NEW_CHECK_FILE" 2>/dev/null || true
150
+
151
+ echo ""
152
+ echo "================================================"
153
+ echo "✅ Cài đặt thành công OpenMoneta Dev Kit v$NEW_VERSION"
154
+ echo "================================================"
155
+ echo ""
156
+ echo "Đã cài vào: $CURSOR_DIR/"
157
+ if [[ $DO_BACKUP -eq 1 && -d "$BACKUP_DIR" ]]; then
158
+ echo "Backup tại: $BACKUP_DIR/"
159
+ fi
160
+ echo ""
161
+ echo "Bước tiếp theo:"
162
+ echo " 1. Restart Cursor để hooks.json được load."
163
+ echo " 2. Mở chat mới - quy trình 6 bước (Adaptive Planning, B6 conditional, Lean Mode v$NEW_VERSION) sẽ tự inject."
164
+ echo " 3. Áp dụng cho project: bash ~/.cursor/scripts/init-project.sh /path/to/project"
165
+ echo ""
166
+ echo "Tài liệu chi tiết: $REPO_DIR/docs/INDEX.md"
167
+ echo ""
168
+ echo "Update sau này:"
169
+ echo " bash $REPO_DIR/update.sh"
170
+ echo ""
171
+ echo "Uninstall:"
172
+ echo " bash $REPO_DIR/uninstall.sh"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openmoneta-dev-kit",
3
- "version": "1.9.0",
3
+ "version": "1.9.1",
4
4
  "description": "OpenMoneta Dev Kit — Biến Cursor IDE / OpenCode thành team developer hoàn chỉnh với quy trình 6 bước, adaptive planning, hooks enforcement, và token-aware doc routing",
5
5
  "keywords": [
6
6
  "cursor",
@@ -29,7 +29,16 @@
29
29
  "hooks/",
30
30
  "scripts/",
31
31
  "opencode/",
32
- "hooks.json"
32
+ "install.sh",
33
+ "install-opencode.sh",
34
+ "install.ps1",
35
+ "install-opencode.ps1",
36
+ "uninstall.sh",
37
+ "uninstall.ps1",
38
+ "update.sh",
39
+ "update.ps1",
40
+ "hooks.json",
41
+ "VERSION"
33
42
  ],
34
43
  "engines": {
35
44
  "node": ">=16"
package/src/cli.js CHANGED
@@ -38,9 +38,9 @@ OpenMoneta Dev Kit v${v}
38
38
  ──────────────────────────────────────────────
39
39
  Biến Cursor IDE / OpenCode thành team developer hoàn chỉnh.
40
40
 
41
- openmoneta install Cài vào Cursor (~/.cursor/)
42
- openmoneta install --opencode Cài vào OpenCode (~/.config/opencode/)
43
- openmoneta install --yes Cài không hỏi xác nhận
41
+ openmoneta install Cài vào Cursor + OpenCode (mặc định)
42
+ openmoneta install --cursor Chỉ cài Cursor
43
+ openmoneta install --opencode Chỉ cài OpenCode
44
44
 
45
45
  openmoneta init Khởi tạo project (tạo AGENTS.md, docs/INDEX.md, plans/INDEX.md)
46
46
  openmoneta init --opencode Init cho OpenCode
@@ -1,50 +1,50 @@
1
1
  const { execSync } = require("node:child_process")
2
2
  const path = require("node:path")
3
- const { getPkgRoot, CURSOR_DIR, OPENCODE_DIR, isInstalled, REPO_DIR } = require("../lib/paths")
3
+ const { getPkgRoot } = require("../lib/paths")
4
4
  const { getLocalVersion } = require("../lib/version")
5
5
 
6
6
  async function run(args) {
7
- const isOpenCode = args.includes("--opencode")
8
7
  const autoYes = args.includes("--yes") || args.includes("-y")
9
- const target = isOpenCode ? "opencode" : "cursor"
8
+ const cursorOnly = args.includes("--cursor")
9
+ const opencodeOnly = args.includes("--opencode")
10
+ const both = !cursorOnly && !opencodeOnly
10
11
 
11
12
  const v = getLocalVersion() || "unknown"
12
- const targetDir = isOpenCode ? OPENCODE_DIR : CURSOR_DIR
13
- const targetLabel = isOpenCode ? "OpenCode" : "Cursor"
13
+ const pkgRoot = getPkgRoot()
14
14
 
15
- console.log(`\n 🔧 Cài OpenMoneta Dev Kit v${v} cho ${targetLabel}`)
16
- console.log(` Target: ${targetDir}`)
15
+ if (both) {
16
+ console.log(`\n 🔧 Cài OpenMoneta Dev Kit v${v} cho Cursor + OpenCode`)
17
+ } else if (cursorOnly) {
18
+ console.log(`\n 🔧 Cài OpenMoneta Dev Kit v${v} cho Cursor`)
19
+ } else {
20
+ console.log(`\n 🔧 Cài OpenMoneta Dev Kit v${v} cho OpenCode`)
21
+ }
17
22
 
18
- if (isInstalled(target) && !autoYes) {
19
- const readline = require("node:readline")
20
- const rl = readline.createInterface({ input: process.stdin, output: process.stdout })
21
- const answer = await new Promise((resolve) => {
22
- rl.question(`\n ${targetLabel} đã được cài. Ghi đè? [y/N] `, resolve)
23
- })
24
- rl.close()
25
- if (answer.toLowerCase() !== "y") {
26
- console.log(" Hủy.")
27
- return
23
+ // Cursor install
24
+ if (both || cursorOnly) {
25
+ try {
26
+ const cmd = `bash "${path.join(pkgRoot, "install.sh")}" --yes`
27
+ console.log(`\n Cursor...`)
28
+ execSync(cmd, { stdio: "inherit", cwd: pkgRoot })
29
+ console.log(` ✅ Cursor done.`)
30
+ } catch (err) {
31
+ console.error(` ❌ Cursor failed: ${err.message}`)
28
32
  }
29
33
  }
30
34
 
31
- const pkgRoot = getPkgRoot()
32
-
33
- if (isOpenCode) {
34
- console.log(`\n Not yet implemented: use bash install-opencode.sh for now.`)
35
- console.log(` bash ${path.join(pkgRoot, "install-opencode.sh")}${autoYes ? " --yes" : ""}`)
36
- return
35
+ // OpenCode install
36
+ if (both || opencodeOnly) {
37
+ try {
38
+ const cmd = `bash "${path.join(pkgRoot, "install-opencode.sh")}" --yes`
39
+ console.log(`\n ▶ OpenCode...`)
40
+ execSync(cmd, { stdio: "inherit", cwd: pkgRoot })
41
+ console.log(` ✅ OpenCode done.`)
42
+ } catch (err) {
43
+ console.error(` ❌ OpenCode failed: ${err.message}`)
44
+ }
37
45
  }
38
46
 
39
- // Call install.sh from package root
40
- try {
41
- const cmd = `bash "${path.join(pkgRoot, "install.sh")}"${autoYes ? " --yes" : ""}`
42
- console.log(`\n Running: ${cmd}`)
43
- execSync(cmd, { stdio: "inherit", cwd: pkgRoot })
44
- } catch (err) {
45
- console.error(`\n ❌ Cài đặt thất bại: ${err.message}`)
46
- process.exit(1)
47
- }
47
+ console.log(`\n 🎉 Hoàn tất. Restart Cursor/OpenCode để áp dụng.`)
48
48
  }
49
49
 
50
50
  module.exports = { run }
package/uninstall.ps1 ADDED
@@ -0,0 +1,86 @@
1
+ # uninstall.ps1 - Gỡ OpenMoneta Dev Kit khỏi ~/.cursor/ (Windows).
2
+
3
+ [CmdletBinding()]
4
+ param(
5
+ [switch]$Yes,
6
+ [switch]$Purge
7
+ )
8
+
9
+ $ErrorActionPreference = 'Stop'
10
+
11
+ $CursorDir = Join-Path $env:USERPROFILE '.cursor'
12
+
13
+ Write-Host "==> OpenMoneta Dev Kit Uninstaller (Windows)"
14
+ Write-Host " Target: $CursorDir"
15
+ Write-Host ""
16
+
17
+ $Restore = -not $Purge
18
+ $LatestBackup = $null
19
+
20
+ if ($Restore) {
21
+ $Backups = Get-ChildItem -Path $CursorDir -Directory -Filter '.backup-*' -ErrorAction SilentlyContinue | Sort-Object Name -Descending
22
+ if ($Backups) {
23
+ $LatestBackup = $Backups[0].FullName
24
+ Write-Host "Backup mới nhất: $LatestBackup"
25
+ Write-Host "Sẽ restore config cũ từ backup này."
26
+ } else {
27
+ Write-Host "[WARNING] Không tìm thấy backup. Sẽ chỉ XÓA config (không restore)." -ForegroundColor Yellow
28
+ $Restore = $false
29
+ }
30
+ } else {
31
+ Write-Host "Sẽ XÓA hoàn toàn các file OpenMoneta Dev Kit."
32
+ }
33
+
34
+ Write-Host ""
35
+ Write-Host "Sẽ xóa:"
36
+ $Items = @(
37
+ 'templates', 'skills', 'agents', 'hooks', 'scripts', 'hooks.json',
38
+ '.openmoneta-version', '.openmoneta-repo', '.openmoneta-installed-at', '.openmoneta-update-check',
39
+ '.cursor-team-dev-version', '.cursor-team-dev-repo', '.cursor-team-dev-installed-at', '.cursor-team-dev-update-check'
40
+ )
41
+ foreach ($item in $Items) {
42
+ $p = Join-Path $CursorDir $item
43
+ if (Test-Path $p) {
44
+ Write-Host " - $p"
45
+ }
46
+ }
47
+
48
+ if (-not $Yes) {
49
+ Write-Host ""
50
+ $ans = Read-Host "Tiếp tục? [y/N]"
51
+ if ($ans -notin @('y', 'Y', 'yes', 'YES')) {
52
+ Write-Host "Hủy."
53
+ exit 0
54
+ }
55
+ }
56
+
57
+ Write-Host ""
58
+ Write-Host "==> Xóa config..."
59
+ foreach ($item in $Items) {
60
+ $p = Join-Path $CursorDir $item
61
+ if (Test-Path $p) {
62
+ Remove-Item $p -Recurse -Force
63
+ Write-Host " - $item"
64
+ }
65
+ }
66
+
67
+ if ($Restore -and $LatestBackup -and (Test-Path $LatestBackup)) {
68
+ Write-Host ""
69
+ Write-Host "==> Restore từ backup..."
70
+ foreach ($item in @('templates', 'skills', 'agents', 'hooks', 'scripts', 'hooks.json', '.openmoneta-version', '.cursor-team-dev-version')) {
71
+ $src = Join-Path $LatestBackup $item
72
+ if (Test-Path $src) {
73
+ Copy-Item -Path $src -Destination $CursorDir -Recurse -Force
74
+ Write-Host " + $item"
75
+ }
76
+ }
77
+ Write-Host ""
78
+ Write-Host "Restored từ $LatestBackup" -ForegroundColor Green
79
+ Write-Host "Backup folder vẫn còn ở $LatestBackup, xóa thủ công nếu muốn."
80
+ } else {
81
+ Write-Host ""
82
+ Write-Host "Đã uninstall." -ForegroundColor Green
83
+ }
84
+
85
+ Write-Host ""
86
+ Write-Host "Restart Cursor để áp dụng."
package/uninstall.sh ADDED
@@ -0,0 +1,93 @@
1
+ #!/usr/bin/env bash
2
+ # uninstall.sh - Gỡ OpenMoneta Dev Kit khỏi ~/.cursor/.
3
+ # Có 2 mode: restore từ backup gần nhất, hoặc xóa hoàn toàn.
4
+
5
+ set -euo pipefail
6
+
7
+ CURSOR_DIR="$HOME/.cursor"
8
+ AUTO_YES=0
9
+ RESTORE=1
10
+
11
+ for arg in "$@"; do
12
+ case "$arg" in
13
+ --yes|-y) AUTO_YES=1 ;;
14
+ --purge) RESTORE=0 ;;
15
+ --help|-h)
16
+ cat <<EOF
17
+ Usage:
18
+ bash uninstall.sh # Restore từ backup mới nhất (default)
19
+ bash uninstall.sh --purge # Xóa hoàn toàn, không restore
20
+ bash uninstall.sh --yes # Skip confirm
21
+ EOF
22
+ exit 0
23
+ ;;
24
+ esac
25
+ done
26
+
27
+ echo "==> OpenMoneta Dev Kit Uninstaller"
28
+ echo " Target: $CURSOR_DIR"
29
+ echo ""
30
+
31
+ LATEST_BACKUP=""
32
+ if [[ $RESTORE -eq 1 ]]; then
33
+ LATEST_BACKUP=$(ls -1d "$CURSOR_DIR"/.backup-* 2>/dev/null | sort -r | head -1 || true)
34
+ if [[ -z "$LATEST_BACKUP" ]]; then
35
+ echo "[WARNING] Không tìm thấy backup. Sẽ chỉ XÓA config (không restore)."
36
+ RESTORE=0
37
+ else
38
+ echo "Backup mới nhất: $LATEST_BACKUP"
39
+ echo "Sẽ restore config cũ từ backup này."
40
+ fi
41
+ else
42
+ echo "Sẽ XÓA hoàn toàn các file OpenMoneta Dev Kit."
43
+ fi
44
+
45
+ echo ""
46
+ echo "Sẽ xóa:"
47
+ ITEMS=(templates skills agents hooks scripts hooks.json
48
+ .openmoneta-version .openmoneta-repo .openmoneta-installed-at .openmoneta-update-check
49
+ .cursor-team-dev-version .cursor-team-dev-repo .cursor-team-dev-installed-at .cursor-team-dev-update-check)
50
+ for item in "${ITEMS[@]}"; do
51
+ if [[ -e "$CURSOR_DIR/$item" ]]; then
52
+ echo " - $CURSOR_DIR/$item"
53
+ fi
54
+ done
55
+
56
+ if [[ $AUTO_YES -eq 0 ]]; then
57
+ echo ""
58
+ read -r -p "Tiếp tục? [y/N] " ans
59
+ if [[ "$ans" != "y" && "$ans" != "Y" ]]; then
60
+ echo "Hủy."
61
+ exit 0
62
+ fi
63
+ fi
64
+
65
+ echo ""
66
+ echo "==> Xóa config..."
67
+ for item in "${ITEMS[@]}"; do
68
+ if [[ -e "$CURSOR_DIR/$item" ]]; then
69
+ rm -rf "$CURSOR_DIR/$item"
70
+ echo " - $item"
71
+ fi
72
+ done
73
+
74
+ if [[ $RESTORE -eq 1 && -d "$LATEST_BACKUP" ]]; then
75
+ echo ""
76
+ echo "==> Restore từ backup..."
77
+ for item in templates skills agents hooks scripts hooks.json .openmoneta-version .cursor-team-dev-version; do
78
+ SRC="$LATEST_BACKUP/$item"
79
+ if [[ -e "$SRC" ]]; then
80
+ cp -R "$SRC" "$CURSOR_DIR/"
81
+ echo " + $item"
82
+ fi
83
+ done
84
+ echo ""
85
+ echo "✅ Restored từ $LATEST_BACKUP"
86
+ echo "Backup folder vẫn còn ở $LATEST_BACKUP, xóa thủ công nếu muốn."
87
+ else
88
+ echo ""
89
+ echo "✅ Đã uninstall."
90
+ fi
91
+
92
+ echo ""
93
+ echo "Restart Cursor để áp dụng."