termify-agent 1.0.45 → 1.0.46

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "termify-agent",
3
- "version": "1.0.45",
3
+ "version": "1.0.46",
4
4
  "description": "Termify Agent CLI - Connect your local terminal to Termify",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -13,13 +13,15 @@ set -euo pipefail
13
13
  SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
14
14
  PACKAGE_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
15
15
  BUILD_DIR="$PACKAGE_DIR/build/releases"
16
+ NODE_CACHE_DIR="$PACKAGE_DIR/build/node-cache"
16
17
 
17
18
  # Read version from package.json
18
- VERSION=$(node -e "console.log(require('./package.json').version)" 2>/dev/null) || {
19
+ VERSION=$(node -e "console.log(require('$PACKAGE_DIR/package.json').version)" 2>/dev/null) || {
19
20
  echo "ERROR: Cannot read version from package.json"
20
21
  exit 1
21
22
  }
22
23
 
24
+ NODE_VERSION="20.18.3"
23
25
  PLATFORMS="darwin-arm64 darwin-x64 linux-x64 linux-arm64"
24
26
 
25
27
  # Parse args
@@ -102,7 +104,52 @@ find "$SHARED_STAGING/node_modules" -type d \( \
102
104
  find "$SHARED_STAGING/dist" -name "*.js.map" -delete 2>/dev/null || true
103
105
  find "$SHARED_STAGING/dist" -name "*.d.ts" -delete 2>/dev/null || true
104
106
 
107
+ # ─── Download Node.js binaries ─────────────────────────────────────────────
108
+
109
+ download_node() {
110
+ local plat="$1"
111
+ local node_os node_arch
112
+
113
+ case "$plat" in
114
+ darwin-arm64) node_os="darwin"; node_arch="arm64" ;;
115
+ darwin-x64) node_os="darwin"; node_arch="x64" ;;
116
+ linux-arm64) node_os="linux"; node_arch="arm64" ;;
117
+ linux-x64) node_os="linux"; node_arch="x64" ;;
118
+ esac
119
+
120
+ local cache_file="$NODE_CACHE_DIR/node-v${NODE_VERSION}-${node_os}-${node_arch}"
121
+ if [ -f "$cache_file/bin/node" ]; then
122
+ echo " Node.js $NODE_VERSION (cached)"
123
+ return 0
124
+ fi
125
+
126
+ local tarball_name="node-v${NODE_VERSION}-${node_os}-${node_arch}.tar.xz"
127
+ local url="https://nodejs.org/dist/v${NODE_VERSION}/${tarball_name}"
128
+ local tmp_dir=$(mktemp -d)
129
+
130
+ echo " Downloading Node.js $NODE_VERSION for ${node_os}-${node_arch}..."
131
+ curl -fsSL "$url" -o "$tmp_dir/$tarball_name" || {
132
+ rm -rf "$tmp_dir"
133
+ echo " ERROR: Failed to download Node.js for $plat"
134
+ return 1
135
+ }
136
+
137
+ tar xJf "$tmp_dir/$tarball_name" -C "$tmp_dir"
138
+ local extracted=$(find "$tmp_dir" -maxdepth 1 -type d -name "node-v*" | head -1)
139
+
140
+ mkdir -p "$cache_file"
141
+ # Only keep bin/node (and bin/npm, bin/npx for postinstall)
142
+ mkdir -p "$cache_file/bin"
143
+ cp "$extracted/bin/node" "$cache_file/bin/"
144
+ chmod +x "$cache_file/bin/node"
145
+
146
+ rm -rf "$tmp_dir"
147
+ echo " Node.js $NODE_VERSION downloaded"
148
+ }
149
+
105
150
  # Build per platform
151
+ mkdir -p "$NODE_CACHE_DIR"
152
+
106
153
  for PLAT in $PLATFORMS; do
107
154
  echo ""
108
155
  echo " Building $PLAT..."
@@ -121,9 +168,18 @@ for PLAT in $PLATFORMS; do
121
168
  fi
122
169
  done
123
170
 
