@aiassesstech/mighty-mark 0.1.0 → 0.2.0

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.
Files changed (75) hide show
  1. package/dist/checks/check-context.d.ts +2 -0
  2. package/dist/checks/check-context.d.ts.map +1 -1
  3. package/dist/checks/check-context.js.map +1 -1
  4. package/dist/checks/check-runner.d.ts +1 -1
  5. package/dist/checks/check-runner.d.ts.map +1 -1
  6. package/dist/checks/check-runner.js +7 -1
  7. package/dist/checks/check-runner.js.map +1 -1
  8. package/dist/checks/memory-health.d.ts +44 -0
  9. package/dist/checks/memory-health.d.ts.map +1 -0
  10. package/dist/checks/memory-health.js +389 -0
  11. package/dist/checks/memory-health.js.map +1 -0
  12. package/dist/cli/memory-commands.d.ts +22 -0
  13. package/dist/cli/memory-commands.d.ts.map +1 -0
  14. package/dist/cli/memory-commands.js +343 -0
  15. package/dist/cli/memory-commands.js.map +1 -0
  16. package/dist/cli/runner.d.ts +1 -0
  17. package/dist/cli/runner.d.ts.map +1 -1
  18. package/dist/cli/runner.js +75 -0
  19. package/dist/cli/runner.js.map +1 -1
  20. package/dist/cli/setup-user.d.ts +37 -0
  21. package/dist/cli/setup-user.d.ts.map +1 -0
  22. package/dist/cli/setup-user.js +163 -0
  23. package/dist/cli/setup-user.js.map +1 -0
  24. package/dist/config/fleet-topology.d.ts +3 -0
  25. package/dist/config/fleet-topology.d.ts.map +1 -1
  26. package/dist/config/fleet-topology.js +21 -11
  27. package/dist/config/fleet-topology.js.map +1 -1
  28. package/dist/index.d.ts +11 -1
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +7 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/memory/backfill.d.ts +33 -0
  33. package/dist/memory/backfill.d.ts.map +1 -0
  34. package/dist/memory/backfill.js +206 -0
  35. package/dist/memory/backfill.js.map +1 -0
  36. package/dist/memory/config.d.ts +56 -0
  37. package/dist/memory/config.d.ts.map +1 -0
  38. package/dist/memory/config.js +46 -0
  39. package/dist/memory/config.js.map +1 -0
  40. package/dist/memory/organize.d.ts +27 -0
  41. package/dist/memory/organize.d.ts.map +1 -0
  42. package/dist/memory/organize.js +108 -0
  43. package/dist/memory/organize.js.map +1 -0
  44. package/dist/memory/remediate.d.ts +37 -0
  45. package/dist/memory/remediate.d.ts.map +1 -0
  46. package/dist/memory/remediate.js +143 -0
  47. package/dist/memory/remediate.js.map +1 -0
  48. package/dist/memory/retention.d.ts +42 -0
  49. package/dist/memory/retention.d.ts.map +1 -0
  50. package/dist/memory/retention.js +186 -0
  51. package/dist/memory/retention.js.map +1 -0
  52. package/dist/memory/tag.d.ts +26 -0
  53. package/dist/memory/tag.d.ts.map +1 -0
  54. package/dist/memory/tag.js +134 -0
  55. package/dist/memory/tag.js.map +1 -0
  56. package/dist/memory/writer.d.ts +46 -0
  57. package/dist/memory/writer.d.ts.map +1 -0
  58. package/dist/memory/writer.js +115 -0
  59. package/dist/memory/writer.js.map +1 -0
  60. package/dist/notify/report-formatter.d.ts.map +1 -1
  61. package/dist/notify/report-formatter.js +17 -1
  62. package/dist/notify/report-formatter.js.map +1 -1
  63. package/dist/plugin.d.ts +1 -1
  64. package/dist/plugin.d.ts.map +1 -1
  65. package/dist/plugin.js +196 -4
  66. package/dist/plugin.js.map +1 -1
  67. package/dist/store/json-store.d.ts +6 -0
  68. package/dist/store/json-store.d.ts.map +1 -1
  69. package/dist/store/json-store.js +27 -0
  70. package/dist/store/json-store.js.map +1 -1
  71. package/dist/types/fleet.d.ts +7 -0
  72. package/dist/types/fleet.d.ts.map +1 -1
  73. package/dist/types/health.d.ts +2 -2
  74. package/dist/types/health.d.ts.map +1 -1
  75. package/package.json +1 -1
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Retention policy enforcement for memory files on disk-constrained VPS.
3
+ *
4
+ * - File count ceiling per agent subdirectory (default 500)
5
+ * - Oldest files archived to .archive/ as monthly .tar.gz bundles (never deleted)
6
+ * - Session directory size monitoring
7
+ * - Total memory directory size monitoring
8
+ */
9
+ import fs from 'node:fs';
10
+ import path from 'node:path';
11
+ import { execSync } from 'node:child_process';
12
+ import { getDefaultMemoryDir, MAX_FILES_PER_SUBDIR, SESSION_SIZE_WARN_BYTES, TOTAL_MEMORY_WARN_BYTES, } from './config.js';
13
+ const DEFAULT_CONFIG = {
14
+ maxFilesPerSubdir: MAX_FILES_PER_SUBDIR,
15
+ sessionSizeWarnMB: SESSION_SIZE_WARN_BYTES / (1024 * 1024),
16
+ totalMemoryWarnMB: TOTAL_MEMORY_WARN_BYTES / (1024 * 1024),
17
+ archiveDir: '.archive',
18
+ };
19
+ /**
20
+ * Enforce file count ceilings across all agent subdirectories.
21
+ * Files over the limit are compressed into monthly .tar.gz archives.
22
+ */
23
+ export async function enforceRetention(memoryDir, config) {
24
+ const dir = memoryDir ?? getDefaultMemoryDir();
25
+ const cfg = { ...DEFAULT_CONFIG, ...config };
26
+ const result = { archived: [], warnings: [], errors: [] };
27
+ if (!fs.existsSync(dir)) {
28
+ result.errors.push(`Memory directory not found: ${dir}`);
29
+ return result;
30
+ }
31
+ const agentDirs = listSubdirs(dir);
32
+ for (const agentDir of agentDirs) {
33
+ const agentPath = path.join(dir, agentDir);
34
+ const subdirs = listSubdirs(agentPath);
35
+ for (const sub of subdirs) {
36
+ if (sub === cfg.archiveDir)
37
+ continue;
38
+ const subPath = path.join(agentPath, sub);
39
+ const files = listMarkdownFilesByAge(subPath);
40
+ if (files.length <= cfg.maxFilesPerSubdir)
41
+ continue;
42
+ const excess = files.length - cfg.maxFilesPerSubdir;
43
+ const toArchive = files.slice(0, excess);
44
+ try {
45
+ const archiveEntry = await archiveFiles(agentPath, sub, toArchive, cfg.archiveDir);
46
+ result.archived.push(archiveEntry);
47
+ }
48
+ catch (err) {
49
+ result.errors.push(`${agentDir}/${sub}: ${err instanceof Error ? err.message : String(err)}`);
50
+ }
51
+ }
52
+ }
53
+ return result;
54
+ }
55
+ /**
56
+ * Check disk usage and produce warnings for session/total thresholds.
57
+ */
58
+ export function checkDiskUsage(memoryDir, config) {
59
+ const dir = memoryDir ?? getDefaultMemoryDir();
60
+ const cfg = { ...DEFAULT_CONFIG, ...config };
61
+ const report = {
62
+ totalMemoryBytes: 0,
63
+ sessionBytes: 0,
64
+ agentBytes: {},
65
+ warnings: [],
66
+ };
67
+ if (!fs.existsSync(dir))
68
+ return report;
69
+ report.totalMemoryBytes = getDirSize(dir);
70
+ const sessionsDir = path.join(dir, '..', 'sessions');
71
+ if (fs.existsSync(sessionsDir)) {
72
+ report.sessionBytes = getDirSize(sessionsDir);
73
+ }
74
+ const agentDirs = listSubdirs(dir);
75
+ for (const agent of agentDirs) {
76
+ report.agentBytes[agent] = getDirSize(path.join(dir, agent));
77
+ }
78
+ const totalMB = report.totalMemoryBytes / (1024 * 1024);
79
+ if (totalMB > cfg.totalMemoryWarnMB) {
80
+ report.warnings.push(`Total memory directory is ${totalMB.toFixed(0)}MB (threshold: ${cfg.totalMemoryWarnMB}MB)`);
81
+ }
82
+ const sessionMB = report.sessionBytes / (1024 * 1024);
83
+ if (sessionMB > cfg.sessionSizeWarnMB) {
84
+ report.warnings.push(`Session directory is ${sessionMB.toFixed(0)}MB (threshold: ${cfg.sessionSizeWarnMB}MB)`);
85
+ }
86
+ return report;
87
+ }
88
+ /**
89
+ * Archive a batch of files into a monthly .tar.gz bundle.
90
+ * Files are grouped by YYYY-MM from their filename date prefix.
91
+ */
92
+ async function archiveFiles(agentPath, subdir, files, archiveDirName) {
93
+ const archiveDir = path.join(agentPath, archiveDirName);
94
+ if (!fs.existsSync(archiveDir)) {
95
+ fs.mkdirSync(archiveDir, { recursive: true });
96
+ }
97
+ const month = extractMonth(files[0] ?? '') ?? formatMonth(new Date());
98
+ const archiveName = `${subdir}-${month}-archive.tar.gz`;
99
+ const archivePath = path.join(archiveDir, archiveName);
100
+ let finalPath = archivePath;
101
+ if (fs.existsSync(archivePath)) {
102
+ finalPath = path.join(archiveDir, `${subdir}-${month}-archive-${Date.now()}.tar.gz`);
103
+ }
104
+ const subPath = path.join(agentPath, subdir);
105
+ const relativeFiles = files.map(f => path.relative(subPath, f));
106
+ try {
107
+ execSync(`tar -czf "${finalPath}" -C "${subPath}" ${relativeFiles.map(f => `"${f}"`).join(' ')}`, { timeout: 30_000 });
108
+ }
109
+ catch {
110
+ const bundleDir = path.join(archiveDir, `${subdir}-${month}`);
111
+ if (!fs.existsSync(bundleDir))
112
+ fs.mkdirSync(bundleDir, { recursive: true });
113
+ for (const file of files) {
114
+ const dest = path.join(bundleDir, path.basename(file));
115
+ fs.renameSync(file, dest);
116
+ }
117
+ finalPath = bundleDir;
118
+ }
119
+ if (finalPath !== archivePath || fs.existsSync(finalPath)) {
120
+ for (const file of files) {
121
+ if (fs.existsSync(file))
122
+ fs.unlinkSync(file);
123
+ }
124
+ }
125
+ return { subdir: `${path.basename(agentPath)}/${subdir}`, fileCount: files.length, archivePath: finalPath };
126
+ }
127
+ /** List markdown files sorted oldest-first by filename date prefix, then mtime. */
128
+ function listMarkdownFilesByAge(dir) {
129
+ if (!fs.existsSync(dir))
130
+ return [];
131
+ try {
132
+ const entries = fs.readdirSync(dir)
133
+ .filter(f => f.endsWith('.md'))
134
+ .map(f => ({
135
+ name: f,
136
+ full: path.join(dir, f),
137
+ mtime: fs.statSync(path.join(dir, f)).mtimeMs,
138
+ }))
139
+ .sort((a, b) => a.mtime - b.mtime);
140
+ return entries.map(e => e.full);
141
+ }
142
+ catch {
143
+ return [];
144
+ }
145
+ }
146
+ function listSubdirs(dir) {
147
+ try {
148
+ return fs.readdirSync(dir, { withFileTypes: true })
149
+ .filter(e => e.isDirectory() && !e.name.startsWith('.'))
150
+ .map(e => e.name)
151
+ .sort();
152
+ }
153
+ catch {
154
+ return [];
155
+ }
156
+ }
157
+ function getDirSize(dir) {
158
+ let total = 0;
159
+ try {
160
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
161
+ for (const entry of entries) {
162
+ const full = path.join(dir, entry.name);
163
+ if (entry.isDirectory()) {
164
+ total += getDirSize(full);
165
+ }
166
+ else {
167
+ try {
168
+ total += fs.statSync(full).size;
169
+ }
170
+ catch { /* skip */ }
171
+ }
172
+ }
173
+ }
174
+ catch { /* skip */ }
175
+ return total;
176
+ }
177
+ function extractMonth(filePath) {
178
+ const basename = path.basename(filePath);
179
+ const match = basename.match(/^(\d{4}-\d{2})/);
180
+ return match?.[1] ?? null;
181
+ }
182
+ function formatMonth(date) {
183
+ return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}`;
184
+ }
185
+ export { listMarkdownFilesByAge as _listMarkdownFilesByAge_for_testing };
186
+ //# sourceMappingURL=retention.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retention.js","sourceRoot":"","sources":["../../src/memory/retention.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Memory tagger — scans memory files for missing or incomplete YAML
3
+ * frontmatter and adds/fixes it based on file path and content heuristics.
4
+ */
5
+ export interface TagOptions {
6
+ memoryDir?: string;
7
+ dryRun?: boolean;
8
+ /** Only process a specific agent's directory. */
9
+ agent?: string;
10
+ }
11
+ export interface TagResult {
12
+ tagged: string[];
13
+ alreadyTagged: string[];
14
+ errors: string[];
15
+ }
16
+ /**
17
+ * Add YAML frontmatter to markdown files that are missing it.
18
+ */
19
+ export declare function tagMemoryFiles(opts?: TagOptions): Promise<TagResult>;
20
+ /**
21
+ * Infer YAML frontmatter from file path and first heading.
22
+ * Path structure: agent/subdir/filename.md
23
+ */
24
+ declare function inferFrontmatter(relativePath: string, content: string): string;
25
+ export { inferFrontmatter as _inferFrontmatter_for_testing };
26
+ //# sourceMappingURL=tag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../src/memory/tag.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,IAAI,GAAE,UAAe,GAAG,OAAO,CAAC,SAAS,CAAC,CAgD9E;AAMD;;;GAGG;AACH,iBAAS,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAyBvE;AA6DD,OAAO,EAAE,gBAAgB,IAAI,6BAA6B,EAAE,CAAC"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Memory tagger — scans memory files for missing or incomplete YAML
3
+ * frontmatter and adds/fixes it based on file path and content heuristics.
4
+ */
5
+ import fs from 'node:fs';
6
+ import path from 'node:path';
7
+ import { getDefaultMemoryDir } from './config.js';
8
+ /**
9
+ * Add YAML frontmatter to markdown files that are missing it.
10
+ */
11
+ export async function tagMemoryFiles(opts = {}) {
12
+ const memoryDir = opts.memoryDir ?? getDefaultMemoryDir();
13
+ const dryRun = opts.dryRun ?? false;
14
+ const result = { tagged: [], alreadyTagged: [], errors: [] };
15
+ if (!fs.existsSync(memoryDir)) {
16
+ result.errors.push(`Memory directory not found: ${memoryDir}`);
17
+ return result;
18
+ }
19
+ const searchDir = opts.agent
20
+ ? path.join(memoryDir, opts.agent)
21
+ : memoryDir;
22
+ if (!fs.existsSync(searchDir)) {
23
+ result.errors.push(`Agent directory not found: ${searchDir}`);
24
+ return result;
25
+ }
26
+ const mdFiles = findAllMarkdownFiles(searchDir);
27
+ for (const file of mdFiles) {
28
+ try {
29
+ const content = fs.readFileSync(file, 'utf-8');
30
+ if (hasFrontmatter(content)) {
31
+ result.alreadyTagged.push(file);
32
+ continue;
33
+ }
34
+ const relativePath = path.relative(memoryDir, file);
35
+ const frontmatter = inferFrontmatter(relativePath, content);
36
+ const tagged = `${frontmatter}\n${content}`;
37
+ if (dryRun) {
38
+ result.tagged.push(file);
39
+ continue;
40
+ }
41
+ fs.writeFileSync(file, tagged, 'utf-8');
42
+ result.tagged.push(file);
43
+ }
44
+ catch (err) {
45
+ result.errors.push(`${file}: ${err instanceof Error ? err.message : String(err)}`);
46
+ }
47
+ }
48
+ return result;
49
+ }
50
+ function hasFrontmatter(content) {
51
+ return content.startsWith('---\n') || content.startsWith('---\r\n');
52
+ }
53
+ /**
54
+ * Infer YAML frontmatter from file path and first heading.
55
+ * Path structure: agent/subdir/filename.md
56
+ */
57
+ function inferFrontmatter(relativePath, content) {
58
+ const parts = relativePath.replace(/\\/g, '/').split('/');
59
+ const agent = parts[0] ?? 'unknown';
60
+ const subdir = parts.length >= 3 ? parts[1] : 'general';
61
+ const filename = path.basename(relativePath, '.md');
62
+ const dateMatch = filename.match(/^(\d{4}-\d{2}-\d{2})/);
63
+ const date = dateMatch?.[1] ?? new Date().toISOString().slice(0, 10);
64
+ const heading = extractFirstHeading(content) ?? filename;
65
+ const type = subdirToType(subdir);
66
+ const tags = inferTags(agent, type, content);
67
+ const lines = [
68
+ '---',
69
+ `tags: [${tags.join(', ')}]`,
70
+ `agent: ${agent}`,
71
+ `type: ${type}`,
72
+ `date: ${date}`,
73
+ 'auto-tagged: true',
74
+ '---',
75
+ ];
76
+ return lines.join('\n');
77
+ }
78
+ function extractFirstHeading(content) {
79
+ const match = content.match(/^#+\s+(.+)$/m);
80
+ return match?.[1]?.trim() ?? null;
81
+ }
82
+ const TYPE_MAP = {
83
+ governance: 'governance-decision',
84
+ scores: 'score-published',
85
+ intelligence: 'intelligence',
86
+ assessments: 'assessment',
87
+ drift: 'drift',
88
+ fleet: 'fleet-anomaly',
89
+ 'flight-plans': 'flight-plan',
90
+ deviations: 'deviation',
91
+ transitions: 'phase-transition',
92
+ incidents: 'incident',
93
+ health: 'morning-check',
94
+ trends: 'trend',
95
+ decisions: 'decision',
96
+ vetoes: 'veto',
97
+ strategic: 'strategic',
98
+ engineering: 'engineering',
99
+ deployments: 'deployment',
100
+ reviews: 'review',
101
+ };
102
+ function subdirToType(subdir) {
103
+ return TYPE_MAP[subdir] ?? subdir;
104
+ }
105
+ function inferTags(agent, type, content) {
106
+ const tags = [type, agent];
107
+ const lower = content.toLowerCase();
108
+ if (lower.includes('critical') || lower.includes('severity: critical'))
109
+ tags.push('critical');
110
+ if (lower.includes('backfill'))
111
+ tags.push('backfill');
112
+ if (lower.includes('remediat'))
113
+ tags.push('remediation');
114
+ return [...new Set(tags)];
115
+ }
116
+ function findAllMarkdownFiles(dir) {
117
+ const results = [];
118
+ try {
119
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
120
+ for (const entry of entries) {
121
+ const full = path.join(dir, entry.name);
122
+ if (entry.isDirectory() && !entry.name.startsWith('.')) {
123
+ results.push(...findAllMarkdownFiles(full));
124
+ }
125
+ else if (entry.name.endsWith('.md')) {
126
+ results.push(full);
127
+ }
128
+ }
129
+ }
130
+ catch { /* ignore */ }
131
+ return results.sort();
132
+ }
133
+ export { inferFrontmatter as _inferFrontmatter_for_testing };
134
+ //# sourceMappingURL=tag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag.js","sourceRoot":"","sources":["../../src/memory/tag.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * MemoryWriter — writes structured markdown files with YAML frontmatter
3
+ * into the shared memory directory for OpenClaw's memory_search to index.
4
+ *
5
+ * This class has zero dependencies beyond Node.js built-ins so that
6
+ * consumer agents (Grillo, Noah, Nole) can import it without pulling
7
+ * in Mark's health check infrastructure.
8
+ */
9
+ export interface MemoryWriteOptions {
10
+ /** Which agent is writing (grillo, noah, nole, mighty-mark, jessie, sam). */
11
+ agent: string;
12
+ /** Event type (assessment, governance-decision, incident, flight-plan, etc.). */
13
+ type: string;
14
+ /** Searchable tags — indexed by BM25 keyword search. */
15
+ tags: string[];
16
+ /** Human-readable title — becomes the markdown H1. */
17
+ title: string;
18
+ /** Markdown body — embedded by vector model for semantic search. */
19
+ body: string;
20
+ /** Optional ISO date override (defaults to today). */
21
+ date?: string;
22
+ /** Optional extra frontmatter fields (risk, outcome, score, etc.). */
23
+ metadata?: Record<string, string | number | boolean>;
24
+ }
25
+ export interface MemoryWriterConfig {
26
+ /** Root memory directory. Default: ~/.openclaw/workspace/memory */
27
+ memoryDir?: string;
28
+ /** Whether to auto-create subdirectories. Default: true */
29
+ autoCreateDirs?: boolean;
30
+ }
31
+ export declare class MemoryWriter {
32
+ private readonly memoryDir;
33
+ private readonly autoCreate;
34
+ constructor(config?: MemoryWriterConfig);
35
+ /** Returns the root memory directory this writer targets. */
36
+ getMemoryDir(): string;
37
+ /**
38
+ * Write a memory file with YAML frontmatter + markdown body.
39
+ * Returns the absolute path of the written file.
40
+ */
41
+ write(opts: MemoryWriteOptions): Promise<string>;
42
+ }
43
+ /** Convert a title to a filename-safe slug. */
44
+ declare function slugify(text: string): string;
45
+ export { slugify as _slugify_for_testing };
46
+ //# sourceMappingURL=writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/memory/writer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,kBAAkB;IACjC,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AA0CD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;gBAEzB,MAAM,CAAC,EAAE,kBAAkB;IAKvC,6DAA6D;IAC7D,YAAY,IAAI,MAAM;IAItB;;;OAGG;IACG,KAAK,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;CAkBvD;AA6BD,+CAA+C;AAC/C,iBAAS,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMrC;AAED,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * MemoryWriter — writes structured markdown files with YAML frontmatter
3
+ * into the shared memory directory for OpenClaw's memory_search to index.
4
+ *
5
+ * This class has zero dependencies beyond Node.js built-ins so that
6
+ * consumer agents (Grillo, Noah, Nole) can import it without pulling
7
+ * in Mark's health check infrastructure.
8
+ */
9
+ import { existsSync } from 'node:fs';
10
+ import { mkdir, writeFile } from 'node:fs/promises';
11
+ import { join } from 'node:path';
12
+ import { getDefaultMemoryDir } from './config.js';
13
+ const SUBDIR_MAP = {
14
+ grillo: {
15
+ assessment: 'assessments',
16
+ drift: 'drift',
17
+ 'fleet-anomaly': 'fleet',
18
+ certification: 'assessments',
19
+ suspension: 'fleet',
20
+ },
21
+ noah: {
22
+ 'flight-plan': 'flight-plans',
23
+ deviation: 'deviations',
24
+ 'phase-transition': 'transitions',
25
+ waypoint: 'deviations',
26
+ 'go-no-go': 'flight-plans',
27
+ },
28
+ nole: {
29
+ 'governance-decision': 'governance',
30
+ veto: 'governance',
31
+ proposal: 'governance',
32
+ 'score-published': 'scores',
33
+ intelligence: 'intelligence',
34
+ },
35
+ 'mighty-mark': {
36
+ incident: 'incidents',
37
+ 'morning-check': 'health',
38
+ trend: 'trends',
39
+ remediation: 'incidents',
40
+ },
41
+ jessie: {
42
+ decision: 'decisions',
43
+ veto: 'vetoes',
44
+ strategic: 'strategic',
45
+ },
46
+ sam: {
47
+ engineering: 'engineering',
48
+ deployment: 'deployments',
49
+ review: 'reviews',
50
+ },
51
+ };
52
+ export class MemoryWriter {
53
+ memoryDir;
54
+ autoCreate;
55
+ constructor(config) {
56
+ this.memoryDir = config?.memoryDir ?? getDefaultMemoryDir();
57
+ this.autoCreate = config?.autoCreateDirs ?? true;
58
+ }
59
+ /** Returns the root memory directory this writer targets. */
60
+ getMemoryDir() {
61
+ return this.memoryDir;
62
+ }
63
+ /**
64
+ * Write a memory file with YAML frontmatter + markdown body.
65
+ * Returns the absolute path of the written file.
66
+ */
67
+ async write(opts) {
68
+ const date = opts.date ?? new Date().toISOString().slice(0, 10);
69
+ const slug = slugify(opts.title);
70
+ const subdir = subdirForType(opts.agent, opts.type);
71
+ const dir = join(this.memoryDir, opts.agent, subdir);
72
+ const filename = `${date}-${slug}.md`;
73
+ const filePath = join(dir, filename);
74
+ if (this.autoCreate && !existsSync(dir)) {
75
+ await mkdir(dir, { recursive: true });
76
+ }
77
+ const frontmatter = buildFrontmatter(opts, date);
78
+ const content = `${frontmatter}\n# ${opts.title}\n\n${opts.body}\n`;
79
+ await writeFile(filePath, content, 'utf-8');
80
+ return filePath;
81
+ }
82
+ }
83
+ function subdirForType(agent, type) {
84
+ return SUBDIR_MAP[agent]?.[type] ?? type;
85
+ }
86
+ function buildFrontmatter(opts, date) {
87
+ const fields = {
88
+ tags: opts.tags,
89
+ agent: opts.agent,
90
+ type: opts.type,
91
+ date,
92
+ ...opts.metadata,
93
+ };
94
+ const lines = ['---'];
95
+ for (const [key, value] of Object.entries(fields)) {
96
+ if (Array.isArray(value)) {
97
+ lines.push(`${key}: [${value.join(', ')}]`);
98
+ }
99
+ else {
100
+ lines.push(`${key}: ${value}`);
101
+ }
102
+ }
103
+ lines.push('---');
104
+ return lines.join('\n');
105
+ }
106
+ /** Convert a title to a filename-safe slug. */
107
+ function slugify(text) {
108
+ return text
109
+ .toLowerCase()
110
+ .replace(/[^a-z0-9]+/g, '-')
111
+ .replace(/^-+|-+$/g, '')
112
+ .slice(0, 80);
113
+ }
114
+ export { slugify as _slugify_for_testing };
115
+ //# sourceMappingURL=writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/memory/writer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"report-formatter.d.ts","sourceRoot":"","sources":["../../src/notify/report-formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,oBAAoB,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGrD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAqClE;AAED,4CAA4C;AAC5C,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAQjE;AAED,6CAA6C;AAC7C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAwBlE;AAED,6CAA6C;AAC7C,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAkB9D;AAED,sDAAsD;AACtD,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CASjE;AAED,+CAA+C;AAC/C,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CASjE"}
1
+ {"version":3,"file":"report-formatter.d.ts","sourceRoot":"","sources":["../../src/notify/report-formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,oBAAoB,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGrD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAsDlE;AAED,4CAA4C;AAC5C,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAQjE;AAED,6CAA6C;AAC7C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAwBlE;AAED,6CAA6C;AAC7C,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAkB9D;AAED,sDAAsD;AACtD,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CASjE;AAED,+CAA+C;AAC/C,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CASjE"}
@@ -37,6 +37,22 @@ export function formatTelegramReport(report) {
37
37
  lines.push(`📊 Gateway: ${gatewayAlive ? 'Running' : 'DOWN'}`);
38
38
  lines.push(`📊 Agents: ${countPassed(report.checks, 'agents')} configured`);
39
39
  lines.push(`📊 Checks: ${report.summary.total} total, ${report.durationMs}ms`);
40
+ const memoryChecks = report.checks.filter(c => c.category === 'memory');
41
+ if (memoryChecks.length > 0) {
42
+ const memPassed = memoryChecks.filter(c => c.status === 'pass').length;
43
+ const providerCheck = memoryChecks.find(c => c.name === 'Memory provider configured');
44
+ const indexCheck = memoryChecks.find(c => c.name === 'Memory indexing healthy');
45
+ const providerMsg = providerCheck?.status === 'pass'
46
+ ? providerCheck.message ?? 'configured'
47
+ : providerCheck?.message ?? 'not configured';
48
+ const indexMsg = indexCheck?.status === 'pass'
49
+ ? indexCheck.message ?? 'healthy'
50
+ : indexCheck?.message ?? 'unknown';
51
+ lines.push(`📊 Memory Search: ${memPassed === memoryChecks.length ? '✓' : '⚠'} ${providerMsg}`);
52
+ if (indexCheck?.status === 'pass') {
53
+ lines.push(`📊 Index: ${indexMsg}`);
54
+ }
55
+ }
40
56
  return lines.join('%0A');
41
57
  }
42
58
  /** Format a summary report (plain text). */
@@ -62,7 +78,7 @@ export function formatDetailedReport(report) {
62
78
  lines.push(`Duration: ${report.durationMs}ms`);
63
79
  lines.push(`Results: ${report.summary.passed}/${report.summary.total} passed, ${report.summary.warnings} warnings, ${report.summary.failed} failures`);
64
80
  lines.push('');
65
- const categories = ['gateway', 'agents', 'system', 'api', 'data'];
81
+ const categories = ['gateway', 'agents', 'system', 'api', 'data', 'memory'];
66
82
  for (const cat of categories) {
67
83
  const catChecks = report.checks.filter(c => c.category === cat);
68
84
  if (catChecks.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"report-formatter.js","sourceRoot":"","sources":["../../src/notify/report-formatter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report-formatter.js","sourceRoot":"","sources":["../../src/notify/report-formatter.ts"],"names":[],"mappings":"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"}
package/dist/plugin.d.ts CHANGED
@@ -7,7 +7,7 @@
7
7
  * This adapter:
8
8
  * 1. Reads plugin config from api.config (+ openclaw.json fallback)
9
9
  * 2. Creates a MarkCore instance eagerly (not lazy)
10
- * 3. Registers 6 tools, 1 command, 1 background service
10
+ * 3. Registers 10 tools, 1 command, 1 background service
11
11
  *
12
12
  * Pattern matches @aiassesstech/noah plugin (verified against OpenClaw 2026.2.9).
13
13
  *
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAqCH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,GAAG,QAsRxC"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AA4CH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,GAAG,QA2exC"}