@vm0/cli 9.241.7 → 9.241.8

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 (97) hide show
  1. package/{agent-GCB6KIVM.js → agent-6UUIX4V4.js} +5 -5
  2. package/{banking-7ZHMYNY3.js → banking-Y2VCFUU2.js} +3 -3
  3. package/{chat-3MPFZX2H.js → chat-IID2LCLC.js} +4 -4
  4. package/{chunk-74K2DHPM.js → chunk-FTZNHRUM.js} +168 -169
  5. package/chunk-FTZNHRUM.js.map +1 -0
  6. package/{chunk-MG65P5SV.js → chunk-KU2UACPL.js} +4 -4
  7. package/{chunk-GGSXTOLM.js → chunk-MOI2MMEN.js} +4 -4
  8. package/{chunk-KNATFPLD.js → chunk-MZDPLIUI.js} +2 -1406
  9. package/chunk-MZDPLIUI.js.map +1 -0
  10. package/{chunk-AMJAGFT7.js → chunk-Q3H5XOMH.js} +9 -2
  11. package/chunk-Q3H5XOMH.js.map +1 -0
  12. package/{chunk-GND62LDP.js → chunk-SWDRWO47.js} +3 -3
  13. package/{chunk-KYKDHMRW.js → chunk-UVTB6INU.js} +2 -2
  14. package/{chunk-HCSK2SC7.js → chunk-WG56JB34.js} +2 -2
  15. package/{chunk-W6OJY7IX.js → chunk-Y4TMBA3E.js} +2 -2
  16. package/{chunk-ZLWWY6LH.js → chunk-YLT5JKL6.js} +2 -2
  17. package/{computer-use-BD7QLU5Z.js → computer-use-TY5MF5MH.js} +3 -3
  18. package/{connector-T2LTMZ6Q.js → connector-SS7NSUHH.js} +5 -5
  19. package/{credit-DX6NIRUV.js → credit-USLC4BEC.js} +4 -4
  20. package/{developer-support-SP56NSTB.js → developer-support-BPA5FZC4.js} +3 -3
  21. package/{doctor-32RBQ2VC.js → doctor-TS6LBO4R.js} +5 -5
  22. package/{generate-HFXHRZRA.js → generate-LQAFY4PO.js} +4 -4
  23. package/{github-QJ42LNUG.js → github-CYKFB7LW.js} +3 -3
  24. package/{goal-XYHZLRA2.js → goal-DF47W3T7.js} +3 -3
  25. package/{host-ULVM7XLM.js → host-EFRCVWVB.js} +3 -3
  26. package/index.js +12 -12
  27. package/{logs-NNNCGXPE.js → logs-6FXJSQME.js} +5 -5
  28. package/{mail-YONA4DQI.js → mail-Q5HAH677.js} +5 -5
  29. package/{maps-2W6ALLHT.js → maps-DNPBYQGN.js} +3 -3
  30. package/{model-ELBPMGL4.js → model-W2SPHYAW.js} +4 -4
  31. package/{model-provider-OH23775G.js → model-provider-F2HC6IGQ.js} +4 -4
  32. package/{org-LDTBCSFG.js → org-WSHW6IB2.js} +3 -3
  33. package/package.json +1 -1
  34. package/{phone-TDR66WMI.js → phone-MGK7HEJA.js} +3 -3
  35. package/{preference-GXRMWCAX.js → preference-TH4ZEPPG.js} +3 -3
  36. package/{resource-P6VHQL27.js → resource-XCCEH4Y7.js} +3 -3
  37. package/{scrape-O4S5ACVS.js → scrape-YVV4ORXW.js} +3 -3
  38. package/{search-KRBPB3Y2.js → search-TL2RF63C.js} +5 -5
  39. package/{secret-MLMXT45G.js → secret-WE53BZP2.js} +3 -3
  40. package/{slack-5WOEG5Y2.js → slack-VZXCFJ7S.js} +3 -3
  41. package/{teams-3UB7KFWZ.js → teams-6DJZTZUP.js} +3 -3
  42. package/{telegram-RDXCA44O.js → telegram-SKXE5EHO.js} +3 -3
  43. package/{variable-6WZ3JDYV.js → variable-GYYTINZ5.js} +3 -3
  44. package/{video-ZHQAWCKQ.js → video-Z77GJBQ6.js} +2 -2
  45. package/{web-GTXX2MVX.js → web-SIJFDN55.js} +3 -3
  46. package/{web-search-YUVFXIAT.js → web-search-KTRKHTFB.js} +3 -3
  47. package/{whoami-KGJ37MWP.js → whoami-LYGS4VRS.js} +5 -5
  48. package/{workflow-GQFEGC5L.js → workflow-WQGU3P3I.js} +3 -3
  49. package/zero.js +35 -52
  50. package/zero.js.map +1 -1
  51. package/chunk-74K2DHPM.js.map +0 -1
  52. package/chunk-AMJAGFT7.js.map +0 -1
  53. package/chunk-KNATFPLD.js.map +0 -1
  54. package/memory-XRUIDTIV.js +0 -638
  55. package/memory-XRUIDTIV.js.map +0 -1
  56. package/relationship-2MRA6LEY.js +0 -186
  57. package/relationship-2MRA6LEY.js.map +0 -1
  58. /package/{agent-GCB6KIVM.js.map → agent-6UUIX4V4.js.map} +0 -0
  59. /package/{banking-7ZHMYNY3.js.map → banking-Y2VCFUU2.js.map} +0 -0
  60. /package/{chat-3MPFZX2H.js.map → chat-IID2LCLC.js.map} +0 -0
  61. /package/{chunk-MG65P5SV.js.map → chunk-KU2UACPL.js.map} +0 -0
  62. /package/{chunk-GGSXTOLM.js.map → chunk-MOI2MMEN.js.map} +0 -0
  63. /package/{chunk-GND62LDP.js.map → chunk-SWDRWO47.js.map} +0 -0
  64. /package/{chunk-KYKDHMRW.js.map → chunk-UVTB6INU.js.map} +0 -0
  65. /package/{chunk-HCSK2SC7.js.map → chunk-WG56JB34.js.map} +0 -0
  66. /package/{chunk-W6OJY7IX.js.map → chunk-Y4TMBA3E.js.map} +0 -0
  67. /package/{chunk-ZLWWY6LH.js.map → chunk-YLT5JKL6.js.map} +0 -0
  68. /package/{computer-use-BD7QLU5Z.js.map → computer-use-TY5MF5MH.js.map} +0 -0
  69. /package/{connector-T2LTMZ6Q.js.map → connector-SS7NSUHH.js.map} +0 -0
  70. /package/{credit-DX6NIRUV.js.map → credit-USLC4BEC.js.map} +0 -0
  71. /package/{developer-support-SP56NSTB.js.map → developer-support-BPA5FZC4.js.map} +0 -0
  72. /package/{doctor-32RBQ2VC.js.map → doctor-TS6LBO4R.js.map} +0 -0
  73. /package/{generate-HFXHRZRA.js.map → generate-LQAFY4PO.js.map} +0 -0
  74. /package/{github-QJ42LNUG.js.map → github-CYKFB7LW.js.map} +0 -0
  75. /package/{goal-XYHZLRA2.js.map → goal-DF47W3T7.js.map} +0 -0
  76. /package/{host-ULVM7XLM.js.map → host-EFRCVWVB.js.map} +0 -0
  77. /package/{logs-NNNCGXPE.js.map → logs-6FXJSQME.js.map} +0 -0
  78. /package/{mail-YONA4DQI.js.map → mail-Q5HAH677.js.map} +0 -0
  79. /package/{maps-2W6ALLHT.js.map → maps-DNPBYQGN.js.map} +0 -0
  80. /package/{model-ELBPMGL4.js.map → model-W2SPHYAW.js.map} +0 -0
  81. /package/{model-provider-OH23775G.js.map → model-provider-F2HC6IGQ.js.map} +0 -0
  82. /package/{org-LDTBCSFG.js.map → org-WSHW6IB2.js.map} +0 -0
  83. /package/{phone-TDR66WMI.js.map → phone-MGK7HEJA.js.map} +0 -0
  84. /package/{preference-GXRMWCAX.js.map → preference-TH4ZEPPG.js.map} +0 -0
  85. /package/{resource-P6VHQL27.js.map → resource-XCCEH4Y7.js.map} +0 -0
  86. /package/{scrape-O4S5ACVS.js.map → scrape-YVV4ORXW.js.map} +0 -0
  87. /package/{search-KRBPB3Y2.js.map → search-TL2RF63C.js.map} +0 -0
  88. /package/{secret-MLMXT45G.js.map → secret-WE53BZP2.js.map} +0 -0
  89. /package/{slack-5WOEG5Y2.js.map → slack-VZXCFJ7S.js.map} +0 -0
  90. /package/{teams-3UB7KFWZ.js.map → teams-6DJZTZUP.js.map} +0 -0
  91. /package/{telegram-RDXCA44O.js.map → telegram-SKXE5EHO.js.map} +0 -0
  92. /package/{variable-6WZ3JDYV.js.map → variable-GYYTINZ5.js.map} +0 -0
  93. /package/{video-ZHQAWCKQ.js.map → video-Z77GJBQ6.js.map} +0 -0
  94. /package/{web-GTXX2MVX.js.map → web-SIJFDN55.js.map} +0 -0
  95. /package/{web-search-YUVFXIAT.js.map → web-search-KTRKHTFB.js.map} +0 -0
  96. /package/{whoami-KGJ37MWP.js.map → whoami-LYGS4VRS.js.map} +0 -0
  97. /package/{workflow-GQFEGC5L.js.map → workflow-WQGU3P3I.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/zero/memory/index.ts","../src/commands/zero/memory/context.ts","../src/commands/zero/memory/format.ts","../src/commands/zero/memory/lifecycle.ts","../src/commands/zero/memory/recall.ts","../src/commands/zero/memory/search.ts"],"sourcesContent":["import { Command } from \"commander\";\n\nimport { contextCommand } from \"./context\";\nimport {\n createCommand,\n documentsCommand,\n forgetCommand,\n forgetPromptCommand,\n forgottenCommand,\n historyCommand,\n listCommand,\n updateCommand,\n} from \"./lifecycle\";\nimport { recallCommand } from \"./recall\";\nimport { searchCommand } from \"./search\";\n\nexport const zeroMemoryCommand = new Command()\n .name(\"memory\")\n .description(\"Manage, recall, and search structured memory\")\n .addCommand(listCommand)\n .addCommand(createCommand)\n .addCommand(updateCommand)\n .addCommand(forgetCommand)\n .addCommand(forgetPromptCommand)\n .addCommand(historyCommand)\n .addCommand(documentsCommand)\n .addCommand(forgottenCommand)\n .addCommand(recallCommand)\n .addCommand(searchCommand)\n .addCommand(contextCommand);\n","import { Command } from \"commander\";\n\nimport { getZeroMemoryContext } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { printMemoryContext } from \"./format\";\n\ninterface ContextOptions {\n readonly json?: boolean;\n readonly limit?: string;\n readonly query?: string;\n}\n\nfunction parseLimit(value: string | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n const parsed = Number(value);\n return Number.isInteger(parsed) ? parsed : undefined;\n}\n\nexport const contextCommand = new Command()\n .name(\"context\")\n .description(\"Print prompt-ready structured memory context\")\n .option(\"--query <query>\", \"Optional query to focus the context\")\n .option(\"--limit <limit>\", \"Maximum memories to include\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .addHelpText(\n \"after\",\n `\nExamples:\n General context: zero memory context\n Focus context: zero memory context --query \"security review\"\n Print JSON: zero memory context --query \"Acme\" --json\n\nNotes:\n - Uses the authenticated user's active organization\n - Requires relationship memory to be enabled for the organization\n - This command is read-only`,\n )\n .action(\n withErrorHandler(async (options: ContextOptions) => {\n const response = await getZeroMemoryContext({\n q: options.query,\n limit: parseLimit(options.limit),\n });\n\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n\n printMemoryContext(response);\n }),\n );\n","import chalk from \"chalk\";\nimport type {\n MemoryContextResponse,\n MemoryDocumentListResponse,\n MemoryForgetResponse,\n MemoryHistoryResponse,\n MemoryLifecycleMemory,\n MemoryListResponse,\n MemoryRecallItem,\n MemorySearchResponse,\n MemorySearchResult,\n MemoryTombstoneListResponse,\n} from \"@vm0/api-contracts/contracts/zero-memory\";\n\nfunction formatDate(value: string | null): string {\n if (!value) {\n return \"unknown\";\n }\n return new Intl.DateTimeFormat(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n }).format(new Date(value));\n}\n\nfunction formatKind(kind: MemoryRecallItem[\"kind\"]): string {\n switch (kind) {\n case \"key_fact\": {\n return \"key fact\";\n }\n case \"open_loop\": {\n return \"open loop\";\n }\n case \"preference\": {\n return \"preference\";\n }\n }\n}\n\nfunction sourceSummary(memory: MemoryRecallItem): string {\n const source = memory.sources[0];\n if (!source) {\n return \"no source\";\n }\n return `${source.provider}:${source.externalId} (${formatDate(source.occurredAt)})`;\n}\n\nexport function printMemoryRecall(memories: readonly MemoryRecallItem[]): void {\n if (memories.length === 0) {\n console.log(\"No memories found\");\n console.log(\n chalk.dim(\n ' Try a broader query, for example: zero memory recall \"pricing\"',\n ),\n );\n return;\n }\n\n console.log(chalk.green(`✓ Recalled ${memories.length} memories`));\n for (const memory of memories) {\n const entity = memory.relationship.entity.displayName;\n console.log(`- ${memory.text}`);\n console.log(\n chalk.dim(\n ` ${formatKind(memory.kind)} · ${entity} · confidence ${memory.confidence} · ${sourceSummary(memory)}`,\n ),\n );\n }\n}\n\nexport function printMemoryContext(response: MemoryContextResponse): void {\n if (response.context.length === 0) {\n console.log(\"No memory context found\");\n console.log(\n chalk.dim(' Try: zero memory context --query \"customer follow up\"'),\n );\n return;\n }\n\n console.log(response.context);\n}\n\nfunction compactText(value: string): string {\n const normalized = value.replace(/\\s+/g, \" \").trim();\n if (normalized.length <= 180) {\n return normalized;\n }\n return `${normalized.slice(0, 177)}...`;\n}\n\nfunction formatScore(score: number): string {\n return score.toFixed(2);\n}\n\nfunction printMemorySearchResult(result: MemorySearchResult): void {\n if (result.kind === \"memory\") {\n const memory = result.memory;\n const entity = memory.relationship.entity.displayName;\n console.log(`- ${memory.text}`);\n console.log(\n chalk.dim(\n ` memory · ${formatKind(memory.kind)} · ${entity} · score ${formatScore(result.score)} · ${sourceSummary(memory)}`,\n ),\n );\n return;\n }\n\n const title = result.title ?? result.externalId;\n const citationUrl = result.citation.url ? ` · ${result.citation.url}` : \"\";\n console.log(`- ${title}`);\n console.log(chalk.dim(` document · ${compactText(result.text)}`));\n console.log(\n chalk.dim(\n ` ${result.provider}:${result.externalId} · ${result.contextSpace.displayName} · score ${formatScore(result.score)}${citationUrl}`,\n ),\n );\n}\n\nexport function printMemorySearch(response: MemorySearchResponse): void {\n if (response.results.length === 0) {\n console.log(\"No memory or document results found\");\n console.log(\n chalk.dim(' Try: zero memory search \"security review\" --mode hybrid'),\n );\n return;\n }\n\n console.log(\n chalk.green(\n `✓ Found ${response.results.length} ${response.mode} memory results`,\n ),\n );\n for (const result of response.results) {\n printMemorySearchResult(result);\n }\n}\n\nfunction contextSpaceSummary(memory: MemoryLifecycleMemory): string {\n return memory.contextSpace\n ? `${memory.contextSpace.type}:${memory.contextSpace.key}`\n : \"no context space\";\n}\n\nfunction printLifecycleMemory(memory: MemoryLifecycleMemory): void {\n console.log(`- ${memory.text}`);\n console.log(\n chalk.dim(\n ` ${memory.kind} · ${memory.status} · confidence ${memory.confidence} · ${contextSpaceSummary(memory)} · ${memory.id}`,\n ),\n );\n}\n\nexport function printMemoryList(response: MemoryListResponse): void {\n if (response.memories.length === 0) {\n console.log(\"No lifecycle memories found\");\n console.log(\n chalk.dim(' Create one: zero memory create \"Remember this fact\"'),\n );\n return;\n }\n console.log(chalk.green(`✓ Found ${response.memories.length} memories`));\n for (const memory of response.memories) {\n printLifecycleMemory(memory);\n }\n}\n\nexport function printMemoryCreated(memory: MemoryLifecycleMemory): void {\n console.log(chalk.green(\"✓ Memory created\"));\n printLifecycleMemory(memory);\n console.log(chalk.dim(` History: zero memory history memory ${memory.id}`));\n}\n\nexport function printMemoryUpdated(memory: MemoryLifecycleMemory): void {\n console.log(chalk.green(\"✓ Memory updated\"));\n printLifecycleMemory(memory);\n console.log(chalk.dim(` History: zero memory history memory ${memory.id}`));\n}\n\nexport function printMemoryForget(response: MemoryForgetResponse): void {\n if (response.forgotten.length === 0) {\n console.log(\"No matching active memory or document found\");\n console.log(chalk.dim(' Try: zero memory search \"the thing to forget\"'));\n return;\n }\n console.log(\n chalk.green(`✓ Recorded ${response.forgotten.length} tombstones`),\n );\n for (const tombstone of response.forgotten) {\n console.log(\n `- ${tombstone.targetKind}: ${tombstone.targetTitle ?? tombstone.targetText ?? tombstone.fingerprint}`,\n );\n console.log(chalk.dim(` ${tombstone.fingerprint} · ${tombstone.id}`));\n }\n}\n\nexport function printMemoryHistory(response: MemoryHistoryResponse): void {\n if (response.history.length === 0) {\n console.log(\"No memory history found\");\n return;\n }\n console.log(chalk.green(`✓ Found ${response.history.length} versions`));\n for (const version of response.history) {\n console.log(\n `- v${version.version} ${version.operation ?? \"change\"} ${formatDate(\n version.createdAt,\n )}`,\n );\n console.log(\n chalk.dim(\n ` ${version.targetKind}:${version.targetId} · ${version.contentHash}`,\n ),\n );\n if (version.text ?? version.title) {\n console.log(\n chalk.dim(` ${compactText(version.text ?? version.title ?? \"\")}`),\n );\n }\n }\n}\n\nexport function printMemoryDocuments(\n response: MemoryDocumentListResponse,\n): void {\n if (response.documents.length === 0) {\n console.log(\"No memory documents found\");\n console.log(chalk.dim(\" Backfill GitHub or Notion memory sources first\"));\n return;\n }\n console.log(chalk.green(`✓ Found ${response.documents.length} documents`));\n for (const document of response.documents) {\n console.log(`- ${document.title ?? document.externalId}`);\n console.log(\n chalk.dim(\n ` ${document.provider}:${document.externalId} · ${document.status} · ${document.chunkCount} chunks · ${document.id}`,\n ),\n );\n }\n}\n\nexport function printMemoryForgotten(\n response: MemoryTombstoneListResponse,\n): void {\n if (response.forgotten.length === 0) {\n console.log(\"No forgotten memory records found\");\n return;\n }\n console.log(chalk.green(`✓ Found ${response.forgotten.length} tombstones`));\n for (const tombstone of response.forgotten) {\n console.log(\n `- ${tombstone.targetKind}: ${tombstone.targetTitle ?? tombstone.targetText ?? tombstone.fingerprint}`,\n );\n console.log(\n chalk.dim(` ${tombstone.fingerprint} · ${tombstone.createdAt}`),\n );\n }\n}\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport type {\n MemoryKind,\n MemorySourceProvider,\n} from \"@vm0/api-contracts/contracts/zero-memory\";\n\nimport {\n createZeroMemory,\n forgetZeroMemory,\n forgetZeroMemoryByPrompt,\n listZeroMemory,\n listZeroMemoryDocuments,\n listZeroMemoryForgotten,\n listZeroMemoryHistory,\n updateZeroMemory,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport {\n printMemoryCreated,\n printMemoryDocuments,\n printMemoryForget,\n printMemoryForgotten,\n printMemoryHistory,\n printMemoryList,\n printMemoryUpdated,\n} from \"./format\";\n\ninterface JsonOption {\n readonly json?: boolean;\n}\n\ninterface LimitOption {\n readonly limit?: string;\n}\n\ninterface ListOptions extends JsonOption, LimitOption {\n readonly status?: string;\n readonly kind?: string;\n}\n\ninterface CreateOptions extends JsonOption {\n readonly confidence?: string;\n readonly contextKey?: string;\n readonly contextName?: string;\n readonly contextType?: string;\n readonly entity?: string;\n readonly kind?: string;\n}\n\ninterface UpdateOptions extends JsonOption {\n readonly confidence?: string;\n readonly entity?: string;\n readonly kind?: string;\n readonly text?: string;\n}\n\ninterface ForgetOptions extends JsonOption {\n readonly reason?: string;\n readonly yes?: boolean;\n}\n\ninterface ForgetPromptOptions extends JsonOption, LimitOption {\n readonly provider?: string;\n readonly reason?: string;\n readonly target?: string;\n readonly yes?: boolean;\n}\n\ninterface DocumentsOptions extends JsonOption, LimitOption {\n readonly provider?: string;\n readonly status?: string;\n}\n\nconst MEMORY_KINDS = [\n \"key_fact\",\n \"preference\",\n \"open_loop\",\n \"role\",\n \"project\",\n \"communication_style\",\n \"recent_context\",\n] as const;\n\nconst CONTEXT_TYPES = [\n \"user\",\n \"org\",\n \"project\",\n \"repo\",\n \"customer\",\n \"agent\",\n \"workflow\",\n] as const;\n\nconst PROVIDERS = [\"gmail\", \"slack\", \"github\", \"notion\"] as const;\n\nfunction parseLimit(value: string | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n const parsed = Number(value);\n return Number.isInteger(parsed) ? parsed : undefined;\n}\n\nfunction parseConfidence(value: string | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n const parsed = Number(value);\n return Number.isInteger(parsed) ? parsed : undefined;\n}\n\nfunction parseMemoryKind(value: string | undefined): MemoryKind | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (\n MEMORY_KINDS.some((kind) => {\n return kind === value;\n })\n ) {\n return value as MemoryKind;\n }\n console.error(chalk.red(\"✗ Unsupported memory kind\"));\n console.error(chalk.dim(` Use one of: ${MEMORY_KINDS.join(\", \")}`));\n process.exit(1);\n}\n\nfunction parseProvider(\n value: string | undefined,\n): MemorySourceProvider | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (\n PROVIDERS.some((provider) => {\n return provider === value;\n })\n ) {\n return value as MemorySourceProvider;\n }\n console.error(chalk.red(\"✗ Unsupported memory provider\"));\n console.error(chalk.dim(` Use one of: ${PROVIDERS.join(\", \")}`));\n process.exit(1);\n}\n\nfunction parseContextSpace(options: CreateOptions) {\n if (!options.contextKey && !options.contextType && !options.contextName) {\n return undefined;\n }\n const type = options.contextType ?? \"user\";\n if (\n !CONTEXT_TYPES.some((contextType) => {\n return contextType === type;\n })\n ) {\n console.error(chalk.red(\"✗ Unsupported context space type\"));\n console.error(chalk.dim(` Use one of: ${CONTEXT_TYPES.join(\", \")}`));\n process.exit(1);\n }\n if (!options.contextKey || !options.contextName) {\n console.error(\n chalk.red(\"✗ --context-key and --context-name are required together\"),\n );\n console.error(\n chalk.dim(\n ' Example: zero memory create \"Fact\" --context-type repo --context-key github:vm0-ai/vm0 --context-name vm0-ai/vm0',\n ),\n );\n process.exit(1);\n }\n return {\n type: type as (typeof CONTEXT_TYPES)[number],\n key: options.contextKey,\n displayName: options.contextName,\n };\n}\n\nfunction requireYes(options: ForgetOptions | ForgetPromptOptions): void {\n if (options.yes) {\n return;\n }\n console.error(chalk.red(\"✗ --yes is required for forget operations\"));\n console.error(\n chalk.dim(\" This records tombstones and removes active search results\"),\n );\n process.exit(1);\n}\n\nexport const listCommand = new Command()\n .name(\"list\")\n .description(\"List lifecycle-aware structured memories\")\n .option(\"--status <status>\", \"Filter by active or archived\", \"active\")\n .option(\"--kind <kind>\", \"Filter by memory kind\")\n .option(\"--limit <limit>\", \"Maximum rows to return\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(async (options: ListOptions) => {\n const response = await listZeroMemory({\n status: options.status === \"archived\" ? \"archived\" : \"active\",\n kind: parseMemoryKind(options.kind),\n limit: parseLimit(options.limit),\n });\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n printMemoryList(response);\n }),\n );\n\nexport const createCommand = new Command()\n .name(\"create\")\n .description(\"Create a direct structured memory\")\n .argument(\"<text>\", \"Memory text\")\n .option(\"--kind <kind>\", \"Memory kind\", \"key_fact\")\n .option(\"--confidence <confidence>\", \"Confidence 0-100\")\n .option(\"--entity <name>\", \"Entity display name\")\n .option(\"--context-type <type>\", \"Context space type\")\n .option(\"--context-key <key>\", \"Context space key\")\n .option(\"--context-name <name>\", \"Context space display name\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(async (text: string, options: CreateOptions) => {\n const memory = await createZeroMemory({\n text,\n kind: parseMemoryKind(options.kind) ?? \"key_fact\",\n confidence: parseConfidence(options.confidence) ?? 90,\n contextSpace: parseContextSpace(options),\n entityDisplayName: options.entity,\n });\n if (options.json) {\n console.log(JSON.stringify({ memory }));\n return;\n }\n printMemoryCreated(memory);\n }),\n );\n\nexport const updateCommand = new Command()\n .name(\"update\")\n .description(\"Update a structured memory and create a new version\")\n .argument(\"<memory-id>\", \"Memory ID\")\n .option(\"--text <text>\", \"Replacement memory text\")\n .option(\"--kind <kind>\", \"Replacement memory kind\")\n .option(\"--confidence <confidence>\", \"Confidence 0-100\")\n .option(\"--entity <name>\", \"Entity display name\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(async (memoryId: string, options: UpdateOptions) => {\n const memory = await updateZeroMemory(memoryId, {\n text: options.text,\n kind: parseMemoryKind(options.kind),\n confidence: parseConfidence(options.confidence),\n entityDisplayName: options.entity,\n });\n if (options.json) {\n console.log(JSON.stringify({ memory }));\n return;\n }\n printMemoryUpdated(memory);\n }),\n );\n\nexport const forgetCommand = new Command()\n .name(\"forget\")\n .description(\"Forget one structured memory by ID\")\n .argument(\"<memory-id>\", \"Memory ID\")\n .option(\"--reason <reason>\", \"Reason to record in the tombstone\")\n .option(\"--yes\", \"Confirm the forget operation\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(async (memoryId: string, options: ForgetOptions) => {\n requireYes(options);\n const response = await forgetZeroMemory(memoryId, {\n reason: options.reason,\n });\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n printMemoryForget(response);\n }),\n );\n\nexport const forgetPromptCommand = new Command()\n .name(\"forget-prompt\")\n .description(\"Forget memories or documents matching a prompt\")\n .argument(\"<prompt>\", \"Forget prompt\")\n .option(\"--target <target>\", \"all, memories, or documents\", \"all\")\n .option(\"--provider <provider>\", \"Filter documents by provider\")\n .option(\"--limit <limit>\", \"Maximum matches to forget\")\n .option(\"--reason <reason>\", \"Reason to record in tombstones\")\n .option(\"--yes\", \"Confirm the forget operation\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(async (prompt: string, options: ForgetPromptOptions) => {\n requireYes(options);\n const targetKind =\n options.target === \"memories\" || options.target === \"documents\"\n ? options.target\n : \"all\";\n const response = await forgetZeroMemoryByPrompt({\n prompt,\n targetKind,\n provider: parseProvider(options.provider),\n limit: parseLimit(options.limit) ?? 5,\n reason: options.reason,\n });\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n printMemoryForget(response);\n }),\n );\n\nexport const historyCommand = new Command()\n .name(\"history\")\n .description(\"List memory, document, or profile version history\")\n .argument(\"<target-kind>\", \"memory, document, or profile\")\n .argument(\"<target-id>\", \"Target ID\")\n .option(\"--limit <limit>\", \"Maximum versions to return\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(\n async (\n targetKind: string,\n targetId: string,\n options: JsonOption & LimitOption,\n ) => {\n if (\n targetKind !== \"memory\" &&\n targetKind !== \"document\" &&\n targetKind !== \"profile\"\n ) {\n console.error(chalk.red(\"✗ Unsupported history target\"));\n console.error(chalk.dim(\" Use one of: memory, document, profile\"));\n process.exit(1);\n }\n const response = await listZeroMemoryHistory({\n targetKind,\n targetId,\n limit: parseLimit(options.limit),\n });\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n printMemoryHistory(response);\n },\n ),\n );\n\nexport const documentsCommand = new Command()\n .name(\"documents\")\n .description(\"List indexed memory documents\")\n .option(\"--status <status>\", \"active, archived, or deleted\", \"active\")\n .option(\"--provider <provider>\", \"Filter by provider\")\n .option(\"--limit <limit>\", \"Maximum rows to return\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(async (options: DocumentsOptions) => {\n const status =\n options.status === \"archived\" || options.status === \"deleted\"\n ? options.status\n : \"active\";\n const response = await listZeroMemoryDocuments({\n status,\n provider: parseProvider(options.provider),\n limit: parseLimit(options.limit),\n });\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n printMemoryDocuments(response);\n }),\n );\n\nexport const forgottenCommand = new Command()\n .name(\"forgotten\")\n .description(\"List forgotten memory tombstones\")\n .option(\"--limit <limit>\", \"Maximum rows to return\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(\n withErrorHandler(async (options: JsonOption & LimitOption) => {\n const response = await listZeroMemoryForgotten({\n limit: parseLimit(options.limit),\n });\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n printMemoryForgotten(response);\n }),\n );\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport type { MemoryRecallItemKind } from \"@vm0/api-contracts/contracts/zero-memory\";\n\nimport { recallZeroMemory } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { printMemoryRecall } from \"./format\";\n\ninterface RecallOptions {\n readonly json?: boolean;\n readonly kind?: string;\n readonly limit?: string;\n}\n\nconst MEMORY_KINDS = [\"key_fact\", \"preference\", \"open_loop\"] as const;\n\nfunction parseLimit(value: string | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n const parsed = Number(value);\n return Number.isInteger(parsed) ? parsed : undefined;\n}\n\nfunction parseKind(\n value: string | undefined,\n): MemoryRecallItemKind | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (\n MEMORY_KINDS.some((kind) => {\n return kind === value;\n })\n ) {\n return value as MemoryRecallItemKind;\n }\n console.error(chalk.red(\"✗ Unsupported memory kind\"));\n console.error(chalk.dim(\" Use one of: key_fact, preference, open_loop\"));\n process.exit(1);\n}\n\nexport const recallCommand = new Command()\n .name(\"recall\")\n .description(\"Recall structured memory by query\")\n .argument(\"<query>\", \"Recall query\")\n .option(\"--kind <kind>\", \"Filter by key_fact, preference, or open_loop\")\n .option(\"--limit <limit>\", \"Maximum memories to return\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Recall memory: zero memory recall \"security review\"\n Filter kind: zero memory recall \"pricing\" --kind open_loop\n Print JSON: zero memory recall \"Acme\" --json\n\nNotes:\n - Uses the authenticated user's active organization\n - Requires relationship memory to be enabled for the organization\n - This command is read-only`,\n )\n .action(\n withErrorHandler(async (query: string, options: RecallOptions) => {\n const response = await recallZeroMemory({\n q: query,\n kind: parseKind(options.kind),\n limit: parseLimit(options.limit),\n });\n\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n\n printMemoryRecall(response.memories);\n }),\n );\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport type {\n MemorySearchMode,\n MemorySourceProvider,\n} from \"@vm0/api-contracts/contracts/zero-memory\";\n\nimport { searchZeroMemory } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { printMemorySearch } from \"./format\";\n\ninterface SearchOptions {\n readonly json?: boolean;\n readonly limit?: string;\n readonly mode?: string;\n readonly provider?: string;\n}\n\nconst MEMORY_SEARCH_MODES = [\"hybrid\", \"memories\", \"documents\"] as const;\nconst MEMORY_PROVIDERS = [\"gmail\", \"slack\", \"github\", \"notion\"] as const;\n\nfunction parseLimit(value: string | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n const parsed = Number(value);\n return Number.isInteger(parsed) ? parsed : undefined;\n}\n\nfunction parseMode(value: string | undefined): MemorySearchMode | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (\n MEMORY_SEARCH_MODES.some((mode) => {\n return mode === value;\n })\n ) {\n return value as MemorySearchMode;\n }\n console.error(chalk.red(\"✗ Unsupported memory search mode\"));\n console.error(chalk.dim(\" Use one of: hybrid, memories, documents\"));\n process.exit(1);\n}\n\nfunction parseProvider(\n value: string | undefined,\n): MemorySourceProvider | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (\n MEMORY_PROVIDERS.some((provider) => {\n return provider === value;\n })\n ) {\n return value as MemorySourceProvider;\n }\n console.error(chalk.red(\"✗ Unsupported memory provider\"));\n console.error(chalk.dim(\" Use one of: gmail, slack, github, notion\"));\n process.exit(1);\n}\n\nexport const searchCommand = new Command()\n .name(\"search\")\n .description(\"Search structured memory and document chunks\")\n .argument(\"<query>\", \"Search query\")\n .option(\n \"--mode <mode>\",\n \"Search mode: hybrid, memories, or documents\",\n \"hybrid\",\n )\n .option(\"--provider <provider>\", \"Filter documents by source provider\")\n .option(\"--limit <limit>\", \"Maximum results to return\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Hybrid search: zero memory search \"security review\"\n Documents only: zero memory search \"retention policy\" --mode documents\n GitHub documents: zero memory search \"release plan\" --provider github\n Print JSON: zero memory search \"Acme\" --json\n\nNotes:\n - Uses the authenticated user's active organization\n - Requires relationship memory to be enabled for the organization\n - This command is read-only`,\n )\n .action(\n withErrorHandler(async (query: string, options: SearchOptions) => {\n const response = await searchZeroMemory({\n q: query,\n mode: parseMode(options.mode),\n provider: parseProvider(options.provider),\n limit: parseLimit(options.limit),\n });\n\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n\n printMemorySearch(response);\n }),\n );\n"],"mappings":"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","names":["parseLimit","MEMORY_KINDS","parseLimit","parseLimit","parseProvider"]}
