zidane 7.1.5 → 7.1.8
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/README.md +4 -0
- package/dist/{acp-DbYGzaVK.js → acp-BxRfclPQ.js} +3 -3
- package/dist/{acp-DbYGzaVK.js.map → acp-BxRfclPQ.js.map} +1 -1
- package/dist/acp-cli.js +2 -2
- package/dist/acp.d.ts +1 -1
- package/dist/acp.js +1 -1
- package/dist/{agent-BlGt76qk.js → agent-CJbmpTmA.js} +94 -106
- package/dist/agent-CJbmpTmA.js.map +1 -0
- package/dist/agent.d.ts +1 -1
- package/dist/agent.js +1 -1
- package/dist/{approvals-BznYVVGD.js → approvals-DMxUgyVd.js} +27 -16
- package/dist/approvals-DMxUgyVd.js.map +1 -0
- package/dist/chat/pure.d.ts +3 -3
- package/dist/chat.d.ts +5 -5
- package/dist/chat.js +2 -2
- package/dist/contexts/daytona.d.ts +1 -1
- package/dist/contexts/e2b.d.ts +1 -1
- package/dist/daemon-cli.js +1 -1
- package/dist/eval.d.ts +1 -1
- package/dist/extensions.d.ts +1 -1
- package/dist/extensions.js +1 -1
- package/dist/{fetch-url-ma-5_p0p.js → fetch-url-DX75gpL0.js} +3 -2
- package/dist/fetch-url-DX75gpL0.js.map +1 -0
- package/dist/headless.d.ts +1 -1
- package/dist/headless.js +1 -1
- package/dist/{index-D9ntsW7o.d.ts → index-BMOl2Bog.d.ts} +5 -5
- package/dist/index-BMOl2Bog.d.ts.map +1 -0
- package/dist/{index-Dw8ruU-j.d.ts → index-DCYh6lOp.d.ts} +56 -5
- package/dist/index-DCYh6lOp.d.ts.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -2
- package/dist/{ipc-CNrpBs9P.js → ipc-BqEflvqC.js} +2 -2
- package/dist/{ipc-CNrpBs9P.js.map → ipc-BqEflvqC.js.map} +1 -1
- package/dist/ipc.d.ts +5 -5
- package/dist/ipc.js +3 -3
- package/dist/mcp.d.ts +1 -1
- package/dist/output/stream-json.d.ts +1 -1
- package/dist/output/terminal.d.ts +1 -1
- package/dist/plugins.d.ts +1 -1
- package/dist/presets.d.ts +1 -1
- package/dist/presets.js +1 -1
- package/dist/prompts-Pqc3JdW_.d.ts +116 -0
- package/dist/prompts-Pqc3JdW_.d.ts.map +1 -0
- package/dist/providers/anthropic.d.ts +1 -1
- package/dist/providers/arcee.d.ts +1 -1
- package/dist/providers/baseten.d.ts +1 -1
- package/dist/providers/cerebras.d.ts +1 -1
- package/dist/providers/local.d.ts +1 -1
- package/dist/providers/openai-compat.d.ts +1 -1
- package/dist/providers/openai.d.ts +1 -1
- package/dist/providers/openrouter.d.ts +1 -1
- package/dist/providers/xai.d.ts +1 -1
- package/dist/providers.d.ts +1 -1
- package/dist/restate.d.ts +15 -3
- package/dist/restate.d.ts.map +1 -1
- package/dist/restate.js +26 -13
- package/dist/restate.js.map +1 -1
- package/dist/session/sqlite.d.ts +1 -1
- package/dist/session.d.ts +1 -1
- package/dist/{shell-path-3tZ2lyQ2.js → shell-path-DeSQjoHJ.js} +4 -4
- package/dist/{shell-path-3tZ2lyQ2.js.map → shell-path-DeSQjoHJ.js.map} +1 -1
- package/dist/skills.d.ts +1 -1
- package/dist/{tool-formatters-CJoSmRjH.d.ts → tool-formatters-BDm0tjgy.d.ts} +2 -2
- package/dist/{tool-formatters-CJoSmRjH.d.ts.map → tool-formatters-BDm0tjgy.d.ts.map} +1 -1
- package/dist/tools/fetch-url.d.ts +1 -1
- package/dist/tools/fetch-url.d.ts.map +1 -1
- package/dist/tools/fetch-url.js +1 -1
- package/dist/tools/prompts.d.ts +2 -0
- package/dist/tools/prompts.js +164 -0
- package/dist/tools/prompts.js.map +1 -0
- package/dist/tools/web-search.d.ts +1 -1
- package/dist/tools/web-search.d.ts.map +1 -1
- package/dist/tools/web-search.js +3 -3
- package/dist/tools/web-search.js.map +1 -1
- package/dist/tools.d.ts +3 -2
- package/dist/tools.js +3 -2
- package/dist/{transcript-anchors-nWzUc3WT.d.ts → transcript-anchors-DjcEsOYq.d.ts} +2 -2
- package/dist/{transcript-anchors-nWzUc3WT.d.ts.map → transcript-anchors-DjcEsOYq.d.ts.map} +1 -1
- package/dist/tui.d.ts +3 -3
- package/dist/tui.js +3 -3
- package/dist/{turn-operations-GRw5vbtr.d.ts → turn-operations-Rqk3E0Ue.d.ts} +3 -3
- package/dist/{turn-operations-GRw5vbtr.d.ts.map → turn-operations-Rqk3E0Ue.d.ts.map} +1 -1
- package/dist/types.d.ts +3 -2
- package/docs/ARCHITECTURE.md +14 -2
- package/docs/SKILL.md +31 -1
- package/package.json +6 -1
- package/dist/agent-BlGt76qk.js.map +0 -1
- package/dist/approvals-BznYVVGD.js.map +0 -1
- package/dist/fetch-url-ma-5_p0p.js.map +0 -1
- package/dist/index-D9ntsW7o.d.ts.map +0 -1
- package/dist/index-Dw8ruU-j.d.ts.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { E as getModelCatalog, b as sanitizeToolSpecs, f as mapOAIFinishReason, j as setModelCatalog, l as classifyOpenAICompatError, m as openaiCompat, n as OpenAICompatHttpError, y as sanitizeToolSchema } from "./openai-compat-Dy56weK8.js";
|
|
2
2
|
import { c as toolOutputBudgetByteLength, l as toolOutputByteLength, u as toolResultToText } from "./types-CWgENVLY.js";
|
|
3
|
-
import { $ as ExtensionInstallError, $n as defaultRepeatGuardTracked, A as buildPostCompactAttachments, An as resolveExtensionConfigValue, B as buildFullCompactPrompt, Bt as multiEdit, Ct as basic_default, D as resolvePersistDir, Dn as isValidExtensionConfigItem, E as resolveMcpWarningsDir, En as coerceExtensionConfigInput, Et as waitTask, F as BASE_INSTRUCTIONS, Ft as createShellTool, G as sliceForCompaction, Gn as renderArtifactRow, Gt as createInteractionTool, H as buildUpToCompactPrompt, Ht as formatModelLine, I as NO_TOOLS_PREAMBLE, In as BUILTIN_ARTIFACT_KINDS, J as truncateHeadForPtlRetry, Jn as AUTO_COMPACT_MIN_GROWTH_FRACTION, Jt as edit, K as stripImagesFromTurns, Kn as resolveArtifactKind, Kt as grep, L as TRAILER, Ln as artifactKindLabel, M as selectFilesFromSession, Mn as toWireConfigSchema, Mt as createSkillsRunScriptTool, N as selectRecentFiles, Nn as EXTENSION_BUS_MAX_PAYLOAD_BYTES, Nt as createSkillsReadTool, O as resolveSessionDir, On as isValidExtensionConfigValue, Ot as createSpawnTool, P as compactConversation, Pn as createExtensionBus, Q as createExtensionPromptBridge, Qn as defaultRepeatGuardNormalize, R as buildCompactPrompt, S as migrateSessionArtifactDirs, St as basicTools, T as resolveLegacySessionDir, Tn as clampExtensionConfigNumber, U as ANCHOR_PREVIEW_MAX_CHARS, Ut as matchModelEntries, V as buildTailCompactPrompt, Vt as createModelSearchTool, W as anchorPreviewFor, Wn as refreshArtifact, X as CompactPromptTooLongError, Xn as effectiveContextWindow, Xt as artifacts_default, Y as CompactInvalidInputError, Yn as OUTPUT_RESERVE_TOKENS, Yt as validateToolArgs, Z as EMPTY_EXTENSION_REGISTRY, Zn as shouldAutoCompact, _ as PERSISTED_STUB_PREFIX, _n as discoverExtensions, _t as createArtifactsSurface, a as stagedToolState, ar as hydrateReadStateFromSessionAsync, at as removeInstalledExtension, b as cleanupPersistedSession, bn as parseExtensionScanPathEnv, bt as composePresets, c as INTERRUPT_MESSAGE_FOR_TOOL_USE, ct as discoverAndBuildExtensionRegistry, d as TOOL_USE_SKIPPED_MESSAGE, dt as composeExtensionPreset, er as normalizeShellCommand, et as fetchExtensionSource, f as applyCompactSummaryCutoff, ft as disposeExtensionRegistry, gn as defaultExtensionScanPaths, gt as partitionExtensionCatalog, hn as ENTRY_CANDIDATES, ht as mergeContributions, i as isToolStateOps, ir as hydrateReadStateFromSession, it as readExtensionInstallProvenance, j as selectFilesFromReadState, jn as sanitizeExtensionConfigActionPatch, jt as createSkillsUseTool, k as resolveTasksDir, kn as resolveExtensionConfig, kt as isSpawnTool, l as SHELL_CASCADE_CANCEL_MESSAGE, lt as buildExtensionPreset, m as renderStaleReadNotice, mn as registerExtensionHostModules, n as DEFAULT_MAX_VALUE_BYTES, nr as getReadState, nt as listExtensionCandidates, o as normalizeProviders, or as readStateKey, ot as updateInstalledExtension, p as collectNewlyStaleReadPaths, pt as filterExtensionRegistry, q as summaryToTurn, qn as createArtifactDetectHook, qt as glob, r as createToolStateController, rr as hashContent, rt as parseExtensionInstallSource, s as resolveModelTargets, sr as resolveReadStateMap, st as createExtensionHud, t as createAgent, tr as stableStringify, tt as installExtensionFromSpec, u as TOOL_USE_CANCELLED_MESSAGE, ut as buildExtensionRegistry, v as PERSISTENCE_PREVIEW_BYTES, vn as inlineLoadedExtension, vt as createExtensionHostRuntimeBridge, w as resolveLegacyPersistDir, wn as defineExtension, x as maybePersistToolResult, xn as scanExtensionDirectories, xt as definePreset, y as buildPersistedStub, yn as isExtensionDefinition, yt as createWorkspaceSurface, z as buildFromCompactPrompt } from "./agent-
|
|
3
|
+
import { $ as ExtensionInstallError, $n as defaultRepeatGuardTracked, A as buildPostCompactAttachments, An as resolveExtensionConfigValue, B as buildFullCompactPrompt, Bt as multiEdit, Ct as basic_default, D as resolvePersistDir, Dn as isValidExtensionConfigItem, E as resolveMcpWarningsDir, En as coerceExtensionConfigInput, Et as waitTask, F as BASE_INSTRUCTIONS, Ft as createShellTool, G as sliceForCompaction, Gn as renderArtifactRow, Gt as createInteractionTool, H as buildUpToCompactPrompt, Ht as formatModelLine, I as NO_TOOLS_PREAMBLE, In as BUILTIN_ARTIFACT_KINDS, J as truncateHeadForPtlRetry, Jn as AUTO_COMPACT_MIN_GROWTH_FRACTION, Jt as edit, K as stripImagesFromTurns, Kn as resolveArtifactKind, Kt as grep, L as TRAILER, Ln as artifactKindLabel, M as selectFilesFromSession, Mn as toWireConfigSchema, Mt as createSkillsRunScriptTool, N as selectRecentFiles, Nn as EXTENSION_BUS_MAX_PAYLOAD_BYTES, Nt as createSkillsReadTool, O as resolveSessionDir, On as isValidExtensionConfigValue, Ot as createSpawnTool, P as compactConversation, Pn as createExtensionBus, Q as createExtensionPromptBridge, Qn as defaultRepeatGuardNormalize, R as buildCompactPrompt, S as migrateSessionArtifactDirs, St as basicTools, T as resolveLegacySessionDir, Tn as clampExtensionConfigNumber, U as ANCHOR_PREVIEW_MAX_CHARS, Ut as matchModelEntries, V as buildTailCompactPrompt, Vt as createModelSearchTool, W as anchorPreviewFor, Wn as refreshArtifact, X as CompactPromptTooLongError, Xn as effectiveContextWindow, Xt as artifacts_default, Y as CompactInvalidInputError, Yn as OUTPUT_RESERVE_TOKENS, Yt as validateToolArgs, Z as EMPTY_EXTENSION_REGISTRY, Zn as shouldAutoCompact, _ as PERSISTED_STUB_PREFIX, _n as discoverExtensions, _t as createArtifactsSurface, a as stagedToolState, ar as hydrateReadStateFromSessionAsync, at as removeInstalledExtension, b as cleanupPersistedSession, bn as parseExtensionScanPathEnv, bt as composePresets, c as INTERRUPT_MESSAGE_FOR_TOOL_USE, ct as discoverAndBuildExtensionRegistry, d as TOOL_USE_SKIPPED_MESSAGE, dt as composeExtensionPreset, er as normalizeShellCommand, et as fetchExtensionSource, f as applyCompactSummaryCutoff, ft as disposeExtensionRegistry, gn as defaultExtensionScanPaths, gt as partitionExtensionCatalog, hn as ENTRY_CANDIDATES, ht as mergeContributions, i as isToolStateOps, ir as hydrateReadStateFromSession, it as readExtensionInstallProvenance, j as selectFilesFromReadState, jn as sanitizeExtensionConfigActionPatch, jt as createSkillsUseTool, k as resolveTasksDir, kn as resolveExtensionConfig, kt as isSpawnTool, l as SHELL_CASCADE_CANCEL_MESSAGE, lt as buildExtensionPreset, m as renderStaleReadNotice, mn as registerExtensionHostModules, n as DEFAULT_MAX_VALUE_BYTES, nr as getReadState, nt as listExtensionCandidates, o as normalizeProviders, or as readStateKey, ot as updateInstalledExtension, p as collectNewlyStaleReadPaths, pt as filterExtensionRegistry, q as summaryToTurn, qn as createArtifactDetectHook, qt as glob, r as createToolStateController, rr as hashContent, rt as parseExtensionInstallSource, s as resolveModelTargets, sr as resolveReadStateMap, st as createExtensionHud, t as createAgent, tr as stableStringify, tt as installExtensionFromSpec, u as TOOL_USE_CANCELLED_MESSAGE, ut as buildExtensionRegistry, v as PERSISTENCE_PREVIEW_BYTES, vn as inlineLoadedExtension, vt as createExtensionHostRuntimeBridge, w as resolveLegacyPersistDir, wn as defineExtension, x as maybePersistToolResult, xn as scanExtensionDirectories, xt as definePreset, y as buildPersistedStub, yn as isExtensionDefinition, yt as createWorkspaceSurface, z as buildFromCompactPrompt } from "./agent-CJbmpTmA.js";
|
|
4
4
|
import { A as zodToJsonSchema, F as parseCommandInvocation, I as localReliabilityBehavior, M as commandBlocksToContent, N as commandSteps, O as isStandardSchema, P as executeCommand, S as resolveInlineSuggestion, _ as resolveExtensionDocsDir, a as loginMcpServer, b as createPathAutocompleteProvider, c as SKILL_EDIT_METADATA_KEY, d as buildZidaneExtensionSkill, f as buildZidaneSkillEditSkill, g as readSkillEditMarker, h as extensionScaffold, i as createMetricsHooks, j as commandBlockToEvent, k as resolveSchemaInput, l as ZIDANE_EXTENSION_SKILL_NAME, m as extensionDirForCwd, n as createTracingHooks, o as startOAuthCallback, p as editSessionMetadata, r as createMutationValidationHooks, s as EXTENSION_EDIT_METADATA_KEY, t as GEN_AI_ATTRIBUTES, u as ZIDANE_SKILL_EDIT_SKILL_NAME, v as withZidaneExtensionSkill, w as generateStructuredData, x as patchInlineGhost, y as withZidaneSkillEditSkill } from "./src-CkNQKFKr.js";
|
|
5
5
|
import { n as estimateTokens, r as utf8ByteLength, t as BYTES_PER_TOKEN } from "./utils-ngQzYzZD.js";
|
|
6
6
|
import { l as resolveWritableRoots, o as isolationAvailability, r as createProcessContext, s as parseAllowWriteSetting, t as resolveDetachedTasksCapability, u as resolveWritableRootsAsync } from "./contexts-CRE9pw07.js";
|
|
@@ -12,6 +12,7 @@ import { a as PLUGIN_MCP_FILE, c as validatePluginManifest, d as isSupportedAgen
|
|
|
12
12
|
import { r as formatLogLine } from "./logs-view-CWG8aUAG.js";
|
|
13
13
|
import { a as createRingBufferSink, i as createLoggingHooks, o as fanoutSink, r as createLogger, s as jsonSink, t as consoleSink } from "./logger--C1VQjwJ.js";
|
|
14
14
|
import { n as originPinnedFetch } from "./origin-pinned-fetch-CqG8VZIq.js";
|
|
15
|
+
import { toolPrompts } from "./tools/prompts.js";
|
|
15
16
|
import { _ as hasAuthorizationHeader, a as expandEnvPlaceholders, c as normalizeMcpBlocks, d as resultToString, g as createMemoryMcpCredentialStore, h as McpOAuthProvider, l as normalizeMcpServers, n as connectMcpServers, o as expandMcpConfigEnv, u as resolveTransportConfig } from "./mcp-CgNd-f3F.js";
|
|
16
17
|
import { SYSTEM_PROMPT_BOUNDARY, appendDynamicSection, appendStaticSection, hasSystemPromptBoundary, joinSystemPrompt, renderSystemForWire, replaceDynamicSection, splitSystemPrompt } from "./prompt.js";
|
|
17
18
|
import { _ as toOpenAI, a as detectTurnInterruption, c as ensureToolResultPairing, d as fromOpenAI, f as reasoningWireAction, g as toAnthropic, h as sanitizeHistoryForProvider, i as autoDetectAndConvert, l as filterUnresolvedToolUses, n as SYNTHETIC_TOOL_RESULT_PLACEHOLDER, o as dropInvalidToolPairings, p as remintDuplicateToolCallIds, r as TOOL_USE_INTERRUPTED_MARKER, s as ensureEndsWithUserMessage, t as ORPHANED_TOOL_RESULT_MARKER, u as fromAnthropic, v as toWireMessages } from "./messages-2jcOA_5R.js";
|
|
@@ -33,4 +34,4 @@ import { local } from "./providers/local.js";
|
|
|
33
34
|
import { openai } from "./providers/openai.js";
|
|
34
35
|
import { openrouter } from "./providers/openrouter.js";
|
|
35
36
|
import { xai } from "./providers/xai.js";
|
|
36
|
-
export { ANCHOR_PREVIEW_MAX_CHARS, ARTIFACTS_METADATA_KEY, ARTIFACTS_PER_SESSION_CAP, ARTIFACT_KINDS, AUTO_COMPACT_MIN_GROWTH_FRACTION, AgentAbortedError, AgentBudgetExceededError, AgentContextExceededError, AgentLengthResumeExhaustedError, AgentProviderError, AgentToolNotAllowedError, AgentToolPairingError, BASE_INSTRUCTIONS, BUILTIN_ARTIFACT_KINDS, BYTES_PER_TOKEN, CONTEXT_EXCEEDED_MESSAGE_PATTERNS, CompactInvalidInputError, CompactPromptTooLongError, DEFAULT_MAX_VALUE_BYTES, EFFICIENCY_METRICS, EMPTY_EXTENSION_REGISTRY, ENTRY_CANDIDATES, EXTENSION_BUS_MAX_PAYLOAD_BYTES, EXTENSION_EDIT_METADATA_KEY, EvalMetricError, ExtensionInstallError, GEN_AI_ATTRIBUTES, IMPLICITLY_ALLOWED_SKILL_TOOLS, INTERRUPT_MESSAGE_FOR_TOOL_USE, McpOAuthProvider, NO_TOOLS_PREAMBLE, ORPHANED_TOOL_RESULT_MARKER, OUTPUT_RESERVE_TOKENS, OpenAICompatHttpError, OperationTimeoutError, PERSISTED_STUB_PREFIX, PERSISTENCE_PREVIEW_BYTES, PLUGIN_MANIFEST_FILE, PLUGIN_MCP_FILE, PLUGIN_SKILLS_DIR, SHELL_CASCADE_CANCEL_MESSAGE, SKILL_EDIT_METADATA_KEY, SUPPORTED_AGENT_PLUGINS_VERSIONS, SYNTHETIC_TOOL_RESULT_PLACEHOLDER, SYSTEM_PROMPT_BOUNDARY, SkillInstallError, TOOL_USE_CANCELLED_MESSAGE, TOOL_USE_INTERRUPTED_MARKER, TOOL_USE_SKIPPED_MESSAGE, TRAILER, ZIDANE_EXTENSION_SKILL_NAME, ZIDANE_SKILL_EDIT_SKILL_NAME, agentPluginsSchemaId, anchorPreviewFor, anthropic, appendDynamicSection, appendStaticSection, applyAnthropicCacheBreakpoints, applyCompactSummaryCutoff, arcee, artifactKindLabel, artifactPath, artifacts_default as artifactsPreset, autoDetectAndConvert, baseten, basic_default as basic, basicTools, buildCatalog, buildCompactPrompt, buildEvalRunSummary, buildExtensionPreset, buildExtensionRegistry, buildFromCompactPrompt, buildFullCompactPrompt, buildPersistedStub, buildPostCompactAttachments, buildRegisteredEvals, buildTailCompactPrompt, buildTrajectory, buildUpToCompactPrompt, buildZidaneExtensionSkill, buildZidaneSkillEditSkill, cerebras, clampExtensionConfigNumber, classifyOpenAICompatError, cleanupPersistedSession, clearRegisteredEvals, coerceExtensionConfigInput, collectNewlyStaleReadPaths, commandBlockToEvent, commandBlocksToContent, commandSteps, compactConversation, composeExtensionPreset, composePresets, computeEvalTagScores, connectMcpServers, consoleSink, createAgent, createArtifactDetectHook, createArtifactsSurface, createEvalAgent, createEvalRunReporter, createExtensionBus, createExtensionHostRuntimeBridge, createExtensionHud, createExtensionPromptBridge, createFileMapStore, createInteractionTool, createLogger, createLoggingHooks, createMemoryMcpCredentialStore, createMemoryStore, createMetricsHooks, createModelSearchTool, createMutationValidationHooks, createPathAutocompleteProvider, createProcessContext, createRemoteStore, createReusableExecutionContext, createRingBufferSink, createRunSummaryCollector, createSandboxContext, createSession, createShellTool, createSkillActivationState, createSkillsReadTool, createSkillsRunScriptTool, createSkillsUseTool, createSpawnTool, createToolStateController, createTracingHooks, createWorkspaceSurface, credentialsFilePath, credentialsFromParams, defaultExtensionScanPaths, defaultPluginDataRoot, defaultRepeatGuardNormalize, defaultRepeatGuardTracked, defineEval, defineExtension, defineMetrics, definePreset, defineSkill, detectTurnInterruption, diffCacheDimensions, discoverAndBuildExtensionRegistry, discoverExtensions, discoverSkills, disposeExtensionRegistry, dropInvalidToolPairings, edit, editSessionMetadata, effectiveContextWindow, efficiencyMetricValues, emitEfficiencyMetrics, ensureEndsWithUserMessage, ensureToolResultPairing, errorMessage, estimateTokens, executeCommand, expandEnvPlaceholders, expandMcpConfigEnv, expandPluginVars, extensionDirForCwd, extensionScaffold, extractRuntimeCredentials, fanoutSink, fetchExtensionSource, fileContains, fileContentQuality, fileExists, fileExistsOneOf, filterExtensionRegistry, filterUnresolvedToolUses, finalizeEvalMetrics, flattenTurns, fnv1a32, formatEvalCaseSummary, formatEvalRunSummary, formatLogLine, formatModelLine, formatTokenUsage, formatTrajectoryLine, fromAnthropic, fromOpenAI, functionalityMetric, generateStructuredData, getModelCatalog, getOAuthApiKey, getOAuthProvider, getReadState, glob, grep, hasAuthorizationHeader, hasSystemPromptBoundary, hashContent, hashMessages, headlessEventToJsonl, hydrateReadStateFromSession, hydrateReadStateFromSessionAsync, inlineLoadedExtension, installAllowedToolsGate, installCacheBreakLogger, installExtensionFromSpec, installSkillFromSpec, interpolateShellCommands, isExtensionDefinition, isOAuthAccessToken, isSpawnTool, isStandardSchema, isSupportedAgentPluginsVersion, isToolAllowedByUnion, isToolStateOps, isValidExtensionConfigItem, isValidExtensionConfigValue, isolationAvailability, joinSystemPrompt, jsonSink, listExtensionCandidates, listSkillCandidates, llmJudge, loadAgentPlugin, loadSession, local, localReliabilityBehavior, loginMcpServer, mapOAIFinishReason, matchModelEntries, matchesAllowedTool, matchesArtifactFilter, matchesContextExceeded, maybePersistToolResult, mergeArtifact, mergeContributions, migrateSessionArtifactDirs, mistral, multiEdit, normalizeArtifactInput, normalizeMcpBlocks, normalizeMcpServers, normalizeMetric, normalizeProviders, normalizeShellCommand, openai, openaiCompat, openrouter, originPinnedFetch, parseAllowWriteSetting, parseAllowedToolPattern, parseCommandInvocation, parseExtensionInstallSource, parseExtensionScanPathEnv, parsePluginManifest, parseSchemaId, parseSkillFile, parseSkillInstallSpec, partitionExtensionCatalog, patchInlineGhost, readExtensionInstallProvenance, readOAuthCredentials, readSkillEditMarker, readSkillProvenance, readStateKey, reasoningWireAction, refreshAnthropicToken, refreshArtifact, refreshOpenAICodexToken, registerCustomOAuthProvider, registerEvalTests, registerExtensionHostModules, registerOAuthProvider, relativeArtifactPath, remintDuplicateToolCallIds, removeInstalledExtension, renderArtifactRow, renderStaleReadNotice, renderSystemForWire, replaceDynamicSection, resolveArtifactKind, resolveCompletionSubmit, resolveDetachedTasksCapability, resolveExtensionConfig, resolveExtensionConfigValue, resolveExtensionDocsDir, resolveInlineSuggestion, resolveLegacyPersistDir, resolveLegacySessionDir, resolveMcpWarningsDir, resolveModelTargets, resolveOAuthApiKey, resolvePersistDir, resolveReadStateMap, resolveSchemaInput, resolveSessionDir, resolveSkills, resolveTasksDir, resolveTransportConfig, resolveWritableRoots, resolveWritableRootsAsync, resultToString, runEvalCase, runHeadless, sanitizeExtensionConfigActionPatch, sanitizeHistoryForProvider, sanitizeToolSchema, sanitizeToolSpecs, scanExtensionDirectories, selectArtifactEvictions, selectFilesFromReadState, selectFilesFromSession, selectRecentFiles, setModelCatalog, shouldAutoCompact, sliceForCompaction, snapshotCacheDimensions, sortArtifacts, splitSystemPrompt, stableStringify, stagedToolState, startOAuthCallback, statsByModel, statusCompleted, stripImagesFromTurns, stripShellInterpolations, summaryToTurn, toAnthropic, toOpenAI, toTypedError, toWireConfigSchema, toWireMessages, toolOutputBudgetByteLength, toolOutputByteLength, toolResultToText, transcriptToOpenAIMessages, truncateHeadForPtlRetry, updateInstalledExtension, utf8ByteLength, validatePluginManifest, validateResourcePath, validateResourcePathReal, validateSkillForWrite, validateSkillName, validateToolArgs, waitTask, withZidaneExtensionSkill, withZidaneSkillEditSkill, writeOAuthCredentials, writeSkillToDisk, writeSkillsToDisk, xai, zodToJsonSchema };
|
|
37
|
+
export { ANCHOR_PREVIEW_MAX_CHARS, ARTIFACTS_METADATA_KEY, ARTIFACTS_PER_SESSION_CAP, ARTIFACT_KINDS, AUTO_COMPACT_MIN_GROWTH_FRACTION, AgentAbortedError, AgentBudgetExceededError, AgentContextExceededError, AgentLengthResumeExhaustedError, AgentProviderError, AgentToolNotAllowedError, AgentToolPairingError, BASE_INSTRUCTIONS, BUILTIN_ARTIFACT_KINDS, BYTES_PER_TOKEN, CONTEXT_EXCEEDED_MESSAGE_PATTERNS, CompactInvalidInputError, CompactPromptTooLongError, DEFAULT_MAX_VALUE_BYTES, EFFICIENCY_METRICS, EMPTY_EXTENSION_REGISTRY, ENTRY_CANDIDATES, EXTENSION_BUS_MAX_PAYLOAD_BYTES, EXTENSION_EDIT_METADATA_KEY, EvalMetricError, ExtensionInstallError, GEN_AI_ATTRIBUTES, IMPLICITLY_ALLOWED_SKILL_TOOLS, INTERRUPT_MESSAGE_FOR_TOOL_USE, McpOAuthProvider, NO_TOOLS_PREAMBLE, ORPHANED_TOOL_RESULT_MARKER, OUTPUT_RESERVE_TOKENS, OpenAICompatHttpError, OperationTimeoutError, PERSISTED_STUB_PREFIX, PERSISTENCE_PREVIEW_BYTES, PLUGIN_MANIFEST_FILE, PLUGIN_MCP_FILE, PLUGIN_SKILLS_DIR, SHELL_CASCADE_CANCEL_MESSAGE, SKILL_EDIT_METADATA_KEY, SUPPORTED_AGENT_PLUGINS_VERSIONS, SYNTHETIC_TOOL_RESULT_PLACEHOLDER, SYSTEM_PROMPT_BOUNDARY, SkillInstallError, TOOL_USE_CANCELLED_MESSAGE, TOOL_USE_INTERRUPTED_MARKER, TOOL_USE_SKIPPED_MESSAGE, TRAILER, ZIDANE_EXTENSION_SKILL_NAME, ZIDANE_SKILL_EDIT_SKILL_NAME, agentPluginsSchemaId, anchorPreviewFor, anthropic, appendDynamicSection, appendStaticSection, applyAnthropicCacheBreakpoints, applyCompactSummaryCutoff, arcee, artifactKindLabel, artifactPath, artifacts_default as artifactsPreset, autoDetectAndConvert, baseten, basic_default as basic, basicTools, buildCatalog, buildCompactPrompt, buildEvalRunSummary, buildExtensionPreset, buildExtensionRegistry, buildFromCompactPrompt, buildFullCompactPrompt, buildPersistedStub, buildPostCompactAttachments, buildRegisteredEvals, buildTailCompactPrompt, buildTrajectory, buildUpToCompactPrompt, buildZidaneExtensionSkill, buildZidaneSkillEditSkill, cerebras, clampExtensionConfigNumber, classifyOpenAICompatError, cleanupPersistedSession, clearRegisteredEvals, coerceExtensionConfigInput, collectNewlyStaleReadPaths, commandBlockToEvent, commandBlocksToContent, commandSteps, compactConversation, composeExtensionPreset, composePresets, computeEvalTagScores, connectMcpServers, consoleSink, createAgent, createArtifactDetectHook, createArtifactsSurface, createEvalAgent, createEvalRunReporter, createExtensionBus, createExtensionHostRuntimeBridge, createExtensionHud, createExtensionPromptBridge, createFileMapStore, createInteractionTool, createLogger, createLoggingHooks, createMemoryMcpCredentialStore, createMemoryStore, createMetricsHooks, createModelSearchTool, createMutationValidationHooks, createPathAutocompleteProvider, createProcessContext, createRemoteStore, createReusableExecutionContext, createRingBufferSink, createRunSummaryCollector, createSandboxContext, createSession, createShellTool, createSkillActivationState, createSkillsReadTool, createSkillsRunScriptTool, createSkillsUseTool, createSpawnTool, createToolStateController, createTracingHooks, createWorkspaceSurface, credentialsFilePath, credentialsFromParams, defaultExtensionScanPaths, defaultPluginDataRoot, defaultRepeatGuardNormalize, defaultRepeatGuardTracked, defineEval, defineExtension, defineMetrics, definePreset, defineSkill, detectTurnInterruption, diffCacheDimensions, discoverAndBuildExtensionRegistry, discoverExtensions, discoverSkills, disposeExtensionRegistry, dropInvalidToolPairings, edit, editSessionMetadata, effectiveContextWindow, efficiencyMetricValues, emitEfficiencyMetrics, ensureEndsWithUserMessage, ensureToolResultPairing, errorMessage, estimateTokens, executeCommand, expandEnvPlaceholders, expandMcpConfigEnv, expandPluginVars, extensionDirForCwd, extensionScaffold, extractRuntimeCredentials, fanoutSink, fetchExtensionSource, fileContains, fileContentQuality, fileExists, fileExistsOneOf, filterExtensionRegistry, filterUnresolvedToolUses, finalizeEvalMetrics, flattenTurns, fnv1a32, formatEvalCaseSummary, formatEvalRunSummary, formatLogLine, formatModelLine, formatTokenUsage, formatTrajectoryLine, fromAnthropic, fromOpenAI, functionalityMetric, generateStructuredData, getModelCatalog, getOAuthApiKey, getOAuthProvider, getReadState, glob, grep, hasAuthorizationHeader, hasSystemPromptBoundary, hashContent, hashMessages, headlessEventToJsonl, hydrateReadStateFromSession, hydrateReadStateFromSessionAsync, inlineLoadedExtension, installAllowedToolsGate, installCacheBreakLogger, installExtensionFromSpec, installSkillFromSpec, interpolateShellCommands, isExtensionDefinition, isOAuthAccessToken, isSpawnTool, isStandardSchema, isSupportedAgentPluginsVersion, isToolAllowedByUnion, isToolStateOps, isValidExtensionConfigItem, isValidExtensionConfigValue, isolationAvailability, joinSystemPrompt, jsonSink, listExtensionCandidates, listSkillCandidates, llmJudge, loadAgentPlugin, loadSession, local, localReliabilityBehavior, loginMcpServer, mapOAIFinishReason, matchModelEntries, matchesAllowedTool, matchesArtifactFilter, matchesContextExceeded, maybePersistToolResult, mergeArtifact, mergeContributions, migrateSessionArtifactDirs, mistral, multiEdit, normalizeArtifactInput, normalizeMcpBlocks, normalizeMcpServers, normalizeMetric, normalizeProviders, normalizeShellCommand, openai, openaiCompat, openrouter, originPinnedFetch, parseAllowWriteSetting, parseAllowedToolPattern, parseCommandInvocation, parseExtensionInstallSource, parseExtensionScanPathEnv, parsePluginManifest, parseSchemaId, parseSkillFile, parseSkillInstallSpec, partitionExtensionCatalog, patchInlineGhost, readExtensionInstallProvenance, readOAuthCredentials, readSkillEditMarker, readSkillProvenance, readStateKey, reasoningWireAction, refreshAnthropicToken, refreshArtifact, refreshOpenAICodexToken, registerCustomOAuthProvider, registerEvalTests, registerExtensionHostModules, registerOAuthProvider, relativeArtifactPath, remintDuplicateToolCallIds, removeInstalledExtension, renderArtifactRow, renderStaleReadNotice, renderSystemForWire, replaceDynamicSection, resolveArtifactKind, resolveCompletionSubmit, resolveDetachedTasksCapability, resolveExtensionConfig, resolveExtensionConfigValue, resolveExtensionDocsDir, resolveInlineSuggestion, resolveLegacyPersistDir, resolveLegacySessionDir, resolveMcpWarningsDir, resolveModelTargets, resolveOAuthApiKey, resolvePersistDir, resolveReadStateMap, resolveSchemaInput, resolveSessionDir, resolveSkills, resolveTasksDir, resolveTransportConfig, resolveWritableRoots, resolveWritableRootsAsync, resultToString, runEvalCase, runHeadless, sanitizeExtensionConfigActionPatch, sanitizeHistoryForProvider, sanitizeToolSchema, sanitizeToolSpecs, scanExtensionDirectories, selectArtifactEvictions, selectFilesFromReadState, selectFilesFromSession, selectRecentFiles, setModelCatalog, shouldAutoCompact, sliceForCompaction, snapshotCacheDimensions, sortArtifacts, splitSystemPrompt, stableStringify, stagedToolState, startOAuthCallback, statsByModel, statusCompleted, stripImagesFromTurns, stripShellInterpolations, summaryToTurn, toAnthropic, toOpenAI, toTypedError, toWireConfigSchema, toWireMessages, toolOutputBudgetByteLength, toolOutputByteLength, toolPrompts, toolResultToText, transcriptToOpenAIMessages, truncateHeadForPtlRetry, updateInstalledExtension, utf8ByteLength, validatePluginManifest, validateResourcePath, validateResourcePathReal, validateSkillForWrite, validateSkillName, validateToolArgs, waitTask, withZidaneExtensionSkill, withZidaneSkillEditSkill, writeOAuthCredentials, writeSkillToDisk, writeSkillsToDisk, xai, zodToJsonSchema };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { R as findGitRoot } from "./skills-BC3dodWp.js";
|
|
2
|
-
import { l as connectOrSpawnDaemon, m as defaultSocketPath } from "./shell-path-
|
|
2
|
+
import { l as connectOrSpawnDaemon, m as defaultSocketPath } from "./shell-path-DeSQjoHJ.js";
|
|
3
3
|
import process from "node:process";
|
|
4
4
|
import { createInterface } from "node:readline";
|
|
5
5
|
//#region src/ipc/attach.ts
|
|
@@ -328,4 +328,4 @@ function clipLines(text, max) {
|
|
|
328
328
|
//#endregion
|
|
329
329
|
export { runAttach as t };
|
|
330
330
|
|
|
331
|
-
//# sourceMappingURL=ipc-
|
|
331
|
+
//# sourceMappingURL=ipc-BqEflvqC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipc-CNrpBs9P.js","names":[],"sources":["../src/ipc/attach.ts"],"sourcesContent":["/**\n * `zidane attach` — a thin terminal client over the daemon protocol.\n *\n * Deliberately minimal (readline, no TUI framework): it exists to prove and\n * exercise the multi-window contract — several attach clients plus the GUI\n * can watch the SAME session converge live, answer each other's approvals,\n * and steer the same run. The full OpenTUI front-end migrates onto\n * `connectIpcClient` separately.\n *\n * Everything here is presentation: all state lives in the daemon.\n */\nimport type { InteractionRequest, StreamEvent } from '../chat/index'\nimport type { AnswerValue } from '../chat/interactions'\nimport type { IpcClient } from './client'\nimport type { EnsureDaemonOptions } from './daemon/lifecycle'\nimport type { HostSignal, SessionRow, WireApprovalRequest } from './protocol'\nimport process from 'node:process'\nimport { createInterface } from 'node:readline'\nimport { findGitRoot } from '../chat/index'\nimport { connectOrSpawnDaemon } from './client'\nimport { defaultSocketPath } from './daemon/lifecycle'\n\nconst DIM = '\\u001B[2m'\nconst BOLD = '\\u001B[1m'\nconst CYAN = '\\u001B[36m'\nconst YELLOW = '\\u001B[33m'\nconst RED = '\\u001B[31m'\nconst RESET = '\\u001B[0m'\n\nexport interface AttachOptions {\n socketPath?: string\n /** Attach to this session id (prefix match against the list). */\n sessionId?: string\n /** Create a fresh session instead of picking. */\n createNew?: boolean\n cwd?: string\n appVersion?: string\n /** Spawn-on-demand command when no daemon is listening. */\n spawnCommand?: string[]\n /** Injectable streams for tests. */\n stdin?: NodeJS.ReadableStream\n stdout?: NodeJS.WritableStream\n}\n\ninterface PendingAsk {\n resolve: (line: string) => void\n}\n\nexport async function runAttach(options: AttachOptions = {}): Promise<void> {\n const out = options.stdout ?? process.stdout\n const write = (text: string): void => void out.write(text)\n const cwd = options.cwd ?? process.cwd()\n\n const ensureOptions: EnsureDaemonOptions = {\n socketPath: options.socketPath ?? defaultSocketPath(),\n ...(options.spawnCommand ? { spawnCommand: options.spawnCommand } : {}),\n }\n /*\n * Library-safe failure: `runAttach` is exported from `zidane/ipc`, so a\n * dropped daemon REJECTS (the CLI wrapper owns the exit code) instead\n * of killing an embedder's process from inside the library.\n */\n let failRun: ((error: Error) => void) | null = null\n\n // Drain-and-respawn on version mismatch — a stale daemon self-heals\n // instead of hard-failing the window.\n const client = await connectOrSpawnDaemon({\n ...ensureOptions,\n ...(options.appVersion ? { appVersion: options.appVersion } : {}),\n onClose: () => {\n write(`\\n${RED}daemon connection lost${RESET}\\n`)\n failRun?.(new Error('daemon connection lost'))\n },\n })\n\n write(`${DIM}connected to zidane daemon (pid ${client.hello.pid}, v${client.hello.appVersion})${RESET}\\n`)\n\n const rl = createInterface({\n input: (options.stdin ?? process.stdin) as NodeJS.ReadableStream,\n output: out as NodeJS.WritableStream,\n prompt: `${BOLD}> ${RESET}`,\n })\n\n /*\n * Line routing: normally a line is a prompt for the model, but while an\n * approval / interaction / picker question is pending, the next line\n * answers it instead. One slot suffices — questions are asked serially.\n * Registered BEFORE the session picker so `ask` works during picking.\n */\n let pendingAsk: PendingAsk | null = null\n let submitLine: ((line: string) => void) | null = null\n /** Prompt lines typed before the input loop is armed (mid-boot) queue up. */\n const earlyLines: string[] = []\n\n rl.on('line', (line) => {\n if (pendingAsk) {\n const slot = pendingAsk\n pendingAsk = null\n slot.resolve(line)\n return\n }\n if (submitLine)\n submitLine(line)\n else\n earlyLines.push(line)\n })\n\n const ask = (prompt: string): Promise<string> => {\n write(prompt)\n return new Promise<string>((resolve) => {\n pendingAsk = { resolve }\n })\n }\n\n /*\n * HITL prompts share the single `pendingAsk` slot, so approvals /\n * interactions MUST be asked one at a time — the startup rehydrate loops\n * and live signals can otherwise fire several handlers at once, each\n * overwriting the previous resolver and leaving those prompts hung\n * forever (unanswerable from this window). Chain every handler on the\n * previous one so they run strictly sequentially.\n */\n let hitlQueue: Promise<void> = Promise.resolve()\n\n /*\n * De-dup + resolution tracking for HITL prompts. A request can arrive\n * both via `*:listPending` backfill AND a live `*:request` signal, and\n * another window can answer it while it's still queued here. We track\n * every id we've queued (so we never prompt twice) and every id the host\n * reported resolved (so a queued-but-not-yet-prompted request is skipped\n * instead of blocking the queue on a no-op stdin answer).\n */\n const queuedHitlIds = new Set<string>()\n const resolvedHitlIds = new Set<string>()\n\n const enqueueHitl = (requestId: string, task: () => Promise<void>): void => {\n if (queuedHitlIds.has(requestId) || resolvedHitlIds.has(requestId))\n return\n queuedHitlIds.add(requestId)\n hitlQueue = hitlQueue.then(async () => {\n // Another window may have answered it while it waited in the queue.\n if (resolvedHitlIds.has(requestId))\n return\n await task()\n }, () => undefined)\n }\n\n const session = await pickSession(client, { ask, write, cwd, ...options })\n if (!session) {\n rl.close()\n client.close()\n return\n }\n\n write(`${BOLD}session${RESET} ${session.id} ${DIM}(${session.title})${RESET}\\n`)\n write(`${DIM}tools run in ${session.cwd} — /interrupt to stop a run, /exit to detach (run keeps going)${RESET}\\n\\n`)\n\n /*\n * Subscribe BEFORE replaying the transcript / snapshotting run state so\n * stream events emitted in that window aren't permanently lost from this\n * client's view. Signals that arrive during replay buffer here and drain\n * once the replay completes.\n */\n const bufferedSignals: HostSignal[] = []\n let signalSink: (signal: HostSignal) => void = s => bufferedSignals.push(s)\n const unsubscribe = client.onSignal(s => signalSink(s))\n\n await replayTranscript(client, session.id, write)\n\n let running = await client.request('chat.isRunning', { sessionId: session.id })\n if (running)\n write(`${DIM}a run is in flight — attaching to the live stream${RESET}\\n`)\n\n /* ----------------------------------------------------------------------\n * Signal rendering\n * -------------------------------------------------------------------- */\n\n let lastEventKind: StreamEvent['kind'] | null = null\n\n /**\n * The host broadcasts every window's user message as a `user-prompt`\n * event — render it so this window sees prompts posted elsewhere. Our\n * OWN just-sent messages are skipped once each (readline already echoed\n * them). A multiset (text → count) handles rapid identical sends and\n * never suppresses another window's matching message beyond our own\n * outstanding count.\n */\n const ownEchoes = new Map<string, number>()\n\n const renderEvent = (event: StreamEvent): void => {\n switch (event.kind) {\n case 'user-prompt': {\n const outstanding = ownEchoes.get(event.text) ?? 0\n if (outstanding > 0) {\n if (outstanding === 1)\n ownEchoes.delete(event.text)\n else\n ownEchoes.set(event.text, outstanding - 1)\n break\n }\n write(`\\n${BOLD}> ${event.text}${RESET}\\n`)\n break\n }\n case 'markdown':\n if (lastEventKind !== 'markdown' && lastEventKind !== null)\n write('\\n')\n write(event.text)\n break\n case 'thinking':\n // Streamed reasoning stays out of the transcript — show a pulse once.\n if (lastEventKind !== 'thinking')\n write(`${DIM}(thinking…)${RESET}\\n`)\n break\n case 'tool':\n write(`\\n${CYAN}▸ ${event.text}${RESET}\\n`)\n break\n case 'tool-result':\n write(`${DIM}${clipLines(event.text, 3)}${RESET}\\n`)\n break\n case 'task-notification':\n case 'info':\n write(`${DIM}${event.text}${RESET}\\n`)\n break\n case 'error':\n write(`${RED}${event.text}${RESET}\\n`)\n break\n default:\n break\n }\n lastEventKind = event.kind\n }\n\n const handleApproval = async (request: WireApprovalRequest): Promise<void> => {\n write(`\\n${YELLOW}approval needed${RESET} — ${BOLD}${request.tool}${RESET}\\n`)\n write(`${DIM}${clipLines(JSON.stringify(request.input, null, 2), 12)}${RESET}\\n`)\n const answer = await ask(`${YELLOW}[y]es once / [s]ession / [a]lways (safelist) / [n]o: ${RESET}`)\n const decision\n = answer.trim().toLowerCase() === 'y'\n ? 'accept-once'\n : answer.trim().toLowerCase() === 's'\n ? 'accept-session'\n : answer.trim().toLowerCase() === 'a'\n ? 'accept-safelist'\n : 'deny'\n await client.request('approvals.resolve', { requestId: request.id, decision })\n }\n\n const handleInteraction = async (request: InteractionRequest): Promise<void> => {\n if (request.kind === 'plan') {\n write(`\\n${YELLOW}plan:${RESET} ${BOLD}${request.payload.title}${RESET}\\n${request.payload.plan}\\n`)\n const answer = await ask(`${YELLOW}[a]pprove / [r]eject / re[v]ise (with comment): ${RESET}`)\n const c = answer.trim().toLowerCase()\n if (c === 'v') {\n const comment = await ask('comment: ')\n await client.request('interactions.respond', {\n requestId: request.id,\n response: { kind: 'plan', decision: 'revise', comment },\n })\n return\n }\n await client.request('interactions.respond', {\n requestId: request.id,\n response: { kind: 'plan', decision: c === 'a' ? 'approve' : 'reject' },\n })\n return\n }\n\n if (request.payload.intro)\n write(`\\n${request.payload.intro}\\n`)\n const answers: Record<string, AnswerValue> = {}\n for (const question of request.payload.questions) {\n if (question.type === 'confirm') {\n const answer = await ask(`${YELLOW}${question.prompt}${RESET} [y/n]: `)\n answers[question.id] = answer.trim().toLowerCase().startsWith('y')\n continue\n }\n if (question.type === 'select') {\n write(`${YELLOW}${question.prompt}${RESET}\\n`)\n question.choices.forEach((choice, i) => write(` ${i + 1}. ${choice.label}\\n`))\n const answer = await ask(question.multi ? 'pick (comma-separated numbers): ' : 'pick a number: ')\n const picks = answer\n .split(',')\n .map(part => question.choices[Number.parseInt(part.trim(), 10) - 1]?.id)\n .filter((id): id is string => typeof id === 'string')\n answers[question.id] = question.multi ? picks : (picks[0] ?? '')\n continue\n }\n answers[question.id] = await ask(`${YELLOW}${question.prompt}${RESET}: `)\n }\n await client.request('interactions.respond', {\n requestId: request.id,\n response: { kind: 'question', answers },\n })\n }\n\n const onSignal = (signal: HostSignal): void => {\n // Converge on resolution: mark the id answered so a queued-but-not-yet-\n // prompted request is skipped instead of blocking on stdin, and record\n // it so late backfill can't re-raise it.\n if (signal.kind === 'approval:resolved' || signal.kind === 'interaction:resolved') {\n resolvedHitlIds.add(signal.requestId)\n return\n }\n\n if (signal.kind === 'approval:request') {\n // Only surface approvals for the attached session — other windows'\n // sessions raise their own prompts in their own windows.\n if (signal.request.sessionId === session.id)\n enqueueHitl(signal.request.id, () => handleApproval(signal.request))\n return\n }\n\n if ('sessionId' in signal && signal.sessionId !== session.id)\n return\n\n switch (signal.kind) {\n case 'run:start':\n running = true\n lastEventKind = null\n break\n case 'run:end':\n running = false\n write(signal.ok ? '\\n' : `\\n${RED}run failed: ${signal.error ?? 'unknown error'}${RESET}\\n`)\n if (!pendingAsk)\n rl.prompt()\n break\n case 'event':\n renderEvent(signal.event)\n break\n case 'compacting:start':\n write(`${DIM}compacting…${RESET}\\n`)\n break\n case 'interaction:request':\n enqueueHitl(signal.request.id, () => handleInteraction(signal.request))\n break\n default:\n break\n }\n }\n\n // Surface HITL state left pending before this window attached. Done\n // BEFORE draining buffered signals so a live `*:request` that arrived\n // during backfill de-dups against the same id (via `queuedHitlIds`).\n for (const request of await client.request('approvals.listPending', {})) {\n if (request.sessionId === session.id)\n enqueueHitl(request.id, () => handleApproval(request))\n }\n for (const pending of await client.request('interactions.list', { sessionId: session.id })) {\n if (pending.live)\n enqueueHitl(pending.request.id, () => handleInteraction(pending.request))\n }\n\n // Drain signals buffered during replay/backfill, then hand live signals\n // straight to `onSignal`.\n signalSink = onSignal\n for (const buffered of bufferedSignals.splice(0))\n onSignal(buffered)\n\n /* ----------------------------------------------------------------------\n * Input loop\n * -------------------------------------------------------------------- */\n\n const detach = (): void => {\n unsubscribe()\n rl.close()\n client.close()\n write(`\\n${DIM}detached — the session keeps running in the daemon${RESET}\\n`)\n }\n\n rl.on('SIGINT', () => {\n if (running) {\n // Fire-and-forget: a dead daemon rejects the request, and an\n // uncaught rejection would crash the attach client.\n client.request('chat.interrupt', { sessionId: session.id }).catch(() => undefined)\n write(`\\n${DIM}interrupt sent${RESET}\\n`)\n return\n }\n detach()\n })\n\n await new Promise<void>((resolve, reject) => {\n failRun = (error) => {\n unsubscribe()\n rl.close()\n client.close()\n reject(error)\n }\n rl.on('close', () => resolve())\n\n const handleLine = (line: string): void => {\n const text = line.trim()\n if (text.length === 0) {\n rl.prompt()\n return\n }\n if (text === '/exit' || text === '/quit') {\n detach()\n resolve()\n return\n }\n if (text === '/interrupt') {\n client.request('chat.interrupt', { sessionId: session.id }).catch(() => undefined)\n return\n }\n\n ownEchoes.set(text, (ownEchoes.get(text) ?? 0) + 1)\n void client.request('chat.pushQueued', { sessionId: session.id, message: text }).then(({ delivered }) => {\n if (delivered === 'steer')\n write(`${DIM}(steered into the live run)${RESET}\\n`)\n }).catch((err) => {\n // Send failed: the host never broadcast the prompt, so release the\n // pending echo suppression to avoid eating a later identical one.\n const outstanding = ownEchoes.get(text) ?? 0\n if (outstanding <= 1)\n ownEchoes.delete(text)\n else\n ownEchoes.set(text, outstanding - 1)\n write(`${RED}${err instanceof Error ? err.message : String(err)}${RESET}\\n`)\n rl.prompt()\n })\n }\n\n submitLine = handleLine\n while (earlyLines.length > 0)\n handleLine(earlyLines.shift()!)\n\n if (!running)\n rl.prompt()\n })\n}\n\n/* --------------------------------------------------------------------------\n * Session picking\n * ------------------------------------------------------------------------ */\n\nasync function pickSession(\n client: IpcClient,\n ctx: {\n ask: (prompt: string) => Promise<string>\n write: (text: string) => void\n cwd: string\n sessionId?: string\n createNew?: boolean\n },\n): Promise<SessionRow | null> {\n const projectRoot = findGitRoot(ctx.cwd) ?? ctx.cwd\n\n if (ctx.createNew)\n return client.request('sessions.create', { cwd: ctx.cwd })\n\n const rows = await client.request('sessions.list', { projectRoot, archive: 'active' })\n\n if (ctx.sessionId) {\n const match = rows.find(r => r.id === ctx.sessionId || r.id.startsWith(ctx.sessionId!))\n if (match)\n return match\n // Not in this project — try the full list before giving up.\n const all = await client.request('sessions.list', {})\n const global = all.find(r => r.id === ctx.sessionId || r.id.startsWith(ctx.sessionId!))\n if (global)\n return global\n ctx.write(`${RED}no session matching \"${ctx.sessionId}\"${RESET}\\n`)\n return null\n }\n\n if (rows.length === 0)\n return client.request('sessions.create', { cwd: ctx.cwd })\n\n ctx.write(`${BOLD}sessions in ${projectRoot}:${RESET}\\n`)\n rows.slice(0, 15).forEach((row, i) => {\n const status = row.status === 'running' ? ` ${YELLOW}● running${RESET}` : ''\n ctx.write(` ${i + 1}. ${row.title} ${DIM}(${row.id.slice(0, 8)})${RESET}${status}\\n`)\n })\n\n const answer = await ctx.ask('pick a number, or [n]ew: ')\n if (answer.trim().toLowerCase() === 'n')\n return client.request('sessions.create', { cwd: ctx.cwd })\n\n const picked = rows[Number.parseInt(answer.trim(), 10) - 1]\n if (!picked) {\n ctx.write(`${RED}invalid pick${RESET}\\n`)\n return null\n }\n return picked\n}\n\n/* --------------------------------------------------------------------------\n * Transcript replay\n * ------------------------------------------------------------------------ */\n\nconst REPLAY_EVENT_CAP = 60\n\nasync function replayTranscript(\n client: IpcClient,\n sessionId: string,\n write: (text: string) => void,\n): Promise<void> {\n const events = await client.request('sessions.loadEvents', { sessionId })\n if (events.length === 0)\n return\n\n const tail = events.slice(-REPLAY_EVENT_CAP)\n if (events.length > tail.length)\n write(`${DIM}… ${events.length - tail.length} earlier events omitted${RESET}\\n`)\n\n for (const event of tail) {\n if (event.kind === 'user-prompt')\n write(`\\n${BOLD}> ${event.text}${RESET}\\n`)\n else if (event.kind === 'markdown')\n write(`${event.text}\\n`)\n else if (event.kind === 'tool')\n write(`${CYAN}▸ ${event.text}${RESET}\\n`)\n }\n write('\\n')\n}\n\nfunction clipLines(text: string, max: number): string {\n const lines = text.split('\\n')\n if (lines.length <= max)\n return text\n return `${lines.slice(0, max).join('\\n')}\\n${DIM}… ${lines.length - max} more lines${RESET}`\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ipc-BqEflvqC.js","names":[],"sources":["../src/ipc/attach.ts"],"sourcesContent":["/**\n * `zidane attach` — a thin terminal client over the daemon protocol.\n *\n * Deliberately minimal (readline, no TUI framework): it exists to prove and\n * exercise the multi-window contract — several attach clients plus the GUI\n * can watch the SAME session converge live, answer each other's approvals,\n * and steer the same run. The full OpenTUI front-end migrates onto\n * `connectIpcClient` separately.\n *\n * Everything here is presentation: all state lives in the daemon.\n */\nimport type { InteractionRequest, StreamEvent } from '../chat/index'\nimport type { AnswerValue } from '../chat/interactions'\nimport type { IpcClient } from './client'\nimport type { EnsureDaemonOptions } from './daemon/lifecycle'\nimport type { HostSignal, SessionRow, WireApprovalRequest } from './protocol'\nimport process from 'node:process'\nimport { createInterface } from 'node:readline'\nimport { findGitRoot } from '../chat/index'\nimport { connectOrSpawnDaemon } from './client'\nimport { defaultSocketPath } from './daemon/lifecycle'\n\nconst DIM = '\\u001B[2m'\nconst BOLD = '\\u001B[1m'\nconst CYAN = '\\u001B[36m'\nconst YELLOW = '\\u001B[33m'\nconst RED = '\\u001B[31m'\nconst RESET = '\\u001B[0m'\n\nexport interface AttachOptions {\n socketPath?: string\n /** Attach to this session id (prefix match against the list). */\n sessionId?: string\n /** Create a fresh session instead of picking. */\n createNew?: boolean\n cwd?: string\n appVersion?: string\n /** Spawn-on-demand command when no daemon is listening. */\n spawnCommand?: string[]\n /** Injectable streams for tests. */\n stdin?: NodeJS.ReadableStream\n stdout?: NodeJS.WritableStream\n}\n\ninterface PendingAsk {\n resolve: (line: string) => void\n}\n\nexport async function runAttach(options: AttachOptions = {}): Promise<void> {\n const out = options.stdout ?? process.stdout\n const write = (text: string): void => void out.write(text)\n const cwd = options.cwd ?? process.cwd()\n\n const ensureOptions: EnsureDaemonOptions = {\n socketPath: options.socketPath ?? defaultSocketPath(),\n ...(options.spawnCommand ? { spawnCommand: options.spawnCommand } : {}),\n }\n /*\n * Library-safe failure: `runAttach` is exported from `zidane/ipc`, so a\n * dropped daemon REJECTS (the CLI wrapper owns the exit code) instead\n * of killing an embedder's process from inside the library.\n */\n let failRun: ((error: Error) => void) | null = null\n\n // Drain-and-respawn on version mismatch — a stale daemon self-heals\n // instead of hard-failing the window.\n const client = await connectOrSpawnDaemon({\n ...ensureOptions,\n ...(options.appVersion ? { appVersion: options.appVersion } : {}),\n onClose: () => {\n write(`\\n${RED}daemon connection lost${RESET}\\n`)\n failRun?.(new Error('daemon connection lost'))\n },\n })\n\n write(`${DIM}connected to zidane daemon (pid ${client.hello.pid}, v${client.hello.appVersion})${RESET}\\n`)\n\n const rl = createInterface({\n input: (options.stdin ?? process.stdin) as NodeJS.ReadableStream,\n output: out as NodeJS.WritableStream,\n prompt: `${BOLD}> ${RESET}`,\n })\n\n /*\n * Line routing: normally a line is a prompt for the model, but while an\n * approval / interaction / picker question is pending, the next line\n * answers it instead. One slot suffices — questions are asked serially.\n * Registered BEFORE the session picker so `ask` works during picking.\n */\n let pendingAsk: PendingAsk | null = null\n let submitLine: ((line: string) => void) | null = null\n /** Prompt lines typed before the input loop is armed (mid-boot) queue up. */\n const earlyLines: string[] = []\n\n rl.on('line', (line) => {\n if (pendingAsk) {\n const slot = pendingAsk\n pendingAsk = null\n slot.resolve(line)\n return\n }\n if (submitLine)\n submitLine(line)\n else\n earlyLines.push(line)\n })\n\n const ask = (prompt: string): Promise<string> => {\n write(prompt)\n return new Promise<string>((resolve) => {\n pendingAsk = { resolve }\n })\n }\n\n /*\n * HITL prompts share the single `pendingAsk` slot, so approvals /\n * interactions MUST be asked one at a time — the startup rehydrate loops\n * and live signals can otherwise fire several handlers at once, each\n * overwriting the previous resolver and leaving those prompts hung\n * forever (unanswerable from this window). Chain every handler on the\n * previous one so they run strictly sequentially.\n */\n let hitlQueue: Promise<void> = Promise.resolve()\n\n /*\n * De-dup + resolution tracking for HITL prompts. A request can arrive\n * both via `*:listPending` backfill AND a live `*:request` signal, and\n * another window can answer it while it's still queued here. We track\n * every id we've queued (so we never prompt twice) and every id the host\n * reported resolved (so a queued-but-not-yet-prompted request is skipped\n * instead of blocking the queue on a no-op stdin answer).\n */\n const queuedHitlIds = new Set<string>()\n const resolvedHitlIds = new Set<string>()\n\n const enqueueHitl = (requestId: string, task: () => Promise<void>): void => {\n if (queuedHitlIds.has(requestId) || resolvedHitlIds.has(requestId))\n return\n queuedHitlIds.add(requestId)\n hitlQueue = hitlQueue.then(async () => {\n // Another window may have answered it while it waited in the queue.\n if (resolvedHitlIds.has(requestId))\n return\n await task()\n }, () => undefined)\n }\n\n const session = await pickSession(client, { ask, write, cwd, ...options })\n if (!session) {\n rl.close()\n client.close()\n return\n }\n\n write(`${BOLD}session${RESET} ${session.id} ${DIM}(${session.title})${RESET}\\n`)\n write(`${DIM}tools run in ${session.cwd} — /interrupt to stop a run, /exit to detach (run keeps going)${RESET}\\n\\n`)\n\n /*\n * Subscribe BEFORE replaying the transcript / snapshotting run state so\n * stream events emitted in that window aren't permanently lost from this\n * client's view. Signals that arrive during replay buffer here and drain\n * once the replay completes.\n */\n const bufferedSignals: HostSignal[] = []\n let signalSink: (signal: HostSignal) => void = s => bufferedSignals.push(s)\n const unsubscribe = client.onSignal(s => signalSink(s))\n\n await replayTranscript(client, session.id, write)\n\n let running = await client.request('chat.isRunning', { sessionId: session.id })\n if (running)\n write(`${DIM}a run is in flight — attaching to the live stream${RESET}\\n`)\n\n /* ----------------------------------------------------------------------\n * Signal rendering\n * -------------------------------------------------------------------- */\n\n let lastEventKind: StreamEvent['kind'] | null = null\n\n /**\n * The host broadcasts every window's user message as a `user-prompt`\n * event — render it so this window sees prompts posted elsewhere. Our\n * OWN just-sent messages are skipped once each (readline already echoed\n * them). A multiset (text → count) handles rapid identical sends and\n * never suppresses another window's matching message beyond our own\n * outstanding count.\n */\n const ownEchoes = new Map<string, number>()\n\n const renderEvent = (event: StreamEvent): void => {\n switch (event.kind) {\n case 'user-prompt': {\n const outstanding = ownEchoes.get(event.text) ?? 0\n if (outstanding > 0) {\n if (outstanding === 1)\n ownEchoes.delete(event.text)\n else\n ownEchoes.set(event.text, outstanding - 1)\n break\n }\n write(`\\n${BOLD}> ${event.text}${RESET}\\n`)\n break\n }\n case 'markdown':\n if (lastEventKind !== 'markdown' && lastEventKind !== null)\n write('\\n')\n write(event.text)\n break\n case 'thinking':\n // Streamed reasoning stays out of the transcript — show a pulse once.\n if (lastEventKind !== 'thinking')\n write(`${DIM}(thinking…)${RESET}\\n`)\n break\n case 'tool':\n write(`\\n${CYAN}▸ ${event.text}${RESET}\\n`)\n break\n case 'tool-result':\n write(`${DIM}${clipLines(event.text, 3)}${RESET}\\n`)\n break\n case 'task-notification':\n case 'info':\n write(`${DIM}${event.text}${RESET}\\n`)\n break\n case 'error':\n write(`${RED}${event.text}${RESET}\\n`)\n break\n default:\n break\n }\n lastEventKind = event.kind\n }\n\n const handleApproval = async (request: WireApprovalRequest): Promise<void> => {\n write(`\\n${YELLOW}approval needed${RESET} — ${BOLD}${request.tool}${RESET}\\n`)\n write(`${DIM}${clipLines(JSON.stringify(request.input, null, 2), 12)}${RESET}\\n`)\n const answer = await ask(`${YELLOW}[y]es once / [s]ession / [a]lways (safelist) / [n]o: ${RESET}`)\n const decision\n = answer.trim().toLowerCase() === 'y'\n ? 'accept-once'\n : answer.trim().toLowerCase() === 's'\n ? 'accept-session'\n : answer.trim().toLowerCase() === 'a'\n ? 'accept-safelist'\n : 'deny'\n await client.request('approvals.resolve', { requestId: request.id, decision })\n }\n\n const handleInteraction = async (request: InteractionRequest): Promise<void> => {\n if (request.kind === 'plan') {\n write(`\\n${YELLOW}plan:${RESET} ${BOLD}${request.payload.title}${RESET}\\n${request.payload.plan}\\n`)\n const answer = await ask(`${YELLOW}[a]pprove / [r]eject / re[v]ise (with comment): ${RESET}`)\n const c = answer.trim().toLowerCase()\n if (c === 'v') {\n const comment = await ask('comment: ')\n await client.request('interactions.respond', {\n requestId: request.id,\n response: { kind: 'plan', decision: 'revise', comment },\n })\n return\n }\n await client.request('interactions.respond', {\n requestId: request.id,\n response: { kind: 'plan', decision: c === 'a' ? 'approve' : 'reject' },\n })\n return\n }\n\n if (request.payload.intro)\n write(`\\n${request.payload.intro}\\n`)\n const answers: Record<string, AnswerValue> = {}\n for (const question of request.payload.questions) {\n if (question.type === 'confirm') {\n const answer = await ask(`${YELLOW}${question.prompt}${RESET} [y/n]: `)\n answers[question.id] = answer.trim().toLowerCase().startsWith('y')\n continue\n }\n if (question.type === 'select') {\n write(`${YELLOW}${question.prompt}${RESET}\\n`)\n question.choices.forEach((choice, i) => write(` ${i + 1}. ${choice.label}\\n`))\n const answer = await ask(question.multi ? 'pick (comma-separated numbers): ' : 'pick a number: ')\n const picks = answer\n .split(',')\n .map(part => question.choices[Number.parseInt(part.trim(), 10) - 1]?.id)\n .filter((id): id is string => typeof id === 'string')\n answers[question.id] = question.multi ? picks : (picks[0] ?? '')\n continue\n }\n answers[question.id] = await ask(`${YELLOW}${question.prompt}${RESET}: `)\n }\n await client.request('interactions.respond', {\n requestId: request.id,\n response: { kind: 'question', answers },\n })\n }\n\n const onSignal = (signal: HostSignal): void => {\n // Converge on resolution: mark the id answered so a queued-but-not-yet-\n // prompted request is skipped instead of blocking on stdin, and record\n // it so late backfill can't re-raise it.\n if (signal.kind === 'approval:resolved' || signal.kind === 'interaction:resolved') {\n resolvedHitlIds.add(signal.requestId)\n return\n }\n\n if (signal.kind === 'approval:request') {\n // Only surface approvals for the attached session — other windows'\n // sessions raise their own prompts in their own windows.\n if (signal.request.sessionId === session.id)\n enqueueHitl(signal.request.id, () => handleApproval(signal.request))\n return\n }\n\n if ('sessionId' in signal && signal.sessionId !== session.id)\n return\n\n switch (signal.kind) {\n case 'run:start':\n running = true\n lastEventKind = null\n break\n case 'run:end':\n running = false\n write(signal.ok ? '\\n' : `\\n${RED}run failed: ${signal.error ?? 'unknown error'}${RESET}\\n`)\n if (!pendingAsk)\n rl.prompt()\n break\n case 'event':\n renderEvent(signal.event)\n break\n case 'compacting:start':\n write(`${DIM}compacting…${RESET}\\n`)\n break\n case 'interaction:request':\n enqueueHitl(signal.request.id, () => handleInteraction(signal.request))\n break\n default:\n break\n }\n }\n\n // Surface HITL state left pending before this window attached. Done\n // BEFORE draining buffered signals so a live `*:request` that arrived\n // during backfill de-dups against the same id (via `queuedHitlIds`).\n for (const request of await client.request('approvals.listPending', {})) {\n if (request.sessionId === session.id)\n enqueueHitl(request.id, () => handleApproval(request))\n }\n for (const pending of await client.request('interactions.list', { sessionId: session.id })) {\n if (pending.live)\n enqueueHitl(pending.request.id, () => handleInteraction(pending.request))\n }\n\n // Drain signals buffered during replay/backfill, then hand live signals\n // straight to `onSignal`.\n signalSink = onSignal\n for (const buffered of bufferedSignals.splice(0))\n onSignal(buffered)\n\n /* ----------------------------------------------------------------------\n * Input loop\n * -------------------------------------------------------------------- */\n\n const detach = (): void => {\n unsubscribe()\n rl.close()\n client.close()\n write(`\\n${DIM}detached — the session keeps running in the daemon${RESET}\\n`)\n }\n\n rl.on('SIGINT', () => {\n if (running) {\n // Fire-and-forget: a dead daemon rejects the request, and an\n // uncaught rejection would crash the attach client.\n client.request('chat.interrupt', { sessionId: session.id }).catch(() => undefined)\n write(`\\n${DIM}interrupt sent${RESET}\\n`)\n return\n }\n detach()\n })\n\n await new Promise<void>((resolve, reject) => {\n failRun = (error) => {\n unsubscribe()\n rl.close()\n client.close()\n reject(error)\n }\n rl.on('close', () => resolve())\n\n const handleLine = (line: string): void => {\n const text = line.trim()\n if (text.length === 0) {\n rl.prompt()\n return\n }\n if (text === '/exit' || text === '/quit') {\n detach()\n resolve()\n return\n }\n if (text === '/interrupt') {\n client.request('chat.interrupt', { sessionId: session.id }).catch(() => undefined)\n return\n }\n\n ownEchoes.set(text, (ownEchoes.get(text) ?? 0) + 1)\n void client.request('chat.pushQueued', { sessionId: session.id, message: text }).then(({ delivered }) => {\n if (delivered === 'steer')\n write(`${DIM}(steered into the live run)${RESET}\\n`)\n }).catch((err) => {\n // Send failed: the host never broadcast the prompt, so release the\n // pending echo suppression to avoid eating a later identical one.\n const outstanding = ownEchoes.get(text) ?? 0\n if (outstanding <= 1)\n ownEchoes.delete(text)\n else\n ownEchoes.set(text, outstanding - 1)\n write(`${RED}${err instanceof Error ? err.message : String(err)}${RESET}\\n`)\n rl.prompt()\n })\n }\n\n submitLine = handleLine\n while (earlyLines.length > 0)\n handleLine(earlyLines.shift()!)\n\n if (!running)\n rl.prompt()\n })\n}\n\n/* --------------------------------------------------------------------------\n * Session picking\n * ------------------------------------------------------------------------ */\n\nasync function pickSession(\n client: IpcClient,\n ctx: {\n ask: (prompt: string) => Promise<string>\n write: (text: string) => void\n cwd: string\n sessionId?: string\n createNew?: boolean\n },\n): Promise<SessionRow | null> {\n const projectRoot = findGitRoot(ctx.cwd) ?? ctx.cwd\n\n if (ctx.createNew)\n return client.request('sessions.create', { cwd: ctx.cwd })\n\n const rows = await client.request('sessions.list', { projectRoot, archive: 'active' })\n\n if (ctx.sessionId) {\n const match = rows.find(r => r.id === ctx.sessionId || r.id.startsWith(ctx.sessionId!))\n if (match)\n return match\n // Not in this project — try the full list before giving up.\n const all = await client.request('sessions.list', {})\n const global = all.find(r => r.id === ctx.sessionId || r.id.startsWith(ctx.sessionId!))\n if (global)\n return global\n ctx.write(`${RED}no session matching \"${ctx.sessionId}\"${RESET}\\n`)\n return null\n }\n\n if (rows.length === 0)\n return client.request('sessions.create', { cwd: ctx.cwd })\n\n ctx.write(`${BOLD}sessions in ${projectRoot}:${RESET}\\n`)\n rows.slice(0, 15).forEach((row, i) => {\n const status = row.status === 'running' ? ` ${YELLOW}● running${RESET}` : ''\n ctx.write(` ${i + 1}. ${row.title} ${DIM}(${row.id.slice(0, 8)})${RESET}${status}\\n`)\n })\n\n const answer = await ctx.ask('pick a number, or [n]ew: ')\n if (answer.trim().toLowerCase() === 'n')\n return client.request('sessions.create', { cwd: ctx.cwd })\n\n const picked = rows[Number.parseInt(answer.trim(), 10) - 1]\n if (!picked) {\n ctx.write(`${RED}invalid pick${RESET}\\n`)\n return null\n }\n return picked\n}\n\n/* --------------------------------------------------------------------------\n * Transcript replay\n * ------------------------------------------------------------------------ */\n\nconst REPLAY_EVENT_CAP = 60\n\nasync function replayTranscript(\n client: IpcClient,\n sessionId: string,\n write: (text: string) => void,\n): Promise<void> {\n const events = await client.request('sessions.loadEvents', { sessionId })\n if (events.length === 0)\n return\n\n const tail = events.slice(-REPLAY_EVENT_CAP)\n if (events.length > tail.length)\n write(`${DIM}… ${events.length - tail.length} earlier events omitted${RESET}\\n`)\n\n for (const event of tail) {\n if (event.kind === 'user-prompt')\n write(`\\n${BOLD}> ${event.text}${RESET}\\n`)\n else if (event.kind === 'markdown')\n write(`${event.text}\\n`)\n else if (event.kind === 'tool')\n write(`${CYAN}▸ ${event.text}${RESET}\\n`)\n }\n write('\\n')\n}\n\nfunction clipLines(text: string, max: number): string {\n const lines = text.split('\\n')\n if (lines.length <= max)\n return text\n return `${lines.slice(0, max).join('\\n')}\\n${DIM}… ${lines.length - max} more lines${RESET}`\n}\n"],"mappings":"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"}
|
package/dist/ipc.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { An as createMemoryApprovalsStore, Cn as EditOutcomeLedger, Dn as ApprovalHub, En as runCompaction, Fn as CommandSummary, Gn as SessionPresence, Hn as RunningWorkItem, In as HostSettings, Jn as WireApprovalRequest, Ln as HostSignal, Mn as PendingApprovalsStore, Nn as ApprovalOriginator, On as ApprovalRequestInput, Pn as CommandArgSuggestionSummary, Rn as PendingInteraction, Sn as createInteractionHub, Tn as CompactionEntry, Un as SendOptions, Vn as QueuedItem, Wn as SerializedPreview, _n as createChatHost, bn as WorkerSummary, dn as extractEditPayloadForGate, fn as readFileSafe, gn as ContextSegmentsReport, hn as ChatHost, jn as ChatHostEnvironment, kn as createApprovalHub, mn as serializePreview, pn as resolveCwdPath, qn as TodosSnapshot, v as SystemMdFile, vn as CreateWorkerParams, wn as PendingAnnotation, xn as InteractionHub, yn as WorkerRow, zn as PromptAttachment } from "./index-
|
|
3
|
-
import { Y as ResolvedConfig } from "./transcript-anchors-
|
|
4
|
-
import { p as TodoItem } from "./turn-operations-
|
|
5
|
-
import { T as SessionHistoryMatch, V as ApprovalDecision, w as SearchTurnResult } from "./tool-formatters-
|
|
1
|
+
import { Ag as JsonValue, Ka as ExtensionBus, Kp as ContextBreakdown, Xd as ProviderKey, Xu as StreamEvent, jf as InteractionResponse, l_ as ThinkingLevel, ny as SessionArtifact, t_ as SessionTurn } from "./index-DCYh6lOp.js";
|
|
2
|
+
import { An as createMemoryApprovalsStore, Cn as EditOutcomeLedger, Dn as ApprovalHub, En as runCompaction, Fn as CommandSummary, Gn as SessionPresence, Hn as RunningWorkItem, In as HostSettings, Jn as WireApprovalRequest, Ln as HostSignal, Mn as PendingApprovalsStore, Nn as ApprovalOriginator, On as ApprovalRequestInput, Pn as CommandArgSuggestionSummary, Rn as PendingInteraction, Sn as createInteractionHub, Tn as CompactionEntry, Un as SendOptions, Vn as QueuedItem, Wn as SerializedPreview, _n as createChatHost, bn as WorkerSummary, dn as extractEditPayloadForGate, fn as readFileSafe, gn as ContextSegmentsReport, hn as ChatHost, jn as ChatHostEnvironment, kn as createApprovalHub, mn as serializePreview, pn as resolveCwdPath, qn as TodosSnapshot, v as SystemMdFile, vn as CreateWorkerParams, wn as PendingAnnotation, xn as InteractionHub, yn as WorkerRow, zn as PromptAttachment } from "./index-BMOl2Bog.js";
|
|
3
|
+
import { Y as ResolvedConfig } from "./transcript-anchors-DjcEsOYq.js";
|
|
4
|
+
import { p as TodoItem } from "./turn-operations-Rqk3E0Ue.js";
|
|
5
|
+
import { T as SessionHistoryMatch, V as ApprovalDecision, w as SearchTurnResult } from "./tool-formatters-BDm0tjgy.js";
|
|
6
6
|
|
|
7
7
|
//#region src/ipc/attach.d.ts
|
|
8
8
|
interface AttachOptions {
|
package/dist/ipc.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Bt as resolveCwdPath, Lt as createInteractionHub, Pt as createChatHost, Rt as extractEditPayloadForGate, Vt as serializePreview, n as createMemoryApprovalsStore, nn as EditOutcomeLedger, rn as runCompaction, t as createApprovalHub, zt as readFileSafe } from "./approvals-
|
|
2
|
-
import { _ as selfDaemonSpawnCommand, a as createDaemonEnvironment, c as connectIpcClient, d as IpcErrorCode, f as IPC_BUILD_ID, g as probeSocket, h as ensureDaemonRunning, i as startIpcDaemon, l as connectOrSpawnDaemon, m as defaultSocketPath, n as mergePath, o as createFileApprovalsStore, p as daemonSocketName, r as shellPath, s as IpcVersionMismatchError, t as fixPath, u as IPC_PROTOCOL_VERSION } from "./shell-path-
|
|
3
|
-
import { t as runAttach } from "./ipc-
|
|
1
|
+
import { Bt as resolveCwdPath, Lt as createInteractionHub, Pt as createChatHost, Rt as extractEditPayloadForGate, Vt as serializePreview, n as createMemoryApprovalsStore, nn as EditOutcomeLedger, rn as runCompaction, t as createApprovalHub, zt as readFileSafe } from "./approvals-DMxUgyVd.js";
|
|
2
|
+
import { _ as selfDaemonSpawnCommand, a as createDaemonEnvironment, c as connectIpcClient, d as IpcErrorCode, f as IPC_BUILD_ID, g as probeSocket, h as ensureDaemonRunning, i as startIpcDaemon, l as connectOrSpawnDaemon, m as defaultSocketPath, n as mergePath, o as createFileApprovalsStore, p as daemonSocketName, r as shellPath, s as IpcVersionMismatchError, t as fixPath, u as IPC_PROTOCOL_VERSION } from "./shell-path-DeSQjoHJ.js";
|
|
3
|
+
import { t as runAttach } from "./ipc-BqEflvqC.js";
|
|
4
4
|
export { EditOutcomeLedger, IPC_BUILD_ID, IPC_PROTOCOL_VERSION, IpcErrorCode, IpcVersionMismatchError, connectIpcClient, connectOrSpawnDaemon, createApprovalHub, createChatHost, createDaemonEnvironment, createFileApprovalsStore, createInteractionHub, createMemoryApprovalsStore, daemonSocketName, defaultSocketPath, ensureDaemonRunning, extractEditPayloadForGate, fixPath, mergePath, probeSocket, readFileSafe, resolveCwdPath, runAttach, runCompaction, selfDaemonSpawnCommand, serializePreview, shellPath, startIpcDaemon };
|
package/dist/mcp.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Cy as originPinnedFetch, Ng as McpToolSchema, Sy as
|
|
1
|
+
import { Cy as wrapDiscoveredMcpTools, Ey as originPinnedFetch, Ng as McpToolSchema, Sy as resultToString, Ty as isAllowedRemoteUrl, _y as expandMcpConfigEnv, by as normalizeMcpServers, dy as McpExecutionBinding, fy as attachStderrWarnPump, gy as expandEnvPlaceholders, hy as deriveMcpToolMeta, jg as McpServerConfig, ly as ConnectMcpServersOptions, my as createStderrLineEmitter, py as connectMcpServers, uy as McpConnection, vy as nonOwningMcpView, wy as PinnedFetch, xy as resolveTransportConfig, yy as normalizeMcpBlocks } from "./index-DCYh6lOp.js";
|
|
2
2
|
export { ConnectMcpServersOptions, McpConnection, McpExecutionBinding, type McpServerConfig, type McpToolSchema, type PinnedFetch, attachStderrWarnPump, connectMcpServers, createStderrLineEmitter, deriveMcpToolMeta, expandEnvPlaceholders, expandMcpConfigEnv, isAllowedRemoteUrl, nonOwningMcpView, normalizeMcpBlocks, normalizeMcpServers, originPinnedFetch, resolveTransportConfig, resultToString, wrapDiscoveredMcpTools };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $n as HeadlessResult, Jn as FormattedHeadlessTurnEvent, Qn as HeadlessOutputFormat, Xn as HeadlessEvent, qi as Agent, qn as FormattedHeadlessResult } from "../index-
|
|
1
|
+
import { $n as HeadlessResult, Jn as FormattedHeadlessTurnEvent, Qn as HeadlessOutputFormat, Xn as HeadlessEvent, qi as Agent, qn as FormattedHeadlessResult } from "../index-DCYh6lOp.js";
|
|
2
2
|
|
|
3
3
|
//#region src/output/stream-json.d.ts
|
|
4
4
|
type StreamJsonOutputFormat = HeadlessOutputFormat;
|
package/dist/plugins.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Ac as parsePluginManifest, Bc as PluginDiagnostic, Dc as PLUGIN_MCP_FILE, Ec as PLUGIN_SKILLS_DIR, Fc as AgentPluginsVersion, Gc as isSupportedAgentPluginsVersion, Hc as PluginSchemaKind, Ic as LoadAgentPluginOptions, Kc as parseSchemaId, Lc as LoadedPlugin, Mc as PLUGIN_MANIFEST_FILE, Nc as defaultPluginDataRoot, Oc as expandPluginVars, Pc as loadAgentPlugin, Rc as PluginAuthor, Uc as SUPPORTED_AGENT_PLUGINS_VERSIONS, Vc as PluginManifest, Wc as agentPluginsSchemaId, jc as validatePluginManifest, kc as ManifestValidation, zc as PluginComponentStatus } from "./index-
|
|
1
|
+
import { Ac as parsePluginManifest, Bc as PluginDiagnostic, Dc as PLUGIN_MCP_FILE, Ec as PLUGIN_SKILLS_DIR, Fc as AgentPluginsVersion, Gc as isSupportedAgentPluginsVersion, Hc as PluginSchemaKind, Ic as LoadAgentPluginOptions, Kc as parseSchemaId, Lc as LoadedPlugin, Mc as PLUGIN_MANIFEST_FILE, Nc as defaultPluginDataRoot, Oc as expandPluginVars, Pc as loadAgentPlugin, Rc as PluginAuthor, Uc as SUPPORTED_AGENT_PLUGINS_VERSIONS, Vc as PluginManifest, Wc as agentPluginsSchemaId, jc as validatePluginManifest, kc as ManifestValidation, zc as PluginComponentStatus } from "./index-DCYh6lOp.js";
|
|
2
2
|
export { type AgentPluginsVersion, type LoadAgentPluginOptions, type LoadedPlugin, type ManifestValidation, PLUGIN_MANIFEST_FILE, PLUGIN_MCP_FILE, PLUGIN_SKILLS_DIR, type PluginAuthor, type PluginComponentStatus, type PluginDiagnostic, type PluginManifest, type PluginSchemaKind, SUPPORTED_AGENT_PLUGINS_VERSIONS, agentPluginsSchemaId, defaultPluginDataRoot, expandPluginVars, isSupportedAgentPluginsVersion, loadAgentPlugin, parsePluginManifest, parseSchemaId, validatePluginManifest };
|
package/dist/presets.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Ji as AgentHookMap, Ki as _default, a as basicTools, i as _default$1, n as composePresets, r as definePreset, t as Preset } from "./index-
|
|
1
|
+
import { Ji as AgentHookMap, Ki as _default, a as basicTools, i as _default$1, n as composePresets, r as definePreset, t as Preset } from "./index-DCYh6lOp.js";
|
|
2
2
|
export { type AgentHookMap, Preset, _default as artifacts, _default$1 as basic, basicTools, composePresets, definePreset };
|
package/dist/presets.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Ct as basic_default, St as basicTools, Xt as artifacts_default, bt as composePresets, xt as definePreset } from "./agent-
|
|
1
|
+
import { Ct as basic_default, St as basicTools, Xt as artifacts_default, bt as composePresets, xt as definePreset } from "./agent-CJbmpTmA.js";
|
|
2
2
|
export { artifacts_default as artifacts, basic_default as basic, basicTools, composePresets, definePreset };
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
//#region src/tools/prompts.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Every native tool's LLM-facing description, in one place.
|
|
4
|
+
*
|
|
5
|
+
* This module is the source of truth: each tool file imports its
|
|
6
|
+
* `spec.description` from here rather than inlining it. It has no runtime
|
|
7
|
+
* dependencies (pure strings and tiny template functions) so hosts can import
|
|
8
|
+
* it from a config file — `zidane/tools/prompts` — read the defaults, and feed
|
|
9
|
+
* adjusted text into `AgentOptions.toolDescriptions`:
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { toolPrompts } from 'zidane/tools/prompts'
|
|
13
|
+
*
|
|
14
|
+
* createAgent({
|
|
15
|
+
* toolDescriptions: {
|
|
16
|
+
* read_file: toolPrompts.read_file.replace('Claude Code', 'the editor'),
|
|
17
|
+
* shell: cur => cur.replace(toolPrompts.shell.core, myShellIntro),
|
|
18
|
+
* },
|
|
19
|
+
* })
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* Scope is the top-level `spec.description` — the surface `toolDescriptions`
|
|
23
|
+
* overrides. Parameter descriptions live with their schemas in the tool files.
|
|
24
|
+
*
|
|
25
|
+
* Static tools are plain strings. Tools whose description depends on runtime
|
|
26
|
+
* configuration expose named fragments the factory joins conditionally; the
|
|
27
|
+
* fragments are the exact bytes the model receives, so `String#replace`
|
|
28
|
+
* against them is a precise edit.
|
|
29
|
+
*/
|
|
30
|
+
declare const toolPrompts: {
|
|
31
|
+
readonly read_file: "Read a file by path. Text files return lines [offset..offset+limit). Default offset=1, limit=2000. Each line is prefixed with its 1-indexed line number followed by a tab (e.g. `42\\tconst foo = bar`); the prefix is metadata, not part of the file. Mirrors Claude Code's `cat -n`-style compact output for token efficiency. A trailing footer explains how to read the rest when truncated. Images (png/jpg/gif/webp) and PDFs return structured attachments for capable models; other binary files return a short marker rather than mojibake.";
|
|
32
|
+
readonly write_file: "Write `content` to `path`, creating any missing parent directories. Overwrites existing files in full; prefer `edit` / `multi_edit` for surgical changes when you only want to alter part of a file. Returns one of: `Created <path> (N bytes)` (file did not exist), `Updated <path> (N bytes)` (content differed), or `No change needed: <path> already at target state (N bytes)`, so the model can detect no-ops without a separate `read_file`.";
|
|
33
|
+
readonly edit: "Replace exact `old_string` with `new_string` in a file. Fails if `old_string` is not unique unless `replace_all: true`. Prefer over `write_file` for surgical changes: preserves the rest of the file. Tolerates `read_file` line-number prefixes (`<N>\\t…`, `<N>|…`, or `<N>→…`) in `old_string` / `new_string`; they are stripped before matching/writing, so you can paste a numbered chunk verbatim.";
|
|
34
|
+
readonly multi_edit: "Apply a sequential list of edits to a file. Each edit operates on the result of the previous APPLIED edit. Prefer this over multiple `edit` calls when several non-overlapping changes are needed in the same file. Edits run best-effort: a per-step failure (`old_string` not found, ambiguous match without `replace_all`, identical strings) is reported in the result but does NOT block the remaining steps. The file is written iff at least one step applied. The result lists per-hunk outcomes (`applied` / `failed`) so the model can re-issue just the failures without resending the whole batch. Each step tolerates `read_file` line-number prefixes (`<N>\\t…`, `<N>|…`, or `<N>→…`) in `old_string` / `new_string`.";
|
|
35
|
+
readonly glob: "Match files by glob pattern (supports **, *, ?). Relative to the execution context cwd; patterns may reach outside the workspace (e.g. \"../shared/**/*.ts\"). By default each row is `<path>\\t<size-bytes>\\t<mtime-iso>`; set `metadata: false` for a plain newline-separated list of paths. Always sorted.";
|
|
36
|
+
readonly grep: "Search file contents by regex. Returns matching paths (default), match content, or per-file counts. Backed by ripgrep when available, with a portable shell-listing + regex fallback when `rg` is absent.";
|
|
37
|
+
readonly list_files: "List the immediate entries (files and subdirectories) at literal directory `path`. Returns a newline-separated list; subdirectories carry a trailing `/`; or `(empty directory)` when the directory exists but is empty. Non-recursive: use `glob` for pattern matching across nested directories.";
|
|
38
|
+
readonly fetch_url: "Fetch a public URL and return its body as plain text. HTML is reduced to text (scripts, styles, tags stripped; entities decoded). If a `web_search` tool is also available, use it first when you do not already know the exact URL. Only http(s) URLs are accepted; loopback, link-local, private, and cloud-metadata addresses are refused. Output is capped (default 200 KiB).";
|
|
39
|
+
readonly shell_kill: string;
|
|
40
|
+
readonly wait_task: string;
|
|
41
|
+
readonly record_artifact: string;
|
|
42
|
+
readonly read_chat_turns: string;
|
|
43
|
+
readonly model_search: string;
|
|
44
|
+
readonly skills_use: string;
|
|
45
|
+
readonly skills_read: string;
|
|
46
|
+
readonly skills_run_script: string; /** Default for `createInteractionTool` when the host passes no `description`. */
|
|
47
|
+
readonly interaction: "Request structured input from the user or external system.";
|
|
48
|
+
/**
|
|
49
|
+
* `shell` is assembled per run by `createShellTool`: `core` always; the
|
|
50
|
+
* `preferDedicated` block only for sibling tools actually registered
|
|
51
|
+
* (`swapHints` filtered by canonical name, tool names alias-resolved);
|
|
52
|
+
* `background` only when `run_in_background` is available.
|
|
53
|
+
*/
|
|
54
|
+
readonly shell: {
|
|
55
|
+
readonly core: string;
|
|
56
|
+
readonly preferDedicated: "When a dedicated tool fits, prefer it over shell:"; /** One `- <label>: use \`<tool>\` (not <instead>)` line per registered sibling. */
|
|
57
|
+
readonly swapHints: readonly [{
|
|
58
|
+
readonly canonical: "read_file";
|
|
59
|
+
readonly label: "Read files";
|
|
60
|
+
readonly instead: "cat/head/tail";
|
|
61
|
+
}, {
|
|
62
|
+
readonly canonical: "glob";
|
|
63
|
+
readonly label: "File search";
|
|
64
|
+
readonly instead: "find/ls";
|
|
65
|
+
}, {
|
|
66
|
+
readonly canonical: "grep";
|
|
67
|
+
readonly label: "Content search";
|
|
68
|
+
readonly instead: "grep/rg";
|
|
69
|
+
}, {
|
|
70
|
+
readonly canonical: "list_files";
|
|
71
|
+
readonly label: "Directory listings";
|
|
72
|
+
readonly instead: "ls";
|
|
73
|
+
}, {
|
|
74
|
+
readonly canonical: "edit";
|
|
75
|
+
readonly label: "Edit files";
|
|
76
|
+
readonly instead: "sed/awk";
|
|
77
|
+
}, {
|
|
78
|
+
readonly canonical: "write_file";
|
|
79
|
+
readonly label: "Write files";
|
|
80
|
+
readonly instead: "echo>/heredoc";
|
|
81
|
+
}];
|
|
82
|
+
readonly reminder: "Re-running `ls`/`cat` on the same path is not useful: the prior result is still current unless you wrote to that path since.";
|
|
83
|
+
readonly background: string;
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* `spawn`: `core` always; `modelTiering` when a model catalog is wired;
|
|
87
|
+
* `resume` when the tool persists child turns (`persist: true`).
|
|
88
|
+
*/
|
|
89
|
+
readonly spawn: {
|
|
90
|
+
readonly core: "Spawn a sub-agent for a self-contained task that benefits from isolation (separate context window, separate retries): for example, a deep research dive or a long codegen pass on a specific file. The sub-agent inherits your tool set (including `spawn` itself, depth-capped) and your system prompt unless overridden, runs independently, and returns its final response. Do NOT spawn for sequential steps you could do yourself.";
|
|
91
|
+
readonly modelTiering: " Children can run on a DIFFERENT model via the `model` field: cost-tier your delegation: mechanical, parallelizable, or high-volume search work belongs on cheaper/faster models, while synthesis and judgment stay on your own model.";
|
|
92
|
+
readonly resume: " A stopped or failed sub-agent can be CONTINUED instead of restarted: pass `resume` with its child label (e.g. \"child-2\") and put the continuation instruction in `task`; the child picks up with its prior conversation intact.";
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* `tool_search`: `core` + one closing sentence — `callableVia(dispatcher)`
|
|
96
|
+
* in dispatch mode (`call_tool`), `callable` otherwise.
|
|
97
|
+
*/
|
|
98
|
+
readonly tool_search: {
|
|
99
|
+
readonly core: string;
|
|
100
|
+
readonly callable: "Returned tools become callable for the rest of this run.";
|
|
101
|
+
readonly callableVia: (dispatcher: string) => string;
|
|
102
|
+
}; /** `call_tool` names the discovery tool (`tool_search` or the host's wire name). */
|
|
103
|
+
readonly call_tool: (discovery: string) => string;
|
|
104
|
+
/**
|
|
105
|
+
* `web_search`: `core` + `recency(monthYear)`, resolved on each spec read so
|
|
106
|
+
* the hint tracks the current month.
|
|
107
|
+
*/
|
|
108
|
+
readonly web_search: {
|
|
109
|
+
readonly core: string;
|
|
110
|
+
readonly recency: (monthYear: string) => string;
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
type ToolPrompts = typeof toolPrompts;
|
|
114
|
+
//#endregion
|
|
115
|
+
export { toolPrompts as n, ToolPrompts as t };
|
|
116
|
+
//# sourceMappingURL=prompts-Pqc3JdW_.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts-Pqc3JdW_.d.ts","names":[],"sources":["../src/tools/prompts.ts"],"mappings":";;AA6BA;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAa,WAAA;EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAmJD,WAAA,UAAqB,WAAW"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Ah as AnthropicParams, Bh as credentialIdentity, Fh as anthropic, Gh as resolveAnthropicMaxOutput, Hh as planAnthropicThinking, Ih as applyAnthropicCacheBreakpoints, Kh as resolveThinkingBinding, Lh as buildAnthropicClientOptions, Mh as EXTENDED_CACHE_TTL_BETA, Nh as THINKING_BINDING_SETTING_ENV, Oh as AnthropicBedrockConfig, Ph as ThinkingBindingBehavior, Rh as cacheWriteTtlMultiplier, Uh as resolveAnthropicAuthShape, Vh as defaultAnthropicMaxTokens, Wh as resolveAnthropicBetas, jh as AnthropicThinkingPlan, kh as AnthropicContextManagement, zh as classifyAnthropicError } from "../index-
|
|
1
|
+
import { Ah as AnthropicParams, Bh as credentialIdentity, Fh as anthropic, Gh as resolveAnthropicMaxOutput, Hh as planAnthropicThinking, Ih as applyAnthropicCacheBreakpoints, Kh as resolveThinkingBinding, Lh as buildAnthropicClientOptions, Mh as EXTENDED_CACHE_TTL_BETA, Nh as THINKING_BINDING_SETTING_ENV, Oh as AnthropicBedrockConfig, Ph as ThinkingBindingBehavior, Rh as cacheWriteTtlMultiplier, Uh as resolveAnthropicAuthShape, Vh as defaultAnthropicMaxTokens, Wh as resolveAnthropicBetas, jh as AnthropicThinkingPlan, kh as AnthropicContextManagement, zh as classifyAnthropicError } from "../index-DCYh6lOp.js";
|
|
2
2
|
export { AnthropicBedrockConfig, AnthropicContextManagement, AnthropicParams, AnthropicThinkingPlan, EXTENDED_CACHE_TTL_BETA, THINKING_BINDING_SETTING_ENV, ThinkingBindingBehavior, anthropic, applyAnthropicCacheBreakpoints, buildAnthropicClientOptions, cacheWriteTtlMultiplier, classifyAnthropicError, credentialIdentity, defaultAnthropicMaxTokens, planAnthropicThinking, resolveAnthropicAuthShape, resolveAnthropicBetas, resolveAnthropicMaxOutput, resolveThinkingBinding };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Dh as arcee, Eh as ArceeParams } from "../index-
|
|
1
|
+
import { Dh as arcee, Eh as ArceeParams } from "../index-DCYh6lOp.js";
|
|
2
2
|
export { ArceeParams, arcee };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Ch as BasetenParams, Th as planBasetenReasoning, wh as baseten } from "../index-
|
|
1
|
+
import { Ch as BasetenParams, Th as planBasetenReasoning, wh as baseten } from "../index-DCYh6lOp.js";
|
|
2
2
|
export { BasetenParams, baseten, planBasetenReasoning };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Sh as cerebras, xh as CerebrasParams } from "../index-
|
|
1
|
+
import { Sh as cerebras, xh as CerebrasParams } from "../index-DCYh6lOp.js";
|
|
2
2
|
export { CerebrasParams, cerebras };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { _h as LocalParams, vh as local } from "../index-
|
|
1
|
+
import { _h as LocalParams, vh as local } from "../index-DCYh6lOp.js";
|
|
2
2
|
export { LocalParams, local };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { $m as buildAssistantContent, Gm as OpenAICompatAuthHeader, Hm as ASSISTANT_TOOL_CALLS_TAG, Jm as OpenAICompatStreamError, Km as OpenAICompatHttpError, Qm as assistantMessage, Um as OAIMessage, Wm as OAITool, Xm as applyOAICacheBreakpoints, Ym as TOOL_RESULTS_TAG, Zm as applyOAIToolCacheBreakpoint, ah as openaiCompat, ch as userMessage, eh as classifyOpenAICompatError, ih as openAICompatPromptMessage, nh as formatTools, oh as toOAIMessages, qm as OpenAICompatParams, rh as mapOAIFinishReason, sh as toolResultsMessage, th as consumeSSE } from "../index-
|
|
1
|
+
import { $m as buildAssistantContent, Gm as OpenAICompatAuthHeader, Hm as ASSISTANT_TOOL_CALLS_TAG, Jm as OpenAICompatStreamError, Km as OpenAICompatHttpError, Qm as assistantMessage, Um as OAIMessage, Wm as OAITool, Xm as applyOAICacheBreakpoints, Ym as TOOL_RESULTS_TAG, Zm as applyOAIToolCacheBreakpoint, ah as openaiCompat, ch as userMessage, eh as classifyOpenAICompatError, ih as openAICompatPromptMessage, nh as formatTools, oh as toOAIMessages, qm as OpenAICompatParams, rh as mapOAIFinishReason, sh as toolResultsMessage, th as consumeSSE } from "../index-DCYh6lOp.js";
|
|
2
2
|
export { ASSISTANT_TOOL_CALLS_TAG, OAIMessage, OAITool, OpenAICompatAuthHeader, OpenAICompatHttpError, OpenAICompatParams, OpenAICompatStreamError, TOOL_RESULTS_TAG, applyOAICacheBreakpoints, applyOAIToolCacheBreakpoint, assistantMessage, buildAssistantContent, classifyOpenAICompatError, consumeSSE, formatTools, mapOAIFinishReason, openAICompatPromptMessage, openaiCompat, toOAIMessages, toolResultsMessage, userMessage };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { dh as mapCodexStopReason, fh as openai, lh as OpenAIParams, ph as toPiMessages, uh as classifyOpenAIError } from "../index-
|
|
1
|
+
import { dh as mapCodexStopReason, fh as openai, lh as OpenAIParams, ph as toPiMessages, uh as classifyOpenAIError } from "../index-DCYh6lOp.js";
|
|
2
2
|
export { OpenAIParams, classifyOpenAIError, mapCodexStopReason, openai, toPiMessages };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Bm as normalizeOpenRouterModelId, Vm as openrouter, zm as OpenRouterParams } from "../index-
|
|
1
|
+
import { Bm as normalizeOpenRouterModelId, Vm as openrouter, zm as OpenRouterParams } from "../index-DCYh6lOp.js";
|
|
2
2
|
export { OpenRouterParams, normalizeOpenRouterModelId, openrouter };
|
package/dist/providers/xai.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Mm as XaiParams, Nm as xai } from "../index-
|
|
1
|
+
import { Mm as XaiParams, Nm as xai } from "../index-DCYh6lOp.js";
|
|
2
2
|
export { XaiParams, xai };
|
package/dist/providers.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { $h as credentialsFilePath, Ah as AnthropicParams, Am as planZaiReasoning, Ch as BasetenParams, Cm as StreamOptions, Dh as arcee, Dm as ToolSpec, Dy as
|
|
1
|
+
import { $h as credentialsFilePath, Ah as AnthropicParams, Am as planZaiReasoning, Ay as getModelCatalog, Ch as BasetenParams, Cm as StreamOptions, Dh as arcee, Dm as ToolSpec, Dy as ModelCatalog, Eh as ArceeParams, Em as ToolResult, Fh as anthropic, Fm as SchemaSanitizeProfile, Gm as OpenAICompatAuthHeader, Ih as applyAnthropicCacheBreakpoints, Im as SchemaSanitizeResult, Jh as PromptCacheKeyOption, Km as OpenAICompatHttpError, Lm as sanitizeToolSchema, Mm as XaiParams, Nm as xai, Om as TurnResult, Oy as ModelCatalogEntry, Pm as SchemaSanitizeOptions, Qh as ResolveOAuthApiKeyOptions, Rm as sanitizeToolSpecs, Sh as cerebras, Sm as StreamCallbacks, Th as planBasetenReasoning, Tm as ToolCall, Vm as openrouter, Xh as resolvePromptCacheKey, Yh as derivePromptCacheKey, Zh as OAuthParams, _h as LocalParams, _m as HistoryRepair, ag as resolveOAuthApiKey, ah as openaiCompat, bh as cursor, bm as ProviderCapabilities, cg as ensureBundledOAuthFlows, dg as refreshAnthropicToken, eg as credentialsFromParams, eh as classifyOpenAICompatError, fg as refreshOpenAICodexToken, fh as openai, gh as planMistralReasoning, hh as mistral, ig as registerCustomOAuthProvider, jm as zai, jy as setModelCatalog, km as ZaiParams, ky as ModelCatalogSource, lg as getOAuthApiKey, lh as OpenAIParams, mh as MistralParams, ng as isOAuthAccessToken, og as writeOAuthCredentials, pg as registerOAuthProvider, qh as PromptCacheKeyContext, qm as OpenAICompatParams, rg as readOAuthCredentials, rh as mapOAIFinishReason, sg as OAuthProviderInterface, tg as extractRuntimeCredentials, ug as getOAuthProvider, vh as local, vm as InputTransformation, wh as baseten, wm as TokenCountPayload, xh as CerebrasParams, xm as ProviderMeta, yh as CursorParams, ym as Provider, zm as OpenRouterParams } from "./index-DCYh6lOp.js";
|
|
2
2
|
export { type AnthropicParams, type ArceeParams, type BasetenParams, type CerebrasParams, type CursorParams, HistoryRepair, InputTransformation, type LocalParams, type MistralParams, type ModelCatalog, type ModelCatalogEntry, type ModelCatalogSource, type OAuthParams, type OAuthProviderInterface, type OpenAICompatAuthHeader, OpenAICompatHttpError, type OpenAICompatParams, type OpenAIParams, type OpenRouterParams, type PromptCacheKeyContext, type PromptCacheKeyOption, Provider, ProviderCapabilities, ProviderMeta, type ResolveOAuthApiKeyOptions, type SchemaSanitizeOptions, type SchemaSanitizeProfile, type SchemaSanitizeResult, StreamCallbacks, StreamOptions, TokenCountPayload, ToolCall, ToolResult, ToolSpec, TurnResult, type XaiParams, type ZaiParams, anthropic, applyAnthropicCacheBreakpoints, arcee, baseten, cerebras, classifyOpenAICompatError, credentialsFilePath, credentialsFromParams, cursor, derivePromptCacheKey, ensureBundledOAuthFlows, extractRuntimeCredentials, getModelCatalog, getOAuthApiKey, getOAuthProvider, isOAuthAccessToken, local, mapOAIFinishReason, mistral, openai, openaiCompat, openrouter, planBasetenReasoning, planMistralReasoning, planZaiReasoning, readOAuthCredentials, refreshAnthropicToken, refreshOpenAICodexToken, registerCustomOAuthProvider, registerOAuthProvider, resolveOAuthApiKey, resolvePromptCacheKey, sanitizeToolSchema, sanitizeToolSpecs, setModelCatalog, writeOAuthCredentials, xai, zai };
|
package/dist/restate.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $i as McpToolMeta, Cm as StreamOptions, D_ as ToolContext,
|
|
1
|
+
import { $i as McpToolMeta, Cm as StreamOptions, D_ as ToolContext, K_ as ToolStateStore, O_ as ToolDef, _g as AgentStats, ea as McpToolWrap, hg as AgentClock, lv as SessionStore, m_ as ToolResultContent, mg as AgentBehavior, t_ as SessionTurn, u_ as ToolBatchExecutor, ym as Provider } from "./index-DCYh6lOp.js";
|
|
2
2
|
import { S as TaskExitInfo, f as DetachedTasksCapability, h as ExecutionHandle, x as TaskEntry } from "./isolation-Kfoof0MM.js";
|
|
3
3
|
|
|
4
4
|
//#region src/restate/types.d.ts
|
|
@@ -146,6 +146,18 @@ interface AwakeableWithTimeoutOptions<TPromise extends Promise<unknown> = Promis
|
|
|
146
146
|
* ```
|
|
147
147
|
*/
|
|
148
148
|
declare function awakeableWithTimeout<T, TPromise extends Promise<unknown> = Promise<unknown>>(ctx: RestateContextLike, options?: AwakeableWithTimeoutOptions<TPromise>): RestateAwakeable<T | null>;
|
|
149
|
+
/**
|
|
150
|
+
* Race an already-minted awakeable promise against a durable
|
|
151
|
+
* `ctx.sleep(timeoutMs)`. Split out from {@link awakeableWithTimeout} so a
|
|
152
|
+
* caller that must run journaled steps between minting and parking (see
|
|
153
|
+
* `restateWaitBackground`) can arm the race at park time: a
|
|
154
|
+
* `RestatePromise.race` starts awaiting the SDK's single-waiter progress
|
|
155
|
+
* channel as soon as it is built, so building it early and then awaiting a
|
|
156
|
+
* `ctx.run` is two concurrent waiters — `awaitNext already pending`.
|
|
157
|
+
*
|
|
158
|
+
* Without a positive `timeoutMs` the promise is returned untouched.
|
|
159
|
+
*/
|
|
160
|
+
declare function raceWithTimeout<T, TPromise extends Promise<unknown> = Promise<unknown>>(ctx: RestateContextLike, promise: Promise<T>, options?: AwakeableWithTimeoutOptions<TPromise>): Promise<T | null>;
|
|
149
161
|
//#endregion
|
|
150
162
|
//#region src/restate/awakeable-tool.d.ts
|
|
151
163
|
interface RestateAwakeableToolOptions<T = unknown> {
|
|
@@ -1096,7 +1108,7 @@ interface RestateWaitBackgroundOptions {
|
|
|
1096
1108
|
timeoutMs?: number;
|
|
1097
1109
|
/**
|
|
1098
1110
|
* Durable race combinator for the timeout race — pass `RestatePromise` from
|
|
1099
|
-
* the SDK. See {@link
|
|
1111
|
+
* the SDK. See {@link raceWithTimeout}; native `Promise.race` is the
|
|
1100
1112
|
* replay-safe fallback.
|
|
1101
1113
|
*/
|
|
1102
1114
|
promises?: RestatePromiseRaceLike;
|
|
@@ -1117,5 +1129,5 @@ declare function restateWaitBackground(options: RestateWaitBackgroundOptions): (
|
|
|
1117
1129
|
signal?: AbortSignal;
|
|
1118
1130
|
}) => Promise<TaskExitInfo | null>;
|
|
1119
1131
|
//#endregion
|
|
1120
|
-
export { type AwakeableWithTimeoutOptions, type ChildRunRequest, type ChildRunResult, DEFAULT_TOOL_STATE_KEY, type InFlightChild, type MergedChild, type ReplayDoneHooks, type ReplayTracker, type ReplayTrackerOptions, type RestateAwakeable, type RestateAwakeableToolOptions, type RestateClockOptions, type RestateContextLike, type RestateDurableStart, type RestateDurableWait, type RestateMcpToolWrapOptions, type RestateObjectContextLike, type RestatePromiseAllLike, type RestatePromiseLike, type RestatePromiseRaceLike, type RestateProviderOptions, type RestateRunOptions, type RestateSessionStoreOptions, type RestateSpawnToolOptions, type RestateToolBatchExecutorOptions, type RestateToolOptions, type RestateToolStateStoreOptions, type RestateWaitBackgroundOptions, awakeableWithTimeout, createReplayTracker, deterministicUuid, replayAwareAbort, restateAwakeableTool, restateBehavior, restateClock, restateMcpToolWrap, restateProvider, restateSessionStore, restateSpawnTool, restateTool, restateToolBatchExecutor, restateToolStateStore, restateWaitBackground, shouldRethrowRestateControlError, wrapAgentTools };
|
|
1132
|
+
export { type AwakeableWithTimeoutOptions, type ChildRunRequest, type ChildRunResult, DEFAULT_TOOL_STATE_KEY, type InFlightChild, type MergedChild, type ReplayDoneHooks, type ReplayTracker, type ReplayTrackerOptions, type RestateAwakeable, type RestateAwakeableToolOptions, type RestateClockOptions, type RestateContextLike, type RestateDurableStart, type RestateDurableWait, type RestateMcpToolWrapOptions, type RestateObjectContextLike, type RestatePromiseAllLike, type RestatePromiseLike, type RestatePromiseRaceLike, type RestateProviderOptions, type RestateRunOptions, type RestateSessionStoreOptions, type RestateSpawnToolOptions, type RestateToolBatchExecutorOptions, type RestateToolOptions, type RestateToolStateStoreOptions, type RestateWaitBackgroundOptions, awakeableWithTimeout, createReplayTracker, deterministicUuid, raceWithTimeout, replayAwareAbort, restateAwakeableTool, restateBehavior, restateClock, restateMcpToolWrap, restateProvider, restateSessionStore, restateSpawnTool, restateTool, restateToolBatchExecutor, restateToolStateStore, restateWaitBackground, shouldRethrowRestateControlError, wrapAgentTools };
|
|
1121
1133
|
//# sourceMappingURL=restate.d.ts.map
|
package/dist/restate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restate.d.ts","names":[],"sources":["../src/restate/types.ts","../src/restate/awakeable.ts","../src/restate/awakeable-tool.ts","../src/restate/behavior.ts","../src/restate/clock.ts","../src/restate/errors.ts","../src/restate/replay.ts","../src/restate/mcp.ts","../src/restate/parallel.ts","../src/restate/provider.ts","../src/restate/session.ts","../src/restate/spawn.ts","../src/restate/tool.ts","../src/restate/tool-state.ts","../src/restate/wait-background.ts"],"mappings":";;;;;;;;AAmBA;;;;;;;;;;;AAYO;AAUP;;UAtBiB,iBAAA;EAwBC;EAtBhB,gBAAA;EAqBA;EAnBA,gBAAA;EAoBS;EAlBT,oBAAA;EAkBkB;EAhBlB,gBAAA;EAuCe;EArCf,mBAAA;EAqCiC;EAnCjC,KAAA;AAAA;;;;;;;;UAUe,gBAAA;EACf,EAAA;EACA,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;UAuBF,kBAAA;EACf,GAAA,MACE,IAAA,UACA,EAAA,QAAU,OAAA,CAAQ,CAAA,IAAK,CAAA,EACvB,OAAA,GAAU,iBAAA,KACP,OAAA,CAAQ,CAAA;EACb,IAAA;IAAQ,GAAA,QAAW,OAAA;EAAA;EACnB,IAAA;IAAQ,MAAA;EAAA;EACR,SAAA,WAAoB,gBAAA,CAAiB,CAAA;EA0BP;;;;;;;;;;;;EAb9B,KAAA,GAAQ,MAAA,aAAmB,OAAA;AAAA;;;;;;AAcP;;UAJL,wBAAA,SAAiC,kBAAA;EAChD,GAAA;EACA,GAAA,MAAS,IAAA,aAAiB,OAAA,CAAQ,CAAA;EAClC,GAAA,MAAS,IAAA,UAAc,KAAA,EAAO,CAAA;EAC9B,KAAA,GAAQ,IAAA;AAAA;;;;;AAtEH;AAUP;;;;;UClBiB,sBAAA,kBAAwC,OAAA,YAAmB,OAAA;EAC1E,IAAA,GAAO,MAAA,WAAiB,QAAA,OAAe,OAAA;AAAA;AAAA,UAGxB,2BAAA,kBAA6C,OAAA,YAAmB,OAAA;EDgB7D;AAAA;AAuBpB;;EClCE,SAAA;EDqCoB;;;;;;;EC7BpB,QAAA,GAAW,sBAAA,CAAuB,QAAA;AAAA;;;;;;;;;;;;;;;;;iBAmBpB,oBAAA,qBAAyC,OAAA,YAAmB,OAAA,WAC1E,GAAA,EAAK,kBAAA,EACL,OAAA,GAAS,2BAAA,CAA4B,QAAA,IACpC,gBAAA,CAAiB,CAAA;;;
|
|
1
|
+
{"version":3,"file":"restate.d.ts","names":[],"sources":["../src/restate/types.ts","../src/restate/awakeable.ts","../src/restate/awakeable-tool.ts","../src/restate/behavior.ts","../src/restate/clock.ts","../src/restate/errors.ts","../src/restate/replay.ts","../src/restate/mcp.ts","../src/restate/parallel.ts","../src/restate/provider.ts","../src/restate/session.ts","../src/restate/spawn.ts","../src/restate/tool.ts","../src/restate/tool-state.ts","../src/restate/wait-background.ts"],"mappings":"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"}
|