memorix 1.8.4 → 1.8.6
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 +52 -0
- package/CLAUDE.md +3 -0
- package/README.md +8 -6
- package/README.zh-CN.md +5 -3
- package/assets/star-history-dark.svg +5 -5
- package/assets/star-history-light.svg +5 -5
- package/assets/star-history.json +35 -5
- package/dist/cli/index.js +1848 -754
- package/dist/dashboard/static/app.js +29 -885
- package/dist/dashboard/static/index.html +1 -5
- package/dist/dashboard/static/style.css +36 -503
- package/dist/index.d.ts +4 -4
- package/dist/index.js +286 -79
- package/dist/memcode/index.js +28035 -169
- package/dist/memcode-runtime/CHANGELOG.md +52 -0
- package/dist/sdk.js +103 -21
- package/dist/types.d.ts +1 -1
- package/docs/1.8.0-RELEASE-CANDIDATE-SPEC.md +22 -16
- package/docs/AGENT_OPERATOR_PLAYBOOK.md +2 -2
- package/docs/API_REFERENCE.md +10 -8
- package/docs/DASHBOARD.md +23 -0
- package/docs/DEVELOPMENT.md +2 -2
- package/docs/DOCKER.md +6 -3
- package/docs/INTEGRATIONS.md +2 -1
- package/docs/MODULES.md +46 -20
- package/docs/PERFORMANCE.md +1 -1
- package/docs/README.md +8 -7
- package/docs/SETUP.md +4 -3
- package/package.json +11 -11
- package/plugins/antigravity/memorix/plugin.json +1 -1
- package/plugins/antigravity/memorix/rules/memorix.md +5 -0
- package/plugins/claude/memorix/.claude-plugin/plugin.json +1 -1
- package/plugins/claude/memorix/skills/memorix-memory/SKILL.md +3 -0
- package/plugins/claude/memorix/skills/memorix-mini-skills/SKILL.md +2 -0
- package/plugins/claude/memorix/skills/memorix-orchestrate/SKILL.md +2 -0
- package/plugins/codebuddy/memorix/.codebuddy-plugin/plugin.json +1 -1
- package/plugins/codebuddy/memorix/skills/memorix-memory/SKILL.md +3 -0
- package/plugins/codebuddy/memorix/skills/memorix-mini-skills/SKILL.md +2 -0
- package/plugins/codebuddy/memorix/skills/memorix-orchestrate/SKILL.md +2 -0
- package/plugins/codex/memorix/.codex-plugin/plugin.json +1 -1
- package/plugins/codex/memorix/skills/memorix-memory/SKILL.md +3 -0
- package/plugins/codex/memorix/skills/memorix-mini-skills/SKILL.md +2 -0
- package/plugins/codex/memorix/skills/memorix-orchestrate/SKILL.md +2 -0
- package/plugins/copilot/memorix/plugin.json +1 -1
- package/plugins/copilot/memorix/skills/memorix-memory/SKILL.md +3 -0
- package/plugins/copilot/memorix/skills/memorix-mini-skills/SKILL.md +2 -0
- package/plugins/copilot/memorix/skills/memorix-orchestrate/SKILL.md +2 -0
- package/plugins/cursor/memorix/skills/memorix-memory/SKILL.md +3 -0
- package/plugins/cursor/memorix/skills/memorix-mini-skills/SKILL.md +2 -0
- package/plugins/cursor/memorix/skills/memorix-orchestrate/SKILL.md +2 -0
- package/plugins/gemini/memorix/GEMINI.md +5 -0
- package/plugins/gemini/memorix/gemini-extension.json +1 -1
- package/plugins/hermes/memorix/plugin.yaml +7 -1
- package/plugins/omp/memorix/package.json +1 -1
- package/plugins/openclaw/memorix/.codex-plugin/plugin.json +1 -1
- package/plugins/pi/memorix/package.json +1 -1
- package/plugins/pi/memorix/skills/memorix-memory/SKILL.md +3 -0
- package/plugins/pi/memorix/skills/memorix-mini-skills/SKILL.md +2 -0
- package/plugins/pi/memorix/skills/memorix-orchestrate/SKILL.md +2 -0
- package/server.json +2 -2
- package/src/cli/command-guide.ts +52 -1
- package/src/cli/commands/agent-integrations.ts +1 -0
- package/src/cli/commands/background.ts +166 -6
- package/src/cli/commands/hooks-install.ts +9 -2
- package/src/cli/commands/hooks-preview.ts +5 -0
- package/src/cli/commands/integrate.ts +2 -0
- package/src/cli/commands/serve-http.ts +73 -80
- package/src/cli/commands/serve.ts +95 -93
- package/src/cli/commands/setup.ts +11 -1
- package/src/cli/commands/uninstall.ts +24 -2
- package/src/cli/index.ts +1 -1
- package/src/codegraph/task-lens.ts +72 -7
- package/src/dashboard/static/index.html +1 -5
- package/src/dashboard/static/style.css +36 -503
- package/src/hooks/installers/index.ts +58 -0
- package/src/hooks/official-skills.ts +13 -6
- package/src/hooks/types.ts +2 -0
- package/src/integrations/registry.ts +9 -0
- package/src/memory/graph.ts +2 -2
- package/src/server/mcp-diagnostics.ts +9 -7
- package/src/server/modern-mcp-bridge.ts +108 -0
- package/src/server/stdio-startup-gate.ts +41 -2
- package/src/server/tool-profile.ts +7 -6
- package/src/server.ts +1 -1
- package/src/store/orama-store.ts +2 -2
- package/src/types.ts +1 -1
- package/src/wiki/types.ts +2 -2
- package/src/workspace/mcp-adapters/workbuddy.ts +71 -0
|
@@ -4,6 +4,58 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [1.8.6] - 2026-09-01
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- **WorkBuddy integration (#204)** -- adds project and user-level MCP setup,
|
|
11
|
+
project `AGENTS.md` guidance, safe no-op behavior for WorkBuddy's absent
|
|
12
|
+
hooks surface, and uninstall discovery. Thanks to @wjxn13 for the original
|
|
13
|
+
implementation and follow-up fixes; the contributor commits remain in the
|
|
14
|
+
merge history.
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
- **Continuation intent (#266)** -- a bare `继续`, `continue`, or `resume`
|
|
18
|
+
no longer triggers an expensive prior-work brief, while short substantive
|
|
19
|
+
requests such as `继续修复`, `resume bug`, and `继续 API` still receive
|
|
20
|
+
continuity context. Explicit handoff vocabulary remains supported. Thanks
|
|
21
|
+
to @Tom-Ma-Ming for the original fix and regression cases.
|
|
22
|
+
- **Star History assets** -- refreshed the self-hosted chart data and light /
|
|
23
|
+
dark SVG assets.
|
|
24
|
+
|
|
25
|
+
## [1.8.5] - 2026-08-30
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
- **Modern MCP transport** -- `memorix serve` and the HTTP control plane now
|
|
29
|
+
use the official MCP v2 server path for 2026-07-28 discovery, request
|
|
30
|
+
metadata, result envelopes, response metadata, stateless requests, and the
|
|
31
|
+
subscriptions listen surface while forwarding business tools through the
|
|
32
|
+
existing Memorix implementation.
|
|
33
|
+
- **Background start race (#259)** -- background startup now holds an
|
|
34
|
+
exclusive, heartbeating lock across the check/spawn/readiness window. Lock
|
|
35
|
+
contention fails closed with a retry message instead of starting an unlocked
|
|
36
|
+
duplicate control plane; stale dead-owner locks are recoverable.
|
|
37
|
+
- **Windows and EOF behavior** -- stdio discovery remains compatible before
|
|
38
|
+
and after readiness, roots-based project switching and deferred maintenance
|
|
39
|
+
are preserved, and stdin EOF closes the official transport cleanly.
|
|
40
|
+
- **Local build reliability** -- the large runtime, CLI, and memcode bundles
|
|
41
|
+
build sequentially, reducing Windows memory pressure without changing
|
|
42
|
+
published entry points. Slow CLI uninstall tests now use asynchronous,
|
|
43
|
+
hidden child processes so the full test run exits cleanly.
|
|
44
|
+
- **Time-stable graph evaluation** -- graph-context fixtures pin their
|
|
45
|
+
reference date so retention policy changes do not make the test depend on the
|
|
46
|
+
calendar.
|
|
47
|
+
|
|
48
|
+
### MCP Compatibility Boundary
|
|
49
|
+
- Modern Tasks are explicitly unsupported because Memorix does not expose a
|
|
50
|
+
durable task store for MCP task semantics.
|
|
51
|
+
- List responses expose a private zero-TTL protocol hint; Memorix does not
|
|
52
|
+
claim a reusable server-side list cache.
|
|
53
|
+
- The external `@hasmcp/mcp-spec-test` runner currently fails on this Windows
|
|
54
|
+
host before reaching the target because it imports drive-letter paths as ESM
|
|
55
|
+
URLs. Production verification therefore includes official v2 direct tests,
|
|
56
|
+
real stdio/HTTP smoke, and the legacy compatibility path; this external
|
|
57
|
+
runner result is not reported as a pass.
|
|
58
|
+
|
|
7
59
|
## [1.8.4] - 2026-08-27
|
|
8
60
|
|
|
9
61
|
### Fixed
|
package/dist/sdk.js
CHANGED
|
@@ -149956,6 +149956,15 @@ __export(task_lens_exports, {
|
|
|
149956
149956
|
scoreLensSource: () => scoreLensSource,
|
|
149957
149957
|
shouldShowLensSource: () => shouldShowLensSource
|
|
149958
149958
|
});
|
|
149959
|
+
function hasSubstantiveTask(text2, keyword) {
|
|
149960
|
+
const withoutKeyword = text2.replace(
|
|
149961
|
+
new RegExp(keyword.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "gi"),
|
|
149962
|
+
" "
|
|
149963
|
+
);
|
|
149964
|
+
const residual = withoutKeyword.replace(TASK_FILLER_WORDS, " ").replace(TASK_FILLER_PHRASES, " ").replace(/[\s\p{P}]/gu, "");
|
|
149965
|
+
if (/^(?:任务|工作|一下|一起|接着)$/u.test(residual)) return false;
|
|
149966
|
+
return Array.from(residual).length >= MIN_TASK_SUBSTANCE;
|
|
149967
|
+
}
|
|
149959
149968
|
function normalizePath2(path35) {
|
|
149960
149969
|
return path35.replace(/\\/g, "/");
|
|
149961
149970
|
}
|
|
@@ -150015,8 +150024,12 @@ function resolveTaskLens(task) {
|
|
|
150015
150024
|
}
|
|
150016
150025
|
function isContinuationTask(task) {
|
|
150017
150026
|
const normalized = (task ?? "").trim().toLowerCase();
|
|
150018
|
-
|
|
150019
|
-
|
|
150027
|
+
if (normalized.length === 0) return false;
|
|
150028
|
+
if (EXPLICIT_HANDOFF_KEYWORDS.some((keyword) => containsTaskKeyword(normalized, keyword))) {
|
|
150029
|
+
return true;
|
|
150030
|
+
}
|
|
150031
|
+
return AMBIGUOUS_CONTINUATION_KEYWORDS.some(
|
|
150032
|
+
(keyword) => containsTaskKeyword(normalized, keyword) && hasSubstantiveTask(normalized, keyword)
|
|
150020
150033
|
);
|
|
150021
150034
|
}
|
|
150022
150035
|
function pathKindScore(path35, lens) {
|
|
@@ -150162,7 +150175,7 @@ function shouldShowLensSource(source, lens, task) {
|
|
|
150162
150175
|
if (lens.id === "onboarding" || lens.id === "release" || lens.id === "docs") return score >= 40;
|
|
150163
150176
|
return score > 0;
|
|
150164
150177
|
}
|
|
150165
|
-
var STOP_WORDS, LENSES, KEYWORDS,
|
|
150178
|
+
var STOP_WORDS, LENSES, KEYWORDS, EXPLICIT_HANDOFF_KEYWORDS, AMBIGUOUS_CONTINUATION_KEYWORDS, TASK_FILLER_WORDS, TASK_FILLER_PHRASES, MIN_TASK_SUBSTANCE, LENS_PRIORITY;
|
|
150166
150179
|
var init_task_lens = __esm({
|
|
150167
150180
|
"src/codegraph/task-lens.ts"() {
|
|
150168
150181
|
"use strict";
|
|
@@ -150283,18 +150296,31 @@ var init_task_lens = __esm({
|
|
|
150283
150296
|
docs: ["doc", "docs", "readme", "\u6587\u6863", "\u8BF4\u660E"],
|
|
150284
150297
|
test: ["coverage", "fixture", "smoke", "spec", "test", "tests", "testing", "vitest", "\u6D4B\u8BD5"]
|
|
150285
150298
|
};
|
|
150286
|
-
|
|
150299
|
+
EXPLICIT_HANDOFF_KEYWORDS = [
|
|
150300
|
+
"handoff",
|
|
150301
|
+
"hand off",
|
|
150302
|
+
"hand over",
|
|
150303
|
+
"previous session",
|
|
150304
|
+
"last session",
|
|
150305
|
+
"pick up where",
|
|
150306
|
+
"\u4EA4\u63A5",
|
|
150307
|
+
// 覆盖「任务交接」「工作交接」
|
|
150308
|
+
"\u63A5\u624B",
|
|
150309
|
+
"\u4E0A\u6B21\u4F1A\u8BDD",
|
|
150310
|
+
"\u4E0A\u6B21\u7684\u4F1A\u8BDD"
|
|
150311
|
+
];
|
|
150312
|
+
AMBIGUOUS_CONTINUATION_KEYWORDS = [
|
|
150287
150313
|
"continue",
|
|
150288
150314
|
"resume",
|
|
150289
|
-
"pick up",
|
|
150290
150315
|
"carry on",
|
|
150291
|
-
"
|
|
150316
|
+
"pick up",
|
|
150292
150317
|
"\u7EE7\u7EED",
|
|
150293
|
-
"\u63A5\u624B",
|
|
150294
150318
|
"\u6062\u590D",
|
|
150295
|
-
"\u5EF6\u7EED"
|
|
150296
|
-
"\u4E0A\u6B21\u4F1A\u8BDD"
|
|
150319
|
+
"\u5EF6\u7EED"
|
|
150297
150320
|
];
|
|
150321
|
+
TASK_FILLER_WORDS = /\b(?:please|task|work|the|a|an)\b/giu;
|
|
150322
|
+
TASK_FILLER_PHRASES = /(?:吧|了|呢|啊|吗|嘛|呀|哦|噢|一下|一起|接着|请|帮我)/gu;
|
|
150323
|
+
MIN_TASK_SUBSTANCE = 2;
|
|
150298
150324
|
LENS_PRIORITY = [
|
|
150299
150325
|
"bugfix",
|
|
150300
150326
|
"release",
|
|
@@ -162443,6 +162469,9 @@ var init_official_skills = __esm({
|
|
|
162443
162469
|
'| Specific past decision, bug, file, or change | `memorix_search` | `memorix memory search --query "<topic>"` |',
|
|
162444
162470
|
"| Need the full source for a search hit | `memorix_detail` | `memorix memory detail --id <id>` |",
|
|
162445
162471
|
"| Need the sequence around one memory | `memorix_timeline` | `memorix memory timeline --id <id>` |",
|
|
162472
|
+
"| Check source and freshness for a memory | `memorix_evidence` | `memorix evidence list|get|events` |",
|
|
162473
|
+
"| Record whether a memory helped, conflicted, or was corrected | `memorix_feedback` | `memorix feedback record|show|audit` |",
|
|
162474
|
+
"| Inspect or import controlled media | `memorix_media` | `memorix media import|attach|list|show|status` |",
|
|
162446
162475
|
'| Learned reusable project knowledge | `memorix_store` | `memorix memory store --type <type> --entity <name> --title "<title>" "<text>"` |',
|
|
162447
162476
|
"| Task or bug is complete/outdated | `memorix_resolve` | `memorix memory resolve --ids <ids>` |",
|
|
162448
162477
|
"",
|
|
@@ -162573,6 +162602,8 @@ var init_official_skills = __esm({
|
|
|
162573
162602
|
"",
|
|
162574
162603
|
"Promote memories into mini-skills only when they are reusable instructions, not just historical notes.",
|
|
162575
162604
|
"",
|
|
162605
|
+
"The standard setup uses the `lite` MCP profile. `memorix_skills` and `memorix_promote` are full-profile tools, so use the CLI fallback unless the current server was explicitly started with `MEMORIX_MODE=full` or `--mode full`. Do not probe hidden MCP tools repeatedly.",
|
|
162606
|
+
"",
|
|
162576
162607
|
"## Tool Router",
|
|
162577
162608
|
"",
|
|
162578
162609
|
"| Situation | Prefer | CLI fallback |",
|
|
@@ -162608,15 +162639,17 @@ var init_official_skills = __esm({
|
|
|
162608
162639
|
"| Situation | Prefer | CLI fallback |",
|
|
162609
162640
|
"|---|---|---|",
|
|
162610
162641
|
'| Run managed subagent execution | CLI | `memorix orchestrate --goal "<goal>" --agents claude:1,codex:1` |',
|
|
162611
|
-
"| Register coordination identity | `team_manage` action `join` | `memorix team join --agentType <agent>` |",
|
|
162612
|
-
"| Create or inspect tasks | `team_task` | `memorix task create|list|claim|complete` |",
|
|
162613
|
-
"| Send or read coordination messages | `team_message` | `memorix message send|broadcast|inbox` |",
|
|
162614
|
-
"| Share structured handoff | `memorix_handoff` | `memorix handoff send` |",
|
|
162615
|
-
"| Avoid file conflicts | `team_file_lock` | `memorix lock lock|unlock|status` |",
|
|
162616
|
-
"| Poll joined coordination state | `memorix_poll` | `memorix poll` |",
|
|
162642
|
+
"| Register coordination identity when team MCP tools are available | `team_manage` action `join` | `memorix team join --agentType <agent>` |",
|
|
162643
|
+
"| Create or inspect tasks when team MCP tools are available | `team_task` | `memorix task create|list|claim|complete` |",
|
|
162644
|
+
"| Send or read coordination messages when team MCP tools are available | `team_message` | `memorix message send|broadcast|inbox` |",
|
|
162645
|
+
"| Share structured handoff when team MCP tools are available | `memorix_handoff` | `memorix handoff send` |",
|
|
162646
|
+
"| Avoid file conflicts when team MCP tools are available | `team_file_lock` | `memorix lock lock|unlock|status` |",
|
|
162647
|
+
"| Poll joined coordination state when team MCP tools are available | `memorix_poll` | `memorix poll` |",
|
|
162617
162648
|
"",
|
|
162618
162649
|
"## Boundaries",
|
|
162619
162650
|
"",
|
|
162651
|
+
"The standard setup uses the `lite` MCP profile. Coordination MCP tools are exposed only by `team` or `full`; use the CLI fallback for ordinary installations, or explicitly start the server with `--mode team`. Do not probe unavailable team tools in a loop.",
|
|
162652
|
+
"",
|
|
162620
162653
|
"- For ordinary memory, do not join coordination state.",
|
|
162621
162654
|
"- For production multi-agent execution, prefer `memorix orchestrate` so the main process owns planning, dispatch, retries, and verification gates.",
|
|
162622
162655
|
"- `memorix orchestrate` uses the current checkout for single-worker runs and task worktrees for parallel runs. Use `--isolated` to force worktree isolation, `--no-worktree` to disable it, `--allow-dirty` to run with uncommitted changes, and `--no-auto-merge` to preserve task worktrees for manual review.",
|
|
@@ -163231,6 +163264,8 @@ function getProjectConfigPath(agent, projectRoot) {
|
|
|
163231
163264
|
return path33.join(projectRoot, ".agents", "hooks.json");
|
|
163232
163265
|
case "gemini-cli":
|
|
163233
163266
|
return path33.join(projectRoot, ".gemini", "settings.json");
|
|
163267
|
+
case "workbuddy":
|
|
163268
|
+
return "";
|
|
163234
163269
|
default:
|
|
163235
163270
|
return path33.join(projectRoot, ".memorix", "hooks.json");
|
|
163236
163271
|
}
|
|
@@ -163264,6 +163299,8 @@ function getGlobalConfigPath(agent) {
|
|
|
163264
163299
|
return path33.join(home, ".trae", "rules", "project_rules.md");
|
|
163265
163300
|
case "dsh":
|
|
163266
163301
|
return path33.join(process.env.DSH_HOME?.trim() || path33.join(home, ".dsh"), "AGENTS.md");
|
|
163302
|
+
case "workbuddy":
|
|
163303
|
+
return "";
|
|
163267
163304
|
default:
|
|
163268
163305
|
return path33.join(home, ".memorix", "hooks.json");
|
|
163269
163306
|
}
|
|
@@ -163290,6 +163327,8 @@ function getAgentRulesPath(agent, root, global2 = false) {
|
|
|
163290
163327
|
return path33.join(root, ".trae", "rules", "project_rules.md");
|
|
163291
163328
|
case "dsh":
|
|
163292
163329
|
return path33.join(process.env.DSH_HOME?.trim() || path33.join(root, ".dsh"), "AGENTS.md");
|
|
163330
|
+
case "workbuddy":
|
|
163331
|
+
return "";
|
|
163293
163332
|
default:
|
|
163294
163333
|
return path33.join(root, ".agent", "rules", "memorix.md");
|
|
163295
163334
|
}
|
|
@@ -163316,6 +163355,8 @@ function getAgentRulesPath(agent, root, global2 = false) {
|
|
|
163316
163355
|
return path33.join(root, ".trae", "rules", "project_rules.md");
|
|
163317
163356
|
case "dsh":
|
|
163318
163357
|
return path33.join(root, "AGENTS.md");
|
|
163358
|
+
case "workbuddy":
|
|
163359
|
+
return path33.join(root, "AGENTS.md");
|
|
163319
163360
|
default:
|
|
163320
163361
|
return path33.join(root, ".agent", "rules", "memorix.md");
|
|
163321
163362
|
}
|
|
@@ -163404,6 +163445,11 @@ async function detectInstalledAgents() {
|
|
|
163404
163445
|
agents.push("dsh");
|
|
163405
163446
|
} catch {
|
|
163406
163447
|
}
|
|
163448
|
+
try {
|
|
163449
|
+
await fs21.access(path33.join(home, ".workbuddy"));
|
|
163450
|
+
agents.push("workbuddy");
|
|
163451
|
+
} catch {
|
|
163452
|
+
}
|
|
163407
163453
|
return agents;
|
|
163408
163454
|
}
|
|
163409
163455
|
async function installHooks(agent, projectRoot, global2 = false) {
|
|
@@ -163417,6 +163463,16 @@ async function installHooks(agent, projectRoot, global2 = false) {
|
|
|
163417
163463
|
}
|
|
163418
163464
|
};
|
|
163419
163465
|
}
|
|
163466
|
+
if (agent === "workbuddy" && global2) {
|
|
163467
|
+
return {
|
|
163468
|
+
agent,
|
|
163469
|
+
configPath: "",
|
|
163470
|
+
events: [],
|
|
163471
|
+
generated: {
|
|
163472
|
+
note: "WorkBuddy has no hook system and no user-global guidance file \u2014 MCP only; no global guidance/hooks. Run `memorix setup --agent workbuddy` (without --global) to install project MCP config and AGENTS.md guidance."
|
|
163473
|
+
}
|
|
163474
|
+
};
|
|
163475
|
+
}
|
|
163420
163476
|
if (global2 && getGlobalConfigPath(agent) === "") {
|
|
163421
163477
|
return {
|
|
163422
163478
|
agent,
|
|
@@ -163499,6 +163555,17 @@ async function installHooks(agent, projectRoot, global2 = false) {
|
|
|
163499
163555
|
}
|
|
163500
163556
|
};
|
|
163501
163557
|
}
|
|
163558
|
+
case "workbuddy": {
|
|
163559
|
+
const rulesPath = await installAgentRules(agent, projectRoot, global2);
|
|
163560
|
+
return {
|
|
163561
|
+
agent,
|
|
163562
|
+
configPath: rulesPath,
|
|
163563
|
+
events: [],
|
|
163564
|
+
generated: {
|
|
163565
|
+
note: "WorkBuddy has no hook system \u2014 installed AGENTS.md guidance only; the MCP row is installed by `memorix setup --agent workbuddy`."
|
|
163566
|
+
}
|
|
163567
|
+
};
|
|
163568
|
+
}
|
|
163502
163569
|
case "opencode": {
|
|
163503
163570
|
const pluginContent = generateOpenCodePlugin();
|
|
163504
163571
|
const pluginPath = global2 ? getGlobalConfigPath(agent) : getProjectConfigPath(agent, projectRoot);
|
|
@@ -163628,6 +163695,7 @@ async function installHooks(agent, projectRoot, global2 = false) {
|
|
|
163628
163695
|
};
|
|
163629
163696
|
}
|
|
163630
163697
|
async function installAgentRules(agent, projectRoot, global2 = false) {
|
|
163698
|
+
if (agent === "workbuddy" && global2) return "";
|
|
163631
163699
|
const rulesContent = getAgentRulesContent(agent, global2 ? "global" : "project");
|
|
163632
163700
|
const rulesRoot = global2 ? os5.homedir() : projectRoot;
|
|
163633
163701
|
const rulesPath = getAgentRulesPath(agent, rulesRoot, global2);
|
|
@@ -163780,7 +163848,10 @@ alwaysApply: true
|
|
|
163780
163848
|
"| `memorix_store` | Save something worth persisting |",
|
|
163781
163849
|
'| `memorix_store_reasoning` | Save the "why" behind a decision |',
|
|
163782
163850
|
"| `memorix_resolve` | Mark completed/outdated memories |",
|
|
163783
|
-
"| `memorix_session_start` | Load session context (handoff, orchestration coordination) |"
|
|
163851
|
+
"| `memorix_session_start` | Load session context (handoff, orchestration coordination) |",
|
|
163852
|
+
"| `memorix_evidence` | Check a memory source, freshness, and verification state |",
|
|
163853
|
+
"| `memorix_feedback` | Record whether a memory helped, conflicted, or was corrected |",
|
|
163854
|
+
"| `memorix_media` | Inspect or import controlled local media |"
|
|
163784
163855
|
].join("\n");
|
|
163785
163856
|
}
|
|
163786
163857
|
async function uninstallHooks(agent, projectRoot, global2 = false) {
|
|
@@ -163790,6 +163861,9 @@ async function uninstallHooks(agent, projectRoot, global2 = false) {
|
|
|
163790
163861
|
if (agent === "pi") {
|
|
163791
163862
|
return false;
|
|
163792
163863
|
}
|
|
163864
|
+
if (agent === "workbuddy") {
|
|
163865
|
+
return false;
|
|
163866
|
+
}
|
|
163793
163867
|
if (global2 && getGlobalConfigPath(agent) === "") {
|
|
163794
163868
|
return false;
|
|
163795
163869
|
}
|
|
@@ -167662,16 +167736,24 @@ function resolveToolProfile(opts) {
|
|
|
167662
167736
|
return normalize(opts.explicit) ?? normalize(opts.envValue) ?? opts.fallback;
|
|
167663
167737
|
}
|
|
167664
167738
|
function describeProfile(profile) {
|
|
167739
|
+
const count2 = countToolsInProfile(profile);
|
|
167665
167740
|
switch (profile) {
|
|
167666
167741
|
case "micro":
|
|
167667
|
-
return
|
|
167742
|
+
return `micro (agent-ready context + bounded recovery/media, ${count2} tools)`;
|
|
167668
167743
|
case "lite":
|
|
167669
|
-
return
|
|
167744
|
+
return `lite (core memory + sessions, ${count2} tools)`;
|
|
167670
167745
|
case "team":
|
|
167671
|
-
return
|
|
167746
|
+
return `team (lite + coordination tools + dashboard + knowledge workspace, ${count2} tools)`;
|
|
167672
167747
|
case "full":
|
|
167673
|
-
return
|
|
167748
|
+
return `full (all tools including advanced / KG-compat, ${count2} tools)`;
|
|
167749
|
+
}
|
|
167750
|
+
}
|
|
167751
|
+
function countToolsInProfile(profile) {
|
|
167752
|
+
let n = 0;
|
|
167753
|
+
for (const name of Object.keys(TOOL_PROFILES)) {
|
|
167754
|
+
if (isToolInProfile(name, profile)) n++;
|
|
167674
167755
|
}
|
|
167756
|
+
return n;
|
|
167675
167757
|
}
|
|
167676
167758
|
|
|
167677
167759
|
// src/server.ts
|
|
@@ -167816,7 +167898,7 @@ var MCP_SERVER_INFO_META_KEY = "io.modelcontextprotocol/serverInfo";
|
|
|
167816
167898
|
function getMcpServerInfo() {
|
|
167817
167899
|
return {
|
|
167818
167900
|
name: "memorix",
|
|
167819
|
-
version: true ? "1.8.
|
|
167901
|
+
version: true ? "1.8.6" : "1.0.1"
|
|
167820
167902
|
};
|
|
167821
167903
|
}
|
|
167822
167904
|
function createMcpDiscoverResult(capabilities, serverInfo) {
|
package/dist/types.d.ts
CHANGED
|
@@ -608,7 +608,7 @@ interface MemoryRef {
|
|
|
608
608
|
/** MCP config format adapter interface */
|
|
609
609
|
interface MCPConfigAdapter {
|
|
610
610
|
/** Setup-only adapters may support a host that does not participate in workspace sync. */
|
|
611
|
-
readonly source: AgentTarget | 'codebuddy' | 'dsh';
|
|
611
|
+
readonly source: AgentTarget | 'codebuddy' | 'dsh' | 'workbuddy';
|
|
612
612
|
/** Parse MCP server entries from a config file */
|
|
613
613
|
parse(content: string): MCPServerEntry[];
|
|
614
614
|
/** Generate config file content from MCP server entries */
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
# Memorix 1.8.
|
|
1
|
+
# Memorix 1.8.5 Release Acceptance Specification
|
|
2
2
|
|
|
3
|
-
Status: accepted implementation contract for Memorix 1.8.
|
|
3
|
+
Status: accepted implementation contract for Memorix 1.8.5.
|
|
4
|
+
|
|
5
|
+
This document keeps its historical filename for link stability. The current
|
|
6
|
+
release contract supersedes the original 1.8.0 wording below.
|
|
4
7
|
|
|
5
8
|
## Acceptance Checklist
|
|
6
9
|
|
|
@@ -14,22 +17,25 @@ Status: accepted implementation contract for Memorix 1.8.0.
|
|
|
14
17
|
- [x] Provide dashboard evidence/provenance views without replacing the existing UI.
|
|
15
18
|
- [x] Preserve explicit project/session handles across restart and client shapes.
|
|
16
19
|
- [x] Verify CLI fallback, Windows child-process hiding, HTTP old/new smoke, build, and package contents.
|
|
20
|
+
- [x] Add the official MCP v2 transport path while retaining legacy clients.
|
|
21
|
+
- [x] Reject unsupported durable Tasks explicitly instead of returning fake success.
|
|
17
22
|
|
|
18
23
|
## Compatibility Contract
|
|
19
24
|
|
|
20
25
|
Memorix preserves the legacy 2025-era initialize contract, including stdio and
|
|
21
|
-
stateful Streamable HTTP with `Mcp-Session-Id`. Memorix 1.8.
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
`tools/
|
|
26
|
-
|
|
27
|
-
project initialization, answers discovery
|
|
28
|
-
messages in order; EOF is deferred until
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
26
|
+
stateful Streamable HTTP with `Mcp-Session-Id`. Memorix 1.8.5 uses the official
|
|
27
|
+
MCP v2 transport for the modern stateless path and retains the legacy bridge
|
|
28
|
+
for existing clients. The `server/discover` result is complete for the
|
|
29
|
+
supported identity, versions, capabilities, result metadata, and private
|
|
30
|
+
zero-TTL cache hint. Versionless `tools/list` and `tools/call` remain accepted
|
|
31
|
+
for legacy clients. The stdio startup gate reads bounded newline-delimited
|
|
32
|
+
input before project initialization, answers early discovery, and replays all
|
|
33
|
+
other messages in order; EOF is deferred until queued input is released.
|
|
34
|
+
Stateless HTTP project handles own project routing on the modern path.
|
|
35
|
+
Subscriptions are supported with the official listen surface. Durable Tasks
|
|
36
|
+
remain unsupported and are rejected explicitly because Memorix does not yet
|
|
37
|
+
have a durable MCP task contract; list responses carry a zero-TTL hint rather
|
|
38
|
+
than pretending to have a reusable server-side cache.
|
|
33
39
|
|
|
34
40
|
Antigravity is the primary setup target. Gemini CLI remains a compatibility and
|
|
35
41
|
migration path. GitHub issue #204 (WorkBuddy) is intentionally not merged or
|
|
@@ -73,8 +79,8 @@ is rejected for that task window.
|
|
|
73
79
|
|
|
74
80
|
## Explicit Non-goals for 1.8.0
|
|
75
81
|
|
|
76
|
-
- No fake MCP Tasks/polling implementation when
|
|
77
|
-
|
|
82
|
+
- No fake MCP Tasks/polling implementation when Memorix does not expose a
|
|
83
|
+
durable server-side task contract.
|
|
78
84
|
- No remote memory hub, proxying of model traffic, or upstream installer.
|
|
79
85
|
- No claim that the bundled Lite parser is a semantic CodeGraph.
|
|
80
86
|
- No marketing landing page in place of an operator evidence console.
|
|
@@ -137,7 +137,7 @@ when the user wants:
|
|
|
137
137
|
- explicit task/message/handoff/lock coordination
|
|
138
138
|
- one shared HTTP service process
|
|
139
139
|
|
|
140
|
-
Default recommendation: if the user wants memory inside an existing IDE or agent, start with `memorix setup --agent <agent> --global`. Use `memorix serve` only for manual MCP wiring. Use the CLI for direct workflows and automation because it does not depend on an IDE's MCP session lifecycle. Use memcode only when the user wants the bundled terminal agent. Reach for HTTP only when a shared background service, multi-client MCP access, Docker, or a live dashboard endpoint is actually needed.
|
|
140
|
+
Default recommendation: if the user wants memory inside an existing IDE or agent, start with `memorix setup --agent <agent> --global`. Use `memorix serve` only for manual MCP wiring. Use the CLI for direct workflows and automation because it does not depend on an IDE's MCP session lifecycle. Use memcode only when the user wants the bundled terminal agent. Reach for HTTP only when a shared background service, multi-client MCP access, a VPS Docker deployment, or a live dashboard endpoint is actually needed. Local development runs Node directly.
|
|
141
141
|
|
|
142
142
|
Use:
|
|
143
143
|
|
|
@@ -826,7 +826,7 @@ read this document first, then act.
|
|
|
826
826
|
This playbook is the canonical AI-facing guide for installation, project binding, integration, hooks, troubleshooting, and safe usage.
|
|
827
827
|
## Docker Note
|
|
828
828
|
|
|
829
|
-
When Memorix runs in Docker, treat it as an **HTTP service deployment**, not a stdio MCP process.
|
|
829
|
+
When Memorix runs in Docker on a VPS/hosted machine, treat it as an **HTTP service deployment**, not a stdio MCP process. Docker is not required for local development.
|
|
830
830
|
|
|
831
831
|
- Connect IDEs and agents to `http://host:3211/mcp`
|
|
832
832
|
- Use `memorix_session_start(projectRoot=...)` with a path that is visible **inside** the container
|
package/docs/API_REFERENCE.md
CHANGED
|
@@ -28,7 +28,7 @@ Use **MCP** when:
|
|
|
28
28
|
Use the **CLI** when:
|
|
29
29
|
|
|
30
30
|
- you want to inspect or change project state from a terminal
|
|
31
|
-
- you are on SSH / Docker / CI / NAS and want direct commands
|
|
31
|
+
- you are on SSH / VPS Docker / CI / NAS and want direct commands
|
|
32
32
|
- you want readable, namespaced actions instead of raw MCP tool payloads
|
|
33
33
|
- you want full access to Memorix CLI capabilities without depending on an MCP client
|
|
34
34
|
|
|
@@ -150,17 +150,19 @@ feedback projection.
|
|
|
150
150
|
### MCP Compatibility
|
|
151
151
|
|
|
152
152
|
Legacy clients use stateful Streamable HTTP with `Mcp-Session-Id` and the
|
|
153
|
-
2025-era `initialize` handshake. The 1.8.
|
|
153
|
+
2025-era `initialize` handshake. The 1.8.6 stdio server starts a bounded
|
|
154
154
|
newline-delimited JSON-RPC gate before project initialization: it answers the
|
|
155
155
|
2026-07-28 `server/discover` request before `initialize`, then replays other
|
|
156
156
|
requests, notifications, and responses in order into the pinned SDK transport.
|
|
157
157
|
Versionless `tools/list` and `tools/call` use the SDK's legacy result envelopes.
|
|
158
|
-
HTTP
|
|
159
|
-
`Mcp-Project-Handle`; `/protocol-diagnostics`
|
|
160
|
-
Modern result metadata is discovery
|
|
161
|
-
subscriptions
|
|
162
|
-
|
|
163
|
-
|
|
158
|
+
HTTP modern clients may use the stateless `2026-07-28` path and a durable
|
|
159
|
+
`Mcp-Project-Handle`; `/protocol-diagnostics` reports this as supported.
|
|
160
|
+
Modern result metadata is returned for discovery, list, and call responses.
|
|
161
|
+
The official subscriptions listen surface is available, but Memorix has no
|
|
162
|
+
durable Tasks implementation, so task requests remain explicitly unsupported.
|
|
163
|
+
List responses carry a private zero-TTL hint, not a reusable server-side cache.
|
|
164
|
+
When MCP discovery is unavailable, use one bounded `memorix context --fallback`
|
|
165
|
+
request for a task; repeated fallback probing is rejected by the local budget.
|
|
164
166
|
|
|
165
167
|
The built-in Lite provider indexes common code files with lightweight file, symbol, and import facts. It is a structural fallback, not a language-server-quality graph. When a project already has a healthy local CodeGraph index, `[codegraph].external_context = "auto"` may add a validated, bounded semantic outline to the Workset. Memorix never initializes, syncs, or exports that external index, and never stores its raw source output. `memorix codegraph status --json`, `memorix doctor --json`, and Project Context JSON identify the actual provider quality.
|
|
166
168
|
|
package/docs/DASHBOARD.md
CHANGED
|
@@ -7,6 +7,19 @@ used by MCP and CLI. It shows each card's source reference, locator, captured
|
|
|
7
7
|
hash, freshness, verification state, and audit-event count. It is project
|
|
8
8
|
scoped and does not replace the underlying observation or code source.
|
|
9
9
|
|
|
10
|
+
## Surface Boundaries
|
|
11
|
+
|
|
12
|
+
Each Dashboard page maps to a real data surface: Overview shows overall state,
|
|
13
|
+
Git Memory shows Git-derived memory, Knowledge shows source-backed knowledge
|
|
14
|
+
pages, Memory Map shows the evidence-backed relation projection, Observations
|
|
15
|
+
and Evidence show records and provenance, Retention/Config/Identity show
|
|
16
|
+
runtime health, and Sessions/Coordination show session and persistent
|
|
17
|
+
coordination state.
|
|
18
|
+
|
|
19
|
+
These pages are not demo panels. Empty data is shown as empty, and failed reads
|
|
20
|
+
are shown as unavailable; the UI does not substitute another data model or old
|
|
21
|
+
graph renderer to make a result look healthy.
|
|
22
|
+
|
|
10
23
|
## Start
|
|
11
24
|
|
|
12
25
|
```bash
|
|
@@ -25,6 +38,16 @@ The Coordination Status page is a read-only projection of the selected project's
|
|
|
25
38
|
|
|
26
39
|
The page reports agents, task status, file locks, and handoffs for the selected project. It exposes no team or task write endpoints and is not a task execution or full orchestration platform. If the SQLite read fails, the API returns an explicit degraded/error status and the page shows that the status is unavailable instead of presenting an empty result as healthy.
|
|
27
40
|
|
|
41
|
+
## Memory Map
|
|
42
|
+
|
|
43
|
+
The Graph page is the single visual graph surface. It renders the deterministic,
|
|
44
|
+
source-backed `GET /api/knowledge-graph` projection with Apache ECharts. The
|
|
45
|
+
older Cytoscape/Dagre renderer is removed from the Dashboard, so an empty or
|
|
46
|
+
failed Memory Map no longer silently falls back to a different graph model.
|
|
47
|
+
|
|
48
|
+
`GET /api/graph` remains available as a backend compatibility route for MCP,
|
|
49
|
+
CLI, scripts, and older clients. It is not the Dashboard's visual data source.
|
|
50
|
+
|
|
28
51
|
## Maintenance Workbench
|
|
29
52
|
|
|
30
53
|
The Observations page exposes three explicit maintenance actions:
|
package/docs/DEVELOPMENT.md
CHANGED
|
@@ -13,8 +13,8 @@ Memorix is a TypeScript project built around:
|
|
|
13
13
|
|
|
14
14
|
## Current Development Baseline
|
|
15
15
|
|
|
16
|
-
The current release work targets the **1.8.
|
|
17
|
-
is kept at `1.8.
|
|
16
|
+
The current release work targets the **1.8.6 release line** and package metadata
|
|
17
|
+
is kept at `1.8.6` for this release commit.
|
|
18
18
|
|
|
19
19
|
Contributors should assume the following areas are part of the current release line:
|
|
20
20
|
|
package/docs/DOCKER.md
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
# Docker Deployment
|
|
2
2
|
|
|
3
|
-
Memorix supports Docker as
|
|
3
|
+
Memorix supports Docker as a **VPS/hosted HTTP service deployment path**.
|
|
4
|
+
|
|
5
|
+
Local development and verification should run the Node service directly. Do
|
|
6
|
+
not start Docker Desktop or build a local image just to use Memorix.
|
|
4
7
|
|
|
5
8
|
This Docker flow is for:
|
|
6
9
|
|
|
@@ -83,7 +86,7 @@ It is not a promise that stdio MCP magically becomes container-friendly.
|
|
|
83
86
|
|
|
84
87
|
## Important Path Truth
|
|
85
88
|
|
|
86
|
-
Docker works best when Memorix can **see the repositories it is asked to bind**.
|
|
89
|
+
VPS Docker works best when Memorix can **see the repositories it is asked to bind**.
|
|
87
90
|
|
|
88
91
|
Project-scoped features such as:
|
|
89
92
|
|
|
@@ -97,7 +100,7 @@ depend on the HTTP service being able to access the repository path.
|
|
|
97
100
|
|
|
98
101
|
### Good fit
|
|
99
102
|
|
|
100
|
-
-
|
|
103
|
+
- a VPS or hosted machine that can see the repositories it is asked to bind
|
|
101
104
|
- a compose setup that mounts the repo you are working on into the container
|
|
102
105
|
- `memorix_session_start(projectRoot=...)` using a path visible **inside** the container
|
|
103
106
|
|
package/docs/INTEGRATIONS.md
CHANGED
|
@@ -26,7 +26,7 @@ That command installs the recommended Memorix package or config for the target a
|
|
|
26
26
|
| memcode | Opens a terminal coding agent that already uses Memorix memory | `memorix`, `memcode` |
|
|
27
27
|
| HTTP service | Runs one shared MCP endpoint plus dashboard | `memorix background start` |
|
|
28
28
|
|
|
29
|
-
HTTP is not required for normal agent setup. Use it when you intentionally want a shared background process, dashboard, Docker deployment, or multiple clients using the same MCP endpoint.
|
|
29
|
+
HTTP is not required for normal agent setup. Use it when you intentionally want a shared background process, dashboard, VPS Docker deployment, or multiple clients using the same MCP endpoint. Local verification runs the Node service directly; Docker is not required on a developer machine.
|
|
30
30
|
|
|
31
31
|
CLI, MCP, and HTTP have separate jobs:
|
|
32
32
|
|
|
@@ -64,6 +64,7 @@ Generated guidance also has scope:
|
|
|
64
64
|
| Antigravity | `memorix setup --agent antigravity --global` | **Primary supported target** | Plugin under `~/.gemini/config/plugins/memorix` or `.agents/plugins/memorix`, with `plugin.json`, `mcp_config.json`, `hooks.json`, rules, and skills | Uses Antigravity's official plugin layout. Dedicated MCP configs live at `~/.gemini/config/mcp_config.json` or `.agents/mcp_config.json`; legacy Gemini settings are read only for compatibility. |
|
|
65
65
|
| Trae | `memorix setup --agent trae --global` | Trae MCP/rules config | MCP config and `.trae/rules/project_rules.md` | Current support is MCP plus project rules. |
|
|
66
66
|
| DeepSeek Harness | `memorix setup --agent dsh --global` | DeepSeek Harness MCP patch | Memorix `@deepseek-ai/dsh-mcp-client` row in `$DSH_HOME/cordis.patch.yml` (default `~/.dsh/cordis.patch.yml`), guidance in the harness `AGENTS.md`, and official skills under `$DSH_HOME/skills` | Tools appear as `mcp__memorix__*`. No hooks surface. Project-local setup writes project `AGENTS.md` guidance and `.dsh/skills`; the MCP row always lives in the harness-level patch file. |
|
|
67
|
+
| WorkBuddy | `memorix setup --agent workbuddy [--global]` | WorkBuddy MCP config | Memorix MCP server row in `<project>/.workbuddy/mcp.json` (project install) or `~/.workbuddy/mcp.json` (global), plus `AGENTS.md` guidance | Tools appear as `mcp__memorix__*`. No hooks surface. |
|
|
67
68
|
| memcode | `memorix` or `memcode` | Bundled terminal agent | Built-in Memorix memory access | memcode uses the same project memory pool; it is not a separate memory silo. |
|
|
68
69
|
| Any MCP client | Manual MCP config | MCP stdio or HTTP | `memorix serve` or `memorix background start` | Use stdio first unless you need a shared HTTP endpoint. |
|
|
69
70
|
|