@hasna/contacts 0.4.3 → 0.5.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.
Files changed (42) hide show
  1. package/dist/cli/index.js +1176 -21
  2. package/dist/db/contacts.d.ts +4 -0
  3. package/dist/db/contacts.d.ts.map +1 -1
  4. package/dist/db/coordination.d.ts +30 -0
  5. package/dist/db/coordination.d.ts.map +1 -0
  6. package/dist/db/database.d.ts.map +1 -1
  7. package/dist/db/field-history.d.ts +17 -0
  8. package/dist/db/field-history.d.ts.map +1 -0
  9. package/dist/db/freshness.d.ts +24 -0
  10. package/dist/db/freshness.d.ts.map +1 -0
  11. package/dist/db/graph.d.ts +21 -0
  12. package/dist/db/graph.d.ts.map +1 -0
  13. package/dist/db/identity.d.ts +32 -0
  14. package/dist/db/identity.d.ts.map +1 -0
  15. package/dist/db/job-history.d.ts +29 -0
  16. package/dist/db/job-history.d.ts.map +1 -0
  17. package/dist/db/learnings.d.ts +43 -0
  18. package/dist/db/learnings.d.ts.map +1 -0
  19. package/dist/db/org-chart.d.ts +37 -0
  20. package/dist/db/org-chart.d.ts.map +1 -0
  21. package/dist/db/signals.d.ts +18 -0
  22. package/dist/db/signals.d.ts.map +1 -0
  23. package/dist/index.d.ts +24 -0
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +978 -85
  26. package/dist/lib/context.d.ts +5 -0
  27. package/dist/lib/context.d.ts.map +1 -0
  28. package/dist/lib/embeddings.d.ts +9 -0
  29. package/dist/lib/embeddings.d.ts.map +1 -0
  30. package/dist/lib/freshness.d.ts +19 -0
  31. package/dist/lib/freshness.d.ts.map +1 -0
  32. package/dist/lib/learning-maintenance.d.ts +8 -0
  33. package/dist/lib/learning-maintenance.d.ts.map +1 -0
  34. package/dist/lib/meeting-capture.d.ts +15 -0
  35. package/dist/lib/meeting-capture.d.ts.map +1 -0
  36. package/dist/lib/signals.d.ts +9 -0
  37. package/dist/lib/signals.d.ts.map +1 -0
  38. package/dist/lib/signature-parser.d.ts +36 -0
  39. package/dist/lib/signature-parser.d.ts.map +1 -0
  40. package/dist/mcp/index.js +1276 -94
  41. package/dist/server/index.js +136 -0
  42. package/package.json +1 -1
@@ -359,6 +359,142 @@ var MIGRATIONS = [
359
359
  deal_id TEXT REFERENCES deals(id) ON DELETE SET NULL,
360
360
  created_at TEXT NOT NULL DEFAULT (datetime('now'))
361
361
  );
