denchclaw 2.3.0 → 2.3.2

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 (101) hide show
  1. package/apps/web/.next/standalone/apps/web/.next/BUILD_ID +1 -1
  2. package/apps/web/.next/standalone/apps/web/.next/app-build-manifest.json +108 -108
  3. package/apps/web/.next/standalone/apps/web/.next/app-path-routes-manifest.json +29 -29
  4. package/apps/web/.next/standalone/apps/web/.next/build-manifest.json +2 -2
  5. package/apps/web/.next/standalone/apps/web/.next/required-server-files.json +1 -1
  6. package/apps/web/.next/standalone/apps/web/.next/server/app/_not-found/page.js +1 -1
  7. package/apps/web/.next/standalone/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  8. package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/route_client-reference-manifest.js +1 -1
  9. package/apps/web/.next/standalone/apps/web/.next/server/app/api/apps/serve/[...path]/route_client-reference-manifest.js +1 -1
  10. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/active/route_client-reference-manifest.js +1 -1
  11. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/route.js +1 -1
  12. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/route_client-reference-manifest.js +1 -1
  13. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/runs/route_client-reference-manifest.js +1 -1
  14. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/stop/route.js +1 -1
  15. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/stop/route_client-reference-manifest.js +1 -1
  16. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/stream/route_client-reference-manifest.js +1 -1
  17. package/apps/web/.next/standalone/apps/web/.next/server/app/api/chat/subagents/route_client-reference-manifest.js +1 -1
  18. package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/jobs/[jobId]/runs/route_client-reference-manifest.js +1 -1
  19. package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/jobs/route_client-reference-manifest.js +1 -1
  20. package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/runs/[sessionId]/route_client-reference-manifest.js +1 -1
  21. package/apps/web/.next/standalone/apps/web/.next/server/app/api/cron/runs/search-transcript/route_client-reference-manifest.js +1 -1
  22. package/apps/web/.next/standalone/apps/web/.next/server/app/api/feedback/route.js +1 -1
  23. package/apps/web/.next/standalone/apps/web/.next/server/app/api/feedback/route_client-reference-manifest.js +1 -1
  24. package/apps/web/.next/standalone/apps/web/.next/server/app/api/memories/route_client-reference-manifest.js +1 -1
  25. package/apps/web/.next/standalone/apps/web/.next/server/app/api/profiles/route_client-reference-manifest.js +1 -1
  26. package/apps/web/.next/standalone/apps/web/.next/server/app/api/profiles/switch/route_client-reference-manifest.js +1 -1
  27. package/apps/web/.next/standalone/apps/web/.next/server/app/api/sessions/[sessionId]/route_client-reference-manifest.js +1 -1
  28. package/apps/web/.next/standalone/apps/web/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
  29. package/apps/web/.next/standalone/apps/web/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  30. package/apps/web/.next/standalone/apps/web/.next/server/app/api/terminal/port/route_client-reference-manifest.js +1 -1
  31. package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/[id]/messages/route_client-reference-manifest.js +1 -1
  32. package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/[id]/route_client-reference-manifest.js +1 -1
  33. package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/route.js +1 -1
  34. package/apps/web/.next/standalone/apps/web/.next/server/app/api/web-sessions/route_client-reference-manifest.js +1 -1
  35. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/assets/[...path]/route_client-reference-manifest.js +1 -1
  36. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/browse/route_client-reference-manifest.js +1 -1
  37. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/browse-file/route_client-reference-manifest.js +1 -1
  38. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/context/route_client-reference-manifest.js +1 -1
  39. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/copy/route_client-reference-manifest.js +1 -1
  40. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/db/introspect/route_client-reference-manifest.js +1 -1
  41. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/db/query/route_client-reference-manifest.js +1 -1
  42. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/delete/route.js +1 -1
  43. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/delete/route_client-reference-manifest.js +1 -1
  44. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/file/route_client-reference-manifest.js +1 -1
  45. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/init/route.js +1 -1
  46. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/init/route_client-reference-manifest.js +1 -1
  47. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/list/route_client-reference-manifest.js +1 -1
  48. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/mkdir/route_client-reference-manifest.js +1 -1
  49. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/move/route_client-reference-manifest.js +1 -1
  50. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/display-field/route_client-reference-manifest.js +1 -1
  51. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/[id]/route_client-reference-manifest.js +1 -1
  52. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/bulk-delete/route_client-reference-manifest.js +1 -1
  53. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/options/route_client-reference-manifest.js +1 -1
  54. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/route.js +1 -1
  55. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/entries/route_client-reference-manifest.js +1 -1
  56. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/fields/[fieldId]/enum-rename/route_client-reference-manifest.js +1 -1
  57. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/fields/[fieldId]/route_client-reference-manifest.js +1 -1
  58. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/fields/reorder/route_client-reference-manifest.js +1 -1
  59. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/route_client-reference-manifest.js +1 -1
  60. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/objects/[name]/views/route_client-reference-manifest.js +1 -1
  61. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/open-file/route_client-reference-manifest.js +1 -1
  62. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/path-info/route_client-reference-manifest.js +1 -1
  63. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/query/route_client-reference-manifest.js +1 -1
  64. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/raw-file/route_client-reference-manifest.js +1 -1
  65. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/rename/route_client-reference-manifest.js +1 -1
  66. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/reports/execute/route.js +1 -1
  67. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/reports/execute/route_client-reference-manifest.js +1 -1
  68. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/search-index/route_client-reference-manifest.js +1 -1
  69. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/suggest-files/route_client-reference-manifest.js +1 -1
  70. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/switch/route.js +1 -1
  71. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/switch/route_client-reference-manifest.js +1 -1
  72. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/thumbnail/route_client-reference-manifest.js +1 -1
  73. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/tree/route_client-reference-manifest.js +1 -1
  74. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/upload/route.js +1 -1
  75. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/upload/route_client-reference-manifest.js +1 -1
  76. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/virtual-file/route_client-reference-manifest.js +1 -1
  77. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/watch/route_client-reference-manifest.js +1 -1
  78. package/apps/web/.next/standalone/apps/web/.next/server/app/api/workspace/write-binary/route_client-reference-manifest.js +1 -1
  79. package/apps/web/.next/standalone/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
  80. package/apps/web/.next/standalone/apps/web/.next/server/app/workspace/page_client-reference-manifest.js +1 -1
  81. package/apps/web/.next/standalone/apps/web/.next/server/app-paths-manifest.json +29 -29
  82. package/apps/web/.next/standalone/apps/web/.next/server/chunks/6426.js +1 -1
  83. package/apps/web/.next/standalone/apps/web/.next/server/chunks/7173.js +1 -1
  84. package/apps/web/.next/standalone/apps/web/.next/server/functions-config-manifest.json +18 -18
  85. package/apps/web/.next/standalone/apps/web/.next/server/pages/500.html +1 -1
  86. package/apps/web/.next/standalone/apps/web/.next/server/pages-manifest.json +1 -1
  87. package/apps/web/.next/standalone/apps/web/.next/static/chunks/app/{layout-8e7702d68f078270.js → layout-32e5870f0acaff43.js} +1 -1
  88. package/apps/web/.next/standalone/apps/web/server.js +1 -1
  89. package/apps/web/.next/standalone/package.json +1 -1
  90. package/apps/web/.next/static/chunks/app/{layout-8e7702d68f078270.js → layout-32e5870f0acaff43.js} +1 -1
  91. package/dist/entry.js +1 -1
  92. package/dist/{program-FTFIyYeQ.js → program-xzgPZOcc.js} +5 -8
  93. package/dist/{run-main-Cc9zgEqf.js → run-main-C-j6snAD.js} +1 -1
  94. package/extensions/dench-ai-gateway/models.ts +7 -11
  95. package/extensions/posthog-analytics/lib/build-env.js +1 -1
  96. package/extensions/posthog-analytics/lib/event-mappers.ts +18 -9
  97. package/package.json +1 -1
  98. /package/apps/web/.next/standalone/apps/web/.next/static/{iikRD5ldHaLo2uUJJYnoU → hpsmzJkH5dIgFJp4aoGwd}/_buildManifest.js +0 -0
  99. /package/apps/web/.next/standalone/apps/web/.next/static/{iikRD5ldHaLo2uUJJYnoU → hpsmzJkH5dIgFJp4aoGwd}/_ssgManifest.js +0 -0
  100. /package/apps/web/.next/static/{iikRD5ldHaLo2uUJJYnoU → hpsmzJkH5dIgFJp4aoGwd}/_buildManifest.js +0 -0
  101. /package/apps/web/.next/static/{iikRD5ldHaLo2uUJJYnoU → hpsmzJkH5dIgFJp4aoGwd}/_ssgManifest.js +0 -0
