MCPcopy Create free account
hub / github.com/bearlyai/OpenADE / createOpenADEModule

Function createOpenADEModule

projects/openade-module/src/module.ts:745–1053  ·  view source on GitHub ↗
(adapters: OpenADEModuleAdapters)

Source from the content-addressed store, hash-verified

743}
744
745export function createOpenADEModule(adapters: OpenADEModuleAdapters): RuntimeModule {
746 const clientRequests = new Map<string, ClientRequestEntry>()
747 const createId = adapters.createId ?? createFallbackId
748 const clientRequestRetentionMs = adapters.clientRequestRetentionMs ?? DEFAULT_CLIENT_REQUEST_RETENTION_MS
749
750 function runIdempotentMutation<T>(scope: string, params: unknown, action: () => Promise<T> | T): Promise<T> {
751 const clientRequestId = stableClientRequestKey(params)
752 if (!clientRequestId) return Promise.resolve().then(action)
753
754 const key = `mutation:${scope}:${clientRequestId}`
755 const existing = clientRequests.get(key)
756 if (existing) return existing.promise as Promise<T>
757
758 let retainStableResult = false
759 const request = Promise.resolve()
760 .then(action)
761 .then((result) => {
762 retainStableResult = true
763 return result
764 })
765 .finally(() => {
766 if (!retainStableResult) {
767 clientRequests.delete(key)
768 return
769 }
770
771 const entry = clientRequests.get(key)
772 if (!entry || entry.promise !== request) return
773
774 const cleanupTimer = setTimeout(() => {
775 if (clientRequests.get(key)?.promise === request) {
776 clientRequests.delete(key)
777 }
778 }, clientRequestRetentionMs)
779 unrefTimer(cleanupTimer)
780 entry.cleanupTimer = cleanupTimer
781 })
782
783 clientRequests.set(key, { promise: request, cleanupTimer: null })
784 return request
785 }
786
787 return {
788 name: "openade",
789 register(server) {
790 server.registerNotification("openade/snapshotChanged")
791 server.registerNotification("openade/repo/updated")
792 server.registerNotification("openade/repo/deleted")
793 server.registerNotification("openade/task/previewChanged")
794 server.registerNotification("openade/task/updated")
795 server.registerNotification("openade/task/deleted")
796 server.registerNotification("openade/queuedTurn/updated")
797 server.registerNotification("openade/workingTasks")
798 server.registerNotification("remote/device/changed")
799
800 server.register("openade/snapshot/read", (_params, context) =>
801 adapters.readSnapshot({
802 version: adapters.version?.() ?? "local",

Calls

no outgoing calls

Tested by

no test coverage detected