@crewx/sdk 0.9.0-rc.13 → 0.9.0-rc.130

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.
Files changed (267) hide show
  1. package/README.md +1 -1
  2. package/dist/account/auth-client.d.ts +61 -0
  3. package/dist/account/auth-json-v2.d.ts +1 -0
  4. package/dist/account/auth-json.d.ts +30 -0
  5. package/dist/account/config.d.ts +37 -0
  6. package/dist/account/env-bootstrap.d.ts +11 -0
  7. package/dist/account/errors.d.ts +24 -0
  8. package/dist/account/index.d.ts +12 -0
  9. package/dist/account/index.js +2 -0
  10. package/dist/account/session-manager.d.ts +47 -0
  11. package/dist/activity-log/builder.d.ts +56 -6
  12. package/dist/agent/agent-list-view.d.ts +19 -0
  13. package/dist/boxing/box.types.d.ts +4 -0
  14. package/dist/config/canonicalize-agent-options.d.ts +18 -0
  15. package/dist/config/default-agent-models.d.ts +11 -0
  16. package/dist/config/global-settings.d.ts +33 -0
  17. package/dist/config/migrate-grok-mode.d.ts +6 -0
  18. package/dist/config/model-compat.d.ts +31 -0
  19. package/dist/config/models.generated.d.ts +37 -0
  20. package/dist/config/models.remote.d.ts +1 -0
  21. package/dist/config/overdrive.d.ts +7 -0
  22. package/dist/config/pricing.d.ts +6 -3
  23. package/dist/config/pricing.generated.d.ts +4 -0
  24. package/dist/config/pricing.types.d.ts +4 -0
  25. package/dist/config/timeout.config.d.ts +4 -0
  26. package/dist/config/wi-boards.d.ts +19 -0
  27. package/dist/context-budget/continuity.d.ts +61 -0
  28. package/dist/context-budget/index.d.ts +141 -0
  29. package/dist/conversation/index.d.ts +1 -1
  30. package/dist/conversation/sqlite-provider.d.ts +6 -2
  31. package/dist/conversation/to-template-messages.d.ts +9 -0
  32. package/dist/conversation/types.d.ts +47 -1
  33. package/dist/desktop/command-runner.d.ts +4 -0
  34. package/dist/desktop/default-adapters.d.ts +4 -0
  35. package/dist/desktop/global-install.d.ts +19 -0
  36. package/dist/desktop/index.d.ts +3 -0
  37. package/dist/desktop/index.js +3 -0
  38. package/dist/desktop/install.d.ts +5 -0
  39. package/dist/desktop/lnk.d.ts +22 -0
  40. package/dist/desktop/manifest.d.ts +21 -0
  41. package/dist/desktop/types.d.ts +67 -0
  42. package/dist/desktop/version.d.ts +1 -0
  43. package/dist/desktop/windows-paths.d.ts +21 -0
  44. package/dist/desktop/wrapper.d.ts +18 -0
  45. package/dist/esm/account/index.js +2 -0
  46. package/dist/esm/desktop/index.js +3 -0
  47. package/dist/esm/index.js +931 -224
  48. package/dist/esm/node/index.js +2 -0
  49. package/dist/esm/plugins/index.js +338 -214
  50. package/dist/esm/process/index.js +1 -0
  51. package/dist/esm/publish/index.js +2 -0
  52. package/dist/esm/repository/index.js +413 -211
  53. package/dist/esm/skills/index.js +2 -0
  54. package/dist/esm/testing/index.js +1 -1
  55. package/dist/events/types.d.ts +9 -0
  56. package/dist/facade/Crewx.d.ts +58 -5
  57. package/dist/facade/task-ticket.d.ts +14 -0
  58. package/dist/highlight/thread-highlight-prompt.d.ts +2 -0
  59. package/dist/highlight/thread-highlighter.d.ts +326 -0
  60. package/dist/index.browser.d.ts +17 -1
  61. package/dist/index.browser.js +6 -2
  62. package/dist/index.d.ts +122 -17
  63. package/dist/index.js +931 -224
  64. package/dist/internal/console-decoder.d.ts +38 -0
  65. package/dist/internal/windows-spawn.d.ts +10 -0
  66. package/dist/layout/types.d.ts +18 -1
  67. package/dist/lifecycle/process-lease.d.ts +80 -0
  68. package/dist/lifecycle/process-owner.d.ts +20 -0
  69. package/dist/lifecycle/task-heartbeat.d.ts +41 -0
  70. package/dist/lifecycle/task-stop.d.ts +82 -0
  71. package/dist/lifecycle/update-admission.d.ts +45 -0
  72. package/dist/local-server/base-url.d.ts +18 -0
  73. package/dist/local-server/index.d.ts +8 -0
  74. package/dist/local-server/opencode.d.ts +8 -0
  75. package/dist/local-server/probe.d.ts +3 -0
  76. package/dist/local-server/runtime.d.ts +26 -0
  77. package/dist/local-server/types.d.ts +43 -0
  78. package/dist/mcp-app/agent-access.d.ts +26 -0
  79. package/dist/mcp-app/apps-context.d.ts +6 -0
  80. package/dist/mcp-app/bundle-provenance.d.ts +3 -0
  81. package/dist/mcp-app/catalog.d.ts +7 -0
  82. package/dist/mcp-app/content-channel.d.ts +89 -0
  83. package/dist/mcp-app/content-declarations.d.ts +29 -0
  84. package/dist/mcp-app/dev-checks.d.ts +28 -0
  85. package/dist/mcp-app/discovery.d.ts +139 -0
  86. package/dist/mcp-app/errors.d.ts +7 -0
  87. package/dist/mcp-app/index.d.ts +33 -0
  88. package/dist/mcp-app/installed-app-ref.d.ts +25 -0
  89. package/dist/mcp-app/model-context.d.ts +26 -0
  90. package/dist/mcp-app/node-app-discovery-fs.d.ts +20 -0
  91. package/dist/mcp-app/product-bundle-assets.d.ts +27 -0
  92. package/dist/mcp-app/product-bundle-loader.d.ts +53 -0
  93. package/dist/mcp-app/projection.d.ts +13 -0
  94. package/dist/mcp-app/registry.d.ts +28 -0
  95. package/dist/mcp-app/skill-backend.d.ts +133 -0
  96. package/dist/mcp-app/state-set.d.ts +9 -0
  97. package/dist/mcp-app/types.d.ts +458 -0
  98. package/dist/mcp-app/workspace-app-assets.d.ts +38 -0
  99. package/dist/mcp-app/workspace-snapshot.d.ts +70 -0
  100. package/dist/migrations/0010_analyze_stats.sql +6 -0
  101. package/dist/migrations/0011_far_black_tarantula.sql +1 -0
  102. package/dist/migrations/0012_blue_turbo.sql +23 -0
  103. package/dist/migrations/0013_hesitant_adam_destine.sql +15 -0
  104. package/dist/migrations/0014_organic_mongu.sql +73 -0
  105. package/dist/migrations/0015_panoramic_gorilla_man.sql +71 -0
  106. package/dist/migrations/0016_fuzzy_hemingway.sql +14 -0
  107. package/dist/migrations/0017_project_stage_sdk_migration.sql +29 -0
  108. package/dist/migrations/0018_bored_jackal.sql +33 -0
  109. package/dist/migrations/0019_backfill_task_thread_ids.sql +74 -0
  110. package/dist/migrations/0020_useful_iron_lad.sql +55 -0
  111. package/dist/migrations/0021_dashing_peter_quill.sql +51 -0
  112. package/dist/migrations/0022_wandering_bucky.sql +1 -0
  113. package/dist/migrations/0023_red_payback.sql +1 -0
  114. package/dist/migrations/0024_storage_metadata.sql +262 -0
  115. package/dist/migrations/0025_task_heartbeat.sql +8 -0
  116. package/dist/migrations/0025_thread_app_instance_ledger.sql +2 -0
  117. package/dist/migrations/0026_mcp_action_source.sql +47 -0
  118. package/dist/migrations/0027_task_stop_scope_cleanup.sql +5 -0
  119. package/dist/migrations/0027_ui_instance_active_unique.sql +2 -0
  120. package/dist/migrations/0029_nice_rhino.sql +1 -0
  121. package/dist/migrations/0031_petite_arclight.sql +6 -0
  122. package/dist/migrations/0032_ui_instance_opened_by.sql +1 -0
  123. package/dist/migrations/0033_thread_creator_boundary_guard.sql +38 -0
  124. package/dist/migrations/0034_keen_fallen_one.sql +36 -0
  125. package/dist/migrations/meta/0010_snapshot.json +1335 -0
  126. package/dist/migrations/meta/0011_snapshot.json +1342 -0
  127. package/dist/migrations/meta/0012_snapshot.json +1494 -0
  128. package/dist/migrations/meta/0013_snapshot.json +1592 -0
  129. package/dist/migrations/meta/0014_snapshot.json +1975 -0
  130. package/dist/migrations/meta/0015_snapshot.json +2315 -0
  131. package/dist/migrations/meta/0016_snapshot.json +2419 -0
  132. package/dist/migrations/meta/0017_snapshot.json +2419 -0
  133. package/dist/migrations/meta/0018_snapshot.json +2570 -0
  134. package/dist/migrations/meta/0020_snapshot.json +2895 -0
  135. package/dist/migrations/meta/0021_snapshot.json +3031 -0
  136. package/dist/migrations/meta/0022_snapshot.json +3039 -0
  137. package/dist/migrations/meta/0023_snapshot.json +3047 -0
  138. package/dist/migrations/meta/0029_snapshot.json +3206 -0
  139. package/dist/migrations/meta/0031_snapshot.json +3251 -0
  140. package/dist/migrations/meta/0034_snapshot.json +3473 -0
  141. package/dist/migrations/meta/_journal.json +175 -0
  142. package/dist/node/index.d.ts +1 -0
  143. package/dist/node/index.js +2 -0
  144. package/dist/paths.d.ts +1 -0
  145. package/dist/plugin/types.d.ts +1 -0
  146. package/dist/plugins/index.d.ts +1 -1
  147. package/dist/plugins/index.js +338 -214
  148. package/dist/plugins/sqlite-tracing.d.ts +46 -0
  149. package/dist/process/index.d.ts +2 -0
  150. package/dist/process/index.js +1 -0
  151. package/dist/process/process-control.d.ts +41 -0
  152. package/dist/prompt/tag-names.d.ts +20 -0
  153. package/dist/provider/acp/connection.d.ts +6 -0
  154. package/dist/provider/acp/meta.d.ts +11 -0
  155. package/dist/provider/bridge.d.ts +7 -1
  156. package/dist/provider/classify-task-error.d.ts +2 -0
  157. package/dist/provider/cli/adapter.types.d.ts +14 -2
  158. package/dist/provider/cli/adapters/agent-call.util.d.ts +1 -1
  159. package/dist/provider/cli/adapters/cli-knob.util.d.ts +7 -0
  160. package/dist/provider/cli/adapters/codex-item.d.ts +1 -0
  161. package/dist/provider/cli/adapters/event-timestamp.util.d.ts +1 -0
  162. package/dist/provider/cli/adapters/grok.d.ts +2 -0
  163. package/dist/provider/cli/adapters/index.d.ts +5 -0
  164. package/dist/provider/cli/index.d.ts +3 -2
  165. package/dist/provider/cli/meta.d.ts +5 -0
  166. package/dist/provider/cli/protocol-envelope.d.ts +3 -0
  167. package/dist/provider/errors.d.ts +5 -1
  168. package/dist/provider/idle-watchdog.d.ts +19 -0
  169. package/dist/provider/models.d.ts +17 -12
  170. package/dist/provider/order.d.ts +1 -1
  171. package/dist/provider/parse-usage.d.ts +6 -0
  172. package/dist/provider/provider-selection.d.ts +8 -0
  173. package/dist/provider/redact-technical-message.d.ts +1 -0
  174. package/dist/provider/task-error.types.d.ts +17 -0
  175. package/dist/publish/constants.d.ts +6 -0
  176. package/dist/publish/errors.d.ts +7 -0
  177. package/dist/publish/index.d.ts +50 -0
  178. package/dist/publish/index.js +2 -0
  179. package/dist/publish/manifest.d.ts +47 -0
  180. package/dist/publish/marketplace-api.constants.d.ts +1 -0
  181. package/dist/publish/pack.d.ts +6 -0
  182. package/dist/publish/scan.d.ts +9 -0
  183. package/dist/publish/secrets.d.ts +6 -0
  184. package/dist/publish/upload.d.ts +19 -0
  185. package/dist/remote/execution-profile.d.ts +9 -0
  186. package/dist/remote/index.d.ts +1 -0
  187. package/dist/remote/types.d.ts +28 -0
  188. package/dist/repository/agent-suggestion.repository.d.ts +34 -0
  189. package/dist/repository/base-sqlite-repository.d.ts +1 -0
  190. package/dist/repository/common-code.repository.d.ts +45 -0
  191. package/dist/repository/db.d.ts +12 -1
  192. package/dist/repository/index.d.ts +37 -5
  193. package/dist/repository/index.js +413 -211
  194. package/dist/repository/notification.repository.d.ts +58 -0
  195. package/dist/repository/project.repository.d.ts +90 -0
  196. package/dist/repository/request-log.repository.d.ts +1 -0
  197. package/dist/repository/storage-metadata.repository.d.ts +64 -0
  198. package/dist/repository/task-log-migration.d.ts +74 -0
  199. package/dist/repository/task-log.repository.d.ts +44 -0
  200. package/dist/repository/task-status.d.ts +14 -0
  201. package/dist/repository/task.repository.d.ts +224 -7
  202. package/dist/repository/thread-history.repository.d.ts +193 -0
  203. package/dist/repository/thread-origin-verdict.d.ts +27 -0
  204. package/dist/repository/thread-title.types.d.ts +29 -0
  205. package/dist/repository/thread.repository.d.ts +72 -6
  206. package/dist/repository/usage-backfill.d.ts +62 -0
  207. package/dist/repository/usage-from-logs.d.ts +21 -0
  208. package/dist/repository/workspace.repository.d.ts +3 -0
  209. package/dist/schema/agent-suggestions.d.ts +199 -0
  210. package/dist/schema/common-codes.d.ts +216 -0
  211. package/dist/schema/index.d.ts +11 -0
  212. package/dist/schema/notifications.d.ts +303 -0
  213. package/dist/schema/projects.d.ts +610 -0
  214. package/dist/schema/storage-metadata.d.ts +181 -0
  215. package/dist/schema/task-log-events.d.ts +119 -0
  216. package/dist/schema/tasks.d.ts +165 -0
  217. package/dist/schema/thread-creator-unverified.d.ts +45 -0
  218. package/dist/schema/thread-history.d.ts +734 -0
  219. package/dist/schema/threads.d.ts +59 -0
  220. package/dist/schema/ui-action-receipts.d.ts +358 -0
  221. package/dist/schema/ui-instance-repins.d.ts +222 -0
  222. package/dist/schema/ui-instances.d.ts +305 -0
  223. package/dist/schema/workspaces.d.ts +17 -0
  224. package/dist/skills/index.d.ts +15 -0
  225. package/dist/skills/index.js +2 -0
  226. package/dist/skills/types.d.ts +18 -0
  227. package/dist/task-log/anchor-child-tasks.d.ts +7 -0
  228. package/dist/task-log/delegation-trailer.d.ts +34 -0
  229. package/dist/template/engine.d.ts +2 -2
  230. package/dist/template/helpers/exec.browser.d.ts +4 -3
  231. package/dist/template/helpers/exec.d.ts +4 -3
  232. package/dist/template/types.d.ts +20 -0
  233. package/dist/testing/index.js +1 -1
  234. package/dist/types/index.d.ts +1572 -3
  235. package/dist/types/task-log.types.d.ts +2 -0
  236. package/dist/ui-card/index.d.ts +2 -0
  237. package/dist/ui-card/legacy-card-parser.d.ts +11 -0
  238. package/dist/ui-instance/definition.d.ts +6 -0
  239. package/dist/ui-instance/errors.d.ts +18 -0
  240. package/dist/ui-instance/index.d.ts +11 -0
  241. package/dist/ui-instance/json.d.ts +19 -0
  242. package/dist/ui-instance/lineage.d.ts +22 -0
  243. package/dist/ui-instance/runtime.d.ts +18 -0
  244. package/dist/ui-instance/store.d.ts +184 -0
  245. package/dist/ui-instance/types.d.ts +308 -0
  246. package/dist/ui-plugin/csp.d.ts +25 -0
  247. package/dist/ui-plugin/index.d.ts +4 -0
  248. package/dist/ui-plugin/limits.d.ts +27 -0
  249. package/dist/ui-plugin/manifest.d.ts +3 -0
  250. package/dist/ui-plugin/types.d.ts +190 -0
  251. package/dist/ui-plugin/validator.d.ts +15 -0
  252. package/dist/utils/crewx-executable.d.ts +76 -0
  253. package/dist/utils/crewx-home.d.ts +1 -0
  254. package/dist/utils/env-defaults.d.ts +2 -0
  255. package/dist/utils/id.d.ts +1 -1
  256. package/dist/utils/local-identity.d.ts +2 -0
  257. package/dist/utils/runner-env.d.ts +3 -0
  258. package/dist/utils/timestamp.d.ts +1 -0
  259. package/dist/utils/workspace.d.ts +1 -0
  260. package/dist/wi/create.d.ts +48 -0
  261. package/dist/wi/select.d.ts +20 -0
  262. package/package.json +49 -2
  263. package/templates/agents/default.yaml +284 -128
  264. package/templates/documents/crewx-manual.md +138 -138
  265. package/templates/documents/crewx-quick-guide.md +8 -7
  266. package/templates/workflows/wi-default-flow.yaml +65 -0
  267. package/templates/workflows/wi-plan-flow.yaml +140 -0
