@aiassesstech/mighty-mark 0.3.28 → 0.3.31

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.
@@ -12,6 +12,14 @@ export declare function checkNoahStore(topology?: FleetTopology, ctx?: CheckCont
12
12
  export declare function checkNoleState(topology?: FleetTopology, ctx?: CheckContext): Promise<CheckResult>;
13
13
  /** Check #26: Mark self-check — store writable + Telegram reachable. */
14
14
  export declare function checkMarkSelf(dataDir: string, telegramToken?: string, ctx?: CheckContext): Promise<CheckResult[]>;
15
+ /** Check #27: Docs backup freshness — validates today's (or yesterday's) backup manifest from GitHub. */
16
+ export declare function checkDocsBackupFreshness(ctx?: CheckContext): Promise<CheckResult>;
17
+ /**
18
+ * Check #28: Fleet backup freshness — validates the local VPS backup manifest
19
+ * written by nole-fleet-backup. Tier-aware: "full" backups are validated for
20
+ * extension count; "light" backups skip that check since they only contain .md files.
21
+ */
22
+ export declare function checkFleetBackupFreshness(ctx?: CheckContext): Promise<CheckResult>;
15
23
  /** Run all data integrity checks. */
16
24
  export declare function runDataChecks(dataDir: string, telegramToken?: string, topology?: FleetTopology, ctx?: CheckContext): Promise<CheckResult[]>;
17
25
  //# sourceMappingURL=data-integrity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-integrity.d.ts","sourceRoot":"","sources":["../../src/checks/data-integrity.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAoD,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAwCzG,8EAA8E;AAC9E,wBAAsB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAiCzG;AAED,2DAA2D;AAC3D,wBAAsB,cAAc,CAAC,QAAQ,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAmBvG;AAED,yCAAyC;AACzC,wBAAsB,cAAc,CAAC,QAAQ,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAkBvG;AAED,wEAAwE;AACxE,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,EACtB,GAAG,CAAC,EAAE,YAAY,GACjB,OAAO,CAAC,WAAW,EAAE,CAAC,CAqCxB;AAED,qCAAqC;AACrC,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,EACtB,QAAQ,CAAC,EAAE,aAAa,EACxB,GAAG,CAAC,EAAE,YAAY,GACjB,OAAO,CAAC,WAAW,EAAE,CAAC,CAOxB"}
1
+ {"version":3,"file":"data-integrity.d.ts","sourceRoot":"","sources":["../../src/checks/data-integrity.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAoD,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAwCzG,8EAA8E;AAC9E,wBAAsB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAiCzG;AAED,2DAA2D;AAC3D,wBAAsB,cAAc,CAAC,QAAQ,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAmBvG;AAED,yCAAyC;AACzC,wBAAsB,cAAc,CAAC,QAAQ,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAkBvG;AAED,wEAAwE;AACxE,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,EACtB,GAAG,CAAC,EAAE,YAAY,GACjB,OAAO,CAAC,WAAW,EAAE,CAAC,CAqCxB;AAED,yGAAyG;AACzG,wBAAsB,wBAAwB,CAAC,GAAG,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAgFvF;AAKD;;;;GAIG;AACH,wBAAsB,yBAAyB,CAAC,GAAG,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAwFxF;AAED,qCAAqC;AACrC,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,EACtB,QAAQ,CAAC,EAAE,aAAa,EACxB,GAAG,CAAC,EAAE,YAAY,GACjB,OAAO,CAAC,WAAW,EAAE,CAAC,CASxB"}
@@ -135,6 +135,167 @@ export async function checkMarkSelf(dataDir, telegramToken, ctx) {
135
135
  }
136
136
  return results;
137
137
  }
138
+ /** Check #27: Docs backup freshness — validates today's (or yesterday's) backup manifest from GitHub. */
139
+ export async function checkDocsBackupFreshness(ctx) {
140
+ const start = Date.now();
141
+ const today = new Date().toISOString().slice(0, 10);
142
+ try {
143
+ const manifestUrl = `https://raw.githubusercontent.com/spar65/compsi/docs-backup/${today}/manifest.json`;
144
+ const res = await fetchUrl(manifestUrl, { signal: AbortSignal.timeout(10_000) }, ctx);
145
+ if (!res.ok) {
146
+ const yesterday = new Date(Date.now() - 86_400_000).toISOString().slice(0, 10);
147
+ const yesterdayUrl = `https://raw.githubusercontent.com/spar65/compsi/docs-backup/${yesterday}/manifest.json`;
148
+ const yRes = await fetchUrl(yesterdayUrl, { signal: AbortSignal.timeout(10_000) }, ctx);
149
+ if (!yRes.ok) {
150
+ return {
151
+ name: 'Docs backup freshness',
152
+ category: 'data',
153
+ status: 'warn',
154
+ message: `No backup found for ${today} or ${yesterday}`,
155
+ timestamp: now(),
156
+ durationMs: Date.now() - start,
157
+ };
158
+ }
159
+ const yManifest = await yRes.json();
160
+ return {
161
+ name: 'Docs backup freshness',
162
+ category: 'data',
163
+ status: 'pass',
164
+ message: `Backup current (yesterday): ${yManifest.pages} pages, ${yManifest.agent_docs} agent docs, checksum present: ${!!yManifest.checksum}`,
165
+ timestamp: now(),
166
+ durationMs: Date.now() - start,
167
+ };
168
+ }
169
+ const manifest = await res.json();
170
+ if (manifest.pages < 20) {
171
+ return {
172
+ name: 'Docs backup freshness',
173
+ category: 'data',
174
+ status: 'warn',
175
+ message: `Only ${manifest.pages} pages backed up (expected 20+). Possible incomplete backup.`,
176
+ timestamp: now(),
177
+ durationMs: Date.now() - start,
178
+ };
179
+ }
180
+ if (manifest.date !== today) {
181
+ return {
182
+ name: 'Docs backup freshness',
183
+ category: 'data',
184
+ status: 'warn',
185
+ message: `Manifest date ${manifest.date} does not match today ${today}`,
186
+ timestamp: now(),
187
+ durationMs: Date.now() - start,
188
+ };
189
+ }
190
+ return {
191
+ name: 'Docs backup freshness',
192
+ category: 'data',
193
+ status: 'pass',
194
+ message: `Backup current: ${manifest.pages} pages, ${manifest.agent_docs} agent docs, checksum: ${manifest.checksum?.slice(0, 20)}...`,
195
+ timestamp: now(),
196
+ durationMs: Date.now() - start,
197
+ };
198
+ }
199
+ catch (err) {
200
+ return {
201
+ name: 'Docs backup freshness',
202
+ category: 'data',
203
+ status: 'warn',
204
+ message: `Could not verify backup: ${err instanceof Error ? err.message : 'unknown'}`,
205
+ timestamp: now(),
206
+ durationMs: Date.now() - start,
207
+ };
208
+ }
209
+ }
210
+ /** Default path where nole-fleet-backup writes its manifest. */
211
+ const DEFAULT_FLEET_BACKUP_MANIFEST = '/opt/fleet-backup/latest-manifest.json';
212
+ /**
213
+ * Check #28: Fleet backup freshness — validates the local VPS backup manifest
214
+ * written by nole-fleet-backup. Tier-aware: "full" backups are validated for
215
+ * extension count; "light" backups skip that check since they only contain .md files.
216
+ */
217
+ export async function checkFleetBackupFreshness(ctx) {
218
+ const start = Date.now();
219
+ const today = new Date().toISOString().slice(0, 10);
220
+ const yesterday = new Date(Date.now() - 86_400_000).toISOString().slice(0, 10);
221
+ const manifestPath = ctx?.dataDir
222
+ ? path.join(ctx.dataDir, 'latest-manifest.json')
223
+ : DEFAULT_FLEET_BACKUP_MANIFEST;
224
+ try {
225
+ if (!fs.existsSync(manifestPath)) {
226
+ return {
227
+ name: 'Fleet backup freshness',
228
+ category: 'data',
229
+ status: 'warn',
230
+ message: `Manifest not found: ${manifestPath}`,
231
+ timestamp: now(),
232
+ durationMs: Date.now() - start,
233
+ };
234
+ }
235
+ const raw = fs.readFileSync(manifestPath, 'utf-8');
236
+ const manifest = JSON.parse(raw);
237
+ if (manifest.date !== today && manifest.date !== yesterday) {
238
+ return {
239
+ name: 'Fleet backup freshness',
240
+ category: 'data',
241
+ status: 'warn',
242
+ message: `Backup stale: manifest date ${manifest.date} (expected ${today} or ${yesterday})`,
243
+ timestamp: now(),
244
+ durationMs: Date.now() - start,
245
+ };
246
+ }
247
+ const tier = manifest.tier ?? 'full';
248
+ if (tier === 'full' && (manifest.extensions ?? 0) < 4) {
249
+ return {
250
+ name: 'Fleet backup freshness',
251
+ category: 'data',
252
+ status: 'warn',
253
+ message: `Full backup has only ${manifest.extensions} extensions (expected 4+). Possible incomplete backup.`,
254
+ timestamp: now(),
255
+ durationMs: Date.now() - start,
256
+ };
257
+ }
258
+ if (tier === 'light' && (manifest.memory_files ?? 0) < 10) {
259
+ return {
260
+ name: 'Fleet backup freshness',
261
+ category: 'data',
262
+ status: 'warn',
263
+ message: `Light backup has only ${manifest.memory_files} memory files (expected 10+). Possible incomplete backup.`,
264
+ timestamp: now(),
265
+ durationMs: Date.now() - start,
266
+ };
267
+ }
268
+ if (!manifest.checksum) {
269
+ return {
270
+ name: 'Fleet backup freshness',
271
+ category: 'data',
272
+ status: 'warn',
273
+ message: 'Backup manifest missing checksum',
274
+ timestamp: now(),
275
+ durationMs: Date.now() - start,
276
+ };
277
+ }
278
+ const age = manifest.date === today ? 'today' : 'yesterday';
279
+ return {
280
+ name: 'Fleet backup freshness',
281
+ category: 'data',
282
+ status: 'pass',
283
+ message: `Backup current [${tier}] (${age}): ${manifest.extensions} ext, ${manifest.agents} agents, ${manifest.memory_files ?? '?'} files, ${manifest.size_mb} MB, checksum: ${manifest.checksum.slice(0, 20)}...`,
284
+ timestamp: now(),
285
+ durationMs: Date.now() - start,
286
+ };
287
+ }
288
+ catch (err) {
289
+ return {
290
+ name: 'Fleet backup freshness',
291
+ category: 'data',
292
+ status: 'warn',
293
+ message: `Could not verify fleet backup: ${err instanceof Error ? err.message : 'unknown'}`,
294
+ timestamp: now(),
295
+ durationMs: Date.now() - start,
296
+ };
297
+ }
298
+ }
138
299
  /** Run all data integrity checks. */
139
300
  export async function runDataChecks(dataDir, telegramToken, topology, ctx) {
140
301
  const results = [];
@@ -142,6 +303,8 @@ export async function runDataChecks(dataDir, telegramToken, topology, ctx) {
142
303
  results.push(await checkNoahStore(topology, ctx));
143
304
  results.push(await checkNoleState(topology, ctx));
144
305
  results.push(...await checkMarkSelf(dataDir, telegramToken, ctx));
306
+ results.push(await checkDocsBackupFreshness(ctx));
307
+ results.push(await checkFleetBackupFreshness(ctx));
145
308
  return results;
146
309
  }
147
310
  /** Recursively find JSON files in a directory. */
@@ -1 +1 @@
1
- {"version":3,"file":"data-integrity.js","sourceRoot":"","sources":["../../src/checks/data-integrity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-integrity.js","sourceRoot":"","sources":["../../src/checks/data-integrity.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiassesstech/mighty-mark",
3
- "version": "0.3.28",
3
+ "version": "0.3.31",
4
4
  "description": "System Health Sentinel for AI Assess Tech Fleet — autonomous monitoring, watchdog recovery, and fleet infrastructure oversight.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -147,8 +147,14 @@ CRON_TZ=America/Chicago
147
147
  */5 * * * * root ${MARK_HOME}/watchdog.sh >> ${MARK_HOME}/logs/watchdog-cron.log 2>&1
148
148
 
149
149
  # Morning Check: daily at 6:00 AM Chicago time (auto-adjusts for CDT/CST)
150
+ # Runs fleet backup first, then health check (including backup freshness validation)
150
151
  0 6 * * * root ${MARK_HOME}/morning-check.sh >> ${MARK_HOME}/logs/morning-cron.log 2>&1
151
152
  CRONEOF
153
+ # Remove standalone fleet-backup cron if it exists (now integrated into morning check)
154
+ if [ -f /etc/cron.d/fleet-backup ]; then
155
+ rm -f /etc/cron.d/fleet-backup
156
+ echo " Removed: /etc/cron.d/fleet-backup (now integrated into morning check)"
157
+ fi
152
158
  chmod 644 /etc/cron.d/mighty-mark
153
159
  echo " Installed: /etc/cron.d/mighty-mark"
154
160
  echo " Watchdog: */5 * * * * (every 5 min)"
@@ -182,8 +188,50 @@ LREOF
182
188
  echo " Installed: /etc/logrotate.d/mighty-mark (14-day rotation)"
183
189
  fi
184
190
 
185
- # ── Step 6: Initialize state ──
186
- echo "[6/7] Initializing state files..."
191
+ # ── Step 6: Install fleet backup scripts ──
192
+ echo "[6/8] Installing fleet backup (nole-fleet-backup)..."
193
+
194
+ FLEET_BACKUP_DIR="/opt/fleet-backup"
195
+ FLEET_REPO_DIR="/opt/nole-fleet-backup"
196
+
197
+ if [ "$DRY_RUN" = true ]; then
198
+ echo " [DRY RUN] Would set up fleet backup at ${FLEET_BACKUP_DIR}"
199
+ elif [ -d "$FLEET_REPO_DIR" ] && [ -f "$FLEET_REPO_DIR/fleet-backup.sh" ]; then
200
+ mkdir -p "${FLEET_BACKUP_DIR}/backups"
201
+ mkdir -p "${FLEET_BACKUP_DIR}/logs"
202
+ cp "$FLEET_REPO_DIR/fleet-backup.sh" "${FLEET_BACKUP_DIR}/"
203
+ cp "$FLEET_REPO_DIR/fleet-restore.sh" "${FLEET_BACKUP_DIR}/"
204
+ cp "$FLEET_REPO_DIR/config.sh" "${FLEET_BACKUP_DIR}/"
205
+ if [ -f "$FLEET_REPO_DIR/config.local.sh" ]; then
206
+ cp "$FLEET_REPO_DIR/config.local.sh" "${FLEET_BACKUP_DIR}/"
207
+ fi
208
+ chmod +x "${FLEET_BACKUP_DIR}/fleet-backup.sh"
209
+ chmod +x "${FLEET_BACKUP_DIR}/fleet-restore.sh"
210
+ echo " Installed: fleet-backup.sh, fleet-restore.sh, config.sh"
211
+ echo " Backups: ${FLEET_BACKUP_DIR}/backups/"
212
+ echo " Logs: ${FLEET_BACKUP_DIR}/logs/"
213
+
214
+ # Install fleet-backup logrotate
215
+ cat > /etc/logrotate.d/fleet-backup <<FBLREOF
216
+ ${FLEET_BACKUP_DIR}/logs/*.log {
217
+ weekly
218
+ rotate 8
219
+ compress
220
+ delaycompress
221
+ missingok
222
+ notifempty
223
+ create 644 root root
224
+ }
225
+ FBLREOF
226
+ chmod 644 /etc/logrotate.d/fleet-backup
227
+ echo " Logrotate: /etc/logrotate.d/fleet-backup"
228
+ else
229
+ echo " Skipped — nole-fleet-backup repo not found at ${FLEET_REPO_DIR}"
230
+ echo " To install: git clone github-nole-backup:spar65/nole-fleet-backup.git ${FLEET_REPO_DIR}"
231
+ fi
232
+
233
+ # ── Step 7: Initialize state ──
234
+ echo "[7/8] Initializing state files..."
187
235
 
188
236
  if [ "$DRY_RUN" = true ]; then
189
237
  echo " [DRY RUN] Would initialize state files"
@@ -196,8 +244,8 @@ else
196
244
  fi
197
245
  fi
198
246
 
199
- # ── Step 7: Test Telegram connectivity ──
200
- echo "[7/7] Testing Telegram connectivity..."
247
+ # ── Step 8: Test Telegram connectivity ──
248
+ echo "[8/8] Testing Telegram connectivity..."
201
249
 
202
250
  if [ "$DRY_RUN" = true ]; then
203
251
  echo " [DRY RUN] Would test Telegram API"
@@ -240,5 +288,8 @@ if [ -z "${TELEGRAM_TOKEN}" ]; then
240
288
  echo ""
241
289
  fi
242
290
 
291
+ echo " Fleet backup: ${FLEET_BACKUP_DIR}/fleet-backup.sh"
292
+ echo " Restore: ${FLEET_BACKUP_DIR}/fleet-restore.sh --help"
293
+ echo ""
243
294
  echo " Manual test: bash ${MARK_HOME}/watchdog.sh"
244
295
  echo " View logs: tail -f ${MARK_HOME}/logs/watchdog.log"
@@ -21,6 +21,20 @@ mkdir -p "${MARK_LOG_DIR}" "${MARK_STATE_DIR}"
21
21
 
22
22
  log_morning "Morning check starting"
23
23
 
24
+ # ── Run fleet backup before health check ──
25
+ FLEET_BACKUP="/opt/fleet-backup/fleet-backup.sh"
26
+ if [ -x "$FLEET_BACKUP" ]; then
27
+ log_morning "Triggering fleet backup before health check..."
28
+ if "$FLEET_BACKUP" >> "${MORNING_LOG}" 2>&1; then
29
+ log_morning "Fleet backup completed successfully"
30
+ else
31
+ log_morning "WARN: Fleet backup failed (exit code $?)"
32
+ notify_telegram "🟡 *MIGHTY MARK — Backup Warning*%0A%0AFleet backup failed during morning check.%0AHealth check will proceed.%0A%0ACheck logs: /opt/fleet-backup/logs/backup.log%0AServer: $(hostname)%0ATime: $(date)"
33
+ fi
34
+ else
35
+ log_morning "Fleet backup script not found at $FLEET_BACKUP, skipping"
36
+ fi
37
+
24
38
  # ── Try Node.js health check first ──
25
39
  if command -v npx &> /dev/null; then
26
40
  log_morning "Running TypeScript health engine via npx"