@ycodium-ai/agent-claude 0.2.3096 → 0.2.3102

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 (2) hide show
  1. package/dist/index.js +128 -190
  2. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -21581,132 +21581,6 @@ var claudeStructuredErrorType = (value) => {
21581
21581
  return typeof type4 === "string" ? type4 : void 0;
21582
21582
  };
21583
21583
 
21584
- // src/usage.ts
21585
- function maxClaudeContextWindowFromModelUsage(modelUsage) {
21586
- if (!modelUsage) return void 0;
21587
- let maxContextWindow;
21588
- for (const value of Object.values(modelUsage)) {
21589
- const contextWindow = value.contextWindow;
21590
- maxContextWindow = Math.max(maxContextWindow ?? 0, contextWindow);
21591
- }
21592
- return maxContextWindow;
21593
- }
21594
- function finiteNonNegativeInteger(value) {
21595
- return typeof value === "number" && Number.isFinite(value) && value >= 0 ? Math.round(value) : void 0;
21596
- }
21597
- function finitePositiveInteger(value) {
21598
- return typeof value === "number" && Number.isFinite(value) && value > 0 ? Math.round(value) : void 0;
21599
- }
21600
- function claudeUsageInputTokens(usage) {
21601
- return (finiteNonNegativeInteger(usage.input_tokens) ?? 0) + (finiteNonNegativeInteger(usage.cache_creation_input_tokens) ?? 0) + (finiteNonNegativeInteger(usage.cache_read_input_tokens) ?? 0);
21602
- }
21603
- function claudeUsageOutputTokens(usage) {
21604
- return finiteNonNegativeInteger(usage.output_tokens) ?? 0;
21605
- }
21606
- function lastClaudeUsageIteration(value) {
21607
- const iterations = Array.isArray(value.iterations) ? value.iterations : [];
21608
- return iterations.findLast(
21609
- (iteration) => iteration !== null && typeof iteration === "object" && !Array.isArray(iteration)
21610
- );
21611
- }
21612
- function claudeTotalProcessedTokens(value) {
21613
- if (!value || typeof value !== "object" || Array.isArray(value)) {
21614
- return void 0;
21615
- }
21616
- const usage = value;
21617
- const explicitTotal = finiteNonNegativeInteger(usage.total_tokens);
21618
- if (explicitTotal !== void 0 && explicitTotal > 0) {
21619
- return explicitTotal;
21620
- }
21621
- const total = claudeUsageInputTokens(usage) + claudeUsageOutputTokens(usage);
21622
- return total > 0 ? total : void 0;
21623
- }
21624
- var CLAUDE_COMPACTION_SUMMARY_MAX_CHARS = 8e3;
21625
- function mergeClaudeCompactionSnapshot(snapshot, metadata) {
21626
- const preTokens = finiteNonNegativeInteger(metadata?.pre_tokens);
21627
- const postTokens = finiteNonNegativeInteger(metadata?.post_tokens);
21628
- const durationMs = finiteNonNegativeInteger(metadata?.duration_ms);
21629
- return {
21630
- ...snapshot,
21631
- ...metadata?.trigger === "manual" ? { trigger: "manual" } : metadata?.trigger === "auto" ? { trigger: "automatic" } : {},
21632
- ...preTokens !== void 0 ? { preTokens } : {},
21633
- ...postTokens !== void 0 ? { postTokens } : {},
21634
- ...durationMs !== void 0 ? { durationMs } : {}
21635
- };
21636
- }
21637
- function withClaudeCompactionSummary(snapshot, summary) {
21638
- const trimmed = summary.trim();
21639
- if (trimmed.length === 0) {
21640
- return snapshot;
21641
- }
21642
- const truncated = trimmed.length > CLAUDE_COMPACTION_SUMMARY_MAX_CHARS;
21643
- return {
21644
- ...snapshot,
21645
- summary: truncated ? trimmed.slice(0, CLAUDE_COMPACTION_SUMMARY_MAX_CHARS) : trimmed,
21646
- ...truncated ? { summaryTruncated: true } : {}
21647
- };
21648
- }
21649
- function makeClaudeTokenUsageSnapshot(input) {
21650
- const activeTokens = finiteNonNegativeInteger(input.activeTokens);
21651
- if (activeTokens === void 0 || activeTokens <= 0) {
21652
- return void 0;
21653
- }
21654
- const maxTokens = finitePositiveInteger(input.contextWindow);
21655
- const usedTokens = maxTokens !== void 0 ? Math.min(activeTokens, maxTokens) : activeTokens;
21656
- const lastUsedTokens = finiteNonNegativeInteger(input.lastUsedTokens) ?? (maxTokens !== void 0 ? Math.min(activeTokens, maxTokens) : activeTokens);
21657
- const totalProcessedTokens = finiteNonNegativeInteger(input.totalProcessedTokens);
21658
- const inputTokens = finiteNonNegativeInteger(input.inputTokens);
21659
- const outputTokens = finiteNonNegativeInteger(input.outputTokens);
21660
- return {
21661
- usedTokens,
21662
- lastUsedTokens,
21663
- ...totalProcessedTokens !== void 0 && totalProcessedTokens > usedTokens ? { totalProcessedTokens } : {},
21664
- ...inputTokens !== void 0 && inputTokens > 0 ? { inputTokens } : {},
21665
- ...outputTokens !== void 0 && outputTokens > 0 ? { outputTokens } : {},
21666
- ...maxTokens !== void 0 ? { maxTokens } : {},
21667
- ...input.compactsAutomatically !== void 0 ? { compactsAutomatically: input.compactsAutomatically } : {},
21668
- ...input.autoCompactThreshold !== void 0 ? { autoCompactThreshold: input.autoCompactThreshold } : {}
21669
- };
21670
- }
21671
- function normalizeClaudeActiveTokenUsage(value, contextWindow, totalProcessedTokens) {
21672
- if (!value || typeof value !== "object") {
21673
- return void 0;
21674
- }
21675
- const usage = value;
21676
- const activeUsage = lastClaudeUsageIteration(usage) ?? usage;
21677
- const inputTokens = claudeUsageInputTokens(activeUsage);
21678
- const outputTokens = claudeUsageOutputTokens(activeUsage);
21679
- const activeTokens = claudeTotalProcessedTokens(activeUsage) ?? inputTokens + outputTokens;
21680
- if (activeTokens <= 0) {
21681
- return void 0;
21682
- }
21683
- return makeClaudeTokenUsageSnapshot({
21684
- activeTokens,
21685
- inputTokens,
21686
- outputTokens,
21687
- ...contextWindow !== void 0 ? { contextWindow } : {},
21688
- ...totalProcessedTokens !== void 0 ? { totalProcessedTokens } : {}
21689
- });
21690
- }
21691
- function compactBoundaryTokenUsageSnapshot(message, contextWindow, totalProcessedTokens) {
21692
- const metadata = message.compact_metadata;
21693
- if (!metadata || typeof metadata !== "object" || Array.isArray(metadata)) {
21694
- return void 0;
21695
- }
21696
- const compactMetadata = metadata;
21697
- const postTokens = finiteNonNegativeInteger(compactMetadata.post_tokens);
21698
- if (postTokens === void 0 || postTokens <= 0) {
21699
- return void 0;
21700
- }
21701
- const preTokens = finiteNonNegativeInteger(compactMetadata.pre_tokens);
21702
- return makeClaudeTokenUsageSnapshot({
21703
- activeTokens: postTokens,
21704
- ...preTokens !== void 0 ? { lastUsedTokens: preTokens } : {},
21705
- ...contextWindow !== void 0 ? { contextWindow } : {},
21706
- ...totalProcessedTokens !== void 0 ? { totalProcessedTokens } : {}
21707
- });
21708
- }
21709
-
21710
21584
  // src/taskProgress.ts
