nexus-agents 2.28.0 → 2.29.1
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/README.md +11 -10
- package/dist/adaptive-memory-RST6DZYR.js +15 -0
- package/dist/chunk-2UR7YN6T.js +700 -0
- package/dist/chunk-2UR7YN6T.js.map +1 -0
- package/dist/chunk-2UUUKVNR.js +61 -0
- package/dist/chunk-2UUUKVNR.js.map +1 -0
- package/dist/chunk-3EVVQ32X.js +838 -0
- package/dist/chunk-3EVVQ32X.js.map +1 -0
- package/dist/{chunk-UGNLR4NZ.js → chunk-3GXDN4AX.js} +2 -2
- package/dist/{chunk-LKSTILEE.js → chunk-4AGPR6XZ.js} +194 -1461
- package/dist/chunk-4AGPR6XZ.js.map +1 -0
- package/dist/chunk-4HA5PAL7.js +246 -0
- package/dist/chunk-4HA5PAL7.js.map +1 -0
- package/dist/chunk-633WH2ML.js +127 -0
- package/dist/chunk-633WH2ML.js.map +1 -0
- package/dist/chunk-7SKAKA4I.js +90 -0
- package/dist/chunk-7SKAKA4I.js.map +1 -0
- package/dist/chunk-AP2FD37C.js +127 -0
- package/dist/chunk-AP2FD37C.js.map +1 -0
- package/dist/chunk-BC3M4VLP.js +359 -0
- package/dist/chunk-BC3M4VLP.js.map +1 -0
- package/dist/chunk-BQ4YXGGQ.js +127 -0
- package/dist/chunk-BQ4YXGGQ.js.map +1 -0
- package/dist/chunk-C2C5ONFR.js +195 -0
- package/dist/chunk-C2C5ONFR.js.map +1 -0
- package/dist/chunk-CGWRJ4EM.js +12661 -0
- package/dist/chunk-CGWRJ4EM.js.map +1 -0
- package/dist/chunk-CLYZ7FWP.js +30 -0
- package/dist/chunk-CLYZ7FWP.js.map +1 -0
- package/dist/chunk-ED6VQWNG.js +63 -0
- package/dist/chunk-ED6VQWNG.js.map +1 -0
- package/dist/{chunk-L2SHSW4T.js → chunk-ELIFTCYM.js} +2705 -2473
- package/dist/chunk-ELIFTCYM.js.map +1 -0
- package/dist/chunk-FYJVXQHX.js +944 -0
- package/dist/chunk-FYJVXQHX.js.map +1 -0
- package/dist/{chunk-QZEAD6AG.js → chunk-FZFZ77UJ.js} +19434 -38182
- package/dist/chunk-FZFZ77UJ.js.map +1 -0
- package/dist/chunk-IECE6DBS.js +1585 -0
- package/dist/chunk-IECE6DBS.js.map +1 -0
- package/dist/chunk-LLGUX44Z.js +356 -0
- package/dist/chunk-LLGUX44Z.js.map +1 -0
- package/dist/chunk-MRU6L7YJ.js +931 -0
- package/dist/chunk-MRU6L7YJ.js.map +1 -0
- package/dist/chunk-N5SY7V45.js +44 -0
- package/dist/chunk-N5SY7V45.js.map +1 -0
- package/dist/chunk-OOIPRRPX.js +3790 -0
- package/dist/chunk-OOIPRRPX.js.map +1 -0
- package/dist/chunk-SRECH7OQ.js +354 -0
- package/dist/chunk-SRECH7OQ.js.map +1 -0
- package/dist/{chunk-YSDUVCCZ.js → chunk-VKRMXD62.js} +6 -6
- package/dist/{chunk-E7EX2KQJ.js → chunk-XU3NADFE.js} +2 -2
- package/dist/chunk-YSTJEMQX.js +122 -0
- package/dist/chunk-YSTJEMQX.js.map +1 -0
- package/dist/cli-circuit-breaker-5FAODXVY.js +13 -0
- package/dist/cli.d.ts +2 -2
- package/dist/cli.js +1485 -683
- package/dist/cli.js.map +1 -1
- package/dist/codebase-search-CZUA37RU.js +9 -0
- package/dist/composite-router-FNW7ZWL7.js +17 -0
- package/dist/composite-router-FNW7ZWL7.js.map +1 -0
- package/dist/consensus-vote-757YULIP.js +25 -0
- package/dist/consensus-vote-757YULIP.js.map +1 -0
- package/dist/{dist-H5XNXVAV.js → dist-CV74KUT7.js} +1521 -972
- package/dist/dist-CV74KUT7.js.map +1 -0
- package/dist/{doctor-deep-BDE2PHVX.js → doctor-deep-LMCEAFU4.js} +4 -3
- package/dist/doctor-deep-LMCEAFU4.js.map +1 -0
- package/dist/expert-bridge-L2D4OXOR.js +10 -0
- package/dist/expert-bridge-L2D4OXOR.js.map +1 -0
- package/dist/expert-config-A5CHKUGI.js +22 -0
- package/dist/expert-config-A5CHKUGI.js.map +1 -0
- package/dist/factory-ELEDP2WD.js +17 -0
- package/dist/factory-ELEDP2WD.js.map +1 -0
- package/dist/factory-IDTIBX6B.js +14 -0
- package/dist/factory-IDTIBX6B.js.map +1 -0
- package/dist/index.d.ts +1814 -777
- package/dist/index.js +785 -355
- package/dist/index.js.map +1 -1
- package/dist/issue-triage-SJPKJLXH.js +15 -0
- package/dist/issue-triage-SJPKJLXH.js.map +1 -0
- package/dist/learning-persistence-WMWZJZ35.js +16 -0
- package/dist/learning-persistence-WMWZJZ35.js.map +1 -0
- package/dist/mcp-config-2OXIOMJ6.js +12 -0
- package/dist/mcp-config-2OXIOMJ6.js.map +1 -0
- package/dist/mobimem-5S3VLNSU.js +13 -0
- package/dist/mobimem-5S3VLNSU.js.map +1 -0
- package/dist/{model-capabilities-types-CSWO27YN.d.ts → model-capabilities-types-B57GZryc.d.ts} +1 -1
- package/dist/repo-analyze-HWMXSK5C.js +24 -0
- package/dist/repo-analyze-HWMXSK5C.js.map +1 -0
- package/dist/repo-security-plan-MUFDGWSQ.js +17 -0
- package/dist/repo-security-plan-MUFDGWSQ.js.map +1 -0
- package/dist/research-helpers-synthesize-OBQJ5BGX.js +10 -0
- package/dist/research-helpers-synthesize-OBQJ5BGX.js.map +1 -0
- package/dist/routing-memory-3QBQTS4A.js +13 -0
- package/dist/routing-memory-3QBQTS4A.js.map +1 -0
- package/dist/session-memory-VXWLOFRC.js +22 -0
- package/dist/session-memory-VXWLOFRC.js.map +1 -0
- package/dist/{setup-command-SS7LMN7Y.js → setup-command-E6MXO5RZ.js} +9 -5
- package/dist/setup-command-E6MXO5RZ.js.map +1 -0
- package/dist/setup-config-O5F3AZBL.js +10 -0
- package/dist/setup-config-O5F3AZBL.js.map +1 -0
- package/dist/shared-memory-AEO2HJLC.js +8 -0
- package/dist/shared-memory-AEO2HJLC.js.map +1 -0
- package/dist/symbol-extractor-UEBANFSN.js +10 -0
- package/dist/symbol-extractor-UEBANFSN.js.map +1 -0
- package/dist/weather-report-MUGSIOU5.js +15 -0
- package/dist/weather-report-MUGSIOU5.js.map +1 -0
- package/package.json +18 -19
- package/dist/chunk-L2SHSW4T.js.map +0 -1
- package/dist/chunk-LKSTILEE.js.map +0 -1
- package/dist/chunk-QZEAD6AG.js.map +0 -1
- package/dist/dist-H5XNXVAV.js.map +0 -1
- package/dist/setup-config-DSMOOLVW.js +0 -9
- /package/dist/{doctor-deep-BDE2PHVX.js.map → adaptive-memory-RST6DZYR.js.map} +0 -0
- /package/dist/{chunk-UGNLR4NZ.js.map → chunk-3GXDN4AX.js.map} +0 -0
- /package/dist/{chunk-YSDUVCCZ.js.map → chunk-VKRMXD62.js.map} +0 -0
- /package/dist/{chunk-E7EX2KQJ.js.map → chunk-XU3NADFE.js.map} +0 -0
- /package/dist/{setup-command-SS7LMN7Y.js.map → cli-circuit-breaker-5FAODXVY.js.map} +0 -0
- /package/dist/{setup-config-DSMOOLVW.js.map → codebase-search-CZUA37RU.js.map} +0 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// src/config/learning-persistence.ts
|
|
2
|
+
import { mkdirSync } from "fs";
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
import { homedir } from "os";
|
|
5
|
+
function safeHomedir() {
|
|
6
|
+
try {
|
|
7
|
+
return homedir() || "/tmp";
|
|
8
|
+
} catch {
|
|
9
|
+
return "/tmp";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
var LEARNING_DIR = join(safeHomedir(), ".nexus-agents", "learning");
|
|
13
|
+
var OUTCOMES_FILE = join(LEARNING_DIR, "outcomes.jsonl");
|
|
14
|
+
var RULES_FILE = join(LEARNING_DIR, "rules.json");
|
|
15
|
+
var DIR_MODE = 448;
|
|
16
|
+
function isPersistenceEnabled() {
|
|
17
|
+
return process.env["NEXUS_PERSIST_LEARNING"] !== "false";
|
|
18
|
+
}
|
|
19
|
+
function ensureLearningDir(dir = LEARNING_DIR) {
|
|
20
|
+
mkdirSync(dir, { recursive: true, mode: DIR_MODE });
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export {
|
|
24
|
+
LEARNING_DIR,
|
|
25
|
+
OUTCOMES_FILE,
|
|
26
|
+
RULES_FILE,
|
|
27
|
+
isPersistenceEnabled,
|
|
28
|
+
ensureLearningDir
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=chunk-CLYZ7FWP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config/learning-persistence.ts"],"sourcesContent":["/**\n * Shared configuration for cross-session learning persistence.\n *\n * Controls where learning data (outcomes, distilled rules) is stored\n * on disk and whether persistence is enabled via feature flag.\n *\n * @module config/learning-persistence\n * (Source: Issue #1009 — Cross-session persistence)\n */\n\nimport { mkdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/** Resolve home directory with fallback for mocked environments. */\nfunction safeHomedir(): string {\n try {\n return homedir() || '/tmp';\n } catch {\n return '/tmp';\n }\n}\n\n/** Base directory for learning persistence data. */\nexport const LEARNING_DIR = join(safeHomedir(), '.nexus-agents', 'learning');\n\n/** JSONL file for persisted task outcomes. */\nexport const OUTCOMES_FILE = join(LEARNING_DIR, 'outcomes.jsonl');\n\n/** JSON file for persisted distilled rules. */\nexport const RULES_FILE = join(LEARNING_DIR, 'rules.json');\n\n/** Directory mode: owner-only (rwx------). */\nconst DIR_MODE = 0o700;\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/**\n * Check whether learning persistence is enabled via feature flag.\n *\n * Defaults to true — cross-session LinUCB routing data persists to\n * `~/.nexus-agents/learning/` unless explicitly disabled.\n * Only routing metadata is stored (model, success, duration, category).\n * No user prompts, API keys, or model outputs are persisted.\n *\n * Set NEXUS_PERSIST_LEARNING=false to disable.\n */\nexport function isPersistenceEnabled(): boolean {\n return process.env['NEXUS_PERSIST_LEARNING'] !== 'false';\n}\n\n/** Ensure the learning data directory exists. */\nexport function ensureLearningDir(dir: string = LEARNING_DIR): void {\n mkdirSync(dir, { recursive: true, mode: DIR_MODE });\n}\n"],"mappings":";AAUA,SAAS,iBAAiB;AAC1B,SAAS,YAAY;AACrB,SAAS,eAAe;AAOxB,SAAS,cAAsB;AAC7B,MAAI;AACF,WAAO,QAAQ,KAAK;AAAA,EACtB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGO,IAAM,eAAe,KAAK,YAAY,GAAG,iBAAiB,UAAU;AAGpE,IAAM,gBAAgB,KAAK,cAAc,gBAAgB;AAGzD,IAAM,aAAa,KAAK,cAAc,YAAY;AAGzD,IAAM,WAAW;AAgBV,SAAS,uBAAgC;AAC9C,SAAO,QAAQ,IAAI,wBAAwB,MAAM;AACnD;AAGO,SAAS,kBAAkB,MAAc,cAAoB;AAClE,YAAU,KAAK,EAAE,WAAW,MAAM,MAAM,SAAS,CAAC;AACpD;","names":[]}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// src/pipeline/shared-memory.ts
|
|
2
|
+
var SharedMemoryStore = class {
|
|
3
|
+
entries = [];
|
|
4
|
+
maxEntries;
|
|
5
|
+
constructor(maxEntries = 100) {
|
|
6
|
+
this.maxEntries = maxEntries;
|
|
7
|
+
}
|
|
8
|
+
/** Write a memory entry. */
|
|
9
|
+
write(sourceStage, tag, content) {
|
|
10
|
+
if (this.entries.length >= this.maxEntries) {
|
|
11
|
+
this.entries.shift();
|
|
12
|
+
}
|
|
13
|
+
this.entries.push({
|
|
14
|
+
sourceStage,
|
|
15
|
+
tag,
|
|
16
|
+
content,
|
|
17
|
+
timestamp: Date.now()
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/** Read all entries, optionally filtered by tag. */
|
|
21
|
+
read(tag) {
|
|
22
|
+
if (tag === void 0) return [...this.entries];
|
|
23
|
+
return this.entries.filter((e) => e.tag === tag);
|
|
24
|
+
}
|
|
25
|
+
/** Read entries from a specific stage. */
|
|
26
|
+
readFromStage(sourceStage) {
|
|
27
|
+
return this.entries.filter((e) => e.sourceStage === sourceStage);
|
|
28
|
+
}
|
|
29
|
+
/** Get summary of all entries as context string for LLM consumption. */
|
|
30
|
+
summarize(maxLength = 2e3) {
|
|
31
|
+
if (this.entries.length === 0) return "";
|
|
32
|
+
const lines = this.entries.map(
|
|
33
|
+
(e) => `[${e.tag}] (from ${e.sourceStage}): ${formatContent(e.content)}`
|
|
34
|
+
);
|
|
35
|
+
const joined = lines.join("\n");
|
|
36
|
+
if (joined.length <= maxLength) return joined;
|
|
37
|
+
return `${joined.slice(0, maxLength - 3)}...`;
|
|
38
|
+
}
|
|
39
|
+
/** Get entry count. */
|
|
40
|
+
get size() {
|
|
41
|
+
return this.entries.length;
|
|
42
|
+
}
|
|
43
|
+
/** Clear all entries. */
|
|
44
|
+
clear() {
|
|
45
|
+
this.entries.length = 0;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
function formatContent(content) {
|
|
49
|
+
if (typeof content === "string") return content.slice(0, 200);
|
|
50
|
+
if (typeof content === "object" && content !== null) {
|
|
51
|
+
try {
|
|
52
|
+
return JSON.stringify(content).slice(0, 200);
|
|
53
|
+
} catch {
|
|
54
|
+
return "[object]";
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return String(content);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export {
|
|
61
|
+
SharedMemoryStore
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=chunk-ED6VQWNG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/pipeline/shared-memory.ts"],"sourcesContent":["/**\n * Shared Memory — Cross-stage knowledge propagation (#1737, Phase 4)\n *\n * Early pipeline stages (planning, research) write structured discoveries\n * to a shared memory layer. Later stages read before acting.\n *\n * Scoped to a single pipeline run — not persisted cross-session.\n *\n * Pattern from: SWE-AF shared memory, AutoGen knowledge propagation.\n *\n * @module pipeline/shared-memory\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** A tagged memory entry written by a pipeline stage. */\nexport interface SharedMemoryEntry {\n /** Stage that wrote this entry. */\n readonly sourceStage: string;\n /** Category tag for filtering. */\n readonly tag: SharedMemoryTag;\n /** The content (structured or text). */\n readonly content: unknown;\n /** When this was written. */\n readonly timestamp: number;\n}\n\n/** Tags for categorizing shared memory entries. */\nexport type SharedMemoryTag =\n | 'convention'\n | 'discovery'\n | 'constraint'\n | 'decision'\n | 'risk'\n | 'dependency'\n | 'context';\n\n// ============================================================================\n// Shared Memory Store (per-pipeline-run)\n// ============================================================================\n\n/** In-memory store for cross-stage knowledge sharing. */\nexport class SharedMemoryStore {\n private readonly entries: SharedMemoryEntry[] = [];\n private readonly maxEntries: number;\n\n constructor(maxEntries = 100) {\n this.maxEntries = maxEntries;\n }\n\n /** Write a memory entry. */\n write(sourceStage: string, tag: SharedMemoryTag, content: unknown): void {\n if (this.entries.length >= this.maxEntries) {\n this.entries.shift(); // Evict oldest\n }\n this.entries.push({\n sourceStage,\n tag,\n content,\n timestamp: Date.now(),\n });\n }\n\n /** Read all entries, optionally filtered by tag. */\n read(tag?: SharedMemoryTag): readonly SharedMemoryEntry[] {\n if (tag === undefined) return [...this.entries];\n return this.entries.filter((e) => e.tag === tag);\n }\n\n /** Read entries from a specific stage. */\n readFromStage(sourceStage: string): readonly SharedMemoryEntry[] {\n return this.entries.filter((e) => e.sourceStage === sourceStage);\n }\n\n /** Get summary of all entries as context string for LLM consumption. */\n summarize(maxLength = 2000): string {\n if (this.entries.length === 0) return '';\n const lines = this.entries.map(\n (e) => `[${e.tag}] (from ${e.sourceStage}): ${formatContent(e.content)}`\n );\n const joined = lines.join('\\n');\n if (joined.length <= maxLength) return joined;\n return `${joined.slice(0, maxLength - 3)}...`;\n }\n\n /** Get entry count. */\n get size(): number {\n return this.entries.length;\n }\n\n /** Clear all entries. */\n clear(): void {\n this.entries.length = 0;\n }\n}\n\n/** Format content for summarization. */\nfunction formatContent(content: unknown): string {\n if (typeof content === 'string') return content.slice(0, 200);\n if (typeof content === 'object' && content !== null) {\n try {\n return JSON.stringify(content).slice(0, 200);\n } catch {\n return '[object]';\n }\n }\n return String(content);\n}\n"],"mappings":";AA4CO,IAAM,oBAAN,MAAwB;AAAA,EACZ,UAA+B,CAAC;AAAA,EAChC;AAAA,EAEjB,YAAY,aAAa,KAAK;AAC5B,SAAK,aAAa;AAAA,EACpB;AAAA;AAAA,EAGA,MAAM,aAAqB,KAAsB,SAAwB;AACvE,QAAI,KAAK,QAAQ,UAAU,KAAK,YAAY;AAC1C,WAAK,QAAQ,MAAM;AAAA,IACrB;AACA,SAAK,QAAQ,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,KAAK,IAAI;AAAA,IACtB,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,KAAK,KAAqD;AACxD,QAAI,QAAQ,OAAW,QAAO,CAAC,GAAG,KAAK,OAAO;AAC9C,WAAO,KAAK,QAAQ,OAAO,CAAC,MAAM,EAAE,QAAQ,GAAG;AAAA,EACjD;AAAA;AAAA,EAGA,cAAc,aAAmD;AAC/D,WAAO,KAAK,QAAQ,OAAO,CAAC,MAAM,EAAE,gBAAgB,WAAW;AAAA,EACjE;AAAA;AAAA,EAGA,UAAU,YAAY,KAAc;AAClC,QAAI,KAAK,QAAQ,WAAW,EAAG,QAAO;AACtC,UAAM,QAAQ,KAAK,QAAQ;AAAA,MACzB,CAAC,MAAM,IAAI,EAAE,GAAG,WAAW,EAAE,WAAW,MAAM,cAAc,EAAE,OAAO,CAAC;AAAA,IACxE;AACA,UAAM,SAAS,MAAM,KAAK,IAAI;AAC9B,QAAI,OAAO,UAAU,UAAW,QAAO;AACvC,WAAO,GAAG,OAAO,MAAM,GAAG,YAAY,CAAC,CAAC;AAAA,EAC1C;AAAA;AAAA,EAGA,IAAI,OAAe;AACjB,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA;AAAA,EAGA,QAAc;AACZ,SAAK,QAAQ,SAAS;AAAA,EACxB;AACF;AAGA,SAAS,cAAc,SAA0B;AAC/C,MAAI,OAAO,YAAY,SAAU,QAAO,QAAQ,MAAM,GAAG,GAAG;AAC5D,MAAI,OAAO,YAAY,YAAY,YAAY,MAAM;AACnD,QAAI;AACF,aAAO,KAAK,UAAU,OAAO,EAAE,MAAM,GAAG,GAAG;AAAA,IAC7C,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO,OAAO,OAAO;AACvB;","names":[]}
|