mlclaw 0.3.1 → 0.3.4

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/dist/mlclaw.mjs CHANGED
@@ -14836,18 +14836,15 @@ function sseDataToText(raw) {
14836
14836
  import fs11 from "node:fs";
14837
14837
  import path12 from "node:path";
14838
14838
  import { fileURLToPath as fileURLToPath2 } from "node:url";
14839
- var DEFAULT_OPENCLAW_VERSION = "2026.7.1-beta.5";
14840
- var DEFAULT_BROKERKIT_PLUGIN_VERSION = "0.1.0";
14841
- var DEFAULT_BROKERKIT_VERSION = "fcfc5f2304436d952b18e7c9583bb378d1952776";
14839
+ var DEFAULT_OPENCLAW_VERSION = "2026.7.1";
14840
+ var DEFAULT_BROKERKIT_PLUGIN_VERSION = "0.2.1";
14841
+ var DEFAULT_BROKERKIT_VERSION = "hf-broker/v0.1.0";
14842
14842
  var DEFAULT_RUNTIME_IMAGE_REPOSITORY = "ghcr.io/osolmaz/mlclaw";
14843
14843
  var PACKAGE_METADATA = readPackageMetadata();
14844
14844
  var PACKAGE_VERSION = packageString("version", "unknown");
14845
14845
  var OPENCLAW_VERSION = packageConfigString("openclawVersion", DEFAULT_OPENCLAW_VERSION);
14846
14846
  var OPENCLAW_BASE_IMAGE = `ghcr.io/openclaw/openclaw:${OPENCLAW_VERSION}`;
14847
- var BROKERKIT_PLUGIN_VERSION = packageConfigString(
14848
- "brokerkitPluginVersion",
14849
- DEFAULT_BROKERKIT_PLUGIN_VERSION
14850
- );
14847
+ var BROKERKIT_PLUGIN_VERSION = packageConfigString("brokerkitPluginVersion", DEFAULT_BROKERKIT_PLUGIN_VERSION);
14851
14848
  var BROKERKIT_VERSION = packageConfigString("brokerkitVersion", DEFAULT_BROKERKIT_VERSION);
14852
14849
  var RUNTIME_IMAGE_REPOSITORY = packageConfigString("runtimeImageRepository", DEFAULT_RUNTIME_IMAGE_REPOSITORY);
14853
14850
  var DEFAULT_RUNTIME_IMAGE_TAG = `${PACKAGE_VERSION}-openclaw-${OPENCLAW_VERSION}`;
@@ -14955,7 +14952,6 @@ async function generateSpaceRepo(sourceDir, outDir, options = {}) {
14955
14952
  ["dist/hf-tooling-seed.js", "runtime/hf-tooling-seed.js"],
14956
14953
  ["dist/mlclaw-space-runtime.js", "runtime/mlclaw-space-runtime.js"],
14957
14954
  ["entrypoint.sh", "runtime/entrypoint.sh"],
14958
- ["hf-broker.scope.json", "runtime/hf-broker.scope.json"],
14959
14955
  ["openclaw.default.json", "runtime/openclaw.default.json"],
14960
14956
  ["scripts/configure-huggingface-model.mjs", "runtime/scripts/configure-huggingface-model.mjs"],
14961
14957
  ["scripts/configure-telegram.mjs", "runtime/scripts/configure-telegram.mjs"],
@@ -14965,6 +14961,9 @@ async function generateSpaceRepo(sourceDir, outDir, options = {}) {
14965
14961
  for (const [from, to] of copies) {
14966
14962
  await copyExisting(path13.join(sourceDir, from), path13.join(outDir, to));
14967
14963
  }
14964
+ const hfLogoPng = await fs12.readFile(path13.join(sourceDir, "assets/hf-logo.png"));
14965
+ await fs12.writeFile(path13.join(outDir, "assets/hf-logo.png.base64"), `${hfLogoPng.toString("base64")}
14966
+ `, "utf8");
14968
14967
  await fs12.writeFile(
14969
14968
  path13.join(outDir, "Dockerfile"),
14970
14969
  options.runtimeImage ? imageDockerfile(options.runtimeImage) : bundledDockerfile(),
@@ -14982,15 +14981,25 @@ ARG BROKERKIT_VERSION=${BROKERKIT_VERSION}
14982
14981
  FROM golang:1.26.5-bookworm AS hf-broker-build
14983
14982
  ARG BROKERKIT_VERSION
14984
14983
  RUN git init /src \\
14985
- && git -C /src fetch --depth=1 https://github.com/osolmaz/brokerkit.git "$BROKERKIT_VERSION" \\
14986
- && git -C /src checkout --detach FETCH_HEAD \\
14987
- && test "$(git -C /src rev-parse HEAD)" = "$BROKERKIT_VERSION" \\
14984
+ && git -C /src fetch --depth=1 https://github.com/osolmaz/brokerkit.git "refs/tags/$BROKERKIT_VERSION:refs/tags/$BROKERKIT_VERSION" \\
14985
+ && git -C /src checkout --detach "$BROKERKIT_VERSION" \\
14986
+ && test "$(git -C /src rev-parse "refs/tags/$BROKERKIT_VERSION^{commit}")" = "$(git -C /src rev-parse HEAD)" \\
14988
14987
  && cd /src \\
14989
- && GOWORK=off go build -trimpath -o /out/hf-broker ./brokers/huggingface/cmd/hf-broker
14988
+ && GOWORK=off go build -trimpath -o /out/hf-broker ./brokers/huggingface/cmd/hf-broker \\
14989
+ && /out/hf-broker policy render \\
14990
+ --preset request-all-agent-operations \\
14991
+ --client default \\
14992
+ --profile-out /out/hf-broker.policy-profile.json \\
14993
+ --output /out/hf-broker.scope.json \\
14994
+ --manifest-out /out/hf-broker.policy-manifest.json \\
14995
+ && /out/hf-broker doctor policy \\
14996
+ --profile /out/hf-broker.policy-profile.json \\
14997
+ --scope /out/hf-broker.scope.json \\
14998
+ --manifest /out/hf-broker.policy-manifest.json
14990
14999
 
14991
15000
  FROM node:24-bookworm-slim AS brokerkit-plugin-build
14992
15001
  ARG BROKERKIT_VERSION
14993
- RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates git && rm -rf /var/lib/apt/lists/* && git init /src && git -C /src fetch --depth=1 https://github.com/osolmaz/brokerkit.git "$BROKERKIT_VERSION" && git -C /src checkout --detach FETCH_HEAD && test "$(git -C /src rev-parse HEAD)" = "$BROKERKIT_VERSION"
15002
+ RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates git && rm -rf /var/lib/apt/lists/* && git init /src && git -C /src fetch --depth=1 https://github.com/osolmaz/brokerkit.git "refs/tags/$BROKERKIT_VERSION:refs/tags/$BROKERKIT_VERSION" && git -C /src checkout --detach "$BROKERKIT_VERSION" && test "$(git -C /src rev-parse "refs/tags/$BROKERKIT_VERSION^{commit}")" = "$(git -C /src rev-parse HEAD)"
14994
15003
  WORKDIR /src
14995
15004
  RUN corepack enable && pnpm install --frozen-lockfile && pnpm --filter openclaw-brokerkit build && pnpm --filter openclaw-brokerkit pack --pack-destination /out
14996
15005
 
@@ -15024,12 +15033,14 @@ COPY --chown=node:node runtime/hf-state-sync.js /app/hf-state-sync.js
15024
15033
  COPY --chown=node:node runtime/hf-tooling-seed.js /app/hf-tooling-seed.js
15025
15034
  COPY --chown=node:node runtime/mlclaw-space-runtime.js /app/mlclaw-space-runtime.js
15026
15035
  COPY --from=hf-broker-build /out/hf-broker /usr/local/bin/hf-broker
15027
- COPY runtime/hf-broker.scope.json /app/hf-broker.scope.json
15036
+ COPY --from=hf-broker-build /out/hf-broker.scope.json /app/hf-broker.scope.json
15037
+ COPY --from=hf-broker-build /out/hf-broker.policy-profile.json /app/hf-broker.policy-profile.json
15038
+ COPY --from=hf-broker-build /out/hf-broker.policy-manifest.json /app/hf-broker.policy-manifest.json
15028
15039
  COPY --chown=node:node runtime/openclaw.default.json /app/openclaw.default.json
15029
15040
  COPY --chown=node:node runtime/entrypoint.sh /app/entrypoint.sh
15030
15041
  COPY --chown=node:node runtime/scripts/ /app/scripts/
15031
15042
  COPY --chown=node:node assets/ /app/assets/
15032
- RUN chmod +x /app/entrypoint.sh
15043
+ RUN base64 -d /app/assets/hf-logo.png.base64 > /app/assets/hf-logo.png && rm /app/assets/hf-logo.png.base64 && chown node:node /app/assets/hf-logo.png && chmod +x /app/entrypoint.sh
15033
15044
 
15034
15045
  ENV PORT=7860
15035
15046
  ENV MLCLAW_OPENCLAW_PORT=7861
package/entrypoint.sh CHANGED
@@ -29,7 +29,9 @@ prepare_hf_broker() {
29
29
  local operator_brokers_file="$HF_BROKER_RUN_DIR/operator-brokers.json"
30
30
  local agent_secret operator_secret
31
31
 
32
- install -d -m 0750 -o root -g hf-broker "$HF_BROKER_RUN_DIR"
32
+ # OpenClaw may traverse this directory only to its own 0600 credential file.
33
+ # It cannot list the directory or read any broker-owned credential.
34
+ install -d -m 0711 -o root -g hf-broker "$HF_BROKER_RUN_DIR"
33
35
  agent_secret="$(od -An -N48 -tx1 /dev/urandom | tr -d ' \n')"
34
36
  operator_secret="$(od -An -N48 -tx1 /dev/urandom | tr -d ' \n')"
35
37
  printf '%s\n' "$broker_token" > "$token_file"
@@ -39,6 +41,7 @@ prepare_hf_broker() {
39
41
  printf 'mlclaw-control = %s\n' "$operator_secret" > "$broker_operator_secrets"
40
42
  printf '{"version":1,"brokers":[{"id":"hf-broker","label":"Hugging Face","url":"http://127.0.0.1:7864","token_file":"%s"}]}\n' "$operator_secret_file" > "$operator_brokers_file"
41
43
  chown hf-broker:hf-broker "$token_file" "$broker_agent_secrets" "$broker_operator_secrets"
44
+ chown "$OPENCLAW_IDENTITY" "$agent_secret_file"
42
45
  chmod 0600 "$token_file" "$agent_secret_file" "$operator_secret_file" "$broker_agent_secrets" "$broker_operator_secrets" "$operator_brokers_file"
43
46
 
44
47
  if [ -z "${MLCLAW_STATE_MOUNT_DIR:-}" ]; then
@@ -65,6 +68,13 @@ restore_protected_state() {
65
68
  fi
66
69
  install -d -m 0700 -o root -g root "$PROTECTED_STATE_DIR/control"
67
70
  install -d -m 0700 -o hf-broker -g hf-broker "$HF_BROKER_STATE_DIR"
71
+ rm -rf -- \
72
+ "$HF_BROKER_STATE_DIR/grants" \
73
+ "$HF_BROKER_STATE_DIR/operations" \
74
+ "$HF_BROKER_STATE_DIR/plans"
75
+ rm -f -- \
76
+ "$HF_BROKER_STATE_DIR/grants.json" \
77
+ "$HF_BROKER_STATE_DIR/operations.json"
68
78
  chown -R root:root "$PROTECTED_STATE_DIR/control"
69
79
  chown -R hf-broker:hf-broker "$HF_BROKER_STATE_DIR"
70
80
  chmod 0710 "$PROTECTED_STATE_DIR"
@@ -77,22 +87,14 @@ start_hf_broker() {
77
87
  fi
78
88
 
79
89
  install -d -m 0700 -o hf-broker -g hf-broker "$HF_BROKER_STATE_DIR"
80
- install -d -m 0700 -o hf-broker -g hf-broker "$HF_BROKER_STATE_DIR/grants"
81
- if [ ! -e "$HF_BROKER_STATE_DIR/grants/grants.json" ]; then
82
- printf '{"grants":[]}\n' > "$HF_BROKER_STATE_DIR/grants/grants.json"
83
- chown hf-broker:hf-broker "$HF_BROKER_STATE_DIR/grants/grants.json"
84
- chmod 0600 "$HF_BROKER_STATE_DIR/grants/grants.json"
85
- fi
86
90
  chown -R hf-broker:hf-broker "$HF_BROKER_STATE_DIR"
87
91
  chmod 0700 "$HF_BROKER_STATE_DIR"
88
92
 
89
93
  HF_BROKER_HF_TOKEN_FILE="$HF_BROKER_RUN_DIR/hf-token" \
90
94
  HF_BROKER_SECRETS_FILE="$HF_BROKER_RUN_DIR/agent-secrets.conf" \
91
95
  HF_BROKER_OPERATOR_SECRETS_FILE="$HF_BROKER_RUN_DIR/operator-secrets.conf" \
92
- HF_BROKER_BIND_ADDR=127.0.0.1 \
93
- HF_BROKER_PORT=7863 \
94
- HF_BROKER_OPERATOR_BIND_ADDR=127.0.0.1 \
95
- HF_BROKER_OPERATOR_PORT=7864 \
96
+ HF_BROKER_AGENT_ENDPOINT=tcp://127.0.0.1:7863 \
97
+ HF_BROKER_OPERATOR_ENDPOINT=tcp://127.0.0.1:7864 \
96
98
  HF_BROKER_SCOPE_FILE=/app/hf-broker.scope.json \
97
99
  HF_BROKER_STATE_DIR="$HF_BROKER_STATE_DIR" \
98
100
  gosu hf-broker:hf-broker /usr/local/bin/hf-broker &
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "mlclaw",
3
- "version": "0.3.1",
3
+ "version": "0.3.4",
4
4
  "license": "MIT",
5
5
  "config": {
6
- "openclawVersion": "2026.7.1-beta.5",
7
- "brokerkitVersion": "fcfc5f2304436d952b18e7c9583bb378d1952776",
8
- "brokerkitPluginVersion": "0.1.0",
6
+ "openclawVersion": "2026.7.1",
7
+ "brokerkitVersion": "hf-broker/v0.1.0",
8
+ "brokerkitPluginVersion": "0.2.1",
9
9
  "runtimeImageRepository": "ghcr.io/osolmaz/mlclaw"
10
10
  },
11
11
  "repository": {
@@ -30,7 +30,6 @@
30
30
  "dist/mlclaw-space-runtime.js",
31
31
  "Dockerfile",
32
32
  "entrypoint.sh",
33
- "hf-broker.scope.json",
34
33
  "mlclaw.ps1",
35
34
  "mlclaw.sh",
36
35
  "LICENSE",
@@ -56,9 +55,9 @@
56
55
  "pack:check": "node scripts/check-package.mjs",
57
56
  "prepack": "npm run build",
58
57
  "check:secrets": "node scripts/check-secrets.mjs",
59
- "format": "prettier --check eslint.config.mjs vitest.config.ts vitest.stryker.config.ts package.json README.md src/hf-state-sync/archive.ts src/hf-state-sync/cli.ts src/hf-state-sync/paths.ts src/hf-state-sync/prepare.ts src/hf-state-sync/stage-worker.ts src/hf-state-sync/supervise.ts src/mlclaw-space-runtime/delegated-brokerkit.ts src/mlclaw-space-runtime/operator-brokers.ts src/mlclaw-space-runtime/openclaw-config.ts src/mlclaw-space-runtime/app.ts src/mlclaw-space-runtime/config.ts src/mlclaw-space-runtime/openai-credentials.ts src/mlclaw-space-runtime/server.ts src/mlclaw-space-runtime/shell.ts src/mlclaw-control-ui/src/main.tsx src/mlclaw-control-ui/src/styles.css src/mlclaw-control-ui/src/components/ui/utils.ts src/mlclaw/git.ts test/hf-state-sync.archive.test.ts test/hf-state-sync.roundtrip.test.ts test/hf-state-sync.supervise.test.ts test/mlclaw.bundle.test.ts test/mlclaw.delegated-brokerkit.test.ts test/mlclaw.generate-space.test.ts test/mlclaw.operator-brokers.test.ts test/mlclaw.runtime-image.test.ts test/mlclaw.space-runtime.test.ts docs/operator-brokers-config.md",
60
- "format:write": "prettier --write eslint.config.mjs vitest.config.ts vitest.stryker.config.ts package.json README.md src/hf-state-sync/archive.ts src/hf-state-sync/cli.ts src/hf-state-sync/paths.ts src/hf-state-sync/prepare.ts src/hf-state-sync/stage-worker.ts src/hf-state-sync/supervise.ts src/mlclaw-space-runtime/delegated-brokerkit.ts src/mlclaw-space-runtime/operator-brokers.ts src/mlclaw-space-runtime/openclaw-config.ts src/mlclaw-space-runtime/app.ts src/mlclaw-space-runtime/config.ts src/mlclaw-space-runtime/openai-credentials.ts src/mlclaw-space-runtime/server.ts src/mlclaw-space-runtime/shell.ts src/mlclaw-control-ui/src/main.tsx src/mlclaw-control-ui/src/styles.css src/mlclaw-control-ui/src/components/ui/utils.ts src/mlclaw/git.ts test/hf-state-sync.archive.test.ts test/hf-state-sync.roundtrip.test.ts test/hf-state-sync.supervise.test.ts test/mlclaw.bundle.test.ts test/mlclaw.delegated-brokerkit.test.ts test/mlclaw.generate-space.test.ts test/mlclaw.operator-brokers.test.ts test/mlclaw.runtime-image.test.ts test/mlclaw.space-runtime.test.ts docs/operator-brokers-config.md",
61
- "lint": "eslint --max-warnings 0 src/mlclaw-space-runtime/delegated-brokerkit.ts src/mlclaw-space-runtime/operator-brokers.ts src/mlclaw-space-runtime/openclaw-config.ts",
58
+ "format": "prettier --check eslint.config.mjs vitest.config.ts vitest.stryker.config.ts package.json README.md src/hf-state-sync/archive.ts src/hf-state-sync/cli.ts src/hf-state-sync/paths.ts src/hf-state-sync/prepare.ts src/hf-state-sync/stage-worker.ts src/hf-state-sync/supervise.ts src/mlclaw-space-runtime/delegated-brokerkit.ts src/mlclaw-space-runtime/delegated-revisions.ts src/mlclaw-space-runtime/operator-brokers.ts src/mlclaw-space-runtime/openclaw-config.ts src/mlclaw-space-runtime/app.ts src/mlclaw-space-runtime/config.ts src/mlclaw-space-runtime/openai-credentials.ts src/mlclaw-space-runtime/server.ts src/mlclaw-space-runtime/shell.ts src/mlclaw-control-ui/src/main.tsx src/mlclaw-control-ui/src/styles.css src/mlclaw-control-ui/src/components/ui/utils.ts src/mlclaw/git.ts test/hf-state-sync.archive.test.ts test/hf-state-sync.roundtrip.test.ts test/hf-state-sync.supervise.test.ts test/mlclaw.brokerkit-agent-tools.test.ts test/mlclaw.bundle.test.ts test/mlclaw.delegated-brokerkit.test.ts test/mlclaw.generate-space.test.ts test/mlclaw.operator-brokers.test.ts test/mlclaw.runtime-image.test.ts test/mlclaw.space-runtime.test.ts docs/operator-brokers-config.md",
59
+ "format:write": "prettier --write eslint.config.mjs vitest.config.ts vitest.stryker.config.ts package.json README.md src/hf-state-sync/archive.ts src/hf-state-sync/cli.ts src/hf-state-sync/paths.ts src/hf-state-sync/prepare.ts src/hf-state-sync/stage-worker.ts src/hf-state-sync/supervise.ts src/mlclaw-space-runtime/delegated-brokerkit.ts src/mlclaw-space-runtime/delegated-revisions.ts src/mlclaw-space-runtime/operator-brokers.ts src/mlclaw-space-runtime/openclaw-config.ts src/mlclaw-space-runtime/app.ts src/mlclaw-space-runtime/config.ts src/mlclaw-space-runtime/openai-credentials.ts src/mlclaw-space-runtime/server.ts src/mlclaw-space-runtime/shell.ts src/mlclaw-control-ui/src/main.tsx src/mlclaw-control-ui/src/styles.css src/mlclaw-control-ui/src/components/ui/utils.ts src/mlclaw/git.ts test/hf-state-sync.archive.test.ts test/hf-state-sync.roundtrip.test.ts test/hf-state-sync.supervise.test.ts test/mlclaw.brokerkit-agent-tools.test.ts test/mlclaw.bundle.test.ts test/mlclaw.delegated-brokerkit.test.ts test/mlclaw.generate-space.test.ts test/mlclaw.operator-brokers.test.ts test/mlclaw.runtime-image.test.ts test/mlclaw.space-runtime.test.ts docs/operator-brokers-config.md",
60
+ "lint": "eslint --max-warnings 0 src/mlclaw-space-runtime/delegated-brokerkit.ts src/mlclaw-space-runtime/delegated-revisions.ts src/mlclaw-space-runtime/operator-brokers.ts src/mlclaw-space-runtime/openclaw-config.ts",
62
61
  "coverage": "vitest run --coverage",
63
62
  "dry": "slophammer-ts dry .",
64
63
  "mutate": "stryker run --dryRunOnly",
@@ -1,38 +0,0 @@
1
- {
2
- "rules": [
3
- {
4
- "id": "mlclaw-read-repositories",
5
- "effect": "allow",
6
- "clients": ["default"],
7
- "operations": ["repo.list", "repo.metadata.read", "repo.contents.read", "git.fetch"],
8
- "targets": [
9
- {"kind": "repo", "type": "*", "owner": "*", "name": "*"}
10
- ]
11
- },
12
- {
13
- "id": "mlclaw-append-repositories",
14
- "effect": "allow",
15
- "clients": ["default"],
16
- "operations": ["git.push.append"],
17
- "targets": [
18
- {"kind": "repo", "type": "*", "owner": "*", "name": "*"}
19
- ]
20
- },
21
- {
22
- "id": "mlclaw-request-protected-repository-writes",
23
- "effect": "request",
24
- "clients": ["default"],
25
- "operations": ["git.push.force", "git.ref.delete", "git.tag.update"],
26
- "targets": [
27
- {"kind": "repo", "type": "*", "owner": "*", "name": "*"}
28
- ],
29
- "grant_policy": {
30
- "default_minutes": 5,
31
- "max_minutes": 60,
32
- "request_ttl_minutes": 15,
33
- "default_max_uses": 1,
34
- "max_uses": 3
35
- }
36
- }
37
- ]
38
- }