iranti 0.3.35 → 0.3.37

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
@@ -4,6 +4,7 @@
4
4
  [![MCP Server](https://img.shields.io/badge/MCP-server-purple.svg)](https://modelcontextprotocol.io)
5
5
  [![npm](https://img.shields.io/badge/npm-iranti-red.svg)](https://www.npmjs.com/package/iranti)
6
6
  [![npm version](https://img.shields.io/npm/v/iranti.svg)](https://www.npmjs.com/package/iranti)
7
+ [![iranti MCP server](https://glama.ai/mcp/servers/nfemmanuel/iranti/badges/score.svg)](https://glama.ai/mcp/servers/nfemmanuel/iranti)
7
8
 
8
9
  **Shared memory for AI coding tools — Claude Code, Codex CLI, and GitHub Copilot.**
9
10
 
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ /**
5
+ * Direct MCP stdio server entrypoint.
6
+ *
7
+ * This binary starts the Iranti MCP server immediately, without any CLI routing.
8
+ * It is the preferred entrypoint for MCP clients and tooling (e.g. mcp-proxy)
9
+ * that invoke the server without a subcommand argument.
10
+ *
11
+ * Equivalent to: iranti mcp
12
+ */
13
+
14
+ const fs = require('fs');
15
+ const path = require('path');
16
+
17
+ const root = path.resolve(__dirname, '..');
18
+ const distMcp = path.join(root, 'dist', 'scripts', 'iranti-mcp.js');
19
+ const srcMcp = path.join(root, 'scripts', 'iranti-mcp.ts');
20
+
21
+ if (fs.existsSync(distMcp)) {
22
+ require(distMcp);
23
+ return;
24
+ }
25
+
26
+ try {
27
+ require('ts-node/register/transpile-only');
28
+ require(srcMcp);
29
+ } catch (err) {
30
+ const message = err instanceof Error ? err.message : String(err);
31
+ process.stderr.write('Iranti MCP server is not built. Run "npm run build" first.\n');
32
+ process.stderr.write(message + '\n');
33
+ process.exit(1);
34
+ }
@@ -66,6 +66,30 @@ const AttendantInstance_1 = require("../src/attendant/AttendantInstance");
66
66
  let runtimeHostOverride = null;
67
67
  let shutdownPromise = null;
68
68
  let processIranti = null;
69
+ // Lazy DB startup state — defers agent registration and protocol-state
70
+ // restoration until the first tool call instead of process start. Allows
71
+ // the MCP server to complete the MCP initialize/tools-list exchange without
72
+ // an active database, which is required for Glama's quality checks.
73
+ let _dbStartupDone = false;
74
+ let _dbStartupPromise = null;
75
+ async function dbStartup() {
76
+ if (_dbStartupDone)
77
+ return;
78
+ if (!_dbStartupPromise) {
79
+ _dbStartupPromise = (async () => {
80
+ if (!processIranti)
81
+ throw new Error('[iranti-mcp] dbStartup called before iranti was initialized');
82
+ await ensureDefaultAgent(processIranti);
83
+ const agentForBootstrap = defaultAgentId();
84
+ const bootstrapResult = await processIranti.loadProtocolStateFromLedger(agentForBootstrap);
85
+ if (bootstrapResult.handshakeRestored || bootstrapResult.attendRestored) {
86
+ process.stderr.write(`[iranti-mcp] Protocol state restored from ledger: handshake=${bootstrapResult.handshakeRestored} attend=${bootstrapResult.attendRestored}\n`);
87
+ }
88
+ _dbStartupDone = true;
89
+ })();
90
+ }
91
+ return _dbStartupPromise;
92
+ }
69
93
  const HOST_SETUP_CHECKS = {
70
94
  claude_code: { file: 'CLAUDE.md', command: 'iranti claude-setup .' },
71
95
  codex: { file: 'AGENTS.md', command: 'iranti codex-setup' },
@@ -449,18 +473,10 @@ async function main() {
449
473
  dbPoolMax: 3,
450
474
  });
451
475
  processIranti = iranti;
452
- await ensureDefaultAgent(iranti);
453
- // Restore protocol tracker state from the session ledger so that
454
- // hosts which restart the MCP subprocess per tool call (e.g. Copilot CLI)
455
- // can complete a cross-process handshake → attend → search sequence.
456
- const agentForBootstrap = defaultAgentId();
457
- const bootstrapResult = await iranti.loadProtocolStateFromLedger(agentForBootstrap);
458
- if (bootstrapResult.handshakeRestored || bootstrapResult.attendRestored) {
459
- process.stderr.write(`[iranti-mcp] Protocol state restored from ledger: handshake=${bootstrapResult.handshakeRestored} attend=${bootstrapResult.attendRestored}\n`);
460
- }
476
+ // DB startup is deferred to first tool call via dbStartup() — see above.
461
477
  const server = new mcp_js_1.McpServer({
462
478
  name: 'iranti-mcp',
463
- version: '0.3.35',
479
+ version: '0.3.37',
464
480
  });
465
481
  server.registerTool('iranti_handshake', {
466
482
  description: `Initialize or refresh an agent's working-memory brief for the current task.
@@ -480,6 +496,7 @@ Do not use this as a per-turn retrieval tool; use iranti_attend.`,
480
496
  postCompaction: z.boolean().optional().describe('Set to true after context compaction to force re-delivery of operating rules. Omit on normal mid-session handshake calls — rules are only sent once per context window.'),
481
497
  },
482
498
  }, async ({ task, recentMessages, agent, agentId, host, postCompaction }) => {
499
+ await dbStartup();
483
500
  const resolvedHost = resolveToolHost(host);
484
501
  const resolvedAgent = resolveToolAgent(agent, agentId, resolvedHost);
485
502
  syncRuntimeLedgerContext(iranti, resolvedHost, resolvedAgent);
@@ -539,6 +556,7 @@ checkpoint state before closing the turn.`,
539
556
  agentId: z.string().optional().describe('Alias for agent. Override the default agent id.'),
540
557
  },
541
558
  }, async ({ latestMessage, message, currentContext, entityHints, maxFacts, forceInject, phase, pendingToolCall, toolResult, agent, agentId }) => {
559
+ await dbStartup();
542
560
  const resolvedAgent = resolveToolAgent(agent, agentId);
543
561
  syncRuntimeLedgerContext(iranti, undefined, resolvedAgent);
544
562
  const resolvedLatestMessage = resolveAttendLatestMessage({ latestMessage, message });
@@ -656,6 +674,7 @@ open_risks, recent_actions, and recent_file_changes to those entities for handof
656
674
  agentId: z.string().optional().describe('Alias for agent. Override the default agent id.'),
657
675
  },
658
676
  }, async ({ task, recentMessages, currentStep, nextStep, openRisks, recentOutputs, actions, fileChanges, entityTargets, notes, sessionId, agent, agentId }) => {
677
+ await dbStartup();
659
678
  const resolvedAgent = resolveToolAgent(agent, agentId);
660
679
  syncRuntimeLedgerContext(iranti, undefined, resolvedAgent);
661
680
  const result = await iranti.checkpoint({
@@ -686,6 +705,7 @@ open_risks, recent_actions, and recent_file_changes to those entities for handof
686
705
  agentId: z.string().optional().describe('Alias for agent. Override the default agent id.'),
687
706
  },
688
707
  }, async ({ currentContext, entityHints, maxFacts, agent, agentId }) => {
708
+ await dbStartup();
689
709
  const resolvedAgent = resolveToolAgent(agent, agentId);
690
710
  syncRuntimeLedgerContext(iranti, undefined, resolvedAgent);
691
711
  try {
@@ -720,6 +740,7 @@ memory alone before checking Iranti.`,
720
740
  agentId: z.string().optional().describe('Alias for agent. Override the default agent id for protocol tracking.'),
721
741
  },
722
742
  }, async ({ entity, key, agent, agentId }) => {
743
+ await dbStartup();
723
744
  const resolvedAgent = resolveToolAgent(agent, agentId);
724
745
  syncRuntimeLedgerContext(iranti, undefined, resolvedAgent);
725
746
  try {
@@ -752,6 +773,7 @@ blockers that were resolved, values that were contested or superseded.`,
752
773
  agentId: z.string().optional().describe('Alias for agent. Override the default agent id for protocol tracking.'),
753
774
  },
754
775
  }, async ({ entity, key, limit, includeExpired, includeContested, agent, agentId }) => {
776
+ await dbStartup();
755
777
  const resolvedAgent = resolveToolAgent(agent, agentId);
756
778
  syncRuntimeLedgerContext(iranti, undefined, resolvedAgent);
757
779
  try {
@@ -786,6 +808,7 @@ the exact key, use this before saying you do not know.`,
786
808
  agentId: z.string().optional().describe('Alias for agent. Override the default agent id for protocol tracking.'),
787
809
  },
788
810
  }, async ({ query, entityType, entityId, limit, lexicalWeight, vectorWeight, minScore, agent, agentId }) => {
811
+ await dbStartup();
789
812
  const resolvedAgent = resolveToolAgent(agent, agentId);
790
813
  syncRuntimeLedgerContext(iranti, undefined, resolvedAgent);
791
814
  try {
@@ -833,6 +856,7 @@ such as issueStatus=open|resolved, severity, or resolution notes.`,
833
856
  agentId: z.string().optional().describe('Alias for agent. Override the default agent id.'),
834
857
  },
835
858
  }, async ({ entity, key, valueJson, summary, confidence, source, propertiesJson, validFrom, requestId, agent, agentId }) => {
859
+ await dbStartup();
836
860
  const target = (0, autoRemember_1.resolvePersonalWriteTarget)({ entity, key });
837
861
  const resolvedAgent = resolveToolAgent(agent, agentId);
838
862
  syncRuntimeLedgerContext(iranti, undefined, resolvedAgent);
@@ -902,6 +926,7 @@ as rule/<rule_id> entities and persist across sessions.`,
902
926
  agentId: z.string().optional().describe('Alias for agent. Override the default agent id.'),
903
927
  },
904
928
  }, async ({ ruleId, rule, triggers, scope, enforcement, source, agent, agentId }) => {
929
+ await dbStartup();
905
930
  const resolvedAgent = resolveToolAgent(agent, agentId);
906
931
  syncRuntimeLedgerContext(iranti, undefined, resolvedAgent);
907
932
  const normalizedId = ruleId.trim().toLowerCase().replace(/[^a-z0-9_-]/g, '_');
@@ -955,6 +980,7 @@ trackable issue lifecycle entry.`,
955
980
  agentId: z.string().optional().describe('Alias for agent. Override the default agent id.'),
956
981
  },
957
982
  }, async ({ entity, issueId, title, status, summary, confidence, source, severity, detailsJson, discoveredAt, resolvedAt, resolution, tags, requestId, agent, agentId }) => {
983
+ await dbStartup();
958
984
  const resolvedAgent = resolveToolAgent(agent, agentId);
959
985
  syncRuntimeLedgerContext(iranti, undefined, resolvedAgent);
960
986
  const result = await iranti.writeIssue({
@@ -993,6 +1019,7 @@ this for arbitrary prose or every turn.`,
993
1019
  agentId: z.string().optional().describe('Alias for agent. Override the default agent id.'),
994
1020
  },
995
1021
  }, async ({ response, projectEntity, personalEntity, source, confidence, agent, agentId }) => {
1022
+ await dbStartup();
996
1023
  const resolvedAgent = resolveToolAgent(agent, agentId);
997
1024
  syncRuntimeLedgerContext(iranti, undefined, resolvedAgent);
998
1025
  const result = await (0, autoRemember_1.rememberAssistantResponseFacts)({
@@ -1021,6 +1048,7 @@ this for arbitrary prose or every turn.`,
1021
1048
  agentId: z.string().optional().describe('Alias for agent. Override the default agent id.'),
1022
1049
  },
1023
1050
  }, async ({ entity, content, confidence, source, agent, agentId }) => {
1051
+ await dbStartup();
1024
1052
  const resolvedAgent = resolveToolAgent(agent, agentId);
1025
1053
  syncRuntimeLedgerContext(iranti, undefined, resolvedAgent);
1026
1054
  const result = await iranti.ingest({
@@ -1042,6 +1070,7 @@ this for arbitrary prose or every turn.`,
1042
1070
  createdBy: z.string().optional().describe('Override the default agent id.'),
1043
1071
  },
1044
1072
  }, async ({ fromEntity, relationshipType, toEntity, propertiesJson, createdBy }) => {
1073
+ await dbStartup();
1045
1074
  const properties = propertiesJson ? safeJsonParse(propertiesJson) : undefined;
1046
1075
  const resolvedAgent = withDefaultAgent(createdBy);
1047
1076
  syncRuntimeLedgerContext(iranti, undefined, resolvedAgent);
@@ -1061,6 +1090,7 @@ whether memory should be injected before graph traversal.`,
1061
1090
  agentId: z.string().optional().describe('Alias for agent. Override the default agent id for protocol tracking.'),
1062
1091
  },
1063
1092
  }, async ({ entity, agent, agentId }) => {
1093
+ await dbStartup();
1064
1094
  const resolvedAgent = resolveToolAgent(agent, agentId);
1065
1095
  syncRuntimeLedgerContext(iranti, undefined, resolvedAgent);
1066
1096
  try {
@@ -1085,6 +1115,7 @@ whether memory should be injected before graph traversal.`,
1085
1115
  agentId: z.string().optional().describe('Alias for agent. Override the default agent id for protocol tracking.'),
1086
1116
  },
1087
1117
  }, async ({ entity, depth, agent, agentId }) => {
1118
+ await dbStartup();
1088
1119
  const resolvedAgent = resolveToolAgent(agent, agentId);
1089
1120
  syncRuntimeLedgerContext(iranti, undefined, resolvedAgent);
1090
1121
  try {
@@ -1108,6 +1139,7 @@ whether memory should be injected before provenance discovery.`,
1108
1139
  agentId: z.string().optional().describe('Alias for agent. Override the default agent id for protocol tracking.'),
1109
1140
  },
1110
1141
  }, async ({ entity, agent, agentId }) => {
1142
+ await dbStartup();
1111
1143
  const resolvedAgent = resolveToolAgent(agent, agentId);
1112
1144
  syncRuntimeLedgerContext(iranti, undefined, resolvedAgent);
1113
1145
  try {
@@ -10,5 +10,6 @@
10
10
  * `{ hit: false }` rather than erroring so callers can distinguish
11
11
  * "not found" from "request failed".
12
12
  */
13
- export declare const batchRouter: import("express-serve-static-core").Router;
13
+ import { Router } from "express";
14
+ export declare const batchRouter: Router;
14
15
  //# sourceMappingURL=batch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../../../../src/api/routes/batch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,eAAO,MAAM,WAAW,4CAAW,CAAC"}
1
+ {"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../../../../src/api/routes/batch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAGpD,eAAO,MAAM,WAAW,EAAE,MAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../../src/api/routes/batch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../../src/api/routes/batch.ts"],"names":[],"mappings":"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"}
@@ -8,5 +8,6 @@
8
8
  * POST /dev/reset — delete all knowledge entries written by the `benchmark`
9
9
  * agent. Keeps everything else intact.
10
10
  */
11
- export declare const devRouter: import("express-serve-static-core").Router;
11
+ import { Router } from "express";
12
+ export declare const devRouter: Router;
12
13
  //# sourceMappingURL=dev.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../../../src/api/routes/dev.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,eAAO,MAAM,SAAS,4CAAW,CAAC"}
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../../../src/api/routes/dev.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAGpD,eAAO,MAAM,SAAS,EAAE,MAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../../../src/api/routes/dev.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAEH,qCAAoD;AACpD,iDAA6C;AAEhC,QAAA,SAAS,GAAG,IAAA,gBAAM,GAAE,CAAC;AAElC;;;GAGG;AACH,iBAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IAC7D,IAAI,CAAC;QACH,uCAAuC;QACvC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,MAAM,EAAE,GAAG,IAAA,cAAK,GAAE,CAAC;QAEnB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC;YAChD,KAAK,EAAE;gBACL,SAAS,EAAE,WAAW;aACvB;SACF,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;IAC9F,CAAC;AACH,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../../../src/api/routes/dev.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAEH,qCAAoD;AACpD,iDAA6C;AAEhC,QAAA,SAAS,GAAW,IAAA,gBAAM,GAAE,CAAC;AAE1C;;;GAGG;AACH,iBAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IAC7D,IAAI,CAAC;QACH,uCAAuC;QACvC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,MAAM,EAAE,GAAG,IAAA,cAAK,GAAE,CAAC;QAEnB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC;YAChD,KAAK,EAAE;gBACL,SAAS,EAAE,WAAW;aACvB;SACF,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;IAC9F,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -71,7 +71,7 @@ const RUNTIME_AUTHORITY = (0, runtimeLifecycle_1.resolveRuntimeAuthorityFromEnv)
71
71
  const INSTANCE_DIR = RUNTIME_AUTHORITY.instanceDir;
72
72
  const INSTANCE_RUNTIME_FILE = RUNTIME_AUTHORITY.runtimeFile;
73
73
  const INSTANCE_NAME = process.env.IRANTI_INSTANCE_NAME?.trim() || (INSTANCE_DIR ? path_1.default.basename(INSTANCE_DIR) : 'adhoc');
74
- const VERSION = '0.3.35';
74
+ const VERSION = '0.3.37';
75
75
  const PORT_RAW = (process.env.IRANTI_PORT ?? '3001').trim();
76
76
  const PORT = Number.parseInt(PORT_RAW, 10);
77
77
  const runtimeMetadataHealth = (0, healthChecks_1.createHealthCheckState)({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iranti",
3
- "version": "0.3.35",
3
+ "version": "0.3.37",
4
4
  "mcpName": "io.github.nfemmanuel/iranti",
5
5
  "description": "Memory infrastructure for multi-agent AI systems",
6
6
  "main": "dist/src/sdk/index.js",
@@ -17,6 +17,7 @@
17
17
  "dist/scripts/api-key-list.js",
18
18
  "dist/scripts/api-key-revoke.js",
19
19
  "bin/iranti.js",
20
+ "bin/iranti-mcp-server.js",
20
21
  "prisma.config.ts",
21
22
  "prisma/schema.prisma",
22
23
  "prisma/migrations/**/*",
@@ -25,7 +26,8 @@
25
26
  "LICENSE"
26
27
  ],
27
28
  "bin": {
28
- "iranti": "bin/iranti.js"
29
+ "iranti": "bin/iranti.js",
30
+ "iranti-mcp-server": "bin/iranti-mcp-server.js"
29
31
  },
30
32
  "type": "commonjs",
31
33
  "engines": {