memeloop 0.2.3 → 0.2.5

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 (96) hide show
  1. package/dist/browser.d.cts +26 -21
  2. package/dist/browser.d.ts +26 -21
  3. package/dist/chunk-4OITUYFC.js +37 -0
  4. package/dist/chunk-4OITUYFC.js.map +1 -0
  5. package/dist/{chunk-HY3U3GLE.js → chunk-5EUJNLVW.js} +1 -1
  6. package/dist/chunk-5EUJNLVW.js.map +1 -0
  7. package/dist/{chunk-KXVZQLJL.js → chunk-645GZGNM.js} +3 -2
  8. package/dist/chunk-645GZGNM.js.map +1 -0
  9. package/dist/{chunk-EPHRIRAL.js → chunk-6OLAL5CW.js} +16 -1
  10. package/dist/chunk-6OLAL5CW.js.map +1 -0
  11. package/dist/{chunk-LGUGYRR4.js → chunk-HVLCOJWI.js} +11 -6
  12. package/dist/{chunk-LGUGYRR4.js.map → chunk-HVLCOJWI.js.map} +1 -1
  13. package/dist/{chunk-5VYZV33O.js → chunk-KTZDDC7M.js} +64 -79
  14. package/dist/chunk-KTZDDC7M.js.map +1 -0
  15. package/dist/{chunk-K5KZJNDP.js → chunk-ROPAEJIM.js} +2 -2
  16. package/dist/{chunk-GYIOMQMY.js → chunk-UB77WKAU.js} +305 -429
  17. package/dist/chunk-UB77WKAU.js.map +1 -0
  18. package/dist/{chunk-KV6TC5UJ.js → chunk-XIEXGFPY.js} +3 -3
  19. package/dist/conversation.d.cts +4 -3
  20. package/dist/conversation.d.ts +4 -3
  21. package/dist/device-network-portable.cjs +2 -1
  22. package/dist/device-network-portable.cjs.map +1 -1
  23. package/dist/device-network-portable.d.cts +9 -7
  24. package/dist/device-network-portable.d.ts +9 -7
  25. package/dist/device-network-portable.js +1 -1
  26. package/dist/device-network.cjs +17 -1
  27. package/dist/device-network.cjs.map +1 -1
  28. package/dist/device-network.d.cts +6 -5
  29. package/dist/device-network.d.ts +6 -5
  30. package/dist/device-network.js +2 -2
  31. package/dist/{fetchProvider-B_vva3b3.d.ts → fetchProvider-Do8Hf1BN.d.ts} +1 -1
  32. package/dist/{fetchProvider-Bz4CE3_R.d.cts → fetchProvider-tMo6gc6N.d.cts} +1 -1
  33. package/dist/index.cjs +465 -537
  34. package/dist/index.cjs.map +1 -1
  35. package/dist/index.d.cts +20 -26
  36. package/dist/index.d.ts +20 -26
  37. package/dist/index.js +47 -52
  38. package/dist/index.js.map +1 -1
  39. package/dist/{interface-3C3eG8Hn.d.cts → interface-C54gkLA3.d.ts} +3 -110
  40. package/dist/{interface-3C3eG8Hn.d.ts → interface-CECFnbzR.d.cts} +3 -110
  41. package/dist/llm-providers.cjs.map +1 -1
  42. package/dist/llm-providers.d.cts +3 -2
  43. package/dist/llm-providers.d.ts +3 -2
  44. package/dist/llm-providers.js +1 -1
  45. package/dist/llm-providers.js.map +1 -1
  46. package/dist/loop-api.cjs +88 -89
  47. package/dist/loop-api.cjs.map +1 -1
  48. package/dist/loop-api.d.cts +8 -7
  49. package/dist/loop-api.d.ts +8 -7
  50. package/dist/loop-api.js +5 -5
  51. package/dist/mobile.cjs +10 -5
  52. package/dist/mobile.cjs.map +1 -1
  53. package/dist/mobile.d.cts +6 -5
  54. package/dist/mobile.d.ts +6 -5
  55. package/dist/mobile.js +3 -3
  56. package/dist/{orchestration-portable-B4udCSVd.d.ts → orchestration-portable-CQRrnoEw.d.ts} +15 -5
  57. package/dist/{orchestration-portable-BWaCsCGK.d.cts → orchestration-portable-D4KBEYQb.d.cts} +15 -5
  58. package/dist/orchestration-portable.cjs +201 -343
  59. package/dist/orchestration-portable.cjs.map +1 -1
  60. package/dist/orchestration-portable.d.cts +6 -5
  61. package/dist/orchestration-portable.d.ts +6 -5
  62. package/dist/orchestration-portable.js +1 -1
  63. package/dist/{pairingInvite-C12n-7Ak.d.cts → pairingInvite-BmCQ-bHt.d.cts} +3 -3
  64. package/dist/{pairingInvite-CPQkuhLQ.d.ts → pairingInvite-CsfsexXC.d.ts} +3 -3
  65. package/dist/{promptConcat-VLe5SEN4.d.cts → promptConcat-BqImJtVh.d.cts} +7 -4
  66. package/dist/{promptConcat-CUEIA_3T.d.ts → promptConcat-C5SEgESi.d.ts} +7 -4
  67. package/dist/{providerRegistry-CaFK_aUd.d.ts → providerRegistry-BGrwd7Zl.d.cts} +2 -2
  68. package/dist/{providerRegistry-BDGGs5gz.d.cts → providerRegistry-Bs2lJpj9.d.ts} +2 -2
  69. package/dist/{registry-DNSEVYug.d.cts → registry-CelnriUR.d.cts} +3 -3
  70. package/dist/{registry-yGnYHWhq.d.ts → registry-DVv_RVPZ.d.ts} +3 -3
  71. package/dist/{remoteClient-DwBCoHpc.d.ts → remoteClient-D1gPizds.d.ts} +1 -1
  72. package/dist/{remoteClient-DFIyCZEv.d.cts → remoteClient-DxCHC4_Z.d.cts} +1 -1
  73. package/dist/{runtime-6EELHWVB.js → runtime-SASMRN4I.js} +3 -3
  74. package/dist/{scriptDeploymentPipeline-B1q-UhrO.d.ts → scriptDeploymentPipeline-CdDLEDMS.d.cts} +10 -1
  75. package/dist/{scriptDeploymentPipeline-XJzQyYys.d.cts → scriptDeploymentPipeline-DU6sor6Y.d.ts} +10 -1
  76. package/dist/{syncCloudDevices-C8fCUhnX.d.ts → syncCloudDevices-3RmB41sA.d.cts} +6 -2
  77. package/dist/{syncCloudDevices-BFw_c1g5.d.cts → syncCloudDevices-CSLbMESm.d.ts} +6 -2
  78. package/dist/tools.cjs +63 -0
  79. package/dist/tools.cjs.map +1 -0
  80. package/dist/tools.d.cts +12 -0
  81. package/dist/tools.d.ts +12 -0
  82. package/dist/tools.js +7 -0
  83. package/dist/tools.js.map +1 -0
  84. package/dist/{types-CcFFIk8W.d.ts → types-C29NBZ2w.d.ts} +1 -1
  85. package/dist/types-CcoJ_fdH.d.cts +110 -0
  86. package/dist/types-CcoJ_fdH.d.ts +110 -0
  87. package/dist/{types-C8gnhG9M.d.cts → types-D1rAJy9l.d.cts} +1 -1
  88. package/package.json +6 -1
  89. package/dist/chunk-5VYZV33O.js.map +0 -1
  90. package/dist/chunk-EPHRIRAL.js.map +0 -1
  91. package/dist/chunk-GYIOMQMY.js.map +0 -1
  92. package/dist/chunk-HY3U3GLE.js.map +0 -1
  93. package/dist/chunk-KXVZQLJL.js.map +0 -1
  94. /package/dist/{chunk-K5KZJNDP.js.map → chunk-ROPAEJIM.js.map} +0 -0
  95. /package/dist/{chunk-KV6TC5UJ.js.map → chunk-XIEXGFPY.js.map} +0 -0
  96. /package/dist/{runtime-6EELHWVB.js.map → runtime-SASMRN4I.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/device-network/memoryDeviceNetworkService.ts","../src/device-network/syncCloudDevices.ts"],"sourcesContent":["import type {\n Device,\n DeviceCapabilities,\n DeviceConnectionGrant,\n DeviceNetworkService,\n LocalDeviceIdentity,\n LocalPairingRequestOptions,\n MemeLoopDuplexStream,\n MemeLoopProtocol,\n PairingSession,\n SyncResult,\n TrustedDeviceRecord,\n} from './types.js';\n\nexport interface MemoryDeviceNetworkServiceOptions {\n identity: LocalDeviceIdentity;\n capabilities?: DeviceCapabilities;\n trustedDevices?: TrustedDeviceRecord[];\n}\n\nconst emptyCapabilities: DeviceCapabilities = {\n tools: [],\n mcpServers: [],\n hasWiki: false,\n agentLoop: false,\n imChannels: [],\n wikis: [],\n};\n\nfunction toDevice(record: TrustedDeviceRecord, capabilities: DeviceCapabilities): Device {\n return {\n peerId: record.peerId,\n displayName: record.deviceName,\n platform: record.platform,\n trustMode: record.trustMode,\n trusted: !record.revokedAt,\n reachability: {\n state: record.revokedAt ? 'offline' : 'nearby',\n paths: record.revokedAt ? [] : ['lan'],\n },\n capabilities,\n lastSeen: record.lastSeen,\n };\n}\n\nexport class MemoryDeviceNetworkService implements DeviceNetworkService {\n private started = false;\n private readonly capabilities: DeviceCapabilities;\n private readonly trustedDevices = new Map<string, TrustedDeviceRecord>();\n private readonly pairingSessions = new Map<string, PairingSession>();\n private readonly listeners = new Set<(devices: Device[]) => void>();\n private readonly pairingListeners = new Set<(sessions: PairingSession[]) => void>();\n\n constructor(private readonly options: MemoryDeviceNetworkServiceOptions) {\n this.capabilities = options.capabilities ?? emptyCapabilities;\n for (const record of options.trustedDevices ?? []) {\n this.trustedDevices.set(record.peerId, record);\n }\n }\n\n public async start(): Promise<void> {\n this.started = true;\n this.emitDevices();\n }\n\n public async stop(): Promise<void> {\n this.started = false;\n this.emitDevices();\n }\n\n public async getLocalDevice(): Promise<Device> {\n return {\n peerId: this.options.identity.peerId,\n displayName: this.options.identity.deviceName,\n platform: this.options.identity.platform,\n trustMode: 'local-pairing',\n reachability: {\n state: this.started ? 'online' : 'offline',\n paths: this.started ? ['lan'] : [],\n },\n capabilities: this.capabilities,\n lastSeen: Date.now(),\n };\n }\n\n public async listDevices(): Promise<Device[]> {\n return [...this.trustedDevices.values()].map((record) => toDevice(record, emptyCapabilities));\n }\n\n public observeDevices(listener: (devices: Device[]) => void): () => void {\n this.listeners.add(listener);\n void this.listDevices().then(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n public async listPairingSessions(): Promise<PairingSession[]> {\n return [...this.pairingSessions.values()];\n }\n\n public observePairingSessions(listener: (sessions: PairingSession[]) => void): () => void {\n this.pairingListeners.add(listener);\n void this.listPairingSessions().then(listener);\n return () => {\n this.pairingListeners.delete(listener);\n };\n }\n\n public async requestLocalPairing(peerId: string, _options: LocalPairingRequestOptions = {}): Promise<PairingSession> {\n const createdAt = Date.now();\n const session: PairingSession = {\n sessionId: `pairing-${this.options.identity.peerId}-${peerId}-${createdAt}`,\n localPeerId: this.options.identity.peerId,\n remotePeerId: peerId,\n remotePublicKeyMultibase: '',\n remoteDeviceName: peerId,\n remotePlatform: 'cli',\n remoteCapabilities: emptyCapabilities,\n remoteMultiaddrs: [],\n direction: 'outbound',\n status: 'pending',\n confirmCode: this.confirmCode(peerId),\n createdAt,\n expiresAt: createdAt + 5 * 60_000,\n };\n this.pairingSessions.set(session.sessionId, session);\n this.emitPairingSessions();\n return session;\n }\n\n public async acceptPairing(sessionId: string): Promise<void> {\n const session = this.pairingSessions.get(sessionId);\n if (!session) throw new Error('pairing_session_not_found');\n if (session.expiresAt < Date.now()) throw new Error('pairing_session_expired');\n if (session.status !== 'pending') throw new Error('pairing_session_not_pending');\n this.trustedDevices.set(session.remotePeerId, {\n peerId: session.remotePeerId,\n publicKeyMultibase: session.remotePublicKeyMultibase,\n deviceName: session.remoteDeviceName,\n platform: session.remotePlatform,\n trustMode: 'local-pairing',\n createdAt: Date.now(),\n lastSeen: Date.now(),\n });\n session.status = 'accepted';\n this.emitPairingSessions();\n this.emitDevices();\n }\n\n public async rejectPairing(sessionId: string): Promise<void> {\n const session = this.pairingSessions.get(sessionId);\n if (!session) return;\n session.status = 'rejected';\n this.emitPairingSessions();\n }\n\n public async removeTrustedDevice(peerId: string): Promise<void> {\n this.trustedDevices.delete(peerId);\n this.emitDevices();\n }\n\n public async openStream(\n peerId: string,\n _protocol: MemeLoopProtocol,\n _presentedGrant?: DeviceConnectionGrant,\n ): Promise<MemeLoopDuplexStream> {\n if (!this.trustedDevices.has(peerId)) throw new Error('device_not_trusted');\n return {\n source: (async function* emptySource() {})(),\n async sink() {},\n async close() {},\n abort() {},\n };\n }\n\n public async sendRpc<T>(\n peerId: string,\n _method: string,\n _parameters: unknown,\n _presentedGrant?: DeviceConnectionGrant,\n ): Promise<T> {\n if (!this.trustedDevices.has(peerId)) throw new Error('device_not_trusted');\n throw new Error('rpc_handler_not_registered');\n }\n\n public async syncWithDevice(peerId: string, _presentedGrant?: DeviceConnectionGrant): Promise<SyncResult> {\n if (!this.trustedDevices.has(peerId)) throw new Error('device_not_trusted');\n return { ok: true, peerId, syncedAt: Date.now() };\n }\n\n private confirmCode(peerId: string): string {\n const input = `${this.options.identity.peerId}:${peerId}`;\n let hash = 0;\n for (let index = 0; index < input.length; index += 1) {\n hash = (hash * 31 + input.charCodeAt(index)) >>> 0;\n }\n return (hash % 1_000_000).toString().padStart(6, '0');\n }\n\n private emitDevices(): void {\n void this.listDevices().then((devices) => {\n for (const listener of this.listeners) listener(devices);\n });\n }\n\n private emitPairingSessions(): void {\n void this.listPairingSessions().then((sessions) => {\n for (const listener of this.pairingListeners) listener(sessions);\n });\n }\n}\n","import type { CloudDeviceClient, CloudDeviceRecord, DeviceTrustStore, TrustedDeviceRecord } from './types.js';\n\n/**\n * Fetch visible cloud devices and merge them into the local trust store.\n * - Cloud devices become trusted with trustMode = \"cloud-account\".\n * - Explicit local-pairing trust is never replaced by Cloud directory data.\n * - Cloud-account records that are revoked or disappear from the visible\n * directory are removed so stale discovery metadata cannot bypass revocation.\n * - Returns only active Cloud records for callers to emit as discovered devices.\n */\nexport async function syncCloudDevices(input: {\n cloudClient: CloudDeviceClient;\n excludePeerIds?: Iterable<string>;\n trustStore: DeviceTrustStore;\n}): Promise<CloudDeviceRecord[]> {\n const cloudDevices = await input.cloudClient.listDevices();\n const existingRecords = await input.trustStore.loadTrustedDevices();\n const existingByPeerId = new Map(existingRecords.map((r) => [r.peerId, r]));\n const excludedPeerIds = new Set(input.excludePeerIds ?? []);\n const activeCloudDevices = cloudDevices.filter(\n device => device.revokedAt === undefined && !excludedPeerIds.has(device.peerId),\n );\n const visibleCloudPeerIds = new Set(activeCloudDevices.map((device) => device.peerId));\n\n for (const existing of existingRecords) {\n if (\n existing.trustMode === 'cloud-account' &&\n !visibleCloudPeerIds.has(existing.peerId)\n ) {\n await input.trustStore.removeTrustedDevice(existing.peerId);\n }\n }\n\n for (const cloudDevice of activeCloudDevices) {\n const existing = existingByPeerId.get(cloudDevice.peerId);\n\n // Local pairing is a separate, explicit trust source. Cloud discovery may\n // describe the same peer but must not rotate its key or downgrade its trust\n // provenance behind the user's back.\n if (existing?.trustMode === 'local-pairing') continue;\n\n const record: TrustedDeviceRecord = {\n peerId: cloudDevice.peerId,\n publicKeyMultibase: cloudDevice.publicKeyMultibase,\n deviceName: cloudDevice.deviceName,\n platform: cloudDevice.platform,\n trustMode: 'cloud-account',\n accountId: cloudDevice.accountId,\n createdAt: existing?.createdAt ?? Date.now(),\n lastSeen: cloudDevice.lastSeen,\n revokedAt: cloudDevice.revokedAt,\n };\n\n if (!existing || !sameTrustedDevice(existing, record)) {\n await input.trustStore.saveTrustedDevice(record);\n }\n }\n\n return activeCloudDevices;\n}\n\nfunction sameTrustedDevice(left: TrustedDeviceRecord, right: TrustedDeviceRecord): boolean {\n return left.peerId === right.peerId &&\n left.publicKeyMultibase === right.publicKeyMultibase &&\n left.deviceName === right.deviceName &&\n left.platform === right.platform &&\n left.trustMode === right.trustMode &&\n left.accountId === right.accountId &&\n left.createdAt === right.createdAt &&\n left.lastSeen === right.lastSeen &&\n left.revokedAt === right.revokedAt;\n}\n"],"mappings":"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","names":[]}