mongo.do 0.1.0 → 0.1.1
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/dist/cli/index.d.ts +1 -15
- package/dist/cli/index.js +4083 -196
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.ts +2740 -20
- package/dist/index.js +9375 -27
- package/dist/index.js.map +1 -1
- package/dist/worker-entrypoint-BEW23Gmp.d.ts +1331 -0
- package/dist/worker.d.ts +6 -5
- package/dist/worker.js +5477 -18
- package/dist/worker.js.map +1 -1
- package/package.json +3 -2
- package/dist/agentfs/adapters/anthropic.d.ts +0 -176
- package/dist/agentfs/adapters/anthropic.d.ts.map +0 -1
- package/dist/agentfs/adapters/anthropic.js +0 -629
- package/dist/agentfs/adapters/anthropic.js.map +0 -1
- package/dist/agentfs/adapters/index.d.ts +0 -21
- package/dist/agentfs/adapters/index.d.ts.map +0 -1
- package/dist/agentfs/adapters/index.js +0 -23
- package/dist/agentfs/adapters/index.js.map +0 -1
- package/dist/agentfs/adapters/vercel.d.ts +0 -260
- package/dist/agentfs/adapters/vercel.d.ts.map +0 -1
- package/dist/agentfs/adapters/vercel.js +0 -288
- package/dist/agentfs/adapters/vercel.js.map +0 -1
- package/dist/agentfs/glob.d.ts +0 -116
- package/dist/agentfs/glob.d.ts.map +0 -1
- package/dist/agentfs/glob.js +0 -270
- package/dist/agentfs/glob.js.map +0 -1
- package/dist/agentfs/grep.d.ts +0 -83
- package/dist/agentfs/grep.d.ts.map +0 -1
- package/dist/agentfs/grep.js +0 -193
- package/dist/agentfs/grep.js.map +0 -1
- package/dist/agentfs/index.d.ts +0 -22
- package/dist/agentfs/index.d.ts.map +0 -1
- package/dist/agentfs/index.js +0 -18
- package/dist/agentfs/index.js.map +0 -1
- package/dist/agentfs/kv-store.d.ts +0 -128
- package/dist/agentfs/kv-store.d.ts.map +0 -1
- package/dist/agentfs/kv-store.js +0 -227
- package/dist/agentfs/kv-store.js.map +0 -1
- package/dist/agentfs/mondo-agent.d.ts +0 -255
- package/dist/agentfs/mondo-agent.d.ts.map +0 -1
- package/dist/agentfs/mondo-agent.js +0 -879
- package/dist/agentfs/mondo-agent.js.map +0 -1
- package/dist/agentfs/toolcalls.d.ts +0 -130
- package/dist/agentfs/toolcalls.d.ts.map +0 -1
- package/dist/agentfs/toolcalls.js +0 -178
- package/dist/agentfs/toolcalls.js.map +0 -1
- package/dist/agentfs/types.d.ts +0 -171
- package/dist/agentfs/types.d.ts.map +0 -1
- package/dist/agentfs/types.js +0 -7
- package/dist/agentfs/types.js.map +0 -1
- package/dist/agentfs/vfs.d.ts +0 -249
- package/dist/agentfs/vfs.d.ts.map +0 -1
- package/dist/agentfs/vfs.js +0 -469
- package/dist/agentfs/vfs.js.map +0 -1
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/mcp.d.ts +0 -119
- package/dist/cli/mcp.d.ts.map +0 -1
- package/dist/cli/mcp.js +0 -418
- package/dist/cli/mcp.js.map +0 -1
- package/dist/cli/server.d.ts +0 -179
- package/dist/cli/server.d.ts.map +0 -1
- package/dist/cli/server.js +0 -441
- package/dist/cli/server.js.map +0 -1
- package/dist/client/Collection.d.ts +0 -199
- package/dist/client/Collection.d.ts.map +0 -1
- package/dist/client/Collection.js +0 -256
- package/dist/client/Collection.js.map +0 -1
- package/dist/client/Database.d.ts +0 -68
- package/dist/client/Database.d.ts.map +0 -1
- package/dist/client/Database.js +0 -105
- package/dist/client/Database.js.map +0 -1
- package/dist/client/MongoClient.d.ts +0 -165
- package/dist/client/MongoClient.d.ts.map +0 -1
- package/dist/client/MongoClient.js +0 -307
- package/dist/client/MongoClient.js.map +0 -1
- package/dist/client/aggregation-cursor.d.ts +0 -210
- package/dist/client/aggregation-cursor.d.ts.map +0 -1
- package/dist/client/aggregation-cursor.js +0 -509
- package/dist/client/aggregation-cursor.js.map +0 -1
- package/dist/client/bulk-write.d.ts +0 -216
- package/dist/client/bulk-write.d.ts.map +0 -1
- package/dist/client/bulk-write.js +0 -63
- package/dist/client/bulk-write.js.map +0 -1
- package/dist/client/change-stream.d.ts +0 -245
- package/dist/client/change-stream.d.ts.map +0 -1
- package/dist/client/change-stream.js +0 -429
- package/dist/client/change-stream.js.map +0 -1
- package/dist/client/cursor.d.ts +0 -85
- package/dist/client/cursor.d.ts.map +0 -1
- package/dist/client/cursor.js +0 -156
- package/dist/client/cursor.js.map +0 -1
- package/dist/client/http-cursor.d.ts +0 -233
- package/dist/client/http-cursor.d.ts.map +0 -1
- package/dist/client/http-cursor.js +0 -496
- package/dist/client/http-cursor.js.map +0 -1
- package/dist/client/index.d.ts +0 -18
- package/dist/client/index.d.ts.map +0 -1
- package/dist/client/index.js +0 -24
- package/dist/client/index.js.map +0 -1
- package/dist/client/mongo-client.d.ts +0 -60
- package/dist/client/mongo-client.d.ts.map +0 -1
- package/dist/client/mongo-client.js +0 -190
- package/dist/client/mongo-client.js.map +0 -1
- package/dist/client/mongo-collection.d.ts +0 -359
- package/dist/client/mongo-collection.d.ts.map +0 -1
- package/dist/client/mongo-collection.js +0 -1641
- package/dist/client/mongo-collection.js.map +0 -1
- package/dist/client/mongo-cursor.d.ts +0 -257
- package/dist/client/mongo-cursor.d.ts.map +0 -1
- package/dist/client/mongo-cursor.js +0 -621
- package/dist/client/mongo-cursor.js.map +0 -1
- package/dist/client/mongo-database.d.ts +0 -88
- package/dist/client/mongo-database.d.ts.map +0 -1
- package/dist/client/mongo-database.js +0 -139
- package/dist/client/mongo-database.js.map +0 -1
- package/dist/client/session.d.ts +0 -210
- package/dist/client/session.d.ts.map +0 -1
- package/dist/client/session.js +0 -326
- package/dist/client/session.js.map +0 -1
- package/dist/durable-object/index-manager.d.ts +0 -173
- package/dist/durable-object/index-manager.d.ts.map +0 -1
- package/dist/durable-object/index-manager.js +0 -764
- package/dist/durable-object/index-manager.js.map +0 -1
- package/dist/durable-object/index.d.ts +0 -12
- package/dist/durable-object/index.d.ts.map +0 -1
- package/dist/durable-object/index.js +0 -8
- package/dist/durable-object/index.js.map +0 -1
- package/dist/durable-object/mcp-handler.d.ts +0 -52
- package/dist/durable-object/mcp-handler.d.ts.map +0 -1
- package/dist/durable-object/mcp-handler.js +0 -186
- package/dist/durable-object/mcp-handler.js.map +0 -1
- package/dist/durable-object/migrations.d.ts +0 -40
- package/dist/durable-object/migrations.d.ts.map +0 -1
- package/dist/durable-object/migrations.js +0 -121
- package/dist/durable-object/migrations.js.map +0 -1
- package/dist/durable-object/mondo-database.d.ts +0 -148
- package/dist/durable-object/mondo-database.d.ts.map +0 -1
- package/dist/durable-object/mondo-database.js +0 -621
- package/dist/durable-object/mondo-database.js.map +0 -1
- package/dist/durable-object/schema.d.ts +0 -192
- package/dist/durable-object/schema.d.ts.map +0 -1
- package/dist/durable-object/schema.js +0 -186
- package/dist/durable-object/schema.js.map +0 -1
- package/dist/embedding/document-serializer.d.ts +0 -118
- package/dist/embedding/document-serializer.d.ts.map +0 -1
- package/dist/embedding/document-serializer.js +0 -339
- package/dist/embedding/document-serializer.js.map +0 -1
- package/dist/embedding/embedding-manager.d.ts +0 -136
- package/dist/embedding/embedding-manager.d.ts.map +0 -1
- package/dist/embedding/embedding-manager.js +0 -176
- package/dist/embedding/embedding-manager.js.map +0 -1
- package/dist/embedding/index.d.ts +0 -9
- package/dist/embedding/index.d.ts.map +0 -1
- package/dist/embedding/index.js +0 -9
- package/dist/embedding/index.js.map +0 -1
- package/dist/executor/aggregation-executor.d.ts +0 -93
- package/dist/executor/aggregation-executor.d.ts.map +0 -1
- package/dist/executor/aggregation-executor.js +0 -275
- package/dist/executor/aggregation-executor.js.map +0 -1
- package/dist/executor/function-executor.d.ts +0 -39
- package/dist/executor/function-executor.d.ts.map +0 -1
- package/dist/executor/function-executor.js +0 -168
- package/dist/executor/function-executor.js.map +0 -1
- package/dist/executor/index.d.ts +0 -4
- package/dist/executor/index.d.ts.map +0 -1
- package/dist/executor/index.js +0 -4
- package/dist/executor/index.js.map +0 -1
- package/dist/executor/vector-search-executor.d.ts +0 -71
- package/dist/executor/vector-search-executor.d.ts.map +0 -1
- package/dist/executor/vector-search-executor.js +0 -113
- package/dist/executor/vector-search-executor.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/mcp/adapters/anthropic-adapter.d.ts +0 -256
- package/dist/mcp/adapters/anthropic-adapter.d.ts.map +0 -1
- package/dist/mcp/adapters/anthropic-adapter.js +0 -409
- package/dist/mcp/adapters/anthropic-adapter.js.map +0 -1
- package/dist/mcp/adapters/base-adapter.d.ts +0 -164
- package/dist/mcp/adapters/base-adapter.d.ts.map +0 -1
- package/dist/mcp/adapters/base-adapter.js +0 -277
- package/dist/mcp/adapters/base-adapter.js.map +0 -1
- package/dist/mcp/adapters/errors.d.ts +0 -173
- package/dist/mcp/adapters/errors.d.ts.map +0 -1
- package/dist/mcp/adapters/errors.js +0 -305
- package/dist/mcp/adapters/errors.js.map +0 -1
- package/dist/mcp/adapters/index.d.ts +0 -65
- package/dist/mcp/adapters/index.d.ts.map +0 -1
- package/dist/mcp/adapters/index.js +0 -92
- package/dist/mcp/adapters/index.js.map +0 -1
- package/dist/mcp/adapters/streaming.d.ts +0 -200
- package/dist/mcp/adapters/streaming.d.ts.map +0 -1
- package/dist/mcp/adapters/streaming.js +0 -381
- package/dist/mcp/adapters/streaming.js.map +0 -1
- package/dist/mcp/adapters/vercel-adapter.d.ts +0 -321
- package/dist/mcp/adapters/vercel-adapter.d.ts.map +0 -1
- package/dist/mcp/adapters/vercel-adapter.js +0 -487
- package/dist/mcp/adapters/vercel-adapter.js.map +0 -1
- package/dist/mcp/agent.d.ts +0 -192
- package/dist/mcp/agent.d.ts.map +0 -1
- package/dist/mcp/agent.js +0 -338
- package/dist/mcp/agent.js.map +0 -1
- package/dist/mcp/cli.d.ts +0 -71
- package/dist/mcp/cli.d.ts.map +0 -1
- package/dist/mcp/cli.js +0 -218
- package/dist/mcp/cli.js.map +0 -1
- package/dist/mcp/index.d.ts +0 -15
- package/dist/mcp/index.d.ts.map +0 -1
- package/dist/mcp/index.js +0 -20
- package/dist/mcp/index.js.map +0 -1
- package/dist/mcp/sandbox/database-proxy.d.ts +0 -118
- package/dist/mcp/sandbox/database-proxy.d.ts.map +0 -1
- package/dist/mcp/sandbox/database-proxy.js +0 -154
- package/dist/mcp/sandbox/database-proxy.js.map +0 -1
- package/dist/mcp/sandbox/index.d.ts +0 -8
- package/dist/mcp/sandbox/index.d.ts.map +0 -1
- package/dist/mcp/sandbox/index.js +0 -7
- package/dist/mcp/sandbox/index.js.map +0 -1
- package/dist/mcp/sandbox/miniflare-evaluator.d.ts +0 -72
- package/dist/mcp/sandbox/miniflare-evaluator.d.ts.map +0 -1
- package/dist/mcp/sandbox/miniflare-evaluator.js +0 -379
- package/dist/mcp/sandbox/miniflare-evaluator.js.map +0 -1
- package/dist/mcp/sandbox/template.d.ts +0 -48
- package/dist/mcp/sandbox/template.d.ts.map +0 -1
- package/dist/mcp/sandbox/template.js +0 -147
- package/dist/mcp/sandbox/template.js.map +0 -1
- package/dist/mcp/sandbox/worker-evaluator.d.ts +0 -160
- package/dist/mcp/sandbox/worker-evaluator.d.ts.map +0 -1
- package/dist/mcp/sandbox/worker-evaluator.js +0 -217
- package/dist/mcp/sandbox/worker-evaluator.js.map +0 -1
- package/dist/mcp/server.d.ts +0 -75
- package/dist/mcp/server.d.ts.map +0 -1
- package/dist/mcp/server.js +0 -278
- package/dist/mcp/server.js.map +0 -1
- package/dist/mcp/tool-call-auditor.d.ts +0 -188
- package/dist/mcp/tool-call-auditor.d.ts.map +0 -1
- package/dist/mcp/tool-call-auditor.js +0 -198
- package/dist/mcp/tool-call-auditor.js.map +0 -1
- package/dist/mcp/tools/do.d.ts +0 -51
- package/dist/mcp/tools/do.d.ts.map +0 -1
- package/dist/mcp/tools/do.js +0 -113
- package/dist/mcp/tools/do.js.map +0 -1
- package/dist/mcp/tools/fetch.d.ts +0 -43
- package/dist/mcp/tools/fetch.d.ts.map +0 -1
- package/dist/mcp/tools/fetch.js +0 -127
- package/dist/mcp/tools/fetch.js.map +0 -1
- package/dist/mcp/tools/index.d.ts +0 -9
- package/dist/mcp/tools/index.d.ts.map +0 -1
- package/dist/mcp/tools/index.js +0 -9
- package/dist/mcp/tools/index.js.map +0 -1
- package/dist/mcp/tools/search.d.ts +0 -60
- package/dist/mcp/tools/search.d.ts.map +0 -1
- package/dist/mcp/tools/search.js +0 -278
- package/dist/mcp/tools/search.js.map +0 -1
- package/dist/mcp/transport/http.d.ts +0 -144
- package/dist/mcp/transport/http.d.ts.map +0 -1
- package/dist/mcp/transport/http.js +0 -545
- package/dist/mcp/transport/http.js.map +0 -1
- package/dist/mcp/transport/index.d.ts +0 -10
- package/dist/mcp/transport/index.d.ts.map +0 -1
- package/dist/mcp/transport/index.js +0 -12
- package/dist/mcp/transport/index.js.map +0 -1
- package/dist/mcp/transport/stdio.d.ts +0 -132
- package/dist/mcp/transport/stdio.d.ts.map +0 -1
- package/dist/mcp/transport/stdio.js +0 -466
- package/dist/mcp/transport/stdio.js.map +0 -1
- package/dist/mcp/types.d.ts +0 -476
- package/dist/mcp/types.d.ts.map +0 -1
- package/dist/mcp/types.js +0 -178
- package/dist/mcp/types.js.map +0 -1
- package/dist/olap/cdc/cdc-buffer.d.ts +0 -92
- package/dist/olap/cdc/cdc-buffer.d.ts.map +0 -1
- package/dist/olap/cdc/cdc-buffer.js +0 -146
- package/dist/olap/cdc/cdc-buffer.js.map +0 -1
- package/dist/olap/cdc/cdc-emitter.d.ts +0 -118
- package/dist/olap/cdc/cdc-emitter.d.ts.map +0 -1
- package/dist/olap/cdc/cdc-emitter.js +0 -217
- package/dist/olap/cdc/cdc-emitter.js.map +0 -1
- package/dist/olap/cdc/cdc-schema.d.ts +0 -119
- package/dist/olap/cdc/cdc-schema.d.ts.map +0 -1
- package/dist/olap/cdc/cdc-schema.js +0 -253
- package/dist/olap/cdc/cdc-schema.js.map +0 -1
- package/dist/olap/cdc/index.d.ts +0 -10
- package/dist/olap/cdc/index.d.ts.map +0 -1
- package/dist/olap/cdc/index.js +0 -10
- package/dist/olap/cdc/index.js.map +0 -1
- package/dist/olap/clickhouse/iceberg.d.ts +0 -164
- package/dist/olap/clickhouse/iceberg.d.ts.map +0 -1
- package/dist/olap/clickhouse/iceberg.js +0 -138
- package/dist/olap/clickhouse/iceberg.js.map +0 -1
- package/dist/olap/clickhouse/index.d.ts +0 -14
- package/dist/olap/clickhouse/index.d.ts.map +0 -1
- package/dist/olap/clickhouse/index.js +0 -14
- package/dist/olap/clickhouse/index.js.map +0 -1
- package/dist/olap/clickhouse/mapper.d.ts +0 -170
- package/dist/olap/clickhouse/mapper.d.ts.map +0 -1
- package/dist/olap/clickhouse/mapper.js +0 -654
- package/dist/olap/clickhouse/mapper.js.map +0 -1
- package/dist/olap/clickhouse/olap-backend.d.ts +0 -181
- package/dist/olap/clickhouse/olap-backend.d.ts.map +0 -1
- package/dist/olap/clickhouse/olap-backend.js +0 -1083
- package/dist/olap/clickhouse/olap-backend.js.map +0 -1
- package/dist/olap/clickhouse/query-executor.d.ts +0 -163
- package/dist/olap/clickhouse/query-executor.d.ts.map +0 -1
- package/dist/olap/clickhouse/query-executor.js +0 -560
- package/dist/olap/clickhouse/query-executor.js.map +0 -1
- package/dist/olap/clickhouse/query.d.ts +0 -134
- package/dist/olap/clickhouse/query.d.ts.map +0 -1
- package/dist/olap/clickhouse/query.js +0 -512
- package/dist/olap/clickhouse/query.js.map +0 -1
- package/dist/olap/stage/index.d.ts +0 -6
- package/dist/olap/stage/index.d.ts.map +0 -1
- package/dist/olap/stage/index.js +0 -6
- package/dist/olap/stage/index.js.map +0 -1
- package/dist/olap/stage/parser.d.ts +0 -68
- package/dist/olap/stage/parser.d.ts.map +0 -1
- package/dist/olap/stage/parser.js +0 -293
- package/dist/olap/stage/parser.js.map +0 -1
- package/dist/olap/stage/router.d.ts +0 -94
- package/dist/olap/stage/router.d.ts.map +0 -1
- package/dist/olap/stage/router.js +0 -390
- package/dist/olap/stage/router.js.map +0 -1
- package/dist/rpc/endpoint.d.ts +0 -52
- package/dist/rpc/endpoint.d.ts.map +0 -1
- package/dist/rpc/endpoint.js +0 -734
- package/dist/rpc/endpoint.js.map +0 -1
- package/dist/rpc/index.d.ts +0 -34
- package/dist/rpc/index.d.ts.map +0 -1
- package/dist/rpc/index.js +0 -45
- package/dist/rpc/index.js.map +0 -1
- package/dist/rpc/rpc-client.d.ts +0 -275
- package/dist/rpc/rpc-client.d.ts.map +0 -1
- package/dist/rpc/rpc-client.js +0 -735
- package/dist/rpc/rpc-client.js.map +0 -1
- package/dist/rpc/rpc-target.d.ts +0 -220
- package/dist/rpc/rpc-target.d.ts.map +0 -1
- package/dist/rpc/rpc-target.js +0 -500
- package/dist/rpc/rpc-target.js.map +0 -1
- package/dist/rpc/worker-entrypoint.d.ts +0 -159
- package/dist/rpc/worker-entrypoint.d.ts.map +0 -1
- package/dist/rpc/worker-entrypoint.js +0 -212
- package/dist/rpc/worker-entrypoint.js.map +0 -1
- package/dist/server.d.ts +0 -18
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -129
- package/dist/server.js.map +0 -1
- package/dist/studio/components/browser/CollectionItem.d.ts +0 -26
- package/dist/studio/components/browser/CollectionItem.d.ts.map +0 -1
- package/dist/studio/components/browser/CollectionItem.js +0 -143
- package/dist/studio/components/browser/CollectionItem.js.map +0 -1
- package/dist/studio/components/browser/CollectionTree.d.ts +0 -45
- package/dist/studio/components/browser/CollectionTree.d.ts.map +0 -1
- package/dist/studio/components/browser/CollectionTree.js +0 -207
- package/dist/studio/components/browser/CollectionTree.js.map +0 -1
- package/dist/studio/components/browser/ConnectedDatabaseBrowser.d.ts +0 -51
- package/dist/studio/components/browser/ConnectedDatabaseBrowser.d.ts.map +0 -1
- package/dist/studio/components/browser/ConnectedDatabaseBrowser.js +0 -185
- package/dist/studio/components/browser/ConnectedDatabaseBrowser.js.map +0 -1
- package/dist/studio/components/browser/DatabaseBrowser.d.ts +0 -46
- package/dist/studio/components/browser/DatabaseBrowser.d.ts.map +0 -1
- package/dist/studio/components/browser/DatabaseBrowser.js +0 -304
- package/dist/studio/components/browser/DatabaseBrowser.js.map +0 -1
- package/dist/studio/components/browser/__tests__/CollectionItem.test.d.ts +0 -5
- package/dist/studio/components/browser/__tests__/CollectionItem.test.d.ts.map +0 -1
- package/dist/studio/components/browser/__tests__/CollectionItem.test.js +0 -169
- package/dist/studio/components/browser/__tests__/CollectionItem.test.js.map +0 -1
- package/dist/studio/components/browser/__tests__/CollectionTree.test.d.ts +0 -5
- package/dist/studio/components/browser/__tests__/CollectionTree.test.d.ts.map +0 -1
- package/dist/studio/components/browser/__tests__/CollectionTree.test.js +0 -203
- package/dist/studio/components/browser/__tests__/CollectionTree.test.js.map +0 -1
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.e2e.test.d.ts +0 -8
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.e2e.test.d.ts.map +0 -1
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.e2e.test.js +0 -522
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.e2e.test.js.map +0 -1
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.test.d.ts +0 -5
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.test.d.ts.map +0 -1
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.test.js +0 -518
- package/dist/studio/components/browser/__tests__/DatabaseBrowser.test.js.map +0 -1
- package/dist/studio/components/browser/__tests__/setup.d.ts +0 -5
- package/dist/studio/components/browser/__tests__/setup.d.ts.map +0 -1
- package/dist/studio/components/browser/__tests__/setup.js +0 -22
- package/dist/studio/components/browser/__tests__/setup.js.map +0 -1
- package/dist/studio/components/browser/index.d.ts +0 -15
- package/dist/studio/components/browser/index.d.ts.map +0 -1
- package/dist/studio/components/browser/index.js +0 -10
- package/dist/studio/components/browser/index.js.map +0 -1
- package/dist/studio/components/browser/types.d.ts +0 -33
- package/dist/studio/components/browser/types.d.ts.map +0 -1
- package/dist/studio/components/browser/types.js +0 -5
- package/dist/studio/components/browser/types.js.map +0 -1
- package/dist/studio/components/connection/ConnectionForm.d.ts +0 -59
- package/dist/studio/components/connection/ConnectionForm.d.ts.map +0 -1
- package/dist/studio/components/connection/ConnectionForm.js +0 -274
- package/dist/studio/components/connection/ConnectionForm.js.map +0 -1
- package/dist/studio/components/connection/ConnectionList.d.ts +0 -59
- package/dist/studio/components/connection/ConnectionList.d.ts.map +0 -1
- package/dist/studio/components/connection/ConnectionList.js +0 -286
- package/dist/studio/components/connection/ConnectionList.js.map +0 -1
- package/dist/studio/components/connection/ConnectionPanel.d.ts +0 -132
- package/dist/studio/components/connection/ConnectionPanel.d.ts.map +0 -1
- package/dist/studio/components/connection/ConnectionPanel.js +0 -293
- package/dist/studio/components/connection/ConnectionPanel.js.map +0 -1
- package/dist/studio/components/connection/__tests__/ConnectionPanel.test.d.ts +0 -8
- package/dist/studio/components/connection/__tests__/ConnectionPanel.test.d.ts.map +0 -1
- package/dist/studio/components/connection/__tests__/ConnectionPanel.test.js +0 -632
- package/dist/studio/components/connection/__tests__/ConnectionPanel.test.js.map +0 -1
- package/dist/studio/components/connection/__tests__/setup.d.ts +0 -5
- package/dist/studio/components/connection/__tests__/setup.d.ts.map +0 -1
- package/dist/studio/components/connection/__tests__/setup.js +0 -11
- package/dist/studio/components/connection/__tests__/setup.js.map +0 -1
- package/dist/studio/components/connection/index.d.ts +0 -10
- package/dist/studio/components/connection/index.d.ts.map +0 -1
- package/dist/studio/components/connection/index.js +0 -7
- package/dist/studio/components/connection/index.js.map +0 -1
- package/dist/studio/components/crud/DeleteDocumentDialog.d.ts +0 -91
- package/dist/studio/components/crud/DeleteDocumentDialog.d.ts.map +0 -1
- package/dist/studio/components/crud/DeleteDocumentDialog.js +0 -273
- package/dist/studio/components/crud/DeleteDocumentDialog.js.map +0 -1
- package/dist/studio/components/crud/DocumentEditor.d.ts +0 -32
- package/dist/studio/components/crud/DocumentEditor.d.ts.map +0 -1
- package/dist/studio/components/crud/DocumentEditor.js +0 -546
- package/dist/studio/components/crud/DocumentEditor.js.map +0 -1
- package/dist/studio/components/crud/InsertDocumentDialog.d.ts +0 -78
- package/dist/studio/components/crud/InsertDocumentDialog.d.ts.map +0 -1
- package/dist/studio/components/crud/InsertDocumentDialog.js +0 -323
- package/dist/studio/components/crud/InsertDocumentDialog.js.map +0 -1
- package/dist/studio/components/crud/__tests__/DeleteDocumentDialog.test.d.ts +0 -5
- package/dist/studio/components/crud/__tests__/DeleteDocumentDialog.test.d.ts.map +0 -1
- package/dist/studio/components/crud/__tests__/DeleteDocumentDialog.test.js +0 -298
- package/dist/studio/components/crud/__tests__/DeleteDocumentDialog.test.js.map +0 -1
- package/dist/studio/components/crud/__tests__/DocumentEditor.test.d.ts +0 -8
- package/dist/studio/components/crud/__tests__/DocumentEditor.test.d.ts.map +0 -1
- package/dist/studio/components/crud/__tests__/DocumentEditor.test.js +0 -368
- package/dist/studio/components/crud/__tests__/DocumentEditor.test.js.map +0 -1
- package/dist/studio/components/crud/__tests__/InsertDocumentDialog.test.d.ts +0 -2
- package/dist/studio/components/crud/__tests__/InsertDocumentDialog.test.d.ts.map +0 -1
- package/dist/studio/components/crud/__tests__/InsertDocumentDialog.test.js +0 -352
- package/dist/studio/components/crud/__tests__/InsertDocumentDialog.test.js.map +0 -1
- package/dist/studio/components/crud/__tests__/setup.d.ts +0 -5
- package/dist/studio/components/crud/__tests__/setup.d.ts.map +0 -1
- package/dist/studio/components/crud/__tests__/setup.js +0 -22
- package/dist/studio/components/crud/__tests__/setup.js.map +0 -1
- package/dist/studio/components/crud/index.d.ts +0 -12
- package/dist/studio/components/crud/index.d.ts.map +0 -1
- package/dist/studio/components/crud/index.js +0 -11
- package/dist/studio/components/crud/index.js.map +0 -1
- package/dist/studio/hooks/useConnection.d.ts +0 -127
- package/dist/studio/hooks/useConnection.d.ts.map +0 -1
- package/dist/studio/hooks/useConnection.js +0 -414
- package/dist/studio/hooks/useConnection.js.map +0 -1
- package/dist/studio/hooks/useDatabaseBrowser.d.ts +0 -107
- package/dist/studio/hooks/useDatabaseBrowser.d.ts.map +0 -1
- package/dist/studio/hooks/useDatabaseBrowser.js +0 -294
- package/dist/studio/hooks/useDatabaseBrowser.js.map +0 -1
- package/dist/studio/index.d.ts +0 -16
- package/dist/studio/index.d.ts.map +0 -1
- package/dist/studio/index.js +0 -14
- package/dist/studio/index.js.map +0 -1
- package/dist/studio/types/connection.d.ts +0 -266
- package/dist/studio/types/connection.d.ts.map +0 -1
- package/dist/studio/types/connection.js +0 -159
- package/dist/studio/types/connection.js.map +0 -1
- package/dist/studio/vitest.config.d.ts +0 -3
- package/dist/studio/vitest.config.d.ts.map +0 -1
- package/dist/studio/vitest.config.js +0 -33
- package/dist/studio/vitest.config.js.map +0 -1
- package/dist/translator/aggregation-translator.d.ts +0 -51
- package/dist/translator/aggregation-translator.d.ts.map +0 -1
- package/dist/translator/aggregation-translator.js +0 -324
- package/dist/translator/aggregation-translator.js.map +0 -1
- package/dist/translator/dialect.d.ts +0 -131
- package/dist/translator/dialect.d.ts.map +0 -1
- package/dist/translator/dialect.js +0 -276
- package/dist/translator/dialect.js.map +0 -1
- package/dist/translator/geo-translator.d.ts +0 -91
- package/dist/translator/geo-translator.d.ts.map +0 -1
- package/dist/translator/geo-translator.js +0 -587
- package/dist/translator/geo-translator.js.map +0 -1
- package/dist/translator/hybrid-translator.d.ts +0 -70
- package/dist/translator/hybrid-translator.d.ts.map +0 -1
- package/dist/translator/hybrid-translator.js +0 -193
- package/dist/translator/hybrid-translator.js.map +0 -1
- package/dist/translator/index.d.ts +0 -13
- package/dist/translator/index.d.ts.map +0 -1
- package/dist/translator/index.js +0 -11
- package/dist/translator/index.js.map +0 -1
- package/dist/translator/query-translator.d.ts +0 -211
- package/dist/translator/query-translator.d.ts.map +0 -1
- package/dist/translator/query-translator.js +0 -1276
- package/dist/translator/query-translator.js.map +0 -1
- package/dist/translator/search-highlight.d.ts +0 -83
- package/dist/translator/search-highlight.d.ts.map +0 -1
- package/dist/translator/search-highlight.js +0 -83
- package/dist/translator/search-highlight.js.map +0 -1
- package/dist/translator/search-translator.d.ts +0 -155
- package/dist/translator/search-translator.d.ts.map +0 -1
- package/dist/translator/search-translator.js +0 -241
- package/dist/translator/search-translator.js.map +0 -1
- package/dist/translator/stages/add-fields-stage.d.ts +0 -7
- package/dist/translator/stages/add-fields-stage.d.ts.map +0 -1
- package/dist/translator/stages/add-fields-stage.js +0 -72
- package/dist/translator/stages/add-fields-stage.js.map +0 -1
- package/dist/translator/stages/bucket-stage.d.ts +0 -7
- package/dist/translator/stages/bucket-stage.d.ts.map +0 -1
- package/dist/translator/stages/bucket-stage.js +0 -87
- package/dist/translator/stages/bucket-stage.js.map +0 -1
- package/dist/translator/stages/count-stage.d.ts +0 -7
- package/dist/translator/stages/count-stage.d.ts.map +0 -1
- package/dist/translator/stages/count-stage.js +0 -12
- package/dist/translator/stages/count-stage.js.map +0 -1
- package/dist/translator/stages/expression-translator.d.ts +0 -68
- package/dist/translator/stages/expression-translator.d.ts.map +0 -1
- package/dist/translator/stages/expression-translator.js +0 -467
- package/dist/translator/stages/expression-translator.js.map +0 -1
- package/dist/translator/stages/facet-stage.d.ts +0 -13
- package/dist/translator/stages/facet-stage.d.ts.map +0 -1
- package/dist/translator/stages/facet-stage.js +0 -26
- package/dist/translator/stages/facet-stage.js.map +0 -1
- package/dist/translator/stages/fusion-stages.d.ts +0 -118
- package/dist/translator/stages/fusion-stages.d.ts.map +0 -1
- package/dist/translator/stages/fusion-stages.js +0 -201
- package/dist/translator/stages/fusion-stages.js.map +0 -1
- package/dist/translator/stages/group-stage.d.ts +0 -8
- package/dist/translator/stages/group-stage.d.ts.map +0 -1
- package/dist/translator/stages/group-stage.js +0 -123
- package/dist/translator/stages/group-stage.js.map +0 -1
- package/dist/translator/stages/index.d.ts +0 -24
- package/dist/translator/stages/index.d.ts.map +0 -1
- package/dist/translator/stages/index.js +0 -24
- package/dist/translator/stages/index.js.map +0 -1
- package/dist/translator/stages/join-optimizer.d.ts +0 -37
- package/dist/translator/stages/join-optimizer.d.ts.map +0 -1
- package/dist/translator/stages/join-optimizer.js +0 -93
- package/dist/translator/stages/join-optimizer.js.map +0 -1
- package/dist/translator/stages/limit-stage.d.ts +0 -7
- package/dist/translator/stages/limit-stage.d.ts.map +0 -1
- package/dist/translator/stages/limit-stage.js +0 -11
- package/dist/translator/stages/limit-stage.js.map +0 -1
- package/dist/translator/stages/lookup-stage.d.ts +0 -7
- package/dist/translator/stages/lookup-stage.d.ts.map +0 -1
- package/dist/translator/stages/lookup-stage.js +0 -73
- package/dist/translator/stages/lookup-stage.js.map +0 -1
- package/dist/translator/stages/match-stage.d.ts +0 -7
- package/dist/translator/stages/match-stage.d.ts.map +0 -1
- package/dist/translator/stages/match-stage.js +0 -14
- package/dist/translator/stages/match-stage.js.map +0 -1
- package/dist/translator/stages/optimizer.d.ts +0 -15
- package/dist/translator/stages/optimizer.d.ts.map +0 -1
- package/dist/translator/stages/optimizer.js +0 -249
- package/dist/translator/stages/optimizer.js.map +0 -1
- package/dist/translator/stages/parallel-facet.d.ts +0 -47
- package/dist/translator/stages/parallel-facet.d.ts.map +0 -1
- package/dist/translator/stages/parallel-facet.js +0 -57
- package/dist/translator/stages/parallel-facet.js.map +0 -1
- package/dist/translator/stages/project-stage.d.ts +0 -8
- package/dist/translator/stages/project-stage.d.ts.map +0 -1
- package/dist/translator/stages/project-stage.js +0 -145
- package/dist/translator/stages/project-stage.js.map +0 -1
- package/dist/translator/stages/search-stage.d.ts +0 -60
- package/dist/translator/stages/search-stage.d.ts.map +0 -1
- package/dist/translator/stages/search-stage.js +0 -89
- package/dist/translator/stages/search-stage.js.map +0 -1
- package/dist/translator/stages/skip-stage.d.ts +0 -7
- package/dist/translator/stages/skip-stage.d.ts.map +0 -1
- package/dist/translator/stages/skip-stage.js +0 -11
- package/dist/translator/stages/skip-stage.js.map +0 -1
- package/dist/translator/stages/sort-stage.d.ts +0 -7
- package/dist/translator/stages/sort-stage.d.ts.map +0 -1
- package/dist/translator/stages/sort-stage.js +0 -21
- package/dist/translator/stages/sort-stage.js.map +0 -1
- package/dist/translator/stages/types.d.ts +0 -136
- package/dist/translator/stages/types.d.ts.map +0 -1
- package/dist/translator/stages/types.js +0 -5
- package/dist/translator/stages/types.js.map +0 -1
- package/dist/translator/stages/unwind-stage.d.ts +0 -7
- package/dist/translator/stages/unwind-stage.d.ts.map +0 -1
- package/dist/translator/stages/unwind-stage.js +0 -61
- package/dist/translator/stages/unwind-stage.js.map +0 -1
- package/dist/translator/stages/vector-search-stage.d.ts +0 -53
- package/dist/translator/stages/vector-search-stage.d.ts.map +0 -1
- package/dist/translator/stages/vector-search-stage.js +0 -62
- package/dist/translator/stages/vector-search-stage.js.map +0 -1
- package/dist/translator/update-translator.d.ts +0 -148
- package/dist/translator/update-translator.d.ts.map +0 -1
- package/dist/translator/update-translator.js +0 -819
- package/dist/translator/update-translator.js.map +0 -1
- package/dist/translator/vector-translator.d.ts +0 -89
- package/dist/translator/vector-translator.d.ts.map +0 -1
- package/dist/translator/vector-translator.js +0 -106
- package/dist/translator/vector-translator.js.map +0 -1
- package/dist/types/env.d.ts +0 -31
- package/dist/types/env.d.ts.map +0 -1
- package/dist/types/env.js +0 -5
- package/dist/types/env.js.map +0 -1
- package/dist/types/function.d.ts +0 -65
- package/dist/types/function.d.ts.map +0 -1
- package/dist/types/function.js +0 -5
- package/dist/types/function.js.map +0 -1
- package/dist/types/index.d.ts +0 -137
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -13
- package/dist/types/index.js.map +0 -1
- package/dist/types/mongodb.d.ts +0 -258
- package/dist/types/mongodb.d.ts.map +0 -1
- package/dist/types/mongodb.js +0 -5
- package/dist/types/mongodb.js.map +0 -1
- package/dist/types/objectid.d.ts +0 -130
- package/dist/types/objectid.d.ts.map +0 -1
- package/dist/types/objectid.js +0 -314
- package/dist/types/objectid.js.map +0 -1
- package/dist/types/rpc.d.ts +0 -313
- package/dist/types/rpc.d.ts.map +0 -1
- package/dist/types/rpc.js +0 -136
- package/dist/types/rpc.js.map +0 -1
- package/dist/types/vectorize.d.ts +0 -136
- package/dist/types/vectorize.d.ts.map +0 -1
- package/dist/types/vectorize.js +0 -8
- package/dist/types/vectorize.js.map +0 -1
- package/dist/utils/sql-safety.d.ts +0 -64
- package/dist/utils/sql-safety.d.ts.map +0 -1
- package/dist/utils/sql-safety.js +0 -112
- package/dist/utils/sql-safety.js.map +0 -1
- package/dist/validation/document-validator.d.ts +0 -195
- package/dist/validation/document-validator.d.ts.map +0 -1
- package/dist/validation/document-validator.js +0 -529
- package/dist/validation/document-validator.js.map +0 -1
- package/dist/vectorize/document-serializer.d.ts +0 -119
- package/dist/vectorize/document-serializer.d.ts.map +0 -1
- package/dist/vectorize/document-serializer.js +0 -320
- package/dist/vectorize/document-serializer.js.map +0 -1
- package/dist/wire/auth/index.d.ts +0 -5
- package/dist/wire/auth/index.d.ts.map +0 -1
- package/dist/wire/auth/index.js +0 -5
- package/dist/wire/auth/index.js.map +0 -1
- package/dist/wire/auth/scram.d.ts +0 -160
- package/dist/wire/auth/scram.d.ts.map +0 -1
- package/dist/wire/auth/scram.js +0 -425
- package/dist/wire/auth/scram.js.map +0 -1
- package/dist/wire/backend/interface.d.ts +0 -168
- package/dist/wire/backend/interface.d.ts.map +0 -1
- package/dist/wire/backend/interface.js +0 -10
- package/dist/wire/backend/interface.js.map +0 -1
- package/dist/wire/backend/local-sqlite.d.ts +0 -89
- package/dist/wire/backend/local-sqlite.d.ts.map +0 -1
- package/dist/wire/backend/local-sqlite.js +0 -1002
- package/dist/wire/backend/local-sqlite.js.map +0 -1
- package/dist/wire/backend/query-router.d.ts +0 -197
- package/dist/wire/backend/query-router.d.ts.map +0 -1
- package/dist/wire/backend/query-router.js +0 -590
- package/dist/wire/backend/query-router.js.map +0 -1
- package/dist/wire/backend/validation.d.ts +0 -26
- package/dist/wire/backend/validation.d.ts.map +0 -1
- package/dist/wire/backend/validation.js +0 -79
- package/dist/wire/backend/validation.js.map +0 -1
- package/dist/wire/backend/workers-proxy.d.ts +0 -95
- package/dist/wire/backend/workers-proxy.d.ts.map +0 -1
- package/dist/wire/backend/workers-proxy.js +0 -429
- package/dist/wire/backend/workers-proxy.js.map +0 -1
- package/dist/wire/commands/admin.d.ts +0 -49
- package/dist/wire/commands/admin.d.ts.map +0 -1
- package/dist/wire/commands/admin.js +0 -272
- package/dist/wire/commands/admin.js.map +0 -1
- package/dist/wire/commands/aggregate.d.ts +0 -15
- package/dist/wire/commands/aggregate.d.ts.map +0 -1
- package/dist/wire/commands/aggregate.js +0 -98
- package/dist/wire/commands/aggregate.js.map +0 -1
- package/dist/wire/commands/auth.d.ts +0 -58
- package/dist/wire/commands/auth.d.ts.map +0 -1
- package/dist/wire/commands/auth.js +0 -158
- package/dist/wire/commands/auth.js.map +0 -1
- package/dist/wire/commands/crud.d.ts +0 -49
- package/dist/wire/commands/crud.d.ts.map +0 -1
- package/dist/wire/commands/crud.js +0 -336
- package/dist/wire/commands/crud.js.map +0 -1
- package/dist/wire/commands/hello.d.ts +0 -35
- package/dist/wire/commands/hello.d.ts.map +0 -1
- package/dist/wire/commands/hello.js +0 -204
- package/dist/wire/commands/hello.js.map +0 -1
- package/dist/wire/commands/index.d.ts +0 -24
- package/dist/wire/commands/index.d.ts.map +0 -1
- package/dist/wire/commands/index.js +0 -145
- package/dist/wire/commands/index.js.map +0 -1
- package/dist/wire/commands/router.d.ts +0 -46
- package/dist/wire/commands/router.d.ts.map +0 -1
- package/dist/wire/commands/router.js +0 -151
- package/dist/wire/commands/router.js.map +0 -1
- package/dist/wire/commands/types.d.ts +0 -51
- package/dist/wire/commands/types.d.ts.map +0 -1
- package/dist/wire/commands/types.js +0 -15
- package/dist/wire/commands/types.js.map +0 -1
- package/dist/wire/index.d.ts +0 -15
- package/dist/wire/index.d.ts.map +0 -1
- package/dist/wire/index.js +0 -19
- package/dist/wire/index.js.map +0 -1
- package/dist/wire/message.d.ts +0 -49
- package/dist/wire/message.d.ts.map +0 -1
- package/dist/wire/message.js +0 -299
- package/dist/wire/message.js.map +0 -1
- package/dist/wire/server.d.ts +0 -145
- package/dist/wire/server.d.ts.map +0 -1
- package/dist/wire/server.js +0 -284
- package/dist/wire/server.js.map +0 -1
- package/dist/wire/types.d.ts +0 -140
- package/dist/wire/types.d.ts.map +0 -1
- package/dist/wire/types.js +0 -64
- package/dist/wire/types.js.map +0 -1
- package/dist/worker.d.ts.map +0 -1
|
@@ -1,879 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MonDoAgent - Cloudflare Agent with integrated AgentFS
|
|
3
|
-
*
|
|
4
|
-
* Provides a unified API for AI agents to interact with:
|
|
5
|
-
* - Virtual filesystem (files, directories)
|
|
6
|
-
* - Glob pattern matching
|
|
7
|
-
* - Grep content search
|
|
8
|
-
* - Key-value storage
|
|
9
|
-
* - Tool call audit logging
|
|
10
|
-
* - WebSocket integration for real-time tool execution
|
|
11
|
-
*
|
|
12
|
-
* Designed for use with Cloudflare's Agent infrastructure.
|
|
13
|
-
*/
|
|
14
|
-
import { randomUUID } from 'crypto';
|
|
15
|
-
// =============================================================================
|
|
16
|
-
// IMPORTS
|
|
17
|
-
// =============================================================================
|
|
18
|
-
import { AgentFilesystem } from './vfs';
|
|
19
|
-
import { AgentGrep } from './grep';
|
|
20
|
-
import { AgentFSKVStore } from './kv-store';
|
|
21
|
-
import { ToolCallAuditLog } from './toolcalls';
|
|
22
|
-
import { filterGlob } from './glob';
|
|
23
|
-
/**
|
|
24
|
-
* Audited filesystem wrapper that automatically records operations
|
|
25
|
-
*/
|
|
26
|
-
class AuditedFilesystem {
|
|
27
|
-
fs;
|
|
28
|
-
audit;
|
|
29
|
-
constructor(fs, audit) {
|
|
30
|
-
this.fs = fs;
|
|
31
|
-
this.audit = audit;
|
|
32
|
-
}
|
|
33
|
-
async recordOperation(tool, inputs, operation) {
|
|
34
|
-
const startTime = new Date();
|
|
35
|
-
try {
|
|
36
|
-
const result = await operation();
|
|
37
|
-
const endTime = new Date();
|
|
38
|
-
// Build success output
|
|
39
|
-
const outputs = { success: true };
|
|
40
|
-
if (tool === 'fs.readFile' && typeof result === 'string') {
|
|
41
|
-
outputs.content = result;
|
|
42
|
-
}
|
|
43
|
-
await this.audit.record(tool, inputs, outputs, { startTime, endTime });
|
|
44
|
-
return result;
|
|
45
|
-
}
|
|
46
|
-
catch (error) {
|
|
47
|
-
const endTime = new Date();
|
|
48
|
-
// Build error output
|
|
49
|
-
const outputs = {
|
|
50
|
-
success: false,
|
|
51
|
-
error: {
|
|
52
|
-
message: error instanceof Error ? error.message : String(error),
|
|
53
|
-
stack: error instanceof Error ? error.stack : undefined,
|
|
54
|
-
code: this.extractErrorCode(error),
|
|
55
|
-
},
|
|
56
|
-
};
|
|
57
|
-
await this.audit.record(tool, inputs, outputs, { startTime, endTime });
|
|
58
|
-
throw error;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
extractErrorCode(error) {
|
|
62
|
-
if (error instanceof Error && error.message) {
|
|
63
|
-
// Extract error code from message like "ENOENT: no such file..."
|
|
64
|
-
const match = error.message.match(/^([A-Z]+):/);
|
|
65
|
-
if (match) {
|
|
66
|
-
return match[1];
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
return undefined;
|
|
70
|
-
}
|
|
71
|
-
async readFile(path) {
|
|
72
|
-
return this.recordOperation('fs.readFile', { path }, () => this.fs.readFile(path));
|
|
73
|
-
}
|
|
74
|
-
async writeFile(path, content) {
|
|
75
|
-
return this.recordOperation('fs.writeFile', { path, content }, () => this.fs.writeFile(path, content));
|
|
76
|
-
}
|
|
77
|
-
async deleteFile(path) {
|
|
78
|
-
return this.recordOperation('fs.deleteFile', { path }, () => this.fs.deleteFile(path));
|
|
79
|
-
}
|
|
80
|
-
async readdir(path) {
|
|
81
|
-
return this.recordOperation('fs.readdir', { path }, () => this.fs.readdir(path));
|
|
82
|
-
}
|
|
83
|
-
async mkdir(path) {
|
|
84
|
-
return this.recordOperation('fs.mkdir', { path }, () => this.fs.mkdir(path));
|
|
85
|
-
}
|
|
86
|
-
async rmdir(path) {
|
|
87
|
-
return this.recordOperation('fs.rmdir', { path }, () => this.fs.rmdir(path));
|
|
88
|
-
}
|
|
89
|
-
async stat(path) {
|
|
90
|
-
return this.recordOperation('fs.stat', { path }, () => this.fs.stat(path));
|
|
91
|
-
}
|
|
92
|
-
async exists(path) {
|
|
93
|
-
// exists doesn't throw, so we record it differently
|
|
94
|
-
const startTime = new Date();
|
|
95
|
-
const result = await this.fs.exists(path);
|
|
96
|
-
const endTime = new Date();
|
|
97
|
-
await this.audit.record('fs.exists', { path }, { exists: result, success: true }, { startTime, endTime });
|
|
98
|
-
return result;
|
|
99
|
-
}
|
|
100
|
-
async glob(pattern) {
|
|
101
|
-
return this.recordOperation('fs.glob', { pattern }, () => this.fs.glob(pattern));
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Audited KV store wrapper that automatically records operations
|
|
106
|
-
*/
|
|
107
|
-
class AuditedKVStore {
|
|
108
|
-
kv;
|
|
109
|
-
audit;
|
|
110
|
-
constructor(kv, audit) {
|
|
111
|
-
this.kv = kv;
|
|
112
|
-
this.audit = audit;
|
|
113
|
-
}
|
|
114
|
-
async recordOperation(tool, inputs, operation, outputBuilder) {
|
|
115
|
-
const startTime = new Date();
|
|
116
|
-
try {
|
|
117
|
-
const result = await operation();
|
|
118
|
-
const endTime = new Date();
|
|
119
|
-
const outputs = outputBuilder ? outputBuilder(result) : { success: true };
|
|
120
|
-
await this.audit.record(tool, inputs, outputs, { startTime, endTime });
|
|
121
|
-
return result;
|
|
122
|
-
}
|
|
123
|
-
catch (error) {
|
|
124
|
-
const endTime = new Date();
|
|
125
|
-
await this.audit.record(tool, inputs, {
|
|
126
|
-
success: false,
|
|
127
|
-
error: {
|
|
128
|
-
message: error instanceof Error ? error.message : String(error),
|
|
129
|
-
stack: error instanceof Error ? error.stack : undefined,
|
|
130
|
-
},
|
|
131
|
-
}, { startTime, endTime });
|
|
132
|
-
throw error;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
async get(key) {
|
|
136
|
-
return this.recordOperation('kv.get', { key }, () => this.kv.get(key), (result) => ({ value: result, success: true }));
|
|
137
|
-
}
|
|
138
|
-
async set(key, value) {
|
|
139
|
-
return this.recordOperation('kv.set', { key, value }, () => this.kv.set(key, value));
|
|
140
|
-
}
|
|
141
|
-
async delete(key) {
|
|
142
|
-
return this.recordOperation('kv.delete', { key }, () => this.kv.delete(key), (result) => ({ deleted: result, success: true }));
|
|
143
|
-
}
|
|
144
|
-
async has(key) {
|
|
145
|
-
return this.recordOperation('kv.has', { key }, () => this.kv.has(key), (result) => ({ exists: result, success: true }));
|
|
146
|
-
}
|
|
147
|
-
async keys(prefix) {
|
|
148
|
-
return this.recordOperation('kv.keys', { prefix }, () => this.kv.keys(prefix), (result) => ({ keys: result, success: true }));
|
|
149
|
-
}
|
|
150
|
-
async entries(prefix) {
|
|
151
|
-
return this.recordOperation('kv.entries', { prefix }, () => this.kv.entries(prefix), (result) => ({ entries: result, success: true }));
|
|
152
|
-
}
|
|
153
|
-
async clear(prefix) {
|
|
154
|
-
return this.recordOperation('kv.clear', { prefix }, () => this.kv.clear(prefix), (result) => ({ cleared: result, success: true }));
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* In-memory database for AgentFS operations
|
|
159
|
-
* Used when no external database is provided
|
|
160
|
-
*/
|
|
161
|
-
function createInMemoryDatabase() {
|
|
162
|
-
const collections = new Map();
|
|
163
|
-
const getCollection = (name) => {
|
|
164
|
-
if (!collections.has(name)) {
|
|
165
|
-
collections.set(name, new Map());
|
|
166
|
-
}
|
|
167
|
-
return collections.get(name);
|
|
168
|
-
};
|
|
169
|
-
return {
|
|
170
|
-
async findOne(collection, query) {
|
|
171
|
-
const col = getCollection(collection);
|
|
172
|
-
if (query._id) {
|
|
173
|
-
return col.get(query._id) ?? null;
|
|
174
|
-
}
|
|
175
|
-
// Simple query matching
|
|
176
|
-
for (const doc of col.values()) {
|
|
177
|
-
if (matchesQuery(doc, query)) {
|
|
178
|
-
return doc;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
return null;
|
|
182
|
-
},
|
|
183
|
-
async find(collection, query) {
|
|
184
|
-
const col = getCollection(collection);
|
|
185
|
-
const results = [];
|
|
186
|
-
for (const doc of col.values()) {
|
|
187
|
-
if (matchesQuery(doc, query)) {
|
|
188
|
-
results.push(doc);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
return results;
|
|
192
|
-
},
|
|
193
|
-
async insertOne(collection, document) {
|
|
194
|
-
const col = getCollection(collection);
|
|
195
|
-
const id = document._id ?? randomUUID();
|
|
196
|
-
const docWithId = { ...document, _id: id };
|
|
197
|
-
col.set(id, docWithId);
|
|
198
|
-
return { insertedId: id };
|
|
199
|
-
},
|
|
200
|
-
async updateOne(collection, filter, update, options) {
|
|
201
|
-
const col = getCollection(collection);
|
|
202
|
-
let matched = false;
|
|
203
|
-
for (const [id, doc] of col.entries()) {
|
|
204
|
-
if (matchesQuery(doc, filter)) {
|
|
205
|
-
matched = true;
|
|
206
|
-
if (update.$set) {
|
|
207
|
-
col.set(id, { ...doc, ...update.$set });
|
|
208
|
-
}
|
|
209
|
-
return { matchedCount: 1, modifiedCount: 1 };
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
if (!matched && options?.upsert) {
|
|
213
|
-
const id = filter._id ?? randomUUID();
|
|
214
|
-
const newDoc = { ...filter, ...update.$set, ...update.$setOnInsert, _id: id };
|
|
215
|
-
col.set(id, newDoc);
|
|
216
|
-
return { matchedCount: 0, modifiedCount: 0, upsertedId: id };
|
|
217
|
-
}
|
|
218
|
-
return { matchedCount: 0, modifiedCount: 0 };
|
|
219
|
-
},
|
|
220
|
-
async deleteOne(collection, filter) {
|
|
221
|
-
const col = getCollection(collection);
|
|
222
|
-
if (filter._id) {
|
|
223
|
-
const existed = col.has(filter._id);
|
|
224
|
-
col.delete(filter._id);
|
|
225
|
-
return { deletedCount: existed ? 1 : 0 };
|
|
226
|
-
}
|
|
227
|
-
for (const [id, doc] of col.entries()) {
|
|
228
|
-
if (matchesQuery(doc, filter)) {
|
|
229
|
-
col.delete(id);
|
|
230
|
-
return { deletedCount: 1 };
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
return { deletedCount: 0 };
|
|
234
|
-
},
|
|
235
|
-
async deleteMany(collection, filter) {
|
|
236
|
-
const col = getCollection(collection);
|
|
237
|
-
let count = 0;
|
|
238
|
-
for (const [id, doc] of Array.from(col.entries())) {
|
|
239
|
-
if (matchesQuery(doc, filter)) {
|
|
240
|
-
col.delete(id);
|
|
241
|
-
count++;
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
return { deletedCount: count };
|
|
245
|
-
},
|
|
246
|
-
};
|
|
247
|
-
}
|
|
248
|
-
/**
|
|
249
|
-
* Maximum allowed regex pattern length to prevent DoS
|
|
250
|
-
*/
|
|
251
|
-
const MAX_REGEX_LENGTH = 1000;
|
|
252
|
-
/**
|
|
253
|
-
* Patterns that indicate potential ReDoS vulnerability
|
|
254
|
-
* These detect nested quantifiers and other dangerous constructs
|
|
255
|
-
*/
|
|
256
|
-
const REDOS_PATTERNS = [
|
|
257
|
-
/\([^)]*[+*]\)[+*]/, // Nested quantifiers like (a+)+
|
|
258
|
-
/\([^)]*[+*]\)\{/, // Quantifier followed by {n,m} like (a+){2,}
|
|
259
|
-
/\([^)]*\|[^)]*\)[+*]/, // Alternation with quantifier like (a|b)+
|
|
260
|
-
/\.\*.*\.\*/, // Multiple .* patterns
|
|
261
|
-
/\.\+.*\.\+/, // Multiple .+ patterns
|
|
262
|
-
/\([^)]*\.\*[^)]*\)[+*]/, // .* inside quantified group
|
|
263
|
-
/\([^)]*\.\+[^)]*\)[+*]/, // .+ inside quantified group
|
|
264
|
-
];
|
|
265
|
-
/**
|
|
266
|
-
* Validates a regex pattern for safety and creates a RegExp if valid
|
|
267
|
-
* Protects against ReDoS attacks and invalid patterns
|
|
268
|
-
*
|
|
269
|
-
* @param pattern - The regex pattern string to validate
|
|
270
|
-
* @param flags - Optional regex flags
|
|
271
|
-
* @returns The compiled RegExp or null if invalid/unsafe
|
|
272
|
-
*/
|
|
273
|
-
function createSafeRegex(pattern, flags) {
|
|
274
|
-
// Check pattern length
|
|
275
|
-
if (pattern.length > MAX_REGEX_LENGTH) {
|
|
276
|
-
return null;
|
|
277
|
-
}
|
|
278
|
-
// Check for potential ReDoS patterns
|
|
279
|
-
for (const redosPattern of REDOS_PATTERNS) {
|
|
280
|
-
if (redosPattern.test(pattern)) {
|
|
281
|
-
return null;
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
// Try to compile the regex
|
|
285
|
-
try {
|
|
286
|
-
return new RegExp(pattern, flags);
|
|
287
|
-
}
|
|
288
|
-
catch {
|
|
289
|
-
// Invalid regex syntax
|
|
290
|
-
return null;
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
/**
|
|
294
|
-
* Simple query matching helper
|
|
295
|
-
*/
|
|
296
|
-
function matchesQuery(doc, query) {
|
|
297
|
-
if (Object.keys(query).length === 0) {
|
|
298
|
-
return true;
|
|
299
|
-
}
|
|
300
|
-
for (const [key, condition] of Object.entries(query)) {
|
|
301
|
-
const value = doc[key];
|
|
302
|
-
if (typeof condition === 'object' && condition !== null) {
|
|
303
|
-
const operators = condition;
|
|
304
|
-
if ('$regex' in operators) {
|
|
305
|
-
const regex = createSafeRegex(operators.$regex);
|
|
306
|
-
if (regex === null) {
|
|
307
|
-
// Invalid or unsafe regex pattern - treat as non-match
|
|
308
|
-
return false;
|
|
309
|
-
}
|
|
310
|
-
if (typeof value !== 'string' || !regex.test(value)) {
|
|
311
|
-
return false;
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
else {
|
|
316
|
-
if (value !== condition) {
|
|
317
|
-
return false;
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
return true;
|
|
322
|
-
}
|
|
323
|
-
/**
|
|
324
|
-
* Database adapter for KV storage
|
|
325
|
-
* Wraps AgentFSDatabase to provide KVStorageBackend interface
|
|
326
|
-
*/
|
|
327
|
-
function createKVBackendFromDatabase(db) {
|
|
328
|
-
const collection = '__agentfs.kv';
|
|
329
|
-
return {
|
|
330
|
-
async findOne(query) {
|
|
331
|
-
const doc = await db.findOne(collection, { _id: query.key });
|
|
332
|
-
if (!doc)
|
|
333
|
-
return null;
|
|
334
|
-
return {
|
|
335
|
-
_id: doc._id,
|
|
336
|
-
key: doc.key,
|
|
337
|
-
value: doc.value,
|
|
338
|
-
createdAt: doc.createdAt,
|
|
339
|
-
updatedAt: doc.updatedAt,
|
|
340
|
-
};
|
|
341
|
-
},
|
|
342
|
-
async find(query) {
|
|
343
|
-
const docs = await db.find(collection, query);
|
|
344
|
-
return docs.map((doc) => ({
|
|
345
|
-
_id: doc._id,
|
|
346
|
-
key: doc.key,
|
|
347
|
-
value: doc.value,
|
|
348
|
-
createdAt: doc.createdAt,
|
|
349
|
-
updatedAt: doc.updatedAt,
|
|
350
|
-
}));
|
|
351
|
-
},
|
|
352
|
-
async insertOne(document) {
|
|
353
|
-
const result = await db.insertOne(collection, {
|
|
354
|
-
_id: document.key,
|
|
355
|
-
...document,
|
|
356
|
-
});
|
|
357
|
-
return { insertedId: result.insertedId };
|
|
358
|
-
},
|
|
359
|
-
async updateOne(query, update) {
|
|
360
|
-
const result = await db.updateOne(collection, { _id: query.key }, update);
|
|
361
|
-
return { matchedCount: result.matchedCount, modifiedCount: result.modifiedCount };
|
|
362
|
-
},
|
|
363
|
-
async deleteOne(query) {
|
|
364
|
-
const result = await db.deleteOne(collection, { _id: query.key });
|
|
365
|
-
return { deletedCount: result.deletedCount };
|
|
366
|
-
},
|
|
367
|
-
async deleteMany(query) {
|
|
368
|
-
const result = await db.deleteMany(collection, query);
|
|
369
|
-
return { deletedCount: result.deletedCount };
|
|
370
|
-
},
|
|
371
|
-
async countDocuments(query) {
|
|
372
|
-
const docs = await db.find(collection, query);
|
|
373
|
-
return docs.length;
|
|
374
|
-
},
|
|
375
|
-
};
|
|
376
|
-
}
|
|
377
|
-
/**
|
|
378
|
-
* Database adapter for audit logging
|
|
379
|
-
* Wraps AgentFSDatabase to provide AuditBackend interface
|
|
380
|
-
*/
|
|
381
|
-
function createAuditBackendFromDatabase(db) {
|
|
382
|
-
const collection = '__agentfs.audit';
|
|
383
|
-
let sequence = 0;
|
|
384
|
-
return {
|
|
385
|
-
async append(entry) {
|
|
386
|
-
sequence++;
|
|
387
|
-
const id = `tc_${sequence}_${Date.now()}`;
|
|
388
|
-
const timestamp = new Date();
|
|
389
|
-
await db.insertOne(collection, {
|
|
390
|
-
_id: id,
|
|
391
|
-
...entry,
|
|
392
|
-
id,
|
|
393
|
-
timestamp,
|
|
394
|
-
});
|
|
395
|
-
return id;
|
|
396
|
-
},
|
|
397
|
-
async findById(id) {
|
|
398
|
-
const doc = await db.findOne(collection, { _id: id });
|
|
399
|
-
if (!doc)
|
|
400
|
-
return null;
|
|
401
|
-
const entry = {
|
|
402
|
-
id: doc.id,
|
|
403
|
-
tool: doc.tool,
|
|
404
|
-
inputs: doc.inputs,
|
|
405
|
-
outputs: doc.outputs,
|
|
406
|
-
timestamp: new Date(doc.timestamp),
|
|
407
|
-
};
|
|
408
|
-
if (doc.durationMs !== undefined)
|
|
409
|
-
entry.durationMs = doc.durationMs;
|
|
410
|
-
if (doc.metadata !== undefined)
|
|
411
|
-
entry.metadata = doc.metadata;
|
|
412
|
-
return entry;
|
|
413
|
-
},
|
|
414
|
-
async list(options) {
|
|
415
|
-
const docs = await db.find(collection, {});
|
|
416
|
-
const entries = docs.map((doc) => {
|
|
417
|
-
const entry = {
|
|
418
|
-
id: doc.id,
|
|
419
|
-
tool: doc.tool,
|
|
420
|
-
inputs: doc.inputs,
|
|
421
|
-
outputs: doc.outputs,
|
|
422
|
-
timestamp: new Date(doc.timestamp),
|
|
423
|
-
};
|
|
424
|
-
if (doc.durationMs !== undefined)
|
|
425
|
-
entry.durationMs = doc.durationMs;
|
|
426
|
-
if (doc.metadata !== undefined)
|
|
427
|
-
entry.metadata = doc.metadata;
|
|
428
|
-
return entry;
|
|
429
|
-
});
|
|
430
|
-
// Sort by timestamp
|
|
431
|
-
entries.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
|
|
432
|
-
const offset = options?.offset ?? 0;
|
|
433
|
-
const limit = options?.limit ?? entries.length;
|
|
434
|
-
return entries.slice(offset, offset + limit);
|
|
435
|
-
},
|
|
436
|
-
async findByTool(toolName) {
|
|
437
|
-
const docs = await db.find(collection, { tool: toolName });
|
|
438
|
-
return docs.map((doc) => {
|
|
439
|
-
const entry = {
|
|
440
|
-
id: doc.id,
|
|
441
|
-
tool: doc.tool,
|
|
442
|
-
inputs: doc.inputs,
|
|
443
|
-
outputs: doc.outputs,
|
|
444
|
-
timestamp: new Date(doc.timestamp),
|
|
445
|
-
};
|
|
446
|
-
if (doc.durationMs !== undefined)
|
|
447
|
-
entry.durationMs = doc.durationMs;
|
|
448
|
-
if (doc.metadata !== undefined)
|
|
449
|
-
entry.metadata = doc.metadata;
|
|
450
|
-
return entry;
|
|
451
|
-
});
|
|
452
|
-
},
|
|
453
|
-
async findByTimeRange(start, end) {
|
|
454
|
-
const docs = await db.find(collection, {});
|
|
455
|
-
return docs
|
|
456
|
-
.map((doc) => {
|
|
457
|
-
const entry = {
|
|
458
|
-
id: doc.id,
|
|
459
|
-
tool: doc.tool,
|
|
460
|
-
inputs: doc.inputs,
|
|
461
|
-
outputs: doc.outputs,
|
|
462
|
-
timestamp: new Date(doc.timestamp),
|
|
463
|
-
};
|
|
464
|
-
if (doc.durationMs !== undefined)
|
|
465
|
-
entry.durationMs = doc.durationMs;
|
|
466
|
-
if (doc.metadata !== undefined)
|
|
467
|
-
entry.metadata = doc.metadata;
|
|
468
|
-
return entry;
|
|
469
|
-
})
|
|
470
|
-
.filter((e) => e.timestamp >= start && e.timestamp <= end);
|
|
471
|
-
},
|
|
472
|
-
async count() {
|
|
473
|
-
const docs = await db.find(collection, {});
|
|
474
|
-
return docs.length;
|
|
475
|
-
},
|
|
476
|
-
async update() {
|
|
477
|
-
throw new Error('Cannot update audit log entries');
|
|
478
|
-
},
|
|
479
|
-
async delete() {
|
|
480
|
-
throw new Error('Cannot delete audit log entries');
|
|
481
|
-
},
|
|
482
|
-
};
|
|
483
|
-
}
|
|
484
|
-
/**
|
|
485
|
-
* MonDoAgent - Unified interface for AI agent operations
|
|
486
|
-
*
|
|
487
|
-
* Integrates the AgentFS virtual filesystem, glob, grep, KV store, and tool call
|
|
488
|
-
* auditing with Cloudflare Agent infrastructure.
|
|
489
|
-
*
|
|
490
|
-
* @example
|
|
491
|
-
* ```typescript
|
|
492
|
-
* const agent = new MonDoAgent(ctx, env)
|
|
493
|
-
* await agent.init()
|
|
494
|
-
*
|
|
495
|
-
* // Filesystem operations
|
|
496
|
-
* await agent.fs.writeFile('/config.json', '{}')
|
|
497
|
-
* const content = await agent.fs.readFile('/config.json')
|
|
498
|
-
*
|
|
499
|
-
* // Glob matching
|
|
500
|
-
* const tsFiles = await agent.glob('**\/*.ts')
|
|
501
|
-
*
|
|
502
|
-
* // Content search
|
|
503
|
-
* const matches = await agent.grep('TODO', { glob: '**\/*.ts' })
|
|
504
|
-
*
|
|
505
|
-
* // Key-value storage
|
|
506
|
-
* await agent.kv.set('session:123', { user: 'alice' })
|
|
507
|
-
* const session = await agent.kv.get('session:123')
|
|
508
|
-
*
|
|
509
|
-
* // Audit logging
|
|
510
|
-
* await agent.audit.record('read_file', { path: '/test.txt' }, { content: 'hello' })
|
|
511
|
-
* ```
|
|
512
|
-
*/
|
|
513
|
-
export class MonDoAgent {
|
|
514
|
-
/** Virtual filesystem for file and directory operations (with auto-auditing) */
|
|
515
|
-
fs;
|
|
516
|
-
/** Key-value store for session data, caches, etc. (with auto-auditing) */
|
|
517
|
-
kv;
|
|
518
|
-
/** Append-only audit log for tool call tracking */
|
|
519
|
-
audit;
|
|
520
|
-
/** Internal raw filesystem (without auditing wrapper) */
|
|
521
|
-
_rawFs;
|
|
522
|
-
/** Internal raw KV store (without auditing wrapper) */
|
|
523
|
-
_rawKv;
|
|
524
|
-
/** Agent state */
|
|
525
|
-
_state = { initialized: false };
|
|
526
|
-
/** SQL database from Cloudflare Agent */
|
|
527
|
-
sql;
|
|
528
|
-
/** Agent context */
|
|
529
|
-
ctx;
|
|
530
|
-
/** Agent environment */
|
|
531
|
-
env;
|
|
532
|
-
/** Active WebSocket connections */
|
|
533
|
-
_connections = new Set();
|
|
534
|
-
/**
|
|
535
|
-
* Create a new MonDoAgent instance
|
|
536
|
-
*
|
|
537
|
-
* @param ctx - Agent context (from Cloudflare Agent)
|
|
538
|
-
* @param env - Agent environment (Cloudflare bindings)
|
|
539
|
-
*/
|
|
540
|
-
constructor(ctx, env) {
|
|
541
|
-
this.ctx = ctx;
|
|
542
|
-
this.env = env;
|
|
543
|
-
// Create mock SQL interface (simulating Cloudflare Agent's this.sql)
|
|
544
|
-
this.sql = this.createSqlInterface();
|
|
545
|
-
// Create in-memory database for filesystem operations
|
|
546
|
-
const database = createInMemoryDatabase();
|
|
547
|
-
// Initialize raw components
|
|
548
|
-
this._rawFs = new AgentFilesystem(database);
|
|
549
|
-
const kvBackend = createKVBackendFromDatabase(database);
|
|
550
|
-
this._rawKv = new AgentFSKVStore(kvBackend);
|
|
551
|
-
const auditBackend = createAuditBackendFromDatabase(database);
|
|
552
|
-
this.audit = new ToolCallAuditLog(auditBackend);
|
|
553
|
-
// Create audited wrappers
|
|
554
|
-
this.fs = new AuditedFilesystem(this._rawFs, this.audit);
|
|
555
|
-
this.kv = new AuditedKVStore(this._rawKv, this.audit);
|
|
556
|
-
}
|
|
557
|
-
/**
|
|
558
|
-
* Create SQL interface (simulating Cloudflare Agent's this.sql)
|
|
559
|
-
*/
|
|
560
|
-
createSqlInterface() {
|
|
561
|
-
return {
|
|
562
|
-
exec: async (_sql) => ({ results: [] }),
|
|
563
|
-
prepare: (_sql) => ({
|
|
564
|
-
bind: function (..._params) { return this; },
|
|
565
|
-
run: async () => ({ results: [] }),
|
|
566
|
-
first: async () => null,
|
|
567
|
-
all: async () => ({ results: [] }),
|
|
568
|
-
}),
|
|
569
|
-
};
|
|
570
|
-
}
|
|
571
|
-
/**
|
|
572
|
-
* Set agent state (Cloudflare Agent compatibility)
|
|
573
|
-
*/
|
|
574
|
-
setState(newState) {
|
|
575
|
-
this._state = { ...this._state, ...newState };
|
|
576
|
-
}
|
|
577
|
-
/**
|
|
578
|
-
* Get agent state (Cloudflare Agent compatibility)
|
|
579
|
-
*/
|
|
580
|
-
getState() {
|
|
581
|
-
return this._state;
|
|
582
|
-
}
|
|
583
|
-
/**
|
|
584
|
-
* Initialize the agent
|
|
585
|
-
* Sets up all resources and marks state as initialized
|
|
586
|
-
*/
|
|
587
|
-
async init() {
|
|
588
|
-
// Perform any initialization tasks here
|
|
589
|
-
this.setState({ initialized: true });
|
|
590
|
-
}
|
|
591
|
-
/**
|
|
592
|
-
* Handle WebSocket connection
|
|
593
|
-
* Accepts connection, sets up handlers, and sends welcome message
|
|
594
|
-
*/
|
|
595
|
-
async onConnect(ws, _request) {
|
|
596
|
-
// Accept the connection
|
|
597
|
-
ws.accept();
|
|
598
|
-
// Track connection
|
|
599
|
-
this._connections.add(ws);
|
|
600
|
-
// Send welcome message
|
|
601
|
-
ws.send(JSON.stringify({ type: 'connected', timestamp: new Date().toISOString() }));
|
|
602
|
-
// Set up message handler
|
|
603
|
-
ws.addEventListener('message', async (event) => {
|
|
604
|
-
const messageEvent = event;
|
|
605
|
-
try {
|
|
606
|
-
const message = JSON.parse(messageEvent.data);
|
|
607
|
-
await this.onMessage(ws, message);
|
|
608
|
-
}
|
|
609
|
-
catch (error) {
|
|
610
|
-
ws.send(JSON.stringify({
|
|
611
|
-
type: 'error',
|
|
612
|
-
error: { message: 'Invalid message format' },
|
|
613
|
-
}));
|
|
614
|
-
}
|
|
615
|
-
});
|
|
616
|
-
// Set up close handler
|
|
617
|
-
ws.addEventListener('close', async (event) => {
|
|
618
|
-
const closeEvent = event;
|
|
619
|
-
this._connections.delete(ws);
|
|
620
|
-
// Record disconnect in audit log
|
|
621
|
-
await this.audit.record('websocket.disconnect', {
|
|
622
|
-
code: closeEvent.code,
|
|
623
|
-
reason: closeEvent.reason,
|
|
624
|
-
}, { success: true });
|
|
625
|
-
});
|
|
626
|
-
// Record connection in audit log
|
|
627
|
-
await this.audit.record('websocket.connect', {
|
|
628
|
-
url: _request.url,
|
|
629
|
-
}, { success: true });
|
|
630
|
-
}
|
|
631
|
-
/**
|
|
632
|
-
* Handle WebSocket message
|
|
633
|
-
* Parses tool call, executes it, and sends response
|
|
634
|
-
*/
|
|
635
|
-
async onMessage(ws, message) {
|
|
636
|
-
// Validate message
|
|
637
|
-
if (!message.id || !message.tool) {
|
|
638
|
-
ws.send(JSON.stringify({
|
|
639
|
-
type: 'error',
|
|
640
|
-
error: { message: 'Missing required fields: id and tool' },
|
|
641
|
-
}));
|
|
642
|
-
return;
|
|
643
|
-
}
|
|
644
|
-
const { id, tool, inputs = {}, stream = false } = message;
|
|
645
|
-
try {
|
|
646
|
-
const result = await this.executeToolCall(tool, inputs, stream, ws, id);
|
|
647
|
-
ws.send(JSON.stringify({
|
|
648
|
-
type: 'tool_result',
|
|
649
|
-
id,
|
|
650
|
-
result,
|
|
651
|
-
}));
|
|
652
|
-
}
|
|
653
|
-
catch (error) {
|
|
654
|
-
ws.send(JSON.stringify({
|
|
655
|
-
type: 'tool_error',
|
|
656
|
-
id,
|
|
657
|
-
error: {
|
|
658
|
-
message: error instanceof Error ? error.message : String(error),
|
|
659
|
-
},
|
|
660
|
-
}));
|
|
661
|
-
}
|
|
662
|
-
}
|
|
663
|
-
/**
|
|
664
|
-
* Execute a tool call and return the result
|
|
665
|
-
*/
|
|
666
|
-
async executeToolCall(tool, inputs, _stream, _ws, _callId) {
|
|
667
|
-
switch (tool) {
|
|
668
|
-
case 'fs.readFile': {
|
|
669
|
-
const content = await this.fs.readFile(inputs.path);
|
|
670
|
-
return { content, success: true };
|
|
671
|
-
}
|
|
672
|
-
case 'fs.writeFile': {
|
|
673
|
-
await this.fs.writeFile(inputs.path, inputs.content);
|
|
674
|
-
return { success: true };
|
|
675
|
-
}
|
|
676
|
-
case 'fs.deleteFile': {
|
|
677
|
-
await this.fs.deleteFile(inputs.path);
|
|
678
|
-
return { success: true };
|
|
679
|
-
}
|
|
680
|
-
case 'fs.readdir': {
|
|
681
|
-
const entries = await this.fs.readdir(inputs.path);
|
|
682
|
-
return { entries, success: true };
|
|
683
|
-
}
|
|
684
|
-
case 'fs.mkdir': {
|
|
685
|
-
await this.fs.mkdir(inputs.path);
|
|
686
|
-
return { success: true };
|
|
687
|
-
}
|
|
688
|
-
case 'fs.rmdir': {
|
|
689
|
-
await this.fs.rmdir(inputs.path);
|
|
690
|
-
return { success: true };
|
|
691
|
-
}
|
|
692
|
-
case 'fs.stat': {
|
|
693
|
-
const stat = await this.fs.stat(inputs.path);
|
|
694
|
-
return { stat, success: true };
|
|
695
|
-
}
|
|
696
|
-
case 'fs.exists': {
|
|
697
|
-
const exists = await this.fs.exists(inputs.path);
|
|
698
|
-
return { exists, success: true };
|
|
699
|
-
}
|
|
700
|
-
case 'glob': {
|
|
701
|
-
const files = await this.glob(inputs.pattern, inputs.options);
|
|
702
|
-
return { files, success: true };
|
|
703
|
-
}
|
|
704
|
-
case 'grep': {
|
|
705
|
-
const matches = await this.grep(inputs.pattern, inputs.options);
|
|
706
|
-
return { matches, success: true };
|
|
707
|
-
}
|
|
708
|
-
case 'kv.get': {
|
|
709
|
-
const value = await this.kv.get(inputs.key);
|
|
710
|
-
return { value, success: true };
|
|
711
|
-
}
|
|
712
|
-
case 'kv.set': {
|
|
713
|
-
await this.kv.set(inputs.key, inputs.value);
|
|
714
|
-
return { success: true };
|
|
715
|
-
}
|
|
716
|
-
case 'kv.delete': {
|
|
717
|
-
const deleted = await this.kv.delete(inputs.key);
|
|
718
|
-
return { deleted, success: true };
|
|
719
|
-
}
|
|
720
|
-
case 'kv.has': {
|
|
721
|
-
const exists = await this.kv.has(inputs.key);
|
|
722
|
-
return { exists, success: true };
|
|
723
|
-
}
|
|
724
|
-
case 'kv.keys': {
|
|
725
|
-
const keys = await this.kv.keys(inputs.prefix);
|
|
726
|
-
return { keys, success: true };
|
|
727
|
-
}
|
|
728
|
-
default:
|
|
729
|
-
throw new Error(`Unknown tool: ${tool}`);
|
|
730
|
-
}
|
|
731
|
-
}
|
|
732
|
-
/**
|
|
733
|
-
* Find files matching a glob pattern (with auto-auditing)
|
|
734
|
-
*
|
|
735
|
-
* @param pattern - Glob pattern (e.g., '**\/*.ts', 'src/*.js')
|
|
736
|
-
* @param options - Optional glob options
|
|
737
|
-
* @returns Array of matching file paths
|
|
738
|
-
*/
|
|
739
|
-
async glob(pattern, options) {
|
|
740
|
-
const startTime = new Date();
|
|
741
|
-
try {
|
|
742
|
-
// Use raw filesystem's glob to avoid double auditing
|
|
743
|
-
const allFiles = await this._rawFs.glob(pattern);
|
|
744
|
-
// Apply additional filtering if options provided
|
|
745
|
-
let result;
|
|
746
|
-
if (!options?.nocase && !options?.dot) {
|
|
747
|
-
result = allFiles;
|
|
748
|
-
}
|
|
749
|
-
else {
|
|
750
|
-
result = filterGlob(pattern, allFiles, options);
|
|
751
|
-
}
|
|
752
|
-
const endTime = new Date();
|
|
753
|
-
// Record in audit log
|
|
754
|
-
await this.audit.record('glob', { pattern, options }, { files: result, count: result.length, success: true }, { startTime, endTime });
|
|
755
|
-
return result;
|
|
756
|
-
}
|
|
757
|
-
catch (error) {
|
|
758
|
-
const endTime = new Date();
|
|
759
|
-
await this.audit.record('glob', { pattern, options }, {
|
|
760
|
-
success: false,
|
|
761
|
-
error: {
|
|
762
|
-
message: error instanceof Error ? error.message : String(error),
|
|
763
|
-
stack: error instanceof Error ? error.stack : undefined,
|
|
764
|
-
},
|
|
765
|
-
}, { startTime, endTime });
|
|
766
|
-
throw error;
|
|
767
|
-
}
|
|
768
|
-
}
|
|
769
|
-
/**
|
|
770
|
-
* Search file contents for a pattern (with auto-auditing)
|
|
771
|
-
*
|
|
772
|
-
* @param pattern - Regular expression pattern to search for
|
|
773
|
-
* @param options - Optional grep options
|
|
774
|
-
* @returns Array of grep matches
|
|
775
|
-
*/
|
|
776
|
-
async grep(pattern, options) {
|
|
777
|
-
const startTime = new Date();
|
|
778
|
-
try {
|
|
779
|
-
// Create a custom glob matcher that properly handles root-level files
|
|
780
|
-
// The default **/* pattern doesn't match files at root level
|
|
781
|
-
const customGlobMatcher = {
|
|
782
|
-
glob: async (globPattern) => {
|
|
783
|
-
// If pattern is **/* or similar, we need to also check root level
|
|
784
|
-
if (globPattern === '**/*' || globPattern === '/**/*') {
|
|
785
|
-
// Get all files by using a pattern that matches everything
|
|
786
|
-
const allFiles = await this._rawFs.glob('**/*');
|
|
787
|
-
// Also get root level files with a simple pattern
|
|
788
|
-
const rootFiles = await this._rawFs.glob('/*');
|
|
789
|
-
// Combine and dedupe
|
|
790
|
-
const combined = new Set([...allFiles, ...rootFiles]);
|
|
791
|
-
return Array.from(combined).sort();
|
|
792
|
-
}
|
|
793
|
-
return this._rawFs.glob(globPattern);
|
|
794
|
-
}
|
|
795
|
-
};
|
|
796
|
-
// Create a new AgentGrep with raw filesystem to avoid double auditing of file reads
|
|
797
|
-
const rawGrep = new AgentGrep(this._rawFs, customGlobMatcher);
|
|
798
|
-
const matches = await rawGrep.grep(pattern, options);
|
|
799
|
-
const endTime = new Date();
|
|
800
|
-
// Record in audit log
|
|
801
|
-
await this.audit.record('grep', { pattern, ...options }, { matches, count: matches.length, success: true }, { startTime, endTime });
|
|
802
|
-
return matches;
|
|
803
|
-
}
|
|
804
|
-
catch (error) {
|
|
805
|
-
const endTime = new Date();
|
|
806
|
-
await this.audit.record('grep', { pattern, ...options }, {
|
|
807
|
-
success: false,
|
|
808
|
-
error: {
|
|
809
|
-
message: error instanceof Error ? error.message : String(error),
|
|
810
|
-
stack: error instanceof Error ? error.stack : undefined,
|
|
811
|
-
},
|
|
812
|
-
}, { startTime, endTime });
|
|
813
|
-
throw error;
|
|
814
|
-
}
|
|
815
|
-
}
|
|
816
|
-
/**
|
|
817
|
-
* Search and return only file paths containing matches
|
|
818
|
-
*
|
|
819
|
-
* @param pattern - Regular expression pattern to search for
|
|
820
|
-
* @param options - Optional grep options
|
|
821
|
-
* @returns Array of unique file paths
|
|
822
|
-
*/
|
|
823
|
-
async grepFiles(pattern, options) {
|
|
824
|
-
const matches = await this.grep(pattern, options);
|
|
825
|
-
const uniqueFiles = new Set(matches.map((m) => m.file));
|
|
826
|
-
return Array.from(uniqueFiles);
|
|
827
|
-
}
|
|
828
|
-
/**
|
|
829
|
-
* Count matches per file
|
|
830
|
-
*
|
|
831
|
-
* @param pattern - Regular expression pattern to search for
|
|
832
|
-
* @param options - Optional grep options
|
|
833
|
-
* @returns Map of file path to match count
|
|
834
|
-
*/
|
|
835
|
-
async grepCount(pattern, options) {
|
|
836
|
-
// Remove maxResults to get all matches for counting
|
|
837
|
-
const { maxResults: _maxResults, ...restOptions } = options ?? {};
|
|
838
|
-
const matches = await this.grep(pattern, restOptions);
|
|
839
|
-
const counts = new Map();
|
|
840
|
-
for (const match of matches) {
|
|
841
|
-
counts.set(match.file, (counts.get(match.file) ?? 0) + 1);
|
|
842
|
-
}
|
|
843
|
-
return counts;
|
|
844
|
-
}
|
|
845
|
-
}
|
|
846
|
-
/**
|
|
847
|
-
* Create a new MonDoAgent instance (legacy factory function)
|
|
848
|
-
*
|
|
849
|
-
* @param options - Configuration options
|
|
850
|
-
* @returns Configured MonDoAgent instance
|
|
851
|
-
*/
|
|
852
|
-
export function createMonDoAgent(_options) {
|
|
853
|
-
// Create a mock context and env for legacy compatibility
|
|
854
|
-
const ctx = {
|
|
855
|
-
id: 'legacy-agent',
|
|
856
|
-
storage: {
|
|
857
|
-
get: async () => null,
|
|
858
|
-
put: async () => { },
|
|
859
|
-
delete: async () => false,
|
|
860
|
-
list: async () => new Map(),
|
|
861
|
-
},
|
|
862
|
-
blockConcurrencyWhile: async (fn) => fn(),
|
|
863
|
-
};
|
|
864
|
-
const env = {};
|
|
865
|
-
return new MonDoAgent(ctx, env);
|
|
866
|
-
}
|
|
867
|
-
/**
|
|
868
|
-
* Type guard to check if an object is a MonDoAgent
|
|
869
|
-
*/
|
|
870
|
-
export function isMonDoAgent(obj) {
|
|
871
|
-
return (obj !== null &&
|
|
872
|
-
typeof obj === 'object' &&
|
|
873
|
-
'fs' in obj &&
|
|
874
|
-
'kv' in obj &&
|
|
875
|
-
'audit' in obj &&
|
|
876
|
-
typeof obj.glob === 'function' &&
|
|
877
|
-
typeof obj.grep === 'function');
|
|
878
|
-
}
|
|
879
|
-
//# sourceMappingURL=mondo-agent.js.map
|