@superblocksteam/vite-plugin-file-sync 2.0.140 → 2.0.141-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai-service/agent/prompts/build-base-system-prompt.js +1 -0
- package/dist/ai-service/agent/prompts/build-base-system-prompt.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/analysis.d.ts +15 -0
- package/dist/ai-service/agent/tools/apis/analysis.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/analysis.js +83 -0
- package/dist/ai-service/agent/tools/apis/analysis.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/api-testing-state.d.ts +14 -2
- package/dist/ai-service/agent/tools/apis/api-testing-state.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/api-testing-state.js +86 -12
- package/dist/ai-service/agent/tools/apis/api-testing-state.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/get-api-docs.d.ts +1 -1
- package/dist/ai-service/agent/tools/apis/sdk-registry.d.ts +6 -0
- package/dist/ai-service/agent/tools/apis/sdk-registry.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/sdk-registry.js +15 -0
- package/dist/ai-service/agent/tools/apis/sdk-registry.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/test-api.d.ts +1 -1
- package/dist/ai-service/agent/tools/apis/test-api.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/test-api.js +13 -7
- package/dist/ai-service/agent/tools/apis/test-api.js.map +1 -1
- package/dist/ai-service/agent/tools/build-copy-directory.d.ts +1 -1
- package/dist/ai-service/agent/tools/build-copy-file.d.ts +1 -1
- package/dist/ai-service/agent/tools/build-copy-utils.d.ts +8 -8
- package/dist/ai-service/agent/tools/build-delete-file.d.ts +1 -1
- package/dist/ai-service/agent/tools/build-edit-file.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-edit-file.js +8 -2
- package/dist/ai-service/agent/tools/build-edit-file.js.map +1 -1
- package/dist/ai-service/agent/tools/build-finalize.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-finalize.js +1 -2
- package/dist/ai-service/agent/tools/build-finalize.js.map +1 -1
- package/dist/ai-service/agent/tools/build-manage-checklist.d.ts +4 -4
- package/dist/ai-service/agent/tools/build-multi-edit-file.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-multi-edit-file.js +4 -1
- package/dist/ai-service/agent/tools/build-multi-edit-file.js.map +1 -1
- package/dist/ai-service/agent/tools/build-write-file.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-write-file.js +13 -1
- package/dist/ai-service/agent/tools/build-write-file.js.map +1 -1
- package/dist/ai-service/agent/tools/databases/dev-database-tasks.d.ts +4 -4
- package/dist/ai-service/agent/tools/databases/dev-database-tasks.js +1 -1
- package/dist/ai-service/agent/tools/databases/dev-database-tasks.js.map +1 -1
- package/dist/ai-service/agent/tools/get-logs.d.ts +3 -3
- package/dist/ai-service/agent/tools/integrations/execute-request.d.ts +9 -9
- package/dist/ai-service/agent/tools2/tools/check-task.d.ts +1 -1
- package/dist/ai-service/agent/tools2/tools/check-task.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/check-task.js +7 -4
- package/dist/ai-service/agent/tools2/tools/check-task.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/end-test-run.d.ts +2 -2
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js +93 -6
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/git.d.ts +1 -1
- package/dist/ai-service/agent/tools2/tools/grep-metadata.d.ts +1 -1
- package/dist/ai-service/agent/tools2/tools/grep.d.ts +1 -1
- package/dist/ai-service/agent/tools2/tools/list-attachments.d.ts +1 -1
- package/dist/ai-service/agent/tools2/tools/wait-for-task.d.ts +1 -1
- package/dist/ai-service/agent/tools2/tools/wait-for-task.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/wait-for-task.js +8 -4
- package/dist/ai-service/agent/tools2/tools/wait-for-task.js.map +1 -1
- package/dist/ai-service/app-interface/npm-package-lookup.d.ts +3 -2
- package/dist/ai-service/app-interface/npm-package-lookup.d.ts.map +1 -1
- package/dist/ai-service/app-interface/npm-package-lookup.js +21 -13
- package/dist/ai-service/app-interface/npm-package-lookup.js.map +1 -1
- package/dist/ai-service/app-interface/shell.d.ts.map +1 -1
- package/dist/ai-service/app-interface/shell.js +119 -0
- package/dist/ai-service/app-interface/shell.js.map +1 -1
- package/dist/ai-service/checklist/api-migration-checklist-gate.js +1 -1
- package/dist/ai-service/checklist/api-migration-checklist-gate.js.map +1 -1
- package/dist/ai-service/features.d.ts +11 -0
- package/dist/ai-service/features.d.ts.map +1 -1
- package/dist/ai-service/features.js +24 -0
- package/dist/ai-service/features.js.map +1 -1
- package/dist/ai-service/index.d.ts +38 -4
- package/dist/ai-service/index.d.ts.map +1 -1
- package/dist/ai-service/index.js +224 -16
- package/dist/ai-service/index.js.map +1 -1
- package/dist/ai-service/llm/client.d.ts +38 -0
- package/dist/ai-service/llm/client.d.ts.map +1 -1
- package/dist/ai-service/llm/client.js +102 -1
- package/dist/ai-service/llm/client.js.map +1 -1
- package/dist/ai-service/llm/context-v2/compaction/client-side.d.ts +18 -0
- package/dist/ai-service/llm/context-v2/compaction/client-side.d.ts.map +1 -1
- package/dist/ai-service/llm/context-v2/compaction/client-side.js +11 -2
- package/dist/ai-service/llm/context-v2/compaction/client-side.js.map +1 -1
- package/dist/ai-service/llm/context-v2/compactor.d.ts +10 -1
- package/dist/ai-service/llm/context-v2/compactor.d.ts.map +1 -1
- package/dist/ai-service/llm/context-v2/compactor.js +22 -14
- package/dist/ai-service/llm/context-v2/compactor.js.map +1 -1
- package/dist/ai-service/llm/context-v2/context-management.d.ts +19 -1
- package/dist/ai-service/llm/context-v2/context-management.d.ts.map +1 -1
- package/dist/ai-service/llm/context-v2/context-management.js +3 -1
- package/dist/ai-service/llm/context-v2/context-management.js.map +1 -1
- package/dist/ai-service/llm/context-v2/context.d.ts +31 -2
- package/dist/ai-service/llm/context-v2/context.d.ts.map +1 -1
- package/dist/ai-service/llm/context-v2/context.js +81 -8
- package/dist/ai-service/llm/context-v2/context.js.map +1 -1
- package/dist/ai-service/llm/context-v2/manager.d.ts.map +1 -1
- package/dist/ai-service/llm/context-v2/manager.js +2 -0
- package/dist/ai-service/llm/context-v2/manager.js.map +1 -1
- package/dist/ai-service/llm/context-v2/phase2-session-summarizer.d.ts +48 -1
- package/dist/ai-service/llm/context-v2/phase2-session-summarizer.d.ts.map +1 -1
- package/dist/ai-service/llm/context-v2/phase2-session-summarizer.js +26 -39
- package/dist/ai-service/llm/context-v2/phase2-session-summarizer.js.map +1 -1
- package/dist/ai-service/llm/context-v2/token-tracker.d.ts +17 -1
- package/dist/ai-service/llm/context-v2/token-tracker.d.ts.map +1 -1
- package/dist/ai-service/llm/context-v2/token-tracker.js +17 -5
- package/dist/ai-service/llm/context-v2/token-tracker.js.map +1 -1
- package/dist/ai-service/llm/context-v2/turns.d.ts.map +1 -1
- package/dist/ai-service/llm/context-v2/turns.js +25 -1
- package/dist/ai-service/llm/context-v2/turns.js.map +1 -1
- package/dist/ai-service/llm/context-v2/types.d.ts +9 -0
- package/dist/ai-service/llm/context-v2/types.d.ts.map +1 -1
- package/dist/ai-service/llm/context-v2/types.js.map +1 -1
- package/dist/ai-service/llm/stream/config.d.ts +16 -1
- package/dist/ai-service/llm/stream/config.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/config.js +9 -0
- package/dist/ai-service/llm/stream/config.js.map +1 -1
- package/dist/ai-service/llm/stream/errors.d.ts +1 -1
- package/dist/ai-service/llm/stream/errors.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/errors.js.map +1 -1
- package/dist/ai-service/llm/stream/idle-monitor.d.ts +8 -0
- package/dist/ai-service/llm/stream/idle-monitor.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/idle-monitor.js +51 -0
- package/dist/ai-service/llm/stream/idle-monitor.js.map +1 -1
- package/dist/ai-service/llm/stream/index.d.ts +1 -1
- package/dist/ai-service/llm/stream/index.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/index.js.map +1 -1
- package/dist/ai-service/llm/stream/managed-stream.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/managed-stream.js +2 -5
- package/dist/ai-service/llm/stream/managed-stream.js.map +1 -1
- package/dist/ai-service/llm/stream/observers/llmobs.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/observers/llmobs.js +10 -1
- package/dist/ai-service/llm/stream/observers/llmobs.js.map +1 -1
- package/dist/ai-service/llm/stream/orchestrator.d.ts +2 -0
- package/dist/ai-service/llm/stream/orchestrator.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/orchestrator.js +82 -5
- package/dist/ai-service/llm/stream/orchestrator.js.map +1 -1
- package/dist/ai-service/llm/stream/structured-output-chunk.d.ts +16 -0
- package/dist/ai-service/llm/stream/structured-output-chunk.d.ts.map +1 -0
- package/dist/ai-service/llm/stream/structured-output-chunk.js +26 -0
- package/dist/ai-service/llm/stream/structured-output-chunk.js.map +1 -0
- package/dist/ai-service/migration-auto-dispatch-readiness.d.ts +18 -0
- package/dist/ai-service/migration-auto-dispatch-readiness.d.ts.map +1 -0
- package/dist/ai-service/migration-auto-dispatch-readiness.js +17 -0
- package/dist/ai-service/migration-auto-dispatch-readiness.js.map +1 -0
- package/dist/ai-service/migration-autodispatch-metrics.d.ts +3 -0
- package/dist/ai-service/migration-autodispatch-metrics.d.ts.map +1 -0
- package/dist/ai-service/migration-autodispatch-metrics.js +51 -0
- package/dist/ai-service/migration-autodispatch-metrics.js.map +1 -0
- package/dist/ai-service/migration-llm-config.d.ts +12 -0
- package/dist/ai-service/migration-llm-config.d.ts.map +1 -0
- package/dist/ai-service/migration-llm-config.js +131 -0
- package/dist/ai-service/migration-llm-config.js.map +1 -0
- package/dist/ai-service/migration-session-active.d.ts +14 -0
- package/dist/ai-service/migration-session-active.d.ts.map +1 -0
- package/dist/ai-service/migration-session-active.js +29 -0
- package/dist/ai-service/migration-session-active.js.map +1 -0
- package/dist/ai-service/resolve-generation-state-for-ui.d.ts +8 -0
- package/dist/ai-service/resolve-generation-state-for-ui.d.ts.map +1 -0
- package/dist/ai-service/resolve-generation-state-for-ui.js +25 -0
- package/dist/ai-service/resolve-generation-state-for-ui.js.map +1 -0
- package/dist/ai-service/skills/system/superblocks-migration/skill.generated.d.ts +1 -1
- package/dist/ai-service/skills/system/superblocks-migration/skill.generated.d.ts.map +1 -1
- package/dist/ai-service/skills/system/superblocks-migration/skill.generated.js +5 -1
- package/dist/ai-service/skills/system/superblocks-migration/skill.generated.js.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.d.ts +2 -0
- package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.js +4 -1
- package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.js +57 -16
- package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
- package/dist/ai-service/state-machine/helpers/peer.d.ts +19 -1
- package/dist/ai-service/state-machine/helpers/peer.d.ts.map +1 -1
- package/dist/ai-service/state-machine/helpers/peer.js +81 -7
- package/dist/ai-service/state-machine/helpers/peer.js.map +1 -1
- package/dist/ai-service/state-machine/mocks.d.ts.map +1 -1
- package/dist/ai-service/state-machine/mocks.js +1 -0
- package/dist/ai-service/state-machine/mocks.js.map +1 -1
- package/dist/ai-service/types.d.ts +6 -0
- package/dist/ai-service/types.d.ts.map +1 -1
- package/dist/ai-service/types.js.map +1 -1
- package/dist/ai-service/util/inference-jwt.d.ts +15 -0
- package/dist/ai-service/util/inference-jwt.d.ts.map +1 -0
- package/dist/ai-service/util/inference-jwt.js +56 -0
- package/dist/ai-service/util/inference-jwt.js.map +1 -0
- package/dist/file-sync-vite-plugin.d.ts +9 -0
- package/dist/file-sync-vite-plugin.d.ts.map +1 -1
- package/dist/file-sync-vite-plugin.js +63 -6
- package/dist/file-sync-vite-plugin.js.map +1 -1
- package/dist/file-system-helpers.d.ts +14 -0
- package/dist/file-system-helpers.d.ts.map +1 -1
- package/dist/file-system-helpers.js +30 -0
- package/dist/file-system-helpers.js.map +1 -1
- package/dist/git-service/index.d.ts.map +1 -1
- package/dist/git-service/index.js +2 -3
- package/dist/git-service/index.js.map +1 -1
- package/dist/lock-service/index.d.ts +0 -2
- package/dist/lock-service/index.d.ts.map +1 -1
- package/dist/lock-service/index.js +19 -11
- package/dist/lock-service/index.js.map +1 -1
- package/dist/migration/integration-write-policy.d.ts +12 -0
- package/dist/migration/integration-write-policy.d.ts.map +1 -0
- package/dist/migration/integration-write-policy.js +31 -0
- package/dist/migration/integration-write-policy.js.map +1 -0
- package/dist/migration/migration-metrics.d.ts +69 -0
- package/dist/migration/migration-metrics.d.ts.map +1 -0
- package/dist/migration/migration-metrics.js +98 -0
- package/dist/migration/migration-metrics.js.map +1 -0
- package/dist/migration/migration-routes.d.ts.map +1 -1
- package/dist/migration/migration-routes.js +53 -121
- package/dist/migration/migration-routes.js.map +1 -1
- package/dist/migration/migration-verification.d.ts +49 -7
- package/dist/migration/migration-verification.d.ts.map +1 -1
- package/dist/migration/migration-verification.js +92 -28
- package/dist/migration/migration-verification.js.map +1 -1
- package/dist/migration/restructure.d.ts +10 -4
- package/dist/migration/restructure.d.ts.map +1 -1
- package/dist/migration/restructure.js +3 -2
- package/dist/migration/restructure.js.map +1 -1
- package/dist/migration-templates/app-fullstack/package.json +1 -6
- package/dist/plugin-options.d.ts +4 -0
- package/dist/plugin-options.d.ts.map +1 -1
- package/dist/plugin-options.js.map +1 -1
- package/dist/server-rpc/client.d.ts.map +1 -1
- package/dist/server-rpc/client.js +11 -2
- package/dist/server-rpc/client.js.map +1 -1
- package/dist/socket-manager.d.ts +3 -1
- package/dist/socket-manager.d.ts.map +1 -1
- package/dist/socket-manager.js +139 -76
- package/dist/socket-manager.js.map +1 -1
- package/dist/sync-service/download.d.ts.map +1 -1
- package/dist/sync-service/download.js +90 -15
- package/dist/sync-service/download.js.map +1 -1
- package/package.json +10 -10
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
import z from "zod";
|
|
2
2
|
import { FALLBACK_STRATEGIES } from "@superblocksteam/library-shared/types";
|
|
3
|
+
const optionalPositiveMs = z.preprocess((value) => typeof value === "number" && Number.isFinite(value) && value > 0
|
|
4
|
+
? value
|
|
5
|
+
: undefined, z.number().optional());
|
|
6
|
+
function compactStreamTimeoutBudgetFlag(value) {
|
|
7
|
+
const budgets = {};
|
|
8
|
+
for (const key of Object.keys(value)) {
|
|
9
|
+
if (typeof value[key] === "number") {
|
|
10
|
+
budgets[key] = value[key];
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return budgets;
|
|
14
|
+
}
|
|
3
15
|
/**
|
|
4
16
|
* Feature flag definitions for AI service.
|
|
5
17
|
*
|
|
@@ -152,6 +164,18 @@ const FLAG_DEFINITIONS = {
|
|
|
152
164
|
schema: z.boolean(),
|
|
153
165
|
defaultValue: false,
|
|
154
166
|
},
|
|
167
|
+
streamTimeoutBudgets: {
|
|
168
|
+
key: "superblocks.ai.stream-timeout-budgets",
|
|
169
|
+
schema: z
|
|
170
|
+
.object({
|
|
171
|
+
firstTokenMs: optionalPositiveMs,
|
|
172
|
+
standardIdleMs: optionalPositiveMs,
|
|
173
|
+
extendedIdleMs: optionalPositiveMs,
|
|
174
|
+
standardContentSilenceMs: optionalPositiveMs,
|
|
175
|
+
extendedContentSilenceMs: optionalPositiveMs,
|
|
176
|
+
})
|
|
177
|
+
.transform(compactStreamTimeoutBudgetFlag),
|
|
178
|
+
},
|
|
155
179
|
};
|
|
156
180
|
export const AiServiceFeatureFlags = {
|
|
157
181
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features.js","sourceRoot":"","sources":["../../src/ai-service/features.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"features.js","sourceRoot":"","sources":["../../src/ai-service/features.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,6 +47,15 @@ export declare function truncateString(str: string, maxBytes: number): string;
|
|
|
47
47
|
export declare function pruneBySize<T extends {
|
|
48
48
|
_size?: number;
|
|
49
49
|
}>(items: T[], maxBytes: number): T[];
|
|
50
|
+
interface MigrationUsageMetadata extends Record<string, unknown> {
|
|
51
|
+
applicationId: string;
|
|
52
|
+
branchName: string | undefined;
|
|
53
|
+
migrationSource: "superblocks_2_0";
|
|
54
|
+
origin: "app_migration";
|
|
55
|
+
pendingSeedApiCount: number;
|
|
56
|
+
retryMode: "focused-debug" | "none";
|
|
57
|
+
triggeredBy: "auto-dispatch" | "focused-debug" | "ui-rpc";
|
|
58
|
+
}
|
|
50
59
|
export declare class AiService extends TracedEventEmitter<AiServiceEvents> {
|
|
51
60
|
private readonly config;
|
|
52
61
|
private templateRenderer;
|
|
@@ -199,6 +208,26 @@ export declare class AiService extends TracedEventEmitter<AiServiceEvents> {
|
|
|
199
208
|
*/
|
|
200
209
|
initialize(): Promise<void>;
|
|
201
210
|
private hydrateChecklistFromDisk;
|
|
211
|
+
private migrationAppArtifactsReady;
|
|
212
|
+
private migrationAutoDispatchPending;
|
|
213
|
+
private migrationAutoDispatchInFlight;
|
|
214
|
+
private lastMigrationTurnCredentials?;
|
|
215
|
+
private hasInitialPendingMigrationWork;
|
|
216
|
+
private resolveMigrationTurnCredentials;
|
|
217
|
+
private storeMigrationTurnCredentials;
|
|
218
|
+
private isRetriableMigrationAutoDispatchFailure;
|
|
219
|
+
/**
|
|
220
|
+
* Called by dev startup once DBFS download (or upload-first local tree)
|
|
221
|
+
* has finished so migration scratch/checklist files are on disk.
|
|
222
|
+
*/
|
|
223
|
+
notifyMigrationAppArtifactsReady(): void;
|
|
224
|
+
private tryAutoDispatchMigrationTurnIfReady;
|
|
225
|
+
/**
|
|
226
|
+
* Attempts to start the initial post-flip migration turn without UI
|
|
227
|
+
* involvement. Skips user-initiated focused-debug retries (items with
|
|
228
|
+
* `lastFailureReason`) and defers when JWT is unavailable.
|
|
229
|
+
*/
|
|
230
|
+
private maybeAutoDispatchMigrationTurn;
|
|
202
231
|
/**
|
|
203
232
|
* Remove the integration metadata cache for this session.
|
|
204
233
|
* Cleans up the session cache directory.
|
|
@@ -275,15 +304,19 @@ export declare class AiService extends TracedEventEmitter<AiServiceEvents> {
|
|
|
275
304
|
* per ai-service lifetime. The disk checklist is the recovery source of
|
|
276
305
|
* truth across process restarts.
|
|
277
306
|
*
|
|
278
|
-
*
|
|
279
|
-
*
|
|
280
|
-
*
|
|
281
|
-
*
|
|
307
|
+
* Primary auto-trigger: readiness gate (`notifyMigrationAppArtifactsReady`,
|
|
308
|
+
* `handleUserConnected`, `updateClarkJwt`) →
|
|
309
|
+
* `tryAutoDispatchMigrationTurnIfReady` → `maybeAutoDispatchMigrationTurn`.
|
|
310
|
+
* Backup caller: the UI RPC (see v1.ai.triggerMigrationTurn) once it
|
|
311
|
+
* observes the post-flip state via /sb-migration-status.
|
|
312
|
+
* User retry after unresolved failures: UI RPC with
|
|
313
|
+
* `retryMode: "focused-debug"` after /sb-migration-retry-unresolved.
|
|
282
314
|
*/
|
|
283
315
|
handleAiTriggerMigrationTurn(request: {
|
|
284
316
|
jwt: string;
|
|
285
317
|
llmConfig: LLMProviderConfig;
|
|
286
318
|
retryMode?: "focused-debug";
|
|
319
|
+
triggeredBy?: MigrationUsageMetadata["triggeredBy"];
|
|
287
320
|
}): Promise<{
|
|
288
321
|
dispatched: boolean;
|
|
289
322
|
reason?: string;
|
|
@@ -418,6 +451,7 @@ export declare class AiService extends TracedEventEmitter<AiServiceEvents> {
|
|
|
418
451
|
* For testApi, provides specific guidance to continue testing other APIs.
|
|
419
452
|
*/
|
|
420
453
|
private buildDenialContinuationPrompt;
|
|
454
|
+
resolveGenerationStateForUi(): import("@superblocksteam/library-shared/types").AiGenerationStateSnapshot | undefined;
|
|
421
455
|
handleUserConnected(peer: EditorClient, peerId: string): void;
|
|
422
456
|
/**
|
|
423
457
|
* Per-session set of peer IDs that connected since their last task
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai-service/index.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAG1C,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAE7B,KAAK,iBAAiB,EACtB,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai-service/index.ts"],"names":[],"mappings":"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"}
|
package/dist/ai-service/index.js
CHANGED
|
@@ -5,6 +5,7 @@ import { context as otelContext, propagation, SpanKind, SpanStatusCode, trace, }
|
|
|
5
5
|
import { stepCountIs, streamText as aiStreamText, } from "ai";
|
|
6
6
|
import { z } from "zod";
|
|
7
7
|
import { AiGenerationState, AiMode, resolveAttachmentFileName, } from "@superblocksteam/library-shared/types";
|
|
8
|
+
import { isToolPermissionClarification } from "@superblocksteam/library-shared/types/tool-permission-response";
|
|
8
9
|
import { addTracingToMethods, classifyAttachmentDelivery, FactAccessType, FactCreatedSource, FactEntityScope, TracedEventEmitter, getAiQuotaPaywallReasonFromMessage, } from "@superblocksteam/shared";
|
|
9
10
|
import { npmRegistryEmitter } from "@superblocksteam/telemetry";
|
|
10
11
|
import { buildTranslationPrompt } from "../migration/translation-prompt.js";
|
|
@@ -30,7 +31,7 @@ import { AppSkillsManager } from "./app-skills/manager.js";
|
|
|
30
31
|
import { isUploadedAttachment, toUploadedAttachmentContentPart, } from "./attachments/uploaded-content-part.js";
|
|
31
32
|
import { ChatSessionStore } from "./chat/chat-session-store.js";
|
|
32
33
|
import { normalizeTextAttachmentForModel } from "./chat/utils.js";
|
|
33
|
-
import { API_MIGRATION_ORIGINS, readPersistedChecklist, updateChecklistItem, } from "./checklist/persisted-checklist-store.js";
|
|
34
|
+
import { API_MIGRATION_ORIGINS, isApiMigrationOrigin, readPersistedChecklist, updateChecklistItem, } from "./checklist/persisted-checklist-store.js";
|
|
34
35
|
import { downloadContextFromBucketeer, downloadLatestContextFromBucketeer, restoreContextFromCheckpoint, } from "./context-download.js";
|
|
35
36
|
import { uploadContextToBucketeer } from "./context-upload.js";
|
|
36
37
|
import { AppContextStore } from "./context/app-context.js";
|
|
@@ -53,12 +54,17 @@ import { traceLLM } from "./llmobs/helpers.js";
|
|
|
53
54
|
import { getJwtTraceTags } from "./llmobs/helpers.js";
|
|
54
55
|
import llmobs from "./llmobs/index.js";
|
|
55
56
|
import { PlaywrightMcpServerManager } from "./mcp/playwright-server.js";
|
|
57
|
+
import { evaluateMigrationAutoDispatchReadiness } from "./migration-auto-dispatch-readiness.js";
|
|
58
|
+
import { recordMigrationAutoDispatchOutcome } from "./migration-autodispatch-metrics.js";
|
|
59
|
+
import { buildServerMigrationLlmConfig, isMigrationAutoDispatchEnabled, } from "./migration-llm-config.js";
|
|
60
|
+
import { isMigrationSessionActive } from "./migration-session-active.js";
|
|
56
61
|
import { policyGateStreamPartToAgentStep } from "./policy-gate-step.js";
|
|
57
62
|
import { ClarkProfiler } from "./profiler/clark-profiler.js";
|
|
58
63
|
import { buildSummarizeApiUsagePrompt } from "./prompts/summarize-api-usage.js";
|
|
59
64
|
import { checkAiQuota } from "./quota-client.js";
|
|
60
65
|
import { RecordingManager, createRecordingFetch } from "./recording/index.js";
|
|
61
66
|
import { RequestDeduplicator } from "./request-deduplicator.js";
|
|
67
|
+
import { resolveGenerationStateForUi } from "./resolve-generation-state-for-ui.js";
|
|
62
68
|
import { scanContentForSecrets } from "./security/secret-scanner-service.js";
|
|
63
69
|
import { SecretRedactor } from "./security/secret-scanner.js";
|
|
64
70
|
import { ClarkStateNames, Clark, SERVICE_STARTED_WITH_DRAFT, USER_ACCEPTED_DRAFT, USER_REJECTED_DRAFT, USER_SENT_PROMPT, USER_CANCELED, AGENT_CANCELED, } from "./state-machine/clark-fsm.js";
|
|
@@ -78,10 +84,22 @@ import { catchBackgroundPeerDisconnect, StablePeer, } from "./state-machine/help
|
|
|
78
84
|
import { transitionFrom } from "./state-machine/helpers/transition.js";
|
|
79
85
|
import { isTaskAccessibleTo, registerBackgroundTaskTypes, resyncActiveTaskStatusesToPeer, TaskStore, wireTaskStatusPushToPeer, } from "./tasks/index.js";
|
|
80
86
|
import { TemplateRenderer } from "./template-renderer.js";
|
|
87
|
+
import { describeMigrationInferenceJwt, isUsableMigrationInferenceJwt, } from "./util/inference-jwt.js";
|
|
81
88
|
import { processLLMConfig } from "./util/llm-config-utils.js";
|
|
82
89
|
import { parseJwt } from "./util/parse-jwt.js";
|
|
83
90
|
import { getToolCallSignature } from "./util/tool-signature.js";
|
|
84
91
|
export { AiServiceFeatureFlags } from "./features.js";
|
|
92
|
+
function streamRetryOptionsFromConfig(retryOptions, streamTimeoutBudgets) {
|
|
93
|
+
if (streamTimeoutBudgets === undefined ||
|
|
94
|
+
Object.keys(streamTimeoutBudgets).length === 0) {
|
|
95
|
+
return retryOptions;
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
...retryOptions,
|
|
99
|
+
streamTimeoutBudgets,
|
|
100
|
+
timeoutSource: "feature-flag",
|
|
101
|
+
};
|
|
102
|
+
}
|
|
85
103
|
export { stripResolvedFromLockfile } from "./app-interface/npm-registry.js";
|
|
86
104
|
export { SnapshotManager } from "./recording/index.js";
|
|
87
105
|
export { isSdkApiTemplate } from "./sdk-api-templates.js";
|
|
@@ -357,6 +375,9 @@ export class AiService extends TracedEventEmitter {
|
|
|
357
375
|
try {
|
|
358
376
|
this.tokenManagerJwt = event.token;
|
|
359
377
|
this.getLogger().info(`[ai-service] token updated via tokenManager`);
|
|
378
|
+
if (event.token && isUsableMigrationInferenceJwt(event.token)) {
|
|
379
|
+
this.updateClarkJwt(event.token);
|
|
380
|
+
}
|
|
360
381
|
}
|
|
361
382
|
catch (err) {
|
|
362
383
|
console.error("[ai-service] tokenUpdated listener threw", err);
|
|
@@ -456,9 +477,16 @@ export class AiService extends TracedEventEmitter {
|
|
|
456
477
|
* Updates the JWT in Clark context
|
|
457
478
|
*/
|
|
458
479
|
updateClarkJwt(jwt) {
|
|
459
|
-
|
|
460
|
-
|
|
480
|
+
const jwtDetails = describeMigrationInferenceJwt(jwt);
|
|
481
|
+
if (!jwt || !jwtDetails.usable) {
|
|
482
|
+
return;
|
|
461
483
|
}
|
|
484
|
+
this.clark.updateContext({ jwt });
|
|
485
|
+
const llmConfig = this.lastMigrationTurnCredentials?.llmConfig ??
|
|
486
|
+
this.clark.context.llmConfig ??
|
|
487
|
+
buildServerMigrationLlmConfig(this.config.flagBootstrap);
|
|
488
|
+
this.storeMigrationTurnCredentials(jwt, llmConfig);
|
|
489
|
+
this.tryAutoDispatchMigrationTurnIfReady();
|
|
462
490
|
}
|
|
463
491
|
// ===== Recording API =====
|
|
464
492
|
/**
|
|
@@ -771,7 +799,7 @@ export class AiService extends TracedEventEmitter {
|
|
|
771
799
|
this.llmClient = new LLMClient({
|
|
772
800
|
contextManagerV2: this.contextManagerV2,
|
|
773
801
|
appShell: this.appShell,
|
|
774
|
-
retryOptions: config.retryOptions,
|
|
802
|
+
retryOptions: streamRetryOptionsFromConfig(config.retryOptions, config.features.streamTimeoutBudgets),
|
|
775
803
|
unifiedProviderEnabled: config.features.unifiedProviderEnabled ?? false,
|
|
776
804
|
organizationId: config.organizationId,
|
|
777
805
|
applicationId: config.applicationId,
|
|
@@ -916,6 +944,142 @@ export class AiService extends TracedEventEmitter {
|
|
|
916
944
|
},
|
|
917
945
|
});
|
|
918
946
|
}
|
|
947
|
+
this.tryAutoDispatchMigrationTurnIfReady();
|
|
948
|
+
}
|
|
949
|
+
migrationAppArtifactsReady = false;
|
|
950
|
+
migrationAutoDispatchPending = false;
|
|
951
|
+
migrationAutoDispatchInFlight = false;
|
|
952
|
+
lastMigrationTurnCredentials;
|
|
953
|
+
hasInitialPendingMigrationWork(items) {
|
|
954
|
+
const pendingItems = items.filter((item) => isApiMigrationOrigin(item.origin) &&
|
|
955
|
+
(item.status === "pending" || item.status === "in_progress"));
|
|
956
|
+
if (pendingItems.length === 0) {
|
|
957
|
+
return false;
|
|
958
|
+
}
|
|
959
|
+
return !pendingItems.some((item) => item.lastFailureReason);
|
|
960
|
+
}
|
|
961
|
+
resolveMigrationTurnCredentials() {
|
|
962
|
+
const cachedJwt = this.lastMigrationTurnCredentials?.jwt;
|
|
963
|
+
const inferenceJwt = this.getInferenceJwt();
|
|
964
|
+
const jwt = (cachedJwt && isUsableMigrationInferenceJwt(cachedJwt)
|
|
965
|
+
? cachedJwt
|
|
966
|
+
: undefined) ??
|
|
967
|
+
(inferenceJwt && isUsableMigrationInferenceJwt(inferenceJwt)
|
|
968
|
+
? inferenceJwt
|
|
969
|
+
: undefined);
|
|
970
|
+
const llmConfig = this.lastMigrationTurnCredentials?.llmConfig ??
|
|
971
|
+
this.clark.context.llmConfig ??
|
|
972
|
+
buildServerMigrationLlmConfig(this.config.flagBootstrap);
|
|
973
|
+
return { jwt, llmConfig };
|
|
974
|
+
}
|
|
975
|
+
storeMigrationTurnCredentials(jwt, llmConfig) {
|
|
976
|
+
const nextJwt = jwt && jwt.length > 0 ? jwt : this.lastMigrationTurnCredentials?.jwt;
|
|
977
|
+
this.lastMigrationTurnCredentials = {
|
|
978
|
+
...(nextJwt ? { jwt: nextJwt } : {}),
|
|
979
|
+
llmConfig,
|
|
980
|
+
};
|
|
981
|
+
if (jwt && jwt.length > 0 && !this.getInferenceJwt()) {
|
|
982
|
+
this.clark.updateContext({ jwt });
|
|
983
|
+
}
|
|
984
|
+
}
|
|
985
|
+
isRetriableMigrationAutoDispatchFailure(reason) {
|
|
986
|
+
if (!reason) {
|
|
987
|
+
return false;
|
|
988
|
+
}
|
|
989
|
+
return (reason.startsWith("busy:") ||
|
|
990
|
+
reason === "pending-tool-permission" ||
|
|
991
|
+
reason === "awaiting-interactive-response");
|
|
992
|
+
}
|
|
993
|
+
/**
|
|
994
|
+
* Called by dev startup once DBFS download (or upload-first local tree)
|
|
995
|
+
* has finished so migration scratch/checklist files are on disk.
|
|
996
|
+
*/
|
|
997
|
+
notifyMigrationAppArtifactsReady() {
|
|
998
|
+
if (this.migrationAppArtifactsReady) {
|
|
999
|
+
return;
|
|
1000
|
+
}
|
|
1001
|
+
this.migrationAppArtifactsReady = true;
|
|
1002
|
+
this.tryAutoDispatchMigrationTurnIfReady();
|
|
1003
|
+
}
|
|
1004
|
+
tryAutoDispatchMigrationTurnIfReady() {
|
|
1005
|
+
if (this.migrationAutoDispatchInFlight) {
|
|
1006
|
+
return;
|
|
1007
|
+
}
|
|
1008
|
+
if (!isMigrationAutoDispatchEnabled(this.config.flagBootstrap)) {
|
|
1009
|
+
return;
|
|
1010
|
+
}
|
|
1011
|
+
const { jwt } = this.resolveMigrationTurnCredentials();
|
|
1012
|
+
const readiness = evaluateMigrationAutoDispatchReadiness({
|
|
1013
|
+
appArtifactsReady: this.migrationAppArtifactsReady,
|
|
1014
|
+
hasConnectedPeer: this.hasConnectedPeer(),
|
|
1015
|
+
hasUsableJwt: Boolean(jwt),
|
|
1016
|
+
});
|
|
1017
|
+
if (!readiness.ready) {
|
|
1018
|
+
if (readiness.reason === "jwt-unavailable") {
|
|
1019
|
+
this.migrationAutoDispatchPending = true;
|
|
1020
|
+
}
|
|
1021
|
+
return;
|
|
1022
|
+
}
|
|
1023
|
+
void this.maybeAutoDispatchMigrationTurn().catch((error) => {
|
|
1024
|
+
this.getLogger().error("[ai-service] Migration auto-dispatch failed", getErrorMeta(error));
|
|
1025
|
+
});
|
|
1026
|
+
}
|
|
1027
|
+
/**
|
|
1028
|
+
* Attempts to start the initial post-flip migration turn without UI
|
|
1029
|
+
* involvement. Skips user-initiated focused-debug retries (items with
|
|
1030
|
+
* `lastFailureReason`) and defers when JWT is unavailable.
|
|
1031
|
+
*/
|
|
1032
|
+
async maybeAutoDispatchMigrationTurn() {
|
|
1033
|
+
if (this.migrationAutoDispatchInFlight) {
|
|
1034
|
+
return;
|
|
1035
|
+
}
|
|
1036
|
+
this.migrationAutoDispatchInFlight = true;
|
|
1037
|
+
try {
|
|
1038
|
+
// Positive migration-session gate. Only auto-dispatch while a migration
|
|
1039
|
+
// session is genuinely in flight on disk (scratch/migration-state.json).
|
|
1040
|
+
// Completion and abort both remove it, so a stale checklist on a
|
|
1041
|
+
// never-migrated or already-finished app can never arm auto-dispatch
|
|
1042
|
+
// during normal usage — bounding the blast radius to migrations.
|
|
1043
|
+
if (!(await isMigrationSessionActive(this.appRootDirPath))) {
|
|
1044
|
+
this.migrationAutoDispatchPending = false;
|
|
1045
|
+
return;
|
|
1046
|
+
}
|
|
1047
|
+
const checklist = await readPersistedChecklist(this.appRootDirPath);
|
|
1048
|
+
if (!checklist) {
|
|
1049
|
+
this.migrationAutoDispatchPending = false;
|
|
1050
|
+
return;
|
|
1051
|
+
}
|
|
1052
|
+
if (!this.hasInitialPendingMigrationWork(checklist.items)) {
|
|
1053
|
+
this.migrationAutoDispatchPending = false;
|
|
1054
|
+
return;
|
|
1055
|
+
}
|
|
1056
|
+
const { jwt, llmConfig } = this.resolveMigrationTurnCredentials();
|
|
1057
|
+
if (!jwt) {
|
|
1058
|
+
this.migrationAutoDispatchPending = true;
|
|
1059
|
+
return;
|
|
1060
|
+
}
|
|
1061
|
+
const result = await this.handleAiTriggerMigrationTurn({
|
|
1062
|
+
jwt,
|
|
1063
|
+
llmConfig,
|
|
1064
|
+
triggeredBy: "auto-dispatch",
|
|
1065
|
+
});
|
|
1066
|
+
if (result.dispatched) {
|
|
1067
|
+
this.migrationAutoDispatchPending = false;
|
|
1068
|
+
this.getLogger().info("[ai-service] Auto-dispatched post-flip migration turn");
|
|
1069
|
+
}
|
|
1070
|
+
else if (result.reason === "already-triggered") {
|
|
1071
|
+
this.migrationAutoDispatchPending = false;
|
|
1072
|
+
}
|
|
1073
|
+
else if (this.isRetriableMigrationAutoDispatchFailure(result.reason)) {
|
|
1074
|
+
this.migrationAutoDispatchPending = true;
|
|
1075
|
+
}
|
|
1076
|
+
else {
|
|
1077
|
+
this.migrationAutoDispatchPending = false;
|
|
1078
|
+
}
|
|
1079
|
+
}
|
|
1080
|
+
finally {
|
|
1081
|
+
this.migrationAutoDispatchInFlight = false;
|
|
1082
|
+
}
|
|
919
1083
|
}
|
|
920
1084
|
/**
|
|
921
1085
|
* Remove the integration metadata cache for this session.
|
|
@@ -1206,7 +1370,7 @@ export class AiService extends TracedEventEmitter {
|
|
|
1206
1370
|
return selectContextManagementStrategy({
|
|
1207
1371
|
serverContextManagementEnabled: llmConfig?.serverContextManagement?.enabled,
|
|
1208
1372
|
thresholds: llmConfig?.serverContextManagement,
|
|
1209
|
-
|
|
1373
|
+
summarizeModel: () => createLLMProvider(this.getLLMProviderSettings(llmConfig), () => this.getInferenceJwt(), llmConfig, () => this.getLlmAiAttributes(this.clark), this.clark.context.traceHeaders).modelForTask("summarizeMessages"),
|
|
1210
1374
|
});
|
|
1211
1375
|
}
|
|
1212
1376
|
getLlmAiAttributes(clark) {
|
|
@@ -1317,12 +1481,22 @@ export class AiService extends TracedEventEmitter {
|
|
|
1317
1481
|
* per ai-service lifetime. The disk checklist is the recovery source of
|
|
1318
1482
|
* truth across process restarts.
|
|
1319
1483
|
*
|
|
1320
|
-
*
|
|
1321
|
-
*
|
|
1322
|
-
*
|
|
1323
|
-
*
|
|
1484
|
+
* Primary auto-trigger: readiness gate (`notifyMigrationAppArtifactsReady`,
|
|
1485
|
+
* `handleUserConnected`, `updateClarkJwt`) →
|
|
1486
|
+
* `tryAutoDispatchMigrationTurnIfReady` → `maybeAutoDispatchMigrationTurn`.
|
|
1487
|
+
* Backup caller: the UI RPC (see v1.ai.triggerMigrationTurn) once it
|
|
1488
|
+
* observes the post-flip state via /sb-migration-status.
|
|
1489
|
+
* User retry after unresolved failures: UI RPC with
|
|
1490
|
+
* `retryMode: "focused-debug"` after /sb-migration-retry-unresolved.
|
|
1324
1491
|
*/
|
|
1325
1492
|
async handleAiTriggerMigrationTurn(request) {
|
|
1493
|
+
this.storeMigrationTurnCredentials(request.jwt, request.llmConfig);
|
|
1494
|
+
const isAutoDispatch = request.triggeredBy === "auto-dispatch";
|
|
1495
|
+
const recordAutoDispatchOutcome = (reason) => {
|
|
1496
|
+
if (isAutoDispatch) {
|
|
1497
|
+
recordMigrationAutoDispatchOutcome(reason);
|
|
1498
|
+
}
|
|
1499
|
+
};
|
|
1326
1500
|
// User-initiated "Fix with Clark" retries bypass the one-shot
|
|
1327
1501
|
// guard. The HTTP route that flips the items has already landed,
|
|
1328
1502
|
// so if we refused here the user would be stuck.
|
|
@@ -1330,33 +1504,44 @@ export class AiService extends TracedEventEmitter {
|
|
|
1330
1504
|
this.migrationTurnTriggered = false;
|
|
1331
1505
|
}
|
|
1332
1506
|
if (this.migrationTurnTriggered) {
|
|
1507
|
+
recordAutoDispatchOutcome("already-triggered");
|
|
1333
1508
|
return { dispatched: false, reason: "already-triggered" };
|
|
1334
1509
|
}
|
|
1335
1510
|
if (this.clark.state === ClarkStateNames.Dead) {
|
|
1511
|
+
recordAutoDispatchOutcome("dead");
|
|
1336
1512
|
return { dispatched: false, reason: "dead" };
|
|
1337
1513
|
}
|
|
1338
1514
|
if (this.clark.state !== ClarkStateNames.Idle &&
|
|
1339
1515
|
this.clark.state !== ClarkStateNames.AwaitingUser) {
|
|
1340
|
-
|
|
1516
|
+
const reason = `busy:${this.clark.state}`;
|
|
1517
|
+
recordAutoDispatchOutcome(reason);
|
|
1518
|
+
return { dispatched: false, reason };
|
|
1341
1519
|
}
|
|
1342
1520
|
if (this.clark.context.pendingToolPermissionRequest) {
|
|
1521
|
+
recordAutoDispatchOutcome("pending-tool-permission");
|
|
1343
1522
|
return { dispatched: false, reason: "pending-tool-permission" };
|
|
1344
1523
|
}
|
|
1345
1524
|
if (this.clark.state === ClarkStateNames.AwaitingUser) {
|
|
1346
1525
|
if (this.clark.context.activeInteractiveMessage ||
|
|
1347
1526
|
this.clark.context.deferredInteractiveMessage) {
|
|
1527
|
+
recordAutoDispatchOutcome("awaiting-interactive-response");
|
|
1348
1528
|
return { dispatched: false, reason: "awaiting-interactive-response" };
|
|
1349
1529
|
}
|
|
1350
1530
|
}
|
|
1531
|
+
this.migrationTurnTriggered = true;
|
|
1351
1532
|
const checklist = await readPersistedChecklist(this.appRootDirPath);
|
|
1352
1533
|
if (!checklist) {
|
|
1534
|
+
this.migrationTurnTriggered = false;
|
|
1353
1535
|
this.getLogger().warn("[ai-service] Migration checklist not found or unreadable; skipping translation turn");
|
|
1536
|
+
recordAutoDispatchOutcome("checklist-unavailable");
|
|
1354
1537
|
return { dispatched: false, reason: "checklist-unavailable" };
|
|
1355
1538
|
}
|
|
1356
1539
|
const pendingSeedApiItems = checklist.items.filter((item) => API_MIGRATION_ORIGINS.has(item.origin) &&
|
|
1357
1540
|
(item.status === "pending" || item.status === "in_progress"));
|
|
1358
1541
|
const pendingSeedApiCount = pendingSeedApiItems.length;
|
|
1359
1542
|
if (pendingSeedApiCount === 0) {
|
|
1543
|
+
this.migrationTurnTriggered = false;
|
|
1544
|
+
recordAutoDispatchOutcome("no-pending-items");
|
|
1360
1545
|
return { dispatched: false, reason: "no-pending-items" };
|
|
1361
1546
|
}
|
|
1362
1547
|
// Pre-flight quota gate. The migration turn drives LLM inference (which
|
|
@@ -1368,10 +1553,11 @@ export class AiService extends TracedEventEmitter {
|
|
|
1368
1553
|
// same pre-flight check handleAiGenerate already runs.
|
|
1369
1554
|
const quota = await this.checkAiQuota(request.jwt);
|
|
1370
1555
|
if (!quota.allowed) {
|
|
1556
|
+
this.migrationTurnTriggered = false;
|
|
1371
1557
|
this.getLogger().warn("[ai-service] Skipping v2→v3 migration turn — AI quota exceeded", { reason: quota.reason });
|
|
1558
|
+
recordAutoDispatchOutcome("quota-exceeded");
|
|
1372
1559
|
return { dispatched: false, reason: "quota-exceeded" };
|
|
1373
1560
|
}
|
|
1374
|
-
this.migrationTurnTriggered = true;
|
|
1375
1561
|
this.appShell.setApiHandlerEnabled(false);
|
|
1376
1562
|
this.getLogger().info(`[ai-service] Dispatching internal v2→v3 migration turn for ${pendingSeedApiCount} API(s) (API VFS projection disabled, retryMode=${request.retryMode ?? "none"})`);
|
|
1377
1563
|
const prompt = buildTranslationPrompt({
|
|
@@ -1393,6 +1579,8 @@ export class AiService extends TracedEventEmitter {
|
|
|
1393
1579
|
origin: "app_migration",
|
|
1394
1580
|
pendingSeedApiCount,
|
|
1395
1581
|
retryMode: request.retryMode ?? "none",
|
|
1582
|
+
triggeredBy: request.triggeredBy ??
|
|
1583
|
+
(request.retryMode === "focused-debug" ? "focused-debug" : "ui-rpc"),
|
|
1396
1584
|
};
|
|
1397
1585
|
this.clark.updateContext((context) => ({
|
|
1398
1586
|
...context,
|
|
@@ -1419,6 +1607,7 @@ export class AiService extends TracedEventEmitter {
|
|
|
1419
1607
|
this.migrationTurnTriggered = false;
|
|
1420
1608
|
this.appShell.setApiHandlerEnabled(true);
|
|
1421
1609
|
});
|
|
1610
|
+
recordAutoDispatchOutcome("dispatched");
|
|
1422
1611
|
return { dispatched: true };
|
|
1423
1612
|
}
|
|
1424
1613
|
getMigrationSafeLlmConfig(llmConfig) {
|
|
@@ -1737,6 +1926,7 @@ export class AiService extends TracedEventEmitter {
|
|
|
1737
1926
|
}
|
|
1738
1927
|
async handleAiGenerate(request) {
|
|
1739
1928
|
this.getLogger().info(`[ai-service] handleAiGenerate: peerId=${this.stablePeer.peerId ?? "unknown"}`);
|
|
1929
|
+
this.storeMigrationTurnCredentials(request.jwt, request.llmConfig);
|
|
1740
1930
|
if (this.clark.state === ClarkStateNames.Dead) {
|
|
1741
1931
|
recordPromptEntryRejection({
|
|
1742
1932
|
dedupeKey: resolvePromptRequestDedupeKey(request),
|
|
@@ -2847,10 +3037,20 @@ export class AiService extends TracedEventEmitter {
|
|
|
2847
3037
|
if (!this.clark.context.llmConfig) {
|
|
2848
3038
|
throw new Error("Cannot continue after tool permission: llmConfig is missing from context");
|
|
2849
3039
|
}
|
|
3040
|
+
const isClarification = isToolPermissionClarification(request.approved, request.denyMessage);
|
|
3041
|
+
logger.info("[ai-service] tool_permission_response continuation", {
|
|
3042
|
+
approved: request.approved,
|
|
3043
|
+
clarification: isClarification,
|
|
3044
|
+
});
|
|
3045
|
+
trace
|
|
3046
|
+
.getActiveSpan()
|
|
3047
|
+
?.setAttribute("clark.tool_permission.clarification", isClarification);
|
|
2850
3048
|
const continueRequest = {
|
|
2851
3049
|
prompt: request.approved
|
|
2852
3050
|
? ``
|
|
2853
|
-
:
|
|
3051
|
+
: isClarification
|
|
3052
|
+
? request.denyMessage.trim()
|
|
3053
|
+
: this.buildDenialContinuationPrompt(toolName, rawInput),
|
|
2854
3054
|
promptContext: {
|
|
2855
3055
|
entities: [],
|
|
2856
3056
|
integrations: [],
|
|
@@ -2859,12 +3059,12 @@ export class AiService extends TracedEventEmitter {
|
|
|
2859
3059
|
llmConfig: this.clark.context.llmConfig,
|
|
2860
3060
|
mode: this.clark.context.currentMode,
|
|
2861
3061
|
browserContext: this.clark.context.browserContext,
|
|
2862
|
-
// Mark as tool_permission_response to skip user message recording in agent-planning
|
|
2863
3062
|
responseMetadata: {
|
|
2864
3063
|
type: "tool_permission_response",
|
|
2865
3064
|
responseToMessageId: request.messageId,
|
|
2866
3065
|
approved: request.approved,
|
|
2867
3066
|
alwaysAllowPermissions: request.alwaysAllowPermissions,
|
|
3067
|
+
...(isClarification ? { clarification: true } : {}),
|
|
2868
3068
|
},
|
|
2869
3069
|
};
|
|
2870
3070
|
const transitionTo = transitionFrom(this.clark);
|
|
@@ -2895,6 +3095,12 @@ export class AiService extends TracedEventEmitter {
|
|
|
2895
3095
|
}
|
|
2896
3096
|
return `Continue with the task using alternative approaches. The tool ${toolName} was denied permission.`;
|
|
2897
3097
|
}
|
|
3098
|
+
resolveGenerationStateForUi() {
|
|
3099
|
+
return resolveGenerationStateForUi({
|
|
3100
|
+
clarkState: this.clark.state,
|
|
3101
|
+
lastGenerationState: this.clark.context.lastGenerationState,
|
|
3102
|
+
});
|
|
3103
|
+
}
|
|
2898
3104
|
handleUserConnected(peer, peerId) {
|
|
2899
3105
|
const existingPeerId = this.stablePeer.peerId;
|
|
2900
3106
|
this.getLogger().info(`[ai-service] handleUserConnected: peerId=${peerId}`);
|
|
@@ -2926,9 +3132,10 @@ export class AiService extends TracedEventEmitter {
|
|
|
2926
3132
|
this.authenticatedPeerUserId = undefined;
|
|
2927
3133
|
}
|
|
2928
3134
|
// 1. Sync generation state if generation is in progress
|
|
2929
|
-
|
|
2930
|
-
|
|
2931
|
-
|
|
3135
|
+
const generationState = this.resolveGenerationStateForUi();
|
|
3136
|
+
if (generationState) {
|
|
3137
|
+
this.getLogger().info(`[ai-service] Syncing generation state on reconnect: ${generationState.state}`);
|
|
3138
|
+
catchBackgroundPeerDisconnect(peer.call.aiSetGenerationState(generationState), "generation state reconnect push");
|
|
2932
3139
|
}
|
|
2933
3140
|
// 2. Sync tool permission state with the UI
|
|
2934
3141
|
if (this.clark.context.pendingToolPermissionRequest) {
|
|
@@ -2979,6 +3186,7 @@ export class AiService extends TracedEventEmitter {
|
|
|
2979
3186
|
if (this.taskStore) {
|
|
2980
3187
|
this.pendingTaskResyncPeerIds.add(peerId);
|
|
2981
3188
|
}
|
|
3189
|
+
this.tryAutoDispatchMigrationTurnIfReady();
|
|
2982
3190
|
}
|
|
2983
3191
|
/**
|
|
2984
3192
|
* Per-session set of peer IDs that connected since their last task
|