@n24q02m/mnemo-plugin 1.0.0

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 n24q02m
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,99 @@
1
+ # Mnemo Plugin
2
+
3
+ [![CI](https://github.com/n24q02m/mnemo-plugin/actions/workflows/ci.yml/badge.svg)](https://github.com/n24q02m/mnemo-plugin/actions/workflows/ci.yml)
4
+ [![npm](https://img.shields.io/npm/v/@n24q02m/mnemo-plugin)](https://www.npmjs.com/package/@n24q02m/mnemo-plugin)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
+
7
+ Universal Memory Plugin for [OpenCode](https://opencode.ai) & [Claude Code](https://docs.anthropic.com/en/docs/claude-code) -- Powered by [mnemo-mcp](https://github.com/n24q02m/mnemo-mcp).
8
+
9
+ Gives your AI coding assistant **persistent memory** across sessions. Facts, preferences, architectural decisions, and project rules are stored permanently and automatically loaded into context.
10
+
11
+ ## Features
12
+
13
+ - **Persistent Memory** -- Facts survive across sessions, restarts, and context compaction
14
+ - **Automatic Capture** -- Detects user preferences and constraints from chat (always/never/must/prefer patterns)
15
+ - **Adaptive Context Injection** -- Smart budget system scales memory injection to model context window
16
+ - **Project-Scoped** -- Memories auto-tagged with project name for relevant recall
17
+ - **Dual Platform** -- Works with both OpenCode (plugin) and Claude Code (MCP server)
18
+
19
+ ## Architecture
20
+
21
+ This plugin is a thin TypeScript bridge that delegates all heavy lifting to [mnemo-mcp](https://github.com/n24q02m/mnemo-mcp) (Python MCP server):
22
+
23
+ ```
24
+ OpenCode / Claude Code
25
+ |
26
+ +-- mnemo-plugin (TypeScript, this package)
27
+ |
28
+ +-- mnemo-mcp (Python, via uvx)
29
+ |-- SQLite FTS5 (keyword search)
30
+ |-- Qwen3 embeddings (semantic search)
31
+ |-- rclone sync (backup)
32
+ ```
33
+
34
+ ## Prerequisites
35
+
36
+ - [Node.js](https://nodejs.org/) >= 24
37
+ - [uv](https://docs.astral.sh/uv/) (for running mnemo-mcp via `uvx`)
38
+
39
+ ## Installation
40
+
41
+ ### OpenCode
42
+
43
+ Add to your `opencode.json`:
44
+
45
+ ```json
46
+ {
47
+ "plugin": ["@n24q02m/mnemo-plugin"]
48
+ }
49
+ ```
50
+
51
+ ### Claude Code
52
+
53
+ Install the plugin globally:
54
+
55
+ ```bash
56
+ npm install -g @n24q02m/mnemo-plugin
57
+ ```
58
+
59
+ Then add to your project's `.claude/plugins.json` or install via Claude Code UI.
60
+
61
+ ## Tools
62
+
63
+ | Tool | Description |
64
+ |------|-------------|
65
+ | `mnemo_search` | Search stored memories by query, with optional category filter |
66
+ | `mnemo_remember` | Store a new persistent memory (fact, preference, decision) |
67
+ | `mnemo_forget` | Delete an outdated or incorrect memory by ID |
68
+
69
+ ## Hooks (OpenCode only)
70
+
71
+ | Hook | Description |
72
+ |------|-------------|
73
+ | `system-prompt` | Injects relevant memories into system prompt with adaptive budget |
74
+ | `auto-capture` | Buffers chat messages and extracts constraints on session idle |
75
+ | `compaction` | Preserves memory context during session compaction |
76
+
77
+ ## Development
78
+
79
+ ```bash
80
+ # Setup
81
+ mise run setup
82
+
83
+ # Development
84
+ pnpm dev
85
+
86
+ # Quality checks
87
+ pnpm check # biome + tsc
88
+ pnpm test # vitest
89
+ pnpm build # tsc + cli bundle
90
+
91
+ # Shortcuts
92
+ mise run lint
93
+ mise run test
94
+ mise run fix
95
+ ```
96
+
97
+ ## License
98
+
99
+ MIT
package/bin/cli.mjs ADDED
@@ -0,0 +1,73 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * mnemo-plugin CLI
4
+ *
5
+ * Modes:
6
+ * - No args: MCP stdio proxy (spawns uvx mnemo-mcp)
7
+ * - hook <action>: Execute Claude Code lifecycle hooks
8
+ */
9
+ import { spawn, execSync } from 'node:child_process';
10
+
11
+ const args = process.argv.slice(2);
12
+ const isWindows = process.platform === 'win32';
13
+
14
+ // Hook subcommand
15
+ if (args[0] === 'hook') {
16
+ const action = args[1];
17
+ let input = '';
18
+
19
+ // Read hook payload from stdin (non-blocking)
20
+ if (!process.stdin.isTTY) {
21
+ try {
22
+ input = require('node:fs').readFileSync(0, 'utf8');
23
+ } catch {
24
+ // No stdin input
25
+ }
26
+ }
27
+
28
+ const payload = input ? JSON.parse(input) : {};
29
+
30
+ switch (action) {
31
+ case 'session-start':
32
+ // Health check: verify mnemo-mcp is accessible
33
+ try {
34
+ execSync('uvx mnemo-mcp --version', { stdio: 'pipe', timeout: 5000, shell: isWindows });
35
+ process.exit(0);
36
+ } catch {
37
+ console.error('[mnemo] Warning: mnemo-mcp not available. Install with: uv tool install mnemo-mcp');
38
+ process.exit(1); // Non-blocking warning
39
+ }
40
+ break;
41
+
42
+ case 'stop':
43
+ // No-op for now: Claude handles memory via MCP tools during session
44
+ process.exit(0);
45
+ break;
46
+
47
+ case 'pre-compact':
48
+ // No-op for now: memories are already persisted in mnemo-mcp
49
+ process.exit(0);
50
+ break;
51
+
52
+ default:
53
+ console.error('[mnemo] Unknown hook action:', action);
54
+ console.error('Available: session-start, stop, pre-compact');
55
+ process.exit(2);
56
+ }
57
+ } else {
58
+ // Default mode: MCP stdio proxy
59
+ const child = spawn('uvx', ['mnemo-mcp', ...args], {
60
+ stdio: 'inherit',
61
+ shell: isWindows,
62
+ });
63
+
64
+ child.on('error', (err) => {
65
+ console.error('Failed to start mnemo-mcp:', err.message);
66
+ console.error('Make sure uv is installed: https://docs.astral.sh/uv/');
67
+ process.exit(1);
68
+ });
69
+
70
+ child.on('exit', (code) => {
71
+ process.exit(code || 0);
72
+ });
73
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * MCP Client Bridge to mnemo-mcp
3
+ *
4
+ * Singleton class that manages a persistent MCP connection to the mnemo-mcp
5
+ * Python server via stdio transport. Spawns `uvx mnemo-mcp` as a subprocess
6
+ * and communicates via JSON-RPC 2.0.
7
+ */
8
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
9
+ export declare class MnemoBridge {
10
+ private static instance;
11
+ private client;
12
+ private transport;
13
+ private connecting;
14
+ private availableTools;
15
+ private constructor();
16
+ static getInstance(): MnemoBridge;
17
+ /** Connect to mnemo-mcp server, reusing existing connection if available */
18
+ connect(): Promise<Client>;
19
+ private doConnect;
20
+ /**
21
+ * Call a tool on the mnemo-mcp server.
22
+ * Automatically connects if not already connected.
23
+ * Returns the parsed JSON response from the tool.
24
+ */
25
+ callTool(name: string, args: Record<string, unknown>): Promise<any>;
26
+ /** Gracefully shut down the MCP connection and subprocess */
27
+ shutdown(): Promise<void>;
28
+ }
29
+ //# sourceMappingURL=bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAUlE,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAa;IACpC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,cAAc,CAA2B;IAEjD,OAAO;WAEO,WAAW,IAAI,WAAW;IAOxC,4EAA4E;IAC/D,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;YAezB,SAAS;IA6BvB;;;;OAIG;IACU,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAmChF,6DAA6D;IAChD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAQvC"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * MCP Client Bridge to mnemo-mcp
3
+ *
4
+ * Singleton class that manages a persistent MCP connection to the mnemo-mcp
5
+ * Python server via stdio transport. Spawns `uvx mnemo-mcp` as a subprocess
6
+ * and communicates via JSON-RPC 2.0.
7
+ */
8
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
9
+ import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
10
+ import { CallToolResultSchema } from '@modelcontextprotocol/sdk/types.js';
11
+ export class MnemoBridge {
12
+ constructor() {
13
+ this.client = null;
14
+ this.transport = null;
15
+ this.connecting = null;
16
+ this.availableTools = null;
17
+ }
18
+ static getInstance() {
19
+ if (!MnemoBridge.instance) {
20
+ MnemoBridge.instance = new MnemoBridge();
21
+ }
22
+ return MnemoBridge.instance;
23
+ }
24
+ /** Connect to mnemo-mcp server, reusing existing connection if available */
25
+ async connect() {
26
+ if (this.client)
27
+ return this.client;
28
+ // If already connecting, wait for that promise to resolve
29
+ if (this.connecting)
30
+ return this.connecting;
31
+ this.connecting = this.doConnect();
32
+ try {
33
+ const client = await this.connecting;
34
+ return client;
35
+ }
36
+ finally {
37
+ this.connecting = null;
38
+ }
39
+ }
40
+ async doConnect() {
41
+ // Use standard MCP stdio transport to run uvx mnemo-mcp
42
+ // The @modelcontextprotocol/sdk uses cross-spawn internally which handles
43
+ // Windows execution automatically, so we just use 'uvx' (not 'uvx.cmd')
44
+ this.transport = new StdioClientTransport({
45
+ command: 'uvx',
46
+ args: ['mnemo-mcp'],
47
+ stderr: 'inherit'
48
+ });
49
+ this.client = new Client({
50
+ name: 'mnemo-plugin',
51
+ version: '0.0.0'
52
+ }, {
53
+ capabilities: {}
54
+ });
55
+ await this.client.connect(this.transport);
56
+ // Cache available tool names on first connect
57
+ const toolsResult = await this.client.listTools();
58
+ this.availableTools = new Set(toolsResult.tools.map((t) => t.name));
59
+ return this.client;
60
+ }
61
+ /**
62
+ * Call a tool on the mnemo-mcp server.
63
+ * Automatically connects if not already connected.
64
+ * Returns the parsed JSON response from the tool.
65
+ */
66
+ async callTool(name, args) {
67
+ const client = await this.connect();
68
+ // Validate tool exists using cached list
69
+ if (this.availableTools && !this.availableTools.has(name)) {
70
+ throw new Error(`Tool "${name}" not found in mnemo-mcp server. Available: ${[...this.availableTools].join(', ')}`);
71
+ }
72
+ const result = await client.callTool({
73
+ name,
74
+ arguments: args
75
+ }, CallToolResultSchema);
76
+ if (result.isError) {
77
+ const errorText = result.content.find((c) => c.type === 'text')?.text || 'Unknown mnemo-mcp error';
78
+ throw new Error(`mnemo-mcp error: ${errorText}`);
79
+ }
80
+ const textContent = result.content.find((c) => c.type === 'text')?.text;
81
+ if (!textContent) {
82
+ throw new Error('mnemo-mcp returned empty content');
83
+ }
84
+ try {
85
+ return JSON.parse(textContent);
86
+ }
87
+ catch {
88
+ // If not valid JSON, return the raw text
89
+ return textContent;
90
+ }
91
+ }
92
+ /** Gracefully shut down the MCP connection and subprocess */
93
+ async shutdown() {
94
+ if (this.transport) {
95
+ await this.transport.close();
96
+ this.transport = null;
97
+ this.client = null;
98
+ this.availableTools = null;
99
+ }
100
+ }
101
+ }
102
+ //# sourceMappingURL=bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Auto-Capture Hook
3
+ *
4
+ * Buffers user messages from chat and extracts constraint-like patterns
5
+ * (always/never/must/prefer/don't) when the session goes idle. Captured
6
+ * constraints are stored as auto-captured rules in mnemo-mcp.
7
+ *
8
+ * Uses a content hash to prevent duplicate captures within the same session.
9
+ */
10
+ import type { Event } from '@opencode-ai/sdk';
11
+ /** Chat message hook: buffer user text parts */
12
+ export declare const messageHook: (_input: unknown, output: {
13
+ parts: {
14
+ type: string;
15
+ text?: string;
16
+ }[];
17
+ }) => Promise<void>;
18
+ /** Event hook: process buffer on session idle */
19
+ export declare const autoCaptureHook: (input: {
20
+ event: Event;
21
+ }, directory: string) => Promise<void>;
22
+ //# sourceMappingURL=auto-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-capture.d.ts","sourceRoot":"","sources":["../../../src/hooks/auto-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAsC7C,gDAAgD;AAChD,eAAO,MAAM,WAAW,GAAU,QAAQ,OAAO,EAAE,QAAQ;IAAE,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,kBAUtG,CAAA;AAED,iDAAiD;AACjD,eAAO,MAAM,eAAe,GAAU,OAAO;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,EAAE,WAAW,MAAM,kBAS/E,CAAA"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Auto-Capture Hook
3
+ *
4
+ * Buffers user messages from chat and extracts constraint-like patterns
5
+ * (always/never/must/prefer/don't) when the session goes idle. Captured
6
+ * constraints are stored as auto-captured rules in mnemo-mcp.
7
+ *
8
+ * Uses a content hash to prevent duplicate captures within the same session.
9
+ */
10
+ import { MnemoBridge } from '../bridge.js';
11
+ /** Buffer of user message texts accumulated during the session */
12
+ const sessionBuffer = [];
13
+ /** Set of content hashes already captured this session (dedup) */
14
+ const capturedHashes = new Set();
15
+ /** Timestamp of last capture to enforce cooldown */
16
+ let lastCaptureTime = 0;
17
+ /** Minimum idle time before processing buffer (60 seconds) */
18
+ const IDLE_THRESHOLD = 60_000;
19
+ /** Maximum content length to store per auto-capture */
20
+ const MAX_CAPTURE_LENGTH = 500;
21
+ /** Regex to detect constraint-like user statements */
22
+ const CONSTRAINT_REGEX = /\b(always|never|must|prefer|don't|do not|should not|make sure|ensure|require)\b/i;
23
+ /** Simple string hash for deduplication */
24
+ function hashContent(content) {
25
+ let hash = 0;
26
+ for (let i = 0; i < content.length; i++) {
27
+ const char = content.charCodeAt(i);
28
+ hash = ((hash << 5) - hash + char) | 0;
29
+ }
30
+ return hash.toString(36);
31
+ }
32
+ /** Extract project name from directory path */
33
+ function getProjectName(directory) {
34
+ const cleanDir = directory.replace(/\\/g, '/');
35
+ const parts = cleanDir.split('/');
36
+ return parts[parts.length - 1] || 'unknown';
37
+ }
38
+ /** Chat message hook: buffer user text parts */
39
+ export const messageHook = async (_input, output) => {
40
+ const userText = output.parts
41
+ .filter((p) => p.type === 'text' && p.text)
42
+ .map((p) => p.text)
43
+ .join('\n')
44
+ .trim();
45
+ if (userText) {
46
+ sessionBuffer.push(userText);
47
+ }
48
+ };
49
+ /** Event hook: process buffer on session idle */
50
+ export const autoCaptureHook = async (input, directory) => {
51
+ if (input.event.type !== 'session.idle')
52
+ return;
53
+ const now = Date.now();
54
+ if (now - lastCaptureTime <= IDLE_THRESHOLD)
55
+ return;
56
+ if (sessionBuffer.length === 0)
57
+ return;
58
+ await processCapture(directory);
59
+ lastCaptureTime = now;
60
+ };
61
+ /** Extract constraints from buffered messages and store in mnemo-mcp */
62
+ async function processCapture(directory) {
63
+ try {
64
+ const bridge = MnemoBridge.getInstance();
65
+ const projectName = getProjectName(directory);
66
+ const content = sessionBuffer.join('\n');
67
+ sessionBuffer.length = 0;
68
+ // Only capture if content looks like a constraint/preference
69
+ if (!CONSTRAINT_REGEX.test(content))
70
+ return;
71
+ // Dedup check
72
+ const hash = hashContent(content);
73
+ if (capturedHashes.has(hash))
74
+ return;
75
+ capturedHashes.add(hash);
76
+ const trimmedContent = content.length > MAX_CAPTURE_LENGTH ? `${content.slice(0, MAX_CAPTURE_LENGTH)}...` : content;
77
+ await bridge.callTool('memory', {
78
+ action: 'add',
79
+ content: `[Auto-captured for ${projectName}]: ${trimmedContent}`,
80
+ category: 'auto-capture',
81
+ tags: [projectName, 'preference']
82
+ });
83
+ console.log(`[Mnemo] Auto-captured a new rule for ${projectName}`);
84
+ }
85
+ catch (error) {
86
+ console.error(`[Mnemo] Error in auto-capture: ${error}`);
87
+ }
88
+ }
89
+ //# sourceMappingURL=auto-capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-capture.js","sourceRoot":"","sources":["../../../src/hooks/auto-capture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Compaction Hook
3
+ *
4
+ * When OpenCode compacts the session context window, this hook injects
5
+ * relevant memories into the compaction context so they survive the
6
+ * summarization process. This prevents memory loss across long sessions.
7
+ */
8
+ export declare const compactionHook: (_input: {
9
+ sessionID: string;
10
+ }, output: {
11
+ context: string[];
12
+ prompt?: string;
13
+ }) => Promise<void>;
14
+ //# sourceMappingURL=compaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../../../src/hooks/compaction.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,eAAO,MAAM,cAAc,GAAU,QAAQ;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,kBAkCjH,CAAA"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Compaction Hook
3
+ *
4
+ * When OpenCode compacts the session context window, this hook injects
5
+ * relevant memories into the compaction context so they survive the
6
+ * summarization process. This prevents memory loss across long sessions.
7
+ */
8
+ import { MnemoBridge } from '../bridge.js';
9
+ export const compactionHook = async (_input, output) => {
10
+ try {
11
+ const bridge = MnemoBridge.getInstance();
12
+ // Fetch recent/important memories to preserve during compaction
13
+ const statsRes = await bridge.callTool('memory', {
14
+ action: 'stats'
15
+ });
16
+ const totalMemories = statsRes?.total_memories ?? 0;
17
+ if (totalMemories > 0) {
18
+ // Load top memories to include in compaction context
19
+ const listRes = await bridge.callTool('memory', {
20
+ action: 'list',
21
+ limit: 10
22
+ });
23
+ if (listRes?.results?.length > 0) {
24
+ const memories = listRes.results.map((m) => `- [${m.category}] ${m.content}`).join('\n');
25
+ output.context.push(`[Mnemo Persistent Memory - Preserve These]\nThe following facts and preferences are stored in persistent memory and must be preserved:\n${memories}`);
26
+ }
27
+ }
28
+ // Always add instruction to preserve preferences during summarization
29
+ output.context.push('When summarizing this session, explicitly preserve any user preferences, technical constraints, architectural decisions, or project rules that were discussed. These should be saved to persistent memory if not already stored.');
30
+ }
31
+ catch (error) {
32
+ console.error(`[Mnemo] Error in compaction hook: ${error}`);
33
+ }
34
+ };
35
+ //# sourceMappingURL=compaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compaction.js","sourceRoot":"","sources":["../../../src/hooks/compaction.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAQ1C,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,MAA6B,EAAE,MAA8C,EAAE,EAAE;IACpH,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,EAAE,CAAA;QAExC,gEAAgE;QAChE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE;YAC/C,MAAM,EAAE,OAAO;SAChB,CAAC,CAAA;QAEF,MAAM,aAAa,GAAG,QAAQ,EAAE,cAAc,IAAI,CAAC,CAAA;QAEnD,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YACtB,qDAAqD;YACrD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE;gBAC9C,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE,EAAE;aACV,CAAC,CAAA;YAEF,IAAI,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjC,MAAM,QAAQ,GAAI,OAAO,CAAC,OAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAE5G,MAAM,CAAC,OAAO,CAAC,IAAI,CACjB,2IAA2I,QAAQ,EAAE,CACtJ,CAAA;YACH,CAAC;QACH,CAAC;QAED,sEAAsE;QACtE,MAAM,CAAC,OAAO,CAAC,IAAI,CACjB,kOAAkO,CACnO,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qCAAqC,KAAK,EAAE,CAAC,CAAA;IAC7D,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * System Prompt Hook
3
+ *
4
+ * Injects relevant memories into the system prompt using adaptive budget
5
+ * based on the model's context window. Inspired by minzique-plugin's
6
+ * tiered priority injection system.
7
+ */
8
+ import type { Model } from '@opencode-ai/sdk';
9
+ export declare const systemPromptHook: (input: {
10
+ sessionID?: string;
11
+ model: Model;
12
+ }, output: {
13
+ system: string[];
14
+ }, directory: string) => Promise<void>;
15
+ //# sourceMappingURL=system-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../../src/hooks/system-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AA+C7C,eAAO,MAAM,gBAAgB,GAC3B,OAAO;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,EAC3C,QAAQ;IAAE,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,EAC5B,WAAW,MAAM,kBA2ClB,CAAA"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * System Prompt Hook
3
+ *
4
+ * Injects relevant memories into the system prompt using adaptive budget
5
+ * based on the model's context window. Inspired by minzique-plugin's
6
+ * tiered priority injection system.
7
+ */
8
+ import { MnemoBridge } from '../bridge.js';
9
+ /** Maximum percentage of context window to use for memory injection */
10
+ const BUDGET_PERCENT = 0.025;
11
+ /** Budget bounds in characters */
12
+ const MIN_BUDGET = 600;
13
+ const MAX_BUDGET = 8000;
14
+ /** Self-awareness block always injected (tells agent about available memory tools) */
15
+ const SELF_AWARENESS = `You have persistent memory via the Mnemo system. You can use:
16
+ - mnemo_search: Search stored memories, facts, preferences, decisions
17
+ - mnemo_remember: Permanently store new facts, rules, preferences
18
+ - mnemo_forget: Delete outdated or incorrect memories
19
+ Proactively search memory when entering a new codebase or when the user asks about past decisions.`;
20
+ /** Extract project name from directory path */
21
+ function getProjectName(directory) {
22
+ const cleanDir = directory.replace(/\\/g, '/');
23
+ const parts = cleanDir.split('/');
24
+ return parts[parts.length - 1] || 'unknown';
25
+ }
26
+ /** Compute injection budget based on model context limit */
27
+ function computeBudget(model) {
28
+ const contextLimit = model?.limit?.context;
29
+ if (!contextLimit || contextLimit <= 0)
30
+ return MIN_BUDGET;
31
+ const budget = Math.floor(contextLimit * BUDGET_PERCENT * 4); // ~4 chars per token
32
+ return Math.max(MIN_BUDGET, Math.min(MAX_BUDGET, budget));
33
+ }
34
+ /** Truncate text to fit within character budget */
35
+ function truncateToFit(text, budget) {
36
+ if (text.length <= budget)
37
+ return text;
38
+ return `${text.slice(0, budget - 3)}...`;
39
+ }
40
+ export const systemPromptHook = async (input, output, directory) => {
41
+ try {
42
+ const bridge = MnemoBridge.getInstance();
43
+ const projectName = getProjectName(directory);
44
+ const budget = computeBudget(input.model);
45
+ // Always inject self-awareness block (outside budget)
46
+ output.system.push(SELF_AWARENESS);
47
+ // Search memories relevant to current project
48
+ const searchRes = await bridge.callTool('memory', {
49
+ action: 'search',
50
+ query: projectName,
51
+ limit: 10
52
+ });
53
+ if (!searchRes || !searchRes.count || searchRes.count === 0)
54
+ return;
55
+ const results = searchRes.results;
56
+ // Build memory injection with budget constraint
57
+ let injection = `[Mnemo Context for "${projectName}"]\n`;
58
+ let usedBudget = injection.length;
59
+ for (const mem of results) {
60
+ const line = `- [${mem.category}] ${mem.content}\n`;
61
+ if (usedBudget + line.length > budget) {
62
+ // Try to fit a truncated version
63
+ const remaining = budget - usedBudget;
64
+ if (remaining > 20) {
65
+ injection += truncateToFit(line, remaining);
66
+ }
67
+ break;
68
+ }
69
+ injection += line;
70
+ usedBudget += line.length;
71
+ }
72
+ output.system.push(injection);
73
+ }
74
+ catch (error) {
75
+ console.error(`[Mnemo] Error injecting system prompt: ${error}`);
76
+ }
77
+ };
78
+ //# sourceMappingURL=system-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../../src/hooks/system-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAU1C,uEAAuE;AACvE,MAAM,cAAc,GAAG,KAAK,CAAA;AAE5B,kCAAkC;AAClC,MAAM,UAAU,GAAG,GAAG,CAAA;AACtB,MAAM,UAAU,GAAG,IAAI,CAAA;AAEvB,sFAAsF;AACtF,MAAM,cAAc,GAAG;;;;mGAI4E,CAAA;AAEnG,+CAA+C;AAC/C,SAAS,cAAc,CAAC,SAAiB;IACvC,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACjC,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,SAAS,CAAA;AAC7C,CAAC;AAED,4DAA4D;AAC5D,SAAS,aAAa,CAAC,KAAY;IACjC,MAAM,YAAY,GAAG,KAAK,EAAE,KAAK,EAAE,OAAO,CAAA;IAC1C,IAAI,CAAC,YAAY,IAAI,YAAY,IAAI,CAAC;QAAE,OAAO,UAAU,CAAA;IAEzD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,cAAc,GAAG,CAAC,CAAC,CAAA,CAAC,qBAAqB;IAClF,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAA;AAC3D,CAAC;AAED,mDAAmD;AACnD,SAAS,aAAa,CAAC,IAAY,EAAE,MAAc;IACjD,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,IAAI,CAAA;IACtC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,CAAA;AAC1C,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,KAA2C,EAC3C,MAA4B,EAC5B,SAAiB,EACjB,EAAE;IACF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,EAAE,CAAA;QACxC,MAAM,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC,CAAA;QAC7C,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAEzC,sDAAsD;QACtD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAElC,8CAA8C;QAC9C,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE;YAChD,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,EAAE;SACV,CAAC,CAAA;QAEF,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,KAAK,CAAC;YAAE,OAAM;QAEnE,MAAM,OAAO,GAAG,SAAS,CAAC,OAAyB,CAAA;QAEnD,gDAAgD;QAChD,IAAI,SAAS,GAAG,uBAAuB,WAAW,MAAM,CAAA;QACxD,IAAI,UAAU,GAAG,SAAS,CAAC,MAAM,CAAA;QAEjC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,OAAO,IAAI,CAAA;YACnD,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;gBACtC,iCAAiC;gBACjC,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,CAAA;gBACrC,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC;oBACnB,SAAS,IAAI,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;gBAC7C,CAAC;gBACD,MAAK;YACP,CAAC;YACD,SAAS,IAAI,IAAI,CAAA;YACjB,UAAU,IAAI,IAAI,CAAC,MAAM,CAAA;QAC3B,CAAC;QAED,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,0CAA0C,KAAK,EAAE,CAAC,CAAA;IAClE,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * mnemo-plugin - Universal Memory Plugin for OpenCode & Claude Code
3
+ *
4
+ * Plugin entrypoint that registers tools and hooks with the OpenCode runtime.
5
+ * Connects to mnemo-mcp (Python MCP server) via stdio transport to provide
6
+ * persistent memory capabilities across coding sessions.
7
+ */
8
+ import type { Plugin } from '@opencode-ai/plugin';
9
+ declare const plugin: Plugin;
10
+ export default plugin;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAOjD,QAAA,MAAM,MAAM,EAAE,MAsCb,CAAA;AAED,eAAe,MAAM,CAAA"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * mnemo-plugin - Universal Memory Plugin for OpenCode & Claude Code
3
+ *
4
+ * Plugin entrypoint that registers tools and hooks with the OpenCode runtime.
5
+ * Connects to mnemo-mcp (Python MCP server) via stdio transport to provide
6
+ * persistent memory capabilities across coding sessions.
7
+ */
8
+ import { MnemoBridge } from './bridge.js';
9
+ import { autoCaptureHook, messageHook } from './hooks/auto-capture.js';
10
+ import { compactionHook } from './hooks/compaction.js';
11
+ import { systemPromptHook } from './hooks/system-prompt.js';
12
+ import { mnemoForget, mnemoRemember, mnemoSearch } from './tools/memory.js';
13
+ const plugin = async (input) => {
14
+ const bridge = MnemoBridge.getInstance();
15
+ // Start bridge connection in background (non-blocking)
16
+ setTimeout(async () => {
17
+ try {
18
+ await bridge.connect();
19
+ console.log(`[Mnemo] Connected to persistent memory for ${input.directory}`);
20
+ }
21
+ catch (e) {
22
+ console.error(`[Mnemo] Background connect failed: ${e}`);
23
+ }
24
+ }, 100);
25
+ return {
26
+ // Tools
27
+ tool: {
28
+ mnemo_search: mnemoSearch,
29
+ mnemo_remember: mnemoRemember,
30
+ mnemo_forget: mnemoForget
31
+ },
32
+ // Hooks
33
+ 'experimental.chat.system.transform': async (inParams, outParams) => {
34
+ await systemPromptHook(inParams, outParams, input.directory);
35
+ },
36
+ 'chat.message': async (inParams, outParams) => {
37
+ await messageHook(inParams, outParams);
38
+ },
39
+ event: async (inParams) => {
40
+ await autoCaptureHook(inParams, input.directory);
41
+ },
42
+ 'experimental.session.compacting': async (inParams, outParams) => {
43
+ await compactionHook(inParams, outParams);
44
+ }
45
+ };
46
+ };
47
+ export default plugin;
48
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE3E,MAAM,MAAM,GAAW,KAAK,EAAE,KAAK,EAAE,EAAE;IACrC,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,EAAE,CAAA;IAExC,uDAAuD;IACvD,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;YACtB,OAAO,CAAC,GAAG,CAAC,8CAA8C,KAAK,CAAC,SAAS,EAAE,CAAC,CAAA;QAC9E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,EAAE,CAAC,CAAA;QAC1D,CAAC;IACH,CAAC,EAAE,GAAG,CAAC,CAAA;IAEP,OAAO;QACL,QAAQ;QACR,IAAI,EAAE;YACJ,YAAY,EAAE,WAAW;YACzB,cAAc,EAAE,aAAa;YAC7B,YAAY,EAAE,WAAW;SAC1B;QAED,QAAQ;QACR,oCAAoC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;YAClE,MAAM,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;QAC9D,CAAC;QAED,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;YAC5C,MAAM,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;QACxC,CAAC;QAED,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;YACxB,MAAM,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;QAClD,CAAC;QAED,iCAAiC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;YAC/D,MAAM,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;QAC3C,CAAC;KACF,CAAA;AACH,CAAC,CAAA;AAED,eAAe,MAAM,CAAA"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Memory Tool Definitions
3
+ *
4
+ * Three user-facing OpenCode tools that wrap the mnemo-mcp `memory` composite tool:
5
+ * - mnemo_search: Search stored memories by query
6
+ * - mnemo_remember: Store a new persistent memory
7
+ * - mnemo_forget: Delete an outdated memory by ID
8
+ */
9
+ import { type ToolDefinition } from '@opencode-ai/plugin/tool';
10
+ export declare const mnemoSearch: ToolDefinition;
11
+ export declare const mnemoRemember: ToolDefinition;
12
+ export declare const mnemoForget: ToolDefinition;
13
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/tools/memory.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,cAAc,EAAQ,MAAM,0BAA0B,CAAA;AAkBpE,eAAO,MAAM,WAAW,EAAE,cAwCxB,CAAA;AAEF,eAAO,MAAM,aAAa,EAAE,cAsC1B,CAAA;AAEF,eAAO,MAAM,WAAW,EAAE,cAuBxB,CAAA"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Memory Tool Definitions
3
+ *
4
+ * Three user-facing OpenCode tools that wrap the mnemo-mcp `memory` composite tool:
5
+ * - mnemo_search: Search stored memories by query
6
+ * - mnemo_remember: Store a new persistent memory
7
+ * - mnemo_forget: Delete an outdated memory by ID
8
+ */
9
+ import { tool } from '@opencode-ai/plugin/tool';
10
+ import { MnemoBridge } from '../bridge.js';
11
+ /** Extract project name from directory path */
12
+ function getProjectName(directory) {
13
+ const cleanDir = directory.replace(/\\/g, '/');
14
+ const parts = cleanDir.split('/');
15
+ return parts[parts.length - 1] || 'unknown';
16
+ }
17
+ export const mnemoSearch = tool({
18
+ description: 'Search the persistent memory system (mnemo) for project rules, facts, preferences, or context. Use this proactively when entering a new codebase or when the user asks about past decisions.',
19
+ args: {
20
+ query: tool.schema.string().describe('The search query (e.g. "What database do we use?", "coding standards")'),
21
+ category: tool.schema
22
+ .string()
23
+ .optional()
24
+ .describe('Filter by category (e.g. "general", "preference", "fact", "architecture")'),
25
+ limit: tool.schema.number().min(1).max(20).default(5).describe('Max results to return')
26
+ },
27
+ async execute(args, context) {
28
+ const bridge = MnemoBridge.getInstance();
29
+ try {
30
+ context.metadata({ title: `Searching mnemo for: ${args.query}` });
31
+ const response = await bridge.callTool('memory', {
32
+ action: 'search',
33
+ query: args.query,
34
+ category: args.category,
35
+ limit: args.limit
36
+ });
37
+ if (!response.count || response.count === 0) {
38
+ return `No memories found matching "${args.query}".`;
39
+ }
40
+ let result = `Found ${response.count} memories:\n\n`;
41
+ for (const [i, mem] of response.results.entries()) {
42
+ const tags = mem.tags?.length ? ` [Tags: ${mem.tags.join(', ')}]` : '';
43
+ result += `${i + 1}. [ID: ${mem.id}] [${mem.category}]${tags} ${mem.content}\n`;
44
+ }
45
+ return result;
46
+ }
47
+ catch (e) {
48
+ const msg = e instanceof Error ? e.message : String(e);
49
+ return `Failed to search memory: ${msg}`;
50
+ }
51
+ }
52
+ });
53
+ export const mnemoRemember = tool({
54
+ description: 'Store a new persistent memory in the mnemo system. Use this to permanently save user preferences, project constraints, architectural decisions, or key facts so they are never forgotten across sessions.',
55
+ args: {
56
+ content: tool.schema.string().describe('The fact, rule, or preference to remember'),
57
+ category: tool.schema
58
+ .string()
59
+ .default('general')
60
+ .describe('Categorize this memory (e.g., "preference", "fact", "architecture", "decision", "bugfix")'),
61
+ tags: tool.schema.array(tool.schema.string()).optional().describe('Keywords to help retrieve this memory later')
62
+ },
63
+ async execute(args, context) {
64
+ const bridge = MnemoBridge.getInstance();
65
+ try {
66
+ const preview = args.content.length > 40 ? `${args.content.slice(0, 40)}...` : args.content;
67
+ context.metadata({ title: `Remembering: ${preview}` });
68
+ // Auto-tag with project name
69
+ const projectName = getProjectName(context.directory);
70
+ const finalTags = args.tags ? [...args.tags] : [];
71
+ if (projectName && !finalTags.includes(projectName)) {
72
+ finalTags.push(projectName);
73
+ }
74
+ const response = await bridge.callTool('memory', {
75
+ action: 'add',
76
+ content: args.content,
77
+ category: args.category,
78
+ tags: finalTags
79
+ });
80
+ return `Successfully stored memory with ID: ${response.id}. This fact is now permanently saved and will be available in future sessions.`;
81
+ }
82
+ catch (e) {
83
+ const msg = e instanceof Error ? e.message : String(e);
84
+ return `Failed to store memory: ${msg}`;
85
+ }
86
+ }
87
+ });
88
+ export const mnemoForget = tool({
89
+ description: 'Delete a specific memory from the mnemo system by its ID. Use this when a preference, fact, or decision is no longer accurate or relevant.',
90
+ args: {
91
+ memory_id: tool.schema.string().describe('The ID of the memory to delete (obtained from mnemo_search results)')
92
+ },
93
+ async execute(args, context) {
94
+ const bridge = MnemoBridge.getInstance();
95
+ try {
96
+ context.metadata({ title: `Deleting memory: ${args.memory_id}` });
97
+ const response = await bridge.callTool('memory', {
98
+ action: 'delete',
99
+ memory_id: args.memory_id
100
+ });
101
+ return `Successfully deleted memory ${response.id}. The fact has been permanently removed.`;
102
+ }
103
+ catch (e) {
104
+ const msg = e instanceof Error ? e.message : String(e);
105
+ return `Failed to delete memory: ${msg}`;
106
+ }
107
+ }
108
+ });
109
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/tools/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Integration tests for MnemoBridge MCP client.
3
+ * Requires uvx and mnemo-mcp to be available in PATH.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=bridge.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.test.d.ts","sourceRoot":"","sources":["../../tests/bridge.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Integration tests for MnemoBridge MCP client.
3
+ * Requires uvx and mnemo-mcp to be available in PATH.
4
+ */
5
+ import * as fs from 'node:fs';
6
+ import * as os from 'node:os';
7
+ import * as path from 'node:path';
8
+ import { afterAll, beforeAll, describe, expect, it } from 'vitest';
9
+ import { MnemoBridge } from '../src/bridge.js';
10
+ describe('MnemoBridge MCP Client', () => {
11
+ let bridge;
12
+ const tempDbPath = path.join(os.tmpdir(), `mnemo-test-${Date.now()}.db`);
13
+ beforeAll(async () => {
14
+ process.env.DB_PATH = tempDbPath;
15
+ bridge = MnemoBridge.getInstance();
16
+ await bridge.connect();
17
+ });
18
+ afterAll(async () => {
19
+ await bridge.shutdown();
20
+ if (fs.existsSync(tempDbPath)) {
21
+ fs.unlinkSync(tempDbPath);
22
+ }
23
+ });
24
+ it('should connect and list tools via MCP', async () => {
25
+ const client = await bridge.connect();
26
+ const tools = await client.listTools();
27
+ expect(tools.tools.length).toBeGreaterThan(0);
28
+ const hasMemoryTool = tools.tools.some((t) => t.name === 'memory');
29
+ expect(hasMemoryTool).toBe(true);
30
+ });
31
+ it('should add and search memory using callTool', async () => {
32
+ const testContent = `MCP integration test secret ${Date.now()}`;
33
+ const addRes = await bridge.callTool('memory', {
34
+ action: 'add',
35
+ content: testContent,
36
+ category: 'test',
37
+ tags: ['integration-test', 'mcp']
38
+ });
39
+ expect(addRes.status).toBe('saved');
40
+ expect(addRes.id).toBeDefined();
41
+ const memId = addRes.id;
42
+ // Brief delay to ensure db is updated before search
43
+ await new Promise((resolve) => setTimeout(resolve, 500));
44
+ const searchRes = await bridge.callTool('memory', {
45
+ action: 'search',
46
+ query: testContent,
47
+ limit: 10
48
+ });
49
+ expect(searchRes.count).toBeGreaterThan(0);
50
+ expect(searchRes.results.length).toBeGreaterThan(0);
51
+ // Find the specific memory by ID (don't assume ordering)
52
+ const foundMem = searchRes.results.find((m) => m.id === memId);
53
+ expect(foundMem).toBeDefined();
54
+ expect(foundMem.content).toContain(testContent);
55
+ });
56
+ it('should delete memory by ID', async () => {
57
+ const addRes = await bridge.callTool('memory', {
58
+ action: 'add',
59
+ content: `Temporary test memory ${Date.now()}`,
60
+ category: 'test',
61
+ tags: ['delete-test']
62
+ });
63
+ expect(addRes.id).toBeDefined();
64
+ const deleteRes = await bridge.callTool('memory', {
65
+ action: 'delete',
66
+ memory_id: addRes.id
67
+ });
68
+ expect(deleteRes.id).toBe(addRes.id);
69
+ });
70
+ it('should get memory stats', async () => {
71
+ const statsRes = await bridge.callTool('memory', {
72
+ action: 'stats'
73
+ });
74
+ expect(statsRes).toBeDefined();
75
+ expect(typeof statsRes.total_memories).toBe('number');
76
+ });
77
+ });
78
+ //# sourceMappingURL=bridge.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.test.js","sourceRoot":"","sources":["../../tests/bridge.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"fileNames":["../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.float16.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/.pnpm/@vitest+pretty-format@4.0.18/node_modules/@vitest/pretty-format/dist/index.d.ts","../node_modules/.pnpm/@vitest+utils@4.0.18/node_modules/@vitest/utils/dist/display.d.ts","../node_modules/.pnpm/@vitest+utils@4.0.18/node_modules/@vitest/utils/dist/types.d.ts","../node_modules/.pnpm/@vitest+utils@4.0.18/node_modules/@vitest/utils/dist/helpers.d.ts","../node_modules/.pnpm/@vitest+utils@4.0.18/node_modules/@vitest/utils/dist/timers.d.ts","../node_modules/.pnpm/@vitest+utils@4.0.18/node_modules/@vitest/utils/dist/index.d.ts","../node_modules/.pnpm/@vitest+runner@4.0.18/node_modules/@vitest/runner/dist/tasks.d-C7UxawJ9.d.ts","../node_modules/.pnpm/@vitest+utils@4.0.18/node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts","../node_modules/.pnpm/@vitest+utils@4.0.18/node_modules/@vitest/utils/dist/diff.d.ts","../node_modules/.pnpm/@vitest+runner@4.0.18/node_modules/@vitest/runner/dist/types.d.ts","../node_modules/.pnpm/@vitest+runner@4.0.18/node_modules/@vitest/runner/dist/index.d.ts","../node_modules/.pnpm/vitest@4.0.18_@types+node@24.10.13_tsx@4.21.0/node_modules/vitest/dist/chunks/traces.d.402V_yFI.d.ts","../node_modules/.pnpm/vite@7.3.1_@types+node@24.10.13_tsx@4.21.0/node_modules/vite/types/hmrPayload.d.ts","../node_modules/.pnpm/vite@7.3.1_@types+node@24.10.13_tsx@4.21.0/node_modules/vite/dist/node/chunks/moduleRunnerTransport.d.ts","../node_modules/.pnpm/vite@7.3.1_@types+node@24.10.13_tsx@4.21.0/node_modules/vite/types/customEvent.d.ts","../node_modules/.pnpm/vite@7.3.1_@types+node@24.10.13_tsx@4.21.0/node_modules/vite/types/hot.d.ts","../node_modules/.pnpm/vite@7.3.1_@types+node@24.10.13_tsx@4.21.0/node_modules/vite/dist/node/module-runner.d.ts","../node_modules/.pnpm/@vitest+snapshot@4.0.18/node_modules/@vitest/snapshot/dist/environment.d-DHdQ1Csl.d.ts","../node_modules/.pnpm/@vitest+snapshot@4.0.18/node_modules/@vitest/snapshot/dist/rawSnapshot.d-lFsMJFUd.d.ts","../node_modules/.pnpm/@vitest+snapshot@4.0.18/node_modules/@vitest/snapshot/dist/index.d.ts","../node_modules/.pnpm/vitest@4.0.18_@types+node@24.10.13_tsx@4.21.0/node_modules/vitest/dist/chunks/config.d.Cy95HiCx.d.ts","../node_modules/.pnpm/vitest@4.0.18_@types+node@24.10.13_tsx@4.21.0/node_modules/vitest/dist/chunks/environment.d.CrsxCzP1.d.ts","../node_modules/.pnpm/vitest@4.0.18_@types+node@24.10.13_tsx@4.21.0/node_modules/vitest/dist/chunks/rpc.d.RH3apGEf.d.ts","../node_modules/.pnpm/vitest@4.0.18_@types+node@24.10.13_tsx@4.21.0/node_modules/vitest/dist/chunks/worker.d.Dyxm8DEL.d.ts","../node_modules/.pnpm/vitest@4.0.18_@types+node@24.10.13_tsx@4.21.0/node_modules/vitest/dist/chunks/browser.d.ChKACdzH.d.ts","../node_modules/.pnpm/@vitest+spy@4.0.18/node_modules/@vitest/spy/dist/index.d.ts","../node_modules/.pnpm/tinyrainbow@3.0.3/node_modules/tinyrainbow/dist/index.d.ts","../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts","../node_modules/.pnpm/@types+deep-eql@4.0.2/node_modules/@types/deep-eql/index.d.ts","../node_modules/.pnpm/assertion-error@2.0.1/node_modules/assertion-error/index.d.ts","../node_modules/.pnpm/@types+chai@5.2.3/node_modules/@types/chai/index.d.ts","../node_modules/.pnpm/@vitest+expect@4.0.18/node_modules/@vitest/expect/dist/index.d.ts","../node_modules/.pnpm/@vitest+runner@4.0.18/node_modules/@vitest/runner/dist/utils.d.ts","../node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.d.ts","../node_modules/.pnpm/vitest@4.0.18_@types+node@24.10.13_tsx@4.21.0/node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts","../node_modules/.pnpm/vitest@4.0.18_@types+node@24.10.13_tsx@4.21.0/node_modules/vitest/dist/chunks/global.d.B15mdLcR.d.ts","../node_modules/.pnpm/vitest@4.0.18_@types+node@24.10.13_tsx@4.21.0/node_modules/vitest/dist/chunks/suite.d.BJWk38HB.d.ts","../node_modules/.pnpm/vitest@4.0.18_@types+node@24.10.13_tsx@4.21.0/node_modules/vitest/dist/chunks/evaluatedModules.d.BxJ5omdx.d.ts","../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.d.ts","../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.d.ts","../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.d.ts","../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.d.ts","../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.d.ts","../node_modules/.pnpm/vitest@4.0.18_@types+node@24.10.13_tsx@4.21.0/node_modules/vitest/dist/index.d.ts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v3/helpers/typeAliases.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v3/helpers/util.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v3/ZodError.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v3/locales/en.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v3/errors.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v3/helpers/parseUtil.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v3/helpers/enumUtil.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v3/helpers/errorUtil.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v3/helpers/partialUtil.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v3/standard-schema.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v3/types.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v3/external.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v3/index.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/core/standard-schema.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/core/util.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/core/versions.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/core/schemas.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/core/checks.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/core/errors.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/core/core.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/core/parse.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/core/regexes.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/ar.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/az.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/be.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/ca.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/cs.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/da.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/de.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/en.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/eo.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/es.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/fa.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/fi.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/fr.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/fr-CA.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/he.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/hu.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/id.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/is.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/it.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/ja.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/ka.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/kh.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/km.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/ko.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/lt.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/mk.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/ms.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/nl.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/no.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/ota.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/ps.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/pl.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/pt.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/ru.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/sl.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/sv.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/ta.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/th.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/tr.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/ua.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/uk.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/ur.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/vi.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/zh-CN.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/zh-TW.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/yo.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/locales/index.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/core/registries.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/core/doc.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/core/api.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/core/json-schema.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/core/to-json-schema.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/core/index.d.cts","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.26.0_zod@4.1.8/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.d.ts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/classic/errors.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/classic/parse.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/classic/schemas.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/classic/checks.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/classic/compat.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/classic/iso.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/classic/coerce.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/classic/external.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/classic/index.d.cts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/v4/index.d.cts","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.26.0_zod@4.1.8/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/types.d.ts","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.26.0_zod@4.1.8/node_modules/@modelcontextprotocol/sdk/dist/esm/types.d.ts","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.26.0_zod@4.1.8/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/transport.d.ts","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.26.0_zod@4.1.8/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/types.d.ts","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.26.0_zod@4.1.8/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.d.ts","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.26.0_zod@4.1.8/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/responseMessage.d.ts","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.26.0_zod@4.1.8/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.d.ts","../node_modules/.pnpm/json-schema-typed@8.0.2/node_modules/json-schema-typed/draft_2020_12.d.ts","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.26.0_zod@4.1.8/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/types.d.ts","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.26.0_zod@4.1.8/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/client.d.ts","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.26.0_zod@4.1.8/node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.d.ts","../node_modules/.pnpm/@modelcontextprotocol+sdk@1.26.0_zod@4.1.8/node_modules/@modelcontextprotocol/sdk/dist/esm/client/stdio.d.ts","../src/bridge.ts","../tests/bridge.test.ts","../node_modules/.pnpm/@opencode-ai+sdk@1.2.10/node_modules/@opencode-ai/sdk/dist/gen/types.gen.d.ts","../node_modules/.pnpm/@opencode-ai+sdk@1.2.10/node_modules/@opencode-ai/sdk/dist/gen/core/auth.gen.d.ts","../node_modules/.pnpm/@opencode-ai+sdk@1.2.10/node_modules/@opencode-ai/sdk/dist/gen/core/pathSerializer.gen.d.ts","../node_modules/.pnpm/@opencode-ai+sdk@1.2.10/node_modules/@opencode-ai/sdk/dist/gen/core/bodySerializer.gen.d.ts","../node_modules/.pnpm/@opencode-ai+sdk@1.2.10/node_modules/@opencode-ai/sdk/dist/gen/core/types.gen.d.ts","../node_modules/.pnpm/@opencode-ai+sdk@1.2.10/node_modules/@opencode-ai/sdk/dist/gen/core/serverSentEvents.gen.d.ts","../node_modules/.pnpm/@opencode-ai+sdk@1.2.10/node_modules/@opencode-ai/sdk/dist/gen/client/utils.gen.d.ts","../node_modules/.pnpm/@opencode-ai+sdk@1.2.10/node_modules/@opencode-ai/sdk/dist/gen/client/types.gen.d.ts","../node_modules/.pnpm/@opencode-ai+sdk@1.2.10/node_modules/@opencode-ai/sdk/dist/gen/core/params.gen.d.ts","../node_modules/.pnpm/@opencode-ai+sdk@1.2.10/node_modules/@opencode-ai/sdk/dist/gen/client/client.gen.d.ts","../node_modules/.pnpm/@opencode-ai+sdk@1.2.10/node_modules/@opencode-ai/sdk/dist/gen/client/index.d.ts","../node_modules/.pnpm/@opencode-ai+sdk@1.2.10/node_modules/@opencode-ai/sdk/dist/gen/sdk.gen.d.ts","../node_modules/.pnpm/@opencode-ai+sdk@1.2.10/node_modules/@opencode-ai/sdk/dist/client.d.ts","../node_modules/.pnpm/@opencode-ai+sdk@1.2.10/node_modules/@opencode-ai/sdk/dist/server.d.ts","../node_modules/.pnpm/@opencode-ai+sdk@1.2.10/node_modules/@opencode-ai/sdk/dist/index.d.ts","../node_modules/.pnpm/@opencode-ai+plugin@1.2.10/node_modules/@opencode-ai/plugin/dist/shell.d.ts","../node_modules/.pnpm/zod@4.1.8/node_modules/zod/index.d.cts","../node_modules/.pnpm/@opencode-ai+plugin@1.2.10/node_modules/@opencode-ai/plugin/dist/tool.d.ts","../node_modules/.pnpm/@opencode-ai+plugin@1.2.10/node_modules/@opencode-ai/plugin/dist/index.d.ts","../src/hooks/auto-capture.ts","../src/hooks/compaction.ts","../src/hooks/system-prompt.ts","../src/tools/memory.ts","../src/index.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/compatibility/iterators.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/globals.typedarray.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/buffer.buffer.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/globals.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/web-globals/abortcontroller.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/web-globals/crypto.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/web-globals/domexception.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/web-globals/events.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/utility.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/header.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/readable.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/fetch.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/formdata.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/connector.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/client-stats.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/client.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/errors.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/dispatcher.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/global-dispatcher.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/global-origin.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/pool-stats.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/pool.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/handlers.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/balanced-pool.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/h2c-client.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/agent.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-interceptor.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-call-history.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-agent.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-client.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-pool.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/snapshot-agent.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-errors.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/proxy-agent.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/retry-handler.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/retry-agent.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/api.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cache-interceptor.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/interceptors.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/util.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cookies.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/patch.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/websocket.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/eventsource.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/content-type.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cache.d.ts","../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/index.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/web-globals/fetch.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/web-globals/navigator.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/web-globals/storage.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/web-globals/streams.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/assert.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/assert/strict.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/async_hooks.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/buffer.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/child_process.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/cluster.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/console.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/constants.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/crypto.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/dgram.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/dns.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/dns/promises.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/domain.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/events.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/fs.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/fs/promises.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/http.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/http2.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/https.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/inspector.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/inspector.generated.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/module.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/net.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/os.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/path.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/perf_hooks.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/process.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/punycode.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/querystring.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/readline.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/readline/promises.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/repl.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/sea.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/sqlite.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/stream.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/stream/promises.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/stream/consumers.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/stream/web.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/string_decoder.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/test.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/timers.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/timers/promises.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/tls.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/trace_events.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/tty.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/url.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/util.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/v8.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/vm.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/wasi.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/worker_threads.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/zlib.d.ts","../node_modules/.pnpm/@types+node@24.10.13/node_modules/@types/node/index.d.ts"],"fileIdsList":[[179,191,192,196,198,199,230,284,301,302],[191,192,230,284,285,301,302,316],[179,191,193,195,196,200,230,284,301,302],[179,191,193,196,230,284,301,302],[191,230,284,301,302],[230,284,301,302],[116,178,230,284,301,302],[179,190,191,192,194,195,230,284,301,302],[189,190,230,284,301,302],[197,230,284,301,302],[218,219,221,230,284,301,302],[220,230,284,301,302],[204,211,215,230,284,301,302],[211,230,284,301,302],[205,207,210,211,212,213,230,284,301,302],[205,208,209,210,230,284,301,302],[207,211,230,284,301,302],[206,230,284,301,302],[208,230,284,301,302],[205,207,230,284,301,302],[204,209,211,214,230,284,301,302],[216,217,230,284,301,302],[204,230,284,301,302],[88,89,230,284,301,302],[230,281,282,284,301,302],[230,283,284,301,302],[284,301,302],[230,284,289,301,302,319],[230,284,285,290,295,301,302,304,316,327],[230,284,285,286,295,301,302,304],[230,284,287,301,302,328],[230,284,288,289,296,301,302,305],[230,284,289,301,302,316,324],[230,284,290,292,295,301,302,304],[230,283,284,291,301,302],[230,284,292,293,301,302],[230,284,294,295,301,302],[230,283,284,295,301,302],[230,284,295,296,297,301,302,316,327],[230,284,295,296,297,301,302,311,316,319],[230,276,284,292,295,298,301,302,304,316,327],[230,284,295,296,298,299,301,302,304,316,324,327],[230,284,298,300,301,302,316,324,327],[228,229,230,231,232,233,234,235,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333],[230,284,295,301,302],[230,284,301,302,303,327],[230,284,292,295,301,302,304,316],[230,284,301,302,305],[230,284,301,302,306],[230,283,284,301,302,307],[230,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333],[230,284,301,302,309],[230,284,301,302,310],[230,284,295,301,302,311,312],[230,284,301,302,311,313,328,330],[230,284,296,301,302],[230,284,295,301,302,316,317,319],[230,284,301,302,318,319],[230,284,301,302,316,317],[230,284,301,302,319],[230,284,301,302,320],[230,281,284,301,302,316,321,327],[230,284,295,301,302,322,323],[230,284,301,302,322,323],[230,284,289,301,302,304,316,324],[230,284,301,302,325],[230,284,301,302,304,326],[230,284,298,301,302,310,327],[230,284,289,301,302,328],[230,284,301,302,316,329],[230,284,301,302,303,330],[230,284,301,302,331],[230,284,289,301,302],[230,276,284,301,302],[230,284,301,302,332],[230,276,284,295,297,301,302,307,316,319,327,329,330,332],[230,284,301,302,316,333],[61,65,68,70,85,86,87,90,95,230,284,301,302],[65,66,68,69,230,284,301,302],[65,230,284,301,302],[65,66,68,230,284,301,302],[65,66,230,284,301,302],[60,77,78,230,284,301,302],[60,77,230,284,301,302],[60,67,230,284,301,302],[60,230,284,301,302],[62,230,284,301,302],[60,61,62,63,64,230,284,301,302],[98,99,230,284,301,302],[98,99,100,101,230,284,301,302],[98,100,230,284,301,302],[98,230,284,301,302],[230,242,245,248,249,284,301,302,327],[230,245,284,301,302,316,327],[230,245,249,284,301,302,327],[230,284,301,302,316],[230,239,284,301,302],[230,243,284,301,302],[230,241,242,245,284,301,302,327],[230,284,301,302,304,324],[230,284,301,302,334],[230,239,284,301,302,334],[230,241,245,284,301,302,304,327],[230,236,237,238,240,244,284,295,301,302,316,327],[230,245,253,261,284,301,302],[230,237,243,284,301,302],[230,245,270,271,284,301,302],[230,237,240,245,284,301,302,319,327,334],[230,245,284,301,302],[230,241,245,284,301,302,327],[230,236,284,301,302],[230,239,240,241,243,244,245,246,247,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,271,272,273,274,275,284,301,302],[230,245,263,266,284,292,301,302],[230,245,253,254,255,284,301,302],[230,243,245,254,256,284,301,302],[230,244,284,301,302],[230,237,239,245,284,301,302],[230,245,249,254,256,284,301,302],[230,249,284,301,302],[230,243,245,248,284,301,302,327],[230,237,241,245,253,284,301,302],[230,245,263,284,301,302],[230,256,284,301,302],[230,239,245,270,284,301,302,319,332,334],[72,230,284,301,302],[72,73,74,75,230,284,301,302],[74,230,284,301,302],[70,92,93,95,230,284,301,302],[70,71,83,95,230,284,301,302],[60,68,70,79,95,230,284,301,302],[76,230,284,301,302],[60,70,79,82,91,94,95,230,284,301,302],[70,71,76,79,95,230,284,301,302],[70,92,93,94,95,230,284,301,302],[70,76,80,81,82,95,230,284,301,302],[60,65,68,70,71,76,79,80,81,82,83,84,85,91,92,93,94,95,96,97,102,230,284,301,302],[187,230,284,301,302],[104,105,116,230,284,301,302],[106,107,230,284,301,302],[104,105,106,108,109,114,230,284,301,302],[105,106,230,284,301,302],[114,230,284,301,302],[115,230,284,301,302],[106,230,284,301,302],[104,105,106,109,110,111,112,113,230,284,301,302],[178,230,284,301,302],[178,182,230,284,301,302],[172,178,180,181,182,183,184,185,186,230,284,301,302],[178,180,230,284,301,302],[178,181,230,284,301,302],[118,120,121,122,123,230,284,301,302],[118,120,122,123,230,284,301,302],[118,120,122,230,284,301,302],[117,118,120,121,123,230,284,301,302],[118,119,120,121,122,123,124,125,172,173,174,175,176,177,230,284,301,302],[120,123,230,284,301,302],[117,118,119,121,122,123,230,284,301,302],[120,173,176,230,284,301,302],[120,121,122,123,230,284,301,302],[188,230,284,301,302],[122,230,284,301,302],[126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,230,284,301,302],[191,200,201,230,284,301,302],[202,218,230,284,301,302],[202,230,284,301,302],[202,222,223,224,225,226,230,284,301,302],[202,221,230,284,301,302],[103,202,230,284,296,301,302,305,306]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"acfb723d81eda39156251aed414c553294870bf53062429ebfcfba8a68cb4753","impliedFormat":99},{"version":"fa69a90381c2f85889722a911a732a5ee3596dc3acecda8a9aa2fa89b9615d8d","impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"57e9e1b0911874c62d743af24b5d56032759846533641d550b12a45ff404bf07","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"854cd3a3375ffc4e7a92b2168dd065d7ff2614b43341038a65cca865a44c00c5","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"3b0a56d056d81a011e484b9c05d5e430711aaecd561a788bad1d0498aad782c7","impliedFormat":99},{"version":"2f863ee9b873a65d9c3338ea7aaddbdb41a9673f062f06983d712bd01c25dc6b","impliedFormat":99},{"version":"67aa128c2bc170b93794f191feffc65a4b33e878db211cfcb7658c4b72f7a1f5","impliedFormat":99},{"version":"ac3d263474022e9a14c43f588f485d549641d839b159ecc971978b90f34bdf6b","impliedFormat":99},{"version":"a7ca8df4f2931bef2aa4118078584d84a0b16539598eaadf7dce9104dfaa381c","impliedFormat":1},{"version":"10073cdcf56982064c5337787cc59b79586131e1b28c106ede5bff362f912b70","impliedFormat":99},{"version":"72950913f4900b680f44d8cab6dd1ea0311698fc1eefb014eb9cdfc37ac4a734","impliedFormat":1},{"version":"36977c14a7f7bfc8c0426ae4343875689949fb699f3f84ecbe5b300ebf9a2c55","impliedFormat":1},{"version":"ff0a83c9a0489a627e264ffcb63f2264b935b20a502afa3a018848139e3d8575","impliedFormat":99},{"version":"324ac98294dab54fbd580c7d0e707d94506d7b2c3d5efe981a8495f02cf9ad96","impliedFormat":99},{"version":"9ec72eb493ff209b470467e24264116b6a8616484bca438091433a545dfba17e","impliedFormat":99},{"version":"c35b8117804c639c53c87f2c23e0c786df61d552e513bd5179f5b88e29964838","impliedFormat":99},{"version":"c609331c6ed4ad4af54e101088c6a4dcb48f8db7b0b97e44a6efeb130f4331bd","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"67acaedb46832d66c15f1b09fb7b6a0b7f41bdbf8eaa586ec70459b3e8896eb9","impliedFormat":99},{"version":"4535ab977ee871e956eb7bebe2db5de79f5d5ec7dfbbf1d35e08f4a2d6630dac","impliedFormat":99},{"version":"b79b5ed99f26ffb2f8ae4bdcc4b34a9542197dc3fa96cfb425c2a81e618cff28","impliedFormat":99},{"version":"31fd7c12f6e27154efb52a916b872509a771880f3b20f2dfd045785c13aa813f","impliedFormat":99},{"version":"b481de4ab5379bd481ca12fc0b255cdc47341629a22c240a89cdb4e209522be2","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"4e258d11c899cb9ff36b4b5c53df59cf4a5ccae9a9931529686e77431e0a3518","affectsGlobalScope":true,"impliedFormat":99},{"version":"a5ae67a67f786ffe92d34b55467a40fb50fb0093e92388cadce6168fa42690fd","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"a534e61c2f06a147d97aebad720db97dffd8066b7142212e46bcbcdcb640b81a","impliedFormat":99},{"version":"ddf569d04470a4d629090d43a16735185001f3fcf0ae036ead99f2ceab62be48","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"53c448183c7177c83d3eb0b40824cf8952721a6584cf22052adc24f778986732","impliedFormat":99},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"293eadad9dead44c6fd1db6de552663c33f215c55a1bfa2802a1bceed88ff0ec","impliedFormat":1},{"version":"206e73f49f16633113787cc651dc03dc900379395dfa02ab1ef4c9cbbcd5adc2","impliedFormat":1},{"version":"fec412ded391a7239ef58f455278154b62939370309c1fed322293d98c8796a6","impliedFormat":1},{"version":"e3498cf5e428e6c6b9e97bd88736f26d6cf147dedbfa5a8ad3ed8e05e059af8a","impliedFormat":1},{"version":"dba3f34531fd9b1b6e072928b6f885aa4d28dd6789cbd0e93563d43f4b62da53","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"e4b03ddcf8563b1c0aee782a185286ed85a255ce8a30df8453aade2188bbc904","impliedFormat":1},{"version":"2329d90062487e1eaca87b5e06abcbbeeecf80a82f65f949fd332cfcf824b87b","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"93c3e73824ad57f98fd23b39335dbdae2db0bd98199b0dc0b9ccc60bf3c5134a","impliedFormat":1},{"version":"a9ebb67d6bbead6044b43714b50dcb77b8f7541ffe803046fdec1714c1eba206","impliedFormat":1},{"version":"833e92c058d033cde3f29a6c7603f517001d1ddd8020bc94d2067a3bc69b2a8e","impliedFormat":1},{"version":"309ebd217636d68cf8784cbc3272c16fb94fb8e969e18b6fe88c35200340aef1","impliedFormat":1},{"version":"f987c74a4b4baf361afbf22a16d230ee490d662f9aa2066853bb7ebbb8611355","impliedFormat":1},{"version":"1ff91526fcdd634148c655ef86e912a273ce6a0239e2505701561f086678262b","impliedFormat":1},{"version":"d9faf4a343833207c6c5cd2322fb6771b56dc1c8ece975072e85227c2d326bc2","impliedFormat":1},{"version":"8d67b13da77316a8a2fabc21d340866ddf8a4b99e76a6c951cc45189142df652","impliedFormat":1},{"version":"7952419455ca298776db0005b9b5b75571d484d526a29bfbdf041652213bce6f","impliedFormat":1},{"version":"21360500b20e0ec570f26f1cbb388c155ede043698970f316969840da4f16465","impliedFormat":1},{"version":"3a819c2928ee06bbcc84e2797fd3558ae2ebb7e0ed8d87f71732fb2e2acc87b4","impliedFormat":1},{"version":"1765e61249cb44bf5064d42bfa06956455bbc74dc05f074d5727e8962592c920","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"7b9e6b3c726d47935bdc9ebc78fe5398e28e751ba7d70e9e011f01fbd5b618be","impliedFormat":1},{"version":"6e5857f38aa297a859cab4ec891408659218a5a2610cd317b6dcbef9979459cc","impliedFormat":1},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":1},{"version":"56ccc6238510b913f5e6c21afdc447632873f76748d0b30a87cb313b42f1c196","impliedFormat":1},{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":1},{"version":"85021a58f728318a9c83977a8a3a09196dcfc61345e0b8bbbb39422c1594f36b","impliedFormat":1},{"version":"d91805544905a40fbd639ba1b85f65dc13d6996a07034848d634aa9edb63479e","impliedFormat":1},{"version":"0648a8c200b5544e30677f7f7059b1e384d6cab716c82659716457e3f317ebae","impliedFormat":99},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"5a3bd57ed7a9d9afef74c75f77fce79ba3c786401af9810cdf45907c4e93f30e","impliedFormat":1},{"version":"8610f5dc475d74c4b095aafa0c191548bfd43f65802e6da54b5e526202b8cfe0","impliedFormat":1},{"version":"7b9496d2e1664155c3c293e1fbbe2aba288614163c88cb81ed6061905924b8f9","impliedFormat":1},{"version":"e27451b24234dfed45f6cf22112a04955183a99c42a2691fb4936d63cfe42761","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"2fbc91ba70096f93f57e22d1f0af22b707dbb3f9f5692cc4f1200861d3b75d88","impliedFormat":1},{"version":"d8bc0c5487582c6d887c32c92d8b4ffb23310146fcb1d82adf4b15c77f57c4ac","impliedFormat":1},{"version":"8cb31102790372bebfd78dd56d6752913b0f3e2cefbeb08375acd9f5ba737155","impliedFormat":1},{"version":"f17ed72d1b1882ab6dc66d45e699f757d15bba0807af2fc9c3ec98fe367611c1","impliedFormat":99},{"version":"1261246aed09870ea204dd3ab6958463d4a1bb91da9d34ed17615fbe34699440","impliedFormat":99},{"version":"7bb43a0f0180ad87b0a944ef95be8615d4c1d621a93ae503a8fcdee2027243ef","impliedFormat":99},{"version":"ba678532514244768286bdfdc82b33f072d5de4e9d281a75bcccdba9970788d7","impliedFormat":99},{"version":"0b79f95a79497386c50f38bafbbf59154619e51d7bbe5acf61cd376d3c9d77b9","impliedFormat":99},{"version":"5993793a23b298afd20c2e1cd2bf8468cc7e9415d314d0771e93dd8b2e389d28","impliedFormat":99},{"version":"2ac574152c07fe5bfea9ce46e9452a28f849ec11c7bbbdc399b7bd1aeab9455f","impliedFormat":99},{"version":"104fae9b53b5eaa040d9ce626e1bf0b3e6e27d269a899a98a4a28358cdcbc155","impliedFormat":99},{"version":"50a6aa665f3a2e769a4d683f9f74cd15164d0947fb957d8016331b170ab8b643","impliedFormat":99},{"version":"af1c82452583c91ff01be5c5c9809e7bb10859ff7027fadc4f0f85f79f807b57","impliedFormat":99},{"version":"8ffbfc204443cc4b508e043c3e18bea2ea4efc7973ae274c08f01ba943717978","impliedFormat":99},{"version":"df7f33d8c7e22b398526b39d114ca9db159760640c9f0401b88f030ca61a755e","impliedFormat":99},{"version":"96ed79be1591ba60814291d8379c3f74e95205265046268dc097087e0704c96c","signature":"1c6eb46b13a65a5ed084726686ff892b988c87abdfe58ec7e5f4227f617f1281"},{"version":"ec2e05414022239f249e46cb474bc3ff4a5cf49613e0e2c57aa3ab950247c995","signature":"9effc5c3eaa1e1079ef2cf480ee0b9d605c47d4a7db22efc3fa3ed3d8f60a02f"},{"version":"abd950a6eb114f55ae2210538340b4167a5d6e2f270864433417a9417c9c59b2","impliedFormat":99},{"version":"96135fbf1dab9f857c9df88a191fdc435517f7a5b021d09cad0c290a1dcec436","impliedFormat":99},{"version":"c36ce4ffa39eae9d8d5f3262bbff170f55b375156bc4eeadadfeede2820aa4c2","impliedFormat":99},{"version":"44fd7a3b2fac384971e638548c227835a2f8c3c2232edff7e0f951a0e136e562","impliedFormat":99},{"version":"80498d31235c22ee711a9fb6f0ca2bcb8fbf5c9a787f3d3a76962b440df70013","impliedFormat":99},{"version":"c41ccf7ec4fecea9d6e5b72ae7f20c91bbe85a8a82caada5ae8a3bc5a56c8926","impliedFormat":99},{"version":"77fed0312d2ec2b08afb890b7760b5f2328f6e09065ea05b5fc35d5294fbb434","impliedFormat":99},{"version":"11f6e61b31e0c89eae79ce790895bf85b918572c32c2de45998f7cbacbb3b963","impliedFormat":99},{"version":"d23fac93be3afb1c83269864f13b5e5fc246b05cb21b7e019e38403e4ef1aba5","impliedFormat":99},{"version":"358599da1d31542e1d3ebf35a4a98665395ea8eaf0063826b8838974f7e826e5","impliedFormat":99},{"version":"06240cf9eca32a7ea5436ee67c8420bc1ddacfaf0d28cd17d09dd56a65c8fb9a","impliedFormat":99},{"version":"5f71dae22207eb5119b2e005e046c0404a29454292e07c68668e39c9931414cd","impliedFormat":99},{"version":"84edb938f2b673df750cf83e9516218404e9df7e32e66f2f063c813d7f4d0e62","impliedFormat":99},{"version":"579f61b51c0e5dc0119ab49fc536130749280c7a23e489e753fcce08c229ce2c","impliedFormat":99},{"version":"2a7a35e3f1ead49569fe0423ae65055184f9384b97999cd90bb99878f727e585","impliedFormat":99},{"version":"340d8057526217987a3a797d93a03b6e6c9a9e1cd8e7c46a676ea008a710afe1","impliedFormat":99},{"version":"29f823cbe0166e10e7176a94afe609a24b9e5af3858628c541ff8ce1727023cd","impliedFormat":1},{"version":"10c4747fb7470f341a977f88fa3c66bf05593cd835a25185f996244c5b638073","impliedFormat":99},{"version":"1fb9043da99109d58eb133fcbad20a32ff68a88a097cf08356801146555d6193","impliedFormat":99},{"version":"09c133a5c5b70bd9c7bfe96294e618df204bd60b9a7ded958754d4a5848cd19a","signature":"1344edd722ce9c0e6d174dc3b1aa5670c5d2a99297d2c9530b978a8a0a732cce"},{"version":"6b63b99a2671cd72fb8e433106994200b8ecc89abf3951811e8c57ef80c8e594","signature":"444ed9f40788db7954b7ff54fb6eb1851377d2dbe82588a3a207899bd837eee3"},{"version":"6527d59d3cd862eb10eea1e10d483b4a82a41b8ee2300f46c8ed89e1b8457ff2","signature":"3c7524d25243d1c93861c562bd2402da0a8dcb74b98cacb059902257b00c9e62"},{"version":"2dd78fde31a3a0b4edb2b35afc0df41a222242fb172d5874ca4b601ee080ff31","signature":"4559302b7139c6c7c051b3a62504ea89d6b99d670fc022a293f8ca807b1803f1"},{"version":"7ce0ebb259b3477300d222b1f1f36fee1065988852ccae84b1cee193df0c1d9a","signature":"8c8d193a38f4d354fad28f6c2cdc531a89f02fbf7eb13cb3deb219e70cf823a4"},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"378281aa35786c27d5811af7e6bcaa492eebd0c7013d48137c35bbc69a2b9751","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"1b2dd1cbeb0cc6ae20795958ba5950395ebb2849b7c8326853dd15530c77ab0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"387a023d363f755eb63450a66c28b14cdd7bc30a104565e2dbf0a8988bb4a56c","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"f724236417941ea77ec8d38c6b7021f5fb7f8521c7f8c1538e87661f2c6a0774","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ea15fd99b2e34cb25fe8346c955000bb70c8b423ae4377a972ef46bfb37f595","impliedFormat":1},{"version":"7cf69dd5502c41644c9e5106210b5da7144800670cbe861f66726fa209e231c4","impliedFormat":1},{"version":"72c1f5e0a28e473026074817561d1bc9647909cf253c8d56c41d1df8d95b85f7","impliedFormat":1},{"version":"f9b4137a0d285bd77dba2e6e895530112264310ae47e07bf311feae428fb8b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b21e13ed07d0df176ae31d6b7f01f7b17d66dbeb489c0d31d00de2ca14883da","impliedFormat":1},{"version":"51aecd2df90a3cffea1eb4696b33b2d78594ea2aa2138e6b9471ec4841c6c2ee","impliedFormat":1},{"version":"9d8f9e63e29a3396285620908e7f14d874d066caea747dc4b2c378f0599166b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"f929f0b6b3421a2d34344b0f421f45aeb2c84ad365ebf29d04312023b3accc58","impliedFormat":1},{"version":"db9ada976f9e52e13f7ae8b9a320f4b67b87685938c5879187d8864b2fbe97f3","impliedFormat":1},{"version":"9f39e70a354d0fba29ac3cdf6eca00b7f9e96f64b2b2780c432e8ea27f133743","impliedFormat":1},{"version":"0dace96cc0f7bc6d0ee2044921bdf19fe42d16284dbcc8ae200800d1c9579335","impliedFormat":1},{"version":"a2e2bbde231b65c53c764c12313897ffdfb6c49183dd31823ee2405f2f7b5378","impliedFormat":1},{"version":"ad1cc0ed328f3f708771272021be61ab146b32ecf2b78f3224959ff1e2cd2a5c","impliedFormat":1},{"version":"c64e1888baaa3253ca4405b455e4bf44f76357868a1bd0a52998ade9a092ad78","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc8c6f5322961b56d9906601b20798725df60baeab45ec014fba9f795d5596fd","impliedFormat":1},{"version":"0904660ae854e6d41f6ff25356db1d654436c6305b0f0aa89d1532df0253486e","impliedFormat":1},{"version":"9cdfd0a77dd7eeed57e91d3f449274ea2470abdb7e167a2f146b1ea8de6224e0","impliedFormat":1},{"version":"230bdc111d7578276e4a3bb9d075d85c78c6b68f428c3a9935e2eaa10f4ae1f5","impliedFormat":1},{"version":"e8aabbee5e7b9101b03bb4222607d57f38859b8115a8050a4eb91b4ee43a3a73","impliedFormat":1},{"version":"bbf42f98a5819f4f06e18c8b669a994afe9a17fe520ae3454a195e6eabf7700d","impliedFormat":1},{"version":"c0bb1b65757c72bbf8ddf7eaa532223bacf58041ff16c883e76f45506596e925","impliedFormat":1},{"version":"c8b85f7aed29f8f52b813f800611406b0bfe5cf3224d20a4bdda7c7f73ce368e","affectsGlobalScope":true,"impliedFormat":1},{"version":"145dcf25fd4967c610c53d93d7bc4dce8fbb1b6dd7935362472d4ae49363c7ba","impliedFormat":1},{"version":"ff65b8a8bd380c6d129becc35de02f7c29ad7ce03300331ca91311fb4044d1a9","impliedFormat":1},{"version":"04bf1aa481d1adfb16d93d76e44ce71c51c8ef68039d849926551199489637f6","impliedFormat":1},{"version":"9043daec15206650fa119bad6b8d70136021ea7d52673a71f79a87a42ee38d44","affectsGlobalScope":true,"impliedFormat":1},{"version":"d00e86e2e74089bf416b4c5cc433d88eb2e09dcef5e3c5b79ca04a36d8d8d6f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a58a15da4c5ba3df60c910a043281256fa52d36a0fcdef9b9100c646282e88dd","impliedFormat":1},{"version":"b36beffbf8acdc3ebc58c8bb4b75574b31a2169869c70fc03f82895b93950a12","impliedFormat":1},{"version":"de263f0089aefbfd73c89562fb7254a7468b1f33b61839aafc3f035d60766cb4","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"8c81fd4a110490c43d7c578e8c6f69b3af01717189196899a6a44f93daa57a3a","impliedFormat":1},{"version":"5fb39858b2459864b139950a09adae4f38dad87c25bf572ce414f10e4bd7baab","impliedFormat":1},{"version":"65faec1b4bd63564aeec33eab9cacfaefd84ce2400f03903a71a1841fbce195f","impliedFormat":1},{"version":"b33b74b97952d9bf4fbd2951dcfbb5136656ddb310ce1c84518aaa77dbca9992","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"8d117798e5228c7fdff887f44851d07320739c5cc0d511afae8f250c51809a36","affectsGlobalScope":true,"impliedFormat":1},{"version":"c119835edf36415081dfd9ed15fc0cd37aaa28d232be029ad073f15f3d88c323","impliedFormat":1},{"version":"8e7c3bed5f19ade8f911677ddc83052e2283e25b0a8654cd89db9079d4b323c7","impliedFormat":1},{"version":"9705cd157ffbb91c5cab48bdd2de5a437a372e63f870f8a8472e72ff634d47c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae86f30d5d10e4f75ce8dcb6e1bd3a12ecec3d071a21e8f462c5c85c678efb41","impliedFormat":1},{"version":"a1a3cbade20430dcb7f00fa23c2f020e827d5620c0d44213db1665c53231f1fc","impliedFormat":1},{"version":"e03460fe72b259f6d25ad029f085e4bedc3f90477da4401d8fbc1efa9793230e","impliedFormat":1},{"version":"4286a3a6619514fca656089aee160bb6f2e77f4dd53dc5a96b26a0b4fc778055","impliedFormat":1},{"version":"69e0a41d620fb678a899c65e073413b452f4db321b858fe422ad93fd686cd49a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3585d6891e9ea18e07d0755a6d90d71331558ba5dc5561933553209f886db106","affectsGlobalScope":true,"impliedFormat":1},{"version":"86be71cbb0593468644932a6eb96d527cfa600cecfc0b698af5f52e51804451d","impliedFormat":1},{"version":"84dd6b0fd2505135692935599d6606f50a421389e8d4535194bcded307ee5cf2","impliedFormat":1},{"version":"0d5b085f36e6dc55bc6332ecb9c733be3a534958c238fb8d8d18d4a2b6f2a15a","impliedFormat":1},{"version":"db19ea066fdc5f97df3f769e582ae3000380ab7942e266654bdb1a4650d19eaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"2a034894bf28c220a331c7a0229d33564803abe2ac1b9a5feee91b6b9b6e88ea","impliedFormat":1},{"version":"d7e9ab1b0996639047c61c1e62f85c620e4382206b3abb430d9a21fb7bc23c77","impliedFormat":1}],"root":[202,203,[223,227]],"options":{"allowJs":true,"allowSyntheticDefaultImports":true,"checkJs":false,"composite":true,"declaration":true,"declarationMap":true,"module":7,"outDir":"./","skipLibCheck":true,"sourceMap":true,"strict":true,"target":8},"referencedMap":[[200,1],[201,2],[199,3],[194,4],[193,5],[190,6],[179,7],[196,8],[195,5],[192,5],[191,9],[198,10],[222,11],[219,6],[221,12],[216,13],[213,14],[214,15],[211,16],[210,17],[205,6],[207,18],[212,6],[206,6],[209,19],[208,20],[215,21],[204,6],[218,22],[217,23],[87,6],[90,24],[88,6],[281,25],[282,25],[283,26],[230,27],[284,28],[285,29],[286,30],[228,6],[287,31],[288,32],[289,33],[290,34],[291,35],[292,36],[293,36],[294,37],[295,38],[296,39],[297,40],[231,6],[229,6],[298,41],[299,42],[300,43],[334,44],[301,45],[302,6],[303,46],[304,47],[305,48],[306,49],[307,50],[308,51],[309,52],[310,53],[311,54],[312,54],[313,55],[314,6],[315,56],[316,57],[318,58],[317,59],[319,60],[320,61],[321,62],[322,63],[323,64],[324,65],[325,66],[326,67],[327,68],[328,69],[329,70],[330,71],[331,72],[232,6],[233,73],[234,6],[235,6],[277,74],[278,75],[279,6],[280,60],[332,76],[333,77],[91,78],[60,6],[70,79],[66,80],[69,81],[92,82],[77,6],[79,83],[78,84],[85,6],[68,85],[61,86],[63,87],[65,88],[64,6],[67,86],[62,6],[89,6],[100,89],[102,90],[101,91],[99,92],[98,6],[197,6],[93,6],[86,6],[58,6],[59,6],[11,6],[10,6],[2,6],[12,6],[13,6],[14,6],[15,6],[16,6],[17,6],[18,6],[19,6],[3,6],[20,6],[21,6],[4,6],[22,6],[26,6],[23,6],[24,6],[25,6],[27,6],[28,6],[29,6],[5,6],[30,6],[31,6],[32,6],[33,6],[6,6],[37,6],[34,6],[35,6],[36,6],[38,6],[7,6],[39,6],[44,6],[45,6],[40,6],[41,6],[42,6],[43,6],[8,6],[49,6],[46,6],[47,6],[48,6],[50,6],[9,6],[51,6],[52,6],[53,6],[55,6],[54,6],[1,6],[56,6],[57,6],[253,93],[265,94],[251,95],[266,96],[275,97],[242,98],[243,99],[241,100],[274,101],[269,102],[273,103],[245,104],[262,105],[244,106],[272,107],[239,108],[240,102],[246,109],[247,6],[252,110],[250,109],[237,111],[276,112],[267,113],[256,114],[255,109],[257,115],[260,116],[254,117],[258,118],[270,101],[248,119],[249,120],[261,121],[238,96],[264,122],[263,109],[259,123],[268,6],[236,6],[271,124],[73,125],[76,126],[74,125],[72,6],[75,127],[94,128],[84,129],[80,130],[81,80],[97,131],[95,132],[82,133],[96,134],[71,6],[83,135],[103,136],[220,137],[106,138],[108,139],[115,140],[110,6],[111,6],[109,141],[112,142],[104,6],[105,6],[116,143],[107,144],[113,6],[114,145],[183,146],[186,147],[184,147],[180,146],[187,148],[188,137],[185,147],[181,149],[182,150],[175,151],[121,152],[123,153],[174,6],[122,154],[178,155],[176,6],[124,152],[125,6],[173,156],[120,157],[117,6],[177,158],[118,159],[119,6],[189,160],[126,161],[127,161],[128,161],[129,161],[130,161],[131,161],[132,161],[133,161],[134,161],[135,161],[136,161],[137,161],[139,161],[138,161],[140,161],[141,161],[142,161],[172,162],[143,161],[144,161],[145,161],[146,161],[147,161],[148,161],[149,161],[150,161],[151,161],[152,161],[153,161],[154,161],[155,161],[157,161],[156,161],[158,161],[159,161],[160,161],[161,161],[162,161],[163,161],[164,161],[165,161],[166,161],[167,161],[168,161],[171,161],[169,161],[170,161],[202,163],[223,164],[224,165],[225,164],[227,166],[226,167],[203,168]],"latestChangedDtsFile":"./src/index.d.ts","version":"5.9.3"}
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "@n24q02m/mnemo-plugin",
3
+ "keywords": [
4
+ "opencode",
5
+ "claude-code",
6
+ "mcp",
7
+ "memory",
8
+ "plugin",
9
+ "mnemo"
10
+ ],
11
+ "version": "1.0.0",
12
+ "license": "MIT",
13
+ "type": "module",
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "bin": {
18
+ "mnemo-plugin": "bin/cli.mjs"
19
+ },
20
+ "engines": {
21
+ "node": ">=24.0.0",
22
+ "pnpm": ">=9.0.0"
23
+ },
24
+ "files": [
25
+ "build/",
26
+ "bin/",
27
+ "README.md",
28
+ "LICENSE"
29
+ ],
30
+ "peerDependencies": {
31
+ "@opencode-ai/plugin": ">=1.0.0"
32
+ },
33
+ "dependencies": {
34
+ "@modelcontextprotocol/sdk": "^1.26.0"
35
+ },
36
+ "devDependencies": {
37
+ "@biomejs/biome": "^2.3.8",
38
+ "@opencode-ai/plugin": "^1.2.10",
39
+ "@opencode-ai/sdk": "^1.2.10",
40
+ "@types/node": "^24.10.1",
41
+ "@vitest/coverage-v8": "^4.0.15",
42
+ "esbuild": "^0.25.12",
43
+ "tsx": "^4.21.0",
44
+ "typescript": "^5.9.3",
45
+ "vitest": "^4.0.15"
46
+ },
47
+ "description": "Universal Memory Plugin for OpenCode & Claude Code (Powered by mnemo-mcp)",
48
+ "main": "build/src/index.js",
49
+ "repository": {
50
+ "type": "git",
51
+ "url": "https://github.com/n24q02m/mnemo-plugin.git"
52
+ },
53
+ "author": "n24q02m",
54
+ "bugs": {
55
+ "url": "https://github.com/n24q02m/mnemo-plugin/issues"
56
+ },
57
+ "homepage": "https://github.com/n24q02m/mnemo-plugin#readme",
58
+ "scripts": {
59
+ "build": "tsc --build && node scripts/build-cli.js",
60
+ "dev": "tsx watch src/index.ts",
61
+ "test": "vitest --passWithNoTests",
62
+ "test:watch": "vitest watch",
63
+ "test:coverage": "vitest --coverage",
64
+ "lint": "biome lint src",
65
+ "lint:fix": "biome lint --write src",
66
+ "format": "biome format --write .",
67
+ "format:check": "biome format .",
68
+ "type-check": "tsc --noEmit",
69
+ "check": "biome check . && pnpm type-check",
70
+ "check:fix": "biome check --write . && pnpm type-check"
71
+ }
72
+ }