@crewx/sdk 0.9.0-rc.8 → 0.9.0-rc.81

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 (169) hide show
  1. package/README.md +1 -1
  2. package/dist/activity-log/builder.d.ts +55 -6
  3. package/dist/config/canonicalize-agent-options.d.ts +17 -0
  4. package/dist/config/global-settings.d.ts +33 -0
  5. package/dist/config/migrate-grok-mode.d.ts +6 -0
  6. package/dist/config/model-compat.d.ts +31 -0
  7. package/dist/config/models.generated.d.ts +33 -0
  8. package/dist/config/models.remote.d.ts +1 -0
  9. package/dist/config/overdrive.d.ts +7 -0
  10. package/dist/config/pricing.d.ts +8 -5
  11. package/dist/config/pricing.generated.d.ts +4 -0
  12. package/dist/config/pricing.types.d.ts +4 -10
  13. package/dist/config/timeout.config.d.ts +3 -0
  14. package/dist/config/wi-boards.d.ts +19 -0
  15. package/dist/context-budget/continuity.d.ts +61 -0
  16. package/dist/context-budget/index.d.ts +140 -0
  17. package/dist/conversation/index.d.ts +1 -1
  18. package/dist/conversation/sqlite-provider.d.ts +5 -1
  19. package/dist/conversation/to-template-messages.d.ts +7 -0
  20. package/dist/conversation/types.d.ts +43 -0
  21. package/dist/desktop/command-runner.d.ts +4 -0
  22. package/dist/desktop/default-adapters.d.ts +4 -0
  23. package/dist/desktop/global-install.d.ts +19 -0
  24. package/dist/desktop/index.d.ts +2 -0
  25. package/dist/desktop/index.js +3 -0
  26. package/dist/desktop/install.d.ts +5 -0
  27. package/dist/desktop/lnk.d.ts +22 -0
  28. package/dist/desktop/manifest.d.ts +21 -0
  29. package/dist/desktop/types.d.ts +67 -0
  30. package/dist/desktop/version.d.ts +1 -0
  31. package/dist/desktop/windows-paths.d.ts +21 -0
  32. package/dist/desktop/wrapper.d.ts +18 -0
  33. package/dist/esm/desktop/index.js +3 -0
  34. package/dist/esm/index.js +343 -98
  35. package/dist/esm/plugins/index.js +209 -103
  36. package/dist/esm/publish/index.js +1 -0
  37. package/dist/esm/repository/index.js +200 -94
  38. package/dist/esm/testing/index.js +1 -1
  39. package/dist/events/types.d.ts +4 -0
  40. package/dist/facade/Crewx.d.ts +38 -2
  41. package/dist/highlight/thread-highlight-prompt.d.ts +2 -0
  42. package/dist/highlight/thread-highlighter.d.ts +326 -0
  43. package/dist/index.browser.d.ts +9 -1
  44. package/dist/index.browser.js +6 -2
  45. package/dist/index.d.ts +59 -8
  46. package/dist/index.js +343 -98
  47. package/dist/internal/windows-spawn.d.ts +10 -0
  48. package/dist/layout/types.d.ts +17 -1
  49. package/dist/local-server/base-url.d.ts +18 -0
  50. package/dist/local-server/index.d.ts +8 -0
  51. package/dist/local-server/opencode.d.ts +8 -0
  52. package/dist/local-server/probe.d.ts +3 -0
  53. package/dist/local-server/runtime.d.ts +26 -0
  54. package/dist/local-server/types.d.ts +43 -0
  55. package/dist/migrations/0008_careful_black_bird.sql +17 -0
  56. package/dist/migrations/0009_hot_dark_phoenix.sql +1 -0
  57. package/dist/migrations/0010_analyze_stats.sql +6 -0
  58. package/dist/migrations/0011_far_black_tarantula.sql +1 -0
  59. package/dist/migrations/0012_blue_turbo.sql +23 -0
  60. package/dist/migrations/0013_hesitant_adam_destine.sql +15 -0
  61. package/dist/migrations/0014_organic_mongu.sql +73 -0
  62. package/dist/migrations/0015_panoramic_gorilla_man.sql +71 -0
  63. package/dist/migrations/0016_fuzzy_hemingway.sql +14 -0
  64. package/dist/migrations/0017_project_stage_sdk_migration.sql +29 -0
  65. package/dist/migrations/0018_bored_jackal.sql +33 -0
  66. package/dist/migrations/0019_backfill_task_thread_ids.sql +74 -0
  67. package/dist/migrations/0020_useful_iron_lad.sql +55 -0
  68. package/dist/migrations/0021_dashing_peter_quill.sql +51 -0
  69. package/dist/migrations/meta/0008_snapshot.json +1327 -0
  70. package/dist/migrations/meta/0009_snapshot.json +1335 -0
  71. package/dist/migrations/meta/0010_snapshot.json +1335 -0
  72. package/dist/migrations/meta/0011_snapshot.json +1342 -0
  73. package/dist/migrations/meta/0012_snapshot.json +1494 -0
  74. package/dist/migrations/meta/0013_snapshot.json +1592 -0
  75. package/dist/migrations/meta/0014_snapshot.json +1975 -0
  76. package/dist/migrations/meta/0015_snapshot.json +2315 -0
  77. package/dist/migrations/meta/0016_snapshot.json +2419 -0
  78. package/dist/migrations/meta/0017_snapshot.json +2419 -0
  79. package/dist/migrations/meta/0018_snapshot.json +2570 -0
  80. package/dist/migrations/meta/0020_snapshot.json +2895 -0
  81. package/dist/migrations/meta/0021_snapshot.json +3031 -0
  82. package/dist/migrations/meta/_journal.json +98 -0
  83. package/dist/paths.d.ts +1 -0
  84. package/dist/plugin/types.d.ts +1 -0
  85. package/dist/plugins/index.js +209 -103
  86. package/dist/plugins/sqlite-tracing.d.ts +23 -0
  87. package/dist/provider/acp/connection.d.ts +4 -0
  88. package/dist/provider/acp/meta.d.ts +11 -0
  89. package/dist/provider/bridge.d.ts +6 -0
  90. package/dist/provider/classify-task-error.d.ts +2 -0
  91. package/dist/provider/cli/adapter.types.d.ts +7 -1
  92. package/dist/provider/cli/adapters/cli-knob.util.d.ts +7 -0
  93. package/dist/provider/cli/adapters/grok.d.ts +2 -0
  94. package/dist/provider/cli/adapters/index.d.ts +1 -0
  95. package/dist/provider/cli/index.d.ts +1 -1
  96. package/dist/provider/cli/meta.d.ts +5 -0
  97. package/dist/provider/errors.d.ts +1 -0
  98. package/dist/provider/idle-watchdog.d.ts +19 -0
  99. package/dist/provider/models.d.ts +17 -12
  100. package/dist/provider/order.d.ts +1 -1
  101. package/dist/provider/parse-usage.d.ts +6 -0
  102. package/dist/provider/provider-selection.d.ts +8 -0
  103. package/dist/provider/redact-technical-message.d.ts +1 -0
  104. package/dist/provider/task-error.types.d.ts +16 -0
  105. package/dist/publish/auth-boundary.d.ts +22 -0
  106. package/dist/publish/auth-json.d.ts +11 -0
  107. package/dist/publish/constants.d.ts +6 -0
  108. package/dist/publish/index.d.ts +30 -0
  109. package/dist/publish/index.js +1 -0
  110. package/dist/publish/manifest.d.ts +17 -0
  111. package/dist/publish/marketplace-api.constants.d.ts +1 -0
  112. package/dist/publish/pack.d.ts +2 -0
  113. package/dist/publish/scan.d.ts +9 -0
  114. package/dist/publish/secrets.d.ts +6 -0
  115. package/dist/publish/upload.d.ts +18 -0
  116. package/dist/repository/agent-suggestion.repository.d.ts +34 -0
  117. package/dist/repository/common-code.repository.d.ts +39 -0
  118. package/dist/repository/db.d.ts +8 -0
  119. package/dist/repository/index.d.ts +28 -4
  120. package/dist/repository/index.js +200 -94
  121. package/dist/repository/notification.repository.d.ts +58 -0
  122. package/dist/repository/project.repository.d.ts +90 -0
  123. package/dist/repository/request-log.repository.d.ts +1 -0
  124. package/dist/repository/task-log-migration.d.ts +74 -0
  125. package/dist/repository/task-log.repository.d.ts +44 -0
  126. package/dist/repository/task.repository.d.ts +120 -0
  127. package/dist/repository/thread-history.repository.d.ts +193 -0
  128. package/dist/repository/thread-title-common-code-migration.d.ts +13 -0
  129. package/dist/repository/thread-title.types.d.ts +29 -0
  130. package/dist/repository/thread.repository.d.ts +21 -2
  131. package/dist/repository/usage-report.repository.d.ts +27 -0
  132. package/dist/schema/agent-suggestions.d.ts +199 -0
  133. package/dist/schema/common-codes.d.ts +216 -0
  134. package/dist/schema/index.d.ts +9 -0
  135. package/dist/schema/notifications.d.ts +303 -0
  136. package/dist/schema/projects.d.ts +610 -0
  137. package/dist/schema/task-log-events.d.ts +119 -0
  138. package/dist/schema/tasks.d.ts +53 -0
  139. package/dist/schema/thread-history.d.ts +734 -0
  140. package/dist/schema/threads.d.ts +2 -0
  141. package/dist/schema/ui-action-receipts.d.ts +303 -0
  142. package/dist/schema/ui-instances.d.ts +267 -0
  143. package/dist/schema/usage-reports.d.ts +252 -0
  144. package/dist/task-log/anchor-child-tasks.d.ts +7 -0
  145. package/dist/testing/index.js +1 -1
  146. package/dist/types/index.d.ts +1536 -3
  147. package/dist/ui-card/index.d.ts +2 -0
  148. package/dist/ui-card/legacy-card-parser.d.ts +11 -0
  149. package/dist/ui-instance/definition.d.ts +6 -0
  150. package/dist/ui-instance/errors.d.ts +17 -0
  151. package/dist/ui-instance/index.d.ts +6 -0
  152. package/dist/ui-instance/json.d.ts +5 -0
  153. package/dist/ui-instance/runtime.d.ts +13 -0
  154. package/dist/ui-instance/store.d.ts +65 -0
  155. package/dist/ui-instance/types.d.ts +200 -0
  156. package/dist/ui-plugin/index.d.ts +3 -0
  157. package/dist/ui-plugin/manifest.d.ts +3 -0
  158. package/dist/ui-plugin/types.d.ts +76 -0
  159. package/dist/ui-plugin/validator.d.ts +9 -0
  160. package/dist/utils/crewx-home.d.ts +1 -0
  161. package/dist/utils/id.d.ts +1 -1
  162. package/dist/utils/timestamp.d.ts +1 -0
  163. package/dist/wi/create.d.ts +48 -0
  164. package/dist/wi/select.d.ts +20 -0
  165. package/package.json +18 -2
  166. package/templates/agents/default.yaml +240 -116
  167. package/templates/documents/crewx-manual.md +138 -138
  168. package/templates/workflows/wi-default-flow.yaml +65 -0
  169. 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
 