package/README.md CHANGED
@@ -128,7 +128,7 @@ const result = await crewx.query('assistant', 'Translate to Korean', {
128
128
  });
129
129
  ```
130
130
 
131
- > **Note**: `'@assistant'` 형태도 동작합니다 (CLI 호환). SDK에서는 bare id가 권장됩니다.
131
+ > **Note**: The `'@assistant'` form also works (CLI-compatible). The SDK recommends using the bare id.
132
132
 
133
133
  **Returns**: [`QueryResult`](#queryresult)
134
134
 
@@ -0,0 +1,61 @@
1
+ export declare const DEVICE_CODE_PATH: "/auth/v1/oauth/device/code";
2
+ export declare const TOKEN_PATH: "/auth/v1/oauth/token";
3
+ export declare const REVOKE_PATH: "/auth/v1/oauth/revoke";
4
+ export declare const OAUTH_CLIENT_ID: "crewx-cli";
5
+ export declare const DEVICE_CODE_GRANT_TYPE: "urn:ietf:params:oauth:grant-type:device_code";
6
+ export interface DeviceCodeResponse {
7
+ device_code: string;
8
+ user_code: string;
9
+ verification_uri: string;
10
+ verification_uri_complete?: string;
11
+ expires_in: number;
12
+ interval?: number;
13
+ }
14
+ export type DeviceCodeResult = DeviceCodeResponse;
15
+ export interface AccountIdentity {
16
+ sub: string;
17
+ email: string;
18
+ }
19
+ export interface OAuthTokenResponse {
20
+ access_token: string;
21
+ refresh_token: string;
22
+ expires_in: number;
23
+ token_type?: string;
24
+ scope?: string;
25
+ account: AccountIdentity;
26
+ }
27
+ export type TokenResponse = OAuthTokenResponse;
28
+ export type AuthTokenGrant = {
29
+ grant_type: typeof DEVICE_CODE_GRANT_TYPE;
30
+ device_code: string;
31
+ } | {
32
+ grant_type: 'refresh_token';
33
+ refresh_token: string;
34
+ };
35
+ export interface AuthClientOptions {
36
+ baseUrl?: string;
37
+ fetch?: typeof fetch;
38
+ fetchImpl?: typeof fetch;
39
+ timeoutMs?: number;
40
+ }
41
+ export declare class AuthClient {
42
+ private readonly configuredBaseUrl?;
43
+ private readonly fetchImpl?;
44
+ private readonly timeoutMs;
45
+ constructor(options?: AuthClientOptions | string);
46
+ private baseUrl;
47
+ private signal;
48
+ private request;
49
+ requestDeviceCode(): Promise<DeviceCodeResponse>;
50
+ requestToken(grant: AuthTokenGrant): Promise<OAuthTokenResponse>;
51
+ exchangeDeviceCode(deviceCode: string): Promise<OAuthTokenResponse>;
52
+ refreshToken(refreshToken: string): Promise<OAuthTokenResponse>;
53
+ deviceCode(): Promise<DeviceCodeResponse>;
54
+ getDeviceCode(): Promise<DeviceCodeResponse>;
55
+ token(grant: AuthTokenGrant): Promise<OAuthTokenResponse>;
56
+ getToken(grant: AuthTokenGrant): Promise<OAuthTokenResponse>;
57
+ refresh(refreshToken: string): Promise<OAuthTokenResponse>;
58
+ refreshAccessToken(refreshToken: string): Promise<OAuthTokenResponse>;
59
+ revokeToken(refreshToken: string): Promise<void>;
60
+ revoke(refreshToken: string): Promise<void>;
61
+ }
@@ -0,0 +1 @@
1
+ export * from './auth-json';
@@ -0,0 +1,30 @@
1
+ export declare const AUTH_JSON_FILENAME: "auth.json";
2
+ export declare const AUTH_JSON_VERSION: 2;
3
+ export interface AuthJsonV2 {
4
+ version: 2;
5
+ sub: string;
6
+ email: string;
7
+ access_token: string;
8
+ refresh_token: string;
9
+ expires_at: number;
10
+ updated_at: string;
11
+ }
12
+ export type AuthJson = AuthJsonV2;
13
+ export type AuthSession = AuthJsonV2;
14
+ export declare function isAuthJsonV2(value: unknown): value is AuthJsonV2;
15
+ export declare function validateAuthJson(value: unknown): AuthJsonV2;
16
+ export declare function parseAuthJson(raw: string): AuthJsonV2;
17
+ export declare function authJsonPath(filePath?: string): string;
18
+ export declare class AuthJsonStore {
19
+ private readonly configuredPath?;
20
+ constructor(options?: {
21
+ filePath?: string;
22
+ } | string);
23
+ path(): string;
24
+ read(): AuthJsonV2 | null;
25
+ write(value: AuthJsonV2): void;
26
+ clear(): void;
27
+ }
28
+ export declare function readAuthJson(filePath?: string): AuthJsonV2;
29
+ export declare function writeAuthJson(value: AuthJsonV2, filePath?: string): void;
30
+ export declare function clearAuthJson(filePath?: string): void;
@@ -0,0 +1,37 @@
1
+ export declare const ACCOUNT_BASE_URL_ENV: "CREWX_ACCOUNT_BASE_URL";
2
+ export declare const ACCOUNT_ISSUER_ENV: "CREWX_ACCOUNT_ISSUER";
3
+ export declare const MARKETPLACE_URL_ENV: "CREWX_MARKETPLACE_URL";
4
+ export declare const ACCOUNT_TARGET_ENV: "CREWX_TARGET";
5
+ export declare const MARKETPLACE_DISABLED_ENV: "CREWX_MARKETPLACE_DISABLED";
6
+ export declare const PRODUCTION_TARGET: Readonly<{
7
+ readonly accountBaseUrl: "https://app.sowonai.com";
8
+ readonly marketplaceUrl: "https://market.sowonai.com";
9
+ }>;
10
+ export declare const LOCAL_TARGET: Readonly<{
11
+ readonly accountBaseUrl: "http://127.0.0.1:3030";
12
+ readonly marketplaceUrl: "http://127.0.0.1:4000";
13
+ }>;
14
+ export declare const DEFAULT_ACCEPTED_ISSUERS: readonly ["https://app.sowonai.com/auth/v1", "https://auth.sowonai.com/auth/v1"];
15
+ export type Environment = Readonly<Record<string, string | undefined>>;
16
+ export type AccountTargetProfile = 'production' | 'local' | 'custom';
17
+ export type AccountTargetSource = 'env' | 'profile' | 'default' | 'disabled';
18
+ export interface AccountTarget {
19
+ accountBaseUrl: string;
20
+ marketplaceUrl: string | null;
21
+ issuers: readonly string[];
22
+ profile: AccountTargetProfile;
23
+ sources: {
24
+ accountBaseUrl: Exclude<AccountTargetSource, 'disabled'>;
25
+ marketplaceUrl: AccountTargetSource;
26
+ issuer: Exclude<AccountTargetSource, 'disabled'>;
27
+ };
28
+ mixed: boolean;
29
+ marketplaceDisabled: boolean;
30
+ }
31
+ export declare function resolveAccountBaseUrl(env?: Environment): string;
32
+ export declare function resolveMarketplaceUrl(env?: Environment): string;
33
+ export declare function resolveAcceptedAccountIssuers(env?: Environment): readonly string[];
34
+ export declare function resolveAccountIssuer(env?: Environment): string;
35
+ export declare function resolveAccountTarget(env?: Environment): AccountTarget;
36
+ export declare function assertAccountTargetNotMixed(env?: Environment): void;
37
+ export declare function appendEndpoint(baseUrl: string, endpoint: string): string;
@@ -0,0 +1,11 @@
1
+ export declare const CREWX_TASK_TICKET_SECRET_ENV: "CREWX_TASK_TICKET_SECRET";
2
+ export interface CrewxEnvFileOptions {
3
+ workspaceDir?: string;
4
+ homeDir?: string;
5
+ }
6
+ export declare function resolveCrewxEnvFilePaths(options?: CrewxEnvFileOptions): {
7
+ workspace: string;
8
+ home: string;
9
+ };
10
+ export declare function readCrewxEnvFileKeys(path: string): ReadonlySet<string>;
11
+ export declare function loadCrewxEnvFiles(options?: CrewxEnvFileOptions): void;
@@ -0,0 +1,24 @@
1
+ export type AccountAuthErrorKind = 'configuration' | 'network' | 'server' | 'invalid_refresh' | 'pending' | 'denied' | 'expired' | 'http' | 'protocol';
2
+ export declare class AccountAuthError extends Error {
3
+ readonly code: string;
4
+ readonly kind: AccountAuthErrorKind;
5
+ readonly status?: number;
6
+ constructor(code: string, kind: AccountAuthErrorKind, status?: number, message?: string);
7
+ }
8
+ export { AccountAuthError as AuthClientError, AccountAuthError as AuthError };
9
+ export declare class LoginRequiredError extends Error {
10
+ readonly code: "LOGIN_REQUIRED";
11
+ constructor();
12
+ }
13
+ export declare class SessionManagerError extends Error {
14
+ readonly code: string;
15
+ constructor(code: string, message: string);
16
+ }
17
+ export type AuthJsonValidationCode = 'AUTH_JSON_LEGACY' | 'AUTH_JSON_INVALID';
18
+ export declare class AuthJsonValidationError extends Error {
19
+ readonly code: AuthJsonValidationCode;
20
+ constructor(code: AuthJsonValidationCode, message?: string);
21
+ }
22
+ export declare class AccountConfigurationError extends AccountAuthError {
23
+ constructor(code: 'ACCOUNT_BASE_URL_MISSING' | 'ACCOUNT_BASE_URL_INVALID' | 'ACCOUNT_ISSUER_MISSING' | 'ACCOUNT_ISSUER_INVALID' | 'MARKETPLACE_URL_MISSING' | 'MARKETPLACE_URL_INVALID' | 'ACCOUNT_TARGET_INVALID' | 'ACCOUNT_TARGET_MIXED' | 'MARKETPLACE_DISABLED');
24
+ }
@@ -0,0 +1,12 @@
1
+ export { ACCOUNT_BASE_URL_ENV, ACCOUNT_ISSUER_ENV, ACCOUNT_TARGET_ENV, DEFAULT_ACCEPTED_ISSUERS, LOCAL_TARGET, MARKETPLACE_DISABLED_ENV, MARKETPLACE_URL_ENV, PRODUCTION_TARGET, appendEndpoint, assertAccountTargetNotMixed, resolveAccountBaseUrl, resolveAccountTarget, resolveAcceptedAccountIssuers, resolveAccountIssuer, resolveMarketplaceUrl, } from './config';
2
+ export type { AccountTarget, AccountTargetProfile, AccountTargetSource, Environment, } from './config';
3
+ export { CREWX_TASK_TICKET_SECRET_ENV, loadCrewxEnvFiles, readCrewxEnvFileKeys, resolveCrewxEnvFilePaths, } from './env-bootstrap';
4
+ export type { CrewxEnvFileOptions } from './env-bootstrap';
5
+ export { AccountAuthError, AuthClientError, AuthError, AccountConfigurationError, AuthJsonValidationError, LoginRequiredError, SessionManagerError, } from './errors';
6
+ export type { AccountAuthErrorKind, AuthJsonValidationCode } from './errors';
7
+ export { AUTH_JSON_FILENAME, AUTH_JSON_VERSION, AuthJsonStore, authJsonPath, clearAuthJson, isAuthJsonV2, parseAuthJson, readAuthJson, validateAuthJson, writeAuthJson, } from './auth-json';
8
+ export type { AuthJson, AuthJsonV2, AuthSession } from './auth-json';
9
+ export { AuthClient, DEVICE_CODE_GRANT_TYPE, DEVICE_CODE_PATH, OAUTH_CLIENT_ID, REVOKE_PATH, TOKEN_PATH, } from './auth-client';
10
+ export type { AccountIdentity, AuthClientOptions, AuthTokenGrant, DeviceCodeResponse, DeviceCodeResult, OAuthTokenResponse, TokenResponse, } from './auth-client';
11
+ export { SessionManager } from './session-manager';
12
+ export type { AccountAuthClient, AuthJsonStorage, AuthSessionStore, SessionManagerOptions } from './session-manager';
@@ -0,0 +1,2 @@
1
+ 'use strict';var dotenv=require('dotenv'),z=require('fs'),T=require('path'),$=require('os'),crypto=require('crypto');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var z__namespace=/*#__PURE__*/_interopNamespace(z);var T__namespace=/*#__PURE__*/_interopNamespace(T);var $__namespace=/*#__PURE__*/_interopNamespace($);var s=class extends Error{code;kind;status;constructor(e,n,r,o){super(o??`Account authentication request failed (${e})`),this.name="AccountAuthError",this.code=e,this.kind=n,this.status=r;}};var l=class extends Error{code="LOGIN_REQUIRED";constructor(){super("Login required \u2014 please log in again"),this.name="LoginRequiredError";}},f=class extends Error{code;constructor(e,n){super(n),this.name="SessionManagerError",this.code=e;}},p=class extends Error{code;constructor(e,n="auth.json is invalid \u2014 please log in again"){super(n),this.name="AuthJsonValidationError",this.code=e;}},i=class extends s{constructor(e){let n=e.startsWith("ACCOUNT_BASE_URL")?"CREWX_ACCOUNT_BASE_URL":e.startsWith("ACCOUNT_ISSUER")?"CREWX_ACCOUNT_ISSUER":e==="ACCOUNT_TARGET_INVALID"?"CREWX_TARGET":e==="ACCOUNT_TARGET_MIXED"?"CREWX_ACCOUNT_BASE_URL/CREWX_MARKETPLACE_URL":e==="MARKETPLACE_DISABLED"?"CREWX_MARKETPLACE_DISABLED":"CREWX_MARKETPLACE_URL",r=e==="ACCOUNT_TARGET_MIXED"?`${n} must not mix loopback and public hosts \u2014 choose one account target`:e==="MARKETPLACE_DISABLED"?`${n} disables Marketplace access`:`${n} is missing or invalid \u2014 configure it and try again`;super(e,"configuration",void 0,r),this.name="AccountConfigurationError";}};var N="CREWX_ACCOUNT_BASE_URL",k="CREWX_ACCOUNT_ISSUER",O="CREWX_MARKETPLACE_URL",x="CREWX_TARGET",j="CREWX_MARKETPLACE_DISABLED",y=Object.freeze({accountBaseUrl:"https://app.sowonai.com",marketplaceUrl:"https://market.sowonai.com"}),R=Object.freeze({accountBaseUrl:"http://127.0.0.1:3030",marketplaceUrl:"http://127.0.0.1:4000"}),L=Object.freeze(["https://app.sowonai.com/auth/v1","https://auth.sowonai.com/auth/v1"]);function D(t,e,n=false){let r=t?.trim();if(!r)throw new i(e);try{let o=new URL(r);if(o.protocol!=="http:"&&o.protocol!=="https:"||o.username.length>0||o.password.length>0||o.hostname.length===0||o.search.length>0||o.hash.length>0||n&&o.pathname!=="/")throw new Error("invalid URL")}catch{throw new i(e)}return r.replace(/\/+$/,"")}function X(t){let e=t?.trim();if(!e)throw new i("ACCOUNT_ISSUER_INVALID");try{let n=new URL(e);if(n.protocol!=="http:"&&n.protocol!=="https:"||n.username.length>0||n.password.length>0||n.hostname.length===0||n.search.length>0||n.hash.length>0)throw new Error("invalid issuer")}catch{throw new i("ACCOUNT_ISSUER_INVALID")}return e}function P(t){let e=t[x];if(e===void 0)return "production";let n=e.trim();if(n==="local"||n==="production")return n;throw new i("ACCOUNT_TARGET_INVALID")}function q(t){let e=t[j]?.trim().toLowerCase();return e==="1"||e==="true"}function b(t){return t==="local"?R:y}function V(t=process.env){let e=P(t),n=t[N];return n!==void 0?D(n,"ACCOUNT_BASE_URL_INVALID",true):b(e).accountBaseUrl}function fe(t=process.env){let e=P(t);if(q(t))throw new i("MARKETPLACE_DISABLED");let n=t[O];return n!==void 0?D(n,"MARKETPLACE_URL_INVALID"):b(e).marketplaceUrl}function I(t=process.env){let e=t[k];return e===void 0?L:[X(e)]}function de(t=process.env){return I(t)[0]}function G(t,e,n,r=false){if(t===void 0)return e;try{return D(t,n,r)}catch{return t.trim()}}function Ae(t){let e=t[k];if(e===void 0)return L;try{return [X(e)]}catch{return [e.trim()]}}function W(t){if(t===null)return false;try{let e=new URL(t).hostname.toLowerCase();return e==="127.0.0.1"||e==="localhost"||e==="[::1]"||e==="::1"}catch{return false}}function _e(t,e){return e!==null&&t===y.accountBaseUrl&&e===y.marketplaceUrl?"production":e!==null&&t===R.accountBaseUrl&&e===R.marketplaceUrl?"local":"custom"}function F(t=process.env){let e,n=true;try{e=P(t);}catch{e="production",n=false;}let r=b(e),o=t[x]!==void 0&&n,c=t[N],m=t[O],u=q(t),d=G(c,r.accountBaseUrl,"ACCOUNT_BASE_URL_INVALID",true),S=u?null:G(m,r.marketplaceUrl,"MARKETPLACE_URL_INVALID");return {accountBaseUrl:d,marketplaceUrl:S,issuers:Ae(t),profile:_e(d,S),sources:{accountBaseUrl:c===void 0?o?"profile":"default":"env",marketplaceUrl:u?"disabled":m===void 0?o?"profile":"default":"env",issuer:t[k]===void 0?"default":"env"},mixed:S!==null&&W(d)!==W(S),marketplaceDisabled:u}}function ge(t=process.env){if(F(t).mixed)throw new i("ACCOUNT_TARGET_MIXED")}function J(t,e){return `${t.replace(/\/+$/,"")}/${e.replace(/^\/+/,"")}`}function U(){if(process.env.CREWX_HOME){let t=T__namespace.resolve(process.env.CREWX_HOME);try{return z__namespace.realpathSync(t)}catch(e){if(e instanceof Error&&"code"in e&&e.code==="ENOENT")return t;throw e}}return process.platform!=="win32"&&process.env.XDG_CONFIG_HOME?T__namespace.join(process.env.XDG_CONFIG_HOME,"crewx"):T__namespace.join($__namespace.homedir(),".crewx")}var ee="CREWX_TASK_TICKET_SECRET";function te(t={}){let e=t.workspaceDir??process.env.CREWX_WORKSPACE??process.cwd(),n=t.homeDir??U();return {workspace:T.join(e,".env"),home:T.join(n,".env")}}function Ee(t){try{return new Set(Object.keys(dotenv.parse(z.readFileSync(t))))}catch(e){if(e?.code==="ENOENT")return new Set;throw e}}function me(t){try{return dotenv.parse(z.readFileSync(t))}catch(e){if(e?.code==="ENOENT")return {};throw e}}function Te(t={}){let e=te(t);for(let n of [e.workspace,e.home]){let r=me(n);for(let[o,c]of Object.entries(r))o===ee||process.env[o]!==void 0||(process.env[o]=c);}}var se="auth.json",B=2,oe=["version","sub","email","access_token","refresh_token","expires_at","updated_at"];function h(t="auth.json is invalid \u2014 please log in again"){throw new p("AUTH_JSON_INVALID",t)}function Ue(){throw new p("AUTH_JSON_LEGACY","auth.json uses an unsupported legacy format \u2014 please log in again")}function ve(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Ne(t){try{return g(t),!0}catch{return false}}function g(t){if(!ve(t))return h();if(t.version===1)return Ue();if(t.version!==B)return h();let e=Object.keys(t);if(e.length!==oe.length||e.some(r=>!oe.includes(r))||typeof t.sub!="string"||t.sub.length===0||typeof t.email!="string"||t.email.length===0||typeof t.access_token!="string"||t.access_token.length===0||typeof t.refresh_token!="string"||t.refresh_token.length===0)return h();let n=t.expires_at;return typeof n!="number"||!Number.isSafeInteger(n)||n<0||typeof t.updated_at!="string"||t.updated_at.length===0||Number.isNaN(Date.parse(t.updated_at))?h():{version:B,sub:t.sub,email:t.email,access_token:t.access_token,refresh_token:t.refresh_token,expires_at:n,updated_at:t.updated_at}}function ie(t){let e;try{e=JSON.parse(t);}catch{return h()}return g(e)}function ce(t){return t??T.join(U(),se)}var A=class{configuredPath;constructor(e={}){this.configuredPath=typeof e=="string"?e:e.filePath;}path(){return ce(this.configuredPath)}read(){let e=this.path();if(!z.existsSync(e))return null;try{return ie(z.readFileSync(e,"utf8"))}catch(n){throw n instanceof p?n:new p("AUTH_JSON_INVALID")}}write(e){let n=g(e),r=this.path(),o=T.dirname(r);z.mkdirSync(o,{recursive:true,mode:448});let c=`${r}.tmp.${process.pid}.${crypto.randomUUID()}`;try{z.writeFileSync(c,JSON.stringify(n,null,2),{encoding:"utf8",mode:384}),z.chmodSync(c,384),z.renameSync(c,r),z.chmodSync(r,384);}catch{try{z.existsSync(c)&&z.unlinkSync(c);}catch{}throw new Error("Could not persist auth.json securely")}}clear(){let e=this.path();try{z.existsSync(e)&&z.unlinkSync(e);}catch{throw new Error("Could not clear auth.json")}}};function Oe(t){let e=new A({filePath:t}).read();if(!e)throw new l;return e}function xe(t,e){new A({filePath:e}).write(t);}function Le(t){new A({filePath:t}).clear();}var ue="/auth/v1/oauth/device/code",pe="/auth/v1/oauth/token",he="/auth/v1/oauth/revoke",v="crewx-cli",E="urn:ietf:params:oauth:grant-type:device_code";function a(t){return typeof t=="string"&&t.trim().length>0}function C(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)?t:null}function De(t){let e=C(t),n=e?.error??e?.code;if(typeof n=="string")return n.toLowerCase();let r=C(n),o=r?.code??r?.error;return typeof o=="string"?o.toLowerCase():void 0}function Pe(t){let e=C(t);if(!e||!a(e.device_code)||!a(e.user_code)||!a(e.verification_uri))throw new s("AUTH_RESPONSE_INVALID","protocol");let n=e.expires_in,r=e.interval;if(typeof n!="number"||!Number.isSafeInteger(n)||n<=0)throw new s("AUTH_RESPONSE_INVALID","protocol");if(e.verification_uri_complete!==void 0&&!a(e.verification_uri_complete))throw new s("AUTH_RESPONSE_INVALID","protocol");if(r!==void 0&&(typeof r!="number"||!Number.isSafeInteger(r)||r<0))throw new s("AUTH_RESPONSE_INVALID","protocol");let o={device_code:e.device_code,user_code:e.user_code,verification_uri:e.verification_uri,expires_in:n};return e.verification_uri_complete!==void 0&&(o.verification_uri_complete=e.verification_uri_complete),r!==void 0&&(o.interval=r),o}function be(t){let e=C(t),n=C(e?.account),r=e?.expires_in;if(!e||!a(e.access_token)||!a(e.refresh_token)||typeof r!="number"||!Number.isSafeInteger(r)||r<=0||!n||!a(n.sub)||!a(n.email))throw new s("AUTH_RESPONSE_INVALID","protocol");let o={access_token:e.access_token,refresh_token:e.refresh_token,expires_in:r,account:{sub:n.sub,email:n.email}};return typeof e.token_type=="string"&&e.token_type.length>0&&(o.token_type=e.token_type),typeof e.scope=="string"&&e.scope.length>0&&(o.scope=e.scope),o}var w=class{configuredBaseUrl;fetchImpl;timeoutMs;constructor(e={}){let n=typeof e=="string"?{baseUrl:e}:e;this.configuredBaseUrl=n.baseUrl===void 0?void 0:Ve(n.baseUrl),this.fetchImpl=n.fetch??n.fetchImpl,this.timeoutMs=n.timeoutMs??1e4;}baseUrl(){return this.configuredBaseUrl!==void 0?this.configuredBaseUrl:V()}signal(e){if(!(e<=0||typeof AbortSignal>"u"||typeof AbortSignal.timeout!="function"))return AbortSignal.timeout(e)}async request(e,n,r,o={}){let c=J(this.baseUrl(),e),m=this.fetchImpl??globalThis.fetch;if(typeof m!="function")throw new s("AUTH_NETWORK_ERROR","network");let u;try{u=await m(c,{...n,signal:n.signal??this.signal(o.timeoutMs??this.timeoutMs)});}catch{throw new s("AUTH_NETWORK_ERROR","network")}if(o.parseBody===false){if(!u.ok)throw ae(u.status,null,r);return}let d=null;try{d=await u.json();}catch{d=null;}if(!u.ok)throw ae(u.status,d,r);return d}async requestDeviceCode(){let e=new URLSearchParams;e.set("client_id",v);let n=await this.request(ue,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:e.toString()});return Pe(n)}async requestToken(e){Je(e);let n=new URLSearchParams;n.set("grant_type",e.grant_type),n.set("client_id",v),e.grant_type===E?n.set("device_code",e.device_code):n.set("refresh_token",e.refresh_token);let r=await this.request(pe,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:n.toString()},e);return be(r)}async exchangeDeviceCode(e){return this.requestToken({grant_type:E,device_code:e})}async refreshToken(e){return this.requestToken({grant_type:"refresh_token",refresh_token:e})}async deviceCode(){return this.requestDeviceCode()}async getDeviceCode(){return this.requestDeviceCode()}async token(e){return this.requestToken(e)}async getToken(e){return this.requestToken(e)}async refresh(e){return this.refreshToken(e)}async refreshAccessToken(e){return this.refreshToken(e)}async revokeToken(e){if(!a(e))throw new s("AUTH_INPUT_INVALID","protocol");let n=new URLSearchParams;n.set("token",e),n.set("token_type_hint","refresh_token"),n.set("client_id",v),await this.request(he,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:n.toString()},void 0,{parseBody:false,timeoutMs:3e3});}async revoke(e){return this.revokeToken(e)}};function Ve(t){if(typeof t!="string"||!t.trim())throw new i("ACCOUNT_BASE_URL_INVALID");try{let e=new URL(t.trim());if(e.protocol!=="http:"&&e.protocol!=="https:"||e.username.length>0||e.password.length>0||e.hostname.length===0||e.pathname!=="/"||e.search.length>0||e.hash.length>0)throw new Error("invalid URL")}catch{throw new i("ACCOUNT_BASE_URL_INVALID")}return t.trim().replace(/\/+$/,"")}function Je(t){if(!t||t.grant_type!==E&&t.grant_type!=="refresh_token"||t.grant_type===E&&!a(t.device_code)||t.grant_type==="refresh_token"&&!a(t.refresh_token))throw new s("AUTH_INPUT_INVALID","protocol")}function ae(t,e,n){let r=De(e);if(t>=500)return new s("AUTH_SERVER_ERROR","server",t);if(n?.grant_type==="refresh_token"&&(r==="invalid_grant"||t===401))return new s("INVALID_REFRESH_TOKEN","invalid_refresh",t);if(n?.grant_type===E){if(r==="authorization_pending")return new s("AUTHORIZATION_PENDING","pending",t);if(r==="slow_down")return new s("SLOW_DOWN","pending",t);if(r==="access_denied")return new s("ACCESS_DENIED","denied",t);if(r==="expired_token")return new s("EXPIRED_TOKEN","expired",t)}return new s("AUTH_HTTP_ERROR","http",t)}var K=class{client;store;refreshSkewSeconds;now;nowSecondsOverride;refreshPromise=null;constructor(e={},n){let r=Be(e)?e:void 0,o=r?{}:e;this.client=r??o.client??o.authClient??new w,this.store=o.store??o.storage??n??new A,this.refreshSkewSeconds=o.refreshSkewSeconds??60,this.now=o.now??(()=>Date.now()),this.nowSecondsOverride=o.nowSeconds;}getSession(){return this.readSession()}isLoggedIn(){return this.readSession()!==null}async getAccessToken(){let e=this.requireSession();return e.expires_at>this.epochSeconds()+this.refreshSkewSeconds?e.access_token:(await this.refreshSession(e)).access_token}async getValidAccessToken(){return this.getAccessToken()}async getToken(){return this.getAccessToken()}async refresh(){return this.refreshSession(this.requireSession())}async loginWithDeviceCode(e){let n=await this.client.exchangeDeviceCode(e);return this.persistTokenResponse(n)}async login(e){return this.loginWithDeviceCode(e)}async setSession(e){return this.persistTokenResponse(e)}clear(){this.store.clear();}async withAccessToken(e){return e(await this.getAccessToken())}readSession(){try{let e=this.store.read();if(e===null)return null;let n=g(e);return le(n.access_token,n.sub),n}catch(e){throw e instanceof p?new l:e}}requireSession(){let e=this.readSession();if(!e)throw new l;return e}epochSeconds(){return this.nowSecondsOverride?.()??Math.floor(this.now()/1e3)}refreshSession(e){if(this.refreshPromise)return this.refreshPromise;let n;return n=this.performRefresh(e).finally(()=>{this.refreshPromise===n&&(this.refreshPromise=null);}),this.refreshPromise=n,n}async performRefresh(e){try{let n=await this.client.refreshToken(e.refresh_token);return this.persistTokenResponse(n,e.sub)}catch(n){throw Me(n)?(this.store.clear(),new l):n}}persistTokenResponse(e,n){let r=e?.account;if(!e||typeof e.access_token!="string"||e.access_token.length===0||typeof e.refresh_token!="string"||e.refresh_token.length===0||!Number.isSafeInteger(e.expires_in)||e.expires_in<=0||!r||typeof r.sub!="string"||r.sub.length===0||typeof r.email!="string"||r.email.length===0)throw new f("AUTH_RESPONSE_INVALID","Account token response is malformed");if(n!==void 0&&r.sub!==n)throw new f("ACCOUNT_SUB_MISMATCH","Account subject changed during token refresh \u2014 please log in again");le(e.access_token,r.sub);let o=g({version:2,sub:r.sub,email:r.email,access_token:e.access_token,refresh_token:e.refresh_token,expires_at:this.epochSeconds()+e.expires_in,updated_at:new Date(this.now()).toISOString()});return this.store.write(o),o}};function Me(t){return t instanceof s?t.kind==="invalid_refresh":typeof t=="object"&&t!==null&&(t.kind==="invalid_refresh"||t.code==="INVALID_REFRESH_TOKEN")}function Be(t){return typeof t.exchangeDeviceCode=="function"&&typeof t.refreshToken=="function"}function le(t,e){let n=I(),r=He(t);if(!n.includes(r.iss))throw new f("ACCOUNT_ISSUER_MISMATCH","Access token issuer does not match the configured account issuer \u2014 please log in again");if(r.sub!==e)throw new f("ACCOUNT_SUB_MISMATCH","Access token subject does not match the account session \u2014 please log in again")}function He(t){if(typeof t!="string")throw H();let e=t.split(".");if(e.length!==3||e.some(n=>!/^[A-Za-z0-9_-]+$/.test(n)))throw H();try{let n=JSON.parse(Buffer.from(e[1],"base64url").toString("utf8"));if(typeof n!="object"||n===null||Array.isArray(n)||typeof n.iss!="string"||n.iss.length===0||typeof n.sub!="string"||n.sub.length===0)throw new Error("missing identity claims");return {iss:n.iss,sub:n.sub}}catch{throw H()}}function H(){return new f("ACCESS_TOKEN_INVALID","Access token identity could not be verified \u2014 please log in again")}
2
+ exports.ACCOUNT_BASE_URL_ENV=N;exports.ACCOUNT_ISSUER_ENV=k;exports.ACCOUNT_TARGET_ENV=x;exports.AUTH_JSON_FILENAME=se;exports.AUTH_JSON_VERSION=B;exports.AccountAuthError=s;exports.AccountConfigurationError=i;exports.AuthClient=w;exports.AuthClientError=s;exports.AuthError=s;exports.AuthJsonStore=A;exports.AuthJsonValidationError=p;exports.CREWX_TASK_TICKET_SECRET_ENV=ee;exports.DEFAULT_ACCEPTED_ISSUERS=L;exports.DEVICE_CODE_GRANT_TYPE=E;exports.DEVICE_CODE_PATH=ue;exports.LOCAL_TARGET=R;exports.LoginRequiredError=l;exports.MARKETPLACE_DISABLED_ENV=j;exports.MARKETPLACE_URL_ENV=O;exports.OAUTH_CLIENT_ID=v;exports.PRODUCTION_TARGET=y;exports.REVOKE_PATH=he;exports.SessionManager=K;exports.SessionManagerError=f;exports.TOKEN_PATH=pe;exports.appendEndpoint=J;exports.assertAccountTargetNotMixed=ge;exports.authJsonPath=ce;exports.clearAuthJson=Le;exports.isAuthJsonV2=Ne;exports.loadCrewxEnvFiles=Te;exports.parseAuthJson=ie;exports.readAuthJson=Oe;exports.readCrewxEnvFileKeys=Ee;exports.resolveAcceptedAccountIssuers=I;exports.resolveAccountBaseUrl=V;exports.resolveAccountIssuer=de;exports.resolveAccountTarget=F;exports.resolveCrewxEnvFilePaths=te;exports.resolveMarketplaceUrl=fe;exports.validateAuthJson=g;exports.writeAuthJson=xe;
@@ -0,0 +1,47 @@
1
+ import { type OAuthTokenResponse } from './auth-client';
2
+ import { type AuthJsonV2 } from './auth-json';
3
+ export interface AuthSessionStore {
4
+ read(): AuthJsonV2 | null;
5
+ write(value: AuthJsonV2): void;
6
+ clear(): void;
7
+ }
8
+ export interface AccountAuthClient {
9
+ exchangeDeviceCode(deviceCode: string): Promise<OAuthTokenResponse>;
10
+ refreshToken(refreshToken: string): Promise<OAuthTokenResponse>;
11
+ }
12
+ export interface SessionManagerOptions {
13
+ client?: AccountAuthClient;
14
+ authClient?: AccountAuthClient;
15
+ store?: AuthSessionStore;
16
+ storage?: AuthSessionStore;
17
+ refreshSkewSeconds?: number;
18
+ now?: () => number;
19
+ nowSeconds?: () => number;
20
+ }
21
+ export type AuthJsonStorage = AuthSessionStore;
22
+ export declare class SessionManager {
23
+ private readonly client;
24
+ private readonly store;
25
+ private readonly refreshSkewSeconds;
26
+ private readonly now;
27
+ private readonly nowSecondsOverride?;
28
+ private refreshPromise;
29
+ constructor(options?: SessionManagerOptions | AccountAuthClient, store?: AuthSessionStore);
30
+ getSession(): AuthJsonV2 | null;
31
+ isLoggedIn(): boolean;
32
+ getAccessToken(): Promise<string>;
33
+ getValidAccessToken(): Promise<string>;
34
+ getToken(): Promise<string>;
35
+ refresh(): Promise<AuthJsonV2>;
36
+ loginWithDeviceCode(deviceCode: string): Promise<AuthJsonV2>;
37
+ login(deviceCode: string): Promise<AuthJsonV2>;
38
+ setSession(token: OAuthTokenResponse): Promise<AuthJsonV2>;
39
+ clear(): void;
40
+ withAccessToken<T>(callback: (accessToken: string) => Promise<T>): Promise<T>;
41
+ private readSession;
42
+ private requireSession;
43
+ private epochSeconds;
44
+ private refreshSession;
45
+ private performRefresh;
46
+ private persistTokenResponse;
47
+ }
@@ -1,3 +1,11 @@
1
+ export declare const PROMPT_PREPARATION_SLOW_THRESHOLD_MS = 3000;
2
+ export interface ActivityLogRenderedEntry {
3
+ entry: ActivityEntry;
4
+ newestIndex: number;
5
+ bodyLimitChars: number;
6
+ bodyCharsShown: number | null;
7
+ originalBodyChars: number | null;
8
+ }
1
9
  export declare function checkStale(tool: string, input: string | null, taskCompletedAt?: string | null): 'ok' | 'stale' | 'unknown';
2
10
  export interface ActivityEntry {
3
11
  tool: string;
@@ -6,18 +14,60 @@ export interface ActivityEntry {
6
14
  status: 'ok' | 'stale' | 'unknown';
7
15
  reusable: boolean;
8
16
  }
9
- export interface ActivityLogResult {
17
+ export type CountTokens = (text: string) => number;
18
+ export type ActivityLogOmissionReason = 'token_cap' | 'repository_limit';
19
+ export interface ActivityLogOmission {
20
+ reason: ActivityLogOmissionReason;
21
+ count: number;
22
+ message: string;
23
+ }
24
+ export interface ActivityLogTaskResult {
25
+ taskId: string;
26
+ taskDistance: number;
27
+ tokenCap: number;
28
+ tokenCount: number;
29
+ includedEntries: number;
30
+ omittedEntries: number;
31
+ totalEntries: number;
32
+ omissions: ActivityLogOmission[];
33
+ entries: ActivityLogRenderedEntry[];
34
+ activityLog: string;
35
+ }
36
+ export interface ActivityLogByTaskResult {
10
37
  threadId: string;
11
38
  agentId: string;
12
39
  lookback: number;
13
- entries: ActivityEntry[];
14
- totalEntries: number;
15
- truncated: boolean;
40
+ activityLogTokenBudget: number;
41
+ baseEntryChars: number;
42
+ tasks: ActivityLogTaskResult[];
43
+ activityLogByTask: Map<string, string>;
44
+ }
45
+ export interface BuildActivityLogByTaskBudgetOptions {
46
+ threadId: string;
47
+ agentId: string;
48
+ lookback: number;
49
+ maxEntryChars?: number;
50
+ activityLogTokenBudget: number;
51
+ countTokens: CountTokens;
52
+ repositoryEntryLimit?: number;
16
53
  }
17
- export declare function buildActivityLogByTask(opts: {
54
+ export interface BuildActivityLogByTaskOptions {
18
55
  threadId: string;
19
56
  agentId: string;
20
57
  lookback: number;
21
58
  maxEntryChars?: number;
22
59
  decayRate?: number;
23
- }): Map<string, string>;
60
+ activityLogTokenBudget?: number;
61
+ countTokens?: CountTokens;
62
+ repositoryEntryLimit?: number;
63
+ }
64
+ export interface ActivityLogResult {
65
+ threadId: string;
66
+ agentId: string;
67
+ lookback: number;
68
+ entries: ActivityEntry[];
69
+ totalEntries: number;
70
+ truncated: boolean;
71
+ }
72
+ export declare function buildActivityLogByTaskResult(opts: BuildActivityLogByTaskBudgetOptions): ActivityLogByTaskResult;
73
+ export declare function buildActivityLogByTask(opts: BuildActivityLogByTaskOptions): Map<string, string>;
@@ -0,0 +1,19 @@
1
+ import type { AgentConfig } from '../types';
2
+ export interface AgentListFilters {
3
+ role?: string;
4
+ team?: string;
5
+ provider?: string;
6
+ }
7
+ export interface AgentListSnapshot {
8
+ agents: AgentConfig[];
9
+ total: number;
10
+ configPath: string | null;
11
+ }
12
+ export interface AgentListFormatOptions {
13
+ agents: readonly AgentConfig[];
14
+ total: number;
15
+ isFiltered: boolean;
16
+ configPath?: string | null;
17
+ }
18
+ export declare function filterAgentConfigs(agents: readonly AgentConfig[], filters: AgentListFilters): AgentConfig[];
19
+ export declare function formatAgentList(options: AgentListFormatOptions): string;
@@ -43,11 +43,15 @@ export interface ThreadMessage {
43
43
  content: string;
44
44
  timestamp: string;
45
45
  metadata: Record<string, unknown> | null;
46
+ contentTruncated?: boolean;
47
+ originalTokens?: number;
48
+ includedTokens?: number;
46
49
  }
47
50
  export interface ContextBuildParams {
48
51
  maxTokens: number;
49
52
  hotzoneRatio: number;
50
53
  warmzoneRatio: number;
54
+ minGuaranteedPairs?: number;
51
55
  }
52
56
  export interface ContextBuildResponse {
53
57
  hot: ThreadMessage[];
@@ -0,0 +1,18 @@
1
+ export declare function normalizeClaudeMode(mode: string): string;
2
+ export interface AgentOptionsLike {
3
+ query?: unknown;
4
+ execute?: unknown;
5
+ [key: string]: unknown;
6
+ }
7
+ export interface CanonicalizeAgentOptionsInput {
8
+ provider?: string;
9
+ model?: string;
10
+ options: unknown;
11
+ }
12
+ export interface CanonicalizeAgentOptionsResult {
13
+ options: unknown;
14
+ changed: boolean;
15
+ removed: string[];
16
+ }
17
+ export declare function normalizeProviderMode(providerId: string, mode: string): string;
18
+ export declare function canonicalizeAgentOptions(input: CanonicalizeAgentOptionsInput): CanonicalizeAgentOptionsResult;
@@ -0,0 +1,11 @@
1
+ import { type ProviderExecutionOptions } from './models.generated.js';
2
+ export type DefaultAgentStage = {
3
+ model: string;
4
+ query: Pick<ProviderExecutionOptions, 'mode' | 'effort'>;
5
+ execute: Pick<ProviderExecutionOptions, 'mode' | 'effort'>;
6
+ };
7
+ export interface DefaultAgentProfile {
8
+ planner: DefaultAgentStage;
9
+ worker: DefaultAgentStage;
10
+ }
11
+ export declare function getDefaultAgentProfile(provider: string): DefaultAgentProfile | undefined;
@@ -0,0 +1,33 @@
1
+ import { mkdirSync, readFileSync, renameSync, statSync, writeFileSync } from 'fs';
2
+ import type { LocalServerSettings } from '../local-server/types';
3
+ export interface GlobalSettings {
4
+ cron?: {
5
+ auto_start?: boolean;
6
+ [key: string]: unknown;
7
+ };
8
+ ai_server?: LocalServerSettings;
9
+ [key: string]: unknown;
10
+ }
11
+ export type DeepPartial<T> = T extends object ? {
12
+ [K in keyof T]?: DeepPartial<T[K]>;
13
+ } : T;
14
+ export interface GlobalSettingsStore {
15
+ read(): GlobalSettings;
16
+ update(patch: DeepPartial<GlobalSettings>): GlobalSettings;
17
+ set(key: string, value: unknown): GlobalSettings;
18
+ remove(key: string): GlobalSettings;
19
+ readonly path: string;
20
+ }
21
+ interface GlobalSettingsFileSystem {
22
+ mkdirSync: typeof mkdirSync;
23
+ readFileSync: typeof readFileSync;
24
+ renameSync: typeof renameSync;
25
+ statSync: typeof statSync;
26
+ writeFileSync: typeof writeFileSync;
27
+ }
28
+ export interface CreateGlobalSettingsStoreOptions {
29
+ filePath?: string;
30
+ fileSystem?: Partial<GlobalSettingsFileSystem>;
31
+ }
32
+ export declare function createGlobalSettingsStore(opts?: CreateGlobalSettingsStoreOptions): GlobalSettingsStore;
33
+ export {};
@@ -0,0 +1,6 @@
1
+ export type GrokSandbox = 'workspace' | 'read-only' | 'off';
2
+ export interface GrokNativeOptions {
3
+ alwaysApprove?: boolean;
4
+ sandbox?: GrokSandbox;
5
+ }
6
+ export declare function migrateGrokLegacyMode<T>(slot: T): T;
@@ -0,0 +1,31 @@
1
+ export declare const CLAUDE_OPUS_4_8_BASE_MODEL_ID: "claude-opus-4-8";
2
+ export declare const CLAUDE_OPUS_4_8_LEGACY_MODEL_ID: "claude-opus-4-8[1m]";
3
+ export declare const CLAUDE_MODEL_COMPATIBILITY_PAIRS: readonly [{
4
+ readonly baseModelId: "claude-opus-4-8";
5
+ readonly catalogModelId: "claude-opus-4-8[1m]";
6
+ }, {
7
+ readonly baseModelId: "claude-opus-4-7";
8
+ readonly catalogModelId: "claude-opus-4-7[1m]";
9
+ }, {
10
+ readonly baseModelId: "claude-opus-4-6";
11
+ readonly catalogModelId: "claude-opus-4-6[1m]";
12
+ }, {
13
+ readonly baseModelId: "claude-sonnet-4-6";
14
+ readonly catalogModelId: "claude-sonnet-4-6[1m]";
15
+ }];
16
+ export declare function normalizeAntigravityMode(mode: string): string;
17
+ export declare function resolveCatalogModelId(model: string): string;
18
+ export declare const ANTIGRAVITY_MODEL_COMPATIBILITY: ReadonlyArray<{
19
+ legacyId: string;
20
+ model: string;
21
+ effort?: string;
22
+ }>;
23
+ export type AntigravityResolvedModel = {
24
+ model?: string;
25
+ effort?: string;
26
+ };
27
+ export declare function resolveAntigravityModel(model?: string): AntigravityResolvedModel;
28
+ export declare function resolveProviderCatalogModel(providerId: string, model?: string): {
29
+ model?: string;
30
+ effort?: string;
31
+ };
@@ -1,7 +1,20 @@
1
+ import type { ModelApiPricing } from './pricing.types.js';
2
+ export declare const MODEL_TIERS: readonly ["flagship", "balanced", "speed"];
3
+ export type ModelTier = (typeof MODEL_TIERS)[number];
4
+ export declare const EFFORT_LEVELS: readonly ["none", "minimal", "low", "medium", "high", "xhigh", "max", "ultra"];
5
+ export type EffortLevel = (typeof EFFORT_LEVELS)[number];
6
+ export type KnownEffortLevel = EffortLevel;
7
+ export declare const PROVIDER_ARGV_EFFORTS: Record<string, readonly string[]>;
8
+ export declare const MODEL_CATALOG_VERSION = 30;
9
+ export declare const MODEL_CATALOG_UPDATED = "2026-09-29T00:00:00Z";
1
10
  export interface ModelCatalogEntry {
2
11
  id: string;
3
12
  name: string;
4
13
  description?: string;
14
+ contextWindowTokens?: number;
15
+ tier?: ModelTier;
16
+ recommended?: boolean;
17
+ apiPricing?: ModelApiPricing;
5
18
  }
6
19
  export interface ProviderModeEntry {
7
20
  id: string;
@@ -12,11 +25,35 @@ export interface ProviderModelOverride {
12
25
  effort?: string[];
13
26
  defaultEffort?: string;
14
27
  }
28
+ export type ProviderOptionSpec = {
29
+ key: string;
30
+ type: 'boolean';
31
+ } | {
32
+ key: string;
33
+ type: 'enum';
34
+ values: string[];
35
+ };
36
+ export interface ProviderExecutionOptions {
37
+ mode: string;
38
+ effort: string;
39
+ providerOptions?: Record<string, unknown>;
40
+ }
41
+ export interface ProviderDefaultProfile {
42
+ model: string;
43
+ query: ProviderExecutionOptions;
44
+ execute: ProviderExecutionOptions;
45
+ }
46
+ export interface ProviderDefaults {
47
+ version: number;
48
+ providers: Record<string, ProviderDefaultProfile>;
49
+ }
15
50
  export interface ProviderCatalogEntry {
16
51
  models: ModelCatalogEntry[];
17
52
  modes: ProviderModeEntry[];
18
53
  effort: string[];
19
54
  modelOverrides: Record<string, ProviderModelOverride>;
55
+ providerOptions?: ProviderOptionSpec[];
20
56
  }
21
57
  export declare const PROVIDER_CATALOGS: Record<string, ProviderCatalogEntry>;
58
+ export declare const PROVIDER_DEFAULTS: ProviderDefaults;
22
59
  export declare const PROVIDER_MODELS: Record<string, ModelCatalogEntry[]>;
@@ -1,3 +1,4 @@
1
+ export declare const MIN_REMOTE_CATALOG_VERSION = 20;
1
2
  export declare function initModelsRemote(opts?: {
2
3
  endpoint?: string;
3
4
  ttlMs?: number;
@@ -3,6 +3,7 @@ export interface OverdriveProfile {
3
3
  model?: string;
4
4
  mode?: string;
5
5
  effort?: string;
6
+ providerOptions?: Record<string, unknown>;
6
7
  }
7
8
  export type OverdriveSignalInput = boolean | {
8
9
  mode?: 'count' | 'latch';
@@ -20,5 +21,11 @@ export interface OverdriveResolution {
20
21
  mode?: string;
21
22
  effort?: string;
22
23
  crossProvider: boolean;
24
+ providerOptions?: Record<string, unknown>;
23
25
  }
24
26
  export declare function resolveOverdrive(agentOptions: unknown, mode: 'query' | 'execute', baseProvider: string, signal: OverdriveSignal): OverdriveResolution;
27
+ export interface ModeOverrideResolution {
28
+ provider?: string;
29
+ model?: string;
30
+ }
31
+ export declare function resolveModeOverride(agentOptions: unknown, mode: 'query' | 'execute'): ModeOverrideResolution;
@@ -1,9 +1,12 @@
1
- import type { ModelPricing } from './pricing.types.js';
2
- export type { ModelPricing } from './pricing.types.js';
3
- export { MODEL_PRICING } from './pricing.generated.js';
1
+ import type { ModelApiPricing, ModelPricing } from './pricing.types.js';
2
+ export type { ModelApiPricing, ModelPricing } from './pricing.types.js';
3
+ export { MODEL_PRICING, UNPUBLISHED_MODEL_IDS } from './pricing.generated.js';
4
4
  export declare function setPricingOverride(models: Record<string, ModelPricing>): void;
5
5
  export declare function clearPricingOverride(): void;
6
+ export declare function setApiPricingOverride(models: Record<string, ModelApiPricing>): void;
7
+ export declare function clearApiPricingOverride(): void;
6
8
  export declare function normalizeModel(model: string): string;
9
+ export declare function lookupApiPricing(model: string | null | undefined): ModelApiPricing | undefined;
7
10
  export declare function getPricing(model: string | null | undefined): ModelPricing;
8
11
  export declare function calculateCost(inputTokens: number, outputTokens: number, model: string | null | undefined, cachedInputTokens?: number, _date?: Date): number;
9
12
  export declare function resolveCost(costUsd: number | undefined, inputTokens: number | undefined, outputTokens: number | undefined, cachedInputTokens: number | undefined, model: string | null | undefined, date?: Date): number;
@@ -1,2 +1,6 @@
1
1
  import type { ModelPricing } from './pricing.types.js';
2
2
  export declare const MODEL_PRICING: Record<string, ModelPricing>;
3
+ export declare const MODEL_PRICING_VERSION = 30;
4
+ export declare const MODEL_PRICING_UPDATED = "2026-09-29T00:00:00Z";
5
+ export declare const UNPUBLISHED_MODEL_IDS: ReadonlySet<string>;
6
+ export declare const CATALOG_MODEL_IDS: ReadonlySet<string>;
@@ -3,3 +3,7 @@ export interface ModelPricing {
3
3
  cachedInput: number;
4
4
  output: number;
5
5
  }
6
+ export interface ModelApiPricing {
7
+ inputPerMillionTokensUsd: number;
8
+ outputPerMillionTokensUsd: number;
9
+ }
@@ -1,5 +1,9 @@
1
1
  export interface TimeoutConfig {
2
2
  queryMs: number;
3
3
  executeMs: number;
4
+ idleMs: number;
4
5
  }
6
+ export declare const DEFAULT_IDLE_MS: number;
7
+ export declare const DEFAULT_RESUME_TIMEOUT_MS = 60000;
8
+ export declare function parseIdleEnvOverride(env?: NodeJS.ProcessEnv): number | undefined;
5
9
  export declare function getProviderTimeoutConfig(env?: NodeJS.ProcessEnv): TimeoutConfig;