171
+ # Bundle Node.js
172
+ download_node "$PLAT"
173
+ PLAT_OS="${PLAT%%-*}"
174
+ PLAT_ARCH="${PLAT##*-}"
175
+ mkdir -p "$STAGING/node/bin"
176
+ cp "$NODE_CACHE_DIR/node-v${NODE_VERSION}-${PLAT_OS}-${PLAT_ARCH}/bin/node" "$STAGING/node/bin/"
177
+ chmod +x "$STAGING/node/bin/node"
178
+
124
179
  # Count binaries
125
180
  BIN_COUNT=$(ls "$STAGING/binaries/" 2>/dev/null | wc -l | tr -d ' ')
126
181
  echo " Binaries included: $BIN_COUNT"
182
+ echo " Node.js bundled: yes"
127
183
 
128
184
  # Create tarball
129
185
  TARBALL_NAME="termify-agent-${VERSION}-${PLAT}.tar.gz"
@@ -147,7 +203,8 @@ for PLAT in $PLATFORMS; do
147
203
  TARBALL_NAME="termify-agent-${VERSION}-${PLAT}.tar.gz"
148
204
  if [ -f "$BUILD_DIR/$TARBALL_NAME" ]; then
149
205
  SIZE=$(wc -c < "$BUILD_DIR/$TARBALL_NAME" | tr -d ' ')
150
- SHA=$(shasum -a 256 "$BUILD_DIR/$TARBALL_NAME" | cut -d' ' -f1)
206
+ SHA=$(sha256sum "$BUILD_DIR/$TARBALL_NAME" 2>/dev/null || shasum -a 256 "$BUILD_DIR/$TARBALL_NAME")
207
+ SHA=$(echo "$SHA" | cut -d' ' -f1)
151
208
  if [ "$FIRST" = true ]; then
152
209
  FIRST=false
153
210
  else