@@ -1,3 +1,10 @@
1
+ export interface ActivityLogRenderedEntry {
2
+ entry: ActivityEntry;
3
+ newestIndex: number;
4
+ bodyLimitChars: number;
5
+ bodyCharsShown: number | null;
6
+ originalBodyChars: number | null;
7
+ }
1
8
  export declare function checkStale(tool: string, input: string | null, taskCompletedAt?: string | null): 'ok' | 'stale' | 'unknown';
2
9
  export interface ActivityEntry {
3
10
  tool: string;
@@ -6,18 +13,60 @@ export interface ActivityEntry {
6
13
  status: 'ok' | 'stale' | 'unknown';
7
14
  reusable: boolean;
8
15
  }
9
- export interface ActivityLogResult {
16
+ export type CountTokens = (text: string) => number;
17
+ export type ActivityLogOmissionReason = 'token_cap' | 'repository_limit';
18
+ export interface ActivityLogOmission {
19
+ reason: ActivityLogOmissionReason;
20
+ count: number;
21
+ message: string;
22
+ }
23
+ export interface ActivityLogTaskResult {
24
+ taskId: string;
25
+ taskDistance: number;
26
+ tokenCap: number;
27
+ tokenCount: number;
28
+ includedEntries: number;
29
+ omittedEntries: number;
30
+ totalEntries: number;
31
+ omissions: ActivityLogOmission[];
32
+ entries: ActivityLogRenderedEntry[];
33
+ activityLog: string;
34
+ }
35
+ export interface ActivityLogByTaskResult {
10
36
  threadId: string;
11
37
  agentId: string;
12
38
  lookback: number;
13
- entries: ActivityEntry[];
14
- totalEntries: number;
15
- truncated: boolean;
39
+ activityLogTokenBudget: number;
40
+ baseEntryChars: number;
41
+ tasks: ActivityLogTaskResult[];
42
+ activityLogByTask: Map<string, string>;
43
+ }
44
+ export interface BuildActivityLogByTaskBudgetOptions {
45
+ threadId: string;
46
+ agentId: string;
47
+ lookback: number;
48
+ maxEntryChars?: number;
49
+ activityLogTokenBudget: number;
50
+ countTokens: CountTokens;
51
+ repositoryEntryLimit?: number;
16
52
  }
17
- export declare function buildActivityLogByTask(opts: {
53
+ export interface BuildActivityLogByTaskOptions {
18
54
  threadId: string;
19
55
  agentId: string;
20
56
  lookback: number;
21
57
  maxEntryChars?: number;
22
58
  decayRate?: number;
23
- }): Map<string, string>;
59
+ activityLogTokenBudget?: number;
60
+ countTokens?: CountTokens;
61
+ repositoryEntryLimit?: number;
62
+ }
63
+ export interface ActivityLogResult {
64
+ threadId: string;
65
+ agentId: string;
66
+ lookback: number;
67
+ entries: ActivityEntry[];
68
+ totalEntries: number;
69
+ truncated: boolean;
70
+ }
71
+ export declare function buildActivityLogByTaskResult(opts: BuildActivityLogByTaskBudgetOptions): ActivityLogByTaskResult;
72
+ export declare function buildActivityLogByTask(opts: BuildActivityLogByTaskOptions): Map<string, string>;
@@ -0,0 +1,17 @@
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 canonicalizeAgentOptions(input: CanonicalizeAgentOptionsInput): CanonicalizeAgentOptionsResult;
@@ -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,16 @@
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 MODEL_CATALOG_VERSION = 20;
5
+ export declare const MODEL_CATALOG_UPDATED = "2026-08-19T00:00:00Z";
1
6
  export interface ModelCatalogEntry {
2
7
  id: string;
3
8
  name: string;
4
9
  description?: string;
10
+ contextWindowTokens?: number;
11
+ tier?: ModelTier;
12
+ recommended?: boolean;
13
+ apiPricing?: ModelApiPricing;
5
14
  }
6
15
  export interface ProviderModeEntry {
7
16
  id: string;
@@ -12,11 +21,35 @@ export interface ProviderModelOverride {
12
21
  effort?: string[];
13
22
  defaultEffort?: string;
14
23
  }
24
+ export type ProviderOptionSpec = {
25
+ key: string;
26
+ type: 'boolean';
27
+ } | {
28
+ key: string;
29
+ type: 'enum';
30
+ values: string[];
31
+ };
32
+ export interface ProviderExecutionOptions {
33
+ mode: string;
34
+ effort: string;
35
+ providerOptions?: Record<string, unknown>;
36
+ }
37
+ export interface ProviderDefaultProfile {
38
+ model: string;
39
+ query: ProviderExecutionOptions;
40
+ execute: ProviderExecutionOptions;
41
+ }
42
+ export interface ProviderDefaults {
43
+ version: number;
44
+ providers: Record<string, ProviderDefaultProfile>;
45
+ }
15
46
  export interface ProviderCatalogEntry {
16
47
  models: ModelCatalogEntry[];
17
48
  modes: ProviderModeEntry[];
18
49
  effort: string[];
19
50
  modelOverrides: Record<string, ProviderModelOverride>;
51
+ providerOptions?: ProviderOptionSpec[];
20
52
  }
21
53
  export declare const PROVIDER_CATALOGS: Record<string, ProviderCatalogEntry>;
54
+ export declare const PROVIDER_DEFAULTS: ProviderDefaults;
22
55
  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;
8
+ export declare function normalizeModel(model: string): string;
9
+ export declare function lookupApiPricing(model: string | null | undefined): ModelApiPricing | undefined;
6
10
  export declare function getPricing(model: string | null | undefined): ModelPricing;
7
- export declare function getCostMultiplier(model: string | null | undefined, date?: Date): number;
8
- export declare function calculateCost(inputTokens: number, outputTokens: number, model: string | null | undefined, cachedInputTokens?: number, date?: Date): number;
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 = 20;
4
+ export declare const MODEL_PRICING_UPDATED = "2026-08-19T00:00:00Z";
5
+ export declare const UNPUBLISHED_MODEL_IDS: ReadonlySet<string>;
6
+ export declare const CATALOG_MODEL_IDS: ReadonlySet<string>;
@@ -2,14 +2,8 @@ export interface ModelPricing {
2
2
  input: number;
3
3
  cachedInput: number;
4
4
  output: number;
5
- metadata?: {
6
- billing?: {
7
- peakMultiplier: number;
8
- offPeakMultiplier: number;
9
- peakHoursUtc?: {
10
- start: number;
11
- end: number;
12
- };
13
- };
14
- };
5
+ }
6
+ export interface ModelApiPricing {
7
+ inputPerMillionTokensUsd: number;
8
+ outputPerMillionTokensUsd: number;
15
9
  }
@@ -1,5 +1,8 @@
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 function parseIdleEnvOverride(env?: NodeJS.ProcessEnv): number | undefined;
5
8
  export declare function getProviderTimeoutConfig(env?: NodeJS.ProcessEnv): TimeoutConfig;
@@ -0,0 +1,19 @@
1
+ import type { CrewxProjectConfig } from '../types';
2
+ export declare const DEFAULT_WI_BOARD_ID = "default";
3
+ export declare const ARCHIVE_WI_BOARD_ID = "archive";
4
+ export declare const DEFAULT_WI_WORKFLOW_ID = "wi-default-flow";
5
+ export declare const WI_PLAN_WORKFLOW_ID = "wi-plan-flow";
6
+ export declare const WI_DEFAULT_FLOW_FILENAME = "wi-default-flow.yaml";
7
+ export declare const WI_PLAN_FLOW_FILENAME = "wi-plan-flow.yaml";
8
+ export declare const WI_BOARD_ID_PATTERN: RegExp;
9
+ export declare function isReservedWiBoardId(id: string): boolean;
10
+ export interface ResolvedWiBoard {
11
+ id: string;
12
+ name: string;
13
+ workflowId: string;
14
+ description?: string;
15
+ goalId?: string;
16
+ system: boolean;
17
+ readOnly: boolean;
18
+ }
19
+ export declare function resolveWiBoards(config: CrewxProjectConfig | undefined): ResolvedWiBoard[];
@@ -0,0 +1,61 @@
1
+ import type { ConversationHighlight, ConversationThreadState, SemanticContinuityContext, TemplateMessage } from '../conversation/types.js';
2
+ export declare const DEFAULT_PROTECTED_TURN_COUNT = 5;
3
+ export declare const DEFAULT_HIGHLIGHT_BUDGET_PERCENT = 5;
4
+ export declare const MAX_ACTIVE_HIGHLIGHTS = 12;
5
+ export declare const MAX_ACTIVE_HIGHLIGHT_CHARS = 2000;
6
+ export declare const MAX_THREAD_TITLE_CHARS = 200;
7
+ export declare const MAX_THREAD_STATE_VALUE_CHARS = 64;
8
+ export interface ConversationTurn {
9
+ taskId?: string;
10
+ messages: TemplateMessage[];
11
+ ordinal: number;
12
+ }
13
+ export interface GroupedConversationTurns {
14
+ turns: ConversationTurn[];
15
+ unpairedMessages: TemplateMessage[];
16
+ }
17
+ export interface ConversationTurnSelection {
18
+ includedTurns: ConversationTurn[];
19
+ omittedTurns: ConversationTurn[];
20
+ protectedTurns: ConversationTurn[];
21
+ tokenCount: number;
22
+ protectedTokenCount: number;
23
+ overBudget: boolean;
24
+ }
25
+ export interface SelectConversationTurnsOptions {
26
+ turns: readonly ConversationTurn[];
27
+ maxTokenCount: number;
28
+ countTokens: (text: string) => number;
29
+ protectedTurnCount?: number;
30
+ materializeTurn?: (turn: ConversationTurn) => string;
31
+ }
32
+ export interface ConversationHighlightSelection {
33
+ includedHighlights: ConversationHighlight[];
34
+ omittedHighlights: ConversationHighlight[];
35
+ truncatedHighlights: number;
36
+ representedTaskIds: string[];
37
+ unrepresentedTaskIds: string[];
38
+ tokenCount: number;
39
+ budgetTokens: number;
40
+ }
41
+ export interface SelectConversationHighlightsOptions {
42
+ highlights: readonly ConversationHighlight[];
43
+ omittedTaskIds: readonly string[];
44
+ taskOrder: readonly string[];
45
+ maxTokenCount: number;
46
+ countTokens: (text: string) => number;
47
+ applySafetyCap?: boolean;
48
+ }
49
+ export declare function getConversationMessageTaskId(message: TemplateMessage): string | undefined;
50
+ export declare function groupConversationTurns(messages: readonly TemplateMessage[]): GroupedConversationTurns;
51
+ export declare function materializeConversationTurn(turn: ConversationTurn, includeActivityLog?: boolean): string;
52
+ export declare function selectConversationTurns(options: SelectConversationTurnsOptions): ConversationTurnSelection;
53
+ export declare function buildThreadStateContext(state: ConversationThreadState | undefined): ConversationThreadState | undefined;
54
+ export declare function selectConversationHighlights(options: SelectConversationHighlightsOptions): ConversationHighlightSelection;
55
+ export interface BuildSemanticContinuityContextOptions {
56
+ highlights: readonly ConversationHighlight[];
57
+ omittedTaskIds: readonly string[];
58
+ representedTaskIds: readonly string[];
59
+ applySafetyCap?: boolean;
60
+ }
61
+ export declare function buildSemanticContinuityContext(options: BuildSemanticContinuityContextOptions): SemanticContinuityContext;
@@ -0,0 +1,140 @@
1
+ export declare const DEFAULT_INPUT_BUDGET_PERCENT = 60;
2
+ export declare const MIN_INPUT_BUDGET_PERCENT = 30;
3
+ export declare const MAX_INPUT_BUDGET_PERCENT = 80;
4
+ export declare const INPUT_BUDGET_TOKENIZER_ENCODING = "o200k_base";
5
+ export declare const FRESH_PROVIDER_INITIAL_INPUT_SEPARATOR = "\n\n---\n\n";
6
+ export declare const FRESH_PROVIDER_INITIAL_INPUT_FRAMING = "system_prompt\\n\\n---\\n\\nmessage";
7
+ export declare const RESUME_PROVIDER_INITIAL_INPUT_FRAMING = "message";
8
+ export type InputBudgetUnresolvedReason = 'invalid_input_budget_percent' | 'provider_catalog_unavailable' | 'model_not_found' | 'context_window_tokens_unavailable';
9
+ export type TokenizerFallbackReason = 'vendor_tokenizer_unavailable';
10
+ export interface ResolveInputBudgetOptions {
11
+ provider: string;
12
+ model: string;
13
+ inputBudgetPercent?: number;
14
+ }
15
+ export interface TokenizerOptions {
16
+ provider?: string;
17
+ model?: string;
18
+ }
19
+ export interface TokenizerMetadata {
20
+ provider: string;
21
+ model: string;
22
+ encoding: typeof INPUT_BUDGET_TOKENIZER_ENCODING;
23
+ exact: boolean;
24
+ fallbackReason?: TokenizerFallbackReason;
25
+ }
26
+ export interface ResolvedInputBudget {
27
+ resolved: true;
28
+ requestedProvider: string;
29
+ provider: string;
30
+ model: string;
31
+ contextWindowTokens: number;
32
+ inputBudgetPercent: number;
33
+ inputBudgetTokens: number;
34
+ tokenizer: TokenizerMetadata;
35
+ }
36
+ export interface UnresolvedInputBudget {
37
+ resolved: false;
38
+ requestedProvider: string;
39
+ provider: string;
40
+ model: string;
41
+ reason: InputBudgetUnresolvedReason;
42
+ inputBudgetPercent?: number;
43
+ tokenizer: TokenizerMetadata;
44
+ }
45
+ export type ResolveInputBudgetResult = ResolvedInputBudget | UnresolvedInputBudget;
46
+ export type ContextBudgetPhase = 'fresh' | 'resume';
47
+ export type ProviderInitialInputFraming = typeof FRESH_PROVIDER_INITIAL_INPUT_FRAMING | typeof RESUME_PROVIDER_INITIAL_INPUT_FRAMING;
48
+ export interface ContextBudgetLayoutCapability {
49
+ layoutId: string;
50
+ supportsSemanticContinuity: boolean;
51
+ slot: string | null;
52
+ requiredForOmittedTurns: boolean;
53
+ warning?: string;
54
+ }
55
+ export interface ContextBudgetActivityDegradation {
56
+ taskId: string;
57
+ taskDistance: number;
58
+ action: 'reduced' | 'omitted';
59
+ }
60
+ export type ContextBudgetAssemblyErrorCode = 'INPUT_BUDGET_EXCEEDED' | 'CONTINUITY_SLOT_REQUIRED';
61
+ export declare class ContextBudgetLayoutError extends Error {
62
+ readonly layoutId: string;
63
+ readonly omittedTurnCount: number;
64
+ readonly code: "CONTINUITY_SLOT_REQUIRED";
65
+ constructor(message: string, layoutId: string, omittedTurnCount: number);
66
+ }
67
+ export interface ContextBudgetManifest {
68
+ phase: ContextBudgetPhase;
69
+ initialInputFraming: ProviderInitialInputFraming;
70
+ resolved: boolean;
71
+ reason?: InputBudgetUnresolvedReason;
72
+ requestedProvider: string;
73
+ requestedModel: string | null;
74
+ effectiveProvider: string;
75
+ effectiveModel: string | null;
76
+ contextWindowTokens: number | null;
77
+ inputBudgetPercent: number | null;
78
+ inputBudgetTokens: number | null;
79
+ tokenizer: TokenizerMetadata;
80
+ initialTokenCount: number | null;
81
+ finalTokenCount: number | null;
82
+ activityLogTokenCount: number | null;
83
+ activityIncludedEntries: number | null;
84
+ activityOmittedEntries: number | null;
85
+ activityRemovedForBudget: boolean;
86
+ activityNewestTaskTokenCap: number | null;
87
+ historyOriginalMessages: number;
88
+ historyIncludedMessages: number;
89
+ historyOmittedMessages: number;
90
+ turnOriginal: number;
91
+ turnIncluded: number;
92
+ turnOmitted: number;
93
+ highlightOriginal: number;
94
+ highlightIncluded: number;
95
+ highlightOmitted: number;
96
+ highlightTruncated: number;
97
+ representedOmittedTurns: number;
98
+ unrepresentedOmittedTurns: number;
99
+ activityDegraded: boolean;
100
+ activityIncludedTasks: number;
101
+ activityOmittedTasks: number;
102
+ activityDegradation: ContextBudgetActivityDegradation[];
103
+ highlightLookupFailed: boolean;
104
+ layoutCapability: ContextBudgetLayoutCapability;
105
+ overBudget: boolean;
106
+ }
107
+ export interface TokenCountResult {
108
+ tokenCount: number;
109
+ tokenizer: TokenizerMetadata;
110
+ }
111
+ export interface TokenCounter {
112
+ metadata: TokenizerMetadata;
113
+ countTokens(text: string): number;
114
+ }
115
+ export interface FreshProviderInitialInput {
116
+ systemPrompt?: string | null;
117
+ message: string;
118
+ }
119
+ type PieceCacheEventType = 'hit' | 'miss' | 'evict' | 'full_encode';
120
+ interface PieceCacheEvent {
121
+ type: PieceCacheEventType;
122
+ piece?: string;
123
+ tokenCount?: number;
124
+ reason?: 'special_token';
125
+ }
126
+ type PieceCacheObserver = (event: PieceCacheEvent) => void;
127
+ interface TokenCounterInternalOptions {
128
+ pieceCacheMaxEntries?: number;
129
+ observePieceCache?: PieceCacheObserver;
130
+ }
131
+ export declare function normalizeInputBudgetProvider(provider: string): string;
132
+ export declare function resolveTokenizerMetadata(options?: TokenizerOptions): TokenizerMetadata;
133
+ export declare function countTokens(text: string, options?: TokenizerOptions): TokenCountResult;
134
+ export declare function renderFreshProviderInitialInput(input: FreshProviderInitialInput): string;
135
+ export declare function countFreshProviderInitialInput(input: FreshProviderInitialInput, count: (text: string) => number): number;
136
+ export declare function createTokenCounter(options?: TokenizerOptions): TokenCounter;
137
+ export declare function __createTokenCounterForTest(options?: TokenizerOptions, internalOptions?: TokenCounterInternalOptions): TokenCounter;
138
+ export declare function resolveInputBudget(options: ResolveInputBudgetOptions): ResolveInputBudgetResult;
139
+ export { DEFAULT_HIGHLIGHT_BUDGET_PERCENT, DEFAULT_PROTECTED_TURN_COUNT, MAX_ACTIVE_HIGHLIGHT_CHARS, MAX_ACTIVE_HIGHLIGHTS, MAX_THREAD_STATE_VALUE_CHARS, MAX_THREAD_TITLE_CHARS, buildSemanticContinuityContext, buildThreadStateContext, getConversationMessageTaskId, groupConversationTurns, materializeConversationTurn, selectConversationHighlights, selectConversationTurns, } from './continuity.js';
140
+ export type { BuildSemanticContinuityContextOptions, ConversationHighlightSelection, ConversationTurn, ConversationTurnSelection, GroupedConversationTurns, SelectConversationHighlightsOptions, SelectConversationTurnsOptions, } from './continuity.js';
@@ -1,3 +1,3 @@
1
1
  export * from './types.js';
2
2
  export { toTaskReader } from './to-task-reader.js';
3
- export { toTemplateMessages } from './to-template-messages.js';
3
+ export { LEGACY_UI_CARD_SAFE_SUMMARY, sanitizeLegacyUiCardText, sanitizeTemplateMessages, toTemplateMessages, } from './to-template-messages.js';
@@ -1,8 +1,9 @@
1
- import type { ConversationThread, FetchHistoryOptions, IConversationHistoryProvider, Platform } from './types';
1
+ import type { ConversationHighlight, ConversationThread, ConversationThreadState, FetchHistoryOptions, IConversationHistoryProvider, Platform } from './types';
2
2
  export declare class SqliteConversationProvider implements IConversationHistoryProvider {
3
3
  private readonly dbPath;
4
4
  constructor(dbPath?: string);
5
5
  private getThreadRepo;
6
+ private getThreadHistoryRepo;
6
7
  updateThread(id: string, patch: {
7
8
  title?: string;
8
9
  }): void;
@@ -10,6 +11,8 @@ export declare class SqliteConversationProvider implements IConversationHistoryP
10
11
  created: boolean;
11
12
  }>;
12
13
  fetchHistory(threadId: string, options?: FetchHistoryOptions): Promise<ConversationThread>;
14
+ fetchThreadState(threadId: string): Promise<ConversationThreadState | undefined>;
15
+ fetchHighlights(threadId: string): Promise<ConversationHighlight[] | undefined>;
13
16
  saveUserMessage(threadId: string, text: string, _userId?: string, _metadata?: Record<string, unknown>): Promise<{
14
17
  id: string;
15
18
  firstMessage: boolean;
@@ -19,5 +22,6 @@ export declare class SqliteConversationProvider implements IConversationHistoryP
19
22
  }>;
20
23
  close(): void;
21
24
  private normalizeStatus;
25
+ private readActiveHighlights;
22
26
  private rowsToMessages;
23
27
  }
@@ -1,2 +1,9 @@
1
1
  import type { ConversationThread, TemplateMessage } from './types';
2
+ import type { UiAgentContextProjection } from '../ui-instance/types.js';
3
+ export declare const LEGACY_UI_CARD_SAFE_SUMMARY = "[workflow card omitted from AI context]";
4
+ export declare const V2_UI_INSTANCE_SAFE_SUMMARY = "[workflow UI instance omitted from AI context]";
5
+ export declare function sanitizeUiInstanceReferenceText(text: string): string;
6
+ export declare function sanitizeLegacyUiCardText(text: string): string;
7
+ export declare function sanitizeTemplateMessages(messages: readonly TemplateMessage[]): TemplateMessage[];
8
+ export declare function appendUiProjections(messages: readonly TemplateMessage[], projections: readonly UiAgentContextProjection[] | undefined): TemplateMessage[];
2
9
  export declare function toTemplateMessages(thread: ConversationThread): TemplateMessage[];
@@ -4,13 +4,50 @@ export interface ConversationMessage {
4
4
  text: string;
5
5
  isAssistant: boolean;
6
6
  timestamp: number;
7
+ taskId?: string;
7
8
  metadata?: Record<string, unknown>;
8
9
  }
9
10
  export type Platform = 'cli' | 'web' | 'api' | 'mcp' | `channel/${string}`;
11
+ export interface ConversationHighlight {
12
+ id: string;
13
+ text: string;
14
+ kind?: string;
15
+ source?: string;
16
+ coversFromTaskId?: string;
17
+ coversToTaskId?: string;
18
+ covers_from_task_id?: string;
19
+ covers_to_task_id?: string;
20
+ createdAt?: number | string;
21
+ created_at?: number | string;
22
+ }
23
+ export interface SemanticContinuityContext {
24
+ highlights: ConversationHighlight[];
25
+ truncatedHighlights?: number;
26
+ omittedTurns: {
27
+ count: number;
28
+ represented: number;
29
+ unrepresented: number;
30
+ taskIds: string[];
31
+ };
32
+ rendered?: string;
33
+ }
34
+ export type ConversationSemanticContinuityContext = SemanticContinuityContext;
35
+ export interface ConversationThreadStateValue {
36
+ code: string;
37
+ name: string;
38
+ }
39
+ export interface ConversationThreadState {
40
+ title?: string;
41
+ priority?: ConversationThreadStateValue;
42
+ state?: ConversationThreadStateValue;
43
+ rendered?: string;
44
+ }
45
+ export type ThreadStateContext = ConversationThreadState;
10
46
  export interface ConversationThread {
11
47
  threadId: string;
12
48
  platform: Platform;
13
49
  messages: ConversationMessage[];
50
+ highlights?: ConversationHighlight[];
14
51
  metadata?: {
15
52
  title?: string;
16
53
  firstMessage?: string;
@@ -20,10 +57,13 @@ export interface ConversationThread {
20
57
  };
21
58
  }
22
59
  export interface TemplateMessage {
60
+ id?: string;
23
61
  text: string;
24
62
  isAssistant: boolean;
63
+ taskId?: string;
25
64
  timestamp?: number;
26
65
  metadata?: Record<string, unknown>;
66
+ activity_log?: string;
27
67
  files?: Array<{
28
68
  name: string;
29
69
  size?: number;
@@ -33,6 +73,7 @@ export interface TemplateMessage {
33
73
  export interface FetchHistoryOptions {
34
74
  limit?: number;
35
75
  maxContextLength?: number;
76
+ includeHighlights?: boolean;
36
77
  currentTraceId?: string;
37
78
  }
38
79
  export interface IConversationHistoryProvider {
@@ -40,6 +81,8 @@ export interface IConversationHistoryProvider {
40
81
  created: boolean;
41
82
  }>;
42
83
  fetchHistory(threadId: string, options?: FetchHistoryOptions): Promise<ConversationThread>;
84
+ fetchThreadState?(threadId: string): Promise<ConversationThreadState | undefined>;
85
+ fetchHighlights?(threadId: string): Promise<ConversationHighlight[] | undefined>;
43
86
  saveUserMessage(threadId: string, text: string, userId?: string, metadata?: Record<string, unknown>): Promise<{
44
87
  id: string;
45
88
  firstMessage: boolean;
@@ -0,0 +1,4 @@
1
+ import { type ChildProcess } from 'node:child_process';
2
+ import type { CommandRunner } from './types';
3
+ export declare function killProcessTree(child: ChildProcess): void;
4
+ export declare const defaultCommandRunner: CommandRunner;