@open-pets/openclaw 3.5.0

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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 OpenPets
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=check-openclaw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-openclaw.d.ts","sourceRoot":"","sources":["../src/check-openclaw.ts"],"names":[],"mappings":""}
@@ -0,0 +1,60 @@
1
+ import assert from "node:assert/strict";
2
+ import { buildOpenClawCommand, classifyOpenClawStatus, parseOpenClawPluginList, planOpenClawMutation } from "./management.js";
3
+ import { createOpenPetsOpenClawRuntime } from "./runtime.js";
4
+ const owned = { id: "openpets", enabled: false, version: "3.2.0", install: { source: "npm", spec: "@open-pets/openclaw@3.2.0" } };
5
+ assert.deepEqual(buildOpenClawCommand("install", "3.3.0"), { command: "openclaw", args: ["plugins", "install", "npm:@open-pets/openclaw@3.3.0"] });
6
+ assert.deepEqual(buildOpenClawCommand("update", "3.3.0"), { command: "openclaw", args: ["plugins", "update", "@open-pets/openclaw@3.3.0"] });
7
+ assert.deepEqual(buildOpenClawCommand("remove"), { command: "openclaw", args: ["plugins", "uninstall", "openpets", "--force"] });
8
+ const disabled = classifyOpenClawStatus({ version: "2026.7.1", list: { plugins: [owned] }, inspect: { plugin: owned, install: owned.install } });
9
+ assert.equal(disabled.state, "installed-disabled");
10
+ assert.equal(disabled.trackedSource, "official-package");
11
+ assert.deepEqual(planOpenClawMutation(disabled, "configure", "3.2.0"), ["enable"]);
12
+ const disabledWithoutDuplicatedVersion = classifyOpenClawStatus({ version: "2026.7.1", list: { plugins: [owned] }, inspect: { plugin: { id: "openpets", enabled: false }, install: owned.install } });
13
+ assert.equal(disabledWithoutDuplicatedVersion.installedVersion, "3.2.0");
14
+ assert.deepEqual(planOpenClawMutation(disabledWithoutDuplicatedVersion, "configure", "3.2.0"), ["enable"]);
15
+ assert.equal(classifyOpenClawStatus({ version: "2026.7.1", list: { plugins: [] }, inspect: undefined, inspectMissing: true }).state, "not-installed");
16
+ assert.equal(classifyOpenClawStatus({ version: "2026.7.1", list: { plugins: [] }, inspect: {} }).state, "indeterminate");
17
+ assert.equal(classifyOpenClawStatus({ version: "2026.7.1", list: { plugins: [{ id: "openpets", enabled: true }] }, inspect: { plugin: { id: "openpets", enabled: true }, install: { source: "path", spec: "/tmp/openpets" } } }).state, "conflict");
18
+ assert.equal(classifyOpenClawStatus({ version: "2026.7.1", list: { plugins: [{ id: "openpets", enabled: true }] }, inspect: { plugin: { id: "openpets", enabled: true }, install: { source: "path", spec: "/tmp/openpets" } } }).trackedSource, "custom-source");
19
+ assert.equal(classifyOpenClawStatus({ version: "2026.7.1", list: { plugins: [{ id: "openpets", enabled: true }] }, inspect: { plugin: { id: "openpets", enabled: true } } }).state, "invalid");
20
+ assert.equal(classifyOpenClawStatus({ version: "2026.7.1", list: { plugins: [{ id: "openpets", enabled: true }] }, inspect: { plugin: { id: "openpets", enabled: true } } }).trackedSource, "untracked");
21
+ const enabled = classifyOpenClawStatus({ version: "2026.7.1", list: { plugins: [{ id: "openpets", enabled: true }] }, inspect: { plugin: { id: "openpets", enabled: true, status: "loaded", dependencyStatus: { requiredInstalled: true }, error: "missing dependency" }, install: { source: "npm", spec: "@open-pets/openclaw@3.2.0" } } });
22
+ assert.equal(enabled.state, "installed-enabled");
23
+ assert.deepEqual(planOpenClawMutation(enabled, "configure", "3.2.0"), []);
24
+ assert.deepEqual(planOpenClawMutation(enabled, "configure", "3.3.0"), ["update", "enable"]);
25
+ assert.equal(classifyOpenClawStatus({ version: "2026.7.1", list: { plugins: [{ id: "openpets", enabled: true, dependencyStatus: { requiredInstalled: false } }] }, inspect: { plugin: { id: "openpets", enabled: true, dependencyStatus: { requiredInstalled: false } }, install: owned.install } }).state, "invalid");
26
+ assert.equal(classifyOpenClawStatus({ version: "2026.7.1", list: {}, inspect: {}, nixMode: true }).state, "management-disabled");
27
+ assert.equal(classifyOpenClawStatus({ version: "2026.6.0", list: {}, inspect: {} }).state, "unsupported-host");
28
+ const largeColdInventory = JSON.stringify({ plugins: Array.from({ length: 3_000 }, (_, index) => ({ id: `other-plugin-${index}`, enabled: false })) });
29
+ assert.ok(Buffer.byteLength(largeColdInventory, "utf8") > 16 * 1024, "cold inventory fixture must exceed the old output cap");
30
+ assert.deepEqual(parseOpenClawPluginList(JSON.parse(largeColdInventory)), {});
31
+ const largeColdStatus = classifyOpenClawStatus({ version: "2026.7.1", list: JSON.parse(largeColdInventory), inspect: undefined, inspectMissing: true });
32
+ assert.equal(largeColdStatus.state, "not-installed");
33
+ assert.deepEqual(planOpenClawMutation(largeColdStatus, "configure", "3.3.0"), ["install", "enable"]);
34
+ const queued = [];
35
+ const calls = [];
36
+ const fakeClient = {
37
+ say: async () => { calls.push("say"); },
38
+ react: async (reaction) => { calls.push(reaction); },
39
+ };
40
+ const runtime = createOpenPetsOpenClawRuntime({ clientFactory: () => fakeClient, schedule: (work) => { queued.push(work); }, now: () => 1_000, debug: true });
41
+ let payloadRead = false;
42
+ const hostilePayload = new Proxy({}, { get() { payloadRead = true; throw new Error("payload accessed"); } });
43
+ runtime.handleModelCallStarted(hostilePayload);
44
+ runtime.handleBeforeToolCall(hostilePayload);
45
+ assert.equal(queued.length, 1, "only one OpenPets dispatch may be pending");
46
+ assert.equal(payloadRead, false, "OpenClaw hook payloads are observation-only");
47
+ await queued.shift()();
48
+ assert.deepEqual(calls, ["say"], "model activity uses curated speech");
49
+ runtime.handleModelCallStarted();
50
+ assert.equal(queued.length, 0, "thinking activity is cooldown bounded");
51
+ const failedQueue = [];
52
+ const debugCodes = [];
53
+ const opaqueError = new Proxy({}, { get() { throw new Error("opaque error property accessed"); } });
54
+ const failingClient = { say: async () => { }, react: async () => { throw opaqueError; } };
55
+ const failingRuntime = createOpenPetsOpenClawRuntime({ clientFactory: () => failingClient, schedule: (work) => { failedQueue.push(work); }, now: () => 1_000, debug: true, debugLog: (code) => { debugCodes.push(code); } });
56
+ failingRuntime.handleBeforeToolCall();
57
+ await failedQueue.shift()();
58
+ assert.deepEqual(debugCodes, ["dispatch_failed"], "opaque failures use only a closed debug signal");
59
+ console.error("OpenClaw package contract validation passed.");
60
+ //# sourceMappingURL=check-openclaw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-openclaw.js","sourceRoot":"","sources":["../src/check-openclaw.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC9H,OAAO,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAE7D,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,2BAA2B,EAAE,EAAE,CAAC;AAClI,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,+BAA+B,CAAC,EAAE,CAAC,CAAC;AACnJ,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,2BAA2B,CAAC,EAAE,CAAC,CAAC;AAC7I,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;AACjI,MAAM,QAAQ,GAAG,sBAAsB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACjJ,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;AACnD,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;AACzD,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AACnF,MAAM,gCAAgC,GAAG,sBAAsB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACtM,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;AACzE,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,gCAAgC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3G,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;AACtJ,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;AACzH,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACpP,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;AACjQ,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAC/L,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;AACzM,MAAM,OAAO,GAAG,sBAAsB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,2BAA2B,EAAE,EAAE,EAAE,CAAC,CAAC;AAC7U,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;AACjD,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1E,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC5F,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACvT,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;AACjI,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;AAC/G,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,gBAAgB,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACvJ,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,uDAAuD,CAAC,CAAC;AAC9H,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC9E,MAAM,eAAe,GAAG,sBAAsB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;AACxJ,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;AACrD,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,eAAe,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AAErG,MAAM,MAAM,GAA+B,EAAE,CAAC;AAC9C,MAAM,KAAK,GAAa,EAAE,CAAC;AAC3B,MAAM,UAAU,GAAG;IACjB,GAAG,EAAE,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvC,KAAK,EAAE,KAAK,EAAE,QAAgB,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;CAChC,CAAC;AAC/B,MAAM,OAAO,GAAG,6BAA6B,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9J,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,WAAW,GAAG,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5G,OAAO,CAAC,sBAA8D,CAAC,cAAc,CAAC,CAAC;AACvF,OAAO,CAAC,oBAA4D,CAAC,cAAc,CAAC,CAAC;AACtF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,2CAA2C,CAAC,CAAC;AAC5E,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,6CAA6C,CAAC,CAAC;AAChF,MAAM,MAAM,CAAC,KAAK,EAAG,EAAE,CAAC;AACxB,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,oCAAoC,CAAC,CAAC;AACvE,OAAO,CAAC,sBAAsB,EAAE,CAAC;AACjC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,uCAAuC,CAAC,CAAC;AACxE,MAAM,WAAW,GAA+B,EAAE,CAAC;AACnD,MAAM,UAAU,GAAa,EAAE,CAAC;AAChC,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACpG,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,WAAW,CAAC,CAAC,CAAC,EAA+B,CAAC;AACtH,MAAM,cAAc,GAAG,6BAA6B,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7N,cAAc,CAAC,oBAAoB,EAAE,CAAC;AACtC,MAAM,WAAW,CAAC,KAAK,EAAG,EAAE,CAAC;AAC7B,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,iBAAiB,CAAC,EAAE,gDAAgD,CAAC,CAAC;AACpG,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { createOpenPetsOpenClawRuntime, type OpenClawActivity, type OpenPetsDebugCode, type OpenPetsOpenClawRuntime, type OpenPetsOpenClawRuntimeOptions } from "./runtime.js";
2
+ export { buildOpenClawCommand, classifyOpenClawStatus, exactPackageSpec, isSupportedOpenClawVersion, openClawMaxStructuredOutputBytes, openClawMinimumVersion, openClawPackageName, openClawPluginId, parseOpenClawPluginList, parseOpenClawVersion, planOpenClawMutation, type OpenClawCommandAction, type OpenClawCommandPaths, type OpenClawCommandSpec, type OpenClawDiscoveryInput, type OpenClawMutation, type OpenClawPluginListSnapshot, type OpenClawPluginStatus, type OpenClawSetupState, type OpenClawSourceCategory } from "./management.js";
3
+ declare const _default: unknown;
4
+ export default _default;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,6BAA6B,EAAE,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,KAAK,uBAAuB,EAAE,KAAK,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAC/K,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,gCAAgC,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,KAAK,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,KAAK,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,KAAK,0BAA0B,EAAE,KAAK,oBAAoB,EAAE,KAAK,kBAAkB,EAAE,KAAK,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;;AAE1hB,wBASG"}
package/dist/index.js ADDED
@@ -0,0 +1,15 @@
1
+ import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
2
+ import { createOpenPetsOpenClawRuntime } from "./runtime.js";
3
+ export { createOpenPetsOpenClawRuntime } from "./runtime.js";
4
+ export { buildOpenClawCommand, classifyOpenClawStatus, exactPackageSpec, isSupportedOpenClawVersion, openClawMaxStructuredOutputBytes, openClawMinimumVersion, openClawPackageName, openClawPluginId, parseOpenClawPluginList, parseOpenClawVersion, planOpenClawMutation } from "./management.js";
5
+ export default definePluginEntry({
6
+ id: "openpets",
7
+ name: "OpenPets",
8
+ description: "Shows safe, categorical OpenClaw activity in the OpenPets companion.",
9
+ register(api) {
10
+ const runtime = createOpenPetsOpenClawRuntime();
11
+ api.on("model_call_started", () => { runtime.handleModelCallStarted(); });
12
+ api.on("before_tool_call", () => { runtime.handleBeforeToolCall(); });
13
+ },
14
+ });
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAE7D,OAAO,EAAE,6BAA6B,EAAoH,MAAM,cAAc,CAAC;AAC/K,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,gCAAgC,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,oBAAoB,EAAyP,MAAM,iBAAiB,CAAC;AAE1hB,eAAe,iBAAiB,CAAC;IAC/B,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,sEAAsE;IACnF,QAAQ,CAAC,GAAG;QACV,MAAM,OAAO,GAAG,6BAA6B,EAAE,CAAC;QAChD,GAAG,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,GAAG,CAAC,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,49 @@
1
+ export declare const openClawPackageName = "@open-pets/openclaw";
2
+ export declare const openClawPluginId = "openpets";
3
+ export declare const openClawMinimumVersion = "2026.7.1";
4
+ export declare const openClawMaxStructuredOutputBytes: number;
5
+ export type OpenClawCommandAction = "list" | "inspect" | "install" | "enable" | "update" | "remove" | "version";
6
+ export interface OpenClawCommandSpec {
7
+ readonly command: string;
8
+ readonly args: readonly string[];
9
+ }
10
+ export interface OpenClawCommandPaths {
11
+ readonly openclaw: string;
12
+ }
13
+ export type OpenClawSetupState = "unavailable" | "unsupported-host" | "management-disabled" | "not-installed" | "installed-disabled" | "installed-enabled" | "invalid" | "conflict" | "indeterminate";
14
+ export interface OpenClawPluginStatus {
15
+ readonly state: OpenClawSetupState;
16
+ readonly label: string;
17
+ readonly details: string;
18
+ readonly version?: string;
19
+ readonly installedVersion?: string;
20
+ readonly trackedSource?: OpenClawSourceCategory;
21
+ readonly canInstall: boolean;
22
+ readonly canUpdate: boolean;
23
+ readonly canEnable: boolean;
24
+ readonly canRemove: boolean;
25
+ }
26
+ export type OpenClawSourceCategory = "official-package" | "custom-source" | "untracked";
27
+ export interface OpenClawDiscoveryInput {
28
+ readonly version?: string;
29
+ readonly list: unknown;
30
+ readonly inspect: unknown;
31
+ readonly nixMode?: boolean;
32
+ readonly hostSupported?: boolean;
33
+ readonly inspectMissing?: boolean;
34
+ }
35
+ export interface OpenClawPluginListSnapshot {
36
+ readonly plugin?: {
37
+ readonly enabled: boolean;
38
+ readonly requiredInstalled?: boolean;
39
+ };
40
+ }
41
+ export type OpenClawMutation = "configure" | "update" | "remove";
42
+ export declare function buildOpenClawCommand(action: OpenClawCommandAction, targetVersion?: string, paths?: OpenClawCommandPaths): OpenClawCommandSpec;
43
+ export declare function exactPackageSpec(targetVersion: string | undefined): string;
44
+ export declare function classifyOpenClawStatus(input: OpenClawDiscoveryInput): OpenClawPluginStatus;
45
+ export declare function planOpenClawMutation(status: OpenClawPluginStatus, mutation: OpenClawMutation, targetVersion: string): readonly OpenClawCommandAction[];
46
+ export declare function isSupportedOpenClawVersion(version: string): boolean;
47
+ export declare function parseOpenClawVersion(output: string): string | undefined;
48
+ export declare function parseOpenClawPluginList(value: unknown): OpenClawPluginListSnapshot | undefined;
49
+ //# sourceMappingURL=management.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"management.d.ts","sourceRoot":"","sources":["../src/management.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,135 @@
1
+ export const openClawPackageName = "@open-pets/openclaw";
2
+ export const openClawPluginId = "openpets";
3
+ export const openClawMinimumVersion = "2026.7.1";
4
+ export const openClawMaxStructuredOutputBytes = 256 * 1024;
5
+ export function buildOpenClawCommand(action, targetVersion, paths = { openclaw: "openclaw" }) {
6
+ const command = paths.openclaw;
7
+ switch (action) {
8
+ case "version": return { command, args: ["--version"] };
9
+ case "list": return { command, args: ["plugins", "list", "--json"] };
10
+ case "inspect": return { command, args: ["plugins", "inspect", openClawPluginId, "--json"] };
11
+ case "install": return { command, args: ["plugins", "install", `npm:${exactPackageSpec(targetVersion)}`] };
12
+ case "enable": return { command, args: ["plugins", "enable", openClawPluginId] };
13
+ case "update": return { command, args: ["plugins", "update", exactPackageSpec(targetVersion)] };
14
+ case "remove": return { command, args: ["plugins", "uninstall", openClawPluginId, "--force"] };
15
+ }
16
+ }
17
+ export function exactPackageSpec(targetVersion) {
18
+ if (!targetVersion || !/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(targetVersion))
19
+ throw new Error("OpenClaw package version is invalid.");
20
+ return `${openClawPackageName}@${targetVersion}`;
21
+ }
22
+ export function classifyOpenClawStatus(input) {
23
+ if (input.hostSupported === false)
24
+ return status("unsupported-host", "Unsupported host", "OpenClaw management is not supported on this host.");
25
+ if (input.nixMode === true)
26
+ return status("management-disabled", "Managed externally", "OpenClaw is running in Nix mode; its plugin files and configuration are managed externally.");
27
+ if (!input.version)
28
+ return status("unavailable", "OpenClaw unavailable", "OpenClaw was not found or did not report a version.");
29
+ if (!isSupportedOpenClawVersion(input.version))
30
+ return status("unsupported-host", "OpenClaw version unsupported", `OpenClaw ${input.version} is older than the supported ${openClawMinimumVersion}.`);
31
+ const listed = parseOpenClawPluginList(input.list);
32
+ if (!listed)
33
+ return status("indeterminate", "Status unavailable", "OpenClaw returned malformed plugin list status.", input.version);
34
+ const inspected = normalizeInspect(input.inspect);
35
+ if (!listed.plugin && !inspected) {
36
+ return input.inspectMissing
37
+ ? status("not-installed", "Not installed", "The OpenPets OpenClaw plugin is not installed.", input.version)
38
+ : status("indeterminate", "Status unavailable", "OpenClaw did not return a structured OpenPets plugin inspection.", input.version);
39
+ }
40
+ if (!inspected || inspected.invalid)
41
+ return status("invalid", "Invalid installation", "OpenClaw returned incomplete or invalid OpenPets plugin metadata.", input.version);
42
+ if (inspected.install === undefined)
43
+ return status("invalid", "Invalid installation", "OpenClaw did not report the installed OpenPets plugin source.", input.version, inspected.version, "untracked");
44
+ const sourceCategory = classifyInstallSource(inspected.install);
45
+ if (sourceCategory !== "official-package")
46
+ return status("conflict", "Installation conflict", "The openpets plugin id is owned by a different or untracked source.", input.version, inspected.version, sourceCategory);
47
+ if (inspected.status === "error" || listed.plugin?.requiredInstalled === false || inspected.requiredInstalled === false)
48
+ return status("invalid", "Invalid installation", "OpenClaw reports that the installed OpenPets plugin cannot load its dependencies.", input.version, inspected.version, sourceCategory);
49
+ const enabled = listed.plugin?.enabled ?? inspected.enabled;
50
+ if (enabled === undefined)
51
+ return status("invalid", "Invalid installation", "OpenClaw did not report whether the installed OpenPets plugin is enabled.", input.version, inspected.version, sourceCategory);
52
+ return status(enabled ? "installed-enabled" : "installed-disabled", enabled ? "Installed and enabled" : "Installed but disabled", enabled ? "OpenClaw has the owned OpenPets plugin enabled." : "OpenClaw has the owned OpenPets plugin installed but disabled.", input.version, inspected.version, sourceCategory);
53
+ }
54
+ export function planOpenClawMutation(status, mutation, targetVersion) {
55
+ if (status.state === "unsupported-host" || status.state === "management-disabled" || status.state === "unavailable" || status.state === "invalid" || status.state === "conflict" || status.state === "indeterminate")
56
+ return [];
57
+ if (mutation === "remove")
58
+ return status.state === "not-installed" ? [] : ["remove"];
59
+ if (mutation === "configure")
60
+ return status.state === "installed-enabled" && status.installedVersion === targetVersion ? [] : status.state === "installed-disabled" && status.installedVersion === targetVersion ? ["enable"] : [status.state === "not-installed" ? "install" : "update", "enable"];
61
+ return status.state === "installed-enabled" && status.installedVersion === targetVersion ? [] : [status.state === "not-installed" ? "install" : "update", "enable"];
62
+ }
63
+ export function isSupportedOpenClawVersion(version) {
64
+ return compareVersions(version, openClawMinimumVersion) >= 0;
65
+ }
66
+ export function parseOpenClawVersion(output) {
67
+ return output.match(/\b(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?)\b/)?.[1];
68
+ }
69
+ function exactPackageSource(value) {
70
+ if (typeof value !== "string")
71
+ return undefined;
72
+ return value.startsWith(`${openClawPackageName}@`) ? value : undefined;
73
+ }
74
+ function classifyInstallSource(value) {
75
+ if (!isRecord(value) || typeof value.source !== "string")
76
+ return "untracked";
77
+ if (value.source === "npm" && exactPackageSource(value.spec) !== undefined)
78
+ return "official-package";
79
+ return value.source === "npm" || value.source === "path" || value.source === "archive" || value.source === "clawhub" || value.source === "git" ? "custom-source" : "untracked";
80
+ }
81
+ export function parseOpenClawPluginList(value) {
82
+ if (!isRecord(value) || !Array.isArray(value.plugins))
83
+ return undefined;
84
+ const plugin = value.plugins.find((entry) => isRecord(entry) && (entry.id === openClawPluginId || entry.name === openClawPluginId));
85
+ if (plugin === undefined)
86
+ return {};
87
+ if (!isRecord(plugin) || typeof plugin.enabled !== "boolean")
88
+ return undefined;
89
+ const dependencyStatus = plugin.dependencyStatus;
90
+ if (dependencyStatus === undefined)
91
+ return { plugin: { enabled: plugin.enabled } };
92
+ if (!isRecord(dependencyStatus) || (dependencyStatus.requiredInstalled !== undefined && typeof dependencyStatus.requiredInstalled !== "boolean"))
93
+ return undefined;
94
+ return { plugin: { enabled: plugin.enabled, ...(typeof dependencyStatus.requiredInstalled === "boolean" ? { requiredInstalled: dependencyStatus.requiredInstalled } : {}) } };
95
+ }
96
+ function normalizeInspect(value) {
97
+ if (!isRecord(value))
98
+ return undefined;
99
+ const plugin = value.plugin;
100
+ if (!isRecord(plugin))
101
+ return undefined;
102
+ if (plugin.id !== openClawPluginId && plugin.name !== openClawPluginId)
103
+ return undefined;
104
+ const status = plugin.status;
105
+ const dependencyStatus = plugin.dependencyStatus;
106
+ const invalidDependencyStatus = dependencyStatus !== undefined && (!isRecord(dependencyStatus) || (dependencyStatus.requiredInstalled !== undefined && typeof dependencyStatus.requiredInstalled !== "boolean"));
107
+ return {
108
+ invalid: (typeof plugin.id !== "string" && typeof plugin.name !== "string") || (status !== undefined && status !== "loaded" && status !== "disabled" && status !== "error") || invalidDependencyStatus,
109
+ status: status === "loaded" || status === "disabled" || status === "error" ? status : undefined,
110
+ requiredInstalled: isRecord(dependencyStatus) && typeof dependencyStatus.requiredInstalled === "boolean" ? dependencyStatus.requiredInstalled : undefined,
111
+ enabled: typeof plugin.enabled === "boolean" ? plugin.enabled : undefined,
112
+ install: value.install,
113
+ version: typeof plugin.version === "string" ? plugin.version : isRecord(value.install) && typeof value.install.version === "string" ? value.install.version : isRecord(value.install) ? parseOwnedSpecVersion(value.install.spec) : undefined,
114
+ };
115
+ }
116
+ function parseOwnedSpecVersion(value) {
117
+ if (typeof value !== "string")
118
+ return undefined;
119
+ return value.startsWith(`${openClawPackageName}@`) ? value.slice(`${openClawPackageName}@`.length) : undefined;
120
+ }
121
+ function status(state, label, details, version, installedVersion, trackedSource) {
122
+ return { state, label, details, ...(version ? { version } : {}), ...(installedVersion ? { installedVersion } : {}), ...(trackedSource ? { trackedSource } : {}), canInstall: state === "not-installed", canUpdate: state === "not-installed" || state === "installed-disabled" || state === "installed-enabled", canEnable: state === "installed-disabled", canRemove: state === "installed-disabled" || state === "installed-enabled" };
123
+ }
124
+ function compareVersions(left, right) {
125
+ const a = left.split("-")[0].split(".").map(Number);
126
+ const b = right.split("-")[0].split(".").map(Number);
127
+ for (let index = 0; index < 3; index += 1)
128
+ if ((a[index] ?? 0) !== (b[index] ?? 0))
129
+ return (a[index] ?? 0) - (b[index] ?? 0);
130
+ return 0;
131
+ }
132
+ function isRecord(value) {
133
+ return typeof value === "object" && value !== null && !Array.isArray(value);
134
+ }
135
+ //# sourceMappingURL=management.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"management.js","sourceRoot":"","sources":["../src/management.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { type OpenPetsClient } from "@open-pets/client";
2
+ export type OpenClawActivity = "thinking" | "working";
3
+ export interface OpenPetsOpenClawRuntimeOptions {
4
+ readonly clientFactory?: () => OpenPetsClient;
5
+ readonly schedule?: (work: () => Promise<void>) => void;
6
+ readonly now?: () => number;
7
+ readonly random?: () => number;
8
+ readonly debug?: boolean;
9
+ readonly debugLog?: (code: OpenPetsDebugCode) => void;
10
+ readonly thinkingCooldownMs?: number;
11
+ readonly workingCooldownMs?: number;
12
+ readonly speechCooldownMs?: number;
13
+ }
14
+ export type OpenPetsDebugCode = "dispatch_failed" | "dispatch_pending" | "cooldown" | "schedule_failed";
15
+ export interface OpenPetsOpenClawRuntime {
16
+ readonly handleModelCallStarted: () => void;
17
+ readonly handleBeforeToolCall: () => void;
18
+ }
19
+ /**
20
+ * The OpenClaw hook callbacks intentionally accept no arguments. This keeps the
21
+ * observation boundary obvious: event payloads are never even read.
22
+ */
23
+ export declare function createOpenPetsOpenClawRuntime(options?: OpenPetsOpenClawRuntimeOptions): OpenPetsOpenClawRuntime;
24
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE9E,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,SAAS,CAAC;AAEtD,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,cAAc,CAAC;IAC9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IACxD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACtD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,MAAM,iBAAiB,GACzB,iBAAiB,GACjB,kBAAkB,GAClB,UAAU,GACV,iBAAiB,CAAC;AAEtB,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,IAAI,CAAC;IAC5C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,IAAI,CAAC;CAC3C;AAOD;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,GAAE,8BAAmC,GAAG,uBAAuB,CAgEnH"}
@@ -0,0 +1,80 @@
1
+ import { pickHookSpeech, validateHookSpeech } from "@open-pets/agent-events";
2
+ import { createOpenPetsClient } from "@open-pets/client";
3
+ const automaticTimeoutMs = 500;
4
+ const defaultThinkingCooldownMs = 10_000;
5
+ const defaultWorkingCooldownMs = 3_000;
6
+ const defaultSpeechCooldownMs = 20_000;
7
+ /**
8
+ * The OpenClaw hook callbacks intentionally accept no arguments. This keeps the
9
+ * observation boundary obvious: event payloads are never even read.
10
+ */
11
+ export function createOpenPetsOpenClawRuntime(options = {}) {
12
+ const clientFactory = options.clientFactory ?? (() => createOpenPetsClient({
13
+ remote: false,
14
+ connectTimeoutMs: automaticTimeoutMs,
15
+ responseTimeoutMs: automaticTimeoutMs,
16
+ }));
17
+ const schedule = options.schedule ?? defaultSchedule;
18
+ const now = options.now ?? Date.now;
19
+ const debugEnabled = options.debug === true || process.env.OPENPETS_OPENCLAW_DEBUG === "1";
20
+ const debugLog = options.debugLog ?? (() => { });
21
+ const cooldowns = { thinking: Number.NEGATIVE_INFINITY, working: Number.NEGATIVE_INFINITY };
22
+ let speechSentAt = Number.NEGATIVE_INFINITY;
23
+ let pending = false;
24
+ let client;
25
+ const report = (code) => {
26
+ if (debugEnabled)
27
+ debugLog(code);
28
+ };
29
+ const getClient = () => {
30
+ client ??= clientFactory();
31
+ return client;
32
+ };
33
+ const dispatch = (activity) => {
34
+ const timestamp = now();
35
+ const cooldownMs = activity === "thinking" ? options.thinkingCooldownMs ?? defaultThinkingCooldownMs : options.workingCooldownMs ?? defaultWorkingCooldownMs;
36
+ if (timestamp - cooldowns[activity] < cooldownMs) {
37
+ report("cooldown");
38
+ return;
39
+ }
40
+ if (pending) {
41
+ report("dispatch_pending");
42
+ return;
43
+ }
44
+ cooldowns[activity] = timestamp;
45
+ pending = true;
46
+ try {
47
+ schedule(async () => {
48
+ try {
49
+ const openPets = getClient();
50
+ if (activity === "thinking" && timestamp - speechSentAt >= (options.speechCooldownMs ?? defaultSpeechCooldownMs)) {
51
+ const speech = validateHookSpeech(pickHookSpeech("thinking", options.random));
52
+ speechSentAt = timestamp;
53
+ await openPets.say(speech, { reaction: "thinking" });
54
+ }
55
+ else {
56
+ await openPets.react(activity);
57
+ }
58
+ }
59
+ catch {
60
+ report("dispatch_failed");
61
+ }
62
+ finally {
63
+ pending = false;
64
+ }
65
+ });
66
+ }
67
+ catch {
68
+ pending = false;
69
+ report("schedule_failed");
70
+ }
71
+ };
72
+ return {
73
+ handleModelCallStarted: () => dispatch("thinking"),
74
+ handleBeforeToolCall: () => dispatch("working"),
75
+ };
76
+ }
77
+ function defaultSchedule(work) {
78
+ queueMicrotask(() => { void work(); });
79
+ }
80
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ {
2
+ "id": "openpets",
3
+ "name": "OpenPets",
4
+ "description": "Shows safe, categorical OpenClaw activity in the OpenPets companion.",
5
+ "activation": {
6
+ "onStartup": true
7
+ },
8
+ "configSchema": {
9
+ "type": "object",
10
+ "additionalProperties": false,
11
+ "properties": {}
12
+ }
13
+ }
package/package.json ADDED
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "@open-pets/openclaw",
3
+ "version": "3.5.0",
4
+ "description": "A local-only OpenClaw companion plugin for OpenPets.",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/alvinunreal/openpets.git",
9
+ "directory": "packages/openclaw"
10
+ },
11
+ "type": "module",
12
+ "main": "dist/index.js",
13
+ "types": "dist/index.d.ts",
14
+ "files": [
15
+ "dist",
16
+ "openclaw.plugin.json"
17
+ ],
18
+ "publishConfig": {
19
+ "access": "public"
20
+ },
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/index.d.ts",
24
+ "default": "./dist/index.js"
25
+ },
26
+ "./management": {
27
+ "types": "./dist/management.d.ts",
28
+ "default": "./dist/management.js"
29
+ },
30
+ "./package.json": "./package.json",
31
+ "./openclaw.plugin.json": "./openclaw.plugin.json"
32
+ },
33
+ "dependencies": {
34
+ "@open-pets/agent-events": "3.5.0",
35
+ "@open-pets/client": "3.5.0"
36
+ },
37
+ "peerDependencies": {
38
+ "openclaw": ">=2026.7.1"
39
+ },
40
+ "peerDependenciesMeta": {
41
+ "openclaw": {
42
+ "optional": true
43
+ }
44
+ },
45
+ "devDependencies": {
46
+ "@types/node": "^25.6.2",
47
+ "typescript": "^6.0.3"
48
+ },
49
+ "openclaw": {
50
+ "extensions": [
51
+ "./dist/index.js"
52
+ ],
53
+ "compat": {
54
+ "pluginApi": ">=2026.7.1",
55
+ "minGatewayVersion": "2026.7.1"
56
+ },
57
+ "build": {
58
+ "openclawVersion": "2026.7.1",
59
+ "pluginSdkVersion": "2026.7.1",
60
+ "bundledDist": false
61
+ }
62
+ },
63
+ "scripts": {
64
+ "test": "node dist/check-openclaw.js",
65
+ "check": "pnpm typecheck && pnpm build && pnpm test",
66
+ "typecheck": "tsc --noEmit",
67
+ "build": "tsc"
68
+ }
69
+ }