@@ -0,0 +1,153 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # publish-bundles.sh — Copia MCPs y hooks al servidor y genera manifest.json
4
+ #
5
+ # Uso: ./scripts/publish-bundles.sh
6
+ # Ejecutar desde packages/termify-agent/
7
+
8
+ set -euo pipefail
9
+
10
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
+ PKG_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
12
+ DEST_DIR="$(cd "$PKG_ROOT/../../apps/server/public/downloads/bundles" && pwd)"
13
+
14
+ MCP_DIR="$PKG_ROOT/mcp"
15
+ HOOKS_DIR="$PKG_ROOT/hooks"
16
+
17
+ echo "📦 Publishing bundles..."
18
+ echo " Source MCPs: $MCP_DIR"
19
+ echo " Source hooks: $HOOKS_DIR"
20
+ echo " Destination: $DEST_DIR"
21
+ echo ""
22
+
23
+ # Ensure destination exists
24
+ mkdir -p "$DEST_DIR"
25
+
26
+ # Copy MCP bundles
27
+ for f in "$MCP_DIR"/*.mjs; do
28
+ [ -f "$f" ] || continue
29
+ cp "$f" "$DEST_DIR/"
30
+ echo " ✓ $(basename "$f")"
31
+ done
32
+
33
+ # Copy hooks
34
+ for f in "$HOOKS_DIR"/*.js; do
35
+ [ -f "$f" ] || continue
36
+ cp "$f" "$DEST_DIR/"
37
+ echo " ✓ $(basename "$f")"
38
+ done
39
+
40
+ echo ""
41
+ echo "📝 Generating manifest.json..."
42
+
43
+ # Generate manifest
44
+ MANIFEST="$DEST_DIR/manifest.json"
45
+
46
+ # Build MCPs array
47
+ mcps_json="["
48
+ first=true
49
+ for f in "$MCP_DIR"/*.mjs; do
50
+ [ -f "$f" ] || continue
51
+ filename="$(basename "$f")"
52
+ sha256="$(shasum -a 256 "$f" | awk '{print $1}')"
53
+ size="$(stat -f%z "$f" 2>/dev/null || stat -c%s "$f" 2>/dev/null)"
54
+
55
+ # Derive install dir and filename from bundle name
56
+ case "$filename" in
57
+ termify-mcp-bundle.mjs)
58
+ install_dir="termify-mcp"
59
+ install_filename="index.mjs"
60
+ mcp_id="termify-status"
61
+ ;;
62
+ memsearch-mcp-server.mjs)
63
+ install_dir="memsearch-mcp"
64
+ install_filename="server.mjs"
65
+ mcp_id="memsearch"
66
+ ;;
67
+ nanobanana-mcp-bundle.mjs)
68
+ install_dir="nanobanana-mcp"
69
+ install_filename="index.mjs"
70
+ mcp_id="nanobanana"
71
+ ;;
72
+ *)
73
+ install_dir="${filename%.mjs}-mcp"
74
+ install_filename="index.mjs"
75
+ mcp_id="${filename%.mjs}"
76
+ ;;
77
+ esac
78
+
79
+ if [ "$first" = true ]; then first=false; else mcps_json+=","; fi
80
+ mcps_json+=$(cat <<ENTRY
81
+ {
82
+ "id": "$mcp_id",
83
+ "file": "$filename",
84
+ "sha256": "$sha256",
85
+ "size": $size,
86
+ "installDir": "$install_dir",
87
+ "installFilename": "$install_filename"
88
+ }
89
+ ENTRY
90
+ )
91
+ done
92
+ mcps_json+="]"
93
+
94
+ # Build hooks array
95
+ hooks_json="["
96
+ first=true
97
+ for f in "$HOOKS_DIR"/*.js; do
98
+ [ -f "$f" ] || continue
99
+ filename="$(basename "$f")"
100
+ sha256="$(shasum -a 256 "$f" | awk '{print $1}')"
101
+ size="$(stat -f%z "$f" 2>/dev/null || stat -c%s "$f" 2>/dev/null)"
102
+
103
+ if [ "$first" = true ]; then first=false; else hooks_json+=","; fi
104
+ hooks_json+=$(cat <<ENTRY
105
+ { "file": "$filename", "sha256": "$sha256", "size": $size }
106
+ ENTRY
107
+ )
108
+ done
109
+ hooks_json+="]"
110
+
111
+ generated_at="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
112
+
113
+ cat > "$MANIFEST" <<MANIFEST_EOF
114
+ {
115
+ "version": 1,
116
+ "generatedAt": "$generated_at",
117
+ "mcps": $mcps_json,
118
+ "hooks": $hooks_json,
119
+ "hookDefinitions": {
120
+ "claude": {
121
+ "UserPromptSubmit": ["termify-sync.js"],
122
+ "Stop": ["termify-response.js"],
123
+ "PreToolUse": [
124
+ { "file": "termify-tool-hook.js" },
125
+ { "file": "termify-question-hook.js", "matcher": "AskUserQuestion" },
126
+ { "file": "termify-needs-input-hook.js", "matcher": "ExitPlanMode" },
127
+ { "file": "termify-needs-input-hook.js", "matcher": "EnterPlanMode" }
128
+ ],
129
+ "PostToolUse": ["termify-tool-hook.js"]
130
+ },
131
+ "gemini": {
132
+ "BeforeAgent": ["termify-sync.js"],
133
+ "AfterAgent": ["termify-response.js"]
134
+ },
135
+ "codex": {
136
+ "notify": ["termify-codex-notify.js"]
137
+ }
138
+ },
139
+ "mcpRegistrations": {
140
+ "claude": { "termify-status": {}, "nanobanana": {} },
141
+ "codex": { "termify-status": {}, "memsearch": {}, "nanobanana": {} },
142
+ "gemini": { "memsearch": {}, "nanobanana": {} },
143
+ "mcpConfig": { "termify-status": {}, "memsearch": {}, "nanobanana": {} }
144
+ }
145
+ }
146
+ MANIFEST_EOF
147
+
148
+ echo " ✓ manifest.json generated"
149
+ echo ""
150
+
151
+ # Count files
152
+ total=$(ls -1 "$DEST_DIR" | wc -l | tr -d ' ')
153
+ echo "✅ Published $total files to $DEST_DIR"