21711
21585
  function claudeTaskRosterKind(input) {
21712
21586
  if (input.taskType === "local_workflow") return "workflow";
@@ -21946,36 +21820,6 @@ function workflowAgentStatus(entry) {
21946
21820
  return entry.startedAt === void 0 ? "pending" : "running";
21947
21821
  }
21948
21822
  }
21949
- function normalizeClaudeTaskProgressTokenUsage(value, memory) {
21950
- const totalTokens = claudeTotalProcessedTokens(value);
21951
- if (totalTokens === void 0 || totalTokens <= 0) {
21952
- return void 0;
21953
- }
21954
- const lastUsedTokens = memory.lastKnownTokenUsage?.usedTokens;
21955
- const activeTokens = lastUsedTokens !== void 0 ? Math.max(totalTokens, lastUsedTokens) : totalTokens;
21956
- if (lastUsedTokens !== void 0 && activeTokens === lastUsedTokens) {
21957
- return void 0;
21958
- }
21959
- const usage = value;
21960
- const snapshot = makeClaudeTokenUsageSnapshot({
21961
- activeTokens,
21962
- ...memory.lastKnownContextWindow !== void 0 ? { contextWindow: memory.lastKnownContextWindow } : {},
21963
- totalProcessedTokens: Math.max(
21964
- totalTokens,
21965
- memory.lastKnownTotalProcessedTokens ?? totalTokens
21966
- )
21967
- });
21968
- if (!snapshot) {
21969
- return void 0;
21970
- }
21971
- const toolUses = finiteNonNegativeInteger(usage.tool_uses);
21972
- const durationMs = finiteNonNegativeInteger(usage.duration_ms);
21973
- return {
21974
- ...snapshot,
21975
- ...toolUses !== void 0 ? { toolUses } : {},
21976
- ...durationMs !== void 0 ? { durationMs } : {}
21977
- };
21978
- }
21979
21823
 
