@stackmemoryai/stackmemory 0.3.17 โ†’ 0.3.19

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 (234) hide show
  1. package/dist/cli/claude-sm.js +51 -5
  2. package/dist/cli/claude-sm.js.map +2 -2
  3. package/dist/cli/codex-sm.js +52 -19
  4. package/dist/cli/codex-sm.js.map +2 -2
  5. package/dist/cli/commands/db.js +143 -0
  6. package/dist/cli/commands/db.js.map +7 -0
  7. package/dist/cli/commands/login.js +50 -0
  8. package/dist/cli/commands/login.js.map +7 -0
  9. package/dist/cli/commands/migrate.js +178 -0
  10. package/dist/cli/commands/migrate.js.map +7 -0
  11. package/dist/cli/commands/onboard.js +158 -2
  12. package/dist/cli/commands/onboard.js.map +2 -2
  13. package/dist/cli/commands/skills.js +15 -2
  14. package/dist/cli/commands/skills.js.map +2 -2
  15. package/dist/cli/index.js +118 -834
  16. package/dist/cli/index.js.map +3 -3
  17. package/dist/core/context/dual-stack-manager.js +1 -1
  18. package/dist/core/context/dual-stack-manager.js.map +1 -1
  19. package/dist/core/context/frame-database.js +1 -0
  20. package/dist/core/context/frame-database.js.map +2 -2
  21. package/dist/core/context/frame-manager.js +59 -2
  22. package/dist/core/context/frame-manager.js.map +2 -2
  23. package/dist/core/database/database-adapter.js +6 -1
  24. package/dist/core/database/database-adapter.js.map +2 -2
  25. package/dist/core/database/sqlite-adapter.js +60 -2
  26. package/dist/core/database/sqlite-adapter.js.map +2 -2
  27. package/dist/integrations/claude-code/subagent-client.js +106 -3
  28. package/dist/integrations/claude-code/subagent-client.js.map +2 -2
  29. package/dist/servers/railway/config.js +51 -0
  30. package/dist/servers/railway/config.js.map +7 -0
  31. package/dist/servers/railway/index-enhanced.js +156 -0
  32. package/dist/servers/railway/index-enhanced.js.map +7 -0
  33. package/dist/servers/railway/index.js +843 -82
  34. package/dist/servers/railway/index.js.map +3 -3
  35. package/dist/servers/railway/minimal.js +48 -3
  36. package/dist/servers/railway/minimal.js.map +2 -2
  37. package/dist/servers/railway/storage-test.js +455 -0
  38. package/dist/servers/railway/storage-test.js.map +7 -0
  39. package/dist/skills/claude-skills.js +13 -12
  40. package/dist/skills/claude-skills.js.map +2 -2
  41. package/dist/skills/recursive-agent-orchestrator.js +27 -18
  42. package/dist/skills/recursive-agent-orchestrator.js.map +2 -2
  43. package/dist/skills/unified-rlm-orchestrator.js.map +2 -2
  44. package/package.json +13 -21
  45. package/scripts/README-TESTING.md +186 -0
  46. package/scripts/analyze-cli-security.js +288 -0
  47. package/scripts/archive/add-phase-tasks-to-linear.js +163 -0
  48. package/scripts/archive/analyze-linear-duplicates.js +214 -0
  49. package/scripts/archive/analyze-remaining-duplicates.js +230 -0
  50. package/scripts/archive/analyze-sta-duplicates.js +292 -0
  51. package/scripts/archive/analyze-sta-graphql.js +399 -0
  52. package/scripts/archive/cancel-duplicate-tasks.ts +246 -0
  53. package/scripts/archive/check-all-duplicates.ts +419 -0
  54. package/scripts/archive/clean-duplicate-tasks.js +114 -0
  55. package/scripts/archive/cleanup-duplicate-tasks.ts +286 -0
  56. package/scripts/archive/create-phase-tasks.js +387 -0
  57. package/scripts/archive/delete-linear-duplicates.js +182 -0
  58. package/scripts/archive/delete-remaining-duplicates.js +158 -0
  59. package/scripts/archive/delete-sta-duplicates.js +201 -0
  60. package/scripts/archive/delete-sta-oauth.js +201 -0
  61. package/scripts/archive/export-sta-tasks.js +62 -0
  62. package/scripts/archive/install-auto-sync.js +266 -0
  63. package/scripts/archive/install-chromadb-hooks.sh +133 -0
  64. package/scripts/archive/install-enhanced-clear-hooks.sh +431 -0
  65. package/scripts/archive/install-post-task-hooks.sh +289 -0
  66. package/scripts/archive/install-stackmemory-hooks.sh +420 -0
  67. package/scripts/archive/merge-linear-duplicates-safe.ts +362 -0
  68. package/scripts/archive/merge-linear-duplicates.ts +180 -0
  69. package/scripts/archive/remove-sta-tasks.js +70 -0
  70. package/scripts/archive/setup-background-sync.sh +168 -0
  71. package/scripts/archive/setup-claude-auto-triggers.sh +181 -0
  72. package/scripts/archive/setup-claude-autostart.sh +305 -0
  73. package/scripts/archive/setup-git-hooks.sh +25 -0
  74. package/scripts/archive/setup-linear-oauth.sh +46 -0
  75. package/scripts/archive/setup-mcp.sh +113 -0
  76. package/scripts/archive/setup-railway-deployment.sh +81 -0
  77. package/scripts/auto-handoff.sh +262 -0
  78. package/scripts/background-sync-manager.js +416 -0
  79. package/scripts/benchmark-performance.ts +57 -0
  80. package/scripts/check-redis.ts +48 -0
  81. package/scripts/chromadb-auto-loader.sh +128 -0
  82. package/scripts/chromadb-context-loader.js +479 -0
  83. package/scripts/claude-chromadb-hook.js +460 -0
  84. package/scripts/claude-code-wrapper.sh +66 -0
  85. package/scripts/claude-linear-skill.js +455 -0
  86. package/scripts/claude-pre-commit.sh +302 -0
  87. package/scripts/claude-sm-autostart.js +532 -0
  88. package/scripts/claude-sm-setup.sh +367 -0
  89. package/scripts/claude-with-chromadb.sh +69 -0
  90. package/scripts/claude-worktree-manager.sh +323 -0
  91. package/scripts/claude-worktree-monitor.sh +371 -0
  92. package/scripts/claude-worktree-setup.sh +327 -0
  93. package/scripts/clean-linear-backlog.js +273 -0
  94. package/scripts/cleanup-old-sessions.sh +57 -0
  95. package/scripts/codex-wrapper.sh +88 -0
  96. package/scripts/create-sandbox.sh +269 -0
  97. package/scripts/debug-linear-update.js +174 -0
  98. package/scripts/delete-linear-tasks.js +167 -0
  99. package/scripts/deploy.sh +89 -0
  100. package/scripts/deployment/railway.sh +352 -0
  101. package/scripts/deployment/test-deployment.js +194 -0
  102. package/scripts/detect-and-rehydrate.js +162 -0
  103. package/scripts/detect-and-rehydrate.mjs +165 -0
  104. package/scripts/development/create-demo-tasks.js +143 -0
  105. package/scripts/development/debug-frame-test.js +16 -0
  106. package/scripts/development/demo-auto-sync.js +128 -0
  107. package/scripts/development/fix-all-imports.js +213 -0
  108. package/scripts/development/fix-imports.js +229 -0
  109. package/scripts/development/fix-lint-loop.cjs +103 -0
  110. package/scripts/development/fix-project-id.ts +161 -0
  111. package/scripts/development/fix-strict-mode-issues.ts +291 -0
  112. package/scripts/development/reorganize-structure.sh +228 -0
  113. package/scripts/development/test-persistence-direct.js +148 -0
  114. package/scripts/development/test-persistence.js +114 -0
  115. package/scripts/development/test-tasks.js +93 -0
  116. package/scripts/development/update-imports.js +212 -0
  117. package/scripts/fetch-linear-status.js +125 -0
  118. package/scripts/git-hooks/README.md +310 -0
  119. package/scripts/git-hooks/branch-context-manager.sh +342 -0
  120. package/scripts/git-hooks/post-checkout-stackmemory.sh +63 -0
  121. package/scripts/git-hooks/post-commit-stackmemory.sh +305 -0
  122. package/scripts/git-hooks/pre-commit-stackmemory.sh +275 -0
  123. package/scripts/hooks/cleanup-shell.sh +130 -0
  124. package/scripts/hooks/task-complete.sh +114 -0
  125. package/scripts/initialize.ts +129 -0
  126. package/scripts/install-claude-hooks-auto.js +104 -0
  127. package/scripts/install-claude-hooks.sh +133 -0
  128. package/scripts/install-global.sh +296 -0
  129. package/scripts/install.sh +235 -0
  130. package/scripts/linear-auto-sync.js +262 -0
  131. package/scripts/linear-auto-sync.sh +161 -0
  132. package/scripts/linear-sync-daemon.js +150 -0
  133. package/scripts/linear-task-review.js +237 -0
  134. package/scripts/list-linear-tasks.ts +178 -0
  135. package/scripts/mcp-proxy.js +66 -0
  136. package/scripts/opencode-wrapper.sh +85 -0
  137. package/scripts/publish-local.js +74 -0
  138. package/scripts/query-chromadb.ts +201 -0
  139. package/scripts/railway-env-setup.sh +39 -0
  140. package/scripts/reconcile-local-tasks.js +170 -0
  141. package/scripts/recreate-frames-db.js +89 -0
  142. package/scripts/setup/claude-integration.js +138 -0
  143. package/scripts/setup/configure-alias.js +125 -0
  144. package/scripts/setup/configure-codex-alias.js +161 -0
  145. package/scripts/setup/configure-opencode-alias.js +175 -0
  146. package/scripts/setup-claude-integration.js +204 -0
  147. package/scripts/setup-claude-integration.sh +183 -0
  148. package/scripts/setup-railway-deployment.sh +37 -0
  149. package/scripts/setup.sh +31 -0
  150. package/scripts/show-linear-summary.ts +172 -0
  151. package/scripts/stackmemory-auto-handoff.sh +231 -0
  152. package/scripts/stackmemory-daemon.sh +40 -0
  153. package/scripts/start-linear-sync-daemon.sh +141 -0
  154. package/scripts/start-temporal-paradox.sh +214 -0
  155. package/scripts/status.ts +159 -0
  156. package/scripts/sync-and-clean-tasks.js +258 -0
  157. package/scripts/sync-frames-from-railway.js +228 -0
  158. package/scripts/sync-linear-graphql.js +303 -0
  159. package/scripts/sync-linear-tasks.js +186 -0
  160. package/scripts/test-auto-triggers.sh +57 -0
  161. package/scripts/test-browser-mcp.js +74 -0
  162. package/scripts/test-chromadb-full.js +115 -0
  163. package/scripts/test-chromadb-hooks.sh +28 -0
  164. package/scripts/test-chromadb-sync.ts +245 -0
  165. package/scripts/test-cli-security.js +293 -0
  166. package/scripts/test-hooks-persistence.sh +220 -0
  167. package/scripts/test-installation-scenarios.sh +359 -0
  168. package/scripts/test-installation.sh +224 -0
  169. package/scripts/test-mcp.js +163 -0
  170. package/scripts/test-pre-publish-quick.sh +75 -0
  171. package/scripts/test-quality-gates.sh +263 -0
  172. package/scripts/test-railway-db.js +222 -0
  173. package/scripts/test-redis-storage.ts +490 -0
  174. package/scripts/test-rlm-basic.sh +122 -0
  175. package/scripts/test-rlm-comprehensive.sh +260 -0
  176. package/scripts/test-rlm-e2e.sh +268 -0
  177. package/scripts/test-rlm-simple.js +90 -0
  178. package/scripts/test-rlm.js +110 -0
  179. package/scripts/test-session-handoff.sh +165 -0
  180. package/scripts/test-shell-integration.sh +275 -0
  181. package/scripts/testing/ab-test-runner.ts +508 -0
  182. package/scripts/testing/collect-metrics.ts +457 -0
  183. package/scripts/testing/quick-effectiveness-demo.js +187 -0
  184. package/scripts/testing/real-performance-test.js +422 -0
  185. package/scripts/testing/run-effectiveness-tests.sh +176 -0
  186. package/scripts/testing/scripts/testing/ab-test-runner.js +363 -0
  187. package/scripts/testing/scripts/testing/collect-metrics.js +292 -0
  188. package/scripts/testing/simple-effectiveness-test.js +310 -0
  189. package/scripts/testing/src/core/context/context-bridge.js +253 -0
  190. package/scripts/testing/src/core/context/frame-manager.js +746 -0
  191. package/scripts/testing/src/core/context/shared-context-layer.js +437 -0
  192. package/scripts/testing/src/core/database/database-adapter.js +54 -0
  193. package/scripts/testing/src/core/errors/index.js +291 -0
  194. package/scripts/testing/src/core/errors/recovery.js +268 -0
  195. package/scripts/testing/src/core/monitoring/logger.js +145 -0
  196. package/scripts/testing/src/core/retrieval/context-retriever.js +516 -0
  197. package/scripts/testing/src/core/session/index.js +1 -0
  198. package/scripts/testing/src/core/session/session-manager.js +323 -0
  199. package/scripts/testing/src/core/trace/cli-trace-wrapper.js +140 -0
  200. package/scripts/testing/src/core/trace/db-trace-wrapper.js +251 -0
  201. package/scripts/testing/src/core/trace/debug-trace.js +398 -0
  202. package/scripts/testing/src/core/trace/index.js +120 -0
  203. package/scripts/testing/src/core/trace/linear-api-wrapper.js +204 -0
  204. package/scripts/update-linear-status.js +268 -0
  205. package/scripts/update-linear-tasks-fixed.js +284 -0
  206. package/scripts/verify-railway-schema.ts +35 -0
  207. package/templates/claude-hooks/hooks.json +5 -0
  208. package/templates/claude-hooks/on-clear.js +56 -0
  209. package/templates/claude-hooks/on-startup.js +56 -0
  210. package/templates/claude-hooks/tool-use-trace.js +67 -0
  211. package/dist/features/tui/components/analytics-panel.js +0 -157
  212. package/dist/features/tui/components/analytics-panel.js.map +0 -7
  213. package/dist/features/tui/components/frame-visualizer.js +0 -377
  214. package/dist/features/tui/components/frame-visualizer.js.map +0 -7
  215. package/dist/features/tui/components/pr-tracker.js +0 -135
  216. package/dist/features/tui/components/pr-tracker.js.map +0 -7
  217. package/dist/features/tui/components/session-monitor.js +0 -299
  218. package/dist/features/tui/components/session-monitor.js.map +0 -7
  219. package/dist/features/tui/components/subagent-fleet.js +0 -395
  220. package/dist/features/tui/components/subagent-fleet.js.map +0 -7
  221. package/dist/features/tui/components/task-board.js +0 -1139
  222. package/dist/features/tui/components/task-board.js.map +0 -7
  223. package/dist/features/tui/index.js +0 -408
  224. package/dist/features/tui/index.js.map +0 -7
  225. package/dist/features/tui/services/data-service.js +0 -641
  226. package/dist/features/tui/services/data-service.js.map +0 -7
  227. package/dist/features/tui/services/linear-task-reader.js +0 -102
  228. package/dist/features/tui/services/linear-task-reader.js.map +0 -7
  229. package/dist/features/tui/services/websocket-client.js +0 -162
  230. package/dist/features/tui/services/websocket-client.js.map +0 -7
  231. package/dist/features/tui/terminal-compat.js +0 -220
  232. package/dist/features/tui/terminal-compat.js.map +0 -7
  233. package/dist/features/tui/types.js +0 -1
  234. package/dist/features/tui/types.js.map +0 -7
