@co-engram/core 0.1.1 → 0.1.3
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/dist/bootstrap/classify.d.ts +67 -0
- package/dist/bootstrap/classify.d.ts.map +1 -0
- package/dist/bootstrap/classify.js +119 -0
- package/dist/bootstrap/classify.js.map +1 -0
- package/dist/bootstrap/index.d.ts +89 -0
- package/dist/bootstrap/index.d.ts.map +1 -0
- package/dist/bootstrap/index.js +158 -0
- package/dist/bootstrap/index.js.map +1 -0
- package/dist/concepts/dictionary.d.ts +260 -0
- package/dist/concepts/dictionary.d.ts.map +1 -0
- package/dist/concepts/dictionary.js +253 -0
- package/dist/concepts/dictionary.js.map +1 -0
- package/dist/concepts/index.d.ts +11 -0
- package/dist/concepts/index.d.ts.map +1 -0
- package/dist/concepts/index.js +10 -0
- package/dist/concepts/index.js.map +1 -0
- package/dist/concepts/types.d.ts +65 -0
- package/dist/concepts/types.d.ts.map +1 -0
- package/dist/concepts/types.js +15 -0
- package/dist/concepts/types.js.map +1 -0
- package/dist/config/defaults.d.ts +32 -3
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +52 -2
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/index.d.ts +18 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +75 -3
- package/dist/config/index.js.map +1 -1
- package/dist/config/loader.d.ts +10 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +10 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +97 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/contradiction/auto-degrade.d.ts +11 -2
- package/dist/contradiction/auto-degrade.d.ts.map +1 -1
- package/dist/contradiction/auto-degrade.js +22 -0
- package/dist/contradiction/auto-degrade.js.map +1 -1
- package/dist/contradiction/resolver.d.ts.map +1 -1
- package/dist/contradiction/resolver.js +7 -1
- package/dist/contradiction/resolver.js.map +1 -1
- package/dist/dreaming/index.d.ts +1 -0
- package/dist/dreaming/index.d.ts.map +1 -1
- package/dist/dreaming/index.js +1 -0
- package/dist/dreaming/index.js.map +1 -1
- package/dist/dreaming/llm-pattern-abstraction.d.ts +31 -0
- package/dist/dreaming/llm-pattern-abstraction.d.ts.map +1 -0
- package/dist/dreaming/llm-pattern-abstraction.js +70 -0
- package/dist/dreaming/llm-pattern-abstraction.js.map +1 -0
- package/dist/dreaming/rem.d.ts.map +1 -1
- package/dist/dreaming/rem.js +1 -0
- package/dist/dreaming/rem.js.map +1 -1
- package/dist/dreaming/scheduler.d.ts +13 -0
- package/dist/dreaming/scheduler.d.ts.map +1 -1
- package/dist/dreaming/scheduler.js +14 -2
- package/dist/dreaming/scheduler.js.map +1 -1
- package/dist/evolution/triggered.d.ts.map +1 -1
- package/dist/evolution/triggered.js +1 -0
- package/dist/evolution/triggered.js.map +1 -1
- package/dist/generative/hypothesis.d.ts.map +1 -1
- package/dist/generative/hypothesis.js +1 -0
- package/dist/generative/hypothesis.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +1262 -32
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/index.d.ts +34 -1
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +36 -7
- package/dist/i18n/index.js.map +1 -1
- package/dist/i18n/zh.d.ts +698 -32
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +1267 -33
- package/dist/i18n/zh.js.map +1 -1
- package/dist/index/graph-builder.js +3 -3
- package/dist/index/graph-builder.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/learning/loop.d.ts +9 -0
- package/dist/learning/loop.d.ts.map +1 -1
- package/dist/learning/loop.js +42 -1
- package/dist/learning/loop.js.map +1 -1
- package/dist/maintenance/types.d.ts +11 -0
- package/dist/maintenance/types.d.ts.map +1 -1
- package/dist/maintenance/types.js.map +1 -1
- package/dist/merge/synapse-merger.js +6 -0
- package/dist/merge/synapse-merger.js.map +1 -1
- package/dist/merge-driver.cjs +64 -5
- package/dist/observability/audit-log.d.ts +7 -1
- package/dist/observability/audit-log.d.ts.map +1 -1
- package/dist/observability/audit-log.js.map +1 -1
- package/dist/observability/necessity-evaluator.d.ts +29 -0
- package/dist/observability/necessity-evaluator.d.ts.map +1 -1
- package/dist/observability/necessity-evaluator.js +240 -13
- package/dist/observability/necessity-evaluator.js.map +1 -1
- package/dist/observability/proposal-engine.d.ts.map +1 -1
- package/dist/observability/proposal-engine.js +12 -0
- package/dist/observability/proposal-engine.js.map +1 -1
- package/dist/observability/runtime-description-check.d.ts +55 -0
- package/dist/observability/runtime-description-check.d.ts.map +1 -0
- package/dist/observability/runtime-description-check.js +63 -0
- package/dist/observability/runtime-description-check.js.map +1 -0
- package/dist/prompt-signals/cache.d.ts +73 -0
- package/dist/prompt-signals/cache.d.ts.map +1 -1
- package/dist/prompt-signals/cache.js +102 -0
- package/dist/prompt-signals/cache.js.map +1 -1
- package/dist/prompt-signals/event-bus.d.ts +82 -0
- package/dist/prompt-signals/event-bus.d.ts.map +1 -0
- package/dist/prompt-signals/event-bus.js +105 -0
- package/dist/prompt-signals/event-bus.js.map +1 -0
- package/dist/prompt-signals/index.d.ts +2 -1
- package/dist/prompt-signals/index.d.ts.map +1 -1
- package/dist/prompt-signals/index.js +2 -1
- package/dist/prompt-signals/index.js.map +1 -1
- package/dist/reinforcement/ltp.d.ts +15 -1
- package/dist/reinforcement/ltp.d.ts.map +1 -1
- package/dist/reinforcement/ltp.js +24 -5
- package/dist/reinforcement/ltp.js.map +1 -1
- package/dist/reinforcement/related.d.ts +31 -2
- package/dist/reinforcement/related.d.ts.map +1 -1
- package/dist/reinforcement/related.js +39 -3
- package/dist/reinforcement/related.js.map +1 -1
- package/dist/retrieval/filter.d.ts.map +1 -1
- package/dist/retrieval/filter.js +7 -0
- package/dist/retrieval/filter.js.map +1 -1
- package/dist/retrieval/fts.d.ts +6 -5
- package/dist/retrieval/fts.d.ts.map +1 -1
- package/dist/retrieval/fts.js +74 -22
- package/dist/retrieval/fts.js.map +1 -1
- package/dist/status/index.d.ts +7 -0
- package/dist/status/index.d.ts.map +1 -0
- package/dist/status/index.js +7 -0
- package/dist/status/index.js.map +1 -0
- package/dist/status/status.d.ts +132 -0
- package/dist/status/status.d.ts.map +1 -0
- package/dist/status/status.js +437 -0
- package/dist/status/status.js.map +1 -0
- package/dist/storage/engram-store.d.ts.map +1 -1
- package/dist/storage/engram-store.js +17 -2
- package/dist/storage/engram-store.js.map +1 -1
- package/dist/storage/git.d.ts +168 -0
- package/dist/storage/git.d.ts.map +1 -1
- package/dist/storage/git.js +616 -33
- package/dist/storage/git.js.map +1 -1
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +1 -0
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/infra-doctor.d.ts +42 -0
- package/dist/storage/infra-doctor.d.ts.map +1 -0
- package/dist/storage/infra-doctor.js +92 -0
- package/dist/storage/infra-doctor.js.map +1 -0
- package/dist/storage/obsidian-links.d.ts +73 -0
- package/dist/storage/obsidian-links.d.ts.map +1 -0
- package/dist/storage/obsidian-links.js +177 -0
- package/dist/storage/obsidian-links.js.map +1 -0
- package/dist/storage/path.d.ts +24 -0
- package/dist/storage/path.d.ts.map +1 -1
- package/dist/storage/path.js +53 -0
- package/dist/storage/path.js.map +1 -1
- package/dist/storage/repository.d.ts +37 -1
- package/dist/storage/repository.d.ts.map +1 -1
- package/dist/storage/repository.js +235 -17
- package/dist/storage/repository.js.map +1 -1
- package/dist/storage/synapse-store.d.ts +7 -1
- package/dist/storage/synapse-store.d.ts.map +1 -1
- package/dist/storage/synapse-store.js +8 -0
- package/dist/storage/synapse-store.js.map +1 -1
- package/dist/tools/audit-query-tool.d.ts +53 -0
- package/dist/tools/audit-query-tool.d.ts.map +1 -0
- package/dist/tools/audit-query-tool.js +123 -0
- package/dist/tools/audit-query-tool.js.map +1 -0
- package/dist/tools/doctor-tools.d.ts +5 -0
- package/dist/tools/doctor-tools.d.ts.map +1 -1
- package/dist/tools/doctor-tools.js +11 -3
- package/dist/tools/doctor-tools.js.map +1 -1
- package/dist/tools/engram-tools.d.ts +13 -0
- package/dist/tools/engram-tools.d.ts.map +1 -1
- package/dist/tools/engram-tools.js +72 -8
- package/dist/tools/engram-tools.js.map +1 -1
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +3 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/llm-descriptions.d.ts +28 -28
- package/dist/tools/llm-descriptions.d.ts.map +1 -1
- package/dist/tools/llm-descriptions.js +56 -489
- package/dist/tools/llm-descriptions.js.map +1 -1
- package/dist/tools/normalization.d.ts +43 -0
- package/dist/tools/normalization.d.ts.map +1 -0
- package/dist/tools/normalization.js +68 -0
- package/dist/tools/normalization.js.map +1 -0
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +6 -0
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/schemas.d.ts +67 -11
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/schemas.js +61 -6
- package/dist/tools/schemas.js.map +1 -1
- package/dist/tools/skill-tools.js +1 -1
- package/dist/tools/skill-tools.js.map +1 -1
- package/dist/tools/synapse-tools.d.ts.map +1 -1
- package/dist/tools/synapse-tools.js +1 -0
- package/dist/tools/synapse-tools.js.map +1 -1
- package/dist/tools/sync-tools.d.ts +102 -0
- package/dist/tools/sync-tools.d.ts.map +1 -0
- package/dist/tools/sync-tools.js +309 -0
- package/dist/tools/sync-tools.js.map +1 -0
- package/dist/tools/synthesize-tools.d.ts +79 -0
- package/dist/tools/synthesize-tools.d.ts.map +1 -0
- package/dist/tools/synthesize-tools.js +297 -0
- package/dist/tools/synthesize-tools.js.map +1 -0
- package/dist/tools/tool-profile.d.ts +68 -0
- package/dist/tools/tool-profile.d.ts.map +1 -0
- package/dist/tools/tool-profile.js +174 -0
- package/dist/tools/tool-profile.js.map +1 -0
- package/dist/tools/tool.d.ts +24 -0
- package/dist/tools/tool.d.ts.map +1 -1
- package/dist/tools/tool.js.map +1 -1
- package/dist/types/disclosure.d.ts +7 -0
- package/dist/types/disclosure.d.ts.map +1 -1
- package/dist/types/repository-types.d.ts +17 -1
- package/dist/types/repository-types.d.ts.map +1 -1
- package/dist/types/synapse.d.ts +19 -1
- package/dist/types/synapse.d.ts.map +1 -1
- package/package.json +9 -9
package/dist/i18n/en.js
CHANGED
|
@@ -4,42 +4,648 @@
|
|
|
4
4
|
* @module @co-engram/core/i18n
|
|
5
5
|
*/
|
|
6
6
|
export const en = {
|
|
7
|
-
// ===== Engram tools (12) =====
|
|
8
|
-
"tool.engram_create": "Create a new
|
|
9
|
-
"tool.engram_get": "Read
|
|
10
|
-
"tool.engram_update": "Update
|
|
11
|
-
"tool.engram_delete": "
|
|
12
|
-
"tool.engram_search": "
|
|
13
|
-
"tool.engram_list": "List
|
|
14
|
-
"tool.engram_reinforce": "Report an effective
|
|
15
|
-
"tool.engram_report_failure": "Report a failed use (
|
|
16
|
-
"tool.engram_archive": "Archive
|
|
17
|
-
"tool.engram_restore": "Restore from archived
|
|
18
|
-
"tool.engram_forget": "Actively forget
|
|
19
|
-
"tool.engram_recompute_importance": "Recompute
|
|
7
|
+
// ===== Engram tools (12) — user layer: plain language, no implementation terms =====
|
|
8
|
+
"tool.engram_create": "Create a new memory. Requires title, content, kind, domain tags, and author. Smart dedupe is on by default: duplicates reinforce the existing memory instead of creating a new one; updates merge content.",
|
|
9
|
+
"tool.engram_get": "Read a memory's details on demand. Choose a brief summary or full content; auto-selects detail level based on token budget.",
|
|
10
|
+
"tool.engram_update": "Update a memory's fields (content, title, importance, tags, etc.).",
|
|
11
|
+
"tool.engram_delete": "Permanently delete a memory (including all its connections). Irreversible.",
|
|
12
|
+
"tool.engram_search": "Search memories using natural language, with optional filters by type, tags, status, etc.",
|
|
13
|
+
"tool.engram_list": "List memories by filter (no keyword query — filter by metadata, reads latest state).",
|
|
14
|
+
"tool.engram_reinforce": "Report an effective use (positive reinforcement). Increases the memory's strength score and use count, and boosts related memories.",
|
|
15
|
+
"tool.engram_report_failure": "Report a failed use (negative reinforcement). Decreases the memory's strength score; repeated failures suggest archive or forget.",
|
|
16
|
+
"tool.engram_archive": "Archive a memory (excluded from default search, but data preserved and recoverable).",
|
|
17
|
+
"tool.engram_restore": "Restore a memory from archived or forgotten state back to active, re-entering default search.",
|
|
18
|
+
"tool.engram_forget": "Actively forget a memory. Files remain (Git-tracked); the memory leaves all default search immediately. A reason is required. Automatic cleanup follows: moved to trash after 30 days, physically deleted after another 365 days; recoverable until physical deletion.",
|
|
19
|
+
"tool.engram_recompute_importance": "Recompute a memory's multi-dimensional importance (personal/team/project/network/temporal). Network and temporal dimensions are system-derived; the rest can be set manually.",
|
|
20
20
|
// ===== Learning loop tools (4) =====
|
|
21
|
-
"tool.contradiction_resolve": "Manually resolve a
|
|
22
|
-
"tool.close_learning_loop": "Close the
|
|
23
|
-
"tool.upgrade_verification": "Upgrade
|
|
24
|
-
"tool.get_evolution_lineage": "Trace
|
|
21
|
+
"tool.contradiction_resolve": "Manually resolve a contradiction between two memories (old vs new): decide which side wins, merge, or archive the loser. Requires verdict, rationale, and resolver.",
|
|
22
|
+
"tool.close_learning_loop": "Close the verification loop: feed usage outcome back to the system. Success reinforces positively; failure weakens and triggers demotion check.",
|
|
23
|
+
"tool.upgrade_verification": "Upgrade a memory's verification status (unverified → plausible → probable → verified). Requires evidence description and verifier. The system validates the state machine (no level skipping) and evidence conditions; force=true skips evidence checks but keeps state machine validation.",
|
|
24
|
+
"tool.get_evolution_lineage": "Trace a memory's evolution lineage (ancestors and descendants). Follows derivation/consolidation/supersession relationships both ways, returning graph nodes and edges for visualization.",
|
|
25
25
|
// ===== Synapse tools (4) =====
|
|
26
|
-
"tool.synapse_create": "Create a Synapse (connection
|
|
27
|
-
"tool.synapse_get": "Read a single Synapse
|
|
28
|
-
"tool.synapse_delete": "Delete a Synapse
|
|
29
|
-
"tool.synapse_list": "List all Synapses of
|
|
26
|
+
"tool.synapse_create": "Create a Synapse (typed connection, e.g. extends / contradicts / caused-by) between two memories.",
|
|
27
|
+
"tool.synapse_get": "Read a single Synapse's details.",
|
|
28
|
+
"tool.synapse_delete": "Delete a Synapse.",
|
|
29
|
+
"tool.synapse_list": "List all Synapses of a memory (outgoing / incoming / both).",
|
|
30
30
|
// ===== Skill tools (2) =====
|
|
31
|
-
"tool.skill_get": "Read Skill metadata (procedural memory
|
|
32
|
-
"tool.skill_invoke": "Invoke a Skill (procedural memory).
|
|
31
|
+
"tool.skill_get": "Read Skill metadata (procedural memory: a parameterized, invocable template).",
|
|
32
|
+
"tool.skill_invoke": "Invoke a Skill with parameters (procedural memory). Currently a framework; concrete template execution lands in a later version.",
|
|
33
33
|
// ===== Proposal tools (3) =====
|
|
34
|
-
"tool.engram_list_proposals": "List
|
|
35
|
-
"tool.engram_accept_proposal": "Accept a proposal candidate → the system auto-creates the corresponding
|
|
34
|
+
"tool.engram_list_proposals": "List pending memory proposals. When a topic is mentioned multiple times in conversation but has no matching memory, the system generates a pending proposal for confirmation. Returns pending only by default; pass includeAll=true to see history.",
|
|
35
|
+
"tool.engram_accept_proposal": "Accept a proposal candidate → the system auto-creates the corresponding memory and marks the proposal as accepted. Future occurrences of the same topic will not generate duplicate proposals.",
|
|
36
36
|
"tool.engram_dismiss_proposal": "Dismiss a proposal candidate. Suppressed for 30 days by default; override via dismissDays. Reason can be filled for meta-learning.",
|
|
37
|
+
"tool.engram_synthesize": "Manually trigger REM: hand a set of existing memories to an LLM and synthesize a pattern memory; auto-creates a derives_from synapse per source. Requires an LLM client. Use dryRun=true to preview without writing.",
|
|
37
38
|
// ===== Repository health tools (2) =====
|
|
38
|
-
"tool.engram_doctor": "Run a self-healing scan over the memory repo. Auto-fixes moved files, title renames, and stale index entries; reports dangling
|
|
39
|
-
"tool.engram_list_paths": "List the
|
|
39
|
+
"tool.engram_doctor": "Run a self-healing scan over the memory repo. Auto-fixes moved files, title renames, and stale index entries; reports dangling connections and orphan files for manual review.",
|
|
40
|
+
"tool.engram_list_paths": "List the memory repo's directory tree with cumulative memory count per node, for orienting before searching.",
|
|
41
|
+
"tool.engram_sync": "Manually trigger a full memory sync: pull (rebase) → commit → push. Gives the user explicit control over when memories are persisted to the remote, as opposed to the automatic dirty-marking. Conflicts are reported, not auto-resolved. Degrades to commit-only when no remote is configured. Compatible with any git host (GitHub / GitLab / Gerrit / internal).",
|
|
42
|
+
"tool.engram_audit_query": "Query the audit log (team memory event history, audit.jsonl). Surfaces AuditLog.query() to LLM agents so they can inspect the modification timeline of any engram or action class without leaving the chat.",
|
|
40
43
|
// ===== OpenClaw-compatible memory tools (2) =====
|
|
41
|
-
"tool.memory_search": "Search team memory
|
|
42
|
-
"tool.memory_get": "Read full content of a single memory
|
|
44
|
+
"tool.memory_search": "Search team memory using natural language. Returns relevant memory snippets with relevance scores. Call this when the user asks about past decisions, preferences, people, dates, or project context.",
|
|
45
|
+
"tool.memory_get": "Read full content of a single memory by ID. Returns content, metadata, and related memory IDs. Use after memory_search to dive into specifics.",
|
|
46
|
+
// ===== Tool descriptions: agent layer (LLM-facing, structured WHEN/RETURNS) =====
|
|
47
|
+
// Migrated from LLM_TOOL_DESCRIPTIONS + 13 new entries for previously-uncovered tools.
|
|
48
|
+
// Forbidden terms: FTS / LTP / Hebbian / RPE / reinforcementScore / effectiveRetrievals / failedUses.
|
|
49
|
+
// truthScore allowed only in engram_get (field name reference).
|
|
50
|
+
"tool.engram_search.agent": `Search team memory for past decisions, preferences, project context.
|
|
51
|
+
|
|
52
|
+
WHEN TO CALL:
|
|
53
|
+
- User references past work ("we decided", "previously", "last time we")
|
|
54
|
+
- User mentions preferences ("I prefer", "I always use", "I hate when")
|
|
55
|
+
- User asks about project history ("why does X exist", "who decided", "did we discuss")
|
|
56
|
+
- Encountering a bug that may have been seen before
|
|
57
|
+
- User explicitly says "remember" or "did we discuss"
|
|
58
|
+
|
|
59
|
+
WHEN NOT TO CALL:
|
|
60
|
+
- Pure code questions unrelated to team history
|
|
61
|
+
- General programming knowledge (use web search)
|
|
62
|
+
- Simple greetings or acknowledgments
|
|
63
|
+
|
|
64
|
+
RETURNS: Top N engrams (title + summary + score + tags). Use engram_get for full content.`,
|
|
65
|
+
"tool.engram_get.agent": `Read full content of a single memory (engram) by ID.
|
|
66
|
+
|
|
67
|
+
WHEN TO CALL:
|
|
68
|
+
- After engram_search returned a hit you want to read in full
|
|
69
|
+
- User explicitly asks for details on a specific engram ID
|
|
70
|
+
- You need metadata (importance, tags, verification status) not shown in search summary
|
|
71
|
+
|
|
72
|
+
WHEN NOT TO CALL:
|
|
73
|
+
- You haven't called engram_search yet (search first)
|
|
74
|
+
- The engram ID is from an outdated conversation (re-search to verify)
|
|
75
|
+
|
|
76
|
+
RETURNS: Full content + metadata (createdAt, importance, truthScore, reinforcementCount) + related engram IDs (synapses).
|
|
77
|
+
|
|
78
|
+
CONCEPT: {{concept:engram|userExplanation}}`,
|
|
79
|
+
"tool.engram_create.agent": `Create a new memory (engram) for important team knowledge.
|
|
80
|
+
|
|
81
|
+
WHEN TO CALL:
|
|
82
|
+
- User states a durable preference ("from now on, use arrow functions")
|
|
83
|
+
- User makes a design decision with rationale ("we'll use PostgreSQL because X")
|
|
84
|
+
- User shares a bug lesson ("this failed because Y, remember to check Z")
|
|
85
|
+
- User corrects an outdated memory ("actually, we switched to X")
|
|
86
|
+
|
|
87
|
+
WHEN NOT TO CALL:
|
|
88
|
+
- Trivial / throwaway info ("the weather is nice")
|
|
89
|
+
- Already in CLAUDE.md or project README
|
|
90
|
+
- User is just asking (use engram_search instead)
|
|
91
|
+
|
|
92
|
+
⚠️ visibility='private' for personal credentials/paths/device-specific info (ADB serials/tokens/machine-local prefs) → file lands under private/, gitignored, never enters team repo.
|
|
93
|
+
|
|
94
|
+
⚠️ Relation to Claude Code auto-memory: when co-engram is enabled, ALL memories go through this tool (the visibility field already covers every auto-memory use case — 'private' = personal memory). Do NOT write to ~/.claude/projects/.../memory/ (the auto-memory file layer) — AutoMemorySyncEngine pushes that path into the team repo unconditionally, losing ownership semantics. Fall back to auto-memory only when co-engram is not installed.
|
|
95
|
+
|
|
96
|
+
RETURNS: engram ID + version. Duplicates auto-detected.`,
|
|
97
|
+
"tool.engram_update.agent": `Update an existing memory when its content needs refinement (not contradiction).
|
|
98
|
+
|
|
99
|
+
WHEN TO CALL:
|
|
100
|
+
- Adding details to an existing engram ("the migration also needs to handle X")
|
|
101
|
+
- Correcting a typo / imprecise wording in memory
|
|
102
|
+
- The user clarifies a previous memory ("what I meant was...")
|
|
103
|
+
|
|
104
|
+
WHEN NOT TO CALL:
|
|
105
|
+
- The new info contradicts the old (use engram_create + contradiction_resolve instead)
|
|
106
|
+
- The memory is fine as-is (don't update just to refresh timestamp)
|
|
107
|
+
|
|
108
|
+
⚠️ Changing visibility migrates file path (private → private/<domainTags>/; other → <domainTags>/); atomic, fails on conflict, stableId preserved.
|
|
109
|
+
|
|
110
|
+
RETURNS: Updated engram + new version number.`,
|
|
111
|
+
"tool.engram_list.agent": `Browse all memories (paginated), newest first.
|
|
112
|
+
|
|
113
|
+
WHEN TO CALL:
|
|
114
|
+
- User wants an overview of stored memories ("what do you know about me")
|
|
115
|
+
- You need to find a memory but don't have a precise search query
|
|
116
|
+
- Reviewing what's been captured recently
|
|
117
|
+
|
|
118
|
+
WHEN NOT TO CALL:
|
|
119
|
+
- You have a specific query (use engram_search instead — faster and more relevant)
|
|
120
|
+
- Just to check if a memory exists (search by content)
|
|
121
|
+
|
|
122
|
+
RETURNS: List of engram summaries (title, tags, updatedAt) + total count. Use cursor/limit for pagination.`,
|
|
123
|
+
"tool.synapse_create.agent": `Create a typed connection between two memories (synapse).
|
|
124
|
+
|
|
125
|
+
WHEN TO CALL:
|
|
126
|
+
- A new memory extends / contradicts / relates to an existing one
|
|
127
|
+
- User mentions causal or dependency relationship ("X happened because of Y")
|
|
128
|
+
- Connecting a decision to its rationale, or a bug to its fix
|
|
129
|
+
|
|
130
|
+
WHEN NOT TO CALL:
|
|
131
|
+
- The two memories are unrelated
|
|
132
|
+
- You're unsure of the relationship kind (use 'related_to' as default)
|
|
133
|
+
|
|
134
|
+
RETURNS: Synapse ID + from/to engram IDs. Common kinds: extends, contradicts, related_to, caused_by.
|
|
135
|
+
|
|
136
|
+
SIDE EFFECTS:
|
|
137
|
+
- kind="contradicts": automatically writes contradicted audit events to both engrams (queryable via engram_audit_query) and triggers the contradiction resolution flow.`,
|
|
138
|
+
"tool.engram_reinforce.agent": `Mark a memory as effectively used (positive reinforcement).
|
|
139
|
+
|
|
140
|
+
WHEN TO CALL:
|
|
141
|
+
- You cited an engram ID in your answer and the user accepted the result
|
|
142
|
+
- A retrieved memory directly contributed to solving the task
|
|
143
|
+
- After successfully completing a task that depended on a memory
|
|
144
|
+
|
|
145
|
+
WHEN NOT TO CALL:
|
|
146
|
+
- You didn't actually use the memory (just skimmed it)
|
|
147
|
+
- The task failed or the memory was wrong (use engram_report_failure instead)
|
|
148
|
+
|
|
149
|
+
RETURNS: Memory's strength score increased + effective-use count incremented.`,
|
|
150
|
+
"tool.engram_report_failure.agent": `Report a retrieval that produced a wrong answer (cumulative LTD weakening).
|
|
151
|
+
|
|
152
|
+
WHEN TO CALL:
|
|
153
|
+
- A retrieved memory led you to a wrong answer or wrong path
|
|
154
|
+
- User says "this is wrong" but you're unsure if the memory itself is invalid or just didn't fit
|
|
155
|
+
|
|
156
|
+
WHEN NOT TO CALL:
|
|
157
|
+
- Fact definitively changed → use engram_delete (immediate)
|
|
158
|
+
- Memory is just incomplete (use engram_update)
|
|
159
|
+
- You're not sure (ask the user first)
|
|
160
|
+
|
|
161
|
+
Mechanism: cumulative negative feedback — one call drops importance only slightly (typically −0.03); after several accumulations a maintenance cycle may auto-refute it. Deterministic invalidation should NOT go this route.
|
|
162
|
+
|
|
163
|
+
RETURNS: { ok: true, importance, failureCount } + audit recorded.`,
|
|
164
|
+
"tool.engram_delete.agent": `Permanently delete a memory (immediate, irreversible).
|
|
165
|
+
|
|
166
|
+
⚠️ Unless the user has explicitly instructed deletion, you MUST confirm before calling.
|
|
167
|
+
|
|
168
|
+
WHEN TO CALL:
|
|
169
|
+
- User explicitly asks to delete ("remove that memory about X")
|
|
170
|
+
- Memory is duplicated (keep one) or contains sensitive info that should not persist
|
|
171
|
+
- Fact definitively invalid: code/decision/constraint changed AND you have hard evidence (runtime verification or user statement, not speculation). Bypasses cumulative engram_report_failure — delete directly
|
|
172
|
+
|
|
173
|
+
WHEN NOT TO CALL:
|
|
174
|
+
- Retrieval merely produced a wrong answer (use engram_report_failure, cumulative)
|
|
175
|
+
- Factual change is only speculated, not verified (verify first)
|
|
176
|
+
- User is ambiguous ("forget that" — confirm what they mean)
|
|
177
|
+
|
|
178
|
+
RETURNS: { deleted: true } or error if not found.`,
|
|
179
|
+
"tool.close_learning_loop.agent": `Close the verification loop on a memory after confirming its correctness.
|
|
180
|
+
|
|
181
|
+
WHEN TO CALL:
|
|
182
|
+
- You used a memory, verified it works, and want to mark it as confirmed
|
|
183
|
+
- After positive feedback + user confirmation that the memory is accurate
|
|
184
|
+
- Completing the "retrieve → use → verify → confirm" cycle
|
|
185
|
+
|
|
186
|
+
WHEN NOT TO CALL:
|
|
187
|
+
- You haven't actually verified yet (wait until confirmation is solid)
|
|
188
|
+
- The memory turned out wrong (use engram_report_failure)
|
|
189
|
+
|
|
190
|
+
RETURNS: Updated verification status + closed loop metadata.`,
|
|
191
|
+
"tool.contradiction_resolve.agent": `Resolve a contradiction between two memories (old vs new).
|
|
192
|
+
|
|
193
|
+
WHEN TO CALL:
|
|
194
|
+
- A new memory explicitly contradicts an older one
|
|
195
|
+
- User confirms the old memory is wrong and should be refuted
|
|
196
|
+
- You need to mark which side wins in a contradiction synapse
|
|
197
|
+
|
|
198
|
+
WHEN NOT TO CALL:
|
|
199
|
+
- The two memories are just different perspectives (use synapse kind 'related_to')
|
|
200
|
+
- You're not sure which is right (ask the user)
|
|
201
|
+
|
|
202
|
+
RETURNS: Resolution record + updated verification status on both engrams.`,
|
|
203
|
+
"tool.engram_list_proposals.agent": `List pending memory proposals (implicit capture candidates awaiting review).
|
|
204
|
+
|
|
205
|
+
WHEN TO CALL:
|
|
206
|
+
- System prompt shows "N memory candidates pending"
|
|
207
|
+
- User asks "what proposals do you have" or "review pending memories"
|
|
208
|
+
- Periodically to triage captured but unconfirmed memories
|
|
209
|
+
|
|
210
|
+
WHEN NOT TO CALL:
|
|
211
|
+
- No pending proposals (system prompt will show 0)
|
|
212
|
+
- You just searched explicitly (use engram_search)
|
|
213
|
+
|
|
214
|
+
RETURNS: List of proposals (title, similarity, sample message, proposal ID).`,
|
|
215
|
+
"tool.engram_accept_proposal.agent": `Accept a pending memory proposal (convert it to a real engram).
|
|
216
|
+
|
|
217
|
+
WHEN TO CALL:
|
|
218
|
+
- User confirms a proposal is valid ("yes, save that")
|
|
219
|
+
- You reviewed a proposal and it captures a real preference/decision
|
|
220
|
+
|
|
221
|
+
WHEN NOT TO CALL:
|
|
222
|
+
- The proposal is wrong or low quality (use engram_dismiss_proposal)
|
|
223
|
+
- You haven't reviewed it yet
|
|
224
|
+
|
|
225
|
+
RETURNS: Created engram ID + proposal marked as accepted.`,
|
|
226
|
+
"tool.engram_dismiss_proposal.agent": `Dismiss a pending memory proposal (reject the capture).
|
|
227
|
+
|
|
228
|
+
WHEN TO CALL:
|
|
229
|
+
- User says "no, that's not worth saving"
|
|
230
|
+
- Proposal is noisy / low quality / already covered
|
|
231
|
+
- After review, you decide it shouldn't become a memory
|
|
232
|
+
|
|
233
|
+
WHEN NOT TO CALL:
|
|
234
|
+
- You haven't reviewed the proposal content
|
|
235
|
+
- The proposal is borderline (accept + refine instead)
|
|
236
|
+
|
|
237
|
+
RETURNS: Proposal marked as dismissed + removed from pending list.`,
|
|
238
|
+
"tool.engram_synthesize.agent": `Synthesize multiple engrams into a single pattern memory (manual REM).
|
|
239
|
+
|
|
240
|
+
WHEN TO CALL:
|
|
241
|
+
- Several engrams recur under one theme and combine into a reusable lesson
|
|
242
|
+
- After a retrospective, abstract a pattern from concrete memories
|
|
243
|
+
- REM's heuristic was too low-confidence, but human judgement says it's a real pattern
|
|
244
|
+
- You want explicit derives_from lineage links among related engrams
|
|
245
|
+
|
|
246
|
+
WHEN NOT TO CALL:
|
|
247
|
+
- Only one engram (use engram_update)
|
|
248
|
+
- Sources are unrelated (would produce garbage)
|
|
249
|
+
- You want to resolve conflicts (use contradiction_resolve)
|
|
250
|
+
- You want to deduplicate (engram_create has dedupe)
|
|
251
|
+
- ctx.llmClient is not configured (tool throws with setup guidance)
|
|
252
|
+
|
|
253
|
+
RETURNS: patternEngramId + synapseIds (one derives_from per source) + draft. dryRun=true returns the draft only.`,
|
|
254
|
+
"tool.engram_doctor.agent": `Run a self-healing scan over the memory repo and report findings.
|
|
255
|
+
|
|
256
|
+
Auto-fixes: moved files (index re-points), renamed titles (re-slug + rename), stale index entries (cleared). Reports for manual review: dangling synapse references and orphan markdown.
|
|
257
|
+
|
|
258
|
+
WHEN TO CALL:
|
|
259
|
+
- User says "my memory looks wrong" or "search misses entries I expected"
|
|
260
|
+
- User manually edited/renamed files under the data root
|
|
261
|
+
- After a Git merge that touched the data repo
|
|
262
|
+
- Periodic health check (once per session)
|
|
263
|
+
|
|
264
|
+
WHEN NOT TO CALL:
|
|
265
|
+
- No observed inconsistency
|
|
266
|
+
- User wants a specific engram (use engram_get)
|
|
267
|
+
|
|
268
|
+
RETURNS: started/finished timestamps, total counts, autoFixesApplied, pendingManualReview, and the full issues array (kind + path + message + autoFixed).`,
|
|
269
|
+
"tool.engram_sync.agent": `Manually trigger a full memory sync: pull → commit → push.
|
|
270
|
+
|
|
271
|
+
Flow: fetch → pull --rebase --autostash (abort + report on conflict) → add -A + commit (skip if nothing to commit) → push (auto-degrades to commit-only without remote). Creates .gitignore excluding .co-engram/ if missing.
|
|
272
|
+
|
|
273
|
+
WHEN TO CALL: user says "save/commit/push memories"; after dense authoring; dryRun=true to preview uncommitted changes.
|
|
274
|
+
|
|
275
|
+
RETURNS: { pulled:{ok,upToDate?,conflicts?}, committed:{ok,sha?,filesChanged,nothingToCommit?}, pushed:{ok,skipped?,reason?}, summary }. On conflict, pulled.ok=false + conflicts array; tool halts remaining phases.`,
|
|
276
|
+
"tool.engram_list_paths.agent": `Show the physical directory tree of the memory repo so you can orient before searching.
|
|
277
|
+
|
|
278
|
+
Each node carries engramCount (cumulative for that subtree). Use it to see where memory is concentrated (which domains, which projects) before deciding what to search for.
|
|
279
|
+
|
|
280
|
+
WHEN TO CALL:
|
|
281
|
+
- Start of a session, before any engram_search, to map the landscape
|
|
282
|
+
- User asks "what do we have memories about" or "what areas does the team work on"
|
|
283
|
+
- You want to pick a more specific domain tag before searching
|
|
284
|
+
|
|
285
|
+
WHEN NOT TO CALL:
|
|
286
|
+
- You already know the query — go straight to engram_search
|
|
287
|
+
- User wants a specific engram (use engram_get)
|
|
288
|
+
|
|
289
|
+
RETURNS: Nested { path, engramCount, children } tree rooted at '/'. Optional maxDepth (1-10, default 5).`,
|
|
290
|
+
"tool.engram_audit_query.agent": `Query the audit log (audit.jsonl) and return matching events.
|
|
291
|
+
|
|
292
|
+
WHEN TO CALL:
|
|
293
|
+
- "modification history of this engram" (who created / reinforced / contradicted)
|
|
294
|
+
- Debugging importance anomalies (reinforce / report_failure sequence)
|
|
295
|
+
- Reviewing proposal triage (propose → accept/dismiss)
|
|
296
|
+
- Investigating merge conflict resolution
|
|
297
|
+
|
|
298
|
+
WHEN NOT TO CALL:
|
|
299
|
+
- Want current engram state (use engram_get)
|
|
300
|
+
- Want effectiveness charts (open viewer web UI)
|
|
301
|
+
|
|
302
|
+
RETURNS: { events: AuditEvent[], count }. Chronological order; each has ts / actor / action / engramId / metadata.`,
|
|
303
|
+
// 13 new agent descriptions for previously-uncovered tools
|
|
304
|
+
"tool.engram_archive.agent": `Archive a memory (exclude from default retrieval, but preserve data).
|
|
305
|
+
|
|
306
|
+
WHEN TO CALL:
|
|
307
|
+
- Memory is no longer actively relevant but may be needed later
|
|
308
|
+
- User asks to "shelve" / "park" / "set aside" a memory
|
|
309
|
+
- Reducing noise in search results without losing history
|
|
310
|
+
|
|
311
|
+
WHEN NOT TO CALL:
|
|
312
|
+
- Memory is wrong (use engram_report_failure)
|
|
313
|
+
- Memory should be permanently removed (use engram_delete or engram_forget)
|
|
314
|
+
- You just want to refresh a memory (use engram_update)
|
|
315
|
+
|
|
316
|
+
RETURNS: { archived: true } + new status. Search excludes archived by default; use a filter to include.`,
|
|
317
|
+
"tool.engram_restore.agent": `Restore an archived or forgotten memory to active state.
|
|
318
|
+
|
|
319
|
+
WHEN TO CALL:
|
|
320
|
+
- User asks to "bring back" / "unarchive" / "restore" a memory
|
|
321
|
+
- A previously archived memory becomes relevant again
|
|
322
|
+
- Recovering from the trash tab in the viewer
|
|
323
|
+
|
|
324
|
+
WHEN NOT TO CALL:
|
|
325
|
+
- The memory was permanently purged (only git history can recover it)
|
|
326
|
+
- You haven't verified the memory is still accurate (consider engram_update first)
|
|
327
|
+
|
|
328
|
+
RETURNS: { restored: true } + new status. Re-enters default retrieval immediately.`,
|
|
329
|
+
"tool.engram_forget.agent": `Actively forget a memory (retrieval-induced forgetting).
|
|
330
|
+
|
|
331
|
+
Files remain (Git keeps history); the memory leaves all default retrieval immediately. A reason is required.
|
|
332
|
+
|
|
333
|
+
WHEN TO CALL:
|
|
334
|
+
- User explicitly says "forget this" / "stop remembering this"
|
|
335
|
+
- Memory is misleading and should not surface in future searches
|
|
336
|
+
- Soft removal before considering permanent deletion
|
|
337
|
+
|
|
338
|
+
WHEN NOT TO CALL:
|
|
339
|
+
- Retrieval merely produced a wrong answer (use engram_report_failure, cumulative)
|
|
340
|
+
- Fact definitively invalid (use engram_delete, immediate)
|
|
341
|
+
- User is ambiguous (confirm what they want forgotten)
|
|
342
|
+
- You want it still searchable (use engram_archive instead)
|
|
343
|
+
|
|
344
|
+
RETURNS: { forgotten: true } + reason recorded. Sweep: .trash/ after 30 days, physical delete after another 365 days.`,
|
|
345
|
+
"tool.engram_recompute_importance.agent": `Recompute a memory's multi-dimensional importance score.
|
|
346
|
+
|
|
347
|
+
WHEN TO CALL:
|
|
348
|
+
- After significant retrieval/use patterns changed (bulk reinforce or failure)
|
|
349
|
+
- User asks to "re-rank" / "re-score" / "refresh importance" a memory
|
|
350
|
+
- Debugging unexpected search ranking
|
|
351
|
+
|
|
352
|
+
WHEN NOT TO CALL:
|
|
353
|
+
- Just to refresh a timestamp (use engram_update)
|
|
354
|
+
- As a routine operation (importance updates automatically on reinforce/failure)
|
|
355
|
+
|
|
356
|
+
RETURNS: Recomputed importance vector (personal/team/project/network/temporal) + new composite score written back to engram.importance.`,
|
|
357
|
+
"tool.upgrade_verification.agent": `Upgrade a memory's verification status (unverified → plausible → probable → verified).
|
|
358
|
+
|
|
359
|
+
WHEN TO CALL:
|
|
360
|
+
- You verified a memory is accurate and want to mark it as confirmed
|
|
361
|
+
- After cross-context evidence supports the memory
|
|
362
|
+
- Following a successful close_learning_loop with strong evidence
|
|
363
|
+
|
|
364
|
+
WHEN NOT TO CALL:
|
|
365
|
+
- Without evidence (use close_learning_loop for the basic confirmation cycle first)
|
|
366
|
+
- To downgrade (this tool only upgrades; refuted is a separate path)
|
|
367
|
+
- Skipping levels without force=true (state machine validation will reject)
|
|
368
|
+
|
|
369
|
+
RETURNS: New verification status + evidence record. force=true skips evidence checks but keeps state machine validation.`,
|
|
370
|
+
"tool.get_evolution_lineage.agent": `Trace how a memory evolved (ancestors and descendants).
|
|
371
|
+
|
|
372
|
+
WHEN TO CALL:
|
|
373
|
+
- User asks "where did this decision come from" / "how did this pattern emerge"
|
|
374
|
+
- Understanding the derivation chain of a pattern or procedure
|
|
375
|
+
- Reviewing whether an observation lineage supports a pattern's validity
|
|
376
|
+
|
|
377
|
+
WHEN NOT TO CALL:
|
|
378
|
+
- The memory has no evolution relationships (returns empty graph)
|
|
379
|
+
- You just want related memories (use engram_get with synapses tier)
|
|
380
|
+
|
|
381
|
+
RETURNS: DAG nodes and edges. Ancestors = sources (observations etc.), descendants = evolution results (patterns/procedures).`,
|
|
382
|
+
"tool.synapse_get.agent": `Read a single synapse (connection) between two memories.
|
|
383
|
+
|
|
384
|
+
WHEN TO CALL:
|
|
385
|
+
- Inspecting a specific connection's metadata (weight, direction, evidence)
|
|
386
|
+
- Debugging why two memories are linked
|
|
387
|
+
- After synapse_list returned a synapse ID you want details on
|
|
388
|
+
|
|
389
|
+
WHEN NOT TO CALL:
|
|
390
|
+
- To list all synapses of a memory (use synapse_list)
|
|
391
|
+
- To check if a connection exists (use synapse_list with filters)
|
|
392
|
+
|
|
393
|
+
RETURNS: Synapse record (id, from, to, kind, weight, direction, evidence, resolutionState).`,
|
|
394
|
+
"tool.synapse_delete.agent": `Delete a synapse (connection) between two memories.
|
|
395
|
+
|
|
396
|
+
WHEN TO CALL:
|
|
397
|
+
- User confirms a connection is wrong / no longer relevant
|
|
398
|
+
- Cleaning up an incorrect contradiction or derives_from link
|
|
399
|
+
- Resolving duplicates after a merge
|
|
400
|
+
|
|
401
|
+
WHEN NOT TO CALL:
|
|
402
|
+
- The connection is just weak (use synapse_create with lower weight instead)
|
|
403
|
+
- The contradiction is resolved (use contradiction_resolve, not delete)
|
|
404
|
+
- Without confirming the user wants the connection removed
|
|
405
|
+
|
|
406
|
+
RETURNS: { deleted: true } + both engrams' caches updated.`,
|
|
407
|
+
"tool.synapse_list.agent": `List all synapses (connections) of a memory.
|
|
408
|
+
|
|
409
|
+
WHEN TO CALL:
|
|
410
|
+
- Reviewing what a memory connects to before deciding to update or delete
|
|
411
|
+
- Understanding the relationship graph around a topic
|
|
412
|
+
- Checking for contradictions or derivations
|
|
413
|
+
|
|
414
|
+
WHEN NOT TO CALL:
|
|
415
|
+
- You only need one specific synapse (use synapse_get)
|
|
416
|
+
- You want the full graph view (use the viewer's Graph tab)
|
|
417
|
+
|
|
418
|
+
RETURNS: List of synapses (outgoing / incoming / both) with kind, weight, direction.`,
|
|
419
|
+
"tool.skill_get.agent": `Read skill metadata (procedural memory).
|
|
420
|
+
|
|
421
|
+
WHEN TO CALL:
|
|
422
|
+
- Checking what a registered skill does before invoking it
|
|
423
|
+
- Listing available skills (procedural templates)
|
|
424
|
+
- Debugging skill registry issues
|
|
425
|
+
|
|
426
|
+
WHEN NOT TO CALL:
|
|
427
|
+
- To execute a skill (use skill_invoke)
|
|
428
|
+
- For declarative memory (use engram_search / engram_get)
|
|
429
|
+
|
|
430
|
+
RETURNS: Skill metadata (name, description, template kind, parameters).`,
|
|
431
|
+
"tool.skill_invoke.agent": `⚠ EXPERIMENTAL STUB — currently returns a placeholder string, does not actually execute the skill; real template execution lands in P1.
|
|
432
|
+
|
|
433
|
+
Invoke a skill (procedural memory) with parameters.
|
|
434
|
+
|
|
435
|
+
WHEN TO CALL:
|
|
436
|
+
- User asks to execute a known procedural template
|
|
437
|
+
- Following a skill_get that identified the right skill
|
|
438
|
+
- Running a tool-sequence or prompt-template skill
|
|
439
|
+
|
|
440
|
+
WHEN NOT TO CALL:
|
|
441
|
+
- For one-off tasks without a registered skill
|
|
442
|
+
- Without first checking skill_get (you may not have the right skill)
|
|
443
|
+
|
|
444
|
+
RETURNS: Skill execution result (template-specific). At P0 the output field looks like "[P0 stub] Skill X invoked with args: ...".`,
|
|
445
|
+
"tool.memory_search.agent": `Search team memory using natural language. Returns relevant memory snippets with relevance scores.
|
|
446
|
+
|
|
447
|
+
WHEN TO CALL:
|
|
448
|
+
- User asks about past decisions, preferences, people, dates, or project context
|
|
449
|
+
- User references prior work ("we decided", "previously", "last time")
|
|
450
|
+
- You need team history that may not be in the current code or docs
|
|
451
|
+
|
|
452
|
+
WHEN NOT TO CALL:
|
|
453
|
+
- Pure code questions unrelated to team history
|
|
454
|
+
- General programming knowledge (use web search)
|
|
455
|
+
- When you already know the answer from this conversation
|
|
456
|
+
|
|
457
|
+
RETURNS: Hits with id, title, content snippet, score, metadata. Use memory_get for full content.`,
|
|
458
|
+
"tool.memory_get.agent": `Read full content of a single memory by ID.
|
|
459
|
+
|
|
460
|
+
WHEN TO CALL:
|
|
461
|
+
- After memory_search returned a hit you want to read in full
|
|
462
|
+
- User explicitly asks for details on a specific memory ID
|
|
463
|
+
- You need metadata (importance, kind, tags) not shown in search summary
|
|
464
|
+
|
|
465
|
+
WHEN NOT TO CALL:
|
|
466
|
+
- You haven't called memory_search yet (search first)
|
|
467
|
+
- To list all memories (use engram_list)
|
|
468
|
+
|
|
469
|
+
RETURNS: Full content + metadata (importance, tags, kind) + related memory IDs.`,
|
|
470
|
+
// ===== Tool descriptions: technical layer (developer/audit-facing, full contract) =====
|
|
471
|
+
// Allows implementation terms (FTS / LTP / Hebbian / RPE). Documents parameter semantics,
|
|
472
|
+
// error conditions, side effects, and invariants. Used in technical docs, API contracts, debug.
|
|
473
|
+
"tool.engram_search.technical": `FTS5 full-text search (Chinese bigram tokenizer + English word tokenizer).
|
|
474
|
+
Input: { query: string; filter?: { domainTags?, kind?, kinds?, status?, freshness?, emotionalValence?, createdBy?, createdAfter?, createdBefore?, minImportance? }; limit?: number }
|
|
475
|
+
Side effects: none (read-only). Does not update lastRetrievedAt (use engram_reinforce for that).
|
|
476
|
+
Error conditions: empty query throws; limit clamped to [1, 100].
|
|
477
|
+
Invariant: archived engrams excluded unless filter.status includes 'archived'.
|
|
478
|
+
Index: reads digest.jsonl + FTS index; cold-start rebuilds if missing.`,
|
|
479
|
+
"tool.engram_get.technical": `Read engram by disclosure tier (progressive disclosure to control token cost).
|
|
480
|
+
Input: { id: EngramId; tier?: 'catalog' | 'digest' | 'content' | 'meta' | 'synapses' | 'auto'; contextBudget?: number }
|
|
481
|
+
- catalog: id + title + kind + tags (smallest)
|
|
482
|
+
- digest: + summary + importance + timestamps
|
|
483
|
+
- content: + full body
|
|
484
|
+
- meta: + frontmatter (all fields)
|
|
485
|
+
- synapses: + outgoing/incoming edges
|
|
486
|
+
- auto: picks tier based on contextBudget (default)
|
|
487
|
+
Side effects: none. Does NOT update lastRetrievedAt (use engram_reinforce).
|
|
488
|
+
Error conditions: not found throws; invalid tier throws.
|
|
489
|
+
truthScore field exposed here (field-name reference allowed).`,
|
|
490
|
+
"tool.engram_create.technical": `Create new engram. Input: { title, content, kind, domainTags, createdBy, summary?, contextTags?, importance?, confidence?, emotionalValence?, sourceType?, visibility?, decayHalfLifeDays?, dedupe?, encodingContext? }
|
|
491
|
+
kind enum: observation | fact | pattern | procedure | hypothesis.
|
|
492
|
+
Dedupe mode (default true): DUPLICATE reinforces existing (calls recordRetrievalSuccess); UPDATE merges content; NEW creates.
|
|
493
|
+
Side effects: writes engrams/<slug>.md + .meta.json + .synapses.json; appends audit event; marks repo dirty.
|
|
494
|
+
Error conditions: missing required fields throws; invalid kind throws.
|
|
495
|
+
Invariant: slug uniqueness enforced; collision appends suffix.`,
|
|
496
|
+
"tool.engram_update.technical": `Update engram fields. Input: { id, title?, content?, summary?, importance?, domainTags?, contextTags?, emotionalValence?, decayHalfLifeDays?, visibility?, updatedBy, kinds? }
|
|
497
|
+
Optimistic lock: version field checked (Finding 231 — pending impl).
|
|
498
|
+
Side effects: rewrites .md + .meta.json; appends audit; updates digest/graph index incrementally; marks dirty.
|
|
499
|
+
Error conditions: not found throws; version mismatch throws (when implemented).
|
|
500
|
+
Invariant: title change triggers re-slug + file rename.`,
|
|
501
|
+
"tool.engram_delete.technical": `Hard delete engram. Input: { id }
|
|
502
|
+
Side effects: removes .md + .meta.json + .synapses.json; removes incoming synapses on other engrams; rebuilds digest/graph; appends audit.
|
|
503
|
+
Error conditions: not found throws.
|
|
504
|
+
Invariant: irreversible (vs engram_forget which keeps files). Git history is the only recovery.
|
|
505
|
+
Warning: prefer engram_archive or engram_forget for soft removal.`,
|
|
506
|
+
"tool.engram_list.technical": `List engrams by filter (no query — pure metadata filter, reads latest state).
|
|
507
|
+
Input: { filter?: same as engram_search; limit?, cursor? }
|
|
508
|
+
Side effects: none.
|
|
509
|
+
Pagination: cursor-based, opaque token.
|
|
510
|
+
Invariant: reads engram-index.json (catalog); does not read full content. Faster than engram_search for listing.`,
|
|
511
|
+
"tool.engram_reinforce.technical": `Report effective retrieval (LTP). Input: { id, effectiveness: 0..1, note? }
|
|
512
|
+
Updates: effectiveRetrievals += 1; reinforcementScore += effectiveness; importance += effectiveness × 0.02 (clamped [0,1]).
|
|
513
|
+
Hebbian boost: neighbor engrams (via synapses) get 50% delta, except contradicts synapse kind.
|
|
514
|
+
Side effects: writes .meta.json for target + neighbors; appends audit; appends effectiveness signal.
|
|
515
|
+
Error conditions: not found throws; effectiveness out of range throws.
|
|
516
|
+
Note: this path is distinct from maintenance applyRpeUpdate (Finding 124) — tool path grows importance, maintenance path does not.`,
|
|
517
|
+
"tool.engram_report_failure.technical": `Report failed use (LTD). Input: { id, reason, context? }
|
|
518
|
+
Updates: failedUses += 1; retrievalCount += 1; importance -= 0.03 (×1.5 escalation after threshold).
|
|
519
|
+
Auto-suggest: failedUses ≥ 3 → suggest archive; ≥ 5 → suggest forget.
|
|
520
|
+
Side effects: writes .meta.json; appends audit; appends effectiveness signal (failure).
|
|
521
|
+
Error conditions: not found throws; empty reason throws.`,
|
|
522
|
+
"tool.engram_archive.technical": `Archive engram. Input: { id, reason? }
|
|
523
|
+
Status transition: active → archived.
|
|
524
|
+
Side effects: writes .meta.json (status); rebuilds digest (excludes archived from default FTS).
|
|
525
|
+
Error conditions: not found throws; already archived is idempotent.
|
|
526
|
+
Invariant: data preserved; recoverable via engram_restore. Search excludes archived unless filter.status='archived'.`,
|
|
527
|
+
"tool.engram_restore.technical": `Restore from archived/forgotten. Input: { id }
|
|
528
|
+
Status transition: archived|forgotten → active.
|
|
529
|
+
If engram was swept to .trash/, moves files back first.
|
|
530
|
+
Side effects: writes .meta.json; rebuilds digest; appends audit.
|
|
531
|
+
Error conditions: not found throws; physically purged throws (irrecoverable).
|
|
532
|
+
Invariant: re-enters default retrieval immediately.`,
|
|
533
|
+
"tool.engram_forget.technical": `RIF retrieval-induced forgetting. Input: { id, reason }
|
|
534
|
+
Status: active|archived → forgotten.
|
|
535
|
+
Files preserved (Git-tracked). Leaves all default retrieval immediately.
|
|
536
|
+
Sweep pipeline (maintenance): forgotten → 30d → .trash/ (removed from main index) → 365d → physical rm.
|
|
537
|
+
Side effects: writes .meta.json (status + forgottenAt); rebuilds digest; appends audit.
|
|
538
|
+
Error conditions: not found throws; empty reason throws.
|
|
539
|
+
Recovery: engram_restore anytime before physical purge; after purge, only git history.`,
|
|
540
|
+
"tool.engram_recompute_importance.technical": `Recompute multi-dimensional importance. Input: { id, overrides?: { personal?, team?, project? } }
|
|
541
|
+
Dimensions: personal / team / project (user-settable); network (incomingSynapseCount-derived); temporal (Ebbinghaus decay).
|
|
542
|
+
Composite = weighted sum (spec §8). Written back to engram.importance.
|
|
543
|
+
Side effects: writes .meta.json (importance + importanceVector); appends audit.
|
|
544
|
+
Error conditions: not found throws.
|
|
545
|
+
Invariant: network + temporal are always system-derived; overrides only affect the other three.`,
|
|
546
|
+
"tool.contradiction_resolve.technical": `Resolve contradicts synapse. Input: { fromId, synapseId, verdict: 'keep_new' | 'keep_old' | 'merge' | 'archive', rationale, resolvedBy }
|
|
547
|
+
Updates: synapse.resolutionState = 'resolved'; appends to evidence[]; if verdict=archive, loser engram status → archived.
|
|
548
|
+
Side effects: writes synapse file + .meta.json (if archive); appends audit.
|
|
549
|
+
Error conditions: not found throws; non-contradicts synapse throws; already resolved throws.
|
|
550
|
+
Spec ref: §3.9 phase 2 human intervention.`,
|
|
551
|
+
"tool.close_learning_loop.technical": `Close verification loop. Input: { engramId, outcome: 'success' | 'failure' | 'partial', effectiveness?, reportedBy }
|
|
552
|
+
success/partial → LTP (engram_reinforce path) + Hebbian neighbor boost.
|
|
553
|
+
failure → LTD (engram_report_failure path) + demotion threshold check (auto-archive if below).
|
|
554
|
+
Triggers provenance reward/punishment circuit if configured.
|
|
555
|
+
Side effects: writes .meta.json (importance + verification status); appends audit + effectiveness signal.
|
|
556
|
+
Error conditions: not found throws; invalid outcome throws.`,
|
|
557
|
+
"tool.upgrade_verification.technical": `Upgrade verification status. Input: { id, evidenceDescription, verifier, force? }
|
|
558
|
+
State machine: unverified → plausible → probable → verified (no skipping). refuted is separate path.
|
|
559
|
+
3D evidence conditions: evidenceCount ≥ N + cross-context domainTags + temporal stability days.
|
|
560
|
+
force=true: skip evidence condition checks but keep state machine validation.
|
|
561
|
+
Side effects: writes .meta.json (verificationStatus + evidence[]); appends audit.
|
|
562
|
+
Error conditions: not found throws; invalid transition throws; insufficient evidence throws (without force).
|
|
563
|
+
Spec ref: §3.9 phase 1.`,
|
|
564
|
+
"tool.get_evolution_lineage.technical": `Trace evolution DAG. Input: { id, direction?: 'ancestors' | 'descendants' | 'both', maxDepth? }
|
|
565
|
+
Follows synapse kinds: derives_from / consolidates / supersedes (bidirectional).
|
|
566
|
+
Returns: { nodes: Engram[], edges: Synapse[] }.
|
|
567
|
+
Side effects: none (read-only).
|
|
568
|
+
Invariant: ancestors = sources (observation/hypothesis), descendants = evolution results (pattern/procedure).
|
|
569
|
+
Spec ref: §4.6 acceptance, §12.7 scenario 6.`,
|
|
570
|
+
"tool.synapse_create.technical": `Create synapse. Input: { from, to, kind, weight?, direction?, evidence?, createdBy?, sourceSemantic?, targetSemantic? }
|
|
571
|
+
kind enum: extends | part_of | similar_to | depends_on | causes | follows | derives_from | contradicts | exemplifies | supersedes | consolidates | contextualizes.
|
|
572
|
+
direction: 'directional' | 'bidirectional' (default directional).
|
|
573
|
+
Side effects: writes .synapses.json on both ends (outgoing + incoming caches); appends audit.
|
|
574
|
+
Error conditions: from/to not found throw; self-loop throws; duplicate throws.
|
|
575
|
+
Invariant: contradicts synapse creates a contradiction entry for resolution tracking.`,
|
|
576
|
+
"tool.synapse_get.technical": `Read single synapse. Input: { from, synapseId }
|
|
577
|
+
Returns: full synapse record (id, from, to, kind, weight, direction, evidence, resolutionState, createdAt).
|
|
578
|
+
Side effects: none.
|
|
579
|
+
Error conditions: not found throws.`,
|
|
580
|
+
"tool.synapse_delete.technical": `Delete synapse. Input: { from, synapseId }
|
|
581
|
+
Side effects: removes from .synapses.json on both ends; rebuilds graph index; appends audit.
|
|
582
|
+
Error conditions: not found throws.
|
|
583
|
+
Invariant: contradicts synapse deletion also clears contradiction entry (use contradiction_resolve for explicit verdict instead).`,
|
|
584
|
+
"tool.synapse_list.technical": `List synapses of an engram. Input: { from, direction?: 'outgoing' | 'incoming' | 'both' }
|
|
585
|
+
Returns: array of synapse records.
|
|
586
|
+
Side effects: none.
|
|
587
|
+
Invariant: outgoing = engram as source; incoming = engram as target. Both reads from cached .synapses.json.`,
|
|
588
|
+
"tool.skill_get.technical": `Read skill metadata. Input: { name }
|
|
589
|
+
P0: reads from in-memory registry (skills loaded at startup).
|
|
590
|
+
Returns: { name, description, templateKind: 'tool-sequence' | 'prompt-template', parameters, version }.
|
|
591
|
+
Side effects: none.
|
|
592
|
+
Error conditions: not found throws.
|
|
593
|
+
Note: P1 will add filesystem-backed skill loading.`,
|
|
594
|
+
"tool.skill_invoke.technical": `Invoke skill. Input: { name, parameters }
|
|
595
|
+
P0: framework only — returns "skill invoked" without executing template.
|
|
596
|
+
P1: tool-sequence executes parameterized tool chain; prompt-template renders and returns prompt.
|
|
597
|
+
Side effects: depends on template (tool-sequence may write engrams).
|
|
598
|
+
Error conditions: not found throws; parameter validation throws.
|
|
599
|
+
Invariant: skill execution is logged for provenance.`,
|
|
600
|
+
"tool.engram_list_proposals.technical": `List pending proposals. Input: { includeAll?: boolean }
|
|
601
|
+
Default: returns only pending. includeAll=true returns accepted/dismissed history.
|
|
602
|
+
Proposal engine: topics mentioned ≥3 times in conversation without matching engram generate pending proposal.
|
|
603
|
+
Side effects: none (read-only).
|
|
604
|
+
Returns: array of { proposalId, title, similarity, sampleMessage, status, createdAt }.`,
|
|
605
|
+
"tool.engram_accept_proposal.technical": `Accept proposal. Input: { entityId, title?, content?, domainTags?, kind?, createdBy? }
|
|
606
|
+
Side effects: creates engram (calls engram_create internally); marks proposal status=accepted; suppresses future duplicate proposals for same topic; appends audit.
|
|
607
|
+
Error conditions: proposal not found throws; already accepted/dismissed throws.
|
|
608
|
+
Invariant: default createdBy fallback chain: explicit > ctx.defaultCreatedBy > 'unknown'.`,
|
|
609
|
+
"tool.engram_dismiss_proposal.technical": `Dismiss proposal. Input: { entityId, reason?, dismissDays? }
|
|
610
|
+
Default dismissDays=30. Reason recorded for meta-learning.
|
|
611
|
+
Side effects: marks proposal status=dismissed; sets suppressedUntil timestamp; appends audit.
|
|
612
|
+
Error conditions: proposal not found throws; already accepted throws.
|
|
613
|
+
Invariant: after dismissDays, proposal may re-surface if topic mentioned again.`,
|
|
614
|
+
"tool.engram_synthesize.technical": `LLM-synthesize multiple engrams into a pattern. Input: { ids: string[2..20], createdBy?, domainTags?: string[1..5], synthesisHints?: string[≤500], dryRun?: boolean }
|
|
615
|
+
Behavior: load sources → call ctx.llmClient.complete(prompt, { maxTokens: 4000, temperature: 0.3 }) → parse JSON → createEngram(kind='pattern', sourceType='inferred', importance=0.7, confidence from LLM) → for each source addOutgoingSynapse(kind='derives_from', weight=0.8, directional, evidence marks synthesis provenance).
|
|
616
|
+
domainTags resolution priority: user-explicit > LLM-inferred > union of source tags (first 5).
|
|
617
|
+
Side effects: writes new engram's three files + N synapses; appends audit { target: 'pattern-via-synthesis', sourceIds, synapseIds }; markDirty.
|
|
618
|
+
dryRun=true: returns draft only, no writes.
|
|
619
|
+
Error conditions: llmClient missing throws with setup guidance; ids after dedup < 2 throws; any source missing throws (lists missing ids, no partial execution); LLM returns non-string throws; JSON parse failure throws (no engram created, avoids garbage); LLM call error propagates.
|
|
620
|
+
Invariants: derives_from direction is always pattern → source; synapse weight fixed at 0.8; ids auto-deduped.`,
|
|
621
|
+
"tool.engram_doctor.technical": `Self-healing scan. Input: { incremental?: boolean }
|
|
622
|
+
Auto-fixes: file moves (index re-points), title renames (re-slug + rename), stale index entries (cleared).
|
|
623
|
+
Reports (manual review): dangling synapse references, orphan markdown files.
|
|
624
|
+
Side effects: may rewrite .meta.json / .synapses.json / index files; appends audit log entry.
|
|
625
|
+
Returns: { startedAt, finishedAt, total, autoFixed, pendingManualReview, issues: [{ kind, path, message, autoFixed }] }.
|
|
626
|
+
Incremental=true: only scan files changed since last mtime pass.`,
|
|
627
|
+
"tool.engram_sync.technical": `Manual pull-commit-push. Input: { message?: string (default "co-engram sync: YYYY-MM-DD"), dryRun?: boolean (default false), pull?: boolean (default true), push?: boolean (default true) }
|
|
628
|
+
Side effects: execSync('git ...', { cwd: dataRoot }) — invokes system git, inherits user SSH/credentials/proxy; no hardcoded host/URL/refspec; does not write Change-Id (ZTE/Gerrit commit-msg hook auto-adds if installed); respects user's .git/config push (Gerrit review via refs/for/* is user's choice).
|
|
629
|
+
.gitignore fallback: created if missing; excludes entire .co-engram/ directory (derived data + behavioral cache, all regenerable).
|
|
630
|
+
Conflicts: pullRepo detects rebase conflicts → git rebase --abort → returns conflicts array (paths relative to repo root) → tool halts, no auto-resolve.
|
|
631
|
+
Push fallback: when hasRemote=false, push phase is skipped, no error (supports local-only repos).
|
|
632
|
+
Idempotent: nothing to commit → committed.nothingToCommit=true (skip commit); pull when already up-to-date → pulled.upToDate=true.
|
|
633
|
+
Returns: { repoPath, gitignoreCreated, changedFiles? (dryRun), pulled?, committed?, pushed?, summary }.`,
|
|
634
|
+
"tool.engram_list_paths.technical": `Directory tree with engramCount. Input: { maxDepth?: 1..10 (default 5) }
|
|
635
|
+
Reads filesystem directly (not index). Each node: { path, engramCount, children }.
|
|
636
|
+
Side effects: none.
|
|
637
|
+
Use case: progressive disclosure — orient before searching.
|
|
638
|
+
Invariant: engramCount is cumulative for subtree (includes children).`,
|
|
639
|
+
"tool.memory_search.technical": `OpenClaw-compatible alias of engram_search. Same FTS5 backend, simplified schema.
|
|
640
|
+
Input: { query, maxResults?, minScore? }
|
|
641
|
+
Side effects: none.
|
|
642
|
+
Returns: { results: MemorySearchHit[], total }. MemorySearchHit hides internal fields (emotionalValence, freshness, sourceType).
|
|
643
|
+
Invariant: maxResults clamped to [1, 50]; minScore clamped to [0, 1].`,
|
|
644
|
+
"tool.memory_get.technical": `OpenClaw-compatible alias of engram_get (content tier). Same backend.
|
|
645
|
+
Input: { id }
|
|
646
|
+
Side effects: none.
|
|
647
|
+
Returns: { id, title, content, metadata: { importance, truthScore, reinforcementCount, tags, kind }, relatedIds }.
|
|
648
|
+
Invariant: relatedIds derived from synapses (both directions).`,
|
|
43
649
|
// ===== System prompts (buildProposalPrompt) =====
|
|
44
650
|
"prompt.proposal_prompt": "[co-engram] ${count} memory candidate${plural} pending (topic${plural} seen ≥3 times but not recorded). Use `engram_list_proposals` to view, `engram_accept_proposal` to record, or `engram_dismiss_proposal` to ignore.",
|
|
45
651
|
// ===== Memory section prompts (OpenClaw registerMemoryCapability.promptBuilder) =====
|
|
@@ -48,8 +654,8 @@ export const en = {
|
|
|
48
654
|
"prompt.memory.when_to_list": 'When to call engram_list (listing scenario): user asks "what memories do I have / list all memories / show my memory store / how many memories" — use the engram_list tool (paginated + filtered), NOT memory_search. memory_search ranks by keyword relevance; listing everything needs engram_list. Optional filters: domainTags, kind (fact/pattern/procedure/observation), status (active/archived).',
|
|
49
655
|
"prompt.memory.when_not_to_search": "When NOT to call: general knowledge questions, pure code problems unrelated to team context, simple greetings. Avoid redundant searches for topics already answered in this conversation.",
|
|
50
656
|
"prompt.memory.reading_results": "Reading results: each memory has a truthScore (0-1). Treat memories with truthScore < 0.4 cautiously — consider calling close_learning_loop after verification. Cite memories by engram ID (e.g. [engram_abc123]) when the user benefits from verifying the source.",
|
|
51
|
-
"prompt.memory.writing": 'When creating/updating memories (engram_create / engram_update): leave createdBy blank to let the system auto-resolve to git user.name
|
|
52
|
-
"prompt.memory.when_to_reinforce": "When to call engram_reinforce: use your **own judgment** — when a cited memory actually helped complete the task, was adopted into your answer, or successfully guided a decision, call engram_reinforce(id, effectiveness) on it. effectiveness: 1.0=fully useful, 0.7=mostly useful, 0.4=background reference only. Call engram_report_failure when the memory was wrong
|
|
657
|
+
"prompt.memory.writing": 'When creating/updating memories (engram_create / engram_update): leave createdBy blank to let the system auto-resolve to git user.name. **Do NOT fill in tool names or generic words like "claude-code" / "openclaw" / "AIOS" / "assistant" / "system"** — everyone on the team uses Claude Code, so tagging "claude-code" is no author at all and breaks audit log traceability. createdBy marks the *human*, not the *tool*. Only pass createdBy explicitly when the user requests a specific authorship tag (team name, external system name, etc.).',
|
|
658
|
+
"prompt.memory.when_to_reinforce": "When to call engram_reinforce: use your **own judgment** — when a cited memory actually helped complete the task, was adopted into your answer, or successfully guided a decision, call engram_reinforce(id, effectiveness) on it. effectiveness: 1.0=fully useful, 0.7=mostly useful, 0.4=background reference only. Call engram_report_failure when the memory was wrong (cumulative negative feedback); call engram_delete when the fact has definitively changed (immediate, irreversible — confirm with the user first by default). co-engram is a self-evolving system: your reinforcement signal is the primary input to importance scoring — call it proactively, do not wait for the user to prompt you. But **be honest**: do not give high scores for tangential references — over-reinforcing lets low-value memories drown out high-value ones.",
|
|
53
659
|
"prompt.memory.proposal_reminder": "Pending proposals: ${count} memory candidate(s) awaiting review. Call engram_list_proposals to inspect, engram_accept_proposal to record, or engram_dismiss_proposal to suppress.",
|
|
54
660
|
"prompt.memory.frequent_topics": "Frequent topics in this team-memory: ${tags}. These are domains where memory_search is most likely to return useful context.",
|
|
55
661
|
"prompt.memory.missed_topics": "Recently missed topics (consider searching proactively): ${topics}. Past turns suggest these should have triggered memory_search but did not.",
|
|
@@ -65,11 +671,101 @@ export const en = {
|
|
|
65
671
|
"viewer.tab.trash": "Trash",
|
|
66
672
|
"viewer.tab.config": "Config",
|
|
67
673
|
"viewer.tab.help": "Help",
|
|
68
|
-
"viewer.tab.merges": "Merges",
|
|
674
|
+
"viewer.tab.merges": "Team Memory Merges",
|
|
675
|
+
"viewer.tab.health": "Health",
|
|
676
|
+
"viewer.tab.stats.tip": "Memory repository overview: engram/synapse counts, kind & status distributions, top contributors, popular tags",
|
|
677
|
+
"viewer.tab.engrams.tip": "Browse and search all memory engrams (card view or directory view grouped by domain/kind)",
|
|
678
|
+
"viewer.tab.graph.tip": "Memory synapse visualization; filter and color by family (structural/causal/evidential/temporal/modulatory) and kind",
|
|
679
|
+
"viewer.tab.proposals.tip": "Candidate memories implicitly captured but not yet approved; accept to promote to a real engram, dismiss to discard",
|
|
680
|
+
"viewer.tab.merges.tip": "Team memory merges: deduplication of similar memories and the 3-phase resolution workflow for contradicts synapses",
|
|
681
|
+
"viewer.tab.audit.tip": "Memory change timeline: create/update/delete/reinforce/contradiction-resolution history",
|
|
682
|
+
"viewer.tab.trash.tip": "Soft-deleted engrams and synapses; restore or permanently purge",
|
|
683
|
+
"viewer.tab.health.tip": "Memory repository consistency check: dangling synapse references, orphan files, index drift; supports self-healing",
|
|
684
|
+
"viewer.tab.config.tip": "Configuration: dataRoot, port, language, maintenance schedule (decay/consolidation/REM cycles)",
|
|
685
|
+
"viewer.tab.help.tip": "Usage guide: concept glossary, ports and dataRoot, Claude Code and OpenClaw dual-host notes",
|
|
686
|
+
// Engram visibility badges / filters / tips
|
|
687
|
+
"viewer.engram.visibilityBadge.private": "Private",
|
|
688
|
+
"viewer.engram.visibilityBadge.public": "Public",
|
|
689
|
+
"viewer.engram.visibilityBadge.team": "Team",
|
|
690
|
+
"viewer.engram.visibilityBadge.restricted": "Restricted",
|
|
691
|
+
"viewer.engram.filter.visibility": "Visibility",
|
|
692
|
+
"viewer.engram.filter.allVisibilities": "All",
|
|
693
|
+
"viewer.engram.filter.team": "Team-visible",
|
|
694
|
+
"viewer.engram.filter.private": "Private only",
|
|
695
|
+
"tip.engram.gitIsolation": "Private engrams (🔒) are isolated via .gitignore and never enter the team git repo; local agents can still index/search them.",
|
|
696
|
+
"tip.engram.gitIsolation.teamScope": "Public / Team / Restricted engrams all enter the team git repo; this option shows all three.",
|
|
697
|
+
"tip.engram.visibilityEdit": "Changing visibility triggers file path migration (public/team/restricted → <domainTags>/, private → private/<domainTags>/); fails on path conflict, original file untouched.",
|
|
698
|
+
"viewer.health.title": "Warehouse Health",
|
|
699
|
+
"viewer.health.subtitle": "One-glance diagnostic — surfaces silent failures before they bite.",
|
|
700
|
+
"viewer.health.overall": "Overall",
|
|
701
|
+
"viewer.health.generatedAt": "Generated",
|
|
702
|
+
"viewer.health.dataRoot": "Data Root",
|
|
703
|
+
"viewer.health.checks": "Checks",
|
|
704
|
+
"viewer.health.refresh": "Refresh",
|
|
705
|
+
"viewer.health.empty": "No data root configured. Run `co-engram init` to create a warehouse.",
|
|
706
|
+
"viewer.health.badge.ok": "OK",
|
|
707
|
+
"viewer.health.badge.warn": "WARN",
|
|
708
|
+
"viewer.health.badge.error": "ERROR",
|
|
709
|
+
"viewer.health.badge.info": "INFO",
|
|
710
|
+
"viewer.health.stats.total": "Total engrams",
|
|
711
|
+
"viewer.health.stats.archived": "Archived",
|
|
712
|
+
"viewer.health.stats.forgotten": "Forgotten",
|
|
713
|
+
// Health-tab warn/error meaning (viewer.health.why.<checkId>)
|
|
714
|
+
"viewer.health.why.data_root_missing": "Data root does not exist; co-engram cannot read or write any memory. Every tool call will fail.",
|
|
715
|
+
"viewer.health.why.data_root_not_warehouse": "Directory exists but lacks .co-engram/config.json — not a valid co-engram warehouse. Initialize first.",
|
|
716
|
+
"viewer.health.why.config_unreadable": ".co-engram/config.json failed to parse (JSON syntax error or permission issue). Defaults will take over but persisted config is lost.",
|
|
717
|
+
"viewer.health.why.config_missing_fields": "language or defaultCreatedBy is missing. Missing language falls back to default (may not match your team's primary language); missing defaultCreatedBy means new memories cannot be attributed to a creator, breaking team attribution and contributor stats.",
|
|
718
|
+
"viewer.health.why.index_missing": "Index files (engram-index.json / digest.jsonl / graph.json) are retrieval accelerators. Missing files slow the first query (full-scan rebuild) but do not affect data integrity.",
|
|
719
|
+
"viewer.health.why.proposals_pending_high": "More than 5 pending proposals. The proposal engine generates candidates in the background; leaving them unreviewed turns them into noise that buries genuinely valuable team memories.",
|
|
720
|
+
"viewer.health.why.git_not_repo": "dataRoot is not a git repository. Memory files have no version history — accidental deletes, wrong writes, or merge conflicts cannot be recovered.",
|
|
721
|
+
"viewer.health.why.git_dirty_high": "More than 10 uncommitted changes. co-engram does not auto-commit; piled-up changes increase loss risk and broaden the merge-conflict surface during team collaboration.",
|
|
722
|
+
"viewer.health.why.merge_driver_missing": "Git merge driver is not configured. When teammates merge branches, engram frontmatter + derived sections cause text conflicts that must be resolved by hand — easy to lose content.",
|
|
723
|
+
// Health-tab fix guidance (viewer.health.fix.<checkId>.description)
|
|
724
|
+
"viewer.health.fix.data_root_missing.description": "Create the directory and initialize the warehouse:",
|
|
725
|
+
"viewer.health.fix.data_root_not_warehouse.description": "Initialize a co-engram warehouse at the current path:",
|
|
726
|
+
"viewer.health.fix.config_unreadable.description": "Re-initialize to regenerate a valid config.json:",
|
|
727
|
+
"viewer.health.fix.config_missing_fields.description": "Set the missing config fields:",
|
|
728
|
+
"viewer.health.fix.index_missing.description": "Run a self-healing scan to rebuild indexes (or ignore — next tool call rebuilds them automatically):",
|
|
729
|
+
"viewer.health.fix.proposals_pending_high.description": "List pending proposals and review each (accept to persist / dismiss to reject):",
|
|
730
|
+
"viewer.health.fix.git_not_repo.description": "Initialize a git repository for version history:",
|
|
731
|
+
"viewer.health.fix.git_dirty_high.description": "Commit all engram changes in one click, or copy the command to run manually:",
|
|
732
|
+
"viewer.health.fix.merge_driver_missing.description": "Auto-configure the git merge driver (idempotent):",
|
|
733
|
+
// Health-tab UI assets (expand/collapse, copy command, call tool, doctor card)
|
|
734
|
+
"viewer.health.check.why": "Why",
|
|
735
|
+
"viewer.health.check.howToFix": "How to fix",
|
|
736
|
+
"viewer.health.check.copyCommand": "Copy command",
|
|
737
|
+
"viewer.health.check.commandCopied": "Copied",
|
|
738
|
+
"viewer.health.check.orCallTool": "Or call tool",
|
|
739
|
+
"viewer.health.check.commitNow": "Commit now",
|
|
740
|
+
"viewer.health.check.commitMessagePrompt": "Enter a commit message (editable)",
|
|
741
|
+
"viewer.health.check.commitDefaultMessage": "chore(memory): sync engram updates",
|
|
742
|
+
"viewer.health.check.commitSuccess": "Committed {files} file(s) · {branch}@{hash}",
|
|
743
|
+
"viewer.health.check.commitNothing": "Working tree is clean, nothing to commit.",
|
|
744
|
+
"viewer.health.check.commitFailed": "Commit failed: {error}",
|
|
745
|
+
"viewer.health.check.expand": "Show details",
|
|
746
|
+
"viewer.health.check.collapse": "Collapse",
|
|
747
|
+
"viewer.health.doctor.title": "Self-healing suggestions",
|
|
748
|
+
"viewer.health.doctor.subtitle": "Structured fix guidance from engram_doctor (for deeper diagnostics)",
|
|
749
|
+
"viewer.health.doctor.autoFixed": "Auto-fixed",
|
|
750
|
+
"viewer.health.doctor.pendingReview": "Pending manual review",
|
|
751
|
+
"viewer.health.doctor.empty": "Scan passed — no issues.",
|
|
752
|
+
"viewer.health.doctor.runScan": "Run doctor scan",
|
|
753
|
+
"viewer.health.doctor.loading": "Scanning...",
|
|
754
|
+
"viewer.health.doctor.nextAction": "Suggested next step",
|
|
755
|
+
"viewer.health.doctor.noPending": "No issues pending manual review.",
|
|
756
|
+
"viewer.health.doctor.fixKind.index_rebuilt": "Rebuilt derived index",
|
|
757
|
+
"viewer.health.doctor.fixKind.merge_driver_installed": "Configured git merge driver",
|
|
758
|
+
"viewer.health.doctor.fixKind.moved_file": "Updated file path",
|
|
759
|
+
"viewer.health.doctor.fixKind.title_changed": "Renamed to match new title",
|
|
760
|
+
"viewer.health.doctor.fixKind.missing_file": "Cleared stale index entry",
|
|
761
|
+
"viewer.health.doctor.fixKind.obsidian_view_stale": "Synced Obsidian view",
|
|
69
762
|
"viewer.search.placeholder": "Full-text search engrams...",
|
|
70
763
|
"viewer.search.button": "Search",
|
|
71
764
|
"viewer.search.clear": "Clear",
|
|
72
765
|
"viewer.search.clear_title": "Clear search results and return to default stats view",
|
|
766
|
+
"viewer.search.searching": "Searching...",
|
|
767
|
+
"viewer.search.noResults": "No matching results",
|
|
768
|
+
"viewer.search.failed": "Search failed: ${err}",
|
|
73
769
|
"viewer.auth.prompt": "This viewer requires a token.",
|
|
74
770
|
"viewer.auth.placeholder": "Bearer token",
|
|
75
771
|
"viewer.loading.stats": "Loading stats...",
|
|
@@ -168,6 +864,7 @@ export const en = {
|
|
|
168
864
|
"field.label.sourceType": "Source type:",
|
|
169
865
|
"field.label.verificationStatus": "Verification status:",
|
|
170
866
|
"field.label.decayHalfLife": "Decay half-life:",
|
|
867
|
+
"field.label.visibility": "Visibility:",
|
|
171
868
|
// Section titles (section.<name>)
|
|
172
869
|
"section.content": "Content",
|
|
173
870
|
"section.stats": "Stats",
|
|
@@ -184,6 +881,10 @@ export const en = {
|
|
|
184
881
|
"common.never": "Never",
|
|
185
882
|
"common.unknown": "Unknown",
|
|
186
883
|
"common.totalCount": "${n} total",
|
|
884
|
+
// Error messages (error.<name>) — user-visible error prefix and message templates
|
|
885
|
+
"error.prefix": "Error",
|
|
886
|
+
"error.uri_missing_id": "URI missing {id} variable",
|
|
887
|
+
"error.engram_not_found": "engram \"${id}\" not found",
|
|
187
888
|
// Decay visualization (decay.<name>)
|
|
188
889
|
"decay.daysToNext": "${days} days to next downgrade",
|
|
189
890
|
"decay.forgotten": "Forgotten",
|
|
@@ -208,5 +909,534 @@ export const en = {
|
|
|
208
909
|
"engrams.empty": "No matching memories",
|
|
209
910
|
"engrams.retrievalsCount": "Retrievals ${n}",
|
|
210
911
|
"engrams.untagged": "Untagged",
|
|
912
|
+
// ===== Extended enums (replacing viewer's CO_ENGRAM_LABELS) =====
|
|
913
|
+
"enum.status.dormant": "Dormant",
|
|
914
|
+
"enum.visibility.public": "Public",
|
|
915
|
+
"enum.visibility.team": "Team",
|
|
916
|
+
"enum.visibility.private": "Private",
|
|
917
|
+
"enum.visibility.restricted": "Restricted",
|
|
918
|
+
"enum.family.structural": "Structural",
|
|
919
|
+
"enum.family.causal": "Causal",
|
|
920
|
+
"enum.family.evidential": "Evidential",
|
|
921
|
+
"enum.family.temporal": "Temporal",
|
|
922
|
+
"enum.family.modulatory": "Modulatory",
|
|
923
|
+
"enum.synapseKind.extends": "extends",
|
|
924
|
+
"enum.synapseKind.part_of": "part of",
|
|
925
|
+
"enum.synapseKind.similar_to": "similar to",
|
|
926
|
+
"enum.synapseKind.depends_on": "depends on",
|
|
927
|
+
"enum.synapseKind.causes": "causes",
|
|
928
|
+
"enum.synapseKind.follows": "follows",
|
|
929
|
+
"enum.synapseKind.derives_from": "derives from",
|
|
930
|
+
"enum.synapseKind.contradicts": "contradicts",
|
|
931
|
+
"enum.synapseKind.exemplifies": "exemplifies",
|
|
932
|
+
"enum.synapseKind.supersedes": "supersedes",
|
|
933
|
+
"enum.synapseKind.consolidates": "consolidates",
|
|
934
|
+
"enum.synapseKind.contextualizes": "contextualizes",
|
|
935
|
+
"enum.synapseDirection.directional": "Directional",
|
|
936
|
+
"enum.synapseDirection.bidirectional": "Bidirectional",
|
|
937
|
+
"enum.resolution.pending": "Pending",
|
|
938
|
+
"enum.resolution.auto_resolved": "Auto-resolved",
|
|
939
|
+
"enum.resolution.escalated": "Escalated",
|
|
940
|
+
"enum.resolution.contested": "Contested",
|
|
941
|
+
"enum.resolution.resolved": "Resolved",
|
|
942
|
+
// ===== Stats panel (viewer.stats.*) =====
|
|
943
|
+
"viewer.stats.totalEngrams": "Total engrams",
|
|
944
|
+
"viewer.stats.totalSynapses": "Total synapses",
|
|
945
|
+
"viewer.stats.pendingProposals": "Pending proposals",
|
|
946
|
+
"viewer.stats.clickToViewAll": "Click to view all",
|
|
947
|
+
"viewer.stats.clickToViewGraph": "Click to view graph",
|
|
948
|
+
"viewer.stats.clickToHandle": "Click to handle",
|
|
949
|
+
"viewer.stats.kindDistribution": "Engrams · by kind",
|
|
950
|
+
"viewer.stats.statusDistribution": "Engrams · by status",
|
|
951
|
+
"viewer.stats.synapseKindDistribution": "Synapses · by kind",
|
|
952
|
+
"viewer.stats.contributorRanking": "Contributor ranking · engrams + synapses",
|
|
953
|
+
"viewer.stats.topTags": "Top domain tags",
|
|
954
|
+
"viewer.stats.contributorCol": "Contributor",
|
|
955
|
+
"viewer.stats.engramCol": "Engrams",
|
|
956
|
+
"viewer.stats.synapseCol": "Synapses",
|
|
957
|
+
"viewer.stats.totalCol": "Total",
|
|
958
|
+
"viewer.stats.empty": "No data yet",
|
|
959
|
+
"viewer.stats.synapsesEmpty": "No synapses yet",
|
|
960
|
+
// ===== Proposals panel (viewer.proposals.*) =====
|
|
961
|
+
"viewer.proposals.disabledHint": "Proposal engine is disabled. Turn it on in the config panel, or set proposals.enabled=true in config.json.",
|
|
962
|
+
"viewer.proposals.status.pending": "Pending",
|
|
963
|
+
"viewer.proposals.status.accepted": "Accepted",
|
|
964
|
+
"viewer.proposals.status.dismissed": "Dismissed",
|
|
965
|
+
"viewer.proposals.status.all": "All",
|
|
966
|
+
"viewer.proposals.empty": "No ${status} proposals",
|
|
967
|
+
"viewer.proposals.convertedTo": "Converted to",
|
|
968
|
+
"viewer.proposals.dismissedReason": "Dismissed",
|
|
969
|
+
"viewer.proposals.detailTitle": "Proposal detail",
|
|
970
|
+
"viewer.proposals.titleLabel": "Title",
|
|
971
|
+
"viewer.proposals.titleLabelReadonly": "Title (read-only)",
|
|
972
|
+
"viewer.proposals.kindLabel": "Kind",
|
|
973
|
+
"viewer.proposals.kindLabelReadonly": "Kind (read-only)",
|
|
974
|
+
"viewer.proposals.tagsLabel": "Domain tags (comma-separated)",
|
|
975
|
+
"viewer.proposals.tagsLabelReadonly": "Domain tags (comma-separated, read-only)",
|
|
976
|
+
"viewer.proposals.tagsPlaceholder": "e.g. frontend, dark-mode, css",
|
|
977
|
+
"viewer.proposals.contentLabel": "Content (becomes engram body)",
|
|
978
|
+
"viewer.proposals.contentLabelReadonly": "Content (read-only)",
|
|
979
|
+
"viewer.proposals.samples": "Sample quotes (${n} cumulative)",
|
|
980
|
+
"viewer.proposals.noSamples": "(no samples)",
|
|
981
|
+
"viewer.proposals.firstSeen": "First seen:",
|
|
982
|
+
"viewer.proposals.lastSeen": "Last seen:",
|
|
983
|
+
"viewer.proposals.currentStatus": "Current proposal status:",
|
|
984
|
+
"viewer.proposals.createdEngram": "Created engram:",
|
|
985
|
+
"viewer.proposals.dismissedUntil": "Dismissed until:",
|
|
986
|
+
"viewer.proposals.dismissBtn": "Dismiss",
|
|
987
|
+
"viewer.proposals.acceptBtn": "Accept & save",
|
|
988
|
+
"viewer.proposals.notFound": "Proposal not found: ${id}",
|
|
989
|
+
"viewer.proposals.titleRequired": "Please fill in the title",
|
|
990
|
+
"viewer.proposals.contentRequired": "Please fill in the content",
|
|
991
|
+
"viewer.proposals.acceptedToast": "✓ Accepted",
|
|
992
|
+
"viewer.proposals.createdEngramToast": "Created engram: ${id}",
|
|
993
|
+
"viewer.proposals.acceptFailed": "Accept failed: ${err}",
|
|
994
|
+
"viewer.proposals.dismissReasonPrompt": "Dismiss reason (optional):",
|
|
995
|
+
"viewer.proposals.dismissDaysPrompt": "Dismiss N days (default 30):",
|
|
996
|
+
"viewer.proposals.dismissFailed": "Dismiss failed: ${err}",
|
|
997
|
+
// ===== Audit panel (viewer.audit.*) =====
|
|
998
|
+
"viewer.audit.filter.actor": "Actor",
|
|
999
|
+
"viewer.audit.filter.category": "Category",
|
|
1000
|
+
"viewer.audit.filter.engramPlaceholder": "Filter by engram id...",
|
|
1001
|
+
"viewer.audit.filter.actionChipTitle": "Click to clear action filter",
|
|
1002
|
+
"viewer.audit.actorAll": "All",
|
|
1003
|
+
"viewer.audit.actorUser": "User",
|
|
1004
|
+
"viewer.audit.actorLlm": "LLM",
|
|
1005
|
+
"viewer.audit.actorSystem": "System",
|
|
1006
|
+
"viewer.audit.catAll": "All",
|
|
1007
|
+
"viewer.audit.catState": "State changes",
|
|
1008
|
+
"viewer.audit.catEffective": "Effectiveness",
|
|
1009
|
+
"viewer.audit.catContradicted": "Contradictions",
|
|
1010
|
+
"viewer.audit.catProposal": "Proposals",
|
|
1011
|
+
"viewer.audit.empty": "No matching events",
|
|
1012
|
+
"viewer.audit.disabledHint": "Audit log is disabled.",
|
|
1013
|
+
"viewer.audit.kpi.total": "Total",
|
|
1014
|
+
"viewer.audit.kpi.state": "State changes",
|
|
1015
|
+
"viewer.audit.kpi.effective": "Effectiveness signals",
|
|
1016
|
+
"viewer.audit.kpi.contradicted": "Contradictions",
|
|
1017
|
+
"viewer.audit.kpi.proposal": "Proposals",
|
|
1018
|
+
"viewer.audit.synapseChip": "synapse",
|
|
1019
|
+
"viewer.audit.targetOpenEngram": "📄 Open engram",
|
|
1020
|
+
"viewer.audit.targetOpenSourceEngram": "🌐 Open source engram",
|
|
1021
|
+
"viewer.audit.targetGone": "Target no longer exists: ${id}",
|
|
1022
|
+
"viewer.audit.targetDeleted": "(deleted)",
|
|
1023
|
+
"viewer.audit.filterActionHint": " — click to show only this action",
|
|
1024
|
+
"viewer.audit.metaEmpty": "—",
|
|
1025
|
+
"viewer.audit.noFieldChanges": "(no fields actually changed)",
|
|
1026
|
+
"viewer.audit.actorTip.user": "User: events triggered manually",
|
|
1027
|
+
"viewer.audit.actorTip.llm": "LLM: events triggered by a language-model agent",
|
|
1028
|
+
"viewer.audit.actorTip.system": "System: events triggered by background maintenance/self-healing",
|
|
1029
|
+
"viewer.audit.actionTip.create": "create: create a new engram",
|
|
1030
|
+
"viewer.audit.actionTip.update": "update: modify fields of an existing engram",
|
|
1031
|
+
"viewer.audit.actionTip.update_lifecycle": "update_lifecycle: lifecycle transition (archived/forgotten)",
|
|
1032
|
+
"viewer.audit.actionTip.reinforce": "reinforce: potentiation (LTP) — retrieval effective, loop succeeded",
|
|
1033
|
+
"viewer.audit.actionTip.report_failure": "report_failure: negative feedback (LTD) — retrieval inaccurate, loop failed",
|
|
1034
|
+
"viewer.audit.actionTip.forget": "forget: marked as forgotten",
|
|
1035
|
+
"viewer.audit.actionTip.restore": "restore: restored from forgotten/archived back to active",
|
|
1036
|
+
"viewer.audit.actionTip.sweep_to_trash": "sweep_to_trash: forgotten after 30 days, file moved to .trash/",
|
|
1037
|
+
"viewer.audit.actionTip.restore_from_trash": "restore_from_trash: physically restored from .trash/",
|
|
1038
|
+
"viewer.audit.actionTip.purge": "purge: hard delete (content + meta + associated synapses)",
|
|
1039
|
+
"viewer.audit.actionTip.retrieve_hit": "retrieve_hit: search hit",
|
|
1040
|
+
"viewer.audit.actionTip.retrieve_effective": "retrieve_effective: hit and actually adopted",
|
|
1041
|
+
"viewer.audit.actionTip.retrieve_inconclusive": "retrieve_inconclusive: hit but unsure if effective",
|
|
1042
|
+
"viewer.audit.actionTip.contradicted": "contradicted: conflict with other engrams detected, entering resolution",
|
|
1043
|
+
"viewer.audit.actionTip.propose": "propose: candidate memory captured",
|
|
1044
|
+
"viewer.audit.actionTip.accept": "accept: candidate adopted, converted to a formal engram",
|
|
1045
|
+
"viewer.audit.actionTip.dismiss": "dismiss: candidate rejected",
|
|
1046
|
+
// ===== Trash panel (viewer.trash.*) =====
|
|
1047
|
+
"viewer.trash.empty": "Trash is empty",
|
|
1048
|
+
"viewer.trash.titleCount": "Trash · ${n} items",
|
|
1049
|
+
"viewer.trash.partitionLabel": "Partition:",
|
|
1050
|
+
"viewer.trash.all": "All",
|
|
1051
|
+
"viewer.trash.purgeAllBtn": "Purge all permanently",
|
|
1052
|
+
"viewer.trash.colId": "ID",
|
|
1053
|
+
"viewer.trash.colPartition": "Partition",
|
|
1054
|
+
"viewer.trash.colTrashedAt": "Trashed at",
|
|
1055
|
+
"viewer.trash.previewBtn": "Preview",
|
|
1056
|
+
"viewer.trash.restoreBtn": "Restore",
|
|
1057
|
+
"viewer.trash.previewTitle": "Trash preview",
|
|
1058
|
+
"viewer.trash.previewHint": "This memory has been removed from the main index. \"Restore\" it first to edit or recall it again.",
|
|
1059
|
+
"viewer.trash.partitionField": "Partition:",
|
|
1060
|
+
"viewer.trash.trashedAtField": "Trashed at:",
|
|
1061
|
+
"viewer.trash.creatorField": "Creator:",
|
|
1062
|
+
"viewer.trash.contentSection": "Content",
|
|
1063
|
+
"viewer.trash.restoreToMainBtn": "Restore to main index",
|
|
1064
|
+
"viewer.trash.closeBtn": "Close",
|
|
1065
|
+
"viewer.trash.restoreConfirm": "Restore ${id} to main index?",
|
|
1066
|
+
"viewer.trash.restoreFailed": "Restore failed: ${err}",
|
|
1067
|
+
"viewer.trash.purgeAllScopeAll": "all items (across all partitions)",
|
|
1068
|
+
"viewer.trash.purgeAllScopePartition": "partition ${p}",
|
|
1069
|
+
"viewer.trash.prescanFailed": "Pre-scan failed: ${err}",
|
|
1070
|
+
"viewer.trash.purgeEmpty": "Nothing to purge in the current scope",
|
|
1071
|
+
"viewer.trash.purgeConfirm1": "About to permanently delete ${n} memories in ${scope}.\nThis is irreversible (physical unlink). Even with a git repo, recovery is only possible from historical commits.\n\nContinue?",
|
|
1072
|
+
"viewer.trash.purgeConfirm2": "Second confirmation: really purge all ${n} items in ${scope}?",
|
|
1073
|
+
"viewer.trash.purgeDone": "Permanently deleted ${n} memories.",
|
|
1074
|
+
"viewer.trash.purgeFailed": "Purge failed: ${err}",
|
|
1075
|
+
// ===== Merges panel (viewer.merges.*) =====
|
|
1076
|
+
"viewer.merges.loading": "Loading merge stats",
|
|
1077
|
+
"viewer.merges.auditDisabledHint": "Audit log is disabled; no merge data available.",
|
|
1078
|
+
"viewer.merges.title": "Merge stats · last ${days} days",
|
|
1079
|
+
"viewer.merges.kpi.totalMerges": "Total merges",
|
|
1080
|
+
"viewer.merges.kpi.autoResolved": "Auto-resolved",
|
|
1081
|
+
"viewer.merges.kpi.escalatedToMarkers": "Escalated to conflict markers",
|
|
1082
|
+
"viewer.merges.kpi.backupFailures": "Backup failures",
|
|
1083
|
+
"viewer.merges.llmSection": "LLM arbitration",
|
|
1084
|
+
"viewer.merges.llm.totalInvocations": "Total invocations",
|
|
1085
|
+
"viewer.merges.llm.arbitrated": "Arbitrated",
|
|
1086
|
+
"viewer.merges.llm.escalated": "Escalated",
|
|
1087
|
+
"viewer.merges.llm.failed": "Failed",
|
|
1088
|
+
"viewer.merges.llm.successRate": "Success rate",
|
|
1089
|
+
"viewer.merges.byStrategy": "Strategy distribution (Top 8)",
|
|
1090
|
+
"viewer.merges.hotPaths": "Conflict hot paths (Top 8)",
|
|
1091
|
+
"viewer.merges.byDay": "Daily merges (trend)",
|
|
1092
|
+
"viewer.merges.anomalyBanner": "Anomalies · ${n} alerts",
|
|
1093
|
+
// ===== Graph toolbar (viewer.graph.*) =====
|
|
1094
|
+
"viewer.graph.loading": "Loading graph...",
|
|
1095
|
+
"viewer.graph.reloading": "Reloading graph",
|
|
1096
|
+
"viewer.graph.fitBtn": "Fit",
|
|
1097
|
+
"viewer.graph.physicsBtn": "Physics",
|
|
1098
|
+
"viewer.graph.resetBtn": "Reset filters",
|
|
1099
|
+
"viewer.graph.fitTip": "Fit view: auto-zoom and center so all nodes are visible",
|
|
1100
|
+
"viewer.graph.physicsTip": "Physics engine: when on, nodes auto-layout via spring/repulsion model (uses CPU until stable); when off, current positions are frozen — useful for browsing large graphs after they stabilize",
|
|
1101
|
+
"viewer.graph.resetTip": "Reset filters: restore all kind/family checkboxes and re-fit the view",
|
|
1102
|
+
"viewer.graph.synapseGroupTitle": "Synapse kinds · by family",
|
|
1103
|
+
"viewer.graph.engramsGroupTitle": "Engram kinds",
|
|
1104
|
+
"viewer.graph.family.structural": "Structural",
|
|
1105
|
+
"viewer.graph.family.causal": "Causal",
|
|
1106
|
+
"viewer.graph.family.evidential": "Evidential",
|
|
1107
|
+
"viewer.graph.family.temporal": "Temporal",
|
|
1108
|
+
"viewer.graph.family.modulatory": "Modulatory",
|
|
1109
|
+
"viewer.graph.familyDesc.structural": "Composition / extension relationships",
|
|
1110
|
+
"viewer.graph.familyDesc.causal": "Trigger / dependency relationships",
|
|
1111
|
+
"viewer.graph.familyDesc.evidential": "Source / conflict relationships",
|
|
1112
|
+
"viewer.graph.familyDesc.temporal": "Version / evolution relationships",
|
|
1113
|
+
"viewer.graph.familyDesc.modulatory": "Contextual relationships",
|
|
1114
|
+
"viewer.graph.kindDesc.fact": "A confirmed, independently verifiable objective statement",
|
|
1115
|
+
"viewer.graph.kindDesc.observation": "A one-off perceived fact, not yet distilled into a stable conclusion",
|
|
1116
|
+
"viewer.graph.kindDesc.pattern": "A rule归纳duced from repeated observations; can predict future behavior",
|
|
1117
|
+
"viewer.graph.kindDesc.procedure": "A sequence of steps that reproduces a result when executed",
|
|
1118
|
+
"viewer.graph.kindDesc.hypothesis": "An unverified guess; usable as a working hypothesis until counter-examples appear",
|
|
1119
|
+
"viewer.graph.synapseDesc.extends": "A extends B: inherits B's semantics and adds new dimensions",
|
|
1120
|
+
"viewer.graph.synapseDesc.part_of": "A is part of B (B has-a A)",
|
|
1121
|
+
"viewer.graph.synapseDesc.similar_to": "A is semantically close to B; interchangeable or mutually supportive",
|
|
1122
|
+
"viewer.graph.synapseDesc.depends_on": "A depends on B (B is a precondition of A)",
|
|
1123
|
+
"viewer.graph.synapseDesc.causes": "A triggers or produces B (positive causation)",
|
|
1124
|
+
"viewer.graph.synapseDesc.follows": "A follows B temporally/logically (no strong causation)",
|
|
1125
|
+
"viewer.graph.synapseDesc.derives_from": "A is derived from B (B is the basis)",
|
|
1126
|
+
"viewer.graph.synapseDesc.contradicts": "A conflicts with B; enters resolution flow",
|
|
1127
|
+
"viewer.graph.synapseDesc.exemplifies": "A is a concrete instance/sample of B",
|
|
1128
|
+
"viewer.graph.synapseDesc.supersedes": "A replaces outdated B (version transition)",
|
|
1129
|
+
"viewer.graph.synapseDesc.consolidates": "A merges/refines the content of B",
|
|
1130
|
+
"viewer.graph.synapseDesc.contextualizes": "A provides context for B (neither causal nor evidential)",
|
|
1131
|
+
// ===== Detail panel / drawer (viewer.detail.*) =====
|
|
1132
|
+
"viewer.detail.editModeHint": "Edit mode · click \"Save\" to submit changes",
|
|
1133
|
+
"viewer.detail.editEngramTitle": "Edit engram",
|
|
1134
|
+
"viewer.detail.editSynapseTitle": "Edit synapse",
|
|
1135
|
+
"viewer.detail.detailViewTitle": "Detail view",
|
|
1136
|
+
"viewer.detail.synapseDetailTitle": "Synapse detail",
|
|
1137
|
+
"viewer.detail.kindChangeHint": "Note: changing \"kind\" or \"direction\" re-computes the synapse ID (ID derives from from+to+kind+direction). The old ID becomes invalid, but all metadata (weight / evidence / creator) migrates to the new ID.",
|
|
1138
|
+
"viewer.detail.titleLabel": "Title",
|
|
1139
|
+
"viewer.detail.kindLabel": "Kind",
|
|
1140
|
+
"viewer.detail.importanceLabel": "Importance (0-1, drag the slider)",
|
|
1141
|
+
"viewer.detail.confidenceLabel": "Confidence (0-1, drag the slider)",
|
|
1142
|
+
"viewer.detail.tagsLabel": "Domain tags (comma-separated)",
|
|
1143
|
+
"viewer.detail.ctxTagsLabel": "Context tags (comma-separated)",
|
|
1144
|
+
"viewer.detail.visibilityLabel": "Visibility",
|
|
1145
|
+
"viewer.detail.contentLabel": "Content (Markdown)",
|
|
1146
|
+
"viewer.detail.weightLabel": "Weight (0-1, drag the slider)",
|
|
1147
|
+
"viewer.detail.evidenceDescLabel": "Add evidence description (optional, leave blank to skip)",
|
|
1148
|
+
"viewer.detail.evidenceSourceLabel": "Evidence source (optional)",
|
|
1149
|
+
"viewer.detail.evidenceDescPlaceholder": "e.g. verified via codegraph...",
|
|
1150
|
+
"viewer.detail.evidenceSourcePlaceholder": "e.g. manual / ci / docs",
|
|
1151
|
+
"viewer.detail.weightField": "Weight:",
|
|
1152
|
+
"viewer.detail.directionField": "Direction:",
|
|
1153
|
+
"viewer.detail.familyField": "Family:",
|
|
1154
|
+
"viewer.detail.resolutionField": "Resolution:",
|
|
1155
|
+
"viewer.detail.sourceToTargetField": "Source → Target:",
|
|
1156
|
+
"viewer.detail.evidenceCount": "Evidence (${n})",
|
|
1157
|
+
"viewer.detail.noEvidence": "No evidence",
|
|
1158
|
+
"viewer.detail.confidenceEvidence": "confidence ${n}",
|
|
1159
|
+
"viewer.detail.dim.personal": "Personal:",
|
|
1160
|
+
"viewer.detail.dim.team": "Team:",
|
|
1161
|
+
"viewer.detail.dim.project": "Project:",
|
|
1162
|
+
"viewer.detail.dim.network": "Network:",
|
|
1163
|
+
"viewer.detail.dim.temporal": "Temporal:",
|
|
1164
|
+
"viewer.detail.dim.composite": "Composite:",
|
|
1165
|
+
"viewer.scoreBand.high": "High",
|
|
1166
|
+
"viewer.scoreBand.medium": "Medium",
|
|
1167
|
+
"viewer.scoreBand.low": "Low",
|
|
1168
|
+
"viewer.detail.searching": "Searching...",
|
|
1169
|
+
"viewer.detail.searchNoMatch": "No matches",
|
|
1170
|
+
"viewer.detail.searchFailed": "Search failed: ${err}",
|
|
1171
|
+
// ===== Config panel (viewer.config.*) =====
|
|
1172
|
+
"viewer.config.sectionPersisted": "Configuration (restart required)",
|
|
1173
|
+
"viewer.config.sectionRuntime": "Runtime toggles (next launch)",
|
|
1174
|
+
"viewer.config.sectionMetadata": "Repository info",
|
|
1175
|
+
"viewer.config.pendingBanner": "↻ ${fields} saved — restart ${host} to take effect",
|
|
1176
|
+
"viewer.config.runtimeHintPrefix": "(current: ",
|
|
1177
|
+
"viewer.config.runtimeHintSuffix": ")",
|
|
1178
|
+
"viewer.config.runtimeNotSet": "(not set)",
|
|
1179
|
+
"viewer.config.field.language": "Language",
|
|
1180
|
+
"viewer.config.field.language.desc": "Language used for UI / tool descriptions / prompts",
|
|
1181
|
+
"viewer.config.field.defaultCreatedBy": "Default creator",
|
|
1182
|
+
"viewer.config.field.defaultCreatedBy.desc": "Default createdBy for new engrams; falls back to git identity if empty",
|
|
1183
|
+
"viewer.config.field.defaultCreatedBy.placeholder": "(leave blank to use git author)",
|
|
1184
|
+
"viewer.config.field.toolsProfile": "Tools profile",
|
|
1185
|
+
"viewer.config.field.toolsProfile.desc": "Tool count visible to the LLM: minimal / standard / full",
|
|
1186
|
+
"viewer.config.field.dataRoot": "Data root",
|
|
1187
|
+
"viewer.config.field.dataRoot.desc": "On-disk location of engrams / synapses / audit. To change it, run <code>co-engram config data-root <new-path></code> in a terminal.",
|
|
1188
|
+
"viewer.config.field.configVersion": "Config version",
|
|
1189
|
+
"viewer.config.field.createdAt": "Created at",
|
|
1190
|
+
"viewer.config.field.updatedAt": "Last updated",
|
|
1191
|
+
"viewer.config.runtimeSection.hint": "These toggles persist the \"desired state at next launch\" to config.json. The currently running instance is unaffected — new values take effect only after restarting ${host}.",
|
|
1192
|
+
"viewer.config.runtimeSection.openclawExtra": " In OpenClaw mode, run <code>openclaw gateway restart</code> in a terminal.",
|
|
1193
|
+
"viewer.config.runtime.audit": "Audit log",
|
|
1194
|
+
"viewer.config.runtime.audit.desc": "Records all API / tool invocation events",
|
|
1195
|
+
"viewer.config.runtime.proposals": "Proposal engine",
|
|
1196
|
+
"viewer.config.runtime.proposals.desc": "Implicitly captures memory candidates for review",
|
|
1197
|
+
"viewer.config.runtime.maintenance": "Maintenance engine",
|
|
1198
|
+
"viewer.config.runtime.maintenance.desc": "Background light/deep/rem three-stage maintenance",
|
|
1199
|
+
"viewer.config.runtime.search": "Searcher",
|
|
1200
|
+
"viewer.config.runtime.search.desc": "Semantic + keyword retrieval",
|
|
1201
|
+
"viewer.config.runtime.viewer": "Web viewer",
|
|
1202
|
+
"viewer.config.runtime.viewer.desc": "HTTP server hosting this page (cannot be turned off, or this UI disconnects)",
|
|
1203
|
+
"viewer.config.dataRootReadOnly": "Data root is now a single CLI entry point: run <code>co-engram config data-root <path></code> to change it.",
|
|
1204
|
+
"viewer.config.dataRootSave": "Save",
|
|
1205
|
+
"viewer.config.dataRootEditableHint": "Changing the data root requires restarting the host to take effect. Alternatively run <code>co-engram config data-root <path></code> in a terminal.",
|
|
1206
|
+
"viewer.config.dataRootUpdatedRestartRequired": "Data root updated. Restart {host} to apply.",
|
|
1207
|
+
"viewer.config.dataRootUpdateFailed": "Update failed: {error}",
|
|
1208
|
+
"viewer.config.dataRootRejectEmpty": "Path cannot be empty.",
|
|
1209
|
+
"viewer.config.dataRootRejectNonEngram": "Directory is non-empty and not a co-engram warehouse. Pick an empty dir or an existing co-engram warehouse; to force-takeover a non-empty dir, use CLI: <code>co-engram config data-root <path> --force</code>.",
|
|
1210
|
+
"viewer.config.saveBar.reset": "Reset",
|
|
1211
|
+
"viewer.config.saveBar.save": "Save config",
|
|
1212
|
+
"viewer.config.saveSuccess": "✓ Configuration saved.",
|
|
1213
|
+
"viewer.config.saveSuccessWithRestart": "✓ Configuration saved. The following changes require restarting ${host} to take effect:",
|
|
1214
|
+
"viewer.config.restartBtn": "Restart now",
|
|
1215
|
+
"viewer.config.restartConfirmTitle": "Confirm restart of ${host}?",
|
|
1216
|
+
"viewer.config.restartConfirmBody": " • Tools will briefly disconnect (auto-reconnect within seconds)\n • Browser will lose connection; this page auto-refreshes when the service returns\n • Saved configuration and engram data will not be lost",
|
|
1217
|
+
"viewer.config.restartOpenclawHint": "OpenClaw mode does not support auto-restart from the viewer. Run <code>openclaw gateway restart</code> in a terminal.",
|
|
1218
|
+
"viewer.config.restartMask.title": "⟳ Restarting ${host}…",
|
|
1219
|
+
"viewer.config.restartMask.body": "The service is exiting and will be relaunched by ${parent}. This page will auto-refresh once it returns.",
|
|
1220
|
+
"viewer.config.restartTimeout.title": "Restart timed out (30s)",
|
|
1221
|
+
"viewer.config.restartTimeout.body": "Please refresh the page manually; if ${host} is still down, check ${parent} status.",
|
|
1222
|
+
"viewer.config.restartTimeout.refreshBtn": "Refresh manually",
|
|
1223
|
+
"viewer.config.restartBtnTip": "Click to gracefully exit ${host} (exit code 0); the parent process ${parent} will auto-restart it.\n\nImpact:\n • Tools briefly disconnect (auto-reconnect in seconds, no impact on ongoing conversations)\n • Browser disconnects; this page auto-refreshes when the service returns\n • Background tasks (maintenance thread, proposal engine, etc.) restart with the new config\n\nNot lost:\n • Saved configuration (just written to config.json)\n • Existing engram / synapse data (persisted on disk)\n • Current conversation history (held by ${parent}, independent of service restart)",
|
|
1224
|
+
"viewer.config.pendingField.language": "Language",
|
|
1225
|
+
"viewer.config.pendingField.toolsProfile": "Tools profile",
|
|
1226
|
+
"viewer.config.pendingField.defaultCreatedBy": "Default creator",
|
|
1227
|
+
"viewer.config.pendingField.audit": "Audit log",
|
|
1228
|
+
"viewer.config.pendingField.proposals": "Proposal engine",
|
|
1229
|
+
"viewer.config.pendingField.maintenance": "Maintenance engine",
|
|
1230
|
+
// ===== Common strings (viewer.common.*) =====
|
|
1231
|
+
"viewer.common.loading": "Loading...",
|
|
1232
|
+
"viewer.common.loadFailed": "Load failed: ${err}",
|
|
1233
|
+
"viewer.common.empty": "No data yet",
|
|
1234
|
+
"viewer.common.save": "Save",
|
|
1235
|
+
"viewer.common.cancel": "Cancel",
|
|
1236
|
+
"viewer.common.edit": "Edit",
|
|
1237
|
+
"viewer.common.delete": "Delete",
|
|
1238
|
+
"viewer.common.close": "Close",
|
|
1239
|
+
"viewer.common.reset": "Reset",
|
|
1240
|
+
"viewer.common.preview": "Preview",
|
|
1241
|
+
"viewer.common.previewMode": "Preview mode",
|
|
1242
|
+
"viewer.common.editMode": "Edit mode",
|
|
1243
|
+
"viewer.common.enabled": "On",
|
|
1244
|
+
"viewer.common.disabled": "Off",
|
|
1245
|
+
"viewer.common.enabledState": "Enabled",
|
|
1246
|
+
"viewer.common.disabledState": "Disabled",
|
|
1247
|
+
"viewer.common.restartToApply": "Applies after restart",
|
|
1248
|
+
"viewer.common.confirmDeleteTitle": "Confirm delete?",
|
|
1249
|
+
"viewer.common.confirmDeleteEngram": "Delete \"${title}\"?\nThis action is irreversible.",
|
|
1250
|
+
"viewer.common.confirmDeleteSynapse": "Delete this synapse?\nThis action is irreversible.",
|
|
1251
|
+
"viewer.common.saveFailed": "Save failed: ${err}",
|
|
1252
|
+
"viewer.common.deleteFailed": "Delete failed: ${err}",
|
|
1253
|
+
"viewer.common.unknown": "(unknown)",
|
|
1254
|
+
"viewer.common.langZh": "中文",
|
|
1255
|
+
"viewer.common.langEn": "English",
|
|
1256
|
+
// ===== Help panel (viewer.help.*) =====
|
|
1257
|
+
"viewer.help.title": "Co-Engram · Self-evolving team memory",
|
|
1258
|
+
"viewer.help.intro": "Co-Engram distills team conversations, decisions and lessons into <em>engrams</em> and links them with <em>synapses</em> into an evolvable knowledge network. Models recall relevant memories via <code>memory_search</code>, reinforce effective ones with <code>engram_reinforce</code>, and weaken broken ones with <code>engram_report_failure</code> — this closed loop lets high-value memories surface and stale ones decay automatically.",
|
|
1259
|
+
"viewer.help.conceptsTitle": "Core concepts",
|
|
1260
|
+
"viewer.help.conceptEngram": "<strong>Engram</strong>",
|
|
1261
|
+
"viewer.help.conceptEngramDesc": "A structured memory entry with fields like title/content/kind/tags/importance/confidence. 5 kinds: <code>fact</code> <code>observation</code> <code>pattern</code> <code>procedure</code> <code>hypothesis</code>. Hover a field to see its description.",
|
|
1262
|
+
"viewer.help.conceptSynapse": "<strong>Synapse</strong>",
|
|
1263
|
+
"viewer.help.conceptSynapseDesc": "A directed edge between two engrams, grouped into 5 families: <code>structural</code> (extends/part_of/similar_to), <code>causal</code> (depends_on/causes/follows), <code>evidential</code> (derives_from/contradicts/exemplifies), <code>temporal</code> (supersedes/consolidates), <code>modulatory</code> (contextualizes). <code>contradicts</code> enters the resolution flow.",
|
|
1264
|
+
"viewer.help.conceptImportance": "<strong>Importance & confidence</strong>",
|
|
1265
|
+
"viewer.help.conceptImportanceDesc": "Two independent 0-1 numbers. Importance is derived from reinforcement signals + time decay and affects retrieval weight; confidence reflects how trustworthy the memory is (a metacognition score) and is decoupled from importance.",
|
|
1266
|
+
"viewer.help.conceptVector": "<strong>Importance vector (importanceVector)</strong>",
|
|
1267
|
+
"viewer.help.conceptVectorDesc": "Decomposes importance into 5 dimensions: personal/team/project/network/temporal for fine-grained control. If present, engram detail view shows a dedicated section.",
|
|
1268
|
+
"viewer.help.conceptLifecycle": "<strong>Lifecycle</strong>",
|
|
1269
|
+
"viewer.help.conceptLifecycleDesc": "<code>draft → active → archived → forgotten</code>. Forgotten files remain in the repo but are skipped by default retrieval. Maintenance cycles evaluate and transition states automatically.",
|
|
1270
|
+
"viewer.help.rulesTitle": "Reinforcement rules & default parameters",
|
|
1271
|
+
"viewer.help.rulesIntro": "Memory importance evolves with use feedback. Below are the real defaults (see ReinforcementConfig.DEFAULT_CONFIG / DEFAULT_WEIGHTS / DEFAULT_EFFECTIVENESS_WINDOWS / DEFAULT_VERIFICATION_CONFIG in source); override via config.json or the matching config keys.",
|
|
1272
|
+
"viewer.help.ruleLtp": "<strong>LTP (Long-Term Potentiation)</strong>: per effective retrieval (effective=1), importance += <code>ltpGain</code> (default <code>0.02</code>). ~10 effective retrievals raise 0.5 to ~0.7.",
|
|
1273
|
+
"viewer.help.ruleLtd": "<strong>LTD (Long-Term Depression)</strong>: per failed use, importance -= <code>ltdPenalty</code> (default <code>0.03</code>; once cumulative failures exceed <code>failureThreshold</code> (default <code>3</code>), an extra <code>failureEscalation</code> (default <code>1.5</code>) multiplier applies).",
|
|
1274
|
+
"viewer.help.ruleHebbian": "<strong>Hebbian neighbor spread</strong>: when a memory is reinforced, direct neighbors (via synapse) gain <code>ltpGain × hebbianRatio</code> (default <code>hebbianRatio = 0.5</code>); contradicts edges excluded.",
|
|
1275
|
+
"viewer.help.ruleWeights": "<strong>Three-factor retrieval weights</strong>: score = α·relevance + β·recency + γ·importance (defaults α=0.5 / β=0.3 / γ=0.2). recency follows Ebbinghaus half-life <code>0.5^(ageDays / decayHalfLifeDays)</code>.",
|
|
1276
|
+
"viewer.help.ruleWindows": "<strong>Observation window</strong>: opened when an engram is retrieved; reinforce within window → effective (LTP); report failure → failed use (LTD); expiry closes the hit as inconclusive. Default length by kind: observation 6h / fact 24h / pattern 48h / procedure 48h / hypothesis 7d. Multi-kind uses max.",
|
|
1277
|
+
"viewer.help.stateMachineTitle": "Verification state machine (5 levels)",
|
|
1278
|
+
"viewer.help.stateMachineIntro": "Memory credibility: unverified → plausible → probable → verified → refuted. Default upgrade conditions below; downgrade driven by LTD and cumulative failures. Refuted memories are excluded from retrieval by default.",
|
|
1279
|
+
"viewer.help.stateUnverified": "<strong>unverified</strong> (default): new memories start here.",
|
|
1280
|
+
"viewer.help.statePlausible": "<strong>plausible</strong>: at least <code>1</code> evidence (derives_from synapse).",
|
|
1281
|
+
"viewer.help.stateProbable": "<strong>probable</strong>: at least <code>2</code> evidence from ≥2 distinct domainTags.",
|
|
1282
|
+
"viewer.help.stateVerified": "<strong>verified</strong>: at least <code>3</code> evidence, ≥2 domains, and created ≥ <code>7</code> days ago (temporal stability).",
|
|
1283
|
+
"viewer.help.stateRefuted": "<strong>refuted</strong>: marked as the losing side by contradiction_resolve; excluded from retrieval by default.",
|
|
1284
|
+
"viewer.help.tabsTitle": "Tabs",
|
|
1285
|
+
"viewer.help.tabStats": "<strong>Stats</strong> — overview dashboard: distribution by kind/status/family, contributors and top tags. Top search box does full-text retrieval.",
|
|
1286
|
+
"viewer.help.tabEngrams": "<strong>Engrams</strong> — card/list view of all engrams with tag/kind/status filters; click to open detail (edit/delete/show synapses).",
|
|
1287
|
+
"viewer.help.tabGraph": "<strong>Graph</strong> — knowledge-graph visualization. Filter edges by family/kind, nodes by engram kind. Opening an engram detail highlights its neighbors.",
|
|
1288
|
+
"viewer.help.tabProposals": "<strong>Proposals</strong> — candidate-memory approval queue. The system extracts candidates from conversations; humans/LLMs accept (engram_accept_proposal) or dismiss (engram_dismiss_proposal).",
|
|
1289
|
+
"viewer.help.tabAudit": "<strong>Audit</strong> — operation timeline recording create/update/reinforce/report_failure and every state change, for 'who changed what when' traceability.",
|
|
1290
|
+
"viewer.help.tabTrash": "<strong>Trash</strong> — staging for deleted engrams. Restore one, or purge all (filter by partition; dryRun count + double confirmation before permanent delete).",
|
|
1291
|
+
"viewer.help.tabConfig": "<strong>Config</strong> — data root, maintenance cycles, evolution parameters. Persisted edits take effect after restarting the host.",
|
|
1292
|
+
"viewer.help.evolutionTitle": "How memories evolve",
|
|
1293
|
+
"viewer.help.evo1": "<strong>Retrieve</strong>: the agent calls <code>memory_search</code>; FTS + 3-factor scoring recall top-N.",
|
|
1294
|
+
"viewer.help.evo2": "<strong>Cite</strong>: the agent writes relevant memory content into its answer; the user decides accordingly.",
|
|
1295
|
+
"viewer.help.evo3": "<strong>Reinforce</strong>: the agent judges whether the citation was effective — <code>engram_reinforce</code> if effective, <code>engram_report_failure</code> if not.",
|
|
1296
|
+
"viewer.help.evo4": "<strong>Spread</strong>: reinforcement propagates through synapses to neighbors by Hebbian proportion (except contradicts).",
|
|
1297
|
+
"viewer.help.evo5": "<strong>Decay</strong>: every engram has <code>decayHalfLifeDays</code>; importance decays exponentially by lastEffectiveAt + half-life.",
|
|
1298
|
+
"viewer.help.evo6": "<strong>Maintenance</strong>: background cycles run light/deep/rem phases — 'consolidate reinforcement → decay & forget → REM abstract patterns → trigger metacognition scoring'.",
|
|
1299
|
+
"viewer.help.tipsTitle": "Tips",
|
|
1300
|
+
"viewer.help.tip1": "The <code>?</code> icon next to field names (hover) gives a short description of that field.",
|
|
1301
|
+
"viewer.help.tip2": "Detail-view sections like 'value assessment / importance vector / source context' appear only when the engram carries the corresponding fields.",
|
|
1302
|
+
"viewer.help.tip3": "Config-tab edits write to the persisted file by default and take effect after restarting the host. Edit the data root directly in the Config tab, or via CLI <code>co-engram config data-root <path></code> (the latter supports <code>--force</code> to take over a non-empty directory).",
|
|
1303
|
+
"viewer.help.tip4": "On repository inconsistency, call <code>engram_doctor</code> from the agent for a self-healing scan.",
|
|
1304
|
+
"viewer.help.tip5": "Numeric fields like <code>importance</code> / <code>effectiveness</code> / <code>reinforcementScore</code> show a band label (high / medium / low; thresholds ≥0.7 / ≥0.3 / <0.3) next to the raw 2-decimal value. The band is language-neutral in storage; the UI localizes it.",
|
|
1305
|
+
// ===== Ports & data root =====
|
|
1306
|
+
"viewer.help.opsTitle": "Ports & data root",
|
|
1307
|
+
"viewer.help.opsPorts": "<strong>Viewer port</strong>:Claude Code (MCP) defaults to <code>18799</code>,OpenClaw (plugin) defaults to <code>18899</code> — both hosts can run side-by-side without conflict. Env <code>CO_ENGRAM_VIEWER_PORT</code> overrides both. The persisted <code>viewer.port</code> is deprecated (both hosts share the persisted file and would race on the same port).",
|
|
1308
|
+
"viewer.help.opsDataRoot": "<strong>Data root</strong>:edit directly in the Config tab, or via CLI <code>co-engram config data-root <path></code>. Both write the same <code>~/.co-engram/config.json</code> bootstrap config; restart the current host to apply. For safety, the UI only accepts empty dirs or existing co-engram warehouses; to take over a non-empty non-co-engram dir use the CLI with <code>--force</code>.",
|
|
1309
|
+
// ===== Tool profiles =====
|
|
1310
|
+
"viewer.help.profilesTitle": "Tool profiles",
|
|
1311
|
+
"viewer.help.profilesBody": "<strong>Three profiles</strong> scale the LLM tool surface by use case. Counts come from <code>PROFILE_TOOL_COUNTS</code> in source (computed via <code>.size</code>, cannot drift). <strong>minimal (12)</strong>: core read/write + proposal triage + <code>engram_sync</code> — chat agents that just recall and record. <strong>standard (19, default)</strong>: adds learning loop, contradiction resolution, self-healing (<code>engram_doctor</code>), progressive disclosure (<code>engram_list_paths</code>), LLM synthesis (<code>engram_synthesize</code>), and audit query (<code>engram_audit_query</code>). <strong>full (29)</strong>: all native tools except the experimental <code>skill_invoke</code> (P0 stub). Switch via env <code>CO_ENGRAM_TOOLS_PROFILE=minimal|standard|full</code>; invalid values warn and fall back to standard.",
|
|
1312
|
+
// ===== Save & sync =====
|
|
1313
|
+
"viewer.help.syncTitle": "Save and sync to remote",
|
|
1314
|
+
"viewer.help.syncBody": "Memories mark the repo dirty on write; the host commits at appropriate moments. <strong>Want explicit control?</strong> Have the agent invoke the <code>engram_sync</code> tool: it runs <code>git fetch</code> + <code>pull --rebase --autostash</code> to merge remote first, then <code>commit</code>s local changes, then <code>push</code>es (auto-degrades to commit-only when no remote is configured). Conflicts are reported, not auto-resolved — the tool lists conflicting files for you to decide. <strong>Works across corporate and public git hosts</strong>: invokes system <code>git</code> directly, inheriting your local SSH/credentials/proxy; no hardcoded host or URL; does not write Gerrit <code>Change-Id</code> (the commit-msg hook adds it automatically if installed); respects your <code>.git/config</code> push settings. A <code>.gitignore</code> excluding the <code>.co-engram/</code> cache directory is auto-created on first sync. Use <code>dryRun=true</code> to preview uncommitted changes.",
|
|
1315
|
+
// ===== Obsidian integration =====
|
|
1316
|
+
"viewer.help.obsidianTitle": "Obsidian integration (graph view)",
|
|
1317
|
+
"viewer.help.obsidianBody": "Open the data root directly as an <strong>Obsidian vault</strong>. Whenever a synapse (<code>extends</code> / <code>similar_to</code> / <code>contradicts</code>, etc.) is created or changed, a derived wikilinks section is appended to the body of every touched engram: <code>→ [[filename|title · kind]]</code> (outgoing) and <code>← [[filename|title · kind]]</code> (incoming). The wikilink <strong>target is the filename</strong> (Obsidian resolves it natively — no frontmatter aliases needed); the <strong>display shows the target engram's title plus the kind</strong>, so the relationship is readable without navigation. <code>contradicts</code> edges are pinned to the top of the derived section. The authoritative source remains <code>synapses/*.yaml</code>; the derived section is a denormalized view that can always be rebuilt from yaml. <strong>Graph looks wrong?</strong> Run <code>engram_doctor</code> — it checks every engram's derived section against the authoritative source and regenerates any drift (idempotent; a clean repo reports zero fixes).",
|
|
1318
|
+
// ===== Graph panel (viewer.graph.*) =====
|
|
1319
|
+
"viewer.graph.renderFailed": "Render failed: ${err}",
|
|
1320
|
+
"viewer.graph.visLoadFailed": "vis-network failed to load",
|
|
1321
|
+
"viewer.graph.empty": "No engrams yet",
|
|
1322
|
+
"viewer.graph.tagsLabel": "tags:",
|
|
1323
|
+
"viewer.graph.familySuffix": " family",
|
|
1324
|
+
"viewer.graph.weightLabel": "weight",
|
|
1325
|
+
"viewer.graph.evidenceLabel": "evidence",
|
|
1326
|
+
"viewer.graph.resolutionLabel": "resolution:",
|
|
1327
|
+
"viewer.graph.directionLabel": "direction:",
|
|
1328
|
+
"viewer.graph.clickToEdit": "click to edit this synapse",
|
|
1329
|
+
"viewer.graph.nodeDetailTitle": "Node detail",
|
|
1330
|
+
"viewer.graph.editInEngrams": "Edit in engrams",
|
|
1331
|
+
"viewer.graph.importanceShort": "importance",
|
|
1332
|
+
"viewer.graph.summaryTitle": "Summary",
|
|
1333
|
+
"viewer.graph.statsTitle": "Stats",
|
|
1334
|
+
"viewer.graph.retrievalLabel": "retrievals:",
|
|
1335
|
+
"viewer.graph.effectiveLabel": "effective:",
|
|
1336
|
+
"viewer.graph.failedLabel": "failed:",
|
|
1337
|
+
"viewer.graph.outgoingSynapses": "Outgoing synapses",
|
|
1338
|
+
"viewer.graph.incomingSynapses": "Incoming synapses",
|
|
1339
|
+
"viewer.graph.familyGroupStructural": "Structural",
|
|
1340
|
+
"viewer.graph.familyGroupCausal": "Causal",
|
|
1341
|
+
"viewer.graph.familyGroupEvidential": "Evidential",
|
|
1342
|
+
"viewer.graph.familyGroupTemporal": "Temporal",
|
|
1343
|
+
"viewer.graph.familyGroupModulatory": "Modulatory",
|
|
1344
|
+
"viewer.graph.toolbar.filters": "Filters",
|
|
1345
|
+
"viewer.graph.toolbar.kinds": "Node kinds",
|
|
1346
|
+
"viewer.graph.toolbar.synapseKinds": "Synapse kinds",
|
|
1347
|
+
"viewer.graph.toolbar.reset": "Reset view",
|
|
1348
|
+
"viewer.graph.toolbar.fit": "Fit to window",
|
|
1349
|
+
"viewer.graph.toolbar.physics": "Physics",
|
|
1350
|
+
"viewer.graph.toolbar.fitTitle": "Fit view: auto-zoom and center so every node is visible",
|
|
1351
|
+
"viewer.graph.toolbar.physicsTitle": "Physics engine: when on, nodes auto-layout via spring/repulsion model (uses CPU until stable); off freezes positions — useful for browsing large graphs after they settle",
|
|
1352
|
+
"viewer.graph.toolbar.resetTitle": "Reset filters: restore every kind/family checkbox and re-fit the view",
|
|
1353
|
+
"viewer.graph.synapseKindsTitle": "Synapse kinds · by family",
|
|
1354
|
+
"viewer.graph.engramKindsTitle": "Engram kinds",
|
|
1355
|
+
// ===== Synapses panel / synapse detail (viewer.synapses.*) =====
|
|
1356
|
+
"viewer.synapses.kindChangeHint": "Tip: changing 'kind' or 'direction' re-derives the synapse id (id is computed from from+to+kind+direction); the old id becomes invalid, but all metadata (weight/evidence/creator) migrates to the new id.",
|
|
1357
|
+
"viewer.synapses.deleteConfirm": "Delete this synapse?\\nThis action cannot be undone.",
|
|
1358
|
+
"viewer.synapses.kindField": "Kind:",
|
|
1359
|
+
"viewer.synapses.idField": "ID:",
|
|
1360
|
+
"viewer.synapses.creatorField": "Created by:",
|
|
1361
|
+
"viewer.synapses.timeField": "Time:",
|
|
1362
|
+
"viewer.synapses.reloadingGraph": "Reloading graph...",
|
|
1363
|
+
"viewer.synapses.directionDefault": "directional",
|
|
1364
|
+
// ===== Host terminology (host.*) =====
|
|
1365
|
+
"host.label.mcp": "Claude Code",
|
|
1366
|
+
"host.label.openclaw": "OpenClaw",
|
|
1367
|
+
"host.process.mcp": "Claude Code",
|
|
1368
|
+
"host.process.openclaw": "OpenClaw",
|
|
1369
|
+
"host.gateway.openclaw": "OpenClaw gateway",
|
|
1370
|
+
"host.gateway.mcp": "MCP server",
|
|
1371
|
+
// ===== Tooltip strings (tip.*) =====
|
|
1372
|
+
"tip.kind.fact": "Fact: a confirmed, independently verifiable objective statement. Example: \"The project uses PostgreSQL 14\".",
|
|
1373
|
+
"tip.kind.observation": "Observation: a one-off perceived fact, not yet distilled into a stable conclusion. Example: \"CI took 12 minutes today\".",
|
|
1374
|
+
"tip.kind.pattern": "Pattern: a rule归纳duced from repeated observations; can predict future behavior. Example: \"Build times get longer every Monday morning\".",
|
|
1375
|
+
"tip.kind.procedure": "Procedure: a sequence of steps that reproduces a result when executed. Example: \"Run pnpm check before release\".",
|
|
1376
|
+
"tip.kind.hypothesis": "Hypothesis: an unverified guess; usable as a working hypothesis until counter-examples appear. Example: \"Slow queries may stem from missing indexes\".",
|
|
1377
|
+
"tip.status.active": "Active: recently retrieved or reinforced; high weight in the recall pool.",
|
|
1378
|
+
"tip.status.dormant": "Dormant: long unretrieved; weight has decayed but not forgotten.",
|
|
1379
|
+
"tip.status.forgotten": "Forgotten: actively forgotten by maintenance; file remains but excluded from default recall.",
|
|
1380
|
+
"tip.status.archived": "Archived: cold-storage state; only for historical lookups.",
|
|
1381
|
+
"tip.visibility.public": "Public: visible to everyone / every agent.",
|
|
1382
|
+
"tip.visibility.team": "Team: visible only within the same team.",
|
|
1383
|
+
"tip.visibility.private": "Private: visible only to the creator.",
|
|
1384
|
+
"tip.visibility.restricted": "Restricted: requires specific permissions to view.",
|
|
1385
|
+
"tip.emotionalValence.positive": "Positive: encoded with positive emotion (success / praise / resolution). Reinforcement weight is slightly higher.",
|
|
1386
|
+
"tip.emotionalValence.negative": "Negative: encoded with negative emotion (failure / warning / refutation). Used to flag future decisions.",
|
|
1387
|
+
"tip.emotionalValence.neutral": "Neutral: no clear emotional valence at encoding; purely declarative.",
|
|
1388
|
+
"tip.sourceType.firsthand": "Firsthand: directly experienced / observed; highest credibility.",
|
|
1389
|
+
"tip.sourceType.secondhand": "Secondhand: relayed / documented / others' experience; needs cross-validation.",
|
|
1390
|
+
"tip.sourceType.inferred": "Inferred: induced from other memories; no direct evidence.",
|
|
1391
|
+
"tip.verification.unverified": "Unverified: newly created; has not yet passed metacognitive scoring.",
|
|
1392
|
+
"tip.verification.plausible": "Plausible: overall ≥ 0.4; passes initial check but uncertainty remains.",
|
|
1393
|
+
"tip.verification.probable": "Probable: overall ≥ 0.6; retrieved multiple times with no counter-examples.",
|
|
1394
|
+
"tip.verification.verified": "Verified: overall ≥ 0.8 or human-confirmed; safe to use as a decision basis.",
|
|
1395
|
+
"tip.verification.refuted": "Refuted: strong counter-examples exist or metacognitive score is very low; do not rely on it.",
|
|
1396
|
+
"tip.synapse.extends": "extends (structural): A extends B, inheriting its semantics and adding new dimensions.",
|
|
1397
|
+
"tip.synapse.part_of": "part_of (structural): A is a component of B (B has-a A).",
|
|
1398
|
+
"tip.synapse.similar_to": "similar_to (structural): A is semantically close to B; interchangeable or mutually supportive.",
|
|
1399
|
+
"tip.synapse.depends_on": "depends_on (causal): A's validity depends on B (B is a precondition of A).",
|
|
1400
|
+
"tip.synapse.causes": "causes (causal): A triggers or produces B (positive causation).",
|
|
1401
|
+
"tip.synapse.follows": "follows (causal): A follows B temporally/logically (no strong causation).",
|
|
1402
|
+
"tip.synapse.derives_from": "derives_from (evidential): A is derived from B (B is the basis).",
|
|
1403
|
+
"tip.synapse.contradicts": "contradicts (evidential): A conflicts with B; enters resolution flow.",
|
|
1404
|
+
"tip.synapse.exemplifies": "exemplifies (evidential): A is a concrete instance/sample of B.",
|
|
1405
|
+
"tip.synapse.supersedes": "supersedes (temporal): A replaces an outdated B (version transition).",
|
|
1406
|
+
"tip.synapse.consolidates": "consolidates (temporal): A merges/refines the content of B.",
|
|
1407
|
+
"tip.synapse.contextualizes": "contextualizes (modulatory): A provides context for B (neither causal nor evidential).",
|
|
1408
|
+
"tip.family.structural": "Structural: composition / extension relationships. Blue.",
|
|
1409
|
+
"tip.family.causal": "Causal: trigger / dependency relationships. Orange.",
|
|
1410
|
+
"tip.family.evidential": "Evidential: source / conflict relationships. Green (contradictions flagged red).",
|
|
1411
|
+
"tip.family.temporal": "Temporal: version / evolution relationships. Purple.",
|
|
1412
|
+
"tip.family.modulatory": "Modulatory: contextual relationships. Gray.",
|
|
1413
|
+
"tip.synapseDirection.directional": "Directional: A → B; the relation points only from source to target.",
|
|
1414
|
+
"tip.synapseDirection.bidirectional": "Bidirectional: A ↔ B; the relation applies symmetrically.",
|
|
1415
|
+
"tip.resolution.pending": "Pending: a contradiction has been detected, awaiting resolution.",
|
|
1416
|
+
"tip.resolution.auto_resolved": "Auto-resolved (phase 1): LLM produced an automatic verdict.",
|
|
1417
|
+
"tip.resolution.escalated": "Escalated (phase 2): escalated to the owner for resolution.",
|
|
1418
|
+
"tip.resolution.contested": "Contested (phase 3): no response within the timeout, with a warning attached.",
|
|
1419
|
+
"tip.resolution.resolved": "Resolved: closed, manually or automatically.",
|
|
1420
|
+
"tip.importance": "Importance: 0-1; higher values mean more weight in the recall pool. Derived from initial setting + reinforcement signals + decay.",
|
|
1421
|
+
"tip.confidence": "Confidence: 0-1; reflects how credible this memory is (independent of importance).",
|
|
1422
|
+
"tip.retrievalCount": "Retrieval count: total times this memory has been hit by search/recall.",
|
|
1423
|
+
"tip.effectiveRetrievals": "Effective retrievals: times the hit was actually adopted (not filtered out).",
|
|
1424
|
+
"tip.failedUses": "Failed uses: times the hit was reported as \"invalid/outdated\". Too many failures trigger forgetting.",
|
|
1425
|
+
"tip.reinforcementScore": "Reinforcement score: cumulative positive reinforcement signal.",
|
|
1426
|
+
"tip.decayHalfLifeDays": "Decay half-life (days): importance halves every N days. null means never decays.",
|
|
1427
|
+
"tip.lastEffectiveAt": "Last effective at: timestamp of the most recent successful adoption/reinforcement.",
|
|
1428
|
+
"tip.evidenceCount": "Evidence count: number of independent evidence entries (synapses + metadata) supporting this memory.",
|
|
1429
|
+
"tip.encodingContext": "Encoding context: background description when the memory was created; used for context-dependent recall.",
|
|
1430
|
+
"tip.perspective": "Perspective: observation viewpoint identifier (multi-perspective retention mechanism, spec §5.3).",
|
|
1431
|
+
"tip.importanceVector": "Multi-dim importance: splits importance into 5 independent dimensions for fine-grained control.",
|
|
1432
|
+
"tip.importanceDim.personal": "Personal: relevance to the current user's work.",
|
|
1433
|
+
"tip.importanceDim.team": "Team: collaborative value for the whole team.",
|
|
1434
|
+
"tip.importanceDim.project": "Project: alignment with current project goals.",
|
|
1435
|
+
"tip.importanceDim.network": "Network: derived from synapse count; reflects knowledge-graph centrality.",
|
|
1436
|
+
"tip.importanceDim.temporal": "Temporal: derived from lastEffectiveAt + half-life; recently reinforced memories score higher.",
|
|
1437
|
+
"tip.freshness.fresh": "Fresh: ageDays ≤ halfLife; recently reinforced, top weight in the recall pool.",
|
|
1438
|
+
"tip.freshness.aging": "Aging: halfLife < ageDays ≤ halfLife×2; weight dropping, reinforce soon.",
|
|
1439
|
+
"tip.freshness.stale": "Stale: halfLife×2 < ageDays ≤ halfLife×4; long unreinforced, candidate for forgetting.",
|
|
1440
|
+
"tip.freshness.forgotten": "Forgotten: ageDays > halfLife×4; removed from default recall pool (file retained, recoverable via Git).",
|
|
211
1441
|
};
|
|
212
1442
|
//# sourceMappingURL=en.js.map
|