actoviq-agent-sdk 0.4.21 → 0.4.22
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-zh.md +50 -113
- package/README.md +51 -164
- package/assets/hadamard-icon.ico +0 -0
- package/assets/hadamard-icon.png +0 -0
- package/bin/hadamard-gui.js +31 -12
- package/dist/src/codeIntel/codeIntelligenceService.d.ts +16 -0
- package/dist/src/codeIntel/codeIntelligenceService.d.ts.map +1 -1
- package/dist/src/codeIntel/codeIntelligenceService.js +87 -2
- package/dist/src/codeIntel/codeIntelligenceService.js.map +1 -1
- package/dist/src/codeIntel/codeIntelligenceTools.d.ts.map +1 -1
- package/dist/src/codeIntel/codeIntelligenceTools.js +6 -0
- package/dist/src/codeIntel/codeIntelligenceTools.js.map +1 -1
- package/dist/src/codeIntel/index.d.ts +1 -0
- package/dist/src/codeIntel/index.d.ts.map +1 -1
- package/dist/src/codeIntel/index.js +1 -0
- package/dist/src/codeIntel/index.js.map +1 -1
- package/dist/src/codeIntel/languageServerPresets.d.ts +13 -0
- package/dist/src/codeIntel/languageServerPresets.d.ts.map +1 -0
- package/dist/src/codeIntel/languageServerPresets.js +51 -0
- package/dist/src/codeIntel/languageServerPresets.js.map +1 -0
- package/dist/src/codeIntel/languageServerRegistry.d.ts +1 -0
- package/dist/src/codeIntel/languageServerRegistry.d.ts.map +1 -1
- package/dist/src/codeIntel/languageServerRegistry.js +2 -2
- package/dist/src/codeIntel/languageServerRegistry.js.map +1 -1
- package/dist/src/config/resolveRuntimeConfig.d.ts.map +1 -1
- package/dist/src/config/resolveRuntimeConfig.js +5 -0
- package/dist/src/config/resolveRuntimeConfig.js.map +1 -1
- package/dist/src/extensions/builtInExtensions.d.ts +61 -0
- package/dist/src/extensions/builtInExtensions.d.ts.map +1 -0
- package/dist/src/extensions/builtInExtensions.js +218 -0
- package/dist/src/extensions/builtInExtensions.js.map +1 -0
- package/dist/src/extensions/filterOutputPolicy.d.ts +21 -0
- package/dist/src/extensions/filterOutputPolicy.d.ts.map +1 -0
- package/dist/src/extensions/filterOutputPolicy.js +121 -0
- package/dist/src/extensions/filterOutputPolicy.js.map +1 -0
- package/dist/src/extensions/securityPolicy.d.ts +27 -0
- package/dist/src/extensions/securityPolicy.d.ts.map +1 -0
- package/dist/src/extensions/securityPolicy.js +238 -0
- package/dist/src/extensions/securityPolicy.js.map +1 -0
- package/dist/src/extensions/sessionCostTracker.d.ts +63 -0
- package/dist/src/extensions/sessionCostTracker.d.ts.map +1 -0
- package/dist/src/extensions/sessionCostTracker.js +213 -0
- package/dist/src/extensions/sessionCostTracker.js.map +1 -0
- package/dist/src/extensions/taskNotifications.d.ts +31 -0
- package/dist/src/extensions/taskNotifications.d.ts.map +1 -0
- package/dist/src/extensions/taskNotifications.js +50 -0
- package/dist/src/extensions/taskNotifications.js.map +1 -0
- package/dist/src/extensions/usageBar.d.ts +35 -0
- package/dist/src/extensions/usageBar.d.ts.map +1 -0
- package/dist/src/extensions/usageBar.js +67 -0
- package/dist/src/extensions/usageBar.js.map +1 -0
- package/dist/src/gui/contextRailStore.d.ts +13 -0
- package/dist/src/gui/contextRailStore.d.ts.map +1 -1
- package/dist/src/gui/contextRailStore.js +16 -0
- package/dist/src/gui/contextRailStore.js.map +1 -1
- package/dist/src/gui/electronMain.js +45 -5
- package/dist/src/gui/electronMain.js.map +1 -1
- package/dist/src/gui/guiDesignClientScript.d.ts.map +1 -1
- package/dist/src/gui/guiDesignClientScript.js +31 -0
- package/dist/src/gui/guiDesignClientScript.js.map +1 -1
- package/dist/src/gui/guiUsageRoutingAssets.d.ts +7 -0
- package/dist/src/gui/guiUsageRoutingAssets.d.ts.map +1 -0
- package/dist/src/gui/guiUsageRoutingAssets.js +509 -0
- package/dist/src/gui/guiUsageRoutingAssets.js.map +1 -0
- package/dist/src/gui/guiUsageRoutingHttpController.d.ts +11 -0
- package/dist/src/gui/guiUsageRoutingHttpController.d.ts.map +1 -0
- package/dist/src/gui/guiUsageRoutingHttpController.js +125 -0
- package/dist/src/gui/guiUsageRoutingHttpController.js.map +1 -0
- package/dist/src/gui/guiUsageRoutingRuntime.d.ts +36 -0
- package/dist/src/gui/guiUsageRoutingRuntime.d.ts.map +1 -0
- package/dist/src/gui/guiUsageRoutingRuntime.js +98 -0
- package/dist/src/gui/guiUsageRoutingRuntime.js.map +1 -0
- package/dist/src/gui/hadamardGui.d.ts +5 -0
- package/dist/src/gui/hadamardGui.d.ts.map +1 -1
- package/dist/src/gui/hadamardGui.js +159 -16
- package/dist/src/gui/hadamardGui.js.map +1 -1
- package/dist/src/gui/hadamardGuiAssets.d.ts.map +1 -1
- package/dist/src/gui/hadamardGuiAssets.js +297 -41
- package/dist/src/gui/hadamardGuiAssets.js.map +1 -1
- package/dist/src/index.d.ts +32 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +16 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/keyway/electronSecretStore.d.ts +37 -0
- package/dist/src/keyway/electronSecretStore.d.ts.map +1 -0
- package/dist/src/keyway/electronSecretStore.js +105 -0
- package/dist/src/keyway/electronSecretStore.js.map +1 -0
- package/dist/src/keyway/embeddedKeyway.d.ts +34 -0
- package/dist/src/keyway/embeddedKeyway.d.ts.map +1 -0
- package/dist/src/keyway/embeddedKeyway.js +81 -0
- package/dist/src/keyway/embeddedKeyway.js.map +1 -0
- package/dist/src/keyway/keywayLoopbackGateway.d.ts +30 -0
- package/dist/src/keyway/keywayLoopbackGateway.d.ts.map +1 -0
- package/dist/src/keyway/keywayLoopbackGateway.js +71 -0
- package/dist/src/keyway/keywayLoopbackGateway.js.map +1 -0
- package/dist/src/keyway/keywayMigrationService.d.ts +44 -0
- package/dist/src/keyway/keywayMigrationService.d.ts.map +1 -0
- package/dist/src/keyway/keywayMigrationService.js +219 -0
- package/dist/src/keyway/keywayMigrationService.js.map +1 -0
- package/dist/src/keyway/keywayModelApi.d.ts +24 -0
- package/dist/src/keyway/keywayModelApi.d.ts.map +1 -0
- package/dist/src/keyway/keywayModelApi.js +106 -0
- package/dist/src/keyway/keywayModelApi.js.map +1 -0
- package/dist/src/keyway/keywayPorts.d.ts +189 -0
- package/dist/src/keyway/keywayPorts.d.ts.map +1 -0
- package/dist/src/keyway/keywayPorts.js +2 -0
- package/dist/src/keyway/keywayPorts.js.map +1 -0
- package/dist/src/keyway/keywayProviderExecutor.d.ts +30 -0
- package/dist/src/keyway/keywayProviderExecutor.d.ts.map +1 -0
- package/dist/src/keyway/keywayProviderExecutor.js +257 -0
- package/dist/src/keyway/keywayProviderExecutor.js.map +1 -0
- package/dist/src/keyway/routingComposition.d.ts +18 -0
- package/dist/src/keyway/routingComposition.d.ts.map +1 -0
- package/dist/src/keyway/routingComposition.js +19 -0
- package/dist/src/keyway/routingComposition.js.map +1 -0
- package/dist/src/keyway/usageRoutingAdminService.d.ts +86 -0
- package/dist/src/keyway/usageRoutingAdminService.d.ts.map +1 -0
- package/dist/src/keyway/usageRoutingAdminService.js +384 -0
- package/dist/src/keyway/usageRoutingAdminService.js.map +1 -0
- package/dist/src/nativeCli/crushManagedClient.d.ts +84 -0
- package/dist/src/nativeCli/crushManagedClient.d.ts.map +1 -0
- package/dist/src/nativeCli/crushManagedClient.js +978 -0
- package/dist/src/nativeCli/crushManagedClient.js.map +1 -0
- package/dist/src/nativeCli/crushNativeCliClient.d.ts +19 -0
- package/dist/src/nativeCli/crushNativeCliClient.d.ts.map +1 -0
- package/dist/src/nativeCli/crushNativeCliClient.js +243 -0
- package/dist/src/nativeCli/crushNativeCliClient.js.map +1 -0
- package/dist/src/nativeCli/keywayNativeCliAdapter.d.ts +31 -0
- package/dist/src/nativeCli/keywayNativeCliAdapter.d.ts.map +1 -0
- package/dist/src/nativeCli/keywayNativeCliAdapter.js +35 -0
- package/dist/src/nativeCli/keywayNativeCliAdapter.js.map +1 -0
- package/dist/src/nativeCli/nativeCliAuth.d.ts +24 -0
- package/dist/src/nativeCli/nativeCliAuth.d.ts.map +1 -0
- package/dist/src/nativeCli/nativeCliAuth.js +327 -0
- package/dist/src/nativeCli/nativeCliAuth.js.map +1 -0
- package/dist/src/nativeCli/nativeCliClient.d.ts +16 -0
- package/dist/src/nativeCli/nativeCliClient.d.ts.map +1 -0
- package/dist/src/nativeCli/nativeCliClient.js +575 -0
- package/dist/src/nativeCli/nativeCliClient.js.map +1 -0
- package/dist/src/nativeCli/nativeCliCodewhaleProtocol.d.ts +18 -0
- package/dist/src/nativeCli/nativeCliCodewhaleProtocol.d.ts.map +1 -0
- package/dist/src/nativeCli/nativeCliCodewhaleProtocol.js +376 -0
- package/dist/src/nativeCli/nativeCliCodewhaleProtocol.js.map +1 -0
- package/dist/src/nativeCli/nativeCliContracts.d.ts +22 -0
- package/dist/src/nativeCli/nativeCliContracts.d.ts.map +1 -0
- package/dist/src/nativeCli/nativeCliContracts.js +2 -0
- package/dist/src/nativeCli/nativeCliContracts.js.map +1 -0
- package/dist/src/nativeCli/nativeCliCursorProtocol.d.ts +7 -0
- package/dist/src/nativeCli/nativeCliCursorProtocol.d.ts.map +1 -0
- package/dist/src/nativeCli/nativeCliCursorProtocol.js +210 -0
- package/dist/src/nativeCli/nativeCliCursorProtocol.js.map +1 -0
- package/dist/src/nativeCli/nativeCliEnvironment.d.ts +3 -0
- package/dist/src/nativeCli/nativeCliEnvironment.d.ts.map +1 -0
- package/dist/src/nativeCli/nativeCliEnvironment.js +17 -0
- package/dist/src/nativeCli/nativeCliEnvironment.js.map +1 -0
- package/dist/src/nativeCli/nativeCliExecResolver.d.ts +26 -0
- package/dist/src/nativeCli/nativeCliExecResolver.d.ts.map +1 -0
- package/dist/src/nativeCli/nativeCliExecResolver.js +152 -0
- package/dist/src/nativeCli/nativeCliExecResolver.js.map +1 -0
- package/dist/src/nativeCli/nativeCliPiProtocol.d.ts +15 -0
- package/dist/src/nativeCli/nativeCliPiProtocol.d.ts.map +1 -0
- package/dist/src/nativeCli/nativeCliPiProtocol.js +329 -0
- package/dist/src/nativeCli/nativeCliPiProtocol.js.map +1 -0
- package/dist/src/nativeCli/nativeCliProcessTree.d.ts +3 -0
- package/dist/src/nativeCli/nativeCliProcessTree.d.ts.map +1 -0
- package/dist/src/nativeCli/nativeCliProcessTree.js +104 -0
- package/dist/src/nativeCli/nativeCliProcessTree.js.map +1 -0
- package/dist/src/nativeCli/reasonixAcpSession.d.ts +35 -0
- package/dist/src/nativeCli/reasonixAcpSession.d.ts.map +1 -0
- package/dist/src/nativeCli/reasonixAcpSession.js +472 -0
- package/dist/src/nativeCli/reasonixAcpSession.js.map +1 -0
- package/dist/src/nativeCli/reasonixManagedClient.d.ts +56 -0
- package/dist/src/nativeCli/reasonixManagedClient.d.ts.map +1 -0
- package/dist/src/nativeCli/reasonixManagedClient.js +293 -0
- package/dist/src/nativeCli/reasonixManagedClient.js.map +1 -0
- package/dist/src/nativeCli/reasonixNativeCliClient.d.ts +20 -0
- package/dist/src/nativeCli/reasonixNativeCliClient.d.ts.map +1 -0
- package/dist/src/nativeCli/reasonixNativeCliClient.js +317 -0
- package/dist/src/nativeCli/reasonixNativeCliClient.js.map +1 -0
- package/dist/src/parity/bridgeExecResolver.d.ts +2 -25
- package/dist/src/parity/bridgeExecResolver.d.ts.map +1 -1
- package/dist/src/parity/bridgeExecResolver.js +2 -151
- package/dist/src/parity/bridgeExecResolver.js.map +1 -1
- package/dist/src/parity/bridgeProcessTree.d.ts +2 -2
- package/dist/src/parity/bridgeProcessTree.d.ts.map +1 -1
- package/dist/src/parity/bridgeProcessTree.js +2 -82
- package/dist/src/parity/bridgeProcessTree.js.map +1 -1
- package/dist/src/parity/crushManagedClient.d.ts +2 -83
- package/dist/src/parity/crushManagedClient.d.ts.map +1 -1
- package/dist/src/parity/crushManagedClient.js +2 -977
- package/dist/src/parity/crushManagedClient.js.map +1 -1
- package/dist/src/parity/externalCliAuth.d.ts +2 -22
- package/dist/src/parity/externalCliAuth.d.ts.map +1 -1
- package/dist/src/parity/externalCliAuth.js +2 -295
- package/dist/src/parity/externalCliAuth.js.map +1 -1
- package/dist/src/parity/hadamardBridgeSdk.d.ts.map +1 -1
- package/dist/src/parity/hadamardBridgeSdk.js +14 -1
- package/dist/src/parity/hadamardBridgeSdk.js.map +1 -1
- package/dist/src/parity/nativeCliBridgeAdapter.d.ts +6 -0
- package/dist/src/parity/nativeCliBridgeAdapter.d.ts.map +1 -0
- package/dist/src/parity/nativeCliBridgeAdapter.js +38 -0
- package/dist/src/parity/nativeCliBridgeAdapter.js.map +1 -0
- package/dist/src/parity/reasonixAcpSession.d.ts +2 -34
- package/dist/src/parity/reasonixAcpSession.d.ts.map +1 -1
- package/dist/src/parity/reasonixAcpSession.js +2 -471
- package/dist/src/parity/reasonixAcpSession.js.map +1 -1
- package/dist/src/parity/reasonixManagedClient.d.ts +2 -55
- package/dist/src/parity/reasonixManagedClient.d.ts.map +1 -1
- package/dist/src/parity/reasonixManagedClient.js +2 -292
- package/dist/src/parity/reasonixManagedClient.js.map +1 -1
- package/dist/src/provider/openai-client.js +2 -2
- package/dist/src/provider/openai-client.js.map +1 -1
- package/dist/src/provider/openai-model-api.d.ts.map +1 -1
- package/dist/src/provider/openai-model-api.js +5 -1
- package/dist/src/provider/openai-model-api.js.map +1 -1
- package/dist/src/runtime/agentClient.d.ts +14 -1
- package/dist/src/runtime/agentClient.d.ts.map +1 -1
- package/dist/src/runtime/agentClient.js +60 -6
- package/dist/src/runtime/agentClient.js.map +1 -1
- package/dist/src/runtime/toolPolicyPipeline.d.ts +32 -1
- package/dist/src/runtime/toolPolicyPipeline.d.ts.map +1 -1
- package/dist/src/runtime/toolPolicyPipeline.js +43 -3
- package/dist/src/runtime/toolPolicyPipeline.js.map +1 -1
- package/dist/src/tui/hadamardTuiController.d.ts.map +1 -1
- package/dist/src/tui/hadamardTuiController.js +62 -8
- package/dist/src/tui/hadamardTuiController.js.map +1 -1
- package/dist/src/tui/tuiBasicCommandHandler.d.ts +4 -0
- package/dist/src/tui/tuiBasicCommandHandler.d.ts.map +1 -1
- package/dist/src/tui/tuiBasicCommandHandler.js +23 -2
- package/dist/src/tui/tuiBasicCommandHandler.js.map +1 -1
- package/dist/src/tui/tuiCatalogCommandHandler.d.ts +2 -0
- package/dist/src/tui/tuiCatalogCommandHandler.d.ts.map +1 -1
- package/dist/src/tui/tuiCatalogCommandHandler.js +10 -1
- package/dist/src/tui/tuiCatalogCommandHandler.js.map +1 -1
- package/dist/src/tui/tuiUsageRoutingRuntime.d.ts +22 -0
- package/dist/src/tui/tuiUsageRoutingRuntime.d.ts.map +1 -0
- package/dist/src/tui/tuiUsageRoutingRuntime.js +81 -0
- package/dist/src/tui/tuiUsageRoutingRuntime.js.map +1 -0
- package/dist/src/types.d.ts +16 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/ui/commandSurface.d.ts.map +1 -1
- package/dist/src/ui/commandSurface.js +45 -1
- package/dist/src/ui/commandSurface.js.map +1 -1
- package/dist/src/ui/extensionsCommandView.d.ts +18 -0
- package/dist/src/ui/extensionsCommandView.d.ts.map +1 -0
- package/dist/src/ui/extensionsCommandView.js +82 -0
- package/dist/src/ui/extensionsCommandView.js.map +1 -0
- package/dist/src/ui/lspCommandView.d.ts +17 -0
- package/dist/src/ui/lspCommandView.d.ts.map +1 -0
- package/dist/src/ui/lspCommandView.js +25 -0
- package/dist/src/ui/lspCommandView.js.map +1 -0
- package/dist/src/ui/usageRoutingCommand.d.ts +13 -0
- package/dist/src/ui/usageRoutingCommand.d.ts.map +1 -0
- package/dist/src/ui/usageRoutingCommand.js +224 -0
- package/dist/src/ui/usageRoutingCommand.js.map +1 -0
- package/dist/src/usage/budgetService.d.ts +28 -0
- package/dist/src/usage/budgetService.d.ts.map +1 -0
- package/dist/src/usage/budgetService.js +50 -0
- package/dist/src/usage/budgetService.js.map +1 -0
- package/dist/src/usage/contracts.d.ts +149 -0
- package/dist/src/usage/contracts.d.ts.map +1 -0
- package/dist/src/usage/contracts.js +2 -0
- package/dist/src/usage/contracts.js.map +1 -0
- package/dist/src/usage/index.d.ts +7 -0
- package/dist/src/usage/index.d.ts.map +1 -0
- package/dist/src/usage/index.js +4 -0
- package/dist/src/usage/index.js.map +1 -0
- package/dist/src/usage/usageLedger.d.ts +19 -0
- package/dist/src/usage/usageLedger.d.ts.map +1 -0
- package/dist/src/usage/usageLedger.js +389 -0
- package/dist/src/usage/usageLedger.js.map +1 -0
- package/dist/src/usage/usageQueryService.d.ts +12 -0
- package/dist/src/usage/usageQueryService.d.ts.map +1 -0
- package/dist/src/usage/usageQueryService.js +29 -0
- package/dist/src/usage/usageQueryService.js.map +1 -0
- package/package.json +14 -2
- package/scripts/prepare-gui-launcher.mjs +62 -0
|
@@ -68,12 +68,43 @@ export declare class ToolPolicyPipeline implements ToolPolicyPort {
|
|
|
68
68
|
}
|
|
69
69
|
/** Contribution seam: resolves a per-run pipeline (same pattern as the conversation extensions). */
|
|
70
70
|
export declare const toolPolicyFactoryKey: import("../contrib/contributionHost.js").ContributionServiceKey<(options: ExecuteConversationOptions) => ToolPolicyPort>;
|
|
71
|
+
/**
|
|
72
|
+
* Registry seam for policy listeners contributed outside the built-in set
|
|
73
|
+
* (built-in extensions, plugins). The pipeline factory reads it live per run,
|
|
74
|
+
* so listeners added or removed later take effect on the next run.
|
|
75
|
+
*/
|
|
76
|
+
export interface ToolPolicyListenerRegistry {
|
|
77
|
+
addPre(listener: ToolPrePolicyListener): void;
|
|
78
|
+
removePre(listener: ToolPrePolicyListener): boolean;
|
|
79
|
+
addPost(listener: ToolPostPolicyListener): void;
|
|
80
|
+
removePost(listener: ToolPostPolicyListener): boolean;
|
|
81
|
+
pre(): readonly ToolPrePolicyListener[];
|
|
82
|
+
post(): readonly ToolPostPolicyListener[];
|
|
83
|
+
}
|
|
84
|
+
export declare class InMemoryToolPolicyListenerRegistry implements ToolPolicyListenerRegistry {
|
|
85
|
+
private readonly preListeners;
|
|
86
|
+
private readonly postListeners;
|
|
87
|
+
addPre(listener: ToolPrePolicyListener): void;
|
|
88
|
+
removePre(listener: ToolPrePolicyListener): boolean;
|
|
89
|
+
addPost(listener: ToolPostPolicyListener): void;
|
|
90
|
+
removePost(listener: ToolPostPolicyListener): boolean;
|
|
91
|
+
pre(): readonly ToolPrePolicyListener[];
|
|
92
|
+
post(): readonly ToolPostPolicyListener[];
|
|
93
|
+
}
|
|
94
|
+
/** Global listener registry the built-in pipeline factory composes into every per-run pipeline. */
|
|
95
|
+
export declare const toolPolicyListenerRegistryKey: import("../contrib/contributionHost.js").ContributionServiceKey<ToolPolicyListenerRegistry>;
|
|
71
96
|
/** Built-in contribution: registers the behavior-preserving pipeline factory. */
|
|
72
97
|
export declare function createBuiltInToolPolicyContribution(): HadamardRuntimeContribution;
|
|
73
98
|
/**
|
|
74
99
|
* Default pipeline preserving the current executor behavior exactly:
|
|
75
100
|
* PreToolUse hooks, then the permission decision (with PermissionDecision
|
|
76
101
|
* hooks), then deny stops; post: spill shaping then PostToolUse hooks.
|
|
102
|
+
* Contributed listeners (`extra`) run before the built-in pre listeners
|
|
103
|
+
* (monotonic deny: they can only tighten) and after the built-in post
|
|
104
|
+
* listeners in the waterfall.
|
|
77
105
|
*/
|
|
78
|
-
export declare function createBuiltInToolPolicyPipeline(options: ExecuteConversationOptions
|
|
106
|
+
export declare function createBuiltInToolPolicyPipeline(options: ExecuteConversationOptions, extra?: {
|
|
107
|
+
pre?: readonly ToolPrePolicyListener[];
|
|
108
|
+
post?: readonly ToolPostPolicyListener[];
|
|
109
|
+
}): ToolPolicyPipeline;
|
|
79
110
|
//# sourceMappingURL=toolPolicyPipeline.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolPolicyPipeline.d.ts","sourceRoot":"","sources":["../../../src/runtime/toolPolicyPipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EACV,0BAA0B,EAC1B,mBAAmB,EACnB,2BAA2B,EAC5B,MAAM,aAAa,CAAC;AAOrB,OAAO,KAAK,EAAE,0BAA0B,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGzF,OAAO,KAAK,EAA4B,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAE5G,qDAAqD;AACrD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,mBAAmB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,IAAI,CAAC;IACtE,uFAAuF;IACvF,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wEAAwE;AACxE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;IACnC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,0BAA0B,CAAC;IACtC,6DAA6D;IAC7D,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEvG,MAAM,MAAM,sBAAsB,GAC9B;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,CAAC,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAC1C,kBAAkB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACvD,GACD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,MAAM,MAAM,sBAAsB,GAAG,CACnC,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,2BAA2B,EACtC,IAAI,EAAE,MAAM,OAAO,CAAC,sBAAsB,CAAC,KACxC,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAErC;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IAErD,QAAQ,CAAC,GAAG,EAAE,SAAS,qBAAqB,EAAE;IAC9C,QAAQ,CAAC,IAAI,EAAE,SAAS,sBAAsB,EAAE;gBADvC,GAAG,EAAE,SAAS,qBAAqB,EAAE,EACrC,IAAI,EAAE,SAAS,sBAAsB,EAAE;IAG5C,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAWzD,OAAO,CACX,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,2BAA2B,GACrC,OAAO,CAAC,sBAAsB,CAAC;CASnC;AAGD,oGAAoG;AACpG,eAAO,MAAM,oBAAoB,4EACrB,0BAA0B,KAAK,cAAc,CACjC,CAAC;AAEzB,iFAAiF;AACjF,wBAAgB,mCAAmC,IAAI,2BAA2B,
|
|
1
|
+
{"version":3,"file":"toolPolicyPipeline.d.ts","sourceRoot":"","sources":["../../../src/runtime/toolPolicyPipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,12 +37,49 @@ export class ToolPolicyPipeline {
|
|
|
37
37
|
}
|
|
38
38
|
/** Contribution seam: resolves a per-run pipeline (same pattern as the conversation extensions). */
|
|
39
39
|
export const toolPolicyFactoryKey = defineContributionServiceKey('hadamard.toolPolicy');
|
|
40
|
+
export class InMemoryToolPolicyListenerRegistry {
|
|
41
|
+
preListeners = [];
|
|
42
|
+
postListeners = [];
|
|
43
|
+
addPre(listener) {
|
|
44
|
+
if (!this.preListeners.includes(listener))
|
|
45
|
+
this.preListeners.push(listener);
|
|
46
|
+
}
|
|
47
|
+
removePre(listener) {
|
|
48
|
+
const index = this.preListeners.indexOf(listener);
|
|
49
|
+
if (index < 0)
|
|
50
|
+
return false;
|
|
51
|
+
this.preListeners.splice(index, 1);
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
addPost(listener) {
|
|
55
|
+
if (!this.postListeners.includes(listener))
|
|
56
|
+
this.postListeners.push(listener);
|
|
57
|
+
}
|
|
58
|
+
removePost(listener) {
|
|
59
|
+
const index = this.postListeners.indexOf(listener);
|
|
60
|
+
if (index < 0)
|
|
61
|
+
return false;
|
|
62
|
+
this.postListeners.splice(index, 1);
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
pre() {
|
|
66
|
+
return [...this.preListeners];
|
|
67
|
+
}
|
|
68
|
+
post() {
|
|
69
|
+
return [...this.postListeners];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/** Global listener registry the built-in pipeline factory composes into every per-run pipeline. */
|
|
73
|
+
export const toolPolicyListenerRegistryKey = defineContributionServiceKey('hadamard.toolPolicyListeners');
|
|
40
74
|
/** Built-in contribution: registers the behavior-preserving pipeline factory. */
|
|
41
75
|
export function createBuiltInToolPolicyContribution() {
|
|
42
76
|
return {
|
|
43
77
|
id: 'hadamard.tool-policy',
|
|
44
78
|
async apply(ctx) {
|
|
45
|
-
|
|
79
|
+
// Optional: tests may load this contribution without the registry.
|
|
80
|
+
const registry = ctx.services.get(toolPolicyListenerRegistryKey);
|
|
81
|
+
const factory = (options) => createBuiltInToolPolicyPipeline(options, { pre: registry?.pre(), post: registry?.post() });
|
|
82
|
+
ctx.services.register(toolPolicyFactoryKey, factory);
|
|
46
83
|
return () => { ctx.services.unregister(toolPolicyFactoryKey); };
|
|
47
84
|
},
|
|
48
85
|
};
|
|
@@ -51,8 +88,11 @@ export function createBuiltInToolPolicyContribution() {
|
|
|
51
88
|
* Default pipeline preserving the current executor behavior exactly:
|
|
52
89
|
* PreToolUse hooks, then the permission decision (with PermissionDecision
|
|
53
90
|
* hooks), then deny stops; post: spill shaping then PostToolUse hooks.
|
|
91
|
+
* Contributed listeners (`extra`) run before the built-in pre listeners
|
|
92
|
+
* (monotonic deny: they can only tighten) and after the built-in post
|
|
93
|
+
* listeners in the waterfall.
|
|
54
94
|
*/
|
|
55
|
-
export function createBuiltInToolPolicyPipeline(options) {
|
|
95
|
+
export function createBuiltInToolPolicyPipeline(options, extra) {
|
|
56
96
|
const preToolUseListener = async (call, state) => {
|
|
57
97
|
const outputs = await runTypedLifecycleHooks(options, 'PreToolUse', { iteration: call.iteration, input: call.input }, call.toolName);
|
|
58
98
|
if (hasLifecycleBlock(outputs)) {
|
|
@@ -131,6 +171,6 @@ export function createBuiltInToolPolicyPipeline(options) {
|
|
|
131
171
|
});
|
|
132
172
|
return { kind: 'accept', content: shaped.content, additionalContexts: inner.additionalContexts };
|
|
133
173
|
};
|
|
134
|
-
return new ToolPolicyPipeline([preToolUseListener, permissionListener], [spillListener, postToolUseListener]);
|
|
174
|
+
return new ToolPolicyPipeline([...(extra?.pre ?? []), preToolUseListener, permissionListener], [spillListener, postToolUseListener, ...(extra?.post ?? [])]);
|
|
135
175
|
}
|
|
136
176
|
//# sourceMappingURL=toolPolicyPipeline.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolPolicyPipeline.js","sourceRoot":"","sources":["../../../src/runtime/toolPolicyPipeline.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AA+C9E;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IAElB;IACA;IAFX,YACW,GAAqC,EACrC,IAAuC;QADvC,QAAG,GAAH,GAAG,CAAkC;QACrC,SAAI,GAAJ,IAAI,CAAmC;IAC/C,CAAC;IAEJ,KAAK,CAAC,MAAM,CAAC,IAAoB;QAC/B,MAAM,KAAK,GAAuB,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QACxD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YAChC,sEAAsE;YACtE,wDAAwD;YACxD,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM;gBAAE,MAAM;YACrC,MAAM,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,OAAO,CACX,IAAoB,EACpB,SAAsC;QAEtC,MAAM,IAAI,GAA2B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC;QACpF,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,IAAI,GAAG,GAAoC,EAAE;YACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACpC,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5E,CAAC,CAAC;QACF,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;CACF;AAGD,oGAAoG;AACpG,MAAM,CAAC,MAAM,oBAAoB,GAAG,4BAA4B,CAE9D,qBAAqB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"toolPolicyPipeline.js","sourceRoot":"","sources":["../../../src/runtime/toolPolicyPipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hadamardTuiController.d.ts","sourceRoot":"","sources":["../../../src/tui/hadamardTuiController.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hadamardTuiController.d.ts","sourceRoot":"","sources":["../../../src/tui/hadamardTuiController.ts"],"names":[],"mappings":"AAiQA,OAAO,KAAK,EACV,kBAAkB,EAKnB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAUxD,eAAO,MAAM,kBAAkB,wBAAgC,CAAC;AAQhE;;;;;GAKG;AAMH,wBAAsB,cAAc,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAupJpF"}
|
|
@@ -38,6 +38,9 @@ import { buildRouteModelApi } from '../router/modelRouter.js';
|
|
|
38
38
|
import { addMcpServer, readMcpServerConfig, removeMcpServer } from '../mcp/mcpServerConfig.js';
|
|
39
39
|
import { isReadOnlyBashCommand } from '../runtime/bashClassification.js';
|
|
40
40
|
import { estimateCost } from '../team/pricing.js';
|
|
41
|
+
import { SessionCostTracker } from '../extensions/sessionCostTracker.js';
|
|
42
|
+
import { formatUsageBar, usageBarColorLevel } from '../extensions/usageBar.js';
|
|
43
|
+
import { buildTerminalNotifySequence, formatTaskSettledNotification, resolveTaskNotificationOptions, } from '../extensions/taskNotifications.js';
|
|
41
44
|
import { planFilePath, readPlanFile } from '../tools/planMode/PlanModeTools.js';
|
|
42
45
|
import { loadProjectContext } from '../memory/projectContext.js';
|
|
43
46
|
import { hashProjectInstructionContent, parseProjectInstructionState, } from '../memory/projectInstructionContext.js';
|
|
@@ -46,6 +49,9 @@ import { applyResolvedToolDescriptions } from '../runtime/agentClientRunHelpers.
|
|
|
46
49
|
import { LegacySurfaceEventPipeline, } from '../surfaces/index.js';
|
|
47
50
|
import { HADAMARD_INTERACTIVE_COMMANDS, SUBCOMMAND_DESCRIPTIONS, canRunInteractiveCommand, interactiveCommandRunPolicy, interactiveCommandUsage, selectInteractiveCommand, } from '../ui/commandSurface.js';
|
|
48
51
|
import { createAgentExecutionProjectView, createAgentExecutionRootView, formatAgentExecutionTreeLines, } from '../ui/agentExecutionView.js';
|
|
52
|
+
import { runExtensionsCommandView } from '../ui/extensionsCommandView.js';
|
|
53
|
+
import { runLspCommandView } from '../ui/lspCommandView.js';
|
|
54
|
+
import { TuiUsageRoutingRuntime } from './tuiUsageRoutingRuntime.js';
|
|
49
55
|
import { A, truncateToWidth, wrapToWidth } from './ansi.js';
|
|
50
56
|
import { InputEditor } from './editor.js';
|
|
51
57
|
import { discoverHadamardPlugins } from './pluginCatalog.js';
|
|
@@ -218,6 +224,8 @@ export async function runHadamardTui(options = {}) {
|
|
|
218
224
|
model: options.model,
|
|
219
225
|
permissionMode,
|
|
220
226
|
});
|
|
227
|
+
let activeKeywayRouteAlias = null;
|
|
228
|
+
const usageRoutingRuntime = new TuiUsageRoutingRuntime(sdk.config.homeDir, sdk.config.workDir, selection => { clearBridgeSelection(); activeRouter = null; routedModelLabel = null; activeBridgeModelApi = { model: selection.model, modelApi: selection.modelApi, maxTokens: 32000 }; bridgeModelLabel = selection.model; bridgeMode = true; activeKeywayRouteAlias = selection.routeAlias; });
|
|
221
229
|
let deviceLinkService = null;
|
|
222
230
|
async function getDeviceLinkService() {
|
|
223
231
|
deviceLinkService ??= await DeviceLinkService.open({
|
|
@@ -233,6 +241,23 @@ export async function runHadamardTui(options = {}) {
|
|
|
233
241
|
const screen = new TuiScreen(process.stdout);
|
|
234
242
|
const editor = new InputEditor();
|
|
235
243
|
const flusher = new StreamFlusher(() => screen.width);
|
|
244
|
+
// notifications extension: surface background-task completion inline in the
|
|
245
|
+
// transcript plus terminal bell/OSC. Enablement is read at fire time so
|
|
246
|
+
// toggling the extension applies to the next settled task.
|
|
247
|
+
let unsubscribeTaskNotifications = null;
|
|
248
|
+
function subscribeTaskNotifications() {
|
|
249
|
+
unsubscribeTaskNotifications?.();
|
|
250
|
+
unsubscribeTaskNotifications = sdk.onBackgroundTaskSettled(task => {
|
|
251
|
+
if (!sdk.builtInExtensions.isEnabled('notifications'))
|
|
252
|
+
return;
|
|
253
|
+
const notification = formatTaskSettledNotification(task);
|
|
254
|
+
appendStatic([...formatInfoLine(notification.body ? `${notification.title} — ${notification.body}` : notification.title), '']);
|
|
255
|
+
const sequence = buildTerminalNotifySequence(notification, resolveTaskNotificationOptions(sdk.builtInExtensions.getConfig('notifications')));
|
|
256
|
+
if (sequence)
|
|
257
|
+
process.stdout.write(sequence);
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
subscribeTaskNotifications();
|
|
236
261
|
let running = false;
|
|
237
262
|
let queuedConfirmActive = false;
|
|
238
263
|
let commandBusy = false;
|
|
@@ -405,6 +430,7 @@ export async function runHadamardTui(options = {}) {
|
|
|
405
430
|
bridgeMode = false;
|
|
406
431
|
activeBridgeConfig = null;
|
|
407
432
|
activeBridgeModelApi = null;
|
|
433
|
+
activeKeywayRouteAlias = null;
|
|
408
434
|
bridgeModelLabel = null;
|
|
409
435
|
}
|
|
410
436
|
async function restoreSessionRuntimeSelection() {
|
|
@@ -593,14 +619,22 @@ export async function runHadamardTui(options = {}) {
|
|
|
593
619
|
let totalInputTokens = 0;
|
|
594
620
|
let totalOutputTokens = 0;
|
|
595
621
|
let totalCostUsd = 0;
|
|
622
|
+
// costTracker extension: per-model accumulation + durable JSONL ledger at
|
|
623
|
+
// <homeDir>/usage/cost-ledger.jsonl. Token totals above always count; cost
|
|
624
|
+
// accumulation and ledger writes are gated on the extension at record time.
|
|
625
|
+
const costTracker = new SessionCostTracker(sdk.config.homeDir);
|
|
596
626
|
const configUsage = new Map();
|
|
597
|
-
function recordUsage(model, usage) {
|
|
627
|
+
function recordUsage(model, usage, runId) {
|
|
598
628
|
const inT = usage?.input_tokens ?? 0;
|
|
599
629
|
const outT = usage?.output_tokens ?? 0;
|
|
600
630
|
totalInputTokens += inT;
|
|
601
631
|
totalOutputTokens += outT;
|
|
602
|
-
|
|
603
|
-
|
|
632
|
+
if (sdk.builtInExtensions.isEnabled('costTracker')) {
|
|
633
|
+
costTracker.record(model, usage ?? {}, { sessionId: session.id, runId,
|
|
634
|
+
configurationId: activeBridgeConfig?.name, source: bridgeMode ? 'bridge' : 'hadamard' });
|
|
635
|
+
const cost = estimateCost(model, inT, outT);
|
|
636
|
+
totalCostUsd = cost === null ? null : (totalCostUsd === null ? cost : totalCostUsd + cost);
|
|
637
|
+
}
|
|
604
638
|
// Per-config tracking: attribute this turn to the active bridge config.
|
|
605
639
|
if (bridgeMode && activeBridgeConfig) {
|
|
606
640
|
const rec = configUsage.get(activeBridgeConfig.name) ?? { inputTokens: 0, outputTokens: 0, turns: 0 };
|
|
@@ -700,6 +734,7 @@ export async function runHadamardTui(options = {}) {
|
|
|
700
734
|
sdk = nextSdk;
|
|
701
735
|
session = nextSession;
|
|
702
736
|
toolMetadata = nextToolMetadata;
|
|
737
|
+
subscribeTaskNotifications();
|
|
703
738
|
await restoreSessionRuntimeSelection();
|
|
704
739
|
}
|
|
705
740
|
catch (error) {
|
|
@@ -986,7 +1021,7 @@ export async function runHadamardTui(options = {}) {
|
|
|
986
1021
|
?? 200_000;
|
|
987
1022
|
const pct = window > 0 ? Math.min(100, Math.round((used / window) * 100)) : 0;
|
|
988
1023
|
const usedK = used >= 1000 ? `${(used / 1000).toFixed(used >= 100_000 ? 0 : 1)}k` : `${used}`;
|
|
989
|
-
const ctxColor = pct
|
|
1024
|
+
const ctxColor = usageBarColorLevel(pct) === 'critical' ? A.red : usageBarColorLevel(pct) === 'warn' ? A.yellow : A.dim;
|
|
990
1025
|
const modelLabel = activeRouter
|
|
991
1026
|
? `router:${activeRouter.name}${routedModelLabel ? ` → ${routedModelLabel}` : ''}`
|
|
992
1027
|
: !bridgeMode && activeBridgeConfig?.runtime === 'hadamard' && bridgeModelLabel
|
|
@@ -999,7 +1034,20 @@ export async function runHadamardTui(options = {}) {
|
|
|
999
1034
|
? `team:${activeTeamName}${teamPrefs.autoInvoke ? '' : ' (manual)'}`
|
|
1000
1035
|
: 'team:none';
|
|
1001
1036
|
const left = `${modelLabel} · ${permissionLabel()} · mode:${currentAgentMode()} · effort:${currentEffort() ?? 'auto'} · ${teamLabel}${bridgeTag}${goalContextLine()} · `;
|
|
1002
|
-
|
|
1037
|
+
// usageBar extension: swap the plain ctx segment for a bar + session
|
|
1038
|
+
// cost/tokens. Read at render time so /extensions toggling is live.
|
|
1039
|
+
const ctxSegment = sdk.builtInExtensions.isEnabled('usageBar')
|
|
1040
|
+
? formatUsageBar({
|
|
1041
|
+
contextUsedTokens: used,
|
|
1042
|
+
contextWindowTokens: window,
|
|
1043
|
+
...(sdk.builtInExtensions.isEnabled('costTracker') && totalCostUsd !== null
|
|
1044
|
+
? { sessionCostUsd: totalCostUsd }
|
|
1045
|
+
: {}),
|
|
1046
|
+
inputTokens: totalInputTokens,
|
|
1047
|
+
outputTokens: totalOutputTokens,
|
|
1048
|
+
})
|
|
1049
|
+
: `ctx ${pct}% (${usedK})`;
|
|
1050
|
+
return `${A.dim} ${left}${A.reset}${ctxColor}${ctxSegment}${A.reset}`;
|
|
1003
1051
|
}
|
|
1004
1052
|
function buildStatusLine() {
|
|
1005
1053
|
const modeLine = buildModeLine();
|
|
@@ -1455,7 +1503,7 @@ export async function runHadamardTui(options = {}) {
|
|
|
1455
1503
|
// pre-built {model, modelApi} into session.stream — the /model
|
|
1456
1504
|
// router's proven mechanism for cross-provider routing. Same
|
|
1457
1505
|
// session → context intact; switching bridge↔hadamard is seamless.
|
|
1458
|
-
statusNote = `bridge:${activeBridgeConfig?.name ?? 'bridge'}`;
|
|
1506
|
+
statusNote = activeKeywayRouteAlias ? `keyway:${activeKeywayRouteAlias}` : `bridge:${activeBridgeConfig?.name ?? 'bridge'}`;
|
|
1459
1507
|
const stream = session.stream(expandImageRefs(text), {
|
|
1460
1508
|
systemPrompt,
|
|
1461
1509
|
...projectInstructionRunOptions(),
|
|
@@ -1504,7 +1552,7 @@ export async function runHadamardTui(options = {}) {
|
|
|
1504
1552
|
collapseReasoning();
|
|
1505
1553
|
// Accumulate token + USD usage for /cost and /usage. The model is the
|
|
1506
1554
|
// routed model (if a router is active) or the session model. Bridge runs
|
|
1507
|
-
recordUsage(routed?.model ?? activeBridgeModelApi?.model ?? bridgeModelLabel ?? session.model, result.usage);
|
|
1555
|
+
recordUsage(routed?.model ?? activeBridgeModelApi?.model ?? bridgeModelLabel ?? session.model, result.usage, result.runId);
|
|
1508
1556
|
const rest = flusher.drain();
|
|
1509
1557
|
if (rest.length > 0)
|
|
1510
1558
|
appendStatic(rest);
|
|
@@ -2650,6 +2698,7 @@ export async function runHadamardTui(options = {}) {
|
|
|
2650
2698
|
// session.stream (same session, context naturally survives switching).
|
|
2651
2699
|
async function activateBridgeConfig(config) {
|
|
2652
2700
|
try {
|
|
2701
|
+
activeKeywayRouteAlias = null;
|
|
2653
2702
|
if (config.execution === 'cli') {
|
|
2654
2703
|
if (!isManagedExternalCliRuntime(config.runtime)) {
|
|
2655
2704
|
throw new Error('External CLI mode requires an installed CLI runtime.');
|
|
@@ -3806,6 +3855,7 @@ export async function runHadamardTui(options = {}) {
|
|
|
3806
3855
|
bridgeName: bridgeMode ? activeBridgeConfig?.name : undefined,
|
|
3807
3856
|
planMode: session.permissionContext.mode === 'plan',
|
|
3808
3857
|
}),
|
|
3858
|
+
...usageRoutingRuntime.commandPorts(() => sdk.builtInExtensions.isEnabled('costTracker'), async (label) => promptText({ title: 'Write-only API key', label, secret: true })),
|
|
3809
3859
|
runGoal: async (args) => (await sdk.goals.command(session, args)).message,
|
|
3810
3860
|
appendStatic,
|
|
3811
3861
|
});
|
|
@@ -4396,7 +4446,7 @@ export async function runHadamardTui(options = {}) {
|
|
|
4396
4446
|
effort: currentEffort() ?? 'auto',
|
|
4397
4447
|
team: activeTeamName ?? 'none',
|
|
4398
4448
|
router: activeRouter?.name ?? 'off',
|
|
4399
|
-
bridge: bridgeMode && activeBridgeConfig ? activeBridgeConfig.name : 'off',
|
|
4449
|
+
bridge: activeKeywayRouteAlias ? `keyway:${activeKeywayRouteAlias}` : bridgeMode && activeBridgeConfig ? activeBridgeConfig.name : 'off',
|
|
4400
4450
|
};
|
|
4401
4451
|
},
|
|
4402
4452
|
doctorSnapshot: async () => {
|
|
@@ -4491,6 +4541,8 @@ export async function runHadamardTui(options = {}) {
|
|
|
4491
4541
|
const { RuleCommandService } = await import('../context/ruleCommandService.js');
|
|
4492
4542
|
return new RuleCommandService(sdk.config.homeDir, sdk.config.workDir).execute(commandArgs);
|
|
4493
4543
|
},
|
|
4544
|
+
extensionsCommand: commandArgs => runExtensionsCommandView(sdk.builtInExtensions, commandArgs),
|
|
4545
|
+
lspCommand: () => runLspCommandView(sdk.codeIntelligence),
|
|
4494
4546
|
appendStatic,
|
|
4495
4547
|
}))
|
|
4496
4548
|
return;
|
|
@@ -4645,6 +4697,7 @@ export async function runHadamardTui(options = {}) {
|
|
|
4645
4697
|
if (shuttingDown)
|
|
4646
4698
|
return;
|
|
4647
4699
|
shuttingDown = true;
|
|
4700
|
+
unsubscribeTaskNotifications?.();
|
|
4648
4701
|
let exitCode = code;
|
|
4649
4702
|
if (spinnerTimer)
|
|
4650
4703
|
clearInterval(spinnerTimer);
|
|
@@ -4675,6 +4728,7 @@ export async function runHadamardTui(options = {}) {
|
|
|
4675
4728
|
...(globalAssistantSdk ? [globalAssistantSdk.close()] : []),
|
|
4676
4729
|
externalCliRuntimeManager.close(),
|
|
4677
4730
|
...[...externalBridgeRuntimes.values()].map(runtime => runtime.client.close()),
|
|
4731
|
+
usageRoutingRuntime.close(),
|
|
4678
4732
|
]);
|
|
4679
4733
|
const cleanupFailures = cleanupResults
|
|
4680
4734
|
.filter((result) => result.status === 'rejected');
|