Skip to content

fix(openclaw): hyphenate memini-status/memini-namespace command names - #83

Closed
joryirving wants to merge 1 commit into
eleboucher:mainfrom
joryirving:fix/openclaw-command-colon-names
Closed

fix(openclaw): hyphenate memini-status/memini-namespace command names#83
joryirving wants to merge 1 commit into
eleboucher:mainfrom
joryirving:fix/openclaw-command-colon-names

Conversation

@joryirving

Copy link
Copy Markdown
Contributor

Summary

  • openclaw's command-name validator rejects a colon, so memini:status and memini:namespace (registered in integrations/openclaw/plugin/src/index.ts) both failed to register on every gateway start; memory_* tools were unaffected.
  • Fixed at the openclaw registration boundary only: the two literal names are now memini-status / memini-namespace (via new OPENCLAW_STATUS_COMMAND/OPENCLAW_NAMESPACE_COMMAND constants), plus the in-command help text that told users what to type.
  • Updated the matching test expectations (test/helpers.test.ts, test/regression.test.mjs) and the openclaw README's command table/namespace-resolution note.

Why not rename the Claude Code side too

Claude Code's plugin:command colon convention is correct there (plugin/commands/status.md / namespace.md, resolved via ${CLAUDE_PLUGIN_ROOT}) and is derived from the plugin/command directory layout, not from any string in this file. The two hosts don't actually share one name string — the openclaw plugin's src/index.ts hardcodes its own literal "memini:status"/"memini:namespace" in registerCommand() calls, independent of the Claude Code command markdown. So this is a narrow, source-only fix in the openclaw plugin; nothing needed to change on the Claude Code side.

I picked a hyphen (memini-status) as the separator since that's the only thing openclaw's validator accepts besides underscore, and it reads closest to the existing colon form. If a different separator convention is preferred, happy to adjust.

Generated files

Confirmed integrations/openclaw/plugin/dist/index.js (referenced in the bug report) is gitignored and build-only (npm run build, esbuild) — not hand-edited or committed. No other generated file (per CONTRIBUTING.md's drift-gate table) touches this code path.

Verification

  • npm run build && npm test in integrations/openclaw/plugin/ — 151 tests pass (test/regression.test.mjs, test/bundle.test.mjs, test/helpers.test.ts)
  • npm run typecheck — clean
  • npx oxfmt --check integrations/openclaw/README.md — clean
  • Inspected built dist/index.js to confirm only memini-status/memini-namespace appear, no leftover colon form

Fixes #82.

…namespace

openclaw's command-name validator rejects a colon ("Command name must
start with a letter and contain only letters, numbers, hyphens, and
underscores"), so both /memini:status and /memini:namespace failed to
register on every gateway start (memory_* tools were unaffected).

Fixes eleboucher#82.
@eleboucher

Copy link
Copy Markdown
Owner

Originally by eleboucher on 2026-08-27 19:18 UTC — view on source

/sync

@eleboucher

Copy link
Copy Markdown
Owner

Promoted to the canonical Forgejo repository (PR #235), which is the source of truth. Further review and merging happen there.

@eleboucher eleboucher closed this Aug 27, 2026
eleboucher pushed a commit that referenced this pull request Aug 28, 2026
… (#235)

> _Originally by **joryirving** on 2026-08-25 20:10 UTC — [view on source](#83

## Summary
- openclaw's command-name validator rejects a colon, so `memini:status` and `memini:namespace` (registered in `integrations/openclaw/plugin/src/index.ts`) both failed to register on every gateway start; `memory_*` tools were unaffected.
- Fixed at the openclaw registration boundary only: the two literal names are now `memini-status` / `memini-namespace` (via new `OPENCLAW_STATUS_COMMAND`/`OPENCLAW_NAMESPACE_COMMAND` constants), plus the in-command help text that told users what to type.
- Updated the matching test expectations (`test/helpers.test.ts`, `test/regression.test.mjs`) and the openclaw README's command table/namespace-resolution note.

## Why not rename the Claude Code side too
Claude Code's `plugin:command` colon convention is correct there (`plugin/commands/status.md` / `namespace.md`, resolved via `${CLAUDE_PLUGIN_ROOT}`) and is derived from the plugin/command directory layout, not from any string in this file. The two hosts don't actually share one name string — the openclaw plugin's `src/index.ts` hardcodes its own literal `"memini:status"`/`"memini:namespace"` in `registerCommand()` calls, independent of the Claude Code command markdown. So this is a narrow, source-only fix in the openclaw plugin; nothing needed to change on the Claude Code side.

I picked a hyphen (`memini-status`) as the separator since that's the only thing openclaw's validator accepts besides underscore, and it reads closest to the existing colon form. If a different separator convention is preferred, happy to adjust.

## Generated files
Confirmed `integrations/openclaw/plugin/dist/index.js` (referenced in the bug report) is gitignored and build-only (`npm run build`, esbuild) — not hand-edited or committed. No other generated file (per `CONTRIBUTING.md`'s drift-gate table) touches this code path.

## Verification
- `npm run build && npm test` in `integrations/openclaw/plugin/` — 151 tests pass (`test/regression.test.mjs`, `test/bundle.test.mjs`, `test/helpers.test.ts`)
- `npm run typecheck` — clean
- `npx oxfmt --check integrations/openclaw/README.md` — clean
- Inspected built `dist/index.js` to confirm only `memini-status`/`memini-namespace` appear, no leftover colon form

Fixes #82.

<!-- forgesync:src=github;host=github.com;repo=eleboucher/memini;kind=pull_request;id=83 -->

Co-authored-by: Jory Irving <jory.irving@stackadapt.com>
Reviewed-on: https://git.erwanleboucher.dev/eleboucher/memini/pulls/235
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

openclaw plugin: memini:status and memini:namespace fail command registration (colon rejected)

2 participants