@bendyline/gezel-service 1.1.1 → 1.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/dist/NOTICE.md +3 -3
- package/dist/bin/gezeld.js +8471 -5311
- package/dist/handboek-content/technical/building-connected-apps-with-gezel-app-sdk.md +78 -0
- package/dist/handboek-content/whats-new/{1.26250.md → 1.26251.md} +5 -5
- package/dist/index-store/static-index-worker.js +160 -51
- package/dist/index.d.ts +416 -71
- package/dist/index.js +8465 -5305
- package/dist/memory/embed-worker.js +132 -4
- package/dist/memory/image-embed-worker.js +14 -5
- package/dist/providers/mlx/python/cache_persist.py +52 -8
- package/dist/providers/mlx/python/gezel_mlx_server.py +44 -1
- package/dist/providers/mlx/python/qwen4_ple.py +159 -0
- package/dist/providers/mlx/python/spec_decode.py +73 -31
- package/dist/providers/mlx/python/tool_call_stream.py +10 -2
- package/dist/providers/mlx/python/tool_grammar.py +16 -0
- package/dist/ui/assets/{AmbientDashboardCard-DcVHxEdC.js → AmbientDashboardCard-_xnAQGnk.js} +1 -1
- package/dist/ui/assets/{AudioEngineSettings-BFM2S1mm.js → AudioEngineSettings-CgXgbX0i.js} +1 -1
- package/dist/ui/assets/{BenchmarksView-84-YeULA.js → BenchmarksView-BlExZpYA.js} +1 -1
- package/dist/ui/assets/CatalogBrowser-DYXUZQ_t.js +1 -0
- package/dist/ui/assets/{ChannelsSettings-7NAVUk4k.js → ChannelsSettings-EH27HcqZ.js} +1 -1
- package/dist/ui/assets/ChatTimelineView-Dn1TNyVn.js +7 -0
- package/dist/ui/assets/{ConnectedAppsPanel-CIgF4Q3R.js → ConnectedAppsPanel-BROry-Y0.js} +1 -1
- package/dist/ui/assets/CraftbookEditor-B2RNJnFf.js +1 -0
- package/dist/ui/assets/{CraftbookScriptEditorView-Ck5tzj3Y.js → CraftbookScriptEditorView-B-vySmHP.js} +1 -1
- package/dist/ui/assets/{CraftbookTabContent-BWg7FhK_.js → CraftbookTabContent-BW_2KC89.js} +1 -1
- package/dist/ui/assets/{CraftbookToolsetSetup-EuFOiUzR.js → CraftbookToolsetSetup-J7rEa835.js} +1 -1
- package/dist/ui/assets/{CraftbooksView-BIzQ1VVn.js → CraftbooksView-BjBUWPGF.js} +1 -1
- package/dist/ui/assets/DiffpackReviewView-CD4qJmgT.js +1 -0
- package/dist/ui/assets/DocumentDetail-SYozruTJ.js +1 -0
- package/dist/ui/assets/DocumentsView-DE7eL49Z.js +1 -0
- package/dist/ui/assets/{Ds4Settings-9soZCSeO.js → Ds4Settings-DGzc7JcD.js} +1 -1
- package/dist/ui/assets/{EmbeddedChat-Cce7nxXT.js → EmbeddedChat-D92TaJQ8.js} +1 -1
- package/dist/ui/assets/{FaceRecognitionCard-BVZyOwB8.js → FaceRecognitionCard-CB1Dt9X4.js} +1 -1
- package/dist/ui/assets/FileMapView-kVBG22FU.js +1 -0
- package/dist/ui/assets/FoldersSettings-BWFQU5B4.js +1 -0
- package/dist/ui/assets/GezelDetail-Br4v42Nv.js +1 -0
- package/dist/ui/assets/{GezelJsonEditor-DXXt165-.js → GezelJsonEditor-B9XEiW5Y.js} +1 -1
- package/dist/ui/assets/GezellenView-DheEBAy4.js +1 -0
- package/dist/ui/assets/{GildeUpdatesCard-CtY8mUTA.js → GildeUpdatesCard-BeIYv09f.js} +1 -1
- package/dist/ui/assets/{GithubSignInChip-DT3l6E0Q.js → GithubSignInChip-eEGCe9ar.js} +1 -1
- package/dist/ui/assets/{HandboekMediaProvider-ByJ4NAzz.js → HandboekMediaProvider-D0zcbbpf.js} +1 -1
- package/dist/ui/assets/HandboekView-p0BZT1rH.js +1 -0
- package/dist/ui/assets/{HistoryView-CkinzFEC.js → HistoryView-CKWcWW-Y.js} +1 -1
- package/dist/ui/assets/{HomeView-DNBrQnwy.js → HomeView-b_TT5oV3.js} +1 -1
- package/dist/ui/assets/{ImageEngineSettings-BfM9HSd_.js → ImageEngineSettings-CJfk4OJ4.js} +1 -1
- package/dist/ui/assets/{ImageRecognitionSettings-CaSQu5Br.js → ImageRecognitionSettings-DzbvZk5S.js} +1 -1
- package/dist/ui/assets/{IncompleteDownloads-C36lTCMG.js → IncompleteDownloads-C8_XyP8O.js} +1 -1
- package/dist/ui/assets/{KnowledgeCatalogsCard-CK9bqdf6.js → KnowledgeCatalogsCard-CHopG_j-.js} +1 -1
- package/dist/ui/assets/KnowledgeView-CXNKZUJq.js +1 -0
- package/dist/ui/assets/{LlamaCppSettings-CdNMHBbp.js → LlamaCppSettings-ohcM7kes.js} +1 -1
- package/dist/ui/assets/{MarkdownField-Dugmfr_e.js → MarkdownField-BX0qsaFq.js} +1 -1
- package/dist/ui/assets/{MemoriesTree-CgFqUNEr.js → MemoriesTree-BPj5Rod8.js} +1 -1
- package/dist/ui/assets/{MicrophoneSettings-DzDe9y1q.js → MicrophoneSettings-CWjeYnfI.js} +1 -1
- package/dist/ui/assets/MlxSettings-Dq6dRpcl.js +1 -0
- package/dist/ui/assets/{ModelPicker-BVkJhNAH.js → ModelPicker-0Ue-eEKj.js} +1 -1
- package/dist/ui/assets/NewPathDialog-BhAZm9dp.js +1 -0
- package/dist/ui/assets/{NewScriptDialog-TEAd0KLl.js → NewScriptDialog-DuryIe50.js} +1 -1
- package/dist/ui/assets/NewTaskDialog-BX24flMY.js +2 -0
- package/dist/ui/assets/{OllamaSettings-CPy2vxyZ.js → OllamaSettings-Boj8Nd1G.js} +1 -1
- package/dist/ui/assets/ProjectChat-Dhw_M5bq.js +5 -0
- package/dist/ui/assets/ProjectConnectionsTab-BwpMQNrg.js +1 -0
- package/dist/ui/assets/{ProjectGitStatusBar-BgHZ2ijN.js → ProjectGitStatusBar-BORGYx5l.js} +1 -1
- package/dist/ui/assets/{ProjectGithubView-BV2uTNU0.js → ProjectGithubView-CTP1BOMv.js} +1 -1
- package/dist/ui/assets/{ProjectMailTab-DLtJdXSL.js → ProjectMailTab-qFmAeV3M.js} +1 -1
- package/dist/ui/assets/{ProjectOverviewView-ZMs9nL5N.js → ProjectOverviewView-Cq1FsoaT.js} +1 -1
- package/dist/ui/assets/{ProjectTimeline-CTPcn4Kc.js → ProjectTimeline-Cqae2Z92.js} +1 -1
- package/dist/ui/assets/ProjectsView-D0uJjUB-.js +7 -0
- package/dist/ui/assets/{RecommendedBadge-iUoisQBi.js → RecommendedBadge-CN1jEmSn.js} +1 -1
- package/dist/ui/assets/{RemoteServersPanel-CTVJ0IRh.js → RemoteServersPanel-CMakvCCM.js} +1 -1
- package/dist/ui/assets/{ScriptEditorTabs-CCDFZjdC.js → ScriptEditorTabs-st6dJePd.js} +2 -2
- package/dist/ui/assets/{ScriptEditorView-CergLqKj.js → ScriptEditorView-BkySh57_.js} +2 -2
- package/dist/ui/assets/{ScriptsView-v7ckdhDi.js → ScriptsView-7uPKwjDB.js} +1 -1
- package/dist/ui/assets/{SecurityComplianceSettings-Bd0-66Gs.js → SecurityComplianceSettings-Tsv_pXfy.js} +1 -1
- package/dist/ui/assets/SessionSwitcher-D0fSeeHO.js +1 -0
- package/dist/ui/assets/SettingsView-cli_z8ZW.js +3 -0
- package/dist/ui/assets/{SquisqIntegration-C5l_OPvD.js → SquisqIntegration-BTZ1kBlg.js} +1 -1
- package/dist/ui/assets/{StorageCleanupDialog-3kv9-2mT.js → StorageCleanupDialog-CDBjl8JQ.js} +1 -1
- package/dist/ui/assets/{StorageUsageCard-7sWTrZFa.js → StorageUsageCard-DXY1j0dZ.js} +1 -1
- package/dist/ui/assets/TaskTabContent-C0P681SL.js +1 -0
- package/dist/ui/assets/TasksView-Ddwz10ri.js +1 -0
- package/dist/ui/assets/{TerminalCodeEditor-ChmdzmCz.js → TerminalCodeEditor-BkNQ6QoQ.js} +2 -2
- package/dist/ui/assets/ToolsetsEditor-KVigemfL.js +8 -0
- package/dist/ui/assets/{TransformToolbarButton-gzIxUBH7.js → TransformToolbarButton-8wfJR1bO.js} +2 -2
- package/dist/ui/assets/{UnrecognizedModels-0hptopv6.js → UnrecognizedModels-BzdU1clO.js} +1 -1
- package/dist/ui/assets/{VideoEngineSettings-BdNzCEdR.js → VideoEngineSettings-f79ff57u.js} +1 -1
- package/dist/ui/assets/{WorkspaceIndexPane-DnsOO916.js → WorkspaceIndexPane-fu5V6o1W.js} +1 -1
- package/dist/ui/assets/{api-C0I7spBl.js → api-CmrgM5Rf.js} +1 -1
- package/dist/ui/assets/chat-thread-memory-8MCtb17Q.js +1 -0
- package/dist/ui/assets/{chunk-6ECMNUIP-BvCy0HUI.js → chunk-6ECMNUIP-D5AA6ozp.js} +1 -1
- package/dist/ui/assets/{chunk-A6N6IN3I-ofeM4l8g.js → chunk-A6N6IN3I-BpxihS5H.js} +1 -1
- package/dist/ui/assets/{chunk-ATWVNF7D-CYuW1Yc6.js → chunk-ATWVNF7D-CKIWh7bN.js} +1 -1
- package/dist/ui/assets/{chunk-UBFT2CDQ-FexGDigd.js → chunk-CW24CH7I-BD0FIooX.js} +1 -1
- package/dist/ui/assets/{chunk-DXYWKZ52-zxe8pjH4.js → chunk-DXYWKZ52-DMKPZnpo.js} +1 -1
- package/dist/ui/assets/chunk-IIQYS2YH-BtDJt4Xr.js +1 -0
- package/dist/ui/assets/{chunk-KGWT454C-v5-l6U5m.js → chunk-KGWT454C-DsQOBuLg.js} +1 -1
- package/dist/ui/assets/{chunk-Q77KNJIN-BLuPdsQF.js → chunk-Q77KNJIN-BdWizq9s.js} +1 -1
- package/dist/ui/assets/{chunk-USU6HTKB-B_p-YcDp.js → chunk-USU6HTKB-DyGZplh4.js} +1 -1
- package/dist/ui/assets/{chunk-UXEANVBI-Bt0kX-0Z.js → chunk-UXEANVBI-BUBXvqyE.js} +1 -1
- package/dist/ui/assets/{chunk-O7JILDEF-CqcO1qaI.js → chunk-X7BNDUNI-D14WIvlD.js} +2 -2
- package/dist/ui/assets/{chunk-AE3IUKMM-mZjzzO8Z.js → chunk-ZSU5DJLX-CrjQf-vs.js} +1 -1
- package/dist/ui/assets/{container-BI8hxN1N.js → container-iFj1r6Hk.js} +1 -1
- package/dist/ui/assets/csv-Di411Mv-.js +1 -0
- package/dist/ui/assets/data-Q05qqAp4.js +1 -0
- package/dist/ui/assets/{dist-APSIK7H3.js → dist-1FNFiksd.js} +3 -3
- package/dist/ui/assets/dist-BMZhqfv7.js +2 -0
- package/dist/ui/assets/dist-CE5CbmDb.js +225 -0
- package/dist/ui/assets/doc-BHcGsJZd.js +587 -0
- package/dist/ui/assets/{document-import-DPK4r8Am.js → document-import-B2Ya6sbf.js} +1 -1
- package/dist/ui/assets/{docx-DRLuCTaC.js → docx-B8Pwz5Ih.js} +1 -1
- package/dist/ui/assets/{epub-a0p2Xb1b.js → epub-BQ4g8Q9j.js} +1 -1
- package/dist/ui/assets/{export-options-BqYFyzWx.js → export-options-Dylv69b3.js} +1 -1
- package/dist/ui/assets/file-browser-BLOPfnS0.js +5 -0
- package/dist/ui/assets/{html-BbQNmJ5X.js → html-BnA7qFwq.js} +1 -1
- package/dist/ui/assets/icons-CyM7Cg4E.js +1 -0
- package/dist/ui/assets/index-DW6qHqhU.css +1 -0
- package/dist/ui/assets/index-DivKnJyx.js +36 -0
- package/dist/ui/assets/{mail-link-CWfsP5Aq.js → mail-link-NtlcX5OE.js} +1 -1
- package/dist/ui/assets/{markdown-ryKA_OmY.js → markdown-CLKH_zzl.js} +1 -1
- package/dist/ui/assets/markdown-baseline-0dqv9qbV.js +1 -0
- package/dist/ui/assets/materialize-G4WC5UG3-xq2dcwS8.js +1 -0
- package/dist/ui/assets/{monaco-base-C0VTMpv-.js → monaco-base-BSvdAweA.js} +1 -1
- package/dist/ui/assets/{monaco-setup-CX8q88c5.js → monaco-setup-CT7LZ0o_.js} +1 -1
- package/dist/ui/assets/{new-project-meta-ZmDPGYzC.js → new-project-meta-5Y9Blozr.js} +1 -1
- package/dist/ui/assets/outside-in-Msmhxf_U.js +3 -0
- package/dist/ui/assets/{pdf-BHrygJa5.js → pdf-C4BhW3zg.js} +1 -1
- package/dist/ui/assets/{pending-drafts-27ujtQxX.js → pending-drafts-BD227X9H.js} +1 -1
- package/dist/ui/assets/{poppetje-CfaAvFkE.js → poppetje-DvCJO36y.js} +3 -3
- package/dist/ui/assets/{pptx-nDW64jAN.js → pptx-B6uaM2s7.js} +3 -3
- package/dist/ui/assets/{run-export-86KzLZ7R.js → run-export-TscWwR6y.js} +2 -2
- package/dist/ui/assets/{standalone-source-7QdiNsDW.js → standalone-source-Cw9SF7Zk.js} +1 -1
- package/dist/ui/assets/storage-Cmhlwx70.js +1 -0
- package/dist/ui/assets/styles-BjDaWeMA.css +1 -0
- package/dist/ui/assets/styles-CqO-rmOt.js +554 -0
- package/dist/ui/assets/{terminal-monaco-setup-Bar-sYKd.js → terminal-monaco-setup-me523-j-.js} +1 -1
- package/dist/ui/assets/{transform-CmAXy0Ck.js → transform-DxJCwK68.js} +1 -1
- package/dist/ui/assets/{use-local-model-manager-D1yiurrC.js → use-local-model-manager-8wvk-I-y.js} +1 -1
- package/dist/ui/assets/{useCompactLayout-BDtPQcDh.js → useCompactLayout-cm4E9Vja.js} +0 -0
- package/dist/ui/assets/{useCopilotAvailability-BHOfHrfT.js → useCopilotAvailability-D9hglSH_.js} +1 -1
- package/dist/ui/assets/{useDiffpacks-B0kYhlWQ.js → useDiffpacks-1BN2XJWg.js} +1 -1
- package/dist/ui/assets/{useGitSync-DOt-ODiw.js → useGitSync-7m9YA7h5.js} +1 -1
- package/dist/ui/assets/{useShowWorkInProgressFeatures-BtpredG7.js → useShowWorkInProgressFeatures-D6QOaTUT.js} +1 -1
- package/dist/ui/assets/{useTotalRamBytes-B8NFM27w.js → useTotalRamBytes-Durk383U.js} +1 -1
- package/dist/ui/assets/{xlsx-B_pu1ZvY.js → xlsx-BbHA9bxA.js} +1 -1
- package/dist/ui/index.html +15 -15
- package/package.json +12 -11
- package/dist/ui/assets/CatalogBrowser-7_jHy5Q3.js +0 -1
- package/dist/ui/assets/ChatTimelineView-Cg_kLK_U.js +0 -7
- package/dist/ui/assets/CraftbookEditor-BKAIsnXv.js +0 -1
- package/dist/ui/assets/DiffpackReviewView-B2a3zgE-.js +0 -1
- package/dist/ui/assets/DocumentDetail-GCYhwQqV.js +0 -1
- package/dist/ui/assets/DocumentsView-Cm3RaQ5N.js +0 -1
- package/dist/ui/assets/FileMapView-BKJovLcL.js +0 -1
- package/dist/ui/assets/FoldersSettings-CuJd2JdE.js +0 -1
- package/dist/ui/assets/GezelDetail-D_KIPDhQ.js +0 -1
- package/dist/ui/assets/GezellenView-BOOW1QQU.js +0 -1
- package/dist/ui/assets/HandboekView-gRzJcIbJ.js +0 -1
- package/dist/ui/assets/KnowledgeView-DJ3cJVHA.js +0 -1
- package/dist/ui/assets/MlxSettings-45mBFHbA.js +0 -1
- package/dist/ui/assets/NewTaskDialog-CIXVunZn.js +0 -2
- package/dist/ui/assets/ProjectChat-BiJRweob.js +0 -5
- package/dist/ui/assets/ProjectConnectionsTab-CQgaIzuv.js +0 -1
- package/dist/ui/assets/ProjectsView-BUdR76n6.js +0 -7
- package/dist/ui/assets/SessionSwitcher-BgZqyiRn.js +0 -1
- package/dist/ui/assets/SettingsView-DLhOYiR5.js +0 -3
- package/dist/ui/assets/TaskTabContent-CG2KmfwV.js +0 -1
- package/dist/ui/assets/TasksView-Dy5Ue4zS.js +0 -1
- package/dist/ui/assets/ToolsetsEditor-J9XxQ5Ms.js +0 -8
- package/dist/ui/assets/chat-thread-memory-CI2-giEq.js +0 -1
- package/dist/ui/assets/chunk-IIQYS2YH-DEkyBlHg.js +0 -1
- package/dist/ui/assets/csv-B0D9jJG2.js +0 -1
- package/dist/ui/assets/data-BIL84EaT.js +0 -1
- package/dist/ui/assets/dist-CJqyWK6E.js +0 -2
- package/dist/ui/assets/dist-DOqbRmFj.js +0 -225
- package/dist/ui/assets/doc-C2Ph2FWI.js +0 -584
- package/dist/ui/assets/document-companion-aDThLOwl.js +0 -1
- package/dist/ui/assets/file-browser-DVyWN0LD.js +0 -5
- package/dist/ui/assets/icons-DWaUNQbT.js +0 -1
- package/dist/ui/assets/index-DDu8nyO6.js +0 -34
- package/dist/ui/assets/index-DEDUSiCx.css +0 -1
- package/dist/ui/assets/markdown-baseline-9B52XlX2.js +0 -1
- package/dist/ui/assets/materialize-G4WC5UG3-BlZQe-88.js +0 -1
- package/dist/ui/assets/outside-in-BmIIeMid.js +0 -3
- package/dist/ui/assets/storage-B-vhjyV2.js +0 -1
- package/dist/ui/assets/styles-BvkZd-EV.js +0 -550
- package/dist/ui/assets/styles-IQ4adxWr.css +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import * as _bendyline_gezel from '@bendyline/gezel';
|
|
2
|
-
import { NativeEngineResolveEvent, NativeEngineName, HistoryEvent, HistoryFilter, HistoryEntry, ProjectFileEntry, GezelConfig, GezelGender, Poppetje, GezelDetail, PendingGezelMessage, GezelSummary, ProviderName, RetrievalPolicy, ChatModelTuning, GezelTrait, ProjectLocalConfig, ImportProvenance, PendingImports, ProjectTypeOverlay, GezelFrontmatter, Project, ProjectIconId, ProjectDetail, FileReviewIssue, BoekwachterIssueStatus, BoekwachterIssueDismissalReason, ProjectManagedWorkspaceWritePolicy, ProjectNudgeConfig, ProjectTabVisibility, ProjectActivity, MeesterStatusReport, MeesterStatusState, ProjectGitHub, ChatSession, ChatSessionSummary, TimelineMessage, TerminalTimelineEntry, TerminalThread, TerminalThreadSummary, TerminalMessage, GezelGrowthState, Task, Question, TaskNote, ToolsetsScope, InstalledToolset, ToolsetConfig, CraftbookSummary, Craftbook, ProjectCraftbookProvenance, HookSpec, HookPhase, HookResult, ModelTier, ModelStyle, BehaviorId, ModelFamily, ChatMessageToolCall, SamplingBlock, CodexPermissionModeCompat, ModelFitnessTrigger, ModelFitnessRecord, ImageRecognition, RecognitionMode, RecognitionHealth, ImageModelPullEvent as ImageModelPullEvent$1, ModelInfo as ModelInfo$1, VideoAccelerator, ServiceRole, ResolvedDistributionPolicy, SessionParent, SessionLink, ChatSessionSource, ChatEvent, ChatEventEnvelope, AmbientDashboardResolution, AmbientDashboardTheme, AmbientDashboardDisplayTarget, AmbientDashboardStyle, AmbientDashboardState, PromptDraftStatus, PromptDraftSummary, PromptDraft, CreatePromptDraftRequest, PatchPromptDraftRequest, DuplicatePromptDraftRequest, OutlineFileResponse, FileContextResponse, FindSymbolResponse, ReadSymbolResponse, MapRepoResponse, SecurityScanResponse, ScanFindingsRequest, ScanFindingsResponse, SecurityFindingWire, MapAttackSurfaceResponse, ListDependenciesResponse, SecurityOverviewResponse, TraceTaintResponse, FileMapRequest, FileMapResponse, SearchCodeResponse, FileReviewResponse, ListFileIssuesRequest, ListFileIssuesResponse, BoekwachterIssue, SearchDocsResponse, SearchDocumentsResponse, ReadDocAsMarkdownResponse, SearchImagesResponse, FindSimilarImagesResponse, DescribeFolderResponse, FindEntityResponse, ListPeopleResponse, ListEntityMentionsResponse, KeurmeesterCaseRecord, TaskStatus, KeurmeesterTriggerKind, KeurmeesterAction, KeurmeesterCaseOutcome, GateCheck, TaskCraftbookStep, TaskCraftbookSource, CraftbookConnectorNeed, CreateTaskRequest, UpdateTaskRequest, TaskAssignee, NewCraftbookStep, StepPosition, UpdateTaskStepRequest, TaskNoteAuthor, TaskVariation, ScriptCapability, WorkspaceIndexStatus, IndexReadinessReport, ScriptScope, ScriptRunTrigger, ScriptRun, PreviewLogEntry, WorkspaceCommandIndex, WorkspaceSkillIndex, WorkspaceInstructionIndex, UnifiedSearchResult, RetrievalSource, SessionTurnPhase, SessionGpuTask, SessionTelemetry, AIEngagementMode, TurnCancelReason, ChatMessage, SessionDebugSnapshot, ExpectedDeliverable, FileTurnIntent, AppServeSiteStatus, AppServeStartRequest, AppServeStartResponse, ChannelStatus, ChannelName, CodexSetupStatusResponse, ConfigureCodexRequest, KeyedLock, ProjectConnectorBinding, DiffpackOrigin, DiffpackRecord, Diffpack, GildeUpdateStatusResponse, GitWorkingChange, GitFileDiffResponse, CodeReviewKind, GitLogEntry, GitCommitDetailResponse, GitSyncResponse, GitConflictFile, GitConflictVersionsResponse, TaskWaitState, CodeReviewRecord, CodeReview, GitHubPullSummary, GitHubPullDetail, GitHubPullFile, GitHubPullComment, KnowledgeUserRegistry, KnowledgeCatalogRef, KnowledgeInstallSourceKind, TrustedKnowledgeCoordinate, KnowledgeInstallEvent, ProjectKnowledgeCatalogs, KnowledgeEmbeddingProfile, KnowledgeInstallRequest, KnowledgeCatalogStatus, KnowledgeUpdateCandidate, KnowledgeAvailableCatalog, KnowledgeSemanticSearchMode, KnowledgeInstallJob, KnowledgeActiveInstall, IncompleteKnowledgeDownload, OpenCodeSetupStatusResponse, ConfigureOpenCodeRequest, InstallOpenCodePluginRequest, PiSetupStatusResponse, ConfigurePiRequest, InstallPiExtensionRequest, RenderImageRequest, ReportActionsResponse, FireReportActionResponse, ReportActionRecord, StorageJobKind, StorageJob, StorageJobPhase, SystemToolsetInstallEvent, SystemToolsetInstallSnapshot, NightShiftWindow, TerminalEventEnvelope, DiscoveredCommand, VSCodeSetupStatusResponse, ConfigureVSCodeRequest, ScriptMeta } from '@bendyline/gezel';
|
|
2
|
+
import { NativeEngineResolveEvent, NativeEngineName, HistoryEvent, HistoryFilter, HistoryEntry, ProjectFileEntry, GezelConfig, GezelGender, Poppetje, GezelDetail, PendingGezelMessage, GezelSummary, ProviderName, RetrievalPolicy, ChatModelTuning, GezelTrait, ProjectLocalConfig, ImportProvenance, PendingImports, ProjectTypeOverlay, GezelFrontmatter, Project, ProjectIconId, ProjectDetail, FileReviewIssue, BoekwachterIssueStatus, BoekwachterIssueDismissalReason, ProjectManagedWorkspaceWritePolicy, ProjectNudgeConfig, ProjectTabVisibility, ProjectActivity, MeesterStatusReport, MeesterStatusState, ProjectGitHub, ChatSession, ChatSessionSummary, TimelineMessage, TerminalTimelineEntry, TerminalThread, TerminalThreadSummary, TerminalMessage, GezelGrowthState, Task, Question, TaskNote, ToolsetsScope, InstalledToolset, ToolsetConfig, CraftbookSummary, Craftbook, ProjectCraftbookProvenance, HookSpec, HookPhase, HookResult, ModelTier, ModelStyle, BehaviorId, ModelFamily, ChatMessageToolCall, SamplingBlock, CodexPermissionModeCompat, ModelFitnessTrigger, ModelFitnessRecord, ImageRecognition, RecognitionMode, RecognitionHealth, ImageModelPullEvent as ImageModelPullEvent$1, ModelInfo as ModelInfo$1, VideoAccelerator, ServiceRole, ResolvedDistributionPolicy, AppToolRelayEvent, RegisterAppToolsRequest, AppToolRelayCloseReason, AppToolDefinition, AppToolRelaySummary, AppToolCallResultRequest, SessionParent, SessionLink, ChatSessionSource, ChatEvent, ChatEventEnvelope, AmbientDashboardResolution, AmbientDashboardTheme, AmbientDashboardDisplayTarget, AmbientDashboardStyle, AmbientDashboardState, PromptDraftStatus, PromptDraftSummary, PromptDraft, CreatePromptDraftRequest, PatchPromptDraftRequest, DuplicatePromptDraftRequest, OutlineFileResponse, FileContextResponse, FindSymbolResponse, ReadSymbolResponse, MapRepoResponse, SecurityScanResponse, ScanFindingsRequest, ScanFindingsResponse, SecurityFindingWire, MapAttackSurfaceResponse, ListDependenciesResponse, SecurityOverviewResponse, TraceTaintResponse, FileMapRequest, FileMapResponse, SearchCodeResponse, FileReviewResponse, ListFileIssuesRequest, ListFileIssuesResponse, BoekwachterIssue, SearchDocsResponse, SearchDocumentsResponse, ReadDocAsMarkdownResponse, SearchImagesResponse, FindSimilarImagesResponse, DescribeFolderResponse, FindEntityResponse, ListPeopleResponse, ListEntityMentionsResponse, KeurmeesterCaseRecord, TaskStatus, KeurmeesterTriggerKind, KeurmeesterAction, KeurmeesterCaseOutcome, GateCheck, TaskCraftbookStep, TaskCraftbookSource, CraftbookConnectorNeed, CreateTaskRequest, UpdateTaskRequest, TaskAssignee, NewCraftbookStep, StepPosition, UpdateTaskStepRequest, TaskNoteAuthor, TaskVariation, ScriptCapability, WorkspaceIndexStatus, IndexReadinessReport, ScriptScope, ScriptRunTrigger, ScriptRun, PreviewLogEntry, WorkspaceCommandIndex, WorkspaceSkillIndex, WorkspaceInstructionIndex, UnifiedSearchResult, RetrievalSource, SessionTurnPhase, SessionGpuTask, SessionTelemetry, AIEngagementMode, TurnCancelReason, ChatMessage, SessionDebugSnapshot, ExpectedDeliverable, FileTurnIntent, TurnIntentPreviewRequest, TurnIntentPlan, AppServeSiteStatus, AppServeStartRequest, AppServeStartResponse, ChannelStatus, ChannelName, CodexSetupStatusResponse, ConfigureCodexRequest, KeyedLock, ProjectConnectorBinding, DiffpackOrigin, DiffpackRecord, Diffpack, GildeUpdateStatusResponse, GitWorkingChange, GitFileDiffResponse, CodeReviewKind, GitLogEntry, GitCommitDetailResponse, GitSyncResponse, GitConflictFile, GitConflictVersionsResponse, TaskWaitState, CodeReviewRecord, CodeReview, GitHubPullSummary, GitHubPullDetail, GitHubPullFile, GitHubPullComment, KnowledgeUserRegistry, KnowledgeCatalogRef, KnowledgeInstallSourceKind, TrustedKnowledgeCoordinate, KnowledgeInstallEvent, ProjectKnowledgeCatalogs, KnowledgeEmbeddingProfile, KnowledgeInstallRequest, KnowledgeCatalogStatus, KnowledgeUpdateCandidate, KnowledgeAvailableCatalog, KnowledgeSemanticSearchMode, KnowledgeInstallJob, KnowledgeActiveInstall, IncompleteKnowledgeDownload, OpenCodeSetupStatusResponse, ConfigureOpenCodeRequest, InstallOpenCodePluginRequest, PiSetupStatusResponse, ConfigurePiRequest, InstallPiExtensionRequest, RenderImageRequest, ReportActionsResponse, FireReportActionResponse, ReportActionRecord, StorageJobKind, StorageJob, StorageJobPhase, SystemToolsetInstallEvent, SystemToolsetInstallSnapshot, NightShiftWindow, TerminalEventEnvelope, DiscoveredCommand, VSCodeSetupStatusResponse, ConfigureVSCodeRequest, ScriptMeta } from '@bendyline/gezel';
|
|
3
3
|
import { CatalogService } from '@bendyline/gezel-catalog';
|
|
4
4
|
import { NativeBinaryName, GpuPanicRecord, DeviceHealthGate, DeviceSafetyPolicyInput, DeviceHealthStatusSnapshot } from '@bendyline/gezel/native';
|
|
5
5
|
import { z } from 'zod';
|
|
6
|
+
import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
|
|
6
7
|
import { spawn, exec } from 'node:child_process';
|
|
7
8
|
import { ServerType } from '@hono/node-server';
|
|
8
9
|
import { ExternalFolders } from '@bendyline/gezel/paths';
|
|
@@ -58,7 +59,9 @@ type RunResult = {
|
|
|
58
59
|
stdout: string;
|
|
59
60
|
stderr: string;
|
|
60
61
|
};
|
|
61
|
-
type Runner = (cmd: string, args: string[]
|
|
62
|
+
type Runner = (cmd: string, args: string[], options?: {
|
|
63
|
+
env: NodeJS.ProcessEnv;
|
|
64
|
+
}) => Promise<RunResult>;
|
|
62
65
|
interface VerifyOptions {
|
|
63
66
|
policy: SignaturePolicy;
|
|
64
67
|
/** Test seam — defaults to `process.platform`. */
|
|
@@ -197,6 +200,91 @@ declare class EngineBinaryRegistry {
|
|
|
197
200
|
private broadcast;
|
|
198
201
|
}
|
|
199
202
|
|
|
203
|
+
/**
|
|
204
|
+
* The MCP server spec: what `McpBridge.start()` needs to bring up a session,
|
|
205
|
+
* plus the `kind` predicates. A leaf module on purpose — wrappers under
|
|
206
|
+
* `mcp-wrappers/` select on the spec, and the bridge imports the wrapper
|
|
207
|
+
* registry, so a wrapper that reached back into `mcp-bridge.ts` for these
|
|
208
|
+
* helpers formed an import cycle (`playwright-arg-validator` →
|
|
209
|
+
* `playwright-snapshot` → `mcp-bridge` → `mcp-wrappers/index` → the
|
|
210
|
+
* validator again, still initializing). Import spec helpers from here;
|
|
211
|
+
* `mcp-bridge.ts` re-exports them for its existing callers.
|
|
212
|
+
*
|
|
213
|
+
* Three flavors:
|
|
214
|
+
*
|
|
215
|
+
* - **stdio** (default when `kind` is omitted) — spawn a local
|
|
216
|
+
* subprocess and speak MCP over its pipes. The historical shape
|
|
217
|
+
* and what every existing call site uses.
|
|
218
|
+
* - **http** — connect to a hosted MCP server over HTTP (Streamable
|
|
219
|
+
* HTTP for new servers, SSE for older ones). Headers (auth tokens,
|
|
220
|
+
* custom keys) come from resolved toolset config the same way
|
|
221
|
+
* subprocess env vars do for stdio.
|
|
222
|
+
* - **in-memory** — an MCP server this daemon serves itself, over a
|
|
223
|
+
* linked transport pair with no process and no socket. Used for tools a
|
|
224
|
+
* connected app registered through the app-tool relay: the server half
|
|
225
|
+
* forwards each call up that app's event stream. A bridge is still the
|
|
226
|
+
* right shape for these because everything a tool surface needs —
|
|
227
|
+
* timeouts, output caps, redaction, argument coercion, the unresolved
|
|
228
|
+
* failure ledger, the `tool` chat event — already lives in the bridge
|
|
229
|
+
* and pool rather than in any one transport.
|
|
230
|
+
*
|
|
231
|
+
* The discriminator is `kind`; a missing `kind` is treated as
|
|
232
|
+
* `'stdio'` so legacy `{command, args, env}` callers keep working.
|
|
233
|
+
*/
|
|
234
|
+
|
|
235
|
+
type McpServerSpec = StdioMcpServerSpec | HttpMcpServerSpec | InMemoryMcpServerSpec;
|
|
236
|
+
interface StdioMcpServerSpec {
|
|
237
|
+
kind?: 'stdio';
|
|
238
|
+
/**
|
|
239
|
+
* Catalog toolset id this bridge speaks to, when it was spawned for an
|
|
240
|
+
* installed toolset. Wrappers select on this rather than sniffing the
|
|
241
|
+
* command line, because a managed system install spawns
|
|
242
|
+
* `node <home>/system-toolsets/@playwright__mcp@0.0.78/package/cli.js` —
|
|
243
|
+
* `installDirName` has slugified the `/` away, so the package name never
|
|
244
|
+
* appears in `command`/`args`. Sniffing there left every Playwright
|
|
245
|
+
* wrapper inert against the exact copy Gezel manages: the `file:`-URL
|
|
246
|
+
* rewrite never fired, and the local-preview posture advertised a browser
|
|
247
|
+
* surface nothing had pruned.
|
|
248
|
+
*/
|
|
249
|
+
toolsetId?: string;
|
|
250
|
+
command: string;
|
|
251
|
+
args: string[];
|
|
252
|
+
env: Record<string, string>;
|
|
253
|
+
/** Working directory for project-local/custom MCP servers. */
|
|
254
|
+
cwd?: string;
|
|
255
|
+
}
|
|
256
|
+
interface HttpMcpServerSpec {
|
|
257
|
+
kind: 'http';
|
|
258
|
+
/** Catalog toolset id — see {@link StdioMcpServerSpec.toolsetId}. */
|
|
259
|
+
toolsetId?: string;
|
|
260
|
+
/**
|
|
261
|
+
* `streamable-http` is the current MCP HTTP transport (one URL,
|
|
262
|
+
* POST for messages, optional GET for SSE stream + auto-reconnect).
|
|
263
|
+
* `sse` is the older two-endpoint variant — kept for back-compat
|
|
264
|
+
* with registry entries that still declare it.
|
|
265
|
+
*/
|
|
266
|
+
transport: 'streamable-http' | 'sse';
|
|
267
|
+
url: string;
|
|
268
|
+
/**
|
|
269
|
+
* Headers attached to every request. Bearer tokens, API keys, etc.
|
|
270
|
+
* Resolved from toolset config + secrets at session-build time.
|
|
271
|
+
*/
|
|
272
|
+
headers: Record<string, string>;
|
|
273
|
+
}
|
|
274
|
+
interface InMemoryMcpServerSpec {
|
|
275
|
+
kind: 'in-memory';
|
|
276
|
+
/** Catalog toolset id — see {@link StdioMcpServerSpec.toolsetId}. */
|
|
277
|
+
toolsetId?: string;
|
|
278
|
+
/** Short label for logs; never a secret. */
|
|
279
|
+
label: string;
|
|
280
|
+
/**
|
|
281
|
+
* Build the client half of a linked transport pair, with the server half
|
|
282
|
+
* already connected. Called once per bridge start, so a retry gets a fresh
|
|
283
|
+
* pair rather than a closed one.
|
|
284
|
+
*/
|
|
285
|
+
connect: () => Transport;
|
|
286
|
+
}
|
|
287
|
+
|
|
200
288
|
/**
|
|
201
289
|
* Append-only audit log. Explicit events live in per-scope JSONL files;
|
|
202
290
|
* chat session entries are derived at query time from the existing
|
|
@@ -1134,8 +1222,14 @@ declare class Store {
|
|
|
1134
1222
|
* deprecated field spread through newly written project files.
|
|
1135
1223
|
*/
|
|
1136
1224
|
private writeProjectMeta;
|
|
1137
|
-
/**
|
|
1138
|
-
|
|
1225
|
+
/**
|
|
1226
|
+
* Per-project lock shared by every project.json read-modify-write path.
|
|
1227
|
+
* Settings, classification, roster bookkeeping, scheduler nudge state, and
|
|
1228
|
+
* Git sync metadata can all land concurrently. Atomic file replacement
|
|
1229
|
+
* prevents torn JSON, but only this full-cycle lock prevents a later writer
|
|
1230
|
+
* from silently restoring the stale fields it read before another write.
|
|
1231
|
+
*/
|
|
1232
|
+
private readonly projectUpdateLocks;
|
|
1139
1233
|
touchProject(id: string): Promise<void>;
|
|
1140
1234
|
/**
|
|
1141
1235
|
* A project `workingDir` is settable by the model (via `update_project`)
|
|
@@ -1223,6 +1317,7 @@ declare class Store {
|
|
|
1223
1317
|
*/
|
|
1224
1318
|
properties?: Record<string, string>;
|
|
1225
1319
|
}): Promise<ProjectDetail>;
|
|
1320
|
+
private updateProjectUnlocked;
|
|
1226
1321
|
/**
|
|
1227
1322
|
* Delete a project. Two tiers, because the user's own files must never be
|
|
1228
1323
|
* destroyed silently:
|
|
@@ -1250,6 +1345,7 @@ declare class Store {
|
|
|
1250
1345
|
removedWorkspace: boolean;
|
|
1251
1346
|
workspaceSource: 'workingDir' | 'githubCheckout' | 'internal';
|
|
1252
1347
|
}>;
|
|
1348
|
+
private deleteProjectUnlocked;
|
|
1253
1349
|
/**
|
|
1254
1350
|
* Update the service-managed fields of `project.github`. When `patch.url`
|
|
1255
1351
|
* is supplied, this may also create the link after an explicit clone path
|
|
@@ -1278,6 +1374,7 @@ declare class Store {
|
|
|
1278
1374
|
}): Promise<{
|
|
1279
1375
|
added: boolean;
|
|
1280
1376
|
}>;
|
|
1377
|
+
private addGezelToProjectUnlocked;
|
|
1281
1378
|
/**
|
|
1282
1379
|
* Remove a gezel from a project's `gezelIds` roster. Idempotent —
|
|
1283
1380
|
* returns `{ removed: false }` when the gezel wasn't a member. Does
|
|
@@ -2023,7 +2120,9 @@ declare class Store {
|
|
|
2023
2120
|
*/
|
|
2024
2121
|
listProjectCraftbooks(projectId: string): Promise<CraftbookSummary[]>;
|
|
2025
2122
|
/** Resolve a project-local craftbook into the runtime `Craftbook` shape. */
|
|
2026
|
-
getProjectCraftbook(projectId: string, id: string, version?: string
|
|
2123
|
+
getProjectCraftbook(projectId: string, id: string, version?: string, options?: {
|
|
2124
|
+
throwOnInvalid?: boolean;
|
|
2125
|
+
}): Promise<Craftbook | null>;
|
|
2027
2126
|
/** Persist a project-local craftbook (flat `.gezel/craftbooks/<id>/` layout). */
|
|
2028
2127
|
writeProjectCraftbook(projectId: string, book: Craftbook): Promise<void>;
|
|
2029
2128
|
/** Remove a project-local craftbook from the workspace. */
|
|
@@ -2131,59 +2230,7 @@ type HookRunner = (hook: ActiveHook, ctx: {
|
|
|
2131
2230
|
isError: boolean;
|
|
2132
2231
|
};
|
|
2133
2232
|
}) => Promise<HookResult>;
|
|
2134
|
-
|
|
2135
|
-
* What `McpBridge.start()` needs to bring up a session. Two flavors:
|
|
2136
|
-
*
|
|
2137
|
-
* - **stdio** (default when `kind` is omitted) — spawn a local
|
|
2138
|
-
* subprocess and speak MCP over its pipes. The historical shape
|
|
2139
|
-
* and what every existing call site uses.
|
|
2140
|
-
* - **http** — connect to a hosted MCP server over HTTP (Streamable
|
|
2141
|
-
* HTTP for new servers, SSE for older ones). Headers (auth tokens,
|
|
2142
|
-
* custom keys) come from resolved toolset config the same way
|
|
2143
|
-
* subprocess env vars do for stdio.
|
|
2144
|
-
*
|
|
2145
|
-
* The discriminator is `kind`; a missing `kind` is treated as
|
|
2146
|
-
* `'stdio'` so legacy `{command, args, env}` callers keep working.
|
|
2147
|
-
*/
|
|
2148
|
-
type McpServerSpec = StdioMcpServerSpec | HttpMcpServerSpec;
|
|
2149
|
-
interface StdioMcpServerSpec {
|
|
2150
|
-
kind?: 'stdio';
|
|
2151
|
-
/**
|
|
2152
|
-
* Catalog toolset id this bridge speaks to, when it was spawned for an
|
|
2153
|
-
* installed toolset. Wrappers select on this rather than sniffing the
|
|
2154
|
-
* command line, because a managed system install spawns
|
|
2155
|
-
* `node <home>/system-toolsets/@playwright__mcp@0.0.78/package/cli.js` —
|
|
2156
|
-
* `installDirName` has slugified the `/` away, so the package name never
|
|
2157
|
-
* appears in `command`/`args`. Sniffing there left every Playwright
|
|
2158
|
-
* wrapper inert against the exact copy Gezel manages: the `file:`-URL
|
|
2159
|
-
* rewrite never fired, and the local-preview posture advertised a browser
|
|
2160
|
-
* surface nothing had pruned.
|
|
2161
|
-
*/
|
|
2162
|
-
toolsetId?: string;
|
|
2163
|
-
command: string;
|
|
2164
|
-
args: string[];
|
|
2165
|
-
env: Record<string, string>;
|
|
2166
|
-
/** Working directory for project-local/custom MCP servers. */
|
|
2167
|
-
cwd?: string;
|
|
2168
|
-
}
|
|
2169
|
-
interface HttpMcpServerSpec {
|
|
2170
|
-
kind: 'http';
|
|
2171
|
-
/** Catalog toolset id — see {@link StdioMcpServerSpec.toolsetId}. */
|
|
2172
|
-
toolsetId?: string;
|
|
2173
|
-
/**
|
|
2174
|
-
* `streamable-http` is the current MCP HTTP transport (one URL,
|
|
2175
|
-
* POST for messages, optional GET for SSE stream + auto-reconnect).
|
|
2176
|
-
* `sse` is the older two-endpoint variant — kept for back-compat
|
|
2177
|
-
* with registry entries that still declare it.
|
|
2178
|
-
*/
|
|
2179
|
-
transport: 'streamable-http' | 'sse';
|
|
2180
|
-
url: string;
|
|
2181
|
-
/**
|
|
2182
|
-
* Headers attached to every request. Bearer tokens, API keys, etc.
|
|
2183
|
-
* Resolved from toolset config + secrets at session-build time.
|
|
2184
|
-
*/
|
|
2185
|
-
headers: Record<string, string>;
|
|
2186
|
-
}
|
|
2233
|
+
|
|
2187
2234
|
/** Shape of an OpenAI function tool (Responses API format). */
|
|
2188
2235
|
interface OpenAIFunctionTool {
|
|
2189
2236
|
type: 'function';
|
|
@@ -2503,6 +2550,12 @@ interface TurnCtx extends ModelCtx {
|
|
|
2503
2550
|
userText: string;
|
|
2504
2551
|
/** Tool calls that drained from the per-turn accumulator. */
|
|
2505
2552
|
drained: ChatMessageToolCall[];
|
|
2553
|
+
/**
|
|
2554
|
+
* A preceding turn in this task-scoped session successfully read artifact
|
|
2555
|
+
* evidence and persisted its complete result. Adjacent craftbook steps can
|
|
2556
|
+
* deliberately review that replayed evidence without issuing the read again.
|
|
2557
|
+
*/
|
|
2558
|
+
verifiedPriorArtifactRead?: boolean;
|
|
2506
2559
|
/** Final assistant content for the just-completed turn. */
|
|
2507
2560
|
assistantContent: string;
|
|
2508
2561
|
/** How many continuation nudges have already fired in this user-initiated send. */
|
|
@@ -3588,15 +3641,18 @@ interface SessionOpts {
|
|
|
3588
3641
|
error: unknown;
|
|
3589
3642
|
}) => void;
|
|
3590
3643
|
/**
|
|
3591
|
-
*
|
|
3592
|
-
*
|
|
3593
|
-
*
|
|
3594
|
-
*
|
|
3595
|
-
*
|
|
3596
|
-
* `chat/role-tool-filter.ts`. Unset means "advertise every tool"
|
|
3597
|
-
* (pre-filter behavior).
|
|
3644
|
+
* Role-derived ceiling on advertised and callable built-in tools.
|
|
3645
|
+
* Third-party tools are unaffected by this set; an authored step's
|
|
3646
|
+
* toolNamePolicy can constrain those too. The bridge pool retains a
|
|
3647
|
+
* narrow append recovery exception for truncated write_file calls.
|
|
3648
|
+
* See chat/role-tool-filter.ts. Unset adds no role-based restriction.
|
|
3598
3649
|
*/
|
|
3599
3650
|
toolAllowlist?: Set<string>;
|
|
3651
|
+
/** Authored step ceiling for all bridge tools, including third-party MCP tools. */
|
|
3652
|
+
toolNamePolicy?: {
|
|
3653
|
+
allow?: ReadonlySet<string>;
|
|
3654
|
+
deny?: ReadonlySet<string>;
|
|
3655
|
+
};
|
|
3600
3656
|
/**
|
|
3601
3657
|
* The chat manager classified this session's current turn as direct
|
|
3602
3658
|
* file work and narrowed its tool surface accordingly. Local providers
|
|
@@ -3835,6 +3891,8 @@ interface ToolCallEvent {
|
|
|
3835
3891
|
* into a short full response or a deterministic summary before persistence.
|
|
3836
3892
|
*/
|
|
3837
3893
|
resultText?: string;
|
|
3894
|
+
/** True when the bridge clipped the provider-visible text after the MCP tool returned. */
|
|
3895
|
+
deliveredResultTruncated?: boolean;
|
|
3838
3896
|
/**
|
|
3839
3897
|
* Image artifacts the tool returned (Playwright `browser_*` screenshots,
|
|
3840
3898
|
* etc.) — already written to disk by the bridge's image persister, paths
|
|
@@ -4828,6 +4886,15 @@ interface NativeEngineLifecycleSnapshot {
|
|
|
4828
4886
|
unloadAt: number | null;
|
|
4829
4887
|
idleTimeoutMs: number;
|
|
4830
4888
|
releaseReason: 'idle' | 'memory-pressure' | null;
|
|
4889
|
+
/**
|
|
4890
|
+
* When the last start attempt failed, and why. Cleared by the next start
|
|
4891
|
+
* that reaches ready. An engine that never started still holds its pool
|
|
4892
|
+
* reservation, and no idle timer is armed for it (the timer is only ever
|
|
4893
|
+
* reset by a RUNNING engine), so nothing would ever give that memory back
|
|
4894
|
+
* — see `ProviderPool.sweepFailedStarts`.
|
|
4895
|
+
*/
|
|
4896
|
+
startFailedAt?: number;
|
|
4897
|
+
startFailure?: string;
|
|
4831
4898
|
}
|
|
4832
4899
|
|
|
4833
4900
|
interface ProviderBuilderArgs {
|
|
@@ -5023,6 +5090,31 @@ declare class ProviderPool {
|
|
|
5023
5090
|
touch(key: string): void;
|
|
5024
5091
|
/** Returns true if the pool currently holds an entry for `key`. */
|
|
5025
5092
|
has(key: string): boolean;
|
|
5093
|
+
/**
|
|
5094
|
+
* Drop entries whose engine failed to start, releasing the budget they hold.
|
|
5095
|
+
*
|
|
5096
|
+
* The reservation is taken when the builder returns — before the engine
|
|
5097
|
+
* process exists, because the engine starts lazily on the first turn. A
|
|
5098
|
+
* start that then fails (memory admission refused, spawn error, panic
|
|
5099
|
+
* guard) leaves an entry that owns its whole `residentBytes` while running
|
|
5100
|
+
* nothing, and it is never reclaimed on its own: the idle timer that would
|
|
5101
|
+
* eventually release it is only ever armed by an engine that reached
|
|
5102
|
+
* `running`. Observed as a 9.7 GB reservation on a machine whose engine
|
|
5103
|
+
* process count was zero, against an 11.2 GB budget.
|
|
5104
|
+
*
|
|
5105
|
+
* Eviction is the whole repair. The next `ensure` rebuilds, which re-plans
|
|
5106
|
+
* the context window against memory as it stands then rather than handing
|
|
5107
|
+
* back a provider that will fail the same way.
|
|
5108
|
+
*/
|
|
5109
|
+
private sweepFailedStarts;
|
|
5110
|
+
/**
|
|
5111
|
+
* Evict pool entries whose supervised native child has already stopped.
|
|
5112
|
+
* Their bytes are capacity guarantees, not physical residency. Keeping the
|
|
5113
|
+
* wrapper cached is useful until another model actually needs that promise;
|
|
5114
|
+
* a capacity denial is the pressure signal that makes the released entries
|
|
5115
|
+
* expendable.
|
|
5116
|
+
*/
|
|
5117
|
+
private reclaimReleasedReservations;
|
|
5026
5118
|
/**
|
|
5027
5119
|
* Immediately unload one resident engine, but only while it is idle.
|
|
5028
5120
|
*
|
|
@@ -6184,6 +6276,8 @@ interface InstalledMlxModel {
|
|
|
6184
6276
|
id: string;
|
|
6185
6277
|
name: string;
|
|
6186
6278
|
approxSizeBytes: number;
|
|
6279
|
+
/** Cataloged fixed working set with KV excluded; measured values beat the fallback formula. */
|
|
6280
|
+
residentBytes?: number;
|
|
6187
6281
|
installedAt: string;
|
|
6188
6282
|
/** Absolute path to the model directory the supervisor passes to `mlx_lm.server --model`. */
|
|
6189
6283
|
modelDir: string;
|
|
@@ -6322,6 +6416,7 @@ interface MlxModelManagerOptions {
|
|
|
6322
6416
|
}
|
|
6323
6417
|
declare class MlxModelManager {
|
|
6324
6418
|
private readonly modelsRoot;
|
|
6419
|
+
private readonly viewsRoot;
|
|
6325
6420
|
private readonly storageRoots;
|
|
6326
6421
|
private readonly catalog;
|
|
6327
6422
|
private readonly fetchImpl;
|
|
@@ -6792,6 +6887,13 @@ interface PairedRemote {
|
|
|
6792
6887
|
tlsCertPem?: string;
|
|
6793
6888
|
/** Scopes the server granted (currently `['remote-inference']`). */
|
|
6794
6889
|
scopes: string[];
|
|
6890
|
+
/**
|
|
6891
|
+
* `gezelVersion` from the peer's `/v1/identity`, when it reported one.
|
|
6892
|
+
* Absent for a peer too old to publish it. Read by the native-capacity
|
|
6893
|
+
* authority check, which must know whether the broker deciding this
|
|
6894
|
+
* machine's memory is the same build as the one asking.
|
|
6895
|
+
*/
|
|
6896
|
+
gezelVersion?: string;
|
|
6795
6897
|
pairedAt: number;
|
|
6796
6898
|
/** Last time A successfully reached this server (in-memory unless flushed). */
|
|
6797
6899
|
lastSeenAt?: number;
|
|
@@ -8918,6 +9020,144 @@ interface EngineContext {
|
|
|
8918
9020
|
childProcessSpawn?: SpawnCapability;
|
|
8919
9021
|
}
|
|
8920
9022
|
|
|
9023
|
+
/**
|
|
9024
|
+
* One app's tools for one project, as a chat session sees them.
|
|
9025
|
+
*
|
|
9026
|
+
* Captured when a session builds its bridges, so a turn already in flight
|
|
9027
|
+
* keeps the surface it was told about. `invoke` re-checks liveness against the
|
|
9028
|
+
* registry, which is what keeps a captured binding from becoming a promise
|
|
9029
|
+
* nobody can keep.
|
|
9030
|
+
*/
|
|
9031
|
+
interface AppToolBinding {
|
|
9032
|
+
relayId: string;
|
|
9033
|
+
appId: string;
|
|
9034
|
+
appName?: string;
|
|
9035
|
+
projectId: string;
|
|
9036
|
+
gezelIds?: ReadonlySet<string>;
|
|
9037
|
+
tools: readonly AppToolDefinition[];
|
|
9038
|
+
}
|
|
9039
|
+
/** Where relay events are written — an SSE response in production. */
|
|
9040
|
+
interface AppToolRelayStreamSink {
|
|
9041
|
+
write(event: AppToolRelayEvent): void | Promise<void>;
|
|
9042
|
+
}
|
|
9043
|
+
type AppToolInvokeResult = Extract<AppToolCallResultRequest, {
|
|
9044
|
+
ok: true;
|
|
9045
|
+
}> | {
|
|
9046
|
+
ok: false;
|
|
9047
|
+
error: string;
|
|
9048
|
+
};
|
|
9049
|
+
interface AppToolInvocation {
|
|
9050
|
+
tool: string;
|
|
9051
|
+
args: Record<string, unknown>;
|
|
9052
|
+
sessionId: string;
|
|
9053
|
+
gezelId: string;
|
|
9054
|
+
projectId: string;
|
|
9055
|
+
timeoutMs?: number;
|
|
9056
|
+
signal?: AbortSignal;
|
|
9057
|
+
}
|
|
9058
|
+
interface AppToolRelayRegistryOptions {
|
|
9059
|
+
graceMs?: number;
|
|
9060
|
+
heartbeatMs?: number;
|
|
9061
|
+
maxRelaysPerApp?: number;
|
|
9062
|
+
maxPendingPerRelay?: number;
|
|
9063
|
+
now?: () => number;
|
|
9064
|
+
/** Called whenever a project's tool surface changed. */
|
|
9065
|
+
onChange?: (projectId: string) => void;
|
|
9066
|
+
}
|
|
9067
|
+
/**
|
|
9068
|
+
* Live registry of app-registered tools.
|
|
9069
|
+
*
|
|
9070
|
+
* Everything here is in-memory on purpose. A registration is a claim that the
|
|
9071
|
+
* app is standing by to answer calls, and that claim cannot survive a restart
|
|
9072
|
+
* of either side — a persisted one would advertise tools whose handler no
|
|
9073
|
+
* longer exists, which the model experiences as a tool that accepts the call
|
|
9074
|
+
* and then never returns.
|
|
9075
|
+
*/
|
|
9076
|
+
declare class AppToolRelayRegistry {
|
|
9077
|
+
private readonly relays;
|
|
9078
|
+
private readonly graceMs;
|
|
9079
|
+
private readonly heartbeatMs;
|
|
9080
|
+
private readonly maxRelaysPerApp;
|
|
9081
|
+
private readonly maxPendingPerRelay;
|
|
9082
|
+
private readonly now;
|
|
9083
|
+
private readonly onChange?;
|
|
9084
|
+
constructor(opts?: AppToolRelayRegistryOptions);
|
|
9085
|
+
get limits(): {
|
|
9086
|
+
graceMs: number;
|
|
9087
|
+
heartbeatMs: number;
|
|
9088
|
+
maxPendingCalls: number;
|
|
9089
|
+
};
|
|
9090
|
+
open(input: {
|
|
9091
|
+
appId: string;
|
|
9092
|
+
appName?: string;
|
|
9093
|
+
label?: string;
|
|
9094
|
+
}): {
|
|
9095
|
+
relayId: string;
|
|
9096
|
+
};
|
|
9097
|
+
/** The relay's owning app, for route-level ownership checks. */
|
|
9098
|
+
ownerOf(relayId: string): string | undefined;
|
|
9099
|
+
has(relayId: string): boolean;
|
|
9100
|
+
/**
|
|
9101
|
+
* Attach an event stream. A second stream for the same relay supersedes the
|
|
9102
|
+
* first: a half-open socket that the OS has not yet torn down must never be
|
|
9103
|
+
* able to lock an app out of its own relay.
|
|
9104
|
+
*/
|
|
9105
|
+
attachStream(relayId: string, sink: AppToolRelayStreamSink): {
|
|
9106
|
+
detach: () => void;
|
|
9107
|
+
};
|
|
9108
|
+
detachStream(relayId: string): void;
|
|
9109
|
+
register(relayId: string, request: RegisterAppToolsRequest): {
|
|
9110
|
+
toolsetId: string;
|
|
9111
|
+
registered: string[];
|
|
9112
|
+
};
|
|
9113
|
+
unregister(relayId: string, projectId?: string): void;
|
|
9114
|
+
close(relayId: string, reason: AppToolRelayCloseReason): void;
|
|
9115
|
+
closeAll(reason?: AppToolRelayCloseReason): void;
|
|
9116
|
+
/**
|
|
9117
|
+
* Bindings that apply to one session. A relay inside its grace window still
|
|
9118
|
+
* counts: the tools are about to come back, and dropping them would rebuild
|
|
9119
|
+
* the session's whole tool surface for a two-second socket blip.
|
|
9120
|
+
*/
|
|
9121
|
+
listForSession(query: {
|
|
9122
|
+
projectId: string;
|
|
9123
|
+
gezelId: string;
|
|
9124
|
+
}): AppToolBinding[];
|
|
9125
|
+
/**
|
|
9126
|
+
* Stable identity of a project's app-tool surface. The chat manager stores
|
|
9127
|
+
* it on the live session and rebuilds when it moves, so tools registered
|
|
9128
|
+
* after a session opened appear on the next turn.
|
|
9129
|
+
*/
|
|
9130
|
+
fingerprint(projectId: string): string;
|
|
9131
|
+
listRelays(filter?: {
|
|
9132
|
+
appId?: string;
|
|
9133
|
+
}): AppToolRelaySummary[];
|
|
9134
|
+
/**
|
|
9135
|
+
* Run one tool in the app and wait for its answer.
|
|
9136
|
+
*
|
|
9137
|
+
* Never queues against a disconnected app: the model is blocked on this
|
|
9138
|
+
* call, so "the app is not connected" is a far better answer than a wait
|
|
9139
|
+
* that ends in a timeout with the same information.
|
|
9140
|
+
*/
|
|
9141
|
+
invoke(binding: AppToolBinding, call: AppToolInvocation): Promise<AppToolInvokeResult>;
|
|
9142
|
+
/**
|
|
9143
|
+
* Deliver an app's answer. A late answer for a call that already timed out
|
|
9144
|
+
* reports `unknown` rather than being applied — the model has moved on, and
|
|
9145
|
+
* silently accepting it would leave the app believing it was used.
|
|
9146
|
+
*/
|
|
9147
|
+
resolveCall(relayId: string, callId: string, result: AppToolCallResultRequest): 'resolved' | 'unknown';
|
|
9148
|
+
private require;
|
|
9149
|
+
private findConflict;
|
|
9150
|
+
private failPending;
|
|
9151
|
+
/**
|
|
9152
|
+
* Best-effort notification. A relay inside its grace window has no stream to
|
|
9153
|
+
* write to, and that is not an error: the app is between connections, and
|
|
9154
|
+
* its registration is deliberately still live. Only {@link invoke} needs a
|
|
9155
|
+
* connected app, and it checks for one itself before emitting.
|
|
9156
|
+
*/
|
|
9157
|
+
private emit;
|
|
9158
|
+
private emitTo;
|
|
9159
|
+
}
|
|
9160
|
+
|
|
8921
9161
|
type SessionListener = (event: ChatEvent) => void;
|
|
8922
9162
|
type EnvelopeListener = (envelope: ChatEventEnvelope) => void;
|
|
8923
9163
|
interface PublishScope {
|
|
@@ -10688,6 +10928,16 @@ interface GateEvalDeps {
|
|
|
10688
10928
|
at?: string;
|
|
10689
10929
|
}>;
|
|
10690
10930
|
}>;
|
|
10931
|
+
/** Service-written successful artifact read ranges for the current task step. */
|
|
10932
|
+
corpusReadEvidence?: () => Promise<{
|
|
10933
|
+
observable: boolean;
|
|
10934
|
+
slices: Array<{
|
|
10935
|
+
path: string;
|
|
10936
|
+
startLine: number;
|
|
10937
|
+
endLine: number;
|
|
10938
|
+
totalLines: number;
|
|
10939
|
+
}>;
|
|
10940
|
+
}>;
|
|
10691
10941
|
/**
|
|
10692
10942
|
* Run receipts for `commandEvidence`. The task manager scopes this to
|
|
10693
10943
|
* the current task, step, and activation timestamp, reading the
|
|
@@ -10909,6 +11159,8 @@ type StepActivatedHook = (ctx: {
|
|
|
10909
11159
|
newStep: TaskCraftbookStep;
|
|
10910
11160
|
/** The step that was just completed (may equal newStep on loopback). */
|
|
10911
11161
|
completedStep: TaskCraftbookStep;
|
|
11162
|
+
/** A spawned task's first step is an entry, not a self-handoff. */
|
|
11163
|
+
kind?: 'entry' | 'transition' | 'redispatch';
|
|
10912
11164
|
}) => Promise<void> | void;
|
|
10913
11165
|
/**
|
|
10914
11166
|
* Fired when a completion gate re-activates a step but the model turn that
|
|
@@ -10948,6 +11200,12 @@ type TaskSettledHook = (ctx: {
|
|
|
10948
11200
|
task: Task;
|
|
10949
11201
|
outcome: 'complete' | 'canceled';
|
|
10950
11202
|
}) => Promise<void> | void;
|
|
11203
|
+
/** Fired after the durable status changes, including draft activation. */
|
|
11204
|
+
type TaskStatusChangedHook = (ctx: {
|
|
11205
|
+
projectId: string;
|
|
11206
|
+
task: Task;
|
|
11207
|
+
previousStatus: TaskStatus;
|
|
11208
|
+
}) => Promise<void> | void;
|
|
10951
11209
|
type TaskNeedsHelpReason = 'gate_exhausted' | 'gate_plateau' | 'gate_unsatisfiable' | 'gate_infrastructure' | 'step_exit_infrastructure' | 'step_stalled' | 'budget_exhausted';
|
|
10952
11210
|
/**
|
|
10953
11211
|
* Fired when a task PAUSES FOR HELP — a gate budget spent, a plateau, an
|
|
@@ -11043,6 +11301,7 @@ declare class TaskManager {
|
|
|
11043
11301
|
private onCurrentTurnStepReactivated?;
|
|
11044
11302
|
private onTaskCreated?;
|
|
11045
11303
|
private onTaskSettled?;
|
|
11304
|
+
private onTaskStatusChanged?;
|
|
11046
11305
|
private onTaskNeedsHelp?;
|
|
11047
11306
|
private onConnectorPrep?;
|
|
11048
11307
|
private readonly autoPreparedConnectorTypes;
|
|
@@ -11140,6 +11399,7 @@ declare class TaskManager {
|
|
|
11140
11399
|
/** Register the task-created hook (script install lives here). */
|
|
11141
11400
|
setTaskCreatedHook(fn: TaskCreatedHook): void;
|
|
11142
11401
|
setTaskSettledHook(fn: TaskSettledHook): void;
|
|
11402
|
+
setTaskStatusChangedHook(fn: TaskStatusChangedHook): void;
|
|
11143
11403
|
setTaskNeedsHelpHook(fn: TaskNeedsHelpHook): void;
|
|
11144
11404
|
/**
|
|
11145
11405
|
* Wire the connector-prep hook — pulls a craftbook's declared connector
|
|
@@ -11163,6 +11423,7 @@ declare class TaskManager {
|
|
|
11163
11423
|
detail: string;
|
|
11164
11424
|
}): Promise<void>;
|
|
11165
11425
|
private notifyTaskSettled;
|
|
11426
|
+
private notifyTaskStatusChanged;
|
|
11166
11427
|
/**
|
|
11167
11428
|
* Wire the role resolver — turns a step's `suggestedRole` into a
|
|
11168
11429
|
* concrete gezel id at step-activation time. When unset, role-based
|
|
@@ -11565,6 +11826,8 @@ declare class TaskManager {
|
|
|
11565
11826
|
recordNightShiftSpawn(ref: string, dayKey: string): Promise<void>;
|
|
11566
11827
|
describeAssignee: typeof describeAssignee;
|
|
11567
11828
|
private requireTask;
|
|
11829
|
+
private withEffectiveStatus;
|
|
11830
|
+
private effectiveStatusFor;
|
|
11568
11831
|
}
|
|
11569
11832
|
|
|
11570
11833
|
/**
|
|
@@ -11779,6 +12042,8 @@ declare class ScriptRunner {
|
|
|
11779
12042
|
* path, as does a version the catalog no longer serves.
|
|
11780
12043
|
*/
|
|
11781
12044
|
private isProvenanceTrusted;
|
|
12045
|
+
/** A model cannot grant trust by editing a script or supplying an invocation argument. */
|
|
12046
|
+
private isCliTrustedSource;
|
|
11782
12047
|
private vendorSdk;
|
|
11783
12048
|
private runSandbox;
|
|
11784
12049
|
private persistRun;
|
|
@@ -12381,6 +12646,12 @@ interface ChatManagerOptions {
|
|
|
12381
12646
|
store: Store;
|
|
12382
12647
|
events: ChatEventBus;
|
|
12383
12648
|
memory: MemoryManager;
|
|
12649
|
+
/**
|
|
12650
|
+
* Live tools registered by connected apps (see app-tools/relay-registry).
|
|
12651
|
+
* Optional so tests and headless embedders can omit it; absent simply
|
|
12652
|
+
* means no app tools reach any session.
|
|
12653
|
+
*/
|
|
12654
|
+
appToolRelays?: AppToolRelayRegistry;
|
|
12384
12655
|
getPort: () => number;
|
|
12385
12656
|
getToken: () => string;
|
|
12386
12657
|
/**
|
|
@@ -12874,6 +13145,7 @@ declare class ChatManager extends LocalEngineRuntime {
|
|
|
12874
13145
|
readonly usageTracker: UsageTracker;
|
|
12875
13146
|
readonly telemetry: SessionTelemetryTracker;
|
|
12876
13147
|
private telemetryGpuUnsub;
|
|
13148
|
+
private readonly appToolRelays;
|
|
12877
13149
|
constructor(opts: ChatManagerOptions);
|
|
12878
13150
|
/** PUT /api/config calls this to keep the in-memory cache in sync. */
|
|
12879
13151
|
setEngagementMode(mode: AIEngagementMode): void;
|
|
@@ -13169,8 +13441,13 @@ declare class ChatManager extends LocalEngineRuntime {
|
|
|
13169
13441
|
* background work (the boekwachter enrichment loop) that should never
|
|
13170
13442
|
* compete with live chat. */
|
|
13171
13443
|
isAnyActive(): boolean;
|
|
13172
|
-
/**
|
|
13173
|
-
|
|
13444
|
+
/**
|
|
13445
|
+
* True while a specific session is running or has an unstarted send,
|
|
13446
|
+
* including cold setup before its live state exists. Lifecycle callers
|
|
13447
|
+
* must use this rather than listInflight(), whose display records require
|
|
13448
|
+
* that state and can omit a turn while ensureState is still initializing.
|
|
13449
|
+
*/
|
|
13450
|
+
isSessionTurnPending(sessionId: string): boolean;
|
|
13174
13451
|
/**
|
|
13175
13452
|
* Returns true when any session owned by `gezelId` has a turn in
|
|
13176
13453
|
* flight right now, regardless of project. A gezel can only think
|
|
@@ -13378,6 +13655,8 @@ declare class ChatManager extends LocalEngineRuntime {
|
|
|
13378
13655
|
* toolsets.
|
|
13379
13656
|
*/
|
|
13380
13657
|
autoAllowedToolsForSession(sessionId: string): Promise<Set<string>>;
|
|
13658
|
+
/** Runtime task read whose lifecycle includes recursive parent inheritance. */
|
|
13659
|
+
private readEffectiveTask;
|
|
13381
13660
|
/**
|
|
13382
13661
|
* Snapshot what the model would receive on the next turn for this
|
|
13383
13662
|
* session — exact system prompt + recent message thread + the
|
|
@@ -13541,8 +13820,15 @@ declare class ChatManager extends LocalEngineRuntime {
|
|
|
13541
13820
|
*/
|
|
13542
13821
|
private resolveRoutedModelForHandoff;
|
|
13543
13822
|
/**
|
|
13544
|
-
*
|
|
13545
|
-
*
|
|
13823
|
+
* Start the next gezel in a task step handoff and kick off its first turn
|
|
13824
|
+
* in the background. A handoff to a different gezel opens a fresh session.
|
|
13825
|
+
* Adjacent steps owned by the same gezel keep one task-scoped session so a
|
|
13826
|
+
* deterministic evidence step (for example, opening an assigned patch)
|
|
13827
|
+
* remains in context for the reasoning step that consumes it. The session
|
|
13828
|
+
* is re-pinned and rebuilt only after the prior turn is idle, because each
|
|
13829
|
+
* step may expose a different exact tool surface.
|
|
13830
|
+
*
|
|
13831
|
+
* Used by
|
|
13546
13832
|
* `TaskManager.completeStep`'s auto-handoff hook so advancing a step
|
|
13547
13833
|
* doesn't just flip state — it actually puts the assignee to work.
|
|
13548
13834
|
*
|
|
@@ -13609,7 +13895,8 @@ declare class ChatManager extends LocalEngineRuntime {
|
|
|
13609
13895
|
}>;
|
|
13610
13896
|
/**
|
|
13611
13897
|
* Lightweight "ping another gezel" path. Unlike `startHandoffSession`
|
|
13612
|
-
* (which is anchored to a task + phase and
|
|
13898
|
+
* (which is anchored to a task + phase and opens a fresh session when the
|
|
13899
|
+
* assignee changes),
|
|
13613
13900
|
* `messageGezel` drops a message into the target gezel's *active* project
|
|
13614
13901
|
* session via `ensureOrCreateSession`, so the continuity of their thread
|
|
13615
13902
|
* is preserved. Internal task re-drives may also pass `taskRef` + `stepId`
|
|
@@ -14554,6 +14841,12 @@ declare class ChatManager extends LocalEngineRuntime {
|
|
|
14554
14841
|
providerForGezel(gezelId: string, opts?: {
|
|
14555
14842
|
nightShift?: boolean;
|
|
14556
14843
|
}): Promise<ProviderName>;
|
|
14844
|
+
/**
|
|
14845
|
+
* Cheap, side-effect-free route preview for the composer. The send path
|
|
14846
|
+
* recomputes the same plan authoritatively; this endpoint exists so users
|
|
14847
|
+
* can see and tune the heuristic before committing the turn.
|
|
14848
|
+
*/
|
|
14849
|
+
previewTurnIntent(input: TurnIntentPreviewRequest): Promise<TurnIntentPlan>;
|
|
14557
14850
|
/**
|
|
14558
14851
|
* Concurrent one-shot width for a provider: its queue's configured
|
|
14559
14852
|
* concurrency once initialized (singleton or pooled local engine), else 1.
|
|
@@ -14850,6 +15143,18 @@ declare class ChatManager extends LocalEngineRuntime {
|
|
|
14850
15143
|
*/
|
|
14851
15144
|
private resolveTurnLibraryRecall;
|
|
14852
15145
|
private resolveTurnProjectRetrieval;
|
|
15146
|
+
/** Identity of the app-tool surface for a project; '' when no app offers any. */
|
|
15147
|
+
private appToolsFingerprint;
|
|
15148
|
+
/**
|
|
15149
|
+
* App-registered tools that apply to this session.
|
|
15150
|
+
*
|
|
15151
|
+
* Withheld from two kinds of session. A **visitor** session (app-serve) is
|
|
15152
|
+
* an untrusted guest of the project and never sees any extra toolset. A
|
|
15153
|
+
* provider that runs its own tool loop outside our bridge (Copilot, the CLI
|
|
15154
|
+
* providers) cannot reach an in-process server at all, so offering the tools
|
|
15155
|
+
* in its prompt would advertise names it could never call.
|
|
15156
|
+
*/
|
|
15157
|
+
private appToolBindingsFor;
|
|
14853
15158
|
private resolveUserPromptPrelude;
|
|
14854
15159
|
/**
|
|
14855
15160
|
* Get or build the live state for a session. On first use after process
|
|
@@ -14873,6 +15178,7 @@ declare class ChatManager extends LocalEngineRuntime {
|
|
|
14873
15178
|
private scenarioFileRepairConstraintActive;
|
|
14874
15179
|
private directFileWorkConstraintActive;
|
|
14875
15180
|
private projectOrchestrationConstraintActive;
|
|
15181
|
+
private exactCraftbookConstraintActive;
|
|
14876
15182
|
private staleWorkspaceFileRequest;
|
|
14877
15183
|
/**
|
|
14878
15184
|
* After bridges spawn, re-render the system prompt's tools block
|
|
@@ -15420,12 +15726,13 @@ type FolderScope = 'documents' | 'gezels' | 'projects';
|
|
|
15420
15726
|
|
|
15421
15727
|
type MoveJobStatus = 'queued' | 'running' | 'done' | 'error' | 'cancelled';
|
|
15422
15728
|
type MoveJobPhase = 'scan' | 'backup' | 'copy' | 'verify' | 'swap' | 'cleanup' | 'prune';
|
|
15729
|
+
type FolderMovePolicy = 'overwrite-all' | 'skip-all' | 'use-destination';
|
|
15423
15730
|
interface MoveJob {
|
|
15424
15731
|
id: string;
|
|
15425
15732
|
scope: FolderScope;
|
|
15426
15733
|
sourcePath: string;
|
|
15427
15734
|
destPath: string;
|
|
15428
|
-
conflictPolicy:
|
|
15735
|
+
conflictPolicy: FolderMovePolicy;
|
|
15429
15736
|
status: MoveJobStatus;
|
|
15430
15737
|
phase?: MoveJobPhase;
|
|
15431
15738
|
filesDone: number;
|
|
@@ -15446,6 +15753,9 @@ declare class JobManager {
|
|
|
15446
15753
|
private readonly jobs;
|
|
15447
15754
|
create(input: Pick<MoveJob, 'scope' | 'sourcePath' | 'destPath' | 'conflictPolicy'>): MoveJob;
|
|
15448
15755
|
get(id: string): MoveJob | undefined;
|
|
15756
|
+
/** Most recently created job, including its terminal state. The folders
|
|
15757
|
+
* settings view uses this to recover progress after it is remounted. */
|
|
15758
|
+
latest(): MoveJob | undefined;
|
|
15449
15759
|
/** True when at least one job is in `queued` or `running` state. The
|
|
15450
15760
|
* HTTP layer rejects new moves while a job is active to keep semantics
|
|
15451
15761
|
* simple — only one externalization in flight at a time. */
|
|
@@ -16209,6 +16519,25 @@ interface TaskRunnerDispatcher {
|
|
|
16209
16519
|
* conservative one-wide admission fallback. Optional for test dispatchers.
|
|
16210
16520
|
*/
|
|
16211
16521
|
ensureProvider?(name: ProviderName): Promise<LLMProvider | null>;
|
|
16522
|
+
/**
|
|
16523
|
+
* Read-only capacity for pool-routed local providers. Their model-specific
|
|
16524
|
+
* provider queues are not addressable through `getProvider(name)`, but the
|
|
16525
|
+
* resident pool can fold those queues into one provider-level summary.
|
|
16526
|
+
*/
|
|
16527
|
+
getPooledProviderQueueSummary?(name: ProviderName): {
|
|
16528
|
+
running: number;
|
|
16529
|
+
runningBackground: number;
|
|
16530
|
+
queuedInteractive: number;
|
|
16531
|
+
queuedBackground: number;
|
|
16532
|
+
backgroundConcurrency: number;
|
|
16533
|
+
maxConcurrency: number;
|
|
16534
|
+
active: Array<{
|
|
16535
|
+
sessionId?: string;
|
|
16536
|
+
}>;
|
|
16537
|
+
pending: Array<{
|
|
16538
|
+
sessionId?: string;
|
|
16539
|
+
}>;
|
|
16540
|
+
} | null;
|
|
16212
16541
|
}
|
|
16213
16542
|
interface TaskRunnerOptions {
|
|
16214
16543
|
store: Store;
|
|
@@ -16281,6 +16610,14 @@ declare class TaskRunner {
|
|
|
16281
16610
|
private readonly nightQuotaHold;
|
|
16282
16611
|
private readonly pending;
|
|
16283
16612
|
private readonly activeDispatches;
|
|
16613
|
+
/**
|
|
16614
|
+
* Child tasks admitted into one declarative-fanout cohort. Admission lasts
|
|
16615
|
+
* for the child's whole task, not one step, so a two-step shard completes
|
|
16616
|
+
* read → review before the scheduler opens another sibling and displaces
|
|
16617
|
+
* its local-model prefix cache. Keyed by parent + provider because those
|
|
16618
|
+
* are the resources whose live background width defines the window.
|
|
16619
|
+
*/
|
|
16620
|
+
private readonly fanoutAdmissions;
|
|
16284
16621
|
private nextId;
|
|
16285
16622
|
/** Why `dispatchable` work isn't moving, as of the last tick. */
|
|
16286
16623
|
private holdReason;
|
|
@@ -17317,6 +17654,8 @@ declare class KnowledgeManager {
|
|
|
17317
17654
|
maxResults: number;
|
|
17318
17655
|
projectId?: string;
|
|
17319
17656
|
}): Promise<UnifiedSearchResult[]>;
|
|
17657
|
+
/** A document the lexical arms named but no chunk carries: cite it with its lead paragraph. */
|
|
17658
|
+
private toDocumentResult;
|
|
17320
17659
|
/** A profile's query vector, or undefined when its model is unavailable (that group searches FTS). */
|
|
17321
17660
|
private embedForProfile;
|
|
17322
17661
|
private toResult;
|
|
@@ -18586,6 +18925,12 @@ interface OllamaEmulationController {
|
|
|
18586
18925
|
interface ServiceContext extends EngineContext {
|
|
18587
18926
|
store: Store;
|
|
18588
18927
|
chatEvents: ChatEventBus;
|
|
18928
|
+
/**
|
|
18929
|
+
* Tools connected apps register at runtime and answer themselves. Lives in
|
|
18930
|
+
* memory only: a registration is a claim the app is standing by, which no
|
|
18931
|
+
* restart can carry across.
|
|
18932
|
+
*/
|
|
18933
|
+
appToolRelays: AppToolRelayRegistry;
|
|
18589
18934
|
chat: ChatManager;
|
|
18590
18935
|
/** Iframe-shim runtime errors, looped back into chat preludes. */
|
|
18591
18936
|
previewLog: PreviewLogBuffer;
|