charness 3.0.0 → 3.1.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/README.md +188 -16
- package/dist/adapters/claudeCliAdapter.d.ts +15 -0
- package/dist/adapters/claudeCliAdapter.d.ts.map +1 -1
- package/dist/adapters/claudeCliAdapter.js +36 -1
- package/dist/adapters/claudeCliAdapter.js.map +1 -1
- package/dist/adapters/claudeConfigDir.d.ts +40 -0
- package/dist/adapters/claudeConfigDir.d.ts.map +1 -0
- package/dist/adapters/claudeConfigDir.js +3 -0
- package/dist/adapters/claudeConfigDir.js.map +1 -0
- package/dist/adapters/claudeJsonStreamAdapter.d.ts +32 -0
- package/dist/adapters/claudeJsonStreamAdapter.d.ts.map +1 -1
- package/dist/adapters/claudeJsonStreamAdapter.js +89 -8
- package/dist/adapters/claudeJsonStreamAdapter.js.map +1 -1
- package/dist/adapters/claudePlatformFlags.d.ts +4 -4
- package/dist/adapters/claudePlatformFlags.js +4 -4
- package/dist/adapters/createAdapter.d.ts +8 -0
- package/dist/adapters/createAdapter.d.ts.map +1 -1
- package/dist/adapters/createAdapter.js +37 -0
- package/dist/adapters/createAdapter.js.map +1 -1
- package/dist/adapters/openCodeAdapter.d.ts +23 -0
- package/dist/adapters/openCodeAdapter.d.ts.map +1 -1
- package/dist/adapters/openCodeAdapter.js +84 -1
- package/dist/adapters/openCodeAdapter.js.map +1 -1
- package/dist/agentLogin/agentLogin.d.ts +15 -2
- package/dist/agentLogin/agentLogin.d.ts.map +1 -1
- package/dist/agentLogin/agentLogin.js +53 -16
- package/dist/agentLogin/agentLogin.js.map +1 -1
- package/dist/apiErrorRetry.d.ts +8 -3
- package/dist/apiErrorRetry.d.ts.map +1 -1
- package/dist/apiErrorRetry.js +36 -5
- package/dist/apiErrorRetry.js.map +1 -1
- package/dist/apiRetryKick.d.ts +9 -0
- package/dist/apiRetryKick.d.ts.map +1 -1
- package/dist/apiRetryKick.js +16 -0
- package/dist/apiRetryKick.js.map +1 -1
- package/dist/bot.d.ts.map +1 -1
- package/dist/bot.js +639 -24
- package/dist/bot.js.map +1 -1
- package/dist/cli/claudeProfiles.d.ts +42 -0
- package/dist/cli/claudeProfiles.d.ts.map +1 -0
- package/dist/cli/claudeProfiles.js +106 -0
- package/dist/cli/claudeProfiles.js.map +1 -0
- package/dist/cli.js +10 -0
- package/dist/cli.js.map +1 -1
- package/dist/connectors/jira/adf.d.ts +2 -0
- package/dist/connectors/jira/adf.d.ts.map +1 -1
- package/dist/connectors/jira/adf.js +5 -0
- package/dist/connectors/jira/adf.js.map +1 -1
- package/dist/connectors/jira/answerSink.d.ts +7 -0
- package/dist/connectors/jira/answerSink.d.ts.map +1 -1
- package/dist/connectors/jira/answerSink.js +24 -10
- package/dist/connectors/jira/answerSink.js.map +1 -1
- package/dist/connectors/jira/attachmentTool.d.ts +7 -0
- package/dist/connectors/jira/attachmentTool.d.ts.map +1 -1
- package/dist/connectors/jira/attachmentTool.js +16 -0
- package/dist/connectors/jira/attachmentTool.js.map +1 -1
- package/dist/connectors/jira/client.d.ts +32 -0
- package/dist/connectors/jira/client.d.ts.map +1 -1
- package/dist/connectors/jira/client.js +43 -5
- package/dist/connectors/jira/client.js.map +1 -1
- package/dist/connectors/jira/config.d.ts +3 -16
- package/dist/connectors/jira/config.d.ts.map +1 -1
- package/dist/connectors/jira/config.js +5 -32
- package/dist/connectors/jira/config.js.map +1 -1
- package/dist/connectors/jira/connector.d.ts +3 -0
- package/dist/connectors/jira/connector.d.ts.map +1 -1
- package/dist/connectors/jira/connector.js +70 -15
- package/dist/connectors/jira/connector.js.map +1 -1
- package/dist/connectors/jira/contextLedger.d.ts +1 -0
- package/dist/connectors/jira/contextLedger.d.ts.map +1 -1
- package/dist/connectors/jira/contextLedger.js +2 -0
- package/dist/connectors/jira/contextLedger.js.map +1 -1
- package/dist/connectors/jira/inbound.d.ts +15 -6
- package/dist/connectors/jira/inbound.d.ts.map +1 -1
- package/dist/connectors/jira/inbound.js +37 -22
- package/dist/connectors/jira/inbound.js.map +1 -1
- package/dist/connectors/jira/issueBlocks.d.ts +26 -3
- package/dist/connectors/jira/issueBlocks.d.ts.map +1 -1
- package/dist/connectors/jira/issueBlocks.js +104 -29
- package/dist/connectors/jira/issueBlocks.js.map +1 -1
- package/dist/connectors/jira/issueContext.d.ts +11 -5
- package/dist/connectors/jira/issueContext.d.ts.map +1 -1
- package/dist/connectors/jira/issueContext.js +23 -6
- package/dist/connectors/jira/issueContext.js.map +1 -1
- package/dist/connectors/jira/issueDelta.d.ts +3 -0
- package/dist/connectors/jira/issueDelta.d.ts.map +1 -1
- package/dist/connectors/jira/issueDelta.js +15 -6
- package/dist/connectors/jira/issueDelta.js.map +1 -1
- package/dist/connectors/jira/mediaPlaceholders.d.ts +2 -0
- package/dist/connectors/jira/mediaPlaceholders.d.ts.map +1 -1
- package/dist/connectors/jira/mediaPlaceholders.js +16 -3
- package/dist/connectors/jira/mediaPlaceholders.js.map +1 -1
- package/dist/connectors/jira/prompt.d.ts +2 -0
- package/dist/connectors/jira/prompt.d.ts.map +1 -1
- package/dist/connectors/jira/prompt.js +4 -1
- package/dist/connectors/jira/prompt.js.map +1 -1
- package/dist/connectors/jira/sessionKeyCodec.d.ts +2 -0
- package/dist/connectors/jira/sessionKeyCodec.d.ts.map +1 -1
- package/dist/connectors/jira/sessionKeyCodec.js +5 -0
- package/dist/connectors/jira/sessionKeyCodec.js.map +1 -1
- package/dist/connectors/jira/trigger.d.ts +4 -0
- package/dist/connectors/jira/trigger.d.ts.map +1 -1
- package/dist/connectors/jira/trigger.js +9 -1
- package/dist/connectors/jira/trigger.js.map +1 -1
- package/dist/connectors/jira/triggerLog.d.ts +4 -2
- package/dist/connectors/jira/triggerLog.d.ts.map +1 -1
- package/dist/connectors/jira/triggerLog.js +1 -1
- package/dist/connectors/jira/triggerLog.js.map +1 -1
- package/dist/connectors/jira/trustedGroup.d.ts +54 -0
- package/dist/connectors/jira/trustedGroup.d.ts.map +1 -0
- package/dist/connectors/jira/trustedGroup.js +98 -0
- package/dist/connectors/jira/trustedGroup.js.map +1 -0
- package/dist/connectors/telegram/commands/autoContinueLimits.d.ts +3 -0
- package/dist/connectors/telegram/commands/autoContinueLimits.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/autoContinueLimits.js +15 -45
- package/dist/connectors/telegram/commands/autoContinueLimits.js.map +1 -1
- package/dist/connectors/telegram/commands/claudeAccounts.d.ts +58 -0
- package/dist/connectors/telegram/commands/claudeAccounts.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/claudeAccounts.js +591 -0
- package/dist/connectors/telegram/commands/claudeAccounts.js.map +1 -0
- package/dist/connectors/telegram/commands/fallbackChain.d.ts +49 -0
- package/dist/connectors/telegram/commands/fallbackChain.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/fallbackChain.js +624 -0
- package/dist/connectors/telegram/commands/fallbackChain.js.map +1 -0
- package/dist/connectors/telegram/commands/modelProviders.d.ts +23 -1
- package/dist/connectors/telegram/commands/modelProviders.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/modelProviders.js +131 -6
- package/dist/connectors/telegram/commands/modelProviders.js.map +1 -1
- package/dist/i18n/de.d.ts.map +1 -1
- package/dist/i18n/de.js +137 -9
- package/dist/i18n/de.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +137 -9
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/es.d.ts.map +1 -1
- package/dist/i18n/es.js +137 -9
- package/dist/i18n/es.js.map +1 -1
- package/dist/i18n/fr.d.ts.map +1 -1
- package/dist/i18n/fr.js +137 -9
- package/dist/i18n/fr.js.map +1 -1
- package/dist/i18n/hi.d.ts.map +1 -1
- package/dist/i18n/hi.js +137 -9
- package/dist/i18n/hi.js.map +1 -1
- package/dist/i18n/ja.d.ts.map +1 -1
- package/dist/i18n/ja.js +137 -9
- package/dist/i18n/ja.js.map +1 -1
- package/dist/i18n/ka.d.ts.map +1 -1
- package/dist/i18n/ka.js +137 -9
- package/dist/i18n/ka.js.map +1 -1
- package/dist/i18n/pt.d.ts.map +1 -1
- package/dist/i18n/pt.js +137 -9
- package/dist/i18n/pt.js.map +1 -1
- package/dist/i18n/ru.d.ts.map +1 -1
- package/dist/i18n/ru.js +137 -9
- package/dist/i18n/ru.js.map +1 -1
- package/dist/i18n/uk.d.ts.map +1 -1
- package/dist/i18n/uk.js +137 -9
- package/dist/i18n/uk.js.map +1 -1
- package/dist/i18n/uz.d.ts.map +1 -1
- package/dist/i18n/uz.js +137 -9
- package/dist/i18n/uz.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +137 -9
- package/dist/i18n/zh.js.map +1 -1
- package/dist/scheduler/mcpSurface.d.ts +8 -0
- package/dist/scheduler/mcpSurface.d.ts.map +1 -1
- package/dist/scheduler/mcpSurface.js +42 -2
- package/dist/scheduler/mcpSurface.js.map +1 -1
- package/dist/state.d.ts +172 -1
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +298 -0
- package/dist/state.js.map +1 -1
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/autoContinueOnLimit.d.ts +7 -0
- package/dist/utils/autoContinueOnLimit.d.ts.map +1 -1
- package/dist/utils/autoContinueOnLimit.js +10 -0
- package/dist/utils/autoContinueOnLimit.js.map +1 -1
- package/dist/utils/claudeAccountPickerPlan.d.ts +85 -0
- package/dist/utils/claudeAccountPickerPlan.d.ts.map +1 -0
- package/dist/utils/claudeAccountPickerPlan.js +123 -0
- package/dist/utils/claudeAccountPickerPlan.js.map +1 -0
- package/dist/utils/claudeLimitSwitch.d.ts +40 -0
- package/dist/utils/claudeLimitSwitch.d.ts.map +1 -0
- package/dist/utils/claudeLimitSwitch.js +54 -0
- package/dist/utils/claudeLimitSwitch.js.map +1 -0
- package/dist/utils/claudeProfileUsageLines.d.ts +15 -0
- package/dist/utils/claudeProfileUsageLines.d.ts.map +1 -0
- package/dist/utils/claudeProfileUsageLines.js +42 -0
- package/dist/utils/claudeProfileUsageLines.js.map +1 -0
- package/dist/utils/claudeProfiles.d.ts +117 -0
- package/dist/utils/claudeProfiles.d.ts.map +1 -0
- package/dist/utils/claudeProfiles.js +285 -0
- package/dist/utils/claudeProfiles.js.map +1 -0
- package/dist/utils/claudeStreamJson.d.ts +13 -1
- package/dist/utils/claudeStreamJson.d.ts.map +1 -1
- package/dist/utils/claudeStreamJson.js +13 -0
- package/dist/utils/claudeStreamJson.js.map +1 -1
- package/dist/utils/claudeUsage.d.ts +209 -0
- package/dist/utils/claudeUsage.d.ts.map +1 -0
- package/dist/utils/claudeUsage.js +413 -0
- package/dist/utils/claudeUsage.js.map +1 -0
- package/dist/utils/claudeUsageRefresher.d.ts +44 -0
- package/dist/utils/claudeUsageRefresher.d.ts.map +1 -0
- package/dist/utils/claudeUsageRefresher.js +95 -0
- package/dist/utils/claudeUsageRefresher.js.map +1 -0
- package/dist/utils/fallbackBridge.d.ts +32 -0
- package/dist/utils/fallbackBridge.d.ts.map +1 -0
- package/dist/utils/fallbackBridge.js +62 -0
- package/dist/utils/fallbackBridge.js.map +1 -0
- package/dist/utils/fallbackChain.d.ts +299 -0
- package/dist/utils/fallbackChain.d.ts.map +1 -0
- package/dist/utils/fallbackChain.js +542 -0
- package/dist/utils/fallbackChain.js.map +1 -0
- package/dist/utils/jsonStreamHost.d.ts +14 -3
- package/dist/utils/jsonStreamHost.d.ts.map +1 -1
- package/dist/utils/jsonStreamHost.js +26 -5
- package/dist/utils/jsonStreamHost.js.map +1 -1
- package/dist/utils/modelRecentPlan.d.ts +56 -0
- package/dist/utils/modelRecentPlan.d.ts.map +1 -0
- package/dist/utils/modelRecentPlan.js +107 -0
- package/dist/utils/modelRecentPlan.js.map +1 -0
- package/dist/utils/threadStatusReport.d.ts +25 -1
- package/dist/utils/threadStatusReport.d.ts.map +1 -1
- package/dist/utils/threadStatusReport.js +24 -1
- package/dist/utils/threadStatusReport.js.map +1 -1
- package/package.json +1 -1
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,13 @@
|
|
|
19
19
|
* unconditional, so ON is the behaviour-preserving default.
|
|
20
20
|
*/
|
|
21
21
|
export declare function resolveAutoContinueOnLimitEnabled(globalDefault: boolean | undefined, threadOverride: boolean | undefined): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* @description Resolve whether the bot may switch a limited topic to ANOTHER Claude account profile by itself
|
|
24
|
+
* (`/account` → auto-switch; the decisions live in `claudeLimitSwitch.ts`, which re-exports this). A per-thread
|
|
25
|
+
* override wins; otherwise the instance default; unset everywhere ⇒ OFF — moving work between subscriptions is
|
|
26
|
+
* an account-policy decision the operator opts into. Kept beside its sibling so `state.ts` loads no more than it did.
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveClaudeAutoSwitchOnLimitEnabled(globalDefault: boolean | undefined, threadOverride: boolean | undefined): boolean;
|
|
22
29
|
/** `callback_data` prefix of the «skip this resume once» button. */
|
|
23
30
|
export declare const skipArmedRetryCallbackPrefix = "acl_skip_";
|
|
24
31
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autoContinueOnLimit.d.ts","sourceRoot":"","sources":["../../src/utils/autoContinueOnLimit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAC/C,aAAa,EAAE,OAAO,GAAG,SAAS,EAClC,cAAc,EAAE,OAAO,GAAG,SAAS,GAClC,OAAO,CAET;AAED,oEAAoE;AACpE,eAAO,MAAM,4BAA4B,cAAc,CAAC;AAExD;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,mFAAmF;AACnF,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK3E;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,GAAG,SAAS,CAGrB"}
|
|
1
|
+
{"version":3,"file":"autoContinueOnLimit.d.ts","sourceRoot":"","sources":["../../src/utils/autoContinueOnLimit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAC/C,aAAa,EAAE,OAAO,GAAG,SAAS,EAClC,cAAc,EAAE,OAAO,GAAG,SAAS,GAClC,OAAO,CAET;AAED;;;;;GAKG;AACH,wBAAgB,qCAAqC,CACnD,aAAa,EAAE,OAAO,GAAG,SAAS,EAClC,cAAc,EAAE,OAAO,GAAG,SAAS,GAClC,OAAO,CAET;AAED,oEAAoE;AACpE,eAAO,MAAM,4BAA4B,cAAc,CAAC;AAExD;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,mFAAmF;AACnF,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK3E;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,GAAG,SAAS,CAGrB"}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
exports.skipArmedRetryCallbackPrefix = void 0;
|
|
18
18
|
exports.resolveAutoContinueOnLimitEnabled = resolveAutoContinueOnLimitEnabled;
|
|
19
|
+
exports.resolveClaudeAutoSwitchOnLimitEnabled = resolveClaudeAutoSwitchOnLimitEnabled;
|
|
19
20
|
exports.buildSkipArmedRetryCallbackData = buildSkipArmedRetryCallbackData;
|
|
20
21
|
exports.parseSkipArmedRetryCallbackData = parseSkipArmedRetryCallbackData;
|
|
21
22
|
exports.getArmedRetrySkipDecision = getArmedRetrySkipDecision;
|
|
@@ -29,6 +30,15 @@ const threadToggle_1 = require("./threadToggle");
|
|
|
29
30
|
function resolveAutoContinueOnLimitEnabled(globalDefault, threadOverride) {
|
|
30
31
|
return (0, threadToggle_1.resolveDefaultOnThreadToggle)(globalDefault, threadOverride);
|
|
31
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* @description Resolve whether the bot may switch a limited topic to ANOTHER Claude account profile by itself
|
|
35
|
+
* (`/account` → auto-switch; the decisions live in `claudeLimitSwitch.ts`, which re-exports this). A per-thread
|
|
36
|
+
* override wins; otherwise the instance default; unset everywhere ⇒ OFF — moving work between subscriptions is
|
|
37
|
+
* an account-policy decision the operator opts into. Kept beside its sibling so `state.ts` loads no more than it did.
|
|
38
|
+
*/
|
|
39
|
+
function resolveClaudeAutoSwitchOnLimitEnabled(globalDefault, threadOverride) {
|
|
40
|
+
return (0, threadToggle_1.resolveThreadToggle)(globalDefault, threadOverride, false);
|
|
41
|
+
}
|
|
32
42
|
/** `callback_data` prefix of the «skip this resume once» button. */
|
|
33
43
|
exports.skipArmedRetryCallbackPrefix = 'acl_skip_';
|
|
34
44
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autoContinueOnLimit.js","sourceRoot":"","sources":["../../src/utils/autoContinueOnLimit.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;AAUH,8EAKC;AAaD,0EAEC;AAGD,0EAKC;AAYD,8DAMC;
|
|
1
|
+
{"version":3,"file":"autoContinueOnLimit.js","sourceRoot":"","sources":["../../src/utils/autoContinueOnLimit.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;AAUH,8EAKC;AAQD,sFAKC;AAaD,0EAEC;AAGD,0EAKC;AAYD,8DAMC;AAnED,iDAAmF;AAEnF;;;;;GAKG;AACH,SAAgB,iCAAiC,CAC/C,aAAkC,EAClC,cAAmC;IAEnC,OAAO,IAAA,2CAA4B,EAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AACrE,CAAC;AAED;;;;;GAKG;AACH,SAAgB,qCAAqC,CACnD,aAAkC,EAClC,cAAmC;IAEnC,OAAO,IAAA,kCAAmB,EAAC,aAAa,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,oEAAoE;AACvD,QAAA,4BAA4B,GAAG,WAAW,CAAC;AAExD;;;;;;;GAOG;AACH,SAAgB,+BAA+B,CAAC,MAAc;IAC5D,OAAO,GAAG,oCAA4B,GAAG,MAAM,EAAE,CAAC;AACpD,CAAC;AAED,mFAAmF;AACnF,SAAgB,+BAA+B,CAAC,IAAY;IAC1D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,oCAA4B,CAAC;QAAE,OAAO,IAAI,CAAC;IAChE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,oCAA4B,CAAC,MAAM,CAAC,CAAC;IAC5D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,yBAAyB,CAAC,KAGzC;IACC,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACjD,OAAO,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Pure plan of the `/account` picker (`connectors/telegram/commands/claudeAccounts.ts`): the
|
|
3
|
+
* `callback_data` codecs and the per-profile row model. Profile names are slugs of at most 32 characters
|
|
4
|
+
* (`utils/claudeProfiles.ts`), so a button BAKES THE NAME into its data (`acct_use_<name>` is at most 41
|
|
5
|
+
* bytes, under Telegram's 64-byte cap) and an old keyboard can never act on a profile other than the one it
|
|
6
|
+
* named — a removed name simply resolves to "unknown profile".
|
|
7
|
+
*/
|
|
8
|
+
import type { ClaudeProfileRecord } from '../state';
|
|
9
|
+
import { type ClaudeAccountKind } from './claudeProfiles';
|
|
10
|
+
/** Switch the topic (General: the instance default) to the named profile. */
|
|
11
|
+
export declare const accountUseCallbackRe: RegExp;
|
|
12
|
+
/** Open the sub-picker that chooses a profile to sign in again / to remove. */
|
|
13
|
+
export declare const accountLoginMenuCallback = "acct_login_menu";
|
|
14
|
+
export declare const accountRemoveMenuCallback = "acct_rm_menu";
|
|
15
|
+
/** Start the sign-in of the named profile. */
|
|
16
|
+
export declare const accountLoginCallbackRe: RegExp;
|
|
17
|
+
/** Ask to confirm the removal of the named profile, then remove it. */
|
|
18
|
+
export declare const accountRemoveCallbackRe: RegExp;
|
|
19
|
+
export declare const accountRemoveConfirmCallbackRe: RegExp;
|
|
20
|
+
/** Ask for a new profile's name. */
|
|
21
|
+
export declare const accountAddCallback = "acct_add";
|
|
22
|
+
/** A topic drops its own pick and follows the instance default again. */
|
|
23
|
+
export declare const accountFollowDefaultCallback = "acct_follow";
|
|
24
|
+
/** Arm the OpenCode provider-id capture (the next plain message names the provider to connect). */
|
|
25
|
+
export declare const accountAddProviderCallback = "acct_ocadd";
|
|
26
|
+
/**
|
|
27
|
+
* Disconnect an OpenCode provider: the INDEX points into the provider list the screen listed, snapshotted per
|
|
28
|
+
* message (a provider id can be long and the list changes), then the confirmation of the same index.
|
|
29
|
+
*/
|
|
30
|
+
export declare const accountDisconnectCallbackRe: RegExp;
|
|
31
|
+
export declare const accountDisconnectConfirmCallbackRe: RegExp;
|
|
32
|
+
/** Connect an OpenCode provider again (the `/connect <provider>` method picker); same snapshot index. */
|
|
33
|
+
export declare const accountReconnectCallbackRe: RegExp;
|
|
34
|
+
/** Back to the main picker from a sub-picker. */
|
|
35
|
+
export declare const accountBackCallback = "acct_back";
|
|
36
|
+
/** Flip the auto-switch-on-limit setting (`utils/claudeLimitSwitch.ts`): the topic's override, in General the instance default. */
|
|
37
|
+
export declare const accountAutoSwitchOnCallback = "acct_autosw_on";
|
|
38
|
+
export declare const accountAutoSwitchOffCallback = "acct_autosw_off";
|
|
39
|
+
export declare function buildAccountUseCallback(name: string): string;
|
|
40
|
+
export declare function buildAccountLoginCallback(name: string): string;
|
|
41
|
+
export declare function buildAccountDisconnectCallback(index: number): string;
|
|
42
|
+
export declare function buildAccountReconnectCallback(index: number): string;
|
|
43
|
+
export declare function buildAccountDisconnectConfirmCallback(index: number): string;
|
|
44
|
+
export declare function buildAccountRemoveCallback(name: string): string;
|
|
45
|
+
export declare function buildAccountRemoveConfirmCallback(name: string): string;
|
|
46
|
+
/**
|
|
47
|
+
* @description The name a callback's data carries, or `null` when the data is not that button's or names an
|
|
48
|
+
* impossible profile (`default` is a valid target for use / login / removal only where `allowDefault`).
|
|
49
|
+
*/
|
|
50
|
+
export declare function parseAccountCallbackName(data: string, re: RegExp, options: {
|
|
51
|
+
allowDefault: boolean;
|
|
52
|
+
}): string | null;
|
|
53
|
+
/** One line / one button of the picker. */
|
|
54
|
+
export interface AccountPickerRow {
|
|
55
|
+
name: string;
|
|
56
|
+
/** The profile the topic (General: the instance) effectively uses. */
|
|
57
|
+
isActive: boolean;
|
|
58
|
+
/** The CLI's last answer; `undefined` when never read. */
|
|
59
|
+
loggedIn: boolean | undefined;
|
|
60
|
+
email: string | null;
|
|
61
|
+
subscriptionType: string | null;
|
|
62
|
+
kind: ClaudeAccountKind;
|
|
63
|
+
/** How many bound topics resolve to this profile. */
|
|
64
|
+
topicCount: number;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* @description The picker's rows: `default` first, then the added profiles in creation order. `topicCounts`
|
|
68
|
+
* is the resolved use per profile (explicit picks AND topics that follow the instance default), so the count
|
|
69
|
+
* answers "which topics would a removal or re-login touch".
|
|
70
|
+
*/
|
|
71
|
+
export declare function buildAccountPickerRows(input: {
|
|
72
|
+
records: Readonly<Record<string, ClaudeProfileRecord>>;
|
|
73
|
+
defaultStatus: {
|
|
74
|
+
loggedIn: boolean | undefined;
|
|
75
|
+
email: string | null;
|
|
76
|
+
subscriptionType: string | null;
|
|
77
|
+
};
|
|
78
|
+
activeName: string;
|
|
79
|
+
topicCounts: ReadonlyMap<string, number>;
|
|
80
|
+
/** The operator removed (signed out) `default`: it has no row until it is signed in again. */
|
|
81
|
+
isDefaultRemoved?: boolean;
|
|
82
|
+
}): AccountPickerRow[];
|
|
83
|
+
/** The profile each bound topic resolves to, counted per profile name. */
|
|
84
|
+
export declare function countTopicsPerProfile(resolvedNames: Iterable<string>): Map<string, number>;
|
|
85
|
+
//# sourceMappingURL=claudeAccountPickerPlan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeAccountPickerPlan.d.ts","sourceRoot":"","sources":["../../src/utils/claudeAccountPickerPlan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description Pure plan of the `/account` picker (`connectors/telegram/commands/claudeAccounts.ts`): the
|
|
4
|
+
* `callback_data` codecs and the per-profile row model. Profile names are slugs of at most 32 characters
|
|
5
|
+
* (`utils/claudeProfiles.ts`), so a button BAKES THE NAME into its data (`acct_use_<name>` is at most 41
|
|
6
|
+
* bytes, under Telegram's 64-byte cap) and an old keyboard can never act on a profile other than the one it
|
|
7
|
+
* named — a removed name simply resolves to "unknown profile".
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.accountAutoSwitchOffCallback = exports.accountAutoSwitchOnCallback = exports.accountBackCallback = exports.accountReconnectCallbackRe = exports.accountDisconnectConfirmCallbackRe = exports.accountDisconnectCallbackRe = exports.accountAddProviderCallback = exports.accountFollowDefaultCallback = exports.accountAddCallback = exports.accountRemoveConfirmCallbackRe = exports.accountRemoveCallbackRe = exports.accountLoginCallbackRe = exports.accountRemoveMenuCallback = exports.accountLoginMenuCallback = exports.accountUseCallbackRe = void 0;
|
|
11
|
+
exports.buildAccountUseCallback = buildAccountUseCallback;
|
|
12
|
+
exports.buildAccountLoginCallback = buildAccountLoginCallback;
|
|
13
|
+
exports.buildAccountDisconnectCallback = buildAccountDisconnectCallback;
|
|
14
|
+
exports.buildAccountReconnectCallback = buildAccountReconnectCallback;
|
|
15
|
+
exports.buildAccountDisconnectConfirmCallback = buildAccountDisconnectConfirmCallback;
|
|
16
|
+
exports.buildAccountRemoveCallback = buildAccountRemoveCallback;
|
|
17
|
+
exports.buildAccountRemoveConfirmCallback = buildAccountRemoveConfirmCallback;
|
|
18
|
+
exports.parseAccountCallbackName = parseAccountCallbackName;
|
|
19
|
+
exports.buildAccountPickerRows = buildAccountPickerRows;
|
|
20
|
+
exports.countTopicsPerProfile = countTopicsPerProfile;
|
|
21
|
+
const claudeProfiles_1 = require("./claudeProfiles");
|
|
22
|
+
const nameGroup = '([a-z0-9][a-z0-9_-]{0,31})';
|
|
23
|
+
/** Switch the topic (General: the instance default) to the named profile. */
|
|
24
|
+
exports.accountUseCallbackRe = new RegExp(`^acct_use_${nameGroup}$`);
|
|
25
|
+
/** Open the sub-picker that chooses a profile to sign in again / to remove. */
|
|
26
|
+
exports.accountLoginMenuCallback = 'acct_login_menu';
|
|
27
|
+
exports.accountRemoveMenuCallback = 'acct_rm_menu';
|
|
28
|
+
/** Start the sign-in of the named profile. */
|
|
29
|
+
exports.accountLoginCallbackRe = new RegExp(`^acct_login_${nameGroup}$`);
|
|
30
|
+
/** Ask to confirm the removal of the named profile, then remove it. */
|
|
31
|
+
exports.accountRemoveCallbackRe = new RegExp(`^acct_rm_${nameGroup}$`);
|
|
32
|
+
exports.accountRemoveConfirmCallbackRe = new RegExp(`^acct_rmok_${nameGroup}$`);
|
|
33
|
+
/** Ask for a new profile's name. */
|
|
34
|
+
exports.accountAddCallback = 'acct_add';
|
|
35
|
+
/** A topic drops its own pick and follows the instance default again. */
|
|
36
|
+
exports.accountFollowDefaultCallback = 'acct_follow';
|
|
37
|
+
/** Arm the OpenCode provider-id capture (the next plain message names the provider to connect). */
|
|
38
|
+
exports.accountAddProviderCallback = 'acct_ocadd';
|
|
39
|
+
/**
|
|
40
|
+
* Disconnect an OpenCode provider: the INDEX points into the provider list the screen listed, snapshotted per
|
|
41
|
+
* message (a provider id can be long and the list changes), then the confirmation of the same index.
|
|
42
|
+
*/
|
|
43
|
+
exports.accountDisconnectCallbackRe = /^acct_dc_(\d{1,2})$/;
|
|
44
|
+
exports.accountDisconnectConfirmCallbackRe = /^acct_dcok_(\d{1,2})$/;
|
|
45
|
+
/** Connect an OpenCode provider again (the `/connect <provider>` method picker); same snapshot index. */
|
|
46
|
+
exports.accountReconnectCallbackRe = /^acct_dcre_(\d{1,2})$/;
|
|
47
|
+
/** Back to the main picker from a sub-picker. */
|
|
48
|
+
exports.accountBackCallback = 'acct_back';
|
|
49
|
+
/** Flip the auto-switch-on-limit setting (`utils/claudeLimitSwitch.ts`): the topic's override, in General the instance default. */
|
|
50
|
+
exports.accountAutoSwitchOnCallback = 'acct_autosw_on';
|
|
51
|
+
exports.accountAutoSwitchOffCallback = 'acct_autosw_off';
|
|
52
|
+
function buildAccountUseCallback(name) {
|
|
53
|
+
return `acct_use_${name}`;
|
|
54
|
+
}
|
|
55
|
+
function buildAccountLoginCallback(name) {
|
|
56
|
+
return `acct_login_${name}`;
|
|
57
|
+
}
|
|
58
|
+
function buildAccountDisconnectCallback(index) {
|
|
59
|
+
return `acct_dc_${index}`;
|
|
60
|
+
}
|
|
61
|
+
function buildAccountReconnectCallback(index) {
|
|
62
|
+
return `acct_dcre_${index}`;
|
|
63
|
+
}
|
|
64
|
+
function buildAccountDisconnectConfirmCallback(index) {
|
|
65
|
+
return `acct_dcok_${index}`;
|
|
66
|
+
}
|
|
67
|
+
function buildAccountRemoveCallback(name) {
|
|
68
|
+
return `acct_rm_${name}`;
|
|
69
|
+
}
|
|
70
|
+
function buildAccountRemoveConfirmCallback(name) {
|
|
71
|
+
return `acct_rmok_${name}`;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* @description The name a callback's data carries, or `null` when the data is not that button's or names an
|
|
75
|
+
* impossible profile (`default` is a valid target for use / login / removal only where `allowDefault`).
|
|
76
|
+
*/
|
|
77
|
+
function parseAccountCallbackName(data, re, options) {
|
|
78
|
+
const match = data.match(re);
|
|
79
|
+
if (!match)
|
|
80
|
+
return null;
|
|
81
|
+
const name = match[1];
|
|
82
|
+
if (name === claudeProfiles_1.defaultClaudeProfileName)
|
|
83
|
+
return options.allowDefault ? name : null;
|
|
84
|
+
return (0, claudeProfiles_1.checkIsValidClaudeProfileName)(name) ? name : null;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* @description The picker's rows: `default` first, then the added profiles in creation order. `topicCounts`
|
|
88
|
+
* is the resolved use per profile (explicit picks AND topics that follow the instance default), so the count
|
|
89
|
+
* answers "which topics would a removal or re-login touch".
|
|
90
|
+
*/
|
|
91
|
+
function buildAccountPickerRows(input) {
|
|
92
|
+
const rows = input.isDefaultRemoved ? [] : [{
|
|
93
|
+
name: claudeProfiles_1.defaultClaudeProfileName,
|
|
94
|
+
isActive: input.activeName === claudeProfiles_1.defaultClaudeProfileName,
|
|
95
|
+
loggedIn: input.defaultStatus.loggedIn,
|
|
96
|
+
email: input.defaultStatus.email,
|
|
97
|
+
subscriptionType: input.defaultStatus.subscriptionType,
|
|
98
|
+
kind: (0, claudeProfiles_1.getClaudeAccountKind)(input.defaultStatus.subscriptionType),
|
|
99
|
+
topicCount: input.topicCounts.get(claudeProfiles_1.defaultClaudeProfileName) ?? 0,
|
|
100
|
+
}];
|
|
101
|
+
const added = Object.entries(input.records)
|
|
102
|
+
.sort(([, a], [, b]) => a.createdAt.localeCompare(b.createdAt));
|
|
103
|
+
for (const [name, record] of added) {
|
|
104
|
+
rows.push({
|
|
105
|
+
name,
|
|
106
|
+
isActive: input.activeName === name,
|
|
107
|
+
loggedIn: record.loggedIn,
|
|
108
|
+
email: record.email ?? null,
|
|
109
|
+
subscriptionType: record.subscriptionType ?? null,
|
|
110
|
+
kind: (0, claudeProfiles_1.getClaudeAccountKind)(record.subscriptionType ?? null),
|
|
111
|
+
topicCount: input.topicCounts.get(name) ?? 0,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
return rows;
|
|
115
|
+
}
|
|
116
|
+
/** The profile each bound topic resolves to, counted per profile name. */
|
|
117
|
+
function countTopicsPerProfile(resolvedNames) {
|
|
118
|
+
const counts = new Map();
|
|
119
|
+
for (const name of resolvedNames)
|
|
120
|
+
counts.set(name, (counts.get(name) ?? 0) + 1);
|
|
121
|
+
return counts;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=claudeAccountPickerPlan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeAccountPickerPlan.js","sourceRoot":"","sources":["../../src/utils/claudeAccountPickerPlan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Pure decisions behind SWITCHING A TOPIC TO ANOTHER CLAUDE ACCOUNT when its own hits a usage
|
|
3
|
+
* limit (`utils/claudeProfiles.ts`, `utils/claudeUsage.ts`): which profiles may take the work over, ranked by
|
|
4
|
+
* headroom, and until when the exhausted one is marked limited. This ranking is what the fallback chain
|
|
5
|
+
* (`utils/fallbackChain.ts`) falls back to when the operator configured no chain: the within-Claude
|
|
6
|
+
* account→account switch as it existed before the chain. The auto / offer decision, the notice's buttons and
|
|
7
|
+
* the auto-switch toggle (`/account`, `/fallback`; OFF by default — the operator opts in, because moving work
|
|
8
|
+
* between subscriptions is an account-policy decision) live in the chain module.
|
|
9
|
+
*
|
|
10
|
+
* No I/O, no `Date.now()`: the caller passes the clock and the profile views, so every rule is unit-tested.
|
|
11
|
+
*/
|
|
12
|
+
import { type ClaudeProfileUsageView, type ClaudeUsageSnapshot } from './claudeUsage';
|
|
13
|
+
/** The toggle's resolver (OFF when unset) lives beside `/auto_continue_limits`'s, where `state.ts` reads it. */
|
|
14
|
+
export { resolveClaudeAutoSwitchOnLimitEnabled } from './autoContinueOnLimit';
|
|
15
|
+
/**
|
|
16
|
+
* @description The profiles that may take a topic's work over, best first: signed in, not marked limited, with
|
|
17
|
+
* KNOWN and fresh usage that leaves headroom on the windows `model` drains, and not the profile that just hit
|
|
18
|
+
* the limit. A profile whose usage is unknown or stale is left out on purpose — the switch is sold as "this
|
|
19
|
+
* one has room", and a guess could land the topic in a second limit.
|
|
20
|
+
*/
|
|
21
|
+
export declare function pickClaudeLimitSwitchCandidates(input: {
|
|
22
|
+
profiles: readonly ClaudeProfileUsageView[];
|
|
23
|
+
/** The profile the topic runs on — the one at its limit. */
|
|
24
|
+
currentName: string;
|
|
25
|
+
model: string | null;
|
|
26
|
+
nowMs: number;
|
|
27
|
+
}): string[];
|
|
28
|
+
/**
|
|
29
|
+
* @description Until when the profile that hit the limit is marked limited, so the ranking skips it before the
|
|
30
|
+
* window resets: the instant the error named, else the profile's own session-window reset when that lies ahead,
|
|
31
|
+
* else `fallbackMs` from now (the retry's blind delay). A mark already further in the future is kept.
|
|
32
|
+
*/
|
|
33
|
+
export declare function resolveClaudeLimitedUntil(input: {
|
|
34
|
+
resetAtMs: number | undefined;
|
|
35
|
+
usage: ClaudeUsageSnapshot | undefined;
|
|
36
|
+
existingLimitedUntil: string | null;
|
|
37
|
+
nowMs: number;
|
|
38
|
+
fallbackMs: number;
|
|
39
|
+
}): string;
|
|
40
|
+
//# sourceMappingURL=claudeLimitSwitch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeLimitSwitch.d.ts","sourceRoot":"","sources":["../../src/utils/claudeLimitSwitch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAmD,KAAK,sBAAsB,EAAE,KAAK,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEvI,gHAAgH;AAChH,OAAO,EAAE,qCAAqC,EAAE,MAAM,uBAAuB,CAAC;AAE9E;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE;IACrD,QAAQ,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC5C,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,EAAE,CAQX;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,KAAK,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACvC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,MAAM,CAWT"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description Pure decisions behind SWITCHING A TOPIC TO ANOTHER CLAUDE ACCOUNT when its own hits a usage
|
|
4
|
+
* limit (`utils/claudeProfiles.ts`, `utils/claudeUsage.ts`): which profiles may take the work over, ranked by
|
|
5
|
+
* headroom, and until when the exhausted one is marked limited. This ranking is what the fallback chain
|
|
6
|
+
* (`utils/fallbackChain.ts`) falls back to when the operator configured no chain: the within-Claude
|
|
7
|
+
* account→account switch as it existed before the chain. The auto / offer decision, the notice's buttons and
|
|
8
|
+
* the auto-switch toggle (`/account`, `/fallback`; OFF by default — the operator opts in, because moving work
|
|
9
|
+
* between subscriptions is an account-policy decision) live in the chain module.
|
|
10
|
+
*
|
|
11
|
+
* No I/O, no `Date.now()`: the caller passes the clock and the profile views, so every rule is unit-tested.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.resolveClaudeAutoSwitchOnLimitEnabled = void 0;
|
|
15
|
+
exports.pickClaudeLimitSwitchCandidates = pickClaudeLimitSwitchCandidates;
|
|
16
|
+
exports.resolveClaudeLimitedUntil = resolveClaudeLimitedUntil;
|
|
17
|
+
const claudeUsage_1 = require("./claudeUsage");
|
|
18
|
+
/** The toggle's resolver (OFF when unset) lives beside `/auto_continue_limits`'s, where `state.ts` reads it. */
|
|
19
|
+
var autoContinueOnLimit_1 = require("./autoContinueOnLimit");
|
|
20
|
+
Object.defineProperty(exports, "resolveClaudeAutoSwitchOnLimitEnabled", { enumerable: true, get: function () { return autoContinueOnLimit_1.resolveClaudeAutoSwitchOnLimitEnabled; } });
|
|
21
|
+
/**
|
|
22
|
+
* @description The profiles that may take a topic's work over, best first: signed in, not marked limited, with
|
|
23
|
+
* KNOWN and fresh usage that leaves headroom on the windows `model` drains, and not the profile that just hit
|
|
24
|
+
* the limit. A profile whose usage is unknown or stale is left out on purpose — the switch is sold as "this
|
|
25
|
+
* one has room", and a guess could land the topic in a second limit.
|
|
26
|
+
*/
|
|
27
|
+
function pickClaudeLimitSwitchCandidates(input) {
|
|
28
|
+
const report = (0, claudeUsage_1.buildClaudeProfilesReport)(input.profiles, input.model, input.nowMs);
|
|
29
|
+
return report.profiles
|
|
30
|
+
.filter((entry) => entry.name !== input.currentName)
|
|
31
|
+
.filter((entry) => entry.isEligible && entry.loggedIn === true && !entry.isUsageStale)
|
|
32
|
+
.filter((entry) => entry.headroomPercent !== null && entry.headroomPercent > 0)
|
|
33
|
+
.sort((a, b) => (b.headroomPercent ?? 0) - (a.headroomPercent ?? 0))
|
|
34
|
+
.map((entry) => entry.name);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @description Until when the profile that hit the limit is marked limited, so the ranking skips it before the
|
|
38
|
+
* window resets: the instant the error named, else the profile's own session-window reset when that lies ahead,
|
|
39
|
+
* else `fallbackMs` from now (the retry's blind delay). A mark already further in the future is kept.
|
|
40
|
+
*/
|
|
41
|
+
function resolveClaudeLimitedUntil(input) {
|
|
42
|
+
const sessionReset = (0, claudeUsage_1.getClaudeUsageBucket)(input.usage, 'session')?.resetsAt ?? null;
|
|
43
|
+
const sessionResetMs = sessionReset === null ? Number.NaN : Date.parse(sessionReset);
|
|
44
|
+
let untilMs = input.resetAtMs !== undefined && input.resetAtMs > input.nowMs
|
|
45
|
+
? input.resetAtMs
|
|
46
|
+
: Number.isFinite(sessionResetMs) && sessionResetMs > input.nowMs
|
|
47
|
+
? sessionResetMs
|
|
48
|
+
: input.nowMs + input.fallbackMs;
|
|
49
|
+
const existingMs = input.existingLimitedUntil === null ? Number.NaN : Date.parse(input.existingLimitedUntil);
|
|
50
|
+
if (Number.isFinite(existingMs) && existingMs > untilMs)
|
|
51
|
+
untilMs = existingMs;
|
|
52
|
+
return new Date(untilMs).toISOString();
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=claudeLimitSwitch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeLimitSwitch.js","sourceRoot":"","sources":["../../src/utils/claudeLimitSwitch.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAaH,0EAcC;AAOD,8DAiBC;AAjDD,+CAAuI;AAEvI,gHAAgH;AAChH,6DAA8E;AAArE,4IAAA,qCAAqC,OAAA;AAE9C;;;;;GAKG;AACH,SAAgB,+BAA+B,CAAC,KAM/C;IACC,MAAM,MAAM,GAAG,IAAA,uCAAyB,EAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACnF,OAAO,MAAM,CAAC,QAAQ;SACnB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,WAAW,CAAC;SACnD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;SACrF,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,KAAK,IAAI,IAAI,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC;SAC9E,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC;SACnE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,SAAgB,yBAAyB,CAAC,KAMzC;IACC,MAAM,YAAY,GAAG,IAAA,kCAAoB,EAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC;IACpF,MAAM,cAAc,GAAG,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACrF,IAAI,OAAO,GAAG,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK;QAC1E,CAAC,CAAC,KAAK,CAAC,SAAS;QACjB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,cAAc,GAAG,KAAK,CAAC,KAAK;YAC/D,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC;IACrC,MAAM,UAAU,GAAG,KAAK,CAAC,oBAAoB,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC7G,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,OAAO;QAAE,OAAO,GAAG,UAAU,CAAC;IAC9E,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type ClaudeUsageSnapshot } from './claudeUsage';
|
|
2
|
+
/** What the lines read of a profile: its usage snapshot and limit mark (a state record and a usage view both fit). */
|
|
3
|
+
export interface ClaudeProfileUsageSource {
|
|
4
|
+
usage?: ClaudeUsageSnapshot;
|
|
5
|
+
limitedUntil?: string | null;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* @description The profile's usage as display lines: the windows as `used% 🔄 reset` — 5h and weekly always (`—`
|
|
9
|
+
* for one the snapshot lacks), Fable only when the account HAS that window (a corporate seat has none: nothing
|
|
10
|
+
* is written about it) — `(stale)` when the last poll could not refresh, and the limit mark while it holds, the
|
|
11
|
+
* reset instant in `timezone`. The lines carry the locale's own indentation (they hang under a row); empty for a
|
|
12
|
+
* profile never polled and not limited.
|
|
13
|
+
*/
|
|
14
|
+
export declare function formatClaudeProfileUsageLines(source: ClaudeProfileUsageSource | undefined, timezone: string, nowMs: number): string[];
|
|
15
|
+
//# sourceMappingURL=claudeProfileUsageLines.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeProfileUsageLines.d.ts","sourceRoot":"","sources":["../../src/utils/claudeProfileUsageLines.ts"],"names":[],"mappings":"AAKA,OAAO,EAML,KAAK,mBAAmB,EACzB,MAAM,eAAe,CAAC;AAEvB,sHAAsH;AACtH,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAOD;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,wBAAwB,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAoBrI"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatClaudeProfileUsageLines = formatClaudeProfileUsageLines;
|
|
4
|
+
/**
|
|
5
|
+
* The usage lines of one Claude account profile — what `/accounts` prints under a profile row and `/limits`
|
|
6
|
+
* prints at the top of its screen. ONE renderer for both, so the two screens can never word a window differently.
|
|
7
|
+
*/
|
|
8
|
+
const i18n_1 = require("../i18n");
|
|
9
|
+
const claudeUsage_1 = require("./claudeUsage");
|
|
10
|
+
/** The localised words of a relative reset («🔄 in 2h»). */
|
|
11
|
+
function getRelativeResetWords() {
|
|
12
|
+
return { pattern: (0, i18n_1.t)('usage.resetIn'), day: (0, i18n_1.t)('usage.unitDay'), hour: (0, i18n_1.t)('usage.unitHour'), minute: (0, i18n_1.t)('usage.unitMinute') };
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* @description The profile's usage as display lines: the windows as `used% 🔄 reset` — 5h and weekly always (`—`
|
|
16
|
+
* for one the snapshot lacks), Fable only when the account HAS that window (a corporate seat has none: nothing
|
|
17
|
+
* is written about it) — `(stale)` when the last poll could not refresh, and the limit mark while it holds, the
|
|
18
|
+
* reset instant in `timezone`. The lines carry the locale's own indentation (they hang under a row); empty for a
|
|
19
|
+
* profile never polled and not limited.
|
|
20
|
+
*/
|
|
21
|
+
function formatClaudeProfileUsageLines(source, timezone, nowMs) {
|
|
22
|
+
const lines = [];
|
|
23
|
+
const usage = source?.usage;
|
|
24
|
+
if (usage && usage.buckets.length > 0) {
|
|
25
|
+
const words = getRelativeResetWords();
|
|
26
|
+
// An unknown 5h reset shows the weekly window's instead (with neither, the bare percent).
|
|
27
|
+
const weeklyReset = (0, claudeUsage_1.getClaudeUsageBucket)(usage, 'weekly_all')?.resetsAt ?? null;
|
|
28
|
+
const read = (kind) => (0, claudeUsage_1.formatClaudeUsageBucket)((0, claudeUsage_1.getClaudeUsageBucket)(usage, kind), nowMs, {
|
|
29
|
+
words,
|
|
30
|
+
fallbackResetsAt: kind === 'session' ? weeklyReset : null,
|
|
31
|
+
});
|
|
32
|
+
const stale = usage.isStale ? (0, i18n_1.t)('account.row.usageStale') : '';
|
|
33
|
+
const hasFable = (0, claudeUsage_1.getClaudeUsageBucket)(usage, 'weekly_scoped') !== null;
|
|
34
|
+
const fable = hasFable ? (0, i18n_1.t)('account.row.usageFable', { fable: read('weekly_scoped') }) : '';
|
|
35
|
+
lines.push((0, i18n_1.t)('account.row.usage', { session: read('session'), weekly: read('weekly_all'), fable }) + stale);
|
|
36
|
+
}
|
|
37
|
+
if (source?.limitedUntil && Date.parse(source.limitedUntil) > nowMs) {
|
|
38
|
+
lines.push((0, i18n_1.t)('account.row.limited', { until: (0, claudeUsage_1.formatClaudeUsageResetAt)(source.limitedUntil, timezone, nowMs) }));
|
|
39
|
+
}
|
|
40
|
+
return lines;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=claudeProfileUsageLines.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeProfileUsageLines.js","sourceRoot":"","sources":["../../src/utils/claudeProfileUsageLines.ts"],"names":[],"mappings":";;AAgCA,sEAoBC;AApDD;;;GAGG;AACH,kCAA4B;AAC5B,+CAOuB;AAQvB,4DAA4D;AAC5D,SAAS,qBAAqB;IAC5B,OAAO,EAAE,OAAO,EAAE,IAAA,QAAC,EAAC,eAAe,CAAC,EAAE,GAAG,EAAE,IAAA,QAAC,EAAC,eAAe,CAAC,EAAE,IAAI,EAAE,IAAA,QAAC,EAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAA,QAAC,EAAC,kBAAkB,CAAC,EAAE,CAAC;AAC5H,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,6BAA6B,CAAC,MAA4C,EAAE,QAAgB,EAAE,KAAa;IACzH,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,CAAC;IAC5B,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,qBAAqB,EAAE,CAAC;QACtC,0FAA0F;QAC1F,MAAM,WAAW,GAAG,IAAA,kCAAoB,EAAC,KAAK,EAAE,YAAY,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC;QAChF,MAAM,IAAI,GAAG,CAAC,IAA2B,EAAE,EAAE,CAAC,IAAA,qCAAuB,EAAC,IAAA,kCAAoB,EAAC,KAAK,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE;YAC9G,KAAK;YACL,gBAAgB,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI;SAC1D,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAA,QAAC,EAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,MAAM,QAAQ,GAAG,IAAA,kCAAoB,EAAC,KAAK,EAAE,eAAe,CAAC,KAAK,IAAI,CAAC;QACvE,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAA,QAAC,EAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,KAAK,CAAC,IAAI,CAAC,IAAA,QAAC,EAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;IAC9G,CAAC;IACD,IAAI,MAAM,EAAE,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,EAAE,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,IAAA,QAAC,EAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,IAAA,sCAAwB,EAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAClH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Claude ACCOUNT PROFILES — several Claude subscription logins kept side by side, one picked per
|
|
3
|
+
* topic (`/account`). A profile is a Claude Code config directory of its own under
|
|
4
|
+
* `DATA_DIR/claude-profiles/<name>/`, handed to the CLI through `CLAUDE_CONFIG_DIR`: the CLI keeps its
|
|
5
|
+
* login (`.credentials.json`, `.claude.json`) there, while the entries that must stay ONE across accounts —
|
|
6
|
+
* the transcripts (`projects/`), settings, skills, plugins and the user memory — are symlinks back into
|
|
7
|
+
* `~/.claude`, so a conversation started under one account resumes under another and every account sees
|
|
8
|
+
* the same hooks and skills.
|
|
9
|
+
*
|
|
10
|
+
* The profile `default` IS `~/.claude` itself: nothing is set for it and nothing is migrated. A process is
|
|
11
|
+
* never switched by swapping files under `~/.claude` (the CLI re-reads its credentials live and EVERY running
|
|
12
|
+
* session would change account at once); the variable is per process, set at spawn.
|
|
13
|
+
*
|
|
14
|
+
* Pure helpers (layout, name gate, resolution, parsers) — the registry and the selection live in
|
|
15
|
+
* `state.json` (`StateStore`), the spawn-side use in the adapters, the UI in
|
|
16
|
+
* `connectors/telegram/commands/claudeAccounts.ts`. Shaped for the later phases: a record carries room for a
|
|
17
|
+
* `limitedUntil` mark and a cached usage snapshot, and the resolver takes the known names so a selection that
|
|
18
|
+
* names a removed profile falls back instead of launching a dead directory.
|
|
19
|
+
*/
|
|
20
|
+
/** The profile that is `~/.claude` itself (no `CLAUDE_CONFIG_DIR`). */
|
|
21
|
+
export declare const defaultClaudeProfileName = "default";
|
|
22
|
+
/** Subdirectory of `DATA_DIR` that holds every profile's config directory. */
|
|
23
|
+
export declare const claudeProfilesDirName = "claude-profiles";
|
|
24
|
+
/**
|
|
25
|
+
* The entries a profile shares with `~/.claude` through symlinks. `projects/` is load-bearing: the bot reads
|
|
26
|
+
* transcripts from `~/.claude/projects` (`getClaudeProjectsRoot`) and `--resume` must find a conversation whatever
|
|
27
|
+
* account started it. The user memory (`CLAUDE.md`) is linked only when it exists (a dangling link would be a
|
|
28
|
+
* file the CLI tries to read on every start).
|
|
29
|
+
*/
|
|
30
|
+
export declare const claudeProfileSharedEntries: readonly ["projects", "settings.json", "skills", "plugins"];
|
|
31
|
+
export declare const claudeProfileOptionalSharedEntries: readonly ["CLAUDE.md"];
|
|
32
|
+
/** Profile names are safe slugs: they become a directory name and a button's `callback_data`. */
|
|
33
|
+
export declare const claudeProfileNameMaxLength = 32;
|
|
34
|
+
/** Longest `callback_data` prefix the account picker uses; with the name cap it stays far under Telegram's 64 bytes. */
|
|
35
|
+
export declare const claudeAccountCallbackPrefix = "acct_";
|
|
36
|
+
/**
|
|
37
|
+
* @description Whether `name` may name a NEW profile: a lowercase slug of at most {@link claudeProfileNameMaxLength}
|
|
38
|
+
* characters that is not the reserved `default`.
|
|
39
|
+
*/
|
|
40
|
+
export declare function checkIsValidClaudeProfileName(name: string): boolean;
|
|
41
|
+
/** Lowercase + trim the operator's typed name before the gate (a `/account add MyWork` means `mywork`). */
|
|
42
|
+
export declare function normaliseClaudeProfileName(raw: string): string;
|
|
43
|
+
export declare function resolveClaudeProfilesRoot(dataDir: string): string;
|
|
44
|
+
/**
|
|
45
|
+
* @description The config directory a profile hands the CLI, or `null` for `default` (nothing is set and the CLI
|
|
46
|
+
* uses `~/.claude`, or whatever `CLAUDE_CONFIG_DIR` the bot itself inherited).
|
|
47
|
+
*/
|
|
48
|
+
export declare function resolveClaudeProfileDir(dataDir: string, name: string): string | null;
|
|
49
|
+
/** `~/.claude` — the directory the shared entries link back into. */
|
|
50
|
+
export declare function resolveHomeClaudeDir(homeDir?: string): string;
|
|
51
|
+
/**
|
|
52
|
+
* @description Create a profile's config directory: `0700`, with the shared entries symlinked into `~/.claude`.
|
|
53
|
+
* Idempotent — an existing directory keeps its login and only gains a missing link, so a re-run after a crash is
|
|
54
|
+
* safe. Refuses `default` and an invalid name (defence in depth: the command gate already rejected them).
|
|
55
|
+
* `~/.claude/projects` is created when absent so the link never dangles into the one entry the bot reads.
|
|
56
|
+
*/
|
|
57
|
+
export declare function createClaudeProfileLayout(input: {
|
|
58
|
+
dataDir: string;
|
|
59
|
+
name: string;
|
|
60
|
+
homeClaudeDir?: string;
|
|
61
|
+
}): string;
|
|
62
|
+
/**
|
|
63
|
+
* @description Remove a profile's directory — its login with it. `fs.rmSync` removes the symlinks AS LINKS, so
|
|
64
|
+
* the shared `~/.claude` entries behind them are never touched. Refuses `default`.
|
|
65
|
+
*/
|
|
66
|
+
export declare function removeClaudeProfileLayout(dataDir: string, name: string): void;
|
|
67
|
+
/**
|
|
68
|
+
* @description Sign `~/.claude` (the `default` account) out by deleting ONLY its subscription login: the
|
|
69
|
+
* `claudeAiOauth` entry of `<homeClaudeDir>/.credentials.json`. The file's other entries (`mcpOAuth` tokens
|
|
70
|
+
* of MCP servers) stay; a file left with nothing else is deleted. `projects/`, settings, skills, plugins, the
|
|
71
|
+
* user memory and `~/.claude.json` are never touched. Returns whether a login was found and removed.
|
|
72
|
+
*/
|
|
73
|
+
export declare function signOutDefaultClaudeLogin(homeClaudeDir?: string): boolean;
|
|
74
|
+
/** Whether a profile's directory exists on disk (the login may still be missing — see the auth status). */
|
|
75
|
+
export declare function checkClaudeProfileDirExists(dataDir: string, name: string): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* @description Which profile a conversation uses: its own override when it names a known profile, else the
|
|
78
|
+
* instance default when THAT is known, else `default`. A selection that names a removed profile is not an
|
|
79
|
+
* error — the conversation silently runs on `default` (the removal already told the operator).
|
|
80
|
+
*/
|
|
81
|
+
export declare function resolveClaudeProfileName(input: {
|
|
82
|
+
globalDefault: string | undefined;
|
|
83
|
+
threadOverride: string | undefined;
|
|
84
|
+
knownNames: ReadonlySet<string>;
|
|
85
|
+
}): string;
|
|
86
|
+
/** What the account picker shows per profile, as the CLI reports it (`claude auth status --json`). */
|
|
87
|
+
export interface ClaudeAuthStatus {
|
|
88
|
+
loggedIn: boolean;
|
|
89
|
+
email: string | null;
|
|
90
|
+
/** `pro` / `max` (personal), `team` / `enterprise` (corporate), or whatever newer CLIs add. */
|
|
91
|
+
subscriptionType: string | null;
|
|
92
|
+
orgName: string | null;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* @description Parse the CLI's auth status. `null` for anything that is not the JSON object the CLI prints
|
|
96
|
+
* (the probe failed, an older CLI) — the caller treats it as "unknown", never as "logged out".
|
|
97
|
+
*/
|
|
98
|
+
export declare function parseClaudeAuthStatus(statusJson: string): ClaudeAuthStatus | null;
|
|
99
|
+
/**
|
|
100
|
+
* @description The stdout a failed `execFile` carries, `''` for anything else. `claude auth status --json`
|
|
101
|
+
* exits NON-ZERO for a logged-out directory while printing its JSON (probed on 2.1.296), so the probe's
|
|
102
|
+
* rejection IS the answer — fed to {@link parseClaudeAuthStatus}, which yields `null` for an empty string.
|
|
103
|
+
*/
|
|
104
|
+
export declare function readProcessErrorStdout(error: unknown): string;
|
|
105
|
+
export type ClaudeAccountKind = 'personal' | 'corporate' | 'unknown';
|
|
106
|
+
/** Personal (`pro`, `max`) versus corporate (`team`, `enterprise`) subscription, from the CLI's `subscriptionType`. */
|
|
107
|
+
export declare function getClaudeAccountKind(subscriptionType: string | null): ClaudeAccountKind;
|
|
108
|
+
export declare const claudeConfigDirVariableName = "CLAUDE_CONFIG_DIR";
|
|
109
|
+
/**
|
|
110
|
+
* @description Recover the `CLAUDE_CONFIG_DIR` a running process was started with from its command line —
|
|
111
|
+
* the json-stream wrapper script or a tmux pane's `#{pane_start_command}` — so an adopted process after a bot
|
|
112
|
+
* restart is compared against the profile its topic has NOW (a mismatch is corrected at the next idle point).
|
|
113
|
+
* The value is single-quoted by the bot's own quoting (`shellSingleQuote`), bare in older shapes; `null` when the
|
|
114
|
+
* command carries none (the default profile).
|
|
115
|
+
*/
|
|
116
|
+
export declare function parseClaudeConfigDirFromCommand(command: string): string | null;
|
|
117
|
+
//# sourceMappingURL=claudeProfiles.d.ts.map
|