mindweave 0.0.1 → 2.1.2
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 +190 -0
- package/README.md +171 -14
- package/dist/alternator/chassis/cache.js +47 -0
- package/dist/alternator/chassis/cache.js.map +1 -0
- package/dist/alternator/chassis/domRefs.js +53 -0
- package/dist/alternator/chassis/domRefs.js.map +1 -0
- package/dist/alternator/chassis/extractWorker.js +65 -0
- package/dist/alternator/chassis/extractWorker.js.map +1 -0
- package/dist/alternator/chassis/graph.js +221 -0
- package/dist/alternator/chassis/graph.js.map +1 -0
- package/dist/alternator/chassis/index.js +463 -0
- package/dist/alternator/chassis/index.js.map +1 -0
- package/dist/alternator/chassis/isolation.js +336 -0
- package/dist/alternator/chassis/isolation.js.map +1 -0
- package/dist/alternator/chassis/langCases.js +69 -0
- package/dist/alternator/chassis/langCases.js.map +1 -0
- package/dist/alternator/chassis/lsp.js +469 -0
- package/dist/alternator/chassis/lsp.js.map +1 -0
- package/dist/alternator/chassis/markup.js +262 -0
- package/dist/alternator/chassis/markup.js.map +1 -0
- package/dist/alternator/chassis/provision.js +198 -0
- package/dist/alternator/chassis/provision.js.map +1 -0
- package/dist/alternator/chassis/rank.js +72 -0
- package/dist/alternator/chassis/rank.js.map +1 -0
- package/dist/alternator/chassis/servers.js +215 -0
- package/dist/alternator/chassis/servers.js.map +1 -0
- package/dist/alternator/chassis/treesitter.js +608 -0
- package/dist/alternator/chassis/treesitter.js.map +1 -0
- package/dist/alternator/chassis/types.js +24 -0
- package/dist/alternator/chassis/types.js.map +1 -0
- package/dist/alternator/lane.js +67 -0
- package/dist/alternator/lane.js.map +1 -0
- package/dist/cli/App.js +2586 -0
- package/dist/cli/App.js.map +1 -0
- package/dist/cli/altScreen.js +67 -0
- package/dist/cli/altScreen.js.map +1 -0
- package/dist/cli/approvalChannel.js +72 -0
- package/dist/cli/approvalChannel.js.map +1 -0
- package/dist/cli/attachments.js +188 -0
- package/dist/cli/attachments.js.map +1 -0
- package/dist/cli/bootstrap.js +279 -0
- package/dist/cli/bootstrap.js.map +1 -0
- package/dist/cli/chatAnchor.js +94 -0
- package/dist/cli/chatAnchor.js.map +1 -0
- package/dist/cli/commandArgs.js +79 -0
- package/dist/cli/commandArgs.js.map +1 -0
- package/dist/cli/commandRoute.js +78 -0
- package/dist/cli/commandRoute.js.map +1 -0
- package/dist/cli/compaction.js +69 -0
- package/dist/cli/compaction.js.map +1 -0
- package/dist/cli/components/ApprovalBox.js +100 -0
- package/dist/cli/components/ApprovalBox.js.map +1 -0
- package/dist/cli/components/BlockView.js +128 -0
- package/dist/cli/components/BlockView.js.map +1 -0
- package/dist/cli/components/FirstRunFrame.js +41 -0
- package/dist/cli/components/FirstRunFrame.js.map +1 -0
- package/dist/cli/components/KeyManager.js +197 -0
- package/dist/cli/components/KeyManager.js.map +1 -0
- package/dist/cli/components/KeySetup.js +125 -0
- package/dist/cli/components/KeySetup.js.map +1 -0
- package/dist/cli/components/MenuFrame.js +24 -0
- package/dist/cli/components/MenuFrame.js.map +1 -0
- package/dist/cli/components/Picker.js +82 -0
- package/dist/cli/components/Picker.js.map +1 -0
- package/dist/cli/components/PromptInput.js +509 -0
- package/dist/cli/components/PromptInput.js.map +1 -0
- package/dist/cli/components/SubagentView.js +86 -0
- package/dist/cli/components/SubagentView.js.map +1 -0
- package/dist/cli/components/ToolGroup.js +60 -0
- package/dist/cli/components/ToolGroup.js.map +1 -0
- package/dist/cli/components/ToolLine.js +123 -0
- package/dist/cli/components/ToolLine.js.map +1 -0
- package/dist/cli/components/TrustGate.js +37 -0
- package/dist/cli/components/TrustGate.js.map +1 -0
- package/dist/cli/costView.js +40 -0
- package/dist/cli/costView.js.map +1 -0
- package/dist/cli/frameRate.js +30 -0
- package/dist/cli/frameRate.js.map +1 -0
- package/dist/cli/framebuffer/paint.js +165 -0
- package/dist/cli/framebuffer/paint.js.map +1 -0
- package/dist/cli/framebuffer/parse.js +266 -0
- package/dist/cli/framebuffer/parse.js.map +1 -0
- package/dist/cli/framebuffer/screen.js +196 -0
- package/dist/cli/framebuffer/screen.js.map +1 -0
- package/dist/cli/framebuffer/writer.js +139 -0
- package/dist/cli/framebuffer/writer.js.map +1 -0
- package/dist/cli/groupReveal.js +51 -0
- package/dist/cli/groupReveal.js.map +1 -0
- package/dist/cli/help.js +55 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/inputView.js +105 -0
- package/dist/cli/inputView.js.map +1 -0
- package/dist/cli/keyManager.js +65 -0
- package/dist/cli/keyManager.js.map +1 -0
- package/dist/cli/keySetup.js +35 -0
- package/dist/cli/keySetup.js.map +1 -0
- package/dist/cli/keyStore.js +73 -0
- package/dist/cli/keyStore.js.map +1 -0
- package/dist/cli/markdown.js +460 -0
- package/dist/cli/markdown.js.map +1 -0
- package/dist/cli/messageQueue.js +96 -0
- package/dist/cli/messageQueue.js.map +1 -0
- package/dist/cli/modes.js +90 -0
- package/dist/cli/modes.js.map +1 -0
- package/dist/cli/mouse.js +78 -0
- package/dist/cli/mouse.js.map +1 -0
- package/dist/cli/pasteAssembler.js +44 -0
- package/dist/cli/pasteAssembler.js.map +1 -0
- package/dist/cli/pathComplete.js +39 -0
- package/dist/cli/pathComplete.js.map +1 -0
- package/dist/cli/perfLog.js +90 -0
- package/dist/cli/perfLog.js.map +1 -0
- package/dist/cli/reveal.js +32 -0
- package/dist/cli/reveal.js.map +1 -0
- package/dist/cli/revealPace.js +59 -0
- package/dist/cli/revealPace.js.map +1 -0
- package/dist/cli/sessionCarry.js +19 -0
- package/dist/cli/sessionCarry.js.map +1 -0
- package/dist/cli/smoothScroll.js +74 -0
- package/dist/cli/smoothScroll.js.map +1 -0
- package/dist/cli/startupArgs.js +96 -0
- package/dist/cli/startupArgs.js.map +1 -0
- package/dist/cli/terminalRestore.js +34 -0
- package/dist/cli/terminalRestore.js.map +1 -0
- package/dist/cli/toolDisplay.js +219 -0
- package/dist/cli/toolDisplay.js.map +1 -0
- package/dist/cli/toolItems.js +65 -0
- package/dist/cli/toolItems.js.map +1 -0
- package/dist/cli/transcript.js +351 -0
- package/dist/cli/transcript.js.map +1 -0
- package/dist/cli/trust.js +79 -0
- package/dist/cli/trust.js.map +1 -0
- package/dist/cli/updateCheck.js +107 -0
- package/dist/cli/updateCheck.js.map +1 -0
- package/dist/cli/version.js +39 -0
- package/dist/cli/version.js.map +1 -0
- package/dist/cli/viewport.js +179 -0
- package/dist/cli/viewport.js.map +1 -0
- package/dist/cli/virtualWindow.js +103 -0
- package/dist/cli/virtualWindow.js.map +1 -0
- package/dist/cli/workingVerb.js +37 -0
- package/dist/cli/workingVerb.js.map +1 -0
- package/dist/cli/wrap.js +145 -0
- package/dist/cli/wrap.js.map +1 -0
- package/dist/drivers/anthropic/cachePoints.js +77 -0
- package/dist/drivers/anthropic/cachePoints.js.map +1 -0
- package/dist/drivers/anthropic/client.js +432 -0
- package/dist/drivers/anthropic/client.js.map +1 -0
- package/dist/drivers/anthropic/index.js +10 -0
- package/dist/drivers/anthropic/index.js.map +1 -0
- package/dist/drivers/anthropic/manifest.js +221 -0
- package/dist/drivers/anthropic/manifest.js.map +1 -0
- package/dist/drivers/cerebras/client.js +69 -0
- package/dist/drivers/cerebras/client.js.map +1 -0
- package/dist/drivers/cerebras/index.js +5 -0
- package/dist/drivers/cerebras/index.js.map +1 -0
- package/dist/drivers/cerebras/manifest.js +140 -0
- package/dist/drivers/cerebras/manifest.js.map +1 -0
- package/dist/drivers/clientId.js +41 -0
- package/dist/drivers/clientId.js.map +1 -0
- package/dist/drivers/contextOverflow.js +77 -0
- package/dist/drivers/contextOverflow.js.map +1 -0
- package/dist/drivers/deepseek/client.js +168 -0
- package/dist/drivers/deepseek/client.js.map +1 -0
- package/dist/drivers/deepseek/index.js +16 -0
- package/dist/drivers/deepseek/index.js.map +1 -0
- package/dist/drivers/deepseek/inlineTools.js +46 -0
- package/dist/drivers/deepseek/inlineTools.js.map +1 -0
- package/dist/drivers/deepseek/manifest.js +166 -0
- package/dist/drivers/deepseek/manifest.js.map +1 -0
- package/dist/drivers/gemini/client.js +38 -0
- package/dist/drivers/gemini/client.js.map +1 -0
- package/dist/drivers/gemini/index.js +5 -0
- package/dist/drivers/gemini/index.js.map +1 -0
- package/dist/drivers/gemini/manifest.js +150 -0
- package/dist/drivers/gemini/manifest.js.map +1 -0
- package/dist/drivers/glm/client.js +90 -0
- package/dist/drivers/glm/client.js.map +1 -0
- package/dist/drivers/glm/index.js +9 -0
- package/dist/drivers/glm/index.js.map +1 -0
- package/dist/drivers/glm/manifest.js +183 -0
- package/dist/drivers/glm/manifest.js.map +1 -0
- package/dist/drivers/groq/client.js +80 -0
- package/dist/drivers/groq/client.js.map +1 -0
- package/dist/drivers/groq/index.js +5 -0
- package/dist/drivers/groq/index.js.map +1 -0
- package/dist/drivers/groq/manifest.js +160 -0
- package/dist/drivers/groq/manifest.js.map +1 -0
- package/dist/drivers/kimi/client.js +82 -0
- package/dist/drivers/kimi/client.js.map +1 -0
- package/dist/drivers/kimi/index.js +9 -0
- package/dist/drivers/kimi/index.js.map +1 -0
- package/dist/drivers/kimi/manifest.js +168 -0
- package/dist/drivers/kimi/manifest.js.map +1 -0
- package/dist/drivers/meta/client.js +30 -0
- package/dist/drivers/meta/client.js.map +1 -0
- package/dist/drivers/meta/index.js +5 -0
- package/dist/drivers/meta/index.js.map +1 -0
- package/dist/drivers/meta/manifest.js +101 -0
- package/dist/drivers/meta/manifest.js.map +1 -0
- package/dist/drivers/minimax/client.js +36 -0
- package/dist/drivers/minimax/client.js.map +1 -0
- package/dist/drivers/minimax/index.js +5 -0
- package/dist/drivers/minimax/index.js.map +1 -0
- package/dist/drivers/minimax/manifest.js +120 -0
- package/dist/drivers/minimax/manifest.js.map +1 -0
- package/dist/drivers/mistral/client.js +54 -0
- package/dist/drivers/mistral/client.js.map +1 -0
- package/dist/drivers/mistral/index.js +5 -0
- package/dist/drivers/mistral/index.js.map +1 -0
- package/dist/drivers/mistral/manifest.js +118 -0
- package/dist/drivers/mistral/manifest.js.map +1 -0
- package/dist/drivers/openai/client.js +290 -0
- package/dist/drivers/openai/client.js.map +1 -0
- package/dist/drivers/openai/index.js +9 -0
- package/dist/drivers/openai/index.js.map +1 -0
- package/dist/drivers/openai/manifest.js +133 -0
- package/dist/drivers/openai/manifest.js.map +1 -0
- package/dist/drivers/openaiCompat/wire.js +493 -0
- package/dist/drivers/openaiCompat/wire.js.map +1 -0
- package/dist/drivers/partialTurn.js +23 -0
- package/dist/drivers/partialTurn.js.map +1 -0
- package/dist/drivers/providerError.js +181 -0
- package/dist/drivers/providerError.js.map +1 -0
- package/dist/drivers/qwen/client.js +93 -0
- package/dist/drivers/qwen/client.js.map +1 -0
- package/dist/drivers/qwen/index.js +9 -0
- package/dist/drivers/qwen/index.js.map +1 -0
- package/dist/drivers/qwen/manifest.js +146 -0
- package/dist/drivers/qwen/manifest.js.map +1 -0
- package/dist/drivers/registry.js +177 -0
- package/dist/drivers/registry.js.map +1 -0
- package/dist/drivers/retryPolicy.js +129 -0
- package/dist/drivers/retryPolicy.js.map +1 -0
- package/dist/drivers/searchBlocks.js +61 -0
- package/dist/drivers/searchBlocks.js.map +1 -0
- package/dist/drivers/types.js +2 -0
- package/dist/drivers/types.js.map +1 -0
- package/dist/drivers/xai/client.js +63 -0
- package/dist/drivers/xai/client.js.map +1 -0
- package/dist/drivers/xai/index.js +5 -0
- package/dist/drivers/xai/index.js.map +1 -0
- package/dist/drivers/xai/manifest.js +137 -0
- package/dist/drivers/xai/manifest.js.map +1 -0
- package/dist/dynamo/_probe.tmp.js +20 -0
- package/dist/dynamo/_probe.tmp.js.map +1 -0
- package/dist/dynamo/cacheBreak.js +88 -0
- package/dist/dynamo/cacheBreak.js.map +1 -0
- package/dist/dynamo/contextWindow.js +243 -0
- package/dist/dynamo/contextWindow.js.map +1 -0
- package/dist/dynamo/engine.js +2011 -0
- package/dist/dynamo/engine.js.map +1 -0
- package/dist/dynamo/guard.js +132 -0
- package/dist/dynamo/guard.js.map +1 -0
- package/dist/dynamo/liveMeter.js +58 -0
- package/dist/dynamo/liveMeter.js.map +1 -0
- package/dist/dynamo/model.js +172 -0
- package/dist/dynamo/model.js.map +1 -0
- package/dist/dynamo/planArtifact.js +125 -0
- package/dist/dynamo/planArtifact.js.map +1 -0
- package/dist/dynamo/pricing.js +140 -0
- package/dist/dynamo/pricing.js.map +1 -0
- package/dist/dynamo/prompt.js +264 -0
- package/dist/dynamo/prompt.js.map +1 -0
- package/dist/dynamo/spend.js +45 -0
- package/dist/dynamo/spend.js.map +1 -0
- package/dist/dynamo/verify.js +483 -0
- package/dist/dynamo/verify.js.map +1 -0
- package/dist/governor/forbidden.js +181 -0
- package/dist/governor/forbidden.js.map +1 -0
- package/dist/governor/freshness.js +83 -0
- package/dist/governor/freshness.js.map +1 -0
- package/dist/governor/frontmatter.js +38 -0
- package/dist/governor/frontmatter.js.map +1 -0
- package/dist/governor/glob.js +75 -0
- package/dist/governor/glob.js.map +1 -0
- package/dist/governor/index.js +87 -0
- package/dist/governor/index.js.map +1 -0
- package/dist/governor/rules.js +80 -0
- package/dist/governor/rules.js.map +1 -0
- package/dist/governor/scope.js +91 -0
- package/dist/governor/scope.js.map +1 -0
- package/dist/governor/skills.js +176 -0
- package/dist/governor/skills.js.map +1 -0
- package/dist/governor/types.js +16 -0
- package/dist/governor/types.js.map +1 -0
- package/dist/governor/write.js +182 -0
- package/dist/governor/write.js.map +1 -0
- package/dist/index.js +89 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/catalog.js +232 -0
- package/dist/mcp/catalog.js.map +1 -0
- package/dist/mcp/config.js +116 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/configWrite.js +254 -0
- package/dist/mcp/configWrite.js.map +1 -0
- package/dist/mcp/connection.js +504 -0
- package/dist/mcp/connection.js.map +1 -0
- package/dist/mcp/deferred.js +104 -0
- package/dist/mcp/deferred.js.map +1 -0
- package/dist/mcp/discover.js +128 -0
- package/dist/mcp/discover.js.map +1 -0
- package/dist/mcp/manager.js +679 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/paramHeaders.js +163 -0
- package/dist/mcp/paramHeaders.js.map +1 -0
- package/dist/mcp/prompts.js +136 -0
- package/dist/mcp/prompts.js.map +1 -0
- package/dist/mcp/protocol.js +171 -0
- package/dist/mcp/protocol.js.map +1 -0
- package/dist/mcp/resources.js +119 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/resultStore.js +180 -0
- package/dist/mcp/resultStore.js.map +1 -0
- package/dist/mcp/subscriptions.js +74 -0
- package/dist/mcp/subscriptions.js.map +1 -0
- package/dist/mcp/transport/headerValue.js +40 -0
- package/dist/mcp/transport/headerValue.js.map +1 -0
- package/dist/mcp/transport/http.js +321 -0
- package/dist/mcp/transport/http.js.map +1 -0
- package/dist/mcp/transport/stdio.js +234 -0
- package/dist/mcp/transport/stdio.js.map +1 -0
- package/dist/mcp/transport/types.js +27 -0
- package/dist/mcp/transport/types.js.map +1 -0
- package/dist/mcp/trust.js +98 -0
- package/dist/mcp/trust.js.map +1 -0
- package/dist/mcp/trustStore.js +55 -0
- package/dist/mcp/trustStore.js.map +1 -0
- package/dist/memory/autoMemory.js +340 -0
- package/dist/memory/autoMemory.js.map +1 -0
- package/dist/memory/compaction.js +513 -0
- package/dist/memory/compaction.js.map +1 -0
- package/dist/memory/images.js +173 -0
- package/dist/memory/images.js.map +1 -0
- package/dist/memory/presence.js +59 -0
- package/dist/memory/presence.js.map +1 -0
- package/dist/memory/projectNotes.js +247 -0
- package/dist/memory/projectNotes.js.map +1 -0
- package/dist/memory/restore.js +72 -0
- package/dist/memory/restore.js.map +1 -0
- package/dist/memory/session.js +472 -0
- package/dist/memory/session.js.map +1 -0
- package/dist/memory/sessionMemory.js +142 -0
- package/dist/memory/sessionMemory.js.map +1 -0
- package/dist/memory/sessionMemoryCompact.js +136 -0
- package/dist/memory/sessionMemoryCompact.js.map +1 -0
- package/dist/memory/store.js +217 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/memory/types.js +14 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/memory/workingSet.js +383 -0
- package/dist/memory/workingSet.js.map +1 -0
- package/dist/project/context.js +425 -0
- package/dist/project/context.js.map +1 -0
- package/dist/tools/approval.js +189 -0
- package/dist/tools/approval.js.map +1 -0
- package/dist/tools/askUser.js +103 -0
- package/dist/tools/askUser.js.map +1 -0
- package/dist/tools/atomicWrite.js +151 -0
- package/dist/tools/atomicWrite.js.map +1 -0
- package/dist/tools/backgroundShells.js +468 -0
- package/dist/tools/backgroundShells.js.map +1 -0
- package/dist/tools/captureSweep.js +77 -0
- package/dist/tools/captureSweep.js.map +1 -0
- package/dist/tools/chassisMux.js +92 -0
- package/dist/tools/chassisMux.js.map +1 -0
- package/dist/tools/checkpoints.js +328 -0
- package/dist/tools/checkpoints.js.map +1 -0
- package/dist/tools/codeIntel.js +267 -0
- package/dist/tools/codeIntel.js.map +1 -0
- package/dist/tools/deferredNative.js +121 -0
- package/dist/tools/deferredNative.js.map +1 -0
- package/dist/tools/detail.js +135 -0
- package/dist/tools/detail.js.map +1 -0
- package/dist/tools/diagnostics.js +174 -0
- package/dist/tools/diagnostics.js.map +1 -0
- package/dist/tools/edit.js +167 -0
- package/dist/tools/edit.js.map +1 -0
- package/dist/tools/editCore.js +283 -0
- package/dist/tools/editCore.js.map +1 -0
- package/dist/tools/editFile.js +183 -0
- package/dist/tools/editFile.js.map +1 -0
- package/dist/tools/editRipple.js +126 -0
- package/dist/tools/editRipple.js.map +1 -0
- package/dist/tools/editTarget.js +131 -0
- package/dist/tools/editTarget.js.map +1 -0
- package/dist/tools/editWindow.js +49 -0
- package/dist/tools/editWindow.js.map +1 -0
- package/dist/tools/eol.js +56 -0
- package/dist/tools/eol.js.map +1 -0
- package/dist/tools/exitPlan.js +175 -0
- package/dist/tools/exitPlan.js.map +1 -0
- package/dist/tools/focus.js +42 -0
- package/dist/tools/focus.js.map +1 -0
- package/dist/tools/gitignore.js +148 -0
- package/dist/tools/gitignore.js.map +1 -0
- package/dist/tools/glob.js +134 -0
- package/dist/tools/glob.js.map +1 -0
- package/dist/tools/governorTools.js +258 -0
- package/dist/tools/governorTools.js.map +1 -0
- package/dist/tools/grep.js +450 -0
- package/dist/tools/grep.js.map +1 -0
- package/dist/tools/guard.js +220 -0
- package/dist/tools/guard.js.map +1 -0
- package/dist/tools/killTree.js +215 -0
- package/dist/tools/killTree.js.map +1 -0
- package/dist/tools/listDir.js +143 -0
- package/dist/tools/listDir.js.map +1 -0
- package/dist/tools/mcpAdd.js +176 -0
- package/dist/tools/mcpAdd.js.map +1 -0
- package/dist/tools/mcpResources.js +116 -0
- package/dist/tools/mcpResources.js.map +1 -0
- package/dist/tools/mcpSearch.js +123 -0
- package/dist/tools/mcpSearch.js.map +1 -0
- package/dist/tools/multiEdit.js +168 -0
- package/dist/tools/multiEdit.js.map +1 -0
- package/dist/tools/paths.js +225 -0
- package/dist/tools/paths.js.map +1 -0
- package/dist/tools/posixShell.js +123 -0
- package/dist/tools/posixShell.js.map +1 -0
- package/dist/tools/readFile.js +371 -0
- package/dist/tools/readFile.js.map +1 -0
- package/dist/tools/readSymbol.js +145 -0
- package/dist/tools/readSymbol.js.map +1 -0
- package/dist/tools/registry.js +120 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/replaceSymbol.js +141 -0
- package/dist/tools/replaceSymbol.js.map +1 -0
- package/dist/tools/results.js +15 -0
- package/dist/tools/results.js.map +1 -0
- package/dist/tools/ripgrep.js +145 -0
- package/dist/tools/ripgrep.js.map +1 -0
- package/dist/tools/runCommand.js +633 -0
- package/dist/tools/runCommand.js.map +1 -0
- package/dist/tools/saveMemory.js +102 -0
- package/dist/tools/saveMemory.js.map +1 -0
- package/dist/tools/screenshot.js +200 -0
- package/dist/tools/screenshot.js.map +1 -0
- package/dist/tools/screenshotWin.js +227 -0
- package/dist/tools/screenshotWin.js.map +1 -0
- package/dist/tools/search.js +121 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/sessionTools.js +187 -0
- package/dist/tools/sessionTools.js.map +1 -0
- package/dist/tools/shellCheckpoint.js +123 -0
- package/dist/tools/shellCheckpoint.js.map +1 -0
- package/dist/tools/shellLint.js +102 -0
- package/dist/tools/shellLint.js.map +1 -0
- package/dist/tools/shellTools.js +203 -0
- package/dist/tools/shellTools.js.map +1 -0
- package/dist/tools/spanCore.js +78 -0
- package/dist/tools/spanCore.js.map +1 -0
- package/dist/tools/subagent.js +224 -0
- package/dist/tools/subagent.js.map +1 -0
- package/dist/tools/subagentReport.js +114 -0
- package/dist/tools/subagentReport.js.map +1 -0
- package/dist/tools/tempSweep.js +118 -0
- package/dist/tools/tempSweep.js.map +1 -0
- package/dist/tools/todo.js +117 -0
- package/dist/tools/todo.js.map +1 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/untrusted.js +46 -0
- package/dist/tools/untrusted.js.map +1 -0
- package/dist/tools/useSkill.js +62 -0
- package/dist/tools/useSkill.js.map +1 -0
- package/dist/tools/walk.js +152 -0
- package/dist/tools/walk.js.map +1 -0
- package/dist/tools/web.js +61 -0
- package/dist/tools/web.js.map +1 -0
- package/dist/tools/webFetch.js +444 -0
- package/dist/tools/webFetch.js.map +1 -0
- package/dist/tools/webSearch.js +130 -0
- package/dist/tools/webSearch.js.map +1 -0
- package/dist/tools/workspace.js +212 -0
- package/dist/tools/workspace.js.map +1 -0
- package/dist/tools/workspaceDiscover.js +216 -0
- package/dist/tools/workspaceDiscover.js.map +1 -0
- package/dist/tools/writeFile.js +162 -0
- package/dist/tools/writeFile.js.map +1 -0
- package/package.json +74 -28
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* workingSet.ts — the live "working set": the files the model is actively working on,
|
|
3
|
+
* kept CURRENT in the volatile context tail every turn.
|
|
4
|
+
*
|
|
5
|
+
* This is the fix for the re-read storm. Instead of leaving file reads in the
|
|
6
|
+
* transcript (where they go stale after an edit and get cleared by compaction — so the
|
|
7
|
+
* model re-reads and "forgets"), we keep the files the model is working on re-read
|
|
8
|
+
* fresh from disk each turn, at the END of the context (the boundary — best against
|
|
9
|
+
* lost-in-the-middle). The model therefore always has the current content of what it's
|
|
10
|
+
* editing and never needs to re-read it.
|
|
11
|
+
*
|
|
12
|
+
* The working CYCLE is the same for a 1-file task and a 50-file one: bounded ONLY by a
|
|
13
|
+
* token budget, not an arbitrary file count. Within that budget the most-recent files
|
|
14
|
+
* are shown in FULL; any that don't fit whole are LOCALIZED (outline + the regions the
|
|
15
|
+
* model has focused on) rather than dropped — so a big task keeps every touched file's
|
|
16
|
+
* structure, and full reads are reserved for what's actively being edited.
|
|
17
|
+
*
|
|
18
|
+
* The pure parts (selection, budgeting, rendering, line-numbering) are unit-tested;
|
|
19
|
+
* `buildWorkingSet` does the disk/chassis I/O around them.
|
|
20
|
+
*/
|
|
21
|
+
import { promises as fs } from "node:fs";
|
|
22
|
+
import { chassisForPath } from "../tools/chassisMux.js";
|
|
23
|
+
import { relativize } from "../tools/paths.js";
|
|
24
|
+
import { estimateTokens } from "./compaction.js";
|
|
25
|
+
const env = (name, fallback) => {
|
|
26
|
+
const v = Number(process.env[name]);
|
|
27
|
+
return Number.isInteger(v) && v > 0 ? v : fallback;
|
|
28
|
+
};
|
|
29
|
+
/** Safety cap on how many touched files we even consider — NOT a "keep N" limit. The
|
|
30
|
+
* token budget + localization decide what actually fits; this only bounds work on a
|
|
31
|
+
* huge ledger so a long session doesn't stat hundreds of files each turn. */
|
|
32
|
+
export const WORKING_SET_MAX_CANDIDATES = env("MINDWEAVE_WORKINGSET_MAX_FILES", 40);
|
|
33
|
+
/**
|
|
34
|
+
* Total token budget for the working-set block — the ONLY real limit on how many
|
|
35
|
+
* files it holds (large ones are localized to fit, not dropped).
|
|
36
|
+
*
|
|
37
|
+
* WHY 8K AND NOT 20K. This block lives in the volatile tail, which is rebuilt on every
|
|
38
|
+
* model STEP rather than once per turn, and sits after the newest content so none of it
|
|
39
|
+
* is cache-eligible. At 20K a near-full working set was the single largest recurring
|
|
40
|
+
* cost in a session: an eight-step turn re-sent it eight times at full price, which on a
|
|
41
|
+
* premium provider outweighed the entire tool-schema question.
|
|
42
|
+
*
|
|
43
|
+
* Cutting it is safe because of what the budget does NOT govern. The most recently
|
|
44
|
+
* touched file is admitted regardless of the budget (`firstFile` below), so the file
|
|
45
|
+
* actually being worked on is never the one squeezed out. Files past the budget are not
|
|
46
|
+
* forgotten either — they stay in the read ledger and a read of them still works; they
|
|
47
|
+
* just stop being carried for free on every step.
|
|
48
|
+
*/
|
|
49
|
+
// Raised from 8,000 to 12,000 for one reason: a 300-400 line source or page file
|
|
50
|
+
// measures 8,900-9,900 tokens once line-numbered, so at 8,000 the single file being
|
|
51
|
+
// actively edited could not fit even with the whole budget to itself. The step-cost
|
|
52
|
+
// argument above still holds and is why this is 12,000 rather than the 20,000 it once
|
|
53
|
+
// was — it buys exactly one real file and no more. For comparison: Codex CLI restores
|
|
54
|
+
// 5 files at 5,000 each (50,000) after a compaction, and OpenCode protects a 40,000
|
|
55
|
+
// token zone outright, so this remains the tightest budget of the three by a wide margin.
|
|
56
|
+
export const WORKING_SET_TOKENS = env("MINDWEAVE_WORKINGSET_TOKENS", 12_000);
|
|
57
|
+
/** Above this many tokens, a single file is localized (outline + focus) not shown whole. */
|
|
58
|
+
const PER_FILE_MAX_TOKENS = env("MINDWEAVE_WORKINGSET_FILE_TOKENS", 6_000);
|
|
59
|
+
/**
|
|
60
|
+
* Room held back from the most-recent file's LOCALIZED form when other files are active.
|
|
61
|
+
*
|
|
62
|
+
* The active file is exempt from the per-file cap so it can be held whole, and that
|
|
63
|
+
* exemption is right — it is what stops every edit re-reading it. What was wrong was
|
|
64
|
+
* that the exemption also applied to its localized form, which was itself unbounded, so
|
|
65
|
+
* one big file could spend the entire budget on an outline plus regions: measured on a
|
|
66
|
+
* real session, a 2,045-line stylesheet localized to 15,400 tokens against a 12,000
|
|
67
|
+
* budget and the component being edited vanished from the block, silently.
|
|
68
|
+
*
|
|
69
|
+
* So the FULL form still gets the whole budget (nothing about holding the active file
|
|
70
|
+
* whole changes), and only the localized fallback leaves a floor behind it.
|
|
71
|
+
*/
|
|
72
|
+
const RUNNER_UP_RESERVE = env("MINDWEAVE_WORKINGSET_RESERVE", 3_000);
|
|
73
|
+
/**
|
|
74
|
+
* Outline entries one localized file may carry.
|
|
75
|
+
*
|
|
76
|
+
* A stylesheet's outline ran to 439 entries — 3,151 tokens, a quarter of the whole
|
|
77
|
+
* budget, re-sent every step — because markup extraction emitted one symbol per selector
|
|
78
|
+
* OCCURRENCE. That is fixed at the source in the chassis; this is the guard that keeps
|
|
79
|
+
* any single file's structure from crowding out the content it exists to index.
|
|
80
|
+
*/
|
|
81
|
+
const OUTLINE_MAX_ENTRIES = env("MINDWEAVE_WORKINGSET_OUTLINE_ENTRIES", 120);
|
|
82
|
+
/** Room set aside for a localized block's own header, which is composed last (it has to
|
|
83
|
+
* report what actually fit) and so cannot be measured while the budget is being spent. */
|
|
84
|
+
const HEADER_ALLOWANCE = 80;
|
|
85
|
+
/** Below this many lines a trimmed focus region is not worth carrying — a handful of
|
|
86
|
+
* lines out of the middle of a file tells the model less than the outline already did. */
|
|
87
|
+
const MIN_REGION_LINES = 20;
|
|
88
|
+
/** The most-recently-touched files, most-recent first, capped at `max`. Pure. */
|
|
89
|
+
export function selectActiveFiles(reads, max) {
|
|
90
|
+
return [...reads.entries()]
|
|
91
|
+
.map(([path, record]) => ({ path, record }))
|
|
92
|
+
.sort((a, b) => (b.record.touchedAt ?? 0) - (a.record.touchedAt ?? 0))
|
|
93
|
+
.slice(0, max);
|
|
94
|
+
}
|
|
95
|
+
/** Line-numbered slice of `lines` for [from..to] (1-based, clamped). Pure. */
|
|
96
|
+
export function numberedRange(lines, from, to) {
|
|
97
|
+
const start = Math.max(1, from);
|
|
98
|
+
const end = Math.min(lines.length, to);
|
|
99
|
+
const width = String(end).length;
|
|
100
|
+
const out = [];
|
|
101
|
+
for (let i = start; i <= end; i++)
|
|
102
|
+
out.push(`${String(i).padStart(width)}\t${lines[i - 1] ?? ""}`);
|
|
103
|
+
return out.join("\n");
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Assemble the `<working_files>` block from prepared per-file blocks (most-recent
|
|
107
|
+
* first) within a token budget. Returns the text and the set of paths whose FULL
|
|
108
|
+
* content is included. Pure.
|
|
109
|
+
*
|
|
110
|
+
* Whatever is not shown is NAMED. The header tells the model these are the files it is
|
|
111
|
+
* working on and not to re-read them, so a file missing from the block without a word is
|
|
112
|
+
* a claim that is not true — and the model obeys it by not re-reading a file it cannot
|
|
113
|
+
* see. The old count could not express that: it was `prepared.length - kept.length`, and
|
|
114
|
+
* a file skipped for lack of room never reached `prepared`, so the block reported zero
|
|
115
|
+
* omissions while the file being edited was absent from it.
|
|
116
|
+
*/
|
|
117
|
+
export function renderWorkingFiles(prepared, budget, omitted = []) {
|
|
118
|
+
const kept = [];
|
|
119
|
+
const missing = [...omitted];
|
|
120
|
+
let used = 0;
|
|
121
|
+
for (const f of prepared) {
|
|
122
|
+
// The most-recent file is always kept; later ones are skipped rather than breaking
|
|
123
|
+
// the loop, so a small file behind a large one still gets its place.
|
|
124
|
+
if (kept.length > 0 && used + f.tokens > budget) {
|
|
125
|
+
missing.push(f.display ?? f.path);
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
kept.push(f);
|
|
129
|
+
used += f.tokens;
|
|
130
|
+
}
|
|
131
|
+
// Built from KEPT only: a file prepared and then dropped for budget is not on screen,
|
|
132
|
+
// and reporting it as visible is the one mistake that matters here.
|
|
133
|
+
const shownSpans = new Map(kept.map((f) => [f.path, f.shown]));
|
|
134
|
+
if (kept.length === 0)
|
|
135
|
+
return { text: "", fullPaths: new Set(), shownSpans };
|
|
136
|
+
const header = "These are the CURRENT contents of the files you're working on, kept up to date " +
|
|
137
|
+
"automatically. Edit straight from them — do NOT re-read a file shown here.";
|
|
138
|
+
const body = kept.map((f) => f.block).join("\n\n");
|
|
139
|
+
const note = missing.length
|
|
140
|
+
? `\n\nNOT shown here, and not in your context — read ${missing.join(", ")} if you need ${missing.length === 1 ? "it" : "them"}.`
|
|
141
|
+
: "";
|
|
142
|
+
return {
|
|
143
|
+
text: `${header}\n\n${body}${note}`,
|
|
144
|
+
fullPaths: new Set(kept.filter((f) => f.full).map((f) => f.path)),
|
|
145
|
+
shownSpans,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* A fingerprint of everything the block is derived from: which files are active, what
|
|
150
|
+
* the model has focused on in each, and their state ON DISK right now.
|
|
151
|
+
*
|
|
152
|
+
* This is what lets the rebuild be skipped without giving up the freshness guarantee.
|
|
153
|
+
* The block is assembled per model STEP so it can never go stale, and that matters more
|
|
154
|
+
* than it looks: `run_command` can write files with no tool the engine could hook, so a
|
|
155
|
+
* "was anything mutated?" flag would be wrong exactly when it counts. A stat of each
|
|
156
|
+
* active file answers the same question from the filesystem instead, at a fraction of
|
|
157
|
+
* the cost of re-reading and re-tokenizing them.
|
|
158
|
+
*/
|
|
159
|
+
async function diskKey(active) {
|
|
160
|
+
const parts = await Promise.all(active.map(async ({ path, record }) => {
|
|
161
|
+
const focus = (record.focus ?? []).map((f) => `${f.start}-${f.end}`).join(",");
|
|
162
|
+
try {
|
|
163
|
+
const st = await fs.stat(path);
|
|
164
|
+
return `${path}:${st.mtimeMs}:${st.size}:${focus}`;
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
return `${path}:gone`;
|
|
168
|
+
}
|
|
169
|
+
}));
|
|
170
|
+
return parts.join("|");
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Build this turn's working-set block: read the current content of the active files
|
|
174
|
+
* fresh from disk, keeping the freshest stat on the ledger (so read_file's
|
|
175
|
+
* short-circuit compares correctly), localizing any file too big for its share.
|
|
176
|
+
*/
|
|
177
|
+
export async function buildWorkingSet(ctx) {
|
|
178
|
+
const active = selectActiveFiles(ctx.reads, WORKING_SET_MAX_CANDIDATES);
|
|
179
|
+
const key = await diskKey(active);
|
|
180
|
+
const cached = ctx.workingSetCache;
|
|
181
|
+
if (cached && cached.key === key)
|
|
182
|
+
return cached.value;
|
|
183
|
+
const prepared = [];
|
|
184
|
+
// Files that had to be left out. Threaded through to the block so the model is told,
|
|
185
|
+
// rather than left to infer their absence from a header that says otherwise.
|
|
186
|
+
const omitted = [];
|
|
187
|
+
let used = 0;
|
|
188
|
+
const contended = active.length > 1;
|
|
189
|
+
for (const { path, record } of active) {
|
|
190
|
+
let stat;
|
|
191
|
+
try {
|
|
192
|
+
stat = await fs.stat(path);
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
continue; // file gone since it was touched — skip
|
|
196
|
+
}
|
|
197
|
+
if (!stat.isFile())
|
|
198
|
+
continue;
|
|
199
|
+
let content;
|
|
200
|
+
try {
|
|
201
|
+
content = await fs.readFile(path, "utf8");
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
if (looksBinary(content))
|
|
207
|
+
continue;
|
|
208
|
+
// Keep the ledger's stat current so a later read of this file is recognized as
|
|
209
|
+
// unchanged (the read short-circuit relies on matching mtime/size).
|
|
210
|
+
ctx.reads.set(path, { ...record, mtimeMs: stat.mtimeMs, size: stat.size });
|
|
211
|
+
const lines = content.split(/\r?\n/);
|
|
212
|
+
const display = relativize(ctx, path);
|
|
213
|
+
const fullBlock = `### ${display} (${lines.length} line${lines.length === 1 ? "" : "s"})\n${numberedRange(lines, 1, lines.length)}`;
|
|
214
|
+
const fullTokens = estimateTokens(fullBlock);
|
|
215
|
+
const firstFile = prepared.length === 0;
|
|
216
|
+
const remaining = Math.max(0, WORKING_SET_TOKENS - used);
|
|
217
|
+
// The active file may spend the whole budget on its FULL content; everything after it
|
|
218
|
+
// pays the per-file cap. Its localized fallback is the one that leaves a floor.
|
|
219
|
+
const share = firstFile ? remaining : Math.min(PER_FILE_MAX_TOKENS, remaining);
|
|
220
|
+
const localShare = firstFile && contended ? Math.min(share, WORKING_SET_TOKENS - RUNNER_UP_RESERVE) : share;
|
|
221
|
+
// Show the file's FULL content when it fits its share, LOCALIZED (outline + focused
|
|
222
|
+
// regions) when it doesn't. Either way the file is REPRESENTED, so the cycle is the
|
|
223
|
+
// same for a small task and a large one.
|
|
224
|
+
if (fullTokens <= share) {
|
|
225
|
+
prepared.push({
|
|
226
|
+
path,
|
|
227
|
+
display,
|
|
228
|
+
block: fullBlock,
|
|
229
|
+
tokens: fullTokens,
|
|
230
|
+
full: true,
|
|
231
|
+
shown: [{ start: 1, end: lines.length }],
|
|
232
|
+
});
|
|
233
|
+
used += fullTokens;
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
// Localization is bounded by the share, and the share is by definition smaller than
|
|
237
|
+
// the full form that failed to fit it — so localizing can no longer cost MORE than
|
|
238
|
+
// showing the file whole. It used to: with nothing bounding it, a stylesheet whose
|
|
239
|
+
// focus already spanned it localized to 15,354 tokens against a 12,060-token file,
|
|
240
|
+
// because the outline was added on top of regions that already covered it. That is
|
|
241
|
+
// prevented structurally here rather than detected afterwards.
|
|
242
|
+
const local = await localizeBig(ctx, path, display, lines, record.focus, localShare);
|
|
243
|
+
const localTokens = estimateTokens(local.block);
|
|
244
|
+
if (used + localTokens <= WORKING_SET_TOKENS) {
|
|
245
|
+
prepared.push({ path, display, block: local.block, tokens: localTokens, full: false, shown: local.shown });
|
|
246
|
+
used += localTokens;
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
omitted.push(display);
|
|
250
|
+
}
|
|
251
|
+
const block = renderWorkingFiles(prepared, WORKING_SET_TOKENS, omitted);
|
|
252
|
+
ctx.workingSetCache = { key, value: block };
|
|
253
|
+
return block;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* A large file's block: its structure, plus as many of the model's focused regions as
|
|
257
|
+
* `budget` allows, and an honest statement of what that adds up to.
|
|
258
|
+
*
|
|
259
|
+
* Everything here is bounded, because an unbounded localization is what let one file
|
|
260
|
+
* take the whole block. What does not fit is named rather than dropped in silence, and
|
|
261
|
+
* the header reports the exact ranges held — without that the model cannot tell which
|
|
262
|
+
* lines it already has, so it guesses an offset and reads blind.
|
|
263
|
+
*/
|
|
264
|
+
async function localizeBig(ctx, path, display, lines, focus, budget) {
|
|
265
|
+
const total = lines.length;
|
|
266
|
+
const room = Math.max(0, budget - HEADER_ALLOWANCE);
|
|
267
|
+
let used = 0;
|
|
268
|
+
// Structure first: the cheapest thing that tells the model where to look.
|
|
269
|
+
let outlineText = "";
|
|
270
|
+
let outlineNote = "";
|
|
271
|
+
const chassis = chassisForPath(ctx, path);
|
|
272
|
+
if (chassis) {
|
|
273
|
+
try {
|
|
274
|
+
const entries = flattenOutline(await chassis.outline(path));
|
|
275
|
+
if (entries.length > 0) {
|
|
276
|
+
const kept = entries.slice(0, OUTLINE_MAX_ENTRIES);
|
|
277
|
+
const text = "outline:\n" + kept.map((e) => e.text).join("\n");
|
|
278
|
+
const cost = estimateTokens(text);
|
|
279
|
+
if (cost <= room) {
|
|
280
|
+
outlineText = text;
|
|
281
|
+
used += cost;
|
|
282
|
+
if (entries.length > kept.length)
|
|
283
|
+
outlineNote += `, ${entries.length - kept.length} further symbols not listed`;
|
|
284
|
+
// An outline that simply stops looks exactly like a complete one. A component
|
|
285
|
+
// file's render body has no declarations in it, so the outline goes silent over
|
|
286
|
+
// the part most likely to be edited — say where it actually reaches.
|
|
287
|
+
const reach = kept[kept.length - 1].line;
|
|
288
|
+
if (reach < total * 0.9)
|
|
289
|
+
outlineNote += `, outline reaches L${reach} of ${total}`;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
/* no outline — fine */
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
const render = (r) => `lines ${r.start}-${r.end}:\n${numberedRange(lines, r.start, r.end)}`;
|
|
298
|
+
// Each wanted region, and how far into it we ended up going. `held: null` means the
|
|
299
|
+
// region is not on screen at all. Everything the header says is derived from this, so
|
|
300
|
+
// the block's claims and its contents cannot drift apart however much trimming happens.
|
|
301
|
+
const regions = (focus ?? []).map((s) => ({
|
|
302
|
+
want: { start: Math.max(1, s.start - 2), end: Math.min(total, s.end + 2) },
|
|
303
|
+
held: null,
|
|
304
|
+
}));
|
|
305
|
+
for (const r of regions) {
|
|
306
|
+
const left = room - used;
|
|
307
|
+
const cost = estimateTokens(render(r.want));
|
|
308
|
+
if (cost <= left) {
|
|
309
|
+
r.held = r.want.end;
|
|
310
|
+
used += cost;
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
// TRIM rather than drop. A region that does not fit whole is still worth its first
|
|
314
|
+
// lines — dropping it left the block with a header and nothing in it, which is the
|
|
315
|
+
// one outcome worse than showing less than was asked for.
|
|
316
|
+
const perLine = Math.max(1, cost / (r.want.end - r.want.start + 1));
|
|
317
|
+
const canFit = Math.floor(left / perLine);
|
|
318
|
+
if (canFit < MIN_REGION_LINES)
|
|
319
|
+
continue;
|
|
320
|
+
r.held = Math.min(r.want.end, r.want.start + canFit - 1);
|
|
321
|
+
used += estimateTokens(render({ start: r.want.start, end: r.held }));
|
|
322
|
+
}
|
|
323
|
+
const shownOf = () => regions.filter((r) => r.held !== null).map((r) => ({ start: r.want.start, end: r.held }));
|
|
324
|
+
const compose = () => {
|
|
325
|
+
const shown = shownOf();
|
|
326
|
+
const missing = regions.flatMap((r) => r.held === null ? [r.want] : r.held < r.want.end ? [{ start: r.held + 1, end: r.want.end }] : []);
|
|
327
|
+
const held = shown.length
|
|
328
|
+
? `holding lines ${shown.map((r) => `${r.start}-${r.end}`).join(", ")} of ${total}`
|
|
329
|
+
: `structure only, no lines held`;
|
|
330
|
+
const rest = missing.length
|
|
331
|
+
? ` Lines ${missing.map((r) => `${r.start}-${r.end}`).join(", ")} did not fit — read them if you need them.`
|
|
332
|
+
: "";
|
|
333
|
+
const body = [...(outlineText ? [outlineText] : []), ...shown.map(render)];
|
|
334
|
+
const header = `### ${display} (${total} lines — too large to keep whole; ${held}${outlineNote}. ` +
|
|
335
|
+
`Use read_symbol or a read_file range for anything else.)${rest}`;
|
|
336
|
+
return [header, ...body].join("\n\n");
|
|
337
|
+
};
|
|
338
|
+
// Enforce the bound EXACTLY rather than trusting the allowance. The header cannot be
|
|
339
|
+
// measured while the budget is being spent — it has to report what ended up fitting —
|
|
340
|
+
// so any reserve for it is a guess, and overshooting by even seventy tokens meant the
|
|
341
|
+
// whole file was dropped from the block. SHRINK, never drop: give back lines from the
|
|
342
|
+
// last held region until it fits, and only let a region go once what is left of it is
|
|
343
|
+
// too small to be worth carrying.
|
|
344
|
+
let block = compose();
|
|
345
|
+
for (let guard = 0; estimateTokens(block) > budget && guard < 24; guard++) {
|
|
346
|
+
const last = [...regions].reverse().find((r) => r.held !== null);
|
|
347
|
+
if (!last) {
|
|
348
|
+
if (!outlineText)
|
|
349
|
+
break; // nothing left to give back
|
|
350
|
+
outlineText = "";
|
|
351
|
+
outlineNote = "";
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
const over = estimateTokens(block) - budget;
|
|
355
|
+
const lineCount = last.held - last.want.start + 1;
|
|
356
|
+
const perLine = Math.max(1, estimateTokens(render({ start: last.want.start, end: last.held })) / lineCount);
|
|
357
|
+
const give = Math.max(1, Math.ceil(over / perLine));
|
|
358
|
+
const end = last.held - give;
|
|
359
|
+
last.held = end - last.want.start + 1 >= MIN_REGION_LINES ? end : null;
|
|
360
|
+
}
|
|
361
|
+
block = compose();
|
|
362
|
+
}
|
|
363
|
+
return { block, shown: shownOf() };
|
|
364
|
+
}
|
|
365
|
+
/** An outline flattened to one indented line per symbol, depth-first. */
|
|
366
|
+
function flattenOutline(entries, depth = 0) {
|
|
367
|
+
const out = [];
|
|
368
|
+
for (const e of entries) {
|
|
369
|
+
out.push({ text: `${" ".repeat(depth)}${e.kind} ${e.name} (L${e.line})`, line: e.line });
|
|
370
|
+
if (e.children?.length)
|
|
371
|
+
out.push(...flattenOutline(e.children, depth + 1));
|
|
372
|
+
}
|
|
373
|
+
return out;
|
|
374
|
+
}
|
|
375
|
+
/** A NUL byte in the first chunk is a cheap "not text" signal. */
|
|
376
|
+
function looksBinary(text) {
|
|
377
|
+
const n = Math.min(text.length, 8192);
|
|
378
|
+
for (let i = 0; i < n; i++)
|
|
379
|
+
if (text.charCodeAt(i) === 0)
|
|
380
|
+
return true;
|
|
381
|
+
return false;
|
|
382
|
+
}
|
|
383
|
+
//# sourceMappingURL=workingSet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workingSet.js","sourceRoot":"","sources":["../../src/memory/workingSet.ts"],"names":[],"mappings":"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"}
|