提交

166 次代码提交

作者 SHA1 备注 提交日期
Qingshan Chen d3b766b094 update wechat image 2026-06-05 16:30:47 +08:00
Qingshan Chen 3eabe0374f Merge pull request #135 from Li-Day-Day/main
Release / Prepare Scheduled Release (push) Has been skipped
Release / Publish Release (push) Failing after 1s
feat: manage instances with Deployments
v2026.6.5
2026-06-05 10:48:31 +08:00
litiantian03 95d6faad73 fix: resource skill upload and team member numbering 2026-06-02 16:22:11 +08:00
litiantian03 7fa5c94093 feat(k8s): manage instance workloads with Deployments
Create instance workloads as single-replica Deployments instead of bare Pods so Kubernetes can recreate Pods after deletion, eviction, or node/runtime failures.
Update stop/delete and orphan cleanup to remove Deployments before residual Pods, and improve status sync to keep instances creating while a Deployment exists without a Pod and avoid stale Failed/Evicted Pods affecting instance state.
2026-06-02 10:14:23 +08:00
litiantian03 29375f04f2 fix(instance): mount Hermes/desktop PVCs at /config with legacy layout migration 2026-06-02 09:15:59 +08:00
Qingshan Chen 0d8cdd8463 Merge pull request #131 from Li-Day-Day/main
Release / Prepare Scheduled Release (push) Has been skipped
Release / Publish Release (push) Failing after 0s
Tune desktop clipboard and shared memory defaults
v2026.5.29
2026-05-28 16:43:43 +08:00
litiantian03 6f02978997 Tune desktop clipboard and shared memory defaults
- Disable Webtop/KasmVNC bidirectional clipboard sync by default to reduce accidental paste during remote desktop input
- Derive desktop runtime /dev/shm defaults from instance memory: 1G for 4G, 2G for 8G, and 4G for 12G+
- Preserve explicit SHM_SIZE_GB overrides and keep shell runtime behavior unchanged
- Add tests for openclaw/hermes clipboard policy and /dev/shm default selection
- Support multiple OpenClaw channel resources and fix alias injection
2026-05-28 16:25:24 +08:00
Qingshan Chen 011d821466 Merge pull request #130 from Yuan-lab-LLM/Iamlovingit-patch-1
Release / Prepare Scheduled Release (push) Has been skipped
Release / Publish Release (push) Failing after 1s
update wechat group image
v2026.5.27
2026-05-27 10:19:31 +08:00
Qingshan Chen 8d79e6255f update wechat group image
update
2026-05-27 09:46:43 +08:00
Qingshan Chen 4cd4c84953 Merge pull request #128 from Li-Day-Day/main
feat: add Bundle Skills, WeCom channel, configurable archive limit
2026-05-27 09:43:14 +08:00
litiantian03 561b263c8b feat: add Bundle Skills, WeCom channel, configurable archive limit, fix #123
- Bundle Skills: attach skills to config bundles, auto-resolve on creation. Migration 022 adds openclaw_config_bundle_skills table. Fix #123
- WeCom channel: wecom connector with botId/secret/dmPolicy/allowFrom
- CLAWMANAGER_WORKSPACE_ARCHIVE_MAX_MIB controls archive size limit, synced to nginx client_max_body_size via start.sh
- Update deployment manifests, i18n, and frontend UI
2026-05-26 17:17:07 +08:00
litiantian03 a64fa20997 feat(team): add paginated task/event history and improve chat deduplication
Add cursor-based GET /teams/:id/tasks and GET /teams/:id/events APIs.
Team detail page loads older messages on scroll/click and deduplicates
collaboration chat messages with improved thread ordering.
2026-05-25 10:29:25 +08:00
Qingshan Chen dae2f4e604 Merge pull request #126 from Iamlovingit/codex/shell
Release / Prepare Scheduled Release (push) Has been skipped
Release / Publish Release (push) Failing after 1s
feat: add openclaw shell runtime preset
v2026.5.23
2026-05-22 19:27:05 +08:00
Qingshan Chen d47c5f0b8c feat: add openclaw shell runtime preset 2026-05-22 19:21:11 +08:00
Qingshan Chen ab112f9ccb Merge pull request #124 from Iamlovingit/codex/shell
feat: add shell runtime and harden team shared storage
2026-05-22 15:22:33 +08:00
Qingshan Chen c192908d95 feat: add shell runtime and harden team shared storage 2026-05-22 15:06:59 +08:00
Qingshan Chen 8bfd6340e9 Merge remote-tracking branch 'upstream/main' into codex/shell
# Conflicts:
#	backend/internal/services/instance_service.go
#	backend/internal/services/k8s/pod_service.go
#	backend/internal/services/k8s/pod_service_test.go
#	frontend/src/components/InstanceAccess.tsx
2026-05-18 22:12:46 +08:00
Qingshan Chen 156b5bc328 Merge pull request #122 from Li-Day-Day/main
Release / Prepare Scheduled Release (push) Has been skipped
Release / Publish Release (push) Failing after 1s
Modify readme
v2026.5.19
2026-05-18 22:03:13 +08:00
litiantian03 d9f0d27934 Modify readme 2026-05-18 21:32:10 +08:00
Qingshan Chen d2164f3c40 Merge pull request #121 from Li-Day-Day/main
feat(team): Multi-agent Team control plane across runtimes (Leader-mediated collaboration)
2026-05-18 17:21:02 +08:00
litiantian03 3fe1418d5e feat(team): Multi-agent Team control plane across runtimes (Leader-mediated collaboration)
- Add migrations plus Team/Member/Task/Event APIs; Redis Streams consumer projects inbox/events into DB as source of truth
- Inject Team Secret (Redis URL, team token) via envFrom; shared RWX PVC at /team; sync ConfigMap roster to /team/team.json
- Create member Pods through InstanceService; extend K8s (PVC/Secret/Pod/ConfigMap); stale-task sweep and Team/member deletion with cleanup
- Add /teams, /teams/new, /teams/🆔 creation wizard (roster, presets, shared env/OpenClaw plan), per-member desktops, collaboration timeline, debug dispatch (defaults to Leader when target omitted)
2026-05-18 16:30:26 +08:00
Qingshan Chen 7ceefbf6a8 shell init 2026-05-13 20:19:44 +08:00
Qingshan Chen a52d301d75 Merge pull request #119 from Iamlovingit/codex/bugfix
Release / Prepare Scheduled Release (push) Has been skipped
Release / Publish Release (push) Failing after 0s
fix: paginate user management list
v2026.5.13
2026-05-12 22:59:17 +08:00
Qingshan Chen a3bbedbbdc fix: paginate user management list 2026-05-12 20:35:37 +08:00
Qingshan Chen e99c49f3e2 Merge pull request #116 from Iamlovingit/wechat
update wechat jpg
2026-05-08 19:19:33 +08:00
Qingshan Chen 9818085f59 update wechat jpg 2026-05-08 19:14:12 +08:00
Qingshan Chen 936221c2c7 Merge pull request #112 from Li-Day-Day/main
Release / Prepare Scheduled Release (push) Has been skipped
Release / Publish Release (push) Failing after 0s
fix: resolve OpenClaw upload crash with least-privilege pod settings
v2026.5.8
2026-05-07 17:37:51 +08:00
litiantian03 c0c6b763af fix build issue 2026-05-07 11:00:33 +08:00
litiantian03 054a2b9b44 fix: resolve OpenClaw upload crash with least-privilege pod settings
- add configurable /dev/shm mounts for instance pods with a bounded SHM_SIZE_GB override
- introduce pod security modes and use chromium-compat for OpenClaw instead of privileged
- keep privileged mode only as an explicit admin fallback
- remove the node-level clawmanager-node-tuner manifest to avoid changing host security defaults
- fix k3s HTTPS and API/proxy service port mappings
- add tests for SHM parsing and pod security mode behavior
2026-05-07 10:34:37 +08:00
Qingshan Chen 6e512dc93a Merge pull request #111 from hippoley/fix/pv-hostpath-persistent
Release / Prepare Scheduled Release (push) Has been skipped
Release / Publish Release (push) Failing after 0s
fix: use persistent path for PV hostPath instead of /tmp/
v2026.5.7
2026-05-07 09:53:43 +08:00
hippoley 963a1c378e fix: use persistent path for PV hostPath instead of /tmp/
BREAKING: PV hostPath prefix changed from /tmp/clawreef/ to /data/clawreef/

