iranti 0.2.20 → 0.2.21

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.
@@ -1344,10 +1344,12 @@ async function executeSetupPlan(plan) {
1344
1344
  });
1345
1345
  if (plan.bootstrapDatabase) {
1346
1346
  try {
1347
- if (plan.databaseMode === 'docker') {
1347
+ if (plan.databaseMode === 'docker' && !plan.databaseProvisioned) {
1348
1348
  const parsed = parsePostgresConnectionString(plan.databaseUrl);
1349
1349
  await runDockerPostgresContainer({
1350
- containerName: sanitizeIdentifier(`iranti_${plan.instanceName}_db`, `iranti_${plan.instanceName}_db`),
1350
+ containerName: plan.dockerContainerName
1351
+ ? sanitizeIdentifier(plan.dockerContainerName, `iranti_${plan.instanceName}_db`)
1352
+ : sanitizeIdentifier(`iranti_${plan.instanceName}_db`, `iranti_${plan.instanceName}_db`),
1351
1353
  hostPort: Number.parseInt(parsed.port || '5432', 10),
1352
1354
  password: decodeURIComponent(parsed.password || 'postgres'),
1353
1355
  database: postgresDatabaseName(plan.databaseUrl),
@@ -3326,6 +3328,8 @@ async function setupCommand(args) {
3326
3328
  const psqlAvailable = hasCommandInstalled('psql');
3327
3329
  let dbUrl = '';
3328
3330
  let bootstrapDatabase = false;
3331
+ let databaseProvisioned = false;
3332
+ let dockerContainerName;
3329
3333
  let databaseMode = recommendedDatabaseMode;
3330
3334
  while (true) {
3331
3335
  const defaultMode = recommendedDatabaseMode;
@@ -3362,6 +3366,7 @@ async function setupCommand(args) {
3362
3366
  const dbName = sanitizeIdentifier(await promptNonEmpty(prompt, 'Docker PostgreSQL database name', `iranti_${instanceName}`), `iranti_${instanceName}`);
3363
3367
  const dbPassword = await promptRequiredSecret(prompt, 'Docker PostgreSQL password');
3364
3368
  const containerName = sanitizeIdentifier(await promptNonEmpty(prompt, 'Docker container name', `iranti_${instanceName}_db`), `iranti_${instanceName}_db`);
3369
+ dockerContainerName = containerName;
3365
3370
  dbUrl = `postgresql://postgres:${dbPassword}@localhost:${dbHostPort}/${dbName}`;
3366
3371
  console.log(`${infoLabel()} Docker will be used only for PostgreSQL. Iranti itself does not require Docker once a PostgreSQL database is available.`);
3367
3372
  if (await promptYesNo(prompt, `Start or reuse Docker container '${containerName}' now?`, true)) {
@@ -3372,11 +3377,9 @@ async function setupCommand(args) {
3372
3377
  database: dbName,
3373
3378
  });
3374
3379
  console.log(`${okLabel()} Docker PostgreSQL ready at localhost:${dbHostPort}`);
3375
- bootstrapDatabase = true;
3376
- }
3377
- else {
3378
- bootstrapDatabase = await promptYesNo(prompt, 'Will you start PostgreSQL separately before first run?', false);
3380
+ databaseProvisioned = true;
3379
3381
  }
3382
+ bootstrapDatabase = await promptYesNo(prompt, 'Run migrations and seed the database now?', true);
3380
3383
  break;
3381
3384
  }
3382
3385
  console.log(`${warnLabel()} Choose one of: local, managed, docker.`);
@@ -3478,6 +3481,8 @@ async function setupCommand(args) {
3478
3481
  codex,
3479
3482
  codexAgent: projects[0]?.agentId,
3480
3483
  bootstrapDatabase,
3484
+ dockerContainerName,
3485
+ databaseProvisioned,
3481
3486
  });
3482
3487
  });
3483
3488
  if (!result) {
@@ -3519,6 +3524,7 @@ async function doctorCommand(args) {
3519
3524
  const version = getPackageVersion();
3520
3525
  const pushEnvironmentChecks = async (env, prefix = '') => {
3521
3526
  const databaseUrl = env.DATABASE_URL;
3527
+ let databaseInitializedForDoctor = false;
3522
3528
  checks.push(detectPlaceholder(databaseUrl)
3523
3529
  ? {
3524
3530
  name: `${prefix}database configuration`,
@@ -3542,6 +3548,10 @@ async function doctorCommand(args) {
3542
3548
  name: `${prefix}${providerKeyCheck.name}`,
3543
3549
  });
3544
3550
  try {
3551
+ if (!detectPlaceholder(databaseUrl)) {
3552
+ (0, client_1.initDb)(databaseUrl);
3553
+ databaseInitializedForDoctor = true;
3554
+ }
3545
3555
  const backendName = (0, backends_1.resolveVectorBackendName)({
3546
3556
  vectorBackend: env.IRANTI_VECTOR_BACKEND,
3547
3557
  qdrantUrl: env.IRANTI_QDRANT_URL,
@@ -3581,6 +3591,11 @@ async function doctorCommand(args) {
3581
3591
  detail: error instanceof Error ? error.message : String(error),
3582
3592
  });
3583
3593
  }
3594
+ finally {
3595
+ if (databaseInitializedForDoctor) {
3596
+ await (0, client_1.disconnectDb)();
3597
+ }
3598
+ }
3584
3599
  };
3585
3600
  checks.push({
3586
3601
  name: 'node version',
@@ -144,7 +144,7 @@ async function main() {
144
144
  await ensureDefaultAgent(iranti);
145
145
  const server = new mcp_js_1.McpServer({
146
146
  name: 'iranti-mcp',
147
- version: '0.2.20',
147
+ version: '0.2.21',
148
148
  });
149
149
  server.registerTool('iranti_handshake', {
150
150
  description: `Initialize or refresh an agent's working-memory brief for the current task.
@@ -39,7 +39,7 @@ const INSTANCE_DIR = process.env.IRANTI_INSTANCE_DIR?.trim()
39
39
  const INSTANCE_RUNTIME_FILE = process.env.IRANTI_INSTANCE_RUNTIME_FILE?.trim()
40
40
  || (INSTANCE_DIR ? (0, runtimeLifecycle_1.runtimeFileForInstance)(INSTANCE_DIR) : null);
41
41
  const INSTANCE_NAME = process.env.IRANTI_INSTANCE_NAME?.trim() || (INSTANCE_DIR ? path_1.default.basename(INSTANCE_DIR) : 'adhoc');
42
- const VERSION = '0.2.20';
42
+ const VERSION = '0.2.21';
43
43
  try {
44
44
  fs_1.default.mkdirSync(path_1.default.dirname(REQUEST_LOG_FILE), { recursive: true });
45
45
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iranti",
3
- "version": "0.2.20",
3
+ "version": "0.2.21",
4
4
  "description": "Memory infrastructure for multi-agent AI systems",
5
5
  "main": "dist/src/sdk/index.js",
6
6
  "files": [