@goondocks/myco 0.2.11 → 0.2.13
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 +38 -17
- package/dist/{chunk-AOMX45LH.js → chunk-6C26YFOA.js} +4 -6
- package/dist/{chunk-AOMX45LH.js.map → chunk-6C26YFOA.js.map} +1 -1
- package/dist/{chunk-TWDS6MSU.js → chunk-BXFS4PCJ.js} +2 -2
- package/dist/{chunk-SVUINMDD.js → chunk-C2YPBQQM.js} +3 -3
- package/dist/{chunk-ZJQ5G637.js → chunk-MAFUTKOZ.js} +2 -2
- package/dist/{chunk-ZTZVX5E6.js → chunk-NKJIZSPD.js} +3 -3
- package/dist/{chunk-NYNEJ5QY.js → chunk-O5VSPHDL.js} +40 -1
- package/dist/{chunk-NYNEJ5QY.js.map → chunk-O5VSPHDL.js.map} +1 -1
- package/dist/{chunk-TH6GIBXG.js → chunk-S4WBXXO6.js} +2 -2
- package/dist/{chunk-UIIZRTJU.js → chunk-YXZEP5U6.js} +2 -2
- package/dist/{cli-K5FSKLQC.js → cli-KMWJFK5Y.js} +8 -10
- package/dist/{cli-K5FSKLQC.js.map → cli-KMWJFK5Y.js.map} +1 -1
- package/dist/client-TEUHXGOY.js +10 -0
- package/dist/{main-5W4ADOBG.js → main-ORWCEWNJ.js} +8 -18
- package/dist/{main-5W4ADOBG.js.map → main-ORWCEWNJ.js.map} +1 -1
- package/dist/{server-PIEPVUUH.js → server-J3AQ3YFA.js} +11 -21
- package/dist/{server-PIEPVUUH.js.map → server-J3AQ3YFA.js.map} +1 -1
- package/dist/{session-start-2NNQHT5S.js → session-start-BEC4JMNZ.js} +6 -7
- package/dist/{session-start-2NNQHT5S.js.map → session-start-BEC4JMNZ.js.map} +1 -1
- package/dist/src/cli.js +1 -6
- package/dist/src/cli.js.map +1 -1
- package/dist/src/daemon/main.js +2 -6
- package/dist/src/daemon/main.js.map +1 -1
- package/dist/src/hooks/post-tool-use.js +4 -5
- package/dist/src/hooks/post-tool-use.js.map +1 -1
- package/dist/src/hooks/session-end.js +4 -5
- package/dist/src/hooks/session-end.js.map +1 -1
- package/dist/src/hooks/session-start.js +1 -6
- package/dist/src/hooks/session-start.js.map +1 -1
- package/dist/src/hooks/stop.js +5 -6
- package/dist/src/hooks/stop.js.map +1 -1
- package/dist/src/hooks/user-prompt-submit.js +4 -5
- package/dist/src/hooks/user-prompt-submit.js.map +1 -1
- package/dist/src/mcp/server.js +2 -6
- package/dist/src/mcp/server.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-4JML636J.js +0 -52
- package/dist/chunk-4JML636J.js.map +0 -1
- package/dist/chunk-PZUWP5VK.js +0 -44
- package/dist/client-4JMOYNKK.js +0 -11
- package/dist/client-4JMOYNKK.js.map +0 -1
- /package/dist/{chunk-TWDS6MSU.js.map → chunk-BXFS4PCJ.js.map} +0 -0
- /package/dist/{chunk-SVUINMDD.js.map → chunk-C2YPBQQM.js.map} +0 -0
- /package/dist/{chunk-ZJQ5G637.js.map → chunk-MAFUTKOZ.js.map} +0 -0
- /package/dist/{chunk-ZTZVX5E6.js.map → chunk-NKJIZSPD.js.map} +0 -0
- /package/dist/{chunk-TH6GIBXG.js.map → chunk-S4WBXXO6.js.map} +0 -0
- /package/dist/{chunk-UIIZRTJU.js.map → chunk-YXZEP5U6.js.map} +0 -0
- /package/dist/{chunk-PZUWP5VK.js.map → client-TEUHXGOY.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
PROMPT_PREVIEW_CHARS
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-O5VSPHDL.js";
|
|
5
5
|
|
|
6
6
|
// src/agents/adapter.ts
|
|
7
7
|
import fs from "fs";
|
|
@@ -351,4 +351,4 @@ export {
|
|
|
351
351
|
claudeCodeAdapter,
|
|
352
352
|
AgentRegistry
|
|
353
353
|
};
|
|
354
|
-
//# sourceMappingURL=chunk-
|
|
354
|
+
//# sourceMappingURL=chunk-BXFS4PCJ.js.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
AgentRegistry
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-BXFS4PCJ.js";
|
|
5
5
|
import {
|
|
6
6
|
DAEMON_CLIENT_TIMEOUT_MS,
|
|
7
7
|
DAEMON_HEALTH_CHECK_TIMEOUT_MS,
|
|
8
8
|
DAEMON_HEALTH_RETRY_DELAYS
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-O5VSPHDL.js";
|
|
10
10
|
|
|
11
11
|
// src/hooks/client.ts
|
|
12
12
|
import fs from "fs";
|
|
@@ -101,4 +101,4 @@ var DaemonClient = class {
|
|
|
101
101
|
export {
|
|
102
102
|
DaemonClient
|
|
103
103
|
};
|
|
104
|
-
//# sourceMappingURL=chunk-
|
|
104
|
+
//# sourceMappingURL=chunk-C2YPBQQM.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
STDIN_TIMEOUT_MS
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-O5VSPHDL.js";
|
|
5
5
|
|
|
6
6
|
// src/hooks/read-stdin.ts
|
|
7
7
|
function readStdin() {
|
|
@@ -18,4 +18,4 @@ function readStdin() {
|
|
|
18
18
|
export {
|
|
19
19
|
readStdin
|
|
20
20
|
};
|
|
21
|
-
//# sourceMappingURL=chunk-
|
|
21
|
+
//# sourceMappingURL=chunk-MAFUTKOZ.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
require_dist
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-YXZEP5U6.js";
|
|
5
5
|
import {
|
|
6
6
|
__toESM
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-O5VSPHDL.js";
|
|
8
8
|
|
|
9
9
|
// src/vault/session-id.ts
|
|
10
10
|
var SESSION_PREFIX = "session-";
|
|
@@ -418,4 +418,4 @@ export {
|
|
|
418
418
|
formatMemoryBody,
|
|
419
419
|
VaultWriter
|
|
420
420
|
};
|
|
421
|
-
//# sourceMappingURL=chunk-
|
|
421
|
+
//# sourceMappingURL=chunk-NKJIZSPD.js.map
|
|
@@ -1,4 +1,39 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
9
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
10
|
+
}) : x)(function(x) {
|
|
11
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
12
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
13
|
+
});
|
|
14
|
+
var __commonJS = (cb, mod) => function __require2() {
|
|
15
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
16
|
+
};
|
|
17
|
+
var __export = (target, all) => {
|
|
18
|
+
for (var name in all)
|
|
19
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
20
|
+
};
|
|
21
|
+
var __copyProps = (to, from, except, desc) => {
|
|
22
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
23
|
+
for (let key of __getOwnPropNames(from))
|
|
24
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
25
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
26
|
+
}
|
|
27
|
+
return to;
|
|
28
|
+
};
|
|
29
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
30
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
31
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
32
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
33
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
34
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
35
|
+
mod
|
|
36
|
+
));
|
|
2
37
|
|
|
3
38
|
// src/constants.ts
|
|
4
39
|
var CHARS_PER_TOKEN = 4;
|
|
@@ -35,6 +70,10 @@ var PROMPT_CONTEXT_MIN_SIMILARITY = 0.3;
|
|
|
35
70
|
var PROMPT_CONTEXT_MIN_LENGTH = 10;
|
|
36
71
|
|
|
37
72
|
export {
|
|
73
|
+
__require,
|
|
74
|
+
__commonJS,
|
|
75
|
+
__export,
|
|
76
|
+
__toESM,
|
|
38
77
|
CHARS_PER_TOKEN,
|
|
39
78
|
EMBEDDING_INPUT_LIMIT,
|
|
40
79
|
PROMPT_PREVIEW_CHARS,
|
|
@@ -68,4 +107,4 @@ export {
|
|
|
68
107
|
PROMPT_CONTEXT_MIN_SIMILARITY,
|
|
69
108
|
PROMPT_CONTEXT_MIN_LENGTH
|
|
70
109
|
};
|
|
71
|
-
//# sourceMappingURL=chunk-
|
|
110
|
+
//# sourceMappingURL=chunk-O5VSPHDL.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants.ts"],"sourcesContent":["/**\n * Shared constants for the Myco codebase.\n * Per CLAUDE.md: \"No Magic Literals — Numeric and string constants\n * MUST NOT appear inline in logic.\"\n */\n\n// --- Token estimation ---\n/** Approximate characters per token for the chars/4 heuristic. */\nexport const CHARS_PER_TOKEN = 4;\n\n// --- Embedding ---\n/** Max characters of text sent to the embedding model. */\nexport const EMBEDDING_INPUT_LIMIT = 8000;\n\n// --- Truncation limits (display/preview) ---\n/** Max chars for a user prompt preview in event summaries. */\nexport const PROMPT_PREVIEW_CHARS = 300;\n/** Max chars for an AI response preview in event summaries. */\nexport const AI_RESPONSE_PREVIEW_CHARS = 500;\n/** Max chars for a command string preview. */\nexport const COMMAND_PREVIEW_CHARS = 80;\n/** Max chars for a content snippet in search results. */\nexport const CONTENT_SNIPPET_CHARS = 120;\n/** Max chars for a tool output preview in hooks. */\nexport const TOOL_OUTPUT_PREVIEW_CHARS = 200;\n/** Max chars for a session summary preview in MCP tools. */\nexport const SESSION_SUMMARY_PREVIEW_CHARS = 300;\n/** Max chars for a recall summary preview. */\nexport const RECALL_SUMMARY_PREVIEW_CHARS = 200;\n\n// --- Context injection layer budgets (chars, not tokens — used with .slice()) ---\nexport const CONTEXT_PLAN_PREVIEW_CHARS = 100;\nexport const CONTEXT_SESSION_PREVIEW_CHARS = 80;\nexport const CONTEXT_MEMORY_PREVIEW_CHARS = 80;\n\n// --- Processor maxTokens budgets ---\n/** Response token budget for observation extraction. */\nexport const EXTRACTION_MAX_TOKENS = 2048;\n/** Response token budget for session summary. */\nexport const SUMMARY_MAX_TOKENS = 512;\n/** Response token budget for session title generation. */\nexport const TITLE_MAX_TOKENS = 32;\n/** Response token budget for artifact classification. */\nexport const CLASSIFICATION_MAX_TOKENS = 1024;\n\n// --- Timeouts ---\n/** Daemon client HTTP request timeout (ms). */\nexport const DAEMON_CLIENT_TIMEOUT_MS = 2000;\n/** Health check timeout (ms) — fail fast if daemon isn't responding. */\nexport const DAEMON_HEALTH_CHECK_TIMEOUT_MS = 500;\n/** LLM request timeout (ms) — prevents hung requests from blocking stop processing. */\nexport const LLM_REQUEST_TIMEOUT_MS = 30_000;\n/** Embedding request timeout (ms). */\nexport const EMBEDDING_REQUEST_TIMEOUT_MS = 10_000;\n/** Stdin read timeout for hooks (ms). */\nexport const STDIN_TIMEOUT_MS = 100;\n/** Chokidar write stability threshold (ms). */\nexport const FILE_WATCH_STABILITY_MS = 1000;\n\n// --- Buffer cleanup ---\n/** Max age for stale buffer files before cleanup (ms). */\nexport const STALE_BUFFER_MAX_AGE_MS = 24 * 60 * 60 * 1000;\n\n// --- Retry backoff ---\n/** Retry delays for daemon health check (ms). */\nexport const DAEMON_HEALTH_RETRY_DELAYS = [100, 200, 400, 800, 1500];\n\n// --- Slug limits ---\n/** Max length for slugified artifact IDs. */\nexport const MAX_SLUG_LENGTH = 100;\n\n// --- Content preview for classification prompt ---\n/** Max chars of file content per candidate in classification prompt. */\nexport const CANDIDATE_CONTENT_PREVIEW = 2000;\n\n// --- Transcript mining ---\n/** Minimum content length to consider a transcript entry meaningful. */\nexport const MIN_TRANSCRIPT_CONTENT_LENGTH = 10;\n\n// --- Query limits ---\n/** Max recent sessions to check for lineage heuristics. */\nexport const LINEAGE_RECENT_SESSIONS_LIMIT = 5;\n/** Max related memories to query for session notes. */\nexport const RELATED_MEMORIES_LIMIT = 50;\n\n// --- Context injection ---\n/** Max active plans to inject at session start. */\nexport const SESSION_CONTEXT_MAX_PLANS = 3;\n/** Max memories to inject per prompt. */\nexport const PROMPT_CONTEXT_MAX_MEMORIES = 3;\n/** Minimum similarity score for prompt context injection (0-1). */\nexport const PROMPT_CONTEXT_MIN_SIMILARITY = 0.3;\n/** Max token budget for session-start context injection. */\nexport const SESSION_CONTEXT_MAX_TOKENS = 500;\n/** Max token budget for per-prompt context injection. */\nexport const PROMPT_CONTEXT_MAX_TOKENS = 300;\n/** Minimum prompt length to trigger context search. */\nexport const PROMPT_CONTEXT_MIN_LENGTH = 10;\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/constants.ts"],"sourcesContent":["/**\n * Shared constants for the Myco codebase.\n * Per CLAUDE.md: \"No Magic Literals — Numeric and string constants\n * MUST NOT appear inline in logic.\"\n */\n\n// --- Token estimation ---\n/** Approximate characters per token for the chars/4 heuristic. */\nexport const CHARS_PER_TOKEN = 4;\n\n// --- Embedding ---\n/** Max characters of text sent to the embedding model. */\nexport const EMBEDDING_INPUT_LIMIT = 8000;\n\n// --- Truncation limits (display/preview) ---\n/** Max chars for a user prompt preview in event summaries. */\nexport const PROMPT_PREVIEW_CHARS = 300;\n/** Max chars for an AI response preview in event summaries. */\nexport const AI_RESPONSE_PREVIEW_CHARS = 500;\n/** Max chars for a command string preview. */\nexport const COMMAND_PREVIEW_CHARS = 80;\n/** Max chars for a content snippet in search results. */\nexport const CONTENT_SNIPPET_CHARS = 120;\n/** Max chars for a tool output preview in hooks. */\nexport const TOOL_OUTPUT_PREVIEW_CHARS = 200;\n/** Max chars for a session summary preview in MCP tools. */\nexport const SESSION_SUMMARY_PREVIEW_CHARS = 300;\n/** Max chars for a recall summary preview. */\nexport const RECALL_SUMMARY_PREVIEW_CHARS = 200;\n\n// --- Context injection layer budgets (chars, not tokens — used with .slice()) ---\nexport const CONTEXT_PLAN_PREVIEW_CHARS = 100;\nexport const CONTEXT_SESSION_PREVIEW_CHARS = 80;\nexport const CONTEXT_MEMORY_PREVIEW_CHARS = 80;\n\n// --- Processor maxTokens budgets ---\n/** Response token budget for observation extraction. */\nexport const EXTRACTION_MAX_TOKENS = 2048;\n/** Response token budget for session summary. */\nexport const SUMMARY_MAX_TOKENS = 512;\n/** Response token budget for session title generation. */\nexport const TITLE_MAX_TOKENS = 32;\n/** Response token budget for artifact classification. */\nexport const CLASSIFICATION_MAX_TOKENS = 1024;\n\n// --- Timeouts ---\n/** Daemon client HTTP request timeout (ms). */\nexport const DAEMON_CLIENT_TIMEOUT_MS = 2000;\n/** Health check timeout (ms) — fail fast if daemon isn't responding. */\nexport const DAEMON_HEALTH_CHECK_TIMEOUT_MS = 500;\n/** LLM request timeout (ms) — prevents hung requests from blocking stop processing. */\nexport const LLM_REQUEST_TIMEOUT_MS = 30_000;\n/** Embedding request timeout (ms). */\nexport const EMBEDDING_REQUEST_TIMEOUT_MS = 10_000;\n/** Stdin read timeout for hooks (ms). */\nexport const STDIN_TIMEOUT_MS = 100;\n/** Chokidar write stability threshold (ms). */\nexport const FILE_WATCH_STABILITY_MS = 1000;\n\n// --- Buffer cleanup ---\n/** Max age for stale buffer files before cleanup (ms). */\nexport const STALE_BUFFER_MAX_AGE_MS = 24 * 60 * 60 * 1000;\n\n// --- Retry backoff ---\n/** Retry delays for daemon health check (ms). */\nexport const DAEMON_HEALTH_RETRY_DELAYS = [100, 200, 400, 800, 1500];\n\n// --- Slug limits ---\n/** Max length for slugified artifact IDs. */\nexport const MAX_SLUG_LENGTH = 100;\n\n// --- Content preview for classification prompt ---\n/** Max chars of file content per candidate in classification prompt. */\nexport const CANDIDATE_CONTENT_PREVIEW = 2000;\n\n// --- Transcript mining ---\n/** Minimum content length to consider a transcript entry meaningful. */\nexport const MIN_TRANSCRIPT_CONTENT_LENGTH = 10;\n\n// --- Query limits ---\n/** Max recent sessions to check for lineage heuristics. */\nexport const LINEAGE_RECENT_SESSIONS_LIMIT = 5;\n/** Max related memories to query for session notes. */\nexport const RELATED_MEMORIES_LIMIT = 50;\n\n// --- Context injection ---\n/** Max active plans to inject at session start. */\nexport const SESSION_CONTEXT_MAX_PLANS = 3;\n/** Max memories to inject per prompt. */\nexport const PROMPT_CONTEXT_MAX_MEMORIES = 3;\n/** Minimum similarity score for prompt context injection (0-1). */\nexport const PROMPT_CONTEXT_MIN_SIMILARITY = 0.3;\n/** Max token budget for session-start context injection. */\nexport const SESSION_CONTEXT_MAX_TOKENS = 500;\n/** Max token budget for per-prompt context injection. */\nexport const PROMPT_CONTEXT_MAX_TOKENS = 300;\n/** Minimum prompt length to trigger context search. */\nexport const PROMPT_CONTEXT_MIN_LENGTH = 10;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQO,IAAM,kBAAkB;AAIxB,IAAM,wBAAwB;AAI9B,IAAM,uBAAuB;AAE7B,IAAM,4BAA4B;AAElC,IAAM,wBAAwB;AAE9B,IAAM,wBAAwB;AAE9B,IAAM,4BAA4B;AAElC,IAAM,gCAAgC;AAEtC,IAAM,+BAA+B;AAGrC,IAAM,6BAA6B;AACnC,IAAM,gCAAgC;AACtC,IAAM,+BAA+B;AAIrC,IAAM,wBAAwB;AAE9B,IAAM,qBAAqB;AAE3B,IAAM,mBAAmB;AAEzB,IAAM,4BAA4B;AAIlC,IAAM,2BAA2B;AAEjC,IAAM,iCAAiC;AAEvC,IAAM,yBAAyB;AAE/B,IAAM,+BAA+B;AAErC,IAAM,mBAAmB;AAEzB,IAAM,0BAA0B;AAIhC,IAAM,0BAA0B,KAAK,KAAK,KAAK;AAI/C,IAAM,6BAA6B,CAAC,KAAK,KAAK,KAAK,KAAK,IAAI;AAI5D,IAAM,kBAAkB;AAIxB,IAAM,4BAA4B;AAQlC,IAAM,gCAAgC;AAEtC,IAAM,yBAAyB;AAI/B,IAAM,4BAA4B;AAElC,IAAM,8BAA8B;AAEpC,IAAM,gCAAgC;AAMtC,IAAM,4BAA4B;","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
LEVEL_ORDER
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-6C26YFOA.js";
|
|
5
5
|
|
|
6
6
|
// src/logs/reader.ts
|
|
7
7
|
import fs from "fs";
|
|
@@ -88,4 +88,4 @@ export {
|
|
|
88
88
|
queryLogs,
|
|
89
89
|
matchesFilter
|
|
90
90
|
};
|
|
91
|
-
//# sourceMappingURL=chunk-
|
|
91
|
+
//# sourceMappingURL=chunk-S4WBXXO6.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
__export,
|
|
5
5
|
__require,
|
|
6
6
|
__toESM
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-O5VSPHDL.js";
|
|
8
8
|
|
|
9
9
|
// node_modules/yaml/dist/nodes/identity.js
|
|
10
10
|
var require_identity = __commonJS({
|
|
@@ -21169,4 +21169,4 @@ export {
|
|
|
21169
21169
|
external_exports,
|
|
21170
21170
|
loadConfig
|
|
21171
21171
|
};
|
|
21172
|
-
//# sourceMappingURL=chunk-
|
|
21172
|
+
//# sourceMappingURL=chunk-YXZEP5U6.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
DEFAULT_LOG_TAIL,
|
|
5
5
|
matchesFilter,
|
|
6
6
|
queryLogs
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-S4WBXXO6.js";
|
|
8
8
|
import {
|
|
9
9
|
LEVEL_ORDER,
|
|
10
10
|
VectorIndex,
|
|
@@ -13,26 +13,24 @@ import {
|
|
|
13
13
|
initFts,
|
|
14
14
|
rebuildIndex,
|
|
15
15
|
searchFts
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-6C26YFOA.js";
|
|
17
17
|
import {
|
|
18
18
|
MycoIndex
|
|
19
19
|
} from "./chunk-PA3VMINE.js";
|
|
20
20
|
import {
|
|
21
21
|
loadConfig,
|
|
22
22
|
require_dist
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-YXZEP5U6.js";
|
|
24
24
|
import {
|
|
25
25
|
resolveVaultDir
|
|
26
26
|
} from "./chunk-N33KUCFP.js";
|
|
27
27
|
import {
|
|
28
28
|
AgentRegistry
|
|
29
|
-
} from "./chunk-
|
|
30
|
-
import {
|
|
31
|
-
EMBEDDING_INPUT_LIMIT
|
|
32
|
-
} from "./chunk-NYNEJ5QY.js";
|
|
29
|
+
} from "./chunk-BXFS4PCJ.js";
|
|
33
30
|
import {
|
|
31
|
+
EMBEDDING_INPUT_LIMIT,
|
|
34
32
|
__toESM
|
|
35
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-O5VSPHDL.js";
|
|
36
34
|
|
|
37
35
|
// src/cli.ts
|
|
38
36
|
import fs from "fs";
|
|
@@ -338,7 +336,7 @@ async function restart(vaultDir) {
|
|
|
338
336
|
} catch {
|
|
339
337
|
}
|
|
340
338
|
}
|
|
341
|
-
const { DaemonClient } = await import("./client-
|
|
339
|
+
const { DaemonClient } = await import("./client-TEUHXGOY.js");
|
|
342
340
|
const client = new DaemonClient(vaultDir);
|
|
343
341
|
console.log("Waiting for health check...");
|
|
344
342
|
const healthy = await client.ensureRunning();
|
|
@@ -622,4 +620,4 @@ main().catch((err) => {
|
|
|
622
620
|
console.error(`myco: ${err.message}`);
|
|
623
621
|
process.exit(1);
|
|
624
622
|
});
|
|
625
|
-
//# sourceMappingURL=cli-
|
|
623
|
+
//# sourceMappingURL=cli-KMWJFK5Y.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../src/logs/format.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { EMBEDDING_INPUT_LIMIT } from './constants.js';\nimport { resolveVaultDir } from './vault/resolve.js';\nimport { MycoIndex } from './index/sqlite.js';\nimport { VectorIndex } from './index/vectors.js';\nimport { searchFts } from './index/fts.js';\nimport { loadConfig } from './config/loader.js';\nimport { createEmbeddingProvider } from './intelligence/llm.js';\nimport { generateEmbedding } from './intelligence/embeddings.js';\nimport { rebuildIndex } from './index/rebuild.js';\nimport { initFts } from './index/fts.js';\nimport { AgentRegistry } from './agents/registry.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\nimport { 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';\n\n// Load .env from cwd (not script location — that's the plugin install dir)\nfunction loadEnv(): void {\n const envPath = path.resolve(process.cwd(), '.env');\n if (!fs.existsSync(envPath)) return;\n for (const line of fs.readFileSync(envPath, 'utf-8').split('\\n')) {\n const match = line.match(/^\\s*([^#=]+?)\\s*=\\s*(.*?)\\s*$/);\n if (match && !process.env[match[1]]) {\n process.env[match[1]] = match[2];\n }\n }\n}\nloadEnv();\n\nimport YAML from 'yaml';\n\nconst USAGE = `Usage: myco <command> [args]\n\nCommands:\n init [options] Initialize a new vault\n stats Vault health, index counts, vector count\n search <query> Combined FTS + vector search with scores\n vectors <query> Raw vector search with similarity scores\n session [id|latest] Show a session note\n logs [options] View daemon logs (--tail N, --follow, --level, --component)\n restart Restart the daemon with current code\n rebuild Reindex the entire vault\n\nInit options:\n --vault <path> Vault directory (default: .myco/ in project root)\n --llm-provider <name> LLM provider: ollama, lm-studio, anthropic\n --llm-model <name> LLM model name (e.g., gpt-oss)\n --llm-url <url> LLM base URL (default per provider)\n --embedding-provider <name> Embedding provider: ollama, lm-studio\n --embedding-model <name> Embedding model name (e.g., bge-m3)\n --embedding-url <url> Embedding base URL (default per provider)\n --user <name> Team username\n --team Enable team mode\n`;\n\nasync function main(): Promise<void> {\n const [cmd, ...args] = process.argv.slice(2);\n if (!cmd || cmd === '--help' || cmd === '-h') {\n process.stdout.write(USAGE);\n return;\n }\n\n // Init doesn't require an existing vault\n if (cmd === 'init') return initVault(args);\n\n const vaultDir = resolveVaultDir();\n if (!fs.existsSync(path.join(vaultDir, 'myco.yaml'))) {\n console.error(`No myco.yaml found in ${vaultDir}. Run 'myco init' first.`);\n process.exit(1);\n }\n\n switch (cmd) {\n case 'stats': return stats(vaultDir);\n case 'search': return search(vaultDir, args.join(' '));\n case 'vectors': return vectors(vaultDir, args.join(' '));\n case 'session': return session(vaultDir, args[0]);\n case 'restart': return restart(vaultDir);\n case 'rebuild': return rebuild(vaultDir);\n case 'logs': return logs(vaultDir, args);\n default:\n console.error(`Unknown command: ${cmd}`);\n process.stdout.write(USAGE);\n process.exit(1);\n }\n}\n\nfunction stats(vaultDir: string): void {\n const index = new MycoIndex(path.join(vaultDir, 'index.db'));\n\n const sessions = index.query({ type: 'session' });\n const memories = index.query({ type: 'memory' });\n const plans = index.query({ type: 'plan' });\n\n console.log('=== Myco Vault ===');\n console.log(`Path: ${vaultDir}`);\n console.log();\n console.log('--- Index ---');\n console.log(`Sessions: ${sessions.length}`);\n console.log(`Memories: ${memories.length}`);\n console.log(`Plans: ${plans.length}`);\n\n // Memory breakdown by type\n const types: Record<string, number> = {};\n for (const m of memories) {\n const t = (m.frontmatter as Record<string, unknown>)?.observation_type as string || 'unknown';\n types[t] = (types[t] || 0) + 1;\n }\n if (Object.keys(types).length > 0) {\n console.log('\\n--- Memories by Type ---');\n for (const [t, c] of Object.entries(types).sort((a, b) => b[1] - a[1])) {\n console.log(` ${t}: ${c}`);\n }\n }\n\n // Vector index — need dimensions to open; read from daemon config or probe\n const vecDb = path.join(vaultDir, 'vectors.db');\n if (fs.existsSync(vecDb)) {\n try {\n // Use a common dimension; VectorIndex only needs it for CREATE IF NOT EXISTS\n const vec = new VectorIndex(vecDb, 1024);\n console.log(`\\n--- Vectors ---`);\n console.log(`Embeddings: ${vec.count()}`);\n vec.close();\n } catch (e) {\n console.log(`\\nVectors: error — ${(e as Error).message}`);\n }\n } else {\n console.log('\\nVectors: not initialized');\n }\n\n // Daemon\n const daemonPath = path.join(vaultDir, 'daemon.json');\n if (fs.existsSync(daemonPath)) {\n try {\n const daemon = JSON.parse(fs.readFileSync(daemonPath, 'utf-8'));\n const alive = isProcessAlive(daemon.pid);\n console.log(`\\n--- Daemon ---`);\n console.log(`PID: ${daemon.pid} (${alive ? 'running' : 'dead'})`);\n console.log(`Port: ${daemon.port}`);\n console.log(`Started: ${daemon.started}`);\n console.log(`Sessions: ${(daemon.sessions || []).length}`);\n } catch { /* ignore */ }\n }\n\n index.close();\n}\n\nasync function search(vaultDir: string, query: string): Promise<void> {\n if (!query) { console.error('Usage: myco search <query>'); process.exit(1); }\n\n const index = new MycoIndex(path.join(vaultDir, 'index.db'));\n\n // Semantic search is primary\n const vecDb = path.join(vaultDir, 'vectors.db');\n if (fs.existsSync(vecDb)) {\n try {\n const config = loadConfig(vaultDir);\n const embeddingProvider = createEmbeddingProvider(config.intelligence.embedding);\n const emb = await generateEmbedding(embeddingProvider, query);\n const vec = new VectorIndex(vecDb, emb.dimensions);\n\n console.log(`=== Semantic Search: \"${query}\" ===`);\n const results = vec.search(emb.embedding, { limit: 10 });\n if (results.length === 0) {\n console.log(' (no results)');\n } else {\n const noteMap = new Map(\n index.queryByIds(results.map((r) => r.id)).map((n) => [n.id, n]),\n );\n for (const r of results) {\n const title = noteMap.get(r.id)?.title || r.id;\n console.log(` sim: ${r.similarity.toFixed(3)} | [${r.metadata.type}] ${title.slice(0, 60)}`);\n }\n }\n vec.close();\n } catch (e) {\n console.log(`Semantic search unavailable: ${(e as Error).message}`);\n }\n }\n\n // FTS as fallback / supplementary\n console.log(`\\n=== FTS Search: \"${query}\" ===`);\n const ftsResults = searchFts(index, query, { limit: 10 });\n if (ftsResults.length === 0) {\n console.log(' (no results)');\n } else {\n for (const r of ftsResults) {\n console.log(` [${r.type}] ${r.title?.slice(0, 70)}`);\n if (r.snippet) console.log(` ${r.snippet.slice(0, 100)}`);\n }\n }\n\n index.close();\n}\n\nasync function vectors(vaultDir: string, query: string): Promise<void> {\n if (!query) { console.error('Usage: myco vectors <query>'); process.exit(1); }\n\n const config = loadConfig(vaultDir);\n const embeddingProvider = createEmbeddingProvider(config.intelligence.embedding);\n const emb = await generateEmbedding(embeddingProvider, query);\n\n const vecDb = path.join(vaultDir, 'vectors.db');\n if (!fs.existsSync(vecDb)) { console.error('No vector index found'); process.exit(1); }\n\n const vec = new VectorIndex(vecDb, emb.dimensions);\n const index = new MycoIndex(path.join(vaultDir, 'index.db'));\n\n // Show all results with no threshold filtering for tuning\n const results = vec.search(emb.embedding, { limit: 20, relativeThreshold: 0 });\n\n console.log(`Query: \"${query}\"`);\n console.log(`Dimensions: ${emb.dimensions}`);\n console.log(`Total vectors: ${vec.count()}`);\n console.log();\n\n if (results.length === 0) {\n console.log('(no results)');\n } else {\n const noteMap = new Map(\n index.queryByIds(results.map((r) => r.id)).map((n) => [n.id, n]),\n );\n const topScore = results[0].similarity;\n console.log(`Top score: ${topScore.toFixed(4)}`);\n console.log(`Default threshold (0.5x): ${(topScore * 0.5).toFixed(4)}`);\n console.log();\n console.log(' Sim Ratio Type ID / Title');\n console.log(' ------ ----- --------- ' + '-'.repeat(50));\n for (const r of results) {\n const title = noteMap.get(r.id)?.title || r.id;\n const ratio = (r.similarity / topScore).toFixed(2);\n const pass = r.similarity >= topScore * 0.5 ? '✓' : ' ';\n console.log(`${pass} ${r.similarity.toFixed(4)} ${ratio} ${r.metadata.type.padEnd(9)} ${title.slice(0, 50)}`);\n }\n }\n\n vec.close();\n index.close();\n}\n\nfunction session(vaultDir: string, idOrLatest?: string): void {\n const index = new MycoIndex(path.join(vaultDir, 'index.db'));\n const sessions = index.query({ type: 'session' });\n\n if (sessions.length === 0) {\n console.log('No sessions found');\n index.close();\n return;\n }\n\n let target;\n if (!idOrLatest || idOrLatest === 'latest') {\n target = sessions[sessions.length - 1];\n } else {\n target = sessions.find((s) => s.id.includes(idOrLatest));\n }\n\n if (!target) {\n console.error(`Session not found: ${idOrLatest}`);\n console.log('Available:', sessions.map((s) => s.id).join(', '));\n index.close();\n return;\n }\n\n // Read the raw markdown file\n const fullPath = path.join(vaultDir, target.path);\n if (fs.existsSync(fullPath)) {\n console.log(fs.readFileSync(fullPath, 'utf-8'));\n } else {\n console.log(`Title: ${target.title}`);\n console.log(`Content:\\n${target.content?.slice(0, 2000)}`);\n }\n\n index.close();\n}\n\nasync function restart(vaultDir: string): Promise<void> {\n const daemonPath = path.join(vaultDir, 'daemon.json');\n\n // Kill existing daemon if running\n if (fs.existsSync(daemonPath)) {\n try {\n const daemon = JSON.parse(fs.readFileSync(daemonPath, 'utf-8'));\n if (isProcessAlive(daemon.pid)) {\n process.kill(daemon.pid, 'SIGTERM');\n console.log(`Stopped daemon (pid ${daemon.pid})`);\n } else {\n console.log(`Daemon pid ${daemon.pid} was already dead`);\n }\n } catch { /* ignore */ }\n try { fs.unlinkSync(daemonPath); } catch { /* already gone */ }\n }\n\n // Spawn and wait for health using the shared client\n // (handles CLAUDE_PLUGIN_ROOT + CURSOR_PLUGIN_ROOT resolution)\n const { DaemonClient } = await import('./hooks/client.js');\n const client = new DaemonClient(vaultDir);\n\n console.log('Waiting for health check...');\n const healthy = await client.ensureRunning();\n if (healthy) {\n try {\n const info = JSON.parse(fs.readFileSync(daemonPath, 'utf-8'));\n console.log(`Daemon healthy on port ${info.port}`);\n } catch {\n console.log('Daemon healthy');\n }\n } else {\n console.error('Daemon failed to become healthy');\n }\n}\n\nasync function rebuild(vaultDir: string): Promise<void> {\n console.log(`Rebuilding index for ${vaultDir}...`);\n const index = new MycoIndex(path.join(vaultDir, 'index.db'));\n initFts(index);\n const count = rebuildIndex(index, vaultDir);\n console.log(`Indexed ${count} notes (FTS)`);\n\n // Rebuild vector embeddings for all notes\n const vecDb = path.join(vaultDir, 'vectors.db');\n try {\n const config = loadConfig(vaultDir);\n const embeddingProvider = createEmbeddingProvider(config.intelligence.embedding);\n const testEmbed = await embeddingProvider.embed('test');\n const vec = new VectorIndex(vecDb, testEmbed.dimensions);\n\n const allNotes = index.query({});\n // Skip superseded/archived memories — they shouldn't appear in vector search\n const activeNotes = allNotes.filter((n) => {\n const status = (n.frontmatter as Record<string, unknown>)?.status as string | undefined;\n return status !== 'superseded' && status !== 'archived';\n });\n let embedded = 0;\n for (const note of activeNotes) {\n const text = `${note.title}\\n${note.content}`.slice(0, EMBEDDING_INPUT_LIMIT);\n try {\n const emb = await generateEmbedding(embeddingProvider, text);\n vec.upsert(note.id, emb.embedding, {\n type: note.type,\n session_id: (note.frontmatter as Record<string, unknown>)?.session as string ?? '',\n });\n embedded++;\n process.stdout.write(`\\rEmbedded ${embedded}/${activeNotes.length}`);\n } catch (e) {\n console.error(`\\nFailed to embed ${note.id}: ${(e as Error).message}`);\n }\n }\n console.log(`\\nEmbedded ${embedded} notes (vectors)\nSkipped ${allNotes.length - activeNotes.length} superseded/archived`);\n vec.close();\n } catch (e) {\n console.log(`Vector rebuild skipped: ${(e as Error).message}`);\n }\n\n index.close();\n}\n\n/** Polling interval for follow mode (milliseconds). */\nconst FOLLOW_POLL_INTERVAL_MS = 500;\n\nfunction logs(vaultDir: string, args: 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\nfunction isProcessAlive(pid: number): boolean {\n try { process.kill(pid, 0); return true; } catch { return false; }\n}\n\n// --- Provider defaults ---\nconst PROVIDER_DEFAULTS: Record<string, { base_url: string }> = {\n ollama: { base_url: 'http://localhost:11434' },\n 'lm-studio': { base_url: 'http://localhost:1234' },\n};\n\nconst DASHBOARD_CONTENT = `# Myco Vault\n\n## Active Plans\n\\`\\`\\`dataview\nTABLE status, tags FROM #type/plan\nWHERE status = \"active\" OR status = \"in_progress\"\nSORT created DESC\n\\`\\`\\`\n\n## Recent Sessions\n\\`\\`\\`dataview\nTABLE user, started, tools_used FROM #type/session\nSORT started DESC LIMIT 10\n\\`\\`\\`\n\n## Recent Memories\n\\`\\`\\`dataview\nTABLE observation_type AS \"Type\", created FROM #type/memory\nSORT created DESC LIMIT 15\n\\`\\`\\`\n\n## Memories by Type\n\\`\\`\\`dataview\nTABLE WITHOUT ID observation_type AS \"Type\", length(rows) AS \"Count\"\nFROM #type/memory GROUP BY observation_type\nSORT length(rows) DESC\n\\`\\`\\`\n\n## Gotchas\n\\`\\`\\`dataview\nLIST FROM #memory/gotcha SORT created DESC LIMIT 10\n\\`\\`\\`\n`;\n\nconst VAULT_GITIGNORE = `# Runtime — rebuilt on daemon startup\nindex.db\nindex.db-wal\nindex.db-shm\nvectors.db\n\n# Daemon state — per-machine, ephemeral\ndaemon.json\nbuffer/\nlogs/\n\n# Obsidian — per-user workspace config\n.obsidian/\n`;\n\n/** Set MYCO_VAULT_DIR in the active agent's config, falling back to all known agents. */\nfunction configureVaultEnv(projectRoot: string, vaultDir: string): void {\n const registry = new AgentRegistry();\n const active = registry.detectActiveAgent();\n\n if (active) {\n if (active.configureVaultEnv(projectRoot, vaultDir)) {\n console.log(`Set MYCO_VAULT_DIR for ${active.displayName}`);\n }\n } else {\n // No active agent detected — try all adapters\n for (const name of registry.adapterNames) {\n const adapter = registry.getAdapter(name);\n if (adapter?.configureVaultEnv(projectRoot, vaultDir)) {\n console.log(`Set MYCO_VAULT_DIR for ${adapter.displayName}`);\n }\n }\n }\n\n console.log(`\\nFor other agents, add to your shell profile:`);\n console.log(` export MYCO_VAULT_DIR=\"${vaultDir}\"\\n`);\n}\n\nasync function initVault(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\nmain().catch((err) => {\n console.error(`myco: ${(err as Error).message}`);\n process.exit(1);\n});\n","import type { LogEntry } from '../daemon/logger.js';\n\n/** Max display length for extra field values in pretty-printed output. */\nconst LOG_VALUE_MAX_DISPLAY = 80;\n\n/** Core fields that are handled positionally, not as extras. */\nconst CORE_FIELDS: ReadonlyArray<keyof LogEntry> = ['timestamp', 'level', 'component', 'message'];\n\nexport function formatLogLine(entry: LogEntry): string {\n const time = formatLocalTime(entry.timestamp);\n const lvl = entry.level.toUpperCase().padEnd(5);\n const comp = `[${entry.component}]`.padEnd(14);\n\n const extras: string[] = [];\n for (const [key, value] of Object.entries(entry)) {\n if (CORE_FIELDS.includes(key)) continue;\n const str = String(value);\n const display = str.length > LOG_VALUE_MAX_DISPLAY\n ? str.slice(0, LOG_VALUE_MAX_DISPLAY) + '...'\n : str;\n extras.push(`${key}=${display}`);\n }\n\n const extraStr = extras.length > 0 ? ' ' + extras.join(' ') : '';\n return `${time} ${lvl} ${comp} ${entry.message}${extraStr}`;\n}\n\nexport function formatLocalTime(iso: string): string {\n const d = new Date(iso);\n const hh = String(d.getHours()).padStart(2, '0');\n const mm = String(d.getMinutes()).padStart(2, '0');\n const ss = String(d.getSeconds()).padStart(2, '0');\n return `${hh}:${mm}:${ss}`;\n}\n\nexport function parseIntFlag(args: string[], long: string, short?: string): number | undefined {\n for (let i = 0; i < args.length; i++) {\n if (args[i] === long || (short && args[i] === short)) {\n const val = parseInt(args[i + 1], 10);\n return isNaN(val) ? undefined : val;\n }\n }\n return undefined;\n}\n\nexport function parseStringFlag(args: string[], long: string, short?: string): string | undefined {\n for (let i = 0; i < args.length; i++) {\n if (args[i] === long || (short && args[i] === short)) {\n return args[i + 1];\n }\n }\n return undefined;\n}\n"],"mappings":"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","names":["YAML"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/logs/format.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { EMBEDDING_INPUT_LIMIT } from './constants.js';\nimport { resolveVaultDir } from './vault/resolve.js';\nimport { MycoIndex } from './index/sqlite.js';\nimport { VectorIndex } from './index/vectors.js';\nimport { searchFts } from './index/fts.js';\nimport { loadConfig } from './config/loader.js';\nimport { createEmbeddingProvider } from './intelligence/llm.js';\nimport { generateEmbedding } from './intelligence/embeddings.js';\nimport { rebuildIndex } from './index/rebuild.js';\nimport { initFts } from './index/fts.js';\nimport { AgentRegistry } from './agents/registry.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\nimport { 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';\n\n// Load .env from cwd (not script location — that's the plugin install dir)\nfunction loadEnv(): void {\n const envPath = path.resolve(process.cwd(), '.env');\n if (!fs.existsSync(envPath)) return;\n for (const line of fs.readFileSync(envPath, 'utf-8').split('\\n')) {\n const match = line.match(/^\\s*([^#=]+?)\\s*=\\s*(.*?)\\s*$/);\n if (match && !process.env[match[1]]) {\n process.env[match[1]] = match[2];\n }\n }\n}\nloadEnv();\n\nimport YAML from 'yaml';\n\nconst USAGE = `Usage: myco <command> [args]\n\nCommands:\n init [options] Initialize a new vault\n stats Vault health, index counts, vector count\n search <query> Combined FTS + vector search with scores\n vectors <query> Raw vector search with similarity scores\n session [id|latest] Show a session note\n logs [options] View daemon logs (--tail N, --follow, --level, --component)\n restart Restart the daemon with current code\n rebuild Reindex the entire vault\n\nInit options:\n --vault <path> Vault directory (default: .myco/ in project root)\n --llm-provider <name> LLM provider: ollama, lm-studio, anthropic\n --llm-model <name> LLM model name (e.g., gpt-oss)\n --llm-url <url> LLM base URL (default per provider)\n --embedding-provider <name> Embedding provider: ollama, lm-studio\n --embedding-model <name> Embedding model name (e.g., bge-m3)\n --embedding-url <url> Embedding base URL (default per provider)\n --user <name> Team username\n --team Enable team mode\n`;\n\nasync function main(): Promise<void> {\n const [cmd, ...args] = process.argv.slice(2);\n if (!cmd || cmd === '--help' || cmd === '-h') {\n process.stdout.write(USAGE);\n return;\n }\n\n // Init doesn't require an existing vault\n if (cmd === 'init') return initVault(args);\n\n const vaultDir = resolveVaultDir();\n if (!fs.existsSync(path.join(vaultDir, 'myco.yaml'))) {\n console.error(`No myco.yaml found in ${vaultDir}. Run 'myco init' first.`);\n process.exit(1);\n }\n\n switch (cmd) {\n case 'stats': return stats(vaultDir);\n case 'search': return search(vaultDir, args.join(' '));\n case 'vectors': return vectors(vaultDir, args.join(' '));\n case 'session': return session(vaultDir, args[0]);\n case 'restart': return restart(vaultDir);\n case 'rebuild': return rebuild(vaultDir);\n case 'logs': return logs(vaultDir, args);\n default:\n console.error(`Unknown command: ${cmd}`);\n process.stdout.write(USAGE);\n process.exit(1);\n }\n}\n\nfunction stats(vaultDir: string): void {\n const index = new MycoIndex(path.join(vaultDir, 'index.db'));\n\n const sessions = index.query({ type: 'session' });\n const memories = index.query({ type: 'memory' });\n const plans = index.query({ type: 'plan' });\n\n console.log('=== Myco Vault ===');\n console.log(`Path: ${vaultDir}`);\n console.log();\n console.log('--- Index ---');\n console.log(`Sessions: ${sessions.length}`);\n console.log(`Memories: ${memories.length}`);\n console.log(`Plans: ${plans.length}`);\n\n // Memory breakdown by type\n const types: Record<string, number> = {};\n for (const m of memories) {\n const t = (m.frontmatter as Record<string, unknown>)?.observation_type as string || 'unknown';\n types[t] = (types[t] || 0) + 1;\n }\n if (Object.keys(types).length > 0) {\n console.log('\\n--- Memories by Type ---');\n for (const [t, c] of Object.entries(types).sort((a, b) => b[1] - a[1])) {\n console.log(` ${t}: ${c}`);\n }\n }\n\n // Vector index — need dimensions to open; read from daemon config or probe\n const vecDb = path.join(vaultDir, 'vectors.db');\n if (fs.existsSync(vecDb)) {\n try {\n // Use a common dimension; VectorIndex only needs it for CREATE IF NOT EXISTS\n const vec = new VectorIndex(vecDb, 1024);\n console.log(`\\n--- Vectors ---`);\n console.log(`Embeddings: ${vec.count()}`);\n vec.close();\n } catch (e) {\n console.log(`\\nVectors: error — ${(e as Error).message}`);\n }\n } else {\n console.log('\\nVectors: not initialized');\n }\n\n // Daemon\n const daemonPath = path.join(vaultDir, 'daemon.json');\n if (fs.existsSync(daemonPath)) {\n try {\n const daemon = JSON.parse(fs.readFileSync(daemonPath, 'utf-8'));\n const alive = isProcessAlive(daemon.pid);\n console.log(`\\n--- Daemon ---`);\n console.log(`PID: ${daemon.pid} (${alive ? 'running' : 'dead'})`);\n console.log(`Port: ${daemon.port}`);\n console.log(`Started: ${daemon.started}`);\n console.log(`Sessions: ${(daemon.sessions || []).length}`);\n } catch { /* ignore */ }\n }\n\n index.close();\n}\n\nasync function search(vaultDir: string, query: string): Promise<void> {\n if (!query) { console.error('Usage: myco search <query>'); process.exit(1); }\n\n const index = new MycoIndex(path.join(vaultDir, 'index.db'));\n\n // Semantic search is primary\n const vecDb = path.join(vaultDir, 'vectors.db');\n if (fs.existsSync(vecDb)) {\n try {\n const config = loadConfig(vaultDir);\n const embeddingProvider = createEmbeddingProvider(config.intelligence.embedding);\n const emb = await generateEmbedding(embeddingProvider, query);\n const vec = new VectorIndex(vecDb, emb.dimensions);\n\n console.log(`=== Semantic Search: \"${query}\" ===`);\n const results = vec.search(emb.embedding, { limit: 10 });\n if (results.length === 0) {\n console.log(' (no results)');\n } else {\n const noteMap = new Map(\n index.queryByIds(results.map((r) => r.id)).map((n) => [n.id, n]),\n );\n for (const r of results) {\n const title = noteMap.get(r.id)?.title || r.id;\n console.log(` sim: ${r.similarity.toFixed(3)} | [${r.metadata.type}] ${title.slice(0, 60)}`);\n }\n }\n vec.close();\n } catch (e) {\n console.log(`Semantic search unavailable: ${(e as Error).message}`);\n }\n }\n\n // FTS as fallback / supplementary\n console.log(`\\n=== FTS Search: \"${query}\" ===`);\n const ftsResults = searchFts(index, query, { limit: 10 });\n if (ftsResults.length === 0) {\n console.log(' (no results)');\n } else {\n for (const r of ftsResults) {\n console.log(` [${r.type}] ${r.title?.slice(0, 70)}`);\n if (r.snippet) console.log(` ${r.snippet.slice(0, 100)}`);\n }\n }\n\n index.close();\n}\n\nasync function vectors(vaultDir: string, query: string): Promise<void> {\n if (!query) { console.error('Usage: myco vectors <query>'); process.exit(1); }\n\n const config = loadConfig(vaultDir);\n const embeddingProvider = createEmbeddingProvider(config.intelligence.embedding);\n const emb = await generateEmbedding(embeddingProvider, query);\n\n const vecDb = path.join(vaultDir, 'vectors.db');\n if (!fs.existsSync(vecDb)) { console.error('No vector index found'); process.exit(1); }\n\n const vec = new VectorIndex(vecDb, emb.dimensions);\n const index = new MycoIndex(path.join(vaultDir, 'index.db'));\n\n // Show all results with no threshold filtering for tuning\n const results = vec.search(emb.embedding, { limit: 20, relativeThreshold: 0 });\n\n console.log(`Query: \"${query}\"`);\n console.log(`Dimensions: ${emb.dimensions}`);\n console.log(`Total vectors: ${vec.count()}`);\n console.log();\n\n if (results.length === 0) {\n console.log('(no results)');\n } else {\n const noteMap = new Map(\n index.queryByIds(results.map((r) => r.id)).map((n) => [n.id, n]),\n );\n const topScore = results[0].similarity;\n console.log(`Top score: ${topScore.toFixed(4)}`);\n console.log(`Default threshold (0.5x): ${(topScore * 0.5).toFixed(4)}`);\n console.log();\n console.log(' Sim Ratio Type ID / Title');\n console.log(' ------ ----- --------- ' + '-'.repeat(50));\n for (const r of results) {\n const title = noteMap.get(r.id)?.title || r.id;\n const ratio = (r.similarity / topScore).toFixed(2);\n const pass = r.similarity >= topScore * 0.5 ? '✓' : ' ';\n console.log(`${pass} ${r.similarity.toFixed(4)} ${ratio} ${r.metadata.type.padEnd(9)} ${title.slice(0, 50)}`);\n }\n }\n\n vec.close();\n index.close();\n}\n\nfunction session(vaultDir: string, idOrLatest?: string): void {\n const index = new MycoIndex(path.join(vaultDir, 'index.db'));\n const sessions = index.query({ type: 'session' });\n\n if (sessions.length === 0) {\n console.log('No sessions found');\n index.close();\n return;\n }\n\n let target;\n if (!idOrLatest || idOrLatest === 'latest') {\n target = sessions[sessions.length - 1];\n } else {\n target = sessions.find((s) => s.id.includes(idOrLatest));\n }\n\n if (!target) {\n console.error(`Session not found: ${idOrLatest}`);\n console.log('Available:', sessions.map((s) => s.id).join(', '));\n index.close();\n return;\n }\n\n // Read the raw markdown file\n const fullPath = path.join(vaultDir, target.path);\n if (fs.existsSync(fullPath)) {\n console.log(fs.readFileSync(fullPath, 'utf-8'));\n } else {\n console.log(`Title: ${target.title}`);\n console.log(`Content:\\n${target.content?.slice(0, 2000)}`);\n }\n\n index.close();\n}\n\nasync function restart(vaultDir: string): Promise<void> {\n const daemonPath = path.join(vaultDir, 'daemon.json');\n\n // Kill existing daemon if running\n if (fs.existsSync(daemonPath)) {\n try {\n const daemon = JSON.parse(fs.readFileSync(daemonPath, 'utf-8'));\n if (isProcessAlive(daemon.pid)) {\n process.kill(daemon.pid, 'SIGTERM');\n console.log(`Stopped daemon (pid ${daemon.pid})`);\n } else {\n console.log(`Daemon pid ${daemon.pid} was already dead`);\n }\n } catch { /* ignore */ }\n try { fs.unlinkSync(daemonPath); } catch { /* already gone */ }\n }\n\n // Spawn and wait for health using the shared client\n // (handles CLAUDE_PLUGIN_ROOT + CURSOR_PLUGIN_ROOT resolution)\n const { DaemonClient } = await import('./hooks/client.js');\n const client = new DaemonClient(vaultDir);\n\n console.log('Waiting for health check...');\n const healthy = await client.ensureRunning();\n if (healthy) {\n try {\n const info = JSON.parse(fs.readFileSync(daemonPath, 'utf-8'));\n console.log(`Daemon healthy on port ${info.port}`);\n } catch {\n console.log('Daemon healthy');\n }\n } else {\n console.error('Daemon failed to become healthy');\n }\n}\n\nasync function rebuild(vaultDir: string): Promise<void> {\n console.log(`Rebuilding index for ${vaultDir}...`);\n const index = new MycoIndex(path.join(vaultDir, 'index.db'));\n initFts(index);\n const count = rebuildIndex(index, vaultDir);\n console.log(`Indexed ${count} notes (FTS)`);\n\n // Rebuild vector embeddings for all notes\n const vecDb = path.join(vaultDir, 'vectors.db');\n try {\n const config = loadConfig(vaultDir);\n const embeddingProvider = createEmbeddingProvider(config.intelligence.embedding);\n const testEmbed = await embeddingProvider.embed('test');\n const vec = new VectorIndex(vecDb, testEmbed.dimensions);\n\n const allNotes = index.query({});\n // Skip superseded/archived memories — they shouldn't appear in vector search\n const activeNotes = allNotes.filter((n) => {\n const status = (n.frontmatter as Record<string, unknown>)?.status as string | undefined;\n return status !== 'superseded' && status !== 'archived';\n });\n let embedded = 0;\n for (const note of activeNotes) {\n const text = `${note.title}\\n${note.content}`.slice(0, EMBEDDING_INPUT_LIMIT);\n try {\n const emb = await generateEmbedding(embeddingProvider, text);\n vec.upsert(note.id, emb.embedding, {\n type: note.type,\n session_id: (note.frontmatter as Record<string, unknown>)?.session as string ?? '',\n });\n embedded++;\n process.stdout.write(`\\rEmbedded ${embedded}/${activeNotes.length}`);\n } catch (e) {\n console.error(`\\nFailed to embed ${note.id}: ${(e as Error).message}`);\n }\n }\n console.log(`\\nEmbedded ${embedded} notes (vectors)\nSkipped ${allNotes.length - activeNotes.length} superseded/archived`);\n vec.close();\n } catch (e) {\n console.log(`Vector rebuild skipped: ${(e as Error).message}`);\n }\n\n index.close();\n}\n\n/** Polling interval for follow mode (milliseconds). */\nconst FOLLOW_POLL_INTERVAL_MS = 500;\n\nfunction logs(vaultDir: string, args: 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\nfunction isProcessAlive(pid: number): boolean {\n try { process.kill(pid, 0); return true; } catch { return false; }\n}\n\n// --- Provider defaults ---\nconst PROVIDER_DEFAULTS: Record<string, { base_url: string }> = {\n ollama: { base_url: 'http://localhost:11434' },\n 'lm-studio': { base_url: 'http://localhost:1234' },\n};\n\nconst DASHBOARD_CONTENT = `# Myco Vault\n\n## Active Plans\n\\`\\`\\`dataview\nTABLE status, tags FROM #type/plan\nWHERE status = \"active\" OR status = \"in_progress\"\nSORT created DESC\n\\`\\`\\`\n\n## Recent Sessions\n\\`\\`\\`dataview\nTABLE user, started, tools_used FROM #type/session\nSORT started DESC LIMIT 10\n\\`\\`\\`\n\n## Recent Memories\n\\`\\`\\`dataview\nTABLE observation_type AS \"Type\", created FROM #type/memory\nSORT created DESC LIMIT 15\n\\`\\`\\`\n\n## Memories by Type\n\\`\\`\\`dataview\nTABLE WITHOUT ID observation_type AS \"Type\", length(rows) AS \"Count\"\nFROM #type/memory GROUP BY observation_type\nSORT length(rows) DESC\n\\`\\`\\`\n\n## Gotchas\n\\`\\`\\`dataview\nLIST FROM #memory/gotcha SORT created DESC LIMIT 10\n\\`\\`\\`\n`;\n\nconst VAULT_GITIGNORE = `# Runtime — rebuilt on daemon startup\nindex.db\nindex.db-wal\nindex.db-shm\nvectors.db\n\n# Daemon state — per-machine, ephemeral\ndaemon.json\nbuffer/\nlogs/\n\n# Obsidian — per-user workspace config\n.obsidian/\n`;\n\n/** Set MYCO_VAULT_DIR in the active agent's config, falling back to all known agents. */\nfunction configureVaultEnv(projectRoot: string, vaultDir: string): void {\n const registry = new AgentRegistry();\n const active = registry.detectActiveAgent();\n\n if (active) {\n if (active.configureVaultEnv(projectRoot, vaultDir)) {\n console.log(`Set MYCO_VAULT_DIR for ${active.displayName}`);\n }\n } else {\n // No active agent detected — try all adapters\n for (const name of registry.adapterNames) {\n const adapter = registry.getAdapter(name);\n if (adapter?.configureVaultEnv(projectRoot, vaultDir)) {\n console.log(`Set MYCO_VAULT_DIR for ${adapter.displayName}`);\n }\n }\n }\n\n console.log(`\\nFor other agents, add to your shell profile:`);\n console.log(` export MYCO_VAULT_DIR=\"${vaultDir}\"\\n`);\n}\n\nasync function initVault(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\nmain().catch((err) => {\n console.error(`myco: ${(err as Error).message}`);\n process.exit(1);\n});\n","import type { LogEntry } from '../daemon/logger.js';\n\n/** Max display length for extra field values in pretty-printed output. */\nconst LOG_VALUE_MAX_DISPLAY = 80;\n\n/** Core fields that are handled positionally, not as extras. */\nconst CORE_FIELDS: ReadonlyArray<keyof LogEntry> = ['timestamp', 'level', 'component', 'message'];\n\nexport function formatLogLine(entry: LogEntry): string {\n const time = formatLocalTime(entry.timestamp);\n const lvl = entry.level.toUpperCase().padEnd(5);\n const comp = `[${entry.component}]`.padEnd(14);\n\n const extras: string[] = [];\n for (const [key, value] of Object.entries(entry)) {\n if (CORE_FIELDS.includes(key)) continue;\n const str = String(value);\n const display = str.length > LOG_VALUE_MAX_DISPLAY\n ? str.slice(0, LOG_VALUE_MAX_DISPLAY) + '...'\n : str;\n extras.push(`${key}=${display}`);\n }\n\n const extraStr = extras.length > 0 ? ' ' + extras.join(' ') : '';\n return `${time} ${lvl} ${comp} ${entry.message}${extraStr}`;\n}\n\nexport function formatLocalTime(iso: string): string {\n const d = new Date(iso);\n const hh = String(d.getHours()).padStart(2, '0');\n const mm = String(d.getMinutes()).padStart(2, '0');\n const ss = String(d.getSeconds()).padStart(2, '0');\n return `${hh}:${mm}:${ss}`;\n}\n\nexport function parseIntFlag(args: string[], long: string, short?: string): number | undefined {\n for (let i = 0; i < args.length; i++) {\n if (args[i] === long || (short && args[i] === short)) {\n const val = parseInt(args[i + 1], 10);\n return isNaN(val) ? undefined : val;\n }\n }\n return undefined;\n}\n\nexport function parseStringFlag(args: string[], long: string, short?: string): string | undefined {\n for (let i = 0; i < args.length; i++) {\n if (args[i] === long || (short && args[i] === short)) {\n return args[i + 1];\n }\n }\n return undefined;\n}\n"],"mappings":"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","names":["YAML"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
DaemonClient
|
|
4
|
+
} from "./chunk-C2YPBQQM.js";
|
|
5
|
+
import "./chunk-BXFS4PCJ.js";
|
|
6
|
+
import "./chunk-O5VSPHDL.js";
|
|
7
|
+
export {
|
|
8
|
+
DaemonClient
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=client-TEUHXGOY.js.map
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
sessionNoteId,
|
|
8
8
|
sessionRelativePath,
|
|
9
9
|
sessionWikilink
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-NKJIZSPD.js";
|
|
11
11
|
import {
|
|
12
12
|
ARTIFACT_TYPES,
|
|
13
13
|
DaemonLogger,
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
indexNote,
|
|
19
19
|
initFts,
|
|
20
20
|
rebuildIndex
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-6C26YFOA.js";
|
|
22
22
|
import {
|
|
23
23
|
MycoIndex
|
|
24
24
|
} from "./chunk-PA3VMINE.js";
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
external_exports,
|
|
27
27
|
loadConfig,
|
|
28
28
|
require_dist
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-YXZEP5U6.js";
|
|
30
30
|
import {
|
|
31
31
|
EventBuffer
|
|
32
32
|
} from "./chunk-I7PMGO6S.js";
|
|
@@ -35,7 +35,7 @@ import {
|
|
|
35
35
|
claudeCodeAdapter,
|
|
36
36
|
createPerProjectAdapter,
|
|
37
37
|
extensionForMimeType
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-BXFS4PCJ.js";
|
|
39
39
|
import {
|
|
40
40
|
AI_RESPONSE_PREVIEW_CHARS,
|
|
41
41
|
CANDIDATE_CONTENT_PREVIEW,
|
|
@@ -57,11 +57,9 @@ import {
|
|
|
57
57
|
SESSION_CONTEXT_MAX_PLANS,
|
|
58
58
|
STALE_BUFFER_MAX_AGE_MS,
|
|
59
59
|
SUMMARY_MAX_TOKENS,
|
|
60
|
-
TITLE_MAX_TOKENS
|
|
61
|
-
} from "./chunk-NYNEJ5QY.js";
|
|
62
|
-
import {
|
|
60
|
+
TITLE_MAX_TOKENS,
|
|
63
61
|
__toESM
|
|
64
|
-
} from "./chunk-
|
|
62
|
+
} from "./chunk-O5VSPHDL.js";
|
|
65
63
|
|
|
66
64
|
// src/daemon/server.ts
|
|
67
65
|
import http from "http";
|
|
@@ -2569,7 +2567,6 @@ function slugifyPath(relativePath) {
|
|
|
2569
2567
|
var import_yaml = __toESM(require_dist(), 1);
|
|
2570
2568
|
import fs5 from "fs";
|
|
2571
2569
|
import path7 from "path";
|
|
2572
|
-
import { fileURLToPath as fileURLToPath2 } from "url";
|
|
2573
2570
|
function indexAndEmbed(relativePath, noteId, embeddingText, metadata, deps) {
|
|
2574
2571
|
indexNote(deps.index, deps.vaultDir, relativePath);
|
|
2575
2572
|
if (deps.vectorIndex && embeddingText) {
|
|
@@ -3205,15 +3202,8 @@ ${lines.join("\n")}`;
|
|
|
3205
3202
|
process.on("SIGTERM", () => shutdown("SIGTERM"));
|
|
3206
3203
|
process.on("SIGINT", () => shutdown("SIGINT"));
|
|
3207
3204
|
}
|
|
3208
|
-
var __filename = fileURLToPath2(import.meta.url);
|
|
3209
|
-
if (process.argv[1] === __filename) {
|
|
3210
|
-
main().catch((err) => {
|
|
3211
|
-
process.stderr.write(`[mycod] Fatal: ${err.message}
|
|
3212
|
-
`);
|
|
3213
|
-
process.exit(1);
|
|
3214
|
-
});
|
|
3215
|
-
}
|
|
3216
3205
|
export {
|
|
3206
|
+
main,
|
|
3217
3207
|
migrateMemoryFiles
|
|
3218
3208
|
};
|
|
3219
3209
|
/*! Bundled license information:
|
|
@@ -3221,4 +3211,4 @@ export {
|
|
|
3221
3211
|
chokidar/index.js:
|
|
3222
3212
|
(*! chokidar - MIT License (c) 2012 Paul Miller (paulmillr.com) *)
|
|
3223
3213
|
*/
|
|
3224
|
-
//# sourceMappingURL=main-
|
|
3214
|
+
//# sourceMappingURL=main-ORWCEWNJ.js.map
|