@@ -1,186 +0,0 @@
1
- #!/usr/bin/env node
2
- import { createRequire as __createRequire } from "node:module";
3
- const require = __createRequire(import.meta.url);
4
- import {
5
- resolveZeroRelationship,
6
- searchZeroRelationships
7
- } from "./chunk-KNATFPLD.js";
8
- import "./chunk-LTDQISD7.js";
9
- import {
10
- source_default,
11
- withErrorHandler
12
- } from "./chunk-AMJAGFT7.js";
13
- import "./chunk-LRHXR7JT.js";
14
- import {
15
- Command
16
- } from "./chunk-B3W2RUBP.js";
17
- import {
18
- init_esm_shims
19
- } from "./chunk-DIRAZ3YX.js";
20
-
21
- // src/commands/zero/relationship/index.ts
22
- init_esm_shims();
23
-
24
- // src/commands/zero/relationship/get.ts
25
- init_esm_shims();
26
-
27
- // src/commands/zero/relationship/format.ts
28
- init_esm_shims();
29
- function formatDate(value) {
30
- if (!value) {
31
- return "never";
32
- }
33
- return new Intl.DateTimeFormat(void 0, {
34
- year: "numeric",
35
- month: "short",
36
- day: "numeric"
37
- }).format(new Date(value));
38
- }
39
- function itemsOfKind(relationship, kind) {
40
- return relationship.items.filter((item) => {
41
- return item.kind === kind;
42
- });
43
- }
44
- function printItems(title, items) {
45
- if (items.length === 0) {
46
- return;
47
- }
48
- console.log("");
49
- console.log(source_default.bold(title));
50
- for (const item of items) {
51
- const source = item.sources[0];
52
- const sourceText = source ? source_default.dim(` (${source.provider}, ${formatDate(source.occurredAt)})`) : "";
53
- console.log(` - ${item.text}${sourceText}`);
54
- }
55
- }
56
- function printRelationship(relationship) {
57
- console.log(source_default.green("\u2713 Relationship loaded"));
58
- console.log(source_default.bold(relationship.entity.displayName));
59
- if (relationship.entity.primaryEmail) {
60
- console.log(source_default.dim(` Email: ${relationship.entity.primaryEmail}`));
61
- }
62
- if (relationship.entity.domain) {
63
- console.log(source_default.dim(` Domain: ${relationship.entity.domain}`));
64
- }
65
- console.log(source_default.dim(` Type: ${relationship.relationshipType}`));
66
- console.log(source_default.dim(` Status: ${relationship.status}`));
67
- console.log(
68
- source_default.dim(` Last touch: ${formatDate(relationship.lastInteractionAt)}`)
69
- );
70
- if (relationship.summary) {
71
- console.log("");
72
- console.log(relationship.summary);
73
- }
74
- printItems("Key facts", itemsOfKind(relationship, "key_fact"));
75
- printItems("Preferences", itemsOfKind(relationship, "preference"));
76
- printItems("Open loops", itemsOfKind(relationship, "open_loop"));
77
- }
78
- function printRelationshipSearch(relationships) {
79
- if (relationships.length === 0) {
80
- console.log("No relationships found");
81
- return;
82
- }
83
- console.log(source_default.green(`\u2713 Found ${relationships.length} relationships`));
84
- for (const relationship of relationships) {
85
- const primary = relationship.entity.primaryEmail ?? relationship.entity.domain ?? "";
86
- const suffix = primary ? source_default.dim(` - ${primary}`) : "";
87
- console.log(
88
- `${relationship.entity.displayName}${suffix} ${source_default.dim(
89
- `(${relationship.relationshipType}, ${formatDate(
90
- relationship.lastInteractionAt
91
- )})`
92
- )}`
93
- );
94
- if (relationship.summary) {
95
- console.log(source_default.dim(` ${relationship.summary}`));
96
- }
97
- }
98
- }
99
-
100
- // src/commands/zero/relationship/get.ts
101
- function selectedLookupCount(options) {
102
- return [options.id, options.email, options.domain].filter((value) => {
103
- return Boolean(value);
104
- }).length;
105
- }
106
- function printUsageError(message, hint) {
107
- console.error(source_default.red(`\u2717 ${message}`));
108
- console.error(source_default.dim(` ${hint}`));
109
- process.exit(1);
110
- }
111
- var getCommand = new Command().name("get").description("Resolve a relationship by id, email, or domain").option("--id <id>", "Resolve by relationship id").option("--email <email>", "Resolve by primary email").option("--domain <domain>", "Resolve by domain").option("--json", "Print machine-readable JSON").addHelpText(
112
- "after",
113
- `
114
- Examples:
115
- Resolve by email: zero relationship get --email alice@acme.com
116
- Resolve by domain: zero relationship get --domain acme.com
117
- Resolve by id: zero relationship get --id <relationship-id>
118
- Print JSON: zero relationship get --email alice@acme.com --json
119
-
120
- Notes:
121
- - Uses the authenticated user's active organization
122
- - Does not support cross-organization lookup
123
- - This command is read-only`
124
- ).action(
125
- withErrorHandler(async (options) => {
126
- if (selectedLookupCount(options) !== 1) {
127
- printUsageError(
128
- "Choose exactly one lookup",
129
- "Pass one of --id, --email, or --domain."
130
- );
131
- }
132
- const response = await resolveZeroRelationship(
133
- options.id ? { id: options.id } : options.email ? { email: options.email } : { domain: options.domain }
134
- );
135
- if (options.json) {
136
- console.log(JSON.stringify(response));
137
- return;
138
- }
139
- if (!response.relationship) {
140
- console.log("No relationship found");
141
- return;
142
- }
143
- printRelationship(response.relationship);
144
- })
145
- );
146
-
147
- // src/commands/zero/relationship/search.ts
148
- init_esm_shims();
149
- function parseLimit(value) {
150
- if (value === void 0) {
151
- return void 0;
152
- }
153
- const parsed = Number(value);
154
- return Number.isInteger(parsed) ? parsed : void 0;
155
- }
156
- var searchCommand = new Command().name("search").description("Search relationship memory").argument("<query>", "Search query").option("--limit <limit>", "Maximum relationships to return").option("--json", "Print machine-readable JSON").addHelpText(
157
- "after",
158
- `
159
- Examples:
160
- Search relationships: zero relationship search "acme pricing"
161
- Print JSON: zero relationship search "security review" --json
162
-
163
- Notes:
164
- - Uses the authenticated user's active organization
165
- - Does not support cross-organization search
166
- - This command is read-only`
167
- ).action(
168
- withErrorHandler(async (query, options) => {
169
- const response = await searchZeroRelationships({
170
- q: query,
171
- limit: parseLimit(options.limit)
172
- });
173
- if (options.json) {
174
- console.log(JSON.stringify(response));
175
- return;
176
- }
177
- printRelationshipSearch(response.relationships);
178
- })
179
- );
180
-
181
- // src/commands/zero/relationship/index.ts
182
- var zeroRelationshipCommand = new Command().name("relationship").description("Query relationship memory").addCommand(getCommand).addCommand(searchCommand);
183
- export {
184
- zeroRelationshipCommand
185
- };
186
- //# sourceMappingURL=relationship-2MRA6LEY.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/zero/relationship/index.ts","../src/commands/zero/relationship/get.ts","../src/commands/zero/relationship/format.ts","../src/commands/zero/relationship/search.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { getCommand } from \"./get\";\nimport { searchCommand } from \"./search\";\n\nexport const zeroRelationshipCommand = new Command()\n .name(\"relationship\")\n .description(\"Query relationship memory\")\n .addCommand(getCommand)\n .addCommand(searchCommand);\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\n\nimport { resolveZeroRelationship } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { printRelationship } from \"./format\";\n\ninterface GetOptions {\n readonly id?: string;\n readonly email?: string;\n readonly domain?: string;\n readonly json?: boolean;\n}\n\nfunction selectedLookupCount(options: GetOptions): number {\n return [options.id, options.email, options.domain].filter((value) => {\n return Boolean(value);\n }).length;\n}\n\nfunction printUsageError(message: string, hint: string): never {\n console.error(chalk.red(`✗ ${message}`));\n console.error(chalk.dim(` ${hint}`));\n process.exit(1);\n}\n\nexport const getCommand = new Command()\n .name(\"get\")\n .description(\"Resolve a relationship by id, email, or domain\")\n .option(\"--id <id>\", \"Resolve by relationship id\")\n .option(\"--email <email>\", \"Resolve by primary email\")\n .option(\"--domain <domain>\", \"Resolve by domain\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Resolve by email: zero relationship get --email alice@acme.com\n Resolve by domain: zero relationship get --domain acme.com\n Resolve by id: zero relationship get --id <relationship-id>\n Print JSON: zero relationship get --email alice@acme.com --json\n\nNotes:\n - Uses the authenticated user's active organization\n - Does not support cross-organization lookup\n - This command is read-only`,\n )\n .action(\n withErrorHandler(async (options: GetOptions) => {\n if (selectedLookupCount(options) !== 1) {\n printUsageError(\n \"Choose exactly one lookup\",\n \"Pass one of --id, --email, or --domain.\",\n );\n }\n\n const response = await resolveZeroRelationship(\n options.id\n ? { id: options.id }\n : options.email\n ? { email: options.email }\n : { domain: options.domain! },\n );\n\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n\n if (!response.relationship) {\n console.log(\"No relationship found\");\n return;\n }\n\n printRelationship(response.relationship);\n }),\n );\n","import chalk from \"chalk\";\nimport type { RelationshipRecord } from \"@vm0/api-contracts/contracts/zero-relationships\";\n\nfunction formatDate(value: string | null): string {\n if (!value) {\n return \"never\";\n }\n return new Intl.DateTimeFormat(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n }).format(new Date(value));\n}\n\nfunction itemsOfKind(\n relationship: RelationshipRecord,\n kind: RelationshipRecord[\"items\"][number][\"kind\"],\n) {\n return relationship.items.filter((item) => {\n return item.kind === kind;\n });\n}\n\nfunction printItems(\n title: string,\n items: readonly RelationshipRecord[\"items\"][number][],\n): void {\n if (items.length === 0) {\n return;\n }\n console.log(\"\");\n console.log(chalk.bold(title));\n for (const item of items) {\n const source = item.sources[0];\n const sourceText = source\n ? chalk.dim(` (${source.provider}, ${formatDate(source.occurredAt)})`)\n : \"\";\n console.log(` - ${item.text}${sourceText}`);\n }\n}\n\nexport function printRelationship(relationship: RelationshipRecord): void {\n console.log(chalk.green(\"✓ Relationship loaded\"));\n console.log(chalk.bold(relationship.entity.displayName));\n if (relationship.entity.primaryEmail) {\n console.log(chalk.dim(` Email: ${relationship.entity.primaryEmail}`));\n }\n if (relationship.entity.domain) {\n console.log(chalk.dim(` Domain: ${relationship.entity.domain}`));\n }\n console.log(chalk.dim(` Type: ${relationship.relationshipType}`));\n console.log(chalk.dim(` Status: ${relationship.status}`));\n console.log(\n chalk.dim(` Last touch: ${formatDate(relationship.lastInteractionAt)}`),\n );\n\n if (relationship.summary) {\n console.log(\"\");\n console.log(relationship.summary);\n }\n\n printItems(\"Key facts\", itemsOfKind(relationship, \"key_fact\"));\n printItems(\"Preferences\", itemsOfKind(relationship, \"preference\"));\n printItems(\"Open loops\", itemsOfKind(relationship, \"open_loop\"));\n}\n\nexport function printRelationshipSearch(\n relationships: readonly RelationshipRecord[],\n): void {\n if (relationships.length === 0) {\n console.log(\"No relationships found\");\n return;\n }\n\n console.log(chalk.green(`✓ Found ${relationships.length} relationships`));\n for (const relationship of relationships) {\n const primary =\n relationship.entity.primaryEmail ?? relationship.entity.domain ?? \"\";\n const suffix = primary ? chalk.dim(` - ${primary}`) : \"\";\n console.log(\n `${relationship.entity.displayName}${suffix} ${chalk.dim(\n `(${relationship.relationshipType}, ${formatDate(\n relationship.lastInteractionAt,\n )})`,\n )}`,\n );\n if (relationship.summary) {\n console.log(chalk.dim(` ${relationship.summary}`));\n }\n }\n}\n","import { Command } from \"commander\";\n\nimport { searchZeroRelationships } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { printRelationshipSearch } from \"./format\";\n\ninterface SearchOptions {\n readonly json?: boolean;\n readonly limit?: string;\n}\n\nfunction parseLimit(value: string | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n const parsed = Number(value);\n return Number.isInteger(parsed) ? parsed : undefined;\n}\n\nexport const searchCommand = new Command()\n .name(\"search\")\n .description(\"Search relationship memory\")\n .argument(\"<query>\", \"Search query\")\n .option(\"--limit <limit>\", \"Maximum relationships to return\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Search relationships: zero relationship search \"acme pricing\"\n Print JSON: zero relationship search \"security review\" --json\n\nNotes:\n - Uses the authenticated user's active organization\n - Does not support cross-organization search\n - This command is read-only`,\n )\n .action(\n withErrorHandler(async (query: string, options: SearchOptions) => {\n const response = await searchZeroRelationships({\n q: query,\n limit: parseLimit(options.limit),\n });\n\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n\n printRelationshipSearch(response.relationships);\n }),\n );\n"],"mappings":"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","names":[]}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes