@goondocks/myco 0.2.13 → 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-TJJRIVZ7.js +56 -0
- package/dist/chunk-TJJRIVZ7.js.map +1 -0
- 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-ORWCEWNJ.js → main-JY6O6ZVH.js} +60 -15
- package/dist/{main-ORWCEWNJ.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 +8 -1
- package/dist/src/cli.js.map +1 -1
- package/dist/src/daemon/main.js +8 -1
- 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 +8 -1
- 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 +8 -1
- 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
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
LmStudioBackend,
|
|
4
|
+
OllamaBackend
|
|
5
|
+
} from "./chunk-XW3OL55U.js";
|
|
6
|
+
import {
|
|
7
|
+
PROVIDER_DETECT_TIMEOUT_MS
|
|
8
|
+
} from "./chunk-Q7BEFSOV.js";
|
|
9
|
+
import "./chunk-PZUWP5VK.js";
|
|
10
|
+
|
|
11
|
+
// src/cli/detect-providers.ts
|
|
12
|
+
async function detectProvider(backend) {
|
|
13
|
+
const available = await backend.isAvailable();
|
|
14
|
+
if (!available) return { available: false, models: [] };
|
|
15
|
+
const models = await backend.listModels(PROVIDER_DETECT_TIMEOUT_MS);
|
|
16
|
+
return { available: true, models };
|
|
17
|
+
}
|
|
18
|
+
async function run(_args) {
|
|
19
|
+
const ollama = new OllamaBackend();
|
|
20
|
+
const lmStudio = new LmStudioBackend();
|
|
21
|
+
const [ollamaResult, lmStudioResult] = await Promise.all([
|
|
22
|
+
detectProvider(ollama),
|
|
23
|
+
detectProvider(lmStudio)
|
|
24
|
+
]);
|
|
25
|
+
const result = {
|
|
26
|
+
ollama: ollamaResult,
|
|
27
|
+
"lm-studio": lmStudioResult,
|
|
28
|
+
anthropic: { available: !!process.env.ANTHROPIC_API_KEY, models: [] }
|
|
29
|
+
};
|
|
30
|
+
console.log(JSON.stringify(result, null, 2));
|
|
31
|
+
}
|
|
32
|
+
export {
|
|
33
|
+
run
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=detect-providers-6RQCQZOI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/detect-providers.ts"],"sourcesContent":["import { PROVIDER_DETECT_TIMEOUT_MS } from '../constants.js';\nimport { OllamaBackend } from '../intelligence/ollama.js';\nimport { LmStudioBackend } from '../intelligence/lm-studio.js';\n\ninterface ProviderResult {\n available: boolean;\n models: string[];\n}\n\ninterface DetectResult {\n ollama: ProviderResult;\n 'lm-studio': ProviderResult;\n anthropic: ProviderResult;\n}\n\nasync function detectProvider(\n backend: { isAvailable(): Promise<boolean>; listModels(timeoutMs?: number): Promise<string[]> },\n): Promise<ProviderResult> {\n const available = await backend.isAvailable();\n if (!available) return { available: false, models: [] };\n const models = await backend.listModels(PROVIDER_DETECT_TIMEOUT_MS);\n return { available: true, models };\n}\n\nexport async function run(_args: string[]): Promise<void> {\n const ollama = new OllamaBackend();\n const lmStudio = new LmStudioBackend();\n\n const [ollamaResult, lmStudioResult] = await Promise.all([\n detectProvider(ollama),\n detectProvider(lmStudio),\n ]);\n\n const result: DetectResult = {\n ollama: ollamaResult,\n 'lm-studio': lmStudioResult,\n anthropic: { available: !!process.env.ANTHROPIC_API_KEY, models: [] },\n };\n\n console.log(JSON.stringify(result, null, 2));\n}\n"],"mappings":";;;;;;;;;;;AAeA,eAAe,eACb,SACyB;AACzB,QAAM,YAAY,MAAM,QAAQ,YAAY;AAC5C,MAAI,CAAC,UAAW,QAAO,EAAE,WAAW,OAAO,QAAQ,CAAC,EAAE;AACtD,QAAM,SAAS,MAAM,QAAQ,WAAW,0BAA0B;AAClE,SAAO,EAAE,WAAW,MAAM,OAAO;AACnC;AAEA,eAAsB,IAAI,OAAgC;AACxD,QAAM,SAAS,IAAI,cAAc;AACjC,QAAM,WAAW,IAAI,gBAAgB;AAErC,QAAM,CAAC,cAAc,cAAc,IAAI,MAAM,QAAQ,IAAI;AAAA,IACvD,eAAe,MAAM;AAAA,IACrB,eAAe,QAAQ;AAAA,EACzB,CAAC;AAED,QAAM,SAAuB;AAAA,IAC3B,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,WAAW,EAAE,WAAW,CAAC,CAAC,QAAQ,IAAI,mBAAmB,QAAQ,CAAC,EAAE;AAAA,EACtE;AAEA,UAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAC7C;","names":[]}
|
|
@@ -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";
|
|
@@ -2696,6 +2711,7 @@ async function main() {
|
|
|
2696
2711
|
const bufferDir = path7.join(vaultDir, "buffer");
|
|
2697
2712
|
const sessionBuffers = /* @__PURE__ */ new Map();
|
|
2698
2713
|
const sessionFilePaths = /* @__PURE__ */ new Map();
|
|
2714
|
+
const capturedArtifactPaths = /* @__PURE__ */ new Map();
|
|
2699
2715
|
if (fs5.existsSync(bufferDir)) {
|
|
2700
2716
|
const cutoff = Date.now() - STALE_BUFFER_MAX_AGE_MS;
|
|
2701
2717
|
for (const file of fs5.readdirSync(bufferDir)) {
|
|
@@ -2776,6 +2792,31 @@ ${content}`,
|
|
|
2776
2792
|
observations: result.observations.length,
|
|
2777
2793
|
degraded: result.degraded
|
|
2778
2794
|
});
|
|
2795
|
+
const allPaths = sessionFilePaths.get(sessionId);
|
|
2796
|
+
const alreadyCaptured = capturedArtifactPaths.get(sessionId) ?? /* @__PURE__ */ new Set();
|
|
2797
|
+
if (allPaths && allPaths.size > alreadyCaptured.size) {
|
|
2798
|
+
const newPaths = new Set([...allPaths].filter((p) => !alreadyCaptured.has(p)));
|
|
2799
|
+
const candidates = collectArtifactCandidates(
|
|
2800
|
+
newPaths,
|
|
2801
|
+
{ artifact_extensions: config.capture.artifact_extensions },
|
|
2802
|
+
process.cwd()
|
|
2803
|
+
);
|
|
2804
|
+
if (candidates.length > 0) {
|
|
2805
|
+
processor.classifyArtifacts(candidates, sessionId).then((classified) => captureArtifacts(candidates, classified, sessionId, { vault, ...indexDeps }, lineageGraph)).then(() => {
|
|
2806
|
+
if (!capturedArtifactPaths.has(sessionId)) {
|
|
2807
|
+
capturedArtifactPaths.set(sessionId, /* @__PURE__ */ new Set());
|
|
2808
|
+
}
|
|
2809
|
+
const captured = capturedArtifactPaths.get(sessionId);
|
|
2810
|
+
for (const c of candidates) {
|
|
2811
|
+
const absPath = path7.resolve(process.cwd(), c.path);
|
|
2812
|
+
captured.add(absPath);
|
|
2813
|
+
}
|
|
2814
|
+
}).catch((err) => logger.warn("processor", "Incremental artifact capture failed", {
|
|
2815
|
+
session_id: sessionId,
|
|
2816
|
+
error: err.message
|
|
2817
|
+
}));
|
|
2818
|
+
}
|
|
2819
|
+
}
|
|
2779
2820
|
});
|
|
2780
2821
|
server.registerRoute("POST", "/sessions/register", async (body) => {
|
|
2781
2822
|
const { session_id, branch, started_at } = RegisterBody.parse(body);
|
|
@@ -2821,6 +2862,7 @@ ${content}`,
|
|
|
2821
2862
|
}
|
|
2822
2863
|
sessionBuffers.delete(session_id);
|
|
2823
2864
|
sessionFilePaths.delete(session_id);
|
|
2865
|
+
capturedArtifactPaths.delete(session_id);
|
|
2824
2866
|
server.updateDaemonJsonSessions(registry.sessions);
|
|
2825
2867
|
logger.info("lifecycle", "Session unregistered", { session_id });
|
|
2826
2868
|
return { ok: true, sessions: registry.sessions };
|
|
@@ -2849,6 +2891,7 @@ ${content}`,
|
|
|
2849
2891
|
sessionFilePaths.set(event.session_id, /* @__PURE__ */ new Set());
|
|
2850
2892
|
}
|
|
2851
2893
|
sessionFilePaths.get(event.session_id).add(filePath);
|
|
2894
|
+
capturedArtifactPaths.get(event.session_id)?.delete(filePath);
|
|
2852
2895
|
}
|
|
2853
2896
|
}
|
|
2854
2897
|
}
|
|
@@ -2932,8 +2975,10 @@ ${content}`,
|
|
|
2932
2975
|
existingTurnCount = turnMatches?.length ?? 0;
|
|
2933
2976
|
}
|
|
2934
2977
|
const writtenFiles = sessionFilePaths.get(sessionId) ?? /* @__PURE__ */ new Set();
|
|
2978
|
+
const alreadyCaptured = capturedArtifactPaths.get(sessionId) ?? /* @__PURE__ */ new Set();
|
|
2979
|
+
const uncapturedFiles = new Set([...writtenFiles].filter((p) => !alreadyCaptured.has(p)));
|
|
2935
2980
|
const artifactCandidates = collectArtifactCandidates(
|
|
2936
|
-
|
|
2981
|
+
uncapturedFiles,
|
|
2937
2982
|
{ artifact_extensions: config.capture.artifact_extensions },
|
|
2938
2983
|
process.cwd()
|
|
2939
2984
|
);
|
|
@@ -3211,4 +3256,4 @@ export {
|
|
|
3211
3256
|
chokidar/index.js:
|
|
3212
3257
|
(*! chokidar - MIT License (c) 2012 Paul Miller (paulmillr.com) *)
|
|
3213
3258
|
*/
|
|
3214
|
-
//# sourceMappingURL=main-
|
|
3259
|
+
//# sourceMappingURL=main-JY6O6ZVH.js.map
|