Problem:
- PV hostPath was hardcoded to /tmp/clawreef/user-{id}/instance-{id}
- /tmp/ is a volatile directory that may be cleaned by systemd-tmpfiles
  or cleared on node reboot (depending on OS configuration)
- This caused data loss when worker-02 was rebooted by the hypervisor

Fix:
- Add configurable hostPathPrefix to RuntimePVCConfig (default: /data/clawreef)
- Support K8S_PV_HOST_PATH_PREFIX environment variable override
- Update deployment manifests to use /data/clawmanager/ for MySQL and MinIO

Migration:
- Existing deployments should move data from /tmp/clawreef/ to /data/clawreef/
  and create a symlink for backward compatibility:
    mkdir -p /data/clawreef
    mv /tmp/clawreef/* /data/clawreef/
    rm -rf /tmp/clawreef && ln -s /data/clawreef /tmp/clawreef
2026-05-07 07:57:44 +08:00
Qingshan Chen 0d354455d2 Merge pull request #104 from Iamlovingit/delinstance
Release / Prepare Scheduled Release (push) Has been skipped
Release / Publish Release (push) Failing after 0s
fix: make instance deletion asynchronous
v2026.5.1
2026-04-30 19:31:05 +08:00
Qingshan Chen 55e9edfb83 fix: make instance deletion asynchronous 2026-04-30 19:24:17 +08:00
Qingshan Chen bd2aa8ca08 Merge pull request #103 from Iamlovingit/readmeupdate
update wechat image
2026-04-30 17:27:26 +08:00
Qingshan Chen a9fc5e2cf8 update wechat image 2026-04-30 17:21:46 +08:00
Qingshan Chen 04b1dd3fbd Merge pull request #100 from Iamlovingit/readmeupdate
Release / Prepare Scheduled Release (push) Has been skipped
Release / Publish Release (push) Failing after 1s
docs: add runtime previews to localized READMEs
v2026.4.30
2026-04-29 17:29:38 +08:00
Qingshan Chen 6c8bf5180c fix: normalize agents runtime image references 2026-04-29 17:24:49 +08:00
Qingshan Chen 7cfed85ae8 docs: add runtime previews to localized READMEs 2026-04-29 16:39:52 +08:00
Qingshan Chen 58c35f6ecd Merge pull request #88 from naiqus/fix/openclaw-channel-editor-field-dropping
fix: channel editors silently dropping unknown fields on save
2026-04-29 15:14:37 +08:00
Qingshan Chen 36def64226 Merge pull request #99 from Iamlovingit/hermes
feat: add hermes runtime integration
2026-04-29 15:13:26 +08:00
Qingshan Chen e2613b4c45 feat: add hermes runtime integration 2026-04-29 15:00:57 +08:00
Suqian Zhang 08dce2a29d fix: remove duplicate test function declarations
TestNormalizeOpenClawResourceContentPreservesUnknownChannelFields and
TestNormalizeOpenClawResourceContentPreservesFeishuSiblingAccounts were
declared twice causing build failure.
2026-04-27 23:48:07 +02:00
Suqian Zhang 032c038275 Merge branch 'fix/openclaw-channel-editor-field-dropping' of github.com:naiqus/ClawManager into fix/openclaw-channel-editor-field-dropping 2026-04-27 23:08:58 +02:00
Suqian Zhang c39df72d51 fix(openclaw): preserve unknown fields in channel config save path
Every channel form editor (telegram, dingtalk-connector, slack, feishu)
silently drops fields on Save. The user flow that loses data:

  1. Open a channel resource in the JSON tab, add any field not owned
     by the form (e.g. webhook, custom capabilities, additional feishu
     accounts).
  2. Switch to the Form tab and change anything (e.g. rotate a secret).
  3. Click Save.
  4. The field from step 1 is gone from the saved config — and stays
     gone after a reload.

The data loss occurs in two places; both must be fixed:

Frontend (OpenClawConfigCenterPage.tsx):
  Each update*ChannelContentText rebuilt the output from a hard-coded
  allowlist instead of merging form fields into the parsed config. Any
  field not in the allowlist was dropped on Save. For feishu this
  collapsed a multi-account config to a single `main` account.

Backend (openclaw_config_service.go):
  normalizeOpenClawResourceContent calls normalize*ChannelConfigForEnv
  on every create/update to validate and rebuild the stored config.
  Those helpers use the same allowlist pattern, so even if the
  frontend sends a complete config, the backend strips tenant-authored
  keys before persisting.

Fix:

  - Frontend: introduce a single mergeChannelConfig(existing, allowlisted)
    helper and route every editor's output through it. Each handler
    builds an allowlisted object containing only its known keys; the
    helper overlays it onto the parsed existing config so unknown keys
    survive. The merge point is now structural rather than a per-handler
    convention, so a new editor (e.g. an MS Teams handler added in a
    downstream patch) can't regress by forgetting the spread. Feishu's
    accounts deep-merge is preserved by building the merged accounts
    inside the allowlisted object before handing off to the helper.

  - Backend: introduce mergeOpenClawChannelConfigForStorage, which
    overlays the allowlist-normalized output onto the original parsed
    payload at storage time. Normalized keys still win; unknown keys
    pass through. For feishu the accounts map is merged member-wise.

Env-rendering semantics are unchanged. appendCompiledOpenClawEnvPayload
continues to call the *ForEnv helpers at render time against the
stored content, so the runtime env payload sees the same allowlist as
before.

Tests:

  - Two existing ResourcePayloadFromModelNormalizesStored*JSON tests
    asserted the pre-fix behavior (dropping `legacyField`) and are
    updated to assert it survives.
  - New TestNormalizeOpenClawResourceContentPreservesUnknownChannelFields
    (table-driven, three editors) guards the preservation invariant.
  - New TestNormalizeOpenClawResourceContentPreservesFeishuSiblingAccounts
    guards the feishu deep-merge.

Manual verification against a live instance: add `webhook` via the
JSON tab, switch to Form tab, rotate a secret, Save, reload — the
webhook field is retained.
2026-04-27 23:07:24 +02:00
Qingshan Chen 30abf94c45 Merge pull request #95 from hippoley/fix/image-pull-policy-configurable
Release / Prepare Scheduled Release (push) Has been skipped
Release / Publish Release (push) Failing after 0s
fix: default imagePullPolicy to IfNotPresent for air-gapped environments
v2026.4.28
2026-04-27 21:46:35 +08:00
Qingshan Chen 39a76c0f9f Merge pull request #93 from Li-Day-Day/main
fix(instances): delete legacy network policy before create/start instead of ensuring default
2026-04-27 21:45:56 +08:00
hippoley 584b071e35 fix: default imagePullPolicy to IfNotPresent for air-gapped environments
Kubernetes defaults imagePullPolicy to Always when the image tag is
:latest. This causes pod creation failures in air-gapped and enterprise
environments where nodes cannot reach external registries.

Changes:
- Add ImagePullPolicy field to PodConfig struct
- Default to IfNotPresent in CreatePod when not explicitly set
- Support IMAGE_PULL_POLICY env var for operator override
- Apply policy to both CreateInstance and StartInstance paths

Closes #94
2026-04-27 16:32:30 +08:00
litiantian03 bf0125ab23 fix(instances): delete legacy network policy before create/start instead of ensuring default 2026-04-27 09:43:52 +08:00
Suqian Zhang 87fe5a6bdf fix(openclaw): preserve unknown fields in channel config save path
Every channel form editor (telegram, dingtalk-connector, slack, feishu)
silently drops fields on Save. The user flow that loses data:

  1. Open a channel resource in the JSON tab, add any field not owned
     by the form (e.g. webhook, custom capabilities, additional feishu
     accounts).
  2. Switch to the Form tab and change anything (e.g. rotate a secret).
  3. Click Save.
  4. The field from step 1 is gone from the saved config — and stays
     gone after a reload.

The data loss occurs in two places; both must be fixed:

Frontend (OpenClawConfigCenterPage.tsx):
  Each update*ChannelContentText rebuilt the output from a hard-coded
  allowlist instead of merging form fields into the parsed config. Any
  field not in the allowlist was dropped on Save. For feishu this
  collapsed a multi-account config to a single `main` account.

Backend (openclaw_config_service.go):
  normalizeOpenClawResourceContent calls normalize*ChannelConfigForEnv
  on every create/update to validate and rebuild the stored config.
  Those helpers use the same allowlist pattern, so even if the
  frontend sends a complete config, the backend strips tenant-authored
  keys before persisting.

Fix:

  - Frontend: introduce a single mergeChannelConfig(existing, allowlisted)
    helper and route every editor's output through it. Each handler
    builds an allowlisted object containing only its known keys; the
    helper overlays it onto the parsed existing config so unknown keys
    survive. The merge point is now structural rather than a per-handler
    convention, so a new editor (e.g. an MS Teams handler added in a
    downstream patch) can't regress by forgetting the spread. Feishu's
    accounts deep-merge is preserved by building the merged accounts
    inside the allowlisted object before handing off to the helper.

  - Backend: introduce mergeOpenClawChannelConfigForStorage, which
    overlays the allowlist-normalized output onto the original parsed
    payload at storage time. Normalized keys still win; unknown keys
    pass through. For feishu the accounts map is merged member-wise.

Env-rendering semantics are unchanged. appendCompiledOpenClawEnvPayload
continues to call the *ForEnv helpers at render time against the
stored content, so the runtime env payload sees the same allowlist as
before.

Tests:

  - Two existing ResourcePayloadFromModelNormalizesStored*JSON tests
    asserted the pre-fix behavior (dropping `legacyField`) and are
    updated to assert it survives.
  - New TestNormalizeOpenClawResourceContentPreservesUnknownChannelFields
    (table-driven, three editors) guards the preservation invariant.
  - New TestNormalizeOpenClawResourceContentPreservesFeishuSiblingAccounts
    guards the feishu deep-merge.

Manual verification against a live instance: add `webhook` via the
JSON tab, switch to Form tab, rotate a secret, Save, reload — the
webhook field is retained.
2026-04-26 17:50:08 +02:00
Qingshan Chen 3a44141d97 Merge pull request #92 from hippoley/fix/graceful-shutdown-and-goroutine-leaks
Release / Prepare Scheduled Release (push) Has been skipped
Release / Publish Release (push) Failing after 1s
fix: add graceful shutdown, fix WebSocket Hub race, plug goroutine leaks
v2026.4.26
2026-04-26 00:42:45 +08:00