@iamsyr/agentmind 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.
- package/CHANGELOG.md +8 -0
- package/LICENSE +21 -0
- package/README.md +462 -0
- package/RELEASING.md +42 -0
- package/dist/adapters/cursor.d.ts +2 -0
- package/dist/adapters/cursor.d.ts.map +1 -0
- package/dist/adapters/cursor.js +39 -0
- package/dist/adapters/cursor.js.map +1 -0
- package/dist/adapters/index.d.ts +9 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +16 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/types.d.ts +24 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +66 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/adapters/windsurf.d.ts +2 -0
- package/dist/adapters/windsurf.d.ts.map +1 -0
- package/dist/adapters/windsurf.js +44 -0
- package/dist/adapters/windsurf.js.map +1 -0
- package/dist/bridge/conflict.d.ts +9 -0
- package/dist/bridge/conflict.d.ts.map +1 -0
- package/dist/bridge/conflict.js +38 -0
- package/dist/bridge/conflict.js.map +1 -0
- package/dist/bridge/index.d.ts +5 -0
- package/dist/bridge/index.d.ts.map +1 -0
- package/dist/bridge/index.js +3 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/bridge/state.d.ts +30 -0
- package/dist/bridge/state.d.ts.map +1 -0
- package/dist/bridge/state.js +130 -0
- package/dist/bridge/state.js.map +1 -0
- package/dist/cli/commands/agents.d.ts +2 -0
- package/dist/cli/commands/agents.d.ts.map +1 -0
- package/dist/cli/commands/agents.js +38 -0
- package/dist/cli/commands/agents.js.map +1 -0
- package/dist/cli/commands/annotate.d.ts +4 -0
- package/dist/cli/commands/annotate.d.ts.map +1 -0
- package/dist/cli/commands/annotate.js +116 -0
- package/dist/cli/commands/annotate.js.map +1 -0
- package/dist/cli/commands/behaviors.d.ts +6 -0
- package/dist/cli/commands/behaviors.d.ts.map +1 -0
- package/dist/cli/commands/behaviors.js +76 -0
- package/dist/cli/commands/behaviors.js.map +1 -0
- package/dist/cli/commands/bridge.d.ts +15 -0
- package/dist/cli/commands/bridge.d.ts.map +1 -0
- package/dist/cli/commands/bridge.js +75 -0
- package/dist/cli/commands/bridge.js.map +1 -0
- package/dist/cli/commands/health.d.ts +4 -0
- package/dist/cli/commands/health.d.ts.map +1 -0
- package/dist/cli/commands/health.js +382 -0
- package/dist/cli/commands/health.js.map +1 -0
- package/dist/cli/commands/hooks.d.ts +3 -0
- package/dist/cli/commands/hooks.d.ts.map +1 -0
- package/dist/cli/commands/hooks.js +59 -0
- package/dist/cli/commands/hooks.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +128 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/inject.d.ts +6 -0
- package/dist/cli/commands/inject.d.ts.map +1 -0
- package/dist/cli/commands/inject.js +84 -0
- package/dist/cli/commands/inject.js.map +1 -0
- package/dist/cli/commands/insights.d.ts +4 -0
- package/dist/cli/commands/insights.d.ts.map +1 -0
- package/dist/cli/commands/insights.js +124 -0
- package/dist/cli/commands/insights.js.map +1 -0
- package/dist/cli/commands/learn.d.ts +8 -0
- package/dist/cli/commands/learn.d.ts.map +1 -0
- package/dist/cli/commands/learn.js +121 -0
- package/dist/cli/commands/learn.js.map +1 -0
- package/dist/cli/commands/log-behavior.d.ts +14 -0
- package/dist/cli/commands/log-behavior.d.ts.map +1 -0
- package/dist/cli/commands/log-behavior.js +50 -0
- package/dist/cli/commands/log-behavior.js.map +1 -0
- package/dist/cli/commands/overlay.d.ts +10 -0
- package/dist/cli/commands/overlay.d.ts.map +1 -0
- package/dist/cli/commands/overlay.js +303 -0
- package/dist/cli/commands/overlay.js.map +1 -0
- package/dist/cli/commands/pull.d.ts +4 -0
- package/dist/cli/commands/pull.d.ts.map +1 -0
- package/dist/cli/commands/pull.js +93 -0
- package/dist/cli/commands/pull.js.map +1 -0
- package/dist/cli/commands/push.d.ts +5 -0
- package/dist/cli/commands/push.d.ts.map +1 -0
- package/dist/cli/commands/push.js +71 -0
- package/dist/cli/commands/push.js.map +1 -0
- package/dist/cli/commands/scan.d.ts +5 -0
- package/dist/cli/commands/scan.d.ts.map +1 -0
- package/dist/cli/commands/scan.js +134 -0
- package/dist/cli/commands/scan.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +2 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +17 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/share.d.ts +5 -0
- package/dist/cli/commands/share.d.ts.map +1 -0
- package/dist/cli/commands/share.js +97 -0
- package/dist/cli/commands/share.js.map +1 -0
- package/dist/cli/commands/status.d.ts +2 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +167 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +6 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +60 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/template.d.ts +5 -0
- package/dist/cli/commands/template.d.ts.map +1 -0
- package/dist/cli/commands/template.js +98 -0
- package/dist/cli/commands/template.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +172 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils.d.ts +6 -0
- package/dist/cli/utils.d.ts.map +1 -0
- package/dist/cli/utils.js +49 -0
- package/dist/cli/utils.js.map +1 -0
- package/dist/hooks/claude.d.ts +6 -0
- package/dist/hooks/claude.d.ts.map +1 -0
- package/dist/hooks/claude.js +189 -0
- package/dist/hooks/claude.js.map +1 -0
- package/dist/hooks/codex.d.ts +6 -0
- package/dist/hooks/codex.d.ts.map +1 -0
- package/dist/hooks/codex.js +120 -0
- package/dist/hooks/codex.js.map +1 -0
- package/dist/hooks/index.d.ts +5 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +4 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/template.d.ts +5 -0
- package/dist/hooks/template.d.ts.map +1 -0
- package/dist/hooks/template.js +176 -0
- package/dist/hooks/template.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/learn/analyzer.d.ts +11 -0
- package/dist/learn/analyzer.d.ts.map +1 -0
- package/dist/learn/analyzer.js +145 -0
- package/dist/learn/analyzer.js.map +1 -0
- package/dist/learn/generator.d.ts +12 -0
- package/dist/learn/generator.d.ts.map +1 -0
- package/dist/learn/generator.js +37 -0
- package/dist/learn/generator.js.map +1 -0
- package/dist/mcp/index.d.ts +2 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +2 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +2 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +325 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/router/index.d.ts +3 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +44 -0
- package/dist/router/index.js.map +1 -0
- package/dist/scanner/classify.d.ts +6 -0
- package/dist/scanner/classify.d.ts.map +1 -0
- package/dist/scanner/classify.js +101 -0
- package/dist/scanner/classify.js.map +1 -0
- package/dist/scanner/graph.d.ts +3 -0
- package/dist/scanner/graph.d.ts.map +1 -0
- package/dist/scanner/graph.js +104 -0
- package/dist/scanner/graph.js.map +1 -0
- package/dist/scanner/index.d.ts +6 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/index.js +23 -0
- package/dist/scanner/index.js.map +1 -0
- package/dist/scanner/patterns.d.ts +3 -0
- package/dist/scanner/patterns.d.ts.map +1 -0
- package/dist/scanner/patterns.js +179 -0
- package/dist/scanner/patterns.js.map +1 -0
- package/dist/store/db.d.ts +21 -0
- package/dist/store/db.d.ts.map +1 -0
- package/dist/store/db.js +55 -0
- package/dist/store/db.js.map +1 -0
- package/dist/store/index.d.ts +3 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +3 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/jsonl.d.ts +6 -0
- package/dist/store/jsonl.d.ts.map +1 -0
- package/dist/store/jsonl.js +55 -0
- package/dist/store/jsonl.js.map +1 -0
- package/dist/store/schema.d.ts +32 -0
- package/dist/store/schema.d.ts.map +1 -0
- package/dist/store/schema.js +210 -0
- package/dist/store/schema.js.map +1 -0
- package/dist/templates/go.d.ts +3 -0
- package/dist/templates/go.d.ts.map +1 -0
- package/dist/templates/go.js +35 -0
- package/dist/templates/go.js.map +1 -0
- package/dist/templates/index.d.ts +13 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +98 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/nextjs.d.ts +3 -0
- package/dist/templates/nextjs.d.ts.map +1 -0
- package/dist/templates/nextjs.js +53 -0
- package/dist/templates/nextjs.js.map +1 -0
- package/dist/templates/python.d.ts +3 -0
- package/dist/templates/python.d.ts.map +1 -0
- package/dist/templates/python.js +41 -0
- package/dist/templates/python.js.map +1 -0
- package/dist/templates/react-native.d.ts +3 -0
- package/dist/templates/react-native.d.ts.map +1 -0
- package/dist/templates/react-native.js +35 -0
- package/dist/templates/react-native.js.map +1 -0
- package/dist/templates/registry.d.ts +24 -0
- package/dist/templates/registry.d.ts.map +1 -0
- package/dist/templates/registry.js +2 -0
- package/dist/templates/registry.js.map +1 -0
- package/dist/templates/rust.d.ts +3 -0
- package/dist/templates/rust.d.ts.map +1 -0
- package/dist/templates/rust.js +41 -0
- package/dist/templates/rust.js.map +1 -0
- package/dist/templates/sst.d.ts +3 -0
- package/dist/templates/sst.d.ts.map +1 -0
- package/dist/templates/sst.js +35 -0
- package/dist/templates/sst.js.map +1 -0
- package/dist/types/index.d.ts +92 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
import { ContextStore } from "../../store/schema.js";
|
|
5
|
+
/**
|
|
6
|
+
* Internal command: log agent behavior from hooks.
|
|
7
|
+
* Called by post-tool-use and post-commit hooks.
|
|
8
|
+
* Exits silently unless AGENTMIND_DEBUG is set.
|
|
9
|
+
*/
|
|
10
|
+
export async function logBehavior(options) {
|
|
11
|
+
const projectRoot = process.cwd();
|
|
12
|
+
const storePath = path.join(projectRoot, ".agentmind", "context.db");
|
|
13
|
+
if (!fs.existsSync(storePath)) {
|
|
14
|
+
process.exit(0);
|
|
15
|
+
}
|
|
16
|
+
const store = new ContextStore(projectRoot);
|
|
17
|
+
try {
|
|
18
|
+
const filePath = options.file ? resolve(projectRoot, options.file) : null;
|
|
19
|
+
const success = options.success !== "false";
|
|
20
|
+
const action = options.tool
|
|
21
|
+
? `tool:${options.tool}`
|
|
22
|
+
: options.event
|
|
23
|
+
? options.event
|
|
24
|
+
: "unknown";
|
|
25
|
+
const metadata = JSON.stringify({
|
|
26
|
+
tool: options.tool ?? null,
|
|
27
|
+
event: options.event ?? null,
|
|
28
|
+
});
|
|
29
|
+
store.getDb().run("INSERT INTO behavior_log (agent_type, action, file_path, success, metadata) VALUES (?, ?, ?, ?, ?)", [
|
|
30
|
+
options.event === "commit" ? "git" : "agent",
|
|
31
|
+
action,
|
|
32
|
+
filePath,
|
|
33
|
+
success ? 1 : 0,
|
|
34
|
+
metadata,
|
|
35
|
+
]);
|
|
36
|
+
if (process.env.AGENTMIND_DEBUG) {
|
|
37
|
+
console.error(`[agentmind] logged behavior: ${action} on ${filePath ?? "(unknown)"} success=${success}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
if (process.env.AGENTMIND_DEBUG) {
|
|
42
|
+
console.error("[agentmind] log-behavior error:", error);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
store.close();
|
|
47
|
+
}
|
|
48
|
+
process.exit(0);
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=log-behavior.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-behavior.js","sourceRoot":"","sources":["../../../src/cli/commands/log-behavior.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AASpD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA2B;IAC3D,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,CAAA;IAEpE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,CAAA;IAE3C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACzE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,OAAO,CAAA;QAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI;YACzB,CAAC,CAAC,QAAQ,OAAO,CAAC,IAAI,EAAE;YACxB,CAAC,CAAC,OAAO,CAAC,KAAK;gBACb,CAAC,CAAC,OAAO,CAAC,KAAK;gBACf,CAAC,CAAC,SAAS,CAAA;QAEf,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;SAC7B,CAAC,CAAA;QAEF,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CACf,oGAAoG,EACpG;YACE,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO;YAC5C,MAAM;YACN,QAAQ;YACR,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACf,QAAQ;SACT,CACF,CAAA;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,gCAAgC,MAAM,OAAO,QAAQ,IAAI,WAAW,YAAY,OAAO,EAAE,CAAC,CAAA;QAC1G,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAA;QACzD,CAAC;IACH,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,KAAK,EAAE,CAAA;IACf,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/overlay.ts"],"names":[],"mappings":"AAoBA,UAAU,cAAc;IACtB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED,wBAAsB,OAAO,CAAC,IAAI,GAAE,cAAmB,iBAqKtD"}
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import readline from "node:readline";
|
|
5
|
+
import { ContextStore } from "../../store/schema.js";
|
|
6
|
+
import { classify } from "../../scanner/classify.js";
|
|
7
|
+
import { appendJSONL } from "../../store/jsonl.js";
|
|
8
|
+
import { formatBytes as formatSize, validatePriority } from "../utils.js";
|
|
9
|
+
export async function overlay(opts = {}) {
|
|
10
|
+
const cwd = process.cwd();
|
|
11
|
+
const agentmindDir = path.join(cwd, ".agentmind");
|
|
12
|
+
if (!fs.existsSync(agentmindDir)) {
|
|
13
|
+
console.error(chalk.red("\n agentmind is not initialized in this project."));
|
|
14
|
+
console.error(chalk.gray(" Run `agentmind init` first.\n"));
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
console.log("");
|
|
18
|
+
console.log(chalk.dim("─").repeat(54));
|
|
19
|
+
console.log(chalk.gray(" Scanning for context gaps..."));
|
|
20
|
+
// Get all files from scanner
|
|
21
|
+
const { files, classifications } = await classify(cwd);
|
|
22
|
+
// Get existing context from store
|
|
23
|
+
const store = new ContextStore(cwd);
|
|
24
|
+
const contextMap = new Map();
|
|
25
|
+
try {
|
|
26
|
+
const allEntries = store.getEntries();
|
|
27
|
+
for (const entry of allEntries) {
|
|
28
|
+
if (!entry.path)
|
|
29
|
+
continue;
|
|
30
|
+
const existing = contextMap.get(entry.path) || { rules: 0, annotations: 0, behaviors: 0, hasFailures: false };
|
|
31
|
+
existing.rules += entry.rules.length;
|
|
32
|
+
existing.annotations += entry.annotations.length;
|
|
33
|
+
existing.behaviors += entry.behaviors.length;
|
|
34
|
+
contextMap.set(entry.path, existing);
|
|
35
|
+
}
|
|
36
|
+
// Check for failed behaviors per file
|
|
37
|
+
const failedBehaviors = store.getBehaviors({ success: false });
|
|
38
|
+
for (const b of failedBehaviors) {
|
|
39
|
+
if (b.path) {
|
|
40
|
+
const existing = contextMap.get(b.path) || { rules: 0, annotations: 0, behaviors: 0, hasFailures: false };
|
|
41
|
+
existing.hasFailures = true;
|
|
42
|
+
contextMap.set(b.path, existing);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
store.close();
|
|
48
|
+
}
|
|
49
|
+
// Build list of gaps
|
|
50
|
+
const gaps = [];
|
|
51
|
+
for (const file of files) {
|
|
52
|
+
const classification = classifications.get(file.path) || "data";
|
|
53
|
+
const context = contextMap.get(file.path) || { rules: 0, annotations: 0, behaviors: 0, hasFailures: false };
|
|
54
|
+
// Filter by directory if specified
|
|
55
|
+
if (opts.dir) {
|
|
56
|
+
const dirPattern = opts.dir.replace(/\\/g, "/").replace(/^\.\//, "").replace(/\/$/, "");
|
|
57
|
+
if (!file.path.startsWith(dirPattern + "/") && file.path !== dirPattern) {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const hasContext = context.rules > 0 || context.annotations > 0 || context.behaviors > 0;
|
|
62
|
+
// Apply filters
|
|
63
|
+
if (opts.failed && !context.hasFailures)
|
|
64
|
+
continue;
|
|
65
|
+
if (opts.unclassified && hasContext)
|
|
66
|
+
continue;
|
|
67
|
+
if (!opts.all && !opts.unclassified && !opts.failed && hasContext)
|
|
68
|
+
continue;
|
|
69
|
+
gaps.push({
|
|
70
|
+
path: file.path,
|
|
71
|
+
classification,
|
|
72
|
+
size: file.size,
|
|
73
|
+
rules: context.rules,
|
|
74
|
+
annotations: context.annotations,
|
|
75
|
+
behaviors: context.behaviors,
|
|
76
|
+
hasFailures: context.hasFailures,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
// Sort: source files first, then by path
|
|
80
|
+
gaps.sort((a, b) => {
|
|
81
|
+
if (a.classification === "source" && b.classification !== "source")
|
|
82
|
+
return -1;
|
|
83
|
+
if (a.classification !== "source" && b.classification === "source")
|
|
84
|
+
return 1;
|
|
85
|
+
return a.path.localeCompare(b.path);
|
|
86
|
+
});
|
|
87
|
+
// JSON output
|
|
88
|
+
if (opts.json) {
|
|
89
|
+
console.log(JSON.stringify(gaps, null, 2));
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
if (gaps.length === 0) {
|
|
93
|
+
console.log("");
|
|
94
|
+
console.log(chalk.green(" No context gaps found."));
|
|
95
|
+
if (!opts.all) {
|
|
96
|
+
console.log(chalk.gray(" Run with --all to see all files."));
|
|
97
|
+
}
|
|
98
|
+
console.log("");
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
console.log(chalk.gray(` Found ${chalk.white(gaps.length)} file${gaps.length === 1 ? "" : ""}${opts.unclassified ? " without context" : ""}:`));
|
|
102
|
+
console.log("");
|
|
103
|
+
// Track session progress
|
|
104
|
+
let annotatedCount = 0;
|
|
105
|
+
let skippedCount = 0;
|
|
106
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
107
|
+
const question = (prompt) => new Promise((res) => rl.question(prompt, (ans) => res(ans)));
|
|
108
|
+
try {
|
|
109
|
+
// Main loop
|
|
110
|
+
while (gaps.length > 0) {
|
|
111
|
+
displayFileList(gaps, annotatedCount);
|
|
112
|
+
const selection = await question(` Select a file to annotate (1-${gaps.length}) or 'q' to quit: `);
|
|
113
|
+
if (selection.trim().toLowerCase() === "q") {
|
|
114
|
+
console.log("");
|
|
115
|
+
console.log(chalk.gray(` Session ended. ${chalk.white(annotatedCount)} annotated, ${chalk.white(skippedCount)} skipped.`));
|
|
116
|
+
console.log("");
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
const index = parseInt(selection, 10) - 1;
|
|
120
|
+
if (isNaN(index) || index < 0 || index >= gaps.length) {
|
|
121
|
+
console.log(chalk.yellow("\n Invalid selection.\n"));
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
const selected = gaps[index];
|
|
125
|
+
// Show file detail and get annotation
|
|
126
|
+
const result = await annotateFile(selected, cwd, rl, question);
|
|
127
|
+
if (result === "quit") {
|
|
128
|
+
console.log("");
|
|
129
|
+
console.log(chalk.gray(` Session ended. ${chalk.white(annotatedCount)} annotated, ${chalk.white(skippedCount)} skipped.`));
|
|
130
|
+
console.log("");
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
if (result === "annotated") {
|
|
134
|
+
annotatedCount++;
|
|
135
|
+
gaps.splice(index, 1);
|
|
136
|
+
}
|
|
137
|
+
else if (result === "skipped") {
|
|
138
|
+
skippedCount++;
|
|
139
|
+
gaps.splice(index, 1);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
if (gaps.length === 0 && (annotatedCount > 0 || skippedCount > 0)) {
|
|
143
|
+
console.log("");
|
|
144
|
+
console.log(chalk.green(" All files processed."));
|
|
145
|
+
console.log(chalk.gray(` Session: ${chalk.white(annotatedCount)} annotated, ${chalk.white(skippedCount)} skipped.`));
|
|
146
|
+
console.log("");
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
finally {
|
|
150
|
+
rl.close();
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
function displayFileList(gaps, annotatedCount) {
|
|
154
|
+
console.log(chalk.dim("─").repeat(54));
|
|
155
|
+
if (annotatedCount > 0) {
|
|
156
|
+
console.log(chalk.gray(` Progress: ${chalk.white(annotatedCount)} annotated this session`));
|
|
157
|
+
console.log("");
|
|
158
|
+
}
|
|
159
|
+
const displayCount = Math.min(gaps.length, 10);
|
|
160
|
+
for (let i = 0; i < displayCount; i++) {
|
|
161
|
+
const gap = gaps[i];
|
|
162
|
+
const num = chalk.gray(`${String(i + 1).padStart(2)}.`);
|
|
163
|
+
const clsColor = classificationColor(gap.classification);
|
|
164
|
+
const sizeStr = formatSize(gap.size);
|
|
165
|
+
let contextStr = "";
|
|
166
|
+
if (gap.rules > 0 || gap.annotations > 0) {
|
|
167
|
+
contextStr = chalk.gray(` - ${gap.rules}r, ${gap.annotations}a`);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
contextStr = chalk.gray(" - 0 rules, 0 annotations");
|
|
171
|
+
}
|
|
172
|
+
if (gap.hasFailures) {
|
|
173
|
+
contextStr += chalk.red(" !failures");
|
|
174
|
+
}
|
|
175
|
+
console.log(` ${num} ${clsColor(gap.path.padEnd(32))} ${chalk.gray(sizeStr)}${contextStr}`);
|
|
176
|
+
}
|
|
177
|
+
if (gaps.length > displayCount) {
|
|
178
|
+
console.log(chalk.gray(` ... and ${gaps.length - displayCount} more`));
|
|
179
|
+
}
|
|
180
|
+
console.log("");
|
|
181
|
+
}
|
|
182
|
+
async function annotateFile(gap, cwd, rl, question) {
|
|
183
|
+
console.log("");
|
|
184
|
+
console.log(chalk.dim("─").repeat(54));
|
|
185
|
+
console.log(chalk.cyan.bold(` ${gap.path}`));
|
|
186
|
+
console.log(chalk.dim("─").repeat(54));
|
|
187
|
+
console.log("");
|
|
188
|
+
// File info
|
|
189
|
+
console.log(` Classification: ${classificationColor(gap.classification)(gap.classification)}`);
|
|
190
|
+
console.log(` Size: ${chalk.gray(formatSize(gap.size))}`);
|
|
191
|
+
const hasContext = gap.rules > 0 || gap.annotations > 0 || gap.behaviors > 0;
|
|
192
|
+
console.log(` Existing context: ${hasContext ? chalk.yellow("partial") : chalk.gray("none")}`);
|
|
193
|
+
// Detect patterns in file
|
|
194
|
+
const patterns = await detectFilePatterns(gap.path, cwd);
|
|
195
|
+
if (patterns.length > 0) {
|
|
196
|
+
console.log("");
|
|
197
|
+
console.log(chalk.gray(" Detected patterns:"));
|
|
198
|
+
for (const p of patterns.slice(0, 5)) {
|
|
199
|
+
console.log(` ${chalk.gray("-")} ${p}`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
console.log("");
|
|
203
|
+
// Get annotation text
|
|
204
|
+
const annotationText = await question(" Enter annotation (or 's' to skip, 'q' to quit):\n > ");
|
|
205
|
+
if (annotationText.trim().toLowerCase() === "q") {
|
|
206
|
+
return "quit";
|
|
207
|
+
}
|
|
208
|
+
if (annotationText.trim().toLowerCase() === "s" || !annotationText.trim()) {
|
|
209
|
+
console.log(chalk.gray("\n Skipped.\n"));
|
|
210
|
+
return "skipped";
|
|
211
|
+
}
|
|
212
|
+
// Get priority
|
|
213
|
+
const priorityInput = await question(` Priority ${chalk.gray("(critical/high/normal/low)")} [normal]: `);
|
|
214
|
+
const priority = validatePriority(priorityInput.trim() || "normal");
|
|
215
|
+
// Save annotation
|
|
216
|
+
const annotation = {
|
|
217
|
+
id: `ann-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
|
|
218
|
+
path: gap.path,
|
|
219
|
+
text: annotationText.trim(),
|
|
220
|
+
author: "user",
|
|
221
|
+
created: Date.now(),
|
|
222
|
+
};
|
|
223
|
+
const saveStore = new ContextStore(cwd);
|
|
224
|
+
try {
|
|
225
|
+
saveStore.addAnnotation(annotation);
|
|
226
|
+
saveStore.setMeta(`priority:${annotation.id}`, priority);
|
|
227
|
+
}
|
|
228
|
+
finally {
|
|
229
|
+
saveStore.close();
|
|
230
|
+
}
|
|
231
|
+
// Append to JSONL
|
|
232
|
+
try {
|
|
233
|
+
const jsonlPath = path.join(cwd, ".agentmind", "context.jsonl");
|
|
234
|
+
appendJSONL(jsonlPath, {
|
|
235
|
+
id: annotation.id,
|
|
236
|
+
path: gap.path,
|
|
237
|
+
classification: "source",
|
|
238
|
+
rules: [],
|
|
239
|
+
annotations: [annotation],
|
|
240
|
+
behaviors: [],
|
|
241
|
+
lastScanned: Date.now(),
|
|
242
|
+
hash: "",
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
catch {
|
|
246
|
+
// JSONL append failed - db is the source of truth
|
|
247
|
+
}
|
|
248
|
+
console.log("");
|
|
249
|
+
console.log(chalk.green(" Annotation saved for") + " " + chalk.cyan(gap.path));
|
|
250
|
+
console.log("");
|
|
251
|
+
return "annotated";
|
|
252
|
+
}
|
|
253
|
+
async function detectFilePatterns(filePath, cwd) {
|
|
254
|
+
const patterns = [];
|
|
255
|
+
const fullPath = path.join(cwd, filePath);
|
|
256
|
+
try {
|
|
257
|
+
const content = await fs.promises.readFile(fullPath, "utf-8");
|
|
258
|
+
// Pattern detectors
|
|
259
|
+
if (/process\.cwd\(\)/.test(content)) {
|
|
260
|
+
patterns.push("References process.cwd()");
|
|
261
|
+
}
|
|
262
|
+
if (/require\(['"]fs['"]\)/.test(content) || /from\s+['"]node:fs['"]/.test(content) || /import.*['"]fs['"]/.test(content)) {
|
|
263
|
+
patterns.push("Uses fs module heavily");
|
|
264
|
+
}
|
|
265
|
+
if (/child_process/.test(content)) {
|
|
266
|
+
patterns.push("Spawns child processes");
|
|
267
|
+
}
|
|
268
|
+
if (/process\.env/.test(content)) {
|
|
269
|
+
const envMatches = content.match(/process\.env\.(\w+)/g);
|
|
270
|
+
if (envMatches) {
|
|
271
|
+
const vars = [...new Set(envMatches.map(m => m.replace("process.env.", "")))].slice(0, 4);
|
|
272
|
+
patterns.push(`Uses env vars: ${vars.join(", ")}`);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
if (/async\s+\w+\s*\(|async\s*\(/.test(content)) {
|
|
276
|
+
const asyncCount = (content.match(/async\s+\w+\s*\(/g) || []).length;
|
|
277
|
+
if (asyncCount >= 3) {
|
|
278
|
+
patterns.push(`${asyncCount} async functions`);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
if (/export\s+(default\s+)?function|export\s+(default\s+)?class|export\s+const/.test(content)) {
|
|
282
|
+
const exportCount = (content.match(/export\s+(default\s+)?(function|class|const)/g) || []).length;
|
|
283
|
+
if (exportCount >= 3) {
|
|
284
|
+
patterns.push(`${exportCount} exports`);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
catch {
|
|
289
|
+
// File read failed, skip patterns
|
|
290
|
+
}
|
|
291
|
+
return patterns;
|
|
292
|
+
}
|
|
293
|
+
function classificationColor(cls) {
|
|
294
|
+
switch (cls) {
|
|
295
|
+
case "source": return chalk.cyan;
|
|
296
|
+
case "config": return chalk.yellow;
|
|
297
|
+
case "test": return chalk.green;
|
|
298
|
+
case "docs": return chalk.blue;
|
|
299
|
+
case "data": return chalk.magenta;
|
|
300
|
+
default: return chalk.gray;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
//# sourceMappingURL=overlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay.js","sourceRoot":"","sources":["../../../src/cli/commands/overlay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/pull.ts"],"names":[],"mappings":"AAQA,wBAAsB,IAAI,CAAC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkFnE"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { execSync } from "node:child_process";
|
|
3
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { ContextStore } from "../../store/schema.js";
|
|
6
|
+
import { importJSONL } from "../../store/jsonl.js";
|
|
7
|
+
import { isGitRepo } from "../utils.js";
|
|
8
|
+
export async function pull(opts) {
|
|
9
|
+
const root = process.cwd();
|
|
10
|
+
const dbPath = join(root, ".agentmind", "context.db");
|
|
11
|
+
const jsonlPath = join(root, ".agentmind", "context.jsonl");
|
|
12
|
+
if (!existsSync(dbPath)) {
|
|
13
|
+
console.log(chalk.yellow("No agentmind store found. Run `agentmind init` first."));
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
// git pull first if in a git repo
|
|
17
|
+
if (isGitRepo(root)) {
|
|
18
|
+
try {
|
|
19
|
+
const out = execSync("git pull", { cwd: root, encoding: "utf-8" }).trim();
|
|
20
|
+
console.log(chalk.dim(out || "Already up to date."));
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
const msg = err instanceof Error ? err.message.split("\n")[0] : "git pull failed";
|
|
24
|
+
console.log(chalk.yellow(`Git pull failed: ${msg}`));
|
|
25
|
+
console.log(chalk.dim("Continuing with local context.jsonl..."));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (!existsSync(jsonlPath)) {
|
|
29
|
+
console.log(chalk.yellow("No context JSONL found. Nothing to import."));
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const jsonl = readFileSync(jsonlPath, "utf-8");
|
|
33
|
+
if (!jsonl.trim()) {
|
|
34
|
+
console.log(chalk.dim("Context JSONL is empty."));
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const parsed = parseJsonlEntries(jsonl);
|
|
38
|
+
if (parsed.validCount === 0) {
|
|
39
|
+
console.log(chalk.red("Context JSONL contains no valid entries. Import aborted."));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (parsed.invalidCount > 0) {
|
|
43
|
+
console.log(chalk.yellow(`Skipped ${parsed.invalidCount} malformed JSONL line${parsed.invalidCount !== 1 ? "s" : ""}.`));
|
|
44
|
+
}
|
|
45
|
+
const store = new ContextStore(root);
|
|
46
|
+
const db = store.getDb();
|
|
47
|
+
const before = db.query("SELECT COUNT(*) as c FROM context_entries").get().c;
|
|
48
|
+
const incomingIds = parsed.ids;
|
|
49
|
+
const existingIds = new Set(db.query("SELECT id FROM context_entries").all().map((r) => r.id));
|
|
50
|
+
const skipped = incomingIds.filter((id) => existingIds.has(id)).length;
|
|
51
|
+
const newCount = incomingIds.length - skipped;
|
|
52
|
+
if (newCount === 0 && !opts.force) {
|
|
53
|
+
console.log(chalk.green("Context is already in sync."));
|
|
54
|
+
store.close();
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
let removed = 0;
|
|
58
|
+
let imported = 0;
|
|
59
|
+
if (opts.force) {
|
|
60
|
+
removed = before;
|
|
61
|
+
db.run("DELETE FROM context_entries");
|
|
62
|
+
importJSONL(store, jsonl);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
importJSONL(store, jsonl);
|
|
66
|
+
}
|
|
67
|
+
const after = db.query("SELECT COUNT(*) as c FROM context_entries").get().c;
|
|
68
|
+
imported = opts.force ? after : after - before;
|
|
69
|
+
store.close();
|
|
70
|
+
console.log(chalk.green(`Pulled ${imported > 0 ? imported : 0} new entries, ${skipped} existing, ${removed} removed`));
|
|
71
|
+
console.log(chalk.dim(`Local store: ${after} entries`));
|
|
72
|
+
}
|
|
73
|
+
function parseJsonlEntries(jsonl) {
|
|
74
|
+
const ids = [];
|
|
75
|
+
let validCount = 0;
|
|
76
|
+
let invalidCount = 0;
|
|
77
|
+
for (const line of jsonl.split("\n")) {
|
|
78
|
+
if (!line.trim())
|
|
79
|
+
continue;
|
|
80
|
+
try {
|
|
81
|
+
const parsed = JSON.parse(line);
|
|
82
|
+
validCount++;
|
|
83
|
+
if (typeof parsed.id === "number" && Number.isInteger(parsed.id) && parsed.id >= 0) {
|
|
84
|
+
ids.push(parsed.id);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
invalidCount++;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return { ids, validCount, invalidCount };
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=pull.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/cli/commands/pull.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/push.ts"],"names":[],"mappings":"AAQA,wBAAsB,IAAI,CAAC,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiEtF"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { execSync, execFileSync } from "node:child_process";
|
|
3
|
+
import { existsSync, writeFileSync, readFileSync } from "node:fs";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { ContextStore } from "../../store/schema.js";
|
|
6
|
+
import { exportJSONL } from "../../store/jsonl.js";
|
|
7
|
+
import { isGitRepo } from "../utils.js";
|
|
8
|
+
export async function push(opts) {
|
|
9
|
+
const root = process.cwd();
|
|
10
|
+
const dbPath = join(root, ".agentmind", "context.db");
|
|
11
|
+
const jsonlPath = join(root, ".agentmind", "context.jsonl");
|
|
12
|
+
if (!existsSync(dbPath)) {
|
|
13
|
+
console.log(chalk.yellow("No agentmind store found. Run `agentmind init` first."));
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const store = new ContextStore(root);
|
|
17
|
+
const db = store.getDb();
|
|
18
|
+
const totalRows = db.query("SELECT COUNT(*) as c FROM context_entries").get().c;
|
|
19
|
+
if (totalRows === 0) {
|
|
20
|
+
console.log(chalk.dim("No context entries to push."));
|
|
21
|
+
store.close();
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const before = existsSync(jsonlPath) ? readFileSync(jsonlPath, "utf-8") : "";
|
|
25
|
+
const after = exportJSONL(store);
|
|
26
|
+
store.close();
|
|
27
|
+
if (before === after) {
|
|
28
|
+
console.log(chalk.green("Context is already in sync."));
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
writeFileSync(jsonlPath, after, "utf-8");
|
|
32
|
+
const lineCount = after.trim().split("\n").filter(Boolean).length;
|
|
33
|
+
console.log(chalk.green(`Pushed ${lineCount} entries to .agentmind/context.jsonl`));
|
|
34
|
+
if (!isGitRepo(root)) {
|
|
35
|
+
console.log(chalk.dim("Not a git repository. JSONL export is local only."));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
const status = execSync("git status --porcelain .agentmind/context.jsonl", { cwd: root, encoding: "utf-8" }).trim();
|
|
40
|
+
if (!status) {
|
|
41
|
+
console.log(chalk.green("Context is already in sync."));
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const msg = opts.message ?? "agentmind: update context";
|
|
45
|
+
execFileSync("git", ["add", ".agentmind/context.jsonl"], { cwd: root, stdio: "pipe" });
|
|
46
|
+
execFileSync("git", ["commit", "-m", msg], { cwd: root, stdio: "pipe" });
|
|
47
|
+
console.log(chalk.dim(`Committed as: "${msg}"`));
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
console.log(chalk.yellow(`Git commit failed: ${summarizeExecError(err)}`));
|
|
51
|
+
console.log(chalk.dim("JSONL file is updated locally but was not committed."));
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (opts.remote) {
|
|
55
|
+
try {
|
|
56
|
+
execSync("git push", { cwd: root, stdio: "pipe" });
|
|
57
|
+
console.log(chalk.green("Pushed to remote."));
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
console.log(chalk.yellow(`Git push failed: ${summarizeExecError(err)}`));
|
|
61
|
+
console.log(chalk.dim("Commit succeeded locally but was not pushed."));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function summarizeExecError(err) {
|
|
66
|
+
if (err instanceof Error) {
|
|
67
|
+
return err.message.split("\n")[0];
|
|
68
|
+
}
|
|
69
|
+
return "command failed";
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=push.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../../src/cli/commands/push.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/scan.ts"],"names":[],"mappings":"AAcA,wBAAsB,IAAI,CAAC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,iBA8FnE"}
|