Compare commits

...

4 Commits

3 changed files with 346 additions and 42 deletions

View File

@@ -1,6 +1,6 @@
apiVersion: v2
name: pieced-operator
description: PieCed IT tenant lifecycle operator
version: 0.1.41
appVersion: "0.1.41"
version: 0.1.45
appVersion: "0.1.45"
type: application

View File

@@ -1,5 +1,18 @@
# The package catalog is deployed as a ConfigMap in the operator namespace.
# To update packages, edit the catalog data below and upgrade the Helm release.
#
# Categories:
# - core — toggles platform-level OpenClaw behaviour (heartbeat, cron,
# active-memory, voice) via config_patch. No channel bindings,
# no skills.
# - channel — adds a messaging channel (Telegram, Discord, …).
# - skill — adds a ClawHub or pack: skill ref to the OpenClawInstance.
#
# Quiet hours are not exposed as a separate package — in OpenClaw they live
# under the heartbeat config (via the active-window setting and via
# HEARTBEAT.md content rules). When we expose a tenant-tunable time range
# in the portal, it will become additional fields on core-heartbeat rather
# than its own package.
apiVersion: v1
kind: ConfigMap
metadata:
@@ -10,6 +23,130 @@ metadata:
data:
catalog.yaml: |
packages:
# =====================================================================
# CORE — platform behaviour toggles. Patched into OCI config.raw via
# config_patch (deep-merged on top of the operator's safe defaults).
# =====================================================================
core-heartbeat:
name: Heartbeat (Proactive Checks)
category: core
description: >
Periodic agent run (default every 30 min) that lets the assistant
check inbox, calendar, and other configured sources and message
you proactively when something needs attention. Without this, the
assistant only responds when you message it first.
# OpenClaw 2026.x ships heartbeat ON by default (30m, or 1h on
# Anthropic OAuth) when agents.defaults.heartbeat is absent —
# see issues openclaw/openclaw#64293, #19445, #8123. The builder
# accordingly writes `every: "0m"` (the known off-switch) into
# the baseline configRaw. core-heartbeat's config_patch below
# overlays the 30m cadence on top of that. The actual checklist
# the heartbeat reads lives in workspace HEARTBEAT.md (seeded
# separately via spec.workspaceFiles); without a HEARTBEAT.md
# the heartbeat fires harmlessly and replies HEARTBEAT_OK.
#
# Quiet hours: OpenClaw supports both a config-level activeHours
# window under agents.defaults.heartbeat (skipped outside the
# window) and in-content rules inside HEARTBEAT.md. Neither is
# exposed in the portal yet — when added, they become extra
# fields on this package, not a separate core-quiet-hours
# package.
config_patch:
agents:
defaults:
heartbeat:
every: "30m"
core-cron:
name: Scheduled Tasks (Cron)
category: core
description: >
Allow the assistant to run scheduled tasks (daily briefings,
recurring reminders, periodic reports). Off by default. When
off, the agent's cron tool stays available but no scheduled
job ever fires.
# Flips the cron scheduler on. Default base configRaw sets
# cron.enabled=false (see builder.go), so this overlay only
# writes true when the package is enabled. Job storage lives on
# the tenant PVC at ~/.openclaw/cron/jobs.json by default.
config_patch:
cron:
enabled: true
core-active-memory:
name: Active Memory
category: core
description: >
Lets the assistant recall stable preferences, recurring habits,
and long-term context from past conversations during a chat.
Uses an extra sub-agent turn per inbound message to query the
memory store. Direct-message sessions only — group and channel
sessions stay deterministic. Trades a small amount of token
cost for continuity and personalisation.
# OpenClaw 2026.5.x ships Active Memory as a plugin under
# plugins.entries.active-memory with a two-gate activation model:
# (1) the plugin must be enabled, (2) the request must be an
# eligible direct-chat session. Scoped to "main" agent and
# "direct" chat types for safe-default behaviour. The recall
# model inherits the session's chat model when available; the
# modelFallback is used only when nothing else resolves and
# should be present in LiteLLM. Adjust as needed for the
# platform's default cheap model.
config_patch:
plugins:
entries:
active-memory:
enabled: true
config:
enabled: true
agents: ["main"]
allowedChatTypes: ["direct"]
modelFallback: "pieced-mini"
queryMode: "recent"
promptStyle: "balanced"
timeoutMs: 15000
maxSummaryChars: 220
persistTranscripts: false
logging: false
core-voice:
name: Voice Interaction
category: core
description: >
Speech-to-text on incoming voice notes and text-to-speech on
replies. Routed through PieCed's LiteLLM gateway so audio cost
is tracked per-tenant alongside chat.
# PHASE A: catalog entry only. No config_patch yet — toggling
# this package stores customer intent but does not change the
# OCI config. PHASE B (next iteration) wires in chatterbox-tts
# and a whisper adapter (or speaches-server) behind LiteLLM and
# adds the config_patch below, roughly:
#
# config_patch:
# tools:
# media:
# audio:
# enabled: true
# models:
# - provider: openai
# model: pieced-whisper
# apiBase: http://litellm.inference.svc:4000/v1
# messages:
# tts:
# auto: inbound
# provider: openai
# openai:
# model: pieced-tts
# voice: nova
# =====================================================================
# CHANNELS — messaging integrations. Each ships a Channels map that
# the builder copies into config.channels, env_vars for credentials,
# and bindings so messages route to the default agent.
# =====================================================================
telegram:
name: Telegram
category: channel
@@ -62,51 +199,218 @@ data:
2. Create app, add bot, copy token and app ID
3. Invite bot to server with messages scope
email:
name: Email (Gmail)
category: channel
description: Email integration via Gmail IMAP/SMTP
channels:
email:
enabled: true
settings:
provider: gmail
env_vars:
- name: EMAIL_ADDRESS
secret_key: address
vault_path_suffix: email
- name: EMAIL_APP_PASSWORD
secret_key: app-password
vault_path_suffix: email
bindings:
- match:
channel: email
egress_rules:
- host: imap.gmail.com
port: 993
- host: smtp.gmail.com
port: 465
# =====================================================================
# SKILLS — ClawHub skill installs. Operator passes each entry through
# to OpenClawInstance.spec.skills, where the OpenClaw operator's init
# container fetches it before the agent starts. Bare "<owner>/<slug>"
# resolves through ClawHub by default.
# =====================================================================
web-search:
name: Web Search
git-cli:
name: Git CLI
category: skill
description: Web search via internal SearXNG
description: >
Standalone git command-line operations (clone, commit, branch,
diff, log, status). For private repositories, configure
credentials in your workspace.
skills:
- "pack:openclaw/skills/web-search@latest"
- "openlang-cn/git-cli"
egress_rules:
- host: github.com
port: 443
- host: gitlab.com
port: 443
github:
name: GitHub (gh CLI)
category: skill
description: >
Interact with GitHub repositories via the gh CLI — issues, PRs,
CI runs, releases, gists. Requires a personal access token.
skills:
- "steipete/github"
env_vars:
- name: GH_TOKEN
secret_key: token
vault_path_suffix: github
required: true
egress_rules:
- host: api.github.com
port: 443
- host: github.com
port: 443
- host: codeload.github.com
port: 443
customer_instructions: |
1. Open https://github.com/settings/tokens
2. Generate a fine-grained personal access token with the
repo scopes you want the assistant to use.
3. Copy the token (it is shown only once).
gitea:
name: Gitea
category: skill
description: >
Interact with a Gitea instance — repositories, issues, PRs,
releases. Defaults to the PieCed-platform Gitea at
git.c5ai.ch; supply your own GITEA_URL if you host elsewhere.
skills:
- "ericxliu1990/gitea"
env_vars:
- name: GITEA_URL
default: "https://git.c5ai.ch"
- name: GITEA_TOKEN
secret_key: token
vault_path_suffix: gitea
required: true
egress_rules:
- host: git.c5ai.ch
port: 443
customer_instructions: |
1. Log in to your Gitea instance (default https://git.c5ai.ch).
2. Go to Settings → Applications → Generate New Token.
3. Grant the scopes you want the assistant to use (repo, issue,
user — minimum needed for most workflows).
4. Copy the token.
whisper-self-hosted:
name: Whisper (Self-Hosted Transcription)
category: skill
description: >
Transcribe audio files via the platform's self-hosted Whisper
ASR instance. Useful for ad-hoc transcription tasks initiated
from chat; channel-level voice intake is handled separately by
the Voice CORE feature.
skills:
- "xavjer/openclaw-self-hosted-whisper"
env_vars:
- name: WHISPER_URL
default: "http://whisper-asr.whisper-asr.svc.cluster.local:9000"
searxng-local-search:
name: Web Search (SearXNG)
category: skill
description: >
Privacy-respecting web search via the platform's internal
SearXNG instance. Search the web, images, news, and more
without external API calls or trackers.
skills:
- "noblepayne/searxng-local-search"
env_vars:
- name: SEARXNG_URL
default: "http://searxng.searxng.svc.cluster.local:8080"
egress_rules: []
document-processing:
name: Document Processing
gog:
name: Google Workspace (Gog)
category: skill
description: PDF, DOCX, spreadsheet processing
description: >
Bundled access to Gmail, Calendar, Drive, Docs, Sheets, and
Contacts via Google OAuth. Setup requires a Google Cloud
project and an OAuth client. NOTE: OAuth flow is not yet
self-service in the portal — contact PieCed support for
credentials onboarding.
skills:
- "pack:openclaw/skills/document-processing@latest"
init_deps:
apt:
- pandoc
- libreoffice-writer-nogui
- ffmpeg
egress_rules: []
- "steipete/gog"
env_vars:
- name: GOG_CLIENT_ID
secret_key: client-id
vault_path_suffix: gog
required: true
- name: GOG_CLIENT_SECRET
secret_key: client-secret
vault_path_suffix: gog
required: true
- name: GOG_REFRESH_TOKEN
secret_key: refresh-token
vault_path_suffix: gog
required: true
egress_rules:
- host: oauth2.googleapis.com
port: 443
- host: www.googleapis.com
port: 443
- host: gmail.googleapis.com
port: 443
- host: calendar.googleapis.com
port: 443
- host: drive.googleapis.com
port: 443
- host: docs.googleapis.com
port: 443
- host: sheets.googleapis.com
port: 443
- host: people.googleapis.com
port: 443
customer_instructions: |
Google Workspace integration uses OAuth and requires manual
onboarding for now. Please open a support ticket to start
the setup process — we will exchange the client credentials
and a refresh token offline, then enable this package on
your tenant.
disclaimer: >
By enabling Google Workspace integration you authorize PieCed
to access Gmail, Calendar, Drive, Docs, Sheets, and Contacts
on your behalf. Data flows through Google's APIs subject to
Google's terms.
mail:
name: Email (IMAP / SMTP)
category: skill
description: >
Read, search, and manage email via IMAP; send via SMTP. Works
with Gmail (with an app password), Outlook, Fastmail, and any
standard IMAP/SMTP host. Replaces the previous Gmail-only
channel.
skills:
- "ivangdavila/mail"
env_vars:
- name: IMAP_HOST
secret_key: imap-host
vault_path_suffix: mail
required: true
- name: IMAP_USER
secret_key: imap-user
vault_path_suffix: mail
required: true
- name: IMAP_PASS
secret_key: imap-pass
vault_path_suffix: mail
required: true
- name: SMTP_HOST
secret_key: smtp-host
vault_path_suffix: mail
required: true
- name: SMTP_USER
secret_key: smtp-user
vault_path_suffix: mail
required: true
- name: SMTP_PASS
secret_key: smtp-pass
vault_path_suffix: mail
required: true
# The mail skill connects to tenant-supplied IMAP/SMTP servers on
# ports 993 / 465 / 587. The hostnames are not known at catalog
# time, so we open these ports to "world" rather than declaring
# FQDNs. Trade-off accepted for pilot — see catalog.EgressRule
# for the rule shape and rationale.
egress_rules:
- port: 993
world: true
- port: 465
world: true
- port: 587
world: true
customer_instructions: |
1. For Gmail: enable 2-Step Verification, then create an App
Password at https://myaccount.google.com/apppasswords and
use it as both IMAP and SMTP password.
2. For Outlook/Microsoft 365 with MFA: generate an app
password under your account's security settings.
3. For other providers: refer to their IMAP/SMTP documentation
for host names and ports.
4. Typical IMAP_HOST values: imap.gmail.com, outlook.office365.com.
5. Typical SMTP_HOST values: smtp.gmail.com, smtp.office365.com.
disclaimer: >
The assistant gains read/write access to the mailbox you
configure. Use a dedicated address rather than a personal
inbox if you want to limit scope.

View File

@@ -1,6 +1,6 @@
image:
repository: registry.c5ai.ch/pieced/pieced-operator
tag: "0.1.41"
tag: "0.1.45"
pullPolicy: IfNotPresent
imagePullSecrets: