ompclaw 0.3.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/CHANGELOG.md +34 -0
- package/LICENSE +21 -0
- package/NOTICE +10 -0
- package/README.md +152 -0
- package/SECURITY.md +61 -0
- package/config.example.json +45 -0
- package/docs/guide.md +360 -0
- package/docs/rpc-service.md +240 -0
- package/package.json +93 -0
- package/src/api.ts +556 -0
- package/src/gateway-app.ts +393 -0
- package/src/gateway-config.ts +379 -0
- package/src/gateway-core.ts +410 -0
- package/src/gateway-scheduler.ts +425 -0
- package/src/gateway-store.ts +947 -0
- package/src/gateway-tools.ts +443 -0
- package/src/gateway-types.ts +290 -0
- package/src/inbox.ts +77 -0
- package/src/index.ts +13 -0
- package/src/markdown.ts +156 -0
- package/src/outbound.ts +353 -0
- package/src/rpc-cli.ts +408 -0
- package/src/rpc-client.ts +308 -0
- package/src/rpc-config.ts +70 -0
- package/src/rpc-profile.ts +215 -0
- package/src/rpc-protocol.ts +326 -0
- package/src/rpc-runtime.ts +875 -0
- package/src/rpc-service.ts +191 -0
- package/src/rpc-ui.ts +218 -0
- package/src/transports/telegram/adapter.ts +829 -0
- package/src/transports/websocket/adapter.ts +704 -0
- package/src/transports/websocket/protocol.ts +256 -0
- package/src/type-guards.ts +4 -0
- package/tsconfig.json +13 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
## 0.3.0 (2026-08-30)
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Renamed the product, npm package, CLI, repository, service identifiers, default profile, state paths, environment prefix, and OMP host tools from `omp-gateway` to OmpClaw.
|
|
10
|
+
- The new package and command are `ompclaw`; the renamed surfaces intentionally provide no legacy aliases.
|
|
11
|
+
|
|
12
|
+
### Migration
|
|
13
|
+
|
|
14
|
+
- Stop and uninstall the old service before installing `com.ompclaw` or `ompclaw.service`.
|
|
15
|
+
- Move the prior state directory to `~/.omp/agent/ompclaw`, rename `gateway.sqlite` and `gateway.lock` to `ompclaw.sqlite` and `ompclaw.lock`, change the old default `gateway` profile to `ompclaw`, and rename `OMP_GATEWAY_*` environment variables to `OMPCLAW_*`. Keep an explicitly configured custom profile unchanged.
|
|
16
|
+
|
|
17
|
+
## 0.2.0 (2026-08-30)
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
- Durable principal-scoped one-shot and cron jobs with timezone validation, bounded retry, restart recovery, Telegram command controls, and OMP host tools.
|
|
22
|
+
- Opt-in gateway-scoped Mnemopi memory and experimental auto-learn skill capture.
|
|
23
|
+
- Read-only inherited harness snapshots that refresh desktop skills, rules, commands, agents, docs, and binaries without sharing runtime state or credentials.
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
|
|
27
|
+
- Scheduled and interactive work now share one explicitly serialized OMP runtime and delivery context.
|
|
28
|
+
- Gateway configuration and operator documentation exposed automation, learning, isolation, and at-least-once delivery boundaries.
|
|
29
|
+
|
|
30
|
+
## 0.1.0 (2026-08-30)
|
|
31
|
+
|
|
32
|
+
### Alpha
|
|
33
|
+
|
|
34
|
+
- Initial alpha release of the authenticated Telegram and WebSocket gateway, persistent OMP RPC runtime, SQLite state store, interactive UI bridge, host tools, and user-service installers.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 omp-telegram contributors
|
|
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.
|
package/NOTICE
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
OmpClaw
|
|
2
|
+
|
|
3
|
+
This package includes and adapts work from omp-telegram:
|
|
4
|
+
|
|
5
|
+
omp-telegram
|
|
6
|
+
https://github.com/TerrifiedBug/omp-telegram
|
|
7
|
+
Copyright (c) omp-telegram contributors
|
|
8
|
+
Licensed under the MIT License
|
|
9
|
+
|
|
10
|
+
TerrifiedBug/omp-telegram is the upstream provenance for the adapted Telegram bridge and OMP RPC service work. Its MIT provenance is preserved. The full MIT license for this package is in LICENSE.
|
package/README.md
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# OmpClaw
|
|
2
|
+
|
|
3
|
+
[](https://github.com/wolfiesch/ompclaw/actions/workflows/ci.yml?query=branch%3Amain)
|
|
4
|
+
[](https://www.npmjs.com/package/ompclaw)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
|
|
7
|
+
**Status: Alpha.** OmpClaw is a Bun package for operators who need one persistent [Oh My Pi](https://github.com/can1357/oh-my-pi) 17+ session reachable through Telegram and authenticated WebSocket clients. It deliberately has one session owner and one state writer, rather than creating separate agent processes for each chat or client.
|
|
8
|
+
|
|
9
|
+
Use it when a single trusted operator needs remote access to an OMP workspace without placing transport credentials in OMP configuration or handing clients an OMP process directly. Telegram and WebSocket are adapters around the same authenticated session. HTTP is health-only.
|
|
10
|
+
|
|
11
|
+
- **Package:** [`ompclaw`](https://www.npmjs.com/package/ompclaw) `0.3.0`
|
|
12
|
+
- **Repository:** [`wolfiesch/ompclaw`](https://github.com/wolfiesch/ompclaw)
|
|
13
|
+
- **License:** [MIT](LICENSE)
|
|
14
|
+
- **Upstream provenance:** [TerrifiedBug/omp-telegram](https://github.com/TerrifiedBug/omp-telegram), preserved in [NOTICE](NOTICE)
|
|
15
|
+
|
|
16
|
+
## User quickstart
|
|
17
|
+
|
|
18
|
+
### Prerequisites
|
|
19
|
+
|
|
20
|
+
- [Bun](https://bun.sh/)
|
|
21
|
+
- `omp` 17.0.0 or newer, authenticated for the provider you intend to use
|
|
22
|
+
- A Telegram bot token if Telegram is enabled
|
|
23
|
+
|
|
24
|
+
Install the package:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
bun add --global ompclaw
|
|
28
|
+
ompclaw --help
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Create a token-free JSON configuration. Run the command from the OMP workspace you want the gateway to use, or replace the example workspace path with an absolute path.
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
mkdir -p ~/.config/ompclaw
|
|
35
|
+
cat > ~/.config/ompclaw/config.json <<'JSON'
|
|
36
|
+
{
|
|
37
|
+
"workspace": "~/path/to/workspace",
|
|
38
|
+
"stateDir": "~/.omp/agent/ompclaw",
|
|
39
|
+
"profile": "ompclaw",
|
|
40
|
+
"omp": {
|
|
41
|
+
"command": "omp",
|
|
42
|
+
"autoRestart": true
|
|
43
|
+
},
|
|
44
|
+
"transports": {
|
|
45
|
+
"telegram": {
|
|
46
|
+
"enabled": true,
|
|
47
|
+
"account": "default",
|
|
48
|
+
"tokenEnv": "TELEGRAM_BOT_TOKEN"
|
|
49
|
+
},
|
|
50
|
+
"websocket": {
|
|
51
|
+
"enabled": true,
|
|
52
|
+
"hostname": "127.0.0.1",
|
|
53
|
+
"port": 8787,
|
|
54
|
+
"account": "local",
|
|
55
|
+
"credentials": [
|
|
56
|
+
{
|
|
57
|
+
"tokenEnv": "OMPCLAW_WS_TOKEN",
|
|
58
|
+
"subject": "local-operator",
|
|
59
|
+
"channel": "local"
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"automation": {
|
|
65
|
+
"enabled": true
|
|
66
|
+
},
|
|
67
|
+
"learning": {
|
|
68
|
+
"enabled": true,
|
|
69
|
+
"autoCapture": true,
|
|
70
|
+
"memoryModel": "online"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
JSON
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Put token values only in a private environment file. The values below are placeholders, not usable credentials.
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
cat > ~/.config/ompclaw/ompclaw.env <<'ENV'
|
|
80
|
+
TELEGRAM_BOT_TOKEN=replace-with-telegram-bot-token
|
|
81
|
+
OMPCLAW_WS_TOKEN=replace-with-a-long-random-websocket-token
|
|
82
|
+
ENV
|
|
83
|
+
chmod 600 ~/.config/ompclaw/ompclaw.env
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Authorize the Telegram operator and the example local WebSocket identity. Set `TELEGRAM_USER_ID` to the numeric ID of the person you intend to authorize.
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
TELEGRAM_USER_ID=123456789
|
|
90
|
+
ompclaw telegram-allow "$TELEGRAM_USER_ID" \
|
|
91
|
+
--config ~/.config/ompclaw/config.json
|
|
92
|
+
ompclaw principal-add local-operator \
|
|
93
|
+
--config ~/.config/ompclaw/config.json
|
|
94
|
+
ompclaw identity-bind websocket local local-operator local-operator \
|
|
95
|
+
--config ~/.config/ompclaw/config.json
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
The first command prints `Telegram user allowed as telegram:default:<numeric-user-id>`. The identity commands print the updated principal and binding.
|
|
99
|
+
|
|
100
|
+
Validate credentials, the SQLite store, Telegram reachability, and a short OMP RPC session before starting the gateway:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
ompclaw doctor \
|
|
104
|
+
--config ~/.config/ompclaw/config.json \
|
|
105
|
+
--env-file ~/.config/ompclaw/ompclaw.env
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
When Telegram is enabled, successful output includes the bot identity, `Webhook: none (...)`, the OMP RPC protocol and session, and ends with:
|
|
109
|
+
|
|
110
|
+
```text
|
|
111
|
+
Doctor: ready
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Start the foreground gateway:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
ompclaw run \
|
|
118
|
+
--config ~/.config/ompclaw/config.json \
|
|
119
|
+
--env-file ~/.config/ompclaw/ompclaw.env
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
The process owns the OMP session until it receives `SIGINT` or `SIGTERM`. Telegram starts long polling. The WebSocket endpoint accepts authenticated connections at `ws://127.0.0.1:8787/`; `GET /healthz` returns `{"status":"ok"}`.
|
|
123
|
+
|
|
124
|
+
To install it as a user service instead, use the same validated files:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
ompclaw service-install \
|
|
128
|
+
--config ~/.config/ompclaw/config.json \
|
|
129
|
+
--env-file ~/.config/ompclaw/ompclaw.env
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
The command reports `Installed and started <manager> service: <path>`. It installs launchd label `com.ompclaw` on macOS or user systemd unit `ompclaw.service` on Linux.
|
|
133
|
+
|
|
134
|
+
## What the gateway provides
|
|
135
|
+
|
|
136
|
+
- One authenticated OMP RPC session with streamed assistant updates and a final response routed only to the active authenticated conversation.
|
|
137
|
+
- OMP commands for steering, follow-up, abort, models, thinking, session controls, queue policy, compaction, retries, subagents, history, branching, exports, and login.
|
|
138
|
+
- Telegram long polling with durable update checkpoints, message editing, buttons, file intake, reactions, topics, and interactive OMP UI.
|
|
139
|
+
- An authenticated versioned WebSocket protocol with client identity and conversation address derived from configured credential metadata, not client-supplied fields.
|
|
140
|
+
- SQLite-backed principals, transport identities, conversation bindings, OMP session checkpointing, inbound deduplication, UI state, durable scheduled jobs, and legacy Telegram migration markers.
|
|
141
|
+
- Optional unattended automation with one-shot and cron schedules, explicit timezone support, bounded retries, restart recovery, per-principal ownership, and natural-language job control through OMP host tools.
|
|
142
|
+
- Optional experimental Mnemopi memory and auto-learn capture in OmpClaw-owned state. Inherited desktop skills are refreshed into a read-only snapshot, while gateway-created managed skills and memory remain isolated in the named OMP profile.
|
|
143
|
+
|
|
144
|
+
Read the [operator guide](docs/guide.md) for configuration, migration, operations, and security boundaries. Read the [RPC and transport reference](docs/rpc-service.md) for the command and protocol matrix.
|
|
145
|
+
|
|
146
|
+
## Contributors
|
|
147
|
+
|
|
148
|
+
Package installation above is for operators. Source checkout, development conventions, and verification commands are intentionally separate in [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
149
|
+
|
|
150
|
+
## License and notice
|
|
151
|
+
|
|
152
|
+
`ompclaw` is MIT licensed. It includes and adapts work from TerrifiedBug's MIT-licensed `omp-telegram`; see [LICENSE](LICENSE) and [NOTICE](NOTICE).
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Security policy
|
|
2
|
+
|
|
3
|
+
## Supported versions
|
|
4
|
+
|
|
5
|
+
OmpClaw is Alpha. Security fixes are considered for the newest published release only. There is no guaranteed response or remediation timeline during Alpha. If a security fix requires an upgrade, use the newest release rather than expecting backports.
|
|
6
|
+
|
|
7
|
+
## Report a vulnerability privately
|
|
8
|
+
|
|
9
|
+
Do not open a public issue, discussion, pull request, or chat message for a suspected vulnerability. Use GitHub's private vulnerability reporting flow for this repository:
|
|
10
|
+
|
|
11
|
+
<https://github.com/wolfiesch/ompclaw/security/advisories/new>
|
|
12
|
+
|
|
13
|
+
A useful report includes:
|
|
14
|
+
|
|
15
|
+
- affected package version and operating system;
|
|
16
|
+
- a minimal reproduction or proof of concept;
|
|
17
|
+
- the impact and attack preconditions;
|
|
18
|
+
- whether an attacker needs local host access, a Telegram account, a WebSocket token, or network access;
|
|
19
|
+
- relevant logs and configuration with every token, user ID, hostname, workspace path, and session path removed.
|
|
20
|
+
|
|
21
|
+
Please allow maintainers to investigate and prepare a fix before public disclosure. Do not publish exploit details, working credentials, session files, or a bypass while the report is being handled.
|
|
22
|
+
|
|
23
|
+
## Threat model
|
|
24
|
+
|
|
25
|
+
The gateway is designed for one trusted operator environment:
|
|
26
|
+
|
|
27
|
+
- It runs one OMP RPC child process for one configured workspace and profile.
|
|
28
|
+
- A transport identity must resolve to a principal recorded in the local SQLite store before its inbound message reaches OMP.
|
|
29
|
+
- Telegram sender identity is obtained from the Telegram update. WebSocket identity and conversation address are derived from the configured credential, never from client message fields.
|
|
30
|
+
- A live WebSocket connection is limited to one configured conversation origin. Gateway delivery is constrained to the active principal and origin.
|
|
31
|
+
- The JSON configuration contains paths and environment-variable names, not token values. Transport-secret environment variables are removed before the OMP child starts.
|
|
32
|
+
- The gateway locks its state directory so a second gateway process cannot become another state writer. The Telegram adapter separately locks one polling account. Durable automation remains scoped to the principal and conversation derived when the job was created.
|
|
33
|
+
|
|
34
|
+
The gateway does **not** make an OMP workspace safe for untrusted operators. An authorized principal can cause prompts to be processed by OMP with the authority of the configured OMP profile, workspace, tools, and provider credentials. Treat granting a Telegram allowance or binding a WebSocket identity as granting access to that environment.
|
|
35
|
+
|
|
36
|
+
The gateway does not defend against a compromised host, another process running as the same operating-system user, stolen provider credentials, a stolen Telegram account, a stolen WebSocket token, a malicious OMP plugin or MCP server, or a compromised client device. It also does not provide end-to-end encryption beyond the transport guarantees supplied by Telegram or your own network deployment.
|
|
37
|
+
|
|
38
|
+
## Deployment hardening
|
|
39
|
+
|
|
40
|
+
1. Run the gateway under a dedicated, non-administrator user when practical. Limit that user's workspace, SSH, network, and provider access to what the session requires.
|
|
41
|
+
2. Keep the default WebSocket bind address on loopback, such as `127.0.0.1`. Do not expose the WebSocket port directly to an untrusted network.
|
|
42
|
+
3. If remote WebSocket access is required, put it behind a TLS-terminating, access-controlled network boundary. Restrict firewall rules and protect the client token in transit. Do not rely on the health endpoint as authentication.
|
|
43
|
+
4. Use distinct high-entropy WebSocket tokens for each configured credential. Bind each credential subject explicitly to the intended principal with `identity-bind`.
|
|
44
|
+
5. Allow only the specific Telegram user IDs that should operate the session. Keep Telegram in long-polling mode and resolve any configured webhook before starting the gateway. `doctor` checks for this conflict.
|
|
45
|
+
6. Keep one gateway process and one Telegram poller per bot token. Do not share the state directory, token, or SQLite file among instances.
|
|
46
|
+
7. Leave `omp.allowRpcBash` disabled unless the operator has deliberately accepted the authority granted to OMP RPC bash commands.
|
|
47
|
+
8. Treat unattended scheduled prompts as standing authorization to use the configured OMP environment. Make prompts with external side effects idempotent, pause jobs that no longer need to run, and remove obsolete jobs.
|
|
48
|
+
9. Leave experimental learning disabled unless the operator accepts automatic provider use and gateway-profile managed-skill mutation. Review learned skills before using them in consequential automation.
|
|
49
|
+
10. Keep Bun, OMP, the gateway, operating system, and any reverse proxy current with their security updates.
|
|
50
|
+
|
|
51
|
+
## Secret handling
|
|
52
|
+
|
|
53
|
+
- Put Telegram and WebSocket token values in a separate environment file passed with `--env-file`; use only variable names in the JSON configuration.
|
|
54
|
+
- The environment file must be a regular file, owned by the current user, with mode `0600` or stricter on supported Unix systems. Do not commit it, upload it, or paste it into issue reports.
|
|
55
|
+
- The SQLite database stores principals, bindings, checkpoints, deduplication records, pending UI metadata, and durable job prompts and outcomes. Experimental learning also writes gateway-private memory data and managed skills. Treat the state directory and every backup as sensitive.
|
|
56
|
+
- Do not put provider tokens, bot tokens, WebSocket tokens, session exports, or private attachment files in source control, service definitions, shell history, screenshots, or telemetry.
|
|
57
|
+
- Rotate a token and restart the gateway if you suspect disclosure. Review and remove its principal binding if the associated operator should no longer have access.
|
|
58
|
+
|
|
59
|
+
## Safe disclosure and remediation
|
|
60
|
+
|
|
61
|
+
Maintainers may ask for a sanitized reproducer or a private follow-up through the GitHub advisory. Before sharing anything, replace token values, numeric user IDs, hostnames, workspace paths, session paths, attachment contents, and message text with safe placeholders. After a fix is available, coordinate a public advisory that describes affected versions, impact, mitigations, and upgrade guidance without publishing secrets or operational data.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"workspace": ".",
|
|
3
|
+
"stateDir": "~/.omp/agent/ompclaw",
|
|
4
|
+
"profile": "ompclaw",
|
|
5
|
+
"omp": {
|
|
6
|
+
"command": "omp",
|
|
7
|
+
"configFiles": [],
|
|
8
|
+
"args": [],
|
|
9
|
+
"allowRpcBash": false,
|
|
10
|
+
"inheritHarness": false,
|
|
11
|
+
"autoRestart": true
|
|
12
|
+
},
|
|
13
|
+
"transports": {
|
|
14
|
+
"telegram": {
|
|
15
|
+
"enabled": true,
|
|
16
|
+
"account": "default",
|
|
17
|
+
"tokenEnv": "TELEGRAM_BOT_TOKEN"
|
|
18
|
+
},
|
|
19
|
+
"websocket": {
|
|
20
|
+
"enabled": true,
|
|
21
|
+
"hostname": "127.0.0.1",
|
|
22
|
+
"port": 7788,
|
|
23
|
+
"account": "local",
|
|
24
|
+
"credentials": [
|
|
25
|
+
{
|
|
26
|
+
"tokenEnv": "OMPCLAW_WEBSOCKET_TOKEN",
|
|
27
|
+
"subject": "local-client",
|
|
28
|
+
"channel": "ompclaw"
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"automation": {
|
|
34
|
+
"enabled": false,
|
|
35
|
+
"pollIntervalMs": 1000,
|
|
36
|
+
"retryDelayMs": 15000,
|
|
37
|
+
"maxAttempts": 3
|
|
38
|
+
},
|
|
39
|
+
"learning": {
|
|
40
|
+
"enabled": false,
|
|
41
|
+
"autoCapture": false,
|
|
42
|
+
"minToolCalls": 5,
|
|
43
|
+
"memoryModel": "online"
|
|
44
|
+
}
|
|
45
|
+
}
|