@astralyn/pi 1.4.4 → 1.4.6
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/CHANGELOG.md +34 -0
- package/README.md +1 -0
- package/dist/bundle/chunks/chunk-5M3YJ54Z.js +82 -0
- package/dist/bundle/chunks/chunk-6QGV3IWD.js +6 -0
- package/dist/bundle/chunks/chunk-ALHAFUHP.js +7 -0
- package/dist/bundle/chunks/chunk-AXFWZIHH.js +4 -0
- package/dist/bundle/chunks/chunk-EYKC6ESU.js +2 -0
- package/dist/bundle/chunks/chunk-KDO6L76C.js +230 -0
- package/dist/bundle/chunks/chunk-RBTJBQWX.js +1500 -0
- package/dist/bundle/chunks/chunk-RLNMABLM.js +9 -0
- package/dist/bundle/chunks/cli-FH77R7JR.js +51 -0
- package/dist/bundle/chunks/execute-5ZQUS52M.js +505 -0
- package/dist/bundle/chunks/runtime-R5CMHJ5P.js +2 -0
- package/dist/bundle/chunks/virtual-modules-KCQU7LOC.js +2 -0
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +2 -0
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +2 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +18 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +6 -0
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/isolated-session.d.ts +23 -0
- package/dist/core/isolated-session.d.ts.map +1 -0
- package/dist/core/isolated-session.js +55 -0
- package/dist/core/isolated-session.js.map +1 -0
- package/dist/core/model-config.d.ts +1 -3
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +1 -3
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/settings-manager.d.ts +4 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +38 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/settings-schema.d.ts +1 -0
- package/dist/core/settings-schema.d.ts.map +1 -1
- package/dist/core/settings-schema.js +3 -0
- package/dist/core/settings-schema.js.map +1 -1
- package/dist/core/tasks/codec.d.ts +12 -0
- package/dist/core/tasks/codec.d.ts.map +1 -0
- package/dist/core/tasks/codec.js +139 -0
- package/dist/core/tasks/codec.js.map +1 -0
- package/dist/core/tasks/execution.d.ts +64 -0
- package/dist/core/tasks/execution.d.ts.map +1 -0
- package/dist/core/tasks/execution.js +272 -0
- package/dist/core/tasks/execution.js.map +1 -0
- package/dist/core/tasks/output.d.ts +12 -5
- package/dist/core/tasks/output.d.ts.map +1 -1
- package/dist/core/tasks/output.js +38 -37
- package/dist/core/tasks/output.js.map +1 -1
- package/dist/core/tasks/presentation.d.ts +14 -5
- package/dist/core/tasks/presentation.d.ts.map +1 -1
- package/dist/core/tasks/presentation.js +56 -185
- package/dist/core/tasks/presentation.js.map +1 -1
- package/dist/core/tasks/runtime.d.ts +9 -9
- package/dist/core/tasks/runtime.d.ts.map +1 -1
- package/dist/core/tasks/runtime.js +63 -252
- package/dist/core/tasks/runtime.js.map +1 -1
- package/dist/core/tasks/scheduler.d.ts +16 -0
- package/dist/core/tasks/scheduler.d.ts.map +1 -0
- package/dist/core/tasks/scheduler.js +42 -0
- package/dist/core/tasks/scheduler.js.map +1 -0
- package/dist/core/tasks/session.d.ts +1 -0
- package/dist/core/tasks/session.d.ts.map +1 -1
- package/dist/core/tasks/session.js +15 -27
- package/dist/core/tasks/session.js.map +1 -1
- package/dist/core/tasks/store.js +4 -4
- package/dist/core/tasks/store.js.map +1 -1
- package/dist/core/tasks/types.d.ts +63 -49
- package/dist/core/tasks/types.d.ts.map +1 -1
- package/dist/core/tasks/types.js +3 -9
- package/dist/core/tasks/types.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts +6 -4
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js +34 -14
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/shell-execution.js +4 -4
- package/dist/core/tools/shell-execution.js.map +1 -1
- package/dist/core/tools/shell-tool.d.ts.map +1 -1
- package/dist/core/tools/shell-tool.js +23 -30
- package/dist/core/tools/shell-tool.js.map +1 -1
- package/dist/core/usage-totals.d.ts +1 -3
- package/dist/core/usage-totals.d.ts.map +1 -1
- package/dist/core/usage-totals.js +17 -8
- package/dist/core/usage-totals.js.map +1 -1
- package/dist/extensions/agent/activity.d.ts +13 -0
- package/dist/extensions/agent/activity.d.ts.map +1 -0
- package/dist/extensions/agent/activity.js +75 -0
- package/dist/extensions/agent/activity.js.map +1 -0
- package/dist/extensions/agent/index.d.ts +4 -0
- package/dist/extensions/agent/index.d.ts.map +1 -0
- package/dist/extensions/agent/index.js +11 -0
- package/dist/extensions/agent/index.js.map +1 -0
- package/dist/extensions/agent/progress.d.ts +31 -0
- package/dist/extensions/agent/progress.d.ts.map +1 -0
- package/dist/extensions/agent/progress.js +145 -0
- package/dist/extensions/agent/progress.js.map +1 -0
- package/dist/extensions/agent/render.d.ts +6 -0
- package/dist/extensions/agent/render.d.ts.map +1 -0
- package/dist/extensions/agent/render.js +120 -0
- package/dist/extensions/agent/render.js.map +1 -0
- package/dist/extensions/agent/report.d.ts +9 -0
- package/dist/extensions/agent/report.d.ts.map +1 -0
- package/dist/extensions/agent/report.js +40 -0
- package/dist/extensions/agent/report.js.map +1 -0
- package/dist/extensions/agent/settings-panel.d.ts +43 -0
- package/dist/extensions/agent/settings-panel.d.ts.map +1 -0
- package/dist/extensions/agent/settings-panel.js +125 -0
- package/dist/extensions/agent/settings-panel.js.map +1 -0
- package/dist/extensions/agent/settings.d.ts +15 -0
- package/dist/extensions/agent/settings.d.ts.map +1 -0
- package/dist/extensions/agent/settings.js +201 -0
- package/dist/extensions/agent/settings.js.map +1 -0
- package/dist/extensions/agent/tool.d.ts +13 -0
- package/dist/extensions/agent/tool.d.ts.map +1 -0
- package/dist/extensions/agent/tool.js +84 -0
- package/dist/extensions/agent/tool.js.map +1 -0
- package/dist/extensions/agent/types.d.ts +43 -0
- package/dist/extensions/agent/types.d.ts.map +1 -0
- package/dist/extensions/agent/types.js +6 -0
- package/dist/extensions/agent/types.js.map +1 -0
- package/dist/extensions/agent/worker.d.ts +16 -0
- package/dist/extensions/agent/worker.d.ts.map +1 -0
- package/dist/extensions/agent/worker.js +68 -0
- package/dist/extensions/agent/worker.js.map +1 -0
- package/dist/extensions/codemode/execute.js +1 -1
- package/dist/extensions/codemode/execute.js.map +1 -1
- package/dist/extensions/codemode/execute.lazy.d.ts +2 -2
- package/dist/extensions/codemode/execute.lazy.d.ts.map +1 -1
- package/dist/extensions/codemode/execute.lazy.js +2 -2
- package/dist/extensions/codemode/execute.lazy.js.map +1 -1
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/index.js +2 -0
- package/dist/extensions/index.js.map +1 -1
- package/dist/extensions/mcp/cli.lazy.d.ts +2 -2
- package/dist/extensions/mcp/cli.lazy.d.ts.map +1 -1
- package/dist/extensions/mcp/cli.lazy.js +2 -2
- package/dist/extensions/mcp/cli.lazy.js.map +1 -1
- package/dist/extensions/mcp/index.d.ts.map +1 -1
- package/dist/extensions/mcp/index.js +2 -2
- package/dist/extensions/mcp/index.js.map +1 -1
- package/dist/extensions/mcp/runtime.lazy.d.ts +2 -2
- package/dist/extensions/mcp/runtime.lazy.d.ts.map +1 -1
- package/dist/extensions/mcp/runtime.lazy.js +2 -2
- package/dist/extensions/mcp/runtime.lazy.js.map +1 -1
- package/dist/extensions/provider/compat-fields.js +1 -1
- package/dist/extensions/provider/compat-fields.js.map +1 -1
- package/dist/extensions/tasks/tool/actions.d.ts.map +1 -1
- package/dist/extensions/tasks/tool/actions.js +1 -9
- package/dist/extensions/tasks/tool/actions.js.map +1 -1
- package/dist/extensions/tasks/tool/schema.js +1 -1
- package/dist/extensions/tasks/tool/schema.js.map +1 -1
- package/dist/extensions/tasks/tool/types.d.ts +2 -8
- package/dist/extensions/tasks/tool/types.d.ts.map +1 -1
- package/dist/extensions/tasks/tool/types.js +0 -2
- package/dist/extensions/tasks/tool/types.js.map +1 -1
- package/dist/extensions/tasks/ui/completion-render.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/completion-render.js +27 -26
- package/dist/extensions/tasks/ui/completion-render.js.map +1 -1
- package/dist/extensions/tasks/ui/inspector.d.ts +5 -3
- package/dist/extensions/tasks/ui/inspector.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/inspector.js +18 -6
- package/dist/extensions/tasks/ui/inspector.js.map +1 -1
- package/dist/extensions/tasks/ui/layout.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/layout.js +111 -75
- package/dist/extensions/tasks/ui/layout.js.map +1 -1
- package/dist/extensions/tasks/ui/list.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/list.js +43 -28
- package/dist/extensions/tasks/ui/list.js.map +1 -1
- package/dist/extensions/tasks/ui/manager.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/manager.js +8 -2
- package/dist/extensions/tasks/ui/manager.js.map +1 -1
- package/dist/extensions/tasks/ui/model.d.ts +4 -0
- package/dist/extensions/tasks/ui/model.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/model.js +12 -1
- package/dist/extensions/tasks/ui/model.js.map +1 -1
- package/dist/extensions/tasks/ui/render.js +3 -4
- package/dist/extensions/tasks/ui/render.js.map +1 -1
- package/dist/extensions/tasks/ui/task-view.d.ts +0 -5
- package/dist/extensions/tasks/ui/task-view.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/task-view.js +0 -7
- package/dist/extensions/tasks/ui/task-view.js.map +1 -1
- package/dist/extensions/tasks/ui/tree.js +1 -1
- package/dist/extensions/tasks/ui/tree.js.map +1 -1
- package/dist/extensions/tasks/ui/views.d.ts +10 -6
- package/dist/extensions/tasks/ui/views.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/views.js +64 -28
- package/dist/extensions/tasks/ui/views.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js +2 -1
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +7 -4
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +10 -3
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/docs/bundled/README.md +1 -0
- package/docs/bundled/extensions/agent.md +68 -0
- package/docs/bundled/extensions/statusline.md +1 -1
- package/docs/bundled/tasks.md +15 -14
- package/docs/docs.json +4 -0
- package/docs/extensions.md +33 -6
- package/docs/sdk.md +2 -2
- package/docs/session-format.md +27 -23
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/schemas/settings.schema.json +12 -0
- package/dist/bundle/chunks/chunk-SBVVM3NV.js +0 -2361
- package/dist/bundle/chunks/chunk-VGSZTBVJ.js +0 -2
- package/dist/bundle/chunks/virtual-modules-ETYFHSUG.js +0 -2
- package/dist/core/tasks/history.d.ts +0 -4
- package/dist/core/tasks/history.d.ts.map +0 -1
- package/dist/core/tasks/history.js +0 -121
- package/dist/core/tasks/history.js.map +0 -1
- package/dist/extensions/codemode/search.d.ts +0 -33
- package/dist/extensions/codemode/search.d.ts.map +0 -1
- package/dist/extensions/codemode/search.js +0 -117
- package/dist/extensions/codemode/search.js.map +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
|
|
2
|
-
import{AgentSession,AgentSessionRuntime,ArminComponent,AssistantMessageComponent,BashExecutionComponent,BorderedLoader,BranchSummaryMessageComponent,CONFIG_DIR_NAME,CURRENT_SESSION_VERSION,CompactionSummaryMessageComponent,Container,CredentialSynchronizationError,CustomEditor,CustomMessageComponent,DEFAULT_COMPACTION_SETTINGS,DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES,DefaultPackageManager,DefaultResourceLoader,DynamicBorder,ExtensionEditorComponent,ExtensionInputComponent,ExtensionRunner,ExtensionSelectorComponent,FooterComponent,InteractiveMode,LoginDialogComponent,ModelRegistry,ModelRuntime,ModelSelectorComponent,OAuthSelectorComponent,ProjectTrustStore,RpcClient,SelectList,SessionManager,SessionSelectorComponent,SettingsManager,SettingsSelectorComponent,SkillInvocationMessageComponent,TaskRuntime,Theme,ThinkingSelectorComponent,ToolExecutionComponent,TreeSelectorComponent,UserMessageComponent,UserMessageSelectorComponent,VERSION,VIRTUAL_MODEL_STATE_ENTRY,buildContextEntries,buildSessionContext,buildSessionProjection,calculateContextTokens,collectEntriesForBranchSummary,compact,convertToLlm,convertToPng,copyToClipboard,createAgentSession,createAgentSessionFromServices,createAgentSessionRuntime,createAgentSessionServices,createBashTool,createBashToolDefinition,createCodemodeExtension,createCodingTools,createEditTool,createEditToolDefinition,createEventBus,createExtensionRuntime,createFindTool,createFindToolDefinition,createGrepTool,createGrepToolDefinition,createLocalBashOperations,createLocalPowerShellOperations,createLsTool,createLsToolDefinition,createMcpExtension,createPowerShellTool,createPowerShellToolDefinition,createReadOnlyTools,createReadTool,createReadToolDefinition,createSyntheticSourceInfo,createToolSearchExtension,createWriteTool,createWriteToolDefinition,defineTool,detectSupportedImageMimeTypeFromFile,discoverAndLoadExtensions,estimateTokens,findCutPoint,findTurnStartIndex,formatDimensionNote,formatReadLineRange,formatSize,formatSkillsForPrompt,generateBranchSummary,generateDiffString,generateSummary,generateSummaryWithUsage,generateUnifiedPatch,getAgentDir,getAvailableThemes,getDocsPath,getExamplesPath,getLanguageFromPath,getLastAssistantUsage,getLatestCompactionEntry,getMarkdownTheme,getPackageDir,getPowerShellConfig,getReadmePath,getSelectListTheme,getSettingsListTheme,getShellConfig,hasTrustRequiringProjectResources,highlightCode,initTheme,isBashToolResult,isEditToolResult,isFindToolResult,isGrepToolResult,isLsToolResult,isPowerShellToolResult,isReadToolResult,isToolCallEventType,isWriteToolResult,keyHint,keyText,loadProjectContextFiles,loadSkills,loadSkillsFromDir,main,migrateSessionEntries,parseArgs,parseFrontmatter,parseSessionEntries,parseSkillBlock,prepareBranchEntries,rawKeyHint,readStoredCredential,renderDiff,resizeImage,resolveCliModel,resolveModelScopeWithDiagnostics,runPrintMode,runRpcMode,serializeConversation,sessionEntryToContextMessages,shouldCompact,stripFrontmatter,truncateHead,truncateLine,truncateTail,truncateToVisualLines,withFileMutationQueue,wrapRegisteredTool,wrapRegisteredTools}from"./chunk-SBVVM3NV.js";import{__export}from"./chunk-4L3WN2XY.js";var dist_exports={};__export(dist_exports,{AgentSession:()=>AgentSession,AgentSessionRuntime:()=>AgentSessionRuntime,ArminComponent:()=>ArminComponent,AssistantMessageComponent:()=>AssistantMessageComponent,BashExecutionComponent:()=>BashExecutionComponent,BorderedLoader:()=>BorderedLoader,BranchSummaryMessageComponent:()=>BranchSummaryMessageComponent,CONFIG_DIR_NAME:()=>CONFIG_DIR_NAME,CURRENT_SESSION_VERSION:()=>CURRENT_SESSION_VERSION,CompactionSummaryMessageComponent:()=>CompactionSummaryMessageComponent,CredentialSynchronizationError:()=>CredentialSynchronizationError,CustomEditor:()=>CustomEditor,CustomMessageComponent:()=>CustomMessageComponent,DEFAULT_COMPACTION_SETTINGS:()=>DEFAULT_COMPACTION_SETTINGS,DEFAULT_MAX_BYTES:()=>DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES:()=>DEFAULT_MAX_LINES,DefaultPackageManager:()=>DefaultPackageManager,DefaultResourceLoader:()=>DefaultResourceLoader,DynamicBorder:()=>DynamicBorder,ExtensionEditorComponent:()=>ExtensionEditorComponent,ExtensionInputComponent:()=>ExtensionInputComponent,ExtensionRunner:()=>ExtensionRunner,ExtensionSelectorComponent:()=>ExtensionSelectorComponent,FooterComponent:()=>FooterComponent,InteractiveMode:()=>InteractiveMode,LoginDialogComponent:()=>LoginDialogComponent,ModelRegistry:()=>ModelRegistry,ModelRuntime:()=>ModelRuntime,ModelSelectorComponent:()=>ModelSelectorComponent,OAuthSelectorComponent:()=>OAuthSelectorComponent,ProjectTrustStore:()=>ProjectTrustStore,RpcClient:()=>RpcClient,SessionManager:()=>SessionManager,SessionSelectorComponent:()=>SessionSelectorComponent,SettingsManager:()=>SettingsManager,SettingsSelectorComponent:()=>SettingsSelectorComponent,ShowImagesSelectorComponent:()=>ShowImagesSelectorComponent,SkillInvocationMessageComponent:()=>SkillInvocationMessageComponent,TaskRuntime:()=>TaskRuntime,Theme:()=>Theme,ThemeSelectorComponent:()=>ThemeSelectorComponent,ThinkingSelectorComponent:()=>ThinkingSelectorComponent,ToolExecutionComponent:()=>ToolExecutionComponent,TreeSelectorComponent:()=>TreeSelectorComponent,UserMessageComponent:()=>UserMessageComponent,UserMessageSelectorComponent:()=>UserMessageSelectorComponent,VERSION:()=>VERSION,VIRTUAL_MODEL_STATE_ENTRY:()=>VIRTUAL_MODEL_STATE_ENTRY,buildContextEntries:()=>buildContextEntries,buildSessionContext:()=>buildSessionContext,buildSessionProjection:()=>buildSessionProjection,calculateContextTokens:()=>calculateContextTokens,collectEntriesForBranchSummary:()=>collectEntriesForBranchSummary,compact:()=>compact,convertToLlm:()=>convertToLlm,convertToPng:()=>convertToPng,copyToClipboard:()=>copyToClipboard,createAgentSession:()=>createAgentSession,createAgentSessionFromServices:()=>createAgentSessionFromServices,createAgentSessionRuntime:()=>createAgentSessionRuntime,createAgentSessionServices:()=>createAgentSessionServices,createBashTool:()=>createBashTool,createBashToolDefinition:()=>createBashToolDefinition,createCodemodeExtension:()=>createCodemodeExtension,createCodingTools:()=>createCodingTools,createEditTool:()=>createEditTool,createEditToolDefinition:()=>createEditToolDefinition,createEventBus:()=>createEventBus,createExtensionRuntime:()=>createExtensionRuntime,createFindTool:()=>createFindTool,createFindToolDefinition:()=>createFindToolDefinition,createGrepTool:()=>createGrepTool,createGrepToolDefinition:()=>createGrepToolDefinition,createLocalBashOperations:()=>createLocalBashOperations,createLocalPowerShellOperations:()=>createLocalPowerShellOperations,createLsTool:()=>createLsTool,createLsToolDefinition:()=>createLsToolDefinition,createMcpExtension:()=>createMcpExtension,createPowerShellTool:()=>createPowerShellTool,createPowerShellToolDefinition:()=>createPowerShellToolDefinition,createReadOnlyTools:()=>createReadOnlyTools,createReadTool:()=>createReadTool,createReadToolDefinition:()=>createReadToolDefinition,createSyntheticSourceInfo:()=>createSyntheticSourceInfo,createToolSearchExtension:()=>createToolSearchExtension,createWriteTool:()=>createWriteTool,createWriteToolDefinition:()=>createWriteToolDefinition,defineTool:()=>defineTool,detectSupportedImageMimeTypeFromFile:()=>detectSupportedImageMimeTypeFromFile,discoverAndLoadExtensions:()=>discoverAndLoadExtensions,estimateTokens:()=>estimateTokens,findCutPoint:()=>findCutPoint,findTurnStartIndex:()=>findTurnStartIndex,formatDimensionNote:()=>formatDimensionNote,formatReadLineRange:()=>formatReadLineRange,formatSize:()=>formatSize,formatSkillsForPrompt:()=>formatSkillsForPrompt,generateBranchSummary:()=>generateBranchSummary,generateDiffString:()=>generateDiffString,generateSummary:()=>generateSummary,generateSummaryWithUsage:()=>generateSummaryWithUsage,generateUnifiedPatch:()=>generateUnifiedPatch,getAgentDir:()=>getAgentDir,getDocsPath:()=>getDocsPath,getExamplesPath:()=>getExamplesPath,getLanguageFromPath:()=>getLanguageFromPath,getLastAssistantUsage:()=>getLastAssistantUsage,getLatestCompactionEntry:()=>getLatestCompactionEntry,getMarkdownTheme:()=>getMarkdownTheme,getPackageDir:()=>getPackageDir,getPowerShellConfig:()=>getPowerShellConfig,getReadmePath:()=>getReadmePath,getSelectListTheme:()=>getSelectListTheme,getSettingsListTheme:()=>getSettingsListTheme,getShellConfig:()=>getShellConfig,hasTrustRequiringProjectResources:()=>hasTrustRequiringProjectResources,highlightCode:()=>highlightCode,initTheme:()=>initTheme,isBashToolResult:()=>isBashToolResult,isEditToolResult:()=>isEditToolResult,isFindToolResult:()=>isFindToolResult,isGrepToolResult:()=>isGrepToolResult,isLsToolResult:()=>isLsToolResult,isPowerShellToolResult:()=>isPowerShellToolResult,isReadToolResult:()=>isReadToolResult,isToolCallEventType:()=>isToolCallEventType,isWriteToolResult:()=>isWriteToolResult,keyHint:()=>keyHint,keyText:()=>keyText,loadProjectContextFiles:()=>loadProjectContextFiles,loadSkills:()=>loadSkills,loadSkillsFromDir:()=>loadSkillsFromDir,main:()=>main,migrateSessionEntries:()=>migrateSessionEntries,parseArgs:()=>parseArgs,parseFrontmatter:()=>parseFrontmatter,parseSessionEntries:()=>parseSessionEntries,parseSkillBlock:()=>parseSkillBlock,prepareBranchEntries:()=>prepareBranchEntries,rawKeyHint:()=>rawKeyHint,readStoredCredential:()=>readStoredCredential,renderDiff:()=>renderDiff,resizeImage:()=>resizeImage,resolveCliModel:()=>resolveCliModel,resolveModelScopeWithDiagnostics:()=>resolveModelScopeWithDiagnostics,runPrintMode:()=>runPrintMode,runRpcMode:()=>runRpcMode,serializeConversation:()=>serializeConversation,sessionEntryToContextMessages:()=>sessionEntryToContextMessages,shouldCompact:()=>shouldCompact,stripFrontmatter:()=>stripFrontmatter,truncateHead:()=>truncateHead,truncateLine:()=>truncateLine,truncateTail:()=>truncateTail,truncateToVisualLines:()=>truncateToVisualLines,withFileMutationQueue:()=>withFileMutationQueue,wrapRegisteredTool:()=>wrapRegisteredTool,wrapRegisteredTools:()=>wrapRegisteredTools});var SHOW_IMAGES_SELECT_LIST_LAYOUT={minPrimaryColumnWidth:12,maxPrimaryColumnWidth:32},ShowImagesSelectorComponent=class extends Container{constructor(currentValue,onSelect,onCancel){super();let items=[{value:"yes",label:"Yes",description:"Show images inline in terminal"},{value:"no",label:"No",description:"Show text placeholder instead"}];this.addChild(new DynamicBorder),this.selectList=new SelectList(items,5,getSelectListTheme(),SHOW_IMAGES_SELECT_LIST_LAYOUT),this.selectList.setSelectedIndex(currentValue?0:1),this.selectList.onSelect=item=>{onSelect(item.value==="yes")},this.selectList.onCancel=()=>{onCancel()},this.addChild(this.selectList),this.addChild(new DynamicBorder)}getSelectList(){return this.selectList}};var THEME_SELECT_LIST_LAYOUT={minPrimaryColumnWidth:12,maxPrimaryColumnWidth:32},ThemeSelectorComponent=class extends Container{constructor(currentTheme,onSelect,onCancel,onPreview){super(),this.onPreview=onPreview;let themes=getAvailableThemes(),themeItems=themes.map(name=>({value:name,label:name,description:name===currentTheme?"(current)":void 0}));this.addChild(new DynamicBorder),this.selectList=new SelectList(themeItems,10,getSelectListTheme(),THEME_SELECT_LIST_LAYOUT);let currentIndex=themes.indexOf(currentTheme);currentIndex!==-1&&this.selectList.setSelectedIndex(currentIndex),this.selectList.onSelect=item=>{onSelect(item.value)},this.selectList.onCancel=()=>{onCancel()},this.selectList.onSelectionChange=item=>{this.onPreview(item.value)},this.addChild(this.selectList),this.addChild(new DynamicBorder)}getSelectList(){return this.selectList}};export{ShowImagesSelectorComponent,ThemeSelectorComponent,dist_exports};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
|
|
2
|
-
import{dist_exports as dist_exports3}from"./chunk-VGSZTBVJ.js";import{DISTRIBUTION_PACKAGE_NAME,all_exports,build_exports,compat_exports,compile_exports,dist_exports,dist_exports2,value_exports}from"./chunk-SBVVM3NV.js";import"./chunk-JEIV47WR.js";import"./chunk-D3ZCGC4T.js";import"./chunk-RZ2V53SP.js";import"./chunk-5FDOJRDS.js";import"./chunk-SA2AQYEI.js";import"./chunk-OV2VMHBX.js";import{models_exports}from"./chunk-6JS2SOFO.js";import"./chunk-6VYRLG5F.js";import"./chunk-ANCZPKX7.js";import"./chunk-4L3WN2XY.js";var oauth_exports={};var VIRTUAL_MODULES={typebox:build_exports,"typebox/compile":compile_exports,"typebox/value":value_exports,"@sinclair/typebox":build_exports,"@sinclair/typebox/compile":compile_exports,"@sinclair/typebox/value":value_exports,"@earendil-works/pi-agent-core":dist_exports2,"@earendil-works/pi-tui":dist_exports,"@earendil-works/pi-ai":compat_exports,"@earendil-works/pi-ai/compat":compat_exports,"@earendil-works/pi-ai/models":models_exports,"@earendil-works/pi-ai/oauth":oauth_exports,"@earendil-works/pi-ai/providers/all":all_exports,"@earendil-works/pi-coding-agent":dist_exports3,[DISTRIBUTION_PACKAGE_NAME]:dist_exports3,"@mariozechner/pi-agent-core":dist_exports2,"@mariozechner/pi-tui":dist_exports,"@mariozechner/pi-ai":compat_exports,"@mariozechner/pi-ai/compat":compat_exports,"@mariozechner/pi-ai/models":models_exports,"@mariozechner/pi-ai/oauth":oauth_exports,"@mariozechner/pi-ai/providers/all":all_exports,"@mariozechner/pi-coding-agent":dist_exports3};export{VIRTUAL_MODULES};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../../src/core/tasks/history.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAuBtC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAuF1E"}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { boundedResult, boundText, TASK_RESULT_BYTES, TASK_TITLE_BYTES } from "./output.js";
|
|
2
|
-
export const TASK_HISTORY_VERSION = 2;
|
|
3
|
-
/** Read persisted data properties only; never invoke getters or custom serialization. */
|
|
4
|
-
function dataObject(value) {
|
|
5
|
-
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
6
|
-
throw new Error("Expected object");
|
|
7
|
-
const prototype = Object.getPrototypeOf(value);
|
|
8
|
-
if (prototype !== Object.prototype && prototype !== null)
|
|
9
|
-
throw new Error("Expected plain object");
|
|
10
|
-
return value;
|
|
11
|
-
}
|
|
12
|
-
function field(object, key) {
|
|
13
|
-
const descriptor = Object.getOwnPropertyDescriptor(object, key);
|
|
14
|
-
if (descriptor && !("value" in descriptor))
|
|
15
|
-
throw new Error("Unexpected accessor");
|
|
16
|
-
return descriptor?.value;
|
|
17
|
-
}
|
|
18
|
-
function historyString(value, bytes, exact = false) {
|
|
19
|
-
if (typeof value !== "string")
|
|
20
|
-
throw new Error("Expected string");
|
|
21
|
-
if (exact && (!value || value.length > bytes || Buffer.byteLength(value) > bytes || value.includes("\0")))
|
|
22
|
-
throw new Error("Invalid identity or path");
|
|
23
|
-
return boundText(value, bytes);
|
|
24
|
-
}
|
|
25
|
-
export function parseTaskHistory(record) {
|
|
26
|
-
try {
|
|
27
|
-
const envelope = dataObject(record);
|
|
28
|
-
if (field(envelope, "version") !== TASK_HISTORY_VERSION)
|
|
29
|
-
return undefined;
|
|
30
|
-
const source = dataObject(field(envelope, "task"));
|
|
31
|
-
const kind = field(source, "kind");
|
|
32
|
-
const mode = field(source, "mode");
|
|
33
|
-
const status = field(source, "status");
|
|
34
|
-
if (typeof kind !== "string" || !/^[a-z][a-z0-9-]{0,63}$/.test(kind))
|
|
35
|
-
return undefined;
|
|
36
|
-
if (mode !== "foreground" && mode !== "background")
|
|
37
|
-
return undefined;
|
|
38
|
-
if (status !== "completed" &&
|
|
39
|
-
status !== "partial" &&
|
|
40
|
-
status !== "failed" &&
|
|
41
|
-
status !== "cancelled" &&
|
|
42
|
-
status !== "timeout")
|
|
43
|
-
return undefined;
|
|
44
|
-
const startedAt = field(source, "startedAt");
|
|
45
|
-
const endedAt = field(source, "endedAt");
|
|
46
|
-
if (typeof startedAt !== "number" ||
|
|
47
|
-
!Number.isSafeInteger(startedAt) ||
|
|
48
|
-
startedAt < 0 ||
|
|
49
|
-
typeof endedAt !== "number" ||
|
|
50
|
-
!Number.isSafeInteger(endedAt) ||
|
|
51
|
-
endedAt < startedAt)
|
|
52
|
-
return undefined;
|
|
53
|
-
const anchor = field(source, "anchorId");
|
|
54
|
-
const task = {
|
|
55
|
-
id: historyString(field(source, "id"), 512, true),
|
|
56
|
-
kind,
|
|
57
|
-
mode,
|
|
58
|
-
status,
|
|
59
|
-
startedAt,
|
|
60
|
-
endedAt,
|
|
61
|
-
title: historyString(field(source, "title"), TASK_TITLE_BYTES),
|
|
62
|
-
toolCallId: historyString(field(source, "toolCallId"), 512, true),
|
|
63
|
-
anchorId: anchor === null ? null : historyString(anchor, 8192, true),
|
|
64
|
-
};
|
|
65
|
-
if (!task.id.startsWith(`${kind}-`) || task.id.length <= kind.length + 1)
|
|
66
|
-
return undefined;
|
|
67
|
-
for (const [key, bytes] of [
|
|
68
|
-
["command", 8192],
|
|
69
|
-
["cwd", 4096],
|
|
70
|
-
["error", 4096],
|
|
71
|
-
["outputPath", 8192],
|
|
72
|
-
]) {
|
|
73
|
-
const value = field(source, key);
|
|
74
|
-
if (value !== undefined)
|
|
75
|
-
task[key] = historyString(value, bytes, key === "outputPath");
|
|
76
|
-
}
|
|
77
|
-
for (const key of ["commandTruncated", "resultTruncated"]) {
|
|
78
|
-
const value = field(source, key);
|
|
79
|
-
if (value !== undefined && typeof value !== "boolean")
|
|
80
|
-
return undefined;
|
|
81
|
-
task[key] = value;
|
|
82
|
-
}
|
|
83
|
-
const exitCode = field(source, "exitCode");
|
|
84
|
-
if (exitCode !== undefined) {
|
|
85
|
-
if (exitCode !== null && (typeof exitCode !== "number" || !Number.isSafeInteger(exitCode)))
|
|
86
|
-
return undefined;
|
|
87
|
-
task.exitCode = exitCode;
|
|
88
|
-
}
|
|
89
|
-
if (task.command !== undefined && task.command !== field(source, "command"))
|
|
90
|
-
task.commandTruncated = true;
|
|
91
|
-
const result = field(source, "result");
|
|
92
|
-
if (result !== undefined) {
|
|
93
|
-
const object = dataObject(result);
|
|
94
|
-
const blocks = field(object, "content");
|
|
95
|
-
if (!Array.isArray(blocks))
|
|
96
|
-
return undefined;
|
|
97
|
-
const content = [];
|
|
98
|
-
let remaining = TASK_RESULT_BYTES;
|
|
99
|
-
for (let index = 0; index < blocks.length && remaining > 0; index++) {
|
|
100
|
-
const block = dataObject(field(blocks, String(index)));
|
|
101
|
-
const type = field(block, "type");
|
|
102
|
-
if (type !== "text" && type !== "image")
|
|
103
|
-
return undefined;
|
|
104
|
-
const original = type === "text" ? field(block, "text") : undefined;
|
|
105
|
-
const text = type === "text" ? historyString(original, remaining) : "[Image omitted from background history]";
|
|
106
|
-
if (text !== original)
|
|
107
|
-
task.resultTruncated = true;
|
|
108
|
-
content.push({ type: "text", text });
|
|
109
|
-
remaining -= Math.max(1, Buffer.byteLength(text));
|
|
110
|
-
}
|
|
111
|
-
if (content.length < blocks.length)
|
|
112
|
-
task.resultTruncated = true;
|
|
113
|
-
task.result = boundedResult({ content, details: undefined });
|
|
114
|
-
}
|
|
115
|
-
return task;
|
|
116
|
-
}
|
|
117
|
-
catch {
|
|
118
|
-
return undefined;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
//# sourceMappingURL=history.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/core/tasks/history.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport { boundedResult, boundText, TASK_RESULT_BYTES, TASK_TITLE_BYTES } from \"./output.ts\";\nimport type { TaskSnapshot } from \"./types.ts\";\n\nexport const TASK_HISTORY_VERSION = 2;\n\n/** Read persisted data properties only; never invoke getters or custom serialization. */\nfunction dataObject(value: unknown): Record<string, unknown> {\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value)) throw new Error(\"Expected object\");\n\tconst prototype = Object.getPrototypeOf(value);\n\tif (prototype !== Object.prototype && prototype !== null) throw new Error(\"Expected plain object\");\n\treturn value as Record<string, unknown>;\n}\n\nfunction field(object: object, key: string): unknown {\n\tconst descriptor = Object.getOwnPropertyDescriptor(object, key);\n\tif (descriptor && !(\"value\" in descriptor)) throw new Error(\"Unexpected accessor\");\n\treturn descriptor?.value;\n}\n\nfunction historyString(value: unknown, bytes: number, exact = false): string {\n\tif (typeof value !== \"string\") throw new Error(\"Expected string\");\n\tif (exact && (!value || value.length > bytes || Buffer.byteLength(value) > bytes || value.includes(\"\\0\")))\n\t\tthrow new Error(\"Invalid identity or path\");\n\treturn boundText(value, bytes);\n}\n\nexport function parseTaskHistory(record: unknown): TaskSnapshot | undefined {\n\ttry {\n\t\tconst envelope = dataObject(record);\n\t\tif (field(envelope, \"version\") !== TASK_HISTORY_VERSION) return undefined;\n\t\tconst source = dataObject(field(envelope, \"task\"));\n\t\tconst kind = field(source, \"kind\");\n\t\tconst mode = field(source, \"mode\");\n\t\tconst status = field(source, \"status\");\n\t\tif (typeof kind !== \"string\" || !/^[a-z][a-z0-9-]{0,63}$/.test(kind)) return undefined;\n\t\tif (mode !== \"foreground\" && mode !== \"background\") return undefined;\n\t\tif (\n\t\t\tstatus !== \"completed\" &&\n\t\t\tstatus !== \"partial\" &&\n\t\t\tstatus !== \"failed\" &&\n\t\t\tstatus !== \"cancelled\" &&\n\t\t\tstatus !== \"timeout\"\n\t\t)\n\t\t\treturn undefined;\n\t\tconst startedAt = field(source, \"startedAt\");\n\t\tconst endedAt = field(source, \"endedAt\");\n\t\tif (\n\t\t\ttypeof startedAt !== \"number\" ||\n\t\t\t!Number.isSafeInteger(startedAt) ||\n\t\t\tstartedAt < 0 ||\n\t\t\ttypeof endedAt !== \"number\" ||\n\t\t\t!Number.isSafeInteger(endedAt) ||\n\t\t\tendedAt < startedAt\n\t\t)\n\t\t\treturn undefined;\n\t\tconst anchor = field(source, \"anchorId\");\n\t\tconst task: TaskSnapshot = {\n\t\t\tid: historyString(field(source, \"id\"), 512, true),\n\t\t\tkind,\n\t\t\tmode,\n\t\t\tstatus,\n\t\t\tstartedAt,\n\t\t\tendedAt,\n\t\t\ttitle: historyString(field(source, \"title\"), TASK_TITLE_BYTES),\n\t\t\ttoolCallId: historyString(field(source, \"toolCallId\"), 512, true),\n\t\t\tanchorId: anchor === null ? null : historyString(anchor, 8192, true),\n\t\t};\n\t\tif (!task.id.startsWith(`${kind}-`) || task.id.length <= kind.length + 1) return undefined;\n\t\tfor (const [key, bytes] of [\n\t\t\t[\"command\", 8192],\n\t\t\t[\"cwd\", 4096],\n\t\t\t[\"error\", 4096],\n\t\t\t[\"outputPath\", 8192],\n\t\t] as const) {\n\t\t\tconst value = field(source, key);\n\t\t\tif (value !== undefined) task[key] = historyString(value, bytes, key === \"outputPath\");\n\t\t}\n\t\tfor (const key of [\"commandTruncated\", \"resultTruncated\"] as const) {\n\t\t\tconst value = field(source, key);\n\t\t\tif (value !== undefined && typeof value !== \"boolean\") return undefined;\n\t\t\ttask[key] = value;\n\t\t}\n\t\tconst exitCode = field(source, \"exitCode\");\n\t\tif (exitCode !== undefined) {\n\t\t\tif (exitCode !== null && (typeof exitCode !== \"number\" || !Number.isSafeInteger(exitCode))) return undefined;\n\t\t\ttask.exitCode = exitCode;\n\t\t}\n\t\tif (task.command !== undefined && task.command !== field(source, \"command\")) task.commandTruncated = true;\n\t\tconst result = field(source, \"result\");\n\t\tif (result !== undefined) {\n\t\t\tconst object = dataObject(result);\n\t\t\tconst blocks = field(object, \"content\");\n\t\t\tif (!Array.isArray(blocks)) return undefined;\n\t\t\tconst content: AgentToolResult<unknown>[\"content\"] = [];\n\t\t\tlet remaining = TASK_RESULT_BYTES;\n\t\t\tfor (let index = 0; index < blocks.length && remaining > 0; index++) {\n\t\t\t\tconst block = dataObject(field(blocks, String(index)));\n\t\t\t\tconst type = field(block, \"type\");\n\t\t\t\tif (type !== \"text\" && type !== \"image\") return undefined;\n\t\t\t\tconst original = type === \"text\" ? field(block, \"text\") : undefined;\n\t\t\t\tconst text =\n\t\t\t\t\ttype === \"text\" ? historyString(original, remaining) : \"[Image omitted from background history]\";\n\t\t\t\tif (text !== original) task.resultTruncated = true;\n\t\t\t\tcontent.push({ type: \"text\", text });\n\t\t\t\tremaining -= Math.max(1, Buffer.byteLength(text));\n\t\t\t}\n\t\t\tif (content.length < blocks.length) task.resultTruncated = true;\n\t\t\ttask.result = boundedResult({ content, details: undefined });\n\t\t}\n\t\treturn task;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n"]}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import type { ToolInfo, ToolNamespace } from "../../core/extensions/types.ts";
|
|
2
|
-
export declare const DEFAULT_TOOL_SEARCH_LIMIT = 8;
|
|
3
|
-
/** A tool as the ranker sees it: its name and the text built by {@link createToolSearchDocument}. */
|
|
4
|
-
export interface ToolSearchDocument {
|
|
5
|
-
name: string;
|
|
6
|
-
text: string;
|
|
7
|
-
}
|
|
8
|
-
export interface ToolSearchMatch {
|
|
9
|
-
name: string;
|
|
10
|
-
score: number;
|
|
11
|
-
}
|
|
12
|
-
/** Ranks tools for a query. BM25 today; a hybrid ranker with embeddings can replace it. */
|
|
13
|
-
export interface ToolRanker {
|
|
14
|
-
rank(query: string, documents: readonly ToolSearchDocument[], limit: number): ToolSearchMatch[];
|
|
15
|
-
}
|
|
16
|
-
/** Lowercase terms, split at camelCase boundaries and non-alphanumerics, without stop words. */
|
|
17
|
-
export declare function tokenize(text: string): string[];
|
|
18
|
-
/**
|
|
19
|
-
* Search text of a tool: the name, the name with `_`
|
|
20
|
-
* as spaces, the description, schema descriptions and property names, and the namespace.
|
|
21
|
-
*/
|
|
22
|
-
export declare function createToolSearchDocument(tool: Pick<ToolInfo, "name" | "description" | "parameters">, namespace?: ToolNamespace): ToolSearchDocument;
|
|
23
|
-
/** Okapi BM25 with the usual parameters. Ties keep document order. */
|
|
24
|
-
export declare class Bm25Ranker implements ToolRanker {
|
|
25
|
-
private readonly k1;
|
|
26
|
-
private readonly b;
|
|
27
|
-
constructor(options?: {
|
|
28
|
-
k1?: number;
|
|
29
|
-
b?: number;
|
|
30
|
-
});
|
|
31
|
-
rank(query: string, documents: readonly ToolSearchDocument[], limit: number): ToolSearchMatch[];
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=search.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/extensions/codemode/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE9E,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C,qGAAqG;AACrG,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACd;AAED,2FAA2F;AAC3F,MAAM,WAAW,UAAU;IAC1B,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,kBAAkB,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,EAAE,CAAC;CAChG;AAkCD,gGAAgG;AAChG,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAQ/C;AAuBD;;;GAGG;AACH,wBAAgB,wBAAwB,CACvC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,YAAY,CAAC,EAC3D,SAAS,CAAC,EAAE,aAAa,GACvB,kBAAkB,CAKpB;AAED,sEAAsE;AACtE,qBAAa,UAAW,YAAW,UAAU;IAC5C,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAS;gBAEf,OAAO,GAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAO;IAKrD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,kBAAkB,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,EAAE;CA6B/F"}
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
export const DEFAULT_TOOL_SEARCH_LIMIT = 8;
|
|
2
|
-
const STOP_WORDS = new Set([
|
|
3
|
-
"a",
|
|
4
|
-
"an",
|
|
5
|
-
"and",
|
|
6
|
-
"are",
|
|
7
|
-
"as",
|
|
8
|
-
"at",
|
|
9
|
-
"be",
|
|
10
|
-
"by",
|
|
11
|
-
"for",
|
|
12
|
-
"from",
|
|
13
|
-
"in",
|
|
14
|
-
"is",
|
|
15
|
-
"it",
|
|
16
|
-
"of",
|
|
17
|
-
"on",
|
|
18
|
-
"or",
|
|
19
|
-
"that",
|
|
20
|
-
"the",
|
|
21
|
-
"this",
|
|
22
|
-
"to",
|
|
23
|
-
"with",
|
|
24
|
-
]);
|
|
25
|
-
/** Naive singular form, so `issues` matches `issue` and `searches` matches `search`. */
|
|
26
|
-
function stem(term) {
|
|
27
|
-
if (term.length > 4 && term.endsWith("ies"))
|
|
28
|
-
return `${term.slice(0, -3)}y`;
|
|
29
|
-
if (term.length > 4 && /(ches|shes|sses|xes|zes)$/.test(term))
|
|
30
|
-
return term.slice(0, -2);
|
|
31
|
-
if (term.length > 3 && term.endsWith("s") && !term.endsWith("ss"))
|
|
32
|
-
return term.slice(0, -1);
|
|
33
|
-
return term;
|
|
34
|
-
}
|
|
35
|
-
/** Lowercase terms, split at camelCase boundaries and non-alphanumerics, without stop words. */
|
|
36
|
-
export function tokenize(text) {
|
|
37
|
-
return text
|
|
38
|
-
.replace(/([a-z0-9])([A-Z])/g, "$1 $2")
|
|
39
|
-
.replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2")
|
|
40
|
-
.toLowerCase()
|
|
41
|
-
.split(/[^a-z0-9]+/)
|
|
42
|
-
.filter((term) => term.length > 0 && !STOP_WORDS.has(term))
|
|
43
|
-
.map(stem);
|
|
44
|
-
}
|
|
45
|
-
function isObject(value) {
|
|
46
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
47
|
-
}
|
|
48
|
-
/** Schema descriptions and property names, recursively. */
|
|
49
|
-
function schemaText(schema, parts) {
|
|
50
|
-
if (!isObject(schema))
|
|
51
|
-
return;
|
|
52
|
-
if (typeof schema.description === "string")
|
|
53
|
-
parts.push(schema.description);
|
|
54
|
-
if (isObject(schema.properties)) {
|
|
55
|
-
for (const [name, property] of Object.entries(schema.properties)) {
|
|
56
|
-
parts.push(name);
|
|
57
|
-
schemaText(property, parts);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
schemaText(schema.items, parts);
|
|
61
|
-
for (const key of ["anyOf", "oneOf", "allOf"]) {
|
|
62
|
-
const variants = schema[key];
|
|
63
|
-
if (Array.isArray(variants))
|
|
64
|
-
for (const variant of variants)
|
|
65
|
-
schemaText(variant, parts);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Search text of a tool: the name, the name with `_`
|
|
70
|
-
* as spaces, the description, schema descriptions and property names, and the namespace.
|
|
71
|
-
*/
|
|
72
|
-
export function createToolSearchDocument(tool, namespace) {
|
|
73
|
-
const parts = [tool.name, tool.name.replaceAll("_", " "), tool.description];
|
|
74
|
-
schemaText(tool.parameters, parts);
|
|
75
|
-
if (namespace)
|
|
76
|
-
parts.push(namespace.name, namespace.description ?? "");
|
|
77
|
-
return { name: tool.name, text: parts.filter((part) => part.trim()).join(" ") };
|
|
78
|
-
}
|
|
79
|
-
/** Okapi BM25 with the usual parameters. Ties keep document order. */
|
|
80
|
-
export class Bm25Ranker {
|
|
81
|
-
constructor(options = {}) {
|
|
82
|
-
this.k1 = options.k1 ?? 1.2;
|
|
83
|
-
this.b = options.b ?? 0.75;
|
|
84
|
-
}
|
|
85
|
-
rank(query, documents, limit) {
|
|
86
|
-
const queryTerms = [...new Set(tokenize(query))];
|
|
87
|
-
if (queryTerms.length === 0 || documents.length === 0 || limit <= 0)
|
|
88
|
-
return [];
|
|
89
|
-
const termCounts = documents.map((document) => {
|
|
90
|
-
const counts = new Map();
|
|
91
|
-
for (const term of tokenize(document.text))
|
|
92
|
-
counts.set(term, (counts.get(term) ?? 0) + 1);
|
|
93
|
-
return counts;
|
|
94
|
-
});
|
|
95
|
-
const lengths = termCounts.map((counts) => [...counts.values()].reduce((sum, count) => sum + count, 0));
|
|
96
|
-
const averageLength = lengths.reduce((sum, length) => sum + length, 0) / documents.length || 1;
|
|
97
|
-
const idf = new Map(queryTerms.map((term) => {
|
|
98
|
-
const frequency = termCounts.filter((counts) => counts.has(term)).length;
|
|
99
|
-
return [term, Math.log(1 + (documents.length - frequency + 0.5) / (frequency + 0.5))];
|
|
100
|
-
}));
|
|
101
|
-
const matches = [];
|
|
102
|
-
documents.forEach((document, index) => {
|
|
103
|
-
let score = 0;
|
|
104
|
-
for (const term of queryTerms) {
|
|
105
|
-
const count = termCounts[index].get(term);
|
|
106
|
-
if (!count)
|
|
107
|
-
continue;
|
|
108
|
-
const norm = this.k1 * (1 - this.b + (this.b * lengths[index]) / averageLength);
|
|
109
|
-
score += (idf.get(term) ?? 0) * ((count * (this.k1 + 1)) / (count + norm));
|
|
110
|
-
}
|
|
111
|
-
if (score > 0)
|
|
112
|
-
matches.push({ name: document.name, score });
|
|
113
|
-
});
|
|
114
|
-
return matches.sort((a, b) => b.score - a.score).slice(0, limit);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
//# sourceMappingURL=search.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/extensions/codemode/search.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ToolInfo, ToolNamespace } from \"../../core/extensions/types.ts\";\n\nexport const DEFAULT_TOOL_SEARCH_LIMIT = 8;\n\n/** A tool as the ranker sees it: its name and the text built by {@link createToolSearchDocument}. */\nexport interface ToolSearchDocument {\n\tname: string;\n\ttext: string;\n}\n\nexport interface ToolSearchMatch {\n\tname: string;\n\tscore: number;\n}\n\n/** Ranks tools for a query. BM25 today; a hybrid ranker with embeddings can replace it. */\nexport interface ToolRanker {\n\trank(query: string, documents: readonly ToolSearchDocument[], limit: number): ToolSearchMatch[];\n}\n\nconst STOP_WORDS: ReadonlySet<string> = new Set([\n\t\"a\",\n\t\"an\",\n\t\"and\",\n\t\"are\",\n\t\"as\",\n\t\"at\",\n\t\"be\",\n\t\"by\",\n\t\"for\",\n\t\"from\",\n\t\"in\",\n\t\"is\",\n\t\"it\",\n\t\"of\",\n\t\"on\",\n\t\"or\",\n\t\"that\",\n\t\"the\",\n\t\"this\",\n\t\"to\",\n\t\"with\",\n]);\n\n/** Naive singular form, so `issues` matches `issue` and `searches` matches `search`. */\nfunction stem(term: string): string {\n\tif (term.length > 4 && term.endsWith(\"ies\")) return `${term.slice(0, -3)}y`;\n\tif (term.length > 4 && /(ches|shes|sses|xes|zes)$/.test(term)) return term.slice(0, -2);\n\tif (term.length > 3 && term.endsWith(\"s\") && !term.endsWith(\"ss\")) return term.slice(0, -1);\n\treturn term;\n}\n\n/** Lowercase terms, split at camelCase boundaries and non-alphanumerics, without stop words. */\nexport function tokenize(text: string): string[] {\n\treturn text\n\t\t.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n\t\t.replace(/([A-Z]+)([A-Z][a-z])/g, \"$1 $2\")\n\t\t.toLowerCase()\n\t\t.split(/[^a-z0-9]+/)\n\t\t.filter((term) => term.length > 0 && !STOP_WORDS.has(term))\n\t\t.map(stem);\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/** Schema descriptions and property names, recursively. */\nfunction schemaText(schema: unknown, parts: string[]): void {\n\tif (!isObject(schema)) return;\n\tif (typeof schema.description === \"string\") parts.push(schema.description);\n\tif (isObject(schema.properties)) {\n\t\tfor (const [name, property] of Object.entries(schema.properties)) {\n\t\t\tparts.push(name);\n\t\t\tschemaText(property, parts);\n\t\t}\n\t}\n\tschemaText(schema.items, parts);\n\tfor (const key of [\"anyOf\", \"oneOf\", \"allOf\"]) {\n\t\tconst variants = schema[key];\n\t\tif (Array.isArray(variants)) for (const variant of variants) schemaText(variant, parts);\n\t}\n}\n\n/**\n * Search text of a tool: the name, the name with `_`\n * as spaces, the description, schema descriptions and property names, and the namespace.\n */\nexport function createToolSearchDocument(\n\ttool: Pick<ToolInfo, \"name\" | \"description\" | \"parameters\">,\n\tnamespace?: ToolNamespace,\n): ToolSearchDocument {\n\tconst parts = [tool.name, tool.name.replaceAll(\"_\", \" \"), tool.description];\n\tschemaText(tool.parameters, parts);\n\tif (namespace) parts.push(namespace.name, namespace.description ?? \"\");\n\treturn { name: tool.name, text: parts.filter((part) => part.trim()).join(\" \") };\n}\n\n/** Okapi BM25 with the usual parameters. Ties keep document order. */\nexport class Bm25Ranker implements ToolRanker {\n\tprivate readonly k1: number;\n\tprivate readonly b: number;\n\n\tconstructor(options: { k1?: number; b?: number } = {}) {\n\t\tthis.k1 = options.k1 ?? 1.2;\n\t\tthis.b = options.b ?? 0.75;\n\t}\n\n\trank(query: string, documents: readonly ToolSearchDocument[], limit: number): ToolSearchMatch[] {\n\t\tconst queryTerms = [...new Set(tokenize(query))];\n\t\tif (queryTerms.length === 0 || documents.length === 0 || limit <= 0) return [];\n\t\tconst termCounts = documents.map((document) => {\n\t\t\tconst counts = new Map<string, number>();\n\t\t\tfor (const term of tokenize(document.text)) counts.set(term, (counts.get(term) ?? 0) + 1);\n\t\t\treturn counts;\n\t\t});\n\t\tconst lengths = termCounts.map((counts) => [...counts.values()].reduce((sum, count) => sum + count, 0));\n\t\tconst averageLength = lengths.reduce((sum, length) => sum + length, 0) / documents.length || 1;\n\t\tconst idf = new Map(\n\t\t\tqueryTerms.map((term) => {\n\t\t\t\tconst frequency = termCounts.filter((counts) => counts.has(term)).length;\n\t\t\t\treturn [term, Math.log(1 + (documents.length - frequency + 0.5) / (frequency + 0.5))] as const;\n\t\t\t}),\n\t\t);\n\t\tconst matches: ToolSearchMatch[] = [];\n\t\tdocuments.forEach((document, index) => {\n\t\t\tlet score = 0;\n\t\t\tfor (const term of queryTerms) {\n\t\t\t\tconst count = termCounts[index].get(term);\n\t\t\t\tif (!count) continue;\n\t\t\t\tconst norm = this.k1 * (1 - this.b + (this.b * lengths[index]) / averageLength);\n\t\t\t\tscore += (idf.get(term) ?? 0) * ((count * (this.k1 + 1)) / (count + norm));\n\t\t\t}\n\t\t\tif (score > 0) matches.push({ name: document.name, score });\n\t\t});\n\t\treturn matches.sort((a, b) => b.score - a.score).slice(0, limit);\n\t}\n}\n"]}
|