@psiclawops/hypermem 0.9.5 → 0.9.7

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 CHANGED
@@ -2,6 +2,18 @@
2
2
 
3
3
  All notable changes to hypermem are documented here.
4
4
 
5
+ ## 0.9.7 - 2026-05-02
6
+
7
+ - **OpenClaw Plugin SDK imports modernized.** HyperCompositor and HyperMem memory now import plugin entry helpers through the canonical public Plugin SDK surface and refresh OpenClaw/Plugin SDK build provenance to the validated runtime.
8
+ - **SDK drift is now actively challenged.** Release gates enforce public SDK imports and exact build metadata for reproducibility, while a latest-SDK canary and Dependabot tracking keep the pin from quietly aging into another compatibility break.
9
+ - **Memory plugin tool contract declared.** `hypermem` now declares ownership of the optional `history_query` tool in its OpenClaw plugin manifest, satisfying the 2026.5.2 plugin checker contract gate.
10
+ - **Plugin checker gates are now standard release infrastructure.** HyperMem CI runs Plugin Inspector static/runtime checks plus isolated dependency-install cold import proof, production/dev dependency audit, and issue-debt validation; publish readiness has a packed-artifact OpenClaw `plugins doctor`/runtime-inspect gate. The previous context-engine root SDK barrel P2 is fixed by deriving context-engine types from the public `OpenClawPluginApi` core type surface.
11
+
12
+ ## 0.9.6 - 2026-05-01
13
+
14
+ - **OpenClaw 2026.4.29 plugin startup compatibility.** HyperCompositor and HyperMem memory manifests now declare `activation.onStartup: false`, making slot-triggered loading explicit and removing reliance on deprecated implicit startup sidecar fallback behavior.
15
+ - **Release parity preserved.** Core, context-engine plugin, memory plugin, and lockfiles are aligned at 0.9.6 for the compatibility update.
16
+
5
17
  ## 0.9.5 - 2026-04-29
6
18
 
7
19
  - **Install-readiness defaults hardened.** Fresh installs now stage `embedding.provider: "none"` by default, making the first-install path FTS5-only and free of Ollama or hosted-provider dependencies.
@@ -22,7 +34,7 @@ All notable changes to hypermem are documented here.
22
34
  ## 0.9.3 - OpenClaw 2026.4.26 compatibility hardening
23
35
 
24
36
  - **Plugin manifests declare runtime config schema.** HyperCompositor and HyperMem memory manifests now expose the supported config surface for OpenClaw 2026.4.26 registry/config validation.
25
- - **Install and doctor flow aligned with persisted plugin registry.** operator guidance and `hypermem-doctor` now include registry refresh, doctor repair, and plugin-list verification steps.
37
+ - **Install and doctor flow aligned with persisted plugin registry.** Operator guidance and `hypermem-doctor` now include registry refresh, doctor repair, and plugin-list verification steps.
26
38
  - **Native compaction collision guard added.** `hypermem-doctor` warns when `agents.defaults.compaction.maxActiveTranscriptBytes` is set; HyperMem deployments should leave it unset so HyperMem remains the single trim/compose pressure owner.
27
39
  - **Embedding query/document asymmetry supported.** HyperMem config now supports query/document input types and prefixes, with defaults for `nomic-embed-text`, `qwen3-embedding`, and `mxbai-embed-large`.
28
40
  - **Forked subagent warm-start repair.** `prepareSubagentSpawn()` falls back to durable runtime history when the hot cache is empty, so forked children inherit parent working context instead of silently starting cold.
@@ -41,7 +53,7 @@ All notable changes to hypermem are documented here.
41
53
  - **Vector store init log shows actual provider/model/dims.** Diagnostic log line at startup now reflects the resolved configuration instead of the static placeholder, so misconfiguration is visible immediately.
42
54
  - **Tool artifact API arity + hydration docs aligned.** Doc-only follow-ups; no runtime behavior change.
43
55
 
44
- **operator action:** upgrade from 0.9.0 is recommended. 0.9.0 in production with a configured non-default embedder may have written mismatched vectors; check `hypermem-status` for vector-store init line after upgrade.
56
+ **Operator action:** upgrade from 0.9.0 is recommended. 0.9.0 in production with a configured non-default embedder may have written mismatched vectors; check `hypermem-status` for vector-store init line after upgrade.
45
57
 
46
58
  ## 0.9.0 - adaptive context lifecycle
47
59
 
@@ -74,7 +86,7 @@ All notable changes to hypermem are documented here.
74
86
  - **Provider + model identity is now tracked explicitly in HyperCompositor model state.** Mid-session routing changes are detected on the full `provider/model` key, not budget alone, so `github-copilot/claude-sonnet-4-6` and `anthropic/claude-sonnet-4-6` are treated as different operational envelopes.
75
87
  - **Downshift detection now keys off provider/model-aware state.** Budget-downshift handling still stays conservative, but verbose logs now surface provider swaps, model swaps, and budget deltas clearly during `context:assemble`.
