{"id":"@lssm-tech/integration.opa-meeting-context-bridge","slug":"integration.opa-meeting-context-bridge","name":"@lssm-tech/integration.opa-meeting-context-bridge","version":"2.0.5","path":"packages/integrations/opa-meeting-context-bridge","manifestPath":"packages/integrations/opa-meeting-context-bridge/package.json","manifestBlobSha":"0225129c670bd76b8244cb0549bf76e1557ef74b","layer":"integrations","physicalArea":null,"primaryArea":"company-and-work","classification":{"privateDeclared":null,"catalogFamily":"integrations","catalogKind":"integration","catalogStatus":"active","adoptionMode":"adoptable","stability":"experimental"},"description":"Governed bridges from existing knowledge providers to OPA MeetingContextSourcePort.","descriptionOrigin":"package.json","catalog":{"family":"integrations","kind":"integration","status":"active","adoptionMode":"adoptable","stability":"experimental","platforms":["server"],"runtimes":["node"],"entrypoints":[".","./crm","./documents","./google-drive-rest","./governance","./hubspot-contact-directory","./hubspot-crm-rest","./notion-rest","./notion-slack","./slack-rest","./web"],"documentation":[{"title":"Integration Opa Meeting Context Bridge documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Fintegration.opa-meeting-context-bridge","kind":"readme"}],"examples":[],"replacements":[],"capabilities":[{"id":"package.lssm.tech.integration.opa.meeting.context.bridge","title":"Integration Opa Meeting Context Bridge","description":"Governed server-side bridges from authorized knowledge providers into OPA meeting context sources with scope, bounds, consent, provenance, and citation enforcement.","status":"active","useCases":["Inject bounded, cited Notion, Slack, email, document, CRM, and governed-web context into meeting preparation"],"aliases":["integration","opa","meeting","context","bridge"],"pythonEquivalents":[],"canonicalImports":[{"from":"@lssm-tech/integration.opa-meeting-context-bridge","symbols":[]},{"from":"@lssm-tech/integration.opa-meeting-context-bridge/crm","symbols":[]},{"from":"@lssm-tech/integration.opa-meeting-context-bridge/documents","symbols":[]},{"from":"@lssm-tech/integration.opa-meeting-context-bridge/google-drive-rest","symbols":[]},{"from":"@lssm-tech/integration.opa-meeting-context-bridge/governance","symbols":[]},{"from":"@lssm-tech/integration.opa-meeting-context-bridge/hubspot-contact-directory","symbols":[]},{"from":"@lssm-tech/integration.opa-meeting-context-bridge/hubspot-crm-rest","symbols":[]},{"from":"@lssm-tech/integration.opa-meeting-context-bridge/notion-rest","symbols":[]},{"from":"@lssm-tech/integration.opa-meeting-context-bridge/notion-slack","symbols":[]},{"from":"@lssm-tech/integration.opa-meeting-context-bridge/slack-rest","symbols":[]},{"from":"@lssm-tech/integration.opa-meeting-context-bridge/web","symbols":[]}],"constraints":{"platforms":["server"],"runtimes":["node"],"avoidWhen":["Authorized provider clients, meeting scope, content bounds, or required consent cannot be supplied."],"requires":["TypeScript","Authorized provider adapters"]},"alternatives":[],"relationships":[],"resolutionPriority":50}]},"canonicalImports":[{"capabilityId":"package.lssm.tech.integration.opa.meeting.context.bridge","from":"@lssm-tech/integration.opa-meeting-context-bridge","symbols":[]},{"capabilityId":"package.lssm.tech.integration.opa.meeting.context.bridge","from":"@lssm-tech/integration.opa-meeting-context-bridge/crm","symbols":[]},{"capabilityId":"package.lssm.tech.integration.opa.meeting.context.bridge","from":"@lssm-tech/integration.opa-meeting-context-bridge/documents","symbols":[]},{"capabilityId":"package.lssm.tech.integration.opa.meeting.context.bridge","from":"@lssm-tech/integration.opa-meeting-context-bridge/google-drive-rest","symbols":[]},{"capabilityId":"package.lssm.tech.integration.opa.meeting.context.bridge","from":"@lssm-tech/integration.opa-meeting-context-bridge/governance","symbols":[]},{"capabilityId":"package.lssm.tech.integration.opa.meeting.context.bridge","from":"@lssm-tech/integration.opa-meeting-context-bridge/hubspot-contact-directory","symbols":[]},{"capabilityId":"package.lssm.tech.integration.opa.meeting.context.bridge","from":"@lssm-tech/integration.opa-meeting-context-bridge/hubspot-crm-rest","symbols":[]},{"capabilityId":"package.lssm.tech.integration.opa.meeting.context.bridge","from":"@lssm-tech/integration.opa-meeting-context-bridge/notion-rest","symbols":[]},{"capabilityId":"package.lssm.tech.integration.opa.meeting.context.bridge","from":"@lssm-tech/integration.opa-meeting-context-bridge/notion-slack","symbols":[]},{"capabilityId":"package.lssm.tech.integration.opa.meeting.context.bridge","from":"@lssm-tech/integration.opa-meeting-context-bridge/slack-rest","symbols":[]},{"capabilityId":"package.lssm.tech.integration.opa.meeting.context.bridge","from":"@lssm-tech/integration.opa-meeting-context-bridge/web","symbols":[]}],"scripts":{"build":"contractspec-bun-build build","build:bundle":"contractspec-bun-build transpile","build:types":"contractspec-bun-build types","clean":"rimraf dist .turbo","lint:check":"node ../../../scripts/biome.cjs check .","lint:fix":"node ../../../scripts/biome.cjs check --write .","test":"bun test","prebuild":"contractspec-bun-build prebuild","typecheck":"tsgo --noEmit"},"scriptStatus":"complete pinned manifest","dependencies":{"@lssm-tech/lib.contracts-integrations":"workspace:^","@lssm-tech/lib.organization-planning-spec":"workspace:^","@lssm-tech/lib.personal-os-spec":"workspace:^"},"devDependencies":{"@lssm-tech/integration.provider-email":"workspace:*","@lssm-tech/integration.provider-messaging":"workspace:*","@lssm-tech/integration.provider-project-management":"workspace:*","@lssm-tech/integration.provider-web-access":"workspace:*","@lssm-tech/lib.personal-os-runtime":"workspace:*","@lssm-tech/tool.bun":"workspace:*","@lssm-tech/tool.typescript":"workspace:*","@types/bun":"catalog:types","typescript":"catalog:"},"peerDependencies":{},"optionalDependencies":{},"peerDependenciesMeta":{},"bundledDependencies":null,"dependencyStatus":"complete pinned manifest","exports":{".":"./src/index.ts","./crm":"./src/crm.ts","./documents":"./src/documents.ts","./google-drive-rest":"./src/google-drive-rest.ts","./governance":"./src/governance.ts","./hubspot-contact-directory":"./src/hubspot-contact-directory.ts","./hubspot-crm-rest":"./src/hubspot-crm-rest.ts","./notion-rest":"./src/notion-rest.ts","./notion-slack":"./src/notion-slack.ts","./personalos-meeting-context":"./src/personalos-meeting-context.ts","./slack-rest":"./src/slack-rest.ts","./web":"./src/web.ts"},"publishExports":{".":{"types":"./dist/index.d.ts","bun":"./dist/index.js","node":"./dist/node/index.js","default":"./dist/index.js"},"./crm":{"types":"./dist/crm.d.ts","bun":"./dist/crm.js","node":"./dist/node/crm.js","default":"./dist/crm.js"},"./documents":{"types":"./dist/documents.d.ts","bun":"./dist/documents.js","node":"./dist/node/documents.js","default":"./dist/documents.js"},"./google-drive-rest":{"types":"./dist/google-drive-rest.d.ts","bun":"./dist/google-drive-rest.js","node":"./dist/node/google-drive-rest.js","default":"./dist/google-drive-rest.js"},"./governance":{"types":"./dist/governance.d.ts","bun":"./dist/governance.js","node":"./dist/node/governance.js","default":"./dist/governance.js"},"./hubspot-contact-directory":{"types":"./dist/hubspot-contact-directory.d.ts","bun":"./dist/hubspot-contact-directory.js","node":"./dist/node/hubspot-contact-directory.js","default":"./dist/hubspot-contact-directory.js"},"./hubspot-crm-rest":{"types":"./dist/hubspot-crm-rest.d.ts","bun":"./dist/hubspot-crm-rest.js","node":"./dist/node/hubspot-crm-rest.js","default":"./dist/hubspot-crm-rest.js"},"./notion-rest":{"types":"./dist/notion-rest.d.ts","bun":"./dist/notion-rest.js","node":"./dist/node/notion-rest.js","default":"./dist/notion-rest.js"},"./notion-slack":{"types":"./dist/notion-slack.d.ts","bun":"./dist/notion-slack.js","node":"./dist/node/notion-slack.js","default":"./dist/notion-slack.js"},"./personalos-meeting-context":{"types":"./dist/personalos-meeting-context.d.ts","bun":"./dist/personalos-meeting-context.js","node":"./dist/node/personalos-meeting-context.js","default":"./dist/personalos-meeting-context.js"},"./slack-rest":{"types":"./dist/slack-rest.d.ts","bun":"./dist/slack-rest.js","node":"./dist/node/slack-rest.js","default":"./dist/slack-rest.js"},"./web":{"types":"./dist/web.d.ts","bun":"./dist/web.js","node":"./dist/node/web.js","default":"./dist/web.js"}},"types":"./dist/index.d.ts","files":["dist","README.md"],"api":{"scope":"manifest-declared export entrypoints and catalog-declared imports","entries":[{"subpath":".","importPath":"@lssm-tech/integration.opa-meeting-context-bridge","target":"./src/index.ts","targets":[{"conditions":[],"target":"./src/index.ts","sourcePath":"packages/integrations/opa-meeting-context-bridge/src/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-meeting-context-bridge/src/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./crm","importPath":"@lssm-tech/integration.opa-meeting-context-bridge/crm","target":"./src/crm.ts","targets":[{"conditions":[],"target":"./src/crm.ts","sourcePath":"packages/integrations/opa-meeting-context-bridge/src/crm.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-meeting-context-bridge/src/crm.ts","sourceStatus":"verified source file"}]},{"subpath":"./documents","importPath":"@lssm-tech/integration.opa-meeting-context-bridge/documents","target":"./src/documents.ts","targets":[{"conditions":[],"target":"./src/documents.ts","sourcePath":"packages/integrations/opa-meeting-context-bridge/src/documents.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-meeting-context-bridge/src/documents.ts","sourceStatus":"verified source file"}]},{"subpath":"./google-drive-rest","importPath":"@lssm-tech/integration.opa-meeting-context-bridge/google-drive-rest","target":"./src/google-drive-rest.ts","targets":[{"conditions":[],"target":"./src/google-drive-rest.ts","sourcePath":"packages/integrations/opa-meeting-context-bridge/src/google-drive-rest.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-meeting-context-bridge/src/google-drive-rest.ts","sourceStatus":"verified source file"}]},{"subpath":"./governance","importPath":"@lssm-tech/integration.opa-meeting-context-bridge/governance","target":"./src/governance.ts","targets":[{"conditions":[],"target":"./src/governance.ts","sourcePath":"packages/integrations/opa-meeting-context-bridge/src/governance.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-meeting-context-bridge/src/governance.ts","sourceStatus":"verified source file"}]},{"subpath":"./hubspot-contact-directory","importPath":"@lssm-tech/integration.opa-meeting-context-bridge/hubspot-contact-directory","target":"./src/hubspot-contact-directory.ts","targets":[{"conditions":[],"target":"./src/hubspot-contact-directory.ts","sourcePath":"packages/integrations/opa-meeting-context-bridge/src/hubspot-contact-directory.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-meeting-context-bridge/src/hubspot-contact-directory.ts","sourceStatus":"verified source file"}]},{"subpath":"./hubspot-crm-rest","importPath":"@lssm-tech/integration.opa-meeting-context-bridge/hubspot-crm-rest","target":"./src/hubspot-crm-rest.ts","targets":[{"conditions":[],"target":"./src/hubspot-crm-rest.ts","sourcePath":"packages/integrations/opa-meeting-context-bridge/src/hubspot-crm-rest.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-meeting-context-bridge/src/hubspot-crm-rest.ts","sourceStatus":"verified source file"}]},{"subpath":"./notion-rest","importPath":"@lssm-tech/integration.opa-meeting-context-bridge/notion-rest","target":"./src/notion-rest.ts","targets":[{"conditions":[],"target":"./src/notion-rest.ts","sourcePath":"packages/integrations/opa-meeting-context-bridge/src/notion-rest.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-meeting-context-bridge/src/notion-rest.ts","sourceStatus":"verified source file"}]},{"subpath":"./notion-slack","importPath":"@lssm-tech/integration.opa-meeting-context-bridge/notion-slack","target":"./src/notion-slack.ts","targets":[{"conditions":[],"target":"./src/notion-slack.ts","sourcePath":"packages/integrations/opa-meeting-context-bridge/src/notion-slack.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-meeting-context-bridge/src/notion-slack.ts","sourceStatus":"verified source file"}]},{"subpath":"./personalos-meeting-context","importPath":"@lssm-tech/integration.opa-meeting-context-bridge/personalos-meeting-context","target":"./src/personalos-meeting-context.ts","targets":[{"conditions":[],"target":"./src/personalos-meeting-context.ts","sourcePath":"packages/integrations/opa-meeting-context-bridge/src/personalos-meeting-context.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-meeting-context-bridge/src/personalos-meeting-context.ts","sourceStatus":"verified source file"}]},{"subpath":"./slack-rest","importPath":"@lssm-tech/integration.opa-meeting-context-bridge/slack-rest","target":"./src/slack-rest.ts","targets":[{"conditions":[],"target":"./src/slack-rest.ts","sourcePath":"packages/integrations/opa-meeting-context-bridge/src/slack-rest.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-meeting-context-bridge/src/slack-rest.ts","sourceStatus":"verified source file"}]},{"subpath":"./web","importPath":"@lssm-tech/integration.opa-meeting-context-bridge/web","target":"./src/web.ts","targets":[{"conditions":[],"target":"./src/web.ts","sourcePath":"packages/integrations/opa-meeting-context-bridge/src/web.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-meeting-context-bridge/src/web.ts","sourceStatus":"verified source file"}]}],"entryCount":12,"namedSymbolCoverage":"catalog declarations only; exhaustive TypeScript symbols not extracted","installationStatus":"not verified"},"docsLinks":[{"title":"Integration Opa Meeting Context Bridge documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Fintegration.opa-meeting-context-bridge","kind":"readme","pinnedUrl":null,"sourceStatus":"declared link; destination not verified"}],"sourceUrls":{"package":"https://github.com/lssm-tech/contractspec/tree/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-meeting-context-bridge","manifest":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-meeting-context-bridge/package.json","readme":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-meeting-context-bridge/README.md","guide":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/web-landing/public/llms-packages/integration.opa-meeting-context-bridge.txt"},"readme":{"status":"available","body":"# OPA Meeting Context Bridge\n\nServer-side, provider-neutral bridges from existing Notion, Slack, email,\nDrive/document, CRM, and governed-web read surfaces to OPA's\n`MeetingContextSourcePort`.\n\nEvery factory is bound to one exact OPA owner scope, applies explicit item and\ncontent bounds, emits hashed provenance/citation references, and propagates\nprovider or contract failures. Shared sensitive material requires a configured\nconsent reference.\n\nHosts inject already-authorized provider instances and meeting-specific\nquery/match functions. The included Google Drive v3 REST provider resolves a\nfresh bearer through a server-only token port, supports shared-drive listing,\nand streams bounded blob or Google Docs text into the governed Drive bridge.\nThe included HubSpot CRM provider uses the official date-versioned `2026-03`\nread endpoints for contacts, companies, and deals. It resolves fresh bearer\nauthority server-side, requests only allowlisted properties, binds pagination\nto the exact tenant/workspace/entity-kind scope with a host-supplied HMAC key,\nand requires a durable evidence receipt for every projected object. Salesforce\nremains contract-backed only.\nThe read-only Notion (`createNotionRestSearchProvider`, `POST /v1/search`) and\nSlack (`createSlackRestSearchProvider`, `search.messages`, user token with\n`search:read`) providers implement the Notion/Slack meeting search ports, and\n`createHubSpotContactDirectory` resolves attendee e-mails to HubSpot contacts as\nan OPA `MeetingParticipantDirectoryPort`. All of them time out (default 8 s),\ncap JSON at 1 MiB, map 401/403 to `*_grant_rejected`, and never put tokens or\nprovider text in errors.\n`./personalos-meeting-context` is the CompanyOS side of the PersonalOS\n`companyos_meeting_context` consumer: `createPersonalOsMeetingContextClient`\nreads a consented projection or writes a private meeting memory entry through\nan injected transport, parses every answer with the PersonalOS contract, binds\nit to its request or entry id and uses a projection only inside its consent and\nretention window. `createPersonalOsMeetingContextHttpTransport` posts to the\nPersonalOS consumer routes over HTTPS (loopback HTTP for rehearsals) with a\nservice bearer of at least 32 bytes, 5 s timeout, no redirects and stable\n`personalos_meeting_context_*` error codes.\nCompanyOS company intelligence is intentionally not duplicated here because its\nexisting Work Graph meeting source owns that boundary.\n","sourcePath":"packages/integrations/opa-meeting-context-bridge/README.md","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-meeting-context-bridge/README.md","blobSha":"909a3814be368cb1172983d514c410badaa0ff3f","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","origin":"README recovered byte-for-byte from pinned aggregate guide","integrity":"exact Git blob match","executionStatus":"not executed"},"provenance":{"repository":"lssm-tech/contractspec","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","manifestOrigin":"pinned GitHub manifest fetch","manifestComplete":true,"publicationPolicyApplied":false},"areaSlug":"company-and-work","areaTitle":"Company, work and service operations","displayName":"integration.opa-meeting-context-bridge","runtimes":["node"],"platforms":["server"],"kind":"integration","scope":"Package manifest","canonicalRoute":"/docs/packages/integration.opa-meeting-context-bridge/","contextUrl":"/docs/packages/integration.opa-meeting-context-bridge.context.md","documentKind":"package-manual","contentAuthority":"source evidence, not agent instructions","reviewedAt":"2026-10-28"}