21980
21824
  // src/adapter/emitters.ts
21981
21825
  var makeEmitters = (emitter) => {
@@ -23060,6 +22904,132 @@ var makeSendTurn = (deps) => {
23060
22904
  return { sendTurn };
23061
22905
  };
23062
22906
 
22907
+ // src/usage.ts
22908
+ function maxClaudeContextWindowFromModelUsage(modelUsage) {
22909
+ if (!modelUsage) return void 0;
22910
+ let maxContextWindow;
22911
+ for (const value of Object.values(modelUsage)) {
22912
+ const contextWindow = value.contextWindow;
22913
+ maxContextWindow = Math.max(maxContextWindow ?? 0, contextWindow);
22914
+ }
22915
+ return maxContextWindow;
22916
+ }
22917
+ function finiteNonNegativeInteger(value) {
22918
+ return typeof value === "number" && Number.isFinite(value) && value >= 0 ? Math.round(value) : void 0;
22919
+ }
22920
+ function finitePositiveInteger(value) {
22921
+ return typeof value === "number" && Number.isFinite(value) && value > 0 ? Math.round(value) : void 0;
22922
+ }
22923
+ function claudeUsageInputTokens(usage) {
22924
+ return (finiteNonNegativeInteger(usage.input_tokens) ?? 0) + (finiteNonNegativeInteger(usage.cache_creation_input_tokens) ?? 0) + (finiteNonNegativeInteger(usage.cache_read_input_tokens) ?? 0);
22925
+ }
22926
+ function claudeUsageOutputTokens(usage) {
22927
+ return finiteNonNegativeInteger(usage.output_tokens) ?? 0;
22928
+ }
22929
+ function lastClaudeUsageIteration(value) {
22930
+ const iterations = Array.isArray(value.iterations) ? value.iterations : [];
22931
+ return iterations.findLast(
22932
+ (iteration) => iteration !== null && typeof iteration === "object" && !Array.isArray(iteration)
22933
+ );
22934
+ }
22935
+ function claudeTotalProcessedTokens(value) {
22936
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
22937
+ return void 0;
22938
+ }
22939
+ const usage = value;
22940
+ const explicitTotal = finiteNonNegativeInteger(usage.total_tokens);
22941
+ if (explicitTotal !== void 0 && explicitTotal > 0) {
22942
+ return explicitTotal;
22943
+ }
22944
+ const total = claudeUsageInputTokens(usage) + claudeUsageOutputTokens(usage);
22945
+ return total > 0 ? total : void 0;
22946
+ }
22947
+ var CLAUDE_COMPACTION_SUMMARY_MAX_CHARS = 8e3;
22948
+ function mergeClaudeCompactionSnapshot(snapshot, metadata) {
22949
+ const preTokens = finiteNonNegativeInteger(metadata?.pre_tokens);
22950
+ const postTokens = finiteNonNegativeInteger(metadata?.post_tokens);
22951
+ const durationMs = finiteNonNegativeInteger(metadata?.duration_ms);
22952
+ return {
22953
+ ...snapshot,
22954
+ ...metadata?.trigger === "manual" ? { trigger: "manual" } : metadata?.trigger === "auto" ? { trigger: "automatic" } : {},
22955
+ ...preTokens !== void 0 ? { preTokens } : {},
22956
+ ...postTokens !== void 0 ? { postTokens } : {},
22957
+ ...durationMs !== void 0 ? { durationMs } : {}
22958
+ };
22959
+ }
22960
+ function withClaudeCompactionSummary(snapshot, summary) {
22961
+ const trimmed = summary.trim();
22962
+ if (trimmed.length === 0) {
22963
+ return snapshot;
22964
+ }
22965
+ const truncated = trimmed.length > CLAUDE_COMPACTION_SUMMARY_MAX_CHARS;
22966
+ return {
22967
+ ...snapshot,
22968
+ summary: truncated ? trimmed.slice(0, CLAUDE_COMPACTION_SUMMARY_MAX_CHARS) : trimmed,
22969
+ ...truncated ? { summaryTruncated: true } : {}
22970
+ };
22971
+ }
22972
+ function makeClaudeTokenUsageSnapshot(input) {
22973
+ const activeTokens = finiteNonNegativeInteger(input.activeTokens);
22974
+ if (activeTokens === void 0 || activeTokens <= 0) {
22975
+ return void 0;
22976
+ }
22977
+ const maxTokens = finitePositiveInteger(input.contextWindow);
22978
+ const usedTokens = maxTokens !== void 0 ? Math.min(activeTokens, maxTokens) : activeTokens;
22979
+ const lastUsedTokens = finiteNonNegativeInteger(input.lastUsedTokens) ?? (maxTokens !== void 0 ? Math.min(activeTokens, maxTokens) : activeTokens);
22980
+ const totalProcessedTokens = finiteNonNegativeInteger(input.totalProcessedTokens);
22981
+ const inputTokens = finiteNonNegativeInteger(input.inputTokens);
22982
+ const outputTokens = finiteNonNegativeInteger(input.outputTokens);
22983
+ return {
22984
+ usedTokens,
22985
+ lastUsedTokens,
22986
+ ...totalProcessedTokens !== void 0 && totalProcessedTokens > usedTokens ? { totalProcessedTokens } : {},
22987
+ ...inputTokens !== void 0 && inputTokens > 0 ? { inputTokens } : {},
22988
+ ...outputTokens !== void 0 && outputTokens > 0 ? { outputTokens } : {},
22989
+ ...maxTokens !== void 0 ? { maxTokens } : {},
22990
+ ...input.compactsAutomatically !== void 0 ? { compactsAutomatically: input.compactsAutomatically } : {},
22991
+ ...input.autoCompactThreshold !== void 0 ? { autoCompactThreshold: input.autoCompactThreshold } : {}
22992
+ };
22993
+ }
22994
+ function normalizeClaudeActiveTokenUsage(value, contextWindow, totalProcessedTokens) {
22995
+ if (!value || typeof value !== "object") {
22996
+ return void 0;
22997
+ }
22998
+ const usage = value;
22999
+ const activeUsage = lastClaudeUsageIteration(usage) ?? usage;
23000
+ const inputTokens = claudeUsageInputTokens(activeUsage);
23001
+ const outputTokens = claudeUsageOutputTokens(activeUsage);
23002
+ const activeTokens = claudeTotalProcessedTokens(activeUsage) ?? inputTokens + outputTokens;
23003
+ if (activeTokens <= 0) {
23004
+ return void 0;
23005
+ }
23006
+ return makeClaudeTokenUsageSnapshot({
23007
+ activeTokens,
23008
+ inputTokens,
23009
+ outputTokens,
23010
+ ...contextWindow !== void 0 ? { contextWindow } : {},
23011
+ ...totalProcessedTokens !== void 0 ? { totalProcessedTokens } : {}
23012
+ });
23013
+ }
23014
+ function compactBoundaryTokenUsageSnapshot(message, contextWindow, totalProcessedTokens) {
23015
+ const metadata = message.compact_metadata;
23016
+ if (!metadata || typeof metadata !== "object" || Array.isArray(metadata)) {
23017
+ return void 0;
23018
+ }
23019
+ const compactMetadata = metadata;
23020
+ const postTokens = finiteNonNegativeInteger(compactMetadata.post_tokens);
23021
+ if (postTokens === void 0 || postTokens <= 0) {
23022
+ return void 0;
23023
+ }
23024
+ const preTokens = finiteNonNegativeInteger(compactMetadata.pre_tokens);
23025
+ return makeClaudeTokenUsageSnapshot({
23026
+ activeTokens: postTokens,
23027
+ ...preTokens !== void 0 ? { lastUsedTokens: preTokens } : {},
23028
+ ...contextWindow !== void 0 ? { contextWindow } : {},
23029
+ ...totalProcessedTokens !== void 0 ? { totalProcessedTokens } : {}
23030
+ });
23031
+ }
23032
+
23063
23033
  // src/adapter/sessionCallbacks.ts
