clawprobe 0.1.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 (82) hide show
  1. package/README.md +301 -0
  2. package/dist/cli/commands/compacts.d.ts +11 -0
  3. package/dist/cli/commands/compacts.d.ts.map +1 -0
  4. package/dist/cli/commands/compacts.js +68 -0
  5. package/dist/cli/commands/compacts.js.map +1 -0
  6. package/dist/cli/commands/context.d.ts +8 -0
  7. package/dist/cli/commands/context.d.ts.map +1 -0
  8. package/dist/cli/commands/context.js +78 -0
  9. package/dist/cli/commands/context.js.map +1 -0
  10. package/dist/cli/commands/cost.d.ts +12 -0
  11. package/dist/cli/commands/cost.d.ts.map +1 -0
  12. package/dist/cli/commands/cost.js +52 -0
  13. package/dist/cli/commands/cost.js.map +1 -0
  14. package/dist/cli/commands/memory.d.ts +36 -0
  15. package/dist/cli/commands/memory.d.ts.map +1 -0
  16. package/dist/cli/commands/memory.js +139 -0
  17. package/dist/cli/commands/memory.js.map +1 -0
  18. package/dist/cli/commands/session.d.ts +10 -0
  19. package/dist/cli/commands/session.d.ts.map +1 -0
  20. package/dist/cli/commands/session.js +95 -0
  21. package/dist/cli/commands/session.js.map +1 -0
  22. package/dist/cli/commands/status.d.ts +9 -0
  23. package/dist/cli/commands/status.d.ts.map +1 -0
  24. package/dist/cli/commands/status.js +68 -0
  25. package/dist/cli/commands/status.js.map +1 -0
  26. package/dist/cli/commands/suggest.d.ts +11 -0
  27. package/dist/cli/commands/suggest.d.ts.map +1 -0
  28. package/dist/cli/commands/suggest.js +68 -0
  29. package/dist/cli/commands/suggest.js.map +1 -0
  30. package/dist/cli/format.d.ts +29 -0
  31. package/dist/cli/format.d.ts.map +1 -0
  32. package/dist/cli/format.js +125 -0
  33. package/dist/cli/format.js.map +1 -0
  34. package/dist/core/config.d.ts +63 -0
  35. package/dist/core/config.d.ts.map +1 -0
  36. package/dist/core/config.js +92 -0
  37. package/dist/core/config.js.map +1 -0
  38. package/dist/core/db.d.ts +87 -0
  39. package/dist/core/db.d.ts.map +1 -0
  40. package/dist/core/db.js +263 -0
  41. package/dist/core/db.js.map +1 -0
  42. package/dist/core/jsonl-parser.d.ts +55 -0
  43. package/dist/core/jsonl-parser.d.ts.map +1 -0
  44. package/dist/core/jsonl-parser.js +79 -0
  45. package/dist/core/jsonl-parser.js.map +1 -0
  46. package/dist/core/memory-editor.d.ts +18 -0
  47. package/dist/core/memory-editor.d.ts.map +1 -0
  48. package/dist/core/memory-editor.js +125 -0
  49. package/dist/core/memory-editor.js.map +1 -0
  50. package/dist/core/session-store.d.ts +35 -0
  51. package/dist/core/session-store.d.ts.map +1 -0
  52. package/dist/core/session-store.js +66 -0
  53. package/dist/core/session-store.js.map +1 -0
  54. package/dist/core/watcher.d.ts +19 -0
  55. package/dist/core/watcher.d.ts.map +1 -0
  56. package/dist/core/watcher.js +83 -0
  57. package/dist/core/watcher.js.map +1 -0
  58. package/dist/daemon.d.ts +3 -0
  59. package/dist/daemon.d.ts.map +1 -0
  60. package/dist/daemon.js +147 -0
  61. package/dist/daemon.js.map +1 -0
  62. package/dist/engines/compact-diff.d.ts +19 -0
  63. package/dist/engines/compact-diff.d.ts.map +1 -0
  64. package/dist/engines/compact-diff.js +124 -0
  65. package/dist/engines/compact-diff.js.map +1 -0
  66. package/dist/engines/cost.d.ts +73 -0
  67. package/dist/engines/cost.d.ts.map +1 -0
  68. package/dist/engines/cost.js +149 -0
  69. package/dist/engines/cost.js.map +1 -0
  70. package/dist/engines/file-analyzer.d.ts +28 -0
  71. package/dist/engines/file-analyzer.d.ts.map +1 -0
  72. package/dist/engines/file-analyzer.js +139 -0
  73. package/dist/engines/file-analyzer.js.map +1 -0
  74. package/dist/engines/rule-engine.d.ts +25 -0
  75. package/dist/engines/rule-engine.d.ts.map +1 -0
  76. package/dist/engines/rule-engine.js +209 -0
  77. package/dist/engines/rule-engine.js.map +1 -0
  78. package/dist/index.d.ts +3 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +207 -0
  81. package/dist/index.js.map +1 -0
  82. package/package.json +35 -0
