strray-ai 1.22.16 โ†’ 1.22.18

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/dist/CHANGELOG.md CHANGED
@@ -4,6 +4,23 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Conventional Commits](https://www.conventionalcommits.org/).
6
6
 
7
+ ## [1.22.18] - 2026-04-27
8
+
9
+ ### ๐Ÿ”„ Changes
10
+
11
+ ### ๐Ÿ› Bug Fixes
12
+ - fix: add mcps directory to build, fix MCP registry path resolution (c17ca67e9)
13
+
14
+ ---
15
+
16
+ ## [1.22.17] - 2026-04-27
17
+
18
+ ### ๐Ÿ”„ Changes
19
+
20
+ - Version bump
21
+
22
+ ---
23
+
7
24
  ## [1.22.16] - 2026-04-27
8
25
 
9
26
  ### ๐Ÿ”„ Changes
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-install.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/mcp-install.ts"],"names":[],"mappings":"AAkRA,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOnE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMnD"}
1
+ {"version":3,"file":"mcp-install.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/mcp-install.ts"],"names":[],"mappings":"AAoRA,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOnE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMnD"}
@@ -8,7 +8,9 @@ function getMCPConfigPath() {
8
8
  function getBundledMCPRegistry() {
9
9
  const paths = [
10
10
  join(process.cwd(), "src", "mcps", "registry.json"),
11
+ join(process.cwd(), "dist", "mcps", "registry.json"),
11
12
  join(process.cwd(), "node_modules", "strray-ai", "dist", "mcps", "registry.json"),
13
+ join(process.cwd(), "node_modules", "strray-ai", "src", "mcps", "registry.json"),
12
14
  ];
13
15
  for (const p of paths) {
14
16
  if (existsSync(p)) {
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-install.js","sourceRoot":"","sources":["../../../src/cli/commands/mcp-install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-install.js","sourceRoot":"","sources":["../../../src/cli/commands/mcp-install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ {
2
+ "version": "1.22.13",
3
+ "description": "0xRay Community MCPs Registry - curated API-focused MCP servers",
4
+ "sources": [
5
+ {
6
+ "name": "xmcp",
7
+ "url": "https://github.com/xdevplatform/xmcp",
8
+ "description": "X (Twitter) API MCP server - post tweets, read timeline, manage DMs",
9
+ "license": "MIT",
10
+ "category": "social",
11
+ "env": ["X_BEARER_TOKEN", "X_API_KEY"]
12
+ },
13
+ {
14
+ "name": "github-mcp",
15
+ "url": "https://github.com/divyanshvn/github-mcp-server",
16
+ "description": "GitHub API - issues, PRs, repos, code security",
17
+ "license": "MIT",
18
+ "category": "development",
19
+ "env": ["GITHUB_TOKEN"]
20
+ },
21
+ {
22
+ "name": "discord-mcp",
23
+ "url": "https://github.com/PaSympa/discord-mcp",
24
+ "description": "Discord API - messages, channels, roles, moderation (90+ tools)",
25
+ "license": "MIT",
26
+ "category": "social",
27
+ "env": ["DISCORD_TOKEN"]
28
+ },
29
+ {
30
+ "name": "sentry-mcp",
31
+ "url": "https://github.com/getsentry/sentry-mcp",
32
+ "description": "Sentry error monitoring - issues, events, releases",
33
+ "license": "MIT",
34
+ "category": "monitoring",
35
+ "env": ["SENTRY_AUTH_TOKEN"]
36
+ },
37
+ {
38
+ "name": "vercel-mcp",
39
+ "url": "https://github.com/vercel/vercel-mcp",
40
+ "description": "Vercel deployment - projects, deployments, aliases",
41
+ "license": "MIT",
42
+ "category": "deployment",
43
+ "env": ["VERCEL_TOKEN"]
44
+ },
45
+ {
46
+ "name": "notion-mcp",
47
+ "url": "https://github.com/makenotion/notion-mcp",
48
+ "description": "Notion API - pages, databases, search",
49
+ "license": "MIT",
50
+ "category": "productivity",
51
+ "env": ["NOTION_TOKEN"]
52
+ },
53
+ {
54
+ "name": "telegram-mcp",
55
+ "url": "https://github.com/chigwell/telegram-mcp",
56
+ "description": "Telegram API - messages, chats, bots",
57
+ "license": "MIT",
58
+ "category": "social",
59
+ "env": ["TELEGRAM_BOT_TOKEN"]
60
+ },
61
+ {
62
+ "name": "gmail-mcp",
63
+ "url": "https://github.com/chatanywhere/gmail-mcp",
64
+ "description": "Gmail API - send, read, manage emails",
65
+ "license": "MIT",
66
+ "category": "productivity",
67
+ "env": ["GOOGLE_CLIENT_ID", "GOOGLE_CLIENT_SECRET"]
68
+ },
69
+ {
70
+ "name": "slack-mcp",
71
+ "url": "https://github.com/slackapi/slack-mcp",
72
+ "description": "Slack API - messages, channels, apps",
73
+ "license": "MIT",
74
+ "category": "team",
75
+ "env": ["SLACK_BOT_TOKEN"]
76
+ },
77
+ {
78
+ "name": "jira-mcp",
79
+ "url": "https://github.com/atlassian/jira-mcp",
80
+ "description": "Jira API - issues, projects, sprints (Atlassian)",
81
+ "license": "MIT",
82
+ "category": "project-management",
83
+ "env": ["JIRA_TOKEN", "JIRA_URL"]
84
+ },
85
+ {
86
+ "name": "confluent-mcp",
87
+ "url": "https://github.com/confluentinc/mcp",
88
+ "description": "Confluent Kafka - topics, producers, consumers",
89
+ "license": "MIT",
90
+ "category": "data",
91
+ "env": ["CONFLUENT_API_KEY", "CONFLUENT_API_SECRET"]
92
+ },
93
+ {
94
+ "name": "wazuh-mcp",
95
+ "url": "https://github.com/gensecaihq/wazuh-mcp-server",
96
+ "description": "Wazuh SIEM - security operations, threat detection",
97
+ "license": "MIT",
98
+ "category": "security",
99
+ "env": ["WAZUH_API_KEY", "WAZUH_URL"]
100
+ },
101
+ {
102
+ "name": "stripe-mcp",
103
+ "url": "https://github.com/stripe/stripe-mcp",
104
+ "description": "Stripe payments - charges, customers, subscriptions",
105
+ "license": "MIT",
106
+ "category": "payments",
107
+ "env": ["STRIPE_SECRET_KEY"]
108
+ }
109
+ ]
110
+ }
@@ -0,0 +1,26 @@
1
+ #!/bin/bash
2
+ # Pre-Command Hook for StringRay
3
+ #
4
+ # Checks context window usage before each command.
5
+ # If context is at 95%+ (configurable), auto-generates a reflection.
6
+ #
7
+ # Usage:
8
+ # ./scripts/hooks/pre-command # Normal call
9
+ # ./scripts/hooks/pre-command --dry-run # Check without generating
10
+ # ./scripts/hooks/pre-command --ci # CI mode (less verbose)
11
+
12
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
13
+ PROJECT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
14
+
15
+ export HOOK_PROJECT_ROOT="$PROJECT_ROOT"
16
+ export HOOK_REFLECTIONS_DIR="${REFLECTIONS_DIR:-docs/reflections}"
17
+ export HOOK_DRY_RUN="${HOOK_DRY_RUN:-0}"
18
+
19
+ if [[ "$1" == "--dry-run" ]]; then
20
+ export HOOK_DRY_RUN=1
21
+ elif [[ "$1" == "--ci" ]]; then
22
+ export CI=true
23
+ fi
24
+
25
+ cd "$PROJECT_ROOT"
26
+ exec node "$SCRIPT_DIR/pre-command.mjs" "$@"
@@ -0,0 +1,359 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Context-Window-Aware Pre-Command Hook
4
+ *
5
+ * Checks context window usage BEFORE each command is processed.
6
+ * If context is at 95%+ (configurable), auto-generates a reflection
7
+ * BEFORE the command runs to preserve learnings before context compaction.
8
+ *
9
+ * Usage:
10
+ * node scripts/hooks/pre-command.mjs [--estimate-tokens N] [--threshold N]
11
+ *
12
+ * Environment:
13
+ * HOOK_PROJECT_ROOT - Project root directory
14
+ * HOOK_REFLECTIONS_DIR - Reflections directory override
15
+ * HOOK_DRY_RUN - If "1", only check without generating
16
+ * CI - If "true", CI environment (less verbose)
17
+ */
18
+
19
+ import { existsSync, mkdirSync, writeFileSync, readFileSync } from "fs";
20
+ import { join, dirname } from "path";
21
+ import { execSync } from "child_process";
22
+
23
+ const PROJECT_ROOT = process.env.HOOK_PROJECT_ROOT || process.cwd();
24
+ const REFLECTIONS_DIR = process.env.HOOK_REFLECTIONS_DIR || "docs/reflections";
25
+ const DRY_RUN = process.env.HOOK_DRY_RUN === "1";
26
+ const IS_CI = process.env.CI === "true" || process.argv.includes("--ci");
27
+
28
+ function log(msg) {
29
+ if (!IS_CI) console.log(msg);
30
+ }
31
+
32
+ function warn(msg) {
33
+ if (!IS_CI) console.warn(msg);
34
+ }
35
+
36
+ function error(msg) {
37
+ console.error(msg);
38
+ }
39
+
40
+ function loadConfig() {
41
+ const configPaths = [
42
+ join(PROJECT_ROOT, ".opencode", "strray", "features.json"),
43
+ join(PROJECT_ROOT, ".strray", "features.json"),
44
+ join(PROJECT_ROOT, "node_modules", "strray-ai", ".opencode", "strray", "features.json"),
45
+ ];
46
+
47
+ for (const configPath of configPaths) {
48
+ if (existsSync(configPath)) {
49
+ try {
50
+ const content = readFileSync(configPath, "utf-8");
51
+ const config = JSON.parse(content);
52
+ if (config.context_window_reflection) {
53
+ return config.context_window_reflection;
54
+ }
55
+ if (config.storytelling?.reflection_triggers) {
56
+ return {
57
+ enabled: true,
58
+ threshold_percent: 95,
59
+ check_interval_commands: 5,
60
+ story_type: "reflection",
61
+ max_reflections_per_session: 3,
62
+ cooldown_minutes: 10,
63
+ };
64
+ }
65
+ } catch {
66
+ // Try next path
67
+ }
68
+ }
69
+ }
70
+
71
+ return {
72
+ enabled: true,
73
+ threshold_percent: 95,
74
+ check_interval_commands: 5,
75
+ story_type: "reflection",
76
+ max_reflections_per_session: 3,
77
+ cooldown_minutes: 10,
78
+ };
79
+ }
80
+
81
+ function estimateContextUsage() {
82
+ let estimatedTokens = 0;
83
+
84
+ try {
85
+ const historyPath = join(PROJECT_ROOT, ".opencode", "logs", "conversation-history.json");
86
+ if (existsSync(historyPath)) {
87
+ const history = JSON.parse(readFileSync(historyPath, "utf-8"));
88
+ if (history.messages && Array.isArray(history.messages)) {
89
+ estimatedTokens = history.messages.reduce((sum, msg) => {
90
+ const content = msg.content || "";
91
+ const role = msg.role || "";
92
+ return sum + Math.ceil((content.length + role.length) / 4);
93
+ }, 0);
94
+ }
95
+ }
96
+ } catch {
97
+ // History not available, use CLI estimate
98
+ }
99
+
100
+ if (process.argv.includes("--estimate-tokens")) {
101
+ const idx = process.argv.indexOf("--estimate-tokens") + 1;
102
+ if (idx < process.argv.length) {
103
+ estimatedTokens = parseInt(process.argv[idx], 10) || 0;
104
+ }
105
+ }
106
+
107
+ if (estimatedTokens === 0) {
108
+ try {
109
+ const output = execSync("wc -c .opencode/logs/conversation-history.json 2>/dev/null || echo 0", {
110
+ encoding: "utf-8",
111
+ cwd: PROJECT_ROOT,
112
+ });
113
+ const bytes = parseInt(output.trim().split(" ")[0], 10) || 0;
114
+ estimatedTokens = Math.ceil(bytes / 4);
115
+ } catch {
116
+ estimatedTokens = 5000;
117
+ }
118
+ }
119
+
120
+ return estimatedTokens;
121
+ }
122
+
123
+ function getContextThreshold(config) {
124
+ let maxTokens = 20000;
125
+
126
+ try {
127
+ const configPath = join(PROJECT_ROOT, ".opencode", "strray", "features.json");
128
+ if (existsSync(configPath)) {
129
+ const content = readFileSync(configPath, "utf-8");
130
+ const config = JSON.parse(content);
131
+ if (config.token_optimization?.max_context_tokens) {
132
+ maxTokens = config.token_optimization.max_context_tokens;
133
+ }
134
+ }
135
+ } catch {
136
+ // Use default
137
+ }
138
+
139
+ return Math.floor(maxTokens * (config.threshold_percent / 100));
140
+ }
141
+
142
+ function checkReflectionCooldown(stateFile, config) {
143
+ if (!existsSync(stateFile)) {
144
+ return { canReflect: true, minutesSince: config.cooldown_minutes + 1 };
145
+ }
146
+
147
+ try {
148
+ const state = JSON.parse(readFileSync(stateFile, "utf-8"));
149
+ const lastReflection = state.lastContextReflection || 0;
150
+ const minutesSince = Math.floor((Date.now() - lastReflection) / 60000);
151
+ const { max_reflections_per_session } = config;
152
+
153
+ return {
154
+ canReflect: state.contextReflectionCount < max_reflections_per_session &&
155
+ minutesSince >= config.cooldown_minutes,
156
+ minutesSince,
157
+ count: state.contextReflectionCount || 0,
158
+ };
159
+ } catch {
160
+ return { canReflect: true, minutesSince: config.cooldown_minutes + 1 };
161
+ }
162
+ }
163
+
164
+ function updateReflectionState(stateFile, reflectionCount) {
165
+ try {
166
+ let state = { contextReflectionCount: 0, lastContextReflection: 0 };
167
+ if (existsSync(stateFile)) {
168
+ try {
169
+ state = JSON.parse(readFileSync(stateFile, "utf-8"));
170
+ } catch {
171
+ // Use defaults
172
+ }
173
+ }
174
+
175
+ state.contextReflectionCount = reflectionCount;
176
+ state.lastContextReflection = Date.now();
177
+
178
+ const dir = dirname(stateFile);
179
+ if (!existsSync(dir)) {
180
+ mkdirSync(dir, { recursive: true });
181
+ }
182
+
183
+ writeFileSync(stateFile, JSON.stringify(state, null, 2));
184
+ } catch {
185
+ // Non-blocking
186
+ }
187
+ }
188
+
189
+ function generateReflection(percentUsed, config) {
190
+ const date = new Date().toISOString().split("T")[0];
191
+ const timestamp = new Date().toISOString().split("T")[1].replace(/[:-]/g, "").slice(0, 6);
192
+ const filename = `context-warning-${date}-${timestamp}.md`;
193
+
194
+ const outputPath = join(REFLECTIONS_DIR, filename);
195
+ const dir = dirname(outputPath);
196
+
197
+ if (!existsSync(dir)) {
198
+ mkdirSync(dir, { recursive: true });
199
+ }
200
+
201
+ let recentCommits = "";
202
+ try {
203
+ recentCommits = execSync("git log --oneline -5 --format='- %s (%h)'", {
204
+ encoding: "utf-8",
205
+ cwd: PROJECT_ROOT,
206
+ });
207
+ } catch {
208
+ recentCommits = "# No recent commits";
209
+ }
210
+
211
+ const stub = `---
212
+ story_type: ${config.story_type || "reflection"}
213
+ title: "Context window warning at ${Math.round(percentUsed)}%"
214
+ date: ${date}
215
+ slug: context-warning-${date}
216
+ emotional_arc: "challenge โ†’ discovery โ†’ resolution"
217
+ codex_terms: ["reflection", "learning", "context-management"]
218
+ framework: three_act_structure
219
+ target_words: 3000
220
+ location: ${REFLECTIONS_DIR}
221
+ ---
222
+
223
+ # Context Window Warning: ${Math.round(percentUsed)}% Usage
224
+
225
+ ## 1. Executive Summary
226
+
227
+ Context window is at **${Math.round(percentUsed)}%** capacity. Auto-triggered reflection captured to preserve learn
228
+
229
+ gs before context compaction.
230
+
231
+ ## 2. What Was / What Is / What Should Be
232
+
233
+ ### What Was
234
+ Session was operating with available context headroom for current tasks.
235
+
236
+ ### What Is
237
+ Context window is at **${Math.round(percentUsed)}%** capacity - approaching the ${config.threshold_percent}% threshold configured for auto-reflection trigger.
238
+
239
+ ### What Should Be
240
+ Reflections captured before context compaction to preserve learnings and session context.
241
+
242
+ ## 3. INNER DIALOGUE
243
+
244
+ What critical learnings need to be preserved before context is compacted? What patterns am I seeing in this session? What decisions have been made that should be documented?
245
+
246
+ ## 4. Counterfactual Thinking
247
+
248
+ If we didn't capture this reflection now, what would be lost when context is compacted? What would I wish I had documented?
249
+
250
+ ## 5. Personal Journey
251
+
252
+ Navigating the constraints of finite context windows while maximizing learning capture. Each session requires intentional reflection to preserve institutional knowledge.
253
+
254
+ ## 6. Session Context
255
+
256
+ ### Recent Commits
257
+ \`\`\`
258
+ ${recentCommits}
259
+ \`\`\`
260
+
261
+ ## 7. Architecture Impact
262
+ \`\`\`
263
+ Process improvement - context window awareness
264
+ \`\`\`
265
+
266
+ ## 8. Key Learnings So Far
267
+
268
+ - [Fill in key learnings from this session]
269
+ - [Document important decisions made]
270
+ - [Note any technical insights]
271
+
272
+ ## 9. What Still Doesn't Work
273
+
274
+ - [Identify ongoing issues]
275
+ - [Note areas needing investigation]
276
+
277
+ ## 10. For Future AI
278
+
279
+ - Implement earlier reflection triggers to ensure no learnings are lost
280
+ - Consider session summarization before context compaction
281
+ - Track patterns across sessions for better context management
282
+
283
+ ---
284
+
285
+ *Auto-generated context window reflection. Fill in details before context is compacted.*
286
+ `;
287
+
288
+ writeFileSync(outputPath, stub, "utf-8");
289
+ return outputPath;
290
+ }
291
+
292
+ async function main() {
293
+ if (!IS_CI) {
294
+ log("๐Ÿ” Context-Window Pre-Command Hook");
295
+ log("============================");
296
+ }
297
+
298
+ const config = loadConfig();
299
+
300
+ if (!config.enabled) {
301
+ if (!IS_CI) log("โญ๏ธ Context reflection disabled, skipping");
302
+ process.exit(0);
303
+ }
304
+
305
+ const estimatedTokens = estimateContextUsage();
306
+ const threshold = getContextThreshold(config);
307
+ const percentUsed = (estimatedTokens / threshold) * 100;
308
+
309
+ if (!IS_CI) {
310
+ log(`๐Ÿ“Š Estimated tokens: ~${estimatedTokens.toLocaleString()}`);
311
+ log(`๐Ÿ“Š Threshold: ${config.threshold_percent}% (${threshold.toLocaleString()} tokens)`);
312
+ log(`๐Ÿ“Š Usage: ${Math.round(percentUsed)}%`);
313
+ }
314
+
315
+ if (percentUsed < config.threshold_percent) {
316
+ if (!IS_CI) log(`โœ… Context OK (${Math.round(percentUsed)}% < ${config.threshold_percent}%)`);
317
+ process.exit(0);
318
+ }
319
+
320
+ warn(`โš ๏ธ Context at ${Math.round(percentUsed)}% - above ${config.threshold_percent}% threshold`);
321
+
322
+ const stateFile = join(PROJECT_ROOT, ".opencode", "logs", "reflection-state.json");
323
+ const cooldown = checkReflectionCooldown(stateFile, config);
324
+
325
+ if (!cooldown.canReflect) {
326
+ if (!IS_CI) {
327
+ log(`โญ๏ธ Cooldown active (${cooldown.minutesSince}min since last, ${cooldown.count}/${config.max_reflections_per_session} this session)`);
328
+ }
329
+ process.exit(0);
330
+ }
331
+
332
+ if (DRY_RUN) {
333
+ if (!IS_CI) log(`๐Ÿงช DRY RUN: Would generate reflection at ${Math.round(percentUsed)}%`);
334
+ process.exit(0);
335
+ }
336
+
337
+ const reflectionPath = generateReflection(percentUsed, config);
338
+
339
+ const newCount = (cooldown.count || 0) + 1;
340
+ updateReflectionState(stateFile, newCount);
341
+
342
+ warn(`โœ… Context reflection generated: ${reflectionPath}`);
343
+ warn(`๐Ÿ“ Please fill in details before context is compacted!`);
344
+
345
+ if (!IS_CI) {
346
+ console.log("");
347
+ console.log("Next steps:");
348
+ console.log(`1. Open: ${reflectionPath}`);
349
+ console.log("2. Fill in key learnings");
350
+ console.log("3. Save before next command (context may be compacted)");
351
+ }
352
+
353
+ process.exit(0);
354
+ }
355
+
356
+ main().catch((err) => {
357
+ error(`โŒ Hook error: ${err.message}`);
358
+ process.exit(0);
359
+ });