362
+ `,
363
+ `
364
+ -- CON-00069: temporal field history
365
+ CREATE TABLE IF NOT EXISTS contact_field_history (
366
+ id TEXT PRIMARY KEY,
367
+ contact_id TEXT NOT NULL REFERENCES contacts(id) ON DELETE CASCADE,
368
+ field_name TEXT NOT NULL,
369
+ old_value TEXT,
370
+ new_value TEXT,
371
+ valid_from TEXT NOT NULL DEFAULT (datetime('now')),
372
+ source TEXT,
373
+ confidence TEXT NOT NULL DEFAULT 'imported' CHECK(confidence IN ('verified','inferred','imported','stale')),
374
+ created_by TEXT,
375
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
376
+ );
377
+
378
+ -- CON-00070: job history
379
+ CREATE TABLE IF NOT EXISTS job_history (
380
+ id TEXT PRIMARY KEY,
381
+ contact_id TEXT NOT NULL REFERENCES contacts(id) ON DELETE CASCADE,
382
+ company_id TEXT REFERENCES companies(id) ON DELETE SET NULL,
383
+ company_name TEXT NOT NULL,
384
+ title TEXT,
385
+ start_date TEXT,
386
+ end_date TEXT,
387
+ is_current INTEGER NOT NULL DEFAULT 0,
388
+ inferred INTEGER NOT NULL DEFAULT 0,
389
+ source TEXT,
390
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
391
+ );
392
+
393
+ -- CON-00071: learnings
394
+ CREATE TABLE IF NOT EXISTS contact_learnings (
395
+ id TEXT PRIMARY KEY,
396
+ contact_id TEXT NOT NULL REFERENCES contacts(id) ON DELETE CASCADE,
397
+ content TEXT NOT NULL,
398
+ type TEXT NOT NULL DEFAULT 'fact' CHECK(type IN ('preference','fact','inference','warning','signal')),
399
+ confidence INTEGER NOT NULL DEFAULT 70 CHECK(confidence BETWEEN 0 AND 100),
400
+ importance INTEGER NOT NULL DEFAULT 5 CHECK(importance BETWEEN 1 AND 10),
401
+ learned_by TEXT,
402
+ session_id TEXT,
403
+ visibility TEXT NOT NULL DEFAULT 'shared' CHECK(visibility IN ('private','shared','human')),
404
+ tags TEXT NOT NULL DEFAULT '[]',
405
+ confirmed_count INTEGER NOT NULL DEFAULT 0,
406
+ contradicts_id TEXT REFERENCES contact_learnings(id) ON DELETE SET NULL,
407
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
408
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
409
+ );
410
+
411
+ -- CON-00072: coordination
412
+ CREATE TABLE IF NOT EXISTS contact_locks (
413
+ id TEXT PRIMARY KEY,
414
+ contact_id TEXT NOT NULL UNIQUE REFERENCES contacts(id) ON DELETE CASCADE,
415
+ agent_name TEXT NOT NULL,
416
+ reason TEXT,
417
+ acquired_at TEXT NOT NULL DEFAULT (datetime('now')),
418
+ expires_at TEXT NOT NULL,
419
+ session_id TEXT
420
+ );
421
+ CREATE TABLE IF NOT EXISTS contact_agent_activity (
422
+ id TEXT PRIMARY KEY,
423
+ contact_id TEXT NOT NULL REFERENCES contacts(id) ON DELETE CASCADE,
424
+ agent_name TEXT NOT NULL,
425
+ action TEXT NOT NULL,
426
+ details TEXT,
427
+ session_id TEXT,
428
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
429
+ );
430
+
431
+ -- CON-00073: relationship graph extra columns
432
+ ALTER TABLE contact_relationships ADD COLUMN strength_score INTEGER NOT NULL DEFAULT 50;
433
+ ALTER TABLE contact_relationships ADD COLUMN interaction_count INTEGER NOT NULL DEFAULT 0;
434
+ ALTER TABLE contact_relationships ADD COLUMN last_interaction TEXT;
435
+ ALTER TABLE contact_relationships ADD COLUMN relationship_status TEXT NOT NULL DEFAULT 'stable' CHECK(relationship_status IN ('warming','stable','cooling','ghost'));
436
+
437
+ -- CON-00074: identity resolution
438
+ CREATE TABLE IF NOT EXISTS contact_identities (
439
+ id TEXT PRIMARY KEY,
440
+ contact_id TEXT NOT NULL REFERENCES contacts(id) ON DELETE CASCADE,
441
+ system TEXT NOT NULL,
442
+ external_id TEXT NOT NULL,
443
+ external_url TEXT,
444
+ confidence TEXT NOT NULL DEFAULT 'inferred' CHECK(confidence IN ('verified','inferred')),
445
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
446
+ UNIQUE(system, external_id)
447
+ );
448
+ ALTER TABLE contacts ADD COLUMN canonical_id TEXT;
449
+
450
+ -- CON-00076: relationship signals
451
+ ALTER TABLE contacts ADD COLUMN relationship_health INTEGER NOT NULL DEFAULT 50;
452
+ ALTER TABLE contacts ADD COLUMN avg_response_hours REAL;
453
+ ALTER TABLE contacts ADD COLUMN preferred_channel TEXT;
454
+ ALTER TABLE contacts ADD COLUMN engagement_status TEXT NOT NULL DEFAULT 'new' CHECK(engagement_status IN ('warming','stable','cooling','ghost','new'));
455
+ ALTER TABLE contacts ADD COLUMN interaction_count_30d INTEGER NOT NULL DEFAULT 0;
456
+ ALTER TABLE contacts ADD COLUMN interaction_count_90d INTEGER NOT NULL DEFAULT 0;
457
+
458
+ -- CON-00079: freshness scoring
459
+ CREATE TABLE IF NOT EXISTS contact_field_confidence (
460
+ id TEXT PRIMARY KEY,
461
+ contact_id TEXT NOT NULL REFERENCES contacts(id) ON DELETE CASCADE,
462
+ field_name TEXT NOT NULL,
463
+ confidence TEXT NOT NULL DEFAULT 'imported' CHECK(confidence IN ('verified','inferred','imported','stale')),
464
+ source TEXT,
465
+ last_verified_at TEXT NOT NULL DEFAULT (datetime('now')),
466
+ UNIQUE(contact_id, field_name)
467
+ );
468
+
469
+ -- CON-00080: org chart
470
+ CREATE TABLE IF NOT EXISTS org_chart_edges (
471
+ id TEXT PRIMARY KEY,
472
+ company_id TEXT NOT NULL REFERENCES companies(id) ON DELETE CASCADE,
473
+ contact_a_id TEXT NOT NULL REFERENCES contacts(id) ON DELETE CASCADE,
474
+ contact_b_id TEXT NOT NULL REFERENCES contacts(id) ON DELETE CASCADE,
475
+ edge_type TEXT NOT NULL CHECK(edge_type IN ('reports_to','manages','collaborates_with','peer')),
476
+ inferred INTEGER NOT NULL DEFAULT 0,
477
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
478
+ UNIQUE(company_id, contact_a_id, contact_b_id, edge_type)
479
+ );
480
+ CREATE TABLE IF NOT EXISTS deal_contact_roles (
481
+ id TEXT PRIMARY KEY,
482
+ deal_id TEXT NOT NULL REFERENCES deals(id) ON DELETE CASCADE,
483
+ contact_id TEXT NOT NULL REFERENCES contacts(id) ON DELETE CASCADE,
484
+ account_role TEXT NOT NULL CHECK(account_role IN ('economic_buyer','technical_evaluator','champion','blocker','influencer','user','sponsor','other')),
485
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
486
+ UNIQUE(deal_id, contact_id)
487
+ );
488
+
489
+ -- CON-00075: embeddings
490
+ CREATE TABLE IF NOT EXISTS contact_embeddings (
491
+ contact_id TEXT PRIMARY KEY REFERENCES contacts(id) ON DELETE CASCADE,
492
+ embedding TEXT NOT NULL,
493
+ model TEXT NOT NULL DEFAULT 'tfidf',
494
+ embedded_text TEXT,
495
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
496
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
497
+ );
362
498
  `
363
499
  ];
364
500
  var _db = null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hasna/contacts",
3
- "version": "0.4.3",
3
+ "version": "0.5.1",
4
4
  "description": "Contact management for AI coding agents — CLI + MCP + Web",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",