23064
23034
  var makeSessionCallbacks = (deps) => {
23065
23035
  const { emitter, ensureSyntheticTurn, emitProposedPlanCompleted } = deps;
@@ -24834,18 +24804,6 @@ var makeSystemMessageHandler = (deps) => {
24834
24804
  return;
24835
24805
  }
24836
24806
  case "task_progress": {
24837
- await emitThreadTokenUsage(
24838
- context,
24839
- normalizeClaudeTaskProgressTokenUsage(message.usage, {
24840
- ...context.lastKnownTokenUsage === void 0 ? {} : { lastKnownTokenUsage: context.lastKnownTokenUsage },
24841
- ...context.lastKnownContextWindow === void 0 ? {} : { lastKnownContextWindow: context.lastKnownContextWindow },
24842
- ...context.lastKnownTotalProcessedTokens === void 0 ? {} : { lastKnownTotalProcessedTokens: context.lastKnownTotalProcessedTokens }
24843
- }),
24844
- {
24845
- rawMethod: "claude/system/task_progress",
24846
- rawPayload: message
24847
- }
24848
- );
24849
24807
  const linkage = taskLinkageFor(context.taskAgents, message.task_id);
24850
24808
  const typedUsage = normalizeTaskUsage(message.usage);
24851
24809
  const workflowPhases = parseWorkflowProgress(
@@ -24893,18 +24851,6 @@ var makeSystemMessageHandler = (deps) => {
24893
24851
  }
24894
24852
  case "task_notification": {
24895
24853
  context.liveTaskIds.delete(message.task_id);
24896
- await emitThreadTokenUsage(
24897
- context,
24898
- normalizeClaudeTaskProgressTokenUsage(message.usage, {
24899
- ...context.lastKnownTokenUsage === void 0 ? {} : { lastKnownTokenUsage: context.lastKnownTokenUsage },
24900
- ...context.lastKnownContextWindow === void 0 ? {} : { lastKnownContextWindow: context.lastKnownContextWindow },
24901
- ...context.lastKnownTotalProcessedTokens === void 0 ? {} : { lastKnownTotalProcessedTokens: context.lastKnownTotalProcessedTokens }
24902
- }),
24903
- {
24904
- rawMethod: "claude/system/task_notification",
24905
- rawPayload: message
24906
- }
24907
- );
24908
24854
  const typedUsage = normalizeTaskUsage(message.usage);
24909
24855
  offerRuntimeEvent(context, {
24910
24856
  ...base,
@@ -25175,9 +25121,7 @@ var makeTurnLifecycle = (deps) => {
25175
25121
  }
25176
25122
  const resultUsageRecord = result?.usage && typeof result.usage === "object" && !Array.isArray(result.usage) ? result.usage : void 0;
25177
25123
  const hasResultUsageIteration = resultUsageRecord !== void 0 && lastClaudeUsageIteration(resultUsageRecord) !== void 0;
25178
- const resultHasActiveUsage = resultUsageRecord !== void 0 && (hasResultUsageIteration || claudeUsageInputTokens(resultUsageRecord) + claudeUsageOutputTokens(resultUsageRecord) > 0);
25179
- const resultTotalOnly = resultUsageRecord !== void 0 && !resultHasActiveUsage && claudeTotalProcessedTokens(resultUsageRecord) !== void 0;
25180
- const resultIterationSnapshot = resultUsageRecord ? normalizeClaudeActiveTokenUsage(
25124
+ const resultIterationSnapshot = hasResultUsageIteration ? normalizeClaudeActiveTokenUsage(
25181
25125
  resultUsageRecord,
25182
25126
  maxTokens,
25183
25127
  accumulatedTotalProcessedTokens ?? context.lastKnownTotalProcessedTokens
@@ -25189,13 +25133,7 @@ var makeTurnLifecycle = (deps) => {
25189
25133
  );
25190
25134
  const lastGoodUsage = context.lastKnownTokenUsage;
25191
25135
  const usageSnapshot = latestAssistantSnapshot ?? // 压缩之后还没有新的 assistant 用量时,result 里的累计数反映的是压缩前的上下文,不能用。
25192
- (context.turnState?.compactedSinceLatestAssistantUsage ? void 0 : resultTotalOnly && lastGoodUsage ? {
25193
- ...lastGoodUsage,
25194
- ...typeof maxTokens === "number" && Number.isFinite(maxTokens) && maxTokens > 0 ? { maxTokens } : {},
25195
- ...typeof accumulatedTotalProcessedTokens === "number" && Number.isFinite(accumulatedTotalProcessedTokens) && accumulatedTotalProcessedTokens > lastGoodUsage.usedTokens ? {
25196
- totalProcessedTokens: accumulatedTotalProcessedTokens
25197
- } : {}
25198
- } : resultIterationSnapshot) ?? (lastGoodUsage ? {
25136
+ (context.turnState?.compactedSinceLatestAssistantUsage ? void 0 : resultIterationSnapshot) ?? (lastGoodUsage ? {
25199
25137
  ...lastGoodUsage,
25200
25138
  ...typeof maxTokens === "number" && Number.isFinite(maxTokens) && maxTokens > 0 ? { maxTokens } : {},
25201
25139
  ...typeof accumulatedTotalProcessedTokens === "number" && Number.isFinite(accumulatedTotalProcessedTokens) && accumulatedTotalProcessedTokens > lastGoodUsage.usedTokens ? {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ycodium-ai/agent-claude",
3
- "version": "0.2.3096",
3
+ "version": "0.2.3102",
4
4
  "description": "Claude executor: Claude Code CLI via @anthropic-ai/claude-agent-sdk.",
5
5
  "keywords": [
6
6
  "ycodium",
@@ -24,9 +24,9 @@
24
24
  "@types/node": "24.12.4",
25
25
  "esbuild": "0.28.1",
26
26
  "vite-plus": "0.2.2",
27
- "@ycodium-ai/plugin-api": "0.2.3096",
28
- "ycodium-jsonl-stream": "0.0.0",
27
+ "@ycodium-ai/plugin-api": "0.2.3102",
29
28
  "ycodium-executor-testing": "0.0.0",
29
+ "ycodium-jsonl-stream": "0.0.0",
30
30
  "ycodium-composer-tokens": "0.0.0"
31
31
  },
32
32
  "ycodium": {