76
88
  - **Install docs now declare the full operator path.** README, INSTALL.md, and TUNING.md now separate staging from activation, document install states explicitly, add merge-safe wiring guidance, and clarify what healthy-but-empty looks like on a first run.
77
- - **0.8.5 release parity.** Package versions are aligned for the next publish while preserving the npm-first installer and merge-safe config guidance landed from Hank's install review.
89
+ - **0.8.5 release parity.** Package versions are aligned for the next publish while preserving the npm-first installer and merge-safe config guidance landed from Pylon's install review.
78
90
 
79
91
  ## 0.8.4 — compaction fence fix, install-path fixes, zod runtime packaging
80
92
 
package/INSTALL.md CHANGED
@@ -616,7 +616,7 @@ openclaw status # look for hypermem in plugi
616
616
 
617
617
  ### Step 5 — Configure your fleet
618
618
 
619
- hypermem works out of the box for both single-agent and multi-agent installs. The source ships with generic placeholder agent names (`alice`, `bob`, `director1`, etc.) in two files that define fleet topology:
619
+ hypermem works out of the box for both single-agent and multi-agent installs. The source ships with generic placeholder agent names (`agent1`, `agent2`, `director1`, etc.) in two files that define fleet topology:
620
620
 
621
621
  | File | What it defines |
622
622
  |---|---|
@@ -643,7 +643,7 @@ Facts, episodes, and topics are all scoped to your agent ID automatically. Cross
643
643
 
644
644
  #### Multi-agent installs
645
645
 
646
- hypermem ships with generic placeholder agent names (`alice`, `bob`, `director1`, etc.) in the two fleet topology files listed above.
646
+ hypermem ships with generic placeholder agent names (`agent1`, `agent2`, `director1`, etc.) in the two fleet topology files listed above.
647
647
 
648
648
  Replace the placeholder names with your fleet:
649
649
 
@@ -651,7 +651,7 @@ Replace the placeholder names with your fleet:
651
651
 
652
652
  ```typescript
653
653
  // Before (placeholder):
654
- alice: { agentId: 'alice', tier: 'council' },
654
+ agent1: { agentId: 'agent1', tier: 'council' },
655
655
 
656
656
  // After (your fleet):
657
657
  architect: { agentId: 'architect', tier: 'council' },
@@ -661,7 +661,7 @@ architect: { agentId: 'architect', tier: 'council' },
661
661
 
662
662
  ```typescript
663
663
  // Before (placeholder):
664
- alice: 'infrastructure',
664
+ agent1: 'infrastructure',
665
665
 
666
666
  // After (your fleet):
667
667
  architect: 'infrastructure',
@@ -820,17 +820,14 @@ Resolution order is: (1) `plugins.entries.hypercompositor.config` in `openclaw.j
820
820
 
821
821
  These settings live in `~/.openclaw/hypermem/config.json` under the `compositor` key. All fields are optional — omit any knob to get the code-level default. Gateway restart required after changes.
822
822
 
823
- The recommended starting config for a standard single-agent deployment is the same recall-friendly profile shipped in `assets/default-config.json` and written by `hypermem-install` when no config exists. It keeps semantic recall active, protects topic-bearing warm context, boosts recent antecedents, and guards the literal antecedent of the current user turn under non-critical pressure.
823
+ The recommended starting config for a standard single-agent deployment is the same recall-friendly context profile shipped in `assets/default-config.json` and written by `hypermem-install` when no config exists. It keeps embeddings disabled for baseline install safety, protects topic-bearing warm context, boosts recent antecedents, and guards the literal antecedent of the current user turn under non-critical pressure. Enable Ollama, OpenRouter, or Gemini after the baseline FTS5 install is verified.
824
824
 
825
- Key 0.9.4 defaults:
825
+ Key starter defaults:
826
826
 
827
827
  ```json
