forge-openclaw-plugin 0.2.80 → 0.2.82

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.
@@ -3419,7 +3419,7 @@ const AGENT_ONBOARDING_ENTITY_CONVERSATION_PLAYBOOKS = [
3419
3419
  coachingGoal: "Clarify whether the user wants flow discovery, editing, execution, run history, published outputs, or node-level inspection before using the dedicated workbench route family.",
3420
3420
  askSequence: [
3421
3421
  "Ask what they are trying to learn, repair, publish, or run through Workbench before you narrow to flow discovery, editing, execution, or results.",
3422
- "Ask whether the job is flow discovery, one flow edit, execution, run history, published output, node-level inspection, or latest-node-output lookup.",
3422
+ "Ask whether the job is flow discovery, one flow edit, execution, run history, published output, node-level inspection, latest-node-output lookup, or a follow-up message in a saved flow chat.",
3423
3423
  "Treat saved-flow catalog, box catalog, run history, run detail, node result, latest node output, and published output as internal read lanes. With the user, ask whether they need the saved flow, its input contract, one run, one node, or the public result instead of listing route keys.",
3424
3424
  "Use listFlows for the saved flow catalog and boxCatalog for available input-box contracts; do not collapse both into a vague catalog read.",
3425
3425
  "Ask which flow, slug, run, or node the request is about.",
@@ -5142,7 +5142,7 @@ function buildAgentOnboardingPayload(request) {
5142
5142
  specializedRouteToolExamples: {
5143
5143
  movementAllTime: '{"routeKey":"allTime","query":{"userIds":["user_operator"]}}',
5144
5144
  movementTimeline: '{"routeKey":"timeline","query":{"from":"2026-05-01T00:00:00.000Z","to":"2026-05-06T23:59:59.999Z","userIds":["user_operator"]}}',
5145
- movementSelection: '{"routeKey":"selection","query":{"from":"2026-05-01T00:00:00.000Z","to":"2026-05-14T23:59:59.999Z","placeIds":["place_home"],"userIds":["user_operator"]}}',
5145
+ movementSelection: '{"routeKey":"selection","body":{"from":"2026-05-01T00:00:00.000Z","to":"2026-05-14T23:59:59.999Z","placeIds":["place_home"],"userIds":["user_operator"]}}',
5146
5146
  movementTripDetail: '{"routeKey":"tripDetail","pathParams":{"id":"trip_123"}}',
5147
5147
  movementSettings: '{"routeKey":"settings","query":{"userIds":["user_operator"]}}',
5148
5148
  movementSettingsUpdate: '{"routeKey":"settingsUpdate","body":{"trackingEnabled":true,"publishMode":"draft_review","retentionMode":"aggregates_only"}}',
@@ -1,5 +1,5 @@
1
1
  import { createHash, randomUUID } from "node:crypto";
2
- import { inflateSync } from "node:zlib";
2
+ import { inflateRawSync, inflateSync } from "node:zlib";
3
3
  import { z } from "zod";
4
4
  import { getDatabase, runInTransaction } from "./db.js";
5
5
  import { HttpError } from "./errors.js";
@@ -2754,9 +2754,19 @@ function parseDeflateBase64ChunkPayload(payloadJsonDeflateBase64, context) {
2754
2754
  }
2755
2755
  let decoded;
2756
2756
  try {
2757
- decoded = inflateSync(compressed);
2757
+ decoded = inflateHealthSyncChunkPayload(compressed);
2758
2758
  }
2759
2759
  catch (error) {
2760
+ const errorCode = typeof error === "object" && error !== null && "code" in error
2761
+ ? error.code
2762
+ : undefined;
2763
+ if (errorCode === "ERR_BUFFER_TOO_LARGE") {
2764
+ throw new HttpError(413, "chunk_too_large", "The HealthKit sync compressed chunk expands beyond the maximum decoded size.", {
2765
+ maxBytes: HEALTH_MOBILE_SYNC_CHUNK_MAX_BYTES,
2766
+ compressedBytes: compressed.length,
2767
+ mode: HEALTH_MOBILE_SYNC_COMPRESSED_CHUNK_PAYLOAD_ENCODING
2768
+ });
2769
+ }
2760
2770
  console.warn("[healthkit-sync] invalid compressed chunk payload", {
2761
2771
  syncSessionId: context.syncSessionId,
2762
2772
  chunkId: context.chunkId,
@@ -2793,6 +2803,21 @@ function parseDeflateBase64ChunkPayload(payloadJsonDeflateBase64, context) {
2793
2803
  mode: HEALTH_MOBILE_SYNC_COMPRESSED_CHUNK_PAYLOAD_ENCODING
2794
2804
  };
2795
2805
  }
2806
+ function inflateHealthSyncChunkPayload(compressed) {
2807
+ const options = { maxOutputLength: HEALTH_MOBILE_SYNC_CHUNK_MAX_BYTES + 1 };
2808
+ try {
2809
+ return inflateSync(compressed, options);
2810
+ }
2811
+ catch (error) {
2812
+ const errorCode = typeof error === "object" && error !== null && "code" in error
2813
+ ? error.code
2814
+ : undefined;
2815
+ if (errorCode === "ERR_BUFFER_TOO_LARGE") {
2816
+ throw error;
2817
+ }
2818
+ return inflateRawSync(compressed, options);
2819
+ }
2820
+ }
2796
2821
  function resolveChunkWirePayload(parsed, syncSessionId, rawPayloadJson) {
2797
2822
  if (parsed.payloadJsonDeflateBase64) {
2798
2823
  return parseDeflateBase64ChunkPayload(parsed.payloadJsonDeflateBase64, {
@@ -2,7 +2,7 @@
2
2
  "id": "forge-openclaw-plugin",
3
3
  "name": "Forge",
4
4
  "description": "Curated OpenClaw adapter for the Forge collaboration API, UI entrypoint, and localhost auto-start runtime.",
5
- "version": "0.2.80",
5
+ "version": "0.2.82",
6
6
  "activation": {
7
7
  "onStartup": true,
8
8
  "onCapabilities": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forge-openclaw-plugin",
3
- "version": "0.2.80",
3
+ "version": "0.2.82",
4
4
  "description": "Curated OpenClaw adapter for the Forge collaboration API, UI entrypoint, and localhost auto-start runtime.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -109,7 +109,7 @@ Concrete route-key examples for internal use:
109
109
  - Movement timeline read:
110
110
  `{"routeKey":"timeline","query":{"from":"2026-05-01T00:00:00.000Z","to":"2026-05-06T23:59:59.999Z","userIds":["user_operator"]}}`
111
111
  - Movement selection aggregate:
112
- `{"routeKey":"selection","query":{"from":"2026-05-01T00:00:00.000Z","to":"2026-05-14T23:59:59.999Z","placeIds":["place_home"],"userIds":["user_operator"]}}`
112
+ `{"routeKey":"selection","body":{"from":"2026-05-01T00:00:00.000Z","to":"2026-05-14T23:59:59.999Z","placeIds":["place_home"],"userIds":["user_operator"]}}`
113
113
  - Movement trip detail:
114
114
  `{"routeKey":"tripDetail","pathParams":{"id":"trip_123"}}`
115
115
  - Movement settings read: