iranti 0.3.0 → 0.3.3

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.
Files changed (64) hide show
  1. package/README.md +48 -44
  2. package/dist/scripts/claude-code-memory-hook.js +42 -153
  3. package/dist/scripts/codex-setup.js +1 -1
  4. package/dist/scripts/iranti-cli.js +161 -17
  5. package/dist/scripts/iranti-mcp.js +80 -8
  6. package/dist/scripts/seed.js +1 -1
  7. package/dist/src/api/middleware/validation.d.ts.map +1 -1
  8. package/dist/src/api/middleware/validation.js +13 -1
  9. package/dist/src/api/middleware/validation.js.map +1 -1
  10. package/dist/src/api/routes/knowledge.d.ts.map +1 -1
  11. package/dist/src/api/routes/knowledge.js +3 -0
  12. package/dist/src/api/routes/knowledge.js.map +1 -1
  13. package/dist/src/api/routes/memory.d.ts.map +1 -1
  14. package/dist/src/api/routes/memory.js +3 -0
  15. package/dist/src/api/routes/memory.js.map +1 -1
  16. package/dist/src/api/server.js +1 -1
  17. package/dist/src/attendant/AttendantInstance.d.ts +44 -1
  18. package/dist/src/attendant/AttendantInstance.d.ts.map +1 -1
  19. package/dist/src/attendant/AttendantInstance.js +475 -41
  20. package/dist/src/attendant/AttendantInstance.js.map +1 -1
  21. package/dist/src/attendant/index.d.ts +1 -1
  22. package/dist/src/attendant/index.d.ts.map +1 -1
  23. package/dist/src/attendant/index.js.map +1 -1
  24. package/dist/src/chat/index.d.ts +2 -0
  25. package/dist/src/chat/index.d.ts.map +1 -1
  26. package/dist/src/chat/index.js +56 -22
  27. package/dist/src/chat/index.js.map +1 -1
  28. package/dist/src/lib/assistantCheckpoint.d.ts +21 -0
  29. package/dist/src/lib/assistantCheckpoint.d.ts.map +1 -0
  30. package/dist/src/lib/assistantCheckpoint.js +143 -0
  31. package/dist/src/lib/assistantCheckpoint.js.map +1 -0
  32. package/dist/src/lib/cliHelpCatalog.d.ts.map +1 -1
  33. package/dist/src/lib/cliHelpCatalog.js +6 -5
  34. package/dist/src/lib/cliHelpCatalog.js.map +1 -1
  35. package/dist/src/lib/hostMemoryFormatting.d.ts +25 -0
  36. package/dist/src/lib/hostMemoryFormatting.d.ts.map +1 -0
  37. package/dist/src/lib/hostMemoryFormatting.js +56 -0
  38. package/dist/src/lib/hostMemoryFormatting.js.map +1 -0
  39. package/dist/src/lib/llm.d.ts.map +1 -1
  40. package/dist/src/lib/llm.js +3 -1
  41. package/dist/src/lib/llm.js.map +1 -1
  42. package/dist/src/lib/projectLearning.d.ts +21 -0
  43. package/dist/src/lib/projectLearning.d.ts.map +1 -0
  44. package/dist/src/lib/projectLearning.js +357 -0
  45. package/dist/src/lib/projectLearning.js.map +1 -0
  46. package/dist/src/lib/protocolEnforcement.d.ts +3 -1
  47. package/dist/src/lib/protocolEnforcement.d.ts.map +1 -1
  48. package/dist/src/lib/protocolEnforcement.js +28 -2
  49. package/dist/src/lib/protocolEnforcement.js.map +1 -1
  50. package/dist/src/lib/sessionLedger.d.ts +18 -0
  51. package/dist/src/lib/sessionLedger.d.ts.map +1 -1
  52. package/dist/src/lib/sessionLedger.js +78 -0
  53. package/dist/src/lib/sessionLedger.js.map +1 -1
  54. package/dist/src/librarian/index.d.ts.map +1 -1
  55. package/dist/src/librarian/index.js +51 -0
  56. package/dist/src/librarian/index.js.map +1 -1
  57. package/dist/src/library/client.d.ts.map +1 -1
  58. package/dist/src/library/client.js +0 -1
  59. package/dist/src/library/client.js.map +1 -1
  60. package/dist/src/sdk/index.d.ts +2 -0
  61. package/dist/src/sdk/index.d.ts.map +1 -1
  62. package/dist/src/sdk/index.js +39 -2
  63. package/dist/src/sdk/index.js.map +1 -1
  64. package/package.json +9 -5
@@ -34,6 +34,7 @@ const autoRemember_1 = require("../src/lib/autoRemember");
34
34
  const semanticFactTags_1 = require("../src/lib/semanticFactTags");
35
35
  const staffEventRegistry_1 = require("../src/lib/staffEventRegistry");
36
36
  const scaffoldCloseout_1 = require("../src/lib/scaffoldCloseout");
37
+ const projectLearning_1 = require("../src/lib/projectLearning");
37
38
  class CliError extends Error {
38
39
  constructor(code, message, hints = [], details) {
39
40
  super(message);
@@ -541,14 +542,48 @@ function formatSetupBootstrapFailure(error) {
541
542
  async function handoffToScript(scriptName, rawArgs) {
542
543
  const builtPath = builtScriptPath(scriptName);
543
544
  debugLog('Handing off to companion script.', { scriptName, builtPath, rawArgs: rawArgs.join(' ') });
545
+ const shouldProxyStdin = !process.stdin.isTTY;
546
+ const wireChildStdin = (child) => {
547
+ if (!shouldProxyStdin || !child.stdin) {
548
+ return () => { };
549
+ }
550
+ const forwardChunk = (chunk) => {
551
+ if (!child.stdin || child.stdin.destroyed)
552
+ return;
553
+ child.stdin.write(chunk);
554
+ };
555
+ const endChildStdin = () => {
556
+ if (!child.stdin || child.stdin.destroyed || child.stdin.writableEnded)
557
+ return;
558
+ child.stdin.end();
559
+ };
560
+ const destroyChildStdin = () => {
561
+ if (!child.stdin || child.stdin.destroyed)
562
+ return;
563
+ child.stdin.destroy();
564
+ };
565
+ process.stdin.on('data', forwardChunk);
566
+ process.stdin.once('end', endChildStdin);
567
+ process.stdin.once('close', endChildStdin);
568
+ process.stdin.once('error', destroyChildStdin);
569
+ process.stdin.resume();
570
+ return () => {
571
+ process.stdin.off('data', forwardChunk);
572
+ process.stdin.off('end', endChildStdin);
573
+ process.stdin.off('close', endChildStdin);
574
+ process.stdin.off('error', destroyChildStdin);
575
+ };
576
+ };
544
577
  if (fs_1.default.existsSync(builtPath)) {
545
578
  await new Promise((resolve, reject) => {
546
579
  const child = (0, child_process_1.spawn)(process.execPath, [builtPath, ...rawArgs], {
547
- stdio: 'inherit',
580
+ stdio: shouldProxyStdin ? ['pipe', 'inherit', 'inherit'] : 'inherit',
548
581
  env: process.env,
549
582
  });
583
+ const cleanupStdinProxy = wireChildStdin(child);
550
584
  child.on('error', reject);
551
585
  child.on('exit', (code, signal) => {
586
+ cleanupStdinProxy();
552
587
  if (signal) {
553
588
  reject(new Error(`${scriptName} terminated with signal ${signal}`));
554
589
  return;
@@ -566,9 +601,30 @@ async function handoffToScript(scriptName, rawArgs) {
566
601
  throw cliError('IRANTI_SCRIPT_NOT_FOUND', `Unable to locate ${scriptName} implementation.`, ['Run from an installed Iranti package or from the Iranti repo root where scripts/ exists.'], { scriptName, sourcePath, builtPath });
567
602
  }
568
603
  try {
569
- await (0, commandInvocation_1.spawnResolved)('npx', ['ts-node', sourcePath, ...rawArgs], {
570
- stdio: 'inherit',
571
- env: process.env,
604
+ await new Promise((resolve, reject) => {
605
+ const invocation = (0, commandInvocation_1.resolveCommandInvocation)('npx', ['ts-node', sourcePath, ...rawArgs]);
606
+ const child = (0, child_process_1.spawn)(invocation.executable, invocation.args, {
607
+ stdio: shouldProxyStdin ? ['pipe', 'inherit', 'inherit'] : 'inherit',
608
+ env: process.env,
609
+ shell: false,
610
+ });
611
+ const cleanupStdinProxy = wireChildStdin(child);
612
+ child.on('error', (error) => {
613
+ cleanupStdinProxy();
614
+ reject(error);
615
+ });
616
+ child.on('exit', (code, signal) => {
617
+ cleanupStdinProxy();
618
+ if (signal) {
619
+ reject(new Error(`${scriptName} terminated with signal ${signal}`));
620
+ return;
621
+ }
622
+ if ((code ?? 0) !== 0) {
623
+ reject(new Error(`${scriptName} exited with code ${code ?? 1}`));
624
+ return;
625
+ }
626
+ resolve();
627
+ });
572
628
  });
573
629
  }
574
630
  catch (error) {
@@ -1104,10 +1160,14 @@ async function writeProjectBinding(projectPath, updates) {
1104
1160
  const previousBinding = fs_1.default.existsSync(outFile)
1105
1161
  ? await readEnvFile(outFile).catch(() => ({}))
1106
1162
  : {};
1163
+ const normalizedUpdates = {
1164
+ ...updates,
1165
+ IRANTI_CODEBASE_ENTITY: updates.IRANTI_CODEBASE_ENTITY ?? previousBinding.IRANTI_CODEBASE_ENTITY ?? (0, projectLearning_1.deriveProjectCodebaseEntity)(projectPath),
1166
+ };
1107
1167
  if (!fs_1.default.existsSync(outFile)) {
1108
1168
  await writeText(outFile, '# Iranti project binding\n');
1109
1169
  }
1110
- await upsertEnvFile(outFile, updates);
1170
+ await upsertEnvFile(outFile, normalizedUpdates);
1111
1171
  await ensureProjectGitignore(projectPath);
1112
1172
  const writtenBinding = await readEnvFile(outFile).catch(() => ({}));
1113
1173
  await syncProjectBindingRegistry(projectPath, writtenBinding, previousBinding);
@@ -2132,6 +2192,11 @@ function printAttendResult(target, latestMessage, result) {
2132
2192
  console.log(` confidence ${result.decision.confidence}`);
2133
2193
  console.log(` explanation ${result.decision.explanation}`);
2134
2194
  console.log(` facts ${result.facts.length}`);
2195
+ if ((result.memoryAttributions?.length ?? 0) > 0) {
2196
+ const firstAttribution = result.memoryAttributions[0];
2197
+ console.log(` injection id ${firstAttribution.injectionId}`);
2198
+ console.log(` attribution ${firstAttribution.status} surfaced=${firstAttribution.surfaced} used=${firstAttribution.used} helpful=${firstAttribution.helpful}`);
2199
+ }
2135
2200
  if (result.facts.length === 0) {
2136
2201
  console.log('');
2137
2202
  console.log('No facts selected for injection.');
@@ -2443,7 +2508,7 @@ function buildIrantiClaudeMdBlock() {
2443
2508
  '- Call `mcp__iranti__iranti_checkpoint` when completing a task, when shifting to a new task mid-session, at any natural pause point, and before stepping away from long or interrupted work.',
2444
2509
  '- Record key actions in the checkpoint `actions` field so later sessions can see important commands, tests, searches, validations, and decisions without rerunning them blindly.',
2445
2510
  '- Do not rely on `mcp__iranti__iranti_write` alone — facts and checkpoints are separate stores. A checkpoint not written means the next handshake recovers from stale data.',
2446
- '- Under-logged runs are non-compliant. Leave structured breadcrumbs for what you found, what worked, what failed, what changed, and what happens next instead of only a broad summary.',
2511
+ '- Under-logged runs are non-compliant. Call iranti_write with what you found, what worked, what failed, what changed, and what happens next not a broad summary, but specific durable facts.',
2447
2512
  '',
2448
2513
  '## Host setup check',
2449
2514
  '- If this file was not present at session start, run `iranti claude-setup .` to complete integration.',
@@ -2506,6 +2571,10 @@ async function isPortAvailable(port, host = '0.0.0.0') {
2506
2571
  });
2507
2572
  }
2508
2573
  function listPublishedDockerHostPorts() {
2574
+ const injected = process.env.IRANTI_FAKE_DOCKER_PORTS?.trim();
2575
+ if (injected) {
2576
+ return (0, dockerCliParsing_1.parsePublishedDockerHostPorts)(injected);
2577
+ }
2509
2578
  const docker = inspectDockerAvailability();
2510
2579
  if (!docker.daemonReachable)
2511
2580
  return new Set();
@@ -2756,12 +2825,21 @@ async function executeSetupPlan(plan) {
2756
2825
  IRANTI_INSTANCE: plan.instanceName,
2757
2826
  IRANTI_INSTANCE_ENV: configured.envFile,
2758
2827
  });
2828
+ const bindingEnv = await readEnvFile(written);
2829
+ const learningStatus = await (0, projectLearning_1.writeProjectLearningSnapshot)({
2830
+ projectPath,
2831
+ projectEnvFile: written,
2832
+ binding: bindingEnv,
2833
+ agentId: project.agentId,
2834
+ });
2759
2835
  bindings.push({
2760
2836
  projectPath,
2761
2837
  envFile: written,
2762
2838
  agentId: project.agentId,
2763
2839
  projectMode: project.projectMode,
2764
2840
  autoRemember: project.autoRemember,
2841
+ codebaseEntity: bindingEnv.IRANTI_CODEBASE_ENTITY ?? (0, projectLearning_1.deriveProjectCodebaseEntity)(projectPath),
2842
+ learningStatus,
2765
2843
  });
2766
2844
  if (project.claudeCode) {
2767
2845
  await writeClaudeCodeProjectFiles(projectPath);
@@ -2790,7 +2868,7 @@ async function executeSetupPlan(plan) {
2790
2868
  bindings,
2791
2869
  };
2792
2870
  }
2793
- function parseSetupConfig(filePath) {
2871
+ async function parseSetupConfig(filePath) {
2794
2872
  const resolved = path_1.default.resolve(filePath);
2795
2873
  if (!fs_1.default.existsSync(resolved)) {
2796
2874
  throw new Error(`Setup config file not found: ${resolved}`);
@@ -2812,7 +2890,7 @@ function parseSetupConfig(filePath) {
2812
2890
  : databaseModeRaw === 'existing' || databaseModeRaw === 'local' || databaseModeRaw.length === 0
2813
2891
  ? 'local'
2814
2892
  : (() => { throw new Error(`Unsupported databaseMode in setup config: ${databaseModeRaw}`); })();
2815
- const databaseUrl = deriveDatabaseUrlForMode(databaseMode, instanceName, String(raw?.databaseUrl ?? raw?.dbUrl ?? '').trim());
2893
+ const databaseUrl = await resolveSetupDatabaseUrl(databaseMode, instanceName, String(raw?.databaseUrl ?? raw?.dbUrl ?? '').trim());
2816
2894
  const databaseIntentStrategy = parseDatabaseIntentStrategyFlag(String(raw?.databaseIntent ?? raw?.dbIntent ?? '').trim(), 'databaseIntent');
2817
2895
  const provider = normalizeProvider(String(raw?.provider ?? 'mock')) ?? 'mock';
2818
2896
  if (!isSupportedProvider(provider)) {
@@ -2874,7 +2952,7 @@ function parseSetupConfig(filePath) {
2874
2952
  }),
2875
2953
  };
2876
2954
  }
2877
- function defaultsSetupPlan(args) {
2955
+ async function defaultsSetupPlan(args) {
2878
2956
  const scope = normalizeScope(getFlag(args, 'scope'));
2879
2957
  const root = path_1.default.resolve(getFlag(args, 'root') ?? resolveInstallRoot(args, scope));
2880
2958
  const mode = getFlag(args, 'mode') === 'shared' ? 'shared' : 'isolated';
@@ -2901,7 +2979,7 @@ function defaultsSetupPlan(args) {
2901
2979
  const explicitDatabaseUrl = (getFlag(args, 'db-url')
2902
2980
  ?? (databaseMode === 'managed' ? process.env.DATABASE_URL : '')
2903
2981
  ?? '').trim();
2904
- const databaseUrl = deriveDatabaseUrlForMode(databaseMode, instanceName, explicitDatabaseUrl);
2982
+ const databaseUrl = await resolveSetupDatabaseUrl(databaseMode, instanceName, explicitDatabaseUrl);
2905
2983
  const databaseIntentStrategy = parseDatabaseIntentStrategyFlag(getFlag(args, 'db-intent'), '--db-intent');
2906
2984
  const provider = normalizeProvider(getFlag(args, 'provider') ?? process.env.LLM_PROVIDER ?? 'mock') ?? 'mock';
2907
2985
  if (!isSupportedProvider(provider)) {
@@ -2917,9 +2995,21 @@ function defaultsSetupPlan(args) {
2917
2995
  providerKeys[envKey] = secret;
2918
2996
  }
2919
2997
  }
2920
- const apiKeyRaw = (getFlag(args, 'api-key') ?? process.env.IRANTI_API_KEY ?? '').trim();
2921
- const apiKey = apiKeyRaw && !detectPlaceholder(apiKeyRaw)
2922
- ? apiKeyRaw
2998
+ const explicitProviderKey = (getFlag(args, 'provider-key') ?? '').trim();
2999
+ const apiKeyFlag = (getFlag(args, 'api-key') ?? '').trim();
3000
+ const providerEnvKey = providerKeyEnv(provider);
3001
+ const isRemoteProvider = Boolean(providerEnvKey);
3002
+ if (explicitProviderKey && !detectPlaceholder(explicitProviderKey) && providerEnvKey) {
3003
+ providerKeys[providerEnvKey] = explicitProviderKey;
3004
+ }
3005
+ else if (apiKeyFlag && !detectPlaceholder(apiKeyFlag) && isRemoteProvider && providerEnvKey && !providerKeys[providerEnvKey]) {
3006
+ providerKeys[providerEnvKey] = apiKeyFlag;
3007
+ }
3008
+ const irantiKeyRaw = isRemoteProvider
3009
+ ? (process.env.IRANTI_API_KEY ?? '').trim()
3010
+ : apiKeyFlag || (process.env.IRANTI_API_KEY ?? '').trim();
3011
+ const apiKey = irantiKeyRaw && !detectPlaceholder(irantiKeyRaw)
3012
+ ? irantiKeyRaw
2923
3013
  : makeLegacyInstanceApiKey(instanceName);
2924
3014
  const projectsFlag = (getFlag(args, 'projects') ?? '').trim();
2925
3015
  const projects = projectsFlag
@@ -3491,6 +3581,23 @@ function deriveDatabaseUrlForMode(mode, instanceName, explicitDatabaseUrl) {
3491
3581
  }
3492
3582
  return `postgresql://${user}:${password}@${localDatabaseHost}:5432/iranti_${instanceName}`;
3493
3583
  }
3584
+ async function resolveSetupDatabaseUrl(mode, instanceName, explicitDatabaseUrl) {
3585
+ if (mode !== 'docker') {
3586
+ return deriveDatabaseUrlForMode(mode, instanceName, explicitDatabaseUrl);
3587
+ }
3588
+ const explicit = explicitDatabaseUrl?.trim() ?? '';
3589
+ if (explicit && !detectPlaceholder(explicit)) {
3590
+ return explicit;
3591
+ }
3592
+ const preferredPort = 5432;
3593
+ const dockerPublishedPorts = listPublishedDockerHostPorts();
3594
+ const selectedPort = await isPortUsable(preferredPort, '0.0.0.0', dockerPublishedPorts)
3595
+ ? preferredPort
3596
+ : await findNextAvailablePort(preferredPort + 1, '0.0.0.0', 50, dockerPublishedPorts);
3597
+ const user = encodeURIComponent((process.env.POSTGRES_USER ?? 'postgres').trim() || 'postgres');
3598
+ const password = encodeURIComponent((process.env.POSTGRES_PASSWORD ?? 'postgres').trim() || 'postgres');
3599
+ return `postgresql://${user}:${password}@${preferredLocalDatabaseHost()}:${selectedPort}/iranti_${instanceName}`;
3600
+ }
3494
3601
  function preferredLocalDatabaseHost() {
3495
3602
  return process.platform === 'win32' ? '127.0.0.1' : 'localhost';
3496
3603
  }
@@ -5002,7 +5109,7 @@ async function setupCommand(args) {
5002
5109
  const dependencyChecks = await collectDependencyChecks();
5003
5110
  printDependencyChecks(dependencyChecks);
5004
5111
  console.log('');
5005
- const plan = configPath ? parseSetupConfig(configPath) : defaultsSetupPlan(args);
5112
+ const plan = configPath ? await parseSetupConfig(configPath) : await defaultsSetupPlan(args);
5006
5113
  const result = await executeSetupPlan(plan);
5007
5114
  console.log(sectionTitle('Setup Complete'));
5008
5115
  console.log(` runtime root ${result.root}`);
@@ -5019,7 +5126,10 @@ async function setupCommand(args) {
5019
5126
  else {
5020
5127
  console.log(' projects');
5021
5128
  for (const binding of result.bindings) {
5022
- console.log(` - ${binding.projectPath} (${binding.agentId}, ${binding.projectMode})`);
5129
+ const learningSuffix = binding.learningStatus.status === 'written'
5130
+ ? `, learned=${binding.codebaseEntity}`
5131
+ : `, project-learning=${binding.learningStatus.status}`;
5132
+ console.log(` - ${binding.projectPath} (${binding.agentId}, ${binding.projectMode}${learningSuffix})`);
5023
5133
  }
5024
5134
  }
5025
5135
  printNextSteps([
@@ -5382,7 +5492,10 @@ async function setupCommand(args) {
5382
5492
  else {
5383
5493
  console.log(' projects');
5384
5494
  for (const binding of finalResult.bindings) {
5385
- console.log(` - ${binding.projectPath} (${binding.agentId}, ${binding.projectMode}, auto-remember=${binding.autoRemember ? 'true' : 'false'})`);
5495
+ const learningSuffix = binding.learningStatus.status === 'written'
5496
+ ? `, codebase=${binding.codebaseEntity}`
5497
+ : `, project-learning=${binding.learningStatus.status}`;
5498
+ console.log(` - ${binding.projectPath} (${binding.agentId}, ${binding.projectMode}, auto-remember=${binding.autoRemember ? 'true' : 'false'}${learningSuffix})`);
5386
5499
  }
5387
5500
  }
5388
5501
  const nextSteps = [
@@ -6557,10 +6670,21 @@ async function projectInitCommand(args) {
6557
6670
  IRANTI_INSTANCE: instanceName,
6558
6671
  IRANTI_INSTANCE_ENV: envFile,
6559
6672
  });
6673
+ const writtenBinding = await readEnvFile(outFile);
6674
+ const learningStatus = await (0, projectLearning_1.writeProjectLearningSnapshot)({
6675
+ projectPath,
6676
+ projectEnvFile: outFile,
6677
+ binding: writtenBinding,
6678
+ agentId,
6679
+ });
6560
6680
  console.log(sectionTitle('Project Initialized'));
6561
6681
  console.log(` status ${okLabel()}`);
6562
6682
  console.log(` wrote ${outFile}`);
6563
6683
  console.log(` mode ${projectMode}`);
6684
+ console.log(` codebase ${writtenBinding.IRANTI_CODEBASE_ENTITY ?? (0, projectLearning_1.deriveProjectCodebaseEntity)(projectPath)}`);
6685
+ if (learningStatus.status !== 'written') {
6686
+ console.log(` learn ${paint(learningStatus.status, learningStatus.status === 'failed' ? 'red' : 'yellow')} (${learningStatus.detail})`);
6687
+ }
6564
6688
  printNextSteps([
6565
6689
  `iranti doctor --instance ${instanceName}`,
6566
6690
  'iranti chat',
@@ -6859,6 +6983,13 @@ async function configureProjectCommand(args) {
6859
6983
  throw new Error('Unable to determine IRANTI_API_KEY. Provide --api-key <token> or configure the instance first.');
6860
6984
  }
6861
6985
  const written = await writeProjectBinding(projectPath, updates);
6986
+ const writtenBinding = await readEnvFile(written);
6987
+ const learningStatus = await (0, projectLearning_1.writeProjectLearningSnapshot)({
6988
+ projectPath,
6989
+ projectEnvFile: written,
6990
+ binding: writtenBinding,
6991
+ agentId: updates.IRANTI_AGENT_ID,
6992
+ });
6862
6993
  const json = hasFlag(args, 'json');
6863
6994
  const result = {
6864
6995
  projectPath,
@@ -6868,6 +6999,8 @@ async function configureProjectCommand(args) {
6868
6999
  autoRemember: updates.IRANTI_AUTO_REMEMBER === 'true',
6869
7000
  projectMode: updates.IRANTI_PROJECT_MODE,
6870
7001
  instance: updates.IRANTI_INSTANCE ?? null,
7002
+ codebaseEntity: writtenBinding.IRANTI_CODEBASE_ENTITY ?? (0, projectLearning_1.deriveProjectCodebaseEntity)(projectPath),
7003
+ projectLearning: learningStatus,
6871
7004
  };
6872
7005
  if (json) {
6873
7006
  console.log(JSON.stringify(result, null, 2));
@@ -6881,9 +7014,13 @@ async function configureProjectCommand(args) {
6881
7014
  console.log(` agent ${updates.IRANTI_AGENT_ID}`);
6882
7015
  console.log(` remember ${updates.IRANTI_AUTO_REMEMBER}`);
6883
7016
  console.log(` mode ${updates.IRANTI_PROJECT_MODE}`);
7017
+ console.log(` codebase ${writtenBinding.IRANTI_CODEBASE_ENTITY ?? (0, projectLearning_1.deriveProjectCodebaseEntity)(projectPath)}`);
6884
7018
  if (updates.IRANTI_INSTANCE) {
6885
7019
  console.log(` instance ${updates.IRANTI_INSTANCE}`);
6886
7020
  }
7021
+ if (learningStatus.status !== 'written') {
7022
+ console.log(` learn ${paint(learningStatus.status, learningStatus.status === 'failed' ? 'red' : 'yellow')} (${learningStatus.detail})`);
7023
+ }
6887
7024
  printNextSteps([
6888
7025
  `iranti doctor${updates.IRANTI_INSTANCE ? ` --instance ${updates.IRANTI_INSTANCE}` : ''}`,
6889
7026
  ]);
@@ -6922,7 +7059,7 @@ async function authCreateKeyCommand(args) {
6922
7059
  const resolvedProjectPath = path_1.default.resolve(projectPath);
6923
7060
  const existingBindingFile = path_1.default.join(resolvedProjectPath, '.env.iranti');
6924
7061
  const existingBinding = fs_1.default.existsSync(existingBindingFile) ? await readEnvFile(existingBindingFile) : {};
6925
- await writeProjectBinding(resolvedProjectPath, {
7062
+ const written = await writeProjectBinding(resolvedProjectPath, {
6926
7063
  IRANTI_URL: `http://localhost:${env.IRANTI_PORT ?? '3001'}`,
6927
7064
  IRANTI_API_KEY: created.token,
6928
7065
  IRANTI_AGENT_ID: agentId ?? existingBinding.IRANTI_AGENT_ID ?? 'my_agent',
@@ -6932,6 +7069,13 @@ async function authCreateKeyCommand(args) {
6932
7069
  IRANTI_INSTANCE: instanceName,
6933
7070
  IRANTI_INSTANCE_ENV: envFile,
6934
7071
  });
7072
+ const binding = await readEnvFile(written);
7073
+ await (0, projectLearning_1.writeProjectLearningSnapshot)({
7074
+ projectPath: resolvedProjectPath,
7075
+ projectEnvFile: written,
7076
+ binding,
7077
+ agentId: agentId ?? binding.IRANTI_AGENT_ID ?? 'my_agent',
7078
+ });
6935
7079
  }
6936
7080
  if (hasFlag(args, 'json')) {
6937
7081
  console.log(JSON.stringify({
@@ -49,6 +49,8 @@ const autoRemember_1 = require("../src/lib/autoRemember");
49
49
  const staffEventRegistry_1 = require("../src/lib/staffEventRegistry");
50
50
  const client_1 = require("../src/library/client");
51
51
  const attendant_1 = require("../src/attendant");
52
+ const assistantCheckpoint_1 = require("../src/lib/assistantCheckpoint");
53
+ const hostMemoryFormatting_1 = require("../src/lib/hostMemoryFormatting");
52
54
  (0, runtimeEnv_1.loadRuntimeEnv)();
53
55
  let runtimeHostOverride = null;
54
56
  let shutdownPromise = null;
@@ -90,7 +92,7 @@ function printHelp() {
90
92
  ' IRANTI_MCP_AGENT_MODEL Default agent model label',
91
93
  ' IRANTI_MCP_DEFAULT_SOURCE Default write source (default: ClaudeCode)',
92
94
  ' IRANTI_MCP_HOST Host label for session ledger events (default: generic_mcp)',
93
- ' IRANTI_AUTO_REMEMBER Opt-in explicit prompt auto-save before attend()',
95
+ ' IRANTI_AUTO_REMEMBER Opt-in prompt-side auto-save before pre-response attend()',
94
96
  '',
95
97
  'This server is intended for Claude Code and other MCP clients over stdio.',
96
98
  'If you run `iranti mcp` directly in a terminal, it will stay running and wait for an MCP client.',
@@ -341,7 +343,7 @@ async function main() {
341
343
  await ensureDefaultAgent(iranti);
342
344
  const server = new mcp_js_1.McpServer({
343
345
  name: 'iranti-mcp',
344
- version: '0.3.0',
346
+ version: '0.3.2',
345
347
  });
346
348
  server.registerTool('iranti_handshake', {
347
349
  description: `Initialize or refresh an agent's working-memory brief for the current task.
@@ -388,7 +390,9 @@ the session first and report that in the result metadata.
388
390
  This is the minimum safe pre-reply call even when the host skipped handshake.
389
391
  Omitting currentContext falls back to the latest message only; pass the
390
392
  full visible context when available. For host compatibility, message is
391
- accepted as an alias for latestMessage.`,
393
+ accepted as an alias for latestMessage. When phase='post-response', pass the
394
+ assistant response so Iranti can persist strict continuity facts and shared
395
+ checkpoint state before closing the turn.`,
392
396
  inputSchema: {
393
397
  latestMessage: z.string().min(1).optional().describe('The latest user or assistant message.'),
394
398
  message: z.string().min(1).optional().describe('Alias for latestMessage, accepted for host compatibility.'),
@@ -405,7 +409,32 @@ accepted as an alias for latestMessage.`,
405
409
  syncRuntimeLedgerContext(iranti, undefined, resolvedAgent);
406
410
  const resolvedLatestMessage = resolveAttendLatestMessage({ latestMessage, message });
407
411
  try {
408
- if ((0, autoRemember_1.isAutoRememberEnabled)()) {
412
+ if (phase === 'post-response') {
413
+ await (0, autoRemember_1.rememberAssistantResponseFacts)({
414
+ iranti,
415
+ response: resolvedLatestMessage,
416
+ agent: resolvedAgent,
417
+ source: defaultWriteSource(),
418
+ ledgerContext: {
419
+ source: 'mcp',
420
+ host: currentHost() || 'generic_mcp',
421
+ },
422
+ });
423
+ const checkpoint = (0, assistantCheckpoint_1.extractAssistantCheckpointPayload)(resolvedLatestMessage);
424
+ const projectEntity = process.env.IRANTI_MEMORY_ENTITY?.trim();
425
+ if (checkpoint && projectEntity) {
426
+ await iranti.checkpoint({
427
+ agent: resolvedAgent,
428
+ task: `Post-response checkpoint for ${resolvedAgent}`,
429
+ recentMessages: [],
430
+ checkpoint: {
431
+ ...checkpoint,
432
+ entityTargets: [projectEntity],
433
+ },
434
+ });
435
+ }
436
+ }
437
+ else if ((0, autoRemember_1.isAutoRememberEnabled)()) {
409
438
  await (0, autoRemember_1.autoRememberPromptFacts)({
410
439
  iranti,
411
440
  prompt: resolvedLatestMessage,
@@ -422,7 +451,16 @@ accepted as an alias for latestMessage.`,
422
451
  forceInject,
423
452
  phase,
424
453
  });
425
- return textResult(result);
454
+ const injectionBlock = result.shouldInject
455
+ ? (0, hostMemoryFormatting_1.formatStructuredFactBlock)(result.facts, {
456
+ title: 'Iranti Retrieved Memory',
457
+ includeValues: true,
458
+ })
459
+ : '';
460
+ return textResult({
461
+ ...result,
462
+ injectionBlock,
463
+ });
426
464
  }
427
465
  catch (error) {
428
466
  if (error instanceof sdk_1.ProtocolViolationError) {
@@ -434,11 +472,12 @@ accepted as an alias for latestMessage.`,
434
472
  server.registerTool('iranti_checkpoint', {
435
473
  description: `Persist a shared progress checkpoint while you work.
436
474
  Use this at meaningful milestones so current step, next step, open risks,
437
- recent outputs, structured actions, and shared entity breadcrumbs survive across turns,
475
+ recent outputs, structured actions, and shared entity state survive across turns,
438
476
  sessions, and agents. This is the strongest shared-RAM tool for active work:
439
477
  prefer it over ad-hoc prose when you need another session or another agent
440
478
  to pick up where you left off. If entityTargets are supplied, Iranti also
441
- writes compact shared checkpoint_* breadcrumbs to those entities for handoff.`,
479
+ writes canonical shared state such as current_step, next_step,
480
+ open_risks, recent_actions, and recent_file_changes to those entities for handoff.`,
442
481
  inputSchema: {
443
482
  task: z.string().min(1).describe('Current task or objective for the active checkpoint.'),
444
483
  recentMessages: z.array(z.string()).optional().describe('Recent messages that help fingerprint the active task.'),
@@ -459,7 +498,7 @@ writes compact shared checkpoint_* breadcrumbs to those entities for handoff.`,
459
498
  toPath: z.string().optional().describe('Destination path for move/rename actions.'),
460
499
  purpose: z.string().optional().describe('Why the file changed or what role it now serves.'),
461
500
  })).optional().describe('Structured file actions produced so far.'),
462
- entityTargets: z.array(z.string()).optional().describe('Shared entities that should receive checkpoint breadcrumbs, in entityType/entityId format.'),
501
+ entityTargets: z.array(z.string()).optional().describe('Shared entities that should receive checkpoint state, in entityType/entityId format.'),
463
502
  notes: z.string().optional().describe('Compact extra checkpoint notes that aid handoff.'),
464
503
  sessionId: z.string().optional().describe('Optional existing session id to refresh.'),
465
504
  agent: z.string().optional().describe('Override the default agent id.'),
@@ -543,6 +582,39 @@ memory alone before checking Iranti.`,
543
582
  throw error;
544
583
  }
545
584
  });
585
+ server.registerTool('iranti_history', {
586
+ description: `Retrieve the full version history of a fact for an exact entity+key pair.
587
+ Returns all archived past values plus the current value, ordered oldest-first.
588
+ Each entry includes value, summary, confidence, source, validFrom, validUntil,
589
+ isCurrent, archivedReason, and resolutionState.
590
+ REQUIRED: call iranti_attend before this discovery tool so Iranti can decide
591
+ whether memory should be injected first.
592
+ Use this to understand how a fact evolved over time — decisions that changed,
593
+ blockers that were resolved, values that were contested or superseded.`,
594
+ inputSchema: {
595
+ entity: z.string().min(1).describe('Entity in entityType/entityId format.'),
596
+ key: z.string().min(1).describe('Fact key to retrieve history for.'),
597
+ limit: z.number().int().min(1).optional().describe('Maximum number of entries to return (applied after sorting oldest-first).'),
598
+ includeExpired: z.boolean().optional().describe('Include entries that expired without being superseded.'),
599
+ includeContested: z.boolean().optional().describe('Include entries that were contested or escalated.'),
600
+ agent: z.string().optional().describe('Override the default agent id for protocol tracking.'),
601
+ agentId: z.string().optional().describe('Alias for agent. Override the default agent id for protocol tracking.'),
602
+ },
603
+ }, async ({ entity, key, limit, includeExpired, includeContested, agent, agentId }) => {
604
+ const resolvedAgent = resolveToolAgent(agent, agentId);
605
+ syncRuntimeLedgerContext(iranti, undefined, resolvedAgent);
606
+ try {
607
+ const history = await iranti.history(entity, key, { includeExpired, includeContested });
608
+ const result = limit != null ? history.slice(0, limit) : history;
609
+ return textResult(result);
610
+ }
611
+ catch (error) {
612
+ if (error instanceof sdk_1.ProtocolViolationError) {
613
+ return protocolViolationResult(error);
614
+ }
615
+ throw error;
616
+ }
617
+ });
546
618
  server.registerTool('iranti_search', {
547
619
  description: `Search shared memory with natural language when the exact entity
548
620
  or key is unknown. Uses hybrid lexical and vector search across
@@ -39,7 +39,7 @@ const STAFF_ENTRIES = [
39
39
  entityId: 'attendant',
40
40
  key: 'operating_rules',
41
41
  valueRaw: {
42
- version: '0.3.1',
42
+ version: '0.3.2',
43
43
  rules: [
44
44
  'Serve one external agent only; optimize for that agent keeping task context coherent across turns and sessions.',
45
45
  'ACKNOWLEDGE: This is strictly mandatory — you MUST state the following before proceeding with any user request, and no work should begin until it is stated: "I acknowledge that Iranti is a hive mind. I have read the Iranti operating rules and the protocols for iranti_handshake, iranti_attend, iranti_write, iranti_checkpoint, and iranti_remember_response, and I pledge to use them to persist what I find, what works, what fails, what changes, and what happens next so later sessions do not have to rediscover it." Skipping this acknowledgment is non-compliant regardless of context.',
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../src/api/middleware/validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAyC,MAAM,WAAW,CAAC;AACzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAI9D,QAAA,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+EZ,CAAC;AAwDF,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,OAAO,OAAO,IACpD,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,oDAoExD;AASD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,gBAAgB,CAgDlF;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CA4EA;AAGD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOlD;AAGD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEtD;AAGD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEhD"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../src/api/middleware/validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAyC,MAAM,WAAW,CAAC;AACzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAI9D,QAAA,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+EZ,CAAC;AAwDF,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,OAAO,OAAO,IACpD,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,oDAkFxD;AASD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,gBAAgB,CAgDlF;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CA4EA;AAGD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOlD;AAGD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEtD;AAGD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEhD"}
@@ -27,7 +27,7 @@ const schemas = {
27
27
  observe: {
28
28
  agent: { type: 'string', required: false, maxLength: 200 },
29
29
  agentId: { type: 'string', required: false, maxLength: 200 },
30
- currentContext: { type: 'string', required: true, maxLength: 50000 },
30
+ currentContext: { type: 'string', required: false, maxLength: 50000 },
31
31
  maxFacts: { type: 'number', required: false, min: 1, max: 100, default: 10 },
32
32
  entityHints: { type: 'array', required: false, maxLength: 100 }
33
33
  },
@@ -185,6 +185,18 @@ function validateInput(schemaName) {
185
185
  });
186
186
  }
187
187
  }
188
+ if (schemaName === 'observe') {
189
+ const currentContext = typeof data.currentContext === 'string' ? data.currentContext.trim() : '';
190
+ const hasEntityHints = Array.isArray(data.entityHints)
191
+ && data.entityHints.some((hint) => typeof hint === 'string' && hint.trim().length > 0);
192
+ if (currentContext.length === 0 && !hasEntityHints) {
193
+ return res.status(400).json({
194
+ error: 'currentContext or entityHints is required for observe.',
195
+ code: 'VALIDATION_ERROR',
196
+ field: 'currentContext',
197
+ });
198
+ }
199
+ }
188
200
  if (schemaName === 'attend' && data.phase !== undefined) {
189
201
  const allowedPhases = ['pre-response', 'post-response', 'mid-turn'];
190
202
  if (typeof data.phase !== 'string' || !allowedPhases.includes(data.phase)) {
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../src/api/middleware/validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../src/api/middleware/validation.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../../../src/api/routes/knowledge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,MAAM,EAA0B,MAAM,WAAW,CAAC;AAoG3D,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAiPtD"}
1
+ {"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../../../src/api/routes/knowledge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,MAAM,EAA0B,MAAM,WAAW,CAAC;AAuG3D,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAiPtD"}
@@ -69,6 +69,9 @@ function fallbackProtocolAgent(req) {
69
69
  if (explicit)
70
70
  return explicit;
71
71
  const keyId = auth?.keyId?.trim();
72
+ // Intentional fallback: protocol state is keyed to the authenticated API key
73
+ // when the caller does not send agentId, so protocol-gated reads still have a
74
+ // stable principal. Explicit agentId/query aliases still override this path.
72
75
  return keyId ? `api:${keyId}` : null;
73
76
  }
74
77
  function applyProtocolContext(iranti, req) {