dorkos 0.88.0 → 0.89.0
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/core-extensions/linear-issues/index.ts +1 -1
- package/dist/bin/cli.js +610 -48
- package/dist/client/assets/{AboutPage-xqba6OSc.js → AboutPage-BXOwVTO0.js} +1 -1
- package/dist/client/assets/{AdapterIcon-BfxdKjYz.js → AdapterIcon-Bs0C7eSH.js} +1 -1
- package/dist/client/assets/{AppearancePage-MXRyK6j4.js → AppearancePage-C0FZ72U0.js} +1 -1
- package/dist/client/assets/{BaseTanStackRouterDevtoolsPanel-B-iktbLX-D6lj5D9_.js → BaseTanStackRouterDevtoolsPanel-B-iktbLX-BRr08I-_.js} +3 -3
- package/dist/client/assets/{BlintzCanvas-BmTo8WiT.js → BlintzCanvas-DCLSn9jx.js} +23 -23
- package/dist/client/assets/{CanvasCsvContent-C57uDWEL.js → CanvasCsvContent-CGQsl4FY.js} +1 -1
- package/dist/client/assets/{CanvasFileContent-1qt_NtYW.js → CanvasFileContent-CqLAG04I.js} +2 -2
- package/dist/client/assets/{CanvasModel3dContent-CJ2bwQjt.js → CanvasModel3dContent-DkPwdlTD.js} +2 -2
- package/dist/client/assets/{CodeMirrorDiff-6LU4OiJj.js → CodeMirrorDiff-BkTLxJoa.js} +1 -1
- package/dist/client/assets/{CodeMirrorEditor-Jq49Np0j.js → CodeMirrorEditor-CIgTB7Sa.js} +1 -1
- package/dist/client/assets/ConnectionAccessLists-BNgZnsD7.js +1 -0
- package/dist/client/assets/{ConnectionsPage-BAcGLK2V.js → ConnectionsPage-BlE8iku_.js} +2 -2
- package/dist/client/assets/{ConventionPage-DdKmGIcU.js → ConventionPage-DQZsWbi1.js} +3 -3
- package/dist/client/assets/{FloatingTanStackRouterDevtools-CqogiFob-9LderCq4.js → FloatingTanStackRouterDevtools-CqogiFob-De2qH2l6.js} +1 -1
- package/dist/client/assets/HandlePage-BXDfRIy3.js +1 -0
- package/dist/client/assets/{LexicalField-DsPLNKLN.js → LexicalField-C_3WYQGQ.js} +1 -1
- package/dist/client/assets/{ManagesPage-C34dzjEv.js → ManagesPage-DFFt9mh7.js} +1 -1
- package/dist/client/assets/{Model3dViewer-PXpUR_oW.js → Model3dViewer-CqkgfgBg.js} +1 -1
- package/dist/client/assets/NamePage-Qtv820fs.js +1 -0
- package/dist/client/assets/{NotificationsPage-CTPdo_E9.js → NotificationsPage-CX4b6MCK.js} +1 -1
- package/dist/client/assets/{PermissionsPage-Ij8O_uFN.js → PermissionsPage-B7CCInRo.js} +1 -1
- package/dist/client/assets/{PersonalityPopover-D0pS2YVR.js → PersonalityPopover-BOphzXEY.js} +1 -1
- package/dist/client/assets/PhotoPage-DgXAydiI.js +1 -0
- package/dist/client/assets/{RoomsPage-C_jMQGJC.js → RoomsPage-_DIjKTpi.js} +1 -1
- package/dist/client/assets/RunsOnPopover-DOsGV_7l.js +1 -0
- package/dist/client/assets/SessionsPage-BOsRKUqZ.js +6 -0
- package/dist/client/assets/{SkillsPage-CSUclnmu.js → SkillsPage-seFT2etr.js} +1 -1
- package/dist/client/assets/{TasksPage-COCsTj5k.js → TasksPage-Imt9oPoi.js} +1 -1
- package/dist/client/assets/{ToolsPage-CIgwvhZM.js → ToolsPage-CGM0Jiil.js} +2 -2
- package/dist/client/assets/{TopologyGraph-BOcP_UPd.js → TopologyGraph-vhFyjSzJ.js} +1 -1
- package/dist/client/assets/{agent-browser-Cm6bXvCt.js → agent-browser-B6WqW-og.js} +1 -1
- package/dist/client/assets/airtable-B7_XMoPM.png +0 -0
- package/dist/client/assets/{highlighted-body-KPVGNVTW-CmLzbGDT.js → highlighted-body-KPVGNVTW-DkoFzbOS.js} +1 -1
- package/dist/client/assets/hubspot-BQJQ5DfV.png +0 -0
- package/dist/client/assets/{index-C7jBVjvK.js → index-BFoejqZA.js} +1 -1
- package/dist/client/assets/{index-BndjtRZA.js → index-BMUNBDCe.js} +1 -1
- package/dist/client/assets/index-BY3yxmfx.js +1 -0
- package/dist/client/assets/index-BiDsr32v.js +1 -0
- package/dist/client/assets/{index-Cd9I6lUD.js → index-BmbhktM1.js} +1 -1
- package/dist/client/assets/{index-CQzyikQJ.js → index-Br_-H83G.js} +1 -1
- package/dist/client/assets/{index-D1Y7OlGq.js → index-BsXXogDR.js} +2 -2
- package/dist/client/assets/{index-DArP7LVM.js → index-C55PP6X5.js} +1 -1
- package/dist/client/assets/{index-CLJKvTfN.js → index-C79__bWb.js} +1 -1
- package/dist/client/assets/{index-wIEie2VH.js → index-CCelL1vs.js} +1 -1
- package/dist/client/assets/{index-CRom-Nt5.js → index-CMh3FD3Q.js} +1 -1
- package/dist/client/assets/{index-B5b98af8.js → index-CbAiJmOw.js} +1 -1
- package/dist/client/assets/{index-r8MCK2Zn.js → index-Ciuu1JwG.js} +1 -1
- package/dist/client/assets/{index-D_3Gtukh.js → index-CmezFzDD.js} +1 -1
- package/dist/client/assets/{index-CqP01Nbn.js → index-D-IcFrZb.js} +1 -1
- package/dist/client/assets/{index-B9kyvuKW.js → index-D0Q-sDBn.js} +1 -1
- package/dist/client/assets/{index-DOZ6l8Os.js → index-D7L3s5xT.js} +1 -1
- package/dist/client/assets/{index-mHL0gmHU.js → index-D8qzXtVa.js} +3 -3
- package/dist/client/assets/{index-D6Noae7w.js → index-DA2x36Z1.js} +1 -1
- package/dist/client/assets/{index-DrRfKYSH.js → index-DAogWPwG.js} +1 -1
- package/dist/client/assets/{index-DIAn8UxO.js → index-DBI4lgHw.js} +1 -1
- package/dist/client/assets/index-DDftPKpL.js +1 -0
- package/dist/client/assets/{index-Gs10j_MB.js → index-D_qmPmef.js} +1 -1
- package/dist/client/assets/{index-wpJKx9Mi.js → index-DcrgiH5I.js} +1 -1
- package/dist/client/assets/{index-_1qDsPCM.js → index-DgM6zNKn.js} +426 -435
- package/dist/client/assets/{index-vlk24smC.js → index-Dj4UMRJj.js} +1 -1
- package/dist/client/assets/index-DmX9plz6.js +38 -0
- package/dist/client/assets/{index-BxfmjO0b.js → index-Dt1n757u.js} +1 -1
- package/dist/client/assets/{index-DpN4Unzc.js → index-DwX-1WZf.js} +1 -1
- package/dist/client/assets/{index-C4GR43mL.js → index-DxBAUxqG.js} +1 -1
- package/dist/client/assets/{index-noUdLKRN.js → index-Dzt17e2e.js} +1 -1
- package/dist/client/assets/{index-rEcs1cWl.js → index-GqFxPMLJ.js} +1 -1
- package/dist/client/assets/{index-DWOxbvGH.js → index-HGlT1rGv.js} +1 -1
- package/dist/client/assets/index-fh0Br4xv.js +17 -0
- package/dist/client/assets/{index-BvuOztsk.js → index-mnHv12yO.js} +1 -1
- package/dist/client/assets/index-ojjbEHz5.css +1 -0
- package/dist/client/assets/{index-20DQ0WIE.js → index-yQNEOaWT.js} +1 -1
- package/dist/client/assets/linear-BihyrT6v.svg +1 -0
- package/dist/client/assets/notion-egi6fb2a.png +0 -0
- package/dist/client/assets/room-files-source-Cyx8H6V6.js +6 -0
- package/dist/client/assets/{soul-file-BWnNRUqb.js → soul-file-DUY5SyDc.js} +1 -1
- package/dist/client/assets/{use-personality-commit-CKnXk3oQ.js → use-personality-commit-D1Go4jUE.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/drizzle/0118_session_context.sql +6 -0
- package/dist/drizzle/0119_session_continue.sql +5 -0
- package/dist/drizzle/0120_session_limit_history.sql +24 -0
- package/dist/drizzle/0121_session_auto_resume.sql +1 -0
- package/dist/drizzle/meta/0118_snapshot.json +9264 -0
- package/dist/drizzle/meta/0119_snapshot.json +9299 -0
- package/dist/drizzle/meta/0120_snapshot.json +9430 -0
- package/dist/drizzle/meta/0121_snapshot.json +9437 -0
- package/dist/drizzle/meta/_journal.json +28 -0
- package/dist/server/index.js +181119 -172125
- package/dist/server/index.js.map +2 -2
- package/package.json +4 -4
- package/dist/client/assets/ConnectionAccessLists-uBJL31Ay.js +0 -1
- package/dist/client/assets/HandlePage-C6lAHsBo.js +0 -1
- package/dist/client/assets/NamePage-C0Mhnk4v.js +0 -1
- package/dist/client/assets/PhotoPage-DK8jrI66.js +0 -1
- package/dist/client/assets/RunsOnPopover-Dj0c45ua.js +0 -1
- package/dist/client/assets/SessionsPage-BMABy-lt.js +0 -6
- package/dist/client/assets/index-CV_tZl11.js +0 -1
- package/dist/client/assets/index-D5zhwLA1.js +0 -1
- package/dist/client/assets/index-DBrS_qK1.js +0 -1
- package/dist/client/assets/index-DtWF2VPM.css +0 -1
- package/dist/client/assets/index-GxKQ7usg.js +0 -33
- package/dist/client/assets/index-irBM12M1.js +0 -17
- package/dist/client/assets/room-files-source-Tt08gsJM.js +0 -6
package/dist/bin/cli.js
CHANGED
|
@@ -21350,7 +21350,7 @@ function settleLegacyAccountAlias(merged, patch) {
|
|
|
21350
21350
|
const block = merged?.runtimes?.claudeCode;
|
|
21351
21351
|
if (block && typeof block === "object") delete block.activeAccount;
|
|
21352
21352
|
}
|
|
21353
|
-
function classifyClaudeAccountRows(value) {
|
|
21353
|
+
function classifyClaudeAccountRows(value, noun = "Claude account") {
|
|
21354
21354
|
const minted = backfillMissingAccountIds(value);
|
|
21355
21355
|
if (!Array.isArray(minted)) return { rows: [], warnings: [] };
|
|
21356
21356
|
const warnings = [];
|
|
@@ -21360,7 +21360,7 @@ function classifyClaudeAccountRows(value) {
|
|
|
21360
21360
|
warnings.push({
|
|
21361
21361
|
code: "row-invalid",
|
|
21362
21362
|
index: index2,
|
|
21363
|
-
message:
|
|
21363
|
+
message: `${noun} ${index2 + 1} is not an object, so it was skipped.`
|
|
21364
21364
|
});
|
|
21365
21365
|
return { index: index2, row: null, listed: false };
|
|
21366
21366
|
}
|
|
@@ -21370,7 +21370,7 @@ function classifyClaudeAccountRows(value) {
|
|
|
21370
21370
|
warnings.push({
|
|
21371
21371
|
code: "path-invalid",
|
|
21372
21372
|
index: index2,
|
|
21373
|
-
message:
|
|
21373
|
+
message: `${noun} "${id}" has no absolute path, so it was skipped.`
|
|
21374
21374
|
});
|
|
21375
21375
|
return { index: index2, row, listed: false };
|
|
21376
21376
|
}
|
|
@@ -21378,7 +21378,7 @@ function classifyClaudeAccountRows(value) {
|
|
|
21378
21378
|
warnings.push({
|
|
21379
21379
|
code: "id-duplicate",
|
|
21380
21380
|
index: index2,
|
|
21381
|
-
message:
|
|
21381
|
+
message: `${noun} "${id}" repeats an earlier account's id, so it was skipped.`
|
|
21382
21382
|
});
|
|
21383
21383
|
return { index: index2, row, listed: false };
|
|
21384
21384
|
}
|
|
@@ -21393,7 +21393,7 @@ function configuredRuntimes(read) {
|
|
|
21393
21393
|
if (read("runtimes.opencode.enabled") !== false) runtimes.push("opencode");
|
|
21394
21394
|
return runtimes;
|
|
21395
21395
|
}
|
|
21396
|
-
var CommunityNavigationRefSchema, ExtensionApprovedSourceSchema, CommunityInstallationPathSchema, CommunityInstallationSearchScalarSchema, CommunityInstallationSearchValueSchema, CommunityInstallationDestinationSchema, CommunityNavigationDestinationSchema, CommunityNavigationOwnerPrefsSchema, CommunityNavigationPrefsSchema, ROOM_TURN_LIMIT_BOUNDS, MAX_TOTAL_TURNS_PER_HOUR_BOUNDS, ROOM_TURN_LIMIT_DEFAULTS, MAX_CONCURRENT_TURNS_PER_AGENT_BOUNDS, MAX_CONCURRENT_TURNS_PER_AGENT_DEFAULT, RELAY_TURN_CEILING_BOUNDS, RELAY_TURN_CEILING_DEFAULTS, SENSITIVE_CONFIG_KEYS, CREDENTIAL_REF_PATTERN, CredentialReferenceSchema, ONBOARDING_STEPS, OnboardingStepSchema, OnboardingStateSchema, ToursStateSchema, TOURS_DEFAULTS, DisplayNameSourceSchema, UserProfileSchema, USER_PROFILE_DEFAULTS, SidebarDisplayFilterSchema, SidebarItemRefSchema, SmartGroupRulesSchema, SidebarGroupShapeSchema, SidebarGroupSchema, SidebarSectionIdSchema, SidebarSectionPrefsSchema, SIDEBAR_SECTION_IDS, SidebarSectionsSchema, SidebarPrefsSchema, SIDEBAR_PREFS_DEFAULTS, ShapeUserPrefsSchema, SHAPE_USER_PREFS_DEFAULTS, StatusBarPinSchema, STATUS_BAR_PIN_KEYS, StatusBarPrefsSchema, STATUS_BAR_PREFS_DEFAULTS, ComposerPrefsSchema, COMPOSER_PREFS_DEFAULTS, EscalationDelaySchema, NotificationPrefsSchema, NOTIFICATION_PREFS_DEFAULTS, DEFAULT_AGENTS_DIRECTORY, RawMcpServerConfigSchema, ClaudeCodeAccountSchema, ClaudeCodeAccountsSchema, ClaudeAccountsSeenSchema, CLAUDE_ACCOUNTS_SEEN_KEY, DefaultModelSchema, DefaultEffortSchema, DefaultTrustStopSchema, ClaudeCodeSettingsSchema, LoggingConfigSchema, PermissionConfigStateSchema, UserConfigSchema, LOG_LEVEL_MAP, USER_CONFIG_DEFAULTS;
|
|
21396
|
+
var CommunityNavigationRefSchema, ExtensionApprovedSourceSchema, CommunityInstallationPathSchema, CommunityInstallationSearchScalarSchema, CommunityInstallationSearchValueSchema, CommunityInstallationDestinationSchema, CommunityNavigationDestinationSchema, CommunityNavigationOwnerPrefsSchema, CommunityNavigationPrefsSchema, ROOM_TURN_LIMIT_BOUNDS, MAX_TOTAL_TURNS_PER_HOUR_BOUNDS, ROOM_TURN_LIMIT_DEFAULTS, MAX_CONCURRENT_TURNS_PER_AGENT_BOUNDS, MAX_CONCURRENT_TURNS_PER_AGENT_DEFAULT, RELAY_TURN_CEILING_BOUNDS, RELAY_TURN_CEILING_DEFAULTS, SENSITIVE_CONFIG_KEYS, CREDENTIAL_REF_PATTERN, CredentialReferenceSchema, ONBOARDING_STEPS, OnboardingStepSchema, OnboardingStateSchema, ToursStateSchema, TOURS_DEFAULTS, DisplayNameSourceSchema, UserProfileSchema, USER_PROFILE_DEFAULTS, SidebarDisplayFilterSchema, SidebarItemRefSchema, SmartGroupRulesSchema, SidebarGroupShapeSchema, SidebarGroupSchema, SidebarSectionIdSchema, SidebarSectionPrefsSchema, SIDEBAR_SECTION_IDS, SidebarSectionsSchema, SidebarPrefsSchema, SIDEBAR_PREFS_DEFAULTS, ShapeUserPrefsSchema, SHAPE_USER_PREFS_DEFAULTS, StatusBarPinSchema, STATUS_BAR_PIN_KEYS, StatusBarPrefsSchema, STATUS_BAR_PREFS_DEFAULTS, ComposerPrefsSchema, COMPOSER_PREFS_DEFAULTS, EscalationDelaySchema, NotificationPrefsSchema, NOTIFICATION_PREFS_DEFAULTS, DEFAULT_AGENTS_DIRECTORY, RawMcpServerConfigSchema, ClaudeCodeAccountSchema, ClaudeCodeAccountsSchema, ClaudeAccountsSeenSchema, CLAUDE_ACCOUNTS_SEEN_KEY, DefaultModelSchema, DefaultEffortSchema, DefaultTrustStopSchema, DefaultAccountColorSchema, ClaudeCodeSettingsSchema, LoggingConfigSchema, PermissionConfigStateSchema, UserConfigSchema, LOG_LEVEL_MAP, USER_CONFIG_DEFAULTS;
|
|
21397
21397
|
var init_config_schema = __esm({
|
|
21398
21398
|
"../shared/src/config-schema.ts"() {
|
|
21399
21399
|
init_zod();
|
|
@@ -21886,6 +21886,7 @@ var init_config_schema = __esm({
|
|
|
21886
21886
|
DefaultModelSchema = external_exports.string().min(1).nullable().default(null);
|
|
21887
21887
|
DefaultEffortSchema = external_exports.enum(EFFORT_LEVELS).nullable().default(null);
|
|
21888
21888
|
DefaultTrustStopSchema = external_exports.enum(["ask", "act", "autonomy"]).nullable().default(null);
|
|
21889
|
+
DefaultAccountColorSchema = external_exports.union([external_exports.string().regex(ACCOUNT_COLOR_PATTERN), external_exports.literal("")]).nullable();
|
|
21889
21890
|
ClaudeCodeSettingsSchema = external_exports.object({
|
|
21890
21891
|
/**
|
|
21891
21892
|
* Absolute path of the Claude config directory a NEW session runs and
|
|
@@ -21916,10 +21917,27 @@ var init_config_schema = __esm({
|
|
|
21916
21917
|
/**
|
|
21917
21918
|
* The Claude accounts DorkOS knows about — what lets it show which
|
|
21918
21919
|
* client a session belongs to. The operator registers these: DorkOS
|
|
21919
|
-
* never
|
|
21920
|
-
* that are not accounts at all (D4).
|
|
21920
|
+
* never registers a `~/.claude*` folder on its own, because that guess
|
|
21921
|
+
* sweeps up directories that are not accounts at all (D4). Settings may
|
|
21922
|
+
* OFFER the folders it finds (spec `claude-account-ui` §6.9), and nothing
|
|
21923
|
+
* lands here until a person clicks Add.
|
|
21921
21924
|
*/
|
|
21922
21925
|
accounts: ClaudeCodeAccountsSchema.default(() => []),
|
|
21926
|
+
/**
|
|
21927
|
+
* The color the standalone default account is drawn in, or `null` for the
|
|
21928
|
+
* default for its position. Ignored while a registered row has the default
|
|
21929
|
+
* folder: that row's own color wins. See {@link DefaultAccountColorSchema}.
|
|
21930
|
+
*/
|
|
21931
|
+
defaultAccountColor: DefaultAccountColorSchema.default(null).catch(null),
|
|
21932
|
+
/**
|
|
21933
|
+
* Account folders a person dismissed from Settings' "Found on this
|
|
21934
|
+
* computer" list, so they stay hidden across restarts (spec
|
|
21935
|
+
* `claude-account-ui` §7.4). Stored in comparable form (the real path).
|
|
21936
|
+
* Written only by `POST /api/runtimes/claude-code/accounts/found/dismiss`,
|
|
21937
|
+
* which appends in one read-modify-write; a `PATCH /api/config` would
|
|
21938
|
+
* replace the array, and the screen never sees it.
|
|
21939
|
+
*/
|
|
21940
|
+
dismissedFolders: external_exports.array(external_exports.string()).max(200).default([]),
|
|
21923
21941
|
/** Model a new claude-code session starts on. See {@link DefaultModelSchema}. */
|
|
21924
21942
|
defaultModel: DefaultModelSchema,
|
|
21925
21943
|
/** Effort a new claude-code session starts at. See {@link DefaultEffortSchema}. */
|
|
@@ -22989,6 +23007,8 @@ var init_config_schema = __esm({
|
|
|
22989
23007
|
claudeCode: external_exports.preprocess(healClaudeAccountRename, ClaudeCodeSettingsSchema).default(() => ({
|
|
22990
23008
|
defaultAccount: null,
|
|
22991
23009
|
accounts: [],
|
|
23010
|
+
defaultAccountColor: null,
|
|
23011
|
+
dismissedFolders: [],
|
|
22992
23012
|
defaultModel: null,
|
|
22993
23013
|
defaultEffort: null,
|
|
22994
23014
|
defaultTrustStop: null,
|
|
@@ -23070,6 +23090,8 @@ var init_config_schema = __esm({
|
|
|
23070
23090
|
claudeCode: {
|
|
23071
23091
|
defaultAccount: null,
|
|
23072
23092
|
accounts: [],
|
|
23093
|
+
defaultAccountColor: null,
|
|
23094
|
+
dismissedFolders: [],
|
|
23073
23095
|
defaultModel: null,
|
|
23074
23096
|
defaultEffort: null,
|
|
23075
23097
|
defaultTrustStop: null,
|
|
@@ -25729,7 +25751,7 @@ import path2 from "path";
|
|
|
25729
25751
|
import { fileURLToPath } from "url";
|
|
25730
25752
|
function resolveVersion() {
|
|
25731
25753
|
if (env2.DORKOS_VERSION_OVERRIDE) return env2.DORKOS_VERSION_OVERRIDE;
|
|
25732
|
-
if (true) return "0.
|
|
25754
|
+
if (true) return "0.89.0";
|
|
25733
25755
|
const pkgPath = path2.join(path2.dirname(fileURLToPath(import.meta.url)), "../../package.json");
|
|
25734
25756
|
return JSON.parse(readFileSync(pkgPath, "utf-8")).version;
|
|
25735
25757
|
}
|
|
@@ -26435,7 +26457,9 @@ __export(config_manager_exports, {
|
|
|
26435
26457
|
retireToolOnlyReplies: () => retireToolOnlyReplies,
|
|
26436
26458
|
scrubRetiredOnboardingSteps: () => scrubRetiredOnboardingSteps,
|
|
26437
26459
|
seedA2aDisabled: () => seedA2aDisabled,
|
|
26460
|
+
seedClaudeDismissedFolders: () => seedClaudeDismissedFolders,
|
|
26438
26461
|
seedCommunityNavigationPrefs: () => seedCommunityNavigationPrefs,
|
|
26462
|
+
seedDefaultAccountColor: () => seedDefaultAccountColor,
|
|
26439
26463
|
seedDisplayNameSourceDefault: () => seedDisplayNameSourceDefault,
|
|
26440
26464
|
seedExtensionsApprovedSources: () => seedExtensionsApprovedSources,
|
|
26441
26465
|
seedFullPowerDecision: () => seedFullPowerDecision,
|
|
@@ -27276,6 +27300,28 @@ function renameReservedClaudeAccountIds(store) {
|
|
|
27276
27300
|
claudeCode: { ...block, accounts: next }
|
|
27277
27301
|
});
|
|
27278
27302
|
}
|
|
27303
|
+
function seedDefaultAccountColor(store) {
|
|
27304
|
+
const runtimes = store.get("runtimes");
|
|
27305
|
+
if (!runtimes || typeof runtimes !== "object" || Array.isArray(runtimes)) return;
|
|
27306
|
+
const block = runtimes.claudeCode;
|
|
27307
|
+
if (!block || typeof block !== "object" || Array.isArray(block)) return;
|
|
27308
|
+
if ("defaultAccountColor" in block) return;
|
|
27309
|
+
store.set("runtimes", {
|
|
27310
|
+
...runtimes,
|
|
27311
|
+
claudeCode: { ...block, defaultAccountColor: null }
|
|
27312
|
+
});
|
|
27313
|
+
}
|
|
27314
|
+
function seedClaudeDismissedFolders(store) {
|
|
27315
|
+
const runtimes = store.get("runtimes");
|
|
27316
|
+
if (!runtimes || typeof runtimes !== "object" || Array.isArray(runtimes)) return;
|
|
27317
|
+
const block = runtimes.claudeCode;
|
|
27318
|
+
if (!block || typeof block !== "object" || Array.isArray(block)) return;
|
|
27319
|
+
if (Array.isArray(block.dismissedFolders)) return;
|
|
27320
|
+
store.set("runtimes", {
|
|
27321
|
+
...runtimes,
|
|
27322
|
+
claudeCode: { ...block, dismissedFolders: [] }
|
|
27323
|
+
});
|
|
27324
|
+
}
|
|
27279
27325
|
function seedFullPowerDecision(store) {
|
|
27280
27326
|
const ui = store.get("ui");
|
|
27281
27327
|
if (ui == null || typeof ui !== "object") return;
|
|
@@ -27503,6 +27549,10 @@ function tolerateLegacyClaudeAccountEncoding(ctx) {
|
|
|
27503
27549
|
const properties = ctx.jsonSchema.properties;
|
|
27504
27550
|
if (!properties) return;
|
|
27505
27551
|
properties.activeAccount = { anyOf: [{ type: "string" }, { type: "null" }] };
|
|
27552
|
+
properties.defaultAccountColor = {
|
|
27553
|
+
anyOf: [{ type: "string" }, { type: "null" }],
|
|
27554
|
+
default: null
|
|
27555
|
+
};
|
|
27506
27556
|
return;
|
|
27507
27557
|
}
|
|
27508
27558
|
if (ctx.zodSchema !== ClaudeCodeAccountSchema) return;
|
|
@@ -28111,6 +28161,30 @@ and your settings stay in the file you renamed.`;
|
|
|
28111
28161
|
// every other field and row.
|
|
28112
28162
|
"0.87.0": (store) => {
|
|
28113
28163
|
renameReservedClaudeAccountIds(store);
|
|
28164
|
+
},
|
|
28165
|
+
// 0.90.0 was the next free key when this merged (0.88.0 was the newest tag).
|
|
28166
|
+
// `'0.89.0'` is intentionally unused: the branch that had reserved it moved to
|
|
28167
|
+
// `'0.91.0'` once this merged first, because a key below one an install has
|
|
28168
|
+
// already run would never run there. Frozen from merge, not from the release
|
|
28169
|
+
// bump, for the reason `'0.60.0'` above states.
|
|
28170
|
+
//
|
|
28171
|
+
// Disjoint from every other key here: it adds one nested leaf under
|
|
28172
|
+
// `runtimes.claudeCode` that nothing above names, and keeps every member
|
|
28173
|
+
// `'0.65.0'` and `'0.87.0'` write there.
|
|
28174
|
+
"0.90.0": (store) => {
|
|
28175
|
+
seedDefaultAccountColor(store);
|
|
28176
|
+
},
|
|
28177
|
+
// 0.90.0 has merged (the standalone default account's color, DOR-2492) and
|
|
28178
|
+
// v0.88.0 is the newest tag, so 0.91.0 is the next key: keys must rise in
|
|
28179
|
+
// merge order, because an install that already ran 0.90.0 would never run a
|
|
28180
|
+
// lower key added after it. Frozen from merge, not from the release bump, for
|
|
28181
|
+
// the reason `'0.60.0'` above states; anything further opens `'0.92.0'`.
|
|
28182
|
+
//
|
|
28183
|
+
// Disjoint from every other key here: it adds one nested leaf under
|
|
28184
|
+
// `runtimes.claudeCode`, beside `accounts`, which `'0.65.0'` and `'0.87.0'`
|
|
28185
|
+
// write and this body preserves.
|
|
28186
|
+
"0.91.0": (store) => {
|
|
28187
|
+
seedClaudeDismissedFolders(store);
|
|
28114
28188
|
}
|
|
28115
28189
|
};
|
|
28116
28190
|
jsonSchemaFull = external_exports.toJSONSchema(UserConfigSchema, {
|
|
@@ -38241,7 +38315,7 @@ var init_mesh_schemas = __esm({
|
|
|
38241
38315
|
});
|
|
38242
38316
|
|
|
38243
38317
|
// ../shared/src/additional-context.ts
|
|
38244
|
-
var GitStatusDataSchema, EnvDataSchema, RelayContextDataSchema, RoomContextOriginSchema, RoomContextAuthorSchema, RoomContextMemberSchema, RoomContextEntrySchema, RoomContextAcknowledgmentSchema, RoomContextFilesSchema, RoomContextDataSchema, SeedContextDataSchema, StagedContextDataSchema, AccountsAccessDataSchema, ApprovalVerdictDataSchema, AdditionalContextEntrySchema, AdditionalContextSchema, ClientContextSchema;
|
|
38318
|
+
var GitStatusDataSchema, EnvDataSchema, RelayContextDataSchema, RoomContextOriginSchema, RoomContextAuthorSchema, RoomContextMemberSchema, RoomContextEntrySchema, RoomContextAcknowledgmentSchema, MainMovedSchema, WorktreeRefreshOutcomeSchema, RoomContextFilesSchema, RoomContextDataSchema, SeedContextDataSchema, StagedContextDataSchema, AccountsAccessDataSchema, ApprovalVerdictDataSchema, AdditionalContextEntrySchema, AdditionalContextSchema, ClientContextSchema;
|
|
38245
38319
|
var init_additional_context = __esm({
|
|
38246
38320
|
"../shared/src/additional-context.ts"() {
|
|
38247
38321
|
"use strict";
|
|
@@ -38317,12 +38391,41 @@ var init_additional_context = __esm({
|
|
|
38317
38391
|
entryAt: external_exports.string(),
|
|
38318
38392
|
entryExcerpt: external_exports.string()
|
|
38319
38393
|
});
|
|
38394
|
+
MainMovedSchema = external_exports.object({
|
|
38395
|
+
commits: external_exports.array(
|
|
38396
|
+
external_exports.object({
|
|
38397
|
+
sha: external_exports.string(),
|
|
38398
|
+
who: external_exports.string().nullable(),
|
|
38399
|
+
subject: external_exports.string(),
|
|
38400
|
+
kind: external_exports.enum(["merge", "person", "other"]),
|
|
38401
|
+
files: external_exports.array(external_exports.string()),
|
|
38402
|
+
fileCount: external_exports.number().int().nonnegative()
|
|
38403
|
+
})
|
|
38404
|
+
),
|
|
38405
|
+
overflow: external_exports.number().int().nonnegative(),
|
|
38406
|
+
overlap: external_exports.array(external_exports.string())
|
|
38407
|
+
});
|
|
38408
|
+
WorktreeRefreshOutcomeSchema = external_exports.discriminatedUnion("kind", [
|
|
38409
|
+
external_exports.object({ kind: external_exports.literal("current") }),
|
|
38410
|
+
external_exports.object({
|
|
38411
|
+
kind: external_exports.literal("refreshed"),
|
|
38412
|
+
from: external_exports.string(),
|
|
38413
|
+
to: external_exports.string(),
|
|
38414
|
+
paths: external_exports.array(external_exports.string())
|
|
38415
|
+
}),
|
|
38416
|
+
external_exports.object({
|
|
38417
|
+
kind: external_exports.literal("held"),
|
|
38418
|
+
reason: external_exports.enum(["busy", "changes", "ahead", "off-branch", "unreadable", "unsafe-config"]),
|
|
38419
|
+
moved: MainMovedSchema.nullable()
|
|
38420
|
+
})
|
|
38421
|
+
]);
|
|
38320
38422
|
RoomContextFilesSchema = external_exports.object({
|
|
38321
38423
|
worktreePath: external_exports.string(),
|
|
38322
38424
|
branch: external_exports.string(),
|
|
38323
38425
|
repoPath: external_exports.string(),
|
|
38324
38426
|
behind: external_exports.number().int().nonnegative().nullable(),
|
|
38325
|
-
ahead: external_exports.number().int().nonnegative().nullable()
|
|
38427
|
+
ahead: external_exports.number().int().nonnegative().nullable(),
|
|
38428
|
+
refresh: WorktreeRefreshOutcomeSchema.optional()
|
|
38326
38429
|
});
|
|
38327
38430
|
RoomContextDataSchema = external_exports.object({
|
|
38328
38431
|
room: external_exports.object({
|
|
@@ -38652,7 +38755,7 @@ var init_account_usage_codex = __esm({
|
|
|
38652
38755
|
});
|
|
38653
38756
|
|
|
38654
38757
|
// ../shared/src/account-usage.ts
|
|
38655
|
-
var LEDGER_RUNTIMES, LEDGER_SOURCES, RateLimitStatusSchema, ISO_TIME_PATTERN, IsoTimeSchema, LedgerSourceSchema, LedgerEntrySchema, WINDOW_KEY_PATTERN, LedgerPlanSchema, LedgerCreditsSchema, LedgerSpendSchema, UsageLedgerSchema, MINUTE_MS, HOUR_MS, FIVE_HOUR_MS, SEVEN_DAY_MS, MAX_FUTURE_SKEW_MS, AccountUsageSchema;
|
|
38758
|
+
var LEDGER_RUNTIMES, LEDGER_SOURCES, RateLimitStatusSchema, ISO_TIME_PATTERN, IsoTimeSchema, LedgerSourceSchema, LedgerEntrySchema, WINDOW_KEY_PATTERN, LedgerPlanSchema, LedgerCreditsSchema, LedgerSpendSchema, UsageLedgerSchema, MINUTE_MS, HOUR_MS, FIVE_HOUR_MS, SEVEN_DAY_MS, MAX_FUTURE_SKEW_MS, AccountUsageSchema, LimitResolutionSchema, LimitHistoryEntrySchema, LimitHistoryResponseSchema, FoundClaudeFolderSchema, DismissFoundFolderRequestSchema;
|
|
38656
38759
|
var init_account_usage = __esm({
|
|
38657
38760
|
"../shared/src/account-usage.ts"() {
|
|
38658
38761
|
init_zod();
|
|
@@ -38679,14 +38782,14 @@ var init_account_usage = __esm({
|
|
|
38679
38782
|
IsoTimeSchema = external_exports.string().regex(ISO_TIME_PATTERN).refine((value) => !Number.isNaN(Date.parse(value)), { message: "Not a real time" });
|
|
38680
38783
|
LedgerSourceSchema = external_exports.enum(LEDGER_SOURCES);
|
|
38681
38784
|
LedgerEntrySchema = external_exports.object({
|
|
38682
|
-
/** Share of the window used, 0 to 100, or `null` when the source gave none. */
|
|
38683
|
-
usedPct: external_exports.number().min(0).max(100).nullable(),
|
|
38684
|
-
/** When the window resets, ISO-8601, or `null` when unknown. */
|
|
38685
|
-
resetsAt: IsoTimeSchema.nullable(),
|
|
38785
|
+
/** Share of the window used, 0 to 100, or `null` when the source gave none (omitted reads as `null`). */
|
|
38786
|
+
usedPct: external_exports.number().min(0).max(100).nullable().default(null),
|
|
38787
|
+
/** When the window resets, ISO-8601, or `null` when unknown (omitted reads as `null`). */
|
|
38788
|
+
resetsAt: IsoTimeSchema.nullable().default(null),
|
|
38686
38789
|
/** The window's length in minutes, when the source names it: an integer of 1 or more. */
|
|
38687
38790
|
windowMinutes: external_exports.number().int().min(1).optional(),
|
|
38688
|
-
/** The status the source reported, or `null` when it reported none. */
|
|
38689
|
-
status: RateLimitStatusSchema.nullable(),
|
|
38791
|
+
/** The status the source reported, or `null` when it reported none (omitted reads as `null`). */
|
|
38792
|
+
status: RateLimitStatusSchema.nullable().default(null),
|
|
38690
38793
|
/** When the source observed this reading, ISO-8601 with an explicit zone. */
|
|
38691
38794
|
observedAt: IsoTimeSchema,
|
|
38692
38795
|
/** Which source produced the reading. */
|
|
@@ -38812,6 +38915,61 @@ var init_account_usage = __esm({
|
|
|
38812
38915
|
/** The ledger's last write, or `null` when there is no ledger. */
|
|
38813
38916
|
updatedAt: external_exports.string().nullable()
|
|
38814
38917
|
}).openapi("AccountUsage");
|
|
38918
|
+
LimitResolutionSchema = external_exports.enum(["moved", "resumed-reset", "resumed-model", "resumed-early"]).openapi("LimitResolution");
|
|
38919
|
+
LimitHistoryEntrySchema = external_exports.object({
|
|
38920
|
+
/** Row id (a uuid). */
|
|
38921
|
+
id: external_exports.string(),
|
|
38922
|
+
/** The session the limit hit. */
|
|
38923
|
+
sessionId: external_exports.string(),
|
|
38924
|
+
/** When the limit was hit, ISO-8601. */
|
|
38925
|
+
since: external_exports.string(),
|
|
38926
|
+
/** The runtime the session ran on. */
|
|
38927
|
+
runtime: external_exports.string(),
|
|
38928
|
+
/** The registry id of the account that ran out, or `null` when unregistered. */
|
|
38929
|
+
accountId: external_exports.string().nullable(),
|
|
38930
|
+
/** The ledger window key that rejected work, such as `five_hour`. */
|
|
38931
|
+
window: external_exports.string(),
|
|
38932
|
+
/** Whether the whole account ran out or only one model on it. */
|
|
38933
|
+
scope: external_exports.string(),
|
|
38934
|
+
/** When that window resets, ISO-8601, or `null` when unknown. */
|
|
38935
|
+
resetsAt: external_exports.string().nullable(),
|
|
38936
|
+
/** How the episode ended. */
|
|
38937
|
+
resolution: LimitResolutionSchema,
|
|
38938
|
+
/** When it ended, ISO-8601. */
|
|
38939
|
+
resolvedAt: external_exports.string(),
|
|
38940
|
+
/** The session the work carried over to (`moved` only), else `null`. */
|
|
38941
|
+
toSessionId: external_exports.string().nullable(),
|
|
38942
|
+
/** The account the work carried over to (`moved` only), else `null`. */
|
|
38943
|
+
toAccountId: external_exports.string().nullable(),
|
|
38944
|
+
/** The model before a `resumed-model` switch, else `null`. */
|
|
38945
|
+
modelFrom: external_exports.string().nullable(),
|
|
38946
|
+
/** The model after a `resumed-model` switch, else `null`. */
|
|
38947
|
+
modelTo: external_exports.string().nullable()
|
|
38948
|
+
}).openapi("LimitHistoryEntry");
|
|
38949
|
+
LimitHistoryResponseSchema = external_exports.object({
|
|
38950
|
+
/** The episodes, oldest first. */
|
|
38951
|
+
entries: external_exports.array(LimitHistoryEntrySchema)
|
|
38952
|
+
}).openapi("LimitHistoryResponse");
|
|
38953
|
+
FoundClaudeFolderSchema = external_exports.object({
|
|
38954
|
+
/** The folder, absolute. */
|
|
38955
|
+
path: external_exports.string(),
|
|
38956
|
+
/** The folder's own name (the path's last part), such as `.claude2`. */
|
|
38957
|
+
name: external_exports.string(),
|
|
38958
|
+
/**
|
|
38959
|
+
* When the account was last used: the newest change among its `projects/`
|
|
38960
|
+
* folder, that folder's children and the files directly inside each child,
|
|
38961
|
+
* ISO-8601. `null` when none could be read.
|
|
38962
|
+
*/
|
|
38963
|
+
lastUsedAt: external_exports.string().nullable(),
|
|
38964
|
+
/** Whether the folder holds a file Claude Code saves when an organization manages the account. */
|
|
38965
|
+
orgManaged: external_exports.boolean(),
|
|
38966
|
+
/** The name of that file, or `null` when there is none. */
|
|
38967
|
+
orgMarker: external_exports.string().nullable()
|
|
38968
|
+
}).openapi("FoundClaudeFolder");
|
|
38969
|
+
DismissFoundFolderRequestSchema = external_exports.object({
|
|
38970
|
+
/** The folder, as the found list gave it. */
|
|
38971
|
+
path: external_exports.string().min(1)
|
|
38972
|
+
}).openapi("DismissFoundFolderRequest");
|
|
38815
38973
|
}
|
|
38816
38974
|
});
|
|
38817
38975
|
|
|
@@ -38827,7 +38985,7 @@ function isSafeSigninUrl(value) {
|
|
|
38827
38985
|
if (url2.protocol !== "http:") return false;
|
|
38828
38986
|
return url2.hostname === "localhost" || url2.hostname === "127.0.0.1" || url2.hostname === "[::1]";
|
|
38829
38987
|
}
|
|
38830
|
-
var PermissionModeSchema, PermissionModeIdSchema, PermissionStopSchema2, SessionTaskStatusSchema, StreamEventTypeSchema, QuestionOptionSchema, QuestionItemSchema, EffortLevelSchema, SessionOriginSchema, SessionLifecycleSchema, LimitPlanSchema, SessionLimitSchema, SessionSchema, SessionUpdateResponseSchema, SessionSettingsSchema, StoredSessionSettingsResponseSchema, UpdateSessionRequestSchema, ForkSessionRequestSchema, ReloadPluginsResultSchema, SEED_CONTEXT_MAX_LENGTH, MessageDispositionSchema, DispositionDowngradeReasonSchema, MessageDeliveryOutcomeSchema, InterruptOutcomeSchema, InterruptReasonSchema, InterruptReceiptSchema, QueuedMessageSchema, SendMessageRequestSchema, SendMessageResponseSchema, SessionTriggerResponseSchema, SessionQueueResponseSchema, QueueMoveTargetSchema, UpdateQueuedMessageRequestSchema, UpdateQueuedMessageResponseSchema, DENY_REASON_MAX_LENGTH, ApprovalRequestSchema, BatchApprovalRequestSchema, SubmitAnswersRequestSchema, UI_ACTION_ID_MAX_LENGTH, UI_ACTION_TITLE_MAX_LENGTH, UI_ACTION_PAYLOAD_MAX_LENGTH, UiActionRequestSchema, McpAppPermissionSchema, McpAppResourceRequestSchema, McpAppResourceResponseSchema, ElicitationModeSchema, ElicitationActionSchema, SubmitElicitationRequestSchema, ListSessionsQuerySchema, SessionListWarningSchema, SessionListResponseSchema, RecentSessionsQuerySchema, RecentSessionsResponseSchema, SessionDailyCountsQuerySchema, SessionDailyCountsResponseSchema, CommandsQuerySchema, TextDeltaSchema, ThinkingDeltaSchema, ToolCallStatusSchema, McpAppRefSchema, ToolCallEventSchema, ToolProgressEventSchema, AlwaysAllowScopeSchema, ApprovalEventSchema, QuestionPromptEventSchema, PendingInteractionDTOSchema, ErrorCategorySchema, ErrorEventSchema, ApiRetryEventSchema, DoneEventSchema, TerminalReasonSchema, UsageStateSchema, UsageStatusSchema, SessionStatusEventSchema, ContextUsageCategorySchema, ContextUsageSchema, TaskItemSchema, TaskUpdateEventSchema, RelayReceiptEventSchema, MessageDeliveredEventSchema, RelayMessageEventSchema, BackgroundTaskTypeSchema, BackgroundTaskStatusSchema, BackgroundTaskStartedEventSchema, BackgroundTaskProgressEventSchema, BackgroundTaskDoneEventSchema, SubagentTextDeltaEventSchema, SystemStatusEventSchema, OperationKindSchema, OperationStateSchema, OperationProgressEventShapeSchema, OperationProgressEventSchema, MemoryEntrySchema, MemoryRecallEventSchema, CompactBoundaryEventSchema, sessionImageShape, SessionImageEventSchema, deniedAgentShape, PermissionDeniedEventSchema, PromptSuggestionEventSchema, HookStartedEventSchema, HookProgressEventSchema, HookResponseEventSchema, SdkSessionStateSchema, SessionStateChangedEventSchema, ElicitationPromptEventSchema, ElicitationCompleteEventSchema, InteractionCancelledEventSchema, CapabilityApprovalRequiredEventSchema, CapabilityApprovalResolvedEventSchema, SigninUrlSchema, MCP_SIGNIN_OUTCOMES, McpSigninOutcomeSchema, McpSigninRequiredEventSchema, McpSigninResolvedEventSchema, StreamEventSchema, TextPartSchema, HookStatusSchema, HookPartSchema, ToolApprovalOutcomeSchema, QuestionOutcomeSchema, ToolCallPartSchema, BackgroundTaskPartSchema, ThinkingPartSchema, ErrorPartSchema, ElicitationPartSchema, CapabilityApprovalPartSchema, McpSigninPartSchema, MemoryRecallPartSchema, PermissionDeniedPartSchema, CompactBoundaryPartSchema, ImagePartSchema, MessagePartSchema, MessageTypeSchema, HistoryToolCallSchema, CompactMetadataSchema, HistoryMessageSchema, CommandEntrySchema, CommandRegistrySchema, FileListQuerySchema, RawFileQuerySchema, FileListResponseSchema, WriteFileRequestSchema, WriteFileResponseSchema, FileEntrySchema, FileTreeQuerySchema, FileTreeResponseSchema, FileContentQuerySchema, FileContentResponseSchema, CreateEntryRequestSchema, CreateEntryResponseSchema, DeleteEntryQuerySchema, RenameEntryRequestSchema, CopyEntryRequestSchema, RevealEntryRequestSchema, DiffBaselineOriginSchema, DiffBaselineQuerySchema, DiffBaselineResponseSchema, AdvanceDiffBaselineRequestSchema, DiffPendingQuerySchema, DiffPendingResponseSchema, DiffBaselineRawQuerySchema, RevertDiffBaselineRequestSchema, FileMutationResponseSchema, WorkbenchSignRequestSchema, WorkbenchSignResponseSchema, WorkbenchProbeRequestSchema, WorkbenchProbeResponseSchema, BrowseDirectoryQuerySchema, DirectoryEntrySchema, BrowseDirectoryResponseSchema, TunnelStatusSchema, HealthResponseSchema, ExecutionDefaultsSchema, ExperimentStateSchema, ServerConfigSchema, ModelTierSchema, ModelOptionSchema, SubagentInfoSchema, GitStatusResponseSchema, GitStatusErrorSchema, ErrorResponseSchema, SessionLockedErrorSchema, TaskStatusSchema, SettableTaskStatusSchema, TaskNameSchema, TaskRunStatusSchema, TaskRunTriggerSchema, TaskSchema, TaskRunSchema, CancelTaskRunResponseSchema, TaskTemplateSchema, TASK_DURATION_PATTERN, TASK_DURATION_MAX, TASK_DESCRIPTION_MAX, CreateTaskRequestSchema, SIDEBAR_TAB_ID_PATTERN, ShapeLiveLayoutCaptureSchema, ForkShapeRequestSchema, UpdateTaskRequestSchema, ListTaskRunsQuerySchema, ConfigPatchRequestSchema, ConfigPatchResponseSchema, UploadResultSchema, UploadResponseSchema, UploadProgressSchema, CanvasMediaSrcSchema, UiCanvasContentSchema, UiPanelIdSchema, UiToastLevelSchema, CELEBRATION_KINDS, CELEBRATION_KIND_SYNONYMS, CelebrationKindSchema, UiCommandTargetSchema, UiCommandSchema, UiCommandEventSchema, UiStateSchema, UiStateReportDocumentSchema, UiStateReportSchema, DevtoolsConsoleLevelSchema, DEVTOOLS_ARGS_MAX_CHARS, DevtoolsConsoleEntrySchema, DevtoolsNetworkEntrySchema, DEVTOOLS_CONSOLE_BATCH_MAX, DEVTOOLS_NETWORK_BATCH_MAX, DEVTOOLS_SCREENSHOT_MAX_CHARS, DevtoolsScreenshotResultSchema, DevtoolsIngestSchema, BrowserTargetSchema, BrowserActCommandSchema, BrowserPageSummarySchema, DEVTOOLS_OUTLINE_MAX_CHARS, DevtoolsActionResultSchema, DevtoolsRecordingUploadSchema;
|
|
38988
|
+
var PermissionModeSchema, PermissionModeIdSchema, PermissionStopSchema2, SessionTaskStatusSchema, StreamEventTypeSchema, QuestionOptionSchema, QuestionItemSchema, EffortLevelSchema, SessionOriginSchema, SessionLifecycleSchema, LimitPlanSchema, LimitStateSchema, SessionLimitSchema, ContinueAccountOptionSchema, ContinueOptionsResponseSchema, ContinueSessionRequestSchema, ContinueSessionResponseSchema, WaitForResetRequestSchema, LimitPlanResponseSchema, SessionSchema, SessionUpdateResponseSchema, SessionSettingsSchema, StoredSessionSettingsResponseSchema, UpdateSessionRequestSchema, ForkSessionRequestSchema, ReloadPluginsResultSchema, SEED_CONTEXT_MAX_LENGTH, MessageDispositionSchema, DispositionDowngradeReasonSchema, MessageDeliveryOutcomeSchema, InterruptOutcomeSchema, InterruptReasonSchema, InterruptReceiptSchema, QueuedMessageSchema, SendMessageRequestSchema, SendMessageResponseSchema, SessionTriggerResponseSchema, SessionQueueResponseSchema, QueueMoveTargetSchema, UpdateQueuedMessageRequestSchema, UpdateQueuedMessageResponseSchema, DENY_REASON_MAX_LENGTH, ApprovalRequestSchema, BatchApprovalRequestSchema, SubmitAnswersRequestSchema, UI_ACTION_ID_MAX_LENGTH, UI_ACTION_TITLE_MAX_LENGTH, UI_ACTION_PAYLOAD_MAX_LENGTH, UiActionRequestSchema, McpAppPermissionSchema, McpAppResourceRequestSchema, McpAppResourceResponseSchema, ElicitationModeSchema, ElicitationActionSchema, SubmitElicitationRequestSchema, ListSessionsQuerySchema, SessionListWarningSchema, SessionListResponseSchema, RecentSessionsQuerySchema, RecentSessionsResponseSchema, SessionDailyCountsQuerySchema, SessionDailyCountsResponseSchema, CommandsQuerySchema, TextDeltaSchema, ThinkingDeltaSchema, ToolCallStatusSchema, McpAppRefSchema, ToolCallEventSchema, ToolProgressEventSchema, AlwaysAllowScopeSchema, ApprovalEventSchema, QuestionPromptEventSchema, PendingInteractionDTOSchema, ErrorCategorySchema, ErrorEventSchema, ApiRetryEventSchema, DoneEventSchema, TerminalReasonSchema, UsageStateSchema, UsageStatusSchema, SessionStatusEventSchema, ContextUsageCategorySchema, ContextUsageSchema, TaskItemSchema, TaskUpdateEventSchema, RelayReceiptEventSchema, MessageDeliveredEventSchema, RelayMessageEventSchema, BackgroundTaskTypeSchema, BackgroundTaskStatusSchema, BackgroundTaskStartedEventSchema, BackgroundTaskProgressEventSchema, BackgroundTaskDoneEventSchema, SubagentTextDeltaEventSchema, SystemStatusEventSchema, OperationKindSchema, OperationStateSchema, OperationProgressEventShapeSchema, OperationProgressEventSchema, MemoryEntrySchema, MemoryRecallEventSchema, CompactBoundaryEventSchema, sessionImageShape, SessionImageEventSchema, deniedAgentShape, PermissionDeniedEventSchema, PromptSuggestionEventSchema, HookStartedEventSchema, HookProgressEventSchema, HookResponseEventSchema, SdkSessionStateSchema, SessionStateChangedEventSchema, ElicitationPromptEventSchema, ElicitationCompleteEventSchema, InteractionCancelledEventSchema, CapabilityApprovalRequiredEventSchema, CapabilityApprovalResolvedEventSchema, SigninUrlSchema, MCP_SIGNIN_OUTCOMES, McpSigninOutcomeSchema, McpSigninRequiredEventSchema, McpSigninResolvedEventSchema, StreamEventSchema, TextPartSchema, HookStatusSchema, HookPartSchema, ToolApprovalOutcomeSchema, QuestionOutcomeSchema, ToolCallPartSchema, BackgroundTaskPartSchema, ThinkingPartSchema, ErrorPartSchema, ElicitationPartSchema, CapabilityApprovalPartSchema, McpSigninPartSchema, MemoryRecallPartSchema, PermissionDeniedPartSchema, CompactBoundaryPartSchema, ImagePartSchema, MessagePartSchema, MessageTypeSchema, HistoryToolCallSchema, CompactMetadataSchema, HistoryMessageSchema, CommandEntrySchema, CommandRegistrySchema, FileListQuerySchema, RawFileQuerySchema, FileListResponseSchema, WriteFileRequestSchema, WriteFileResponseSchema, FileEntrySchema, FileTreeQuerySchema, FileTreeResponseSchema, FileContentQuerySchema, FileContentResponseSchema, CreateEntryRequestSchema, CreateEntryResponseSchema, DeleteEntryQuerySchema, RenameEntryRequestSchema, CopyEntryRequestSchema, RevealEntryRequestSchema, DiffBaselineOriginSchema, DiffBaselineQuerySchema, DiffBaselineResponseSchema, AdvanceDiffBaselineRequestSchema, DiffPendingQuerySchema, DiffPendingResponseSchema, DiffBaselineRawQuerySchema, RevertDiffBaselineRequestSchema, FileMutationResponseSchema, WorkbenchSignRequestSchema, WorkbenchSignResponseSchema, WorkbenchProbeRequestSchema, WorkbenchProbeResponseSchema, BrowseDirectoryQuerySchema, DirectoryEntrySchema, BrowseDirectoryResponseSchema, TunnelStatusSchema, HealthResponseSchema, ExecutionDefaultsSchema, ExperimentStateSchema, ServerConfigSchema, ModelTierSchema, ModelOptionSchema, SubagentInfoSchema, GitStatusResponseSchema, GitStatusErrorSchema, ErrorResponseSchema, SessionLockedErrorSchema, TaskStatusSchema, SettableTaskStatusSchema, TaskNameSchema, TaskRunStatusSchema, TaskRunTriggerSchema, TaskSchema, TaskRunSchema, CancelTaskRunResponseSchema, TaskTemplateSchema, TASK_DURATION_PATTERN, TASK_DURATION_MAX, TASK_DESCRIPTION_MAX, CreateTaskRequestSchema, SIDEBAR_TAB_ID_PATTERN, ShapeLiveLayoutCaptureSchema, ForkShapeRequestSchema, UpdateTaskRequestSchema, ListTaskRunsQuerySchema, ConfigPatchRequestSchema, ConfigPatchResponseSchema, UploadResultSchema, UploadResponseSchema, UploadProgressSchema, CanvasMediaSrcSchema, UiCanvasContentSchema, UiPanelIdSchema, UiToastLevelSchema, CELEBRATION_KINDS, CELEBRATION_KIND_SYNONYMS, CelebrationKindSchema, UiCommandTargetSchema, UiCommandSchema, UiCommandEventSchema, UiStateSchema, UiStateReportDocumentSchema, UiStateReportSchema, DevtoolsConsoleLevelSchema, DEVTOOLS_ARGS_MAX_CHARS, DevtoolsConsoleEntrySchema, DevtoolsNetworkEntrySchema, DEVTOOLS_CONSOLE_BATCH_MAX, DEVTOOLS_NETWORK_BATCH_MAX, DEVTOOLS_SCREENSHOT_MAX_CHARS, DevtoolsScreenshotResultSchema, DevtoolsIngestSchema, BrowserTargetSchema, BrowserActCommandSchema, BrowserPageSummarySchema, DEVTOOLS_OUTLINE_MAX_CHARS, DevtoolsActionResultSchema, DevtoolsRecordingUploadSchema;
|
|
38831
38989
|
var init_schemas3 = __esm({
|
|
38832
38990
|
"../shared/src/schemas.ts"() {
|
|
38833
38991
|
"use strict";
|
|
@@ -38907,15 +39065,32 @@ var init_schemas3 = __esm({
|
|
|
38907
39065
|
SessionOriginSchema = external_exports.enum(["user", "agent", "channel", "room", "task", "external"]).openapi("SessionOrigin");
|
|
38908
39066
|
SessionLifecycleSchema = external_exports.enum(["idle", "streaming", "blocked", "error", "interrupted"]).openapi("SessionLifecycle");
|
|
38909
39067
|
LimitPlanSchema = external_exports.discriminatedUnion("mode", [
|
|
38910
|
-
external_exports.object({ mode: external_exports.literal("ask") }),
|
|
39068
|
+
external_exports.object({ mode: external_exports.literal("ask"), carryOver: external_exports.literal(false).optional() }),
|
|
38911
39069
|
external_exports.object({
|
|
38912
39070
|
mode: external_exports.literal("auto"),
|
|
38913
39071
|
target: external_exports.string(),
|
|
38914
39072
|
fireAt: external_exports.string().datetime({ offset: true })
|
|
38915
39073
|
}),
|
|
38916
|
-
external_exports.object({
|
|
39074
|
+
external_exports.object({
|
|
39075
|
+
mode: external_exports.literal("waiting"),
|
|
39076
|
+
resumeAt: external_exports.string().nullable().default(null),
|
|
39077
|
+
autoResume: external_exports.boolean().default(false),
|
|
39078
|
+
resetConfirmedAt: external_exports.string().optional(),
|
|
39079
|
+
unconfirmed: external_exports.literal(true).optional(),
|
|
39080
|
+
carryOver: external_exports.literal(false).optional()
|
|
39081
|
+
}),
|
|
38917
39082
|
external_exports.object({ mode: external_exports.literal("continued"), sessionId: external_exports.string(), accountId: external_exports.string() })
|
|
38918
39083
|
]).openapi("LimitPlan");
|
|
39084
|
+
LimitStateSchema = external_exports.enum([
|
|
39085
|
+
"limited",
|
|
39086
|
+
"wait-only",
|
|
39087
|
+
"model-limited",
|
|
39088
|
+
"all-accounts-out",
|
|
39089
|
+
"handing-off",
|
|
39090
|
+
"moved",
|
|
39091
|
+
"waiting-reset",
|
|
39092
|
+
"reset-ready"
|
|
39093
|
+
]).openapi("LimitState");
|
|
38919
39094
|
SessionLimitSchema = external_exports.object({
|
|
38920
39095
|
/** The registry id of the account that ran out, or `null` when it is not registered. */
|
|
38921
39096
|
accountId: external_exports.string().nullable(),
|
|
@@ -38926,8 +39101,60 @@ var init_schemas3 = __esm({
|
|
|
38926
39101
|
/** When the limit was hit, ISO-8601. */
|
|
38927
39102
|
since: external_exports.string(),
|
|
38928
39103
|
/** What happens next ({@link LimitPlanSchema}); `ask` when absent. */
|
|
38929
|
-
plan: LimitPlanSchema.default({ mode: "ask" })
|
|
39104
|
+
plan: LimitPlanSchema.default({ mode: "ask" }),
|
|
39105
|
+
/**
|
|
39106
|
+
* `model` when only one model's window ran out (`seven_day_opus`,
|
|
39107
|
+
* `seven_day_sonnet`, a `model:*` bucket), else `account`.
|
|
39108
|
+
*/
|
|
39109
|
+
scope: external_exports.enum(["account", "model"]).default("account"),
|
|
39110
|
+
/** Where the limit stands ({@link LimitStateSchema}); `limited` in an older snapshot. */
|
|
39111
|
+
state: LimitStateSchema.default("limited"),
|
|
39112
|
+
/** The model the same account can keep going on, when only one model ran out. */
|
|
39113
|
+
modelFallback: external_exports.string().optional(),
|
|
39114
|
+
/** With `all-accounts-out`: the account that comes back first, and when. */
|
|
39115
|
+
allOut: external_exports.object({ accountId: external_exports.string(), resetsAt: external_exports.string().nullable() }).optional()
|
|
38930
39116
|
}).openapi("SessionLimit");
|
|
39117
|
+
ContinueAccountOptionSchema = external_exports.object({
|
|
39118
|
+
/** The runtime the account belongs to. */
|
|
39119
|
+
runtime: external_exports.string(),
|
|
39120
|
+
/** The registry id. */
|
|
39121
|
+
id: external_exports.string(),
|
|
39122
|
+
/** What the operator calls the account, or `null` when unnamed. */
|
|
39123
|
+
label: external_exports.string().nullable(),
|
|
39124
|
+
/** The resolved display color. */
|
|
39125
|
+
color: external_exports.string(),
|
|
39126
|
+
/** The account's current usage. */
|
|
39127
|
+
usage: AccountUsageSchema,
|
|
39128
|
+
/** Whether work may go to it now. A person may still pick one that is not. */
|
|
39129
|
+
eligible: external_exports.boolean(),
|
|
39130
|
+
/** Why, in plain words. */
|
|
39131
|
+
reason: external_exports.string(),
|
|
39132
|
+
/** The advisor's badge, when it gave one. */
|
|
39133
|
+
badge: external_exports.enum(["recommended", "reserved"]).optional()
|
|
39134
|
+
}).openapi("ContinueAccountOption");
|
|
39135
|
+
ContinueOptionsResponseSchema = external_exports.object({
|
|
39136
|
+
/** The session's current plan. */
|
|
39137
|
+
plan: LimitPlanSchema,
|
|
39138
|
+
/** The accounts to offer, in order; the account that ran out is not among them. */
|
|
39139
|
+
ranking: external_exports.object({
|
|
39140
|
+
accounts: external_exports.array(ContinueAccountOptionSchema),
|
|
39141
|
+
/** The account to suggest first, or `null` when none has room. */
|
|
39142
|
+
recommendedId: external_exports.string().nullable()
|
|
39143
|
+
}),
|
|
39144
|
+
/** True when the account advisor's ranking was used, false for DorkOS's own. */
|
|
39145
|
+
advised: external_exports.boolean()
|
|
39146
|
+
}).openapi("ContinueOptionsResponse");
|
|
39147
|
+
ContinueSessionRequestSchema = external_exports.object({
|
|
39148
|
+
account: external_exports.string().min(1).optional(),
|
|
39149
|
+
runtime: external_exports.string().min(1).optional(),
|
|
39150
|
+
model: external_exports.string().min(1).optional()
|
|
39151
|
+
}).openapi("ContinueSessionRequest");
|
|
39152
|
+
ContinueSessionResponseSchema = external_exports.object({ sessionId: external_exports.string().optional() }).openapi("ContinueSessionResponse");
|
|
39153
|
+
WaitForResetRequestSchema = external_exports.object({
|
|
39154
|
+
/** Whether the session continues by itself once the reset is confirmed. */
|
|
39155
|
+
autoResume: external_exports.boolean().optional()
|
|
39156
|
+
}).openapi("WaitForResetRequest");
|
|
39157
|
+
LimitPlanResponseSchema = external_exports.object({ plan: LimitPlanSchema }).openapi("LimitPlanResponse");
|
|
38931
39158
|
SessionSchema = external_exports.object({
|
|
38932
39159
|
id: external_exports.string().uuid(),
|
|
38933
39160
|
title: external_exports.string(),
|
|
@@ -39023,12 +39250,19 @@ var init_schemas3 = __esm({
|
|
|
39023
39250
|
accountId: external_exports.string().optional(),
|
|
39024
39251
|
/**
|
|
39025
39252
|
* The session's live status in this server process: its lifecycle and any
|
|
39026
|
-
* usage limit it hit. ABSENT
|
|
39027
|
-
* read it as idle.
|
|
39253
|
+
* usage limit it hit. ABSENT when the session is not live in this process
|
|
39254
|
+
* and has no stored limit; read it as idle.
|
|
39028
39255
|
*/
|
|
39029
39256
|
status: external_exports.object({
|
|
39030
39257
|
lifecycle: SessionLifecycleSchema,
|
|
39031
|
-
limit: SessionLimitSchema.nullable()
|
|
39258
|
+
limit: SessionLimitSchema.nullable(),
|
|
39259
|
+
/**
|
|
39260
|
+
* Account-wide cached usage for the account this session bills, as
|
|
39261
|
+
* `SessionStatus.accountUsage` carries it (spec `claude-account-fleet`
|
|
39262
|
+
* §6 U). Set by `GET /api/sessions/:id`; ABSENT on the list, whose
|
|
39263
|
+
* envelope carries each account once.
|
|
39264
|
+
*/
|
|
39265
|
+
accountUsage: AccountUsageSchema.nullable().optional()
|
|
39032
39266
|
}).optional(),
|
|
39033
39267
|
/**
|
|
39034
39268
|
* The work item a flow run serves, read from flow's `flow-state.json`
|
|
@@ -40814,6 +41048,12 @@ var init_schemas3 = __esm({
|
|
|
40814
41048
|
})
|
|
40815
41049
|
})
|
|
40816
41050
|
).openapi({ description: "The Claude accounts the operator has registered" }),
|
|
41051
|
+
defaultAccountColor: external_exports.string().nullable().optional().openapi({
|
|
41052
|
+
description: "The color the operator chose for the standalone default account (this computer's own Claude sign-in when no registered account has its folder), as lowercase #rrggbb, or null when it shows the default for its position. Ignored while a registered account has the default folder: that account's own color wins. Absent on a server too old to report it"
|
|
41053
|
+
}),
|
|
41054
|
+
defaultAccountResolvedColor: external_exports.string().optional().openapi({
|
|
41055
|
+
description: "The color the default account is drawn in, as lowercase #rrggbb, decided by the server: the registered account that has the default folder's own color, else defaultAccountColor, else the default for its position. Draw this rather than re-deriving it. Absent when the config could not be read, or on a server too old to report it"
|
|
41056
|
+
}),
|
|
40817
41057
|
accountsUnavailable: external_exports.boolean().optional().openapi({
|
|
40818
41058
|
description: "True when the account registry could NOT be read (the config store threw, or was consulted before it was initialized), so `accounts` is empty because nothing could be learned rather than because nothing is registered. Absent means the list is an answer. A client must not judge an agent or session account reference against an unavailable registry \u2014 an override that cannot be verified is unknown, never wrong"
|
|
40819
41059
|
}),
|
|
@@ -44556,6 +44796,13 @@ var init_config_disclosure = __esm({
|
|
|
44556
44796
|
"runtimes.claudeCode.accounts[].path": "expose",
|
|
44557
44797
|
"runtimes.claudeCode.accounts[].label": "expose",
|
|
44558
44798
|
"runtimes.claudeCode.accounts[].color": "expose",
|
|
44799
|
+
// The standalone default account's color (DOR-2492): a display hex, the same
|
|
44800
|
+
// class as a row's `color` right above.
|
|
44801
|
+
"runtimes.claudeCode.defaultAccountColor": "expose",
|
|
44802
|
+
// Account folders a person hid from Settings' "Found on this computer" list
|
|
44803
|
+
// (spec claude-account-ui §7.4). Folder paths, the same class as
|
|
44804
|
+
// `accounts[].path` above: exposed on purpose, and naming no secret.
|
|
44805
|
+
"runtimes.claudeCode.dismissedFolders": "expose",
|
|
44559
44806
|
// The execution defaults a new session on each runtime starts with. A model id
|
|
44560
44807
|
// and an effort rung are the same class of thing as `runtimes.default`: they
|
|
44561
44808
|
// describe HOW work runs here, name no credential and no person, and an agent
|
|
@@ -45137,6 +45384,16 @@ var init_config_write_policy = __esm({
|
|
|
45137
45384
|
// whole array, so a write that could set a color could also add or repoint an
|
|
45138
45385
|
// account. The row stays operator-only as a unit.
|
|
45139
45386
|
"runtimes.claudeCode.accounts[].color": "operator-only",
|
|
45387
|
+
// The standalone default account's color (DOR-2492). Cosmetic too, and held
|
|
45388
|
+
// with the rows' colors on purpose: it is the same choice for the one account
|
|
45389
|
+
// that has no row, so an agent that may not recolor a registered account may
|
|
45390
|
+
// not recolor this one either.
|
|
45391
|
+
"runtimes.claudeCode.defaultAccountColor": "operator-only",
|
|
45392
|
+
// Which found account folders Settings stops offering (spec claude-account-ui
|
|
45393
|
+
// §7.4). Hiding a suggestion widens nothing, but the list decides which
|
|
45394
|
+
// accounts a person is shown as addable, so it stays with the roster it
|
|
45395
|
+
// curates: only a person curates it, through the dismiss route.
|
|
45396
|
+
"runtimes.claudeCode.dismissedFolders": "operator-only",
|
|
45140
45397
|
// The execution defaults for new sessions on each runtime. Writable, and the
|
|
45141
45398
|
// operator was asked directly: a model and an effort level are a preference
|
|
45142
45399
|
// about how work runs, on the same footing as `runtimes.default` right above,
|
|
@@ -45241,7 +45498,7 @@ var init_config_write_policy = __esm({
|
|
|
45241
45498
|
// machine — read as a write rather than as a scope.
|
|
45242
45499
|
"harness.autoSync",
|
|
45243
45500
|
// Whether DorkOS moves a person's own skill folders, unattended, inside
|
|
45244
|
-
// the agent folders
|
|
45501
|
+
// the agent folders DorkOS owns (DOR-1853). The same
|
|
45245
45502
|
// clause read one notch harder: `autoSync` writes links DorkOS made, this
|
|
45246
45503
|
// one moves a file the person wrote.
|
|
45247
45504
|
"harness.autoAdopt",
|
|
@@ -45278,7 +45535,9 @@ var init_config_write_policy = __esm({
|
|
|
45278
45535
|
"runtimes.claudeCode.accounts[].id",
|
|
45279
45536
|
"runtimes.claudeCode.accounts[].path",
|
|
45280
45537
|
"runtimes.claudeCode.accounts[].label",
|
|
45281
|
-
"runtimes.claudeCode.accounts[].color"
|
|
45538
|
+
"runtimes.claudeCode.accounts[].color",
|
|
45539
|
+
"runtimes.claudeCode.defaultAccountColor",
|
|
45540
|
+
"runtimes.claudeCode.dismissedFolders"
|
|
45282
45541
|
]
|
|
45283
45542
|
},
|
|
45284
45543
|
{
|
|
@@ -46785,12 +47044,21 @@ function permissionSeedForOrigin(origin) {
|
|
|
46785
47044
|
// An agent launching a session does not hand it the operator's trust stop;
|
|
46786
47045
|
// whatever power it gets is the tool's clamped mode, set on its own.
|
|
46787
47046
|
//
|
|
47047
|
+
// A carry-over's row already holds the source session's model, effort and
|
|
47048
|
+
// mode, copied before the send; the origin must not add the operator's stop
|
|
47049
|
+
// on top of what the session already had.
|
|
47050
|
+
//
|
|
47051
|
+
// A resume after an account's reset goes to a session that is already
|
|
47052
|
+
// bound: its row is its power, and the origin must not add to it.
|
|
47053
|
+
//
|
|
46788
47054
|
// The harness is not a surface anybody ships to.
|
|
46789
47055
|
case "schedule":
|
|
46790
47056
|
case "relay-binding":
|
|
46791
47057
|
case "agent-dm":
|
|
46792
47058
|
case "connector-event":
|
|
46793
47059
|
case "agent-launch":
|
|
47060
|
+
case "account-handoff":
|
|
47061
|
+
case "account-resume":
|
|
46794
47062
|
case "test-harness":
|
|
46795
47063
|
return "none";
|
|
46796
47064
|
default: {
|
|
@@ -53892,6 +54160,18 @@ var init_sessions = __esm({
|
|
|
53892
54160
|
// inference, unpersisted — so nothing is blocked in the meantime.
|
|
53893
54161
|
runtime: text("runtime"),
|
|
53894
54162
|
agentPath: text("agent_path"),
|
|
54163
|
+
// What started the session (`TurnOrigin.kind`), written by the same
|
|
54164
|
+
// first-write-wins statement that binds the runtime and never overwritten.
|
|
54165
|
+
// Server-held, unlike the best-effort `Session.origin`, so it is what decides
|
|
54166
|
+
// whether a limited session may carry its work to another account (spec
|
|
54167
|
+
// `claude-account-fleet` D9). NULL = bound before this column existed.
|
|
54168
|
+
launchOrigin: text("launch_origin"),
|
|
54169
|
+
// The episode `resetsAt` (else `since`) of the last usage limit core resumed
|
|
54170
|
+
// this session from by itself (spec `claude-account-fleet` D9 "Wait, then
|
|
54171
|
+
// resume by itself"): at most one automatic resume per window reset. Kept
|
|
54172
|
+
// here, not on the `session_limits` row, because the resumed turn's own
|
|
54173
|
+
// `turn_start` deletes that row. NULL = never resumed automatically.
|
|
54174
|
+
lastAutoResumeFor: text("last_auto_resume_for"),
|
|
53895
54175
|
createdAt: text("created_at").notNull(),
|
|
53896
54176
|
// --- Mutable per-session settings (last-write-wins; ADR-0260) ---
|
|
53897
54177
|
// NULL = "no explicit preference; use the runtime's default."
|
|
@@ -54075,14 +54355,101 @@ var init_session_limits = __esm({
|
|
|
54075
54355
|
accountPath: text("account_path"),
|
|
54076
54356
|
/** What happens next, as `LimitPlan` JSON. */
|
|
54077
54357
|
plan: text("plan").notNull(),
|
|
54078
|
-
/** Where the limit stands; `limited` until the out-of-usage flow computes more. */
|
|
54358
|
+
/** Where the limit stands (`LimitState`); `limited` until the out-of-usage flow computes more. */
|
|
54079
54359
|
state: text("state").notNull(),
|
|
54360
|
+
/** The session's working directory when the limit was hit, or NULL when unknown. */
|
|
54361
|
+
cwd: text("cwd"),
|
|
54362
|
+
/** The model the same account can keep going on when only one model ran out, or NULL. */
|
|
54363
|
+
modelFallback: text("model_fallback"),
|
|
54364
|
+
/** With `all-accounts-out`: the JSON of `{ accountId, resetsAt }` for the earliest reset, or NULL. */
|
|
54365
|
+
allOut: text("all_out"),
|
|
54366
|
+
/**
|
|
54367
|
+
* The extension id of the account advisor that claimed this session (spec
|
|
54368
|
+
* `claude-account-fleet` X, "One writer for a flow run"), or NULL when none
|
|
54369
|
+
* did. Stored rather than asked live, so a claim survives the advisor's
|
|
54370
|
+
* extension reloading.
|
|
54371
|
+
*/
|
|
54372
|
+
claimedBy: text("claimed_by"),
|
|
54373
|
+
/**
|
|
54374
|
+
* The session's chosen model when the limit was hit (`session_metadata.model`),
|
|
54375
|
+
* `''` for the runtime's default, or NULL when never recorded (unknown, never
|
|
54376
|
+
* read as a switch). What the limit history compares against at the next
|
|
54377
|
+
* `turn_start` to tell a model switch from a wait (spec `claude-account-ui`
|
|
54378
|
+
* §7.1). Migration 0120 backfilled the rows that predate it.
|
|
54379
|
+
*/
|
|
54380
|
+
model: text("model"),
|
|
54080
54381
|
/** The row's last write. */
|
|
54081
54382
|
updatedAt: text("updated_at").notNull()
|
|
54082
54383
|
});
|
|
54083
54384
|
}
|
|
54084
54385
|
});
|
|
54085
54386
|
|
|
54387
|
+
// ../db/src/schema/session/session-limit-history.ts
|
|
54388
|
+
var sessionLimitHistory;
|
|
54389
|
+
var init_session_limit_history = __esm({
|
|
54390
|
+
"../db/src/schema/session/session-limit-history.ts"() {
|
|
54391
|
+
"use strict";
|
|
54392
|
+
init_sqlite_core();
|
|
54393
|
+
sessionLimitHistory = sqliteTable(
|
|
54394
|
+
"session_limit_history",
|
|
54395
|
+
{
|
|
54396
|
+
/** A uuid. */
|
|
54397
|
+
id: text("id").primaryKey(),
|
|
54398
|
+
/** The canonical session id the limit hit. */
|
|
54399
|
+
sessionId: text("session_id").notNull(),
|
|
54400
|
+
/** When the limit was hit (the episode's `session_limits.since`). */
|
|
54401
|
+
since: text("since").notNull(),
|
|
54402
|
+
/** The runtime the session ran on, such as `claude-code`. */
|
|
54403
|
+
runtime: text("runtime").notNull(),
|
|
54404
|
+
/** The registry id of the account that ran out, or NULL when unregistered. */
|
|
54405
|
+
accountId: text("account_id"),
|
|
54406
|
+
/** The ledger window key that rejected work, such as `five_hour`. */
|
|
54407
|
+
window: text("window").notNull(),
|
|
54408
|
+
/** Whether the whole account ran out (`account`) or one model's window (`model`). */
|
|
54409
|
+
scope: text("scope").notNull(),
|
|
54410
|
+
/** When that window resets, or NULL when unknown. */
|
|
54411
|
+
resetsAt: text("resets_at"),
|
|
54412
|
+
/** How the episode ended. */
|
|
54413
|
+
resolution: text("resolution", {
|
|
54414
|
+
enum: ["moved", "resumed-reset", "resumed-model", "resumed-early"]
|
|
54415
|
+
}).notNull(),
|
|
54416
|
+
/** When it ended. */
|
|
54417
|
+
resolvedAt: text("resolved_at").notNull(),
|
|
54418
|
+
/** The session the work carried over to (`moved` only). */
|
|
54419
|
+
toSessionId: text("to_session_id"),
|
|
54420
|
+
/** The account the work carried over to (`moved` only). */
|
|
54421
|
+
toAccountId: text("to_account_id"),
|
|
54422
|
+
/** The model before a `resumed-model` switch. */
|
|
54423
|
+
modelFrom: text("model_from"),
|
|
54424
|
+
/** The model after a `resumed-model` switch. */
|
|
54425
|
+
modelTo: text("model_to")
|
|
54426
|
+
},
|
|
54427
|
+
(table2) => [
|
|
54428
|
+
uniqueIndex("session_limit_history_episode_idx").on(table2.sessionId, table2.since),
|
|
54429
|
+
index("session_limit_history_resolved_at_idx").on(table2.resolvedAt)
|
|
54430
|
+
]
|
|
54431
|
+
);
|
|
54432
|
+
}
|
|
54433
|
+
});
|
|
54434
|
+
|
|
54435
|
+
// ../db/src/schema/session/session-context.ts
|
|
54436
|
+
var sessionContext;
|
|
54437
|
+
var init_session_context = __esm({
|
|
54438
|
+
"../db/src/schema/session/session-context.ts"() {
|
|
54439
|
+
"use strict";
|
|
54440
|
+
init_sqlite_core();
|
|
54441
|
+
sessionContext = sqliteTable("session_context", {
|
|
54442
|
+
sessionId: text("session_id").primaryKey(),
|
|
54443
|
+
/** Tokens occupying the context window at the reading. */
|
|
54444
|
+
contextTokens: integer2("context_tokens").notNull(),
|
|
54445
|
+
/** The model's context window at the reading; `0` when the runtime did not say. */
|
|
54446
|
+
contextMaxTokens: integer2("context_max_tokens").notNull(),
|
|
54447
|
+
/** When the reading was taken (ISO-8601). */
|
|
54448
|
+
observedAt: text("observed_at").notNull()
|
|
54449
|
+
});
|
|
54450
|
+
}
|
|
54451
|
+
});
|
|
54452
|
+
|
|
54086
54453
|
// ../db/src/schema/workspace.ts
|
|
54087
54454
|
var workspaces;
|
|
54088
54455
|
var init_workspace2 = __esm({
|
|
@@ -56398,7 +56765,8 @@ var init_notifications = __esm({
|
|
|
56398
56765
|
"signin.required",
|
|
56399
56766
|
"update.installed",
|
|
56400
56767
|
"report.daily",
|
|
56401
|
-
"account.limited"
|
|
56768
|
+
"account.limited",
|
|
56769
|
+
"account.reset"
|
|
56402
56770
|
]
|
|
56403
56771
|
}).notNull(),
|
|
56404
56772
|
/** How loud this was allowed to be. Copied from the registry at write time. */
|
|
@@ -56619,7 +56987,9 @@ __export(schema_exports, {
|
|
|
56619
56987
|
searchSources: () => searchSources,
|
|
56620
56988
|
session: () => session,
|
|
56621
56989
|
sessionConnectionOverrides: () => sessionConnectionOverrides,
|
|
56990
|
+
sessionContext: () => sessionContext,
|
|
56622
56991
|
sessionEvents: () => sessionEvents,
|
|
56992
|
+
sessionLimitHistory: () => sessionLimitHistory,
|
|
56623
56993
|
sessionLimits: () => sessionLimits,
|
|
56624
56994
|
sessionMessageAcceptanceReceipts: () => sessionMessageAcceptanceReceipts,
|
|
56625
56995
|
sessionMessageQueue: () => sessionMessageQueue,
|
|
@@ -56648,6 +57018,8 @@ var init_schema2 = __esm({
|
|
|
56648
57018
|
init_session_events();
|
|
56649
57019
|
init_message_acceptance();
|
|
56650
57020
|
init_session_limits();
|
|
57021
|
+
init_session_limit_history();
|
|
57022
|
+
init_session_context();
|
|
56651
57023
|
init_workspace2();
|
|
56652
57024
|
init_auth();
|
|
56653
57025
|
init_unclaimed_chats();
|
|
@@ -56758,6 +57130,17 @@ Your data has not been touched \u2014 DorkOS never recreates, renames or repairs
|
|
|
56758
57130
|
}
|
|
56759
57131
|
});
|
|
56760
57132
|
|
|
57133
|
+
// ../../apps/server/src/services/session/fleet/session-limit-history.ts
|
|
57134
|
+
var LIMIT_HISTORY_RETENTION_MS;
|
|
57135
|
+
var init_session_limit_history2 = __esm({
|
|
57136
|
+
"../../apps/server/src/services/session/fleet/session-limit-history.ts"() {
|
|
57137
|
+
"use strict";
|
|
57138
|
+
init_src2();
|
|
57139
|
+
init_schemas3();
|
|
57140
|
+
LIMIT_HISTORY_RETENTION_MS = 30 * 24 * 60 * 60 * 1e3;
|
|
57141
|
+
}
|
|
57142
|
+
});
|
|
57143
|
+
|
|
56761
57144
|
// ../../apps/server/src/services/session/fleet/session-limit-store.ts
|
|
56762
57145
|
function withSessionLimitStore(what, fn) {
|
|
56763
57146
|
const store = sharedStore;
|
|
@@ -56779,6 +57162,7 @@ var init_session_limit_store = __esm({
|
|
|
56779
57162
|
init_src2();
|
|
56780
57163
|
init_schemas3();
|
|
56781
57164
|
init_logger();
|
|
57165
|
+
init_session_limit_history2();
|
|
56782
57166
|
}
|
|
56783
57167
|
});
|
|
56784
57168
|
|
|
@@ -58775,6 +59159,23 @@ function fillNullsWith(seed) {
|
|
|
58775
59159
|
}
|
|
58776
59160
|
return update;
|
|
58777
59161
|
}
|
|
59162
|
+
function moveSessionContext(db, fromId, toId) {
|
|
59163
|
+
const source = db.select().from(sessionContext).where(eq(sessionContext.sessionId, fromId)).get();
|
|
59164
|
+
if (!source) return;
|
|
59165
|
+
const destination = db.select().from(sessionContext).where(eq(sessionContext.sessionId, toId)).get();
|
|
59166
|
+
db.transaction((tx) => {
|
|
59167
|
+
tx.delete(sessionContext).where(eq(sessionContext.sessionId, fromId)).run();
|
|
59168
|
+
if (destination && destination.observedAt >= source.observedAt) return;
|
|
59169
|
+
tx.insert(sessionContext).values({ ...source, sessionId: toId }).onConflictDoUpdate({
|
|
59170
|
+
target: sessionContext.sessionId,
|
|
59171
|
+
set: {
|
|
59172
|
+
contextTokens: source.contextTokens,
|
|
59173
|
+
contextMaxTokens: source.contextMaxTokens,
|
|
59174
|
+
observedAt: source.observedAt
|
|
59175
|
+
}
|
|
59176
|
+
}).run();
|
|
59177
|
+
});
|
|
59178
|
+
}
|
|
58778
59179
|
var BOUND_RUNTIME_CHUNK_SIZE, RuntimeNotRegisteredError, RuntimeRegistry, runtimeRegistry;
|
|
58779
59180
|
var init_runtime_registry = __esm({
|
|
58780
59181
|
"../../apps/server/src/services/core/runtime-registry.ts"() {
|
|
@@ -58909,6 +59310,10 @@ var init_runtime_registry = __esm({
|
|
|
58909
59310
|
sessionId,
|
|
58910
59311
|
runtime,
|
|
58911
59312
|
agentPath: agentPath ?? null,
|
|
59313
|
+
// What started it, server-held and never overwritten: the fact that
|
|
59314
|
+
// decides whether a limited session may carry its work to another
|
|
59315
|
+
// account (spec `claude-account-fleet` D9).
|
|
59316
|
+
launchOrigin: origin.kind,
|
|
58912
59317
|
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
58913
59318
|
...seed
|
|
58914
59319
|
}).onConflictDoUpdate({
|
|
@@ -58920,6 +59325,8 @@ var init_runtime_registry = __esm({
|
|
|
58920
59325
|
// with no agent never erases a path some other write knew.
|
|
58921
59326
|
...agentPath !== void 0 ? { agentPath } : {},
|
|
58922
59327
|
...fillNullsWith(seed),
|
|
59328
|
+
// The claim names what started the session only when nothing has yet.
|
|
59329
|
+
launchOrigin: sql`coalesce(${sessionMetadata.launchOrigin}, ${origin.kind})`,
|
|
58923
59330
|
// **The UPDATE branch is a CLAIM, and not every origin may seed one.**
|
|
58924
59331
|
// This row already exists: something created it before the session
|
|
58925
59332
|
// started, which for a person is their own pre-launch settings change
|
|
@@ -58938,6 +59345,23 @@ var init_runtime_registry = __esm({
|
|
|
58938
59345
|
});
|
|
58939
59346
|
return result2.changes > 0;
|
|
58940
59347
|
}
|
|
59348
|
+
/**
|
|
59349
|
+
* Take back the binding row a caller wrote at a turn's launch when that turn
|
|
59350
|
+
* then never ran (DOR-2447).
|
|
59351
|
+
*
|
|
59352
|
+
* A room records a session's owner as its turn launches, because a runtime may
|
|
59353
|
+
* ask for authority that needs the row the moment it starts. If the dispatch
|
|
59354
|
+
* then fails before any turn runs, the room never binds that freshly minted
|
|
59355
|
+
* id and mints another next time — so the row would belong to nothing. Only
|
|
59356
|
+
* the caller that wrote the row, for an id only it knows, may ask this.
|
|
59357
|
+
*
|
|
59358
|
+
* @param sessionId - The minted session id whose launch never produced a turn
|
|
59359
|
+
*/
|
|
59360
|
+
async forgetUnstartedSession(sessionId) {
|
|
59361
|
+
const db = this.requireDb("forgetUnstartedSession");
|
|
59362
|
+
db.delete(sessionMetadata).where(eq(sessionMetadata.sessionId, sessionId)).run();
|
|
59363
|
+
return Promise.resolve();
|
|
59364
|
+
}
|
|
58941
59365
|
/**
|
|
58942
59366
|
* Return the runtime type string for a session.
|
|
58943
59367
|
*
|
|
@@ -59070,6 +59494,55 @@ var init_runtime_registry = __esm({
|
|
|
59070
59494
|
const row = db.select({ agentPath: sessionMetadata.agentPath }).from(sessionMetadata).where(eq(sessionMetadata.sessionId, sessionId)).get();
|
|
59071
59495
|
return row?.agentPath ?? null;
|
|
59072
59496
|
}
|
|
59497
|
+
/**
|
|
59498
|
+
* What started a session (`TurnOrigin.kind`), as the binding write recorded
|
|
59499
|
+
* it, or null when the session has no row or was bound before the column
|
|
59500
|
+
* existed. Server-held, unlike `Session.origin`, so it can decide what a
|
|
59501
|
+
* session may do (spec `claude-account-fleet` D9).
|
|
59502
|
+
*
|
|
59503
|
+
* @param sessionId - Session identifier
|
|
59504
|
+
*/
|
|
59505
|
+
getSessionLaunchOrigin(sessionId) {
|
|
59506
|
+
const db = this.requireDb("getSessionLaunchOrigin");
|
|
59507
|
+
const row = db.select({ launchOrigin: sessionMetadata.launchOrigin }).from(sessionMetadata).where(eq(sessionMetadata.sessionId, sessionId)).get();
|
|
59508
|
+
return row?.launchOrigin ?? null;
|
|
59509
|
+
}
|
|
59510
|
+
/**
|
|
59511
|
+
* The usage-limit episode core last resumed this session from by itself
|
|
59512
|
+
* (`session_metadata.last_auto_resume_for`), or null when it never did.
|
|
59513
|
+
* Read by every later episode, so a resumed turn that runs out again in the
|
|
59514
|
+
* same window is never resumed a second time (spec `claude-account-fleet`
|
|
59515
|
+
* D9 "Wait, then resume by itself").
|
|
59516
|
+
*
|
|
59517
|
+
* @param sessionId - Session identifier
|
|
59518
|
+
*/
|
|
59519
|
+
getLastAutoResumeFor(sessionId) {
|
|
59520
|
+
const db = this.requireDb("getLastAutoResumeFor");
|
|
59521
|
+
const row = db.select({ lastAutoResumeFor: sessionMetadata.lastAutoResumeFor }).from(sessionMetadata).where(eq(sessionMetadata.sessionId, sessionId)).get();
|
|
59522
|
+
return row?.lastAutoResumeFor ?? null;
|
|
59523
|
+
}
|
|
59524
|
+
/**
|
|
59525
|
+
* Record that core is resuming this session by itself from the episode
|
|
59526
|
+
* named `episode`, before the resume is sent. Synchronous, so the record and
|
|
59527
|
+
* the dispatch that follows it happen in one step. Creates an unbound row
|
|
59528
|
+
* when the session has none, and never touches the binding.
|
|
59529
|
+
*
|
|
59530
|
+
* @param sessionId - Session identifier
|
|
59531
|
+
* @param episode - The episode's key (its `resetsAt`, else its `since`), or
|
|
59532
|
+
* `null` to put back "never" when the resume could not be sent
|
|
59533
|
+
*/
|
|
59534
|
+
markAutoResumed(sessionId, episode) {
|
|
59535
|
+
const db = this.requireDb("markAutoResumed");
|
|
59536
|
+
db.insert(sessionMetadata).values({
|
|
59537
|
+
sessionId,
|
|
59538
|
+
runtime: null,
|
|
59539
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
59540
|
+
lastAutoResumeFor: episode
|
|
59541
|
+
}).onConflictDoUpdate({
|
|
59542
|
+
target: sessionMetadata.sessionId,
|
|
59543
|
+
set: { lastAutoResumeFor: episode }
|
|
59544
|
+
}).run();
|
|
59545
|
+
}
|
|
59073
59546
|
/**
|
|
59074
59547
|
* Read a session's persisted settings, or null when no row exists. NULL
|
|
59075
59548
|
* columns are omitted from the result (not surfaced as explicit values).
|
|
@@ -59123,6 +59596,21 @@ var init_runtime_registry = __esm({
|
|
|
59123
59596
|
...patch
|
|
59124
59597
|
}).onConflictDoUpdate({ target: sessionMetadata.sessionId, set: patch }).run();
|
|
59125
59598
|
}
|
|
59599
|
+
/**
|
|
59600
|
+
* Delete a session's `session_metadata` row outright, bound or not.
|
|
59601
|
+
*
|
|
59602
|
+
* For exactly one kind of caller: one that minted the session id itself,
|
|
59603
|
+
* saved settings under it, and then saw the launch refused, throw, or not be
|
|
59604
|
+
* accepted (`session_start`). Nobody else can know that id, so nothing anyone
|
|
59605
|
+
* chose is lost; without this, every refused launch would leave a row for a
|
|
59606
|
+
* session that never existed.
|
|
59607
|
+
*
|
|
59608
|
+
* @param sessionId - The id the caller minted.
|
|
59609
|
+
*/
|
|
59610
|
+
async discardSessionSettings(sessionId) {
|
|
59611
|
+
const db = this.requireDb("discardSessionSettings");
|
|
59612
|
+
db.delete(sessionMetadata).where(eq(sessionMetadata.sessionId, sessionId)).run();
|
|
59613
|
+
}
|
|
59126
59614
|
/**
|
|
59127
59615
|
* The `permission_mode` a CLAIM should write: the stored one if the runtime
|
|
59128
59616
|
* being bound can actually run it, otherwise the seed, otherwise nothing.
|
|
@@ -59296,6 +59784,15 @@ var init_runtime_registry = __esm({
|
|
|
59296
59784
|
if (fromId === toId) return;
|
|
59297
59785
|
const db = this.requireDb("rekeySessionSettings");
|
|
59298
59786
|
withSessionLimitStore("rekey", (store) => store.rekeySession(fromId, toId));
|
|
59787
|
+
try {
|
|
59788
|
+
moveSessionContext(db, fromId, toId);
|
|
59789
|
+
} catch (err) {
|
|
59790
|
+
logger.warn("[RuntimeRegistry] could not move a session context reading", {
|
|
59791
|
+
fromId,
|
|
59792
|
+
toId,
|
|
59793
|
+
err: err instanceof Error ? err.message : String(err)
|
|
59794
|
+
});
|
|
59795
|
+
}
|
|
59299
59796
|
const source = db.select().from(sessionMetadata).where(eq(sessionMetadata.sessionId, fromId)).get();
|
|
59300
59797
|
if (!source) return;
|
|
59301
59798
|
const destination = db.select().from(sessionMetadata).where(eq(sessionMetadata.sessionId, toId)).get();
|
|
@@ -59311,7 +59808,9 @@ var init_runtime_registry = __esm({
|
|
|
59311
59808
|
model: destination.model ?? source.model,
|
|
59312
59809
|
effort: destination.effort ?? source.effort,
|
|
59313
59810
|
fastMode: destination.fastMode ?? source.fastMode,
|
|
59314
|
-
agentPath: destination.agentPath ?? source.agentPath
|
|
59811
|
+
agentPath: destination.agentPath ?? source.agentPath,
|
|
59812
|
+
launchOrigin: destination.launchOrigin ?? source.launchOrigin,
|
|
59813
|
+
lastAutoResumeFor: destination.lastAutoResumeFor ?? source.lastAutoResumeFor
|
|
59315
59814
|
}).where(eq(sessionMetadata.sessionId, toId)).run();
|
|
59316
59815
|
});
|
|
59317
59816
|
logger.debug(
|
|
@@ -59528,6 +60027,7 @@ var init_session_stream = __esm({
|
|
|
59528
60027
|
init_approval_schemas();
|
|
59529
60028
|
init_schemas3();
|
|
59530
60029
|
init_canvas_schemas();
|
|
60030
|
+
init_account_usage();
|
|
59531
60031
|
init_schemas3();
|
|
59532
60032
|
extendZodWithOpenApiOnce();
|
|
59533
60033
|
SessionContextUsageSchema = external_exports.object({
|
|
@@ -59540,7 +60040,15 @@ var init_session_stream = __esm({
|
|
|
59540
60040
|
/** Tokens read from prompt cache (90% cost savings). */
|
|
59541
60041
|
cacheReadTokens: external_exports.number().int(),
|
|
59542
60042
|
/** Tokens written to prompt cache (slight write premium). */
|
|
59543
|
-
cacheCreationTokens: external_exports.number().int()
|
|
60043
|
+
cacheCreationTokens: external_exports.number().int(),
|
|
60044
|
+
/**
|
|
60045
|
+
* When {@link totalTokens} and {@link maxTokens} were measured (ISO-8601):
|
|
60046
|
+
* the moment of a live reading, or the stored reading's time when the
|
|
60047
|
+
* figures were restored on open or after a restart (spec
|
|
60048
|
+
* `claude-account-fleet` §6 U). ABSENT when a runtime reported the figures
|
|
60049
|
+
* without it (an older server).
|
|
60050
|
+
*/
|
|
60051
|
+
observedAt: external_exports.string().optional()
|
|
59544
60052
|
}).openapi("SessionContextUsage");
|
|
59545
60053
|
SessionCacheStatsSchema = external_exports.object({
|
|
59546
60054
|
/** Cumulative tokens served from the prompt cache. */
|
|
@@ -59580,6 +60088,21 @@ var init_session_stream = __esm({
|
|
|
59580
60088
|
* The `.default(null)` keeps pre-usage snapshots parsing (version skew).
|
|
59581
60089
|
*/
|
|
59582
60090
|
usage: UsageStatusSchema.nullable().default(null),
|
|
60091
|
+
/**
|
|
60092
|
+
* Account-wide cached usage for the account this session bills (spec
|
|
60093
|
+
* `claude-account-fleet` §6 U), stamped from the server's usage store when
|
|
60094
|
+
* the session is opened, so it shows before the session's first turn and
|
|
60095
|
+
* for a single account (`default`). `updatedAt` and each window's
|
|
60096
|
+
* `observedAt` say how fresh it is. `null` when the session's runtime keeps
|
|
60097
|
+
* no usage ledger.
|
|
60098
|
+
*
|
|
60099
|
+
* Never carried by a `status_change`: a change travels only on the global
|
|
60100
|
+
* `account_usage` event, and a client applies it to every session whose
|
|
60101
|
+
* value names that account, matching on (`runtime`, `accountId`), or on
|
|
60102
|
+
* (`runtime`, `path`) when `accountId` is `null`. The `.default(null)` keeps
|
|
60103
|
+
* older snapshots parsing (version skew).
|
|
60104
|
+
*/
|
|
60105
|
+
accountUsage: AccountUsageSchema.nullable().default(null),
|
|
59583
60106
|
/** Prompt-cache accounting, or `null` before the first turn. */
|
|
59584
60107
|
cacheStats: SessionCacheStatsSchema.nullable(),
|
|
59585
60108
|
/** Active model identifier, or `null` before the first turn. */
|
|
@@ -59754,10 +60277,15 @@ var init_session_stream = __esm({
|
|
|
59754
60277
|
// out fleet-wide — which is a runtime naming a tool the session never
|
|
59755
60278
|
// started. Nothing produces it (the normalizer maps no source field to it),
|
|
59756
60279
|
// so the delta simply cannot express it.
|
|
60280
|
+
//
|
|
60281
|
+
// `accountUsage` is OMITTED too: it is account-wide, so a change to it
|
|
60282
|
+
// travels once on the global `account_usage` event rather than into every
|
|
60283
|
+
// session's log (a log-backed runtime persists each event it streams, and a
|
|
60284
|
+
// reconnect would replay them all).
|
|
59757
60285
|
external_exports.object({
|
|
59758
60286
|
...seqShape,
|
|
59759
60287
|
type: external_exports.literal("status_change"),
|
|
59760
|
-
status: SessionStatusSchema.omit({ activity: true }).partial().extend({
|
|
60288
|
+
status: SessionStatusSchema.omit({ activity: true, accountUsage: true }).partial().extend({
|
|
59761
60289
|
contextUsage: SessionContextUsageSchema.partial().nullable().optional()
|
|
59762
60290
|
})
|
|
59763
60291
|
}),
|
|
@@ -61731,6 +62259,16 @@ function takeAccountsSeen(patch) {
|
|
|
61731
62259
|
seen: new Set(parsed.data)
|
|
61732
62260
|
};
|
|
61733
62261
|
}
|
|
62262
|
+
function defaultAccountColorRefusal(patch) {
|
|
62263
|
+
const runtimes = patch.runtimes;
|
|
62264
|
+
if (!isRecord(runtimes)) return null;
|
|
62265
|
+
const claudeCode = runtimes.claudeCode;
|
|
62266
|
+
if (!isRecord(claudeCode) || !("defaultAccountColor" in claudeCode)) return null;
|
|
62267
|
+
if (DefaultAccountColorSchema.safeParse(claudeCode.defaultAccountColor).success) return null;
|
|
62268
|
+
return [
|
|
62269
|
+
"runtimes.claudeCode.defaultAccountColor: must be a lowercase #rrggbb color, or null for the default."
|
|
62270
|
+
];
|
|
62271
|
+
}
|
|
61734
62272
|
function withReadableLabel(row) {
|
|
61735
62273
|
return typeof row.label === "string" || row.label === null ? row : { ...row, label: null };
|
|
61736
62274
|
}
|
|
@@ -61855,6 +62393,8 @@ function applyConfigPatch(patch) {
|
|
|
61855
62393
|
const taken = takeAccountsSeen(patch);
|
|
61856
62394
|
if (!taken.ok) return { ok: false, error: "Validation failed", details: taken.details };
|
|
61857
62395
|
const patchObj = taken.patch;
|
|
62396
|
+
const colorRefusal = defaultAccountColorRefusal(patchObj);
|
|
62397
|
+
if (colorRefusal) return { ok: false, error: "Validation failed", details: colorRefusal };
|
|
61858
62398
|
const current = configManager.getAll();
|
|
61859
62399
|
const merged = deepMerge(current, patchObj);
|
|
61860
62400
|
settleLegacyAccountAlias(merged, patchObj);
|
|
@@ -68789,10 +69329,17 @@ different folder, so:
|
|
|
68789
69329
|
|
|
68790
69330
|
## Sync before you edit
|
|
68791
69331
|
|
|
68792
|
-
|
|
68793
|
-
|
|
68794
|
-
|
|
68795
|
-
|
|
69332
|
+
When a room turn of yours starts and your copy has nothing in progress (nothing
|
|
69333
|
+
changed, nothing committed that the room lacks, still on your own branch),
|
|
69334
|
+
DorkOS brings it up to date with main first, and your room context says so.
|
|
69335
|
+
When you do have work in progress, your copy is left exactly as it is, and your
|
|
69336
|
+
room context lists what moved on main since you branched: who changed it, which
|
|
69337
|
+
files, and which of those you have changed too.
|
|
69338
|
+
|
|
69339
|
+
Either way, run \`git -C <your copy> merge main\` at the start of any turn where
|
|
69340
|
+
you are going to change something. This is plain git, not a tool: sorting out a
|
|
69341
|
+
clash in your own copy is your job, and doing it there means the room's copy
|
|
69342
|
+
never sits in a conflicted state.
|
|
68796
69343
|
|
|
68797
69344
|
Your room context tells you how far the room has moved ahead of you. If you want
|
|
68798
69345
|
to look before you start, the tool whose name ends in \`room_repo_status\` reports
|
|
@@ -69056,7 +69603,7 @@ var init_refusals = __esm({
|
|
|
69056
69603
|
/** R7, and the offending keys are a mix, or one belongs to nobody DorkOS knows. */
|
|
69057
69604
|
S7c: (name, fields) => `"${name}" uses ${fields} in its settings, which DorkOS doesn't recognise, so it can't tell whether your other agents can run it. Run dorkos harness adopt ${name} --claude-only to keep it where it is, or take ${fields} out and adopt it.`,
|
|
69058
69605
|
/** B1 — `harness.autoAdopt` is on somewhere DorkOS does not own. */
|
|
69059
|
-
S8: () => `harness.autoAdopt is on, and it does nothing here: DorkOS only moves skills on its own inside the agent folders
|
|
69606
|
+
S8: () => `harness.autoAdopt is on, and it does nothing here: DorkOS only moves skills on its own inside the agent folders it owns. Run dorkos harness adopt <name> to move one yourself.`,
|
|
69060
69607
|
/** R8 — `--claude-only` on a candidate that does not live in Claude Code's folder. */
|
|
69061
69608
|
S9: (name, root) => `--claude-only records a skill as belonging to Claude Code, and "${name}" lives in ${root}. Leave it where it is, or move the folder yourself.`,
|
|
69062
69609
|
/**
|
|
@@ -135701,7 +136248,13 @@ var init_connector_schemas = __esm({
|
|
|
135701
136248
|
operations: external_exports.array(
|
|
135702
136249
|
ConnectorOperationRevisionSchema.omit({ id: true, discoveredAt: true }).extend({
|
|
135703
136250
|
// Private upstream revision identity, never included in public revision DTOs.
|
|
135704
|
-
providerRevisionRef: external_exports.string().min(1).max(500).optional()
|
|
136251
|
+
providerRevisionRef: external_exports.string().min(1).max(500).optional(),
|
|
136252
|
+
// Presentation hints only. Neither is part of a revision's identity, its
|
|
136253
|
+
// stored row, or its safety classification.
|
|
136254
|
+
/** The service's own display name for the operation, when it gives one. */
|
|
136255
|
+
displayName: external_exports.string().min(1).max(200).optional(),
|
|
136256
|
+
/** True when the service marks the operation as one of its main ones. */
|
|
136257
|
+
important: external_exports.boolean().optional()
|
|
135705
136258
|
})
|
|
135706
136259
|
),
|
|
135707
136260
|
nextCursor: external_exports.string().min(1).optional(),
|
|
@@ -136283,7 +136836,16 @@ var init_connector_provider = __esm({
|
|
|
136283
136836
|
/** Exact per-service authentication availability when it differs from the provider default. */
|
|
136284
136837
|
authentication: ConnectorCapabilityAvailabilitySchema.optional(),
|
|
136285
136838
|
/** Composio's `max_accounts_per_toolkit`; `undefined` = unbounded/one. */
|
|
136286
|
-
maxAccountsPerUser: external_exports.number().int().positive().optional()
|
|
136839
|
+
maxAccountsPerUser: external_exports.number().int().positive().optional(),
|
|
136840
|
+
/**
|
|
136841
|
+
* Where the connection service hosts the app's logo: an https URL on one of
|
|
136842
|
+
* that service's own logo hosts, already checked by the provider. Server-side
|
|
136843
|
+
* only: the catalog never sends it to a browser, which gets a same-origin
|
|
136844
|
+
* logo path instead, and the server's logo route fetches this URL.
|
|
136845
|
+
*/
|
|
136846
|
+
logoUrl: external_exports.string().url().max(2e3).optional(),
|
|
136847
|
+
/** The service's own one-line description of the app, already cut to one short sentence. */
|
|
136848
|
+
description: external_exports.string().min(1).max(300).optional()
|
|
136287
136849
|
});
|
|
136288
136850
|
ConnectedAccountStatusSchema = external_exports.enum([
|
|
136289
136851
|
"active",
|
|
@@ -142364,7 +142926,7 @@ if (process.argv[2] === "community") {
|
|
|
142364
142926
|
})
|
|
142365
142927
|
);
|
|
142366
142928
|
const exitCode = await dispatcher.runCommunityDispatcher(process.argv.slice(3), {
|
|
142367
|
-
cliVersion: "0.
|
|
142929
|
+
cliVersion: "0.89.0",
|
|
142368
142930
|
dorkHome: DORK_HOME,
|
|
142369
142931
|
processEnv: childEnv,
|
|
142370
142932
|
parseRelease: (bytes) => releaseContract.parseCompatibleCommunityReleaseManifest(
|
|
@@ -142382,7 +142944,7 @@ if (process.argv[2] === "community") {
|
|
|
142382
142944
|
process.exit(1);
|
|
142383
142945
|
}
|
|
142384
142946
|
}
|
|
142385
|
-
var cliErrorReporter = initCliErrorReporting({ dorkHome: DORK_HOME, version: "0.
|
|
142947
|
+
var cliErrorReporter = initCliErrorReporting({ dorkHome: DORK_HOME, version: "0.89.0" });
|
|
142386
142948
|
var uninstallCliErrorHandlers = cliErrorReporter ? installCliErrorHandlers(cliErrorReporter) : void 0;
|
|
142387
142949
|
if (process.argv[2] === "doctor") {
|
|
142388
142950
|
process.env.DORK_HOME = DORK_HOME;
|
|
@@ -142392,7 +142954,7 @@ if (process.argv[2] === "doctor") {
|
|
|
142392
142954
|
if (process.argv[2] === "feedback") {
|
|
142393
142955
|
process.env.DORK_HOME = DORK_HOME;
|
|
142394
142956
|
const { runFeedback: runFeedback2 } = await Promise.resolve().then(() => (init_feedback2(), feedback_exports));
|
|
142395
|
-
process.exit(await runFeedback2(DORK_HOME, "0.
|
|
142957
|
+
process.exit(await runFeedback2(DORK_HOME, "0.89.0", process.argv.slice(3)));
|
|
142396
142958
|
}
|
|
142397
142959
|
if (process.argv[2] === "auth") {
|
|
142398
142960
|
process.env.DORK_HOME = DORK_HOME;
|
|
@@ -142491,7 +143053,7 @@ if (process.argv[2] === "agent" || process.argv[2] === "task" || process.argv[2]
|
|
|
142491
143053
|
}
|
|
142492
143054
|
}
|
|
142493
143055
|
const { runVersionDispatcher: runVersionDispatcher2 } = await Promise.resolve().then(() => (init_version5(), version_exports));
|
|
142494
|
-
process.exit(await runVersionDispatcher2("0.
|
|
143056
|
+
process.exit(await runVersionDispatcher2("0.89.0", DORK_HOME, subArgs));
|
|
142495
143057
|
}
|
|
142496
143058
|
function parseCliArgs() {
|
|
142497
143059
|
try {
|
|
@@ -142616,14 +143178,14 @@ Examples:
|
|
|
142616
143178
|
process.exit(0);
|
|
142617
143179
|
}
|
|
142618
143180
|
if (values.version) {
|
|
142619
|
-
console.log("0.
|
|
143181
|
+
console.log("0.89.0");
|
|
142620
143182
|
process.exit(0);
|
|
142621
143183
|
}
|
|
142622
143184
|
if (values["post-install-check"]) {
|
|
142623
143185
|
const claudeFound = checkClaude();
|
|
142624
143186
|
const coreExtensionsFound = checkCoreExtensions();
|
|
142625
143187
|
const extensionsCompile = await checkExtensionCompilation();
|
|
142626
|
-
console.log(`dorkos ${"0.
|
|
143188
|
+
console.log(`dorkos ${"0.89.0"}`);
|
|
142627
143189
|
if (!coreExtensionsFound) {
|
|
142628
143190
|
console.log("Installation incomplete \u2014 bundled core extensions are missing.");
|
|
142629
143191
|
}
|
|
@@ -142780,7 +143342,7 @@ if (fs30.existsSync(envPath)) {
|
|
|
142780
143342
|
}
|
|
142781
143343
|
uninstallCliErrorHandlers?.();
|
|
142782
143344
|
process.env.DORKOS_CLI_ENTRYPOINT = fileURLToPath6(import.meta.url);
|
|
142783
|
-
process.env.DORKOS_CLI_VERSION = "0.
|
|
143345
|
+
process.env.DORKOS_CLI_VERSION = "0.89.0";
|
|
142784
143346
|
var server;
|
|
142785
143347
|
try {
|
|
142786
143348
|
server = await import("../server/index.js");
|
|
@@ -142805,7 +143367,7 @@ var ansiReset = "\x1B[0m";
|
|
|
142805
143367
|
console.log("");
|
|
142806
143368
|
console.log(`${purple}${logo}${ansiReset}`);
|
|
142807
143369
|
console.log("");
|
|
142808
|
-
console.log(` DorkOS v${"0.
|
|
143370
|
+
console.log(` DorkOS v${"0.89.0"}`);
|
|
142809
143371
|
console.log(` Local: ${link(localUrl, localUrl)}`);
|
|
142810
143372
|
var nets = networkInterfaces();
|
|
142811
143373
|
var networkUrl = null;
|
|
@@ -142831,9 +143393,9 @@ if (shouldOpenBrowser && process.stdin.isTTY) {
|
|
|
142831
143393
|
const openCmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
|
|
142832
143394
|
exec(`${openCmd} ${localUrl}`);
|
|
142833
143395
|
}
|
|
142834
|
-
checkForUpdate("0.
|
|
143396
|
+
checkForUpdate("0.89.0").then((latestVersion) => {
|
|
142835
143397
|
if (latestVersion) {
|
|
142836
|
-
const msg = `Update available: ${"0.
|
|
143398
|
+
const msg = `Update available: ${"0.89.0"} \u2192 ${latestVersion}`;
|
|
142837
143399
|
const cmd = "Run npm install -g dorkos@latest to update";
|
|
142838
143400
|
const width = Math.max(msg.length, cmd.length) + 6;
|
|
142839
143401
|
const pad2 = (s2) => `\u2502 ${s2}${" ".repeat(width - s2.length - 6)} \u2502`;
|