modular-studio 0.2.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.
Files changed (187) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +261 -0
  3. package/dist/assets/graphPopulator-C6jg83nL.js +1 -0
  4. package/dist/assets/index-CXhIX28x.js +634 -0
  5. package/dist/assets/index-CeNF0r-K.css +1 -0
  6. package/dist/assets/jszip.min-BlpRodxc.js +2 -0
  7. package/dist/index.html +16 -0
  8. package/dist/vite.svg +1 -0
  9. package/dist-server/bin/modular-mcp.d.ts +8 -0
  10. package/dist-server/bin/modular-mcp.d.ts.map +1 -0
  11. package/dist-server/bin/modular-mcp.js +158 -0
  12. package/dist-server/bin/modular-mcp.js.map +1 -0
  13. package/dist-server/bin/modular-studio.d.ts +3 -0
  14. package/dist-server/bin/modular-studio.d.ts.map +1 -0
  15. package/dist-server/bin/modular-studio.js +63 -0
  16. package/dist-server/bin/modular-studio.js.map +1 -0
  17. package/dist-server/server/config.d.ts +4 -0
  18. package/dist-server/server/config.d.ts.map +1 -0
  19. package/dist-server/server/config.js +33 -0
  20. package/dist-server/server/config.js.map +1 -0
  21. package/dist-server/server/data/mcp-clients.json +5 -0
  22. package/dist-server/server/index.d.ts +3 -0
  23. package/dist-server/server/index.d.ts.map +1 -0
  24. package/dist-server/server/index.js +174 -0
  25. package/dist-server/server/index.js.map +1 -0
  26. package/dist-server/server/mcp/manager.d.ts +47 -0
  27. package/dist-server/server/mcp/manager.d.ts.map +1 -0
  28. package/dist-server/server/mcp/manager.js +203 -0
  29. package/dist-server/server/mcp/manager.js.map +1 -0
  30. package/dist-server/server/mcp/modular-server.d.ts +55 -0
  31. package/dist-server/server/mcp/modular-server.d.ts.map +1 -0
  32. package/dist-server/server/mcp/modular-server.js +492 -0
  33. package/dist-server/server/mcp/modular-server.js.map +1 -0
  34. package/dist-server/server/mcp/transport.d.ts +29 -0
  35. package/dist-server/server/mcp/transport.d.ts.map +1 -0
  36. package/dist-server/server/mcp/transport.js +61 -0
  37. package/dist-server/server/mcp/transport.js.map +1 -0
  38. package/dist-server/server/routes/agent-sdk.d.ts +3 -0
  39. package/dist-server/server/routes/agent-sdk.d.ts.map +1 -0
  40. package/dist-server/server/routes/agent-sdk.js +99 -0
  41. package/dist-server/server/routes/agent-sdk.js.map +1 -0
  42. package/dist-server/server/routes/agents.d.ts +10 -0
  43. package/dist-server/server/routes/agents.d.ts.map +1 -0
  44. package/dist-server/server/routes/agents.js +61 -0
  45. package/dist-server/server/routes/agents.js.map +1 -0
  46. package/dist-server/server/routes/auth-codex.d.ts +3 -0
  47. package/dist-server/server/routes/auth-codex.d.ts.map +1 -0
  48. package/dist-server/server/routes/auth-codex.js +51 -0
  49. package/dist-server/server/routes/auth-codex.js.map +1 -0
  50. package/dist-server/server/routes/capabilities.d.ts +3 -0
  51. package/dist-server/server/routes/capabilities.d.ts.map +1 -0
  52. package/dist-server/server/routes/capabilities.js +32 -0
  53. package/dist-server/server/routes/capabilities.js.map +1 -0
  54. package/dist-server/server/routes/claude-config.d.ts +3 -0
  55. package/dist-server/server/routes/claude-config.d.ts.map +1 -0
  56. package/dist-server/server/routes/claude-config.js +146 -0
  57. package/dist-server/server/routes/claude-config.js.map +1 -0
  58. package/dist-server/server/routes/connectors.d.ts +12 -0
  59. package/dist-server/server/routes/connectors.d.ts.map +1 -0
  60. package/dist-server/server/routes/connectors.js +325 -0
  61. package/dist-server/server/routes/connectors.js.map +1 -0
  62. package/dist-server/server/routes/embeddings.d.ts +6 -0
  63. package/dist-server/server/routes/embeddings.d.ts.map +1 -0
  64. package/dist-server/server/routes/embeddings.js +130 -0
  65. package/dist-server/server/routes/embeddings.js.map +1 -0
  66. package/dist-server/server/routes/health.d.ts +9 -0
  67. package/dist-server/server/routes/health.d.ts.map +1 -0
  68. package/dist-server/server/routes/health.js +284 -0
  69. package/dist-server/server/routes/health.js.map +1 -0
  70. package/dist-server/server/routes/knowledge.d.ts +3 -0
  71. package/dist-server/server/routes/knowledge.d.ts.map +1 -0
  72. package/dist-server/server/routes/knowledge.js +534 -0
  73. package/dist-server/server/routes/knowledge.js.map +1 -0
  74. package/dist-server/server/routes/llm.d.ts +3 -0
  75. package/dist-server/server/routes/llm.d.ts.map +1 -0
  76. package/dist-server/server/routes/llm.js +200 -0
  77. package/dist-server/server/routes/llm.js.map +1 -0
  78. package/dist-server/server/routes/mcp-oauth.d.ts +12 -0
  79. package/dist-server/server/routes/mcp-oauth.d.ts.map +1 -0
  80. package/dist-server/server/routes/mcp-oauth.js +137 -0
  81. package/dist-server/server/routes/mcp-oauth.js.map +1 -0
  82. package/dist-server/server/routes/mcp.d.ts +3 -0
  83. package/dist-server/server/routes/mcp.d.ts.map +1 -0
  84. package/dist-server/server/routes/mcp.js +177 -0
  85. package/dist-server/server/routes/mcp.js.map +1 -0
  86. package/dist-server/server/routes/pipeline.d.ts +45 -0
  87. package/dist-server/server/routes/pipeline.d.ts.map +1 -0
  88. package/dist-server/server/routes/pipeline.js +483 -0
  89. package/dist-server/server/routes/pipeline.js.map +1 -0
  90. package/dist-server/server/routes/providers.d.ts +3 -0
  91. package/dist-server/server/routes/providers.d.ts.map +1 -0
  92. package/dist-server/server/routes/providers.js +204 -0
  93. package/dist-server/server/routes/providers.js.map +1 -0
  94. package/dist-server/server/routes/qualification.d.ts +3 -0
  95. package/dist-server/server/routes/qualification.d.ts.map +1 -0
  96. package/dist-server/server/routes/qualification.js +105 -0
  97. package/dist-server/server/routes/qualification.js.map +1 -0
  98. package/dist-server/server/routes/repo-index.d.ts +4 -0
  99. package/dist-server/server/routes/repo-index.d.ts.map +1 -0
  100. package/dist-server/server/routes/repo-index.js +318 -0
  101. package/dist-server/server/routes/repo-index.js.map +1 -0
  102. package/dist-server/server/routes/runtime.d.ts +3 -0
  103. package/dist-server/server/routes/runtime.d.ts.map +1 -0
  104. package/dist-server/server/routes/runtime.js +122 -0
  105. package/dist-server/server/routes/runtime.js.map +1 -0
  106. package/dist-server/server/routes/skills-search.d.ts +3 -0
  107. package/dist-server/server/routes/skills-search.d.ts.map +1 -0
  108. package/dist-server/server/routes/skills-search.js +198 -0
  109. package/dist-server/server/routes/skills-search.js.map +1 -0
  110. package/dist-server/server/routes/worktrees.d.ts +3 -0
  111. package/dist-server/server/routes/worktrees.d.ts.map +1 -0
  112. package/dist-server/server/routes/worktrees.js +70 -0
  113. package/dist-server/server/routes/worktrees.js.map +1 -0
  114. package/dist-server/server/services/__tests__/embeddingService.test.d.ts +5 -0
  115. package/dist-server/server/services/__tests__/embeddingService.test.d.ts.map +1 -0
  116. package/dist-server/server/services/__tests__/embeddingService.test.js +233 -0
  117. package/dist-server/server/services/__tests__/embeddingService.test.js.map +1 -0
  118. package/dist-server/server/services/agentRunner.d.ts +46 -0
  119. package/dist-server/server/services/agentRunner.d.ts.map +1 -0
  120. package/dist-server/server/services/agentRunner.js +295 -0
  121. package/dist-server/server/services/agentRunner.js.map +1 -0
  122. package/dist-server/server/services/agentStore.d.ts +40 -0
  123. package/dist-server/server/services/agentStore.d.ts.map +1 -0
  124. package/dist-server/server/services/agentStore.js +62 -0
  125. package/dist-server/server/services/agentStore.js.map +1 -0
  126. package/dist-server/server/services/contentStore.d.ts +32 -0
  127. package/dist-server/server/services/contentStore.d.ts.map +1 -0
  128. package/dist-server/server/services/contentStore.js +68 -0
  129. package/dist-server/server/services/contentStore.js.map +1 -0
  130. package/dist-server/server/services/embeddingService.d.ts +53 -0
  131. package/dist-server/server/services/embeddingService.d.ts.map +1 -0
  132. package/dist-server/server/services/embeddingService.js +199 -0
  133. package/dist-server/server/services/embeddingService.js.map +1 -0
  134. package/dist-server/server/services/factExtractor.d.ts +14 -0
  135. package/dist-server/server/services/factExtractor.d.ts.map +1 -0
  136. package/dist-server/server/services/factExtractor.js +126 -0
  137. package/dist-server/server/services/factExtractor.js.map +1 -0
  138. package/dist-server/server/services/githubIndexer.d.ts +59 -0
  139. package/dist-server/server/services/githubIndexer.d.ts.map +1 -0
  140. package/dist-server/server/services/githubIndexer.js +183 -0
  141. package/dist-server/server/services/githubIndexer.js.map +1 -0
  142. package/dist-server/server/services/mcpOAuth.d.ts +32 -0
  143. package/dist-server/server/services/mcpOAuth.d.ts.map +1 -0
  144. package/dist-server/server/services/mcpOAuth.js +264 -0
  145. package/dist-server/server/services/mcpOAuth.js.map +1 -0
  146. package/dist-server/server/services/memoryScorer.d.ts +19 -0
  147. package/dist-server/server/services/memoryScorer.d.ts.map +1 -0
  148. package/dist-server/server/services/memoryScorer.js +147 -0
  149. package/dist-server/server/services/memoryScorer.js.map +1 -0
  150. package/dist-server/server/services/repoIndexer.d.ts +91 -0
  151. package/dist-server/server/services/repoIndexer.d.ts.map +1 -0
  152. package/dist-server/server/services/repoIndexer.js +512 -0
  153. package/dist-server/server/services/repoIndexer.js.map +1 -0
  154. package/dist-server/server/services/teamRunner.d.ts +39 -0
  155. package/dist-server/server/services/teamRunner.d.ts.map +1 -0
  156. package/dist-server/server/services/teamRunner.js +76 -0
  157. package/dist-server/server/services/teamRunner.js.map +1 -0
  158. package/dist-server/server/services/worktreeManager.d.ts +27 -0
  159. package/dist-server/server/services/worktreeManager.d.ts.map +1 -0
  160. package/dist-server/server/services/worktreeManager.js +107 -0
  161. package/dist-server/server/services/worktreeManager.js.map +1 -0
  162. package/dist-server/server/types.d.ts +30 -0
  163. package/dist-server/server/types.d.ts.map +1 -0
  164. package/dist-server/server/types.js +2 -0
  165. package/dist-server/server/types.js.map +1 -0
  166. package/dist-server/server/utils/pathSecurity.d.ts +34 -0
  167. package/dist-server/server/utils/pathSecurity.d.ts.map +1 -0
  168. package/dist-server/server/utils/pathSecurity.js +78 -0
  169. package/dist-server/server/utils/pathSecurity.js.map +1 -0
  170. package/dist-server/src/services/budgetAllocator.d.ts +37 -0
  171. package/dist-server/src/services/budgetAllocator.d.ts.map +1 -0
  172. package/dist-server/src/services/budgetAllocator.js +120 -0
  173. package/dist-server/src/services/budgetAllocator.js.map +1 -0
  174. package/dist-server/src/services/contradictionDetector.d.ts +18 -0
  175. package/dist-server/src/services/contradictionDetector.d.ts.map +1 -0
  176. package/dist-server/src/services/contradictionDetector.js +111 -0
  177. package/dist-server/src/services/contradictionDetector.js.map +1 -0
  178. package/dist-server/src/services/treeIndexer.d.ts +91 -0
  179. package/dist-server/src/services/treeIndexer.d.ts.map +1 -0
  180. package/dist-server/src/services/treeIndexer.js +289 -0
  181. package/dist-server/src/services/treeIndexer.js.map +1 -0
  182. package/dist-server/src/store/knowledgeBase.d.ts +130 -0
  183. package/dist-server/src/store/knowledgeBase.d.ts.map +1 -0
  184. package/dist-server/src/store/knowledgeBase.js +299 -0
  185. package/dist-server/src/store/knowledgeBase.js.map +1 -0
  186. package/dist-server/tsconfig.server.tsbuildinfo +1 -0
  187. package/package.json +92 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Victor Grosjean
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,261 @@
1
+ # Modular Studio
2
+
3
+ > The Context Engineering Layer — an IDE for designing AI agent knowledge pipelines.
4
+
5
+ [![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)
6
+ [![Tests: 646](https://img.shields.io/badge/tests-646_passing-green.svg)]()
7
+ [![Version: 0.2.0](https://img.shields.io/badge/version-0.2.0-blue.svg)]()
8
+
9
+ ## What is this?
10
+
11
+ Modular Studio is a **context engineering IDE** — a visual workspace for building AI agents through structured knowledge pipelines rather than monolithic prompts.
12
+
13
+ Instead of writing one massive system prompt and hoping for the best, you design a pipeline:
14
+
15
+ ```
16
+ Sources → Tree Index → Budget Allocator → Agent Navigator → Compress → Context Assembly → LLM
17
+ ```
18
+
19
+ Every source (markdown files, Notion pages, HubSpot records, Slack threads, GitHub repos) becomes a **tree of headings** that an agent navigates per-task, selecting branches at the right depth. An epistemic budget allocator ensures ground-truth sources get priority over hypotheses. The result is dense, relevant context assembled within a token budget.
20
+
21
+ ## Architecture
22
+
23
+ ```
24
+ ┌─────────────────────────────────────────────────────────────────────────┐
25
+ │ Modular Studio IDE │
26
+ │ │
27
+ │ ┌──────────────┐ ┌──────────────────┐ ┌────────────────────────┐ │
28
+ │ │ Sources Panel │ │ Agent Builder │ │ Test & Export Panel │ │
29
+ │ │ │ │ │ │ │ │
30
+ │ │ Knowledge │ │ Identity │ │ Chat Testing │ │
31
+ │ │ MCP Servers │ │ Instructions │ │ Execution Traces │ │
32
+ │ │ Skills │ │ Constraints │ │ Export (6 formats) │ │
33
+ │ │ Memory │ │ Workflow │ │ Security Badges │ │
34
+ │ │ Fact Insights│ │ Tools │ │ │ │
35
+ │ └──────┬───────┘ └────────┬─────────┘ └──────────┬─────────────┘ │
36
+ │ │ │ │ │
37
+ │ ───────┴────────────────────┴─────────────────────────┴────────────── │
38
+ │ │
39
+ │ ┌─────────────────── Context Engineering Pipeline ──────────────────┐ │
40
+ │ │ │ │
41
+ │ │ Sources ──► Tree ──► Budget ──► Agent ──► Compress │ │
42
+ │ │ Index Allocator Navigator │ │
43
+ │ │ (4 connectors) (epistemic (LLM-driven (semantic │ │
44
+ │ │ weights) branch sel.) dedup) │ │
45
+ │ │ │ │ │ │
46
+ │ │ ▼ ▼ │ │
47
+ │ │ Contradiction Corrective Re-Nav │ │
48
+ │ │ Detection + HyDE │ │
49
+ │ │ │ │ │ │
50
+ │ │ └──────┬───────┘ │ │
51
+ │ │ ▼ │ │
52
+ │ │ Attention-Ordered │ │
53
+ │ │ Context Assembly │ │
54
+ │ └───────────────────────────────────────────────────────────────────┘ │
55
+ │ │
56
+ │ ┌─────────────────── Memory System ─────────────────────────────────┐ │
57
+ │ │ Fact Extraction ──► Three-Factor Retrieval ──► Consolidation │ │
58
+ │ │ (pattern + LLM) (relevance + recency (prune, merge, │ │
59
+ │ │ + importance) promote) │ │
60
+ │ └───────────────────────────────────────────────────────────────────┘ │
61
+ │ │
62
+ │ ┌─────────────────── Team Runtime ──────────────────────────────────┐ │
63
+ │ │ POST /api/runtime/team ──► Parallel Agents ──► Shared Facts │ │
64
+ │ │ (SSE streaming) (Claude Agent SDK) (deduplicated) │ │
65
+ │ └───────────────────────────────────────────────────────────────────┘ │
66
+ │ │
67
+ │ Backend: Express 5 + TypeScript Frontend: React 19 + Zustand │
68
+ │ Port 4800 Port 5173 (dev) │
69
+ └─────────────────────────────────────────────────────────────────────────┘
70
+ ```
71
+
72
+ ## Features
73
+
74
+ ### Pipeline
75
+ - **Epistemic Budget Allocator** — Token budgets by knowledge type (ground-truth 30%, evidence 20%, framework 15%, guideline 15%, signal 12%, hypothesis 8%)
76
+ - **4 Source Connectors** — Markdown, Structured, Chronological, Flat — normalize any source to a navigable tree
77
+ - **Agent Navigator** — LLM reads tree headlines and selects relevant branches per task
78
+ - **Attention-Aware Ordering** — Sources reordered to exploit LLM primacy/recency attention bias
79
+ - **Contradiction Detection** — Heuristic entity extraction + epistemic priority resolution, no LLM calls
80
+ - **Context Compression** — Semantic dedup, filler removal, code compression (inspired by [rtk-ai/rtk](https://github.com/rtk-ai/rtk))
81
+ - **Corrective Re-Navigation** — Critique pass identifies gaps, re-navigates with 20% budget cap
82
+ - **HyDE Navigation** — Hypothetical ideal answer improves heading matching for complex queries
83
+
84
+ ### Memory
85
+ - **Fact Extraction** — Pattern-based + LLM-based fact extraction with epistemic typing
86
+ - **Three-Factor Retrieval** — `score = relevance + 0.5×recency + 0.5×importance`
87
+ - **Ebbinghaus Decay** — Strength = importance × e^(-days/halfLife), half-life extends with access frequency
88
+ - **Consolidation** — Prune weak facts, merge similar ones, promote validated hypotheses
89
+
90
+ ### Runtime
91
+ - **Team Execution** — Multi-agent parallel runs with SSE streaming and per-agent system prompts
92
+ - **Cross-Agent Facts** — Extracted facts shared across team members, deduplicated by confidence
93
+ - **Claude Agent SDK** — Full integration with built-in tools (Read, Edit, Bash, Grep, Glob, WebSearch, WebFetch)
94
+ - **Maximizable Results** — Full-screen overlay for reading long agent outputs
95
+ - **Contrastive Retrieval** — For analytical queries, automatically pulls both supporting AND contradicting evidence
96
+
97
+ ### IDE
98
+ - **Knowledge Type System** — 6 types with classification rules and visual color coding
99
+ - **MCP Server Registry** — 100+ pre-configured servers with live health probes
100
+ - **Skills Marketplace** — Searchable catalog with security badges (GEN, Socket, Snyk)
101
+ - **Agent Directory Format** — Primary export: ZIP with agent.yaml + SOUL.md + INSTRUCTIONS.md + TOOLS.md + KNOWLEDGE.md + MEMORY.md. Git-friendly, human-readable, portable.
102
+ - **Universal Export** — Claude Code, Amp, Codex, Vibe Kanban, OpenClaw, Generic JSON
103
+ - **Execution Traces** — Timeline of LLM calls, tool invocations, retrievals
104
+ - **Automatic Versioning** — Semantic diffs on every agent change
105
+ - **AI-Powered Generation** — Generate full agent configs from plain-language descriptions
106
+
107
+ ## Quick Start
108
+
109
+ ```bash
110
+ # Run directly
111
+ npx modular-studio
112
+
113
+ # Or install globally
114
+ npm install -g modular-studio
115
+ modular-studio
116
+
117
+ # Development
118
+ git clone https://github.com/VictorGjn/modular-patchbay.git
119
+ cd modular-patchbay
120
+ npm install --legacy-peer-deps
121
+ npm run dev # Frontend on :5173, backend on :4800
122
+ npm run build:all # Full production build
123
+ npm test # 646 tests
124
+ ```
125
+
126
+ ### First steps
127
+
128
+ 1. Add an LLM provider (Anthropic, OpenAI, OpenRouter, or Google)
129
+ 2. Create an agent — set identity, persona, objectives, constraints
130
+ 3. Add knowledge sources — assign knowledge types (ground-truth, evidence, framework, etc.)
131
+ 4. Test with the chat panel — the pipeline assembles context automatically
132
+ 5. Export to your preferred format (Claude Code, Amp, Codex, etc.)
133
+
134
+ ## Agent Definition Format
135
+
136
+ ```yaml
137
+ version: '1.0'
138
+ kind: agent
139
+
140
+ identity:
141
+ name: fleet-monitor
142
+ display_name: Fleet Monitor
143
+ description: Real-time vessel performance monitoring agent
144
+ tags: ['maritime', 'fleet', 'monitoring']
145
+
146
+ instructions:
147
+ persona: |
148
+ You are a maritime fleet performance analyst.
149
+ Monitor vessel metrics and flag anomalies.
150
+ constraints:
151
+ - Never recommend speed changes without fuel impact analysis
152
+ - Always include CII rating context
153
+ objectives:
154
+ primary: Detect performance anomalies early
155
+ success_criteria:
156
+ - Flag fuel overconsumption within 4 hours
157
+ - Correlate weather impact on route efficiency
158
+
159
+ context:
160
+ knowledge:
161
+ - type: file
162
+ ref: fleet-specs.md
163
+ knowledge_type: ground-truth
164
+ depth: 0
165
+ - type: structured
166
+ ref: hubspot://deals
167
+ knowledge_type: signal
168
+ depth: 2
169
+
170
+ mcp_servers:
171
+ - name: github
172
+ transport: stdio
173
+ command: npx @modelcontextprotocol/server-github
174
+
175
+ workflow:
176
+ steps:
177
+ - id: ingest
178
+ action: Read latest vessel telemetry
179
+ condition: always
180
+ - id: analyze
181
+ action: Compare against baseline performance
182
+ - id: alert
183
+ action: Flag anomalies with severity and recommended actions
184
+ ```
185
+
186
+ ## Export Targets
187
+
188
+ | Target | Format | Use case |
189
+ |--------|--------|----------|
190
+ | Claude Code | `AGENTS.md` | Direct CLI integration |
191
+ | Amp | YAML | Sourcegraph agent definitions |
192
+ | Codex | JSON | OpenAI-compatible configs |
193
+ | Vibe Kanban | YAML | BloopAI task automation |
194
+ | OpenClaw | YAML | Open-source agent runtime |
195
+ | Generic | JSON | Custom integrations |
196
+
197
+ ## Tech Stack
198
+
199
+ - **Frontend**: React 18 + TypeScript + Vite
200
+ - **Styling**: Tailwind CSS + custom design system
201
+ - **State**: Zustand (9 stores with persist middleware)
202
+ - **Backend**: Express + TypeScript (LLM proxy, MCP manager, team runner)
203
+ - **Agent SDK**: @anthropic-ai/claude-agent-sdk
204
+ - **Testing**: Vitest (unit) + Playwright (E2E) — 646 tests
205
+ - **Fonts**: Geist Sans (body) + Geist Mono (labels)
206
+
207
+ ## Documentation
208
+
209
+ | Document | Description |
210
+ |---|---|
211
+ | [Release Notes v0.2.0](docs/RELEASE-v0.2.0.md) | What's new in v0.2.0 |
212
+ | [Usage Guide](docs/USAGE-GUIDE.md) | Comprehensive usage guide |
213
+ | [Hurricane Use Case](docs/USE-CASE-HURRICANE.md) | End-to-end maritime hurricane response validation |
214
+ | [Dogfood Review](docs/DOGFOOD-REVIEW.md) | Can Modular Studio improve itself? |
215
+ | [Agent Architecture](docs/AGENT-ARCHITECTURE.md) | Platform design and agent definition format |
216
+ | [Context Engineering Vision](docs/CONTEXT-ENGINEERING-VISION.md) | Product vision and value proposition |
217
+ | [Knowledge Pipeline v2](docs/KNOWLEDGE-PIPELINE-V2.md) | Pipeline architecture spec |
218
+ | [Memory System](docs/MEMORY-SYSTEM-ANALYSIS.md) | Memory management design |
219
+
220
+ ## Contributing
221
+
222
+ We use conventional commits:
223
+
224
+ ```
225
+ feat: add embedding-based navigation
226
+ fix: budget allocator overflow on empty sources
227
+ docs: add hurricane use case validation
228
+ refactor: simplify depth filter to budget multiplier
229
+ test: add contradiction detector edge cases
230
+ ```
231
+
232
+ ### Development workflow
233
+
234
+ 1. Fork and clone the repository
235
+ 2. `npm install --legacy-peer-deps`
236
+ 3. `npm run dev` — starts frontend + backend
237
+ 4. Make changes, write tests
238
+ 5. `npm test` — ensure all tests pass
239
+ 6. `npx tsc --noEmit` — verify TypeScript compiles
240
+ 7. Submit a PR with conventional commit title
241
+
242
+ ### Code quality
243
+
244
+ - No dead code — if it's not used, delete it
245
+ - DRY + KISS — prefer simplicity over abstraction
246
+ - Continuous refactoring — leave code better than you found it
247
+ - Squash-and-merge for PRs
248
+
249
+ ## Acknowledgments
250
+
251
+ - [rtk-ai/rtk](https://github.com/rtk-ai/rtk) — Rust Token Killer. Our context compression module is inspired by RTK's approach to minimizing LLM token consumption.
252
+ - [ReactFlow](https://reactflow.dev) — Used for the visual canvas mode.
253
+ - [Anthropic](https://anthropic.com) — Claude Agent SDK for backend agent execution.
254
+
255
+ ## License
256
+
257
+ Apache License 2.0 — see [LICENSE](LICENSE) for details.
258
+
259
+ ---
260
+
261
+ *Context engineering is the layer every AI platform needs. Modular Studio is that layer.*
@@ -0,0 +1 @@
1
+ import{u as l}from"./index-CXhIX28x.js";function c(o,n){const t=[],a=[];t.push({name:o,entityType:"repository",observations:[`Tech stack: ${n.stack.join(", ")}`,`Total files: ${n.totalFiles}`,`Total tokens: ${n.totalTokens}`,...(n.conventions??[]).map(e=>`Convention: ${e}`)]});for(const e of n.features){const s=`${o}/${e.name}`;t.push({name:s,entityType:"feature",observations:[`Key files: ${e.keyFiles.join(", ")}`,...(e.stores??[]).map(i=>`Store: ${i}`),...(e.routes??[]).map(i=>`Route: ${i}`),...e.componentCount?[`Components: ${e.componentCount}`]:[]]}),a.push({from:o,to:s,relationType:"has_feature"});for(const i of e.keyFiles.slice(0,5)){const r=`${o}:${i}`;t.push({name:r,entityType:"file",observations:[`Path: ${i}`,`Feature: ${e.name}`]}),a.push({from:s,to:r,relationType:"contains_file"})}}for(const e of n.modules??[]){const s=`${o}/module:${e.name}`;t.push({name:s,entityType:"module",observations:[`Files: ${e.files.length}`,`Key files: ${e.files.slice(0,5).join(", ")}`]}),a.push({from:o,to:s,relationType:"has_module"})}return{entities:t,relations:a}}async function f(o,n){const t=l.getState(),a=t.servers.find(i=>i.status==="connected"&&i.tools.some(r=>r.name==="create_entities"));if(!a)return;const{entities:e,relations:s}=c(o,n);try{e.length>0&&await t.callTool(a.id,"create_entities",{entities:e}),s.length>0&&await t.callTool(a.id,"create_relations",{relations:s})}catch{}}async function m(o){for(const{name:n,scan:t}of o)await f(n,t)}export{m as populateGraphFromMultiScan,f as populateGraphFromScan};