@@ -220,7 +220,7 @@ async function runCli(argv = process$1.argv) {
220
220
  process$1.exitCode = await delegateToGlobalOpenClaw(parseArgv);
221
221
  return;
222
222
  }
223
- const { buildProgram } = await import("./program-FTFIyYeQ.js");
223
+ const { buildProgram } = await import("./program-xzgPZOcc.js");
224
224
  await buildProgram().parseAsync(parseArgv);
225
225
  }
226
226
 
@@ -13,8 +13,8 @@ export type DenchCloudCatalogModel = {
13
13
  id: string;
14
14
  stableId: string;
15
15
  displayName: string;
16
- provider: "openai" | "anthropic";
17
- transportProvider: "openai" | "bedrock";
16
+ provider: string;
17
+ transportProvider: string;
18
18
  api: "openai-completions";
19
19
  input: Array<"text" | "image">;
20
20
  reasoning: boolean;
@@ -77,12 +77,8 @@ function readBoolean(input: UnknownRecord, ...keys: string[]): boolean | undefin
77
77
  return undefined;
78
78
  }
79
79
 
80
- function isProvider(value: string | undefined): value is "openai" | "anthropic" {
81
- return value === "openai" || value === "anthropic";
82
- }
83
-
84
- function isTransportProvider(value: string | undefined): value is "openai" | "bedrock" {
85
- return value === "openai" || value === "bedrock";
80
+ function isNonEmptyString(value: string | undefined): value is string {
81
+ return typeof value === "string" && value.trim().length > 0;
86
82
  }
87
83
 
88
84
  function normalizeInputKinds(input: unknown, supportsImages: boolean): Array<"text" | "image"> {
@@ -213,7 +209,7 @@ export function normalizeDenchCloudCatalogModel(input: unknown): DenchCloudCatal
213
209
  const displayName = readString(record, "name", "displayName", "display_name");
214
210
  const provider = readString(record, "provider");
215
211
  const transportProvider = readString(record, "transportProvider", "transport_provider");
216
- if (!publicId || !stableId || !displayName || !isProvider(provider) || !isTransportProvider(transportProvider)) {
212
+ if (!publicId || !stableId || !displayName || !isNonEmptyString(provider) || !isNonEmptyString(transportProvider)) {
217
213
  return null;
218
214
  }
219
215
 
@@ -223,8 +219,8 @@ export function normalizeDenchCloudCatalogModel(input: unknown): DenchCloudCatal
223
219
  const supportsReasoning = readBoolean(record, "supportsReasoning", "supports_reasoning")
224
220
  ?? readBoolean(record, "reasoning")
225
221
  ?? false;
226
- const contextWindow = readNumber(record, "contextWindow", "context_window") ?? 128000;
227
- const maxTokens = readNumber(record, "maxTokens", "max_tokens", "maxOutputTokens", "max_output_tokens") ?? 128000;
222
+ const contextWindow = readNumber(record, "contextWindow", "context_window") ?? 200000;
223
+ const maxTokens = readNumber(record, "maxTokens", "max_tokens", "maxOutputTokens", "max_output_tokens") ?? 64000;
228
224
 
229
225
  const costRecord = asRecord(record.cost) ?? {};
230
226
  const inputCost = readNumber(costRecord, "input") ?? 0;
@@ -1,3 +1,3 @@
1
1
  export const POSTHOG_KEY = "phc_Nt8s1Ny8062TY9aKT8LWiB4nBuoHNYQXRU9MypWfQCW";
2
- export const DENCHCLAW_VERSION = "2.3.0";
2
+ export const DENCHCLAW_VERSION = "2.3.2";
3
3
  export const OPENCLAW_VERSION = "";
@@ -3,7 +3,13 @@ import type { TraceContextManager } from "./trace-context.js";
3
3
  import { readOrCreateAnonymousId, sanitizeMessages, sanitizeOutputChoices, stripSecrets } from "./privacy.js";
4
4
 
5
5
  /**
6
- * Extract actual token counts and cost from OpenClaw's per-message usage metadata.
6
+ * Extract token counts and cost from the LAST assistant message's usage metadata.
7
+ *
8
+ * Only the last assistant message is used so that each $ai_generation event
9
+ * reports the per-turn delta rather than a cumulative session total. The
10
+ * previous implementation summed across ALL assistant messages, which meant
11
+ * multi-turn sessions emitted growing cumulative values on every turn and
12
+ * PostHog's sum() massively over-counted costs.
7
13
  */
8
14
  export function extractUsageFromMessages(messages: unknown): {
9
15
  inputTokens: number;
@@ -11,20 +17,23 @@ export function extractUsageFromMessages(messages: unknown): {
11
17
  totalCostUsd: number;
12
18
  } {
13
19
  if (!Array.isArray(messages)) return { inputTokens: 0, outputTokens: 0, totalCostUsd: 0 };
14
- let inputTokens = 0;
15
- let outputTokens = 0;
16
- let totalCostUsd = 0;
20
+
21
+ let lastAssistantUsage: Record<string, unknown> | undefined;
17
22
  for (const msg of messages) {
18
23
  if (!msg || typeof msg !== "object") continue;
19
24
  const m = msg as Record<string, unknown>;
20
25
  if (m.role !== "assistant") continue;
21
26
  const usage = m.usage as Record<string, unknown> | undefined;
22
- if (!usage) continue;
23
- if (typeof usage.input === "number") inputTokens += usage.input;
24
- if (typeof usage.output === "number") outputTokens += usage.output;
25
- const cost = usage.cost as Record<string, unknown> | undefined;
26
- if (cost && typeof cost.total === "number") totalCostUsd += cost.total;
27
+ if (usage) lastAssistantUsage = usage;
27
28
  }
29
+
30
+ if (!lastAssistantUsage) return { inputTokens: 0, outputTokens: 0, totalCostUsd: 0 };
31
+
32
+ const inputTokens = typeof lastAssistantUsage.input === "number" ? lastAssistantUsage.input : 0;
33
+ const outputTokens = typeof lastAssistantUsage.output === "number" ? lastAssistantUsage.output : 0;
34
+ const cost = lastAssistantUsage.cost as Record<string, unknown> | undefined;
35
+ const totalCostUsd = cost && typeof cost.total === "number" ? cost.total : 0;
36
+
28
37
  return { inputTokens, outputTokens, totalCostUsd };
29
38
  }
30
39
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "denchclaw",
3
- "version": "2.3.0",
3
+ "version": "2.3.2",
4
4
  "description": "Fully Managed OpenClaw Framework for managing your CRM, Sales Automation and Outreach agents. The only local productivity tool you need.",
5
5
  "keywords": [],
6
6
  "homepage": "https://github.com/DenchHQ/DenchClaw#readme",