Commit 30af066
authored
Feat/node xtrace memory (#1065)
* feat(node): add xTrace Memory tool node (#1038)
Long-term, shared agent memory exposed as tools, backed by xTrace Memory
Manager's HTTP API. 'remember' ingests conversation turns (POST /v1/memories,
sync wait + poll) and 'recall' searches the pool (POST /v1/memories/search,
compose mode returns ready-to-inject context). classType tool, so it
complements the agent's required short-term memory subsystem. Includes
example pipe and unit tests (helpers, payloads, scope/validation).
* fix(node): xtrace_memory — drop experimental flag, make non-essential fields optional
Only api_key and org_id are required now; base_url, user_id, agent_id,
app_id, group_ids, wait, ingest_timeout, extract_artifacts, search_mode
and search_limit are marked optional (they have sensible defaults), so the
config panel no longer shows them as required. Removes the 'experimental'
capability so the node card no longer shows the EXPERIMENTAL badge.
* fix(node): xtrace_memory — minimal hackathon config (API key + org id)
Trim the config panel to the essentials: API Key and Org id (required),
plus optional User id and Group ids (shared memory). Hide the advanced
knobs (base_url, agent_id, app_id, synchronous ingest, ingest timeout,
extract_artifacts, recall mode/limit) — they keep sensible defaults in
IGlobal, so behavior is unchanged but the UI is much simpler.
* feat(node): xtrace_memory — move advanced options behind an 'Advanced settings' toggle
Keep the panel minimal by default (API Key, Org id, User id, Group ids) and
reveal the advanced knobs (base_url, agent_id, app_id, synchronous ingest,
ingest timeout, extract_artifacts, recall mode/limit) only when the user
flips the 'Advanced settings' toggle — same conditional pattern llamaparse
and tool_mcp_client use. Defaults unchanged.
* fix(example): xtrace-memory pipe — use ROCKETRIDE_-prefixed env vars
RocketRide only substitutes ${ROCKETRIDE_*} placeholders in pipelines, so
${XTRACE_API_KEY}/${XTRACE_ORG_ID} were never resolved. Use
${ROCKETRIDE_XTRACE_API_KEY} and ${ROCKETRIDE_XTRACE_ORG_ID}.
* docs(node): xtrace_memory — point API Key field/README to app.xtrace.ai (not mem.xtrace.ai)
Surface where to get credentials right in the form: the API Key and Org id
field help now link to the Developer Portal (app.xtrace.ai → Settings → API
Keys) and warn that mem.xtrace.ai (memhub/MCP, OAuth) has no API key. README
gets a matching 'Where to get your credentials' section.
* docs(node): xtrace_memory — drop MCP/OAuth mention from credential help
Keep the API Key/Org id guidance focused: get them from app.xtrace.ai →
Settings → API Keys (not mem.xtrace.ai). The MCP server / OAuth path isn't
relevant to this node, so it's removed from the field help and README.
* Working example
* feat(node): xtrace_memory — use the real xTrace logo as the node icon
* feat(node): xtrace_memory — use official xTrace vector logo as the icon
Replace the embedded-PNG placeholder with the official XTraceAI SVG
(vector mark + wordmark, animated gradient).
* feat(node): xtrace_memory — icon = xTrace mark only (drop wordmark)
The node header already shows the name, so the icon now uses just the
xTrace symbol (viewBox 0 0 140 140) instead of the full XTraceAI wordmark,
which was illegible squished into the small square icon slot.
* fix(node): xtrace_memory — don't retry non-idempotent ingest on 5xx/timeout
_request_with_retry gains an 'idempotent' flag (default True). The ingest
POST passes idempotent=False so it only retries on 429 (not processed),
avoiding duplicate memories on ambiguous 5xx/timeout. Reads (search, poll)
keep full retries. Addresses CodeRabbit review on PR #1065.
* docs(node): xtrace_memory — add explanatory comments to services.json (match llm_anthropic style)
* refactor(node): xtrace_memory — address review (tenacity, constants, docstring, skip dynamic test)
- Retries via tenacity (Retrying + retry_if_exception) instead of a hand-rolled
loop, keeping the idempotent gating (429 always; 5xx/timeout only for reads).
- Extract magic constants: _DEFAULT_BASE_URL, _DEFAULT_INGEST_TIMEOUT,
_MAX_INGEST_TIMEOUT, _REQUEST_TIMEOUT.
- Full Args/Returns/Raises docstring on _request_with_retry.
- Add tool_xtrace_memory to conftest skip_nodes: its dynamic test needs live
xTrace credentials (no live calls in default CI; opt-in via ROCKETRIDE_INCLUDE_SKIP).
Mocked unit tests still cover the logic.1 parent b36137e commit 30af066
11 files changed
Lines changed: 1321 additions & 0 deletions
File tree
- examples
- nodes
- src/nodes/tool_xtrace_memory
- test
- tool_xtrace_memory
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
0 commit comments