@@ -0,0 +1,209 @@
1
+ import fs from "fs";
2
+ import { getCompactEvents, getSuggestions, upsertSuggestion, removeSuggestion, getDailyCostSummary } from "../core/db.js";
3
+ import { analyzeWorkspaceFiles, getFileStaleness } from "./file-analyzer.js";
4
+ // --- Built-in Rules ---
5
+ const ToolsMdTruncationRule = {
6
+ id: "tools-truncation",
7
+ name: "TOOLS.md Truncation",
8
+ check({ workspaceDir, bootstrapMaxChars }) {
9
+ const analysis = analyzeWorkspaceFiles(workspaceDir, bootstrapMaxChars);
10
+ const toolsMd = analysis.truncatedFiles.find((f) => f.name === "TOOLS.md");
11
+ if (!toolsMd)
12
+ return null;
13
+ const wastePct = Math.round(toolsMd.lostPercent);
14
+ const wasteKb = Math.round(toolsMd.lostChars / 1024);
15
+ return {
16
+ ruleId: "tools-truncation",
17
+ severity: "critical",
18
+ title: `TOOLS.md truncated — ${wastePct}% never reaches the model`,
19
+ detail: `${wasteKb}KB of tool descriptions are silently cut off because TOOLS.md ` +
20
+ `exceeds the ${Math.round(bootstrapMaxChars / 1000)}K char bootstrap limit. ` +
21
+ `The model cannot see or use tools defined in the truncated section.`,
22
+ action: "Split TOOLS.md into per-task Skill files, or increase bootstrapMaxChars in openclaw.json",
23
+ };
24
+ },
25
+ };
26
+ const HighCompactionFrequencyRule = {
27
+ id: "high-compact-freq",
28
+ name: "High Compaction Frequency",
29
+ check({ db, agent, config }) {
30
+ const threshold = config.rules.compactionFreqThresholdMin * 60; // convert to seconds
31
+ const events = getCompactEvents(db, agent, 10);
32
+ if (events.length < 3)
33
+ return null;
34
+ const timestamps = events
35
+ .filter((e) => e.compacted_at !== null)
36
+ .map((e) => e.compacted_at)
37
+ .sort((a, b) => a - b);
38
+ if (timestamps.length < 2)
39
+ return null;
40
+ const intervals = [];
41
+ for (let i = 1; i < timestamps.length; i++) {
42
+ intervals.push(timestamps[i] - timestamps[i - 1]);
43
+ }
44
+ const avgIntervalSec = intervals.reduce((s, v) => s + v, 0) / intervals.length;
45
+ if (avgIntervalSec >= threshold)
46
+ return null;
47
+ const avgMin = Math.round(avgIntervalSec / 60);
48
+ return {
49
+ ruleId: "high-compact-freq",
50
+ severity: "warning",
51
+ title: `Compaction frequency too high (avg every ${avgMin} min)`,
52
+ detail: `Your context compacts on average every ${avgMin} minutes. ` +
53
+ `Frequent compaction means frequent context loss and recovery overhead. ` +
54
+ `Consider increasing reserveTokens in openclaw.json to delay compaction.`,
55
+ action: 'Set "compaction.reserveTokens" to a higher value in openclaw.json',
56
+ };
57
+ },
58
+ };
59
+ const ContextLeakRule = {
60
+ id: "context-headroom",
61
+ name: "Context Window Nearly Full",
62
+ check({ db, agent }) {
63
+ // Find the most recent snapshot across all sessions
64
+ const snapshot = (db.prepare(`
65
+ SELECT * FROM session_snapshots
66
+ WHERE agent = ?
67
+ ORDER BY sampled_at DESC
68
+ LIMIT 1
69
+ `).get(agent));
70
+ if (!snapshot)
71
+ return null;
72
+ const MODEL_WINDOWS = {
73
+ "claude-opus-4": 200000,
74
+ "claude-sonnet-4.5": 200000,
75
+ "gpt-5.4": 128000,
76
+ "gpt-5.4-mini": 128000,
77
+ "gemini-3.1-flash": 1000000,
78
+ "deepseek-v3": 128000,
79
+ };
80
+ const modelKey = Object.keys(MODEL_WINDOWS).find((k) => snapshot.model?.includes(k));
81
+ const windowSize = modelKey ? MODEL_WINDOWS[modelKey] : 128000;
82
+ const utilization = snapshot.context_tokens / windowSize;
83
+ if (utilization < 0.9)
84
+ return null;
85
+ return {
86
+ ruleId: "context-headroom",
87
+ severity: "warning",
88
+ title: `Context window at ${Math.round(utilization * 100)}% capacity`,
89
+ detail: `Current context is ${snapshot.context_tokens.toLocaleString()} tokens ` +
90
+ `out of ~${windowSize.toLocaleString()} (${Math.round(utilization * 100)}%). ` +
91
+ `Compaction may trigger soon, potentially losing important context.`,
92
+ action: "Consider starting a fresh session or manually compacting now",
93
+ };
94
+ },
95
+ };
96
+ const CostSpikeRule = {
97
+ id: "cost-spike",
98
+ name: "Cost Spike Detected",
99
+ check({ db, agent }) {
100
+ const rows = getDailyCostSummary(db, agent, 8);
101
+ if (rows.length < 3)
102
+ return null;
103
+ const today = new Date().toISOString().slice(0, 10);
104
+ const todayRow = rows.find((r) => r.date === today);
105
+ if (!todayRow || todayRow.total_usd === 0)
106
+ return null;
107
+ const priorRows = rows.filter((r) => r.date !== today);
108
+ const priorAvg = priorRows.reduce((s, r) => s + r.total_usd, 0) / priorRows.length;
109
+ if (priorAvg === 0 || todayRow.total_usd < priorAvg * 2)
110
+ return null;
111
+ return {
112
+ ruleId: "cost-spike",
113
+ severity: "warning",
114
+ title: `Today's cost is ${Math.round(todayRow.total_usd / priorAvg)}× the weekly average`,
115
+ detail: `Today: $${todayRow.total_usd.toFixed(2)} vs weekly avg $${priorAvg.toFixed(2)}/day. ` +
116
+ `Check if a long-running task, large file, or model change is driving up costs.`,
117
+ action: "Run `clawprobe cost --day` and `clawprobe context` for details",
118
+ };
119
+ },
120
+ };
121
+ const MemoryBloatRule = {
122
+ id: "memory-bloat",
123
+ name: "MEMORY.md Too Large",
124
+ check({ workspaceDir, config }) {
125
+ const memPath = `${workspaceDir}/MEMORY.md`;
126
+ let size = 0;
127
+ if (fs.existsSync(memPath)) {
128
+ size = fs.readFileSync(memPath, "utf-8").length;
129
+ }
130
+ const threshold = config.rules.memoryBloatThresholdChars;
131
+ if (size < threshold)
132
+ return null;
133
+ return {
134
+ ruleId: "memory-bloat",
135
+ severity: "info",
136
+ title: `MEMORY.md is large (${Math.round(size / 1024)}KB)`,
137
+ detail: `MEMORY.md contains ${size.toLocaleString()} chars which consumes ~${Math.ceil(size / 4).toLocaleString()} tokens ` +
138
+ `in every session's context. Consider archiving older entries to daily note files.`,
139
+ action: "Run `clawprobe memory list` to review and prune entries",
140
+ };
141
+ },
142
+ };
143
+ const StaleFilesRule = {
144
+ id: "stale-workspace-files",
145
+ name: "Stale Workspace Files",
146
+ check({ workspaceDir }) {
147
+ const stale = getFileStaleness(workspaceDir).filter((f) => f.daysSinceModified > 30);
148
+ if (stale.length < 2)
149
+ return null;
150
+ const names = stale.map((f) => f.name).join(", ");
151
+ return {
152
+ ruleId: "stale-workspace-files",
153
+ severity: "info",
154
+ title: `${stale.length} workspace files unchanged for 30+ days`,
155
+ detail: `${names} haven't been modified in over a month but still consume ` +
156
+ `context tokens in every session. They may be outdated or unnecessary.`,
157
+ action: "Review and trim or archive files that are no longer relevant",
158
+ };
159
+ },
160
+ };
161
+ // --- Engine ---
162
+ const BUILT_IN_RULES = [
163
+ ToolsMdTruncationRule,
164
+ HighCompactionFrequencyRule,
165
+ ContextLeakRule,
166
+ CostSpikeRule,
167
+ MemoryBloatRule,
168
+ StaleFilesRule,
169
+ ];
170
+ export function runRules(state, customRules = []) {
171
+ const disabled = new Set(state.config.rules.disabled);
172
+ const rules = [...BUILT_IN_RULES, ...customRules].filter((r) => !disabled.has(r.id));
173
+ const results = [];
174
+ for (const rule of rules) {
175
+ try {
176
+ const suggestion = rule.check(state);
177
+ if (suggestion)
178
+ results.push(suggestion);
179
+ }
180
+ catch {
181
+ // rule threw — skip it
182
+ }
183
+ }
184
+ return results;
185
+ }
186
+ export function persistSuggestions(db, agent, suggestions) {
187
+ const now = Math.floor(Date.now() / 1000);
188
+ const activeRuleIds = new Set(suggestions.map((s) => s.ruleId));
189
+ // Remove suggestions for rules that no longer fire
190
+ const existingSuggestions = getSuggestions(db, agent);
191
+ for (const existing of existingSuggestions) {
192
+ if (!activeRuleIds.has(existing.rule_id)) {
193
+ removeSuggestion(db, agent, existing.rule_id);
194
+ }
195
+ }
196
+ // Upsert active suggestions
197
+ for (const s of suggestions) {
198
+ upsertSuggestion(db, {
199
+ agent,
200
+ rule_id: s.ruleId,
201
+ severity: s.severity,
202
+ title: s.title,
203
+ detail: s.detail,
204
+ action: s.action ?? null,
205
+ created_at: now,
206
+ });
207
+ }
208
+ }
209
+ //# sourceMappingURL=rule-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-engine.js","sourceRoot":"","sources":["../../src/engines/rule-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,207 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import { resolveConfig, assertOpenClawExists } from "./core/config.js";
4
+ import { startDaemon } from "./daemon.js";
5
+ import { runStatus } from "./cli/commands/status.js";
6
+ import { runCost } from "./cli/commands/cost.js";
7
+ import { runSession } from "./cli/commands/session.js";
8
+ import { runCompacts } from "./cli/commands/compacts.js";
9
+ import { runContext } from "./cli/commands/context.js";
10
+ import { runSuggest } from "./cli/commands/suggest.js";
11
+ import { runMemoryList, runMemorySearch, runMemoryAdd, runMemoryEdit, runMemoryDelete, runMemorySaveCompact, } from "./cli/commands/memory.js";
12
+ const VERSION = "0.1.0";
13
+ const program = new Command();
14
+ program
15
+ .name("clawprobe")
16
+ .description("Context observability for OpenClaw agents")
17
+ .version(VERSION);
18
+ // --- start ---
19
+ program
20
+ .command("start")
21
+ .description("Start the background daemon (watches OpenClaw files)")
22
+ .option("--no-browser", "Do not open browser on start")
23
+ .option("--daemon-only", "Start daemon only, no web server")
24
+ .action(async () => {
25
+ const cfg = resolveConfig();
26
+ assertOpenClawExists(cfg);
27
+ await startDaemon(cfg);
28
+ });
29
+ // --- stop ---
30
+ program
31
+ .command("stop")
32
+ .description("Stop the running daemon")
33
+ .action(() => {
34
+ console.log("Use your process manager or Ctrl+C to stop the daemon.");
35
+ });
36
+ // --- status ---
37
+ program
38
+ .command("status")
39
+ .description("Current session status (tokens, model, compactions)")
40
+ .option("--agent <name>", "Target agent")
41
+ .option("--session <key>", "Target session key")
42
+ .option("--json", "Output as JSON")
43
+ .action(async (opts) => {
44
+ const cfg = resolveConfig();
45
+ assertOpenClawExists(cfg);
46
+ await runStatus(cfg, opts);
47
+ });
48
+ // --- cost ---
49
+ program
50
+ .command("cost")
51
+ .description("API cost summary")
52
+ .option("--day", "Today")
53
+ .option("--week", "Current week (default)")
54
+ .option("--month", "Current month")
55
+ .option("--all", "All time")
56
+ .option("--agent <name>", "Target agent")
57
+ .option("--json", "Output as JSON")
58
+ .action(async (opts) => {
59
+ const cfg = resolveConfig();
60
+ assertOpenClawExists(cfg);
61
+ await runCost(cfg, opts);
62
+ });
63
+ // --- session ---
64
+ const sessionCmd = program
65
+ .command("session [session-key]")
66
+ .description("Per-session cost and turn breakdown")
67
+ .option("--list", "List all sessions")
68
+ .option("--no-turns", "Hide turn-by-turn timeline")
69
+ .option("--agent <name>", "Target agent")
70
+ .option("--json", "Output as JSON")
71
+ .action(async (sessionKey, opts) => {
72
+ const cfg = resolveConfig();
73
+ assertOpenClawExists(cfg);
74
+ await runSession(cfg, sessionKey, opts);
75
+ });
76
+ // --- compacts ---
77
+ program
78
+ .command("compacts")
79
+ .description("Recent compaction events")
80
+ .option("--last <n>", "Number of events to show", "5")
81
+ .option("--agent <name>", "Target agent")
82
+ .option("--session <key>", "Filter by session")
83
+ .option("--show-messages", "Show full message content")
84
+ .option("--json", "Output as JSON")
85
+ .action(async (opts) => {
86
+ const cfg = resolveConfig();
87
+ assertOpenClawExists(cfg);
88
+ await runCompacts(cfg, { ...opts, last: parseInt(opts.last, 10) });
89
+ });
90
+ // --- context ---
91
+ program
92
+ .command("context")
93
+ .description("Context window composition analysis")
94
+ .option("--agent <name>", "Target agent")
95
+ .option("--json", "Output as JSON")
96
+ .action(async (opts) => {
97
+ const cfg = resolveConfig();
98
+ assertOpenClawExists(cfg);
99
+ await runContext(cfg, opts);
100
+ });
101
+ // --- memory ---
102
+ const memoryCmd = program
103
+ .command("memory")
104
+ .description("Memory management subcommands");
105
+ memoryCmd
106
+ .command("list")
107
+ .description("List all memory entries")
108
+ .option("--file <path>", "Target memory file")
109
+ .option("--agent <name>", "Target agent")
110
+ .option("--json", "Output as JSON")
111
+ .action(async (opts) => {
112
+ const cfg = resolveConfig();
113
+ await runMemoryList(cfg, opts);
114
+ });
115
+ memoryCmd
116
+ .command("search <query>")
117
+ .description("Search memory")
118
+ .option("--agent <name>", "Target agent")
119
+ .option("--limit <n>", "Max results", "10")
120
+ .option("--json", "Output as JSON")
121
+ .action(async (query, opts) => {
122
+ const cfg = resolveConfig();
123
+ await runMemorySearch(cfg, query, { ...opts, limit: parseInt(opts.limit, 10) });
124
+ });
125
+ memoryCmd
126
+ .command("add <content>")
127
+ .description("Add entry to memory")
128
+ .option("--file <path>", "Target memory file")
129
+ .option("--agent <name>", "Target agent")
130
+ .action(async (content, opts) => {
131
+ const cfg = resolveConfig();
132
+ await runMemoryAdd(cfg, content, opts);
133
+ });
134
+ memoryCmd
135
+ .command("edit <entry-id> [content]")
136
+ .description("Edit a memory entry (opens $EDITOR if content omitted)")
137
+ .option("--file <path>", "Target memory file")
138
+ .option("--agent <name>", "Target agent")
139
+ .action(async (entryId, content, opts) => {
140
+ const cfg = resolveConfig();
141
+ await runMemoryEdit(cfg, parseInt(entryId, 10), content, opts);
142
+ });
143
+ memoryCmd
144
+ .command("delete <entry-id>")
145
+ .description("Delete a memory entry")
146
+ .option("--file <path>", "Target memory file")
147
+ .option("--agent <name>", "Target agent")
148
+ .option("--yes", "Skip confirmation")
149
+ .action(async (entryId, opts) => {
150
+ const cfg = resolveConfig();
151
+ await runMemoryDelete(cfg, parseInt(entryId, 10), opts);
152
+ });
153
+ memoryCmd
154
+ .command("save-compact <compact-id>")
155
+ .description("Save compacted messages from a compact event to memory")
156
+ .option("--file <path>", "Target memory file")
157
+ .option("--agent <name>", "Target agent")
158
+ .action(async (compactId, opts) => {
159
+ const cfg = resolveConfig();
160
+ await runMemorySaveCompact(cfg, parseInt(compactId, 10), opts);
161
+ });
162
+ // --- suggest ---
163
+ program
164
+ .command("suggest")
165
+ .description("Optimization suggestions")
166
+ .option("--agent <name>", "Target agent")
167
+ .option("--severity <level>", "Filter: critical | warning | info")
168
+ .option("--dismiss <rule-id>", "Dismiss a suggestion")
169
+ .option("--reset-dismissed", "Un-dismiss all suggestions")
170
+ .option("--json", "Output as JSON")
171
+ .action(async (opts) => {
172
+ const cfg = resolveConfig();
173
+ assertOpenClawExists(cfg);
174
+ await runSuggest(cfg, {
175
+ agent: opts.agent,
176
+ severityFilter: opts.severity,
177
+ dismiss: opts.dismiss,
178
+ resetDismissed: opts.resetDismissed,
179
+ json: opts.json,
180
+ });
181
+ });
182
+ // --- config ---
183
+ program
184
+ .command("config")
185
+ .description("Show detected OpenClaw configuration")
186
+ .option("--json", "Output as JSON")
187
+ .action((opts) => {
188
+ const cfg = resolveConfig();
189
+ if (opts.json) {
190
+ console.log(JSON.stringify({ openclawDir: cfg.openclawDir, workspaceDir: cfg.workspaceDir, sessionsDir: cfg.sessionsDir, bootstrapMaxChars: cfg.bootstrapMaxChars, probeDir: cfg.probeDir, openclaw: cfg.openclaw }, null, 2));
191
+ }
192
+ else {
193
+ console.log(`OpenClaw dir: ${cfg.openclawDir}`);
194
+ console.log(`Workspace: ${cfg.workspaceDir}`);
195
+ console.log(`Sessions: ${cfg.sessionsDir}`);
196
+ console.log(`Bootstrap max: ${cfg.bootstrapMaxChars.toLocaleString()} chars`);
197
+ console.log(`probe.db: ${cfg.probeDir}/probe.db`);
198
+ const model = cfg.openclaw.models?.default;
199
+ if (model)
200
+ console.log(`Default model: ${model}`);
201
+ const engine = cfg.openclaw.plugins?.slots?.contextEngine;
202
+ if (engine)
203
+ console.log(`Context engine: ${engine}`);
204
+ }
205
+ });
206
+ program.parse(process.argv);
207
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "clawprobe",
3
+ "version": "0.1.0",
4
+ "description": "The missing observability layer for OpenClaw agents",
5
+ "keywords": ["openclaw", "ai-agent", "context", "observability", "llm"],
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "files": ["dist", "README.md"],
9
+ "bin": {
10
+ "clawprobe": "./dist/index.js"
11
+ },
12
+ "scripts": {
13
+ "prepublishOnly": "npm run build",
14
+ "build": "tsc",
15
+ "dev": "tsx watch src/index.ts",
16
+ "start": "node dist/index.js",
17
+ "test": "tsx --test test/**/*.test.ts",
18
+ "lint": "eslint src --ext .ts",
19
+ "typecheck": "tsc --noEmit"
20
+ },
21
+ "engines": {
22
+ "node": ">=22"
23
+ },
24
+ "dependencies": {
25
+ "chalk": "^5.3.0",
26
+ "chokidar": "^3.6.0",
27
+ "cli-table3": "^0.6.4",
28
+ "commander": "^12.1.0"
29
+ },
30
+ "devDependencies": {
31
+ "@types/node": "^22.0.0",
32
+ "tsx": "^4.19.0",
33
+ "typescript": "^5.5.4"
34
+ }
35
+ }