n2-soul 7.0.4 → 7.0.6

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 CHANGED
@@ -468,23 +468,21 @@ All runtime data is stored in `data/` (gitignored, auto-created):
468
468
 
469
469
  ```
470
470
  soul/
471
- ├── rules/ # Ark safety rules (active) ← v6.0
472
- │ └── default.n2 # Default ruleset (125 patterns)
473
471
  ├── lib/
474
- │ ├── ark/ # Ark core engine ← v6.0
475
- ├── index.js # createArk() factory
476
- ├── gate.js # SafetyGate engine
477
- ├── parser.js # .n2 rule parser
478
- ├── audit.js # Audit logger
479
- │ └── examples/ # Industry rule templates
480
- │ └── arachne/ # Arachne code context engine ← NEW v7.0
481
- ├── index.js # createArachne() factory
482
- ├── indexer.js # File scanner + incremental indexing
483
- ├── chunker.js # Language-aware code chunking
484
- ├── search.js # BM25 search engine
485
- ├── assembler.js # Context assembly with token budget
486
- ├── store.js # SQLite storage (sql.js)
487
- └── ignore.js # .gitignore + .contextignore support
472
+ │ ├── config.default.js # Default configuration
473
+ │ ├── soul-engine.js # Core Soul engine
474
+ │ ├── core-memory.js # Core Memory (per-agent facts)
475
+ │ ├── entity-memory.js # Entity Memory (auto-tracked)
476
+ │ ├── intercom-log.js # Inter-agent communication logs
477
+ ├── kv-cache/ # KV-Cache backend
478
+ │ └── utils.js # Shared utilities
479
+ ├── tools/
480
+ ├── brain.js # Brain read/write tools
481
+ └── kv-cache.js # KV-Cache tools
482
+ ├── sequences/
483
+ ├── boot.js # Boot sequence
484
+ ├── work.js # Work sequence
485
+ └── end.js # End sequence
488
486
  ├── data/
489
487
  │ ├── memory/ # Shared brain (n2_brain_read/write)
490
488
  │ │ ├── entities.json # Entity Memory (auto-tracked)
@@ -549,7 +547,7 @@ Soul is free and open-source. These amazing people help keep it alive:
549
547
 
550
548
  ## Star History
551
549
 
552
- If you find Soul helpful, please consider giving us a star! ⭐
550
+ No coffee? A star is fine too ☕→⭐
553
551
 
554
552
  ---
555
553
 
package/index.js CHANGED
@@ -1,21 +1,18 @@
1
- // Soul MCP v7.0 — Entry point. Multi-agent session orchestrator with KV-Cache + Ark + Arachne.
1
+ // Soul MCP v7.1 — Entry point. Multi-agent session orchestrator with KV-Cache.
2
2
  const path = require('path');
3
3
  const { McpServer } = require('@modelcontextprotocol/sdk/server/mcp.js');
4
4
  const { StdioServerTransport } = require('@modelcontextprotocol/sdk/server/stdio.js');
5
5
  const { z } = require('zod');
6
6
  const config = require('./lib/config');
7
- const { createArk } = require('./lib/ark');
8
- const { createArachne } = require('./lib/arachne');
9
7
 
10
8
  // Sequences — agent lifecycle management
11
9
  const { registerBootSequence } = require('./sequences/boot');
12
10
  const { registerWorkSequence } = require('./sequences/work');
13
11
  const { registerEndSequence } = require('./sequences/end');
14
12
 
15
- // Tools — shared memory + KV-Cache persistence + code context
13
+ // Tools — shared memory + KV-Cache persistence
16
14
  const { registerBrainTools } = require('./tools/brain');
17
15
  const { registerKVCacheTools } = require('./tools/kv-cache');
18
- const { registerArachneTools } = require('./tools/arachne');
19
16
 
20
17
  const pkg = require('./package.json');
21
18
  const server = new McpServer({
@@ -24,79 +21,24 @@ const server = new McpServer({
24
21
  });
25
22
 
26
23
  // ═══════════════════════════════════════════════════════
27
- // ArkTHE LAST SHIELD
28
- // "You shall not pass."
29
- //
30
- // Pure & simple: every tool call → check against rules.
31
- // No tool classification. No special cases.
32
- // The RULES decide what's blocked — not the code.
24
+ // registerTool shim bridges legacy registerTool() to SDK v1.6.1 server.tool()
33
25
  // ═══════════════════════════════════════════════════════
34
- const ark = createArk({
35
- rulesDir: config.ARK?.rulesDir ?? path.join(__dirname, 'rules'),
36
- auditDir: config.ARK?.auditDir ?? path.join(config.DATA_DIR, 'ark-audit'),
37
- strictMode: config.ARK?.strictMode ?? false,
38
- auditMaxAgeDays: config.ARK?.auditMaxAgeDays ?? 7,
39
- auditEnabled: true,
40
- });
41
-
42
- // Ark-wrapped registerTool shim — bridges legacy registerTool() to SDK v1.6.1 server.tool()
43
26
  const _origTool = server.tool.bind(server);
44
- const _arkWrap = (name, handler) => async (args) => {
45
- const content = JSON.stringify(args);
46
- const result = ark.check(name, content, 'tool_call');
47
- if (!result.allowed) {
48
- return {
49
- content: [{
50
- type: 'text',
51
- text: `[n2-ark] BLOCKED: ${result.reason}\n` +
52
- `Rule: ${result.rule} | Action: ${result.action}\n` +
53
- `This action requires human approval.`,
54
- }],
55
- };
56
- }
57
- return handler(args);
58
- };
59
- // Shim: server.registerTool(name, {title, description, inputSchema}, handler) → server.tool()
60
27
  server.registerTool = (name, schema, handler) => {
61
28
  const desc = schema.description || schema.title || name;
62
- _origTool(name, desc, schema.inputSchema || {}, _arkWrap(name, handler));
63
- };
64
- // Override: server.tool() with Ark check (for files using new API directly, e.g. arachne.js)
65
- server.tool = (name, ...rest) => {
66
- const handler = rest.pop();
67
- _origTool(name, ...rest, _arkWrap(name, handler));
29
+ _origTool(name, desc, schema.inputSchema || {}, handler);
68
30
  };
69
- // ═══ End Ark ═══
31
+ // ═══ End shim ═══
70
32
 
71
- // Register core modules (all tools pass through Ark)
72
- registerBootSequence(server, z, config, ark.workflows);
33
+ // Register core modules
34
+ registerBootSequence(server, z, config);
73
35
  registerWorkSequence(server, z, config);
74
36
  registerEndSequence(server, z, config);
75
37
  registerBrainTools(server, z, config);
76
38
  registerKVCacheTools(server, z, config);
77
39
 
78
- // ═══════════════════════════════════════════════════════
79
- // Arachne — THE GREATEST WEAVER
80
- // Code context assembly engine — indexes codebase,
81
- // picks exactly what AI needs.
82
- // Only activates when ARACHNE config is present.
83
- // ═══════════════════════════════════════════════════════
40
+ // Start MCP transport
84
41
  async function boot() {
85
- // Initialize Arachne (if configured)
86
- if (config.ARACHNE?.projectDir) {
87
- try {
88
- const arachne = await createArachne({
89
- ...config.ARACHNE,
90
- dataDir: config.ARACHNE.dataDir ?? path.join(config.DATA_DIR, 'arachne'),
91
- });
92
- registerArachneTools(server, z, arachne, config);
93
- console.error(`[n2-soul] Arachne enabled: ${config.ARACHNE.projectDir}`);
94
- } catch (err) {
95
- console.error(`[n2-soul] Arachne init failed: ${err.message}`);
96
- }
97
- }
98
-
99
- // Start MCP transport
100
42
  const transport = new StdioServerTransport();
101
43
  await server.connect(transport);
102
44
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n2-soul",
3
- "version": "7.0.4",
3
+ "version": "7.0.6",
4
4
  "description": "Multi-agent session orchestrator with KV-Cache, Ark safety, and Arachne code context for MCP",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/sequences/boot.js CHANGED
@@ -38,14 +38,6 @@ function registerBootSequence(server, z, config, workflows = {}) {
38
38
  lines.push(`Agents: ${agents.map(a => `${a.name}[${a.model}]`).join(', ')}`);
39
39
  }
40
40
 
41
- // Ark safety status — always shown, no opt-out
42
- try {
43
- const rulesDir = config.ARK?.rulesDir || path.join(config.SOUL_ROOT, 'rules');
44
- const ruleFiles = fs.readdirSync(rulesDir).filter(f => f.endsWith('.n2'));
45
- lines.push(`Ark: ${ruleFiles.length} rule files loaded — ACTIVE`);
46
- } catch (e) {
47
- lines.push(`Ark: LOAD FAILED — ${e.message}`);
48
- }
49
41
 
50
42
  // -- Soul Board: handoff + TODO (auto-detect latest project) --
51
43
  let targetProject = project;