@goondocks/myco 0.2.14 → 0.3.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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/commands/init.md +33 -22
- package/dist/{chunk-BXFS4PCJ.js → chunk-2QEJKG7R.js} +2 -2
- package/dist/{chunk-MAFUTKOZ.js → chunk-2TKJPRZL.js} +2 -2
- package/dist/chunk-5EZ7QF6J.js +96 -0
- package/dist/chunk-5EZ7QF6J.js.map +1 -0
- package/dist/chunk-6FQISQNA.js +61 -0
- package/dist/chunk-6FQISQNA.js.map +1 -0
- package/dist/{chunk-S4WBXXO6.js → chunk-BMJX2IDQ.js} +2 -2
- package/dist/chunk-EF4JVH24.js +7299 -0
- package/dist/chunk-EF4JVH24.js.map +1 -0
- package/dist/{chunk-YXZEP5U6.js → chunk-ISCT2SI6.js} +11 -7301
- package/dist/chunk-ISCT2SI6.js.map +1 -0
- package/dist/{chunk-6C26YFOA.js → chunk-N6IAW33G.js} +248 -4306
- package/dist/chunk-N6IAW33G.js.map +1 -0
- package/dist/{chunk-C2YPBQQM.js → chunk-NTYYYC32.js} +3 -3
- package/dist/{chunk-NKJIZSPD.js → chunk-P2Q77C5F.js} +3 -3
- package/dist/chunk-PAUPHPOC.js +111 -0
- package/dist/chunk-PAUPHPOC.js.map +1 -0
- package/dist/chunk-PZUWP5VK.js +44 -0
- package/dist/{chunk-O5VSPHDL.js → chunk-Q7BEFSOV.js} +3 -40
- package/dist/{chunk-O5VSPHDL.js.map → chunk-Q7BEFSOV.js.map} +1 -1
- package/dist/chunk-QQWUV3TC.js +3691 -0
- package/dist/chunk-QQWUV3TC.js.map +1 -0
- package/dist/chunk-RGVBGTD6.js +21 -0
- package/dist/chunk-RGVBGTD6.js.map +1 -0
- package/dist/chunk-SAKJMNSR.js +50 -0
- package/dist/chunk-SAKJMNSR.js.map +1 -0
- package/dist/{chunk-UUFDD2FB.js → chunk-TJJRIVZ7.js} +2 -2
- package/dist/chunk-XQXXF6MU.js +96 -0
- package/dist/chunk-XQXXF6MU.js.map +1 -0
- package/dist/chunk-XW3OL55U.js +160 -0
- package/dist/chunk-XW3OL55U.js.map +1 -0
- package/dist/cli-ZHUR53CS.js +76 -0
- package/dist/cli-ZHUR53CS.js.map +1 -0
- package/dist/client-HORA3CC4.js +11 -0
- package/dist/client-HORA3CC4.js.map +1 -0
- package/dist/config-MD4XMLUS.js +101 -0
- package/dist/config-MD4XMLUS.js.map +1 -0
- package/dist/detect-providers-6RQCQZOI.js +35 -0
- package/dist/detect-providers-6RQCQZOI.js.map +1 -0
- package/dist/init-LLLHUNSY.js +120 -0
- package/dist/init-LLLHUNSY.js.map +1 -0
- package/dist/logs-BSTBZHDR.js +84 -0
- package/dist/logs-BSTBZHDR.js.map +1 -0
- package/dist/{main-UJAXPP6S.js → main-JY6O6ZVH.js} +29 -14
- package/dist/{main-UJAXPP6S.js.map → main-JY6O6ZVH.js.map} +1 -1
- package/dist/rebuild-YAN3TPFB.js +78 -0
- package/dist/rebuild-YAN3TPFB.js.map +1 -0
- package/dist/restart-NH5MX45I.js +50 -0
- package/dist/restart-NH5MX45I.js.map +1 -0
- package/dist/search-W3ECVSTH.js +120 -0
- package/dist/search-W3ECVSTH.js.map +1 -0
- package/dist/{server-J3AQ3YFA.js → server-DLBATUNG.js} +29 -16
- package/dist/{server-J3AQ3YFA.js.map → server-DLBATUNG.js.map} +1 -1
- package/dist/session-5GI2YU6R.js +44 -0
- package/dist/session-5GI2YU6R.js.map +1 -0
- package/dist/{session-start-BEC4JMNZ.js → session-start-DECLNJDI.js} +8 -6
- package/dist/{session-start-BEC4JMNZ.js.map → session-start-DECLNJDI.js.map} +1 -1
- package/dist/src/cli.js +5 -4
- package/dist/src/cli.js.map +1 -1
- package/dist/src/daemon/main.js +5 -4
- package/dist/src/daemon/main.js.map +1 -1
- package/dist/src/hooks/post-tool-use.js +5 -4
- package/dist/src/hooks/post-tool-use.js.map +1 -1
- package/dist/src/hooks/session-end.js +5 -4
- package/dist/src/hooks/session-end.js.map +1 -1
- package/dist/src/hooks/session-start.js +5 -4
- package/dist/src/hooks/session-start.js.map +1 -1
- package/dist/src/hooks/stop.js +7 -5
- package/dist/src/hooks/stop.js.map +1 -1
- package/dist/src/hooks/user-prompt-submit.js +5 -4
- package/dist/src/hooks/user-prompt-submit.js.map +1 -1
- package/dist/src/mcp/server.js +5 -4
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/stats-7VEZN2WF.js +77 -0
- package/dist/stats-7VEZN2WF.js.map +1 -0
- package/dist/verify-HN5DWV2H.js +50 -0
- package/dist/verify-HN5DWV2H.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-6C26YFOA.js.map +0 -1
- package/dist/chunk-YXZEP5U6.js.map +0 -1
- package/dist/cli-KMWJFK5Y.js +0 -623
- package/dist/cli-KMWJFK5Y.js.map +0 -1
- package/dist/client-TEUHXGOY.js +0 -10
- /package/dist/{chunk-BXFS4PCJ.js.map → chunk-2QEJKG7R.js.map} +0 -0
- /package/dist/{chunk-MAFUTKOZ.js.map → chunk-2TKJPRZL.js.map} +0 -0
- /package/dist/{chunk-S4WBXXO6.js.map → chunk-BMJX2IDQ.js.map} +0 -0
- /package/dist/{chunk-C2YPBQQM.js.map → chunk-NTYYYC32.js.map} +0 -0
- /package/dist/{chunk-NKJIZSPD.js.map → chunk-P2Q77C5F.js.map} +0 -0
- /package/dist/{client-TEUHXGOY.js.map → chunk-PZUWP5VK.js.map} +0 -0
- /package/dist/{chunk-UUFDD2FB.js.map → chunk-TJJRIVZ7.js.map} +0 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
initFts
|
|
4
|
+
} from "./chunk-6FQISQNA.js";
|
|
5
|
+
import {
|
|
6
|
+
DASHBOARD_CONTENT,
|
|
7
|
+
PROVIDER_DEFAULTS,
|
|
8
|
+
VAULT_GITIGNORE,
|
|
9
|
+
configureVaultEnv
|
|
10
|
+
} from "./chunk-PAUPHPOC.js";
|
|
11
|
+
import {
|
|
12
|
+
parseStringFlag
|
|
13
|
+
} from "./chunk-SAKJMNSR.js";
|
|
14
|
+
import {
|
|
15
|
+
MycoIndex
|
|
16
|
+
} from "./chunk-PA3VMINE.js";
|
|
17
|
+
import "./chunk-XW3OL55U.js";
|
|
18
|
+
import {
|
|
19
|
+
require_dist
|
|
20
|
+
} from "./chunk-EF4JVH24.js";
|
|
21
|
+
import {
|
|
22
|
+
resolveVaultDir
|
|
23
|
+
} from "./chunk-N33KUCFP.js";
|
|
24
|
+
import "./chunk-2QEJKG7R.js";
|
|
25
|
+
import "./chunk-Q7BEFSOV.js";
|
|
26
|
+
import {
|
|
27
|
+
__toESM
|
|
28
|
+
} from "./chunk-PZUWP5VK.js";
|
|
29
|
+
|
|
30
|
+
// src/cli/init.ts
|
|
31
|
+
var import_yaml = __toESM(require_dist(), 1);
|
|
32
|
+
import fs from "fs";
|
|
33
|
+
import path from "path";
|
|
34
|
+
import os from "os";
|
|
35
|
+
async function run(args) {
|
|
36
|
+
const vaultPath = parseStringFlag(args, "--vault");
|
|
37
|
+
const llmProvider = parseStringFlag(args, "--llm-provider") ?? "ollama";
|
|
38
|
+
const llmModel = parseStringFlag(args, "--llm-model") ?? "gpt-oss";
|
|
39
|
+
const llmUrl = parseStringFlag(args, "--llm-url") ?? PROVIDER_DEFAULTS[llmProvider]?.base_url;
|
|
40
|
+
const embeddingProvider = parseStringFlag(args, "--embedding-provider") ?? "ollama";
|
|
41
|
+
const embeddingModel = parseStringFlag(args, "--embedding-model") ?? "bge-m3";
|
|
42
|
+
const embeddingUrl = parseStringFlag(args, "--embedding-url") ?? PROVIDER_DEFAULTS[embeddingProvider]?.base_url;
|
|
43
|
+
const user = parseStringFlag(args, "--user") ?? "";
|
|
44
|
+
const teamEnabled = args.includes("--team");
|
|
45
|
+
const vaultDir = vaultPath ? vaultPath.startsWith("~/") ? path.join(os.homedir(), vaultPath.slice(2)) : path.resolve(vaultPath) : path.join(resolveVaultDir());
|
|
46
|
+
if (fs.existsSync(path.join(vaultDir, "myco.yaml"))) {
|
|
47
|
+
console.log(`Vault already initialized at ${vaultDir}`);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
console.log(`Initializing Myco vault at ${vaultDir}`);
|
|
51
|
+
const dirs = ["sessions", "plans", "memories", "artifacts", "team", "buffer", "logs"];
|
|
52
|
+
for (const dir of dirs) {
|
|
53
|
+
fs.mkdirSync(path.join(vaultDir, dir), { recursive: true });
|
|
54
|
+
}
|
|
55
|
+
const config = {
|
|
56
|
+
version: 2,
|
|
57
|
+
intelligence: {
|
|
58
|
+
llm: {
|
|
59
|
+
provider: llmProvider,
|
|
60
|
+
model: llmModel,
|
|
61
|
+
...llmUrl ? { base_url: llmUrl } : {},
|
|
62
|
+
context_window: 8192,
|
|
63
|
+
max_tokens: 1024
|
|
64
|
+
},
|
|
65
|
+
embedding: {
|
|
66
|
+
provider: embeddingProvider,
|
|
67
|
+
model: embeddingModel,
|
|
68
|
+
...embeddingUrl ? { base_url: embeddingUrl } : {}
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
daemon: {
|
|
72
|
+
log_level: "info",
|
|
73
|
+
grace_period: 30,
|
|
74
|
+
max_log_size: 5242880
|
|
75
|
+
},
|
|
76
|
+
capture: {
|
|
77
|
+
transcript_paths: [],
|
|
78
|
+
artifact_watch: [".claude/plans/", ".cursor/plans/"],
|
|
79
|
+
artifact_extensions: [".md"],
|
|
80
|
+
buffer_max_events: 500
|
|
81
|
+
},
|
|
82
|
+
context: {
|
|
83
|
+
max_tokens: 1200,
|
|
84
|
+
layers: { plans: 200, sessions: 500, memories: 300, team: 200 }
|
|
85
|
+
},
|
|
86
|
+
team: {
|
|
87
|
+
enabled: teamEnabled,
|
|
88
|
+
user,
|
|
89
|
+
sync: "git"
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
fs.writeFileSync(
|
|
93
|
+
path.join(vaultDir, "myco.yaml"),
|
|
94
|
+
import_yaml.default.stringify(config),
|
|
95
|
+
"utf-8"
|
|
96
|
+
);
|
|
97
|
+
fs.writeFileSync(path.join(vaultDir, ".gitignore"), VAULT_GITIGNORE, "utf-8");
|
|
98
|
+
fs.writeFileSync(path.join(vaultDir, "_dashboard.md"), DASHBOARD_CONTENT, "utf-8");
|
|
99
|
+
const index = new MycoIndex(path.join(vaultDir, "index.db"));
|
|
100
|
+
initFts(index);
|
|
101
|
+
index.close();
|
|
102
|
+
console.log("");
|
|
103
|
+
console.log("=== Myco Vault Initialized ===");
|
|
104
|
+
console.log(`Path: ${vaultDir}`);
|
|
105
|
+
console.log(`LLM provider: ${llmProvider} / ${llmModel}`);
|
|
106
|
+
console.log(`Embedding provider: ${embeddingProvider} / ${embeddingModel}`);
|
|
107
|
+
console.log(`Team mode: ${teamEnabled ? "enabled" : "disabled"}`);
|
|
108
|
+
if (user) console.log(`User: ${user}`);
|
|
109
|
+
console.log("");
|
|
110
|
+
const projectRoot = path.resolve(".");
|
|
111
|
+
const isProjectLocal = vaultDir.startsWith(projectRoot);
|
|
112
|
+
if (!isProjectLocal) {
|
|
113
|
+
configureVaultEnv(projectRoot, vaultDir);
|
|
114
|
+
}
|
|
115
|
+
console.log("Next: start a coding session \u2014 Myco will begin capturing automatically.");
|
|
116
|
+
}
|
|
117
|
+
export {
|
|
118
|
+
run
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=init-LLLHUNSY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/init.ts"],"sourcesContent":["import { MycoIndex } from '../index/sqlite.js';\nimport { initFts } from '../index/fts.js';\nimport { resolveVaultDir } from '../vault/resolve.js';\nimport {\n parseStringFlag,\n PROVIDER_DEFAULTS,\n DASHBOARD_CONTENT,\n VAULT_GITIGNORE,\n configureVaultEnv,\n} from './shared.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\nimport YAML from 'yaml';\n\nexport async function run(args: string[]): Promise<void> {\n const vaultPath = parseStringFlag(args, '--vault');\n const llmProvider = parseStringFlag(args, '--llm-provider') ?? 'ollama';\n const llmModel = parseStringFlag(args, '--llm-model') ?? 'gpt-oss';\n const llmUrl = parseStringFlag(args, '--llm-url') ?? PROVIDER_DEFAULTS[llmProvider]?.base_url;\n const embeddingProvider = parseStringFlag(args, '--embedding-provider') ?? 'ollama';\n const embeddingModel = parseStringFlag(args, '--embedding-model') ?? 'bge-m3';\n const embeddingUrl = parseStringFlag(args, '--embedding-url') ?? PROVIDER_DEFAULTS[embeddingProvider]?.base_url;\n const user = parseStringFlag(args, '--user') ?? '';\n const teamEnabled = args.includes('--team');\n\n // Resolve vault directory\n const vaultDir = vaultPath\n ? (vaultPath.startsWith('~/') ? path.join(os.homedir(), vaultPath.slice(2)) : path.resolve(vaultPath))\n : path.join(resolveVaultDir());\n\n // Check if already initialized\n if (fs.existsSync(path.join(vaultDir, 'myco.yaml'))) {\n console.log(`Vault already initialized at ${vaultDir}`);\n return;\n }\n\n console.log(`Initializing Myco vault at ${vaultDir}`);\n\n // Create directory structure\n const dirs = ['sessions', 'plans', 'memories', 'artifacts', 'team', 'buffer', 'logs'];\n for (const dir of dirs) {\n fs.mkdirSync(path.join(vaultDir, dir), { recursive: true });\n }\n\n // Write myco.yaml — all values explicit, no hidden defaults\n const config: Record<string, unknown> = {\n version: 2,\n intelligence: {\n llm: {\n provider: llmProvider,\n model: llmModel,\n ...(llmUrl ? { base_url: llmUrl } : {}),\n context_window: 8192,\n max_tokens: 1024,\n },\n embedding: {\n provider: embeddingProvider,\n model: embeddingModel,\n ...(embeddingUrl ? { base_url: embeddingUrl } : {}),\n },\n },\n daemon: {\n log_level: 'info',\n grace_period: 30,\n max_log_size: 5242880,\n },\n capture: {\n transcript_paths: [],\n artifact_watch: ['.claude/plans/', '.cursor/plans/'],\n artifact_extensions: ['.md'],\n buffer_max_events: 500,\n },\n context: {\n max_tokens: 1200,\n layers: { plans: 200, sessions: 500, memories: 300, team: 200 },\n },\n team: {\n enabled: teamEnabled,\n user,\n sync: 'git',\n },\n };\n\n fs.writeFileSync(\n path.join(vaultDir, 'myco.yaml'),\n YAML.stringify(config),\n 'utf-8',\n );\n\n // Write .gitignore\n fs.writeFileSync(path.join(vaultDir, '.gitignore'), VAULT_GITIGNORE, 'utf-8');\n\n // Write Obsidian dashboard\n fs.writeFileSync(path.join(vaultDir, '_dashboard.md'), DASHBOARD_CONTENT, 'utf-8');\n\n // Initialize FTS index\n const index = new MycoIndex(path.join(vaultDir, 'index.db'));\n initFts(index);\n index.close();\n\n // Summary\n console.log('');\n console.log('=== Myco Vault Initialized ===');\n console.log(`Path: ${vaultDir}`);\n console.log(`LLM provider: ${llmProvider} / ${llmModel}`);\n console.log(`Embedding provider: ${embeddingProvider} / ${embeddingModel}`);\n console.log(`Team mode: ${teamEnabled ? 'enabled' : 'disabled'}`);\n if (user) console.log(`User: ${user}`);\n console.log('');\n\n // If vault is outside the project, configure MYCO_VAULT_DIR for the current agent\n const projectRoot = path.resolve('.');\n const isProjectLocal = vaultDir.startsWith(projectRoot);\n if (!isProjectLocal) {\n configureVaultEnv(projectRoot, vaultDir);\n }\n\n console.log('Next: start a coding session — Myco will begin capturing automatically.');\n}\n"],"mappings":"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","names":["YAML"]}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
DEFAULT_LOG_TAIL,
|
|
4
|
+
matchesFilter,
|
|
5
|
+
queryLogs
|
|
6
|
+
} from "./chunk-BMJX2IDQ.js";
|
|
7
|
+
import {
|
|
8
|
+
LEVEL_ORDER
|
|
9
|
+
} from "./chunk-5EZ7QF6J.js";
|
|
10
|
+
import {
|
|
11
|
+
formatLogLine,
|
|
12
|
+
parseIntFlag,
|
|
13
|
+
parseStringFlag
|
|
14
|
+
} from "./chunk-SAKJMNSR.js";
|
|
15
|
+
import "./chunk-PZUWP5VK.js";
|
|
16
|
+
|
|
17
|
+
// src/cli/logs.ts
|
|
18
|
+
import fs from "fs";
|
|
19
|
+
import path from "path";
|
|
20
|
+
var FOLLOW_POLL_INTERVAL_MS = 500;
|
|
21
|
+
function run(args, vaultDir) {
|
|
22
|
+
const logDir = path.join(vaultDir, "logs");
|
|
23
|
+
const follow = args.includes("--follow") || args.includes("-f");
|
|
24
|
+
const limit = parseIntFlag(args, "--tail", "-n") ?? DEFAULT_LOG_TAIL;
|
|
25
|
+
const rawLevel = parseStringFlag(args, "--level", "-l");
|
|
26
|
+
if (rawLevel && !(rawLevel in LEVEL_ORDER)) {
|
|
27
|
+
console.error(`Invalid level: ${rawLevel}. Valid levels: ${Object.keys(LEVEL_ORDER).join(", ")}`);
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
const level = rawLevel;
|
|
31
|
+
const component = parseStringFlag(args, "--component", "-c");
|
|
32
|
+
const since = parseStringFlag(args, "--since");
|
|
33
|
+
const until = parseStringFlag(args, "--until");
|
|
34
|
+
const result = queryLogs(logDir, { limit, level, component, since, until });
|
|
35
|
+
for (const e of result.entries) {
|
|
36
|
+
process.stdout.write(formatLogLine(e) + "\n");
|
|
37
|
+
}
|
|
38
|
+
if (result.truncated) {
|
|
39
|
+
process.stdout.write(` ... ${result.total - result.entries.length} earlier entries omitted
|
|
40
|
+
`);
|
|
41
|
+
}
|
|
42
|
+
if (!follow) return;
|
|
43
|
+
const followFilter = { level, component, until };
|
|
44
|
+
const logPath = path.join(logDir, "daemon.log");
|
|
45
|
+
let offset = 0;
|
|
46
|
+
try {
|
|
47
|
+
offset = fs.statSync(logPath).size;
|
|
48
|
+
} catch {
|
|
49
|
+
}
|
|
50
|
+
fs.watchFile(logPath, { interval: FOLLOW_POLL_INTERVAL_MS }, (curr, prev) => {
|
|
51
|
+
if (curr.size < prev.size || curr.ino !== prev.ino) {
|
|
52
|
+
offset = 0;
|
|
53
|
+
}
|
|
54
|
+
if (curr.size <= offset) return;
|
|
55
|
+
try {
|
|
56
|
+
const fd = fs.openSync(logPath, "r");
|
|
57
|
+
const buf = Buffer.alloc(curr.size - offset);
|
|
58
|
+
fs.readSync(fd, buf, 0, buf.length, offset);
|
|
59
|
+
fs.closeSync(fd);
|
|
60
|
+
const text = buf.toString("utf-8");
|
|
61
|
+
const lastNewline = text.lastIndexOf("\n");
|
|
62
|
+
if (lastNewline < 0) return;
|
|
63
|
+
offset += Buffer.byteLength(text.slice(0, lastNewline + 1));
|
|
64
|
+
for (const line of text.slice(0, lastNewline).split("\n")) {
|
|
65
|
+
if (!line.trim()) continue;
|
|
66
|
+
try {
|
|
67
|
+
const e = JSON.parse(line);
|
|
68
|
+
if (!matchesFilter(e, followFilter)) continue;
|
|
69
|
+
process.stdout.write(formatLogLine(e) + "\n");
|
|
70
|
+
} catch {
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
} catch {
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
process.on("SIGINT", () => {
|
|
77
|
+
fs.unwatchFile(logPath);
|
|
78
|
+
process.exit(0);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
export {
|
|
82
|
+
run
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=logs-BSTBZHDR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/logs.ts"],"sourcesContent":["import { queryLogs, matchesFilter, DEFAULT_LOG_TAIL, LEVEL_ORDER } from '../logs/reader.js';\nimport type { LogEntry, LogLevel } from '../logs/reader.js';\nimport { formatLogLine, parseIntFlag, parseStringFlag } from '../logs/format.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\n/** Polling interval for follow mode (milliseconds). */\nconst FOLLOW_POLL_INTERVAL_MS = 500;\n\nexport function run(args: string[], vaultDir: string): void {\n const logDir = path.join(vaultDir, 'logs');\n const follow = args.includes('--follow') || args.includes('-f');\n const limit = parseIntFlag(args, '--tail', '-n') ?? DEFAULT_LOG_TAIL;\n const rawLevel = parseStringFlag(args, '--level', '-l');\n if (rawLevel && !(rawLevel in LEVEL_ORDER)) {\n console.error(`Invalid level: ${rawLevel}. Valid levels: ${Object.keys(LEVEL_ORDER).join(', ')}`);\n process.exit(1);\n }\n const level = rawLevel as LogLevel | undefined;\n const component = parseStringFlag(args, '--component', '-c');\n const since = parseStringFlag(args, '--since');\n const until = parseStringFlag(args, '--until');\n\n // Show initial tail\n const result = queryLogs(logDir, { limit, level, component, since, until });\n for (const e of result.entries) {\n process.stdout.write(formatLogLine(e) + '\\n');\n }\n if (result.truncated) {\n process.stdout.write(` ... ${result.total - result.entries.length} earlier entries omitted\\n`);\n }\n\n if (!follow) return;\n\n // Follow mode: watch for new appends via stat-based polling.\n // --since is intentionally not applied to streamed lines (only the initial tail).\n const followFilter = { level, component, until };\n const logPath = path.join(logDir, 'daemon.log');\n let offset = 0;\n try {\n offset = fs.statSync(logPath).size;\n } catch {\n // File doesn't exist yet — start from 0\n }\n\n fs.watchFile(logPath, { interval: FOLLOW_POLL_INTERVAL_MS }, (curr, prev) => {\n if (curr.size < prev.size || curr.ino !== prev.ino) {\n // Rotation detected — reset to beginning of new file\n offset = 0;\n }\n if (curr.size <= offset) return;\n\n try {\n const fd = fs.openSync(logPath, 'r');\n const buf = Buffer.alloc(curr.size - offset);\n fs.readSync(fd, buf, 0, buf.length, offset);\n fs.closeSync(fd);\n\n const text = buf.toString('utf-8');\n // Only advance offset past complete lines to avoid losing partial writes\n const lastNewline = text.lastIndexOf('\\n');\n if (lastNewline < 0) return; // no complete lines yet\n offset += Buffer.byteLength(text.slice(0, lastNewline + 1));\n\n for (const line of text.slice(0, lastNewline).split('\\n')) {\n if (!line.trim()) continue;\n try {\n const e = JSON.parse(line) as LogEntry;\n if (!matchesFilter(e, followFilter)) continue;\n process.stdout.write(formatLogLine(e) + '\\n');\n } catch {\n // Malformed line\n }\n }\n } catch {\n // File read error — skip this cycle\n }\n });\n\n // fs.watchFile with persistent: true (default) keeps the event loop alive.\n // SIGINT (Ctrl+C) cleans up the watcher.\n process.on('SIGINT', () => {\n fs.unwatchFile(logPath);\n process.exit(0);\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAGA,OAAO,QAAQ;AACf,OAAO,UAAU;AAGjB,IAAM,0BAA0B;AAEzB,SAAS,IAAI,MAAgB,UAAwB;AAC1D,QAAM,SAAS,KAAK,KAAK,UAAU,MAAM;AACzC,QAAM,SAAS,KAAK,SAAS,UAAU,KAAK,KAAK,SAAS,IAAI;AAC9D,QAAM,QAAQ,aAAa,MAAM,UAAU,IAAI,KAAK;AACpD,QAAM,WAAW,gBAAgB,MAAM,WAAW,IAAI;AACtD,MAAI,YAAY,EAAE,YAAY,cAAc;AAC1C,YAAQ,MAAM,kBAAkB,QAAQ,mBAAmB,OAAO,KAAK,WAAW,EAAE,KAAK,IAAI,CAAC,EAAE;AAChG,YAAQ,KAAK,CAAC;AAAA,EAChB;AACA,QAAM,QAAQ;AACd,QAAM,YAAY,gBAAgB,MAAM,eAAe,IAAI;AAC3D,QAAM,QAAQ,gBAAgB,MAAM,SAAS;AAC7C,QAAM,QAAQ,gBAAgB,MAAM,SAAS;AAG7C,QAAM,SAAS,UAAU,QAAQ,EAAE,OAAO,OAAO,WAAW,OAAO,MAAM,CAAC;AAC1E,aAAW,KAAK,OAAO,SAAS;AAC9B,YAAQ,OAAO,MAAM,cAAc,CAAC,IAAI,IAAI;AAAA,EAC9C;AACA,MAAI,OAAO,WAAW;AACpB,YAAQ,OAAO,MAAM,SAAS,OAAO,QAAQ,OAAO,QAAQ,MAAM;AAAA,CAA4B;AAAA,EAChG;AAEA,MAAI,CAAC,OAAQ;AAIb,QAAM,eAAe,EAAE,OAAO,WAAW,MAAM;AAC/C,QAAM,UAAU,KAAK,KAAK,QAAQ,YAAY;AAC9C,MAAI,SAAS;AACb,MAAI;AACF,aAAS,GAAG,SAAS,OAAO,EAAE;AAAA,EAChC,QAAQ;AAAA,EAER;AAEA,KAAG,UAAU,SAAS,EAAE,UAAU,wBAAwB,GAAG,CAAC,MAAM,SAAS;AAC3E,QAAI,KAAK,OAAO,KAAK,QAAQ,KAAK,QAAQ,KAAK,KAAK;AAElD,eAAS;AAAA,IACX;AACA,QAAI,KAAK,QAAQ,OAAQ;AAEzB,QAAI;AACF,YAAM,KAAK,GAAG,SAAS,SAAS,GAAG;AACnC,YAAM,MAAM,OAAO,MAAM,KAAK,OAAO,MAAM;AAC3C,SAAG,SAAS,IAAI,KAAK,GAAG,IAAI,QAAQ,MAAM;AAC1C,SAAG,UAAU,EAAE;AAEf,YAAM,OAAO,IAAI,SAAS,OAAO;AAEjC,YAAM,cAAc,KAAK,YAAY,IAAI;AACzC,UAAI,cAAc,EAAG;AACrB,gBAAU,OAAO,WAAW,KAAK,MAAM,GAAG,cAAc,CAAC,CAAC;AAE1D,iBAAW,QAAQ,KAAK,MAAM,GAAG,WAAW,EAAE,MAAM,IAAI,GAAG;AACzD,YAAI,CAAC,KAAK,KAAK,EAAG;AAClB,YAAI;AACF,gBAAM,IAAI,KAAK,MAAM,IAAI;AACzB,cAAI,CAAC,cAAc,GAAG,YAAY,EAAG;AACrC,kBAAQ,OAAO,MAAM,cAAc,CAAC,IAAI,IAAI;AAAA,QAC9C,QAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF,CAAC;AAID,UAAQ,GAAG,UAAU,MAAM;AACzB,OAAG,YAAY,OAAO;AACtB,YAAQ,KAAK,CAAC;AAAA,EAChB,CAAC;AACH;","names":[]}
|
|
@@ -7,26 +7,39 @@ import {
|
|
|
7
7
|
sessionNoteId,
|
|
8
8
|
sessionRelativePath,
|
|
9
9
|
sessionWikilink
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-P2Q77C5F.js";
|
|
11
11
|
import {
|
|
12
12
|
ARTIFACT_TYPES,
|
|
13
|
-
DaemonLogger,
|
|
14
|
-
VectorIndex,
|
|
15
|
-
createEmbeddingProvider,
|
|
16
|
-
createLlmProvider,
|
|
17
|
-
generateEmbedding,
|
|
18
13
|
indexNote,
|
|
19
|
-
initFts,
|
|
20
14
|
rebuildIndex
|
|
21
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-QQWUV3TC.js";
|
|
16
|
+
import {
|
|
17
|
+
generateEmbedding
|
|
18
|
+
} from "./chunk-RGVBGTD6.js";
|
|
19
|
+
import {
|
|
20
|
+
DaemonLogger
|
|
21
|
+
} from "./chunk-5EZ7QF6J.js";
|
|
22
|
+
import {
|
|
23
|
+
initFts
|
|
24
|
+
} from "./chunk-6FQISQNA.js";
|
|
25
|
+
import {
|
|
26
|
+
createEmbeddingProvider,
|
|
27
|
+
createLlmProvider
|
|
28
|
+
} from "./chunk-N6IAW33G.js";
|
|
29
|
+
import {
|
|
30
|
+
VectorIndex
|
|
31
|
+
} from "./chunk-XQXXF6MU.js";
|
|
22
32
|
import {
|
|
23
33
|
MycoIndex
|
|
24
34
|
} from "./chunk-PA3VMINE.js";
|
|
35
|
+
import "./chunk-XW3OL55U.js";
|
|
25
36
|
import {
|
|
26
37
|
external_exports,
|
|
27
|
-
loadConfig
|
|
38
|
+
loadConfig
|
|
39
|
+
} from "./chunk-ISCT2SI6.js";
|
|
40
|
+
import {
|
|
28
41
|
require_dist
|
|
29
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-EF4JVH24.js";
|
|
30
43
|
import {
|
|
31
44
|
EventBuffer
|
|
32
45
|
} from "./chunk-I7PMGO6S.js";
|
|
@@ -35,7 +48,7 @@ import {
|
|
|
35
48
|
claudeCodeAdapter,
|
|
36
49
|
createPerProjectAdapter,
|
|
37
50
|
extensionForMimeType
|
|
38
|
-
} from "./chunk-
|
|
51
|
+
} from "./chunk-2QEJKG7R.js";
|
|
39
52
|
import {
|
|
40
53
|
AI_RESPONSE_PREVIEW_CHARS,
|
|
41
54
|
CANDIDATE_CONTENT_PREVIEW,
|
|
@@ -57,9 +70,11 @@ import {
|
|
|
57
70
|
SESSION_CONTEXT_MAX_PLANS,
|
|
58
71
|
STALE_BUFFER_MAX_AGE_MS,
|
|
59
72
|
SUMMARY_MAX_TOKENS,
|
|
60
|
-
TITLE_MAX_TOKENS
|
|
73
|
+
TITLE_MAX_TOKENS
|
|
74
|
+
} from "./chunk-Q7BEFSOV.js";
|
|
75
|
+
import {
|
|
61
76
|
__toESM
|
|
62
|
-
} from "./chunk-
|
|
77
|
+
} from "./chunk-PZUWP5VK.js";
|
|
63
78
|
|
|
64
79
|
// src/daemon/server.ts
|
|
65
80
|
import http from "http";
|
|
@@ -3241,4 +3256,4 @@ export {
|
|
|
3241
3256
|
chokidar/index.js:
|
|
3242
3257
|
(*! chokidar - MIT License (c) 2012 Paul Miller (paulmillr.com) *)
|
|
3243
3258
|
*/
|
|
3244
|
-
//# sourceMappingURL=main-
|
|
3259
|
+
//# sourceMappingURL=main-JY6O6ZVH.js.map
|