828
828
  {
829
829
  "embedding": {
830
- "provider": "ollama",
831
- "model": "nomic-embed-text",
832
- "dims": 768,
833
- "dimensions": 768
830
+ "provider": "none"
834
831
  },
835
832
  "compositor": {
836
833
  "turnBudget": {
package/README.md CHANGED
@@ -332,7 +332,7 @@ Diagnostics expose reranker status, candidate count, and provider, so operators
332
332
  | Knowledge / wiki | Domain knowledge and synthesized topic pages with full-text search |
333
333
  | Episodes | Significant events, decisions, discoveries, participants, and source links |
334
334
  | Topics | Cross-session thread tracking and topic lifecycle state |
335
- | Preferences | operator and agent behavior patterns |
335
+ | Preferences | Operator and agent behavior patterns |
336
336
  | Documents | Chunked workspace/governance docs, doc sources, and trigger retrieval metadata |
337
337
  | Knowledge graph | Links between facts, knowledge, topics, episodes, agents, and preferences |
338
338
  | Fleet registry | Agents, orgs, tiers, capabilities, and fleet topology |
@@ -477,7 +477,7 @@ If you prefer, hand the install to your OpenClaw agent:
477
477
 
478
478
  > "Install hypermem following INSTALL.md. I'm running a [solo / multi-agent] setup."
479
479
 
480
- ### operator guides
480
+ ### Operator guides
481
481
 
482
482
  - **[docs/MEMORY_MD_AUTHORING.md](./docs/MEMORY_MD_AUTHORING.md)**, how to keep `MEMORY.md` compact, durable, and reviewable
483
483
  - **[docs/TUNING.md](./docs/TUNING.md)**, context assembly and output shaping profiles
@@ -546,7 +546,7 @@ README keeps the interface surface short. Use the detailed docs for exact exampl
546
546
 
547
547
  **Runtime API:** import `HyperMem` from `@psiclawops/hypermem` for direct Node.js use, custom tests, and non-OpenClaw integrations. See **[INSTALL.md § Non-OpenClaw usage](./INSTALL.md#non-openclaw-usage)** and package TypeScript declarations for the current interface.
548
548
 
549
- **operator CLIs:**
549
+ **Operator CLIs:**
550
550
 
551
551
  ```bash
552
552
  hypermem-status --health
@@ -613,7 +613,7 @@ The migration guide includes worked examples showing how to bring data from Open
613
613
 
614
614
  All examples default to dry-run. Nothing is written until you add `--apply`.
615
615
 
616
- operator guide: **[docs/MIGRATION_GUIDE.md](./docs/MIGRATION_GUIDE.md)**
616
+ Operator guide: **[docs/MIGRATION_GUIDE.md](./docs/MIGRATION_GUIDE.md)**
617
617
 
618
618
 
619
619
  ---
@@ -16,7 +16,7 @@ function argValue(name, fallback = null) {
16
16
  return process.argv.find((a, i) => process.argv[i - 1] === name) ?? fallback;
17
17
  }
18
18
 
19
- const DATA_DIR = argValue('--data-dir', process.env.HYPERMEM_DATA_DIR ?? path.join(process.env.HOME || os.homedir(), '.openclaw', 'hypermem'));
19
+ const DATA_DIR = argValue('--data-dir', process.env.HYPERMEM_DATA_DIR ?? path.join(process.env.HOME || '/home/user', '.openclaw', 'hypermem'));
20
20
  const ITERATIONS = parseInt(argValue('--iterations', '100'), 10);
21
21
  const WARMUP = parseInt(argValue('--warmup', '3'), 10);
22
22
  const TARGET_AGENT = argValue('--agent', null);
@@ -37,27 +37,27 @@ import { isSafeForSharedVisibility } from './secret-scanner.js';
37
37
  // returns results. New agents default to 'general'.
38
38
  //
39
39
  // ── EXAMPLE DATA ──────────────────────────────────────────────────
40
- // The agent names below (alice, director1, etc.) are PLACEHOLDERS.
40
+ // The agent names below (agent1, director1, etc.) are PLACEHOLDERS.
41
41
  // Replace them with your own agent IDs and domain labels to match
42
42
  // your fleet. Single-agent installs don't need to edit this:
43
43
  // unknown agents fall through to 'general' automatically.
44
44
  // See INSTALL.md § "Configure your fleet" for details.
45
45
  // ─────────────────────────────────────────────────────────────────
46
46
  const AGENT_DOMAIN_MAP = {
47
- alice: 'infrastructure',
47
+ agent1: 'infrastructure',
48
48
  director2: 'infrastructure',
49
49
  director1: 'infrastructure',
50
50
  director3: 'infrastructure',
51
- bob: 'product',
51
+ agent2: 'product',
52
52
  director4: 'product',
53
53
  director5: 'product',
54
54
  director6: 'product',
55
- dave: 'security',
55
+ agent3: 'security',
56
56
  director7: 'security',
57
57
  director8: 'security',
58
58
  agent4: 'ux',
59
- carol: 'governance',
60
- oscar: 'strategy',
59
+ agent6: 'governance',
60
+ agent5: 'strategy',
61
61
  specialist1: 'development',
62
62
  specialist2: 'communications',
63
63
  main: 'general',
@@ -94,7 +94,7 @@ function extractFactCandidates(content) {
94
94
  // Preference patterns — medium confidence (0.60)
95
95
  const preferencePatterns = [
96
96
  /(?:prefer|always use|never use|don't use|avoid) (.{10,150})/gi,
97
- /(?:operator) (?:wants|prefers|likes|hates|dislikes) (.{10,150})/gi,
97
+ /(?:operator|operator) (?:wants|prefers|likes|hates|dislikes) (.{10,150})/gi,
98
98
  ];
99
99
  // Operational patterns: deployments, incidents, fixes — high confidence (0.70)
100
100
  const operationalPatterns = [
@@ -148,7 +148,7 @@ const OPERATIONAL_BOILERPLATE = [
148
148
  /still\s*waiting/i,
149
149
  /will\s*pick\s*(it\s*)?up\s*(on\s*(next|the))?/i,
150
150
  /message\s*is\s*in\s*(his|her|their|the)\s*queue/i,
151
- /sent\s+to\s+(carol|bob|agent4|dave|oscar|alice)/i,
151
+ /sent\s+to\s+(agent6|agent2|agent4|agent3|agent5|agent1)/i,
152
152
  /dispatched\s+(it\s+)?to/i,
153
153
  /timed\s*out\s*after/i,
154
154
  /\bNO_REPLY\b/,
@@ -393,7 +393,7 @@ function detectTopic(content) {
393
393
  if (!content || content.length < 50)
394
394
  return null;
395
395
  // Product/project name detection
396
- const productMatch = content.match(/\b(HyperMem|ClawText|dashboard|canvas|council|automation|OpenClaw|dispatch)\b/i);
396
+ const productMatch = content.match(/\b(HyperMem|ClawText|ClawDash|ClawCanvas|ClawCouncil|ClawTomation|OpenClaw|ClawDispatch)\b/i);
397
397
  if (productMatch)
398
398
  return productMatch[1];
399
399
  // Infrastructure topic detection
@@ -27,7 +27,7 @@ export interface OrgRegistry {
27
27
  * Default fleet org structure.
28
28
  *
29
29
  * ── EXAMPLE DATA ──────────────────────────────────────────────────────────
30
- * The agent names below (alice, bob, director1, etc.) are PLACEHOLDERS.
30
+ * The agent names below (agent1, agent2, director1, etc.) are PLACEHOLDERS.
31
31
  * Replace them with your own agent IDs to match your fleet configuration.
32
32
  *
33
33
  * Single-agent installs: you don't need to edit this. Your agent ID is
@@ -21,7 +21,7 @@ import { FleetStore } from './fleet-store.js';
21
21
  * Default fleet org structure.
22
22
  *
23
23
  * ── EXAMPLE DATA ──────────────────────────────────────────────────────────
24
- * The agent names below (alice, bob, director1, etc.) are PLACEHOLDERS.
24
+ * The agent names below (agent1, agent2, director1, etc.) are PLACEHOLDERS.
25
25
  * Replace them with your own agent IDs to match your fleet configuration.
26
26
  *
27
27
  * Single-agent installs: you don't need to edit this. Your agent ID is
@@ -34,27 +34,27 @@ import { FleetStore } from './fleet-store.js';
34
34
  */
35
35
  export function defaultOrgRegistry() {
36
36
  const agents = {
37
- alice: { agentId: 'alice', tier: 'council' },
38
- bob: { agentId: 'bob', tier: 'council' },
37
+ agent1: { agentId: 'agent1', tier: 'council' },
38
+ agent2: { agentId: 'agent2', tier: 'council' },
39
39
  agent4: { agentId: 'agent4', tier: 'council' },
40
- dave: { agentId: 'dave', tier: 'council' },
41
- carol: { agentId: 'carol', tier: 'council' },
42
- oscar: { agentId: 'oscar', tier: 'council' },
43
- director1: { agentId: 'director1', tier: 'director', org: 'alice-org', councilLead: 'alice' },
44
- director2: { agentId: 'director2', tier: 'director', org: 'alice-org', councilLead: 'alice' },
45
- director3: { agentId: 'director3', tier: 'director', org: 'alice-org', councilLead: 'alice' },
46
- director4: { agentId: 'director4', tier: 'director', org: 'bob-org', councilLead: 'bob' },
47
- director5: { agentId: 'director5', tier: 'director', org: 'bob-org', councilLead: 'bob' },
48
- director6: { agentId: 'director6', tier: 'director', org: 'bob-org', councilLead: 'bob' },
49
- director7: { agentId: 'director7', tier: 'director', org: 'dave-org', councilLead: 'dave' },
50
- director8: { agentId: 'director8', tier: 'director', org: 'dave-org', councilLead: 'dave' },
40
+ agent3: { agentId: 'agent3', tier: 'council' },
41
+ agent6: { agentId: 'agent6', tier: 'council' },
42
+ agent5: { agentId: 'agent5', tier: 'council' },
43
+ director1: { agentId: 'director1', tier: 'director', org: 'agent1-org', councilLead: 'agent1' },
44
+ director2: { agentId: 'director2', tier: 'director', org: 'agent1-org', councilLead: 'agent1' },
45
+ director3: { agentId: 'director3', tier: 'director', org: 'agent1-org', councilLead: 'agent1' },
46
+ director4: { agentId: 'director4', tier: 'director', org: 'agent2-org', councilLead: 'agent2' },
47
+ director5: { agentId: 'director5', tier: 'director', org: 'agent2-org', councilLead: 'agent2' },
48
+ director6: { agentId: 'director6', tier: 'director', org: 'agent2-org', councilLead: 'agent2' },
49
+ director7: { agentId: 'director7', tier: 'director', org: 'agent3-org', councilLead: 'agent3' },
50
+ director8: { agentId: 'director8', tier: 'director', org: 'agent3-org', councilLead: 'agent3' },
51
51
  specialist1: { agentId: 'specialist1', tier: 'specialist' },
52
52
  specialist2: { agentId: 'specialist2', tier: 'specialist' },
53
53
  };
54
54
  const orgs = {
55
- 'alice-org': ['alice', 'director1', 'director2', 'director3'],
56
- 'bob-org': ['bob', 'director4', 'director5', 'director6'],
57
- 'dave-org': ['dave', 'director7', 'director8'],
55
+ 'agent1-org': ['agent1', 'director1', 'director2', 'director3'],
56
+ 'agent2-org': ['agent2', 'director4', 'director5', 'director6'],
57
+ 'agent3-org': ['agent3', 'director7', 'director8'],
58
58
  };
59
59
  return { orgs, agents };
60
60
  }
package/dist/index.d.ts CHANGED
@@ -135,8 +135,8 @@ export interface StartupFleetSeedResult {
135
135
  *
136
136
  * Usage:
137
137
  * const hm = await hypermem.create({ dataDir: '~/.openclaw/hypermem' });
138
- * await hm.record('alice', 'agent:alice:webchat:main', userMsg);
139
- * const result = await hm.compose({ agentId: 'alice', sessionKey: '...', ... });
138
+ * await hm.record('agent1', 'agent:agent1:webchat:main', userMsg);
139
+ * const result = await hm.compose({ agentId: 'agent1', sessionKey: '...', ... });
140
140
  */
141
141
  export declare class HyperMem {
142
142
  readonly dbManager: DatabaseManager;
@@ -202,7 +202,7 @@ export declare class HyperMem {
202
202
  /**
203
203
  * List archived or forked contexts for an agent.
204
204
  *
205
- * operator-safe enumeration path. This is the approved archived-context
205
+ * Operator-safe enumeration path. This is the approved archived-context
206
206
  * listing surface. Active composition remains separate.
207
207
  */
208
208
  listArchivedContexts(agentId: string, opts?: {
package/dist/index.js CHANGED
@@ -103,7 +103,7 @@ const DEFAULT_CONFIG = {
103
103
  cache: {
104
104
  keyPrefix: 'hm:',
105
105
  sessionTTL: 14400, // 4 hours — system/identity/meta slots
106
- historyTTL: 604800, // 7 days — extended for canvas display
106
+ historyTTL: 604800, // 7 days — extended for ClawCanvas display
107
107
  },
108
108
  compositor: {
109
109
  // TUNE-010 (2026-04-02): Raised from 65000 → 90000.
@@ -337,8 +337,8 @@ function discoverStartupFleetCandidates(dbManager, opts = {}) {
337
337
  *
338
338
  * Usage:
339
339
  * const hm = await hypermem.create({ dataDir: '~/.openclaw/hypermem' });
340
- * await hm.record('alice', 'agent:alice:webchat:main', userMsg);
341
- * const result = await hm.compose({ agentId: 'alice', sessionKey: '...', ... });
340
+ * await hm.record('agent1', 'agent:agent1:webchat:main', userMsg);
341
+ * const result = await hm.compose({ agentId: 'agent1', sessionKey: '...', ... });
342
342
  */
343
343
  export class HyperMem {
344
344
  dbManager;
@@ -604,7 +604,7 @@ export class HyperMem {
604
604
  /**
605
605
  * List archived or forked contexts for an agent.
606
606
  *
607
- * operator-safe enumeration path. This is the approved archived-context
607
+ * Operator-safe enumeration path. This is the approved archived-context
608
608
  * listing surface. Active composition remains separate.
609
609
  */
610
610
  listArchivedContexts(agentId, opts) {
package/dist/seed.d.ts CHANGED
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * Usage:
8
8
  * const seeder = new WorkspaceSeeder(hypermem);
9
- * const result = await seeder.seedWorkspace('/path/to/workspace', { agentId: 'alice' });
9
+ * const result = await seeder.seedWorkspace('/path/to/workspace', { agentId: 'agent1' });
10
10
  *
11
11
  * Idempotent: skips files whose source hash hasn't changed since last index.
12
12
  * Atomic: each file's chunks are swapped in a single transaction.
package/dist/seed.js CHANGED
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * Usage:
8
8
  * const seeder = new WorkspaceSeeder(hypermem);
9
- * const result = await seeder.seedWorkspace('/path/to/workspace', { agentId: 'alice' });
9
+ * const result = await seeder.seedWorkspace('/path/to/workspace', { agentId: 'agent1' });
10
10
  *
11
11
  * Idempotent: skips files whose source hash hasn't changed since last index.
12
12
  * Atomic: each file's chunks are swapped in a single transaction.
@@ -33,8 +33,8 @@ export interface FlushSessionResult {
33
33
  * from those stores naturally.
34
34
  *
35
35
  * @param cache Connected CacheLayer instance
36
- * @param agentId Agent identifier (e.g. "alice")
37
- * @param sessionKey Full session key (e.g. "agent:alice:webchat:scratchpad")
36
+ * @param agentId Agent identifier (e.g. "agent1")
37
+ * @param sessionKey Full session key (e.g. "agent:agent1:webchat:scratchpad")
38
38
  * @param opts Optional flags
39
39
  */
40
40
  export declare function flushSession(cache: CacheLayer, agentId: string, sessionKey: string, opts?: FlushSessionOptions): Promise<FlushSessionResult>;
@@ -18,8 +18,8 @@
18
18
  * from those stores naturally.
19
19
  *
20
20
  * @param cache Connected CacheLayer instance
21
- * @param agentId Agent identifier (e.g. "alice")
22
- * @param sessionKey Full session key (e.g. "agent:alice:webchat:scratchpad")
21
+ * @param agentId Agent identifier (e.g. "agent1")
22
+ * @param sessionKey Full session key (e.g. "agent:agent1:webchat:scratchpad")
23
23
  * @param opts Optional flags
24
24
  */
25
25
  export async function flushSession(cache, agentId, sessionKey, opts = {}) {
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * Usage:
8
8
  * const ctx = await buildSpawnContext(messageStore, docChunkStore, agentId, {
9
- * parentSessionKey: 'agent:alice:webchat:main',
9
+ * parentSessionKey: 'agent:agent1:webchat:main',
10
10
  * workingSnapshot: 10,
11
11
  * documents: ['/path/to/spec.md'],
12
12
  * });
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * Usage:
8
8
  * const ctx = await buildSpawnContext(messageStore, docChunkStore, agentId, {
9
- * parentSessionKey: 'agent:alice:webchat:main',
9
+ * parentSessionKey: 'agent:agent1:webchat:main',
10
10
  * workingSnapshot: 10,
11
11
  * documents: ['/path/to/spec.md'],
12
12
  * });
@@ -12,12 +12,12 @@
12
12
  const KNOWN_NAMES = {
13
13
  hypermem: 'HyperMem',
14
14
  hyperbuilder: 'HyperBuilder',
15
- canvas: 'canvas',
16
- dashboard: 'dashboard',
17
- dispatch: 'dispatch',
15
+ clawcanvas: 'ClawCanvas',
16
+ clawdash: 'ClawDash',
17
+ clawdispatch: 'ClawDispatch',
18
18
  clawtext: 'ClawText',
19
- automation: 'automation',
20
- council: 'council',
19
+ clawtomation: 'ClawTomation',
20
+ clawcouncil: 'ClawCouncil',
21
21
  openclaw: 'OpenClaw',
22
22
  clawhub: 'ClawHub',
23
23
  };
@@ -35,7 +35,7 @@ function keystoneScore(msg) {
35
35
  const backtickMatches = text.match(/`[^`]+`/g) || [];
36
36
  score += backtickMatches.length * 0.2;
37
37
  // Agent mentions (known patterns)
38
- const agentMentions = text.match(/\b(alice|bob|agent4|dave|oscar|carol|director1|director2|director7|specialist2|specialist1)\b/gi) || [];
38
+ const agentMentions = text.match(/\b(agent1|agent2|agent4|agent3|agent5|agent6|director1|director2|director7|specialist2|specialist1)\b/gi) || [];
39
39
  score += agentMentions.length * 0.25;
40
40
  // Quoted content
41
41
  const quotedMatches = text.match(/"[^"]{10,}"/g) || [];
@@ -39,7 +39,7 @@ export interface CollectionTrigger {
39
39
  export declare const TRIGGER_REGISTRY_VERSION = "1.0.0";
40
40
  /**
41
41
  * Default trigger registry for standard ACA collections.
42
- * Covers the core ACA offload use case from carol's spec.
42
+ * Covers the core ACA offload use case from agent6's spec.
43
43
  */
44
44
  export declare const TRIGGER_REGISTRY: CollectionTrigger[];
45
45
  /** Backward-compat alias — same reference as TRIGGER_REGISTRY */
@@ -13,7 +13,7 @@ import { createHash } from 'node:crypto';
13
13
  export const TRIGGER_REGISTRY_VERSION = '1.0.0';
14
14
  /**
15
15
  * Default trigger registry for standard ACA collections.
16
- * Covers the core ACA offload use case from carol's spec.
16
+ * Covers the core ACA offload use case from agent6's spec.
17
17
  */
18
18
  export const TRIGGER_REGISTRY = [
19
19
  {
@@ -69,7 +69,7 @@ export const TRIGGER_REGISTRY = [
69
69
  ],
70
70
  maxTokens: 800,
71
71
  maxChunks: 2,
72
- owner: 'alice',
72
+ owner: 'agent1',
73
73
  category: 'operations',
74
74
  description: 'Agent operational procedures: boot sequence, heartbeat, work queue, session startup',
75
75
  },
@@ -106,7 +106,7 @@ export const TRIGGER_REGISTRY = [
106
106
  ],
107
107
  maxTokens: 1500,
108
108
  maxChunks: 4,
109
- owner: 'alice',
109
+ owner: 'agent1',
110
110
  category: 'memory',
111
111
  description: 'Decision history: past choices, previously agreed approaches, recalled context',
112
112
  },
@@ -132,7 +132,7 @@ export const TRIGGER_REGISTRY = [
132
132
  ],
133
133
  maxTokens: 1200,
134
134
  maxChunks: 3,
135
- owner: 'alice',
135
+ owner: 'agent1',
136
136
  category: 'operations',
137
137
  description: 'Agent tooling reference: CLI commands, config paths, deployment procedures, quick reference',
138
138
  },
package/dist/types.d.ts CHANGED
@@ -72,7 +72,7 @@ export type FactScope = 'agent' | 'session' | 'user';
72
72
  /**
73
73
  * Memory visibility levels:
74
74
  * - private: Only the owning agent can read. Identity, SOUL, personal reflections.
75
- * - org: Agents in the same org (e.g., alice's directors: Hank, Jack, Irene).
75
+ * - org: Agents in the same org (e.g., agent1's directors: Pylon, Vigil, Plane).
76
76
  * - council: All council seats can read.
77
77
  * - fleet: Any agent in the fleet can read.
78
78
  */
@@ -654,7 +654,7 @@ export interface ProviderMessage {
654
654
  * to identify high-signal unprocessed messages.
655
655
  *
656
656
  * Stored in Redis (hm:{a}:s:{s}:cursor) with dual-write to SQLite for
657
- * durability across Redis eviction (bob Gate 2).
657
+ * durability across Redis eviction (agent2 Gate 2).
658
658
  */
659
659
  export interface SessionCursor {
660
660
  /** StoredMessage.id of the newest message included in the last window */
@@ -7,18 +7,33 @@ HyperMem diagnostics are split into operator CLIs, validation scripts, and runti
7
7
  | Surface | Command | Proves |
8
8
  |---|---|---|
9
9
  | Health summary | `hypermem-status --health` | data dir, SQLite health, basic runtime state |
10
- | operator dashboard | `hypermem-status --master` | concise fleet-facing status summary |
10
+ | Operator dashboard | `hypermem-status --master` | concise fleet-facing status summary |
11
11
  | JSON status | `hypermem-status --json` | machine-readable database and runtime state |
12
12
  | Model audit | `hypermem-model-audit --strict` | active models have known context-window behavior or overrides |
13
13
  | Memory benchmark | `hypermem-bench --iterations 1000 --warmup 50 --agent <agent>` | local dataset access latency with p50/p95/p99 timings |
14
14
  | Compose report | `node scripts/compose-report.mjs` | direct compositor slot selection, budget decisions, diagnostics fields |
15
15
  | Trim report | `node scripts/trim-report.mjs` | trim events, cache invalidation, pressure behavior |
16
16
  | Version parity | `npm run validate:version-parity` | package versions and plugin dependencies are release-aligned |
17
+ | SDK import policy | `npm run validate:sdk-imports` | plugin packages use public OpenClaw Plugin SDK entrypoints and pinned build metadata |
18
+ | Latest SDK canary | `npm run validate:sdk-latest-canary` | both plugin packages still typecheck and build against the latest published OpenClaw SDK |
19
+ | Plugin compatibility gates | `npm run validate:plugin-checkers` | Plugin Inspector static/runtime reports, isolated dependency-install cold import proof, production/dev dependency audit, and zero unhandled Plugin Inspector issue debt |
20
+ | OpenClaw plugin runtime gate | `npm run validate:plugins:runtime` | packed artifact installs into OpenClaw's plugin runtime, registry refreshes, plugin doctor passes for HyperMem-owned plugins, and runtime inspection is clean |
17
21
  | Release path | `npm run validate:release-path` | build plus plugin pipeline gateway path |
18
22
  | Docs/config validation | `npm run validate:docs && npm run validate:config` | documented commands and config surfaces match code |
19
23
  | History query validation | `npm run validate:history-query` | `MessageStore.queryHistory()`, `history_query` plugin tool, metadata-only telemetry, and health JSON surface are wired |
20
24
  | Fresh-install smoke gate | `npm run release:install-smoke` | packed npm artifact installs without source fallback, no-Ollama failure is clear, skip-mode stages, existing config is preserved, and failure artifacts are captured |
21
25
 
26
+ ## Plugin compatibility gates
27
+
28
+ Use the smallest gate that matches the decision.
29
+
30
+ - Sprint completion / PR readiness: `npm run validate:plugin-checkers`. This runs Plugin Inspector static/runtime reports, proves dependency-install cold import in isolated npm workspaces, audits production and plugin dev dependencies, and fails if any Plugin Inspector issue lacks proof-backed coverage.
31
+ - Publish readiness on an OpenClaw host: `npm run validate:plugins:runtime`. This installs the packed 0.9.x-shaped artifact, refreshes the OpenClaw plugin registry, runs `openclaw plugins doctor`, and inspects both HyperMem plugins with `--runtime`.
32
+
33
+ `openclaw plugins doctor` is not a replacement for Plugin Inspector. Doctor proves the installed artifact satisfies the current host loader. Plugin Inspector proves the package remains compatible as a plugin project and produces durable CI artifacts. The full release gate runs both because either one alone can lie. That's how you buy fewer 3am pages.
34
+
35
+ As of 0.9.7, Plugin Inspector's raw reports can still surface `package-dependency-install-required` as an inspector-owned P2 because Plugin Inspector 0.3.6 does not reconcile dependency-install proof artifacts. HyperMem does not ignore that row: `validate:plugin-checkers` runs `validate:plugin-isolated-cold-import`, writes proof under `.artifacts/plugin-isolated-cold-import/`, and `validate:plugin-inspector:debt` fails on any Plugin Inspector issue without proof-backed coverage. P0/P1/live issues, deprecations, hard breakages, production or plugin dev audit findings, unproved inspector gaps, and HyperMem-owned `openclaw plugins doctor` diagnostics block publish.
36
+
22
37
  ## `hypermem-status`
23
38
 
24
39
  Primary uses:
@@ -143,6 +143,9 @@ Before publishing a release, run:
143
143
 
144
144
  ```bash
145
145
  npm run validate:version-parity
146
+ npm run validate:sdk-imports
147
+ npm run validate:sdk-latest-canary
148
+ npm run validate:plugin-checkers
146
149
  npm run validate:docs
147
150
  npm run validate:config
148
151
  npm run validate:release-path
@@ -154,6 +157,10 @@ npm pack ./plugin --dry-run
154
157
  npm pack ./memory-plugin --dry-run
155
158
  ```
156
159
 
160
+ The SDK gates are split deliberately: `validate:sdk-imports` enforces reproducible pinned OpenClaw Plugin SDK metadata, while `validate:sdk-latest-canary` rebuilds both plugin packages against the latest published OpenClaw SDK in a temp workspace so a stale pin cannot hide a future import break.
161
+
162
+ The plugin checker gate is deliberately composite: it runs Plugin Inspector static/runtime reports, isolated dependency-install cold import proof, production/dev dependency audit, Plugin Inspector issue-debt validation for the plugin packages. Raw Plugin Inspector P2 rows are not ignored: they must either disappear or have a proof artifact consumed by `validate:plugin-inspector:debt`.
163
+
157
164
  Runtime validation must install the packed artifact, not the repo working tree. The production-shaped local install path is:
158
165
 
159
166
  ```bash
@@ -163,6 +170,14 @@ openclaw plugins list
163
170
  node ~/.openclaw/plugins/hypermem/bin/hypermem-status.mjs --master
164
171
  ```
165
172
 
173
+ The final OpenClaw host-runtime plugin checker is:
174
+
175
+ ```bash
176
+ npm run validate:plugins:runtime
177
+ ```
178
+
179
+ That gate packs and installs the release artifact into OpenClaw's managed plugin directory, refreshes the plugin registry, runs `openclaw plugins doctor`, and runs runtime inspection for `hypercompositor` and `hypermem`. Treat HyperMem-owned doctor diagnostics as release-blocking. Unrelated local plugin diagnostics are reported but ignored by the HyperMem gate.
180
+
166
181
  For isolated validation, test the packed artifact from a temp directory:
167
182
 
168
183
  ```bash
package/docs/MIGRATION.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Start here.
4
4
 
5
- - **operator guide:** [`MIGRATION_GUIDE.md`](./MIGRATION_GUIDE.md)
5
+ - **Operator guide:** [`MIGRATION_GUIDE.md`](./MIGRATION_GUIDE.md)
6
6
  - **Current repo state:** source-specific migration examples live in `MIGRATION_GUIDE.md`. There is no bundled unified migration dispatcher in this repo yet.
7
7
 
8
8
  All migration examples default to **dry-run** where shown. Add `--apply` only when you are ready to write data.
package/install.sh CHANGED
File without changes
@@ -18,7 +18,7 @@ declare const _default: {
18
18
  id: string;
19
19
  name: string;
20
20
  description: string;
21
- configSchema: import("openclaw/plugin-sdk").OpenClawPluginConfigSchema;
22
- register: NonNullable<import("openclaw/plugin-sdk/plugin-entry").OpenClawPluginDefinition["register"]>;
23
- } & Pick<import("openclaw/plugin-sdk/plugin-entry").OpenClawPluginDefinition, "kind" | "reload" | "nodeHostCommands" | "securityAuditCollectors">;
21
+ configSchema: import("openclaw/plugin-sdk/core").OpenClawPluginConfigSchema;
22
+ register: NonNullable<import("openclaw/plugin-sdk/core").OpenClawPluginDefinition["register"]>;
23
+ } & Pick<import("openclaw/plugin-sdk/core").OpenClawPluginDefinition, "kind" | "reload" | "nodeHostCommands" | "securityAuditCollectors">;
24
24
  export default _default;
@@ -14,7 +14,7 @@
14
14
  *
15
15
  * Both plugins share the same HyperMem singleton (loaded from repo dist).
16
16
  */
17
- import { definePluginEntry, emptyPluginConfigSchema } from 'openclaw/plugin-sdk/plugin-entry';
17
+ import { definePluginEntry, emptyPluginConfigSchema } from 'openclaw/plugin-sdk/core';
18
18
  import { matchTriggers, TRIGGER_REGISTRY } from '@psiclawops/hypermem';
19
19
  import path from 'path';
20
20
  import fs from 'fs/promises';
@@ -5,6 +5,12 @@
5
5
  "activation": {
6
6
  "onCapabilities": [
7
7
  "memory"
8
+ ],
9
+ "onStartup": false
10
+ },
11
+ "contracts": {
12
+ "tools": [
13
+ "history_query"
8
14
  ]
9
15
  },
10
16
  "configSchema": {