Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
a61d5b5
LLP 0161: design the OpenClaw full-capture implementation
Jul 30, 2026
6825655
LLP 0162: plan the OpenClaw full-capture implementation
Jul 30, 2026
010b33c
Merge remote-tracking branch 'origin/master' into HEAD
Jul 31, 2026
918abda
openclaw: add shared LLP 0158 session-file reader
Jul 31, 2026
184b125
openclaw: retire settings-file attach, add backfill config validation
Jul 31, 2026
608341d
openclaw: add LLP 0159 cross-shape match-key builders (T4)
Jul 31, 2026
a502fde
Add openclaw-steering-plugin: shadow providers + steering precedence …
Jul 31, 2026
d5770f4
Merge remote-tracking branch 'origin/task/openclaw-full-capture/T1' i…
Jul 31, 2026
cb11e9d
Merge remote-tracking branch 'origin/task/openclaw-full-capture/T3' i…
Jul 31, 2026
900f53d
Merge remote-tracking branch 'origin/task/openclaw-full-capture/T4' i…
Jul 31, 2026
f850db2
Merge remote-tracking branch 'origin/task/openclaw-full-capture/T5' i…
Jul 31, 2026
46a8bd2
Steering plugin borrows the shadowed credential and mirrors the Anthr…
Jul 31, 2026
aa14175
Merge remote-tracking branch 'origin/task/openclaw-full-capture/T2' i…
Jul 31, 2026
4905a31
openclaw: register the openai upstream preset, add x-hypaware-upstrea…
Jul 31, 2026
7c05130
Remove the json_path core probe/detach branches (T10)
Jul 31, 2026
281366d
openclaw: backfill session transcripts with native identity (T9)
Jul 31, 2026
17f44a3
openclaw: flush-time settlement enricher (T8)
Jul 31, 2026
fa95dbf
Merge remote-tracking branch 'origin/task/openclaw-full-capture/T6' i…
Jul 31, 2026
9e742e1
Merge remote-tracking branch 'origin/task/openclaw-full-capture/T10' …
Jul 31, 2026
35a8e6c
openclaw: shape-aware projector, true provider, stamped match keys (T7)
Jul 31, 2026
7932924
Merge integration into T8: keep both upstream presets and the enricher
Jul 31, 2026
7f2a883
Merge remote-tracking branch 'origin/task/openclaw-full-capture/T7' i…
Jul 31, 2026
5c14d73
Merge remote-tracking branch 'origin/task/openclaw-full-capture/T8' i…
Jul 31, 2026
81ba1e9
Merge remote-tracking branch 'origin/task/openclaw-full-capture/T9' i…
Jul 31, 2026
a6613ff
docs: openclaw_capture acceptance procedure (T11)
Jul 31, 2026
0a98f3b
Merge remote-tracking branch 'origin/task/openclaw-full-capture/T11' …
Jul 31, 2026
8a813a1
docs: make openclaw_capture step 1 runnable, and record what it resol…
Jul 31, 2026
b20d75f
Merge remote-tracking branch 'origin/task/openclaw-full-capture/T11' …
Jul 31, 2026
1077910
Merge remote-tracking branch 'origin/master' into HEAD
Jul 31, 2026
eafd5c2
Review round 1: close the json_path contract, the OPENCLAW_HOME split…
Jul 31, 2026
a2b6425
Review round 2: the steering plugin's entrypoint now typechecks too
Jul 31, 2026
5fbc882
Drop priority 100 from the openclaw openai preset; assert routes, not…
Jul 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
340 changes: 340 additions & 0 deletions docs/ACCEPTANCE.md

Large diffs are not rendered by default.

7 changes: 6 additions & 1 deletion hypaware-core/plugins-workspace/ai-gateway/src/source.js
Original file line number Diff line number Diff line change
Expand Up @@ -257,11 +257,16 @@ export async function bindProxyWithFallback({ config, bind, log, onFallback }) {
* out (they can never route a request and would only inflate the
* compiled table).
*
* Exported so routing tests can assert against the table an install
* really compiles (config plus registered presets, in merge order)
* rather than against a preset's literal field values, which is what
* let an over-broad preset priority through review.
*
* @param {UpstreamConfig[]} configUpstreams
* @param {GatewayState} state
* @returns {UpstreamConfig[]}
*/
function mergeUpstreams(configUpstreams, state) {
export function mergeUpstreams(configUpstreams, state) {
/** @type {Map<string, UpstreamConfig>} */
const merged = new Map()
for (const upstream of configUpstreams) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ export const configSection = {
* That surface being real does *not* make it core-reversible, so the client
* descriptor deliberately carries **no `attach_probe`**: the plist is XML at
* an absolute root-owned system path and holds no self-describing undo
* record, none of which the core probe/undo (`json`/`toml`/`json_path`) can
* record, none of which the core probe/undo (`json`/`toml`) can
* read or replay. Its state surface is `claude-desktop verify` and its undo is
* removing the plist with sudo, not `hyp detach` (#444).
*
Expand Down
17 changes: 5 additions & 12 deletions hypaware-core/plugins-workspace/openclaw/hypaware.plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,15 @@
"schema_version": 1,
"name": "@hypaware/openclaw",
"version": "1.0.0",
"description": "OpenClaw client adapter for HypAware. Injects a dedicated 'hypaware' model provider into OpenClaw's openclaw.json to route Anthropic traffic through the local AI gateway, and projects the captured Anthropic Messages exchanges into ai_gateway_messages.",
"description": "OpenClaw client adapter for HypAware. Projects the Anthropic Messages and OpenAI Chat Completions exchanges the local AI gateway captures into ai_gateway_messages, settles them onto the session file's native identity, and backfills local OpenClaw session transcripts. Routing itself is owned by the @hypaware/openclaw-steering-plugin npm package installed on the OpenClaw side; this adapter writes nothing to openclaw.json.",
"hypaware_api": "^1.0.0",
"runtime": "node",
"node_engine": ">=20",
"entrypoint": "./src/index.js",
"permissions": [
"read_home",
"write_home",
"read_state",
"write_openclaw_settings"
"read_state"
],
"requires": {
"capabilities": {
Expand All @@ -22,19 +21,13 @@
"client": {
"name": "openclaw",
"skill_dir": ".openclaw/skills",
"attach_probe": {
"format": "json_path",
"settings_file": ".openclaw/openclaw.json",
"marker_path": "models.providers.hypaware",
"marker_record": "headers.x-hypaware-marker"
},
"required_upstreams": ["anthropic"]
"required_upstreams": ["anthropic", "openai"]
},
"picker": [
{
"name": "openclaw",
"label": "capture OpenClaw conversations",
"summary": "Configures OpenClaw to route Anthropic traffic through the local gateway and records the captured exchanges.",
"summary": "Records OpenClaw conversations captured through the local gateway, and backfills local session transcripts. Routing is set up on the OpenClaw side by installing the @hypaware/openclaw-steering-plugin package.",
"detect": { "settings_file": ".openclaw/openclaw.json" },
"compose": {
"plugin": { "name": "@hypaware/openclaw" },
Expand All @@ -46,7 +39,7 @@
"config_sections": [
{
"section": "openclaw",
"summary": "OpenClaw adapter config, including the optional attach-on-join policy { on_join }."
"summary": "OpenClaw adapter config, including the optional attach-on-join policy { on_join } and the optional backfill policy { on_join, window_days }."
}
]
}
Expand Down
Loading
Loading