@@ -0,0 +1,168 @@
1
+ #!/bin/bash
2
+
3
+ # Setup script for StackMemory Background Sync
4
+ # Configures automatic background syncing via cron or launchd
5
+
6
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
+ PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
8
+
9
+ echo "๐Ÿš€ StackMemory Background Sync Setup"
10
+ echo "===================================="
11
+ echo ""
12
+
13
+ # Detect OS
14
+ if [[ "$OSTYPE" == "darwin"* ]]; then
15
+ OS="macos"
16
+ echo "โœ… Detected macOS - will use launchd"
17
+ else
18
+ OS="linux"
19
+ echo "โœ… Detected Linux - will use cron"
20
+ fi
21
+
22
+ # Check for Node.js
23
+ if ! command -v node &> /dev/null; then
24
+ echo "โŒ Node.js is required but not installed"
25
+ exit 1
26
+ fi
27
+
28
+ echo ""
29
+ echo "๐Ÿ“‹ Available sync tasks:"
30
+ echo " 1. Linear task sync (hourly)"
31
+ echo " 2. Context & frame sync (15 min)"
32
+ echo " 3. Cloud backup (4 hours)"
33
+ echo " 4. Redis cache sync (5 min)"
34
+ echo " 5. Cross-session sync (10 min)"
35
+ echo ""
36
+
37
+ if [ "$OS" == "macos" ]; then
38
+ # macOS - Create launchd plist
39
+ PLIST_FILE="$HOME/Library/LaunchAgents/com.stackmemory.sync.plist"
40
+
41
+ echo "Creating launchd service..."
42
+
43
+ cat > "$PLIST_FILE" << EOF
44
+ <?xml version="1.0" encoding="UTF-8"?>
45
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
46
+ <plist version="1.0">
47
+ <dict>
48
+ <key>Label</key>
49
+ <string>com.stackmemory.sync</string>
50
+
51
+ <key>ProgramArguments</key>
52
+ <array>
53
+ <string>/usr/local/bin/node</string>
54
+ <string>$PROJECT_DIR/scripts/background-sync-manager.js</string>
55
+ </array>
56
+
57
+ <key>WorkingDirectory</key>
58
+ <string>$PROJECT_DIR</string>
59
+
60
+ <key>RunAtLoad</key>
61
+ <true/>
62
+
63
+ <key>KeepAlive</key>
64
+ <true/>
65
+
66
+ <key>StandardOutPath</key>
67
+ <string>$HOME/.stackmemory/sync-output.log</string>
68
+
69
+ <key>StandardErrorPath</key>
70
+ <string>$HOME/.stackmemory/sync-error.log</string>
71
+
72
+ <key>EnvironmentVariables</key>
73
+ <dict>
74
+ <key>PATH</key>
75
+ <string>/usr/local/bin:/usr/bin:/bin</string>
76
+ <key>HOME</key>
77
+ <string>$HOME</string>
78
+ </dict>
79
+ </dict>
80
+ </plist>
81
+ EOF
82
+
83
+ echo "โœ… Launchd service created"
84
+ echo ""
85
+ echo "To start the service now:"
86
+ echo " launchctl load $PLIST_FILE"
87
+ echo ""
88
+ echo "To stop the service:"
89
+ echo " launchctl unload $PLIST_FILE"
90
+ echo ""
91
+ echo "The service will start automatically on login."
92
+
93
+ else
94
+ # Linux - Create cron jobs
95
+ echo "Setting up cron jobs..."
96
+
97
+ # Create cron entries
98
+ CRON_ENTRIES=""
99
+
100
+ # Linear sync - every hour
101
+ CRON_ENTRIES="$CRON_ENTRIES
102
+ 0 * * * * cd $PROJECT_DIR && /usr/bin/node scripts/sync-linear-graphql.js >> $HOME/.stackmemory/linear-sync.log 2>&1"
103
+
104
+ # Context sync - every 15 minutes
105
+ CRON_ENTRIES="$CRON_ENTRIES
106
+ */15 * * * * cd $PROJECT_DIR && /usr/bin/node scripts/sync-context.js >> $HOME/.stackmemory/context-sync.log 2>&1"
107
+
108
+ # Backup - every 4 hours
109
+ CRON_ENTRIES="$CRON_ENTRIES
110
+ 0 */4 * * * cd $PROJECT_DIR && /usr/bin/node scripts/backup-stackmemory.js >> $HOME/.stackmemory/backup.log 2>&1"
111
+
112
+ # Add to crontab
113
+ (crontab -l 2>/dev/null | grep -v "stackmemory"; echo "$CRON_ENTRIES") | crontab -
114
+
115
+ echo "โœ… Cron jobs created"
116
+ echo ""
117
+ echo "Current cron jobs:"
118
+ crontab -l | grep stackmemory
119
+ fi
120
+
121
+ # Create convenience scripts
122
+ cat > "$PROJECT_DIR/sync-status.sh" << 'EOF'
123
+ #!/bin/bash
124
+ if [[ "$OSTYPE" == "darwin"* ]]; then
125
+ launchctl list | grep stackmemory
126
+ else
127
+ ps aux | grep -E "background-sync-manager|sync-linear" | grep -v grep
128
+ fi
129
+ EOF
130
+ chmod +x "$PROJECT_DIR/sync-status.sh"
131
+
132
+ cat > "$PROJECT_DIR/sync-logs.sh" << 'EOF'
133
+ #!/bin/bash
134
+ LOG_DIR="$HOME/.stackmemory"
135
+ echo "๐Ÿ“„ Recent sync activity:"
136
+ echo ""
137
+ if [ -f "$LOG_DIR/sync-manager.log" ]; then
138
+ tail -20 "$LOG_DIR/sync-manager.log"
139
+ fi
140
+ EOF
141
+ chmod +x "$PROJECT_DIR/sync-logs.sh"
142
+
143
+ echo ""
144
+ echo "โœ… Setup complete!"
145
+ echo ""
146
+ echo "๐Ÿ“Œ Useful commands:"
147
+ echo " ./sync-status.sh - Check sync status"
148
+ echo " ./sync-logs.sh - View sync logs"
149
+ echo ""
150
+ echo "๐Ÿ”‘ Environment variables to set in .env:"
151
+ echo " LINEAR_API_KEY - For Linear sync"
152
+ echo " REDIS_URL - For Redis cache (optional)"
153
+ echo " AWS_S3_BUCKET - For S3 backup (optional)"
154
+ echo " GCS_BUCKET - For GCS backup (optional)"
155
+ echo ""
156
+
157
+ # Ask to start now
158
+ read -p "Start background sync now? (y/n) " -n 1 -r
159
+ echo
160
+ if [[ $REPLY =~ ^[Yy]$ ]]; then
161
+ if [ "$OS" == "macos" ]; then
162
+ launchctl load "$HOME/Library/LaunchAgents/com.stackmemory.sync.plist"
163
+ echo "โœ… Background sync started!"
164
+ else
165
+ nohup node "$PROJECT_DIR/scripts/background-sync-manager.js" > "$HOME/.stackmemory/sync-manager.log" 2>&1 &
166
+ echo "โœ… Background sync started! PID: $!"
167
+ fi
168
+ fi
@@ -0,0 +1,181 @@
1
+ #!/bin/bash
2
+
3
+ # StackMemory Auto-Triggers Setup for Claude Code
4
+ # Sets up automatic context saving and session handoffs
5
+
6
+ set -e
7
+
8
+ echo "๐Ÿš€ StackMemory Auto-Triggers Setup for Claude Code"
9
+ echo "=================================================="
10
+ echo ""
11
+
12
+ # Check if StackMemory is installed
13
+ if ! command -v stackmemory &> /dev/null; then
14
+ echo "โŒ StackMemory is not installed"
15
+ echo "Install with: npm install -g @stackmemoryai/stackmemory"
16
+ exit 1
17
+ fi
18
+
19
+ # Check if in a project directory
20
+ if [ ! -d ".stackmemory" ]; then
21
+ echo "โš ๏ธ StackMemory not initialized in this directory"
22
+ echo "Run: stackmemory init"
23
+ read -p "Initialize now? (y/n): " -n 1 -r
24
+ echo
25
+ if [[ $REPLY =~ ^[Yy]$ ]]; then
26
+ stackmemory init
27
+ else
28
+ exit 1
29
+ fi
30
+ fi
31
+
32
+ echo "โœ… StackMemory detected"
33
+ echo ""
34
+
35
+ # Configure auto-triggers
36
+ echo "๐Ÿ“ Configuring auto-triggers..."
37
+
38
+ # Create config if it doesn't exist
39
+ CONFIG_FILE=".stackmemory/config.json"
40
+ if [ ! -f "$CONFIG_FILE" ]; then
41
+ echo '{}' > "$CONFIG_FILE"
42
+ fi
43
+
44
+ # Update config with auto-trigger settings
45
+ node -e "
46
+ const fs = require('fs');
47
+ const config = JSON.parse(fs.readFileSync('$CONFIG_FILE', 'utf8'));
48
+
49
+ // Monitor settings
50
+ config.monitor = {
51
+ ...config.monitor,
52
+ contextWarningThreshold: 0.6,
53
+ contextCriticalThreshold: 0.7,
54
+ contextAutoSaveThreshold: 0.85,
55
+ checkIntervalSeconds: 30,
56
+ idleTimeoutMinutes: 5,
57
+ autoSaveLedger: true,
58
+ autoGenerateHandoff: true,
59
+ sessionEndHandoff: true
60
+ };
61
+
62
+ // Clear survival settings
63
+ config.clearSurvival = {
64
+ ...config.clearSurvival,
65
+ autoSave: true,
66
+ autoSaveThreshold: 0.7
67
+ };
68
+
69
+ // Handoff settings
70
+ config.handoff = {
71
+ ...config.handoff,
72
+ autoGenerate: true,
73
+ idleThresholdMinutes: 5
74
+ };
75
+
76
+ fs.writeFileSync('$CONFIG_FILE', JSON.stringify(config, null, 2));
77
+ console.log('โœ… Configuration updated');
78
+ "
79
+
80
+ # Install Claude Code hooks
81
+ echo ""
82
+ echo "๐Ÿ“ฆ Installing Claude Code hooks..."
83
+
84
+ CLAUDE_HOOKS_DIR="$HOME/.claude/hooks"
85
+ mkdir -p "$CLAUDE_HOOKS_DIR"
86
+
87
+ # Create on-startup hook
88
+ cat > "$CLAUDE_HOOKS_DIR/on-startup" << 'EOF'
89
+ #!/bin/bash
90
+ # Auto-start StackMemory monitor on Claude Code startup
91
+
92
+ # Start monitor if project has StackMemory
93
+ if [ -d ".stackmemory" ]; then
94
+ stackmemory monitor --start 2>/dev/null || true
95
+ echo "๐Ÿ” StackMemory monitor started"
96
+ fi
97
+
98
+ # Load previous handoff if exists
99
+ if [ -d ".stackmemory/handoffs" ]; then
100
+ stackmemory handoff --load 2>/dev/null || true
101
+ fi
102
+
103
+ # Check and restore from ledger if needed
104
+ stackmemory clear --restore 2>/dev/null || true
105
+ EOF
106
+ chmod +x "$CLAUDE_HOOKS_DIR/on-startup"
107
+
108
+ # Create on-message hook
109
+ cat > "$CLAUDE_HOOKS_DIR/on-message" << 'EOF'
110
+ #!/bin/bash
111
+ # Update activity and check context on each message
112
+
113
+ # Update activity timestamp
114
+ stackmemory monitor --activity 2>/dev/null || true
115
+
116
+ # Check context usage (silent unless critical)
117
+ CONTEXT_STATUS=$(stackmemory clear --check 2>/dev/null | grep -o '[0-9]\+%' | head -1 | tr -d '%' || echo "0")
118
+ if [ "${CONTEXT_STATUS:-0}" -gt 85 ]; then
119
+ echo "๐Ÿ”ด Critical: Context at ${CONTEXT_STATUS}% - Auto-saving..."
120
+ stackmemory clear --save >/dev/null 2>&1
121
+ elif [ "${CONTEXT_STATUS:-0}" -gt 70 ]; then
122
+ echo "โš ๏ธ Warning: Context at ${CONTEXT_STATUS}% - Consider saving"
123
+ fi
124
+ EOF
125
+ chmod +x "$CLAUDE_HOOKS_DIR/on-message"
126
+
127
+ # Create on-clear hook
128
+ cat > "$CLAUDE_HOOKS_DIR/on-clear" << 'EOF'
129
+ #!/bin/bash
130
+ # Save state before /clear command
131
+
132
+ echo "๐Ÿ”„ Preparing for /clear..."
133
+ stackmemory clear --save >/dev/null 2>&1 && echo "โœ… Ledger saved"
134
+ stackmemory handoff --generate >/dev/null 2>&1 && echo "โœ… Handoff saved"
135
+ echo "๐Ÿ’ก After /clear, run: stackmemory clear --restore"
136
+ EOF
137
+ chmod +x "$CLAUDE_HOOKS_DIR/on-clear"
138
+
139
+ # Create on-exit hook
140
+ cat > "$CLAUDE_HOOKS_DIR/on-exit" << 'EOF'
141
+ #!/bin/bash
142
+ # Save session state on exit
143
+
144
+ echo "๐Ÿ“ฆ Saving session state..."
145
+ stackmemory handoff --generate >/dev/null 2>&1
146
+ stackmemory monitor --stop 2>/dev/null || true
147
+ echo "โœ… Session preserved"
148
+ EOF
149
+ chmod +x "$CLAUDE_HOOKS_DIR/on-exit"
150
+
151
+ echo "โœ… Claude Code hooks installed"
152
+ echo ""
153
+
154
+ # Start monitor daemon
155
+ echo "๐Ÿ” Starting background monitor..."
156
+ stackmemory monitor --start
157
+
158
+ echo ""
159
+ echo "โœ… Setup complete!"
160
+ echo ""
161
+ echo "๐Ÿ“‹ What's been configured:"
162
+ echo " โ€ข Auto-save ledger at 85% context usage"
163
+ echo " โ€ข Warning at 60%, critical at 70%"
164
+ echo " โ€ข Handoff generation after 5min idle"
165
+ echo " โ€ข Session preservation on exit"
166
+ echo " โ€ข Automatic /clear preparation"
167
+ echo ""
168
+ echo "๐Ÿ“ Available commands:"
169
+ echo " stackmemory monitor --status # Check monitor status"
170
+ echo " stackmemory clear --status # Check context usage"
171
+ echo " stackmemory handoff --show # View last handoff"
172
+ echo " stackmemory workflow --list # List workflows"
173
+ echo ""
174
+ echo "๐ŸŽฏ Next steps:"
175
+ echo " 1. Context will be monitored automatically"
176
+ echo " 2. Ledgers save at 85% usage"
177
+ echo " 3. Use /clear when prompted"
178
+ echo " 4. Run 'stackmemory clear --restore' after /clear"
179
+ echo ""
180
+ echo "๐Ÿ’ก Tip: Monitor is now running in background"
181
+ echo " Stop with: stackmemory monitor --stop"
@@ -0,0 +1,305 @@
1
+ #!/bin/bash
2
+
3
+ # Setup script for Claude Auto-Start Integration
4
+ # Installs hooks and configures auto-start daemons for Claude Code
5
+
6
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
+ PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
8
+ CLAUDE_DIR="$HOME/.claude"
9
+ HOOKS_DIR="$CLAUDE_DIR/hooks"
10
+ STACKMEMORY_DIR="$HOME/.stackmemory"
11
+
12
+ echo "๐Ÿš€ Claude StackMemory Auto-Start Setup"
13
+ echo "======================================="
14
+ echo ""
15
+
16
+ # Create necessary directories
17
+ echo "๐Ÿ“ Creating directories..."
18
+ mkdir -p "$CLAUDE_DIR"
19
+ mkdir -p "$HOOKS_DIR"
20
+ mkdir -p "$STACKMEMORY_DIR/logs"
21
+ mkdir -p "$STACKMEMORY_DIR/daemons"
22
+
23
+ # Check for Node.js
24
+ if ! command -v node &> /dev/null; then
25
+ echo "โŒ Node.js is required but not installed"
26
+ exit 1
27
+ fi
28
+
29
+ echo "โœ… Node.js found: $(node --version)"
30
+
31
+ # Install dependencies if needed
32
+ echo ""
33
+ echo "๐Ÿ“ฆ Checking dependencies..."
34
+ cd "$PROJECT_DIR"
35
+ if [ ! -d "node_modules/chokidar" ]; then
36
+ echo "Installing required dependencies..."
37
+ npm install chokidar dotenv express ioredis --save-dev
38
+ fi
39
+
40
+ # Create Claude hook for project load
41
+ echo ""
42
+ echo "๐Ÿช Setting up Claude hooks..."
43
+
44
+ # Create the on-project-open hook
45
+ cat > "$HOOKS_DIR/on-project-open" << 'EOF'
46
+ #!/bin/bash
47
+ # Claude hook: Auto-start StackMemory daemons when project opens
48
+
49
+ PROJECT_PATH="$1"
50
+ PROJECT_NAME="$(basename "$PROJECT_PATH")"
51
+
52
+ # Check if this is the stackmemory project
53
+ if [[ "$PROJECT_NAME" == "stackmemory" ]] || [[ -f "$PROJECT_PATH/package.json" && $(grep -q '"name".*"stackmemory"' "$PROJECT_PATH/package.json"; echo $?) -eq 0 ]]; then
54
+ echo "๐Ÿš€ StackMemory project detected - starting daemons..."
55
+
56
+ # Check if daemons are already running
57
+ PID_FILE="$HOME/.stackmemory/claude-daemons.pid"
58
+ if [ -f "$PID_FILE" ]; then
59
+ PID=$(cat "$PID_FILE")
60
+ if kill -0 "$PID" 2>/dev/null; then
61
+ echo "โœ… Daemons already running (PID: $PID)"
62
+ exit 0
63
+ fi
64
+ fi
65
+
66
+ # Start the auto-start manager
67
+ cd "$PROJECT_PATH"
68
+ nohup node scripts/claude-sm-autostart.js > "$HOME/.stackmemory/logs/autostart.log" 2>&1 &
69
+ echo $! > "$PID_FILE"
70
+ echo "โœ… Claude daemons started (PID: $!)"
71
+
72
+ # Also start the background sync manager if configured
73
+ if [ -f "$PROJECT_PATH/.env" ] && grep -q "ENABLE_BACKGROUND_SYNC=true" "$PROJECT_PATH/.env"; then
74
+ nohup node scripts/background-sync-manager.js > "$HOME/.stackmemory/logs/sync-manager.log" 2>&1 &
75
+ echo "โœ… Background sync manager started"
76
+ fi
77
+
78
+ # Initialize ChromaDB hooks if configured
79
+ if [ -f "$PROJECT_PATH/.env" ] && grep -q "CHROMADB_API_KEY" "$PROJECT_PATH/.env"; then
80
+ echo "๐Ÿ”— Initializing ChromaDB context preservation..."
81
+ # Trigger initial context save
82
+ "$HOME/.claude/hooks/on-checkpoint" 2>/dev/null &
83
+ echo "โœ… ChromaDB hooks activated"
84
+ fi
85
+ fi
86
+ EOF
87
+
88
+ chmod +x "$HOOKS_DIR/on-project-open"
89
+
90
+ # Create the on-project-close hook
91
+ cat > "$HOOKS_DIR/on-project-close" << 'EOF'
92
+ #!/bin/bash
93
+ # Claude hook: Stop StackMemory daemons when project closes
94
+
95
+ PROJECT_PATH="$1"
96
+ PROJECT_NAME="$(basename "$PROJECT_PATH")"
97
+
98
+ if [[ "$PROJECT_NAME" == "stackmemory" ]] || [[ -f "$PROJECT_PATH/package.json" && $(grep -q '"name".*"stackmemory"' "$PROJECT_PATH/package.json"; echo $?) -eq 0 ]]; then
99
+ echo "๐Ÿ‘‹ Stopping StackMemory daemons..."
100
+
101
+ PID_FILE="$HOME/.stackmemory/claude-daemons.pid"
102
+ if [ -f "$PID_FILE" ]; then
103
+ PID=$(cat "$PID_FILE")
104
+ if kill -0 "$PID" 2>/dev/null; then
105
+ kill "$PID"
106
+ echo "โœ… Daemons stopped"
107
+ fi
108
+ rm -f "$PID_FILE"
109
+ fi
110
+ fi
111
+ EOF
112
+
113
+ chmod +x "$HOOKS_DIR/on-project-close"
114
+
115
+ # Create on-clear hook to preserve context
116
+ cat > "$HOOKS_DIR/on-clear" << 'EOF'
117
+ #!/bin/bash
118
+ # Claude hook: Save context before clear
119
+
120
+ # Save to StackMemory
121
+ if command -v stackmemory &> /dev/null; then
122
+ stackmemory context add observation "Claude session cleared - preserving context" 2>/dev/null
123
+ fi
124
+
125
+ # Save to ChromaDB if configured
126
+ if [ -f "$HOME/.claude/hooks/chromadb-wrapper" ]; then
127
+ CONTEXT_DATA='{"reason": "clear", "preserved": true}'
128
+ "$HOME/.claude/hooks/chromadb-wrapper" "on-clear" "$CONTEXT_DATA" 2>/dev/null &
129
+ fi
130
+ EOF
131
+
132
+ chmod +x "$HOOKS_DIR/on-clear"
133
+
134
+ # Create wrapper script for easy daemon management
135
+ cat > "$STACKMEMORY_DIR/bin/claude-daemons" << 'EOF'
136
+ #!/bin/bash
137
+ # Claude daemons management script
138
+
139
+ COMMAND="$1"
140
+ PID_FILE="$HOME/.stackmemory/claude-daemons.pid"
141
+
142
+ case "$COMMAND" in
143
+ start)
144
+ if [ -f "$PID_FILE" ]; then
145
+ PID=$(cat "$PID_FILE")
146
+ if kill -0 "$PID" 2>/dev/null; then
147
+ echo "โœ… Daemons already running (PID: $PID)"
148
+ exit 0
149
+ fi
150
+ fi
151
+ cd "$(dirname "$(dirname "$(readlink -f "$0")")")"
152
+ nohup node scripts/claude-sm-autostart.js > "$HOME/.stackmemory/logs/autostart.log" 2>&1 &
153
+ echo $! > "$PID_FILE"
154
+ echo "โœ… Claude daemons started (PID: $!)"
155
+ ;;
156
+ stop)
157
+ if [ -f "$PID_FILE" ]; then
158
+ PID=$(cat "$PID_FILE")
159
+ if kill "$PID" 2>/dev/null; then
160
+ echo "โœ… Daemons stopped"
161
+ fi
162
+ rm -f "$PID_FILE"
163
+ else
164
+ echo "โŒ No daemons running"
165
+ fi
166
+ ;;
167
+ status)
168
+ if [ -f "$PID_FILE" ]; then
169
+ PID=$(cat "$PID_FILE")
170
+ if kill -0 "$PID" 2>/dev/null; then
171
+ echo "โœ… Daemons running (PID: $PID)"
172
+ echo ""
173
+ echo "Recent activity:"
174
+ tail -5 "$HOME/.stackmemory/logs/claude-autostart.log" 2>/dev/null
175
+ else
176
+ echo "โŒ Daemons not running (stale PID file)"
177
+ rm -f "$PID_FILE"
178
+ fi
179
+ else
180
+ echo "โŒ No daemons running"
181
+ fi
182
+ ;;
183
+ restart)
184
+ "$0" stop
185
+ sleep 1
186
+ "$0" start
187
+ ;;
188
+ logs)
189
+ tail -f "$HOME/.stackmemory/logs/claude-autostart.log"
190
+ ;;
191
+ *)
192
+ echo "Usage: claude-daemons {start|stop|status|restart|logs}"
193
+ exit 1
194
+ ;;
195
+ esac
196
+ EOF
197
+
198
+ chmod +x "$STACKMEMORY_DIR/bin/claude-daemons"
199
+
200
+ # Update .env with daemon settings
201
+ echo ""
202
+ echo "๐Ÿ“ Updating environment settings..."
203
+
204
+ if [ -f "$PROJECT_DIR/.env" ]; then
205
+ # Check if settings already exist
206
+ if ! grep -q "ENABLE_BACKGROUND_SYNC" "$PROJECT_DIR/.env"; then
207
+ echo "" >> "$PROJECT_DIR/.env"
208
+ echo "# Claude Auto-Start Settings" >> "$PROJECT_DIR/.env"
209
+ echo "ENABLE_BACKGROUND_SYNC=true" >> "$PROJECT_DIR/.env"
210
+ echo "ENABLE_WEBHOOKS=false" >> "$PROJECT_DIR/.env"
211
+ echo "ENABLE_QUALITY_GATES=true" >> "$PROJECT_DIR/.env"
212
+ echo "WEBHOOK_PORT=3456" >> "$PROJECT_DIR/.env"
213
+ fi
214
+ fi
215
+
216
+ # Create test script
217
+ cat > "$PROJECT_DIR/test-claude-autostart.sh" << 'EOF'
218
+ #!/bin/bash
219
+ # Test Claude auto-start integration
220
+
221
+ echo "๐Ÿงช Testing Claude Auto-Start Integration"
222
+ echo "========================================"
223
+ echo ""
224
+
225
+ # Test daemon start
226
+ echo "1. Testing daemon startup..."
227
+ node scripts/claude-sm-autostart.js status
228
+ if [ $? -eq 0 ]; then
229
+ echo "โœ… Daemon check passed"
230
+ else
231
+ echo "โŒ Daemon check failed"
232
+ fi
233
+
234
+ echo ""
235
+ echo "2. Testing hooks..."
236
+ for hook in on-project-open on-project-close on-clear; do
237
+ if [ -x "$HOME/.claude/hooks/$hook" ]; then
238
+ echo "โœ… $hook hook installed"
239
+ else
240
+ echo "โŒ $hook hook missing"
241
+ fi
242
+ done
243
+
244
+ echo ""
245
+ echo "3. Testing environment..."
246
+ if [ -f ".env" ] && grep -q "ENABLE_BACKGROUND_SYNC=true" ".env"; then
247
+ echo "โœ… Environment configured"
248
+ else
249
+ echo "โŒ Environment not configured"
250
+ fi
251
+
252
+ echo ""
253
+ echo "4. Testing daemon management..."
254
+ if [ -x "$HOME/.stackmemory/bin/claude-daemons" ]; then
255
+ echo "โœ… Management script installed"
256
+ $HOME/.stackmemory/bin/claude-daemons status
257
+ else
258
+ echo "โŒ Management script missing"
259
+ fi
260
+
261
+ echo ""
262
+ echo "Test complete!"
263
+ EOF
264
+
265
+ chmod +x "$PROJECT_DIR/test-claude-autostart.sh"
266
+
267
+ # Display summary
268
+ echo ""
269
+ echo "โœ… Claude Auto-Start Setup Complete!"
270
+ echo ""
271
+ echo "๐Ÿ“‹ Installed components:"
272
+ echo " โ€ข Claude hooks (on-project-open, on-project-close, on-clear)"
273
+ echo " โ€ข Daemon management script (claude-daemons)"
274
+ echo " โ€ข Environment configuration"
275
+ echo " โ€ข Test script"
276
+ echo ""
277
+ echo "๐ŸŽฏ Active daemons when Claude loads:"
278
+ echo " 1. Context Monitor - Saves context every 15 min"
279
+ echo " 2. Linear Sync - Syncs tasks hourly"
280
+ echo " 3. File Watcher - Auto-syncs on file changes"
281
+ echo " 4. Error Monitor - Tracks and logs errors"
282
+ echo " 5. Quality Gates - Post-task validation"
283
+ echo " 6. Auto-handoff - Session transition helper"
284
+ echo ""
285
+ echo "๐Ÿ“Œ Useful commands:"
286
+ echo " claude-daemons start - Start daemons manually"
287
+ echo " claude-daemons stop - Stop daemons"
288
+ echo " claude-daemons status - Check daemon status"
289
+ echo " claude-daemons logs - View daemon logs"
290
+ echo ""
291
+ echo " ./test-claude-autostart.sh - Test the integration"
292
+ echo ""
293
+ echo "๐Ÿ”ง Configuration:"
294
+ echo " Edit .env to enable/disable features:"
295
+ echo " - ENABLE_BACKGROUND_SYNC (true/false)"
296
+ echo " - ENABLE_WEBHOOKS (true/false)"
297
+ echo " - ENABLE_QUALITY_GATES (true/false)"
298
+ echo ""
299
+
300
+ # Ask to test
301
+ read -p "Would you like to test the integration now? (y/n) " -n 1 -r
302
+ echo
303
+ if [[ $REPLY =~ ^[Yy]$ ]]; then
304
+ ./test-claude-autostart.sh
305
+ fi
@@ -0,0 +1,25 @@
1
+ #!/bin/bash
2
+
3
+ # Setup git hooks for StackMemory auto-save
4
+ # This runs StackMemory commands on git operations
5
+
6
+ HOOK_DIR="$(git rev-parse --git-dir 2>/dev/null)/hooks"
7
+
8
+ if [ -z "$HOOK_DIR" ] || [ ! -d "$HOOK_DIR" ]; then
9
+ echo "โŒ Not in a git repository"
10
+ exit 1
11
+ fi
12
+
13
+ # Create pre-commit hook
14
+ cat > "$HOOK_DIR/pre-commit" << 'EOF'
15
+ #!/bin/bash
16
+ # StackMemory pre-commit hook
17
+
18
+ if [ -d ".stackmemory" ]; then
19
+ echo "๐Ÿ“ Saving StackMemory context before commit..."
20
+ stackmemory status 2>/dev/null || true
21
+ fi
22
+ EOF
23
+
24
+ chmod +x "$HOOK_DIR/pre-commit"
25
+ echo "โœ… Git hooks installed for StackMemory"