signalpilot-ai-internal 0.10.0__py3-none-any.whl → 0.11.24__py3-none-any.whl
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.
- signalpilot_ai_internal/__init__.py +1 -0
- signalpilot_ai_internal/_version.py +1 -1
- signalpilot_ai_internal/cache_service.py +22 -21
- signalpilot_ai_internal/composio_handlers.py +224 -0
- signalpilot_ai_internal/composio_service.py +511 -0
- signalpilot_ai_internal/database_config_handlers.py +182 -0
- signalpilot_ai_internal/database_config_service.py +166 -0
- signalpilot_ai_internal/databricks_schema_service.py +907 -0
- signalpilot_ai_internal/file_scanner_service.py +5 -146
- signalpilot_ai_internal/handlers.py +388 -9
- signalpilot_ai_internal/integrations_config.py +256 -0
- signalpilot_ai_internal/log_utils.py +31 -0
- signalpilot_ai_internal/mcp_handlers.py +532 -0
- signalpilot_ai_internal/mcp_server_manager.py +298 -0
- signalpilot_ai_internal/mcp_service.py +1255 -0
- signalpilot_ai_internal/oauth_token_store.py +141 -0
- signalpilot_ai_internal/schema_search_config.yml +17 -11
- signalpilot_ai_internal/schema_search_service.py +85 -4
- signalpilot_ai_internal/signalpilot_home.py +961 -0
- signalpilot_ai_internal/snowflake_schema_service.py +2 -0
- signalpilot_ai_internal/test_dbt_mcp_server.py +180 -0
- signalpilot_ai_internal/unified_database_schema_service.py +2 -0
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/schemas/signalpilot-ai-internal/package.json.orig → signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/package.json +15 -48
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/package.json → signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/schemas/signalpilot-ai-internal/package.json.orig +9 -52
- {signalpilot_ai_internal-0.10.0.data → signalpilot_ai_internal-0.11.24.data}/data/share/jupyter/labextensions/signalpilot-ai-internal/schemas/signalpilot-ai-internal/plugin.json +7 -1
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/122.bab318d6caadb055e29c.js +1 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/129.868ca665e6fc225c20a0.js +1 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/179.fd45a2e75d471d0aa3b9.js +7 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/220.81105a94aa873fc51a94.js +1 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/262.a002dd4630d3b6404a90.js +1 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/353.cc6f6ecacd703bcdb468.js +1 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/364.817a883549d55a0e0576.js +1 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/384.a4daecd44f1e9364e44a.js +1 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/439.667225aab294fb5ed161.js +1 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/447.8138af2522716e5a926f.js +1 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/476.925c73e32f3c07448da0.js +1 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/477.aaa4cc9e87801fb45f5b.js +1 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/481.370056149a59022b700c.js +1 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/510.868ca665e6fc225c20a0.js +1 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/512.835f97f7ccfc70ff5c93.js +1 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/57.6c13335f73de089d6b1e.js +1 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/574.ad2709e91ebcac5bbe68.js +1 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/635.bddbab8e464fe31f0393.js +1 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/713.fda1bcdb10497b0a6ade.js +1 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/741.d046701f475fcbf6697d.js +1 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/785.c306dffd4cfe8a613d13.js +1 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/801.e39898b6f336539f228c.js +1 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/880.77cc0ca10a1860df1b52.js +1 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/936.4e2850b2af985ed0d378.js +1 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/956.eeffe67d7781fd63ef4b.js +2 -0
- signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/remoteEntry.055f50d20a31f3068c72.js +1 -0
- {signalpilot_ai_internal-0.10.0.data → signalpilot_ai_internal-0.11.24.data}/data/share/jupyter/labextensions/signalpilot-ai-internal/static/third-party-licenses.json +47 -29
- {signalpilot_ai_internal-0.10.0.dist-info → signalpilot_ai_internal-0.11.24.dist-info}/METADATA +14 -31
- signalpilot_ai_internal-0.11.24.dist-info/RECORD +66 -0
- signalpilot_ai_internal-0.11.24.dist-info/licenses/LICENSE +7 -0
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/122.e2dadf63dc64d7b5f1ee.js +0 -1
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/220.328403b5545f268b95c6.js +0 -1
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/262.726e1da31a50868cb297.js +0 -1
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/330.af2e9cb5def5ae2b84d5.js +0 -1
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/353.972abe1d2d66f083f9cc.js +0 -1
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/364.dbec4c2dc12e7b050dcc.js +0 -1
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/384.fa432bdb7fb6b1c95ad6.js +0 -1
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/439.37e271d7a80336daabe2.js +0 -1
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/476.ad22ccddd74ee306fb56.js +0 -1
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/481.73c7a9290b7d35a8b9c1.js +0 -1
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/512.b58fc0093d080b8ee61c.js +0 -1
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/553.b4042a795c91d9ff71ef.js +0 -2
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/57.e9acd2e1f9739037f1ab.js +0 -1
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/635.9720593ee20b768da3ca.js +0 -1
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/713.8e6edc9a965bdd578ca7.js +0 -1
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/741.dc49867fafb03ea2ba4d.js +0 -1
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/742.91e7b516c8699eea3373.js +0 -1
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/785.2d75de1a8d2c3131a8db.js +0 -1
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/786.770dc7bcab77e14cc135.js +0 -7
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/801.ca9e114a30896b669a3c.js +0 -1
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/880.25ddd15aca09421d3765.js +0 -1
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/888.34054db17bcf6e87ec95.js +0 -1
- signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/remoteEntry.b05b2f0c9617ba28370d.js +0 -1
- signalpilot_ai_internal-0.10.0.dist-info/RECORD +0 -50
- signalpilot_ai_internal-0.10.0.dist-info/licenses/LICENSE +0 -29
- {signalpilot_ai_internal-0.10.0.data → signalpilot_ai_internal-0.11.24.data}/data/etc/jupyter/jupyter_server_config.d/signalpilot_ai.json +0 -0
- {signalpilot_ai_internal-0.10.0.data → signalpilot_ai_internal-0.11.24.data}/data/share/jupyter/labextensions/signalpilot-ai-internal/install.json +0 -0
- /signalpilot_ai_internal-0.10.0.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/553.b4042a795c91d9ff71ef.js.LICENSE.txt → /signalpilot_ai_internal-0.11.24.data/data/share/jupyter/labextensions/signalpilot-ai-internal/static/956.eeffe67d7781fd63ef4b.js.LICENSE.txt +0 -0
- {signalpilot_ai_internal-0.10.0.data → signalpilot_ai_internal-0.11.24.data}/data/share/jupyter/labextensions/signalpilot-ai-internal/static/style.js +0 -0
- {signalpilot_ai_internal-0.10.0.dist-info → signalpilot_ai_internal-0.11.24.dist-info}/WHEEL +0 -0
|
@@ -26,6 +26,8 @@ from typing import Any, Dict, Optional, List
|
|
|
26
26
|
from jupyter_server.base.handlers import APIHandler
|
|
27
27
|
import tornado
|
|
28
28
|
|
|
29
|
+
from .log_utils import print
|
|
30
|
+
|
|
29
31
|
SIZE_ORDER = ["XSMALL", "SMALL", "MEDIUM", "LARGE", "XLARGE", "XXLARGE", "XXXLARGE", "X4LARGE", "X5LARGE", "X6LARGE"]
|
|
30
32
|
|
|
31
33
|
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Test script to run the dbt-mcp server with enhanced visibility.
|
|
3
|
+
|
|
4
|
+
This script provides detailed logging and output to help debug
|
|
5
|
+
and understand what's happening when the MCP server runs.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import asyncio
|
|
9
|
+
import logging
|
|
10
|
+
import os
|
|
11
|
+
import sys
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
|
|
14
|
+
# Add the dbt-mcp src directory to Python path
|
|
15
|
+
dbt_mcp_src = Path(__file__).parent / "dbt-mcp" / "src"
|
|
16
|
+
sys.path.insert(0, str(dbt_mcp_src))
|
|
17
|
+
|
|
18
|
+
from dbt_mcp.config.config import load_config
|
|
19
|
+
from dbt_mcp.config.transport import validate_transport
|
|
20
|
+
from dbt_mcp.mcp.server import create_dbt_mcp
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def setup_logging():
|
|
24
|
+
"""Configure detailed logging for debugging."""
|
|
25
|
+
logging.basicConfig(
|
|
26
|
+
level=logging.DEBUG,
|
|
27
|
+
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
|
28
|
+
handlers=[
|
|
29
|
+
logging.StreamHandler(sys.stdout),
|
|
30
|
+
logging.FileHandler('dbt_mcp_test.log', mode='w')
|
|
31
|
+
]
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
# Set specific loggers to DEBUG
|
|
35
|
+
logging.getLogger('dbt_mcp').setLevel(logging.DEBUG)
|
|
36
|
+
logging.getLogger('mcp').setLevel(logging.DEBUG)
|
|
37
|
+
|
|
38
|
+
return logging.getLogger(__name__)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
async def test_server_creation():
|
|
42
|
+
"""Test creating the dbt-mcp server."""
|
|
43
|
+
logger = setup_logging()
|
|
44
|
+
|
|
45
|
+
logger.info("=" * 80)
|
|
46
|
+
logger.info("Starting dbt-mcp Server Test")
|
|
47
|
+
logger.info("=" * 80)
|
|
48
|
+
|
|
49
|
+
try:
|
|
50
|
+
# Load configuration
|
|
51
|
+
logger.info("\n--- Loading Configuration ---")
|
|
52
|
+
logger.info(f"Current working directory: {os.getcwd()}")
|
|
53
|
+
logger.info(f"Environment variables (DBT related):")
|
|
54
|
+
for key, value in os.environ.items():
|
|
55
|
+
if 'DBT' in key.upper() or 'MCP' in key.upper():
|
|
56
|
+
logger.info(f" {key}: {value}")
|
|
57
|
+
|
|
58
|
+
config = load_config()
|
|
59
|
+
logger.info(f"Config loaded successfully")
|
|
60
|
+
logger.info(f" Enabled toolsets: {config.enabled_toolsets}")
|
|
61
|
+
logger.info(f" Disabled toolsets: {config.disabled_toolsets}")
|
|
62
|
+
logger.info(f" Enabled tools: {config.enable_tools}")
|
|
63
|
+
logger.info(f" Disabled tools: {config.disable_tools}")
|
|
64
|
+
|
|
65
|
+
# Create server
|
|
66
|
+
logger.info("\n--- Creating MCP Server ---")
|
|
67
|
+
server = await create_dbt_mcp(config)
|
|
68
|
+
logger.info(f"Server created: {server}")
|
|
69
|
+
logger.info(f"Server name: {server.name}")
|
|
70
|
+
|
|
71
|
+
# List registered tools
|
|
72
|
+
logger.info("\n--- Registered Tools ---")
|
|
73
|
+
if hasattr(server, '_tool_manager') and hasattr(server._tool_manager, 'tools'):
|
|
74
|
+
tools = server._tool_manager.tools
|
|
75
|
+
logger.info(f"Total tools registered: {len(tools)}")
|
|
76
|
+
for tool_name in sorted(tools.keys()):
|
|
77
|
+
logger.info(f" - {tool_name}")
|
|
78
|
+
else:
|
|
79
|
+
logger.warning("Could not access tool manager to list tools")
|
|
80
|
+
|
|
81
|
+
# List registered prompts (if any)
|
|
82
|
+
logger.info("\n--- Registered Prompts ---")
|
|
83
|
+
if hasattr(server, '_prompt_manager') and hasattr(server._prompt_manager, 'prompts'):
|
|
84
|
+
prompts = server._prompt_manager.prompts
|
|
85
|
+
logger.info(f"Total prompts registered: {len(prompts)}")
|
|
86
|
+
for prompt_name in sorted(prompts.keys()):
|
|
87
|
+
logger.info(f" - {prompt_name}")
|
|
88
|
+
else:
|
|
89
|
+
logger.info("No prompts registered")
|
|
90
|
+
|
|
91
|
+
# Get transport type
|
|
92
|
+
logger.info("\n--- Transport Configuration ---")
|
|
93
|
+
transport_type = os.environ.get("MCP_TRANSPORT", "stdio")
|
|
94
|
+
transport = validate_transport(transport_type)
|
|
95
|
+
logger.info(f"Transport type: {transport}")
|
|
96
|
+
|
|
97
|
+
logger.info("\n" + "=" * 80)
|
|
98
|
+
logger.info("Server initialization complete!")
|
|
99
|
+
logger.info("=" * 80)
|
|
100
|
+
logger.info("\nTo run the server, uncomment the server.run() line below")
|
|
101
|
+
logger.info("Note: server.run() will block and wait for MCP client connections")
|
|
102
|
+
|
|
103
|
+
# Uncomment the line below to actually run the server
|
|
104
|
+
# logger.info("\n--- Running Server (blocking) ---")
|
|
105
|
+
# server.run(transport=transport)
|
|
106
|
+
|
|
107
|
+
return server
|
|
108
|
+
|
|
109
|
+
except Exception as e:
|
|
110
|
+
logger.error(f"\n!!! Error occurred: {e}", exc_info=True)
|
|
111
|
+
raise
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
async def test_tool_call():
|
|
115
|
+
"""Test calling a specific tool if available."""
|
|
116
|
+
logger = logging.getLogger(__name__)
|
|
117
|
+
|
|
118
|
+
try:
|
|
119
|
+
logger.info("\n" + "=" * 80)
|
|
120
|
+
logger.info("Testing Tool Call")
|
|
121
|
+
logger.info("=" * 80)
|
|
122
|
+
|
|
123
|
+
config = load_config()
|
|
124
|
+
server = await create_dbt_mcp(config)
|
|
125
|
+
|
|
126
|
+
# Try to call a simple tool (e.g., list or search)
|
|
127
|
+
# This is just an example - adjust based on available tools
|
|
128
|
+
if hasattr(server, '_tool_manager') and hasattr(server._tool_manager, 'tools'):
|
|
129
|
+
tools = server._tool_manager.tools
|
|
130
|
+
|
|
131
|
+
# Look for a simple tool to test
|
|
132
|
+
test_tools = ['search', 'list', 'get_all_models']
|
|
133
|
+
for tool_name in test_tools:
|
|
134
|
+
if tool_name in tools:
|
|
135
|
+
logger.info(f"\nTesting tool: {tool_name}")
|
|
136
|
+
try:
|
|
137
|
+
# Call with minimal arguments
|
|
138
|
+
result = await server.call_tool(tool_name, {})
|
|
139
|
+
logger.info(f"Tool call successful!")
|
|
140
|
+
logger.info(f"Result type: {type(result)}")
|
|
141
|
+
logger.info(f"Result: {result}")
|
|
142
|
+
break
|
|
143
|
+
except Exception as tool_error:
|
|
144
|
+
logger.warning(f"Tool call failed (expected if missing config): {tool_error}")
|
|
145
|
+
else:
|
|
146
|
+
logger.info("No testable tools found in the expected list")
|
|
147
|
+
|
|
148
|
+
except Exception as e:
|
|
149
|
+
logger.error(f"Error in tool test: {e}", exc_info=True)
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def main():
|
|
153
|
+
"""Main entry point."""
|
|
154
|
+
logger = setup_logging()
|
|
155
|
+
|
|
156
|
+
try:
|
|
157
|
+
# Test 1: Create server and inspect
|
|
158
|
+
logger.info("\n### TEST 1: Server Creation and Inspection ###\n")
|
|
159
|
+
server = asyncio.run(test_server_creation())
|
|
160
|
+
|
|
161
|
+
# Test 2: Try calling a tool (optional)
|
|
162
|
+
logger.info("\n\n### TEST 2: Tool Call Test (Optional) ###\n")
|
|
163
|
+
try:
|
|
164
|
+
asyncio.run(test_tool_call())
|
|
165
|
+
except Exception as e:
|
|
166
|
+
logger.info(f"Tool test skipped or failed: {e}")
|
|
167
|
+
|
|
168
|
+
logger.info("\n\n" + "=" * 80)
|
|
169
|
+
logger.info("All tests complete! Check dbt_mcp_test.log for full output.")
|
|
170
|
+
logger.info("=" * 80)
|
|
171
|
+
|
|
172
|
+
except KeyboardInterrupt:
|
|
173
|
+
logger.info("\n\nInterrupted by user")
|
|
174
|
+
except Exception as e:
|
|
175
|
+
logger.error(f"\n\nFatal error: {e}", exc_info=True)
|
|
176
|
+
sys.exit(1)
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
if __name__ == "__main__":
|
|
180
|
+
main()
|
|
@@ -12,6 +12,8 @@ from typing import Any, Dict, Optional
|
|
|
12
12
|
from jupyter_server.base.handlers import APIHandler
|
|
13
13
|
import tornado
|
|
14
14
|
|
|
15
|
+
from .log_utils import print
|
|
16
|
+
|
|
15
17
|
|
|
16
18
|
class UnifiedDatabaseSchemaHandler(APIHandler):
|
|
17
19
|
"""Handler for unified database schema operations (PostgreSQL and MySQL)"""
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "signalpilot-ai-internal",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.24",
|
|
4
|
+
"packageManager": "yarn@4.1.0",
|
|
4
5
|
"description": "SignalPilot Agent - Your Jupyter Notebook Assistant",
|
|
5
6
|
"keywords": [
|
|
6
7
|
"jupyter",
|
|
@@ -53,7 +54,7 @@
|
|
|
53
54
|
"watch:labextension": "jupyter labextension watch ."
|
|
54
55
|
},
|
|
55
56
|
"dependencies": {
|
|
56
|
-
"@anthropic-ai/sdk": "^0.
|
|
57
|
+
"@anthropic-ai/sdk": "^0.71.2",
|
|
57
58
|
"@babel/cli": "^7.28.3",
|
|
58
59
|
"@babel/core": "^7.28.4",
|
|
59
60
|
"@babel/preset-env": "^7.28.3",
|
|
@@ -66,6 +67,7 @@
|
|
|
66
67
|
"@jupyterlab/notebook-extension": "^4.4.0",
|
|
67
68
|
"@jupyterlab/settingregistry": "^4.0.0",
|
|
68
69
|
"@modelcontextprotocol/sdk": "^1.9.0",
|
|
70
|
+
"@redux-devtools/extension": "^3.3.0",
|
|
69
71
|
"@types/hogan.js": "^3.0.5",
|
|
70
72
|
"babel-plugin-transform-remove-console": "^6.9.4",
|
|
71
73
|
"best-effort-json-parser": "^1.1.3",
|
|
@@ -87,10 +89,10 @@
|
|
|
87
89
|
"posthog-js": "^1.268.5",
|
|
88
90
|
"react-bootstrap": "^2.10.10",
|
|
89
91
|
"readline": "^1.3.0",
|
|
90
|
-
"rxjs": "^7.8.2",
|
|
91
92
|
"stripe": "^18.5.0",
|
|
92
93
|
"textarea-caret": "^3.1.0",
|
|
93
|
-
"uuid": "^11.1.0"
|
|
94
|
+
"uuid": "^11.1.0",
|
|
95
|
+
"zustand": "^5.0.9"
|
|
94
96
|
},
|
|
95
97
|
"devDependencies": {
|
|
96
98
|
"@jupyterlab/builder": "^4.0.0",
|
|
@@ -104,6 +106,7 @@
|
|
|
104
106
|
"@types/uuid": "^10.0.0",
|
|
105
107
|
"@typescript-eslint/eslint-plugin": "^6.1.0",
|
|
106
108
|
"@typescript-eslint/parser": "^6.1.0",
|
|
109
|
+
"baseline-browser-mapping": "^2.9.15",
|
|
107
110
|
"css-loader": "^6.7.1",
|
|
108
111
|
"eslint": "^8.36.0",
|
|
109
112
|
"eslint-config-prettier": "^8.8.0",
|
|
@@ -134,7 +137,13 @@
|
|
|
134
137
|
"jupyterlab": {
|
|
135
138
|
"extension": true,
|
|
136
139
|
"outputDir": "signalpilot_ai_internal/labextension",
|
|
137
|
-
"schemaDir": "schema"
|
|
140
|
+
"schemaDir": "schema",
|
|
141
|
+
"webpackConfig": "./webpack.config.js",
|
|
142
|
+
"_build": {
|
|
143
|
+
"load": "static/remoteEntry.055f50d20a31f3068c72.js",
|
|
144
|
+
"extension": "./extension",
|
|
145
|
+
"style": "./style"
|
|
146
|
+
}
|
|
138
147
|
},
|
|
139
148
|
"eslintIgnore": [
|
|
140
149
|
"node_modules",
|
|
@@ -147,58 +156,16 @@
|
|
|
147
156
|
],
|
|
148
157
|
"eslintConfig": {
|
|
149
158
|
"extends": [
|
|
150
|
-
"eslint:recommended",
|
|
151
|
-
"plugin:@typescript-eslint/eslint-recommended",
|
|
152
|
-
"plugin:@typescript-eslint/recommended",
|
|
153
159
|
"plugin:prettier/recommended"
|
|
154
160
|
],
|
|
155
161
|
"parser": "@typescript-eslint/parser",
|
|
156
162
|
"parserOptions": {
|
|
157
|
-
"project": "tsconfig.json",
|
|
158
163
|
"sourceType": "module"
|
|
159
164
|
},
|
|
160
165
|
"plugins": [
|
|
161
166
|
"@typescript-eslint"
|
|
162
167
|
],
|
|
163
|
-
"rules": {
|
|
164
|
-
"@typescript-eslint/naming-convention": [
|
|
165
|
-
"error",
|
|
166
|
-
{
|
|
167
|
-
"selector": "interface",
|
|
168
|
-
"format": [
|
|
169
|
-
"PascalCase"
|
|
170
|
-
],
|
|
171
|
-
"custom": {
|
|
172
|
-
"regex": "^I[A-Z]",
|
|
173
|
-
"match": true
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
],
|
|
177
|
-
"@typescript-eslint/no-unused-vars": [
|
|
178
|
-
"warn",
|
|
179
|
-
{
|
|
180
|
-
"args": "none"
|
|
181
|
-
}
|
|
182
|
-
],
|
|
183
|
-
"@typescript-eslint/no-explicit-any": "off",
|
|
184
|
-
"@typescript-eslint/no-namespace": "off",
|
|
185
|
-
"@typescript-eslint/no-use-before-define": "off",
|
|
186
|
-
"@typescript-eslint/quotes": [
|
|
187
|
-
"error",
|
|
188
|
-
"single",
|
|
189
|
-
{
|
|
190
|
-
"avoidEscape": true,
|
|
191
|
-
"allowTemplateLiterals": false
|
|
192
|
-
}
|
|
193
|
-
],
|
|
194
|
-
"curly": [
|
|
195
|
-
"error",
|
|
196
|
-
"all"
|
|
197
|
-
],
|
|
198
|
-
"eqeqeq": "error",
|
|
199
|
-
"prefer-arrow-callback": "error",
|
|
200
|
-
"@typescript-eslint/no-floating-promises": "error"
|
|
201
|
-
}
|
|
168
|
+
"rules": {}
|
|
202
169
|
},
|
|
203
170
|
"prettier": {
|
|
204
171
|
"singleQuote": true,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "signalpilot-ai-internal",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.24",
|
|
4
|
+
"packageManager": "yarn@4.1.0",
|
|
4
5
|
"description": "SignalPilot Agent - Your Jupyter Notebook Assistant",
|
|
5
6
|
"keywords": [
|
|
6
7
|
"jupyter",
|
|
@@ -53,7 +54,7 @@
|
|
|
53
54
|
"watch:labextension": "jupyter labextension watch ."
|
|
54
55
|
},
|
|
55
56
|
"dependencies": {
|
|
56
|
-
"@anthropic-ai/sdk": "^0.
|
|
57
|
+
"@anthropic-ai/sdk": "^0.71.2",
|
|
57
58
|
"@babel/cli": "^7.28.3",
|
|
58
59
|
"@babel/core": "^7.28.4",
|
|
59
60
|
"@babel/preset-env": "^7.28.3",
|
|
@@ -66,6 +67,7 @@
|
|
|
66
67
|
"@jupyterlab/notebook-extension": "^4.4.0",
|
|
67
68
|
"@jupyterlab/settingregistry": "^4.0.0",
|
|
68
69
|
"@modelcontextprotocol/sdk": "^1.9.0",
|
|
70
|
+
"@redux-devtools/extension": "^3.3.0",
|
|
69
71
|
"@types/hogan.js": "^3.0.5",
|
|
70
72
|
"babel-plugin-transform-remove-console": "^6.9.4",
|
|
71
73
|
"best-effort-json-parser": "^1.1.3",
|
|
@@ -87,10 +89,10 @@
|
|
|
87
89
|
"posthog-js": "^1.268.5",
|
|
88
90
|
"react-bootstrap": "^2.10.10",
|
|
89
91
|
"readline": "^1.3.0",
|
|
90
|
-
"rxjs": "^7.8.2",
|
|
91
92
|
"stripe": "^18.5.0",
|
|
92
93
|
"textarea-caret": "^3.1.0",
|
|
93
|
-
"uuid": "^11.1.0"
|
|
94
|
+
"uuid": "^11.1.0",
|
|
95
|
+
"zustand": "^5.0.9"
|
|
94
96
|
},
|
|
95
97
|
"devDependencies": {
|
|
96
98
|
"@jupyterlab/builder": "^4.0.0",
|
|
@@ -104,6 +106,7 @@
|
|
|
104
106
|
"@types/uuid": "^10.0.0",
|
|
105
107
|
"@typescript-eslint/eslint-plugin": "^6.1.0",
|
|
106
108
|
"@typescript-eslint/parser": "^6.1.0",
|
|
109
|
+
"baseline-browser-mapping": "^2.9.15",
|
|
107
110
|
"css-loader": "^6.7.1",
|
|
108
111
|
"eslint": "^8.36.0",
|
|
109
112
|
"eslint-config-prettier": "^8.8.0",
|
|
@@ -135,11 +138,7 @@
|
|
|
135
138
|
"extension": true,
|
|
136
139
|
"outputDir": "signalpilot_ai_internal/labextension",
|
|
137
140
|
"schemaDir": "schema",
|
|
138
|
-
"
|
|
139
|
-
"load": "static/remoteEntry.b05b2f0c9617ba28370d.js",
|
|
140
|
-
"extension": "./extension",
|
|
141
|
-
"style": "./style"
|
|
142
|
-
}
|
|
141
|
+
"webpackConfig": "./webpack.config.js"
|
|
143
142
|
},
|
|
144
143
|
"eslintIgnore": [
|
|
145
144
|
"node_modules",
|
|
@@ -152,58 +151,16 @@
|
|
|
152
151
|
],
|
|
153
152
|
"eslintConfig": {
|
|
154
153
|
"extends": [
|
|
155
|
-
"eslint:recommended",
|
|
156
|
-
"plugin:@typescript-eslint/eslint-recommended",
|
|
157
|
-
"plugin:@typescript-eslint/recommended",
|
|
158
154
|
"plugin:prettier/recommended"
|
|
159
155
|
],
|
|
160
156
|
"parser": "@typescript-eslint/parser",
|
|
161
157
|
"parserOptions": {
|
|
162
|
-
"project": "tsconfig.json",
|
|
163
158
|
"sourceType": "module"
|
|
164
159
|
},
|
|
165
160
|
"plugins": [
|
|
166
161
|
"@typescript-eslint"
|
|
167
162
|
],
|
|
168
|
-
"rules": {
|
|
169
|
-
"@typescript-eslint/naming-convention": [
|
|
170
|
-
"error",
|
|
171
|
-
{
|
|
172
|
-
"selector": "interface",
|
|
173
|
-
"format": [
|
|
174
|
-
"PascalCase"
|
|
175
|
-
],
|
|
176
|
-
"custom": {
|
|
177
|
-
"regex": "^I[A-Z]",
|
|
178
|
-
"match": true
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
],
|
|
182
|
-
"@typescript-eslint/no-unused-vars": [
|
|
183
|
-
"warn",
|
|
184
|
-
{
|
|
185
|
-
"args": "none"
|
|
186
|
-
}
|
|
187
|
-
],
|
|
188
|
-
"@typescript-eslint/no-explicit-any": "off",
|
|
189
|
-
"@typescript-eslint/no-namespace": "off",
|
|
190
|
-
"@typescript-eslint/no-use-before-define": "off",
|
|
191
|
-
"@typescript-eslint/quotes": [
|
|
192
|
-
"error",
|
|
193
|
-
"single",
|
|
194
|
-
{
|
|
195
|
-
"avoidEscape": true,
|
|
196
|
-
"allowTemplateLiterals": false
|
|
197
|
-
}
|
|
198
|
-
],
|
|
199
|
-
"curly": [
|
|
200
|
-
"error",
|
|
201
|
-
"all"
|
|
202
|
-
],
|
|
203
|
-
"eqeqeq": "error",
|
|
204
|
-
"prefer-arrow-callback": "error",
|
|
205
|
-
"@typescript-eslint/no-floating-promises": "error"
|
|
206
|
-
}
|
|
163
|
+
"rules": {}
|
|
207
164
|
},
|
|
208
165
|
"prettier": {
|
|
209
166
|
"singleQuote": true,
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
{
|
|
2
|
-
"jupyter.lab.shortcuts": [
|
|
2
|
+
"jupyter.lab.shortcuts": [
|
|
3
|
+
{
|
|
4
|
+
"command": "signalpilot-ai-internal:inline-edit",
|
|
5
|
+
"keys": ["Accel K"],
|
|
6
|
+
"selector": ".jp-Notebook .jp-Cell.jp-mod-active"
|
|
7
|
+
}
|
|
8
|
+
],
|
|
3
9
|
"jupyter.lab.setting-icon": "ui-components:settings",
|
|
4
10
|
"jupyter.lab.setting-icon-label": "Sage AI Settings",
|
|
5
11
|
"jupyter.lab.toolbars": {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunksignalpilot_ai_internal=self.webpackChunksignalpilot_ai_internal||[]).push([[122],{2122(e,t,n){"use strict";var i,s;n.r(t),n.d(t,{defaultDiff2HtmlConfig:()=>P,html:()=>V,parse:()=>_}),function(e){e.INSERT="insert",e.DELETE="delete",e.CONTEXT="context"}(i||(i={})),function(e){e.AUTO="auto",e.DARK="dark",e.LIGHT="light"}(s||(s={}));const r=RegExp("["+["-","[","]","/","{","}","(",")","*","+","?",".","\\","^","$","|"].join("\\")+"]","g");function a(e){return e?e.replace(/\\/g,"/"):e}function l(e){const t=e.length;let n=-1/0;for(let i=0;i<t;i++)n=Math.max(n,e[i]);return n}function o(e,t){const n=e.split(".");return n.length>1?n[n.length-1]:t}function c(e,t){return t.reduce((t,n)=>t||e.startsWith(n),!1)}const d=["a/","b/","i/","w/","c/","o/"];function h(e,t,n){const i=void 0!==n?[...d,n]:d,s=t?new RegExp(`^${a=t,a.replace(r,"\\$&")} "?(.+?)"?$`):new RegExp('^"?(.+?)"?$');var a;const[,l=""]=s.exec(e)||[],o=i.find(e=>0===l.indexOf(e));return(o?l.slice(o.length):l).replace(/\s+\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(?:\.\d+)? [+-]\d{4}.*$/,"")}function f(e,t={}){const n=[];let s=null,r=null,a=null,l=null,d=null,f=null,b=null;const u="--- ",p="+++ ",g="@@",m=/^old mode (\d{6})/,v=/^new mode (\d{6})/,w=/^deleted file mode (\d{6})/,x=/^new file mode (\d{6})/,y=/^copy from "?(.+)"?/,N=/^copy to "?(.+)"?/,T=/^rename from "?(.+)"?/,E=/^rename to "?(.+)"?/,C=/^similarity index (\d+)%/,S=/^dissimilarity index (\d+)%/,L=/^index ([\da-z]+)\.\.([\da-z]+)\s*(\d{6})?/,k=/^Binary files (.*) and (.*) differ/,H=/^GIT binary patch/,O=/^index ([\da-z]+),([\da-z]+)\.\.([\da-z]+)/,j=/^mode (\d{6}),(\d{6})\.\.(\d{6})/,I=/^new file mode (\d{6})/,M=/^deleted file mode (\d{6}),(\d{6})/,A=e.replace(/\/g,"").replace(/\r\n?/g,"\n").split("\n");function D(){null!==r&&null!==s&&(s.blocks.push(r),r=null)}function W(){null!==s&&(s.oldName||null===f||(s.oldName=f),s.newName||null===b||(s.newName=b),s.newName&&(n.push(s),s=null)),f=null,b=null}function F(){D(),W(),s={blocks:[],deletedLines:0,addedLines:0}}function B(e){let t;D(),null!==s&&((t=/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@.*/.exec(e))?(s.isCombined=!1,a=parseInt(t[1],10),d=parseInt(t[2],10)):(t=/^@@@ -(\d+)(?:,\d+)? -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@@.*/.exec(e))?(s.isCombined=!0,a=parseInt(t[1],10),l=parseInt(t[2],10),d=parseInt(t[3],10)):(e.startsWith(g)&&console.error("Failed to parse lines, starting in 0!"),a=0,d=0,s.isCombined=!1)),r={lines:[],oldStartLine:a,oldStartLine2:l,newStartLine:d,header:e}}return A.forEach((e,l)=>{if(!e||e.startsWith("*"))return;let D;const W=A[l-1],z=A[l+1],R=A[l+2];if(e.startsWith("diff --git")||e.startsWith("diff --combined")){if(F(),(D=/^diff --git "?([a-ciow]\/.+)"? "?([a-ciow]\/.+)"?/.exec(e))&&(f=h(D[1],void 0,t.dstPrefix),b=h(D[2],void 0,t.srcPrefix)),null===s)throw new Error("Where is my file !!!");return void(s.isGitDiff=!0)}if(e.startsWith("Binary files")&&!(null==s?void 0:s.isGitDiff)){if(F(),(D=/^Binary files "?([a-ciow]\/.+)"? and "?([a-ciow]\/.+)"? differ/.exec(e))&&(f=h(D[1],void 0,t.dstPrefix),b=h(D[2],void 0,t.srcPrefix)),null===s)throw new Error("Where is my file !!!");return void(s.isBinary=!0)}if((!s||!s.isGitDiff&&s&&e.startsWith(u)&&z.startsWith(p)&&R.startsWith(g))&&F(),null==s?void 0:s.isTooBig)return;if(s&&("number"==typeof t.diffMaxChanges&&s.addedLines+s.deletedLines>t.diffMaxChanges||"number"==typeof t.diffMaxLineLength&&e.length>t.diffMaxLineLength))return s.isTooBig=!0,s.addedLines=0,s.deletedLines=0,s.blocks=[],r=null,void B("function"==typeof t.diffTooBigMessage?t.diffTooBigMessage(n.length):"Diff too big to be displayed");if(e.startsWith(u)&&z.startsWith(p)||e.startsWith(p)&&W.startsWith(u)){if(s&&!s.oldName&&e.startsWith("--- ")&&(D=function(e,t){return h(e,"---",t)}(e,t.srcPrefix)))return s.oldName=D,void(s.language=o(s.oldName,s.language));if(s&&!s.newName&&e.startsWith("+++ ")&&(D=function(e,t){return h(e,"+++",t)}(e,t.dstPrefix)))return s.newName=D,void(s.language=o(s.newName,s.language))}if(s&&(e.startsWith(g)||s.isGitDiff&&s.oldName&&s.newName&&!r))return void B(e);if(r&&(e.startsWith("+")||e.startsWith("-")||e.startsWith(" ")))return void function(e){if(null===s||null===r||null===a||null===d)return;const t={content:e},n=s.isCombined?["+ "," +","++"]:["+"],l=s.isCombined?["- "," -","--"]:["-"];c(e,n)?(s.addedLines++,t.type=i.INSERT,t.oldNumber=void 0,t.newNumber=d++):c(e,l)?(s.deletedLines++,t.type=i.DELETE,t.oldNumber=a++,t.newNumber=void 0):(t.type=i.CONTEXT,t.oldNumber=a++,t.newNumber=d++),r.lines.push(t)}(e);const U=!function(e,t){let n=t;for(;n<A.length-3;){if(e.startsWith("diff"))return!1;if(A[n].startsWith(u)&&A[n+1].startsWith(p)&&A[n+2].startsWith(g))return!0;n++}return!1}(e,l);if(null===s)throw new Error("Where is my file !!!");(D=m.exec(e))?s.oldMode=D[1]:(D=v.exec(e))?s.newMode=D[1]:(D=w.exec(e))?(s.deletedFileMode=D[1],s.isDeleted=!0):(D=x.exec(e))?(s.newFileMode=D[1],s.isNew=!0):(D=y.exec(e))?(U&&(s.oldName=D[1]),s.isCopy=!0):(D=N.exec(e))?(U&&(s.newName=D[1]),s.isCopy=!0):(D=T.exec(e))?(U&&(s.oldName=D[1]),s.isRename=!0):(D=E.exec(e))?(U&&(s.newName=D[1]),s.isRename=!0):(D=k.exec(e))?(s.isBinary=!0,s.oldName=h(D[1],void 0,t.srcPrefix),s.newName=h(D[2],void 0,t.dstPrefix),B("Binary file")):H.test(e)?(s.isBinary=!0,B(e)):(D=C.exec(e))?s.unchangedPercentage=parseInt(D[1],10):(D=S.exec(e))?s.changedPercentage=parseInt(D[1],10):(D=L.exec(e))?(s.checksumBefore=D[1],s.checksumAfter=D[2],D[3]&&(s.mode=D[3])):(D=O.exec(e))?(s.checksumBefore=[D[2],D[3]],s.checksumAfter=D[1]):(D=j.exec(e))?(s.oldMode=[D[2],D[3]],s.newMode=D[1]):(D=I.exec(e))?(s.newFileMode=D[1],s.isNew=!0):(D=M.exec(e))&&(s.deletedFileMode=D[1],s.isDeleted=!0)}),D(),W(),n}var b=n(73379);function u(e){return(t,n)=>{const i=e(t).trim(),s=e(n).trim();return function(e,t){if(0===e.length)return t.length;if(0===t.length)return e.length;const n=[];let i,s;for(i=0;i<=t.length;i++)n[i]=[i];for(s=0;s<=e.length;s++)n[0][s]=s;for(i=1;i<=t.length;i++)for(s=1;s<=e.length;s++)t.charAt(i-1)===e.charAt(s-1)?n[i][s]=n[i-1][s-1]:n[i][s]=Math.min(n[i-1][s-1]+1,Math.min(n[i][s-1]+1,n[i-1][s]+1));return n[t.length][e.length]}(i,s)/(i.length+s.length)}}function p(e){return function t(n,i,s=0,r=new Map){const a=function(t,n,i=new Map){let s,r=1/0;for(let a=0;a<t.length;++a)for(let l=0;l<n.length;++l){const o=JSON.stringify([t[a],n[l]]);let c;i.has(o)&&(c=i.get(o))||(c=e(t[a],n[l]),i.set(o,c)),c<r&&(r=c,s={indexA:a,indexB:l,score:r})}return s}(n,i,r);if(!a||n.length+i.length<3)return[[n,i]];const l=n.slice(0,a.indexA),o=i.slice(0,a.indexB),c=[n[a.indexA]],d=[i[a.indexB]],h=a.indexA+1,f=a.indexB+1,b=n.slice(h),u=i.slice(f),p=t(l,o,s+1,r),g=t(c,d,s+1,r),m=t(b,u,s+1,r);let v=g;return(a.indexA>0||a.indexB>0)&&(v=p.concat(v)),(n.length>h||i.length>f)&&(v=v.concat(m)),v}}const g={INSERTS:"d2h-ins",DELETES:"d2h-del",CONTEXT:"d2h-cntx",INFO:"d2h-info",INSERT_CHANGES:"d2h-ins d2h-change",DELETE_CHANGES:"d2h-del d2h-change"},m={matching:"none",matchWordsThreshold:.25,maxLineLengthHighlight:1e4,diffStyle:"word",colorScheme:s.LIGHT},v="/",w=u(e=>e.value),x=p(w);function y(e){return-1!==e.indexOf("dev/null")}function N(e){return e.replace(/(<del[^>]*>((.|\n)*?)<\/del>)/g,"")}function T(e){switch(e){case i.CONTEXT:return g.CONTEXT;case i.INSERT:return g.INSERTS;case i.DELETE:return g.DELETES}}function E(e){switch(e){case s.DARK:return"d2h-dark-color-scheme";case s.AUTO:return"d2h-auto-color-scheme";case s.LIGHT:default:return"d2h-light-color-scheme"}}function C(e){return e.slice(0).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")}function S(e,t,n=!0){const i=function(e){return e?2:1}(t);return{prefix:e.substring(0,i),content:n?C(e.substring(i)):e.substring(i)}}function L(e){const t=a(e.oldName),n=a(e.newName);if(t===n||y(t)||y(n))return y(n)?t:n;{const e=[],i=[],s=t.split(v),r=n.split(v);let a=0,l=s.length-1,o=r.length-1;for(;a<l&&a<o&&s[a]===r[a];)e.push(r[a]),a+=1;for(;l>a&&o>a&&s[l]===r[o];)i.unshift(r[o]),l-=1,o-=1;const c=e.join(v),d=i.join(v),h=s.slice(a,l+1).join(v),f=r.slice(a,o+1).join(v);return c.length&&d.length?c+v+"{"+h+" → "+f+"}"+v+d:c.length?c+v+"{"+h+" → "+f+"}":d.length?"{"+h+" → "+f+"}"+v+d:t+" → "+n}}function k(e){return`d2h-${function(e){let t,n,i,s=0;for(t=0,i=e.length;t<i;t++)n=e.charCodeAt(t),s=(s<<5)-s+n,s|=0;return s}(L(e)).toString().slice(-6)}`}function H(e){let t="file-changed";return e.isRename||e.isCopy?t="file-renamed":e.isNew?t="file-added":e.isDeleted?t="file-deleted":e.newName!==e.oldName&&(t="file-renamed"),t}function O(e,t,n,i={}){const{matching:s,maxLineLengthHighlight:r,matchWordsThreshold:a,diffStyle:l}=Object.assign(Object.assign({},m),i),o=S(e,n,!1),c=S(t,n,!1);if(o.content.length>r||c.content.length>r)return{oldLine:{prefix:o.prefix,content:C(o.content)},newLine:{prefix:c.prefix,content:C(c.content)}};const d="char"===l?b.diffChars(o.content,c.content):b.diffWordsWithSpace(o.content,c.content),h=[];if("word"===l&&"words"===s){const e=d.filter(e=>e.removed),t=d.filter(e=>e.added);x(t,e).forEach(e=>{1===e[0].length&&1===e[1].length&&w(e[0][0],e[1][0])<a&&(h.push(e[0][0]),h.push(e[1][0]))})}const f=d.reduce((e,t)=>{const n=t.added?"ins":t.removed?"del":null,i=h.indexOf(t)>-1?' class="d2h-change"':"",s=C(t.value);return null!==n?`${e}<${n}${i}>${s}</${n}>`:`${e}${s}`},"");return{oldLine:{prefix:o.prefix,content:(u=f,u.replace(/(<ins[^>]*>((.|\n)*?)<\/ins>)/g,""))},newLine:{prefix:c.prefix,content:N(f)}};var u}const j="file-summary",I={colorScheme:m.colorScheme};class M{constructor(e,t={}){this.hoganUtils=e,this.config=Object.assign(Object.assign({},I),t)}render(e){const t=e.map(e=>this.hoganUtils.render(j,"line",{fileHtmlId:k(e),oldName:e.oldName,newName:e.newName,fileName:L(e),deletedLines:"-"+e.deletedLines,addedLines:"+"+e.addedLines},{fileIcon:this.hoganUtils.template("icon",H(e))})).join("\n");return this.hoganUtils.render(j,"wrapper",{colorScheme:E(this.config.colorScheme),filesNumber:e.length,files:t})}}const A=Object.assign(Object.assign({},m),{renderNothingWhenEmpty:!1,matchingMaxComparisons:2500,maxLineSizeInBlockForComparison:200}),D="generic",W="line-by-line";class F{constructor(e,t={}){this.hoganUtils=e,this.config=Object.assign(Object.assign({},A),t)}render(e){const t=e.map(e=>{let t;return t=e.blocks.length?this.generateFileHtml(e):this.generateEmptyDiff(),this.makeFileDiffHtml(e,t)}).join("\n");return this.hoganUtils.render(D,"wrapper",{colorScheme:E(this.config.colorScheme),content:t})}makeFileDiffHtml(e,t){if(this.config.renderNothingWhenEmpty&&Array.isArray(e.blocks)&&0===e.blocks.length)return"";const n=this.hoganUtils.template(W,"file-diff"),i=this.hoganUtils.template(D,"file-path"),s=this.hoganUtils.template("icon","file"),r=this.hoganUtils.template("tag",H(e));return n.render({file:e,fileHtmlId:k(e),diffs:t,filePath:i.render({fileDiffName:L(e)},{fileIcon:s,fileTag:r})})}generateEmptyDiff(){return this.hoganUtils.render(D,"empty-diff",{contentClass:"d2h-code-line",CSSLineClass:g})}generateFileHtml(e){const t=p(u(t=>S(t.content,e.isCombined).content));return e.blocks.map(n=>{let i=this.hoganUtils.render(D,"block-header",{CSSLineClass:g,blockHeader:e.isTooBig?n.header:C(n.header),lineClass:"d2h-code-linenumber",contentClass:"d2h-code-line"});return this.applyLineGroupping(n).forEach(([n,s,r])=>{if(s.length&&r.length&&!n.length)this.applyRematchMatching(s,r,t).map(([t,n])=>{const{left:s,right:r}=this.processChangedLines(e,e.isCombined,t,n);i+=s,i+=r});else if(n.length)n.forEach(t=>{const{prefix:n,content:s}=S(t.content,e.isCombined);i+=this.generateSingleLineHtml(e,{type:g.CONTEXT,prefix:n,content:s,oldNumber:t.oldNumber,newNumber:t.newNumber})});else if(s.length||r.length){const{left:t,right:n}=this.processChangedLines(e,e.isCombined,s,r);i+=t,i+=n}else console.error("Unknown state reached while processing groups of lines",n,s,r)}),i}).join("\n")}applyLineGroupping(e){const t=[];let n=[],s=[];for(let r=0;r<e.lines.length;r++){const a=e.lines[r];(a.type!==i.INSERT&&s.length||a.type===i.CONTEXT&&n.length>0)&&(t.push([[],n,s]),n=[],s=[]),a.type===i.CONTEXT?t.push([[a],[],[]]):a.type===i.INSERT&&0===n.length?t.push([[],[],[a]]):a.type===i.INSERT&&n.length>0?s.push(a):a.type===i.DELETE&&n.push(a)}return(n.length||s.length)&&(t.push([[],n,s]),n=[],s=[]),t}applyRematchMatching(e,t,n){const i=e.length*t.length,s=l(e.concat(t).map(e=>e.content.length));return i<this.config.matchingMaxComparisons&&s<this.config.maxLineSizeInBlockForComparison&&("lines"===this.config.matching||"words"===this.config.matching)?n(e,t):[[e,t]]}processChangedLines(e,t,n,i){const s={right:"",left:""},r=Math.max(n.length,i.length);for(let a=0;a<r;a++){const r=n[a],l=i[a],o=void 0!==r&&void 0!==l?O(r.content,l.content,t,this.config):void 0,c=void 0!==r&&void 0!==r.oldNumber?Object.assign(Object.assign({},void 0!==o?{prefix:o.oldLine.prefix,content:o.oldLine.content,type:g.DELETE_CHANGES}:Object.assign(Object.assign({},S(r.content,t)),{type:T(r.type)})),{oldNumber:r.oldNumber,newNumber:r.newNumber}):void 0,d=void 0!==l&&void 0!==l.newNumber?Object.assign(Object.assign({},void 0!==o?{prefix:o.newLine.prefix,content:o.newLine.content,type:g.INSERT_CHANGES}:Object.assign(Object.assign({},S(l.content,t)),{type:T(l.type)})),{oldNumber:l.oldNumber,newNumber:l.newNumber}):void 0,{left:h,right:f}=this.generateLineHtml(e,c,d);s.left+=h,s.right+=f}return s}generateLineHtml(e,t,n){return{left:this.generateSingleLineHtml(e,t),right:this.generateSingleLineHtml(e,n)}}generateSingleLineHtml(e,t){if(void 0===t)return"";const n=this.hoganUtils.render(W,"numbers",{oldNumber:t.oldNumber||"",newNumber:t.newNumber||""});return this.hoganUtils.render(D,"line",{type:t.type,lineClass:"d2h-code-linenumber",contentClass:"d2h-code-line",prefix:" "===t.prefix?" ":t.prefix,content:t.content,lineNumber:n,line:t,file:e})}}const B=Object.assign(Object.assign({},m),{renderNothingWhenEmpty:!1,matchingMaxComparisons:2500,maxLineSizeInBlockForComparison:200}),z="generic";class R{constructor(e,t={}){this.hoganUtils=e,this.config=Object.assign(Object.assign({},B),t)}render(e){const t=e.map(e=>{let t;return t=e.blocks.length?this.generateFileHtml(e):this.generateEmptyDiff(),this.makeFileDiffHtml(e,t)}).join("\n");return this.hoganUtils.render(z,"wrapper",{colorScheme:E(this.config.colorScheme),content:t})}makeFileDiffHtml(e,t){if(this.config.renderNothingWhenEmpty&&Array.isArray(e.blocks)&&0===e.blocks.length)return"";const n=this.hoganUtils.template("side-by-side","file-diff"),i=this.hoganUtils.template(z,"file-path"),s=this.hoganUtils.template("icon","file"),r=this.hoganUtils.template("tag",H(e));return n.render({file:e,fileHtmlId:k(e),diffs:t,filePath:i.render({fileDiffName:L(e)},{fileIcon:s,fileTag:r})})}generateEmptyDiff(){return{right:"",left:this.hoganUtils.render(z,"empty-diff",{contentClass:"d2h-code-side-line",CSSLineClass:g})}}generateFileHtml(e){const t=p(u(t=>S(t.content,e.isCombined).content));return e.blocks.map(n=>{const i={left:this.makeHeaderHtml(n.header,e),right:this.makeHeaderHtml("")};return this.applyLineGroupping(n).forEach(([n,s,r])=>{if(s.length&&r.length&&!n.length)this.applyRematchMatching(s,r,t).map(([t,n])=>{const{left:s,right:r}=this.processChangedLines(e.isCombined,t,n);i.left+=s,i.right+=r});else if(n.length)n.forEach(t=>{const{prefix:n,content:s}=S(t.content,e.isCombined),{left:r,right:a}=this.generateLineHtml({type:g.CONTEXT,prefix:n,content:s,number:t.oldNumber},{type:g.CONTEXT,prefix:n,content:s,number:t.newNumber});i.left+=r,i.right+=a});else if(s.length||r.length){const{left:t,right:n}=this.processChangedLines(e.isCombined,s,r);i.left+=t,i.right+=n}else console.error("Unknown state reached while processing groups of lines",n,s,r)}),i}).reduce((e,t)=>({left:e.left+t.left,right:e.right+t.right}),{left:"",right:""})}applyLineGroupping(e){const t=[];let n=[],s=[];for(let r=0;r<e.lines.length;r++){const a=e.lines[r];(a.type!==i.INSERT&&s.length||a.type===i.CONTEXT&&n.length>0)&&(t.push([[],n,s]),n=[],s=[]),a.type===i.CONTEXT?t.push([[a],[],[]]):a.type===i.INSERT&&0===n.length?t.push([[],[],[a]]):a.type===i.INSERT&&n.length>0?s.push(a):a.type===i.DELETE&&n.push(a)}return(n.length||s.length)&&(t.push([[],n,s]),n=[],s=[]),t}applyRematchMatching(e,t,n){const i=e.length*t.length,s=l(e.concat(t).map(e=>e.content.length));return i<this.config.matchingMaxComparisons&&s<this.config.maxLineSizeInBlockForComparison&&("lines"===this.config.matching||"words"===this.config.matching)?n(e,t):[[e,t]]}makeHeaderHtml(e,t){return this.hoganUtils.render(z,"block-header",{CSSLineClass:g,blockHeader:(null==t?void 0:t.isTooBig)?e:C(e),lineClass:"d2h-code-side-linenumber",contentClass:"d2h-code-side-line"})}processChangedLines(e,t,n){const i={right:"",left:""},s=Math.max(t.length,n.length);for(let r=0;r<s;r++){const s=t[r],a=n[r],l=void 0!==s&&void 0!==a?O(s.content,a.content,e,this.config):void 0,o=void 0!==s&&void 0!==s.oldNumber?Object.assign(Object.assign({},void 0!==l?{prefix:l.oldLine.prefix,content:l.oldLine.content,type:g.DELETE_CHANGES}:Object.assign(Object.assign({},S(s.content,e)),{type:T(s.type)})),{number:s.oldNumber}):void 0,c=void 0!==a&&void 0!==a.newNumber?Object.assign(Object.assign({},void 0!==l?{prefix:l.newLine.prefix,content:l.newLine.content,type:g.INSERT_CHANGES}:Object.assign(Object.assign({},S(a.content,e)),{type:T(a.type)})),{number:a.newNumber}):void 0,{left:d,right:h}=this.generateLineHtml(o,c);i.left+=d,i.right+=h}return i}generateLineHtml(e,t){return{left:this.generateSingleHtml(e),right:this.generateSingleHtml(t)}}generateSingleHtml(e){const t="d2h-code-side-linenumber",n="d2h-code-side-line";return this.hoganUtils.render(z,"line",{type:(null==e?void 0:e.type)||`${g.CONTEXT} d2h-emptyplaceholder`,lineClass:void 0!==e?t:`${t} d2h-code-side-emptyplaceholder`,contentClass:void 0!==e?n:`${n} d2h-code-side-emptyplaceholder`,prefix:" "===(null==e?void 0:e.prefix)?" ":null==e?void 0:e.prefix,content:null==e?void 0:e.content,lineNumber:null==e?void 0:e.number})}}var U=n(75111);const $={};$["file-summary-line"]=new U.Template({code:function(e,t,n){var i=this;return i.b(n=n||""),i.b('<li class="d2h-file-list-line">'),i.b("\n"+n),i.b(' <span class="d2h-file-name-wrapper">'),i.b("\n"+n),i.b(i.rp("<fileIcon0",e,t," ")),i.b(' <a href="#'),i.b(i.v(i.f("fileHtmlId",e,t,0))),i.b('" class="d2h-file-name">'),i.b(i.v(i.f("fileName",e,t,0))),i.b("</a>"),i.b("\n"+n),i.b(' <span class="d2h-file-stats">'),i.b("\n"+n),i.b(' <span class="d2h-lines-added">'),i.b(i.v(i.f("addedLines",e,t,0))),i.b("</span>"),i.b("\n"+n),i.b(' <span class="d2h-lines-deleted">'),i.b(i.v(i.f("deletedLines",e,t,0))),i.b("</span>"),i.b("\n"+n),i.b(" </span>"),i.b("\n"+n),i.b(" </span>"),i.b("\n"+n),i.b("</li>"),i.fl()},partials:{"<fileIcon0":{name:"fileIcon",partials:{},subs:{}}},subs:{}}),$["file-summary-wrapper"]=new U.Template({code:function(e,t,n){var i=this;return i.b(n=n||""),i.b('<div class="d2h-file-list-wrapper '),i.b(i.v(i.f("colorScheme",e,t,0))),i.b('">'),i.b("\n"+n),i.b(' <div class="d2h-file-list-header">'),i.b("\n"+n),i.b(' <span class="d2h-file-list-title">Files changed ('),i.b(i.v(i.f("filesNumber",e,t,0))),i.b(")</span>"),i.b("\n"+n),i.b(' <a class="d2h-file-switch d2h-hide">hide</a>'),i.b("\n"+n),i.b(' <a class="d2h-file-switch d2h-show">show</a>'),i.b("\n"+n),i.b(" </div>"),i.b("\n"+n),i.b(' <ol class="d2h-file-list">'),i.b("\n"+n),i.b(" "),i.b(i.t(i.f("files",e,t,0))),i.b("\n"+n),i.b(" </ol>"),i.b("\n"+n),i.b("</div>"),i.fl()},partials:{},subs:{}}),$["generic-block-header"]=new U.Template({code:function(e,t,n){var i=this;return i.b(n=n||""),i.b("<tr>"),i.b("\n"+n),i.b(' <td class="'),i.b(i.v(i.f("lineClass",e,t,0))),i.b(" "),i.b(i.v(i.d("CSSLineClass.INFO",e,t,0))),i.b('"></td>'),i.b("\n"+n),i.b(' <td class="'),i.b(i.v(i.d("CSSLineClass.INFO",e,t,0))),i.b('">'),i.b("\n"+n),i.b(' <div class="'),i.b(i.v(i.f("contentClass",e,t,0))),i.b('">'),i.s(i.f("blockHeader",e,t,1),e,t,0,156,173,"{{ }}")&&(i.rs(e,t,function(e,t,n){n.b(n.t(n.f("blockHeader",e,t,0)))}),e.pop()),i.s(i.f("blockHeader",e,t,1),e,t,1,0,0,"")||i.b(" "),i.b("</div>"),i.b("\n"+n),i.b(" </td>"),i.b("\n"+n),i.b("</tr>"),i.fl()},partials:{},subs:{}}),$["generic-empty-diff"]=new U.Template({code:function(e,t,n){var i=this;return i.b(n=n||""),i.b("<tr>"),i.b("\n"+n),i.b(' <td class="'),i.b(i.v(i.d("CSSLineClass.INFO",e,t,0))),i.b('">'),i.b("\n"+n),i.b(' <div class="'),i.b(i.v(i.f("contentClass",e,t,0))),i.b('">'),i.b("\n"+n),i.b(" File without changes"),i.b("\n"+n),i.b(" </div>"),i.b("\n"+n),i.b(" </td>"),i.b("\n"+n),i.b("</tr>"),i.fl()},partials:{},subs:{}}),$["generic-file-path"]=new U.Template({code:function(e,t,n){var i=this;return i.b(n=n||""),i.b('<span class="d2h-file-name-wrapper">'),i.b("\n"+n),i.b(i.rp("<fileIcon0",e,t," ")),i.b(' <span class="d2h-file-name">'),i.b(i.v(i.f("fileDiffName",e,t,0))),i.b("</span>"),i.b("\n"+n),i.b(i.rp("<fileTag1",e,t," ")),i.b("</span>"),i.b("\n"+n),i.b('<label class="d2h-file-collapse">'),i.b("\n"+n),i.b(' <input class="d2h-file-collapse-input" type="checkbox" name="viewed" value="viewed">'),i.b("\n"+n),i.b(" Viewed"),i.b("\n"+n),i.b("</label>"),i.fl()},partials:{"<fileIcon0":{name:"fileIcon",partials:{},subs:{}},"<fileTag1":{name:"fileTag",partials:{},subs:{}}},subs:{}}),$["generic-line"]=new U.Template({code:function(e,t,n){var i=this;return i.b(n=n||""),i.b("<tr>"),i.b("\n"+n),i.b(' <td class="'),i.b(i.v(i.f("lineClass",e,t,0))),i.b(" "),i.b(i.v(i.f("type",e,t,0))),i.b('">'),i.b("\n"+n),i.b(" "),i.b(i.t(i.f("lineNumber",e,t,0))),i.b("\n"+n),i.b(" </td>"),i.b("\n"+n),i.b(' <td class="'),i.b(i.v(i.f("type",e,t,0))),i.b('">'),i.b("\n"+n),i.b(' <div class="'),i.b(i.v(i.f("contentClass",e,t,0))),i.b('">'),i.b("\n"+n),i.s(i.f("prefix",e,t,1),e,t,0,162,238,"{{ }}")&&(i.rs(e,t,function(e,t,i){i.b(' <span class="d2h-code-line-prefix">'),i.b(i.t(i.f("prefix",e,t,0))),i.b("</span>"),i.b("\n"+n)}),e.pop()),i.s(i.f("prefix",e,t,1),e,t,1,0,0,"")||(i.b(' <span class="d2h-code-line-prefix"> </span>'),i.b("\n"+n)),i.s(i.f("content",e,t,1),e,t,0,371,445,"{{ }}")&&(i.rs(e,t,function(e,t,i){i.b(' <span class="d2h-code-line-ctn">'),i.b(i.t(i.f("content",e,t,0))),i.b("</span>"),i.b("\n"+n)}),e.pop()),i.s(i.f("content",e,t,1),e,t,1,0,0,"")||(i.b(' <span class="d2h-code-line-ctn"><br></span>'),i.b("\n"+n)),i.b(" </div>"),i.b("\n"+n),i.b(" </td>"),i.b("\n"+n),i.b("</tr>"),i.fl()},partials:{},subs:{}}),$["generic-wrapper"]=new U.Template({code:function(e,t,n){var i=this;return i.b(n=n||""),i.b('<div class="d2h-wrapper '),i.b(i.v(i.f("colorScheme",e,t,0))),i.b('">'),i.b("\n"+n),i.b(" "),i.b(i.t(i.f("content",e,t,0))),i.b("\n"+n),i.b("</div>"),i.fl()},partials:{},subs:{}}),$["icon-file-added"]=new U.Template({code:function(e,t,n){var i=this;return i.b(n=n||""),i.b('<svg aria-hidden="true" class="d2h-icon d2h-added" height="16" title="added" version="1.1" viewBox="0 0 14 16"'),i.b("\n"+n),i.b(' width="14">'),i.b("\n"+n),i.b(' <path d="M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM6 9H3V7h3V4h2v3h3v2H8v3H6V9z"></path>'),i.b("\n"+n),i.b("</svg>"),i.fl()},partials:{},subs:{}}),$["icon-file-changed"]=new U.Template({code:function(e,t,n){var i=this;return i.b(n=n||""),i.b('<svg aria-hidden="true" class="d2h-icon d2h-changed" height="16" title="modified" version="1.1"'),i.b("\n"+n),i.b(' viewBox="0 0 14 16" width="14">'),i.b("\n"+n),i.b(' <path d="M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM4 8c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3-3-1.34-3-3z"></path>'),i.b("\n"+n),i.b("</svg>"),i.fl()},partials:{},subs:{}}),$["icon-file-deleted"]=new U.Template({code:function(e,t,n){var i=this;return i.b(n=n||""),i.b('<svg aria-hidden="true" class="d2h-icon d2h-deleted" height="16" title="removed" version="1.1"'),i.b("\n"+n),i.b(' viewBox="0 0 14 16" width="14">'),i.b("\n"+n),i.b(' <path d="M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM11 9H3V7h8v2z"></path>'),i.b("\n"+n),i.b("</svg>"),i.fl()},partials:{},subs:{}}),$["icon-file-renamed"]=new U.Template({code:function(e,t,n){var i=this;return i.b(n=n||""),i.b('<svg aria-hidden="true" class="d2h-icon d2h-moved" height="16" title="renamed" version="1.1"'),i.b("\n"+n),i.b(' viewBox="0 0 14 16" width="14">'),i.b("\n"+n),i.b(' <path d="M6 9H3V7h3V4l5 4-5 4V9z m8-7v12c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h12c0.55 0 1 0.45 1 1z m-1 0H1v12h12V2z"></path>'),i.b("\n"+n),i.b("</svg>"),i.fl()},partials:{},subs:{}}),$["icon-file"]=new U.Template({code:function(e,t,n){var i=this;return i.b(n=n||""),i.b('<svg aria-hidden="true" class="d2h-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12">'),i.b("\n"+n),i.b(' <path d="M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z"></path>'),i.b("\n"+n),i.b("</svg>"),i.fl()},partials:{},subs:{}}),$["line-by-line-file-diff"]=new U.Template({code:function(e,t,n){var i=this;return i.b(n=n||""),i.b('<div id="'),i.b(i.v(i.f("fileHtmlId",e,t,0))),i.b('" class="d2h-file-wrapper" data-lang="'),i.b(i.v(i.d("file.language",e,t,0))),i.b('">'),i.b("\n"+n),i.b(' <div class="d2h-file-header">'),i.b("\n"+n),i.b(" "),i.b(i.t(i.f("filePath",e,t,0))),i.b("\n"+n),i.b(" </div>"),i.b("\n"+n),i.b(' <div class="d2h-file-diff">'),i.b("\n"+n),i.b(' <div class="d2h-code-wrapper">'),i.b("\n"+n),i.b(' <table class="d2h-diff-table">'),i.b("\n"+n),i.b(' <tbody class="d2h-diff-tbody">'),i.b("\n"+n),i.b(" "),i.b(i.t(i.f("diffs",e,t,0))),i.b("\n"+n),i.b(" </tbody>"),i.b("\n"+n),i.b(" </table>"),i.b("\n"+n),i.b(" </div>"),i.b("\n"+n),i.b(" </div>"),i.b("\n"+n),i.b("</div>"),i.fl()},partials:{},subs:{}}),$["line-by-line-numbers"]=new U.Template({code:function(e,t,n){var i=this;return i.b(n=n||""),i.b('<div class="line-num1">'),i.b(i.v(i.f("oldNumber",e,t,0))),i.b("</div>"),i.b("\n"+n),i.b('<div class="line-num2">'),i.b(i.v(i.f("newNumber",e,t,0))),i.b("</div>"),i.fl()},partials:{},subs:{}}),$["side-by-side-file-diff"]=new U.Template({code:function(e,t,n){var i=this;return i.b(n=n||""),i.b('<div id="'),i.b(i.v(i.f("fileHtmlId",e,t,0))),i.b('" class="d2h-file-wrapper" data-lang="'),i.b(i.v(i.d("file.language",e,t,0))),i.b('">'),i.b("\n"+n),i.b(' <div class="d2h-file-header">'),i.b("\n"+n),i.b(" "),i.b(i.t(i.f("filePath",e,t,0))),i.b("\n"+n),i.b(" </div>"),i.b("\n"+n),i.b(' <div class="d2h-files-diff">'),i.b("\n"+n),i.b(' <div class="d2h-file-side-diff">'),i.b("\n"+n),i.b(' <div class="d2h-code-wrapper">'),i.b("\n"+n),i.b(' <table class="d2h-diff-table">'),i.b("\n"+n),i.b(' <tbody class="d2h-diff-tbody">'),i.b("\n"+n),i.b(" "),i.b(i.t(i.d("diffs.left",e,t,0))),i.b("\n"+n),i.b(" </tbody>"),i.b("\n"+n),i.b(" </table>"),i.b("\n"+n),i.b(" </div>"),i.b("\n"+n),i.b(" </div>"),i.b("\n"+n),i.b(' <div class="d2h-file-side-diff">'),i.b("\n"+n),i.b(' <div class="d2h-code-wrapper">'),i.b("\n"+n),i.b(' <table class="d2h-diff-table">'),i.b("\n"+n),i.b(' <tbody class="d2h-diff-tbody">'),i.b("\n"+n),i.b(" "),i.b(i.t(i.d("diffs.right",e,t,0))),i.b("\n"+n),i.b(" </tbody>"),i.b("\n"+n),i.b(" </table>"),i.b("\n"+n),i.b(" </div>"),i.b("\n"+n),i.b(" </div>"),i.b("\n"+n),i.b(" </div>"),i.b("\n"+n),i.b("</div>"),i.fl()},partials:{},subs:{}}),$["tag-file-added"]=new U.Template({code:function(e,t,n){var i=this;return i.b(n=n||""),i.b('<span class="d2h-tag d2h-added d2h-added-tag">ADDED</span>'),i.fl()},partials:{},subs:{}}),$["tag-file-changed"]=new U.Template({code:function(e,t,n){var i=this;return i.b(n=n||""),i.b('<span class="d2h-tag d2h-changed d2h-changed-tag">CHANGED</span>'),i.fl()},partials:{},subs:{}}),$["tag-file-deleted"]=new U.Template({code:function(e,t,n){var i=this;return i.b(n=n||""),i.b('<span class="d2h-tag d2h-deleted d2h-deleted-tag">DELETED</span>'),i.fl()},partials:{},subs:{}}),$["tag-file-renamed"]=new U.Template({code:function(e,t,n){var i=this;return i.b(n=n||""),i.b('<span class="d2h-tag d2h-moved d2h-moved-tag">RENAMED</span>'),i.fl()},partials:{},subs:{}});class G{constructor({compiledTemplates:e={},rawTemplates:t={}}){const n=Object.entries(t).reduce((e,[t,n])=>{const i=U.compile(n,{asString:!1});return Object.assign(Object.assign({},e),{[t]:i})},{});this.preCompiledTemplates=Object.assign(Object.assign(Object.assign({},$),e),n)}static compile(e){return U.compile(e,{asString:!1})}render(e,t,n,i,s){const r=this.templateKey(e,t);try{return this.preCompiledTemplates[r].render(n,i,s)}catch(e){throw new Error(`Could not find template to render '${r}'`)}}template(e,t){return this.preCompiledTemplates[this.templateKey(e,t)]}templateKey(e,t){return`${e}-${t}`}}const P=Object.assign(Object.assign(Object.assign({},A),B),{outputFormat:"line-by-line",drawFileList:!0});function _(e,t={}){return f(e,Object.assign(Object.assign({},P),t))}function V(e,t={}){const n=Object.assign(Object.assign({},P),t),i="string"==typeof e?f(e,n):e,s=new G(n),{colorScheme:r}=n,a={colorScheme:r};return(n.drawFileList?new M(s,a).render(i):"")+("side-by-side"===n.outputFormat?new R(s,n).render(i):new F(s,n).render(i))}},17453(e,t){!function(e){var t=/\S/,n=/\"/g,i=/\n/g,s=/\r/g,r=/\\/g,a=/\u2028/,l=/\u2029/;function o(e){"}"===e.n.substr(e.n.length-1)&&(e.n=e.n.substring(0,e.n.length-1))}function c(e){return e.trim?e.trim():e.replace(/^\s*|\s*$/g,"")}function d(e,t,n){if(t.charAt(n)!=e.charAt(0))return!1;for(var i=1,s=e.length;i<s;i++)if(t.charAt(n+i)!=e.charAt(i))return!1;return!0}e.tags={"#":1,"^":2,"<":3,$:4,"/":5,"!":6,">":7,"=":8,_v:9,"{":10,"&":11,_t:12},e.scan=function(n,i){var s=n.length,r=0,a=null,l=null,h="",f=[],b=!1,u=0,p=0,g="{{",m="}}";function v(){h.length>0&&(f.push({tag:"_t",text:new String(h)}),h="")}function w(n,i){if(v(),n&&function(){for(var n=!0,i=p;i<f.length;i++)if(!(n=e.tags[f[i].tag]<e.tags._v||"_t"==f[i].tag&&null===f[i].text.match(t)))return!1;return n}())for(var s,r=p;r<f.length;r++)f[r].text&&((s=f[r+1])&&">"==s.tag&&(s.indent=f[r].text.toString()),f.splice(r,1));else i||f.push({tag:"\n"});b=!1,p=f.length}function x(e,t){var n="="+m,i=e.indexOf(n,t),s=c(e.substring(e.indexOf("=",t)+1,i)).split(" ");return g=s[0],m=s[s.length-1],i+n.length-1}for(i&&(i=i.split(" "),g=i[0],m=i[1]),u=0;u<s;u++)0==r?d(g,n,u)?(--u,v(),r=1):"\n"==n.charAt(u)?w(b):h+=n.charAt(u):1==r?(u+=g.length-1,"="==(a=(l=e.tags[n.charAt(u+1)])?n.charAt(u+1):"_v")?(u=x(n,u),r=0):(l&&u++,r=2),b=u):d(m,n,u)?(f.push({tag:a,n:c(h),otag:g,ctag:m,i:"/"==a?b-g.length:u+m.length}),h="",u+=m.length-1,r=0,"{"==a&&("}}"==m?u++:o(f[f.length-1]))):h+=n.charAt(u);return w(b,!0),f};var h={_t:!0,"\n":!0,$:!0,"/":!0};function f(t,n,i,s){var r,a=[],l=null,o=null;for(r=i[i.length-1];t.length>0;){if(o=t.shift(),r&&"<"==r.tag&&!(o.tag in h))throw new Error("Illegal content in < super tag.");if(e.tags[o.tag]<=e.tags.$||b(o,s))i.push(o),o.nodes=f(t,o.tag,i,s);else{if("/"==o.tag){if(0===i.length)throw new Error("Closing tag without opener: /"+o.n);if(l=i.pop(),o.n!=l.n&&!u(o.n,l.n,s))throw new Error("Nesting error: "+l.n+" vs. "+o.n);return l.end=o.i,a}"\n"==o.tag&&(o.last=0==t.length||"\n"==t[0].tag)}a.push(o)}if(i.length>0)throw new Error("missing closing tag: "+i.pop().n);return a}function b(e,t){for(var n=0,i=t.length;n<i;n++)if(t[n].o==e.n)return e.tag="#",!0}function u(e,t,n){for(var i=0,s=n.length;i<s;i++)if(n[i].c==e&&n[i].o==t)return!0}function p(e){var t=[];for(var n in e.partials)t.push('"'+m(n)+'":{name:"'+m(e.partials[n].name)+'", '+p(e.partials[n])+"}");return"partials: {"+t.join(",")+"}, subs: "+function(e){var t=[];for(var n in e)t.push('"'+m(n)+'": function(c,p,t,i) {'+e[n]+"}");return"{ "+t.join(",")+" }"}(e.subs)}e.stringify=function(t,n,i){return"{code: function (c,p,i) { "+e.wrapMain(t.code)+" },"+p(t)+"}"};var g=0;function m(e){return e.replace(r,"\\\\").replace(n,'\\"').replace(i,"\\n").replace(s,"\\r").replace(a,"\\u2028").replace(l,"\\u2029")}function v(e){return~e.indexOf(".")?"d":"f"}function w(e,t){var n="<"+(t.prefix||"")+e.n+g++;return t.partials[n]={name:e.n,partials:{}},t.code+='t.b(t.rp("'+m(n)+'",c,p,"'+(e.indent||"")+'"));',n}function x(e,t){t.code+="t.b(t.t(t."+v(e.n)+'("'+m(e.n)+'",c,p,0)));'}function y(e){return"t.b("+e+");"}e.generate=function(t,n,i){g=0;var s={code:"",subs:{},partials:{}};return e.walk(t,s),i.asString?this.stringify(s,n,i):this.makeTemplate(s,n,i)},e.wrapMain=function(e){return'var t=this;t.b(i=i||"");'+e+"return t.fl();"},e.template=e.Template,e.makeTemplate=function(e,t,n){var i=this.makePartials(e);return i.code=new Function("c","p","i",this.wrapMain(e.code)),new this.template(i,t,this,n)},e.makePartials=function(e){var t,n={subs:{},partials:e.partials,name:e.name};for(t in n.partials)n.partials[t]=this.makePartials(n.partials[t]);for(t in e.subs)n.subs[t]=new Function("c","p","t","i",e.subs[t]);return n},e.codegen={"#":function(t,n){n.code+="if(t.s(t."+v(t.n)+'("'+m(t.n)+'",c,p,1),c,p,0,'+t.i+","+t.end+',"'+t.otag+" "+t.ctag+'")){t.rs(c,p,function(c,p,t){',e.walk(t.nodes,n),n.code+="});c.pop();}"},"^":function(t,n){n.code+="if(!t.s(t."+v(t.n)+'("'+m(t.n)+'",c,p,1),c,p,1,0,0,"")){',e.walk(t.nodes,n),n.code+="};"},">":w,"<":function(t,n){var i={partials:{},code:"",subs:{},inPartial:!0};e.walk(t.nodes,i);var s=n.partials[w(t,n)];s.subs=i.subs,s.partials=i.partials},$:function(t,n){var i={subs:{},code:"",partials:n.partials,prefix:t.n};e.walk(t.nodes,i),n.subs[t.n]=i.code,n.inPartial||(n.code+='t.sub("'+m(t.n)+'",c,p,i);')},"\n":function(e,t){t.code+=y('"\\n"'+(e.last?"":" + i"))},_v:function(e,t){t.code+="t.b(t.v(t."+v(e.n)+'("'+m(e.n)+'",c,p,0)));'},_t:function(e,t){t.code+=y('"'+m(e.text)+'"')},"{":x,"&":x},e.walk=function(t,n){for(var i,s=0,r=t.length;s<r;s++)(i=e.codegen[t[s].tag])&&i(t[s],n);return n},e.parse=function(e,t,n){return f(e,0,[],(n=n||{}).sectionTags||[])},e.cache={},e.cacheKey=function(e,t){return[e,!!t.asString,!!t.disableLambda,t.delimiters,!!t.modelGet].join("||")},e.compile=function(t,n){n=n||{};var i=e.cacheKey(t,n),s=this.cache[i];if(s){var r=s.partials;for(var a in r)delete r[a].instance;return s}return s=this.generate(this.parse(this.scan(t,n.delimiters),t,n),t,n),this.cache[i]=s}}(t)},47766(e,t){!function(e){function t(e,t,n){var i;return t&&"object"==typeof t&&(void 0!==t[e]?i=t[e]:n&&t.get&&"function"==typeof t.get&&(i=t.get(e))),i}e.Template=function(e,t,n,i){e=e||{},this.r=e.code||this.r,this.c=n,this.options=i||{},this.text=t||"",this.partials=e.partials||{},this.subs=e.subs||{},this.buf=""},e.Template.prototype={r:function(e,t,n){return""},v:function(e){return e=o(e),l.test(e)?e.replace(n,"&").replace(i,"<").replace(s,">").replace(r,"'").replace(a,"""):e},t:o,render:function(e,t,n){return this.ri([e],t||{},n)},ri:function(e,t,n){return this.r(e,t,n)},ep:function(e,t){var n=this.partials[e],i=t[n.name];if(n.instance&&n.base==i)return n.instance;if("string"==typeof i){if(!this.c)throw new Error("No compiler available.");i=this.c.compile(i,this.options)}if(!i)return null;if(this.partials[e].base=i,n.subs){for(key in t.stackText||(t.stackText={}),n.subs)t.stackText[key]||(t.stackText[key]=void 0!==this.activeSub&&t.stackText[this.activeSub]?t.stackText[this.activeSub]:this.text);i=function(e,t,n,i,s,r){function a(){}function l(){}var o;a.prototype=e,l.prototype=e.subs;var c=new a;for(o in c.subs=new l,c.subsText={},c.buf="",i=i||{},c.stackSubs=i,c.subsText=r,t)i[o]||(i[o]=t[o]);for(o in i)c.subs[o]=i[o];for(o in s=s||{},c.stackPartials=s,n)s[o]||(s[o]=n[o]);for(o in s)c.partials[o]=s[o];return c}(i,n.subs,n.partials,this.stackSubs,this.stackPartials,t.stackText)}return this.partials[e].instance=i,i},rp:function(e,t,n,i){var s=this.ep(e,n);return s?s.ri(t,n,i):""},rs:function(e,t,n){var i=e[e.length-1];if(c(i))for(var s=0;s<i.length;s++)e.push(i[s]),n(e,t,this),e.pop();else n(e,t,this)},s:function(e,t,n,i,s,r,a){var l;return(!c(e)||0!==e.length)&&("function"==typeof e&&(e=this.ms(e,t,n,i,s,r,a)),l=!!e,!i&&l&&t&&t.push("object"==typeof e?e:t[t.length-1]),l)},d:function(e,n,i,s){var r,a=e.split("."),l=this.f(a[0],n,i,s),o=this.options.modelGet,d=null;if("."===e&&c(n[n.length-2]))l=n[n.length-1];else for(var h=1;h<a.length;h++)void 0!==(r=t(a[h],l,o))?(d=l,l=r):l="";return!(s&&!l)&&(s||"function"!=typeof l||(n.push(d),l=this.mv(l,n,i),n.pop()),l)},f:function(e,n,i,s){for(var r=!1,a=!1,l=this.options.modelGet,o=n.length-1;o>=0;o--)if(void 0!==(r=t(e,n[o],l))){a=!0;break}return a?(s||"function"!=typeof r||(r=this.mv(r,n,i)),r):!s&&""},ls:function(e,t,n,i,s,r){var a=this.options.delimiters;return this.options.delimiters=r,this.b(this.ct(o(e.call(t,s,n)),t,i)),this.options.delimiters=a,!1},ct:function(e,t,n){if(this.options.disableLambda)throw new Error("Lambda features disabled.");return this.c.compile(e,this.options).render(t,n)},b:function(e){this.buf+=e},fl:function(){var e=this.buf;return this.buf="",e},ms:function(e,t,n,i,s,r,a){var l,o=t[t.length-1],c=e.call(o);return"function"==typeof c?!!i||(l=this.activeSub&&this.subsText&&this.subsText[this.activeSub]?this.subsText[this.activeSub]:this.text,this.ls(c,o,t,n,l.substring(s,r),a)):c},mv:function(e,t,n){var i=t[t.length-1],s=e.call(i);return"function"==typeof s?this.ct(o(s.call(i)),i,n):s},sub:function(e,t,n,i){var s=this.subs[e];s&&(this.activeSub=e,s(t,n,this,i),this.activeSub=!1)}};var n=/&/g,i=/</g,s=/>/g,r=/\'/g,a=/\"/g,l=/[&<>\"\']/;function o(e){return String(null==e?"":e)}var c=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}}(t)},75111(e,t,n){var i=n(17453);i.Template=n(47766).Template,i.template=i.Template,e.exports=i}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunksignalpilot_ai_internal=self.webpackChunksignalpilot_ai_internal||[]).push([[129,510],{95510(t,e,n){n.r(e),n.d(e,{create:()=>o,createStore:()=>a,useStore:()=>r});const s=t=>{let e;const n=new Set,s=(t,s)=>{const a="function"==typeof t?t(e):t;if(!Object.is(a,e)){const t=e;e=(null!=s?s:"object"!=typeof a||null===a)?a:Object.assign({},e,a),n.forEach(n=>n(e,t))}},a=()=>e,c={setState:s,getState:a,getInitialState:()=>l,subscribe:t=>(n.add(t),()=>n.delete(t))},l=e=t(s,a,c);return c},a=t=>t?s(t):s;var c=n(93345),l=n.n(c);const i=t=>t;function r(t,e=i){const n=l().useSyncExternalStore(t.subscribe,l().useCallback(()=>e(t.getState()),[t,e]),l().useCallback(()=>e(t.getInitialState()),[t,e]));return l().useDebugValue(n),n}const u=t=>{const e=a(t),n=t=>r(e,t);return Object.assign(n,e),n},o=t=>t?u(t):u}}]);
|