agent-enderun 0.9.1 → 0.9.3
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.
- package/.enderun/PROJECT_MEMORY.md +6 -23
- package/.enderun/STATUS.md +2 -2
- package/.enderun/agents/backend.md +1 -0
- package/.enderun/agents/frontend.md +2 -1
- package/.enderun/agents/manager.md +1 -1
- package/.enderun/agents/quality.md +2 -0
- package/.enderun/config.json +1 -1
- package/README.md +51 -61
- package/framework-mcp/dist/index.js +58 -1
- package/framework-mcp/node_modules/@types/node/LICENSE +21 -0
- package/framework-mcp/node_modules/@types/node/README.md +15 -0
- package/framework-mcp/node_modules/@types/node/assert/strict.d.ts +111 -0
- package/framework-mcp/node_modules/@types/node/assert.d.ts +1078 -0
- package/framework-mcp/node_modules/@types/node/async_hooks.d.ts +603 -0
- package/framework-mcp/node_modules/@types/node/buffer.buffer.d.ts +472 -0
- package/framework-mcp/node_modules/@types/node/buffer.d.ts +1934 -0
- package/framework-mcp/node_modules/@types/node/child_process.d.ts +1476 -0
- package/framework-mcp/node_modules/@types/node/cluster.d.ts +578 -0
- package/framework-mcp/node_modules/@types/node/compatibility/disposable.d.ts +14 -0
- package/framework-mcp/node_modules/@types/node/compatibility/index.d.ts +9 -0
- package/framework-mcp/node_modules/@types/node/compatibility/indexable.d.ts +20 -0
- package/framework-mcp/node_modules/@types/node/compatibility/iterators.d.ts +20 -0
- package/framework-mcp/node_modules/@types/node/console.d.ts +452 -0
- package/framework-mcp/node_modules/@types/node/constants.d.ts +21 -0
- package/framework-mcp/node_modules/@types/node/crypto.d.ts +4545 -0
- package/framework-mcp/node_modules/@types/node/dgram.d.ts +600 -0
- package/framework-mcp/node_modules/@types/node/diagnostics_channel.d.ts +578 -0
- package/framework-mcp/node_modules/@types/node/dns/promises.d.ts +503 -0
- package/framework-mcp/node_modules/@types/node/dns.d.ts +923 -0
- package/framework-mcp/node_modules/@types/node/domain.d.ts +170 -0
- package/framework-mcp/node_modules/@types/node/events.d.ts +976 -0
- package/framework-mcp/node_modules/@types/node/fs/promises.d.ts +1295 -0
- package/framework-mcp/node_modules/@types/node/fs.d.ts +4461 -0
- package/framework-mcp/node_modules/@types/node/globals.d.ts +172 -0
- package/framework-mcp/node_modules/@types/node/globals.typedarray.d.ts +38 -0
- package/framework-mcp/node_modules/@types/node/http.d.ts +2089 -0
- package/framework-mcp/node_modules/@types/node/http2.d.ts +2721 -0
- package/framework-mcp/node_modules/@types/node/https.d.ts +579 -0
- package/framework-mcp/node_modules/@types/node/index.d.ts +97 -0
- package/framework-mcp/node_modules/@types/node/inspector.d.ts +253 -0
- package/framework-mcp/node_modules/@types/node/inspector.generated.d.ts +4052 -0
- package/framework-mcp/node_modules/@types/node/module.d.ts +891 -0
- package/framework-mcp/node_modules/@types/node/net.d.ts +1076 -0
- package/framework-mcp/node_modules/@types/node/os.d.ts +506 -0
- package/framework-mcp/node_modules/@types/node/package.json +145 -0
- package/framework-mcp/node_modules/@types/node/path.d.ts +200 -0
- package/framework-mcp/node_modules/@types/node/perf_hooks.d.ts +968 -0
- package/framework-mcp/node_modules/@types/node/process.d.ts +2084 -0
- package/framework-mcp/node_modules/@types/node/punycode.d.ts +117 -0
- package/framework-mcp/node_modules/@types/node/querystring.d.ts +152 -0
- package/framework-mcp/node_modules/@types/node/readline/promises.d.ts +161 -0
- package/framework-mcp/node_modules/@types/node/readline.d.ts +594 -0
- package/framework-mcp/node_modules/@types/node/repl.d.ts +428 -0
- package/framework-mcp/node_modules/@types/node/sea.d.ts +153 -0
- package/framework-mcp/node_modules/@types/node/sqlite.d.ts +721 -0
- package/framework-mcp/node_modules/@types/node/stream/consumers.d.ts +38 -0
- package/framework-mcp/node_modules/@types/node/stream/promises.d.ts +90 -0
- package/framework-mcp/node_modules/@types/node/stream/web.d.ts +622 -0
- package/framework-mcp/node_modules/@types/node/stream.d.ts +1687 -0
- package/framework-mcp/node_modules/@types/node/string_decoder.d.ts +67 -0
- package/framework-mcp/node_modules/@types/node/test.d.ts +2163 -0
- package/framework-mcp/node_modules/@types/node/timers/promises.d.ts +108 -0
- package/framework-mcp/node_modules/@types/node/timers.d.ts +287 -0
- package/framework-mcp/node_modules/@types/node/tls.d.ts +1319 -0
- package/framework-mcp/node_modules/@types/node/trace_events.d.ts +197 -0
- package/framework-mcp/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +468 -0
- package/framework-mcp/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +34 -0
- package/framework-mcp/node_modules/@types/node/ts5.6/index.d.ts +97 -0
- package/framework-mcp/node_modules/@types/node/tty.d.ts +208 -0
- package/framework-mcp/node_modules/@types/node/url.d.ts +984 -0
- package/framework-mcp/node_modules/@types/node/util.d.ts +2606 -0
- package/framework-mcp/node_modules/@types/node/v8.d.ts +920 -0
- package/framework-mcp/node_modules/@types/node/vm.d.ts +1000 -0
- package/framework-mcp/node_modules/@types/node/wasi.d.ts +181 -0
- package/framework-mcp/node_modules/@types/node/web-globals/abortcontroller.d.ts +34 -0
- package/framework-mcp/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
- package/framework-mcp/node_modules/@types/node/web-globals/events.d.ts +97 -0
- package/framework-mcp/node_modules/@types/node/web-globals/fetch.d.ts +55 -0
- package/framework-mcp/node_modules/@types/node/web-globals/navigator.d.ts +22 -0
- package/framework-mcp/node_modules/@types/node/web-globals/storage.d.ts +24 -0
- package/framework-mcp/node_modules/@types/node/worker_threads.d.ts +784 -0
- package/framework-mcp/node_modules/@types/node/zlib.d.ts +747 -0
- package/framework-mcp/node_modules/typescript/LICENSE.txt +55 -0
- package/framework-mcp/node_modules/typescript/README.md +50 -0
- package/framework-mcp/node_modules/typescript/SECURITY.md +41 -0
- package/framework-mcp/node_modules/typescript/ThirdPartyNoticeText.txt +193 -0
- package/framework-mcp/node_modules/typescript/bin/tsc +2 -0
- package/framework-mcp/node_modules/typescript/bin/tsserver +2 -0
- package/framework-mcp/node_modules/typescript/lib/_tsc.js +133818 -0
- package/framework-mcp/node_modules/typescript/lib/_tsserver.js +659 -0
- package/framework-mcp/node_modules/typescript/lib/_typingsInstaller.js +222 -0
- package/framework-mcp/node_modules/typescript/lib/cs/diagnosticMessages.generated.json +2122 -0
- package/framework-mcp/node_modules/typescript/lib/de/diagnosticMessages.generated.json +2122 -0
- package/framework-mcp/node_modules/typescript/lib/es/diagnosticMessages.generated.json +2122 -0
- package/framework-mcp/node_modules/typescript/lib/fr/diagnosticMessages.generated.json +2122 -0
- package/framework-mcp/node_modules/typescript/lib/it/diagnosticMessages.generated.json +2122 -0
- package/framework-mcp/node_modules/typescript/lib/ja/diagnosticMessages.generated.json +2122 -0
- package/framework-mcp/node_modules/typescript/lib/ko/diagnosticMessages.generated.json +2122 -0
- package/framework-mcp/node_modules/typescript/lib/lib.d.ts +22 -0
- package/framework-mcp/node_modules/typescript/lib/lib.decorators.d.ts +384 -0
- package/framework-mcp/node_modules/typescript/lib/lib.decorators.legacy.d.ts +22 -0
- package/framework-mcp/node_modules/typescript/lib/lib.dom.asynciterable.d.ts +41 -0
- package/framework-mcp/node_modules/typescript/lib/lib.dom.d.ts +39429 -0
- package/framework-mcp/node_modules/typescript/lib/lib.dom.iterable.d.ts +571 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2015.collection.d.ts +147 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2015.core.d.ts +597 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2015.d.ts +28 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2015.generator.d.ts +77 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2015.iterable.d.ts +605 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2015.promise.d.ts +81 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2015.proxy.d.ts +128 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2015.reflect.d.ts +144 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2015.symbol.d.ts +46 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts +326 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2016.array.include.d.ts +116 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2016.d.ts +21 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2016.full.d.ts +23 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2016.intl.d.ts +31 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts +21 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2017.d.ts +26 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2017.date.d.ts +31 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2017.full.d.ts +23 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2017.intl.d.ts +44 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2017.object.d.ts +49 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts +135 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2017.string.d.ts +45 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts +53 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +77 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +53 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2018.d.ts +24 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2018.full.d.ts +24 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2018.intl.d.ts +83 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2018.promise.d.ts +30 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2018.regexp.d.ts +37 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2019.array.d.ts +79 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2019.d.ts +24 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2019.full.d.ts +24 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2019.intl.d.ts +23 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2019.object.d.ts +33 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2019.string.d.ts +37 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2019.symbol.d.ts +24 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2020.bigint.d.ts +765 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2020.d.ts +27 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2020.date.d.ts +42 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2020.full.d.ts +24 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2020.intl.d.ts +474 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2020.number.d.ts +28 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2020.promise.d.ts +47 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts +99 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2020.string.d.ts +44 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +41 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2021.d.ts +23 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2021.full.d.ts +24 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2021.intl.d.ts +166 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2021.promise.d.ts +48 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2021.string.d.ts +33 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2021.weakref.d.ts +78 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2022.array.d.ts +121 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2022.d.ts +25 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2022.error.d.ts +75 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2022.full.d.ts +24 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2022.intl.d.ts +145 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2022.object.d.ts +26 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2022.regexp.d.ts +39 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2022.string.d.ts +25 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2023.array.d.ts +924 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2023.collection.d.ts +21 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2023.d.ts +22 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2023.full.d.ts +24 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2023.intl.d.ts +56 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts +65 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2024.collection.d.ts +29 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2024.d.ts +26 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2024.full.d.ts +24 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2024.object.d.ts +29 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2024.promise.d.ts +35 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2024.regexp.d.ts +25 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts +68 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es2024.string.d.ts +29 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es5.d.ts +4601 -0
- package/framework-mcp/node_modules/typescript/lib/lib.es6.d.ts +23 -0
- package/framework-mcp/node_modules/typescript/lib/lib.esnext.array.d.ts +35 -0
- package/framework-mcp/node_modules/typescript/lib/lib.esnext.collection.d.ts +96 -0
- package/framework-mcp/node_modules/typescript/lib/lib.esnext.d.ts +29 -0
- package/framework-mcp/node_modules/typescript/lib/lib.esnext.decorators.d.ts +28 -0
- package/framework-mcp/node_modules/typescript/lib/lib.esnext.disposable.d.ts +193 -0
- package/framework-mcp/node_modules/typescript/lib/lib.esnext.error.d.ts +24 -0
- package/framework-mcp/node_modules/typescript/lib/lib.esnext.float16.d.ts +445 -0
- package/framework-mcp/node_modules/typescript/lib/lib.esnext.full.d.ts +24 -0
- package/framework-mcp/node_modules/typescript/lib/lib.esnext.intl.d.ts +21 -0
- package/framework-mcp/node_modules/typescript/lib/lib.esnext.iterator.d.ts +148 -0
- package/framework-mcp/node_modules/typescript/lib/lib.esnext.promise.d.ts +34 -0
- package/framework-mcp/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts +25 -0
- package/framework-mcp/node_modules/typescript/lib/lib.scripthost.d.ts +322 -0
- package/framework-mcp/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts +41 -0
- package/framework-mcp/node_modules/typescript/lib/lib.webworker.d.ts +13150 -0
- package/framework-mcp/node_modules/typescript/lib/lib.webworker.importscripts.d.ts +23 -0
- package/framework-mcp/node_modules/typescript/lib/lib.webworker.iterable.d.ts +340 -0
- package/framework-mcp/node_modules/typescript/lib/pl/diagnosticMessages.generated.json +2122 -0
- package/framework-mcp/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json +2122 -0
- package/framework-mcp/node_modules/typescript/lib/ru/diagnosticMessages.generated.json +2122 -0
- package/framework-mcp/node_modules/typescript/lib/tr/diagnosticMessages.generated.json +2122 -0
- package/framework-mcp/node_modules/typescript/lib/tsc.js +8 -0
- package/framework-mcp/node_modules/typescript/lib/tsserver.js +8 -0
- package/framework-mcp/node_modules/typescript/lib/tsserverlibrary.d.ts +17 -0
- package/framework-mcp/node_modules/typescript/lib/tsserverlibrary.js +21 -0
- package/framework-mcp/node_modules/typescript/lib/typesMap.json +497 -0
- package/framework-mcp/node_modules/typescript/lib/typescript.d.ts +11437 -0
- package/framework-mcp/node_modules/typescript/lib/typescript.js +200276 -0
- package/framework-mcp/node_modules/typescript/lib/typingsInstaller.js +8 -0
- package/framework-mcp/node_modules/typescript/lib/watchGuard.js +53 -0
- package/framework-mcp/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json +2122 -0
- package/framework-mcp/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json +2122 -0
- package/framework-mcp/node_modules/typescript/package.json +120 -0
- package/framework-mcp/node_modules/undici-types/LICENSE +21 -0
- package/framework-mcp/node_modules/undici-types/README.md +6 -0
- package/framework-mcp/node_modules/undici-types/agent.d.ts +31 -0
- package/framework-mcp/node_modules/undici-types/api.d.ts +43 -0
- package/framework-mcp/node_modules/undici-types/balanced-pool.d.ts +29 -0
- package/framework-mcp/node_modules/undici-types/cache.d.ts +36 -0
- package/framework-mcp/node_modules/undici-types/client.d.ts +108 -0
- package/framework-mcp/node_modules/undici-types/connector.d.ts +34 -0
- package/framework-mcp/node_modules/undici-types/content-type.d.ts +21 -0
- package/framework-mcp/node_modules/undici-types/cookies.d.ts +28 -0
- package/framework-mcp/node_modules/undici-types/diagnostics-channel.d.ts +66 -0
- package/framework-mcp/node_modules/undici-types/dispatcher.d.ts +256 -0
- package/framework-mcp/node_modules/undici-types/env-http-proxy-agent.d.ts +21 -0
- package/framework-mcp/node_modules/undici-types/errors.d.ts +149 -0
- package/framework-mcp/node_modules/undici-types/eventsource.d.ts +61 -0
- package/framework-mcp/node_modules/undici-types/fetch.d.ts +209 -0
- package/framework-mcp/node_modules/undici-types/file.d.ts +39 -0
- package/framework-mcp/node_modules/undici-types/filereader.d.ts +54 -0
- package/framework-mcp/node_modules/undici-types/formdata.d.ts +108 -0
- package/framework-mcp/node_modules/undici-types/global-dispatcher.d.ts +9 -0
- package/framework-mcp/node_modules/undici-types/global-origin.d.ts +7 -0
- package/framework-mcp/node_modules/undici-types/handlers.d.ts +15 -0
- package/framework-mcp/node_modules/undici-types/header.d.ts +4 -0
- package/framework-mcp/node_modules/undici-types/index.d.ts +71 -0
- package/framework-mcp/node_modules/undici-types/interceptors.d.ts +17 -0
- package/framework-mcp/node_modules/undici-types/mock-agent.d.ts +50 -0
- package/framework-mcp/node_modules/undici-types/mock-client.d.ts +25 -0
- package/framework-mcp/node_modules/undici-types/mock-errors.d.ts +12 -0
- package/framework-mcp/node_modules/undici-types/mock-interceptor.d.ts +93 -0
- package/framework-mcp/node_modules/undici-types/mock-pool.d.ts +25 -0
- package/framework-mcp/node_modules/undici-types/package.json +55 -0
- package/framework-mcp/node_modules/undici-types/patch.d.ts +33 -0
- package/framework-mcp/node_modules/undici-types/pool-stats.d.ts +19 -0
- package/framework-mcp/node_modules/undici-types/pool.d.ts +39 -0
- package/framework-mcp/node_modules/undici-types/proxy-agent.d.ts +28 -0
- package/framework-mcp/node_modules/undici-types/readable.d.ts +65 -0
- package/framework-mcp/node_modules/undici-types/retry-agent.d.ts +8 -0
- package/framework-mcp/node_modules/undici-types/retry-handler.d.ts +116 -0
- package/framework-mcp/node_modules/undici-types/util.d.ts +18 -0
- package/framework-mcp/node_modules/undici-types/webidl.d.ts +228 -0
- package/framework-mcp/node_modules/undici-types/websocket.d.ts +150 -0
- package/framework-mcp/package.json +1 -1
- package/framework-mcp/src/declarations.d.ts +3 -0
- package/framework-mcp/src/index.ts +300 -0
- package/package.json +3 -3
- package/src/cli/adapters.ts +2 -0
- package/src/cli/commands/contract.ts +40 -0
- package/src/cli/index.ts +6 -1
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
// These types are not exported, and are only used internally
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Take in an unknown value and return one that is of type T
|
|
5
|
+
*/
|
|
6
|
+
type Converter<T> = (object: unknown) => T
|
|
7
|
+
|
|
8
|
+
type SequenceConverter<T> = (object: unknown, iterable?: IterableIterator<T>) => T[]
|
|
9
|
+
|
|
10
|
+
type RecordConverter<K extends string, V> = (object: unknown) => Record<K, V>
|
|
11
|
+
|
|
12
|
+
interface ConvertToIntOpts {
|
|
13
|
+
clamp?: boolean
|
|
14
|
+
enforceRange?: boolean
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
interface WebidlErrors {
|
|
18
|
+
exception (opts: { header: string, message: string }): TypeError
|
|
19
|
+
/**
|
|
20
|
+
* @description Throw an error when conversion from one type to another has failed
|
|
21
|
+
*/
|
|
22
|
+
conversionFailed (opts: {
|
|
23
|
+
prefix: string
|
|
24
|
+
argument: string
|
|
25
|
+
types: string[]
|
|
26
|
+
}): TypeError
|
|
27
|
+
/**
|
|
28
|
+
* @description Throw an error when an invalid argument is provided
|
|
29
|
+
*/
|
|
30
|
+
invalidArgument (opts: {
|
|
31
|
+
prefix: string
|
|
32
|
+
value: string
|
|
33
|
+
type: string
|
|
34
|
+
}): TypeError
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
interface WebidlUtil {
|
|
38
|
+
/**
|
|
39
|
+
* @see https://tc39.es/ecma262/#sec-ecmascript-data-types-and-values
|
|
40
|
+
*/
|
|
41
|
+
Type (object: unknown):
|
|
42
|
+
| 'Undefined'
|
|
43
|
+
| 'Boolean'
|
|
44
|
+
| 'String'
|
|
45
|
+
| 'Symbol'
|
|
46
|
+
| 'Number'
|
|
47
|
+
| 'BigInt'
|
|
48
|
+
| 'Null'
|
|
49
|
+
| 'Object'
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @see https://webidl.spec.whatwg.org/#abstract-opdef-converttoint
|
|
53
|
+
*/
|
|
54
|
+
ConvertToInt (
|
|
55
|
+
V: unknown,
|
|
56
|
+
bitLength: number,
|
|
57
|
+
signedness: 'signed' | 'unsigned',
|
|
58
|
+
opts?: ConvertToIntOpts
|
|
59
|
+
): number
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* @see https://webidl.spec.whatwg.org/#abstract-opdef-converttoint
|
|
63
|
+
*/
|
|
64
|
+
IntegerPart (N: number): number
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Stringifies {@param V}
|
|
68
|
+
*/
|
|
69
|
+
Stringify (V: any): string
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Mark a value as uncloneable for Node.js.
|
|
73
|
+
* This is only effective in some newer Node.js versions.
|
|
74
|
+
*/
|
|
75
|
+
markAsUncloneable (V: any): void
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
interface WebidlConverters {
|
|
79
|
+
/**
|
|
80
|
+
* @see https://webidl.spec.whatwg.org/#es-DOMString
|
|
81
|
+
*/
|
|
82
|
+
DOMString (V: unknown, prefix: string, argument: string, opts?: {
|
|
83
|
+
legacyNullToEmptyString: boolean
|
|
84
|
+
}): string
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* @see https://webidl.spec.whatwg.org/#es-ByteString
|
|
88
|
+
*/
|
|
89
|
+
ByteString (V: unknown, prefix: string, argument: string): string
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* @see https://webidl.spec.whatwg.org/#es-USVString
|
|
93
|
+
*/
|
|
94
|
+
USVString (V: unknown): string
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* @see https://webidl.spec.whatwg.org/#es-boolean
|
|
98
|
+
*/
|
|
99
|
+
boolean (V: unknown): boolean
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* @see https://webidl.spec.whatwg.org/#es-any
|
|
103
|
+
*/
|
|
104
|
+
any <Value>(V: Value): Value
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* @see https://webidl.spec.whatwg.org/#es-long-long
|
|
108
|
+
*/
|
|
109
|
+
['long long'] (V: unknown): number
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* @see https://webidl.spec.whatwg.org/#es-unsigned-long-long
|
|
113
|
+
*/
|
|
114
|
+
['unsigned long long'] (V: unknown): number
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* @see https://webidl.spec.whatwg.org/#es-unsigned-long
|
|
118
|
+
*/
|
|
119
|
+
['unsigned long'] (V: unknown): number
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* @see https://webidl.spec.whatwg.org/#es-unsigned-short
|
|
123
|
+
*/
|
|
124
|
+
['unsigned short'] (V: unknown, opts?: ConvertToIntOpts): number
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* @see https://webidl.spec.whatwg.org/#idl-ArrayBuffer
|
|
128
|
+
*/
|
|
129
|
+
ArrayBuffer (V: unknown): ArrayBufferLike
|
|
130
|
+
ArrayBuffer (V: unknown, opts: { allowShared: false }): ArrayBuffer
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* @see https://webidl.spec.whatwg.org/#es-buffer-source-types
|
|
134
|
+
*/
|
|
135
|
+
TypedArray (
|
|
136
|
+
V: unknown,
|
|
137
|
+
TypedArray: NodeJS.TypedArray | ArrayBufferLike
|
|
138
|
+
): NodeJS.TypedArray | ArrayBufferLike
|
|
139
|
+
TypedArray (
|
|
140
|
+
V: unknown,
|
|
141
|
+
TypedArray: NodeJS.TypedArray | ArrayBufferLike,
|
|
142
|
+
opts?: { allowShared: false }
|
|
143
|
+
): NodeJS.TypedArray | ArrayBuffer
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* @see https://webidl.spec.whatwg.org/#es-buffer-source-types
|
|
147
|
+
*/
|
|
148
|
+
DataView (V: unknown, opts?: { allowShared: boolean }): DataView
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* @see https://webidl.spec.whatwg.org/#BufferSource
|
|
152
|
+
*/
|
|
153
|
+
BufferSource (
|
|
154
|
+
V: unknown,
|
|
155
|
+
opts?: { allowShared: boolean }
|
|
156
|
+
): NodeJS.TypedArray | ArrayBufferLike | DataView
|
|
157
|
+
|
|
158
|
+
['sequence<ByteString>']: SequenceConverter<string>
|
|
159
|
+
|
|
160
|
+
['sequence<sequence<ByteString>>']: SequenceConverter<string[]>
|
|
161
|
+
|
|
162
|
+
['record<ByteString, ByteString>']: RecordConverter<string, string>
|
|
163
|
+
|
|
164
|
+
[Key: string]: (...args: any[]) => unknown
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export interface Webidl {
|
|
168
|
+
errors: WebidlErrors
|
|
169
|
+
util: WebidlUtil
|
|
170
|
+
converters: WebidlConverters
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* @description Performs a brand-check on {@param V} to ensure it is a
|
|
174
|
+
* {@param cls} object.
|
|
175
|
+
*/
|
|
176
|
+
brandCheck <Interface>(V: unknown, cls: Interface, opts?: { strict?: boolean }): asserts V is Interface
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* @see https://webidl.spec.whatwg.org/#es-sequence
|
|
180
|
+
* @description Convert a value, V, to a WebIDL sequence type.
|
|
181
|
+
*/
|
|
182
|
+
sequenceConverter <Type>(C: Converter<Type>): SequenceConverter<Type>
|
|
183
|
+
|
|
184
|
+
illegalConstructor (): never
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* @see https://webidl.spec.whatwg.org/#es-to-record
|
|
188
|
+
* @description Convert a value, V, to a WebIDL record type.
|
|
189
|
+
*/
|
|
190
|
+
recordConverter <K extends string, V>(
|
|
191
|
+
keyConverter: Converter<K>,
|
|
192
|
+
valueConverter: Converter<V>
|
|
193
|
+
): RecordConverter<K, V>
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Similar to {@link Webidl.brandCheck} but allows skipping the check if third party
|
|
197
|
+
* interfaces are allowed.
|
|
198
|
+
*/
|
|
199
|
+
interfaceConverter <Interface>(cls: Interface): (
|
|
200
|
+
V: unknown,
|
|
201
|
+
opts?: { strict: boolean }
|
|
202
|
+
) => asserts V is typeof cls
|
|
203
|
+
|
|
204
|
+
// TODO(@KhafraDev): a type could likely be implemented that can infer the return type
|
|
205
|
+
// from the converters given?
|
|
206
|
+
/**
|
|
207
|
+
* Converts a value, V, to a WebIDL dictionary types. Allows limiting which keys are
|
|
208
|
+
* allowed, values allowed, optional and required keys. Auto converts the value to
|
|
209
|
+
* a type given a converter.
|
|
210
|
+
*/
|
|
211
|
+
dictionaryConverter (converters: {
|
|
212
|
+
key: string,
|
|
213
|
+
defaultValue?: () => unknown,
|
|
214
|
+
required?: boolean,
|
|
215
|
+
converter: (...args: unknown[]) => unknown,
|
|
216
|
+
allowedValues?: unknown[]
|
|
217
|
+
}[]): (V: unknown) => Record<string, unknown>
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* @see https://webidl.spec.whatwg.org/#idl-nullable-type
|
|
221
|
+
* @description allows a type, V, to be null
|
|
222
|
+
*/
|
|
223
|
+
nullableConverter <T>(
|
|
224
|
+
converter: Converter<T>
|
|
225
|
+
): (V: unknown) => ReturnType<typeof converter> | null
|
|
226
|
+
|
|
227
|
+
argumentLengthCheck (args: { length: number }, min: number, context: string): void
|
|
228
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
|
|
3
|
+
import type { Blob } from 'buffer'
|
|
4
|
+
import type { MessagePort } from 'worker_threads'
|
|
5
|
+
import {
|
|
6
|
+
EventInit,
|
|
7
|
+
EventListenerOptions,
|
|
8
|
+
AddEventListenerOptions,
|
|
9
|
+
EventListenerOrEventListenerObject
|
|
10
|
+
} from './patch'
|
|
11
|
+
import Dispatcher from './dispatcher'
|
|
12
|
+
import { HeadersInit } from './fetch'
|
|
13
|
+
|
|
14
|
+
export type BinaryType = 'blob' | 'arraybuffer'
|
|
15
|
+
|
|
16
|
+
interface WebSocketEventMap {
|
|
17
|
+
close: CloseEvent
|
|
18
|
+
error: ErrorEvent
|
|
19
|
+
message: MessageEvent
|
|
20
|
+
open: Event
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
interface WebSocket extends EventTarget {
|
|
24
|
+
binaryType: BinaryType
|
|
25
|
+
|
|
26
|
+
readonly bufferedAmount: number
|
|
27
|
+
readonly extensions: string
|
|
28
|
+
|
|
29
|
+
onclose: ((this: WebSocket, ev: WebSocketEventMap['close']) => any) | null
|
|
30
|
+
onerror: ((this: WebSocket, ev: WebSocketEventMap['error']) => any) | null
|
|
31
|
+
onmessage: ((this: WebSocket, ev: WebSocketEventMap['message']) => any) | null
|
|
32
|
+
onopen: ((this: WebSocket, ev: WebSocketEventMap['open']) => any) | null
|
|
33
|
+
|
|
34
|
+
readonly protocol: string
|
|
35
|
+
readonly readyState: number
|
|
36
|
+
readonly url: string
|
|
37
|
+
|
|
38
|
+
close(code?: number, reason?: string): void
|
|
39
|
+
send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void
|
|
40
|
+
|
|
41
|
+
readonly CLOSED: number
|
|
42
|
+
readonly CLOSING: number
|
|
43
|
+
readonly CONNECTING: number
|
|
44
|
+
readonly OPEN: number
|
|
45
|
+
|
|
46
|
+
addEventListener<K extends keyof WebSocketEventMap>(
|
|
47
|
+
type: K,
|
|
48
|
+
listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any,
|
|
49
|
+
options?: boolean | AddEventListenerOptions
|
|
50
|
+
): void
|
|
51
|
+
addEventListener(
|
|
52
|
+
type: string,
|
|
53
|
+
listener: EventListenerOrEventListenerObject,
|
|
54
|
+
options?: boolean | AddEventListenerOptions
|
|
55
|
+
): void
|
|
56
|
+
removeEventListener<K extends keyof WebSocketEventMap>(
|
|
57
|
+
type: K,
|
|
58
|
+
listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any,
|
|
59
|
+
options?: boolean | EventListenerOptions
|
|
60
|
+
): void
|
|
61
|
+
removeEventListener(
|
|
62
|
+
type: string,
|
|
63
|
+
listener: EventListenerOrEventListenerObject,
|
|
64
|
+
options?: boolean | EventListenerOptions
|
|
65
|
+
): void
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export declare const WebSocket: {
|
|
69
|
+
prototype: WebSocket
|
|
70
|
+
new (url: string | URL, protocols?: string | string[] | WebSocketInit): WebSocket
|
|
71
|
+
readonly CLOSED: number
|
|
72
|
+
readonly CLOSING: number
|
|
73
|
+
readonly CONNECTING: number
|
|
74
|
+
readonly OPEN: number
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
interface CloseEventInit extends EventInit {
|
|
78
|
+
code?: number
|
|
79
|
+
reason?: string
|
|
80
|
+
wasClean?: boolean
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
interface CloseEvent extends Event {
|
|
84
|
+
readonly code: number
|
|
85
|
+
readonly reason: string
|
|
86
|
+
readonly wasClean: boolean
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export declare const CloseEvent: {
|
|
90
|
+
prototype: CloseEvent
|
|
91
|
+
new (type: string, eventInitDict?: CloseEventInit): CloseEvent
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
interface MessageEventInit<T = any> extends EventInit {
|
|
95
|
+
data?: T
|
|
96
|
+
lastEventId?: string
|
|
97
|
+
origin?: string
|
|
98
|
+
ports?: (typeof MessagePort)[]
|
|
99
|
+
source?: typeof MessagePort | null
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
interface MessageEvent<T = any> extends Event {
|
|
103
|
+
readonly data: T
|
|
104
|
+
readonly lastEventId: string
|
|
105
|
+
readonly origin: string
|
|
106
|
+
readonly ports: ReadonlyArray<typeof MessagePort>
|
|
107
|
+
readonly source: typeof MessagePort | null
|
|
108
|
+
initMessageEvent(
|
|
109
|
+
type: string,
|
|
110
|
+
bubbles?: boolean,
|
|
111
|
+
cancelable?: boolean,
|
|
112
|
+
data?: any,
|
|
113
|
+
origin?: string,
|
|
114
|
+
lastEventId?: string,
|
|
115
|
+
source?: typeof MessagePort | null,
|
|
116
|
+
ports?: (typeof MessagePort)[]
|
|
117
|
+
): void;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export declare const MessageEvent: {
|
|
121
|
+
prototype: MessageEvent
|
|
122
|
+
new<T>(type: string, eventInitDict?: MessageEventInit<T>): MessageEvent<T>
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
interface ErrorEventInit extends EventInit {
|
|
126
|
+
message?: string
|
|
127
|
+
filename?: string
|
|
128
|
+
lineno?: number
|
|
129
|
+
colno?: number
|
|
130
|
+
error?: any
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
interface ErrorEvent extends Event {
|
|
134
|
+
readonly message: string
|
|
135
|
+
readonly filename: string
|
|
136
|
+
readonly lineno: number
|
|
137
|
+
readonly colno: number
|
|
138
|
+
readonly error: any
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export declare const ErrorEvent: {
|
|
142
|
+
prototype: ErrorEvent
|
|
143
|
+
new (type: string, eventInitDict?: ErrorEventInit): ErrorEvent
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
interface WebSocketInit {
|
|
147
|
+
protocols?: string | string[],
|
|
148
|
+
dispatcher?: Dispatcher,
|
|
149
|
+
headers?: HeadersInit
|
|
150
|
+
}
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
2
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
|
+
import {
|
|
4
|
+
CallToolRequestSchema,
|
|
5
|
+
ListToolsRequestSchema,
|
|
6
|
+
} from "@modelcontextprotocol/sdk/types.js";
|
|
7
|
+
import fs from "fs";
|
|
8
|
+
import path from "path";
|
|
9
|
+
import { execSync } from "child_process";
|
|
10
|
+
|
|
11
|
+
const server = new Server(
|
|
12
|
+
{
|
|
13
|
+
name: "agent-enderun-mcp",
|
|
14
|
+
version: "0.9.3",
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
capabilities: {
|
|
18
|
+
tools: {},
|
|
19
|
+
},
|
|
20
|
+
}
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
const TOOLS: any[] = [
|
|
24
|
+
{
|
|
25
|
+
name: "read_file",
|
|
26
|
+
description: "Read the content of a file within the project.",
|
|
27
|
+
inputSchema: {
|
|
28
|
+
type: "object",
|
|
29
|
+
properties: {
|
|
30
|
+
path: { type: "string", description: "Path to the file relative to project root" },
|
|
31
|
+
},
|
|
32
|
+
required: ["path"],
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: "write_file",
|
|
37
|
+
description: "Write content to a file. Creates directories if missing.",
|
|
38
|
+
inputSchema: {
|
|
39
|
+
type: "object",
|
|
40
|
+
properties: {
|
|
41
|
+
path: { type: "string", description: "Path to the file relative to project root" },
|
|
42
|
+
content: { type: "string", description: "Complete content of the file" },
|
|
43
|
+
},
|
|
44
|
+
required: ["path", "content"],
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: "replace_text",
|
|
49
|
+
description: "Surgically replace a string in a file with another string.",
|
|
50
|
+
inputSchema: {
|
|
51
|
+
type: "object",
|
|
52
|
+
properties: {
|
|
53
|
+
path: { type: "string", description: "Path to the file" },
|
|
54
|
+
oldText: { type: "string", description: "The exact text to find" },
|
|
55
|
+
newText: { type: "string", description: "The text to replace it with" },
|
|
56
|
+
},
|
|
57
|
+
required: ["path", "oldText", "newText"],
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: "patch_file",
|
|
62
|
+
description: "Safely update a file by replacing a specific line range with new content.",
|
|
63
|
+
inputSchema: {
|
|
64
|
+
type: "object",
|
|
65
|
+
properties: {
|
|
66
|
+
path: { type: "string", description: "Path to the file" },
|
|
67
|
+
startLine: { type: "number", description: "Starting line number (1-indexed)" },
|
|
68
|
+
endLine: { type: "number", description: "Ending line number (inclusive)" },
|
|
69
|
+
newContent: { type: "string", description: "The new lines to insert" },
|
|
70
|
+
},
|
|
71
|
+
required: ["path", "startLine", "endLine", "newContent"],
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: "get_framework_status",
|
|
76
|
+
description: "Get the current project phase, active traces, and agent states.",
|
|
77
|
+
inputSchema: { type: "object", properties: {} },
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: "update_project_memory",
|
|
81
|
+
description: "Update a specific section in PROJECT_MEMORY.md.",
|
|
82
|
+
inputSchema: {
|
|
83
|
+
type: "object",
|
|
84
|
+
properties: {
|
|
85
|
+
section: { type: "string", description: "Section name (e.g., HISTORY, ACTIVE TASKS)" },
|
|
86
|
+
content: { type: "string", description: "Markdown content to append or set" },
|
|
87
|
+
},
|
|
88
|
+
required: ["section", "content"],
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: "orchestrate_loop",
|
|
93
|
+
description: "Process the pending Hermes messages and trigger dynamic state transitions.",
|
|
94
|
+
inputSchema: { type: "object", properties: {} },
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: "send_agent_message",
|
|
98
|
+
description: "Send a Hermes protocol message to another agent.",
|
|
99
|
+
inputSchema: {
|
|
100
|
+
type: "object",
|
|
101
|
+
properties: {
|
|
102
|
+
to: { type: "string", description: "Target agent (e.g., @backend, @qa)" },
|
|
103
|
+
category: { type: "string", enum: ["ACTION", "DELEGATION", "INFO", "ALERT"] },
|
|
104
|
+
content: { type: "string", description: "Message content" },
|
|
105
|
+
traceId: { type: "string", description: "Active Trace ID" },
|
|
106
|
+
},
|
|
107
|
+
required: ["to", "category", "content", "traceId"],
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
name: "log_agent_action",
|
|
112
|
+
description: "Log an agent action to the framework logs.",
|
|
113
|
+
inputSchema: {
|
|
114
|
+
type: "object",
|
|
115
|
+
properties: {
|
|
116
|
+
agent: { type: "string", description: "The agent name (e.g., @manager, @backend)" },
|
|
117
|
+
action: { type: "string", description: "Action type or name" },
|
|
118
|
+
traceId: { type: "string", description: "The active Trace ID" },
|
|
119
|
+
status: { type: "string", enum: ["SUCCESS", "FAILURE"], description: "The status of the action" },
|
|
120
|
+
summary: { type: "string", description: "Brief description of the action taken" },
|
|
121
|
+
findings: { type: "array", items: { type: "string" }, description: "Optional findings or details" }
|
|
122
|
+
},
|
|
123
|
+
required: ["agent", "action", "traceId", "status", "summary"]
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: "update_contract_hash",
|
|
128
|
+
description: "Re-generate and synchronize the backend contract SHA-256 hash.",
|
|
129
|
+
inputSchema: { type: "object", properties: {} }
|
|
130
|
+
}
|
|
131
|
+
];
|
|
132
|
+
|
|
133
|
+
server.onRequest(ListToolsRequestSchema, async () => {
|
|
134
|
+
return { tools: TOOLS };
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
server.onRequest(CallToolRequestSchema, async (request: any) => {
|
|
138
|
+
const { name, arguments: args } = request.params as { name: string, arguments?: Record<string, unknown> };
|
|
139
|
+
|
|
140
|
+
const projectRoot = process.cwd();
|
|
141
|
+
|
|
142
|
+
try {
|
|
143
|
+
switch (name) {
|
|
144
|
+
case "read_file": {
|
|
145
|
+
const filePath = path.join(projectRoot, args?.path as string);
|
|
146
|
+
const content = fs.readFileSync(filePath, "utf8");
|
|
147
|
+
return { content: [{ type: "text", text: content }] };
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
case "write_file": {
|
|
151
|
+
const filePath = path.join(projectRoot, args?.path as string);
|
|
152
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
153
|
+
fs.writeFileSync(filePath, args?.content as string);
|
|
154
|
+
return { content: [{ type: "text", text: `✅ File written: ${args?.path}` }] };
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
case "replace_text": {
|
|
158
|
+
const filePath = path.join(projectRoot, args?.path as string);
|
|
159
|
+
let content = fs.readFileSync(filePath, "utf8");
|
|
160
|
+
const oldText = args?.oldText as string;
|
|
161
|
+
const newText = args?.newText as string;
|
|
162
|
+
|
|
163
|
+
if (!content.includes(oldText)) {
|
|
164
|
+
throw new Error(`Text not found in file: ${oldText}`);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
content = content.replace(oldText, newText);
|
|
168
|
+
fs.writeFileSync(filePath, content);
|
|
169
|
+
return { content: [{ type: "text", text: `✅ Surgical edit successful in ${args?.path}` }] };
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
case "patch_file": {
|
|
173
|
+
const filePath = path.join(projectRoot, args?.path as string);
|
|
174
|
+
const lines = fs.readFileSync(filePath, "utf8").split("\n");
|
|
175
|
+
const start = (args?.startLine as number) - 1;
|
|
176
|
+
const end = (args?.endLine as number);
|
|
177
|
+
const newContent = (args?.newContent as string).split("\n");
|
|
178
|
+
|
|
179
|
+
if (start < 0 || start > lines.length) throw new Error("Invalid start line.");
|
|
180
|
+
|
|
181
|
+
lines.splice(start, end - start, ...newContent);
|
|
182
|
+
fs.writeFileSync(filePath, lines.join("\n"));
|
|
183
|
+
return { content: [{ type: "text", text: `✅ File patched successfully: ${args?.path}` }] };
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
case "get_framework_status": {
|
|
187
|
+
const output = execSync("npx agent-enderun status").toString();
|
|
188
|
+
return { content: [{ type: "text", text: output }] };
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
case "update_project_memory": {
|
|
192
|
+
const section = args?.section as string;
|
|
193
|
+
const content = args?.content as string;
|
|
194
|
+
// Escape quotes for shell
|
|
195
|
+
const safeContent = content.replace(/"/g, "\\\"");
|
|
196
|
+
execSync(`npx agent-enderun update_project_memory "${section}" "${safeContent}"`);
|
|
197
|
+
return { content: [{ type: "text", text: `✅ Section ${section} updated.` }] };
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
case "orchestrate_loop": {
|
|
201
|
+
const output = execSync("npx agent-enderun orchestrate").toString();
|
|
202
|
+
return { content: [{ type: "text", text: output }] };
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
case "send_agent_message": {
|
|
206
|
+
interface SendAgentMessageArgs {
|
|
207
|
+
to: string;
|
|
208
|
+
category: "ACTION" | "DELEGATION" | "INFO" | "ALERT";
|
|
209
|
+
content: string;
|
|
210
|
+
traceId: string;
|
|
211
|
+
}
|
|
212
|
+
const { to, category, content, traceId } = args as any as SendAgentMessageArgs;
|
|
213
|
+
const frameworkDir = fs.existsSync(path.join(projectRoot, ".enderun")) ? ".enderun" : ".gemini";
|
|
214
|
+
const messagePath = path.join(projectRoot, frameworkDir, "messages", `${to.replace("@", "")}.json`);
|
|
215
|
+
|
|
216
|
+
const message = {
|
|
217
|
+
timestamp: new Date().toISOString(),
|
|
218
|
+
from: "@mcp",
|
|
219
|
+
to,
|
|
220
|
+
category,
|
|
221
|
+
traceId,
|
|
222
|
+
content,
|
|
223
|
+
status: "PENDING"
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
fs.mkdirSync(path.dirname(messagePath), { recursive: true });
|
|
227
|
+
fs.appendFileSync(messagePath, JSON.stringify(message) + "\n");
|
|
228
|
+
|
|
229
|
+
return { content: [{ type: "text", text: `✅ Message sent to ${to}` }] };
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
case "log_agent_action": {
|
|
233
|
+
interface LogAgentActionArgs {
|
|
234
|
+
agent: string;
|
|
235
|
+
action: string;
|
|
236
|
+
traceId: string;
|
|
237
|
+
status: "SUCCESS" | "FAILURE";
|
|
238
|
+
summary: string;
|
|
239
|
+
findings?: string[];
|
|
240
|
+
}
|
|
241
|
+
const { agent, action, traceId, status, summary, findings } = args as any as LogAgentActionArgs;
|
|
242
|
+
|
|
243
|
+
const candidates = [
|
|
244
|
+
".gemini/antigravity",
|
|
245
|
+
".gemini/antigravity-cli",
|
|
246
|
+
".gemini",
|
|
247
|
+
".claude",
|
|
248
|
+
".agent",
|
|
249
|
+
".enderun",
|
|
250
|
+
];
|
|
251
|
+
let frameworkDir = ".enderun";
|
|
252
|
+
for (const c of candidates) {
|
|
253
|
+
if (fs.existsSync(path.join(projectRoot, c))) {
|
|
254
|
+
frameworkDir = c;
|
|
255
|
+
break;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
const agentName = agent.replace("@", "");
|
|
260
|
+
const logPath = path.join(projectRoot, frameworkDir, "logs", `${agentName}.json`);
|
|
261
|
+
|
|
262
|
+
const logEntry = {
|
|
263
|
+
timestamp: new Date().toISOString(),
|
|
264
|
+
agent,
|
|
265
|
+
action,
|
|
266
|
+
requestId: traceId,
|
|
267
|
+
status,
|
|
268
|
+
summary,
|
|
269
|
+
findings: findings || []
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
fs.mkdirSync(path.dirname(logPath), { recursive: true });
|
|
273
|
+
fs.appendFileSync(logPath, JSON.stringify(logEntry) + "\n");
|
|
274
|
+
|
|
275
|
+
return { content: [{ type: "text", text: `✅ Action logged for ${agent} to ${path.join(frameworkDir, "logs", `${agentName}.json`)}` }] };
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
case "update_contract_hash": {
|
|
279
|
+
const output = execSync("npx agent-enderun update-contract").toString();
|
|
280
|
+
return { content: [{ type: "text", text: output }] };
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
default:
|
|
284
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
285
|
+
}
|
|
286
|
+
} catch (error: unknown) {
|
|
287
|
+
const message = error instanceof Error ? error.message : "Unknown error occurred";
|
|
288
|
+
return {
|
|
289
|
+
isError: true,
|
|
290
|
+
content: [{ type: "text", text: message }],
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
async function run() {
|
|
296
|
+
const transport = new StdioServerTransport();
|
|
297
|
+
await server.connect(transport);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
run().catch(console.error);
|