Showing preview only (9,269K chars total). Download the full file or copy to clipboard to get everything.
Repository: the-dev-tools/dev-tools
Branch: main
Commit: 6ce75086a2d6
Files: 1290
Total size: 21.2 MB
Directory structure:
gitextract_0r326h2t/
├── .editorconfig
├── .envrc
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-report.yaml
│ │ ├── config.yml
│ │ └── feature-request.yaml
│ ├── actions/
│ │ ├── dependencies-unix/
│ │ │ └── action.yaml
│ │ ├── dependencies-windows/
│ │ │ └── action.yaml
│ │ └── setup/
│ │ └── action.yaml
│ └── workflows/
│ ├── benchmark-generic.yml
│ ├── check.yaml
│ ├── goci.yml
│ ├── release-chrome-extension.yaml
│ ├── release-cloudflare-pages.yaml
│ ├── release-electron-builder.yaml
│ ├── release-go.yaml
│ ├── release.yaml
│ ├── sql.yml
│ └── update-scoop.yaml
├── .gitignore
├── .golangci.yml
├── .prettierignore
├── .sqlfluff
├── .vscode/
│ ├── extensions.json
│ └── settings.json
├── AGENTS.md
├── LICENSE
├── README.md
├── apps/
│ ├── api-recorder-extension/
│ │ ├── eslint.config.ts
│ │ ├── package.disabled.json
│ │ ├── postcss.config.js
│ │ ├── project.disabled.json
│ │ ├── src/
│ │ │ ├── auth.ts
│ │ │ ├── background.ts
│ │ │ ├── layout.tsx
│ │ │ ├── popup.tsx
│ │ │ ├── postman.ts
│ │ │ ├── recorder.ts
│ │ │ ├── runtime.ts
│ │ │ ├── storage.ts
│ │ │ ├── styles.css
│ │ │ ├── tabs/
│ │ │ │ └── auth-callback.tsx
│ │ │ ├── types.d.ts
│ │ │ ├── ui/
│ │ │ │ └── button.tsx
│ │ │ └── utils.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.lib.json
│ ├── cli/
│ │ ├── .devtools.yaml
│ │ ├── CHANGELOG.md
│ │ ├── cmd/
│ │ │ ├── config.go
│ │ │ ├── flow.go
│ │ │ ├── import.go
│ │ │ ├── root.go
│ │ │ └── version.go
│ │ ├── embedded/
│ │ │ └── embeddedJS/
│ │ │ └── embededJS.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── install.sh
│ │ ├── internal/
│ │ │ ├── common/
│ │ │ │ └── services.go
│ │ │ ├── importer/
│ │ │ │ ├── importer.go
│ │ │ │ └── importer_test.go
│ │ │ ├── model/
│ │ │ │ └── result.go
│ │ │ ├── reporter/
│ │ │ │ ├── reporter.go
│ │ │ │ └── reporter_test.go
│ │ │ └── runner/
│ │ │ ├── jsrunner.go
│ │ │ ├── runner.go
│ │ │ └── runner_test.go
│ │ ├── main.go
│ │ ├── mode_cli.go
│ │ ├── package.json
│ │ ├── project.json
│ │ ├── taskfile.yaml
│ │ └── test/
│ │ └── yamlflow/
│ │ ├── ai_node_example.yaml
│ │ ├── example_run_yamlflow.yaml
│ │ ├── file_upload_example.yaml
│ │ ├── graphql_run_example.yaml
│ │ ├── integration_yamlflow_test.go
│ │ ├── loop_break_example.yaml
│ │ ├── multi_flow_run_example.yaml
│ │ ├── simple_run_example.yaml
│ │ ├── test_run_field.yaml
│ │ ├── testdata/
│ │ │ └── sample.txt
│ │ └── ws_run_example.yaml
│ └── desktop/
│ ├── CHANGELOG.md
│ ├── build/
│ │ ├── electron-publisher-custom.js
│ │ ├── entitlements.mac.plist
│ │ └── icon.icns
│ ├── build.ts
│ ├── electron.vite.config.ts
│ ├── eslint.config.ts
│ ├── package.json
│ ├── project.json
│ ├── src/
│ │ ├── main/
│ │ │ ├── env.d.ts
│ │ │ ├── index.ts
│ │ │ └── update.ts
│ │ ├── preload/
│ │ │ └── index.ts
│ │ └── renderer/
│ │ ├── env.d.ts
│ │ ├── index.html
│ │ ├── main.tsx
│ │ └── styles.css
│ ├── tsconfig.json
│ └── tsconfig.lib.json
├── docs/
│ ├── CODE-OF-CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ └── cli.md
├── eslint.config.ts
├── flake.nix
├── go.work
├── go.work.sum
├── install.ps1
├── nx.json
├── package.json
├── packages/
│ ├── auth/
│ │ ├── eslint.config.ts
│ │ ├── package.json
│ │ ├── project.json
│ │ ├── src/
│ │ │ ├── adapter.test.ts
│ │ │ ├── adapter.ts
│ │ │ ├── auth-effect.ts
│ │ │ ├── auth.ts
│ │ │ ├── client.ts
│ │ │ ├── config.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.json
│ │ ├── tsconfig.lib.json
│ │ └── vitest.config.ts
│ ├── auth-lib/
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── jwks/
│ │ │ ├── jwks.go
│ │ │ └── jwks_test.go
│ │ └── project.json
│ ├── client/
│ │ ├── .storybook/
│ │ │ ├── main.ts
│ │ │ ├── manager.ts
│ │ │ └── preview.tsx
│ │ ├── eslint.config.ts
│ │ ├── index.html
│ │ ├── package.json
│ │ ├── project.json
│ │ ├── src/
│ │ │ ├── app/
│ │ │ │ ├── context.tsx
│ │ │ │ ├── dev-tools.tsx
│ │ │ │ ├── entrypoint.tsx
│ │ │ │ ├── env.d.ts
│ │ │ │ ├── error.tsx
│ │ │ │ ├── import-meta.d.ts
│ │ │ │ ├── index.tsx
│ │ │ │ ├── router/
│ │ │ │ │ ├── index.tsx
│ │ │ │ │ ├── route-tree.gen.ts
│ │ │ │ │ ├── routes/
│ │ │ │ │ │ ├── (dashboard)/
│ │ │ │ │ │ │ └── __virtual.ts
│ │ │ │ │ │ └── __root.tsx
│ │ │ │ │ └── vite.tsx
│ │ │ │ ├── styles.css
│ │ │ │ └── umami.tsx
│ │ │ ├── features/
│ │ │ │ ├── agent/
│ │ │ │ │ ├── agent-logger.ts
│ │ │ │ │ ├── context-builder.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── layout.ts
│ │ │ │ │ ├── tool-executor.ts
│ │ │ │ │ ├── tool-schemas.ts
│ │ │ │ │ ├── types.ts
│ │ │ │ │ ├── use-agent-chat.ts
│ │ │ │ │ └── use-agent-provider-key.ts
│ │ │ │ ├── delta/
│ │ │ │ │ └── index.tsx
│ │ │ │ ├── expression/
│ │ │ │ │ ├── code-mirror/
│ │ │ │ │ │ ├── drop-extension.ts
│ │ │ │ │ │ ├── extensions.tsx
│ │ │ │ │ │ ├── syntax.grammar
│ │ │ │ │ │ └── syntax.grammar.d.ts
│ │ │ │ │ ├── guess-language.tsx
│ │ │ │ │ ├── index.tsx
│ │ │ │ │ ├── prettier.tsx
│ │ │ │ │ ├── reference-path.ts
│ │ │ │ │ └── reference.tsx
│ │ │ │ ├── file-system/
│ │ │ │ │ └── index.tsx
│ │ │ │ └── form-table/
│ │ │ │ └── index.tsx
│ │ │ ├── pages/
│ │ │ │ ├── credential/
│ │ │ │ │ ├── @x/
│ │ │ │ │ │ └── workspace.tsx
│ │ │ │ │ ├── routes/
│ │ │ │ │ │ └── credential/
│ │ │ │ │ │ └── $credentialIdCan/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ └── tab.tsx
│ │ │ │ ├── dashboard/
│ │ │ │ │ ├── index.tsx
│ │ │ │ │ └── routes/
│ │ │ │ │ ├── (user)/
│ │ │ │ │ │ └── __virtual.ts
│ │ │ │ │ ├── (workspace)/
│ │ │ │ │ │ └── __virtual.ts
│ │ │ │ │ └── index.tsx
│ │ │ │ ├── flow/
│ │ │ │ │ ├── @x/
│ │ │ │ │ │ └── workspace.tsx
│ │ │ │ │ ├── add-node.tsx
│ │ │ │ │ ├── agent-panel.tsx
│ │ │ │ │ ├── context.tsx
│ │ │ │ │ ├── edge.tsx
│ │ │ │ │ ├── edit.tsx
│ │ │ │ │ ├── handle.tsx
│ │ │ │ │ ├── history.tsx
│ │ │ │ │ ├── node.tsx
│ │ │ │ │ ├── nodes/
│ │ │ │ │ │ ├── ai.tsx
│ │ │ │ │ │ ├── condition.tsx
│ │ │ │ │ │ ├── for-each.tsx
│ │ │ │ │ │ ├── for.tsx
│ │ │ │ │ │ ├── graphql.tsx
│ │ │ │ │ │ ├── http.tsx
│ │ │ │ │ │ ├── javascript.tsx
│ │ │ │ │ │ ├── manual-start.tsx
│ │ │ │ │ │ ├── run-sub-flow.tsx
│ │ │ │ │ │ ├── sub-flow-return.tsx
│ │ │ │ │ │ ├── sub-flow-trigger.tsx
│ │ │ │ │ │ ├── wait.tsx
│ │ │ │ │ │ ├── ws-connection.tsx
│ │ │ │ │ │ └── ws-send.tsx
│ │ │ │ │ ├── routes/
│ │ │ │ │ │ └── flow/
│ │ │ │ │ │ └── $flowIdCan/
│ │ │ │ │ │ ├── history.tsx
│ │ │ │ │ │ ├── index.tsx
│ │ │ │ │ │ └── route.tsx
│ │ │ │ │ ├── selection.ts
│ │ │ │ │ ├── tab.tsx
│ │ │ │ │ ├── undo.ts
│ │ │ │ │ └── viewport.tsx
│ │ │ │ ├── graphql/
│ │ │ │ │ ├── @x/
│ │ │ │ │ │ ├── flow.tsx
│ │ │ │ │ │ └── workspace.tsx
│ │ │ │ │ ├── history.tsx
│ │ │ │ │ ├── page.tsx
│ │ │ │ │ ├── request/
│ │ │ │ │ │ ├── assert.tsx
│ │ │ │ │ │ ├── header.tsx
│ │ │ │ │ │ ├── index.tsx
│ │ │ │ │ │ ├── panel.tsx
│ │ │ │ │ │ ├── query-editor.tsx
│ │ │ │ │ │ ├── top-bar.tsx
│ │ │ │ │ │ ├── url.tsx
│ │ │ │ │ │ └── variables-editor.tsx
│ │ │ │ │ ├── response/
│ │ │ │ │ │ ├── assert.tsx
│ │ │ │ │ │ ├── body.tsx
│ │ │ │ │ │ ├── header.tsx
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── routes/
│ │ │ │ │ │ └── graphql/
│ │ │ │ │ │ └── $graphqlIdCan/
│ │ │ │ │ │ ├── delta.$deltaGraphqlIdCan.tsx
│ │ │ │ │ │ ├── index.tsx
│ │ │ │ │ │ └── route.tsx
│ │ │ │ │ └── tab.tsx
│ │ │ │ ├── http/
│ │ │ │ │ ├── @x/
│ │ │ │ │ │ ├── flow.tsx
│ │ │ │ │ │ └── workspace.tsx
│ │ │ │ │ ├── history.tsx
│ │ │ │ │ ├── page.tsx
│ │ │ │ │ ├── request/
│ │ │ │ │ │ ├── assert.tsx
│ │ │ │ │ │ ├── body/
│ │ │ │ │ │ │ ├── form-data.tsx
│ │ │ │ │ │ │ ├── panel.tsx
│ │ │ │ │ │ │ ├── raw.tsx
│ │ │ │ │ │ │ └── url-encoded.tsx
│ │ │ │ │ │ ├── header.tsx
│ │ │ │ │ │ ├── index.tsx
│ │ │ │ │ │ ├── panel.tsx
│ │ │ │ │ │ ├── search-param.tsx
│ │ │ │ │ │ ├── top-bar.tsx
│ │ │ │ │ │ └── url.tsx
│ │ │ │ │ ├── response/
│ │ │ │ │ │ ├── assert.tsx
│ │ │ │ │ │ ├── body.tsx
│ │ │ │ │ │ ├── header.tsx
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── routes/
│ │ │ │ │ │ └── http/
│ │ │ │ │ │ └── $httpIdCan/
│ │ │ │ │ │ ├── delta.$deltaHttpIdCan.tsx
│ │ │ │ │ │ ├── index.tsx
│ │ │ │ │ │ └── route.tsx
│ │ │ │ │ └── tab.tsx
│ │ │ │ ├── user/
│ │ │ │ │ ├── @x/
│ │ │ │ │ │ └── dashboard.tsx
│ │ │ │ │ └── routes/
│ │ │ │ │ ├── signIn.tsx
│ │ │ │ │ └── signUp.tsx
│ │ │ │ ├── websocket/
│ │ │ │ │ ├── @x/
│ │ │ │ │ │ ├── flow.tsx
│ │ │ │ │ │ └── workspace.tsx
│ │ │ │ │ ├── page.tsx
│ │ │ │ │ ├── request/
│ │ │ │ │ │ ├── header.tsx
│ │ │ │ │ │ ├── index.tsx
│ │ │ │ │ │ ├── panel.tsx
│ │ │ │ │ │ ├── top-bar.tsx
│ │ │ │ │ │ └── url.tsx
│ │ │ │ │ ├── response/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── routes/
│ │ │ │ │ │ └── websocket/
│ │ │ │ │ │ └── $websocketIdCan/
│ │ │ │ │ │ ├── index.tsx
│ │ │ │ │ │ └── route.tsx
│ │ │ │ │ ├── tab.tsx
│ │ │ │ │ └── use-websocket.ts
│ │ │ │ └── workspace/
│ │ │ │ ├── @x/
│ │ │ │ │ └── dashboard.tsx
│ │ │ │ ├── routes/
│ │ │ │ │ └── workspace/
│ │ │ │ │ └── $workspaceIdCan/
│ │ │ │ │ ├── (credential)/
│ │ │ │ │ │ └── __virtual.ts
│ │ │ │ │ ├── (flow)/
│ │ │ │ │ │ └── __virtual.ts
│ │ │ │ │ ├── (graphql)/
│ │ │ │ │ │ └── __virtual.ts
│ │ │ │ │ ├── (http)/
│ │ │ │ │ │ └── __virtual.ts
│ │ │ │ │ ├── (websocket)/
│ │ │ │ │ │ └── __virtual.ts
│ │ │ │ │ ├── index.tsx
│ │ │ │ │ └── route.tsx
│ │ │ │ └── ui/
│ │ │ │ └── status-bar.tsx
│ │ │ ├── shared/
│ │ │ │ ├── api/
│ │ │ │ │ ├── auth.internal.tsx
│ │ │ │ │ ├── auth.tsx
│ │ │ │ │ ├── collection.internal.tsx
│ │ │ │ │ ├── collection.tsx
│ │ │ │ │ ├── connect-query.tsx
│ │ │ │ │ ├── connect-rpc.tsx
│ │ │ │ │ ├── index.tsx
│ │ │ │ │ ├── interceptors.tsx
│ │ │ │ │ ├── mock.tsx
│ │ │ │ │ ├── protobuf.tsx
│ │ │ │ │ └── transport.tsx
│ │ │ │ ├── lib/
│ │ │ │ │ ├── faker.tsx
│ │ │ │ │ ├── index.tsx
│ │ │ │ │ ├── order.tsx
│ │ │ │ │ ├── react-render.tsx
│ │ │ │ │ ├── router.tsx
│ │ │ │ │ ├── runtime.tsx
│ │ │ │ │ ├── tanstack-db.tsx
│ │ │ │ │ └── types.tsx
│ │ │ │ ├── routes.tsx
│ │ │ │ └── ui/
│ │ │ │ ├── dashboard.tsx
│ │ │ │ └── index.tsx
│ │ │ └── widgets/
│ │ │ ├── environment/
│ │ │ │ └── index.tsx
│ │ │ ├── export/
│ │ │ │ └── index.tsx
│ │ │ ├── import/
│ │ │ │ └── index.tsx
│ │ │ └── tabs/
│ │ │ └── index.tsx
│ │ ├── tsconfig.json
│ │ ├── tsconfig.lib.json
│ │ └── vite.config.ts
│ ├── db/
│ │ ├── ai_test.go
│ │ ├── db.go
│ │ ├── flow_node_http_test.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── pkg/
│ │ │ ├── dbtest/
│ │ │ │ ├── unix.go
│ │ │ │ └── windows.go
│ │ │ ├── sqlc/
│ │ │ │ ├── gen/
│ │ │ │ │ ├── ai.sql.go
│ │ │ │ │ ├── betterauth.sql.go
│ │ │ │ │ ├── db.go
│ │ │ │ │ ├── environment.sql.go
│ │ │ │ │ ├── files.sql.go
│ │ │ │ │ ├── flow.sql.go
│ │ │ │ │ ├── graphql.sql.go
│ │ │ │ │ ├── http.sql.go
│ │ │ │ │ ├── models.go
│ │ │ │ │ ├── streaming_bench_test.go
│ │ │ │ │ ├── users.sql.go
│ │ │ │ │ ├── websocket.sql.go
│ │ │ │ │ └── workspaces.sql.go
│ │ │ │ ├── pyproject.toml
│ │ │ │ ├── queries/
│ │ │ │ │ ├── ai.sql
│ │ │ │ │ ├── betterauth.sql
│ │ │ │ │ ├── environment.sql
│ │ │ │ │ ├── files.sql
│ │ │ │ │ ├── flow.sql
│ │ │ │ │ ├── graphql.sql
│ │ │ │ │ ├── http.sql
│ │ │ │ │ ├── users.sql
│ │ │ │ │ ├── websocket.sql
│ │ │ │ │ └── workspaces.sql
│ │ │ │ ├── schema/
│ │ │ │ │ ├── 00_users.sql
│ │ │ │ │ ├── 01_workspaces.sql
│ │ │ │ │ ├── 02_environment.sql
│ │ │ │ │ ├── 03_files.sql
│ │ │ │ │ ├── 04_http.sql
│ │ │ │ │ ├── 05_flow.sql
│ │ │ │ │ ├── 06_migration.sql
│ │ │ │ │ ├── 07_ai.sql
│ │ │ │ │ ├── 08_betterauth.sql
│ │ │ │ │ ├── 08_graphql.sql
│ │ │ │ │ ├── 09_graphql_delta.sql
│ │ │ │ │ └── 10_websocket.sql
│ │ │ │ ├── sqlc.go
│ │ │ │ └── sqlc.yaml
│ │ │ ├── sqlitelocal/
│ │ │ │ └── sqlitelocal.go
│ │ │ ├── sqlitemem/
│ │ │ │ └── sqlitemem.go
│ │ │ ├── tursolocal/
│ │ │ │ ├── linux.go
│ │ │ │ ├── tursolocal_bench_test.go
│ │ │ │ ├── types.go
│ │ │ │ └── windows.go
│ │ │ └── tursomem/
│ │ │ ├── linux.go
│ │ │ └── windows.go
│ │ ├── project.json
│ │ └── verification_test.go
│ ├── server/
│ │ ├── .golangci.yml
│ │ ├── cmd/
│ │ │ ├── authadapter-testserver/
│ │ │ │ └── main.go
│ │ │ ├── server/
│ │ │ │ └── server.go
│ │ │ └── serverrun/
│ │ │ └── serverrun.go
│ │ ├── docs/
│ │ │ └── specs/
│ │ │ ├── BACKEND_ARCHITECTURE_V2.md
│ │ │ ├── BULK_SYNC_TRANSACTION_WRAPPERS.md
│ │ │ ├── FLOW.md
│ │ │ ├── GRAPHQL.md
│ │ │ ├── HTTP.md
│ │ │ ├── MUTATION.md
│ │ │ ├── NEW_FLOW_NODE.md
│ │ │ └── SYNC.md
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── internal/
│ │ │ ├── api/
│ │ │ │ ├── api.go
│ │ │ │ ├── api_unix.go
│ │ │ │ ├── api_windows.go
│ │ │ │ ├── middleware/
│ │ │ │ │ ├── mwauth/
│ │ │ │ │ │ ├── helpers.go
│ │ │ │ │ │ ├── mwauth.go
│ │ │ │ │ │ └── mwauth_test.go
│ │ │ │ │ ├── mwcodec/
│ │ │ │ │ │ └── mwcodec.go
│ │ │ │ │ └── mwcompress/
│ │ │ │ │ └── mwcompress.go
│ │ │ │ ├── rauthadapter/
│ │ │ │ │ ├── rauthadapter.go
│ │ │ │ │ └── rauthadapter_test.go
│ │ │ │ ├── rcredential/
│ │ │ │ │ ├── deps_test.go
│ │ │ │ │ ├── rcredential.go
│ │ │ │ │ └── rcredential_test.go
│ │ │ │ ├── renv/
│ │ │ │ │ ├── deps_test.go
│ │ │ │ │ ├── renv.go
│ │ │ │ │ └── renv_test.go
│ │ │ │ ├── rexportv2/
│ │ │ │ │ ├── export.go
│ │ │ │ │ ├── exporter_test.go
│ │ │ │ │ ├── integration_test.go
│ │ │ │ │ ├── rexportv2.go
│ │ │ │ │ ├── rexportv2_test.go
│ │ │ │ │ ├── service_test.go
│ │ │ │ │ ├── storage.go
│ │ │ │ │ ├── storage_test.go
│ │ │ │ │ └── validation_test.go
│ │ │ │ ├── rfile/
│ │ │ │ │ ├── integration_test.go
│ │ │ │ │ ├── rfile.go
│ │ │ │ │ ├── rfile_rpc_test.go
│ │ │ │ │ └── rfile_test.go
│ │ │ │ ├── rflowv2/
│ │ │ │ │ ├── assertion_race_test.go
│ │ │ │ │ ├── chaos_test.go
│ │ │ │ │ ├── delta_integration_test.go
│ │ │ │ │ ├── execution_cache_test.go
│ │ │ │ │ ├── import_interface.go
│ │ │ │ │ ├── js_e2e_test.go
│ │ │ │ │ ├── logging_test.go
│ │ │ │ │ ├── node_config_sync_test.go
│ │ │ │ │ ├── node_sync_test.go
│ │ │ │ │ ├── relaxed_insert_test.go
│ │ │ │ │ ├── rflowv2.go
│ │ │ │ │ ├── rflowv2_common.go
│ │ │ │ │ ├── rflowv2_common_test.go
│ │ │ │ │ ├── rflowv2_concurrency_test.go
│ │ │ │ │ ├── rflowv2_copy_paste.go
│ │ │ │ │ ├── rflowv2_copy_paste_test.go
│ │ │ │ │ ├── rflowv2_edge.go
│ │ │ │ │ ├── rflowv2_edge_test.go
│ │ │ │ │ ├── rflowv2_edge_transaction_test.go
│ │ │ │ │ ├── rflowv2_exec.go
│ │ │ │ │ ├── rflowv2_exec_publisher.go
│ │ │ │ │ ├── rflowv2_exec_sync_test.go
│ │ │ │ │ ├── rflowv2_exec_test.go
│ │ │ │ │ ├── rflowv2_exec_transaction_test.go
│ │ │ │ │ ├── rflowv2_flow.go
│ │ │ │ │ ├── rflowv2_flow_create_test.go
│ │ │ │ │ ├── rflowv2_flow_duplicate_sync_test.go
│ │ │ │ │ ├── rflowv2_flow_transaction_test.go
│ │ │ │ │ ├── rflowv2_import.go
│ │ │ │ │ ├── rflowv2_mutation_verification_test.go
│ │ │ │ │ ├── rflowv2_node.go
│ │ │ │ │ ├── rflowv2_node_ai.go
│ │ │ │ │ ├── rflowv2_node_ai_provider.go
│ │ │ │ │ ├── rflowv2_node_condition.go
│ │ │ │ │ ├── rflowv2_node_condition_test.go
│ │ │ │ │ ├── rflowv2_node_condition_transaction_test.go
│ │ │ │ │ ├── rflowv2_node_exec.go
│ │ │ │ │ ├── rflowv2_node_exec_test.go
│ │ │ │ │ ├── rflowv2_node_for.go
│ │ │ │ │ ├── rflowv2_node_for_test.go
│ │ │ │ │ ├── rflowv2_node_for_transaction_test.go
│ │ │ │ │ ├── rflowv2_node_for_zero_value_test.go
│ │ │ │ │ ├── rflowv2_node_foreach.go
│ │ │ │ │ ├── rflowv2_node_foreach_transaction_test.go
│ │ │ │ │ ├── rflowv2_node_graphql.go
│ │ │ │ │ ├── rflowv2_node_http.go
│ │ │ │ │ ├── rflowv2_node_http_test.go
│ │ │ │ │ ├── rflowv2_node_http_transaction_test.go
│ │ │ │ │ ├── rflowv2_node_javascript.go
│ │ │ │ │ ├── rflowv2_node_javascript_transaction_test.go
│ │ │ │ │ ├── rflowv2_node_memory.go
│ │ │ │ │ ├── rflowv2_node_run_sub_flow.go
│ │ │ │ │ ├── rflowv2_node_sub_flow_return.go
│ │ │ │ │ ├── rflowv2_node_sub_flow_trigger.go
│ │ │ │ │ ├── rflowv2_node_test.go
│ │ │ │ │ ├── rflowv2_node_wait.go
│ │ │ │ │ ├── rflowv2_node_ws_connection.go
│ │ │ │ │ ├── rflowv2_node_ws_send.go
│ │ │ │ │ ├── rflowv2_parity_test.go
│ │ │ │ │ ├── rflowv2_sync_zero_value_test.go
│ │ │ │ │ ├── rflowv2_test.go
│ │ │ │ │ ├── rflowv2_testutil_test.go
│ │ │ │ │ ├── rflowv2_variable.go
│ │ │ │ │ ├── rflowv2_variable_transaction_test.go
│ │ │ │ │ ├── rflowv2_version.go
│ │ │ │ │ ├── simple_import_test.go
│ │ │ │ │ └── sync_robustness_test.go
│ │ │ │ ├── rgraphql/
│ │ │ │ │ ├── rgraphql.go
│ │ │ │ │ ├── rgraphql_converter.go
│ │ │ │ │ ├── rgraphql_crud.go
│ │ │ │ │ ├── rgraphql_crud_assert.go
│ │ │ │ │ ├── rgraphql_crud_delta.go
│ │ │ │ │ ├── rgraphql_crud_header.go
│ │ │ │ │ ├── rgraphql_crud_header_delta.go
│ │ │ │ │ ├── rgraphql_crud_response.go
│ │ │ │ │ ├── rgraphql_crud_response_assert.go
│ │ │ │ │ ├── rgraphql_crud_version.go
│ │ │ │ │ ├── rgraphql_delta_converter.go
│ │ │ │ │ ├── rgraphql_exec.go
│ │ │ │ │ ├── rgraphql_exec_assert.go
│ │ │ │ │ └── rgraphql_exec_assert_test.go
│ │ │ │ ├── rhealth/
│ │ │ │ │ ├── rhealth.go
│ │ │ │ │ └── rhealth_test.go
│ │ │ │ ├── rhttp/
│ │ │ │ │ ├── logging_test.go
│ │ │ │ │ ├── rhttp.go
│ │ │ │ │ ├── rhttp_body_kind_test.go
│ │ │ │ │ ├── rhttp_common.go
│ │ │ │ │ ├── rhttp_converter.go
│ │ │ │ │ ├── rhttp_crud.go
│ │ │ │ │ ├── rhttp_crud_assert.go
│ │ │ │ │ ├── rhttp_crud_assert_rpc_test.go
│ │ │ │ │ ├── rhttp_crud_body.go
│ │ │ │ │ ├── rhttp_crud_body_rpc_test.go
│ │ │ │ │ ├── rhttp_crud_header.go
│ │ │ │ │ ├── rhttp_crud_param.go
│ │ │ │ │ ├── rhttp_crud_param_rpc_test.go
│ │ │ │ │ ├── rhttp_crud_response.go
│ │ │ │ │ ├── rhttp_crud_rpc_test.go
│ │ │ │ │ ├── rhttp_default_test.go
│ │ │ │ │ ├── rhttp_delta_assert.go
│ │ │ │ │ ├── rhttp_delta_body_raw.go
│ │ │ │ │ ├── rhttp_delta_body_raw_test.go
│ │ │ │ │ ├── rhttp_delta_body_structured.go
│ │ │ │ │ ├── rhttp_delta_body_structured_test.go
│ │ │ │ │ ├── rhttp_delta_child_test.go
│ │ │ │ │ ├── rhttp_delta_collection_test.go
│ │ │ │ │ ├── rhttp_delta_header.go
│ │ │ │ │ ├── rhttp_delta_header_test.go
│ │ │ │ │ ├── rhttp_delta_param.go
│ │ │ │ │ ├── rhttp_delta_param_test.go
│ │ │ │ │ ├── rhttp_delta_request.go
│ │ │ │ │ ├── rhttp_delta_test.go
│ │ │ │ │ ├── rhttp_exec.go
│ │ │ │ │ ├── rhttp_exec_delta_test.go
│ │ │ │ │ ├── rhttp_id_test.go
│ │ │ │ │ ├── rhttp_integration_test.go
│ │ │ │ │ ├── rhttp_run_sync_parity_test.go
│ │ │ │ │ ├── rhttp_run_sync_test.go
│ │ │ │ │ ├── rhttp_run_version_test.go
│ │ │ │ │ ├── rhttp_streaming_test.go
│ │ │ │ │ ├── rhttp_sync_delta_test.go
│ │ │ │ │ ├── rhttp_sync_parity_test.go
│ │ │ │ │ ├── rhttp_sync_rpc_test.go
│ │ │ │ │ ├── rhttp_test.go
│ │ │ │ │ ├── rhttp_testutil_test.go
│ │ │ │ │ ├── rhttp_transaction_test.go
│ │ │ │ │ ├── rhttp_version.go
│ │ │ │ │ ├── rhttp_version_concurrency_test.go
│ │ │ │ │ ├── rhttp_version_fix_test.go
│ │ │ │ │ └── rhttp_version_snapshot_test.go
│ │ │ │ ├── rimportv2/
│ │ │ │ │ ├── concurrency_stress_test.go
│ │ │ │ │ ├── dedup.go
│ │ │ │ │ ├── dedup_test.go
│ │ │ │ │ ├── duplicate_import_test.go
│ │ │ │ │ ├── edge_cases_test.go
│ │ │ │ │ ├── env_sync_test.go
│ │ │ │ │ ├── file_collision_test.go
│ │ │ │ │ ├── format_detection.go
│ │ │ │ │ ├── fuzz_test.go
│ │ │ │ │ ├── integration_test.go
│ │ │ │ │ ├── integration_unified_test.go
│ │ │ │ │ ├── integrity.go
│ │ │ │ │ ├── integrity_test.go
│ │ │ │ │ ├── performance_test.go
│ │ │ │ │ ├── postman_stuck_test.go
│ │ │ │ │ ├── realhar_test.go
│ │ │ │ │ ├── realyaml_test.go
│ │ │ │ │ ├── rimportv2.go
│ │ │ │ │ ├── rimportv2_convert.go
│ │ │ │ │ ├── rimportv2_delta_e2e_test.go
│ │ │ │ │ ├── rimportv2_domain.go
│ │ │ │ │ ├── rimportv2_event.go
│ │ │ │ │ ├── rimportv2_test.go
│ │ │ │ │ ├── rimportv2_translator.go
│ │ │ │ │ ├── service.go
│ │ │ │ │ ├── storage.go
│ │ │ │ │ ├── sync_parity_test.go
│ │ │ │ │ ├── sync_parity_yaml_test.go
│ │ │ │ │ ├── testdata/
│ │ │ │ │ │ ├── ecommerce.yaml
│ │ │ │ │ │ └── uuid.har
│ │ │ │ │ ├── toposort.go
│ │ │ │ │ ├── toposort_test.go
│ │ │ │ │ ├── translators.go
│ │ │ │ │ ├── unified_import_test.go
│ │ │ │ │ ├── urlfetch.go
│ │ │ │ │ ├── urlfetch_test.go
│ │ │ │ │ └── validation.go
│ │ │ │ ├── rlog/
│ │ │ │ │ ├── rlog.go
│ │ │ │ │ └── rlog_test.go
│ │ │ │ ├── rreference/
│ │ │ │ │ ├── rreference.go
│ │ │ │ │ ├── rreference_context.go
│ │ │ │ │ ├── rreference_execution.go
│ │ │ │ │ ├── rreference_flow_context.go
│ │ │ │ │ ├── rreference_integration_test.go
│ │ │ │ │ ├── rreference_node_schema.go
│ │ │ │ │ ├── rreference_response.go
│ │ │ │ │ ├── rreference_rpc_test.go
│ │ │ │ │ ├── rreference_test.go
│ │ │ │ │ ├── rreference_tree.go
│ │ │ │ │ └── rreference_unit_test.go
│ │ │ │ ├── ruser/
│ │ │ │ │ ├── ruser.go.disabled
│ │ │ │ │ └── ruser_test.go.disabled
│ │ │ │ ├── rwebsocket/
│ │ │ │ │ ├── rwebsocket.go
│ │ │ │ │ └── rwebsocket_proxy.go
│ │ │ │ └── rworkspace/
│ │ │ │ ├── rworkspace.go
│ │ │ │ └── rworkspace_test.go
│ │ │ ├── converter/
│ │ │ │ ├── ai_converter_test.go
│ │ │ │ ├── converter.go
│ │ │ │ └── converter_test.go
│ │ │ ├── migrate/
│ │ │ │ ├── README.md
│ │ │ │ ├── backup.go
│ │ │ │ ├── checkpoint.go
│ │ │ │ ├── cursor_context.go
│ │ │ │ ├── metadata.go
│ │ │ │ ├── metadata_test.go
│ │ │ │ ├── registry.go
│ │ │ │ ├── registry_test.go
│ │ │ │ ├── runner.go
│ │ │ │ ├── runner_test.go
│ │ │ │ └── types.go
│ │ │ └── migrations/
│ │ │ ├── 01KFF093_add_ai_tables.go
│ │ │ ├── 01KGTFDM_add_external_id.go
│ │ │ ├── 01KGZC9E_add_http_is_snapshot.go
│ │ │ ├── 01KH1AZ5_enforce_delta_snapshot_exclusivity.go
│ │ │ ├── 01KHDYWX_add_graphql_tables.go
│ │ │ ├── 01KJSYH5_add_flow_error.go
│ │ │ ├── 01KJZMR5_add_flow_node_wait.go
│ │ │ ├── 01KK31SQ_add_graphql_delta_file_kind.go
│ │ │ ├── 01KK7EDJ_add_sub_flow_tables.go
│ │ │ ├── 01KKFQT8_add_websocket_tables.go
│ │ │ ├── migrations.go
│ │ │ └── migrations_test.go
│ │ ├── package.json
│ │ ├── pkg/
│ │ │ ├── authadapter/
│ │ │ │ ├── account.go
│ │ │ │ ├── adapter.go
│ │ │ │ ├── adapter_test.go
│ │ │ │ ├── dynquery.go
│ │ │ │ ├── jwks.go
│ │ │ │ ├── model.go
│ │ │ │ ├── session.go
│ │ │ │ ├── user.go
│ │ │ │ └── verification.go
│ │ │ ├── compress/
│ │ │ │ ├── compress.go
│ │ │ │ └── compress_test.go
│ │ │ ├── contenthash/
│ │ │ │ └── hasher.go
│ │ │ ├── credvault/
│ │ │ │ ├── encryption_type.go
│ │ │ │ ├── vault.go
│ │ │ │ └── vault_test.go
│ │ │ ├── dbtime/
│ │ │ │ └── dbtime.go
│ │ │ ├── delta/
│ │ │ │ ├── delta.go
│ │ │ │ └── delta_test.go
│ │ │ ├── depfinder/
│ │ │ │ ├── depfinder.go
│ │ │ │ └── depfinder_test.go
│ │ │ ├── errmap/
│ │ │ │ ├── errmap.go
│ │ │ │ └── errmap_test.go
│ │ │ ├── eventstream/
│ │ │ │ ├── bridge.go
│ │ │ │ ├── bridge_bulk_test.go
│ │ │ │ ├── bridge_test.go
│ │ │ │ ├── bulk_logic.txt
│ │ │ │ ├── bulk_test.go
│ │ │ │ ├── eventstream.go
│ │ │ │ ├── eventstream_test.go
│ │ │ │ └── memory/
│ │ │ │ └── memory.go
│ │ │ ├── eventsync/
│ │ │ │ ├── batch.go
│ │ │ │ ├── batch_test.go
│ │ │ │ ├── kind.go
│ │ │ │ ├── node_order.go
│ │ │ │ ├── node_order_test.go
│ │ │ │ ├── order.go
│ │ │ │ └── order_test.go
│ │ │ ├── expression/
│ │ │ │ ├── builtins.go
│ │ │ │ ├── builtins_test.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── eval.go
│ │ │ │ ├── expression.go
│ │ │ │ ├── expression_test.go
│ │ │ │ ├── expression_tracking_test.go
│ │ │ │ ├── file_utils.go
│ │ │ │ ├── interpolate.go
│ │ │ │ ├── path_resolver.go
│ │ │ │ ├── unified_env.go
│ │ │ │ └── unified_env_test.go
│ │ │ ├── flow/
│ │ │ │ ├── flowbuilder/
│ │ │ │ │ ├── builder.go
│ │ │ │ │ └── subflow_executor.go
│ │ │ │ ├── flowexec/
│ │ │ │ │ ├── session.go
│ │ │ │ │ ├── session_test.go
│ │ │ │ │ ├── snapshot.go
│ │ │ │ │ └── snapshot_test.go
│ │ │ │ ├── flowresult/
│ │ │ │ │ ├── drain.go
│ │ │ │ │ ├── noop.go
│ │ │ │ │ ├── processor.go
│ │ │ │ │ ├── publisher.go
│ │ │ │ │ └── statetracker.go
│ │ │ │ ├── node/
│ │ │ │ │ ├── entry.go
│ │ │ │ │ ├── mocknode/
│ │ │ │ │ │ └── mocknode.go
│ │ │ │ │ ├── nai/
│ │ │ │ │ │ ├── aiexpr.go
│ │ │ │ │ │ ├── aiparam.go
│ │ │ │ │ │ ├── benchmarks/
│ │ │ │ │ │ │ ├── 2026-01-26/
│ │ │ │ │ │ │ │ ├── claude-sonnet-4-5.json
│ │ │ │ │ │ │ │ ├── gemini-2.5-pro.json
│ │ │ │ │ │ │ │ ├── gpt-5.2.json
│ │ │ │ │ │ │ │ └── summary.md
│ │ │ │ │ │ │ └── README.md
│ │ │ │ │ │ ├── bridge.go
│ │ │ │ │ │ ├── bridge_test.go
│ │ │ │ │ │ ├── execution.go
│ │ │ │ │ │ ├── integration_benchmark_test.go
│ │ │ │ │ │ ├── integration_custom_test.go
│ │ │ │ │ │ ├── integration_flow_orchestration_test.go
│ │ │ │ │ │ ├── integration_poc_advanced_test.go
│ │ │ │ │ │ ├── integration_poc_comparison_test.go
│ │ │ │ │ │ ├── integration_providers_test.go
│ │ │ │ │ │ ├── integration_scoring_test.go
│ │ │ │ │ │ ├── integration_setup_test.go
│ │ │ │ │ │ ├── integration_tools_http_test.go
│ │ │ │ │ │ ├── integration_tools_node_test.go
│ │ │ │ │ │ ├── nai.go
│ │ │ │ │ │ ├── nai_test.go
│ │ │ │ │ │ ├── provider.go
│ │ │ │ │ │ ├── tools.go
│ │ │ │ │ │ └── tools_test.go
│ │ │ │ │ ├── naiprovider/
│ │ │ │ │ │ ├── metrics.go
│ │ │ │ │ │ ├── metrics_test.go
│ │ │ │ │ │ ├── naiprovider.go
│ │ │ │ │ │ └── naiprovider_test.go
│ │ │ │ │ ├── nfor/
│ │ │ │ │ │ ├── nfor.go
│ │ │ │ │ │ └── nfor_test.go
│ │ │ │ │ ├── nforeach/
│ │ │ │ │ │ ├── nforeach.go
│ │ │ │ │ │ └── nforeach_test.go
│ │ │ │ │ ├── ngraphql/
│ │ │ │ │ │ └── ngraphql.go
│ │ │ │ │ ├── nif/
│ │ │ │ │ │ ├── nif.go
│ │ │ │ │ │ └── nif_test.go
│ │ │ │ │ ├── njs/
│ │ │ │ │ │ ├── njs.go
│ │ │ │ │ │ └── njs_test.go
│ │ │ │ │ ├── nmemory/
│ │ │ │ │ │ ├── nmemory.go
│ │ │ │ │ │ └── nmemory_test.go
│ │ │ │ │ ├── node.go
│ │ │ │ │ ├── node_test.go
│ │ │ │ │ ├── node_tracking_test.go
│ │ │ │ │ ├── nrequest/
│ │ │ │ │ │ ├── nrequest.go
│ │ │ │ │ │ └── nrequest_test.go
│ │ │ │ │ ├── nrunsubflow/
│ │ │ │ │ │ └── nrunsubflow.go
│ │ │ │ │ ├── nstart/
│ │ │ │ │ │ └── nstart.go
│ │ │ │ │ ├── nsubflowreturn/
│ │ │ │ │ │ └── nsubflowreturn.go
│ │ │ │ │ ├── nsubflowtrigger/
│ │ │ │ │ │ └── nsubflowtrigger.go
│ │ │ │ │ ├── nwait/
│ │ │ │ │ │ └── nwait.go
│ │ │ │ │ ├── nwsconnection/
│ │ │ │ │ │ ├── nwsconnection.go
│ │ │ │ │ │ └── nwsconnection_test.go
│ │ │ │ │ └── nwssend/
│ │ │ │ │ ├── nwssend.go
│ │ │ │ │ └── nwssend_test.go
│ │ │ │ ├── runner/
│ │ │ │ │ ├── cancel.go
│ │ │ │ │ ├── flowlocalrunner/
│ │ │ │ │ │ ├── executor.go
│ │ │ │ │ │ ├── flowlocalrunner.go
│ │ │ │ │ │ ├── flowlocalrunner_inputdata_test.go
│ │ │ │ │ │ ├── flowlocalrunner_test.go
│ │ │ │ │ │ ├── helpers.go
│ │ │ │ │ │ ├── mode_select.go
│ │ │ │ │ │ ├── strategy_multi.go
│ │ │ │ │ │ └── strategy_single.go
│ │ │ │ │ ├── graph.go
│ │ │ │ │ ├── loop_test.go
│ │ │ │ │ ├── runner.go
│ │ │ │ │ └── status.go
│ │ │ │ ├── simulation/
│ │ │ │ │ ├── mockflows.go
│ │ │ │ │ └── mockflows_test.go
│ │ │ │ └── tracking/
│ │ │ │ ├── env_wrapper.go
│ │ │ │ ├── tracker.go
│ │ │ │ ├── tracker_race_test.go
│ │ │ │ ├── tracker_test.go
│ │ │ │ ├── tracker_tree_test.go
│ │ │ │ ├── tree_builder.go
│ │ │ │ └── tree_builder_test.go
│ │ │ ├── flowgraph/
│ │ │ │ ├── flowgraph.go
│ │ │ │ ├── flowgraph_test.go
│ │ │ │ ├── layout.go
│ │ │ │ └── reduction.go
│ │ │ ├── fuzzyfinder/
│ │ │ │ ├── fuzzyfinder.go
│ │ │ │ └── fuzzyfinder_test.go
│ │ │ ├── graphql/
│ │ │ │ ├── resolver/
│ │ │ │ │ └── resolver.go
│ │ │ │ └── response/
│ │ │ │ └── response.go
│ │ │ ├── http/
│ │ │ │ ├── request/
│ │ │ │ │ ├── body_tracking_test.go
│ │ │ │ │ ├── content_type_test.go
│ │ │ │ │ ├── request.go
│ │ │ │ │ ├── request_test.go
│ │ │ │ │ ├── request_tracking_test.go
│ │ │ │ │ └── variable_substitution_test.go
│ │ │ │ ├── resolver/
│ │ │ │ │ ├── resolver.go
│ │ │ │ │ └── resolver_test.go
│ │ │ │ └── response/
│ │ │ │ ├── response.go
│ │ │ │ └── response_test.go
│ │ │ ├── httpclient/
│ │ │ │ ├── charset_test.go
│ │ │ │ ├── httpclient.go
│ │ │ │ ├── httpclient_test.go
│ │ │ │ └── httpmockclient/
│ │ │ │ └── httpmockclient.go
│ │ │ ├── idwrap/
│ │ │ │ ├── idwrap.go
│ │ │ │ └── idwrap_test.go
│ │ │ ├── ioworkspace/
│ │ │ │ ├── doc.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── exporter.go
│ │ │ │ ├── exporter_test.go
│ │ │ │ ├── har_delta_body_test.go
│ │ │ │ ├── importer.go
│ │ │ │ ├── importer_env.go
│ │ │ │ ├── importer_file.go
│ │ │ │ ├── importer_flow.go
│ │ │ │ ├── importer_http.go
│ │ │ │ ├── ioworkspace_test.go
│ │ │ │ ├── layout.go
│ │ │ │ ├── layout_test.go
│ │ │ │ ├── service.go
│ │ │ │ └── types.go
│ │ │ ├── llm/
│ │ │ │ ├── convert.go
│ │ │ │ ├── convert_test.go
│ │ │ │ ├── llm.go
│ │ │ │ ├── message.go
│ │ │ │ └── tool.go
│ │ │ ├── logconsole/
│ │ │ │ └── logconsole.go
│ │ │ ├── logger/
│ │ │ │ └── mocklogger/
│ │ │ │ └── mocklogger.go
│ │ │ ├── model/
│ │ │ │ ├── mcondition/
│ │ │ │ │ └── mcondition.go
│ │ │ │ ├── mcredential/
│ │ │ │ │ └── mcredential.go
│ │ │ │ ├── menv/
│ │ │ │ │ ├── menv.go
│ │ │ │ │ └── variable.go
│ │ │ │ ├── mfile/
│ │ │ │ │ ├── mfile.go
│ │ │ │ │ └── mfile_test.go
│ │ │ │ ├── mflow/
│ │ │ │ │ ├── edge.go
│ │ │ │ │ ├── execution.go
│ │ │ │ │ ├── mflow.go
│ │ │ │ │ ├── node.go
│ │ │ │ │ ├── node_sub_flow.go
│ │ │ │ │ ├── node_test.go
│ │ │ │ │ ├── node_types.go
│ │ │ │ │ ├── tag.go
│ │ │ │ │ └── variable.go
│ │ │ │ ├── mgraphql/
│ │ │ │ │ └── mgraphql.go
│ │ │ │ ├── mhttp/
│ │ │ │ │ └── mhttp.go
│ │ │ │ ├── mtag/
│ │ │ │ │ └── mtag.go
│ │ │ │ ├── muser/
│ │ │ │ │ └── muser.go
│ │ │ │ ├── mwebsocket/
│ │ │ │ │ └── mwebsocket.go
│ │ │ │ ├── mworkspace/
│ │ │ │ │ ├── mworkspace.go
│ │ │ │ │ └── user.go
│ │ │ │ ├── postman/
│ │ │ │ │ └── v21/
│ │ │ │ │ ├── mauth/
│ │ │ │ │ │ └── mauth.go
│ │ │ │ │ ├── mbody/
│ │ │ │ │ │ └── mbody.go
│ │ │ │ │ ├── mcookie/
│ │ │ │ │ │ └── mcookie.go
│ │ │ │ │ ├── mevent/
│ │ │ │ │ │ └── mevent.go
│ │ │ │ │ ├── mheader/
│ │ │ │ │ │ └── mheader.go
│ │ │ │ │ ├── mitem/
│ │ │ │ │ │ └── mitem.go
│ │ │ │ │ ├── mpostmancollection/
│ │ │ │ │ │ └── mpostmancollection.go
│ │ │ │ │ ├── mrequest/
│ │ │ │ │ │ └── mrequest.go
│ │ │ │ │ ├── mresponse/
│ │ │ │ │ │ └── mresponse.go
│ │ │ │ │ ├── murl/
│ │ │ │ │ │ └── murl.go
│ │ │ │ │ └── mvariable/
│ │ │ │ │ └── mvariable.go
│ │ │ │ └── result/
│ │ │ │ └── mresultapi/
│ │ │ │ └── mresultapi.go
│ │ │ ├── mutation/
│ │ │ │ ├── context.go
│ │ │ │ ├── delete_environment.go
│ │ │ │ ├── delete_file.go
│ │ │ │ ├── delete_flow.go
│ │ │ │ ├── delete_graphql.go
│ │ │ │ ├── delete_http.go
│ │ │ │ ├── delete_workspace.go
│ │ │ │ ├── event.go
│ │ │ │ ├── insert_credential.go
│ │ │ │ ├── insert_graphql.go
│ │ │ │ ├── insert_http.go
│ │ │ │ ├── mutation_test.go
│ │ │ │ ├── publish.go
│ │ │ │ ├── replay_dev.go
│ │ │ │ ├── replay_prod.go
│ │ │ │ ├── update_graphql.go
│ │ │ │ └── update_http.go
│ │ │ ├── patch/
│ │ │ │ ├── optional.go
│ │ │ │ ├── optional_test.go
│ │ │ │ ├── patch.go
│ │ │ │ └── patch_test.go
│ │ │ ├── permcheck/
│ │ │ │ └── permcheck.go
│ │ │ ├── reference/
│ │ │ │ ├── reference.go
│ │ │ │ ├── reference_conversion_test.go
│ │ │ │ ├── reference_enum_test.go
│ │ │ │ └── reference_test.go
│ │ │ ├── referencecompletion/
│ │ │ │ ├── referencecompletion.go
│ │ │ │ └── referencecompletion_test.go
│ │ │ ├── service/
│ │ │ │ ├── scredential/
│ │ │ │ │ ├── credential_mapper.go
│ │ │ │ │ ├── credential_mapper_test.go
│ │ │ │ │ ├── llm_provider.go
│ │ │ │ │ ├── llm_provider_test.go
│ │ │ │ │ ├── reader.go
│ │ │ │ │ ├── scredential.go
│ │ │ │ │ ├── scredential_test.go
│ │ │ │ │ └── writer.go
│ │ │ │ ├── senv/
│ │ │ │ │ ├── env.go
│ │ │ │ │ ├── env_mapper.go
│ │ │ │ │ ├── env_reader.go
│ │ │ │ │ ├── env_writer.go
│ │ │ │ │ ├── variable.go
│ │ │ │ │ ├── variable_mapper.go
│ │ │ │ │ ├── variable_reader.go
│ │ │ │ │ └── variable_writer.go
│ │ │ │ ├── sfile/
│ │ │ │ │ ├── mapper.go
│ │ │ │ │ ├── reader.go
│ │ │ │ │ ├── sfile.go
│ │ │ │ │ ├── sfile_delta_test.go
│ │ │ │ │ ├── sfile_test.go
│ │ │ │ │ └── writer.go
│ │ │ │ ├── sflow/
│ │ │ │ │ ├── edge.go
│ │ │ │ │ ├── edge_mapper.go
│ │ │ │ │ ├── edge_reader.go
│ │ │ │ │ ├── edge_writer.go
│ │ │ │ │ ├── edge_writer_test.go
│ │ │ │ │ ├── flow.go
│ │ │ │ │ ├── flow_mapper.go
│ │ │ │ │ ├── flow_reader.go
│ │ │ │ │ ├── flow_writer.go
│ │ │ │ │ ├── node.go
│ │ │ │ │ ├── node_ai.go
│ │ │ │ │ ├── node_ai_mapper.go
│ │ │ │ │ ├── node_ai_mapper_test.go
│ │ │ │ │ ├── node_ai_provider.go
│ │ │ │ │ ├── node_ai_provider_mapper.go
│ │ │ │ │ ├── node_ai_provider_reader.go
│ │ │ │ │ ├── node_ai_provider_test.go
│ │ │ │ │ ├── node_ai_provider_writer.go
│ │ │ │ │ ├── node_ai_reader.go
│ │ │ │ │ ├── node_ai_writer.go
│ │ │ │ │ ├── node_execution.go
│ │ │ │ │ ├── node_execution_mapper.go
│ │ │ │ │ ├── node_execution_reader.go
│ │ │ │ │ ├── node_execution_writer.go
│ │ │ │ │ ├── node_for.go
│ │ │ │ │ ├── node_for_mapper.go
│ │ │ │ │ ├── node_for_reader.go
│ │ │ │ │ ├── node_for_writer.go
│ │ │ │ │ ├── node_foreach.go
│ │ │ │ │ ├── node_foreach_mapper.go
│ │ │ │ │ ├── node_foreach_reader.go
│ │ │ │ │ ├── node_foreach_writer.go
│ │ │ │ │ ├── node_graphql.go
│ │ │ │ │ ├── node_graphql_mapper.go
│ │ │ │ │ ├── node_graphql_reader.go
│ │ │ │ │ ├── node_graphql_writer.go
│ │ │ │ │ ├── node_if.go
│ │ │ │ │ ├── node_if_mapper.go
│ │ │ │ │ ├── node_if_reader.go
│ │ │ │ │ ├── node_if_writer.go
│ │ │ │ │ ├── node_javascript.go
│ │ │ │ │ ├── node_javascript_mapper.go
│ │ │ │ │ ├── node_javascript_reader.go
│ │ │ │ │ ├── node_javascript_writer.go
│ │ │ │ │ ├── node_mapper.go
│ │ │ │ │ ├── node_memory.go
│ │ │ │ │ ├── node_memory_mapper.go
│ │ │ │ │ ├── node_memory_reader.go
│ │ │ │ │ ├── node_memory_test.go
│ │ │ │ │ ├── node_memory_writer.go
│ │ │ │ │ ├── node_reader.go
│ │ │ │ │ ├── node_readers.go
│ │ │ │ │ ├── node_request.go
│ │ │ │ │ ├── node_request_mapper.go
│ │ │ │ │ ├── node_request_reader.go
│ │ │ │ │ ├── node_request_writer.go
│ │ │ │ │ ├── node_run_sub_flow.go
│ │ │ │ │ ├── node_run_sub_flow_mapper.go
│ │ │ │ │ ├── node_run_sub_flow_reader.go
│ │ │ │ │ ├── node_run_sub_flow_writer.go
│ │ │ │ │ ├── node_sub_flow_return.go
│ │ │ │ │ ├── node_sub_flow_return_mapper.go
│ │ │ │ │ ├── node_sub_flow_return_reader.go
│ │ │ │ │ ├── node_sub_flow_return_writer.go
│ │ │ │ │ ├── node_sub_flow_trigger.go
│ │ │ │ │ ├── node_sub_flow_trigger_mapper.go
│ │ │ │ │ ├── node_sub_flow_trigger_reader.go
│ │ │ │ │ ├── node_sub_flow_trigger_writer.go
│ │ │ │ │ ├── node_wait.go
│ │ │ │ │ ├── node_wait_mapper.go
│ │ │ │ │ ├── node_wait_reader.go
│ │ │ │ │ ├── node_wait_writer.go
│ │ │ │ │ ├── node_writer.go
│ │ │ │ │ ├── node_writer_test.go
│ │ │ │ │ ├── node_ws_connection.go
│ │ │ │ │ ├── node_ws_connection_mapper.go
│ │ │ │ │ ├── node_ws_connection_reader.go
│ │ │ │ │ ├── node_ws_connection_writer.go
│ │ │ │ │ ├── node_ws_send.go
│ │ │ │ │ ├── node_ws_send_mapper.go
│ │ │ │ │ ├── node_ws_send_reader.go
│ │ │ │ │ ├── node_ws_send_writer.go
│ │ │ │ │ ├── tag.go
│ │ │ │ │ ├── tag_mapper.go
│ │ │ │ │ ├── tag_reader.go
│ │ │ │ │ ├── tag_writer.go
│ │ │ │ │ ├── variable.go
│ │ │ │ │ ├── variable_mapper.go
│ │ │ │ │ ├── variable_reader.go
│ │ │ │ │ └── variable_writer.go
│ │ │ │ ├── sgraphql/
│ │ │ │ │ ├── assert.go
│ │ │ │ │ ├── header.go
│ │ │ │ │ ├── mapper.go
│ │ │ │ │ ├── reader.go
│ │ │ │ │ ├── response.go
│ │ │ │ │ ├── sgraphql.go
│ │ │ │ │ └── writer.go
│ │ │ │ ├── shttp/
│ │ │ │ │ ├── assert.go
│ │ │ │ │ ├── assert_reader.go
│ │ │ │ │ ├── assert_test.go
│ │ │ │ │ ├── assert_writer.go
│ │ │ │ │ ├── body_form.go
│ │ │ │ │ ├── body_form_reader.go
│ │ │ │ │ ├── body_form_writer.go
│ │ │ │ │ ├── body_form_writer_test.go
│ │ │ │ │ ├── body_raw.go
│ │ │ │ │ ├── body_raw_reader.go
│ │ │ │ │ ├── body_raw_writer.go
│ │ │ │ │ ├── body_test.go
│ │ │ │ │ ├── body_urlencoded.go
│ │ │ │ │ ├── body_urlencoded_reader.go
│ │ │ │ │ ├── body_urlencoded_writer.go
│ │ │ │ │ ├── body_urlencoded_writer_test.go
│ │ │ │ │ ├── header.go
│ │ │ │ │ ├── header_reader.go
│ │ │ │ │ ├── header_test.go
│ │ │ │ │ ├── header_writer.go
│ │ │ │ │ ├── header_writer_test.go
│ │ │ │ │ ├── http.go
│ │ │ │ │ ├── http_children.go
│ │ │ │ │ ├── http_test.go
│ │ │ │ │ ├── mapper.go
│ │ │ │ │ ├── reader.go
│ │ │ │ │ ├── response.go
│ │ │ │ │ ├── response_reader.go
│ │ │ │ │ ├── response_writer.go
│ │ │ │ │ ├── search_param.go
│ │ │ │ │ ├── search_param_reader.go
│ │ │ │ │ ├── search_param_test.go
│ │ │ │ │ ├── search_param_writer.go
│ │ │ │ │ ├── search_param_writer_test.go
│ │ │ │ │ ├── shttp.test
│ │ │ │ │ ├── utils.go
│ │ │ │ │ └── writer.go
│ │ │ │ ├── stag/
│ │ │ │ │ ├── mapper.go
│ │ │ │ │ ├── reader.go
│ │ │ │ │ ├── stag.go
│ │ │ │ │ └── writer.go
│ │ │ │ ├── suser/
│ │ │ │ │ ├── reader.go
│ │ │ │ │ ├── suser.go
│ │ │ │ │ └── writer.go
│ │ │ │ ├── swebsocket/
│ │ │ │ │ ├── header.go
│ │ │ │ │ ├── mapper.go
│ │ │ │ │ └── swebsocket.go
│ │ │ │ └── sworkspace/
│ │ │ │ ├── sworkspace_test.go
│ │ │ │ ├── user.go
│ │ │ │ ├── user_mapper.go
│ │ │ │ ├── user_reader.go
│ │ │ │ ├── user_writer.go
│ │ │ │ ├── workspace.go
│ │ │ │ ├── workspace_mapper.go
│ │ │ │ ├── workspace_reader.go
│ │ │ │ └── workspace_writer.go
│ │ │ ├── sort/
│ │ │ │ └── sortenabled/
│ │ │ │ ├── sortenabled.go
│ │ │ │ └── sortenabled_test.go
│ │ │ ├── stoken/
│ │ │ │ ├── stoken.go
│ │ │ │ └── stoken_test.go
│ │ │ ├── streamregistry/
│ │ │ │ ├── registry.go
│ │ │ │ └── registry_test.go
│ │ │ ├── streamtest/
│ │ │ │ ├── helpers.go
│ │ │ │ ├── verifier.go
│ │ │ │ └── verifier_test.go
│ │ │ ├── testutil/
│ │ │ │ ├── concurrency.go
│ │ │ │ ├── sync_parity.go
│ │ │ │ ├── sync_zero_value.go
│ │ │ │ └── testutil.go
│ │ │ ├── translate/
│ │ │ │ ├── harv2/
│ │ │ │ │ ├── benchmark_test.go
│ │ │ │ │ ├── delta.go
│ │ │ │ │ ├── harv2.go
│ │ │ │ │ ├── harv2_delta_test.go
│ │ │ │ │ ├── harv2_dependency_unit_test.go
│ │ │ │ │ ├── harv2_layout_test.go
│ │ │ │ │ ├── harv2_test.go
│ │ │ │ │ ├── integration_test.go
│ │ │ │ │ └── request.go
│ │ │ │ ├── tcurlv2/
│ │ │ │ │ ├── tcurlv2.go
│ │ │ │ │ └── tcurlv2_test.go
│ │ │ │ ├── tgeneric/
│ │ │ │ │ └── tgeneric.go
│ │ │ │ ├── topenapiv2/
│ │ │ │ │ ├── deterministic_test.go
│ │ │ │ │ ├── real_world_test.go
│ │ │ │ │ ├── topenapiv2.go
│ │ │ │ │ └── topenapiv2_test.go
│ │ │ │ ├── tpostmanv2/
│ │ │ │ │ ├── integration_test.go
│ │ │ │ │ ├── mappers.go
│ │ │ │ │ ├── real_world_test.go
│ │ │ │ │ ├── tpostmanv2.go
│ │ │ │ │ └── tpostmanv2_test.go
│ │ │ │ └── yamlflowsimplev2/
│ │ │ │ ├── README.md
│ │ │ │ ├── converter.go
│ │ │ │ ├── converter_flow.go
│ │ │ │ ├── converter_node.go
│ │ │ │ ├── converter_template.go
│ │ │ │ ├── converter_test.go
│ │ │ │ ├── exporter.go
│ │ │ │ ├── exporter_test.go
│ │ │ │ ├── reproduce_weird_test.go
│ │ │ │ ├── types.go
│ │ │ │ ├── utils.go
│ │ │ │ └── utils_test.go
│ │ │ ├── txutil/
│ │ │ │ ├── bulk_sync_tx.go
│ │ │ │ ├── bulk_sync_tx_test.go
│ │ │ │ └── sync_tx.go
│ │ │ ├── varsystem/
│ │ │ │ ├── varsystem.go
│ │ │ │ ├── varsystem_test.go
│ │ │ │ └── varsystem_tracker_test.go
│ │ │ └── zstdcompress/
│ │ │ ├── zstdcompress.go
│ │ │ └── zstdcompress_test.go
│ │ ├── project.json
│ │ ├── test/
│ │ │ ├── collection/
│ │ │ │ ├── FiveWayAutomateCollection.json
│ │ │ │ ├── GalaxyCollection.json
│ │ │ │ ├── IntroductionCollection.json
│ │ │ │ ├── SimpleCollection.json
│ │ │ │ └── collection_test.go
│ │ │ ├── delta_execution_e2e_test.go
│ │ │ ├── delta_header_e2e_test.go
│ │ │ ├── e2e_har_to_cli_test.go
│ │ │ ├── flow_execution_e2e_test.go
│ │ │ ├── har_import_dep_test.go
│ │ │ ├── har_import_e2e_test.go
│ │ │ ├── har_import_sync_test.go
│ │ │ ├── har_import_url_dep_test.go
│ │ │ ├── openapi/
│ │ │ │ ├── petstore_swagger2.json
│ │ │ │ └── stripe_openapi3.json
│ │ │ └── testdata/
│ │ │ └── collection/
│ │ │ ├── FiveWayAutomateCollection.json
│ │ │ └── SimpleCollection.json
│ │ └── testing.md
│ ├── spec/
│ │ ├── api/
│ │ │ ├── credential.tsp
│ │ │ ├── environment.tsp
│ │ │ ├── export.tsp
│ │ │ ├── file-system.tsp
│ │ │ ├── flow.tsp
│ │ │ ├── graphql.tsp
│ │ │ ├── health.tsp
│ │ │ ├── http.tsp
│ │ │ ├── import.tsp
│ │ │ ├── log.tsp
│ │ │ ├── main.tsp
│ │ │ ├── private/
│ │ │ │ ├── auth-adapter.tsp
│ │ │ │ └── node-js-executor.tsp
│ │ │ ├── reference.tsp
│ │ │ ├── user.tsp
│ │ │ ├── websocket.tsp
│ │ │ └── workspace.tsp
│ │ ├── buf.gen.yaml
│ │ ├── buf.yaml
│ │ ├── eslint.config.ts
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── lib/
│ │ │ └── collect-file-descriptors.ts
│ │ ├── package.json
│ │ ├── project.json
│ │ ├── tsconfig.json
│ │ ├── tsconfig.lib.json
│ │ └── tspconfig.yaml
│ ├── ui/
│ │ ├── .storybook/
│ │ │ ├── main.ts
│ │ │ ├── manager.ts
│ │ │ └── preview.tsx
│ │ ├── eslint.config.ts
│ │ ├── package.json
│ │ ├── project.json
│ │ ├── src/
│ │ │ ├── add-button.stories.tsx
│ │ │ ├── add-button.tsx
│ │ │ ├── avatar.button.stories.tsx
│ │ │ ├── avatar.stories.tsx
│ │ │ ├── avatar.tsx
│ │ │ ├── badge.stories.tsx
│ │ │ ├── badge.tsx
│ │ │ ├── button.as-link.stories.tsx
│ │ │ ├── button.stories.tsx
│ │ │ ├── button.tsx
│ │ │ ├── checkbox.stories.tsx
│ │ │ ├── checkbox.tsx
│ │ │ ├── field.tsx
│ │ │ ├── file-drop-zone.tsx
│ │ │ ├── focus-ring.tsx
│ │ │ ├── icons.tsx
│ │ │ ├── illustrations.tsx
│ │ │ ├── index.tsx
│ │ │ ├── json-tree.stories.tsx
│ │ │ ├── json-tree.tsx
│ │ │ ├── link.tsx
│ │ │ ├── list-box.stories.tsx
│ │ │ ├── list-box.tsx
│ │ │ ├── menu.stories.tsx
│ │ │ ├── menu.tsx
│ │ │ ├── method-badge.stories.tsx
│ │ │ ├── method-badge.tsx
│ │ │ ├── modal.stories.tsx
│ │ │ ├── modal.tsx
│ │ │ ├── number-field.tsx
│ │ │ ├── popover.tsx
│ │ │ ├── primitives/
│ │ │ │ ├── index.tsx
│ │ │ │ └── list-box.tsx
│ │ │ ├── progress-bar.tsx
│ │ │ ├── provider.tsx
│ │ │ ├── radio-group.tsx
│ │ │ ├── reorder.tsx
│ │ │ ├── resizable-panel.tsx
│ │ │ ├── select.stories.tsx
│ │ │ ├── select.tsx
│ │ │ ├── separator.tsx
│ │ │ ├── spinner.stories.tsx
│ │ │ ├── spinner.tsx
│ │ │ ├── styles/
│ │ │ │ ├── colors/
│ │ │ │ │ ├── dark.css
│ │ │ │ │ ├── index.css
│ │ │ │ │ └── light.css
│ │ │ │ └── index.css
│ │ │ ├── table.tsx
│ │ │ ├── tag-group.stories.tsx
│ │ │ ├── tag-group.tsx
│ │ │ ├── tailwind-literal.tsx
│ │ │ ├── text-field.tsx
│ │ │ ├── theme.tsx
│ │ │ ├── toast.tsx
│ │ │ ├── tree.stories.tsx
│ │ │ ├── tree.tsx
│ │ │ ├── utils/
│ │ │ │ └── link.tsx
│ │ │ └── utils.tsx
│ │ ├── tsconfig.json
│ │ └── tsconfig.lib.json
│ └── worker-js/
│ ├── eslint.config.ts
│ ├── package.json
│ ├── project.json
│ ├── src/
│ │ ├── main.ts
│ │ └── nodejs-executor.ts
│ ├── tsconfig.json
│ └── tsup.config.ts
├── patches/
│ ├── @effect__platform-node-shared.patch
│ ├── @nx__eslint.patch
│ └── @react-stately__table.patch
├── pnpm-workspace.yaml
├── prettier.config.mjs
├── project.json
├── scoop.json
├── syncpack.config.mjs
├── taskfile.yaml
├── tools/
│ ├── benchmark/
│ │ ├── compare.go
│ │ ├── go.mod
│ │ ├── main.go
│ │ ├── parser.go
│ │ └── types.go
│ ├── eslint/
│ │ ├── config.ts
│ │ ├── eslint.config.ts
│ │ ├── package.json
│ │ ├── project.json
│ │ ├── tsconfig.json
│ │ └── tsconfig.lib.json
│ ├── gha-scripts/
│ │ ├── eslint.config.ts
│ │ ├── package.json
│ │ ├── project.json
│ │ ├── src/
│ │ │ ├── cli.ts
│ │ │ └── repository.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.lib.json
│ ├── go-tool/
│ │ ├── go.mod
│ │ └── go.sum
│ ├── modmigrate/
│ │ ├── go.mod
│ │ ├── go.sum
│ │ └── main.go
│ ├── norawsql/
│ │ ├── cmd/
│ │ │ └── norawsql/
│ │ │ └── main.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── norawsql.go
│ │ ├── norawsql_test.go
│ │ └── testdata/
│ │ └── src/
│ │ └── rawsql/
│ │ └── rawsql.go
│ ├── notxread/
│ │ ├── cmd/
│ │ │ └── notxread/
│ │ │ └── main.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── notxread.go
│ │ ├── notxread_test.go
│ │ └── testdata/
│ │ └── src/
│ │ └── txread/
│ │ ├── complex_test.go
│ │ ├── original_bug_test.go
│ │ └── txread.go
│ ├── nx-release/
│ │ └── renderer.cjs
│ ├── spec-lib/
│ │ ├── eslint.config.ts
│ │ ├── package.json
│ │ ├── project.json
│ │ ├── src/
│ │ │ ├── ai-tools/
│ │ │ │ ├── emitter.tsx
│ │ │ │ ├── field-schema.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── lib.ts
│ │ │ │ └── main.tsp
│ │ │ ├── common.ts
│ │ │ ├── core/
│ │ │ │ ├── index.tsx
│ │ │ │ └── main.tsp
│ │ │ ├── protobuf/
│ │ │ │ ├── emitter.tsx
│ │ │ │ ├── index.ts
│ │ │ │ ├── lib.ts
│ │ │ │ └── main.tsp
│ │ │ ├── tanstack-db/
│ │ │ │ ├── emitter.tsx
│ │ │ │ ├── index.ts
│ │ │ │ ├── lib.ts
│ │ │ │ └── main.tsp
│ │ │ └── utils.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.lib.json
│ └── storybook/
│ ├── .storybook/
│ │ ├── Introduction.mdx
│ │ └── main.ts
│ ├── eslint.config.ts
│ ├── package.json
│ ├── project.json
│ ├── tsconfig.json
│ └── tsconfig.lib.json
├── tsconfig.base.json
└── tsconfig.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
# editorconfig.org
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 2
indent_style = space
max_line_length = 120
insert_final_newline = true
trim_trailing_whitespace = true
================================================
FILE: .envrc
================================================
use flake
================================================
FILE: .github/ISSUE_TEMPLATE/bug-report.yaml
================================================
name: Report a bug
description: Have you found a bug or issue? Create a bug report
labels: ['bug']
body:
- type: markdown
attributes:
value: |
**Please do not report security vulnerabilities here, but contact us directly at [help@dev.tools](mailto:help@dev.tools) instead.**
- type: checkboxes
id: checklist
attributes:
label: Checklist
options:
- label: I have searched the repository issues and have not found a suitable solution or answer.
required: true
- label: I agree to the terms within the [Contributor Covenant Code of Conduct](https://github.com/the-dev-tools/dev-tools/blob/main/docs/CODE-OF-CONDUCT.md).
required: true
- type: textarea
id: description
attributes:
label: Description
description: Provide a clear and concise description of the issue, including what you expected to happen.
validations:
required: true
- type: textarea
id: reproduction
attributes:
label: Reproduction
description: Detail the steps taken to reproduce this error, and whether this issue can be reproduced consistently or if it is intermittent.
placeholder: |
1. Step 1...
2. Step 2...
3. ...
validations:
required: true
- type: textarea
id: additional-context
attributes:
label: Additional context
description: Any other relevant information you think would be useful.
validations:
required: false
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: Security vulnerability
url: https://dev.tools/
about: Please contact us directly via our support email at help@dev.tools
================================================
FILE: .github/ISSUE_TEMPLATE/feature-request.yaml
================================================
name: Feature request
description: Suggest an idea or a feature
labels: ['feature request']
body:
- type: checkboxes
id: checklist
attributes:
label: Checklist
options:
- label: I have searched the repository issues and have not found a suitable solution or answer.
required: true
- label: I agree to the terms within the [Contributor Covenant Code of Conduct](https://github.com/the-dev-tools/dev-tools/blob/main/docs/CODE-OF-CONDUCT.md).
required: true
- type: textarea
id: description
attributes:
label: Describe the problem you'd like to have solved
description: A clear and concise description of what the problem is.
placeholder: I'm always frustrated when...
validations:
required: true
- type: textarea
id: ideal-solution
attributes:
label: Describe the ideal solution
description: A clear and concise description of what you want to happen.
validations:
required: true
- type: textarea
id: alternatives-and-workarounds
attributes:
label: Alternatives and current workarounds
description: A clear and concise description of any alternatives you've considered or any workarounds that are currently in place.
validations:
required: false
- type: textarea
id: additional-context
attributes:
label: Additional context
description: Add any other context or screenshots about the feature request here.
validations:
required: false
================================================
FILE: .github/actions/dependencies-unix/action.yaml
================================================
name: Setup Unix dependencies
description: ''
runs:
using: composite
steps:
- uses: nixbuild/nix-quick-install-action@v30
with:
nix_conf: |
keep-env-derivations = true
keep-outputs = true
# Restore and save Nix store cache
- uses: nix-community/cache-nix-action@v6
with:
# Restore and save a cache using this key
primary-key: nix-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('**/*.nix', '**/flake.lock') }}
# If there's no cache hit, restore a cache by this prefix
restore-prefixes-first-match: nix-${{ runner.os }}-${{ runner.arch }}-
# Do purge caches
purge: true
# Purge all versions of the cache
purge-prefixes: build-${{ runner.os }}-${{ runner.arch }}-
# Created more than 0 seconds ago relative to the start of the `Post Restore` phase
purge-created: 0
# Except the version with the `primary-key`, if it exists
purge-primary-key: never
# And collect garbage in the Nix store until it reaches this size in bytes
gc-max-store-size: 0
# Save flake attributes from garbage collection
- shell: bash
run: nix profile install .#gha-save-from-gc
- shell: bash
run: nix run .#gha-nix-develop -- .#runner
================================================
FILE: .github/actions/dependencies-windows/action.yaml
================================================
name: Setup Windows dependencies
description: ''
runs:
using: composite
steps:
- id: cache
uses: actions/cache@v4
with:
path: ~\scoop
key: scoop-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('.\scoop.json') }}
- uses: MinoruSekine/setup-scoop@v4.0.1
with:
install_scoop: ${{ steps.cache.outputs.cache-hit != 'true' }}
scoop_update: false
- shell: powershell
run: scoop import .\scoop.json
# Export additional paths which the setup action does not account for
#
# Why in reverse? Appending a directory to $GITHUB_PATH causes that
# directory to be prepended to $PATH. Thus we preserve their order by
# reversing them before they are reversed again
- shell: powershell
run: |
scoop list |
%{ scoop info $_.Name --verbose } |
%{ $_."Path Added" -Split "`n" } |
Where { $_ } |
&{ [Collections.Stack]@($input) } |
Out-File -FilePath $env:GITHUB_PATH -Encoding ascii -Force
- shell: powershell
run: scoop shim add gha-scripts pnpm '--' run --filter="*/gha-scripts" cli
- shell: powershell
run: |
Invoke-WebRequest `
https://github.com/vcsjones/AzureSignTool/releases/download/v6.0.1/AzureSignTool-x64.exe `
-OutFile $env:RUNNER_TEMP/AzureSignTool.exe
- shell: powershell
run: echo $env:RUNNER_TEMP >> $env:GITHUB_PATH
================================================
FILE: .github/actions/setup/action.yaml
================================================
name: Setup runner
description: ''
inputs:
shell:
description: INTERNAL
default: ${{ runner.os == 'Windows' && 'powershell' || 'bash' }}
runs:
using: composite
steps:
- if: runner.os != 'Windows'
uses: ./.github/actions/dependencies-unix
- if: runner.os == 'Windows'
uses: ./.github/actions/dependencies-windows
- uses: actions/setup-node@v4
with:
cache: pnpm
- uses: actions/setup-go@v5
with:
cache-dependency-path: '**/*.sum'
- shell: ${{ inputs.shell }}
run: pnpm install
- shell: ${{ inputs.shell }}
run: go install tool
================================================
FILE: .github/workflows/benchmark-generic.yml
================================================
name: Generic Benchmark CI
on:
workflow_dispatch:
inputs:
packages:
description: 'Packages to benchmark (e.g. ./packages/server/...)'
required: true
default: './packages/server/pkg/flow/simulation'
type: string
count:
description: 'Number of benchmark runs'
required: false
default: '5'
type: string
force_comparison:
description: 'Force comparison even if no previous artifacts'
required: false
default: false
type: boolean
pull_request:
paths:
- 'packages/server/**'
- 'tools/benchmark/**'
- '.github/workflows/benchmark-generic.yml'
push:
paths:
- 'packages/server/**'
- 'tools/benchmark/**'
- '.github/workflows/benchmark-generic.yml'
branches: [main]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
benchmark:
name: Run Benchmarks
runs-on: ubuntu-latest
outputs:
comparison: ${{ steps.compare-results.outputs.comparison }}
has-regressions: ${{ steps.compare-results.outputs.has-regressions }}
has-changes: ${{ steps.check-changes.outputs.changed }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup runner environment
uses: ./.github/actions/setup
- name: Check if relevant files changed
id: check-changes
run: |
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
echo "changed=true" >> $GITHUB_OUTPUT
else
if [ "${{ github.event_name }}" == "pull_request" ]; then
BASE="${{ github.event.pull_request.base.sha }}"
else
BASE="${{ github.event.before }}"
fi
CHANGED=$(git diff --name-only $BASE...HEAD | grep -E "^packages/server/|^tools/benchmark/|^.github/workflows/benchmark-generic.yml" || true)
if [ -n "$CHANGED" ]; then
echo "changed=true" >> $GITHUB_OUTPUT
else
echo "changed=false" >> $GITHUB_OUTPUT
fi
fi
- name: Determine Target Packages
id: target
if: steps.check-changes.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
run: |
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
echo "packages=${{ github.event.inputs.packages }}" >> $GITHUB_OUTPUT
echo "count=${{ github.event.inputs.count }}" >> $GITHUB_OUTPUT
else
# Default for PR/Push: simulation package which is most critical
echo "packages=./packages/server/pkg/flow/simulation" >> $GITHUB_OUTPUT
echo "count=5" >> $GITHUB_OUTPUT
fi
- name: Run Current Benchmarks
id: run-current
if: steps.check-changes.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
run: |
mkdir -p bench_data
# Run benchmarks using standard go test
go test -bench=. -benchmem -run=^$ \
-count=${{ steps.target.outputs.count }} \
-timeout=30m \
${{ steps.target.outputs.packages }} | tee bench_data/current.txt
# Parse to JSON for artifact storage and comparison
go run tools/benchmark/*.go parse \
--input=bench_data/current.txt \
--output=bench_data/current.json
- name: Download Baseline Artifacts
if: (steps.check-changes.outputs.changed == 'true' || github.event_name == 'workflow_dispatch')
env:
GH_TOKEN: ${{ github.token }}
run: |
echo "Looking for latest successful run on main..."
LATEST_RUN_ID=$(gh run list --workflow="benchmark-generic.yml" --branch=main --status=success --event=push --limit=1 --json databaseId --jq '.[0].databaseId')
if [ -n "$LATEST_RUN_ID" ]; then
echo "Found run ID: $LATEST_RUN_ID. Downloading artifact..."
mkdir -p bench_data/previous
gh run download $LATEST_RUN_ID -n benchmark-results-main -D bench_data/previous || echo "⚠️ Failed to download artifact (it might not exist or expired)."
else
echo "⚠️ No successful previous runs found on main."
fi
- name: Run Baseline (If Artifact Missing)
if: (steps.check-changes.outputs.changed == 'true' || github.event_name == 'workflow_dispatch')
run: |
if [ ! -f "bench_data/previous/current.json" ]; then
echo "⚠️ No baseline artifact found. Running baseline on current checkout (approximate)..."
# Ideally we would checkout 'main' here, but for simplicity in this V1 we might skip or warn.
# A robust implementation would fetch the base commit.
# For now, let's skip comparison if missing, UNLESS forced.
if [ "${{ github.event.inputs.force_comparison }}" == "true" ]; then
echo "Running baseline benchmarks..."
go test -bench=. -benchmem -run=^$ \
-count=${{ steps.target.outputs.count }} \
-timeout=30m \
${{ steps.target.outputs.packages }} | tee bench_data/baseline.txt
go run tools/benchmark/*.go parse \
--input=bench_data/baseline.txt \
--output=bench_data/baseline.json
else
echo "Skipping baseline generation."
fi
else
mv bench_data/previous/current.json bench_data/baseline.json
fi
- name: Compare Results
id: compare-results
if: steps.check-changes.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
run: |
if [ -f "bench_data/baseline.json" ] && [ -f "bench_data/current.json" ]; then
go run tools/benchmark/*.go compare \
--baseline=bench_data/baseline.json \
--current=bench_data/current.json \
--output-md=bench_data/comparison.md \
--output-json=bench_data/comparison.json || {
echo "has-regressions=true" >> $GITHUB_OUTPUT
}
# Output to Job Summary
cat bench_data/comparison.md >> $GITHUB_STEP_SUMMARY
# Read markdown for PR comment
COMPARISON=$(cat bench_data/comparison.md | sed 's/`/\\`/g' | sed 's/$/\\n/' | tr -d '\n')
echo "comparison<<EOF" >> $GITHUB_OUTPUT
echo "$COMPARISON" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
else
echo "Skipping comparison (missing files)."
echo "has-regressions=false" >> $GITHUB_OUTPUT
fi
- name: Upload Artifacts
if: steps.check-changes.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
uses: actions/upload-artifact@v4
with:
name: benchmark-results-${{ github.sha }}
path: bench_data/
retention-days: 14
- name: Upload Main Baseline (Push Only)
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
uses: actions/upload-artifact@v4
with:
name: benchmark-results-main
path: bench_data/current.json
retention-days: 30
comment:
name: Post Results Comment
runs-on: ubuntu-latest
needs: benchmark
if: |
always() &&
needs.benchmark.result == 'success' &&
needs.benchmark.outputs.has-changes == 'true' &&
github.com.event_name == 'pull_request'
steps:
- name: Find and update PR comment
uses: actions/github-script@v7
with:
script: |
const comparison = `${{ needs.benchmark.outputs.comparison }}`;
const hasRegressions = `${{ needs.benchmark.outputs.has-regressions }}` === 'true';
if (!comparison) return;
// Find existing performance comment
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
});
const existingComment = comments.find(comment =>
comment.user.type === 'Bot' &&
(comment.body.includes('📊 Performance Comparison'))
);
let commentBody = comparison;
if (hasRegressions) {
commentBody = '\n⚠️ **Performance regressions detected!**\n\n' + commentBody;
}
if (existingComment) {
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: existingComment.id,
body: commentBody,
});
} else {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: commentBody,
});
}
================================================
FILE: .github/workflows/check.yaml
================================================
name: Check
on:
workflow_dispatch:
pull_request:
branches: [main]
push:
branches: [main]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
check:
name: Check
runs-on: ubuntu-latest
outputs:
go-test-modules: ${{ steps.go-test-modules.outputs.value }}
go-test-upload: ${{ steps.go-test-upload.outcome }}
steps:
- uses: actions/checkout@v4
- name: Setup runner environment
uses: ./.github/actions/setup
- name: Lint
run: task lint
- id: test
name: Test
run: task test:ci
- id: go-test-modules
name: Find modules with Go test results
if: steps.test.outcome == 'success' || steps.test.outcome == 'failure'
run: |
shopt -s nullglob
jq --null-input --raw-output \
'$ARGS.positional
| map(capture("(?<_>.*)\/dist")._) as $mods
| ["value=\($mods)", "length=\($mods | length)"]
| join("\n")' \
--args */*/dist/go-test.json | tee $GITHUB_OUTPUT
- id: go-test-upload
name: Upload Go test results
uses: actions/upload-artifact@v4
if: steps.go-test-modules.outputs.length > 0
with:
name: go-test
path: '*/*/dist/go-test.json'
retention-days: 1
cli-integration:
name: CLI Integration Tests
runs-on: ubuntu-latest
needs: check
steps:
- uses: actions/checkout@v4
- name: Setup runner environment
uses: ./.github/actions/setup
- name: Run CLI integration tests
run: pnpm nx run cli:test:integration
go-test-summary:
name: Test
runs-on: ubuntu-latest
needs: check
if: needs.check.outputs.go-test-upload == 'success'
strategy:
matrix:
value: ${{ fromJSON(needs.check.outputs.go-test-modules) }}
steps:
- uses: actions/download-artifact@v4
with:
name: go-test
- uses: robherley/go-test-action@v0
with:
moduleDirectory: ${{ matrix.value }}
fromJSONFile: ${{ matrix.value }}/dist/go-test.json
================================================
FILE: .github/workflows/goci.yml
================================================
name: goci
on:
workflow_dispatch:
env:
GO_VERSION: 1.23
GOLANGCI_LINT_VERSION: v1.60
jobs:
detect-modules:
runs-on: ubuntu-latest
outputs:
modules: ${{ steps.set-modules.outputs.modules }}
steps:
- uses: actions/checkout@v4
- name: Setup runner environment
uses: ./.github/actions/setup
- id: set-modules
run: |
modules=$(go list -m -json | jq -s '.' | jq -c '[.[].Dir | select(index("node_modules") | not)]')
echo "modules=$modules" >> $GITHUB_OUTPUT
go-test:
needs: detect-modules
runs-on: ubuntu-latest
strategy:
matrix:
module: ${{ fromJSON(needs.detect-modules.outputs.modules) }}
steps:
- uses: actions/checkout@v4
- name: Setup runner environment
uses: ./.github/actions/setup
- name: Test
uses: robherley/go-test-action@v0
with:
moduleDirectory: ${{ matrix.module }}
golangci-lint:
needs: detect-modules
runs-on: ubuntu-latest
strategy:
matrix:
module: ${{ fromJSON(needs.detect-modules.outputs.modules) }}
steps:
- uses: actions/checkout@v4
- name: Setup runner environment
uses: ./.github/actions/setup
- name: golangci-lint ${{ matrix.module }}
uses: golangci/golangci-lint-action@v6
with:
version: ${{ env.GOLANGCI_LINT_VERSION }}
working-directory: ${{ matrix.module }}
================================================
FILE: .github/workflows/release-chrome-extension.yaml
================================================
name: Release / Chrome Extension
on:
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup runner environment
uses: ./.github/actions/setup
- id: info
name: Get project information
run: gha-scripts export-project-info
- name: Build
run: pnpm nx run ${{ steps.info.outputs.NAME }}:build
- uses: actions/upload-artifact@v4
with:
name: build
path: ${{ steps.info.outputs.ROOT }}/dist/*.zip
if-no-files-found: error
publish:
name: Publish to Chrome Webstore
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
with:
name: build
pattern: chrome-mv3-prod.zip
- uses: PlasmoHQ/bpp@v3
with:
keys: ${{ secrets.BPP_KEYS }}
chrome-file: chrome-mv3-prod.zip
================================================
FILE: .github/workflows/release-cloudflare-pages.yaml
================================================
name: Release / Cloudflare Pages
on:
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
jobs:
publish:
name: Publish to Cloudflare Pages
runs-on: ubuntu-latest
permissions:
contents: read
deployments: write
steps:
- uses: actions/checkout@v4
- name: Setup runner environment
uses: ./.github/actions/setup
- id: info
name: Get project information
run: gha-scripts export-project-info
- name: Build
run: pnpm nx run ${{ steps.info.outputs.NAME }}:build
- name: Publish
uses: cloudflare/pages-action@v1
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
projectName: ${{ steps.info.outputs.NAME }}
directory: ${{ steps.info.outputs.ROOT }}/dist
gitHubToken: ${{ secrets.GITHUB_TOKEN }}
branch: ${{ env.NODE_ENV }}
wranglerVersion: '3'
================================================
FILE: .github/workflows/release-electron-builder.yaml
================================================
name: Release / Electron Builder
on:
workflow_dispatch:
jobs:
build:
name: Build
continue-on-error: true
strategy:
matrix:
runner:
- macos-15-intel # x64
- macos-latest # arm64
- ubuntu-latest # x64
- windows-latest # x64
runs-on: ${{ matrix.runner }}
permissions:
contents: write
env:
PUBLIC_UMAMI__ENABLE: ${{ vars.UMAMI_ENABLE }}
PUBLIC_UMAMI__HOST: ${{ vars.UMAMI_HOST }}
PUBLIC_UMAMI__ID: ${{ vars.UMAMI_ID }}
steps:
- uses: actions/checkout@v4
- name: Setup runner environment
uses: ./.github/actions/setup
- id: info
name: Get project information
run: gha-scripts export-project-info
- name: Build (macOS)
if: runner.os == 'macOS'
env:
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
CSC_LINK: ${{ secrets.CSC_LINK }}
run: pnpm nx run ${{ steps.info.outputs.NAME }}:build
- name: Build (Linux)
if: runner.os == 'Linux'
run: pnpm nx run ${{ steps.info.outputs.NAME }}:build
- name: Build (Windows)
if: runner.os == 'Windows'
env:
AZURE_KEY_VAULT_CERTIFICATE: ${{ secrets.AZURE_KEY_VAULT_CERTIFICATE }}
AZURE_KEY_VAULT_CLIENT_ID: ${{ secrets.AZURE_KEY_VAULT_CLIENT_ID }}
AZURE_KEY_VAULT_CLIENT_SECRET: ${{ secrets.AZURE_KEY_VAULT_CLIENT_SECRET }}
AZURE_KEY_VAULT_TENANT_ID: ${{ secrets.AZURE_KEY_VAULT_TENANT_ID }}
AZURE_KEY_VAULT_URL: ${{ secrets.AZURE_KEY_VAULT_URL }}
run: pnpm nx run ${{ steps.info.outputs.NAME }}:build
- name: Publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gha-scripts upload-electron-release-assets
================================================
FILE: .github/workflows/release-go.yaml
================================================
name: Release / Go
on:
workflow_dispatch:
jobs:
build:
name: Build Go Binary
continue-on-error: true
strategy:
matrix:
include:
- runner: macos-15-intel
platform: darwin-x64
- runner: macos-latest
platform: darwin-arm64
- runner: ubuntu-latest
platform: linux-x64
- runner: ubuntu-latest
platform: linux-arm64
- runner: windows-latest
platform: win32-x64
- runner: windows-latest
platform: win32-ia32
runs-on: ${{ matrix.runner }}
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- name: Setup runner environment
uses: ./.github/actions/setup
- id: info
name: Get project information
run: gha-scripts export-project-info
- name: Build Binary
env:
VERSION: ${{ steps.info.outputs.VERSION }}
PLATFORM: ${{ matrix.platform }}
CGO_ENABLED: '0'
run: pnpm nx run ${{ steps.info.outputs.NAME }}:build:release
- name: Publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gha-scripts upload-go-release-assets
================================================
FILE: .github/workflows/release.yaml
================================================
name: Release
on:
workflow_dispatch:
inputs:
api-recorder-extension: { type: boolean }
cli: { type: boolean }
desktop: { type: boolean }
web: { type: boolean }
jobs:
release:
name: Release
runs-on: ubuntu-latest
permissions:
actions: write
contents: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup runner environment
uses: ./.github/actions/setup
- name: Setup Git user
# Use public GitHub bot user:
# https://api.github.com/users/github-actions[bot]
run: |
git config user.name github-actions[bot]
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
- name: Version projects and trigger specialized release workflows
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gha-scripts release \
${{ inputs.api-recorder-extension && 'api-recorder-extension' || '' }} \
${{ inputs.cli && 'cli' || '' }} \
${{ inputs.desktop && 'desktop' || '' }} \
${{ inputs.web && 'web' || '' }} \
================================================
FILE: .github/workflows/sql.yml
================================================
name: sql
on:
push:
branches:
- 'main'
paths:
- '**.sql'
jobs:
sql-vet:
name: SQL Vet
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: sqlc-dev/setup-sqlc@v4
with:
sqlc-version: '1.30.0'
- run: sqlc vet
working-directory: './packages/db/pkg/sqlc'
================================================
FILE: .github/workflows/update-scoop.yaml
================================================
name: Update / Scoop
on:
schedule:
- cron: '0 0 * * 1'
workflow_dispatch:
jobs:
build:
name: Build
runs-on: windows-latest
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v4
- name: Setup Windows dependencies
uses: ./.github/actions/dependencies-windows
- name: Setup Git user
# Use public GitHub bot user:
# https://api.github.com/users/github-actions[bot]
run: |
git config user.name github-actions[bot]
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
- name: Update Scoop dependencies
run: |
scoop update --all
scoop export > .\scoop.json
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7
with:
commit-message: Update Scoop dependencies
title: Update Scoop dependencies
================================================
FILE: .gitignore
================================================
.ai
.bench/
.claude
.direnv
.env.*.local
.env.keys
.env.local
.next
.nx/cache
.nx/workspace-data
.plasmo
.task
.vite
*.db
*.db-journal
*.db-shm
*.db-wal
*.embed
apps/cli/devtoolscli
conductor
data
dist
next-env.d.ts
node_modules
out
packages/auth/schema.json
storybook-static
tmp/
tsconfig.tsbuildinfo
tsp-output
.bench/
.ralph/
.ralphrc
# Coverage files
*.out
coverage.out
**/.gocache/
.code/
packages/server/server
packages/server/authadapter-testserver
tools/collect_go_failures.py
/server
================================================
FILE: .golangci.yml
================================================
version: "2"
run:
allow-parallel-runners: false
modules-download-mode: readonly
allow-serial-runners: true
go: "1.24"
linters:
settings:
staticcheck:
checks:
- all
- "-ST1000"
- "-ST1003"
- "-ST1016"
- "-ST1020"
- "-ST1021"
- "-ST1022"
- "-S1016" ## False Positives
- "-SA5011" ## False Positives
================================================
FILE: .prettierignore
================================================
.ai/
.golangci.yml
*.har
AGENTS.md
CHANGELOG.md
conductor/
dist
flake.lock
GEMINI.md
LICENSE
pnpm-lock.yaml
route-tree.gen.ts
scoop.json
================================================
FILE: .sqlfluff
================================================
[sqlfluff]
dialect = sqlite
templater = jinja
sql_file_exts = .sql,.sql.j2,.dml,.ddl
[sqlfluff:indentation]
indented_joins = False
indented_using_on = True
template_blocks_indent = False
[sqlfluff:templater]
unwrap_wrapped_queries = True
[sqlfluff:templater:jinja]
apply_dbt_builtins = True
================================================
FILE: .vscode/extensions.json
================================================
{
"recommendations": [
"bradlc.vscode-tailwindcss",
"dbaeumer.vscode-eslint",
"editorconfig.editorconfig",
"esbenp.prettier-vscode",
"jnoortheen.nix-ide",
"mkhl.direnv",
"nrwl.angular-console",
"redhat.vscode-yaml",
"tamuratak.vscode-lezer",
"typespec.typespec-vscode"
]
}
================================================
FILE: .vscode/settings.json
================================================
{
"eslint.options": { "flags": ["v10_config_lookup_from_file"] },
"eslint.nodeEnv": "IDE",
"files.associations": { "*.css": "tailwindcss" },
"nix.enableLanguageServer": true,
"nix.serverPath": "nixd",
"nix.serverSettings": { "nixd": { "formatting": { "command": ["alejandra"] } } },
"tailwindCSS.experimental.configFile": "packages/ui/src/styles/index.css",
"tailwindCSS.classAttributes": [" "],
"tailwindCSS.classFunctions": ["tw"],
"tailwindCSS.lint.cssConflict": "ignore",
"typescript.enablePromptUseWorkspaceTsdk": true,
"typescript.tsdk": "node_modules/typescript/lib"
}
================================================
FILE: AGENTS.md
================================================
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Core Mandates
1. **Environment:** This project uses a Nix flake environment with `direnv`. Use `pnpm nx` for project tasks and `task` (Taskfile) for orchestrated workflows.
2. **Context Awareness:** Read `README.md` for domain-specific vocabulary (flow nodes, delta system) before starting complex tasks.
3. **File Editing:** Verify files exist before editing. Use `git status` and `git diff` to verify changes. **Never** revert changes you didn't author unless instructed. **Never** commit changes unless explicitly asked.
4. **Verification:** Always test, lint, and compile after making changes.
## Common Commands
### Build & Run
```bash
task dev:desktop # Full desktop app (Electron + React + Go Server)
pnpm nx run server:dev # Go server with hot reload
pnpm nx run client:dev # React frontend
pnpm nx run spec:build # Regenerate from TypeSpec (after editing .tsp files)
pnpm nx run db:generate # Regenerate sqlc (after editing .sql files)
cd apps/cli && task build:release # Build CLI binary
```
### Testing
```bash
task test # All unit tests
pnpm nx run server:test # Server tests only
pnpm nx run db:test # DB tests only
pnpm nx run cli:test # CLI tests only
# Single Go test (use -run for specific functions)
cd packages/server && go test -run TestFunctionName ./path/to/package/ -v -timeout 30s
cd packages/db && go test -run TestFunctionName ./path/to/package/ -v -timeout 10s
cd apps/cli && go test -run TestFunctionName ./path/to/package/ -v -timeout 30s
```
### Lint & Fix
```bash
task lint # ESLint + format checks + golangci-lint
task fix # Prettier + Syncpack auto-fix
pnpm nx run server:lint # Go linters (golangci-lint + norawsql + notxread)
```
### Benchmarks
```bash
task benchmark:run # Run benchmarks
task benchmark:baseline # Save baseline
task benchmark:compare # Compare against baseline
```
### Releasing
**Never** manually edit version numbers in `package.json`. Use Nx version plans:
```bash
# 1. Create a version plan (commits a .nx/version-plans/<name>.md file)
# Bump types: patch, minor, major
# Projects: desktop, cli, api-recorder-extension
task version-plan project=desktop # Interactive — prompts for bump type + message
# Or create the file directly (non-interactive):
# .nx/version-plans/<descriptive-name>.md
# ---
# desktop: patch
# ---
# Changelog message here.
# 2. Commit & push the version plan file
# 3. Trigger the release workflow (via GitHub Actions):
gh workflow run release.yaml -f desktop=true # -f cli=true, -f web=true, etc.
```
The release workflow reads version plans, bumps versions, creates git tags + GitHub releases,
and dispatches platform-specific build workflows (Electron Builder, Go binaries, etc.).
## Project Overview
DevTools is a local-first, open-source API testing platform (Postman alternative) — desktop app, CLI, and Chrome extension. Features request recording, visual flow building, and CI/CD integration.
## Architecture
### Monorepo Structure
- **`apps/desktop`** — Electron app (TypeScript/React, electron-vite)
- **`apps/cli`** — Go CLI (cobra). Embeds `packages/worker-js` (TypeScript worker bundled via tsup)
- **`packages/server`** — Go backend (Connect RPC, SQLite/LibSQL)
- **`packages/client`** — React frontend (TanStack Router/Query, Effect-TS, React Flow)
- **`packages/ui`** — Shared React component library (React Aria, Tailwind Variants, Storybook)
- **`packages/db`** — Go database package (`devtoolsdb`), sqlc generated code, SQLite drivers
- **`packages/spec`** — TypeSpec definitions → Protobuf → Go/TypeScript codegen (single source of truth)
- **`packages/worker-js`** — TypeScript worker bundled into CLI binary
- **`tools/`** — Custom Go linters (`norawsql`, `notxread`), benchmarking, spec emitter, ESLint config
### Go Workspace
`go.work` with Go 1.25. Modules: `apps/cli`, `packages/db`, `packages/server`, `packages/spec`, and tools.
### Naming Conventions
- **Services:** `s` prefix (`shttp`, `senv`, `sflow`, `suser`, `sworkspace`)
- **Models:** `m` prefix (`mhttp`, `mflow`, `menv`, `muser`)
- **RPC handlers:** `r` prefix (`rhttp`, `rflowv2`, `renv`)
- **IDs:** All use `idwrap.IDWrap` (ULID-based) from `packages/server/pkg/idwrap`
### Backend Layers (Server)
1. **RPC Layer** (`packages/server/internal/api`) — Connect RPC handlers. All follow **Fetch-Check-Act**:
- **FETCH**: Read data via Reader services (non-blocking, parallel)
- **CHECK**: Validate permissions/rules (pure Go, in memory)
- **ACT**: Write via Writer services inside a short transaction
- Publishes events to `eventstream` after successful transactions
2. **Service Layer** (`packages/server/pkg/service`) — Domain logic, split into Reader (read-only, `*sql.DB` pool) and Writer (write-only, `*sql.Tx`, per-transaction)
3. **Model Layer** (`packages/server/pkg/model`) — Pure Go domain structs bridging API (Proto) and DB (sqlc) types
4. **Data Access** (`packages/db/pkg/sqlc`) — sqlc-generated code. Schema in `schema/`, queries in `queries/`, output in `gen/`
Large RPC handlers are split by concern: `rhttp_crud.go`, `rhttp_exec.go`, `rhttp_delta_*.go`, etc.
### Codegen Pipeline
`pnpm nx run spec:build` runs: TypeSpec compile → buf generate → post-process. Output in `packages/spec/dist/`:
- `buf/go/` — Go protobuf + Connect RPC
- `buf/typescript/` — TypeScript protobuf types
- `tanstack-db/typescript/` — TanStack DB types
### TypeScript/React
- **Strictness:** `@tsconfig/strictest`, no `any`
- **Styling:** Tailwind CSS v4
- **State:** Effect-TS + TanStack Query
- **Formatting:** Prettier (single quotes, JSX single quotes). ESLint with perfectionist import sorting
- **Dependencies:** Pnpm catalog mode (strict) — all versions centralized in `pnpm-workspace.yaml`
- **No TS unit tests** — quality enforced via ESLint + strict TypeScript
## Go Patterns
### Testing
- **Isolated service tests:** `sqlitemem.NewSQLiteMem(ctx)` — single-connection in-memory SQLite
- **RPC/integration tests:** `testutil.CreateBaseDB` / `dbtest.GetTestDB(ctx)` — shared-cache in-memory SQLite
- **One DB per test.** Never share DB instances across tests
- **Seeding:** `BaseTestServices.CreateTempCollection` for workspace/user/collection state
- **`t.Parallel()`** only if each subtest creates its own independent DB
- **Transactions:** Keep short. Use `devtoolsdb.TxnRollback` in defer. Commit before reading from a different connection
- **Server tests run with `-p 8`** (8 parallel test packages)
### Integration Tests
For tests requiring external services (APIs, cloud):
- File naming: `integration_*.go`
- Build tags: `//go:build ai_integration`
- Env var guard: `if os.Getenv("RUN_XX_INTEGRATION") != "true" { t.Skip() }`
### Linting
Server lint (`pnpm nx run server:lint`) includes:
- `golangci-lint` with extensive rules (govet, gosec, errorlint, revive, exhaustive, etc.)
- `go tool norawsql` — enforces sqlc usage, no raw SQL strings
- `go tool notxread` — prevents reads inside transactions (SQLite deadlock prevention)
### Best Practices
- Functional design, lean packages. No complex OOP hierarchies
- SQLite reads **before** transactions. Transactions as short as possible
- Map errors to Connect RPC codes (`connect.CodeNotFound`, not `CodePermissionDenied` for missing resources — prevents ID enumeration)
- Strict model separation: API types (Proto) ↔ Domain types (model) ↔ Storage types (sqlc gen)
## Domain Documentation
- **Flow Engine & Nodes:** `packages/server/docs/specs/FLOW.md`
- **HTTP & Proxy:** `packages/server/docs/specs/HTTP.md`
- **Real-time Sync:** `packages/server/docs/specs/SYNC.md`
- **Mutation System:** `packages/server/docs/specs/MUTATION.md`
- **Service Architecture:** `packages/server/docs/specs/BACKEND_ARCHITECTURE_V2.md`
- **Bulk Operations:** `packages/server/docs/specs/BULK_SYNC_TRANSACTION_WRAPPERS.md`
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2026 DevTools
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: README.md
================================================
<p align="center">
<a href="https://dev.tools/">
<img width=200px height=200px src="./apps/desktop/build/icon.png">
</a>
</p>
<h1 align="center">DevTools</h1>
<p align="center">
A free, open-source Postman-style API tester you run locally. Record browser requests, auto-generate chained tests, and ship them straight to your CI—no sign-ups, no cloud, just code.
</p>
<details>
<summary>Table of Contents</summary>
<ol>
<li><a href="#about-the-project">About the Project</a></li>
<li><a href="#installation">Installation</a></li>
<li><a href="#chrome-extension">Chrome Extension</a></li>
<li><a href="#contributing">Contributing</a></li>
<li><a href="#license">License</a></li>
</ol>
</details>
## About the Project
DevTools gives developers complete control over their API testing workflows:
- **Browser Request Recording**: Automatically capture all API requests and responses from your browser sessions.
- **No-code Test Generation**: Transform your recorded API requests into reusable test collections.
- **Request Chaining**: Easily create complex test flows with automatic data extraction and variable chaining between requests.
- **100% Local Execution**: Run tests on your local machine without sending data to third-party services.
- **CI/CD Integration**: Seamlessly integrate your API tests into any CI/CD pipeline.
- **Zero Configuration**: Start testing in seconds without complex setup or authentication.
- **Privacy First**: Keep your sensitive API data and credentials secure on your own machine.
- **Postman-Compatible**: Import from Postman-like JSON files and export collections for cross-platform compatibility.
DevTools combines the best aspects of Postman's visual interface with the security and flexibility of local-first, code-driven development. No sign-ups, no cloud dependencies - just powerful API testing tools that integrate perfectly with your development workflow.
### Postman-Style Request Interface

The DevTools interface provides a familiar Postman-like experience for working with API requests. The screenshot above shows the request editor interface with form data input, allowing you to easily build, test, and organize your API requests without the cloud dependency.
### Visual Flow Builder

The flow builder allows you to visually chain API requests and create complex test scenarios. Connect different nodes to build your workflow:
- **Request nodes**: Execute API calls in sequence
- **Conditional nodes**: Add if-statement logic based on response data
- **Loop nodes**: Iterate through data sets with for-each loops
- **Data nodes**: Import data from Excel sheets and other sources
This visual approach makes it easy to create sophisticated API workflows without writing code.
## Installation
### CLI Tool
Install the DevTools CLI with a single command:
```bash
curl -fsSL https://sh.dev.tools/install.sh | bash
```
Or if you prefer wget:
```bash
wget -qO- https://sh.dev.tools/install.sh | bash
```
The installer will:
- Automatically detect your platform (Linux, macOS, Windows)
- Download the appropriate binary from the latest release
- Install it to `/usr/local/bin` (customizable with `INSTALL_DIR` environment variable)
#### Manual Installation
You can also download pre-built binaries directly from the [releases page](https://github.com/the-dev-tools/dev-tools/releases).
### Desktop Application
Download the desktop application for your platform from the [releases page](https://github.com/the-dev-tools/dev-tools/releases):
- **macOS**: DevTools-{version}-darwin-{arch}.dmg
- **Windows**: DevTools-{version}-win32-{arch}.exe
- **Linux**: DevTools-{version}-linux-{arch}.AppImage
## Chrome Extension
[](https://chromewebstore.google.com/detail/api-recorder/bcnbbkdpnoeaaedhhnlefgpijlpbmije)
The DevTools API Recorder extension captures your API interactions in real-time:
- **One-Click Recording**: Start and pause API recording with a single click in any browser tab
- **Request Organization**: Automatically categorizes requests by domain and endpoint
- **Complete Request Details**: Capture headers, query parameters, body content, and responses
- **Response Inspection**: Examine API responses with syntax highlighting
- **Secure & Private**: All captured data remains in your browser—nothing is transmitted to external servers
The extension works seamlessly with the main DevTools application, allowing you to record APIs in your browser and then use them to build sophisticated test flows and documentation.
## Contributing
We appreciate feedback and contribution to this repo! Before you get started, please see the following:
- [Contribution guidelines](./docs/CONTRIBUTING.md)
- [Code of conduct guidelines](./docs/CODE-OF-CONDUCT.md)
## License
Distributed under the Apache 2.0 License. See `LICENSE` for more information.
================================================
FILE: apps/api-recorder-extension/eslint.config.ts
================================================
import { ConfigArray } from 'typescript-eslint';
import base from '@the-dev-tools/eslint-config';
const config: ConfigArray = [
...base,
{
rules: {
// https://github.com/typescript-eslint/typescript-eslint/issues/9902
// https://github.com/typescript-eslint/typescript-eslint/issues/9899
// https://github.com/microsoft/TypeScript/issues/59792
'@typescript-eslint/no-deprecated': 'off',
'import-x/no-unresolved': 'off',
},
},
];
export default config;
================================================
FILE: apps/api-recorder-extension/package.disabled.json
================================================
{
"name": "@the-dev-tools/api-recorder-extension",
"displayName": "API Recorder",
"author": "dev.tools",
"version": "0.4.10",
"private": true,
"type": "module",
"scripts": {
"build": "plasmo build --build-path=dist --zip",
"dev": "plasmo dev --build-path=dist"
},
"dependencies": {
"@plasmohq/storage": "1.15.0",
"effect": "3.17.9",
"magic-sdk": "29.4.2",
"plasmo": "0.90.5",
"react": "19.1.1",
"react-aria-components": "1.12.1",
"react-dom": "19.1.1",
"react-icons": "5.5.0",
"tailwind-merge": "3.3.1",
"tailwind-variants": "2.1.0",
"uuid": "11.1.0"
},
"devDependencies": {
"@tailwindcss/postcss": "~4.1.11",
"@the-dev-tools/eslint-config": "workspace:^",
"@the-dev-tools/ui": "workspace:^",
"@types/chrome": "~0.1.1",
"@types/node": "~24.3.0",
"@types/react": "~19.1.8",
"@types/react-dom": "~19.1.5",
"devtools-protocol": "~0.0.1490591",
"postcss": "~8.5.6",
"tailwindcss": "~4.1.11",
"typescript": "~5.9.2",
"typescript-eslint": "~8.40.0"
},
"manifest": {
"host_permissions": ["https://*/*"],
"permissions": ["debugger", "tabs", "unlimitedStorage"],
"web_accessible_resources": [
{
"resources": ["tabs/auth-callback.html"],
"matches": ["*://*.magic.link/*"]
}
]
}
}
================================================
FILE: apps/api-recorder-extension/postcss.config.js
================================================
/**
* @type {import('postcss').ProcessOptions}
*/
module.exports = {
plugins: {
'@tailwindcss/postcss': {},
},
};
================================================
FILE: apps/api-recorder-extension/project.disabled.json
================================================
{
"$schema": "../../node_modules/nx/schemas/project-schema.json",
"name": "api-recorder-extension",
"projectType": "application",
"targets": {
"build": {
"command": "echo",
"metadata": {
"description": "Target is disabled due to broken build. Plasmo framework seems to not be well maintained anymore, and doesn't work with Tailwind CSS v4 out of the box. Needs to be investigated more and potentially switched to a different framework."
}
}
}
}
================================================
FILE: apps/api-recorder-extension/src/auth.ts
================================================
import { Effect, Option, Schema } from 'effect';
import { Magic } from 'magic-sdk';
import * as Storage from '~storage';
const magicLink = new Magic('pk_live_75E3754872D9F513', {
deferPreload: true,
useStorageCache: true,
});
const LoggedInTag = 'LoggedInTag';
const LoggedIn = Schema.Boolean;
const setLoggedIn = Storage.set(Storage.Local, LoggedInTag, LoggedIn);
export const useLoggedIn = () => Storage.useState(Storage.Local, LoggedInTag, LoggedIn);
const EmailTag = 'EmailTag';
const Email = Schema.Option(Schema.String);
const setEmail = Storage.set(Storage.Local, EmailTag, Email);
export const useEmail = () => Storage.useState(Storage.Local, EmailTag, Email);
const CallbackTab = 'auth-callback';
export const loginInit = (email: string) =>
Effect.gen(function* () {
yield* setEmail(Option.some(email));
const result = yield* Effect.promise(() =>
magicLink.auth.loginWithMagicLink({
email,
redirectURI: `chrome-extension://${chrome.runtime.id}/tabs/${CallbackTab}.html`,
}),
);
if (result === null) return false;
yield* setLoggedIn(true);
return true;
});
export const loginConfirm = (token: string) =>
Effect.gen(function* () {
const result = yield* Effect.promise(() => magicLink.auth.loginWithCredential({ credentialOrQueryString: token }));
if (result === null) return false;
yield* setLoggedIn(true);
return true;
});
export const logout = Effect.gen(function* () {
const result = yield* Effect.promise(() => magicLink.user.logout());
if (!result) return false;
yield* setLoggedIn(false);
yield* setEmail(Option.none());
return true;
});
================================================
FILE: apps/api-recorder-extension/src/background.ts
================================================
import type { Protocol } from 'devtools-protocol';
import type { ProtocolMapping } from 'devtools-protocol/types/protocol-mapping';
import { Array, Effect, flow, Option, Predicate, String, Struct } from 'effect';
import * as Recorder from '~recorder';
import { Runtime } from '~runtime';
// PlasmoHQ implements a workaround to keep the background service worker alive
// in Chrome Extension Manifest V3, so doing it manually is not needed (for now)
// https://github.com/PlasmoHQ/plasmo/tree/main/api/persistent
// https://stackoverflow.com/questions/66618136/persistent-service-worker-in-chrome-extension
const sendDebuggerCommand = <Command extends keyof ProtocolMapping.Commands>(
target: chrome.debugger.Debuggee,
method: Command,
...commandParams: ProtocolMapping.Commands[Command]['paramsType']
) =>
Effect.tryPromise<ProtocolMapping.Commands[Command]['returnType']>(() =>
chrome.debugger.sendCommand(target, method, ...commandParams),
);
const isDebuggerEvent = <Method extends keyof ProtocolMapping.Events>(
match: Method,
method: string,
_params: unknown,
): _params is ProtocolMapping.Events[Method][0] => match === method;
const resourceTypes = ['XHR', 'Fetch'] as const satisfies Protocol.Network.ResourceType[];
void Effect.gen(function* () {
let collection = yield* Recorder.getCollection;
const indexMap = Recorder.makeIndexMap();
// Debugger control
Recorder.watch({
onReset: Effect.gen(function* () {
collection = yield* Recorder.reset(indexMap);
}).pipe(Effect.ignoreLogged),
onStart: (tabId) =>
Effect.gen(function* () {
yield* Effect.tryPromise(() => chrome.debugger.attach({ tabId }, '1.0'));
yield* sendDebuggerCommand({ tabId }, 'Network.enable');
const tab = yield* Effect.tryPromise(() => chrome.tabs.get(tabId));
collection = yield* Recorder.addNavigation(collection, tab);
}).pipe(
Effect.catchIf(flow(Struct.get('message'), String.startsWith('Cannot access')), () => Recorder.stop),
Effect.ignoreLogged,
),
onStop: (tabId) =>
Effect.gen(function* () {
yield* sendDebuggerCommand({ tabId }, 'Network.disable');
yield* Effect.tryPromise(() => chrome.debugger.detach({ tabId }));
}).pipe(
Effect.catchIf(
flow(
Struct.get('message'),
Predicate.some([
String.startsWith('Debugger is not attached'),
String.startsWith('No tab with given id'),
String.startsWith('Cannot access'),
]),
),
() => Effect.void,
),
Effect.ignoreLogged,
),
});
// URL updates
chrome.tabs.onUpdated.addListener((tabId, { url }, tab) =>
Effect.gen(function* () {
if (url === undefined) return;
const recorderTabId = yield* Recorder.getTabId;
if (!Option.contains(recorderTabId, tabId)) return;
collection = yield* Recorder.addNavigation(collection, tab);
}).pipe(Effect.ignoreLogged, Runtime.runPromise),
);
// Stop recording on debugger detach
chrome.debugger.onDetach.addListener((source) =>
Effect.gen(function* () {
const recorderTabId = yield* Recorder.getTabId;
if (!Option.contains(recorderTabId, source.tabId)) return;
yield* Recorder.stop;
}).pipe(Effect.ignoreLogged, Runtime.runPromise),
);
// Debugger events
chrome.debugger.onEvent.addListener((source, method, params) =>
Effect.gen(function* () {
const recorderTabId = yield* Recorder.getTabId;
if (!Option.contains(recorderTabId, source.tabId)) return;
// Request
if (isDebuggerEvent('Network.requestWillBeSent', method, params)) {
if (!Array.contains(resourceTypes, params.type)) return;
const { requestId } = params;
const data = yield* sendDebuggerCommand(source, 'Network.getRequestPostData', { requestId }).pipe(
Effect.catchAll(() => Effect.succeed(undefined)),
);
collection = yield* Recorder.addRequest(collection, indexMap, params, data);
}
// Response
if (isDebuggerEvent('Network.responseReceived', method, params)) {
if (!Array.contains(resourceTypes, params.type)) return;
const { requestId } = params;
const body = yield* sendDebuggerCommand(source, 'Network.getResponseBody', { requestId }).pipe(
Effect.catchAll(() => Effect.succeed(undefined)),
);
collection = yield* Recorder.addResponse(collection, indexMap, params, body);
}
}).pipe(Effect.ignoreLogged, Runtime.runPromise),
);
// Sync collection
yield* Effect.gen(function* () {
yield* Effect.sleep('1 second');
yield* Recorder.setCollection(collection);
}).pipe(Effect.forever);
}).pipe(Effect.ignoreLogged, Runtime.runPromise);
================================================
FILE: apps/api-recorder-extension/src/layout.tsx
================================================
import backgroundImage from 'data-base64:~/../assets/background.png';
import { twMerge } from 'tailwind-merge';
export interface LayoutProps extends React.ComponentPropsWithoutRef<'div'> {
innerClassName?: string;
}
export const Layout = ({ children, className, innerClassName, ...props }: LayoutProps) => (
<div {...props} className={twMerge('relative z-0 size-full bg-slate-50 font-sans', className)}>
<div className='absolute inset-x-0 top-0 -z-10 bg-slate-50'>
<img alt='Background' className='w-full mix-blend-luminosity' src={backgroundImage} />
<div className='absolute inset-0 shadow-[inset_0_0_2rem_2rem_var(--tw-shadow-color)] shadow-slate-50' />
</div>
<div className={twMerge('size-full', innerClassName)}>{children}</div>
</div>
);
================================================
FILE: apps/api-recorder-extension/src/popup.tsx
================================================
import '~styles.css';
import {
Array,
Clock,
Duration,
Effect,
flow,
HashMap,
Match,
Option,
pipe,
Schema,
String,
Struct,
Tuple,
} from 'effect';
import * as React from 'react';
import * as RAC from 'react-aria-components';
import * as FeatherIcons from 'react-icons/fi';
import { twMerge } from 'tailwind-merge';
import { focusVisibleRingStyles } from '@the-dev-tools/ui/focus-ring';
import { EmptyCollectionIllustration, IntroIcon, Logo } from '@the-dev-tools/ui/illustrations';
import { tw } from '@the-dev-tools/ui/tailwind-literal';
import { Button } from '~/ui/button';
import * as Auth from '~auth';
import { Layout as BaseLayout, type LayoutProps } from '~layout';
import * as Postman from '~postman';
import * as Recorder from '~recorder';
import { Runtime } from '~runtime';
import * as Storage from '~storage';
import { keyValue } from './utils';
const Layout = (props: Omit<LayoutProps, 'className'>) => (
<BaseLayout {...props} className='h-[600px] w-[800px] overflow-hidden border border-slate-300' />
);
class LoginFormData extends Schema.Class<LoginFormData>('LoginFormData')({
email: Schema.String,
}) {}
const LoginPage = () => {
const [loading, setLoading] = React.useState(false);
return (
<Layout>
<RAC.Form
className='flex size-full flex-col items-center justify-center px-44'
onSubmit={(event) =>
Effect.gen(function* () {
event.preventDefault();
const { email } = yield* pipe(
new FormData(event.currentTarget),
Object.fromEntries,
Schema.decode(LoginFormData),
);
setLoading(true);
yield* Auth.loginInit(email);
setLoading(false);
}).pipe(Runtime.runPromise)
}
>
<Logo className='mb-2 h-16 w-auto' />
<h1 className='mb-1 text-center text-4xl font-semibold uppercase leading-tight'>DevTools</h1>
<h2 className='mb-10 w-64 text-center text-sm leading-snug'>
Create your account and get your APIs call in seconds
</h2>
<RAC.TextField className='mb-6 w-full' isRequired name='email' type='email'>
<RAC.Label className='mb-2 block'>Email</RAC.Label>
<RAC.Input
className={(renderProps) =>
focusVisibleRingStyles({
className: [
tw`w-full rounded-lg border bg-white px-3 py-2 text-sm leading-tight text-slate-500`,
!renderProps.isFocused && tw`border-slate-300`,
],
})
}
/>
<RAC.FieldError className='mt-2 block text-sm leading-none text-red-700' />
</RAC.TextField>
<Button className='w-full' type='submit'>
{loading && <FeatherIcons.FiLoader className='animate-spin' />}
Get Started
</Button>
</RAC.Form>
</Layout>
);
};
interface RecorderLayoutProps {
children: React.ReactNode;
headerSlot?: React.ReactNode;
}
const RecorderLayout = ({ children, headerSlot }: RecorderLayoutProps) => (
<Layout innerClassName='flex flex-col divide-y divide-slate-300'>
<div className='flex items-center gap-2 p-4'>
<Logo className='h-6 w-auto' />
<h1 className='text-xl font-medium uppercase leading-tight'>DevTools</h1>
<div className='h-9 flex-1' />
{headerSlot}
</div>
{children}
</Layout>
);
const IntroPage = () => (
<RecorderLayout>
<div className='flex min-h-0 flex-1 flex-col items-center justify-center gap-6'>
<IntroIcon />
<div className='text-center'>
<h2 className='mb-2 text-2xl font-medium leading-tight'>Get your API quicker</h2>
<h3 className='text-sm leading-5'>Click the record to start the record</h3>
</div>
<Button onPress={() => void Recorder.start.pipe(Effect.ignoreLogged, Runtime.runPromise)}>Start Recording</Button>
</div>
</RecorderLayout>
);
const SelectionSchema = Schema.Union(Schema.Literal('all'), Schema.Set(Schema.Union(Schema.String, Schema.Number)));
const RecorderPage = () => {
const collection = Recorder.useCollection();
const tabId = Recorder.useTabId();
const [searchTerm, setSearchTerm] = React.useState('');
const filteredNavigations = (() => {
if (searchTerm === '') return collection.item;
const filterHosts = (navigation: Postman.Item) => (hosts: Postman.Item['item']) =>
Array.filter(hosts ?? [], (host) => {
if (!navigation.name || !host.name) return false;
const searchString = String.toLowerCase(searchTerm);
return pipe(navigation.name + host.name, String.toLowerCase, String.includes(searchString));
});
return pipe(
collection.item,
Array.map((_) => Struct.evolve(_, { item: filterHosts(_) })),
Array.filter((navigation) => (navigation.item?.length ?? 0) > 0),
);
})();
const indexMap = React.useMemo(() => {
const itemTuples =
<Key extends PropertyKey, PreviousIndex>(key: Key, previousIndex: PreviousIndex) =>
(items: Postman.Item['item']) =>
Array.map(items ?? [], (item, index) =>
Tuple.make(item.id, {
index: { ...previousIndex, ...keyValue(key, index) },
item,
}),
);
const mapItemTuples =
<Key extends PropertyKey>(key: Key) =>
<PreviousKey extends PropertyKey, PreviousIndex>(
input: ReturnType<ReturnType<typeof itemTuples<PreviousKey, PreviousIndex>>>,
) =>
pipe(input, Array.flatMap(flow(Tuple.getSecond, ({ index, item }) => itemTuples(key, index)(item.item))));
const hostTuples = pipe(collection.item, itemTuples('navigation', {}), mapItemTuples('host'));
return {
hosts: pipe(hostTuples, HashMap.fromIterable),
requests: pipe(hostTuples, mapItemTuples('request'), HashMap.fromIterable),
};
}, [collection.item]);
const [hostsSelectionMaybe, setHostsSelection] = Storage.useState(Storage.Local, 'HostsSelection', SelectionSchema);
const hostsSelection = Option.getOrElse(hostsSelectionMaybe, () => new Set<number | string>());
const selectedHost = pipe(
hostsSelection,
Option.liftPredicate((_) => _ !== 'all'),
Option.map((_) => _.values().next().value as Postman.Item['id']),
Option.flatMap((_) => HashMap.get(indexMap.hosts, _)),
Option.map(Struct.get('item')),
);
const filteredRequests = pipe(
selectedHost,
Option.flatMap(flow(Struct.get('item'), Option.fromNullable)),
Option.map((requests) => {
if (searchTerm === '') return requests;
return Array.filter(requests, (request: Postman.Item) => {
if (!request.name) return false;
const searchString = String.toLowerCase(searchTerm);
return pipe(request.name, String.toLowerCase, String.includes(searchString));
});
}),
Option.getOrElse(() => []),
);
const [requestsSelectionMaybe, setRequestsSelection] = Storage.useState(
Storage.Local,
'RequestsSelection',
SelectionSchema,
);
const requestsSelection = Option.getOrElse(requestsSelectionMaybe, () => new Set<number | string>());
const selectedCollection = (): Postman.Collection => {
if (requestsSelection === 'all') return collection;
interface SelectedItem extends Omit<Postman.Item, 'item'> {
readonly item?: Option.Option<SelectedItem>[];
}
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters
const emptySelectedItems = <T extends Pick<Postman.Item, 'item'>>(item: T) =>
Struct.evolve(item, {
item: (): Option.Option<SelectedItem>[] => Array.makeBy(item.item?.length ?? 0, () => Option.none()),
});
const selectCollection = (requests: HashMap.HashMap.Value<(typeof indexMap)['requests']>[]) =>
Array.reduce(requests, emptySelectedItems(collection), (selectedCollection, request) =>
Option.gen(function* () {
const navigation = yield* Array.get(collection.item, request.index.navigation);
const host = yield* Array.get(navigation.item ?? [], request.index.host);
let selectedNavigation: SelectedItem = pipe(
selectedCollection.item,
Array.get(request.index.navigation),
Option.flatten,
Option.getOrElse(() => emptySelectedItems(navigation)),
);
const selectedHost: SelectedItem = pipe(
selectedNavigation.item ?? [],
Array.get(request.index.host),
Option.flatten,
Option.getOrElse(() => emptySelectedItems(host)),
Struct.evolve({
item: (_) =>
Array.replace(_ ?? [], request.index.request, pipe(request.item, Struct.omit('item'), Option.some)),
}),
);
selectedNavigation = Struct.evolve(selectedNavigation, {
item: (_) => Array.replace(_ ?? [], request.index.host, Option.some(selectedHost)),
});
return Struct.evolve(selectedCollection, {
item: (_) => Array.replace(_, request.index.navigation, Option.some(selectedNavigation)),
});
}).pipe(Option.getOrElse(() => selectedCollection)),
);
const evolveItems =
<K,>(map: (item: SelectedItem) => K) =>
<A extends SelectedItem>(item: A) =>
Struct.evolve(item, {
item: (_) => pipe(_ ?? [], Array.getSomes, (_) => Array.map(_ as SelectedItem[], map)),
});
return pipe(
requestsSelection.values(),
Array.fromIterable,
Array.map((_) => pipe(_ as Postman.Item['id'], (_) => HashMap.get(indexMap.requests, _))),
Array.getSomes,
selectCollection,
evolveItems(evolveItems(evolveItems(Struct.omit('item')))),
);
};
const exportCollection = Effect.gen(function* () {
const file = yield* pipe(
selectedCollection(),
Schema.encode(Postman.Collection),
Effect.map(JSON.stringify),
Effect.map((_) => new Blob([_], { type: 'text/json' })),
);
const link = document.createElement('a');
link.href = URL.createObjectURL(file);
link.download = `postman-collection.json`;
link.click();
URL.revokeObjectURL(link.href);
});
const currentTimeMillis = pipe(Clock.currentTimeMillis, Runtime.runSync);
if (Option.isNone(tabId) && collection.item.length === 0) return <IntroPage />;
return (
<RecorderLayout
headerSlot={
<RAC.SearchField aria-label='Search' className='group w-80' onChange={setSearchTerm} value={searchTerm}>
<RAC.Group
className={(renderProps) =>
focusVisibleRingStyles({
className: [
tw`flex items-center rounded-lg border bg-white px-3 text-slate-500`,
!renderProps.isFocusWithin && tw`border-slate-300`,
],
})
}
>
<FeatherIcons.FiSearch className='size-4' />
<RAC.Input
className='min-w-0 flex-1 p-2 text-sm leading-tight outline outline-0 [&::-webkit-search-cancel-button]:hidden'
placeholder='Search'
/>
<RAC.Button className='group-empty:invisible group-empty:opacity-0 rounded-full bg-gray-100 p-1 opacity-100 transition-opacity'>
<FeatherIcons.FiX className='size-4' />
</RAC.Button>
</RAC.Group>
</RAC.SearchField>
}
>
<div className='flex min-h-0 flex-1 divide-x divide-slate-300'>
<div className='flex flex-1 flex-col items-start gap-4 overflow-auto p-4'>
<h2 className='text-2xl font-medium leading-7'>Visited pages</h2>
<RAC.ListBox
aria-label='Visited pages'
className='flex w-full flex-col gap-4'
items={filteredNavigations}
onSelectionChange={flow(setHostsSelection, Runtime.runPromise)}
selectedKeys={hostsSelection}
selectionMode='single'
>
{(navigation) => (
<RAC.Section id={navigation.id ?? ''}>
<RAC.Header className='truncate rounded-t-lg border border-slate-200 bg-white px-4 py-3 text-xs font-medium'>
{navigation.name}
</RAC.Header>
<RAC.Collection items={navigation.item ?? []}>
{(host) => (
<RAC.ListBoxItem
className={(renderProps) =>
focusVisibleRingStyles({
className: [
tw`
group relative -mt-px flex cursor-pointer items-center gap-2.5 overflow-auto border
bg-slate-50 px-4 py-6 text-sm
transition-[border-color,outline-color,outline-width,background-color]
last:rounded-b-lg
odd:bg-white
selected:bg-indigo-100
`,
!renderProps.isFocused && tw`border-slate-200`,
],
})
}
id={host.id ?? ''}
textValue={host.name ?? ''}
>
<div className='group-selected:w-0.5 absolute inset-y-0 left-0 w-0 bg-indigo-700 transition-[width]' />
<RAC.Text
className='group-selected:text-indigo-700 flex-1 truncate text-slate-500 transition-colors'
slot='label'
>
{host.name}
</RAC.Text>
<div className='group-selected:border-indigo-200 group-selected:bg-indigo-50 group-selected:text-indigo-700 rounded-full border border-slate-200 bg-slate-50 px-2.5 py-0.5 text-slate-700 transition-colors'>
{host.item?.length ?? 0} calls
</div>
<FeatherIcons.FiChevronRight className='group-selected:text-indigo-700 size-5 text-slate-500 transition-colors' />
</RAC.ListBoxItem>
)}
</RAC.Collection>
</RAC.Section>
)}
</RAC.ListBox>
</div>
<div className='flex flex-1 flex-col items-start gap-4 overflow-auto p-4'>
<h2 className='text-2xl font-medium leading-7'>API Calls</h2>
<RAC.ListBox
aria-label='API Calls'
className={(renderProps) =>
focusVisibleRingStyles({ className: [tw`w-full`, renderProps.isEmpty && tw`min-h-0 flex-1`] })
}
items={filteredRequests}
onSelectionChange={flow(setRequestsSelection, Runtime.runPromise)}
renderEmptyState={() => (
<div className='flex h-full flex-col items-center justify-center'>
<EmptyCollectionIllustration className='mb-6' />
<h3 className='mb-2 text-xl font-semibold leading-tight'>No calls yet</h3>
<span className='text-sm leading-5'>{"Let's try another one"}</span>
</div>
)}
selectedKeys={requestsSelection}
selectionMode='multiple'
>
{(request) => (
<RAC.ListBoxItem
className={(renderProps) =>
focusVisibleRingStyles({
className: [
tw`
-mt-px grid cursor-pointer grid-cols-[auto_auto_1fr_auto] grid-rows-[auto_auto] items-center
gap-y-1.5 border bg-slate-50 p-4 text-slate-500
transition-[border-color,outline-color,outline-width,background-color]
first:mt-0 first:rounded-t-lg first:border-t
last:rounded-b-lg
even:bg-white
selected:bg-indigo-100
`,
!renderProps.isFocused && tw`border-slate-200`,
],
})
}
id={request.id ?? ''}
textValue={request.name ?? ''}
>
{({ isSelected }) => (
<>
<RAC.Checkbox
aria-label={request.name ?? ''}
className='group relative row-span-2'
excludeFromTabOrder
isReadOnly
isSelected={isSelected}
>
<div className='group-selected:border-transparent group-selected:bg-indigo-600 mr-3 flex size-5 cursor-pointer items-center justify-center rounded-sm border border-slate-300 text-white transition-colors'>
{isSelected && <FeatherIcons.FiCheck />}
</div>
</RAC.Checkbox>
{pipe(
request.request,
Option.liftPredicate(Schema.is(Postman.RequestClass)),
Option.map(({ method }) =>
pipe(
method,
Match.value,
Match.when('GET', () => tw`border-orange-200 bg-orange-50 text-orange-900`),
Match.when('POST', () => tw`border-green-200 bg-green-50 text-green-900`),
Match.orElse(() => tw`border-slate-200 bg-slate-50 text-slate-700`),
(_) => [method ?? 'ETC', _] as const,
),
),
Option.map(([method, className]) => (
<div
className={twMerge(
'col-start-2 row-start-2 mr-1.5 rounded-sm border px-2 py-1 text-xs leading-tight',
className,
)}
key={null}
>
{pipe(method, String.toLowerCase, String.capitalize)}
</div>
)),
Option.getOrElse(() => null),
)}
{pipe(
request.name ?? '',
Schema.decode(Schema.URL),
Effect.map((url) => (
<>
<span className='col-span-2 col-start-2 truncate text-xs leading-none text-indigo-600'>
{url.host}
</span>
<span className='col-start-3 row-start-2 truncate text-sm' title={url.href}>
{url.pathname}
</span>
</>
)),
Runtime.runSync,
)}
{Effect.gen(function* () {
const variable = yield* Array.findFirst(request.variable ?? [], (_) => _.key === 'timestamp');
const timestamp = yield* pipe(variable, Struct.get('value'), Schema.decodeUnknown(Schema.Number));
const duration = Duration.subtract(currentTimeMillis, Duration.seconds(timestamp));
const sec = Math.floor(Duration.toSeconds(duration));
if (sec < 60) return `${sec.toString()} sec`;
const min = Math.floor(sec / 60);
if (min < 60) return `${min.toString()} min`;
const hr = Math.floor(min / 60);
if (hr < 24) return `${hr.toString()} hr`;
const days = Math.floor(hr / 24);
return `${days.toString()} days`;
}).pipe(
Effect.match({
onFailure: () => null,
onSuccess: (_) => (
<span className='col-start-4 row-span-2 text-xs font-light leading-5'>{_} ago</span>
),
}),
Runtime.runSync,
)}
</>
)}
</RAC.ListBoxItem>
)}
</RAC.ListBox>
</div>
</div>
<div className='flex items-center gap-3 bg-white p-4'>
{Option.match(tabId, {
onNone: () => (
<>
<div className='size-4 rounded-full border-2 border-slate-200 bg-slate-600' />
<h1 className='text-base font-medium leading-tight'>Recording paused</h1>
</>
),
onSome: () => (
<>
<div className='size-4 rounded-full border-2 border-red-200 bg-red-500' />
<h1 className='text-base font-medium leading-tight'>Recording API Calls</h1>
</>
),
})}
<div className='flex-1' />
<Button onPress={() => void Auth.logout.pipe(Effect.ignoreLogged, Runtime.runPromise)} variant='secondary gray'>
Log out
</Button>
<Button
onPress={() => void Recorder.setReset(true).pipe(Effect.ignoreLogged, Runtime.runPromise)}
variant='secondary gray'
>
Reset
</Button>
{Option.match(tabId, {
onNone: () => (
<Button
onPress={() => void Recorder.start.pipe(Effect.ignoreLogged, Runtime.runPromise)}
variant='secondary color'
>
Resume
<FeatherIcons.FiPlayCircle />
</Button>
),
onSome: () => (
<Button
onPress={() => void Recorder.stop.pipe(Effect.ignoreLogged, Runtime.runPromise)}
variant='secondary color'
>
Pause
<FeatherIcons.FiPauseCircle />
</Button>
),
})}
<Button onPress={() => void exportCollection.pipe(Effect.ignoreLogged, Runtime.runPromise)} variant='primary'>
Export
</Button>
</div>
</RecorderLayout>
);
};
const PopupPage = () => {
const [loggedInMaybe] = Auth.useLoggedIn();
const loggedIn = Option.getOrElse(loggedInMaybe, () => false);
return loggedIn ? <RecorderPage /> : <LoginPage />;
};
export default PopupPage;
================================================
FILE: apps/api-recorder-extension/src/postman.ts
================================================
import * as S from 'effect/Schema';
// Generated using: https://app.quicktype.io
// Documentation: https://learning.postman.com/collection-format
// JSON Schema: https://schema.postman.com/collection/json/v2.1.0/draft-07/collection.json
const DEFAULT_NAME = 'API Recorder Collection';
const DEFAULT_SCHEMA = 'https://schema.getpostman.com/json/collection/v2.1.0/collection.json';
export const AuthType = S.Literal(
'apikey',
'awsv4',
'basic',
'bearer',
'digest',
'edgegrid',
'hawk',
'noauth',
'ntlm',
'oauth1',
'oauth2',
);
export type AuthType = S.Schema.Type<typeof AuthType>;
export const VariableType = S.Literal('any', 'boolean', 'number', 'string');
export type VariableType = S.Schema.Type<typeof VariableType>;
export const FormParameterType = S.Literal('file', 'text');
export type FormParameterType = S.Schema.Type<typeof FormParameterType>;
export const Mode = S.Literal('file', 'formdata', 'graphql', 'raw', 'urlencoded');
export type Mode = S.Schema.Type<typeof Mode>;
export class Cookie extends S.Class<Cookie>('Cookie')({
domain: S.String,
expires: S.optional(S.Union(S.Null, S.String)),
extensions: S.optional(S.Union(S.Array(S.Any), S.Null)),
hostOnly: S.optional(S.Union(S.Boolean, S.Null)),
httpOnly: S.optional(S.Union(S.Boolean, S.Null)),
maxAge: S.optional(S.Union(S.Null, S.String)),
name: S.optional(S.Union(S.Null, S.String)),
path: S.String,
secure: S.optional(S.Union(S.Boolean, S.Null)),
session: S.optional(S.Union(S.Boolean, S.Null)),
value: S.optional(S.Union(S.Null, S.String)),
}) {}
export class Response extends S.Class<Response>('Response')({
body: S.optional(S.Union(S.Null, S.String)),
code: S.optional(S.Union(S.Number, S.Null)),
cookie: S.optional(S.Union(S.Array(Cookie), S.Null)),
header: S.optional(
S.Union(
S.Array(
S.Union(
S.suspend(() => Header),
S.String,
),
),
S.Null,
S.String,
),
),
id: S.optional(S.Union(S.Null, S.String)),
originalRequest: S.optional(
S.Union(
S.suspend(() => RequestClass),
S.Null,
S.String,
),
),
responseTime: S.optional(S.Union(S.Number, S.Null, S.String)),
status: S.optional(S.Union(S.Null, S.String)),
timings: S.optional(S.Union(S.Record({ key: S.String, value: S.Any }), S.Null)),
}) {}
export class ProxyConfig extends S.Class<ProxyConfig>('ProxyConfig')({
disabled: S.optional(S.Union(S.Boolean, S.Null)),
host: S.optional(S.Union(S.Null, S.String)),
match: S.optional(S.Union(S.Null, S.String)),
port: S.optional(S.Union(S.Number, S.Null)),
tunnel: S.optional(S.Union(S.Boolean, S.Null)),
}) {}
export class Header extends S.Class<Header>('Header')({
description: S.optional(
S.Union(
S.suspend(() => Description),
S.Null,
S.String,
),
),
disabled: S.optional(S.Union(S.Boolean, S.Null)),
key: S.String,
value: S.String,
}) {}
export class Key extends S.Class<Key>('Key')({
src: S.optional(S.Any),
}) {}
export class Cert extends S.Class<Cert>('Cert')({
src: S.optional(S.Any),
}) {}
export class Certificate extends S.Class<Certificate>('Certificate')({
cert: S.optional(S.Union(Cert, S.Null)),
key: S.optional(S.Union(Key, S.Null)),
matches: S.optional(S.Union(S.Array(S.String), S.Null)),
name: S.optional(S.Union(S.Null, S.String)),
passphrase: S.optional(S.Union(S.Null, S.String)),
}) {}
export class UrlEncodedParameter extends S.Class<UrlEncodedParameter>('UrlEncodedParameter')({
description: S.optional(
S.Union(
S.suspend(() => Description),
S.Null,
S.String,
),
),
disabled: S.optional(S.Union(S.Boolean, S.Null)),
key: S.String,
value: S.optional(S.Union(S.Null, S.String)),
}) {}
export class FormParameter extends S.Class<FormParameter>('FormParameter')({
contentType: S.optional(S.Union(S.Null, S.String)),
description: S.optional(
S.Union(
S.suspend(() => Description),
S.Null,
S.String,
),
),
disabled: S.optional(S.Union(S.Boolean, S.Null)),
key: S.String,
src: S.optional(S.Union(S.Array(S.Any), S.Null, S.String)),
type: S.optional(S.Union(FormParameterType, S.Null)),
value: S.optional(S.Union(S.Null, S.String)),
}) {}
export class File extends S.Class<File>('File')({
content: S.optional(S.Union(S.Null, S.String)),
src: S.optional(S.Union(S.Null, S.String)),
}) {}
export class Body extends S.Class<Body>('Body')({
disabled: S.optional(S.Union(S.Boolean, S.Null)),
file: S.optional(S.Union(File, S.Null)),
formdata: S.optional(S.Union(S.Array(FormParameter), S.Null)),
graphql: S.optional(S.Union(S.Record({ key: S.String, value: S.Any }), S.Null)),
mode: S.optional(S.Union(Mode, S.Null)),
options: S.optional(S.Union(S.Record({ key: S.String, value: S.Any }), S.Null)),
raw: S.optional(S.Union(S.Null, S.String)),
urlencoded: S.optional(S.Union(S.Array(UrlEncodedParameter), S.Null)),
}) {}
export class RequestClass extends S.Class<RequestClass>('RequestClass')({
auth: S.optional(
S.Union(
S.suspend(() => Auth),
S.Null,
),
),
body: S.optional(S.Union(Body, S.Null)),
certificate: S.optional(S.Union(Certificate, S.Null)),
description: S.optional(
S.Union(
S.suspend(() => Description),
S.Null,
S.String,
),
),
header: S.optional(S.Union(S.Array(Header), S.Null, S.String)),
method: S.optional(S.Union(S.Null, S.String)),
proxy: S.optional(S.Union(ProxyConfig, S.Null)),
url: S.optional(
S.Union(
S.suspend(() => UrlClass),
S.Null,
S.String,
),
),
}) {}
export class Item extends S.Class<Item>('Item')({
auth: S.optional(
S.Union(
S.suspend(() => Auth),
S.Null,
),
),
description: S.optional(
S.Union(
S.suspend(() => Description),
S.Null,
S.String,
),
),
event: S.optional(S.Union(S.Array(S.suspend(() => Event)), S.Null)),
id: S.optional(S.Union(S.Null, S.String)),
item: S.optional(S.Union(S.Array(S.suspend((): S.Schema<Item> => Item)), S.Null)),
name: S.optional(S.Union(S.Null, S.String)),
protocolProfileBehavior: S.optional(S.Union(S.Record({ key: S.String, value: S.Any }), S.Null)),
request: S.optional(S.Union(RequestClass, S.Null, S.String)),
response: S.optional(S.Union(S.Array(Response), S.Null)),
variable: S.optional(S.Union(S.Array(S.suspend(() => Variable)), S.Null)),
}) {}
export class CollectionVersionClass extends S.Class<CollectionVersionClass>('CollectionVersionClass')({
identifier: S.optional(S.Union(S.Null, S.String)),
major: S.Number,
meta: S.optional(S.Any),
minor: S.Number,
patch: S.Number,
}) {}
export class Information extends S.Class<Information>('Information')({
_postman_id: S.optional(S.Union(S.Null, S.String)),
description: S.optional(
S.Union(
S.suspend(() => Description),
S.Null,
S.String,
),
),
name: S.String,
schema: S.String,
version: S.optional(S.Union(CollectionVersionClass, S.Null, S.String)),
}) {}
export class Variable extends S.Class<Variable>('Variable')({
description: S.optional(
S.Union(
S.suspend(() => Description),
S.Null,
S.String,
),
),
disabled: S.optional(S.Union(S.Boolean, S.Null)),
id: S.optional(S.Union(S.Null, S.String)),
key: S.optional(S.Union(S.Null, S.String)),
name: S.optional(S.Union(S.Null, S.String)),
system: S.optional(S.Union(S.Boolean, S.Null)),
type: S.optional(S.Union(VariableType, S.Null)),
value: S.optional(S.Any),
}) {}
export class Description extends S.Class<Description>('Description')({
content: S.optional(S.Union(S.Null, S.String)),
type: S.optional(S.Union(S.Null, S.String)),
version: S.optional(S.Any),
}) {}
export class QueryParam extends S.Class<QueryParam>('QueryParam')({
description: S.optional(S.Union(Description, S.Null, S.String)),
disabled: S.optional(S.Union(S.Boolean, S.Null)),
key: S.optional(S.Union(S.Null, S.String)),
value: S.optional(S.Union(S.Null, S.String)),
}) {}
export class PathClass extends S.Class<PathClass>('PathClass')({
type: S.optional(S.Union(S.Null, S.String)),
value: S.optional(S.Union(S.Null, S.String)),
}) {}
export class UrlClass extends S.Class<UrlClass>('UrlClass')({
hash: S.optional(S.Union(S.Null, S.String)),
host: S.optional(S.Union(S.Array(S.String), S.Null, S.String)),
path: S.optional(S.Union(S.Array(S.Union(PathClass, S.String)), S.Null, S.String)),
port: S.optional(S.Union(S.Null, S.String)),
protocol: S.optional(S.Union(S.Null, S.String)),
query: S.optional(S.Union(S.Array(QueryParam), S.Null)),
raw: S.optional(S.Union(S.Null, S.String)),
variable: S.optional(S.Union(S.Array(Variable), S.Null)),
}) {}
export class Script extends S.Class<Script>('Script')({
exec: S.optional(S.Union(S.Array(S.String), S.Null, S.String)),
id: S.optional(S.Union(S.Null, S.String)),
name: S.optional(S.Union(S.Null, S.String)),
src: S.optional(S.Union(UrlClass, S.Null, S.String)),
type: S.optional(S.Union(S.Null, S.String)),
}) {}
export class Event extends S.Class<Event>('Event')({
disabled: S.optional(S.Union(S.Boolean, S.Null)),
id: S.optional(S.Union(S.Null, S.String)),
listen: S.String,
script: S.optional(S.Union(Script, S.Null)),
}) {}
export class ApikeyElement extends S.Class<ApikeyElement>('ApikeyElement')({
key: S.String,
type: S.optional(S.Union(S.Null, S.String)),
value: S.optional(S.Any),
}) {}
export class Auth extends S.Class<Auth>('Auth')({
apikey: S.optional(S.Union(S.Array(ApikeyElement), S.Null)),
awsv4: S.optional(S.Union(S.Array(ApikeyElement), S.Null)),
basic: S.optional(S.Union(S.Array(ApikeyElement), S.Null)),
bearer: S.optional(S.Union(S.Array(ApikeyElement), S.Null)),
digest: S.optional(S.Union(S.Array(ApikeyElement), S.Null)),
edgegrid: S.optional(S.Union(S.Array(ApikeyElement), S.Null)),
hawk: S.optional(S.Union(S.Array(ApikeyElement), S.Null)),
noauth: S.optional(S.Any),
ntlm: S.optional(S.Union(S.Array(ApikeyElement), S.Null)),
oauth1: S.optional(S.Union(S.Array(ApikeyElement), S.Null)),
oauth2: S.optional(S.Union(S.Array(ApikeyElement), S.Null)),
type: AuthType,
}) {}
export class Collection extends S.Class<Collection>('Collection')({
auth: S.optional(S.Union(Auth, S.Null)),
event: S.optional(S.Union(S.Array(Event), S.Null)),
info: Information.pipe(
S.propertySignature,
S.withConstructorDefault(() => new Information({ name: DEFAULT_NAME, schema: DEFAULT_SCHEMA })),
),
item: S.optional(S.Array(Item)).pipe(S.withDefaults({ constructor: () => [], decoding: () => [] })),
protocolProfileBehavior: S.optional(S.Union(S.Record({ key: S.String, value: S.Any }), S.Null)),
variable: S.optional(S.Union(S.Array(Variable), S.Null)),
}) {}
================================================
FILE: apps/api-recorder-extension/src/recorder.ts
================================================
import * as PlasmoStorage from '@plasmohq/storage/hook';
import * as Devtools from 'devtools-protocol';
import { Array, Effect, flow, MutableHashMap, Option, pipe, Record, Schema, Struct } from 'effect';
import * as React from 'react';
import * as Uuid from 'uuid';
import * as Postman from '~postman';
import { Runtime } from '~runtime';
import * as Storage from '~storage';
const CollectionTag = 'Collection';
export const getCollection = pipe(
Effect.tryPromise(() => Storage.Local.get<typeof Postman.Collection.Encoded>(CollectionTag)),
Effect.flatMap(
flow(
Option.fromNullable,
Option.match({
onNone: () => Effect.succeed(new Postman.Collection()),
onSome: Schema.decode(Postman.Collection),
}),
),
),
);
export const setCollection = (collection: Postman.Collection) =>
pipe(
collection,
Schema.encode(Postman.Collection),
Effect.flatMap((_) => Effect.tryPromise(() => Storage.Local.set(CollectionTag, _))),
);
export const useCollection = () => {
const [collection, setCollection] = React.useState(new Postman.Collection());
const [collectionEncoded] = PlasmoStorage.useStorage<typeof Postman.Collection.Encoded>({
instance: Storage.Local,
key: CollectionTag,
});
React.useEffect(
() =>
void Effect.gen(function* () {
if (!collectionEncoded) return;
const collection = yield* Schema.decode(Postman.Collection)(collectionEncoded);
setCollection(collection);
}).pipe(Effect.ignore, Runtime.runPromise),
[collectionEncoded],
);
return collection;
};
export const addNavigation = (collection: Postman.Collection, tab: chrome.tabs.Tab) =>
Effect.gen(function* () {
if (!tab.url) return collection;
const url = yield* Schema.decode(Schema.URL)(tab.url);
let newCollection = collection;
let host = Array.head(newCollection.item).pipe(Option.getOrUndefined);
if (host?.name !== url.host) {
host = Postman.Item.make({ id: Uuid.v4(), item: [], name: url.host });
} else {
newCollection = Struct.evolve(newCollection, { item: (_) => Array.drop(_, 1) });
}
let pathname = Array.head(host.item ?? []).pipe(Option.getOrUndefined);
if (pathname?.name !== url.pathname) {
pathname = Postman.Item.make({ id: Uuid.v4(), item: [], name: url.pathname });
} else {
host = Struct.evolve(host, { item: (_) => Array.drop(_ ?? [], 1) });
}
host = Struct.evolve(host, { item: (_) => Array.prepend(_ ?? [], pathname) });
newCollection = Struct.evolve(newCollection, { item: (_) => Array.prepend(_, host) });
return newCollection;
});
export const makeIndexMap = () =>
MutableHashMap.make<[string, { host: number; navigation: number; request: number }][]>();
const hostnameBlacklist = ['api-iam.intercom.io'];
export const addRequest = (
collection: Postman.Collection,
indexMap: ReturnType<typeof makeIndexMap>,
{ request, requestId, wallTime }: Devtools.Protocol.Network.RequestWillBeSentEvent,
{ postData }: Partial<Devtools.Protocol.Network.GetRequestPostDataResponse> = {},
) =>
Effect.gen(function* () {
const url = yield* Schema.decode(Schema.URL)(request.url);
if (Array.contains(hostnameBlacklist, url.hostname)) return collection;
const host = yield* Array.head(collection.item);
const navigation = yield* pipe(host.item, Option.fromNullable, Option.flatMap(Array.head));
const postBody = pipe(
postData,
Option.fromNullable,
Option.map((_) => new Postman.Body({ mode: 'raw', raw: _ })),
);
const header = pipe(
request.headers,
Record.toEntries,
Array.map(([key, value]) => new Postman.Header({ key, value })),
);
const timestampVariable = new Postman.Variable({
key: 'timestamp',
type: 'number',
value: wallTime,
});
const requestItem = new Postman.Item({
id: Uuid.v4(),
name: request.url,
request: new Postman.RequestClass({
body: Option.getOrNull(postBody),
header,
method: request.method,
url: request.url,
}),
variable: [timestampVariable],
});
const newNavigation = Struct.evolve(navigation, { item: (_) => Array.prepend(_ ?? [], requestItem) });
const newHost = Struct.evolve(host, { item: (_) => pipe(_ ?? [], Array.drop(1), Array.prepend(newNavigation)) });
const newCollection = Struct.evolve(collection, { item: (_) => pipe(_, Array.drop(1), Array.prepend(newHost)) });
MutableHashMap.set(indexMap, requestId, {
host: newCollection.item.length,
navigation: newHost.item?.length ?? 0,
request: newNavigation.item?.length ?? 0,
});
return newCollection;
});
export const addResponse = (
collection: Postman.Collection,
indexMap: ReturnType<typeof makeIndexMap>,
{ requestId, response }: Devtools.Protocol.Network.ResponseReceivedEvent,
{ body }: Partial<Devtools.Protocol.Network.GetResponseBodyResponse> = {},
) =>
Effect.gen(function* () {
const url = yield* Schema.decode(Schema.URL)(response.url);
if (Array.contains(hostnameBlacklist, url.hostname)) return collection;
const index = yield* MutableHashMap.get(indexMap, requestId);
const host = yield* Array.get(collection.item, collection.item.length - index.host);
const navigation = yield* pipe(
host.item,
Option.fromNullable,
Option.flatMap(Array.get((host.item?.length ?? 0) - index.navigation)),
);
const request = yield* pipe(
navigation.item,
Option.fromNullable,
Option.flatMap(Array.get((navigation.item?.length ?? 0) - index.request)),
);
const header = pipe(
response.headers,
Record.toEntries,
Array.map(([key, value]) => new Postman.Header({ key, value })),
);
const responseItem = new Postman.Response({
body,
code: response.status,
header,
status: response.statusText,
});
// eslint-disable-next-line @typescript-eslint/no-misused-spread
const newRequest = new Postman.Item({ ...request, response: [responseItem] });
const newNavigation = Struct.evolve(navigation, {
item: (_) => Array.replace(_ ?? [], (_?.length ?? 0) - index.request, newRequest),
});
const newHost = Struct.evolve(host, {
item: (_) => Array.replace(_ ?? [], (_?.length ?? 0) - index.navigation, newNavigation),
});
const newCollection = Struct.evolve(collection, {
item: (_) => Array.replace(_, _.length - index.host, newHost),
});
MutableHashMap.remove(indexMap, requestId);
return newCollection;
});
const TabIdTag = 'TabId';
const TabId = Schema.Option(Schema.Number);
export const getTabId = Effect.gen(function* () {
const tabId = yield* Effect.tryPromise(() => Storage.Local.get<typeof TabId.Encoded>(TabIdTag));
if (!tabId) return Option.none();
return yield* Schema.decode(TabId)(tabId);
});
export const useTabId = () => {
const [tabIdEncoded] = PlasmoStorage.useStorage<typeof TabId.Encoded>({
instance: Storage.Local,
key: TabIdTag,
});
if (!tabIdEncoded) return Option.none();
return Schema.decodeSync(TabId)(tabIdEncoded);
};
export const start = Effect.gen(function* () {
const tabs = yield* Effect.tryPromise(() => chrome.tabs.query({ active: true, currentWindow: true }));
const tab = tabs[0];
if (!tab?.id) return;
yield* pipe(
tab.id,
Option.some,
Schema.encode(TabId),
Effect.flatMap((_) => Effect.tryPromise(() => Storage.Local.set(TabIdTag, _))),
);
});
export const stop = pipe(
Option.none(),
Schema.encode(TabId),
Effect.flatMap((_) => Effect.tryPromise(() => Storage.Local.set(TabIdTag, _))),
);
const ResetRequestTag = 'ResetRequestTag';
const ResetRequest = Schema.Option(Schema.Boolean);
export const setReset = (reset: boolean) =>
pipe(
Option.some(reset),
Schema.encode(ResetRequest),
Effect.flatMap((_) => Effect.tryPromise(() => Storage.Local.set(ResetRequestTag, _))),
);
export const reset = (indexMap: ReturnType<typeof makeIndexMap>) =>
Effect.gen(function* () {
const newCollection = new Postman.Collection();
yield* stop.pipe(Effect.ignoreLogged);
yield* pipe(
newCollection,
Schema.encode(Postman.Collection),
Effect.flatMap((_) => Effect.tryPromise(() => Storage.Local.set(CollectionTag, _))),
);
yield* setReset(false);
MutableHashMap.clear(indexMap);
return newCollection;
});
interface WatchProps {
onReset: Effect.Effect<void>;
onStart: (tabId: number) => Effect.Effect<void>;
onStop: (tabId: number) => Effect.Effect<void>;
}
export const watch = ({ onReset, onStart, onStop }: WatchProps) =>
Storage.Local.watch({
[ResetRequestTag]: (_) =>
void pipe(
Schema.decodeUnknown(Storage.Change(ResetRequest))(_),
Effect.flatMap((_) =>
Option.match(Option.flatten(_.newValue), {
onNone: () => Effect.void,
onSome: () => onReset,
}),
),
Effect.ignoreLogged,
Runtime.runPromise,
),
[TabIdTag]: (_) =>
void pipe(
Schema.decodeUnknown(Storage.Change(TabId))(_),
Effect.flatMap((_) =>
Option.match(Option.flatten(_.newValue), {
onNone: () => Effect.flatMap(Option.flatten(_.oldValue), onStop),
onSome: onStart,
}),
),
Effect.ignoreLogged,
Runtime.runPromise,
),
});
================================================
FILE: apps/api-recorder-extension/src/runtime.ts
================================================
import { Logger, LogLevel, ManagedRuntime } from 'effect';
export const Runtime = ManagedRuntime.make(Logger.minimumLogLevel(LogLevel.Debug));
================================================
FILE: apps/api-recorder-extension/src/storage.ts
================================================
import * as PlasmoStorage from '@plasmohq/storage';
import * as PlasmoStorageHook from '@plasmohq/storage/hook';
import { Effect, Option, pipe, Schema } from 'effect';
import * as React from 'react';
import { Runtime } from '~runtime';
export const Local = new PlasmoStorage.Storage({ area: 'local' });
export const Change = <S extends Schema.Schema.All>(schema: S) => {
const value = pipe(schema, Schema.optionalWith({ as: 'Option' }));
return Schema.Struct({ newValue: value, oldValue: value });
};
export const get = <T>(storage: PlasmoStorage.Storage, key: string, schema: Schema.Schema<T>) =>
Effect.gen(function* () {
const value = yield* Effect.tryPromise(() => storage.get<typeof schema.Encoded>(key));
if (value === undefined) return Option.none();
return yield* Schema.decode(schema)(value).pipe(Effect.map(Option.some));
});
export const set =
<A, I>(storage: PlasmoStorage.Storage, key: string, schema: Schema.Schema<A, I>) =>
(value: A) =>
pipe(
Schema.encode(schema)(value),
Effect.flatMap((_) => Effect.tryPromise(() => storage.set(key, _))),
);
export const useState = <A, I>(storage: PlasmoStorage.Storage, key: string, schema: Schema.Schema<A, I>) => {
const [state, setState] = React.useState(Option.none<A>());
const [stateEncoded, setStateEncoded] = PlasmoStorageHook.useStorage<typeof schema.Encoded>({
instance: storage,
key,
});
React.useEffect(
() =>
void Effect.gen(function* () {
if (stateEncoded === undefined) return;
const state = yield* Schema.decode(schema)(stateEncoded);
setState(Option.some(state));
}).pipe(Effect.ignoreLogged, Runtime.runPromise),
[schema, stateEncoded],
);
const set = (value: A) =>
pipe(
Schema.encode(schema)(value),
Effect.flatMap((_) => Effect.tryPromise(() => setStateEncoded(_))),
);
return [state, set] as const;
};
================================================
FILE: apps/api-recorder-extension/src/styles.css
================================================
@import '@the-dev-tools/ui/styles';
@source '.';
html,
body,
#__plasmo {
height: 100%;
}
================================================
FILE: apps/api-recorder-extension/src/tabs/auth-callback.tsx
================================================
import '~styles.css';
import type { IconType } from 'react-icons';
import { Effect, Match, Option, pipe, Tuple } from 'effect';
import * as React from 'react';
import * as FeatherIcons from 'react-icons/fi';
import { twMerge } from 'tailwind-merge';
import { tw } from '@the-dev-tools/ui/tailwind-literal';
import { Button } from '~/ui/button';
import * as Auth from '~auth';
import { Layout } from '~layout';
import { Runtime } from '~runtime';
interface FeaturedIconProps extends React.ComponentPropsWithoutRef<'div'> {
Icon: IconType;
iconClassName?: string;
}
const FeaturedIcon = ({ className, Icon, iconClassName, ...props }: FeaturedIconProps) => (
<div className={twMerge('shadow-xs rounded-lg border p-3', className)} {...props}>
<Icon className={twMerge('size-7', iconClassName)} />
</div>
);
const Heading = ({ children, ...props }: Omit<React.ComponentPropsWithoutRef<'h1'>, 'className'>) => (
<h1 {...props} className='pb-3 text-2xl font-semibold leading-tight text-gray-800'>
{children}
</h1>
);
const Subheading = ({ children, ...props }: Omit<React.ComponentPropsWithoutRef<'h2'>, 'className'>) => (
<h2 {...props} className='text-base leading-6 text-slate-500 *:text-indigo-600'>
{children}
</h2>
);
const AuthCallbackPage = () => {
const token = new URLSearchParams(window.location.search).get('magic_credential');
const [state, setState] = React.useState<'failure' | 'loading' | 'success'>(token ? 'loading' : 'failure');
const [resendLoading, setResendLoading] = React.useState(false);
const email = pipe(
Auth.useEmail(),
Tuple.getFirst,
Option.flatten,
Option.getOrElse(() => 'your email'),
);
React.useEffect(() => {
if (!token) return;
void Effect.gen(function* () {
const success = yield* Auth.loginConfirm(token);
setState(success ? 'success' : 'failure');
}).pipe(Runtime.runPromise);
}, [token]);
const inner = Match.value(state).pipe(
Match.when('loading', () => (
<>
<FeaturedIcon
className='border-gray-200 bg-white text-slate-800'
Icon={FeatherIcons.FiLoader}
iconClassName='animate-spin'
/>
<div className='text-center'>
<Heading>Authenticating...</Heading>
<Subheading>
We are authenticating <span>{email}</span>
</Subheading>
</div>
</>
)),
Match.when('success', () => (
<>
<FeaturedIcon className='border-green-600 bg-green-50 text-green-600' Icon={FeatherIcons.FiCheckCircle} />
<div className='text-center'>
<Heading>Authentication Successful!</Heading>
<Subheading>
We have successfully authenticated <span>{email}</span>
</Subheading>
</div>
</>
)),
Match.when('failure', () => (
<>
<FeaturedIcon className='border-red-500 bg-red-50 text-red-500' Icon={FeatherIcons.FiXCircle} />
<div className='text-center'>
<Heading>Authentication Failed!</Heading>
<Subheading>
We have failed to authenticate <span>{email}</span>
</Subheading>
</div>
<Button
className='w-full'
onPress={() =>
Effect.gen(function* () {
setResendLoading(true);
const success = yield* Auth.loginInit(email);
setResendLoading(false);
if (success) setState('success');
}).pipe(Runtime.runPromise)
}
>
{resendLoading && <FeatherIcons.FiLoader className='animate-spin' />}
Resend email
</Button>
</>
)),
Match.exhaustive,
);
return (
<Layout innerClassName={tw`flex items-center justify-center`}>
<div className='flex flex-col items-center gap-6'>{inner}</div>
</Layout>
);
};
export default AuthCallbackPage;
================================================
FILE: apps/api-recorder-extension/src/types.d.ts
================================================
import 'plasmo/templates/plasmo.d.ts';
================================================
FILE: apps/api-recorder-extension/src/ui/button.tsx
================================================
import * as RAC from 'react-aria-components';
import { tv, type VariantProps } from 'tailwind-variants';
import { focusVisibleRingStyles } from '@the-dev-tools/ui/focus-ring';
import { tw } from '@the-dev-tools/ui/tailwind-literal';
import { composeStyleRenderProps } from '@the-dev-tools/ui/utils';
// TODO: remove once extension design is unified with the SaaS
export const buttonStyles = tv({
extend: focusVisibleRingStyles,
base: tw`
flex cursor-pointer items-center justify-center gap-1.5 rounded-lg px-4 py-3 text-base leading-5 font-semibold
select-none
hover:bg-neutral-400
`,
variants: {
variant: {
primary: tw`bg-indigo-600 text-white`,
'secondary color': tw`border border-indigo-200 bg-indigo-50 text-indigo-700`,
'secondary gray': tw`border border-slate-200 bg-white text-black`,
},
},
defaultVariants: {
variant: 'primary',
},
});
export interface ButtonProps extends RAC.ButtonProps, VariantProps<typeof buttonStyles> {}
export const Button = ({ className, ...props }: ButtonProps) => {
return <RAC.Button {...props} className={composeStyleRenderProps(className, buttonStyles)} />;
};
================================================
FILE: apps/api-recorder-extension/src/utils.ts
================================================
// https://github.com/microsoft/TypeScript/issues/13948#issuecomment-1333159066
// eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-explicit-any
export const keyValue = <K extends PropertyKey, V>(k: K, v: V): { [P in K]: Record<P, V> }[K] => ({ [k]: v }) as any;
================================================
FILE: apps/api-recorder-extension/tsconfig.json
================================================
{
"extends": ["../../tsconfig.base.json"],
"files": [],
"references": [
{
"path": "../../packages/ui"
},
{
"path": "../../tools/eslint"
},
{
"path": "./tsconfig.lib.json"
}
]
}
================================================
FILE: apps/api-recorder-extension/tsconfig.lib.json
================================================
{
"extends": ["plasmo/templates/tsconfig.base.json", "./tsconfig.json"],
"compilerOptions": {
"outDir": "dist",
"jsx": "react-jsx",
"paths": { "~*": ["./src/*"] }
},
"include": [".plasmo/index.d.ts", "."],
"exclude": [".plasmo", "dist", "node_modules"],
"references": [
{
"path": "../../packages/ui/tsconfig.lib.json"
},
{
"path": "../../tools/eslint/tsconfig.lib.json"
}
]
}
================================================
FILE: apps/cli/.devtools.yaml
================================================
{}
================================================
FILE: apps/cli/CHANGELOG.md
================================================
## 1.0.1 (2026-05-05)
### 🩹 Fixes
- ### Bug fixes ([#42](https://github.com/the-dev-tools/dev-tools/issues/42))
- **Loop break condition now sees inner-node outputs.** For/ForEach break expressions are evaluated **after** each iteration's children run, so they can reference values produced during that iteration (e.g. `{{ http_1.response.body.done }}`). Previously the check ran before children, so any expression referencing a not-yet-written variable failed the entire flow on the first iteration. Missing identifiers are now treated as "don't break" (loops are still bounded by iteration count). ForEach semantics also aligned with For: an expression that evaluates true exits the loop. ([#42](https://github.com/the-dev-tools/dev-tools/issues/42))
### Other
- New `break_condition` field on `for` / `for_each` steps in YAML workspaces, so loops in CLI-driven flows can exit on a runtime predicate without needing the UI.
### ❤️ Thank You
- moosebay
# 1.0.0 (2026-04-24)
### 🚀 Features
- First stable release. ([f31075cf](https://github.com/the-dev-tools/dev-tools/commit/f31075cf))
### New protocols and flow nodes
- **GraphQL requests**: query/variables, assertions, response history, YAML export/import.
- **WebSocket**: connection and send flow nodes with message capture.
- **Wait node**: pause flow execution for a configurable duration.
- **Sub-flow**: Run Sub Flow node plus Sub-Flow Trigger and Sub-Flow Return for composing flows.
### Flow engine
- Flow runner overhaul with improved node execution and error propagation.
- Flow-level error field and node ID mapping for more precise failure attribution.
### Expression editor
- Built-in `uuid()`, `uuid("v4")`, `uuid("v7")`, `ulid()`, `now()` helpers inside `{{ }}`.
- Dot-chain on `now()`: `.Unix()`, `.UnixMilli()`, `.UnixMicro()`, `.UnixNano()`.
- `faker.*` namespace (35 generators — `name()`, `email()`, `phoneNumber()`, `url()`, `ipv4()`, `word()`, `sentence()`, `paragraph()`, `date()`, `timestamp()`, `uuid()`, `randomInt(min, max)`, ...) for fake test data.
### AI
- AI agent with tool execution, streaming, and multi-provider support (OpenAI, Anthropic, Gemini), credential vault encryption, and variable introspection.
### ❤️ Thank You
- moosebay
## 0.2.2 (2026-02-26)
### 🩹 Fixes
- Fix AI node export and credential env var name sanitization ([36fd3671](https://github.com/the-dev-tools/dev-tools/commit/36fd3671))
### ❤️ Thank You
- ElecTwix @ElecTwix
## 0.2.1 (2026-02-09)
### 🩹 Fixes
- Revert env vars from {{ env.varName }} back to flat {{ varName }} syntax ([b4914257](https://github.com/the-dev-tools/dev-tools/commit/b4914257))
### ❤️ Thank You
- ElecTwix @ElecTwix
## 0.2.0 (2026-02-07)
### 🚀 Features
- Add AI node support with multi-provider LLM integration (OpenAI, Anthropic, Gemini), credential vault encryption, and variable introspection system ([fb11df2a](https://github.com/the-dev-tools/dev-tools/commit/fb11df2a))
### 🩹 Fixes
- Fix JavaScript node result encoding ([7cfbd0dd](https://github.com/the-dev-tools/dev-tools/commit/7cfbd0dd))
- Show stack trace for JavaScript node errors ([0697ebc8](https://github.com/the-dev-tools/dev-tools/commit/0697ebc8))
### ❤️ Thank You
- ElecTwix @ElecTwix
- Tomas Zaluckij @Tomaszal
## 0.1.0 (2026-01-06)
### 🚀 Features
- First public release of DevTools Desktop and CLI apps! 🎉 ([e279c6d7](https://github.com/the-dev-tools/dev-tools/commit/e279c6d7))
### ❤️ Thank You
- Tomas Zaluckij @Tomaszal
================================================
FILE: apps/cli/cmd/config.go
================================================
package cmd
import (
"github.com/the-dev-tools/dev-tools/packages/server/pkg/model/mfile"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/model/mflow"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/model/mhttp"
)
type DefaultConfig struct {
// unified files (replaces collections)
Files []mfile.File
// HTTP requests and related data (unified mhttp models)
HTTPRequests []mhttp.HTTP
HTTPHeaders []mhttp.HTTPHeader
HTTPSearchParams []mhttp.HTTPSearchParam
HTTPAsserts []mhttp.HTTPAssert
HTTPBodyForms []mhttp.HTTPBodyForm
HTTPBodyUrlencoded []mhttp.HTTPBodyUrlencoded
HTTPBodyRaws []mhttp.HTTPBodyRaw
HTTPResponses []mhttp.HTTPResponse
HTTPResponseHeaders []mhttp.HTTPResponseHeader
HTTPResponseAsserts []mhttp.HTTPResponseAssert
// flows (kept as-is - no unified model available yet)
Flows []mflow.Flow
// Root nodes (kept as-is)
FlowNodes []mflow.Node
// Sub nodes (kept as-is)
FlowRequestNodes []mflow.NodeRequest
FlowConditionNodes []mflow.NodeIf
FlowForNodes []mflow.NodeFor
FlowForEachNodes []mflow.NodeForEach
FlowJSNodes []mflow.NodeJS
}
================================================
FILE: apps/cli/cmd/flow.go
================================================
package cmd
import (
"context"
"fmt"
"log"
"log/slog"
"os"
"strings"
"github.com/the-dev-tools/dev-tools/apps/cli/internal/common"
"github.com/the-dev-tools/dev-tools/apps/cli/internal/reporter"
"github.com/the-dev-tools/dev-tools/apps/cli/internal/runner"
"github.com/the-dev-tools/dev-tools/packages/db/pkg/sqlitemem"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/expression"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/flow/flowbuilder"
gqlresolver "github.com/the-dev-tools/dev-tools/packages/server/pkg/graphql/resolver"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/http/resolver"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/idwrap"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/ioworkspace"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/model/mcredential"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/model/mflow"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/service/scredential"
yamlflowsimplev2 "github.com/the-dev-tools/dev-tools/packages/server/pkg/translate/yamlflowsimplev2"
"github.com/the-dev-tools/dev-tools/packages/spec/dist/buf/go/api/private/node_js_executor/v1/node_js_executorv1connect"
"github.com/spf13/cobra"
"gopkg.in/yaml.v3"
)
var (
quietMode bool
showOutput bool
)
func init() {
rootCmd.AddCommand(flowCmd)
// Add yamlflowRunCmd directly to flowCmd since we only have one run command now
flowCmd.AddCommand(yamlflowRunCmd)
yamlflowRunCmd.Flags().StringSliceVar(&reportFormats, "report", []string{"console"}, "Report outputs to produce (format[:path]). Supported formats: console, json, junit.")
yamlflowRunCmd.Flags().BoolVarP(&quietMode, "quiet", "q", false, "Suppress non-essential output for CI/CD usage")
yamlflowRunCmd.Flags().BoolVar(&showOutput, "show-output", false, "Show node output data (including AI metrics) after each node completes")
}
var flowCmd = &cobra.Command{
Use: "flow",
Short: "Flow Controls",
Long: `Flow Controls`,
Run: func(cmd *cobra.Command, args []string) {
_ = cmd.Help()
},
}
var yamlflowRunCmd = &cobra.Command{
Use: "run [yamlflow-file] [flow-name]",
Short: "Run flow from yamlflow file",
Long: `Running Flow from a yamlflow format file. If flow-name is not provided, executes all flows from the 'run' field in order.`,
Args: cobra.RangeArgs(1, 2),
RunE: func(cmd *cobra.Command, args []string) error {
ctx := cmd.Context()
var logLevel slog.Level
logLevelStr := os.Getenv("LOG_LEVEL")
switch logLevelStr {
case "DEBUG":
logLevel = slog.LevelDebug
case "INFO":
logLevel = slog.LevelInfo
case "WARNING":
logLevel = slog.LevelWarn
case "ERROR":
logLevel = slog.LevelError
default:
logLevel = slog.LevelError
}
loggerHandler := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
Level: logLevel,
})
logger := slog.New(loggerHandler)
yamlflowFilePath := args[0]
var flowName string
var runMultiple bool
fileData, err := os.ReadFile(yamlflowFilePath)
if err != nil {
return err
}
// Check if flow name was provided as argument
if len(args) > 1 {
flowName = args[1]
runMultiple = false
} else {
// Check for run field to execute multiple flows
var rawYAML map[string]interface{}
if err := yaml.Unmarshal(fileData, &rawYAML); err == nil {
if runField, ok := rawYAML["run"].([]interface{}); ok && len(runField) > 0 {
// Execute all flows in run field
runMultiple = true
log.Println("Executing flows based on run field configuration")
}
}
if !runMultiple {
return fmt.Errorf("no flow name provided and no run field found in workflow file")
}
}
// If quiet mode is enabled, suppress console reporter
if quietMode {
for i, format := range reportFormats {
if format == "console" {
reportFormats = append(reportFormats[:i], reportFormats[i+1:]...)
break
}
}
}
// Create a workspace ID for the import
workspaceID := idwrap.NewNow()
// Initialize database and services first (needed for credential creation)
db, _, err := sqlitemem.NewSQLiteMem(ctx)
if err != nil {
return err
}
services, err := common.CreateServices(ctx, db, logger)
if err != nil {
return err
}
// Parse YAML to extract credentials section first
var yamlData yamlflowsimplev2.YamlFlowFormatV2
if err := yaml.Unmarshal(fileData, &yamlData); err != nil {
return fmt.Errorf("failed to parse YAML: %w", err)
}
// Process credentials and build credential map
credentialMap, err := processYAMLCredentials(ctx, yamlData.Credentials, workspaceID, services)
if err != nil {
return fmt.Errorf("failed to process credentials: %w", err)
}
// Convert YAML using v2 converter with credential map
resolved, err := yamlflowsimplev2.ConvertSimplifiedYAML(fileData, yamlflowsimplev2.ConvertOptionsV2{
WorkspaceID: workspaceID,
CredentialMap: credentialMap,
})
if err != nil {
return fmt.Errorf("failed to convert YAML using v2: %w", err)
}
httpResolver := resolver.NewStandardResolver(
&services.HTTP,
&services.HTTPHeader,
services.HTTPSearchParam,
services.HTTPBodyRaw,
services.HTTPBodyForm,
services.HTTPBodyUrlEncoded,
services.HTTPAssert,
)
graphqlResolver := gqlresolver.NewStandardResolver(
services.GraphQL.Reader(),
&services.GraphQLHeader,
&services.GraphQLAssert,
)
// Create LLM provider factory for AI nodes
llmFactory := scredential.NewLLMProviderFactory(&services.Credential)
builder := flowbuilder.New(
&services.Node,
&services.NodeRequest,
&services.NodeFor,
&services.NodeForEach,
&services.NodeIf,
&services.NodeJS,
&services.NodeAI,
&services.NodeAiProvider,
&services.NodeMemory,
&services.NodeGraphQL,
&services.NodeWsConnection,
&services.NodeWsSend,
&services.NodeWait,
&services.NodeSubFlowTrigger,
&services.NodeSubFlowReturn,
&services.NodeRunSubFlow,
&services.WebSocket,
&services.WebSocketHeader,
&services.GraphQL,
&services.GraphQLHeader,
&services.Workspace,
&services.Variable,
&services.FlowVariable,
httpResolver,
graphqlResolver,
services.Logger,
llmFactory,
)
// Wire sub-flow executor so RunSubFlow nodes can invoke other flows
builder.SubFlowExecutor = flowbuilder.NewSubFlowExecutor(
builder, &services.Flow, &services.FlowEdge, nil, services.Logger,
)
if !quietMode {
log.Printf("Importing workspace bundle: %d flows, %d nodes", len(resolved.Flows), len(resolved.FlowNodes))
}
// Create IOWorkspaceService
ioService := ioworkspace.New(services.Queries, logger)
// Start transaction for import
tx, err := db.BeginTx(ctx, nil)
if err != nil {
return fmt.Errorf("failed to begin transaction: %w", err)
}
// Create the workspace first - this is needed for environment variable resolution
// The bundle.Workspace contains the ActiveEnv and GlobalEnv IDs set by the converter
resolved.Workspace.ID = workspaceID
wsTx := services.Workspace.TX(tx)
if err := wsTx.Create(ctx, &resolved.Workspace); err != nil {
_ = tx.Rollback()
return fmt.Errorf("failed to create workspace: %w", err)
}
// Import options
importOpts := ioworkspace.GetDefaultImportOptions(workspaceID)
importOpts.PreserveIDs = true // Preserve IDs generated by the converter
if _, err := ioService.Import(ctx, tx, resolved, importOpts); err != nil {
_ = tx.Rollback()
return fmt.Errorf("failed to import workspace bundle: %w", err)
}
if err := tx.Commit(); err != nil {
return fmt.Errorf("failed to commit transaction: %w", err)
}
// Find the flow by name - use the workspaceID we created earlier
c := services
flows, err := c.Flow.GetFlowsByWorkspaceID(ctx, workspaceID)
if err != nil {
return err
}
specs, err := reporter.ParseReportSpecs(reportFormats)
if err != nil {
return err
}
reporters, err := reporter.NewReporterGroup(specs, reporter.ReporterOptions{
ShowOutput: showOutput,
})
if err != nil {
return err
}
// Check if any flows have JS nodes and start the worker if needed
hasJSNodes, err := checkFlowsHaveJSNodes(ctx, flows, c)
if err != nil {
return fmt.Errorf("failed to check for JS nodes: %w", err)
}
var jsClient node_js_executorv1connect.NodeJsExecutorServiceClient
if hasJSNodes {
if !quietMode {
log.Println("JS nodes detected, starting Node.js worker...")
}
jsRunner, err := runner.NewJSRunner()
if err != nil {
return fmt.Errorf("failed to initialize JS runner: %w", err)
}
defer jsRunner.Stop()
if err := jsRunner.Start(ctx); err != nil {
return fmt.Errorf("failed to start JS worker: %w", err)
}
if !quietMode {
log.Println("Node.js worker started successfully")
}
jsClient = jsRunner.Client()
}
runnerServices := runner.RunnerServices{
NodeService: c.Node,
EdgeService: c.FlowEdge,
FlowVariableService: c.FlowVariable,
Builder: builder,
JSClient: jsClient,
}
var runErr error
if runMultiple {
// Execute multiple flows based on run field
runErr = runner.RunMultipleFlows(ctx, fileData, flows, runnerServices, logger, reporters)
} else {
// Execute single flow (existing behavior)
var flowPtr *mflow.Flow
for _, flow := range flows {
if flowName == flow.Name {
flowPtr = &flow
break
}
}
if flowPtr == nil {
return fmt.Errorf("flow '%s' not found in the workflow file", flowName)
}
if !quietMode {
log.Println("found flow", flowPtr.Name)
}
_, runErr = runner.RunFlow(ctx, flowPtr, runnerServices, reporters)
if runErr != nil {
logger.Error(runErr.Error())
}
}
flushErr := reporters.Flush()
if runErr != nil {
return runErr
}
return flushErr
},
}
var reportFormats []string
func checkFlowsHaveJSNodes(ctx context.Context, flows []mflow.Flow, c *common.Services) (bool, error) {
for _, flow := range flows {
nodes, err := c.Node.GetNodesByFlowID(ctx, flow.ID)
if err != nil {
return false, err
}
for _, node := range nodes {
if node.NodeKind == mflow.NODE_KIND_JS {
return true, nil
}
}
}
return false, nil
}
// processYAMLCredentials processes credentials from YAML, expands env vars using the
// expression system ({{ #env:VAR_NAME }} syntax), creates them in DB,
// and returns a map of credential names to their IDs.
func processYAMLCredentials(ctx context.Context, credentials []yamlflowsimplev2.YamlCredentialV2, workspaceID idwrap.IDWrap, services *common.Services) (map[string]idwrap.IDWrap, error) {
credentialMap := make(map[string]idwrap.IDWrap)
if len(credentials) == 0 {
return credentialMap, nil
}
// Create expression environment for variable interpolation
env := expression.NewUnifiedEnv(nil)
for _, yamlCred := range credentials {
credID := idwrap.NewNow()
// Determine credential kind from type
var kind mcredential.CredentialKind
switch strings.ToLower(yamlCred.Type) {
case yamlflowsimplev2.CredentialTypeOpenAI:
kind = mcredential.CREDENTIAL_KIND_OPENAI
case yamlflowsimplev2.CredentialTypeAnthropic:
kind = mcredential.CREDENTIAL_KIND_ANTHROPIC
case yamlflowsimplev2.CredentialTypeGemini, yamlflowsimplev2.CredentialTypeGoogle:
kind = mcredential.CREDENTIAL_KIND_GEMINI
default:
return nil, fmt.Errorf("unknown credential type: %s", yamlCred.Type)
}
// Create base credential
cred := &mcredential.Credential{
ID: credID,
WorkspaceID: workspaceID,
Name: yamlCred.Name,
Kind: kind,
}
if err := services.Credential.CreateCredential(ctx, cred); err != nil {
return nil, fmt.Errorf("failed to create credential %s: %w", yamlCred.Name, err)
}
// Create provider-specific credential with expanded env vars
switch kind {
case mcredential.CREDENTIAL_KIND_OPENAI:
token, err := interpolateValue(env, yamlCred.Token)
if err != nil {
return nil, fmt.Errorf("openai credential %s: failed to resolve token: %w", yamlCred.Name, err)
}
if token == "" {
return nil, fmt.Errorf("openai credential %s: token is required (use {{ #env:VAR_NAME }} syntax)", yamlCred.Name)
}
var baseURL *string
if yamlCred.BaseURL != "" {
expanded, err := interpolateValue(env, yamlCred.BaseURL)
if err != nil {
return nil, fmt.Errorf("openai credential %s: failed to resolve base_url: %w", yamlCred.Name, err)
}
baseURL = &expanded
}
openaiCred := &mcredential.CredentialOpenAI{
CredentialID: credID,
Token: token,
BaseUrl: baseURL,
}
if err := services.Credential.CreateCredentialOpenAI(ctx, openaiCred); err != nil {
return nil, fmt.Errorf("failed to create openai credential %s: %w", yamlCred.Name, err)
}
case mcredential.CREDENTIAL_KIND_ANTHROPIC:
apiKey, err := interpolateValue(env, yamlCred.APIKey)
if err != nil {
return nil, fmt.Errorf("anthropic credential %s: failed to resolve api_key: %w", yamlCred.Name, err)
}
if apiKey == "" {
return nil, fmt.Errorf("anthropic credential %s: api_key is required (use {{ #env:VAR_NAME }} syntax)", yamlCred.Name)
}
var baseURL *string
if yamlCred.BaseURL != "" {
expanded, err := interpolateValue(env, yamlCred.BaseURL)
if err != nil {
return nil, fmt.Errorf("anthropic credential %s: failed to resolve base_url: %w", yamlCred.Name, err)
}
baseURL = &expanded
}
anthropicCred := &mcredential.CredentialAnthropic{
CredentialID: credID,
ApiKey: apiKey,
BaseUrl: baseURL,
}
if err := services.Credential.CreateCredentialAnthropic(ctx, anthropicCred); err != nil {
return nil, fmt.Errorf("failed to create anthropic credential %s: %w", yamlCred.Name, err)
}
case mcredential.CREDENTIAL_KIND_GEMINI:
apiKey, err := interpolateValue(env, yamlCred.APIKey)
if err != nil {
return nil, fmt.Errorf("gemini credential %s: failed to resolve api_key: %w", yamlCred.Name, err)
}
if apiKey == "" {
return nil, fmt.Errorf("gemini credential %s: api_key is required (use {{ #env:VAR_NAME }} syntax)", yamlCred.Name)
}
var baseURL *string
if yamlCred.BaseURL != "" {
expanded, err := interpolateValue(env, yamlCred.BaseURL)
if err != nil {
return nil, fmt.Errorf("gemini credential %s: failed to resolve base_url: %w", yamlCred.Name, err)
}
baseURL = &expanded
}
geminiCred := &mcredential.CredentialGemini{
CredentialID: credID,
ApiKey: apiKey,
BaseUrl: baseURL,
}
if err := services.Credential.CreateCredentialGemini(ctx, geminiCred); err != nil {
return nil, fmt.Errorf("failed to create gemini credential %s: %w", yamlCred.Name, err)
}
}
credentialMap[yamlCred.Name] = credID
}
return credentialMap, nil
}
// interpolateValue uses the expression system to resolve {{ }} patterns.
// Supports {{ #env:VAR_NAME }} for environment variables.
func interpolateValue(env *expression.UnifiedEnv, value string) (string, error) {
if value == "" {
return "", nil
}
// If no {{ }} pattern, return as-is
if !expression.HasVars(value) {
return value, nil
}
// Use expression system to interpolate
return env.Interpolate(value)
}
================================================
FILE: apps/cli/cmd/import.go
================================================
package cmd
import (
"context"
"fmt"
"log/slog"
"os"
"path/filepath"
"strings"
"github.com/the-dev-tools/dev-tools/apps/cli/internal/common"
"github.com/the-dev-tools/dev-tools/apps/cli/internal/importer"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/idwrap"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/translate/harv2"
tcurlv2 "github.com/the-dev-tools/dev-tools/packages/server/pkg/translate/tcurlv2"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/translate/tpostmanv2"
"github.com/spf13/cobra"
)
var (
workspaceID string
folderID string
)
func init() {
rootCmd.AddCommand(importCmd)
// Add global flags for import commands
importCmd.PersistentFlags().StringVar(&workspaceID, "workspace", "", "Workspace ID (required)")
importCmd.PersistentFlags().StringVar(&folderID, "folder", "", "Optional folder ID for organization")
// Mark required flags
_ = importCmd.MarkPersistentFlagRequired("workspace")
// Add subcommands
importCmd.AddCommand(importCurlCmd)
importCmd.AddCommand(importPostmanCmd)
importCmd.AddCommand(importHarCmd)
}
var importCmd = &cobra.Command{
Use: "import",
Short: "Import data from various formats",
Long: `Import data from various formats like curl commands, Postman collections,
and HAR files into your DevTools workspace using modern v2 translation services.`,
Run: func(cmd *cobra.Command, args []string) {
_ = cmd.Help()
},
}
var importCurlCmd = &cobra.Command{
Use: "curl [curl-command]",
Short: "Import a curl command",
Long: `Import a curl command into your workspace using the tcurlv2 translation service.
The command will be parsed and converted to a unified HTTP request model.`,
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
return importer.RunImport(cmd.Context(), slog.Default(), workspaceID, folderID, func(ctx context.Context, services *common.Services, wsID idwrap.IDWrap, folderIDPtr *idwrap.IDWrap) error {
curlCommand := args[0]
resolved, err := tcurlv2.ConvertCurl(curlCommand, tcurlv2.ConvertCurlOptions{
WorkspaceID: wsID,
FolderID: folderIDPtr,
})
if err != nil {
return fmt.Errorf("failed to convert curl command: %w", err)
}
err = services.HTTP.Create(ctx, &resolved.HTTP)
if err != nil {
return fmt.Errorf("failed to save HTTP request: %w", err)
}
for _, header := range resolved.Headers {
err := services.HTTPHeader.Create(ctx, &header)
if err != nil {
return fmt.Errorf("failed to save header: %w", err)
}
}
for _, searchParam := range resolved.SearchParams {
if err := services.HTTPSearchParam.Create(ctx, &searchParam); err != nil {
return fmt.Errorf("failed to save search param: %w", err)
}
}
for _, form := range resolved.BodyForms {
if err := services.HTTPBodyForm.Create(ctx, &form); err != nil {
return fmt.Errorf("failed to save body form: %w", err)
}
}
for _, urlencoded := range resolved.BodyUrlencoded {
err := services.HTTPBodyUrlEncoded.Create(ctx, &urlencoded)
if err != nil {
return fmt.Errorf("failed to save body urlencoded: %w", err)
}
}
if resolved.BodyRaw != nil {
_, err = services.HTTPBodyRaw.Create(ctx, resolved.BodyRaw.HttpID, resolved.BodyRaw.RawData)
if err != nil {
return fmt.Errorf("failed to save body raw: %w", err)
}
}
fmt.Printf("✅ Successfully imported curl command as '%s' (ID: %s)\n", resolved.HTTP.Name, resolved.HTTP.ID.String())
fmt.Printf(" Method: %s\n", resolved.HTTP.Method)
fmt.Printf(" URL: %s\n", resolved.HTTP.Url)
if folderIDPtr != nil {
fmt.Printf(" Folder: %s\n", folderIDPtr.String())
}
return nil
})
},
}
var importPostmanCmd = &cobra.Command{
Use: "postman [file]",
Short: "Import a Postman collection",
Long: `Import a Postman collection from a JSON file into your workspace using the tpostmanv2
translation service. All requests in the collection will be converted to unified HTTP models.`,
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
return importer.RunImport(cmd.Context(), slog.Default(), workspaceID, folderID, func(ctx context.Context, services *common.Services, wsID idwrap.IDWrap, folderIDPtr *idwrap.IDWrap) error {
postmanFile := args[0]
fileData, err := os.ReadFile(postmanFile)
if err != nil {
return fmt.Errorf("failed to read Postman collection file: %w", err)
}
collectionName := filepath.Base(postmanFile)
collectionName = strings.TrimSuffix(collectionName, filepath.Ext(collectionName))
resolved, err := tpostmanv2.ConvertPostmanCollection(fileData, tpostmanv2.ConvertOptions{
WorkspaceID: wsID,
FolderID: folderIDPtr,
CollectionName: collectionName,
})
if err != nil {
return fmt.Errorf("failed to convert Postman collection: %w", err)
}
for i, httpRequest := range resolved.HTTPRequests {
err = services.HTTP.Create(ctx, &httpRequest)
if err != nil {
return fmt.Errorf("failed to save HTTP request %d: %w", i+1, err)
}
}
for _, header := range resolved.Headers {
err := services.HTTPHeader.Create(ctx, &header)
if err != nil {
return fmt.Errorf("failed to save header: %w", err)
}
}
for _, searchParam := range resolved.SearchParams {
if err := services.HTTPSearchParam.Create(ctx, &searchParam); err != nil {
return fmt.Errorf("failed to save search param: %w", err)
}
}
for _, form := range resolved.BodyForms {
if err := services.HTTPBodyForm.Create(ctx, &form); err != nil {
return fmt.Errorf("failed to save body form: %w", err)
}
}
for _, urlencoded := range resolved.BodyUrlencoded {
err := services.HTTPBodyUrlEncoded.Create(ctx, &urlencoded)
if err != nil {
return fmt.Errorf("failed to save body urlencoded: %w", err)
}
}
for _, rawBody := range resolved.BodyRaw {
_, err := services.HTTPBodyRaw.Create(ctx, rawBody.HttpID, rawBody.RawData)
if err != nil {
return fmt.Errorf("failed to save body raw: %w", err)
}
}
fmt.Printf("✅ Successfully imported Postman collection '%s'\n", collectionName)
fmt.Printf(" Imported %d HTTP requests\n", len(resolved.HTTPRequests))
fmt.Printf(" Workspace: %s\n", wsID.String())
if folderIDPtr != nil {
fmt.Printf(" Folder: %s\n", folderIDPtr.String())
}
return nil
})
},
}
var importHarCmd = &cobra.Command{
Use: "har [file]",
Short: "Import a HAR file",
Long: `Import a HAR (HTTP Archive) file into your workspace using the harv2 translation service.
All HTTP requests in the HAR file will be converted to unified HTTP models and organized
into flows based on request dependencies.`,
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
return importer.RunImport(cmd.Context(), slog.Default(), workspaceID, folderID, func(ctx context.Context, services *common.Services, wsID idwrap.IDWrap, folderIDPtr *idwrap.IDWrap) error {
harFile := args[0]
fileData, err := os.ReadFile(harFile)
if err != nil {
return fmt.Errorf("failed to read HAR file: %w", err)
}
harData, err := harv2.ConvertRaw(fileData)
if err != nil {
return fmt.Errorf("failed to parse HAR file: %w", err)
}
resolved, err := harv2.ConvertHAR(harData, wsID)
if err != nil {
return fmt.Errorf("failed to convert HAR file: %w", err)
}
for i, httpRequest := range resolved.HTTPRequests {
err = services.HTTP.Create(ctx, &httpRequest)
if err != nil {
return fmt.Errorf("failed to save HTTP request %d: %w", i+1, err)
}
}
fmt.Printf("✅ Successfully imported HAR file\n")
fmt.Printf(" Imported %d HTTP requests\n", len(resolved.HTTPRequests))
fmt.Printf(" Workspace: %s\n", wsID.String())
if folderIDPtr != nil {
fmt.Printf(" Folder: %s\n", folderIDPtr.String())
}
return nil
})
},
}
================================================
FILE: apps/cli/cmd/root.go
================================================
package cmd
import (
"fmt"
"log"
homedir "github.com/mitchellh/go-homedir"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
var rootCmd = &cobra.Command{
Use: "devtoolscli",
Short: "DevTools is a powerful API testing tool",
Long: `DevTools is a powerful API testing tool that records your browser interactions,
automatically generates requests, and seamlessly chains them for functional testing.
With built-in CI integration, it streamlines API validation from development to deployment.
`,
Run: func(cmd *cobra.Command, args []string) {
_ = cmd.Help()
},
}
var (
cfgFilePath string
)
const (
ConfigFileName = ".devtools"
ConfigFileExtension = ".yaml"
)
func init() {
homePath, err := homedir.Dir()
if err != nil {
log.Fatal(err)
}
cfgFilePath = fmt.Sprintf("%s/%s%s", homePath, ConfigFileName, ConfigFileExtension)
viper.SetDefault("data", DefaultConfig{})
cobra.OnInitialize(initConfig)
rootCmd.PersistentFlags().StringVar(&cfgFilePath, "config", cfgFilePath, "config file (default is $HOME/.devtools.yaml)")
}
func Execute() {
if err := rootCmd.Execute(); err != nil {
log.Fatalf("error executing root command: %s", err)
}
}
func initConfig() {
viper.SetConfigType("yaml")
// Find home directory.
home, err := homedir.Dir()
if err != nil {
log.Fatalf("Error finding home directory: %s", err)
}
// Search config in home directory with name ".cobra" (without extension).
viper.AddConfigPath(home)
viper.AddConfigPath(cfgFilePath)
viper.SetConfigName(".devtools")
err = viper.ReadInConfig()
if err != nil {
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
fmt.Println("Config file not found, creating default config file")
// Create default config file if it doesn't exist
home, _ := homedir.Dir()
defaultConfigFile := home + "/.devtools.yaml"
err = viper.SafeWriteConfigAs(defaultConfigFile)
if err != nil {
fmt.Printf("Error creating default config file: %s\n", err)
}
} else {
fmt.Printf("error reading config file: %s\n", err)
}
}
}
================================================
FILE: apps/cli/cmd/version.go
================================================
package cmd
import (
"fmt"
"github.com/spf13/cobra"
)
func init() {
rootCmd.AddCommand(versionCmd)
}
const version = "v0.1.0"
var versionCmd = &cobra.Command{
Use: "version",
Short: "Print the version number of DevToolsCLI",
Long: `All software has versions. This is DevToolsCLI's`,
Run: func(cmd *cobra.Command, args []string) {
fmt.Printf("DevToolsCLI %s\n", version)
},
}
================================================
FILE: apps/cli/embedded/embeddedJS/embededJS.go
================================================
package embeddedJS
import _ "embed"
//go:embed worker.cjs.embed
var WorkerJS string
================================================
FILE: apps/cli/go.mod
================================================
module github.com/the-dev-tools/dev-tools/apps/cli
go 1.25
require (
connectrpc.com/connect v1.19.1
github.com/mitchellh/go-homedir v1.1.0
github.com/spf13/cobra v1.10.2
github.com/spf13/viper v1.21.0
github.com/the-dev-tools/dev-tools/packages/db v0.0.0
github.com/the-dev-tools/dev-tools/packages/server v0.0.0
github.com/the-dev-tools/dev-tools/packages/spec v0.0.0
gopkg.in/yaml.v3 v3.0.1
)
require (
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20251209175733-2a1774d88802.1 // indirect
cloud.google.com/go v0.121.2 // indirect
cloud.google.com/go/ai v0.12.1 // indirect
cloud.google.com/go/aiplatform v1.89.0 // indirect
cloud.google.com/go/auth v0.16.3 // indirect
cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect
cloud.google.com/go/compute/metadata v0.7.0 // indirect
cloud.google.com/go/iam v1.5.2 // indirect
cloud.google.com/go/longrunning v0.6.7 // indirect
cloud.google.com/go/vertexai v0.12.0 // indirect
github.com/andybalholm/brotli v1.2.0 // indirect
github.com/dlclark/regexp2 v1.11.5 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/expr-lang/expr v1.17.7 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.9.0 // indirect
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
github.com/golang-jwt/jwt/v5 v5.3.0 // indirect
github.com/google/generative-ai-go v0.20.1 // indirect
github.com/google/s2a-go v0.1.9 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect
github.com/googleapis/gax-go/v2 v2.15.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/klauspost/compress v1.18.2 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/ncruces/go-strftime v1.0.0 // indirect
github.com/oklog/ulid/v2 v2.1.1 // indirect
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
github.com/pkoukk/tiktoken-go v0.1.6 // indirect
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
github.com/sagikazarmark/locafero v0.12.0 // indirect
github.com/spf13/afero v1.15.0 // indirect
github.com/spf13/cast v1.10.0 // indirect
github.com/spf13/pflag v1.0.10 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
github.com/tmc/langchaingo v0.1.14 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect
go.opentelemetry.io/otel v1.37.0 // indirect
go.opentelemetry.io/otel/metric v1.37.0 // indirect
go.opentelemetry.io/otel/trace v1.37.0 // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect
golang.org/x/crypto v0.46.0 // indirect
golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93 // indirect
golang.org/x/net v0.48.0 // indirect
golang.org/x/oauth2 v0.30.0 // indirect
golang.org/x/sync v0.19.0 // indirect
golang.org/x/sys v0.40.0 // indirect
golang.org/x/text v0.32.0 // indirect
golang.org/x/time v0.12.0 // indirect
google.golang.org/api v0.246.0 // indirect
google.golang.org/genproto v0.0.0-20250603155806-513f23925822 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20251124214823-79d6a2a48846 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20251124214823-79d6a2a48846 // indirect
google.golang.org/grpc v1.75.1 // indirect
google.golang.org/protobuf v1.36.11 // indirect
modernc.org/libc v1.67.4 // indirect
modernc.org/mathutil v1.7.1 // indirect
modernc.org/memory v1.11.0 // indirect
modernc.org/sqlite v1.43.0 // indirect
)
replace (
github.com/the-dev-tools/dev-tools/packages/db => ../../packages/db
github.com/the-dev-tools/dev-tools/packages/server => ../../packages/server
github.com/the-dev-tools/dev-tools/packages/spec => ../../packages/spec
)
================================================
FILE: apps/cli/go.sum
================================================
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20251209175733-2a1774d88802.1 h1:j9yeqTWEFrtimt8Nng2MIeRrpoCvQzM9/g25XTvqUGg=
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20251209175733-2a1774d88802.1/go.mod h1:tvtbpgaVXZX4g6Pn+AnzFycuRK3MOz5HJfEGeEllXYM=
cloud.google.com/go v0.121.2 h1:v2qQpN6Dx9x2NmwrqlesOt3Ys4ol5/lFZ6Mg1B7OJCg=
cloud.google.com/go v0.121.2/go.mod h1:nRFlrHq39MNVWu+zESP2PosMWA0ryJw8KUBZ2iZpxbw=
cloud.google.com/go/ai v0.12.1 h1:m1n/VjUuHS+pEO/2R4/VbuuEIkgk0w67fDQvFaMngM0=
cloud.google.com/go/ai v0.12.1/go.mod h1:5vIPNe1ZQsVZqCliXIPL4QnhObQQY4d9hAGHdVc4iw4=
cloud.google.com/go/aiplatform v1.89.0 h1:niSJYc6ldWWVM9faXPo1Et1MVSQoLvVGriD7fwbJdtE=
cloud.google.com/go/aiplatform v1.89.0/go.mod h1:TzZtegPkinfXTtXVvZZpxx7noINFMVDrLkE7cEWhYEk=
cloud.google.com/go/auth v0.16.3 h1:kabzoQ9/bobUmnseYnBO6qQG7q4a/CffFRlJSxv2wCc=
cloud.google.com/go/auth v0.16.3/go.mod h1:NucRGjaXfzP1ltpcQ7On/VTZ0H4kWB5Jy+Y9Dnm76fA=
cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc=
cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c=
cloud.google.com/go/compute/metadata v0.7.0 h1:PBWF+iiAerVNe8UCHxdOt6eHLVc3ydFeOCw78U8ytSU=
cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo=
cloud.google.com/go/iam v1.5.2 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8=
cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE=
cloud.google.com/go/longrunning v0.6.7 h1:IGtfDWHhQCgCjwQjV9iiLnUta9LBCo8R9QmAFsS/PrE=
cloud.google.com/go/longrunning v0.6.7/go.mod h1:EAFV3IZAKmM56TyiE6VAP3VoTzhZzySwI/YI1s/nRsY=
cloud.google.com/go/vertexai v0.12.0 h1:zTadEo/CtsoyRXNx3uGCncoWAP1H2HakGqwznt+iMo8=
cloud.google.com/go/vertexai v0.12.0/go.mod h1:8u+d0TsvBfAAd2x5R6GMgbYhsLgo3J7lmP4bR8g2ig8=
connectrpc.com/connect v1.19.1 h1:R5M57z05+90EfEvCY1b7hBxDVOUl45PrtXtAV2fOC14=
connectrpc.com/connect v1.19.1/go.mod h1:tN20fjdGlewnSFeZxLKb0xwIZ6ozc3OQs2hTXy4du9w=
github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwToPjQ=
github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY=
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ=
github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/expr-lang/expr v1.17.7 h1:Q0xY/e/2aCIp8g9s/LGvMDCC5PxYlvHgDZRQ4y16JX8=
github.com/expr-lang/expr v1.17.7/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs=
github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo=
github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/google/generative-ai-go v0.20.1 h1:6dEIujpgN2V0PgLhr6c/M1ynRdc7ARtiIDPFzj45uNQ=
github.com/google/generative-ai-go v0.20.1/go.mod h1:TjOnZJmZKzarWbjUJgy+r3Ee7HGBRVLhOIgupnwR4Bg=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a h1://KbezygeMJZCSHH+HgUZiTeSoiuFspbMg1ge+eFj18=
github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a/go.mod h1:5hDyRhoBCxViHszMt12TnOpEI4VVi+U8Gm9iphldiMA=
github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU9uHLo7OnF5tL52HFAgMmyrf4=
github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA=
github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo=
github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc=
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/klauspost/compress v1.18.2 h1:iiPHWW0YrcFgpBYhsA6D1+fqHssJscY/Tm/y2Uqnapk=
github.com/klauspost/compress v1.18.2/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w=
github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
github.com/oklog/ulid/v2 v2.1.1 h1:suPZ4ARWLOJLegGFiZZ1dFAkqzhMjL3J1TzI+5wHz8s=
github.com/oklog/ulid/v2 v2.1.1/go.mod h1:rcEKHmBBKfef9DhnvX7y1HZBYxjXb0cP5ExxNsTT1QQ=
github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o=
github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
github.com/pkoukk/tiktoken-go v0.1.6 h1:JF0TlJzhTbrI30wCvFuiw6FzP2+/bR+FIxUdgEAcUsw=
github.com/pkoukk/tiktoken-go v0.1.6/go.mod h1:9NiV+i9mJKGj1rYOT+njbv+ZwA/zJxYdewGl6qVatpg=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sagikazarmark/locafero v0.12.0 h1:/NQhBAkUb4+fH1jivKHWusDYFjMOOKU88eegjfxfHb4=
github.com/sagikazarmark/locafero v0.12.0/go.mod h1:sZh36u/YSZ918v0Io+U9ogLYQJ9tLLBmM4eneO6WwsI=
github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I=
github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg=
github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY=
github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo=
github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU=
github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4=
github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU=
github.com/spf13/viper v1.21.0/go.mod h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY=
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/tmc/langchaingo v0.1.14 h1:o1qWBPigAIuFvrG6cjTFo0cZPFEZ47ZqpOYMjM15yZc=
github.com/tmc/langchaingo v0.1.14/go.mod h1:aKKYXYoqhIDEv7WKdpnnCLRaqXic69cX9MnDUk72378=
github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU=
github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E=
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 h1:q4XOmH/0opmeuJtPsbFNivyl7bCt7yRBbeEm2sC/XtQ=
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ=
go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I=
go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE=
go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E=
go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI=
go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg=
go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc=
go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps=
go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4=
go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0=
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU=
golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0=
golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93 h1:fQsdNF2N+/YewlRZiricy4P1iimyPKZ/xwniHj8Q2a0=
golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93/go.mod h1:EPRbTFwzwjXj9NpYyyrvenVh9Y+GFeEvMNh7Xuz7xgU=
golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI=
golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg=
golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU=
golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY=
golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ=
golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU=
golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY=
golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
golang.org/x/tools v0.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA=
golang.org/x/tools v0.40.0/go.mod h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc=
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
google.golang.org/api v0.246.0 h1:H0ODDs5PnMZVZAEtdLMn2Ul2eQi7QNjqM2DIFp8TlTM=
google.golang.org/api v0.246.0/go.mod h1:dMVhVcylamkirHdzEBAIQWUCgqY885ivNeZYd7VAVr8=
google.golang.org/genproto v0.0.0-20250603155806-513f23925822 h1:rHWScKit0gvAPuOnu87KpaYtjK5zBMLcULh7gxkCXu4=
google.golang.org/genproto v0.0.0-20250603155806-513f23925822/go.mod h1:HubltRL7rMh0LfnQPkMH4NPDFEWp0jw3vixw7jEM53s=
google.golang.org/genproto/googleapis/api v0.0.0-20251124214823-79d6a2a48846 h1:ZdyUkS9po3H7G0tuh955QVyyotWvOD4W0aEapeGeUYk=
google.golang.org/genproto/googleapis/api v0.0.0-20251124214823-79d6a2a48846/go.mod h1:Fk4kyraUvqD7i5H6S43sj2W98fbZa75lpZz/eUyhfO0=
google.golang.org/genproto/googleapis/rpc v0.0.0-20251124214823-79d6a2a48846 h1:Wgl1rcDNThT+Zn47YyCXOXyX/COgMTIdhJ717F0l4xk=
google.golang.org/genproto/googleapis/rpc v0.0.0-20251124214823-79d6a2a48846/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI=
google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
modernc.org/cc/v4 v4.27.1 h1:9W30zRlYrefrDV2JE2O8VDtJ1yPGownxciz5rrbQZis=
modernc.org/cc/v4 v4.27.1/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0=
modernc.org/ccgo/v4 v4.30.1 h1:4r4U1J6Fhj98NKfSjnPUN7Ze2c6MnAdL0hWw6+LrJpc=
modernc.org/ccgo/v4 v4.30.1/go.mod h1:bIOeI1JL54Utlxn+LwrFyjCx2n2RDiYEaJVSrgdrRfM=
modernc.org/fileutil v1.3.40 h1:ZGMswMNc9JOCrcrakF1HrvmergNLAmxOPjizirpfqBA=
modernc.org/fileutil v1.3.40/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc=
modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI=
modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito=
modernc.org/gc/v3 v3.1.1 h1:k8T3gkXWY9sEiytKhcgyiZ2L0DTyCQ/nvX+LoCljoRE=
modernc.org/gc/v3 v3.1.1/go.mod h1:HFK/6AGESC7Ex+EZJhJ2Gni6cTaYpSMmU/cT9RmlfYY=
modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks=
modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI=
modernc.org/libc v1.67.4 h1:zZGmCMUVPORtKv95c2ReQN5VDjvkoRm9GWPTEPuvlWg=
modernc.org/libc v1.67.4/go.mod h1:QvvnnJ5P7aitu0ReNpVIEyesuhmDLQ8kaEoyMjIFZJA=
modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU=
modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg=
modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI=
modernc.org/memory v1.11.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw=
modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8=
modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns=
modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w=
modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE=
modernc.org/sqlite v1.43.0 h1:8YqiFx3G1VhHTXO2Q00bl1Wz9KhS9Q5okwfp9Y97VnA=
modernc.org/sqlite v1.43.0/go.mod h1:+VkC6v3pLOAE0A0uVucQEcbVW0I5nHCeDaBf+DpsQT8=
modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0=
modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A=
modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
================================================
FILE: apps/cli/install.sh
================================================
#!/bin/bash
set -e
# DevTools CLI Installer Script
# This script downloads and installs the DevTools CLI from GitHub releases
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Configuration
REPO_OWNER="the-dev-tools"
REPO_NAME="dev-tools"
BINARY_NAME="devtools"
INSTALL_DIR="${INSTALL_DIR:-/usr/local/bin}"
# Functions
print_error() {
echo -e "${RED}Error: $1${NC}" >&2
}
print_success() {
echo -e "${GREEN}$1${NC}" >&2
}
print_info() {
echo -e "${YELLOW}$1${NC}" >&2
}
detect_platform() {
local os=$(uname -s | tr '[:upper:]' '[:lower:]')
local arch=$(uname -m)
case "$os" in
linux)
os="linux"
;;
darwin)
os="darwin"
;;
msys*|mingw*|cygwin*)
os="windows"
;;
*)
print_error "Unsupported operating system: $os"
exit 1
;;
esac
case "$arch" in
x86_64|amd64)
arch="x64"
;;
aarch64|arm64)
arch="arm64"
;;
i386|i686)
if [ "$os" = "windows" ]; then
arch="ia32"
else
print_error "32-bit architecture not supported on $os"
exit 1
fi
;;
*)
print_error "Unsupported architecture: $arch"
exit 1
;;
esac
echo "${os}-${arch}"
}
get_version() {
local requested_version=$1
if [ -n "$requested_version" ]; then
# Verify the requested version exists
local release_url="https://api.github.com/repos/${REPO_OWNER}/${REPO_NAME}/releases/tags/cli@${requested_version}"
local release_check=$(curl -s -o /dev/null -w "%{http_code}" "$release_url")
if [ "$release_check" != "200" ]; then
print_error "Release cli@${requested_version} not found."
exit 1
fi
echo "$requested_version"
else
# Fetch the package.json from main branch to get the latest version
local package_url="https://raw.githubusercontent.com/${REPO_OWNER}/${REPO_NAME}/refs/heads/main/apps/cli/package.json"
local version=$(curl -s "$package_url" | grep '"version"' | head -1 | sed -E 's/.*"version": "([^"]+)".*/\1/')
if [ -z "$version" ]; then
print_error "Failed to fetch latest version from package.json"
exit 1
fi
# Verify the release exists
local release_url="https://api.github.com/repos/${REPO_OWNER}/${REPO_NAME}/releases/tags/cli@${version}"
local release_check=$(curl -s -o /dev/null -w "%{http_code}" "$release_url")
if [ "$release_check" != "200" ]; then
print_error "Release cli@${version} not found. It may not be published yet."
exit 1
fi
echo "$version"
fi
}
download_binary() {
local version=$1
local platform=$2
local binary_suffix=""
if [[ "$platform" == "windows"* ]]; then
binary_suffix=".exe"
fi
local binary_name="devtools-cli-${version}-${platform}${binary_suffix}"
local download_url="https://github.com/${REPO_OWNER}/${REPO_NAME}/releases/download/cli@${version}/${binary_name}"
local temp_file="/tmp/${binary_name}"
print_info "Downloading DevTools CLI ${version} for ${platform}..."
if command -v curl &> /dev/null; then
curl -fsSL -o "$temp_file" "$download_url" || {
print_error "Failed to download binary"
exit 1
}
elif command -v wget &> /dev/null; then
wget -O "$temp_file" "$download_url" || {
print_error "Failed to download binary"
exit 1
}
else
print_error "Neither curl nor wget found. Please install one of them."
exit 1
fi
echo "$temp_file"
}
verify_checksum() {
local binary_file=$1
local version=$2
local platform=$3
local checksum_url="https://github.com/${REPO_OWNER}/${REPO_NAME}/releases/download/cli@${version}/checksums.txt"
local temp_checksum="/tmp/devtools-checksums.txt"
print_info "Verifying checksum..."
if command -v curl &> /dev/null; then
curl -sL -o "$temp_checksum" "$checksum_url" 2>/dev/null || return 0
elif command -v wget &> /dev/null; then
wget -q -O "$temp_checksum" "$checksum_url" 2>/dev/null || return 0
fi
if [ -f "$temp_checksum" ] && command -v sha256sum &> /dev/null; then
local expected_checksum=$(grep "$(basename "$binary_file")" "$temp_checksum" | awk '{print $1}')
if [ -n "$expected_checksum" ]; then
local actual_checksum=$(sha256sum "$binary_file" | awk '{print $1}')
if [ "$expected_checksum" != "$actual_checksum" ]; then
print_error "Checksum verification failed"
rm -f "$temp_checksum"
exit 1
fi
print_success "Checksum verified"
fi
rm -f "$temp_checksum"
fi
}
install_binary() {
local binary_file=$1
local install_path="${INSTALL_DIR}/${BINARY_NAME}"
# Check if we need sudo
local sudo_cmd=""
if [ ! -w "$INSTALL_DIR" ]; then
if command -v sudo &> /dev/null; then
sudo_cmd="sudo"
print_info "Administrator privileges required to install to $INSTALL_DIR"
else
print_error "Cannot write to $INSTALL_DIR and sudo is not available"
exit 1
fi
fi
# Create install directory if it doesn't exist
if [ ! -d "$INSTALL_DIR" ]; then
$sudo_cmd mkdir -p "$INSTALL_DIR" || {
print_error "Failed to create installation directory"
exit 1
}
fi
# Install the binary
$sudo_cmd mv "$binary_file" "$install_path" || {
print_error "Failed to install binary"
exit 1
}
# Make it executable
$sudo_cmd chmod +x "$install_path" || {
print_error "Failed to make binary executable"
exit 1
}
print_success "DevTools CLI installed successfully to $install_path"
}
check_prerequisites() {
# Check for curl or wget
if ! command -v curl &> /dev/null && ! command -v wget &> /dev/null; then
print_error "Neither curl nor wget found. Please install one of them."
exit 1
fi
}
print_usage() {
echo "Usage: $0 [OPTIONS]"
echo "Options:"
echo " -v, --version VERSION Install a specific version (e.g., 1.2.3)"
echo " -h, --help Show this help message"
echo ""
echo "Environment variables:"
echo " INSTALL_DIR Installation directory (default: /usr/local/bin)"
echo ""
echo "Examples:"
echo " $0 # Install latest version"
echo " $0 -v 1.2.3 # Install version 1.2.3"
echo " INSTALL_DIR=~/.local/bin $0 # Install to custom directory"
}
main() {
local requested_version=""
# Parse command line arguments
while [[ $# -gt 0 ]]; do
case $1 in
-v|--version)
requested_version="$2"
if [ -z "$requested_version" ]; then
print_error "Version not specified"
print_usage
exit 1
fi
shift 2
;;
-h|--help)
print_usage
exit 0
;;
*)
print_error "Unknown option: $1"
print_usage
exit 1
;;
esac
done
print_info "DevTools CLI Installer"
check_prerequisites
# Detect platform
local platform=$(detect_platform)
print_info "Detected platform: $platform"
# Get version (latest or specified)
local version=$(get_version "$requested_version")
if [ -n "$requested_version" ]; then
print_info "Installing version: $version"
else
print_info "Latest version: $version"
fi
# Download binary
local binary_file=$(download_binary "$version" "$platform")
# Verify checksum if possible
verify_checksum "$binary_file" "$version" "$platform"
# Install binary
install_binary "$binary_file"
# Verify installation
if command -v "$BINARY_NAME" &> /dev/null; then
print_success "Installation complete! Run '${BINARY_NAME} version' to verify."
else
print_info "Installation complete! You may need to add ${INSTALL_DIR} to your PATH."
print_info "Run 'export PATH=\$PATH:${INSTALL_DIR}' to add it to your current session."
fi
}
# Run main function
main "$@"
================================================
FILE: apps/cli/internal/common/services.go
================================================
package common
import (
"context"
"database/sql"
"fmt"
"log/slog"
"github.com/the-dev-tools/dev-tools/packages/db/pkg/sqlc/gen"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/service/scredential"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/service/senv"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/service/sflow"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/service/sgraphql"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/service/shttp"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/service/swebsocket"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/service/sworkspace"
)
// Services holds all initialized services for CLI operations
type Services struct {
// Core
DB *sql.DB
Queries *gen.Queries
// Workspace
Workspace sworkspace.WorkspaceService
Environment senv.EnvironmentService
Variable senv.VariableService
// Flow
Flow sflow.FlowService
FlowEdge sflow.EdgeService
FlowVariable sflow.FlowVariableService
// Flow Nodes
Node sflow.NodeService
NodeRequest sflow.NodeRequestService
NodeFor sflow.NodeForService
NodeForEach sflow.NodeForEachService
NodeIf sflow.NodeIfService
NodeJS sflow.NodeJsService
NodeAI sflow.NodeAIService
NodeAiProvider sflow.NodeAiProviderService
NodeMemory sflow.NodeMemoryService
NodeGraphQL sflow.NodeGraphQLService
NodeWsConnection sflow.NodeWsConnectionService
NodeWsSend sflow.NodeWsSendService
NodeWait sflow.NodeWaitService
NodeSubFlowTrigger sflow.NodeSubFlowTriggerService
NodeSubFlowReturn sflow.NodeSubFlowReturnService
NodeRunSubFlow sflow.NodeRunSubFlowService
// WebSocket
WebSocket swebsocket.WebSocketService
WebSocketHeader swebsocket.WebSocketHeaderService
// GraphQL
GraphQL sgraphql.GraphQLService
GraphQLHeader sgraphql.GraphQLHeaderService
GraphQLAssert sgraphql.GraphQLAssertService
// Credentials
Credential scredential.CredentialService
// HTTP (V2)
HTTP shttp.HTTPService
HTTPHeader shttp.HttpHeaderService
HTTPSearchParam *shttp.HttpSearchParamService
HTTPBodyForm *shttp.HttpBodyFormService
HTTPBodyUrlEncoded *shttp.HttpBodyUrlEncodedService
HTTPBodyRaw *shttp.HttpBodyRawService
HTTPAssert *shttp.HttpAssertService
Logger *slog.Logger
}
// CreateServices initializes all services with the given database connection
func CreateServices(ctx context.Context, db *sql.DB, logger *slog.Logger) (*Services, error) {
queries, err := gen.Prepare(ctx, db)
if err != nil {
return nil, fmt.Errorf("failed to prepare queries: %w", err)
}
return &Services{
DB: db,
Queries: queries,
// Workspace
Workspace: sworkspace.NewWorkspaceService(queries),
Environment: senv.NewEnvironmentService(queries, logger),
Variable: senv.NewVariableService(queries, logger),
// Flow
Flow: sflow.NewFlowService(queries),
FlowEdge: sflow.NewEdgeService(queries),
FlowVariable: sflow.NewFlowVariableService(queries),
// Flow Nodes
Node: sflow.NewNodeService(queries),
NodeRequest: sflow.NewNodeRequestService(queries),
NodeFor: sflow.NewNodeForService(queries),
NodeForEach: sflow.NewNodeForEachService(queries),
NodeIf: *sflow.NewNodeIfService(queries),
NodeJS: sflow.NewNodeJsService(queries),
NodeAI: sflow.NewNodeAIService(queries),
NodeAiProvider: sflow.NewNodeAiProviderService(queries),
NodeMemory: sflow.NewNodeMemoryService(queries),
NodeGraphQL: sflow.NewNodeGraphQLService(queries),
NodeWsConnection: sflow.NewNodeWsConnectionService(queries),
NodeWsSend: sflow.NewNodeWsSendService(queries),
NodeWait: sflow.NewNodeWaitService(queries),
NodeSubFlowTrigger: sflow.NewNodeSubFlowTriggerService(queries),
NodeSubFlowReturn: sflow.NewNodeSubFlowReturnService(queries),
NodeRunSubFlow: sflow.NewNodeRunSubFlowService(queries),
// WebSocket
WebSocket: swebsocket.New(queries, logger),
WebSocketHeader: swebsocket.NewWebSocketHeaderService(queries),
// GraphQL
GraphQL: sgraphql.New(queries, logger),
GraphQLHeader: sgraphql.NewGraphQLHeaderService(queries),
GraphQLAssert: sgraphql.NewGraphQLAssertService(queries),
// Credentials
Credential: scredential.NewCredentialService(queries),
// HTTP (V2)
HTTP: shttp.New(queries, logger),
HTTPHeader: shttp.NewHttpHeaderService(queries),
HTTPSearchParam: shttp.NewHttpSearchParamService(queries),
HTTPBodyForm: shttp.NewHttpBodyFormService(queries),
HTTPBodyUrlEncoded: shttp.NewHttpBodyUrlEncodedService(queries),
HTTPBodyRaw: shttp.NewHttpBodyRawService(queries),
HTTPAssert: shttp.NewHttpAssertService(queries),
Logger: logger,
}, nil
}
================================================
FILE: apps/cli/internal/importer/importer.go
================================================
package importer
import (
"context"
"fmt"
"log/slog"
"github.com/the-dev-tools/dev-tools/apps/cli/internal/common"
"github.com/the-dev-tools/dev-tools/packages/db/pkg/sqlitemem"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/idwrap"
)
// ImportCallback is the function signature for the actual import logic
type ImportCallback func(ctx context.Context, services *common.Services, wsID idwrap.IDWrap, folderIDPtr *idwrap.IDWrap) error
// RunImport performs the common setup for import operations
func RunImport(ctx context.Context, logger *slog.Logger, workspaceID, folderID string, fn ImportCallback) error {
// Parse workspace and folder IDs
wsID, err := idwrap.NewText(workspaceID)
if err != nil {
return fmt.Errorf("invalid workspace ID: %w", err)
}
var folderIDPtr *idwrap.IDWrap
if folderID != "" {
fid, err := idwrap.NewText(folderID)
if err != nil {
return fmt.Errorf("invalid folder ID: %w", err)
}
folderIDPtr = &fid
}
// Create in-memory database and services
db, _, err := sqlitemem.NewSQLiteMem(ctx)
if err != nil {
return fmt.Errorf("failed to create database: %w", err)
}
defer func() { _ = db.Close() }()
services, err := common.CreateServices(ctx, db, logger)
if err != nil {
return err
}
// Verify workspace exists
_, err = services.Workspace.Get(ctx, wsID)
if err != nil {
return fmt.Errorf("workspace not found: %w", err)
}
// Run specific import logic
return fn(ctx, services, wsID, folderIDPtr)
}
================================================
FILE: apps/cli/internal/importer/importer_test.go
================================================
package importer_test
import (
"context"
"log/slog"
"testing"
"github.com/the-dev-tools/dev-tools/apps/cli/internal/common"
"github.com/the-dev-tools/dev-tools/apps/cli/internal/importer"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/idwrap"
)
func TestRunImport_FailsOnMissingWorkspace(t *testing.T) {
// Since RunImport creates a fresh in-memory DB and checks for workspace *before* callback,
// it is guaranteed to fail with "workspace not found" (or "sql: no rows").
// This test confirms that behavior, which matches the code structure.
err := importer.RunImport(context.Background(), slog.Default(), idwrap.NewNow().String(), "", func(ctx context.Context, s *common.Services, w idwrap.IDWrap, f *idwrap.IDWrap) error {
return nil
})
if err == nil {
t.Fatal("expected error due to missing workspace in empty DB, got nil")
}
// We expect "workspace not found" or "no rows"
// Check error string content
if err.Error() == "" {
t.Fatal("got empty error")
}
}
// Ensure the code compiles.
================================================
FILE: apps/cli/internal/model/result.go
================================================
package model
import (
"time"
)
type IterationContextResult struct {
IterationPath []int `json:"iteration_path,omitempty"`
ExecutionIndex int `json:"execution_index,omitempty"`
ParentNodes []string `json:"parent_nodes,omitempty"`
}
type NodeRunResult struct {
NodeID string `json:"node_id"`
ExecutionID string `json:"execution_id"`
Name string `json:"name"`
State string `json:"state"`
Duration time.Duration `json:"duration"`
Error string `json:"error,omitempty"`
IterationContext *IterationContextResult `json:"iteration_context,omitempty"`
OutputData any `json:"output_data,omitempty"`
}
type FlowRunResult struct {
FlowID string `json:"flow_id"`
FlowName string `json:"flow_name"`
Started time.Time `json:"started_at"`
Duration time.Duration `json:"duration"`
Status string `json:"status"`
Error string `json:"error,omitempty"`
Nodes []NodeRunResult `json:"nodes"`
}
================================================
FILE: apps/cli/internal/reporter/reporter.go
================================================
package reporter
import (
"encoding/json"
"encoding/xml"
"fmt"
"os"
"path/filepath"
"strings"
"sync"
"time"
"github.com/the-dev-tools/dev-tools/apps/cli/internal/model"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/flow/runner"
"github.com/the-dev-tools/dev-tools/packages/server/pkg/model/mflow"
)
type FlowStartInfo struct {
FlowID string
FlowName string
TotalNodes int
NodeNames []string
}
type NodeStatusEvent struct {
FlowID string
FlowName string
Status runner.FlowNodeStatus
}
type Reporter interface {
HandleFlowStart(info FlowStartInfo)
HandleNodeStatus(event NodeStatusEvent)
HandleFlowResult(result model.FlowRunResult)
Flush() error
}
type ReporterGroup struct {
reporters []Reporter
consoleEnabled bool
}
func (g *ReporterGroup) HandleFlowStart(info FlowStartInfo) {
for _, reporter := range g.reporters {
reporter.HandleFlowStart(info)
}
}
func (g *ReporterGroup) HandleNodeStatus(event NodeStatusEvent) {
for _, reporter := range g.reporters {
reporter.HandleNodeStatus(event)
}
}
func (g *ReporterGroup) HandleFlowResult(result model.FlowRunResult) {
for _, reporter := range g.reporters {
reporter.HandleFlowResult(result)
}
}
func (g *ReporterGroup) Flush() error {
var firstErr error
for _, reporter := range g.reporters {
if err := reporter.Flush(); err != nil && firstErr == nil {
firstErr = err
}
}
return firstErr
}
func (g *ReporterGroup) HasConsole() bool {
return g.consoleEnabled
}
type ReportSpec struct {
Format string
Path string
}
const (
ReportFormatConsole = "console"
ReportFormatJSON = "json"
ReportFormatJUnit = "junit"
)
func ParseReportSpecs(values []string) ([]ReportSpec, error) {
if len(values) == 0 {
return []ReportSpec{{Format: ReportFormatConsole}}, nil
}
specs := make([]ReportSpec, 0, len(values))
for _, raw := range values {
trimmed := strings.TrimSpace(raw)
if trimmed == "" {
continue
}
format := trimmed
var path string
if idx := strings.Index(trimmed, ":"); idx >= 0 {
format = strings.TrimSpace(trimmed[:idx])
path = strings.TrimSpace(trimmed[idx+1:])
}
format = strings.ToLower(format)
switch format {
case ReportFormatConsole:
if path != "" {
return nil, fmt.Errorf("console reporter does not accept a path")
}
case ReportFormatJSON, ReportFormatJUnit:
if path == "" {
return nil, fmt.Errorf("%s reporter requires a file path", format)
}
default:
return nil, fmt.Errorf("unsupported report format %q", format)
}
specs = append(specs, ReportSpec{Format: format, Path: path})
}
if len(specs) == 0 {
specs = append(specs, ReportSpec{Format: ReportFormatConsole})
}
return specs, nil
}
// ReporterOptions contains configuration options for reporters.
type ReporterOptions struct {
ShowOutput bool // Show node output data in console reporter
}
func NewReporterGroup(specs []ReportSpec, opts ReporterOptions) (*ReporterGroup, error) {
reporters := make([]Reporter, 0, len(specs))
hasConsole := false
for _, spec := range specs {
var reporter Reporter
switch spec.Format {
case ReportFormatConsole:
reporter = newConsoleReporter(opts.ShowOutput)
hasConsole = true
case ReportFormatJSON:
reporter = newJSONReporter(spec.Path)
case ReportFormatJUnit:
reporter = newJUnitReporter(spec.Path)
default:
return nil, fmt.Errorf("unsupported reporter format %q", spec.Format)
}
reporters = append(reporters, reporter)
}
return &ReporterGroup{
reporters: reporters,
consoleEnabled: hasConsole,
}, nil
}
// Internal implementations below...
type jsonReporter struct {
path string
mu sync.Mutex
results []model.FlowRunResult
}
func newJSONReporter(path string) Reporter {
return &jsonReporter{path: path, results: make([]model.FlowRunResult, 0)}
}
func (j *jsonReporter) HandleFlowStart(info FlowStartInfo) {}
func (j *jsonReporter) HandleNodeStatus(event NodeStatusEvent) {}
func (j *jsonReporter) HandleFlowResult(result model.FlowRunResult) {
j.mu.Lock()
defer j.mu.Unlock()
j.results = append(j.results, result)
}
func (j *jsonReporter) Flush() error {
j.mu.Lock()
defer j.mu.Unlock()
if j.path == "" {
return fmt.Errorf("json reporter missing output path")
}
if err := os.MkdirAll(filepath.Dir(j.path), 0o755); err != nil {
return fmt.Errorf("creating json report directory: %w", err)
}
data, err := json.MarshalIndent(j.results, "", " ")
if err != nil {
return fmt.Errorf("serializing json report: %w", err)
}
if err := os.WriteFile(j.path, data, 0o644); err != nil {
return fmt.Errorf("writing json report: %w", err)
}
return nil
}
type junitReporter struct {
path string
mu sync.Mutex
results []model.FlowRunResult
}
func newJUnitReporter(path string) Reporter {
return &junitReporter{path: path, results: make([]model.FlowRunResult, 0)}
}
func (j *junitReporter) HandleFlowStart(info FlowStartInfo) {}
func (j *junitReporter) HandleNodeStatus(event NodeStatusEvent) {}
func (j *junitReporter) HandleFlowResult(result model.FlowRunResult) {
j.mu.Lock()
defer j.mu.Unlock()
j.results = append(j.results, result)
}
type junitTestSuites struct {
XMLName xml.Name `xml:"testsuites"`
Suites []junitTestSuite `xml:"testsuite"`
}
type junitTestSuite struct {
XMLName xml.Name `xml:"testsuite"`
Name string `xml:"name,attr"`
Tests int `xml:"tests,attr"`
Failures int `xml:"failures,attr"`
Time string `xml:"time,attr"`
Cases []junitTestCase `xml:"testcase"`
}
type junitTestCase struct {
XMLName xml.Name `xml:"testcase"`
Name string `xml:"name,attr"`
Time string `xml:"time,attr"`
Failure *junitFailure `xml:"failure,omitempty"`
}
type junitFailure struct {
Message string `xml:"message,attr"`
Type string `xml:"type,attr,omitempty"`
Data string `xml:",chardata"`
}
func (j *junitReporter) Flush() error {
j.mu.Lock()
defer j.mu.Unlock()
if j.path == "" {
return fmt.Errorf("junit reporter missing output path")
}
suites := make([]junitTestSuite, 0, len(j.results))
for _, result := range j.results {
suite := junitTestSuite{
Name: result.FlowName,
Tests: len(result.Nodes),
Failures: 0,
Time: fmt.Sprintf("%.6f", result.Duration.Seconds()),
Cases: make([]junitTestCase, 0, len(result.Nodes)),
}
for _, node := range result.Nodes {
testCase := junitTestCase{
Name: node.Name,
Time: fmt.Sprintf("%.6f", node.Duration.Seconds()),
}
if strings.EqualFold(
gitextract_0r326h2t/ ├── .editorconfig ├── .envrc ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report.yaml │ │ ├── config.yml │ │ └── feature-request.yaml │ ├── actions/ │ │ ├── dependencies-unix/ │ │ │ └── action.yaml │ │ ├── dependencies-windows/ │ │ │ └── action.yaml │ │ └── setup/ │ │ └── action.yaml │ └── workflows/ │ ├── benchmark-generic.yml │ ├── check.yaml │ ├── goci.yml │ ├── release-chrome-extension.yaml │ ├── release-cloudflare-pages.yaml │ ├── release-electron-builder.yaml │ ├── release-go.yaml │ ├── release.yaml │ ├── sql.yml │ └── update-scoop.yaml ├── .gitignore ├── .golangci.yml ├── .prettierignore ├── .sqlfluff ├── .vscode/ │ ├── extensions.json │ └── settings.json ├── AGENTS.md ├── LICENSE ├── README.md ├── apps/ │ ├── api-recorder-extension/ │ │ ├── eslint.config.ts │ │ ├── package.disabled.json │ │ ├── postcss.config.js │ │ ├── project.disabled.json │ │ ├── src/ │ │ │ ├── auth.ts │ │ │ ├── background.ts │ │ │ ├── layout.tsx │ │ │ ├── popup.tsx │ │ │ ├── postman.ts │ │ │ ├── recorder.ts │ │ │ ├── runtime.ts │ │ │ ├── storage.ts │ │ │ ├── styles.css │ │ │ ├── tabs/ │ │ │ │ └── auth-callback.tsx │ │ │ ├── types.d.ts │ │ │ ├── ui/ │ │ │ │ └── button.tsx │ │ │ └── utils.ts │ │ ├── tsconfig.json │ │ └── tsconfig.lib.json │ ├── cli/ │ │ ├── .devtools.yaml │ │ ├── CHANGELOG.md │ │ ├── cmd/ │ │ │ ├── config.go │ │ │ ├── flow.go │ │ │ ├── import.go │ │ │ ├── root.go │ │ │ └── version.go │ │ ├── embedded/ │ │ │ └── embeddedJS/ │ │ │ └── embededJS.go │ │ ├── go.mod │ │ ├── go.sum │ │ ├── install.sh │ │ ├── internal/ │ │ │ ├── common/ │ │ │ │ └── services.go │ │ │ ├── importer/ │ │ │ │ ├── importer.go │ │ │ │ └── importer_test.go │ │ │ ├── model/ │ │ │ │ └── result.go │ │ │ ├── reporter/ │ │ │ │ ├── reporter.go │ │ │ │ └── reporter_test.go │ │ │ └── runner/ │ │ │ ├── jsrunner.go │ │ │ ├── runner.go │ │ │ └── runner_test.go │ │ ├── main.go │ │ ├── mode_cli.go │ │ ├── package.json │ │ ├── project.json │ │ ├── taskfile.yaml │ │ └── test/ │ │ └── yamlflow/ │ │ ├── ai_node_example.yaml │ │ ├── example_run_yamlflow.yaml │ │ ├── file_upload_example.yaml │ │ ├── graphql_run_example.yaml │ │ ├── integration_yamlflow_test.go │ │ ├── loop_break_example.yaml │ │ ├── multi_flow_run_example.yaml │ │ ├── simple_run_example.yaml │ │ ├── test_run_field.yaml │ │ ├── testdata/ │ │ │ └── sample.txt │ │ └── ws_run_example.yaml │ └── desktop/ │ ├── CHANGELOG.md │ ├── build/ │ │ ├── electron-publisher-custom.js │ │ ├── entitlements.mac.plist │ │ └── icon.icns │ ├── build.ts │ ├── electron.vite.config.ts │ ├── eslint.config.ts │ ├── package.json │ ├── project.json │ ├── src/ │ │ ├── main/ │ │ │ ├── env.d.ts │ │ │ ├── index.ts │ │ │ └── update.ts │ │ ├── preload/ │ │ │ └── index.ts │ │ └── renderer/ │ │ ├── env.d.ts │ │ ├── index.html │ │ ├── main.tsx │ │ └── styles.css │ ├── tsconfig.json │ └── tsconfig.lib.json ├── docs/ │ ├── CODE-OF-CONDUCT.md │ ├── CONTRIBUTING.md │ ├── PULL_REQUEST_TEMPLATE.md │ └── cli.md ├── eslint.config.ts ├── flake.nix ├── go.work ├── go.work.sum ├── install.ps1 ├── nx.json ├── package.json ├── packages/ │ ├── auth/ │ │ ├── eslint.config.ts │ │ ├── package.json │ │ ├── project.json │ │ ├── src/ │ │ │ ├── adapter.test.ts │ │ │ ├── adapter.ts │ │ │ ├── auth-effect.ts │ │ │ ├── auth.ts │ │ │ ├── client.ts │ │ │ ├── config.ts │ │ │ └── index.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.lib.json │ │ └── vitest.config.ts │ ├── auth-lib/ │ │ ├── go.mod │ │ ├── go.sum │ │ ├── jwks/ │ │ │ ├── jwks.go │ │ │ └── jwks_test.go │ │ └── project.json │ ├── client/ │ │ ├── .storybook/ │ │ │ ├── main.ts │ │ │ ├── manager.ts │ │ │ └── preview.tsx │ │ ├── eslint.config.ts │ │ ├── index.html │ │ ├── package.json │ │ ├── project.json │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── context.tsx │ │ │ │ ├── dev-tools.tsx │ │ │ │ ├── entrypoint.tsx │ │ │ │ ├── env.d.ts │ │ │ │ ├── error.tsx │ │ │ │ ├── import-meta.d.ts │ │ │ │ ├── index.tsx │ │ │ │ ├── router/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── route-tree.gen.ts │ │ │ │ │ ├── routes/ │ │ │ │ │ │ ├── (dashboard)/ │ │ │ │ │ │ │ └── __virtual.ts │ │ │ │ │ │ └── __root.tsx │ │ │ │ │ └── vite.tsx │ │ │ │ ├── styles.css │ │ │ │ └── umami.tsx │ │ │ ├── features/ │ │ │ │ ├── agent/ │ │ │ │ │ ├── agent-logger.ts │ │ │ │ │ ├── context-builder.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── layout.ts │ │ │ │ │ ├── tool-executor.ts │ │ │ │ │ ├── tool-schemas.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── use-agent-chat.ts │ │ │ │ │ └── use-agent-provider-key.ts │ │ │ │ ├── delta/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── expression/ │ │ │ │ │ ├── code-mirror/ │ │ │ │ │ │ ├── drop-extension.ts │ │ │ │ │ │ ├── extensions.tsx │ │ │ │ │ │ ├── syntax.grammar │ │ │ │ │ │ └── syntax.grammar.d.ts │ │ │ │ │ ├── guess-language.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── prettier.tsx │ │ │ │ │ ├── reference-path.ts │ │ │ │ │ └── reference.tsx │ │ │ │ ├── file-system/ │ │ │ │ │ └── index.tsx │ │ │ │ └── form-table/ │ │ │ │ └── index.tsx │ │ │ ├── pages/ │ │ │ │ ├── credential/ │ │ │ │ │ ├── @x/ │ │ │ │ │ │ └── workspace.tsx │ │ │ │ │ ├── routes/ │ │ │ │ │ │ └── credential/ │ │ │ │ │ │ └── $credentialIdCan/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── tab.tsx │ │ │ │ ├── dashboard/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── routes/ │ │ │ │ │ ├── (user)/ │ │ │ │ │ │ └── __virtual.ts │ │ │ │ │ ├── (workspace)/ │ │ │ │ │ │ └── __virtual.ts │ │ │ │ │ └── index.tsx │ │ │ │ ├── flow/ │ │ │ │ │ ├── @x/ │ │ │ │ │ │ └── workspace.tsx │ │ │ │ │ ├── add-node.tsx │ │ │ │ │ ├── agent-panel.tsx │ │ │ │ │ ├── context.tsx │ │ │ │ │ ├── edge.tsx │ │ │ │ │ ├── edit.tsx │ │ │ │ │ ├── handle.tsx │ │ │ │ │ ├── history.tsx │ │ │ │ │ ├── node.tsx │ │ │ │ │ ├── nodes/ │ │ │ │ │ │ ├── ai.tsx │ │ │ │ │ │ ├── condition.tsx │ │ │ │ │ │ ├── for-each.tsx │ │ │ │ │ │ ├── for.tsx │ │ │ │ │ │ ├── graphql.tsx │ │ │ │ │ │ ├── http.tsx │ │ │ │ │ │ ├── javascript.tsx │ │ │ │ │ │ ├── manual-start.tsx │ │ │ │ │ │ ├── run-sub-flow.tsx │ │ │ │ │ │ ├── sub-flow-return.tsx │ │ │ │ │ │ ├── sub-flow-trigger.tsx │ │ │ │ │ │ ├── wait.tsx │ │ │ │ │ │ ├── ws-connection.tsx │ │ │ │ │ │ └── ws-send.tsx │ │ │ │ │ ├── routes/ │ │ │ │ │ │ └── flow/ │ │ │ │ │ │ └── $flowIdCan/ │ │ │ │ │ │ ├── history.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── route.tsx │ │ │ │ │ ├── selection.ts │ │ │ │ │ ├── tab.tsx │ │ │ │ │ ├── undo.ts │ │ │ │ │ └── viewport.tsx │ │ │ │ ├── graphql/ │ │ │ │ │ ├── @x/ │ │ │ │ │ │ ├── flow.tsx │ │ │ │ │ │ └── workspace.tsx │ │ │ │ │ ├── history.tsx │ │ │ │ │ ├── page.tsx │ │ │ │ │ ├── request/ │ │ │ │ │ │ ├── assert.tsx │ │ │ │ │ │ ├── header.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── panel.tsx │ │ │ │ │ │ ├── query-editor.tsx │ │ │ │ │ │ ├── top-bar.tsx │ │ │ │ │ │ ├── url.tsx │ │ │ │ │ │ └── variables-editor.tsx │ │ │ │ │ ├── response/ │ │ │ │ │ │ ├── assert.tsx │ │ │ │ │ │ ├── body.tsx │ │ │ │ │ │ ├── header.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── routes/ │ │ │ │ │ │ └── graphql/ │ │ │ │ │ │ └── $graphqlIdCan/ │ │ │ │ │ │ ├── delta.$deltaGraphqlIdCan.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── route.tsx │ │ │ │ │ └── tab.tsx │ │ │ │ ├── http/ │ │ │ │ │ ├── @x/ │ │ │ │ │ │ ├── flow.tsx │ │ │ │ │ │ └── workspace.tsx │ │ │ │ │ ├── history.tsx │ │ │ │ │ ├── page.tsx │ │ │ │ │ ├── request/ │ │ │ │ │ │ ├── assert.tsx │ │ │ │ │ │ ├── body/ │ │ │ │ │ │ │ ├── form-data.tsx │ │ │ │ │ │ │ ├── panel.tsx │ │ │ │ │ │ │ ├── raw.tsx │ │ │ │ │ │ │ └── url-encoded.tsx │ │ │ │ │ │ ├── header.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── panel.tsx │ │ │ │ │ │ ├── search-param.tsx │ │ │ │ │ │ ├── top-bar.tsx │ │ │ │ │ │ └── url.tsx │ │ │ │ │ ├── response/ │ │ │ │ │ │ ├── assert.tsx │ │ │ │ │ │ ├── body.tsx │ │ │ │ │ │ ├── header.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── routes/ │ │ │ │ │ │ └── http/ │ │ │ │ │ │ └── $httpIdCan/ │ │ │ │ │ │ ├── delta.$deltaHttpIdCan.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── route.tsx │ │ │ │ │ └── tab.tsx │ │ │ │ ├── user/ │ │ │ │ │ ├── @x/ │ │ │ │ │ │ └── dashboard.tsx │ │ │ │ │ └── routes/ │ │ │ │ │ ├── signIn.tsx │ │ │ │ │ └── signUp.tsx │ │ │ │ ├── websocket/ │ │ │ │ │ ├── @x/ │ │ │ │ │ │ ├── flow.tsx │ │ │ │ │ │ └── workspace.tsx │ │ │ │ │ ├── page.tsx │ │ │ │ │ ├── request/ │ │ │ │ │ │ ├── header.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── panel.tsx │ │ │ │ │ │ ├── top-bar.tsx │ │ │ │ │ │ └── url.tsx │ │ │ │ │ ├── response/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── routes/ │ │ │ │ │ │ └── websocket/ │ │ │ │ │ │ └── $websocketIdCan/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── route.tsx │ │ │ │ │ ├── tab.tsx │ │ │ │ │ └── use-websocket.ts │ │ │ │ └── workspace/ │ │ │ │ ├── @x/ │ │ │ │ │ └── dashboard.tsx │ │ │ │ ├── routes/ │ │ │ │ │ └── workspace/ │ │ │ │ │ └── $workspaceIdCan/ │ │ │ │ │ ├── (credential)/ │ │ │ │ │ │ └── __virtual.ts │ │ │ │ │ ├── (flow)/ │ │ │ │ │ │ └── __virtual.ts │ │ │ │ │ ├── (graphql)/ │ │ │ │ │ │ └── __virtual.ts │ │ │ │ │ ├── (http)/ │ │ │ │ │ │ └── __virtual.ts │ │ │ │ │ ├── (websocket)/ │ │ │ │ │ │ └── __virtual.ts │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── route.tsx │ │ │ │ └── ui/ │ │ │ │ └── status-bar.tsx │ │ │ ├── shared/ │ │ │ │ ├── api/ │ │ │ │ │ ├── auth.internal.tsx │ │ │ │ │ ├── auth.tsx │ │ │ │ │ ├── collection.internal.tsx │ │ │ │ │ ├── collection.tsx │ │ │ │ │ ├── connect-query.tsx │ │ │ │ │ ├── connect-rpc.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── interceptors.tsx │ │ │ │ │ ├── mock.tsx │ │ │ │ │ ├── protobuf.tsx │ │ │ │ │ └── transport.tsx │ │ │ │ ├── lib/ │ │ │ │ │ ├── faker.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── order.tsx │ │ │ │ │ ├── react-render.tsx │ │ │ │ │ ├── router.tsx │ │ │ │ │ ├── runtime.tsx │ │ │ │ │ ├── tanstack-db.tsx │ │ │ │ │ └── types.tsx │ │ │ │ ├── routes.tsx │ │ │ │ └── ui/ │ │ │ │ ├── dashboard.tsx │ │ │ │ └── index.tsx │ │ │ └── widgets/ │ │ │ ├── environment/ │ │ │ │ └── index.tsx │ │ │ ├── export/ │ │ │ │ └── index.tsx │ │ │ ├── import/ │ │ │ │ └── index.tsx │ │ │ └── tabs/ │ │ │ └── index.tsx │ │ ├── tsconfig.json │ │ ├── tsconfig.lib.json │ │ └── vite.config.ts │ ├── db/ │ │ ├── ai_test.go │ │ ├── db.go │ │ ├── flow_node_http_test.go │ │ ├── go.mod │ │ ├── go.sum │ │ ├── pkg/ │ │ │ ├── dbtest/ │ │ │ │ ├── unix.go │ │ │ │ └── windows.go │ │ │ ├── sqlc/ │ │ │ │ ├── gen/ │ │ │ │ │ ├── ai.sql.go │ │ │ │ │ ├── betterauth.sql.go │ │ │ │ │ ├── db.go │ │ │ │ │ ├── environment.sql.go │ │ │ │ │ ├── files.sql.go │ │ │ │ │ ├── flow.sql.go │ │ │ │ │ ├── graphql.sql.go │ │ │ │ │ ├── http.sql.go │ │ │ │ │ ├── models.go │ │ │ │ │ ├── streaming_bench_test.go │ │ │ │ │ ├── users.sql.go │ │ │ │ │ ├── websocket.sql.go │ │ │ │ │ └── workspaces.sql.go │ │ │ │ ├── pyproject.toml │ │ │ │ ├── queries/ │ │ │ │ │ ├── ai.sql │ │ │ │ │ ├── betterauth.sql │ │ │ │ │ ├── environment.sql │ │ │ │ │ ├── files.sql │ │ │ │ │ ├── flow.sql │ │ │ │ │ ├── graphql.sql │ │ │ │ │ ├── http.sql │ │ │ │ │ ├── users.sql │ │ │ │ │ ├── websocket.sql │ │ │ │ │ └── workspaces.sql │ │ │ │ ├── schema/ │ │ │ │ │ ├── 00_users.sql │ │ │ │ │ ├── 01_workspaces.sql │ │ │ │ │ ├── 02_environment.sql │ │ │ │ │ ├── 03_files.sql │ │ │ │ │ ├── 04_http.sql │ │ │ │ │ ├── 05_flow.sql │ │ │ │ │ ├── 06_migration.sql │ │ │ │ │ ├── 07_ai.sql │ │ │ │ │ ├── 08_betterauth.sql │ │ │ │ │ ├── 08_graphql.sql │ │ │ │ │ ├── 09_graphql_delta.sql │ │ │ │ │ └── 10_websocket.sql │ │ │ │ ├── sqlc.go │ │ │ │ └── sqlc.yaml │ │ │ ├── sqlitelocal/ │ │ │ │ └── sqlitelocal.go │ │ │ ├── sqlitemem/ │ │ │ │ └── sqlitemem.go │ │ │ ├── tursolocal/ │ │ │ │ ├── linux.go │ │ │ │ ├── tursolocal_bench_test.go │ │ │ │ ├── types.go │ │ │ │ └── windows.go │ │ │ └── tursomem/ │ │ │ ├── linux.go │ │ │ └── windows.go │ │ ├── project.json │ │ └── verification_test.go │ ├── server/ │ │ ├── .golangci.yml │ │ ├── cmd/ │ │ │ ├── authadapter-testserver/ │ │ │ │ └── main.go │ │ │ ├── server/ │ │ │ │ └── server.go │ │ │ └── serverrun/ │ │ │ └── serverrun.go │ │ ├── docs/ │ │ │ └── specs/ │ │ │ ├── BACKEND_ARCHITECTURE_V2.md │ │ │ ├── BULK_SYNC_TRANSACTION_WRAPPERS.md │ │ │ ├── FLOW.md │ │ │ ├── GRAPHQL.md │ │ │ ├── HTTP.md │ │ │ ├── MUTATION.md │ │ │ ├── NEW_FLOW_NODE.md │ │ │ └── SYNC.md │ │ ├── go.mod │ │ ├── go.sum │ │ ├── internal/ │ │ │ ├── api/ │ │ │ │ ├── api.go │ │ │ │ ├── api_unix.go │ │ │ │ ├── api_windows.go │ │ │ │ ├── middleware/ │ │ │ │ │ ├── mwauth/ │ │ │ │ │ │ ├── helpers.go │ │ │ │ │ │ ├── mwauth.go │ │ │ │ │ │ └── mwauth_test.go │ │ │ │ │ ├── mwcodec/ │ │ │ │ │ │ └── mwcodec.go │ │ │ │ │ └── mwcompress/ │ │ │ │ │ └── mwcompress.go │ │ │ │ ├── rauthadapter/ │ │ │ │ │ ├── rauthadapter.go │ │ │ │ │ └── rauthadapter_test.go │ │ │ │ ├── rcredential/ │ │ │ │ │ ├── deps_test.go │ │ │ │ │ ├── rcredential.go │ │ │ │ │ └── rcredential_test.go │ │ │ │ ├── renv/ │ │ │ │ │ ├── deps_test.go │ │ │ │ │ ├── renv.go │ │ │ │ │ └── renv_test.go │ │ │ │ ├── rexportv2/ │ │ │ │ │ ├── export.go │ │ │ │ │ ├── exporter_test.go │ │ │ │ │ ├── integration_test.go │ │ │ │ │ ├── rexportv2.go │ │ │ │ │ ├── rexportv2_test.go │ │ │ │ │ ├── service_test.go │ │ │ │ │ ├── storage.go │ │ │ │ │ ├── storage_test.go │ │ │ │ │ └── validation_test.go │ │ │ │ ├── rfile/ │ │ │ │ │ ├── integration_test.go │ │ │ │ │ ├── rfile.go │ │ │ │ │ ├── rfile_rpc_test.go │ │ │ │ │ └── rfile_test.go │ │ │ │ ├── rflowv2/ │ │ │ │ │ ├── assertion_race_test.go │ │ │ │ │ ├── chaos_test.go │ │ │ │ │ ├── delta_integration_test.go │ │ │ │ │ ├── execution_cache_test.go │ │ │ │ │ ├── import_interface.go │ │ │ │ │ ├── js_e2e_test.go │ │ │ │ │ ├── logging_test.go │ │ │ │ │ ├── node_config_sync_test.go │ │ │ │ │ ├── node_sync_test.go │ │ │ │ │ ├── relaxed_insert_test.go │ │ │ │ │ ├── rflowv2.go │ │ │ │ │ ├── rflowv2_common.go │ │ │ │ │ ├── rflowv2_common_test.go │ │ │ │ │ ├── rflowv2_concurrency_test.go │ │ │ │ │ ├── rflowv2_copy_paste.go │ │ │ │ │ ├── rflowv2_copy_paste_test.go │ │ │ │ │ ├── rflowv2_edge.go │ │ │ │ │ ├── rflowv2_edge_test.go │ │ │ │ │ ├── rflowv2_edge_transaction_test.go │ │ │ │ │ ├── rflowv2_exec.go │ │ │ │ │ ├── rflowv2_exec_publisher.go │ │ │ │ │ ├── rflowv2_exec_sync_test.go │ │ │ │ │ ├── rflowv2_exec_test.go │ │ │ │ │ ├── rflowv2_exec_transaction_test.go │ │ │ │ │ ├── rflowv2_flow.go │ │ │ │ │ ├── rflowv2_flow_create_test.go │ │ │ │ │ ├── rflowv2_flow_duplicate_sync_test.go │ │ │ │ │ ├── rflowv2_flow_transaction_test.go │ │ │ │ │ ├── rflowv2_import.go │ │ │ │ │ ├── rflowv2_mutation_verification_test.go │ │ │ │ │ ├── rflowv2_node.go │ │ │ │ │ ├── rflowv2_node_ai.go │ │ │ │ │ ├── rflowv2_node_ai_provider.go │ │ │ │ │ ├── rflowv2_node_condition.go │ │ │ │ │ ├── rflowv2_node_condition_test.go │ │ │ │ │ ├── rflowv2_node_condition_transaction_test.go │ │ │ │ │ ├── rflowv2_node_exec.go │ │ │ │ │ ├── rflowv2_node_exec_test.go │ │ │ │ │ ├── rflowv2_node_for.go │ │ │ │ │ ├── rflowv2_node_for_test.go │ │ │ │ │ ├── rflowv2_node_for_transaction_test.go │ │ │ │ │ ├── rflowv2_node_for_zero_value_test.go │ │ │ │ │ ├── rflowv2_node_foreach.go │ │ │ │ │ ├── rflowv2_node_foreach_transaction_test.go │ │ │ │ │ ├── rflowv2_node_graphql.go │ │ │ │ │ ├── rflowv2_node_http.go │ │ │ │ │ ├── rflowv2_node_http_test.go │ │ │ │ │ ├── rflowv2_node_http_transaction_test.go │ │ │ │ │ ├── rflowv2_node_javascript.go │ │ │ │ │ ├── rflowv2_node_javascript_transaction_test.go │ │ │ │ │ ├── rflowv2_node_memory.go │ │ │ │ │ ├── rflowv2_node_run_sub_flow.go │ │ │ │ │ ├── rflowv2_node_sub_flow_return.go │ │ │ │ │ ├── rflowv2_node_sub_flow_trigger.go │ │ │ │ │ ├── rflowv2_node_test.go │ │ │ │ │ ├── rflowv2_node_wait.go │ │ │ │ │ ├── rflowv2_node_ws_connection.go │ │ │ │ │ ├── rflowv2_node_ws_send.go │ │ │ │ │ ├── rflowv2_parity_test.go │ │ │ │ │ ├── rflowv2_sync_zero_value_test.go │ │ │ │ │ ├── rflowv2_test.go │ │ │ │ │ ├── rflowv2_testutil_test.go │ │ │ │ │ ├── rflowv2_variable.go │ │ │ │ │ ├── rflowv2_variable_transaction_test.go │ │ │ │ │ ├── rflowv2_version.go │ │ │ │ │ ├── simple_import_test.go │ │ │ │ │ └── sync_robustness_test.go │ │ │ │ ├── rgraphql/ │ │ │ │ │ ├── rgraphql.go │ │ │ │ │ ├── rgraphql_converter.go │ │ │ │ │ ├── rgraphql_crud.go │ │ │ │ │ ├── rgraphql_crud_assert.go │ │ │ │ │ ├── rgraphql_crud_delta.go │ │ │ │ │ ├── rgraphql_crud_header.go │ │ │ │ │ ├── rgraphql_crud_header_delta.go │ │ │ │ │ ├── rgraphql_crud_response.go │ │ │ │ │ ├── rgraphql_crud_response_assert.go │ │ │ │ │ ├── rgraphql_crud_version.go │ │ │ │ │ ├── rgraphql_delta_converter.go │ │ │ │ │ ├── rgraphql_exec.go │ │ │ │ │ ├── rgraphql_exec_assert.go │ │ │ │ │ └── rgraphql_exec_assert_test.go │ │ │ │ ├── rhealth/ │ │ │ │ │ ├── rhealth.go │ │ │ │ │ └── rhealth_test.go │ │ │ │ ├── rhttp/ │ │ │ │ │ ├── logging_test.go │ │ │ │ │ ├── rhttp.go │ │ │ │ │ ├── rhttp_body_kind_test.go │ │ │ │ │ ├── rhttp_common.go │ │ │ │ │ ├── rhttp_converter.go │ │ │ │ │ ├── rhttp_crud.go │ │ │ │ │ ├── rhttp_crud_assert.go │ │ │ │ │ ├── rhttp_crud_assert_rpc_test.go │ │ │ │ │ ├── rhttp_crud_body.go │ │ │ │ │ ├── rhttp_crud_body_rpc_test.go │ │ │ │ │ ├── rhttp_crud_header.go │ │ │ │ │ ├── rhttp_crud_param.go │ │ │ │ │ ├── rhttp_crud_param_rpc_test.go │ │ │ │ │ ├── rhttp_crud_response.go │ │ │ │ │ ├── rhttp_crud_rpc_test.go │ │ │ │ │ ├── rhttp_default_test.go │ │ │ │ │ ├── rhttp_delta_assert.go │ │ │ │ │ ├── rhttp_delta_body_raw.go │ │ │ │ │ ├── rhttp_delta_body_raw_test.go │ │ │ │ │ ├── rhttp_delta_body_structured.go │ │ │ │ │ ├── rhttp_delta_body_structured_test.go │ │ │ │ │ ├── rhttp_delta_child_test.go │ │ │ │ │ ├── rhttp_delta_collection_test.go │ │ │ │ │ ├── rhttp_delta_header.go │ │ │ │ │ ├── rhttp_delta_header_test.go │ │ │ │ │ ├── rhttp_delta_param.go │ │ │ │ │ ├── rhttp_delta_param_test.go │ │ │ │ │ ├── rhttp_delta_request.go │ │ │ │ │ ├── rhttp_delta_test.go │ │ │ │ │ ├── rhttp_exec.go │ │ │ │ │ ├── rhttp_exec_delta_test.go │ │ │ │ │ ├── rhttp_id_test.go │ │ │ │ │ ├── rhttp_integration_test.go │ │ │ │ │ ├── rhttp_run_sync_parity_test.go │ │ │ │ │ ├── rhttp_run_sync_test.go │ │ │ │ │ ├── rhttp_run_version_test.go │ │ │ │ │ ├── rhttp_streaming_test.go │ │ │ │ │ ├── rhttp_sync_delta_test.go │ │ │ │ │ ├── rhttp_sync_parity_test.go │ │ │ │ │ ├── rhttp_sync_rpc_test.go │ │ │ │ │ ├── rhttp_test.go │ │ │ │ │ ├── rhttp_testutil_test.go │ │ │ │ │ ├── rhttp_transaction_test.go │ │ │ │ │ ├── rhttp_version.go │ │ │ │ │ ├── rhttp_version_concurrency_test.go │ │ │ │ │ ├── rhttp_version_fix_test.go │ │ │ │ │ └── rhttp_version_snapshot_test.go │ │ │ │ ├── rimportv2/ │ │ │ │ │ ├── concurrency_stress_test.go │ │ │ │ │ ├── dedup.go │ │ │ │ │ ├── dedup_test.go │ │ │ │ │ ├── duplicate_import_test.go │ │ │ │ │ ├── edge_cases_test.go │ │ │ │ │ ├── env_sync_test.go │ │ │ │ │ ├── file_collision_test.go │ │ │ │ │ ├── format_detection.go │ │ │ │ │ ├── fuzz_test.go │ │ │ │ │ ├── integration_test.go │ │ │ │ │ ├── integration_unified_test.go │ │ │ │ │ ├── integrity.go │ │ │ │ │ ├── integrity_test.go │ │ │ │ │ ├── performance_test.go │ │ │ │ │ ├── postman_stuck_test.go │ │ │ │ │ ├── realhar_test.go │ │ │ │ │ ├── realyaml_test.go │ │ │ │ │ ├── rimportv2.go │ │ │ │ │ ├── rimportv2_convert.go │ │ │ │ │ ├── rimportv2_delta_e2e_test.go │ │ │ │ │ ├── rimportv2_domain.go │ │ │ │ │ ├── rimportv2_event.go │ │ │ │ │ ├── rimportv2_test.go │ │ │ │ │ ├── rimportv2_translator.go │ │ │ │ │ ├── service.go │ │ │ │ │ ├── storage.go │ │ │ │ │ ├── sync_parity_test.go │ │ │ │ │ ├── sync_parity_yaml_test.go │ │ │ │ │ ├── testdata/ │ │ │ │ │ │ ├── ecommerce.yaml │ │ │ │ │ │ └── uuid.har │ │ │ │ │ ├── toposort.go │ │ │ │ │ ├── toposort_test.go │ │ │ │ │ ├── translators.go │ │ │ │ │ ├── unified_import_test.go │ │ │ │ │ ├── urlfetch.go │ │ │ │ │ ├── urlfetch_test.go │ │ │ │ │ └── validation.go │ │ │ │ ├── rlog/ │ │ │ │ │ ├── rlog.go │ │ │ │ │ └── rlog_test.go │ │ │ │ ├── rreference/ │ │ │ │ │ ├── rreference.go │ │ │ │ │ ├── rreference_context.go │ │ │ │ │ ├── rreference_execution.go │ │ │ │ │ ├── rreference_flow_context.go │ │ │ │ │ ├── rreference_integration_test.go │ │ │ │ │ ├── rreference_node_schema.go │ │ │ │ │ ├── rreference_response.go │ │ │ │ │ ├── rreference_rpc_test.go │ │ │ │ │ ├── rreference_test.go │ │ │ │ │ ├── rreference_tree.go │ │ │ │ │ └── rreference_unit_test.go │ │ │ │ ├── ruser/ │ │ │ │ │ ├── ruser.go.disabled │ │ │ │ │ └── ruser_test.go.disabled │ │ │ │ ├── rwebsocket/ │ │ │ │ │ ├── rwebsocket.go │ │ │ │ │ └── rwebsocket_proxy.go │ │ │ │ └── rworkspace/ │ │ │ │ ├── rworkspace.go │ │ │ │ └── rworkspace_test.go │ │ │ ├── converter/ │ │ │ │ ├── ai_converter_test.go │ │ │ │ ├── converter.go │ │ │ │ └── converter_test.go │ │ │ ├── migrate/ │ │ │ │ ├── README.md │ │ │ │ ├── backup.go │ │ │ │ ├── checkpoint.go │ │ │ │ ├── cursor_context.go │ │ │ │ ├── metadata.go │ │ │ │ ├── metadata_test.go │ │ │ │ ├── registry.go │ │ │ │ ├── registry_test.go │ │ │ │ ├── runner.go │ │ │ │ ├── runner_test.go │ │ │ │ └── types.go │ │ │ └── migrations/ │ │ │ ├── 01KFF093_add_ai_tables.go │ │ │ ├── 01KGTFDM_add_external_id.go │ │ │ ├── 01KGZC9E_add_http_is_snapshot.go │ │ │ ├── 01KH1AZ5_enforce_delta_snapshot_exclusivity.go │ │ │ ├── 01KHDYWX_add_graphql_tables.go │ │ │ ├── 01KJSYH5_add_flow_error.go │ │ │ ├── 01KJZMR5_add_flow_node_wait.go │ │ │ ├── 01KK31SQ_add_graphql_delta_file_kind.go │ │ │ ├── 01KK7EDJ_add_sub_flow_tables.go │ │ │ ├── 01KKFQT8_add_websocket_tables.go │ │ │ ├── migrations.go │ │ │ └── migrations_test.go │ │ ├── package.json │ │ ├── pkg/ │ │ │ ├── authadapter/ │ │ │ │ ├── account.go │ │ │ │ ├── adapter.go │ │ │ │ ├── adapter_test.go │ │ │ │ ├── dynquery.go │ │ │ │ ├── jwks.go │ │ │ │ ├── model.go │ │ │ │ ├── session.go │ │ │ │ ├── user.go │ │ │ │ └── verification.go │ │ │ ├── compress/ │ │ │ │ ├── compress.go │ │ │ │ └── compress_test.go │ │ │ ├── contenthash/ │ │ │ │ └── hasher.go │ │ │ ├── credvault/ │ │ │ │ ├── encryption_type.go │ │ │ │ ├── vault.go │ │ │ │ └── vault_test.go │ │ │ ├── dbtime/ │ │ │ │ └── dbtime.go │ │ │ ├── delta/ │ │ │ │ ├── delta.go │ │ │ │ └── delta_test.go │ │ │ ├── depfinder/ │ │ │ │ ├── depfinder.go │ │ │ │ └── depfinder_test.go │ │ │ ├── errmap/ │ │ │ │ ├── errmap.go │ │ │ │ └── errmap_test.go │ │ │ ├── eventstream/ │ │ │ │ ├── bridge.go │ │ │ │ ├── bridge_bulk_test.go │ │ │ │ ├── bridge_test.go │ │ │ │ ├── bulk_logic.txt │ │ │ │ ├── bulk_test.go │ │ │ │ ├── eventstream.go │ │ │ │ ├── eventstream_test.go │ │ │ │ └── memory/ │ │ │ │ └── memory.go │ │ │ ├── eventsync/ │ │ │ │ ├── batch.go │ │ │ │ ├── batch_test.go │ │ │ │ ├── kind.go │ │ │ │ ├── node_order.go │ │ │ │ ├── node_order_test.go │ │ │ │ ├── order.go │ │ │ │ └── order_test.go │ │ │ ├── expression/ │ │ │ │ ├── builtins.go │ │ │ │ ├── builtins_test.go │ │ │ │ ├── errors.go │ │ │ │ ├── eval.go │ │ │ │ ├── expression.go │ │ │ │ ├── expression_test.go │ │ │ │ ├── expression_tracking_test.go │ │ │ │ ├── file_utils.go │ │ │ │ ├── interpolate.go │ │ │ │ ├── path_resolver.go │ │ │ │ ├── unified_env.go │ │ │ │ └── unified_env_test.go │ │ │ ├── flow/ │ │ │ │ ├── flowbuilder/ │ │ │ │ │ ├── builder.go │ │ │ │ │ └── subflow_executor.go │ │ │ │ ├── flowexec/ │ │ │ │ │ ├── session.go │ │ │ │ │ ├── session_test.go │ │ │ │ │ ├── snapshot.go │ │ │ │ │ └── snapshot_test.go │ │ │ │ ├── flowresult/ │ │ │ │ │ ├── drain.go │ │ │ │ │ ├── noop.go │ │ │ │ │ ├── processor.go │ │ │ │ │ ├── publisher.go │ │ │ │ │ └── statetracker.go │ │ │ │ ├── node/ │ │ │ │ │ ├── entry.go │ │ │ │ │ ├── mocknode/ │ │ │ │ │ │ └── mocknode.go │ │ │ │ │ ├── nai/ │ │ │ │ │ │ ├── aiexpr.go │ │ │ │ │ │ ├── aiparam.go │ │ │ │ │ │ ├── benchmarks/ │ │ │ │ │ │ │ ├── 2026-01-26/ │ │ │ │ │ │ │ │ ├── claude-sonnet-4-5.json │ │ │ │ │ │ │ │ ├── gemini-2.5-pro.json │ │ │ │ │ │ │ │ ├── gpt-5.2.json │ │ │ │ │ │ │ │ └── summary.md │ │ │ │ │ │ │ └── README.md │ │ │ │ │ │ ├── bridge.go │ │ │ │ │ │ ├── bridge_test.go │ │ │ │ │ │ ├── execution.go │ │ │ │ │ │ ├── integration_benchmark_test.go │ │ │ │ │ │ ├── integration_custom_test.go │ │ │ │ │ │ ├── integration_flow_orchestration_test.go │ │ │ │ │ │ ├── integration_poc_advanced_test.go │ │ │ │ │ │ ├── integration_poc_comparison_test.go │ │ │ │ │ │ ├── integration_providers_test.go │ │ │ │ │ │ ├── integration_scoring_test.go │ │ │ │ │ │ ├── integration_setup_test.go │ │ │ │ │ │ ├── integration_tools_http_test.go │ │ │ │ │ │ ├── integration_tools_node_test.go │ │ │ │ │ │ ├── nai.go │ │ │ │ │ │ ├── nai_test.go │ │ │ │ │ │ ├── provider.go │ │ │ │ │ │ ├── tools.go │ │ │ │ │ │ └── tools_test.go │ │ │ │ │ ├── naiprovider/ │ │ │ │ │ │ ├── metrics.go │ │ │ │ │ │ ├── metrics_test.go │ │ │ │ │ │ ├── naiprovider.go │ │ │ │ │ │ └── naiprovider_test.go │ │ │ │ │ ├── nfor/ │ │ │ │ │ │ ├── nfor.go │ │ │ │ │ │ └── nfor_test.go │ │ │ │ │ ├── nforeach/ │ │ │ │ │ │ ├── nforeach.go │ │ │ │ │ │ └── nforeach_test.go │ │ │ │ │ ├── ngraphql/ │ │ │ │ │ │ └── ngraphql.go │ │ │ │ │ ├── nif/ │ │ │ │ │ │ ├── nif.go │ │ │ │ │ │ └── nif_test.go │ │ │ │ │ ├── njs/ │ │ │ │ │ │ ├── njs.go │ │ │ │ │ │ └── njs_test.go │ │ │ │ │ ├── nmemory/ │ │ │ │ │ │ ├── nmemory.go │ │ │ │ │ │ └── nmemory_test.go │ │ │ │ │ ├── node.go │ │ │ │ │ ├── node_test.go │ │ │ │ │ ├── node_tracking_test.go │ │ │ │ │ ├── nrequest/ │ │ │ │ │ │ ├── nrequest.go │ │ │ │ │ │ └── nrequest_test.go │ │ │ │ │ ├── nrunsubflow/ │ │ │ │ │ │ └── nrunsubflow.go │ │ │ │ │ ├── nstart/ │ │ │ │ │ │ └── nstart.go │ │ │ │ │ ├── nsubflowreturn/ │ │ │ │ │ │ └── nsubflowreturn.go │ │ │ │ │ ├── nsubflowtrigger/ │ │ │ │ │ │ └── nsubflowtrigger.go │ │ │ │ │ ├── nwait/ │ │ │ │ │ │ └── nwait.go │ │ │ │ │ ├── nwsconnection/ │ │ │ │ │ │ ├── nwsconnection.go │ │ │ │ │ │ └── nwsconnection_test.go │ │ │ │ │ └── nwssend/ │ │ │ │ │ ├── nwssend.go │ │ │ │ │ └── nwssend_test.go │ │ │ │ ├── runner/ │ │ │ │ │ ├── cancel.go │ │ │ │ │ ├── flowlocalrunner/ │ │ │ │ │ │ ├── executor.go │ │ │ │ │ │ ├── flowlocalrunner.go │ │ │ │ │ │ ├── flowlocalrunner_inputdata_test.go │ │ │ │ │ │ ├── flowlocalrunner_test.go │ │ │ │ │ │ ├── helpers.go │ │ │ │ │ │ ├── mode_select.go │ │ │ │ │ │ ├── strategy_multi.go │ │ │ │ │ │ └── strategy_single.go │ │ │ │ │ ├── graph.go │ │ │ │ │ ├── loop_test.go │ │ │ │ │ ├── runner.go │ │ │ │ │ └── status.go │ │ │ │ ├── simulation/ │ │ │ │ │ ├── mockflows.go │ │ │ │ │ └── mockflows_test.go │ │ │ │ └── tracking/ │ │ │ │ ├── env_wrapper.go │ │ │ │ ├── tracker.go │ │ │ │ ├── tracker_race_test.go │ │ │ │ ├── tracker_test.go │ │ │ │ ├── tracker_tree_test.go │ │ │ │ ├── tree_builder.go │ │ │ │ └── tree_builder_test.go │ │ │ ├── flowgraph/ │ │ │ │ ├── flowgraph.go │ │ │ │ ├── flowgraph_test.go │ │ │ │ ├── layout.go │ │ │ │ └── reduction.go │ │ │ ├── fuzzyfinder/ │ │ │ │ ├── fuzzyfinder.go │ │ │ │ └── fuzzyfinder_test.go │ │ │ ├── graphql/ │ │ │ │ ├── resolver/ │ │ │ │ │ └── resolver.go │ │ │ │ └── response/ │ │ │ │ └── response.go │ │ │ ├── http/ │ │ │ │ ├── request/ │ │ │ │ │ ├── body_tracking_test.go │ │ │ │ │ ├── content_type_test.go │ │ │ │ │ ├── request.go │ │ │ │ │ ├── request_test.go │ │ │ │ │ ├── request_tracking_test.go │ │ │ │ │ └── variable_substitution_test.go │ │ │ │ ├── resolver/ │ │ │ │ │ ├── resolver.go │ │ │ │ │ └── resolver_test.go │ │ │ │ └── response/ │ │ │ │ ├── response.go │ │ │ │ └── response_test.go │ │ │ ├── httpclient/ │ │ │ │ ├── charset_test.go │ │ │ │ ├── httpclient.go │ │ │ │ ├── httpclient_test.go │ │ │ │ └── httpmockclient/ │ │ │ │ └── httpmockclient.go │ │ │ ├── idwrap/ │ │ │ │ ├── idwrap.go │ │ │ │ └── idwrap_test.go │ │ │ ├── ioworkspace/ │ │ │ │ ├── doc.go │ │ │ │ ├── errors.go │ │ │ │ ├── exporter.go │ │ │ │ ├── exporter_test.go │ │ │ │ ├── har_delta_body_test.go │ │ │ │ ├── importer.go │ │ │ │ ├── importer_env.go │ │ │ │ ├── importer_file.go │ │ │ │ ├── importer_flow.go │ │ │ │ ├── importer_http.go │ │ │ │ ├── ioworkspace_test.go │ │ │ │ ├── layout.go │ │ │ │ ├── layout_test.go │ │ │ │ ├── service.go │ │ │ │ └── types.go │ │ │ ├── llm/ │ │ │ │ ├── convert.go │ │ │ │ ├── convert_test.go │ │ │ │ ├── llm.go │ │ │ │ ├── message.go │ │ │ │ └── tool.go │ │ │ ├── logconsole/ │ │ │ │ └── logconsole.go │ │ │ ├── logger/ │ │ │ │ └── mocklogger/ │ │ │ │ └── mocklogger.go │ │ │ ├── model/ │ │ │ │ ├── mcondition/ │ │ │ │ │ └── mcondition.go │ │ │ │ ├── mcredential/ │ │ │ │ │ └── mcredential.go │ │ │ │ ├── menv/ │ │ │ │ │ ├── menv.go │ │ │ │ │ └── variable.go │ │ │ │ ├── mfile/ │ │ │ │ │ ├── mfile.go │ │ │ │ │ └── mfile_test.go │ │ │ │ ├── mflow/ │ │ │ │ │ ├── edge.go │ │ │ │ │ ├── execution.go │ │ │ │ │ ├── mflow.go │ │ │ │ │ ├── node.go │ │ │ │ │ ├── node_sub_flow.go │ │ │ │ │ ├── node_test.go │ │ │ │ │ ├── node_types.go │ │ │ │ │ ├── tag.go │ │ │ │ │ └── variable.go │ │ │ │ ├── mgraphql/ │ │ │ │ │ └── mgraphql.go │ │ │ │ ├── mhttp/ │ │ │ │ │ └── mhttp.go │ │ │ │ ├── mtag/ │ │ │ │ │ └── mtag.go │ │ │ │ ├── muser/ │ │ │ │ │ └── muser.go │ │ │ │ ├── mwebsocket/ │ │ │ │ │ └── mwebsocket.go │ │ │ │ ├── mworkspace/ │ │ │ │ │ ├── mworkspace.go │ │ │ │ │ └── user.go │ │ │ │ ├── postman/ │ │ │ │ │ └── v21/ │ │ │ │ │ ├── mauth/ │ │ │ │ │ │ └── mauth.go │ │ │ │ │ ├── mbody/ │ │ │ │ │ │ └── mbody.go │ │ │ │ │ ├── mcookie/ │ │ │ │ │ │ └── mcookie.go │ │ │ │ │ ├── mevent/ │ │ │ │ │ │ └── mevent.go │ │ │ │ │ ├── mheader/ │ │ │ │ │ │ └── mheader.go │ │ │ │ │ ├── mitem/ │ │ │ │ │ │ └── mitem.go │ │ │ │ │ ├── mpostmancollection/ │ │ │ │ │ │ └── mpostmancollection.go │ │ │ │ │ ├── mrequest/ │ │ │ │ │ │ └── mrequest.go │ │ │ │ │ ├── mresponse/ │ │ │ │ │ │ └── mresponse.go │ │ │ │ │ ├── murl/ │ │ │ │ │ │ └── murl.go │ │ │ │ │ └── mvariable/ │ │ │ │ │ └── mvariable.go │ │ │ │ └── result/ │ │ │ │ └── mresultapi/ │ │ │ │ └── mresultapi.go │ │ │ ├── mutation/ │ │ │ │ ├── context.go │ │ │ │ ├── delete_environment.go │ │ │ │ ├── delete_file.go │ │ │ │ ├── delete_flow.go │ │ │ │ ├── delete_graphql.go │ │ │ │ ├── delete_http.go │ │ │ │ ├── delete_workspace.go │ │ │ │ ├── event.go │ │ │ │ ├── insert_credential.go │ │ │ │ ├── insert_graphql.go │ │ │ │ ├── insert_http.go │ │ │ │ ├── mutation_test.go │ │ │ │ ├── publish.go │ │ │ │ ├── replay_dev.go │ │ │ │ ├── replay_prod.go │ │ │ │ ├── update_graphql.go │ │ │ │ └── update_http.go │ │ │ ├── patch/ │ │ │ │ ├── optional.go │ │ │ │ ├── optional_test.go │ │ │ │ ├── patch.go │ │ │ │ └── patch_test.go │ │ │ ├── permcheck/ │ │ │ │ └── permcheck.go │ │ │ ├── reference/ │ │ │ │ ├── reference.go │ │ │ │ ├── reference_conversion_test.go │ │ │ │ ├── reference_enum_test.go │ │ │ │ └── reference_test.go │ │ │ ├── referencecompletion/ │ │ │ │ ├── referencecompletion.go │ │ │ │ └── referencecompletion_test.go │ │ │ ├── service/ │ │ │ │ ├── scredential/ │ │ │ │ │ ├── credential_mapper.go │ │ │ │ │ ├── credential_mapper_test.go │ │ │ │ │ ├── llm_provider.go │ │ │ │ │ ├── llm_provider_test.go │ │ │ │ │ ├── reader.go │ │ │ │ │ ├── scredential.go │ │ │ │ │ ├── scredential_test.go │ │ │ │ │ └── writer.go │ │ │ │ ├── senv/ │ │ │ │ │ ├── env.go │ │ │ │ │ ├── env_mapper.go │ │ │ │ │ ├── env_reader.go │ │ │ │ │ ├── env_writer.go │ │ │ │ │ ├── variable.go │ │ │ │ │ ├── variable_mapper.go │ │ │ │ │ ├── variable_reader.go │ │ │ │ │ └── variable_writer.go │ │ │ │ ├── sfile/ │ │ │ │ │ ├── mapper.go │ │ │ │ │ ├── reader.go │ │ │ │ │ ├── sfile.go │ │ │ │ │ ├── sfile_delta_test.go │ │ │ │ │ ├── sfile_test.go │ │ │ │ │ └── writer.go │ │ │ │ ├── sflow/ │ │ │ │ │ ├── edge.go │ │ │ │ │ ├── edge_mapper.go │ │ │ │ │ ├── edge_reader.go │ │ │ │ │ ├── edge_writer.go │ │ │ │ │ ├── edge_writer_test.go │ │ │ │ │ ├── flow.go │ │ │ │ │ ├── flow_mapper.go │ │ │ │ │ ├── flow_reader.go │ │ │ │ │ ├── flow_writer.go │ │ │ │ │ ├── node.go │ │ │ │ │ ├── node_ai.go │ │ │ │ │ ├── node_ai_mapper.go │ │ │ │ │ ├── node_ai_mapper_test.go │ │ │ │ │ ├── node_ai_provider.go │ │ │ │ │ ├── node_ai_provider_mapper.go │ │ │ │ │ ├── node_ai_provider_reader.go │ │ │ │ │ ├── node_ai_provider_test.go │ │ │ │ │ ├── node_ai_provider_writer.go │ │ │ │ │ ├── node_ai_reader.go │ │ │ │ │ ├── node_ai_writer.go │ │ │ │ │ ├── node_execution.go │ │ │ │ │ ├── node_execution_mapper.go │ │ │ │ │ ├── node_execution_reader.go │ │ │ │ │ ├── node_execution_writer.go │ │ │ │ │ ├── node_for.go │ │ │ │ │ ├── node_for_mapper.go │ │ │ │ │ ├── node_for_reader.go │ │ │ │ │ ├── node_for_writer.go │ │ │ │ │ ├── node_foreach.go │ │ │ │ │ ├── node_foreach_mapper.go │ │ │ │ │ ├── node_foreach_reader.go │ │ │ │ │ ├── node_foreach_writer.go │ │ │ │ │ ├── node_graphql.go │ │ │ │ │ ├── node_graphql_mapper.go │ │ │ │ │ ├── node_graphql_reader.go │ │ │ │ │ ├── node_graphql_writer.go │ │ │ │ │ ├── node_if.go │ │ │ │ │ ├── node_if_mapper.go │ │ │ │ │ ├── node_if_reader.go │ │ │ │ │ ├── node_if_writer.go │ │ │ │ │ ├── node_javascript.go │ │ │ │ │ ├── node_javascript_mapper.go │ │ │ │ │ ├── node_javascript_reader.go │ │ │ │ │ ├── node_javascript_writer.go │ │ │ │ │ ├── node_mapper.go │ │ │ │ │ ├── node_memory.go │ │ │ │ │ ├── node_memory_mapper.go │ │ │ │ │ ├── node_memory_reader.go │ │ │ │ │ ├── node_memory_test.go │ │ │ │ │ ├── node_memory_writer.go │ │ │ │ │ ├── node_reader.go │ │ │ │ │ ├── node_readers.go │ │ │ │ │ ├── node_request.go │ │ │ │ │ ├── node_request_mapper.go │ │ │ │ │ ├── node_request_reader.go │ │ │ │ │ ├── node_request_writer.go │ │ │ │ │ ├── node_run_sub_flow.go │ │ │ │ │ ├── node_run_sub_flow_mapper.go │ │ │ │ │ ├── node_run_sub_flow_reader.go │ │ │ │ │ ├── node_run_sub_flow_writer.go │ │ │ │ │ ├── node_sub_flow_return.go │ │ │ │ │ ├── node_sub_flow_return_mapper.go │ │ │ │ │ ├── node_sub_flow_return_reader.go │ │ │ │ │ ├── node_sub_flow_return_writer.go │ │ │ │ │ ├── node_sub_flow_trigger.go │ │ │ │ │ ├── node_sub_flow_trigger_mapper.go │ │ │ │ │ ├── node_sub_flow_trigger_reader.go │ │ │ │ │ ├── node_sub_flow_trigger_writer.go │ │ │ │ │ ├── node_wait.go │ │ │ │ │ ├── node_wait_mapper.go │ │ │ │ │ ├── node_wait_reader.go │ │ │ │ │ ├── node_wait_writer.go │ │ │ │ │ ├── node_writer.go │ │ │ │ │ ├── node_writer_test.go │ │ │ │ │ ├── node_ws_connection.go │ │ │ │ │ ├── node_ws_connection_mapper.go │ │ │ │ │ ├── node_ws_connection_reader.go │ │ │ │ │ ├── node_ws_connection_writer.go │ │ │ │ │ ├── node_ws_send.go │ │ │ │ │ ├── node_ws_send_mapper.go │ │ │ │ │ ├── node_ws_send_reader.go │ │ │ │ │ ├── node_ws_send_writer.go │ │ │ │ │ ├── tag.go │ │ │ │ │ ├── tag_mapper.go │ │ │ │ │ ├── tag_reader.go │ │ │ │ │ ├── tag_writer.go │ │ │ │ │ ├── variable.go │ │ │ │ │ ├── variable_mapper.go │ │ │ │ │ ├── variable_reader.go │ │ │ │ │ └── variable_writer.go │ │ │ │ ├── sgraphql/ │ │ │ │ │ ├── assert.go │ │ │ │ │ ├── header.go │ │ │ │ │ ├── mapper.go │ │ │ │ │ ├── reader.go │ │ │ │ │ ├── response.go │ │ │ │ │ ├── sgraphql.go │ │ │ │ │ └── writer.go │ │ │ │ ├── shttp/ │ │ │ │ │ ├── assert.go │ │ │ │ │ ├── assert_reader.go │ │ │ │ │ ├── assert_test.go │ │ │ │ │ ├── assert_writer.go │ │ │ │ │ ├── body_form.go │ │ │ │ │ ├── body_form_reader.go │ │ │ │ │ ├── body_form_writer.go │ │ │ │ │ ├── body_form_writer_test.go │ │ │ │ │ ├── body_raw.go │ │ │ │ │ ├── body_raw_reader.go │ │ │ │ │ ├── body_raw_writer.go │ │ │ │ │ ├── body_test.go │ │ │ │ │ ├── body_urlencoded.go │ │ │ │ │ ├── body_urlencoded_reader.go │ │ │ │ │ ├── body_urlencoded_writer.go │ │ │ │ │ ├── body_urlencoded_writer_test.go │ │ │ │ │ ├── header.go │ │ │ │ │ ├── header_reader.go │ │ │ │ │ ├── header_test.go │ │ │ │ │ ├── header_writer.go │ │ │ │ │ ├── header_writer_test.go │ │ │ │ │ ├── http.go │ │ │ │ │ ├── http_children.go │ │ │ │ │ ├── http_test.go │ │ │ │ │ ├── mapper.go │ │ │ │ │ ├── reader.go │ │ │ │ │ ├── response.go │ │ │ │ │ ├── response_reader.go │ │ │ │ │ ├── response_writer.go │ │ │ │ │ ├── search_param.go │ │ │ │ │ ├── search_param_reader.go │ │ │ │ │ ├── search_param_test.go │ │ │ │ │ ├── search_param_writer.go │ │ │ │ │ ├── search_param_writer_test.go │ │ │ │ │ ├── shttp.test │ │ │ │ │ ├── utils.go │ │ │ │ │ └── writer.go │ │ │ │ ├── stag/ │ │ │ │ │ ├── mapper.go │ │ │ │ │ ├── reader.go │ │ │ │ │ ├── stag.go │ │ │ │ │ └── writer.go │ │ │ │ ├── suser/ │ │ │ │ │ ├── reader.go │ │ │ │ │ ├── suser.go │ │ │ │ │ └── writer.go │ │ │ │ ├── swebsocket/ │ │ │ │ │ ├── header.go │ │ │ │ │ ├── mapper.go │ │ │ │ │ └── swebsocket.go │ │ │ │ └── sworkspace/ │ │ │ │ ├── sworkspace_test.go │ │ │ │ ├── user.go │ │ │ │ ├── user_mapper.go │ │ │ │ ├── user_reader.go │ │ │ │ ├── user_writer.go │ │ │ │ ├── workspace.go │ │ │ │ ├── workspace_mapper.go │ │ │ │ ├── workspace_reader.go │ │ │ │ └── workspace_writer.go │ │ │ ├── sort/ │ │ │ │ └── sortenabled/ │ │ │ │ ├── sortenabled.go │ │ │ │ └── sortenabled_test.go │ │ │ ├── stoken/ │ │ │ │ ├── stoken.go │ │ │ │ └── stoken_test.go │ │ │ ├── streamregistry/ │ │ │ │ ├── registry.go │ │ │ │ └── registry_test.go │ │ │ ├── streamtest/ │ │ │ │ ├── helpers.go │ │ │ │ ├── verifier.go │ │ │ │ └── verifier_test.go │ │ │ ├── testutil/ │ │ │ │ ├── concurrency.go │ │ │ │ ├── sync_parity.go │ │ │ │ ├── sync_zero_value.go │ │ │ │ └── testutil.go │ │ │ ├── translate/ │ │ │ │ ├── harv2/ │ │ │ │ │ ├── benchmark_test.go │ │ │ │ │ ├── delta.go │ │ │ │ │ ├── harv2.go │ │ │ │ │ ├── harv2_delta_test.go │ │ │ │ │ ├── harv2_dependency_unit_test.go │ │ │ │ │ ├── harv2_layout_test.go │ │ │ │ │ ├── harv2_test.go │ │ │ │ │ ├── integration_test.go │ │ │ │ │ └── request.go │ │ │ │ ├── tcurlv2/ │ │ │ │ │ ├── tcurlv2.go │ │ │ │ │ └── tcurlv2_test.go │ │ │ │ ├── tgeneric/ │ │ │ │ │ └── tgeneric.go │ │ │ │ ├── topenapiv2/ │ │ │ │ │ ├── deterministic_test.go │ │ │ │ │ ├── real_world_test.go │ │ │ │ │ ├── topenapiv2.go │ │ │ │ │ └── topenapiv2_test.go │ │ │ │ ├── tpostmanv2/ │ │ │ │ │ ├── integration_test.go │ │ │ │ │ ├── mappers.go │ │ │ │ │ ├── real_world_test.go │ │ │ │ │ ├── tpostmanv2.go │ │ │ │ │ └── tpostmanv2_test.go │ │ │ │ └── yamlflowsimplev2/ │ │ │ │ ├── README.md │ │ │ │ ├── converter.go │ │ │ │ ├── converter_flow.go │ │ │ │ ├── converter_node.go │ │ │ │ ├── converter_template.go │ │ │ │ ├── converter_test.go │ │ │ │ ├── exporter.go │ │ │ │ ├── exporter_test.go │ │ │ │ ├── reproduce_weird_test.go │ │ │ │ ├── types.go │ │ │ │ ├── utils.go │ │ │ │ └── utils_test.go │ │ │ ├── txutil/ │ │ │ │ ├── bulk_sync_tx.go │ │ │ │ ├── bulk_sync_tx_test.go │ │ │ │ └── sync_tx.go │ │ │ ├── varsystem/ │ │ │ │ ├── varsystem.go │ │ │ │ ├── varsystem_test.go │ │ │ │ └── varsystem_tracker_test.go │ │ │ └── zstdcompress/ │ │ │ ├── zstdcompress.go │ │ │ └── zstdcompress_test.go │ │ ├── project.json │ │ ├── test/ │ │ │ ├── collection/ │ │ │ │ ├── FiveWayAutomateCollection.json │ │ │ │ ├── GalaxyCollection.json │ │ │ │ ├── IntroductionCollection.json │ │ │ │ ├── SimpleCollection.json │ │ │ │ └── collection_test.go │ │ │ ├── delta_execution_e2e_test.go │ │ │ ├── delta_header_e2e_test.go │ │ │ ├── e2e_har_to_cli_test.go │ │ │ ├── flow_execution_e2e_test.go │ │ │ ├── har_import_dep_test.go │ │ │ ├── har_import_e2e_test.go │ │ │ ├── har_import_sync_test.go │ │ │ ├── har_import_url_dep_test.go │ │ │ ├── openapi/ │ │ │ │ ├── petstore_swagger2.json │ │ │ │ └── stripe_openapi3.json │ │ │ └── testdata/ │ │ │ └── collection/ │ │ │ ├── FiveWayAutomateCollection.json │ │ │ └── SimpleCollection.json │ │ └── testing.md │ ├── spec/ │ │ ├── api/ │ │ │ ├── credential.tsp │ │ │ ├── environment.tsp │ │ │ ├── export.tsp │ │ │ ├── file-system.tsp │ │ │ ├── flow.tsp │ │ │ ├── graphql.tsp │ │ │ ├── health.tsp │ │ │ ├── http.tsp │ │ │ ├── import.tsp │ │ │ ├── log.tsp │ │ │ ├── main.tsp │ │ │ ├── private/ │ │ │ │ ├── auth-adapter.tsp │ │ │ │ └── node-js-executor.tsp │ │ │ ├── reference.tsp │ │ │ ├── user.tsp │ │ │ ├── websocket.tsp │ │ │ └── workspace.tsp │ │ ├── buf.gen.yaml │ │ ├── buf.yaml │ │ ├── eslint.config.ts │ │ ├── go.mod │ │ ├── go.sum │ │ ├── lib/ │ │ │ └── collect-file-descriptors.ts │ │ ├── package.json │ │ ├── project.json │ │ ├── tsconfig.json │ │ ├── tsconfig.lib.json │ │ └── tspconfig.yaml │ ├── ui/ │ │ ├── .storybook/ │ │ │ ├── main.ts │ │ │ ├── manager.ts │ │ │ └── preview.tsx │ │ ├── eslint.config.ts │ │ ├── package.json │ │ ├── project.json │ │ ├── src/ │ │ │ ├── add-button.stories.tsx │ │ │ ├── add-button.tsx │ │ │ ├── avatar.button.stories.tsx │ │ │ ├── avatar.stories.tsx │ │ │ ├── avatar.tsx │ │ │ ├── badge.stories.tsx │ │ │ ├── badge.tsx │ │ │ ├── button.as-link.stories.tsx │ │ │ ├── button.stories.tsx │ │ │ ├── button.tsx │ │ │ ├── checkbox.stories.tsx │ │ │ ├── checkbox.tsx │ │ │ ├── field.tsx │ │ │ ├── file-drop-zone.tsx │ │ │ ├── focus-ring.tsx │ │ │ ├── icons.tsx │ │ │ ├── illustrations.tsx │ │ │ ├── index.tsx │ │ │ ├── json-tree.stories.tsx │ │ │ ├── json-tree.tsx │ │ │ ├── link.tsx │ │ │ ├── list-box.stories.tsx │ │ │ ├── list-box.tsx │ │ │ ├── menu.stories.tsx │ │ │ ├── menu.tsx │ │ │ ├── method-badge.stories.tsx │ │ │ ├── method-badge.tsx │ │ │ ├── modal.stories.tsx │ │ │ ├── modal.tsx │ │ │ ├── number-field.tsx │ │ │ ├── popover.tsx │ │ │ ├── primitives/ │ │ │ │ ├── index.tsx │ │ │ │ └── list-box.tsx │ │ │ ├── progress-bar.tsx │ │ │ ├── provider.tsx │ │ │ ├── radio-group.tsx │ │ │ ├── reorder.tsx │ │ │ ├── resizable-panel.tsx │ │ │ ├── select.stories.tsx │ │ │ ├── select.tsx │ │ │ ├── separator.tsx │ │ │ ├── spinner.stories.tsx │ │ │ ├── spinner.tsx │ │ │ ├── styles/ │ │ │ │ ├── colors/ │ │ │ │ │ ├── dark.css │ │ │ │ │ ├── index.css │ │ │ │ │ └── light.css │ │ │ │ └── index.css │ │ │ ├── table.tsx │ │ │ ├── tag-group.stories.tsx │ │ │ ├── tag-group.tsx │ │ │ ├── tailwind-literal.tsx │ │ │ ├── text-field.tsx │ │ │ ├── theme.tsx │ │ │ ├── toast.tsx │ │ │ ├── tree.stories.tsx │ │ │ ├── tree.tsx │ │ │ ├── utils/ │ │ │ │ └── link.tsx │ │ │ └── utils.tsx │ │ ├── tsconfig.json │ │ └── tsconfig.lib.json │ └── worker-js/ │ ├── eslint.config.ts │ ├── package.json │ ├── project.json │ ├── src/ │ │ ├── main.ts │ │ └── nodejs-executor.ts │ ├── tsconfig.json │ └── tsup.config.ts ├── patches/ │ ├── @effect__platform-node-shared.patch │ ├── @nx__eslint.patch │ └── @react-stately__table.patch ├── pnpm-workspace.yaml ├── prettier.config.mjs ├── project.json ├── scoop.json ├── syncpack.config.mjs ├── taskfile.yaml ├── tools/ │ ├── benchmark/ │ │ ├── compare.go │ │ ├── go.mod │ │ ├── main.go │ │ ├── parser.go │ │ └── types.go │ ├── eslint/ │ │ ├── config.ts │ │ ├── eslint.config.ts │ │ ├── package.json │ │ ├── project.json │ │ ├── tsconfig.json │ │ └── tsconfig.lib.json │ ├── gha-scripts/ │ │ ├── eslint.config.ts │ │ ├── package.json │ │ ├── project.json │ │ ├── src/ │ │ │ ├── cli.ts │ │ │ └── repository.ts │ │ ├── tsconfig.json │ │ └── tsconfig.lib.json │ ├── go-tool/ │ │ ├── go.mod │ │ └── go.sum │ ├── modmigrate/ │ │ ├── go.mod │ │ ├── go.sum │ │ └── main.go │ ├── norawsql/ │ │ ├── cmd/ │ │ │ └── norawsql/ │ │ │ └── main.go │ │ ├── go.mod │ │ ├── go.sum │ │ ├── norawsql.go │ │ ├── norawsql_test.go │ │ └── testdata/ │ │ └── src/ │ │ └── rawsql/ │ │ └── rawsql.go │ ├── notxread/ │ │ ├── cmd/ │ │ │ └── notxread/ │ │ │ └── main.go │ │ ├── go.mod │ │ ├── go.sum │ │ ├── notxread.go │ │ ├── notxread_test.go │ │ └── testdata/ │ │ └── src/ │ │ └── txread/ │ │ ├── complex_test.go │ │ ├── original_bug_test.go │ │ └── txread.go │ ├── nx-release/ │ │ └── renderer.cjs │ ├── spec-lib/ │ │ ├── eslint.config.ts │ │ ├── package.json │ │ ├── project.json │ │ ├── src/ │ │ │ ├── ai-tools/ │ │ │ │ ├── emitter.tsx │ │ │ │ ├── field-schema.ts │ │ │ │ ├── index.ts │ │ │ │ ├── lib.ts │ │ │ │ └── main.tsp │ │ │ ├── common.ts │ │ │ ├── core/ │ │ │ │ ├── index.tsx │ │ │ │ └── main.tsp │ │ │ ├── protobuf/ │ │ │ │ ├── emitter.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── lib.ts │ │ │ │ └── main.tsp │ │ │ ├── tanstack-db/ │ │ │ │ ├── emitter.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── lib.ts │ │ │ │ └── main.tsp │ │ │ └── utils.ts │ │ ├── tsconfig.json │ │ └── tsconfig.lib.json │ └── storybook/ │ ├── .storybook/ │ │ ├── Introduction.mdx │ │ └── main.ts │ ├── eslint.config.ts │ ├── package.json │ ├── project.json │ ├── tsconfig.json │ └── tsconfig.lib.json ├── tsconfig.base.json └── tsconfig.json
Showing preview only (907K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (8790 symbols across 954 files)
FILE: apps/api-recorder-extension/src/layout.tsx
type LayoutProps (line 4) | interface LayoutProps extends React.ComponentPropsWithoutRef<'div'> {
FILE: apps/api-recorder-extension/src/popup.tsx
class LoginFormData (line 38) | class LoginFormData extends Schema.Class<LoginFormData>('LoginFormData')({
type RecorderLayoutProps (line 90) | interface RecorderLayoutProps {
type SelectedItem (line 206) | interface SelectedItem extends Omit<Postman.Item, 'item'> {
FILE: apps/api-recorder-extension/src/postman.ts
constant DEFAULT_NAME (line 7) | const DEFAULT_NAME = 'API Recorder Collection';
constant DEFAULT_SCHEMA (line 8) | const DEFAULT_SCHEMA = 'https://schema.getpostman.com/json/collection/v2...
type AuthType (line 23) | type AuthType = S.Schema.Type<typeof AuthType>;
type VariableType (line 26) | type VariableType = S.Schema.Type<typeof VariableType>;
type FormParameterType (line 29) | type FormParameterType = S.Schema.Type<typeof FormParameterType>;
type Mode (line 32) | type Mode = S.Schema.Type<typeof Mode>;
class Cookie (line 34) | class Cookie extends S.Class<Cookie>('Cookie')({
class Response (line 48) | class Response extends S.Class<Response>('Response')({
class ProxyConfig (line 77) | class ProxyConfig extends S.Class<ProxyConfig>('ProxyConfig')({
class Header (line 85) | class Header extends S.Class<Header>('Header')({
class Key (line 98) | class Key extends S.Class<Key>('Key')({
class Cert (line 102) | class Cert extends S.Class<Cert>('Cert')({
class Certificate (line 106) | class Certificate extends S.Class<Certificate>('Certificate')({
class UrlEncodedParameter (line 114) | class UrlEncodedParameter extends S.Class<UrlEncodedParameter>('UrlEncod...
class FormParameter (line 127) | class FormParameter extends S.Class<FormParameter>('FormParameter')({
class File (line 143) | class File extends S.Class<File>('File')({
class Body (line 148) | class Body extends S.Class<Body>('Body')({
class RequestClass (line 159) | class RequestClass extends S.Class<RequestClass>('RequestClass')({
class Item (line 187) | class Item extends S.Class<Item>('Item')({
class CollectionVersionClass (line 211) | class CollectionVersionClass extends S.Class<CollectionVersionClass>('Co...
class Information (line 219) | class Information extends S.Class<Information>('Information')({
class Variable (line 233) | class Variable extends S.Class<Variable>('Variable')({
class Description (line 250) | class Description extends S.Class<Description>('Description')({
class QueryParam (line 256) | class QueryParam extends S.Class<QueryParam>('QueryParam')({
class PathClass (line 263) | class PathClass extends S.Class<PathClass>('PathClass')({
class UrlClass (line 268) | class UrlClass extends S.Class<UrlClass>('UrlClass')({
class Script (line 279) | class Script extends S.Class<Script>('Script')({
class Event (line 287) | class Event extends S.Class<Event>('Event')({
class ApikeyElement (line 294) | class ApikeyElement extends S.Class<ApikeyElement>('ApikeyElement')({
class Auth (line 300) | class Auth extends S.Class<Auth>('Auth')({
class Collection (line 315) | class Collection extends S.Class<Collection>('Collection')({
FILE: apps/api-recorder-extension/src/recorder.ts
type WatchProps (line 257) | interface WatchProps {
FILE: apps/api-recorder-extension/src/tabs/auth-callback.tsx
type FeaturedIconProps (line 16) | interface FeaturedIconProps extends React.ComponentPropsWithoutRef<'div'> {
FILE: apps/api-recorder-extension/src/ui/button.tsx
type ButtonProps (line 29) | interface ButtonProps extends RAC.ButtonProps, VariantProps<typeof butto...
FILE: apps/cli/cmd/config.go
type DefaultConfig (line 9) | type DefaultConfig struct
FILE: apps/cli/cmd/flow.go
function init (line 36) | func init() {
function checkFlowsHaveJSNodes (line 340) | func checkFlowsHaveJSNodes(ctx context.Context, flows []mflow.Flow, c *c...
function processYAMLCredentials (line 359) | func processYAMLCredentials(ctx context.Context, credentials []yamlflows...
function interpolateValue (line 483) | func interpolateValue(env *expression.UnifiedEnv, value string) (string,...
FILE: apps/cli/cmd/import.go
function init (line 26) | func init() {
FILE: apps/cli/cmd/root.go
constant ConfigFileName (line 29) | ConfigFileName = ".devtools"
constant ConfigFileExtension (line 30) | ConfigFileExtension = ".yaml"
function init (line 33) | func init() {
function Execute (line 47) | func Execute() {
function initConfig (line 53) | func initConfig() {
FILE: apps/cli/cmd/version.go
function init (line 9) | func init() {
constant version (line 13) | version = "v0.1.0"
FILE: apps/cli/internal/common/services.go
type Services (line 20) | type Services struct
function CreateServices (line 78) | func CreateServices(ctx context.Context, db *sql.DB, logger *slog.Logger...
FILE: apps/cli/internal/importer/importer.go
type ImportCallback (line 14) | type ImportCallback
function RunImport (line 17) | func RunImport(ctx context.Context, logger *slog.Logger, workspaceID, fo...
FILE: apps/cli/internal/importer/importer_test.go
function TestRunImport_FailsOnMissingWorkspace (line 13) | func TestRunImport_FailsOnMissingWorkspace(t *testing.T) {
FILE: apps/cli/internal/model/result.go
type IterationContextResult (line 7) | type IterationContextResult struct
type NodeRunResult (line 13) | type NodeRunResult struct
type FlowRunResult (line 24) | type FlowRunResult struct
FILE: apps/cli/internal/reporter/reporter.go
type FlowStartInfo (line 19) | type FlowStartInfo struct
type NodeStatusEvent (line 26) | type NodeStatusEvent struct
type Reporter (line 32) | type Reporter interface
type ReporterGroup (line 39) | type ReporterGroup struct
method HandleFlowStart (line 44) | func (g *ReporterGroup) HandleFlowStart(info FlowStartInfo) {
method HandleNodeStatus (line 50) | func (g *ReporterGroup) HandleNodeStatus(event NodeStatusEvent) {
method HandleFlowResult (line 56) | func (g *ReporterGroup) HandleFlowResult(result model.FlowRunResult) {
method Flush (line 62) | func (g *ReporterGroup) Flush() error {
method HasConsole (line 72) | func (g *ReporterGroup) HasConsole() bool {
type ReportSpec (line 76) | type ReportSpec struct
constant ReportFormatConsole (line 82) | ReportFormatConsole = "console"
constant ReportFormatJSON (line 83) | ReportFormatJSON = "json"
constant ReportFormatJUnit (line 84) | ReportFormatJUnit = "junit"
function ParseReportSpecs (line 87) | func ParseReportSpecs(values []string) ([]ReportSpec, error) {
type ReporterOptions (line 132) | type ReporterOptions struct
function NewReporterGroup (line 136) | func NewReporterGroup(specs []ReportSpec, opts ReporterOptions) (*Report...
type jsonReporter (line 165) | type jsonReporter struct
method HandleFlowStart (line 175) | func (j *jsonReporter) HandleFlowStart(info FlowStartInfo) {}
method HandleNodeStatus (line 177) | func (j *jsonReporter) HandleNodeStatus(event NodeStatusEvent) {}
method HandleFlowResult (line 179) | func (j *jsonReporter) HandleFlowResult(result model.FlowRunResult) {
method Flush (line 185) | func (j *jsonReporter) Flush() error {
function newJSONReporter (line 171) | func newJSONReporter(path string) Reporter {
type junitReporter (line 209) | type junitReporter struct
method HandleFlowStart (line 219) | func (j *junitReporter) HandleFlowStart(info FlowStartInfo) {}
method HandleNodeStatus (line 221) | func (j *junitReporter) HandleNodeStatus(event NodeStatusEvent) {}
method HandleFlowResult (line 223) | func (j *junitReporter) HandleFlowResult(result model.FlowRunResult) {
method Flush (line 256) | func (j *junitReporter) Flush() error {
function newJUnitReporter (line 215) | func newJUnitReporter(path string) Reporter {
type junitTestSuites (line 229) | type junitTestSuites struct
type junitTestSuite (line 234) | type junitTestSuite struct
type junitTestCase (line 243) | type junitTestCase struct
type junitFailure (line 250) | type junitFailure struct
type consoleReporter (line 321) | type consoleReporter struct
method flowKey (line 343) | func (c *consoleReporter) flowKey(info FlowStartInfo) string {
method HandleFlowStart (line 350) | func (c *consoleReporter) HandleFlowStart(info FlowStartInfo) {
method HandleNodeStatus (line 407) | func (c *consoleReporter) HandleNodeStatus(event NodeStatusEvent) {
method HandleFlowResult (line 443) | func (c *consoleReporter) HandleFlowResult(result model.FlowRunResult) {
method Flush (line 461) | func (c *consoleReporter) Flush() error {
method printOutputData (line 468) | func (c *consoleReporter) printOutputData(data any, nodeName string) {
method printAIMetrics (line 493) | func (c *consoleReporter) printAIMetrics(totalMetrics any, dataMap map...
method printProviderMetrics (line 549) | func (c *consoleReporter) printProviderMetrics(metrics any, dataMap ma...
method printAsJSON (line 590) | func (c *consoleReporter) printAsJSON(data any, nodeName string) {
type consoleFlowState (line 327) | type consoleFlowState struct
function newConsoleReporter (line 336) | func newConsoleReporter(showOutput bool) Reporter {
function formatNumber (line 601) | func formatNumber(v any) string {
function FormatDuration (line 619) | func FormatDuration(d time.Duration) string {
FILE: apps/cli/internal/reporter/reporter_test.go
function TestParseReportSpecsDefault (line 15) | func TestParseReportSpecsDefault(t *testing.T) {
function TestParseReportSpecsRequiresPath (line 28) | func TestParseReportSpecsRequiresPath(t *testing.T) {
function TestJSONReporterFlush (line 38) | func TestJSONReporterFlush(t *testing.T) {
function TestJUnitReporterFlush (line 110) | func TestJUnitReporterFlush(t *testing.T) {
FILE: apps/cli/internal/runner/jsrunner.go
constant jsWorkerStartupTimeout (line 20) | jsWorkerStartupTimeout = 30 * time.Second
constant jsWorkerHealthInterval (line 21) | jsWorkerHealthInterval = 1 * time.Second
constant jsWorkerInitialWait (line 22) | jsWorkerInitialWait = 2 * time.Second
type JSRunner (line 26) | type JSRunner struct
method Start (line 92) | func (r *JSRunner) Start(ctx context.Context) error {
method isHealthy (line 138) | func (r *JSRunner) isHealthy() bool {
method Client (line 171) | func (r *JSRunner) Client() node_js_executorv1connect.NodeJsExecutorSe...
method Stop (line 176) | func (r *JSRunner) Stop() {
function NewJSRunner (line 35) | func NewJSRunner() (*JSRunner, error) {
FILE: apps/cli/internal/runner/runner.go
type RunnerServices (line 33) | type RunnerServices struct
function RunMultipleFlows (line 42) | func RunMultipleFlows(ctx context.Context, fileData []byte, allFlows []m...
function RunFlow (line 179) | func RunFlow(ctx context.Context, flowPtr *mflow.Flow, services RunnerSe...
function buildNodeRunResult (line 386) | func buildNodeRunResult(status runner.FlowNodeStatus) model.NodeRunResult {
FILE: apps/cli/internal/runner/runner_test.go
type flowTestFixture (line 37) | type flowTestFixture struct
method getRunnerServices (line 231) | func (f *flowTestFixture) getRunnerServices(jsClient node_js_executorv...
method importWorkspaceBundle (line 242) | func (f *flowTestFixture) importWorkspaceBundle(bundle *ioworkspace.Wo...
method getFlowByName (line 265) | func (f *flowTestFixture) getFlowByName(name string) *mflow.Flow {
function newFlowTestFixture (line 50) | func newFlowTestFixture(t *testing.T) *flowTestFixture {
function TestFlowRun_SimpleYAML (line 283) | func TestFlowRun_SimpleYAML(t *testing.T) {
function TestFlowRun_MultiFlow (line 350) | func TestFlowRun_MultiFlow(t *testing.T) {
function TestFlowRun_RequestNode (line 414) | func TestFlowRun_RequestNode(t *testing.T) {
function TestFlowRun_FlowNotFound (line 485) | func TestFlowRun_FlowNotFound(t *testing.T) {
function TestFlowRun_HTTPMethods (line 530) | func TestFlowRun_HTTPMethods(t *testing.T) {
function TestFlowRun_JSNode (line 612) | func TestFlowRun_JSNode(t *testing.T) {
function TestFlowRun_OrphanNodesNotExecuted (line 698) | func TestFlowRun_OrphanNodesNotExecuted(t *testing.T) {
function echoWSServer (line 790) | func echoWSServer(t *testing.T) *httptest.Server {
function wsURL (line 810) | func wsURL(s *httptest.Server) string {
function TestFlowRun_WebSocket (line 815) | func TestFlowRun_WebSocket(t *testing.T) {
FILE: apps/cli/main.go
constant EnvDevToolsMode (line 12) | EnvDevToolsMode = "DEVTOOLS_MODE"
constant ModeServer (line 13) | ModeServer = "server"
constant ModeCLI (line 14) | ModeCLI = "cli"
function main (line 20) | func main() {
FILE: apps/cli/mode_cli.go
function init (line 7) | func init() {
FILE: apps/cli/test/yamlflow/integration_yamlflow_test.go
function TestMain (line 14) | func TestMain(m *testing.M) {
function runCLI (line 42) | func runCLI(t *testing.T, yamlFile string) {
function TestYAMLFlow_SimpleRun (line 60) | func TestYAMLFlow_SimpleRun(t *testing.T) {
function TestYAMLFlow_MultiFlowRun (line 64) | func TestYAMLFlow_MultiFlowRun(t *testing.T) {
function TestYAMLFlow_ExampleRun (line 68) | func TestYAMLFlow_ExampleRun(t *testing.T) {
function TestYAMLFlow_TestRunField (line 72) | func TestYAMLFlow_TestRunField(t *testing.T) {
function TestYAMLFlow_GraphQLRun (line 76) | func TestYAMLFlow_GraphQLRun(t *testing.T) {
FILE: apps/desktop/src/main/update.ts
type UpdateOptions (line 8) | interface UpdateOptions {
type CustomPublishOptions (line 18) | interface CustomPublishOptions {
class CustomUpdateProvider (line 61) | class CustomUpdateProvider extends UpdateProvider<UpdateInfo> {
method constructor (line 64) | constructor(
method getLatestVersion (line 75) | async getLatestVersion() {
method resolveFiles (line 90) | resolveFiles(updateInfo: UpdateInfo) {
FILE: apps/desktop/src/renderer/env.d.ts
type Window (line 6) | interface Window {
FILE: apps/desktop/src/renderer/main.tsx
type UpdateAvailableProps (line 51) | interface UpdateAvailableProps {
FILE: packages/auth-lib/jwks/jwks.go
type Claims (line 22) | type Claims struct
function ValidateJWT (line 29) | func ValidateJWT(tokenString string, keyfunc jwt.Keyfunc) (*Claims, erro...
type Response (line 44) | type Response struct
type Key (line 49) | type Key struct
function FetchJWKS (line 63) | func FetchJWKS(url string) (map[string]*rsa.PublicKey, error) {
function ParseJWKS (line 83) | func ParseJWKS(keys []Key) (map[string]*rsa.PublicKey, error) {
function parseRSAPublicKey (line 106) | func parseRSAPublicKey(key Key) (*rsa.PublicKey, error) {
function NewJWKSKeyfunc (line 127) | func NewJWKSKeyfunc(keys map[string]*rsa.PublicKey) jwt.Keyfunc {
type Provider (line 154) | type Provider struct
method Start (line 212) | func (p *Provider) Start(ctx context.Context) {
method Keyfunc (line 235) | func (p *Provider) Keyfunc() jwt.Keyfunc {
type ProviderOption (line 162) | type ProviderOption
function WithRefreshInterval (line 165) | func WithRefreshInterval(d time.Duration) ProviderOption {
function WithInitialRetries (line 173) | func WithInitialRetries(attempts int) ProviderOption {
function NewProvider (line 181) | func NewProvider(url string, opts ...ProviderOption) (*Provider, error) {
FILE: packages/auth-lib/jwks/jwks_test.go
function generateTestKey (line 19) | func generateTestKey(t *testing.T, kid string) (*rsa.PrivateKey, Key) {
function base64RawURL (line 35) | func base64RawURL(data []byte) string {
function serveJWKS (line 60) | func serveJWKS(t *testing.T, keys []Key) *httptest.Server {
function TestProvider_InitialFetch (line 68) | func TestProvider_InitialFetch(t *testing.T) {
function TestProvider_InitialFetchFailure (line 104) | func TestProvider_InitialFetchFailure(t *testing.T) {
function TestProvider_BackgroundRefresh (line 111) | func TestProvider_BackgroundRefresh(t *testing.T) {
function TestProvider_RefreshFailureKeepsOldKeys (line 162) | func TestProvider_RefreshFailureKeepsOldKeys(t *testing.T) {
function TestProvider_ContextCancellation (line 197) | func TestProvider_ContextCancellation(t *testing.T) {
function signTestToken (line 215) | func signTestToken(t *testing.T, priv *rsa.PrivateKey, kid, sub string) ...
FILE: packages/auth/src/adapter.test.ts
class Server (line 12) | class Server extends Effect.Service<Server>()('Server', {
type Schema (line 78) | type Schema = Record<string, { fields: Record<string, { type: 'boolean' ...
FILE: packages/auth/src/adapter.ts
type CustomAdapterConfig (line 27) | interface CustomAdapterConfig {
FILE: packages/client/src/app/context.tsx
type RouterContext (line 8) | interface RouterContext {
FILE: packages/client/src/app/env.d.ts
type Window (line 6) | interface Window {
FILE: packages/client/src/app/import-meta.d.ts
type ImportMeta (line 1) | interface ImportMeta {
FILE: packages/client/src/app/index.tsx
type AppProps (line 35) | interface AppProps {
FILE: packages/client/src/app/router/index.tsx
type Register (line 12) | interface Register {
FILE: packages/client/src/app/router/route-tree.gen.ts
type FileRoutesByFullPath (line 178) | interface FileRoutesByFullPath {
type FileRoutesByTo (line 197) | interface FileRoutesByTo {
type FileRoutesById (line 211) | interface FileRoutesById {
type FileRouteTypes (line 231) | interface FileRouteTypes {
type RootRouteChildren (line 286) | interface RootRouteChildren {
type FileRoutesByPath (line 294) | interface FileRoutesByPath {
type dashboardDotDotDotDotDotDotDotDotPagesDashboardRoutesDotDotDotDotFlowRoutesFlowFlowIdCanRouteRouteChildren (line 417) | interface dashboardDotDotDotDotDotDotDotDotPagesDashboardRoutesDotDotDot...
type dashboardDotDotDotDotDotDotDotDotPagesDashboardRoutesDotDotDotDotGraphqlRoutesGraphqlGraphqlIdCanRouteRouteChildren (line 435) | interface dashboardDotDotDotDotDotDotDotDotPagesDashboardRoutesDotDotDot...
type dashboardDotDotDotDotDotDotDotDotPagesDashboardRoutesDotDotDotDotHttpRoutesHttpHttpIdCanRouteRouteChildren (line 453) | interface dashboardDotDotDotDotDotDotDotDotPagesDashboardRoutesDotDotDot...
type dashboardDotDotDotDotDotDotDotDotPagesDashboardRoutesDotDotDotDotWebsocketRoutesWebsocketWebsocketIdCanRouteRouteChildren (line 471) | interface dashboardDotDotDotDotDotDotDotDotPagesDashboardRoutesDotDotDot...
type dashboardDotDotDotDotDotDotDotDotPagesDashboardRoutesDotDotDotDotWorkspaceRoutesWorkspaceWorkspaceIdCanRouteRouteChildren (line 486) | interface dashboardDotDotDotDotDotDotDotDotPagesDashboardRoutesDotDotDot...
FILE: packages/client/src/app/umami.tsx
type Umami (line 4) | interface Umami {
FILE: packages/client/src/features/agent/agent-logger.ts
type AgentLogIpc (line 8) | interface AgentLogIpc {
type LogEntry (line 13) | interface LogEntry {
class AgentLogger (line 31) | class AgentLogger {
method constructor (line 39) | constructor(flowId: string) {
method write (line 48) | private write(entry: LogEntry) {
method flush (line 54) | private flush() {
method logSessionStart (line 63) | logSessionStart(flowId: string, messageContent: string) {
method logSessionEnd (line 73) | logSessionEnd(success: boolean, aborted: boolean) {
method logSystemPrompt (line 86) | logSystemPrompt(prompt: string, contextStats: { edges: number; nodes: ...
method logUserMessage (line 96) | logUserMessage(content: string) {
method logAssistantMessage (line 105) | logAssistantMessage(content: string) {
method logApiRequest (line 114) | logApiRequest(model: string, messageCount: number, hasTools: boolean) {
method logApiResponse (line 125) | logApiResponse(
method logToolCallStart (line 140) | logToolCallStart(toolCallId: string, toolName: string, args: Record<st...
method logToolCallEnd (line 151) | logToolCallEnd(toolCallId: string, toolName: string, durationMs: numbe...
method logValidation (line 164) | logValidation(orphanCount: number, orphanNames: string[]) {
method logError (line 174) | logError(error: unknown, phase: string) {
method close (line 188) | close() {
FILE: packages/client/src/features/agent/context-builder.ts
constant NODE_KIND_NAMES (line 19) | const NODE_KIND_NAMES: Record<number, string> = {
constant FLOW_ITEM_STATE_NAMES (line 31) | const FLOW_ITEM_STATE_NAMES: Record<number, string> = {
constant HTTP_METHOD_NAMES (line 39) | const HTTP_METHOD_NAMES: Record<number, string> = {
type FlowCollections (line 193) | interface FlowCollections {
FILE: packages/client/src/features/agent/layout.ts
type LayoutOrientation (line 3) | type LayoutOrientation = 'horizontal' | 'vertical';
type LayoutConfig (line 5) | interface LayoutConfig {
type Position (line 13) | interface Position {
type LayoutResult (line 18) | interface LayoutResult {
FILE: packages/client/src/features/agent/tool-executor.ts
type CollectionUtils (line 12) | type CollectionUtils = ReturnType<typeof import('~/shared/api').useApiCo...
type CollectionData (line 13) | type CollectionData = ReturnType<typeof import('~/shared/api').useApiCol...
function normalizeJsCodeReferences (line 19) | function normalizeJsCodeReferences(code: string): string {
function normalizeConditionSyntax (line 33) | function normalizeConditionSyntax(expr: string): string {
function normalizeNodeName (line 53) | function normalizeNodeName(name: string): string {
type Collections (line 58) | interface Collections {
type ToolExecutorContext (line 81) | interface ToolExecutorContext {
constant HANDLE_KIND_MAP (line 92) | const HANDLE_KIND_MAP: Record<string, HandleKind> = {
constant HTTP_METHOD_MAP (line 99) | const HTTP_METHOD_MAP: Record<string, HttpMethod> = {
constant NODE_KIND_NAMES (line 109) | const NODE_KIND_NAMES: Record<number, string> = {
constant FLOW_ITEM_STATE_NAMES (line 121) | const FLOW_ITEM_STATE_NAMES: Record<number, string> = {
constant AGENT_MAX_FILE_ORDER (line 129) | const AGENT_MAX_FILE_ORDER = 1_000_000_000;
constant MUTATION_TOOLS (line 162) | const MUTATION_TOOLS = new Set([
FILE: packages/client/src/features/agent/tool-schemas.ts
type ToolDefinition (line 19) | interface ToolDefinition {
function resolveRefs (line 30) | function resolveRefs(obj: unknown, defs: Record<string, unknown>): unkno...
function schemaToToolDefinition (line 62) | function schemaToToolDefinition<A, I, R>(schema: Schema.Schema<A, I, R>)...
function validateToolInput (line 184) | function validateToolInput(
FILE: packages/client/src/features/agent/types.ts
type MessageRole (line 3) | type MessageRole = 'assistant' | 'system' | 'tool' | 'user';
type Message (line 5) | interface Message {
type ToolCall (line 14) | interface ToolCall {
type ToolResult (line 20) | interface ToolResult {
type AgentChatState (line 27) | interface AgentChatState {
type FlowContextData (line 34) | interface FlowContextData {
type NodeInfo (line 43) | interface NodeInfo {
type NodeExecutionInfo (line 55) | interface NodeExecutionInfo {
type EdgeInfo (line 66) | interface EdgeInfo {
type VariableInfo (line 73) | interface VariableInfo {
type ToolSchema (line 80) | interface ToolSchema {
type OpenAIMessage (line 100) | type OpenAIMessage = ChatCompletionMessageParam;
FILE: packages/client/src/features/agent/use-agent-chat.ts
constant DEFAULT_MODELS (line 61) | const DEFAULT_MODELS: Record<AgentProvider, string> = {
type StreamedMessage (line 119) | interface StreamedMessage {
type StreamMeta (line 128) | interface StreamMeta {
type NodeCollection (line 203) | type NodeCollection = ReturnType<typeof useApiCollection<typeof NodeColl...
type EdgeCollection (line 204) | type EdgeCollection = ReturnType<typeof useApiCollection<typeof EdgeColl...
constant NODE_KIND_NAMES (line 206) | const NODE_KIND_NAMES: Record<number, string> = {
type UseAgentChatOptions (line 586) | interface UseAgentChatOptions {
type ChatStoreEntry (line 604) | interface ChatStoreEntry {
method getAbortController (line 613) | getAbortController(key: string): AbortController | null {
method getState (line 617) | getState(key: string): AgentChatState {
method notify (line 626) | notify(key: string) {
method setAbortController (line 632) | setAbortController(key: string, ac: AbortController | null) {
method setState (line 641) | setState(key: string, updater: ((prev: AgentChatState) => AgentChatState...
method subscribe (line 651) | subscribe(key: string, callback: () => void): () => void {
FILE: packages/client/src/features/agent/use-agent-provider-key.ts
type AgentProvider (line 3) | type AgentProvider = 'anthropic' | 'openai' | 'openrouter';
constant PROVIDER_STORAGE_KEY (line 5) | const PROVIDER_STORAGE_KEY = 'agent-provider';
constant API_KEY_STORAGE_KEYS (line 6) | const API_KEY_STORAGE_KEYS: Record<AgentProvider, string> = {
constant DEFAULT_PROVIDER (line 12) | const DEFAULT_PROVIDER: AgentProvider = 'openrouter';
FILE: packages/client/src/features/delta/index.tsx
type UseDeltaStateProps (line 16) | interface UseDeltaStateProps<
type Value (line 38) | type Value = MessageShape<Schema['item']>[Key];
type DeltaResetButtonProps (line 152) | interface DeltaResetButtonProps<
type DeltaOptions (line 206) | interface DeltaOptions<TOriginSchema extends ApiCollectionSchema, TDelta...
type UseDeltaColumnStateProps (line 215) | interface UseDeltaColumnStateProps<
type DeltaCheckboxProps (line 276) | interface DeltaCheckboxProps<
type DeltaTextFieldProps (line 303) | interface DeltaTextFieldProps<
type DeltaReferenceProps (line 334) | interface DeltaReferenceProps<
FILE: packages/client/src/features/expression/code-mirror/drop-extension.ts
type DropFormat (line 7) | type DropFormat = 'full-expression' | 'javascript' | 'string-expression';
constant MIME (line 9) | const MIME = 'application/x-devtools-reference';
method dragenter (line 27) | dragenter(event, view) {
method dragleave (line 33) | dragleave(event, view) {
method dragover (line 39) | dragover(event) {
method drop (line 46) | drop(event, view) {
FILE: packages/client/src/features/expression/code-mirror/extensions.tsx
type CodeMirrorMarkupLanguage (line 40) | type CodeMirrorMarkupLanguage = (typeof CodeMirrorMarkupLanguages)[number];
type CodeMirrorLanguage (line 43) | type CodeMirrorLanguage = (typeof CodeMirrorLanguages)[number];
type BuiltinMethod (line 66) | interface BuiltinMethod {
type BuiltinFunction (line 74) | interface BuiltinFunction {
constant BUILTIN_FUNCTIONS (line 82) | const BUILTIN_FUNCTIONS: BuiltinFunction[] = [
type CompletionInfoProps (line 143) | interface CompletionInfoProps {
type ReferenceCompletionsProps (line 187) | interface ReferenceCompletionsProps {
type LanguageProps (line 386) | interface LanguageProps extends ReferenceCompletionsProps {
type BaseCodeMirrorExtensionProps (line 482) | interface BaseCodeMirrorExtensionProps extends LanguageProps {
FILE: packages/client/src/features/expression/prettier.tsx
type PrettierFormatProps (line 6) | interface PrettierFormatProps {
FILE: packages/client/src/features/expression/reference.tsx
type ReferenceContextProps (line 34) | interface ReferenceContextProps extends Partial<Omit<ReferenceContextMes...
type ReferenceTreeProps (line 38) | interface ReferenceTreeProps extends ReferenceContextProps {
type ReferenceTreeItemProps (line 81) | interface ReferenceTreeItemProps {
type ReferenceFieldProps (line 182) | interface ReferenceFieldProps
FILE: packages/client/src/features/file-system/index.tsx
type FileCreateMenuProps (line 95) | interface FileCreateMenuProps {
type FileTreeContext (line 261) | interface FileTreeContext {
type FileTreeProps (line 270) | interface FileTreeProps
type FileItemProps (line 363) | interface FileItemProps {
FILE: packages/client/src/features/form-table/index.tsx
type ColumnActionDeleteProps (line 6) | interface ColumnActionDeleteProps {
FILE: packages/client/src/pages/credential/routes/credential/$credentialIdCan/index.tsx
function RouteComponent (line 69) | function RouteComponent() {
FILE: packages/client/src/pages/credential/tab.tsx
type CredentialTabProps (line 14) | interface CredentialTabProps {
FILE: packages/client/src/pages/dashboard/routes/index.tsx
function RouteComponent (line 36) | function RouteComponent() {
type ItemProps (line 103) | interface ItemProps {
FILE: packages/client/src/pages/flow/add-node.tsx
type AddNodeSidebarProps (line 57) | interface AddNodeSidebarProps {
type SidebarHeaderProps (line 93) | interface SidebarHeaderProps {
type SidebarItemProps (line 118) | interface SidebarItemProps {
type InsertNodeProps (line 140) | interface InsertNodeProps {
FILE: packages/client/src/pages/flow/agent-panel.tsx
constant TOOL_OVERRIDES (line 20) | const TOOL_OVERRIDES: Record<string, [active: string, done: string, labe...
constant VERB_PAIRS (line 25) | const VERB_PAIRS: Record<string, [active: string, done: string]> = {
constant PROVIDER_OPTIONS (line 62) | const PROVIDER_OPTIONS: Record<
type SelectedNodesBarProps (line 284) | interface SelectedNodesBarProps {
FILE: packages/client/src/pages/flow/context.tsx
type FlowContext (line 4) | interface FlowContext {
FILE: packages/client/src/pages/flow/edge.tsx
class EdgeClient (line 24) | class EdgeClient extends Schema.Class<EdgeClient>('EdgeClient')({
type ConnectionLineProps (line 185) | interface ConnectionLineProps extends Pick<
FILE: packages/client/src/pages/flow/edit.tsx
type TopBarProps (line 593) | interface TopBarProps {
FILE: packages/client/src/pages/flow/handle.tsx
type HandleProps (line 16) | interface HandleProps extends Omit<XF.HandleProps, 'children' | 'id'> {
FILE: packages/client/src/pages/flow/history.tsx
type TabProps (line 129) | interface TabProps {
type TabPanelProps (line 169) | interface TabPanelProps {
FILE: packages/client/src/pages/flow/node.tsx
class NodeClient (line 61) | class NodeClient extends Schema.Class<NodeClient>('NodeClient')({
type NodeBodyProps (line 238) | interface NodeBodyProps {
type NodeStateIndicatorProps (line 276) | interface NodeStateIndicatorProps {
type NodeTitleProps (line 316) | interface NodeTitleProps {
type NodeNameProps (line 329) | interface NodeNameProps {
type SimpleNodeProps (line 376) | interface SimpleNodeProps {
type NodeSettingsProps (line 402) | interface NodeSettingsProps {
type NodeSettingsContainerProps (line 406) | interface NodeSettingsContainerProps {
type NodeSettingsBodyProps (line 459) | interface NodeSettingsBodyProps {
type NodeSettingsInputProps (line 635) | interface NodeSettingsInputProps {
type NodeSettingsOutputProps (line 659) | interface NodeSettingsOutputProps {
type NodeSettingsBrowsePanelProps (line 683) | interface NodeSettingsBrowsePanelProps {
type UpstreamNodeOutputProps (line 784) | interface UpstreamNodeOutputProps {
FILE: packages/client/src/pages/flow/nodes/sub-flow-trigger.tsx
type ParamRowProps (line 113) | interface ParamRowProps {
FILE: packages/client/src/pages/flow/routes/flow/$flowIdCan/route.tsx
function RouteComponent (line 40) | function RouteComponent() {
FILE: packages/client/src/pages/flow/tab.tsx
type FlowTabProps (line 11) | interface FlowTabProps {
FILE: packages/client/src/pages/flow/undo.ts
type EdgeSnapshot (line 9) | interface EdgeSnapshot {
type PasteOffset (line 16) | interface PasteOffset {
type UndoEntry (line 21) | type UndoEntry =
type UndoExecutors (line 28) | interface UndoExecutors {
constant MAX_STACK_SIZE (line 41) | const MAX_STACK_SIZE = 50;
class UndoStack (line 43) | class UndoStack {
method setExecutors (line 49) | setExecutors(executors: UndoExecutors) {
method push (line 53) | push(entry: UndoEntry) {
method undo (line 60) | async undo() {
method redo (line 72) | async redo() {
method clear (line 84) | clear() {
method canUndo (line 89) | get canUndo() {
method canRedo (line 93) | get canRedo() {
method executeInverse (line 98) | private async executeInverse(entry: UndoEntry): Promise<null | UndoEnt...
FILE: packages/client/src/pages/flow/viewport.tsx
constant VIEWPORT_MIN_ZOOM (line 9) | const VIEWPORT_MIN_ZOOM = 0.1;
constant VIEWPORT_MAX_ZOOM (line 10) | const VIEWPORT_MAX_ZOOM = 2;
class ViewportSchema (line 12) | class ViewportSchema extends Schema.Class<ViewportSchema>('ViewportSchem...
FILE: packages/client/src/pages/graphql/history.tsx
type HistoryModalProps (line 21) | interface HistoryModalProps {
type VersionProps (line 115) | interface VersionProps {
FILE: packages/client/src/pages/graphql/page.tsx
type PageProps (line 23) | interface PageProps {
FILE: packages/client/src/pages/graphql/request/assert.tsx
type GraphQLAssertTableProps (line 17) | interface GraphQLAssertTableProps {
FILE: packages/client/src/pages/graphql/request/header.tsx
type GraphQLHeaderTableProps (line 17) | interface GraphQLHeaderTableProps {
FILE: packages/client/src/pages/graphql/request/panel.tsx
type GraphQLRequestPanelProps (line 17) | interface GraphQLRequestPanelProps {
FILE: packages/client/src/pages/graphql/request/query-editor.tsx
type GraphQLQueryEditorProps (line 10) | interface GraphQLQueryEditorProps {
FILE: packages/client/src/pages/graphql/request/top-bar.tsx
type GraphQLTopBarProps (line 20) | interface GraphQLTopBarProps {
FILE: packages/client/src/pages/graphql/request/url.tsx
type GraphQLUrlProps (line 9) | interface GraphQLUrlProps {
FILE: packages/client/src/pages/graphql/request/variables-editor.tsx
type GraphQLVariablesEditorProps (line 12) | interface GraphQLVariablesEditorProps {
FILE: packages/client/src/pages/graphql/response/assert.tsx
type GraphQLAssertTableProps (line 9) | interface GraphQLAssertTableProps {
FILE: packages/client/src/pages/graphql/response/body.tsx
type GraphQLResponseBodyProps (line 15) | interface GraphQLResponseBodyProps {
FILE: packages/client/src/pages/graphql/response/header.tsx
type GraphQLResponseHeaderTableProps (line 8) | interface GraphQLResponseHeaderTableProps {
FILE: packages/client/src/pages/graphql/response/index.tsx
type GraphQLResponseInfoProps (line 25) | interface GraphQLResponseInfoProps {
type GraphQLResponsePanelProps (line 69) | interface GraphQLResponsePanelProps {
FILE: packages/client/src/pages/graphql/tab.tsx
type GraphQLTabProps (line 14) | interface GraphQLTabProps {
FILE: packages/client/src/pages/http/history.tsx
type HistoryModalProps (line 18) | interface HistoryModalProps {
type VersionProps (line 121) | interface VersionProps {
FILE: packages/client/src/pages/http/page.tsx
type PageProps (line 24) | interface PageProps {
FILE: packages/client/src/pages/http/request/assert.tsx
type AssertTableProps (line 17) | interface AssertTableProps {
FILE: packages/client/src/pages/http/request/body/form-data.tsx
type BodyFormDataTableProps (line 17) | interface BodyFormDataTableProps {
FILE: packages/client/src/pages/http/request/body/panel.tsx
type BodyPanelProps (line 11) | interface BodyPanelProps {
FILE: packages/client/src/pages/http/request/body/raw.tsx
type RawFormProps (line 26) | interface RawFormProps {
FILE: packages/client/src/pages/http/request/body/url-encoded.tsx
type BodyUrlEncodedTableProps (line 17) | interface BodyUrlEncodedTableProps {
FILE: packages/client/src/pages/http/request/header.tsx
type HeaderTableProps (line 17) | interface HeaderTableProps {
FILE: packages/client/src/pages/http/request/panel.tsx
type HttpRequestPanelProps (line 24) | interface HttpRequestPanelProps {
FILE: packages/client/src/pages/http/request/search-param.tsx
type SearchParamTableProps (line 17) | interface SearchParamTableProps {
FILE: packages/client/src/pages/http/request/top-bar.tsx
type HttpTopBarProps (line 21) | interface HttpTopBarProps {
FILE: packages/client/src/pages/http/request/url.tsx
type HttpUrlProps (line 26) | interface HttpUrlProps {
FILE: packages/client/src/pages/http/response/assert.tsx
type AssertTableProps (line 9) | interface AssertTableProps {
FILE: packages/client/src/pages/http/response/body.tsx
type BodyPanelProps (line 25) | interface BodyPanelProps {
type BodyPrettyProps (line 102) | interface BodyPrettyProps {
FILE: packages/client/src/pages/http/response/header.tsx
type HeaderTableProps (line 8) | interface HeaderTableProps {
FILE: packages/client/src/pages/http/response/index.tsx
type ResponseInfoProps (line 25) | interface ResponseInfoProps {
type ResponsePanelProps (line 69) | interface ResponsePanelProps {
FILE: packages/client/src/pages/http/tab.tsx
type HttpTabProps (line 12) | interface HttpTabProps {
FILE: packages/client/src/pages/user/routes/signIn.tsx
function RouteComponent (line 18) | function RouteComponent() {
FILE: packages/client/src/pages/user/routes/signUp.tsx
function RouteComponent (line 18) | function RouteComponent() {
FILE: packages/client/src/pages/websocket/request/header.tsx
type WebSocketHeaderTableProps (line 17) | interface WebSocketHeaderTableProps {
FILE: packages/client/src/pages/websocket/request/panel.tsx
type WebSocketRequestPanelProps (line 18) | interface WebSocketRequestPanelProps {
type MessageComposerProps (line 77) | interface MessageComposerProps {
FILE: packages/client/src/pages/websocket/request/top-bar.tsx
type WebSocketTopBarProps (line 12) | interface WebSocketTopBarProps {
FILE: packages/client/src/pages/websocket/request/url.tsx
type WebSocketUrlBarProps (line 13) | interface WebSocketUrlBarProps {
FILE: packages/client/src/pages/websocket/response/index.tsx
type WebSocketMessageLogProps (line 13) | interface WebSocketMessageLogProps {
type MessageRowProps (line 78) | interface MessageRowProps {
type JsonViewerProps (line 131) | interface JsonViewerProps {
FILE: packages/client/src/pages/websocket/tab.tsx
type WebSocketTabProps (line 9) | interface WebSocketTabProps {
FILE: packages/client/src/pages/websocket/use-websocket.ts
type ConnectionState (line 4) | type ConnectionState = 'connected' | 'connecting' | 'disconnected' | 'er...
type WsMessage (line 6) | interface WsMessage {
constant MAX_MESSAGES (line 13) | const MAX_MESSAGES = 1000;
type UseWebSocketReturn (line 15) | interface UseWebSocketReturn {
FILE: packages/client/src/pages/workspace/routes/workspace/$workspaceIdCan/index.tsx
function RouteComponent (line 22) | function RouteComponent() {
type CtaButtonProps (line 42) | interface CtaButtonProps {
type CtaIconProps (line 66) | interface CtaIconProps {
FILE: packages/client/src/pages/workspace/routes/workspace/$workspaceIdCan/route.tsx
class WorkspaceRouteSearch (line 25) | class WorkspaceRouteSearch extends Schema.Class<WorkspaceRouteSearch>('W...
function RouteComponent (line 40) | function RouteComponent() {
FILE: packages/client/src/pages/workspace/ui/status-bar.tsx
type LogItemProps (line 136) | interface LogItemProps {
FILE: packages/client/src/shared/api/auth.internal.tsx
class AuthToken (line 5) | class AuthToken extends Effect.Service<AuthToken>()('AuthToken', {
FILE: packages/client/src/shared/api/collection.internal.tsx
type ApiCollectionSchema (line 27) | interface ApiCollectionSchema {
type ApiCollection (line 49) | type ApiCollection<TSchema extends ApiCollectionSchema> = ReturnType<typ...
type Item (line 52) | type Item = MessageValidType<TSchema['item']>;
type ItemKey (line 53) | type ItemKey<T = TSchema['keys'][number]> = T extends keyof Item ? T : n...
type ItemKeyObject (line 54) | type ItemKeyObject = Pick<Item, ItemKey>;
type SpecCollectionOptions (line 55) | type SpecCollectionOptions = CollectionConfig<Item, string>;
function done (line 89) | function done() {
type Operation (line 240) | type Operation<Key extends keyof TSchema['operations']> = (
type UpdatePaced (line 248) | type UpdatePaced = TSchema['operations']['update'] extends DescMethodUnary
type Operations (line 253) | type Operations = UpdatePaced & {
class ApiCollections (line 372) | class ApiCollections extends Effect.Service<ApiCollections>()('ApiCollec...
FILE: packages/client/src/shared/api/connect-query.tsx
function useConnectMutation (line 18) | function useConnectMutation<I extends DescMessage, O extends DescMessage...
type ConnectStreamingQueryKey (line 48) | type ConnectStreamingQueryKey<O extends DescMessage> = DataTag<
FILE: packages/client/src/shared/api/connect-rpc.tsx
type SimpleCallOptions (line 5) | interface SimpleCallOptions<I extends Protobuf.DescMessage> extends Omit...
type RequestOptions (line 10) | interface RequestOptions<
type StreamOptions (line 38) | interface StreamOptions<
type InterceptorNext (line 63) | type InterceptorNext = Parameters<Interceptor>[0];
type InterceptorRequest (line 64) | type InterceptorRequest = Parameters<Parameters<Interceptor>[0]>[0];
type InterceptorResponse (line 65) | type InterceptorResponse = Awaited<ReturnType<Parameters<Interceptor>[0]>>;
FILE: packages/client/src/shared/api/mock.tsx
class UnimplementedMockError (line 62) | class UnimplementedMockError extends Data.TaggedError('UnimplementedMock...
class ApiMockState (line 274) | class ApiMockState extends Effect.Service<ApiMockState>()('ApiMockState', {
class ApiTransportMock (line 281) | class ApiTransportMock extends Effect.Service<ApiTransportMock>()('ApiTr...
FILE: packages/client/src/shared/api/protobuf.tsx
constant MAX_FLOAT (line 20) | const MAX_FLOAT = 3.4028234663852886e38;
constant MAX_DOUBLE (line 21) | const MAX_DOUBLE = Number.MAX_VALUE;
type MessageMetaKeys (line 36) | type MessageMetaKeys = (typeof messageMetaKeys)[number];
type MessageAlikeInitShape (line 38) | type MessageAlikeInitShape<Desc extends DescMessage> = Omit<MessageInitS...
type MessageData (line 44) | type MessageData<T extends Message> = Omit<T, MessageMetaKeys>;
type MessageUnion (line 66) | interface MessageUnion extends Message {
type Keys (line 75) | type Keys = keyof Omit<T, 'kind' | keyof Message>;
type MessageUnion (line 76) | type MessageUnion = Exclude<T[Keys], undefined>;
FILE: packages/client/src/shared/api/transport.tsx
class ApiTransport (line 12) | class ApiTransport extends Effect.Service<ApiTransport>()('ApiTransport', {
FILE: packages/client/src/shared/lib/faker.tsx
class Faker (line 4) | class Faker extends Effect.Service<Faker>()('Faker', {
FILE: packages/client/src/shared/lib/order.tsx
type OrderableItem (line 7) | interface OrderableItem {
FILE: packages/client/src/shared/lib/react-render.tsx
type ReactRender (line 7) | type ReactRender = ReturnType<typeof useReactRender>;
FILE: packages/client/src/shared/lib/tanstack-db.tsx
type BooleanExpression (line 28) | type BooleanExpression = ReturnType<typeof eq>;
type LiveQueryProps (line 51) | interface LiveQueryProps<TContext extends Context> {
FILE: packages/client/src/shared/lib/types.tsx
type Filter (line 1) | type Filter<Value, Filter> = { [Key in keyof Value as Value[Key] extends...
type PartialUndefined (line 3) | type PartialUndefined<T> = { [K in keyof T]?: T[K] | undefined };
FILE: packages/client/src/shared/ui/dashboard.tsx
type DashboardLayoutProps (line 11) | interface DashboardLayoutProps {
FILE: packages/client/src/widgets/environment/index.tsx
type EnvironmentPanelProps (line 278) | interface EnvironmentPanelProps {
type VariablesTableProps (line 374) | interface VariablesTableProps {
FILE: packages/client/src/widgets/import/index.tsx
type InnerDialogProps (line 65) | interface InnerDialogProps {
type InitialDialogProps (line 98) | interface InitialDialogProps {
type DomainDialogProps (line 169) | interface DomainDialogProps {
FILE: packages/client/src/widgets/tabs/index.tsx
type Tab (line 15) | interface Tab {
type OpenTabProps (line 35) | interface OpenTabProps {
type TabItemProps (line 100) | interface TabItemProps {
FILE: packages/db/ai_test.go
function TestAiAndCredentials (line 14) | func TestAiAndCredentials(t *testing.T) {
FILE: packages/db/db.go
constant LOCAL (line 11) | LOCAL = "local"
constant EMBEDDED (line 12) | EMBEDDED = "embedded"
constant REMOTE (line 13) | REMOTE = "remote"
function TxnRollback (line 17) | func TxnRollback(tx *sql.Tx) {
FILE: packages/db/flow_node_http_test.go
function TestUpdateFlowNodeHTTPUpsert (line 14) | func TestUpdateFlowNodeHTTPUpsert(t *testing.T) {
FILE: packages/db/pkg/dbtest/unix.go
function GetTestDB (line 16) | func GetTestDB(ctx context.Context) (*sql.DB, error) {
function EnableForeignKeys (line 38) | func EnableForeignKeys(ctx context.Context, db *sql.DB) error {
function GetTestPreparedQueries (line 43) | func GetTestPreparedQueries(ctx context.Context) (*gen.Queries, error) {
FILE: packages/db/pkg/dbtest/windows.go
function GetTestDB (line 12) | func GetTestDB(ctx context.Context) (*sql.DB, error) {
function EnableForeignKeys (line 17) | func EnableForeignKeys(_ context.Context, _ *sql.DB) error {
function GetTestPreparedQueries (line 21) | func GetTestPreparedQueries(ctx context.Context) (*gen.Queries, error) {
FILE: packages/db/pkg/sqlc/gen/ai.sql.go
constant createCredential (line 15) | createCredential = `-- name: CreateCredential :exec
type CreateCredentialParams (line 22) | type CreateCredentialParams struct
method CreateCredential (line 29) | func (q *Queries) CreateCredential(ctx context.Context, arg CreateCreden...
constant createCredentialAnthropic (line 39) | createCredentialAnthropic = `-- name: CreateCredentialAnthropic :exec
type CreateCredentialAnthropicParams (line 46) | type CreateCredentialAnthropicParams struct
method CreateCredentialAnthropic (line 53) | func (q *Queries) CreateCredentialAnthropic(ctx context.Context, arg Cre...
constant createCredentialGemini (line 63) | createCredentialGemini = `-- name: CreateCredentialGemini :exec
type CreateCredentialGeminiParams (line 70) | type CreateCredentialGeminiParams struct
method CreateCredentialGemini (line 77) | func (q *Queries) CreateCredentialGemini(ctx context.Context, arg Create...
constant createCredentialOpenAI (line 87) | createCredentialOpenAI = `-- name: CreateCredentialOpenAI :exec
type CreateCredentialOpenAIParams (line 94) | type CreateCredentialOpenAIParams struct
method CreateCredentialOpenAI (line 101) | func (q *Queries) CreateCredentialOpenAI(ctx context.Context, arg Create...
constant createFlowNodeAI (line 111) | createFlowNodeAI = `-- name: CreateFlowNodeAI :exec
type CreateFlowNodeAIParams (line 118) | type CreateFlowNodeAIParams struct
method CreateFlowNodeAI (line 124) | func (q *Queries) CreateFlowNodeAI(ctx context.Context, arg CreateFlowNo...
constant createFlowNodeAiProvider (line 129) | createFlowNodeAiProvider = `-- name: CreateFlowNodeAiProvider :exec
type CreateFlowNodeAiProviderParams (line 136) | type CreateFlowNodeAiProviderParams struct
method CreateFlowNodeAiProvider (line 144) | func (q *Queries) CreateFlowNodeAiProvider(ctx context.Context, arg Crea...
constant createFlowNodeMemory (line 155) | createFlowNodeMemory = `-- name: CreateFlowNodeMemory :exec
type CreateFlowNodeMemoryParams (line 162) | type CreateFlowNodeMemoryParams struct
method CreateFlowNodeMemory (line 168) | func (q *Queries) CreateFlowNodeMemory(ctx context.Context, arg CreateFl...
constant deleteCredential (line 173) | deleteCredential = `-- name: DeleteCredential :exec
method DeleteCredential (line 179) | func (q *Queries) DeleteCredential(ctx context.Context, id idwrap.IDWrap...
constant deleteCredentialAnthropic (line 184) | deleteCredentialAnthropic = `-- name: DeleteCredentialAnthropic :exec
method DeleteCredentialAnthropic (line 190) | func (q *Queries) DeleteCredentialAnthropic(ctx context.Context, credent...
constant deleteCredentialGemini (line 195) | deleteCredentialGemini = `-- name: DeleteCredentialGemini :exec
method DeleteCredentialGemini (line 201) | func (q *Queries) DeleteCredentialGemini(ctx context.Context, credential...
constant deleteCredentialOpenAI (line 206) | deleteCredentialOpenAI = `-- name: DeleteCredentialOpenAI :exec
method DeleteCredentialOpenAI (line 212) | func (q *Queries) DeleteCredentialOpenAI(ctx context.Context, credential...
constant deleteFlowNodeAI (line 217) | deleteFlowNodeAI = `-- name: DeleteFlowNodeAI :exec
method DeleteFlowNodeAI (line 223) | func (q *Queries) DeleteFlowNodeAI(ctx context.Context, flowNodeID idwra...
constant deleteFlowNodeAiProvider (line 228) | deleteFlowNodeAiProvider = `-- name: DeleteFlowNodeAiProvider :exec
method DeleteFlowNodeAiProvider (line 234) | func (q *Queries) DeleteFlowNodeAiProvider(ctx context.Context, flowNode...
constant deleteFlowNodeMemory (line 239) | deleteFlowNodeMemory = `-- name: DeleteFlowNodeMemory :exec
method DeleteFlowNodeMemory (line 245) | func (q *Queries) DeleteFlowNodeMemory(ctx context.Context, flowNodeID [...
constant getCredential (line 250) | getCredential = `-- name: GetCredential :one
method GetCredential (line 263) | func (q *Queries) GetCredential(ctx context.Context, id idwrap.IDWrap) (...
constant getCredentialAnthropic (line 275) | getCredentialAnthropic = `-- name: GetCredentialAnthropic :one
method GetCredentialAnthropic (line 288) | func (q *Queries) GetCredentialAnthropic(ctx context.Context, credential...
constant getCredentialGemini (line 300) | getCredentialGemini = `-- name: GetCredentialGemini :one
method GetCredentialGemini (line 313) | func (q *Queries) GetCredentialGemini(ctx context.Context, credentialID ...
constant getCredentialOpenAI (line 325) | getCredentialOpenAI = `-- name: GetCredentialOpenAI :one
method GetCredentialOpenAI (line 338) | func (q *Queries) GetCredentialOpenAI(ctx context.Context, credentialID ...
constant getCredentialsByWorkspaceID (line 350) | getCredentialsByWorkspaceID = `-- name: GetCredentialsByWorkspaceID :many
method GetCredentialsByWorkspaceID (line 362) | func (q *Queries) GetCredentialsByWorkspaceID(ctx context.Context, works...
constant getFlowNodeAI (line 390) | getFlowNodeAI = `-- name: GetFlowNodeAI :one
method GetFlowNodeAI (line 402) | func (q *Queries) GetFlowNodeAI(ctx context.Context, flowNodeID idwrap.I...
constant getFlowNodeAiProvider (line 409) | getFlowNodeAiProvider = `-- name: GetFlowNodeAiProvider :one
method GetFlowNodeAiProvider (line 424) | func (q *Queries) GetFlowNodeAiProvider(ctx context.Context, flowNodeID ...
constant getFlowNodeMemory (line 437) | getFlowNodeMemory = `-- name: GetFlowNodeMemory :one
method GetFlowNodeMemory (line 450) | func (q *Queries) GetFlowNodeMemory(ctx context.Context, flowNodeID []by...
constant updateCredential (line 457) | updateCredential = `-- name: UpdateCredential :exec
type UpdateCredentialParams (line 466) | type UpdateCredentialParams struct
method UpdateCredential (line 472) | func (q *Queries) UpdateCredential(ctx context.Context, arg UpdateCreden...
constant updateCredentialAnthropic (line 477) | updateCredentialAnthropic = `-- name: UpdateCredentialAnthropic :exec
type UpdateCredentialAnthropicParams (line 487) | type UpdateCredentialAnthropicParams struct
method UpdateCredentialAnthropic (line 494) | func (q *Queries) UpdateCredentialAnthropic(ctx context.Context, arg Upd...
constant updateCredentialGemini (line 504) | updateCredentialGemini = `-- name: UpdateCredentialGemini :exec
type UpdateCredentialGeminiParams (line 514) | type UpdateCredentialGeminiParams struct
method UpdateCredentialGemini (line 521) | func (q *Queries) UpdateCredentialGemini(ctx context.Context, arg Update...
constant updateCredentialOpenAI (line 531) | updateCredentialOpenAI = `-- name: UpdateCredentialOpenAI :exec
type UpdateCredentialOpenAIParams (line 541) | type UpdateCredentialOpenAIParams struct
method UpdateCredentialOpenAI (line 548) | func (q *Queries) UpdateCredentialOpenAI(ctx context.Context, arg Update...
constant updateFlowNodeAI (line 558) | updateFlowNodeAI = `-- name: UpdateFlowNodeAI :exec
type UpdateFlowNodeAIParams (line 567) | type UpdateFlowNodeAIParams struct
method UpdateFlowNodeAI (line 573) | func (q *Queries) UpdateFlowNodeAI(ctx context.Context, arg UpdateFlowNo...
constant updateFlowNodeAiProvider (line 578) | updateFlowNodeAiProvider = `-- name: UpdateFlowNodeAiProvider :exec
type UpdateFlowNodeAiProviderParams (line 589) | type UpdateFlowNodeAiProviderParams struct
method UpdateFlowNodeAiProvider (line 597) | func (q *Queries) UpdateFlowNodeAiProvider(ctx context.Context, arg Upda...
constant updateFlowNodeMemory (line 608) | updateFlowNodeMemory = `-- name: UpdateFlowNodeMemory :exec
type UpdateFlowNodeMemoryParams (line 617) | type UpdateFlowNodeMemoryParams struct
method UpdateFlowNodeMemory (line 623) | func (q *Queries) UpdateFlowNodeMemory(ctx context.Context, arg UpdateFl...
FILE: packages/db/pkg/sqlc/gen/betterauth.sql.go
constant authCountUsers (line 15) | authCountUsers = `-- name: AuthCountUsers :one
method AuthCountUsers (line 22) | func (q *Queries) AuthCountUsers(ctx context.Context) (int64, error) {
constant authCreateAccount (line 29) | authCreateAccount = `-- name: AuthCreateAccount :exec
type AuthCreateAccountParams (line 50) | type AuthCreateAccountParams struct
method AuthCreateAccount (line 66) | func (q *Queries) AuthCreateAccount(ctx context.Context, arg AuthCreateA...
constant authCreateJwks (line 85) | authCreateJwks = `-- name: AuthCreateJwks :exec
type AuthCreateJwksParams (line 93) | type AuthCreateJwksParams struct
method AuthCreateJwks (line 102) | func (q *Queries) AuthCreateJwks(ctx context.Context, arg AuthCreateJwks...
constant authCreateSession (line 113) | authCreateSession = `-- name: AuthCreateSession :exec
type AuthCreateSessionParams (line 129) | type AuthCreateSessionParams struct
method AuthCreateSession (line 140) | func (q *Queries) AuthCreateSession(ctx context.Context, arg AuthCreateS...
constant authCreateUser (line 154) | authCreateUser = `-- name: AuthCreateUser :exec
type AuthCreateUserParams (line 161) | type AuthCreateUserParams struct
method AuthCreateUser (line 171) | func (q *Queries) AuthCreateUser(ctx context.Context, arg AuthCreateUser...
constant authCreateVerification (line 184) | authCreateVerification = `-- name: AuthCreateVerification :exec
type AuthCreateVerificationParams (line 191) | type AuthCreateVerificationParams struct
method AuthCreateVerification (line 200) | func (q *Queries) AuthCreateVerification(ctx context.Context, arg AuthCr...
constant authDeleteAccount (line 212) | authDeleteAccount = `-- name: AuthDeleteAccount :exec
method AuthDeleteAccount (line 218) | func (q *Queries) AuthDeleteAccount(ctx context.Context, id idwrap.IDWra...
constant authDeleteAccountsByUser (line 223) | authDeleteAccountsByUser = `-- name: AuthDeleteAccountsByUser :exec
method AuthDeleteAccountsByUser (line 229) | func (q *Queries) AuthDeleteAccountsByUser(ctx context.Context, userID i...
constant authDeleteExpiredSessions (line 234) | authDeleteExpiredSessions = `-- name: AuthDeleteExpiredSessions :exec
method AuthDeleteExpiredSessions (line 240) | func (q *Queries) AuthDeleteExpiredSessions(ctx context.Context, expires...
constant authDeleteExpiredVerifications (line 245) | authDeleteExpiredVerifications = `-- name: AuthDeleteExpiredVerification...
method AuthDeleteExpiredVerifications (line 251) | func (q *Queries) AuthDeleteExpiredVerifications(ctx context.Context, ex...
constant authDeleteJwks (line 256) | authDeleteJwks = `-- name: AuthDeleteJwks :exec
method AuthDeleteJwks (line 262) | func (q *Queries) AuthDeleteJwks(ctx context.Context, id idwrap.IDWrap) ...
constant authDeleteSession (line 267) | authDeleteSession = `-- name: AuthDeleteSession :exec
method AuthDeleteSession (line 273) | func (q *Queries) AuthDeleteSession(ctx context.Context, id idwrap.IDWra...
constant authDeleteSessionByToken (line 278) | authDeleteSessionByToken = `-- name: AuthDeleteSessionByToken :exec
method AuthDeleteSessionByToken (line 284) | func (q *Queries) AuthDeleteSessionByToken(ctx context.Context, token st...
constant authDeleteSessionsByUser (line 289) | authDeleteSessionsByUser = `-- name: AuthDeleteSessionsByUser :exec
method AuthDeleteSessionsByUser (line 295) | func (q *Queries) AuthDeleteSessionsByUser(ctx context.Context, userID i...
constant authDeleteUser (line 300) | authDeleteUser = `-- name: AuthDeleteUser :exec
method AuthDeleteUser (line 306) | func (q *Queries) AuthDeleteUser(ctx context.Context, id idwrap.IDWrap) ...
constant authDeleteVerification (line 311) | authDeleteVerification = `-- name: AuthDeleteVerification :exec
method AuthDeleteVerification (line 317) | func (q *Queries) AuthDeleteVerification(ctx context.Context, id idwrap....
constant authGetAccount (line 322) | authGetAccount = `-- name: AuthGetAccount :one
method AuthGetAccount (line 347) | func (q *Queries) AuthGetAccount(ctx context.Context, id idwrap.IDWrap) ...
constant authGetAccountByProvider (line 368) | authGetAccountByProvider = `-- name: AuthGetAccountByProvider :one
type AuthGetAccountByProviderParams (line 392) | type AuthGetAccountByProviderParams struct
method AuthGetAccountByProvider (line 397) | func (q *Queries) AuthGetAccountByProvider(ctx context.Context, arg Auth...
constant authGetJwks (line 418) | authGetJwks = `-- name: AuthGetJwks :one
method AuthGetJwks (line 433) | func (q *Queries) AuthGetJwks(ctx context.Context, id idwrap.IDWrap) (Au...
constant authGetSession (line 446) | authGetSession = `-- name: AuthGetSession :one
method AuthGetSession (line 466) | func (q *Queries) AuthGetSession(ctx context.Context, id idwrap.IDWrap) ...
constant authGetSessionByToken (line 482) | authGetSessionByToken = `-- name: AuthGetSessionByToken :one
method AuthGetSessionByToken (line 500) | func (q *Queries) AuthGetSessionByToken(ctx context.Context, token strin...
constant authGetUser (line 516) | authGetUser = `-- name: AuthGetUser :one
method AuthGetUser (line 535) | func (q *Queries) AuthGetUser(ctx context.Context, id idwrap.IDWrap) (Au...
constant authGetUserByEmail (line 550) | authGetUserByEmail = `-- name: AuthGetUserByEmail :one
method AuthGetUserByEmail (line 567) | func (q *Queries) AuthGetUserByEmail(ctx context.Context, email string) ...
constant authGetVerification (line 582) | authGetVerification = `-- name: AuthGetVerification :one
method AuthGetVerification (line 600) | func (q *Queries) AuthGetVerification(ctx context.Context, id idwrap.IDW...
constant authGetVerificationByIdentifier (line 614) | authGetVerificationByIdentifier = `-- name: AuthGetVerificationByIdentif...
method AuthGetVerificationByIdentifier (line 630) | func (q *Queries) AuthGetVerificationByIdentifier(ctx context.Context, i...
constant authListAccountsByUser (line 644) | authListAccountsByUser = `-- name: AuthListAccountsByUser :many
method AuthListAccountsByUser (line 665) | func (q *Queries) AuthListAccountsByUser(ctx context.Context, userID idw...
constant authListJwks (line 702) | authListJwks = `-- name: AuthListJwks :many
method AuthListJwks (line 715) | func (q *Queries) AuthListJwks(ctx context.Context) ([]AuthJwk, error) {
constant authListSessionsByUser (line 744) | authListSessionsByUser = `-- name: AuthListSessionsByUser :many
method AuthListSessionsByUser (line 760) | func (q *Queries) AuthListSessionsByUser(ctx context.Context, userID idw...
constant authUpdateAccount (line 792) | authUpdateAccount = `-- name: AuthUpdateAccount :exec
type AuthUpdateAccountParams (line 807) | type AuthUpdateAccountParams struct
method AuthUpdateAccount (line 819) | func (q *Queries) AuthUpdateAccount(ctx context.Context, arg AuthUpdateA...
constant authUpdateSession (line 834) | authUpdateSession = `-- name: AuthUpdateSession :exec
type AuthUpdateSessionParams (line 845) | type AuthUpdateSessionParams struct
method AuthUpdateSession (line 853) | func (q *Queries) AuthUpdateSession(ctx context.Context, arg AuthUpdateS...
constant authUpdateUser (line 864) | authUpdateUser = `-- name: AuthUpdateUser :exec
type AuthUpdateUserParams (line 876) | type AuthUpdateUserParams struct
method AuthUpdateUser (line 885) | func (q *Queries) AuthUpdateUser(ctx context.Context, arg AuthUpdateUser...
FILE: packages/db/pkg/sqlc/gen/db.go
type DBTX (line 13) | type DBTX interface
function New (line 20) | func New(db DBTX) *Queries {
function Prepare (line 24) | func Prepare(ctx context.Context, db DBTX) (*Queries, error) {
type Queries (line 3228) | type Queries struct
method Close (line 1215) | func (q *Queries) Close() error {
method exec (line 3195) | func (q *Queries) exec(ctx context.Context, stmt *sql.Stmt, query stri...
method query (line 3206) | func (q *Queries) query(ctx context.Context, stmt *sql.Stmt, query str...
method queryRow (line 3217) | func (q *Queries) queryRow(ctx context.Context, stmt *sql.Stmt, query ...
method WithTx (line 3628) | func (q *Queries) WithTx(tx *sql.Tx) *Queries {
FILE: packages/db/pkg/sqlc/gen/environment.sql.go
constant createEnvironment (line 14) | createEnvironment = `-- name: CreateEnvironment :exec
type CreateEnvironmentParams (line 21) | type CreateEnvironmentParams struct
method CreateEnvironment (line 30) | func (q *Queries) CreateEnvironment(ctx context.Context, arg CreateEnvir...
constant createVariable (line 42) | createVariable = `-- name: CreateVariable :exec
type CreateVariableParams (line 49) | type CreateVariableParams struct
method CreateVariable (line 59) | func (q *Queries) CreateVariable(ctx context.Context, arg CreateVariable...
constant createVariableBulk (line 72) | createVariableBulk = `-- name: CreateVariableBulk :exec
type CreateVariableBulkParams (line 82) | type CreateVariableBulkParams struct
method CreateVariableBulk (line 113) | func (q *Queries) CreateVariableBulk(ctx context.Context, arg CreateVari...
constant deleteEnvironment (line 147) | deleteEnvironment = `-- name: DeleteEnvironment :exec
method DeleteEnvironment (line 153) | func (q *Queries) DeleteEnvironment(ctx context.Context, id idwrap.IDWra...
constant deleteVariable (line 158) | deleteVariable = `-- name: DeleteVariable :exec
method DeleteVariable (line 164) | func (q *Queries) DeleteVariable(ctx context.Context, id idwrap.IDWrap) ...
constant getEnvironment (line 169) | getEnvironment = `-- name: GetEnvironment :one
method GetEnvironment (line 188) | func (q *Queries) GetEnvironment(ctx context.Context, id idwrap.IDWrap) ...
constant getEnvironmentWorkspaceID (line 202) | getEnvironmentWorkspaceID = `-- name: GetEnvironmentWorkspaceID :one
method GetEnvironmentWorkspaceID (line 213) | func (q *Queries) GetEnvironmentWorkspaceID(ctx context.Context, id idwr...
constant getEnvironmentsByWorkspaceID (line 220) | getEnvironmentsByWorkspaceID = `-- name: GetEnvironmentsByWorkspaceID :many
method GetEnvironmentsByWorkspaceID (line 236) | func (q *Queries) GetEnvironmentsByWorkspaceID(ctx context.Context, work...
constant getEnvironmentsByWorkspaceIDOrdered (line 266) | getEnvironmentsByWorkspaceIDOrdered = `-- name: GetEnvironmentsByWorkspa...
method GetEnvironmentsByWorkspaceIDOrdered (line 282) | func (q *Queries) GetEnvironmentsByWorkspaceIDOrdered(ctx context.Contex...
constant getVariable (line 312) | getVariable = `-- name: GetVariable :one
method GetVariable (line 332) | func (q *Queries) GetVariable(ctx context.Context, id idwrap.IDWrap) (Va...
constant getVariablesByEnvironmentID (line 347) | getVariablesByEnvironmentID = `-- name: GetVariablesByEnvironmentID :many
method GetVariablesByEnvironmentID (line 364) | func (q *Queries) GetVariablesByEnvironmentID(ctx context.Context, envID...
constant getVariablesByEnvironmentIDOrdered (line 395) | getVariablesByEnvironmentIDOrdered = `-- name: GetVariablesByEnvironment...
method GetVariablesByEnvironmentIDOrdered (line 412) | func (q *Queries) GetVariablesByEnvironmentIDOrdered(ctx context.Context...
constant updateEnvironment (line 443) | updateEnvironment = `-- name: UpdateEnvironment :exec
type UpdateEnvironmentParams (line 454) | type UpdateEnvironmentParams struct
method UpdateEnvironment (line 462) | func (q *Queries) UpdateEnvironment(ctx context.Context, arg UpdateEnvir...
constant updateVariable (line 473) | updateVariable = `-- name: UpdateVariable :exec
type UpdateVariableParams (line 485) | type UpdateVariableParams struct
method UpdateVariable (line 494) | func (q *Queries) UpdateVariable(ctx context.Context, arg UpdateVariable...
constant upsertVariable (line 506) | upsertVariable = `-- name: UpsertVariable :exec
type UpsertVariableParams (line 514) | type UpsertVariableParams struct
method UpsertVariable (line 524) | func (q *Queries) UpsertVariable(ctx context.Context, arg UpsertVariable...
FILE: packages/db/pkg/sqlc/gen/files.sql.go
constant createFile (line 16) | createFile = `-- name: CreateFile :exec
type CreateFileParams (line 21) | type CreateFileParams struct
method CreateFile (line 34) | func (q *Queries) CreateFile(ctx context.Context, arg CreateFileParams) ...
constant deleteFile (line 49) | deleteFile = `-- name: DeleteFile :exec
method DeleteFile (line 54) | func (q *Queries) DeleteFile(ctx context.Context, id idwrap.IDWrap) error {
constant findFileByPathHash (line 59) | findFileByPathHash = `-- name: FindFileByPathHash :one
type FindFileByPathHashParams (line 66) | type FindFileByPathHashParams struct
method FindFileByPathHash (line 72) | func (q *Queries) FindFileByPathHash(ctx context.Context, arg FindFileBy...
constant getFile (line 79) | getFile = `-- name: GetFile :one
method GetFile (line 89) | func (q *Queries) GetFile(ctx context.Context, id idwrap.IDWrap) (File, ...
constant getFileByContentID (line 106) | getFileByContentID = `-- name: GetFileByContentID :one
method GetFileByContentID (line 114) | func (q *Queries) GetFileByContentID(ctx context.Context, contentID *idw...
constant getFileWithContent (line 131) | getFileWithContent = `-- name: GetFileWithContent :one
method GetFileWithContent (line 138) | func (q *Queries) GetFileWithContent(ctx context.Context, id idwrap.IDWr...
constant getFileWorkspaceID (line 155) | getFileWorkspaceID = `-- name: GetFileWorkspaceID :one
method GetFileWorkspaceID (line 162) | func (q *Queries) GetFileWorkspaceID(ctx context.Context, id idwrap.IDWr...
constant getFilesByContentIDs (line 169) | getFilesByContentIDs = `-- name: GetFilesByContentIDs :many
type GetFilesByContentIDsRow (line 175) | type GetFilesByContentIDsRow struct
method GetFilesByContentIDs (line 183) | func (q *Queries) GetFilesByContentIDs(ctx context.Context, contentIds [...
constant getFilesByParentID (line 221) | getFilesByParentID = `-- name: GetFilesByParentID :many
method GetFilesByParentID (line 228) | func (q *Queries) GetFilesByParentID(ctx context.Context, parentID *idwr...
constant getFilesByParentIDOrdered (line 261) | getFilesByParentIDOrdered = `-- name: GetFilesByParentIDOrdered :many
method GetFilesByParentIDOrdered (line 269) | func (q *Queries) GetFilesByParentIDOrdered(ctx context.Context, parentI...
constant getFilesByWorkspaceID (line 302) | getFilesByWorkspaceID = `-- name: GetFilesByWorkspaceID :many
method GetFilesByWorkspaceID (line 309) | func (q *Queries) GetFilesByWorkspaceID(ctx context.Context, workspaceID...
constant getFilesByWorkspaceIDOrdered (line 342) | getFilesByWorkspaceIDOrdered = `-- name: GetFilesByWorkspaceIDOrdered :many
method GetFilesByWorkspaceIDOrdered (line 350) | func (q *Queries) GetFilesByWorkspaceIDOrdered(ctx context.Context, work...
constant getFlowContent (line 383) | getFlowContent = `-- name: GetFlowContent :one
type GetFlowContentRow (line 389) | type GetFlowContentRow struct
method GetFlowContent (line 396) | func (q *Queries) GetFlowContent(ctx context.Context, id idwrap.IDWrap) ...
constant getRootFilesByWorkspaceID (line 403) | getRootFilesByWorkspaceID = `-- name: GetRootFilesByWorkspaceID :many
method GetRootFilesByWorkspaceID (line 411) | func (q *Queries) GetRootFilesByWorkspaceID(ctx context.Context, workspa...
constant updateFile (line 444) | updateFile = `-- name: UpdateFile :exec
type UpdateFileParams (line 450) | type UpdateFileParams struct
method UpdateFile (line 463) | func (q *Queries) UpdateFile(ctx context.Context, arg UpdateFileParams) ...
FILE: packages/db/pkg/sqlc/gen/flow.sql.go
constant cleanupOrphanedFlowEdges (line 16) | cleanupOrphanedFlowEdges = `-- name: CleanupOrphanedFlowEdges :exec
method CleanupOrphanedFlowEdges (line 20) | func (q *Queries) CleanupOrphanedFlowEdges(ctx context.Context) error {
constant cleanupOrphanedFlowNodeCondition (line 25) | cleanupOrphanedFlowNodeCondition = `-- name: CleanupOrphanedFlowNodeCond...
method CleanupOrphanedFlowNodeCondition (line 29) | func (q *Queries) CleanupOrphanedFlowNodeCondition(ctx context.Context) ...
constant cleanupOrphanedFlowNodeFor (line 34) | cleanupOrphanedFlowNodeFor = `-- name: CleanupOrphanedFlowNodeFor :exec
method CleanupOrphanedFlowNodeFor (line 41) | func (q *Queries) CleanupOrphanedFlowNodeFor(ctx context.Context) error {
constant cleanupOrphanedFlowNodeForEach (line 46) | cleanupOrphanedFlowNodeForEach = `-- name: CleanupOrphanedFlowNodeForEac...
method CleanupOrphanedFlowNodeForEach (line 50) | func (q *Queries) CleanupOrphanedFlowNodeForEach(ctx context.Context) er...
constant cleanupOrphanedFlowNodeGraphQL (line 55) | cleanupOrphanedFlowNodeGraphQL = `-- name: CleanupOrphanedFlowNodeGraphQ...
method CleanupOrphanedFlowNodeGraphQL (line 59) | func (q *Queries) CleanupOrphanedFlowNodeGraphQL(ctx context.Context) er...
constant cleanupOrphanedFlowNodeHttp (line 64) | cleanupOrphanedFlowNodeHttp = `-- name: CleanupOrphanedFlowNodeHttp :exec
method CleanupOrphanedFlowNodeHttp (line 68) | func (q *Queries) CleanupOrphanedFlowNodeHttp(ctx context.Context) error {
constant cleanupOrphanedFlowNodeJs (line 73) | cleanupOrphanedFlowNodeJs = `-- name: CleanupOrphanedFlowNodeJs :exec
method CleanupOrphanedFlowNodeJs (line 77) | func (q *Queries) CleanupOrphanedFlowNodeJs(ctx context.Context) error {
constant cleanupOrphanedFlowNodeRunSubFlow (line 82) | cleanupOrphanedFlowNodeRunSubFlow = `-- name: CleanupOrphanedFlowNodeRun...
method CleanupOrphanedFlowNodeRunSubFlow (line 86) | func (q *Queries) CleanupOrphanedFlowNodeRunSubFlow(ctx context.Context)...
constant cleanupOrphanedFlowNodeSubFlowReturn (line 91) | cleanupOrphanedFlowNodeSubFlowReturn = `-- name: CleanupOrphanedFlowNode...
method CleanupOrphanedFlowNodeSubFlowReturn (line 95) | func (q *Queries) CleanupOrphanedFlowNodeSubFlowReturn(ctx context.Conte...
constant cleanupOrphanedFlowNodeSubFlowTrigger (line 100) | cleanupOrphanedFlowNodeSubFlowTrigger = `-- name: CleanupOrphanedFlowNod...
method CleanupOrphanedFlowNodeSubFlowTrigger (line 104) | func (q *Queries) CleanupOrphanedFlowNodeSubFlowTrigger(ctx context.Cont...
constant cleanupOrphanedFlowNodeWait (line 109) | cleanupOrphanedFlowNodeWait = `-- name: CleanupOrphanedFlowNodeWait :exec
method CleanupOrphanedFlowNodeWait (line 113) | func (q *Queries) CleanupOrphanedFlowNodeWait(ctx context.Context) error {
constant cleanupOrphanedNodeExecutions (line 118) | cleanupOrphanedNodeExecutions = `-- name: CleanupOrphanedNodeExecutions ...
method CleanupOrphanedNodeExecutions (line 122) | func (q *Queries) CleanupOrphanedNodeExecutions(ctx context.Context) err...
constant createFlow (line 127) | createFlow = `-- name: CreateFlow :exec
type CreateFlowParams (line 134) | type CreateFlowParams struct
method CreateFlow (line 145) | func (q *Queries) CreateFlow(ctx context.Context, arg CreateFlowParams) ...
constant createFlowEdge (line 159) | createFlowEdge = `-- name: CreateFlowEdge :exec
type CreateFlowEdgeParams (line 166) | type CreateFlowEdgeParams struct
method CreateFlowEdge (line 174) | func (q *Queries) CreateFlowEdge(ctx context.Context, arg CreateFlowEdge...
constant createFlowNode (line 185) | createFlowNode = `-- name: CreateFlowNode :exec
type CreateFlowNodeParams (line 192) | type CreateFlowNodeParams struct
method CreateFlowNode (line 201) | func (q *Queries) CreateFlowNode(ctx context.Context, arg CreateFlowNode...
constant createFlowNodeCondition (line 213) | createFlowNodeCondition = `-- name: CreateFlowNodeCondition :exec
type CreateFlowNodeConditionParams (line 220) | type CreateFlowNodeConditionParams struct
method CreateFlowNodeCondition (line 225) | func (q *Queries) CreateFlowNodeCondition(ctx context.Context, arg Creat...
constant createFlowNodeFor (line 230) | createFlowNodeFor = `-- name: CreateFlowNodeFor :exec
type CreateFlowNodeForParams (line 237) | type CreateFlowNodeForParams struct
method CreateFlowNodeFor (line 244) | func (q *Queries) CreateFlowNodeFor(ctx context.Context, arg CreateFlowN...
constant createFlowNodeForEach (line 254) | createFlowNodeForEach = `-- name: CreateFlowNodeForEach :exec
type CreateFlowNodeForEachParams (line 261) | type CreateFlowNodeForEachParams struct
method CreateFlowNodeForEach (line 268) | func (q *Queries) CreateFlowNodeForEach(ctx context.Context, arg CreateF...
constant createFlowNodeGraphQL (line 278) | createFlowNodeGraphQL = `-- name: CreateFlowNodeGraphQL :exec
type CreateFlowNodeGraphQLParams (line 282) | type CreateFlowNodeGraphQLParams struct
method CreateFlowNodeGraphQL (line 288) | func (q *Queries) CreateFlowNodeGraphQL(ctx context.Context, arg CreateF...
constant createFlowNodeHTTP (line 293) | createFlowNodeHTTP = `-- name: CreateFlowNodeHTTP :exec
type CreateFlowNodeHTTPParams (line 304) | type CreateFlowNodeHTTPParams struct
method CreateFlowNodeHTTP (line 310) | func (q *Queries) CreateFlowNodeHTTP(ctx context.Context, arg CreateFlow...
constant createFlowNodeJs (line 315) | createFlowNodeJs = `-- name: CreateFlowNodeJs :exec
type CreateFlowNodeJsParams (line 322) | type CreateFlowNodeJsParams struct
method CreateFlowNodeJs (line 328) | func (q *Queries) CreateFlowNodeJs(ctx context.Context, arg CreateFlowNo...
constant createFlowNodeRunSubFlow (line 333) | createFlowNodeRunSubFlow = `-- name: CreateFlowNodeRunSubFlow :exec
type CreateFlowNodeRunSubFlowParams (line 338) | type CreateFlowNodeRunSubFlowParams struct
method CreateFlowNodeRunSubFlow (line 345) | func (q *Queries) CreateFlowNodeRunSubFlow(ctx context.Context, arg Crea...
constant createFlowNodeSubFlowReturn (line 355) | createFlowNodeSubFlowReturn = `-- name: CreateFlowNodeSubFlowReturn :exec
type CreateFlowNodeSubFlowReturnParams (line 360) | type CreateFlowNodeSubFlowReturnParams struct
method CreateFlowNodeSubFlowReturn (line 365) | func (q *Queries) CreateFlowNodeSubFlowReturn(ctx context.Context, arg C...
constant createFlowNodeSubFlowTrigger (line 370) | createFlowNodeSubFlowTrigger = `-- name: CreateFlowNodeSubFlowTrigger :exec
type CreateFlowNodeSubFlowTriggerParams (line 375) | type CreateFlowNodeSubFlowTriggerParams struct
method CreateFlowNodeSubFlowTrigger (line 380) | func (q *Queries) CreateFlowNodeSubFlowTrigger(ctx context.Context, arg ...
constant createFlowNodeWait (line 385) | createFlowNodeWait = `-- name: CreateFlowNodeWait :exec
type CreateFlowNodeWaitParams (line 392) | type CreateFlowNodeWaitParams struct
method CreateFlowNodeWait (line 397) | func (q *Queries) CreateFlowNodeWait(ctx context.Context, arg CreateFlow...
constant createFlowNodeWithState (line 402) | createFlowNodeWithState = `-- name: CreateFlowNodeWithState :exec
type CreateFlowNodeWithStateParams (line 409) | type CreateFlowNodeWithStateParams struct
method CreateFlowNodeWithState (line 419) | func (q *Queries) CreateFlowNodeWithState(ctx context.Context, arg Creat...
constant createFlowNodesBulk (line 432) | createFlowNodesBulk = `-- name: CreateFlowNodesBulk :exec
type CreateFlowNodesBulkParams (line 448) | type CreateFlowNodesBulkParams struct
method CreateFlowNodesBulk (line 511) | func (q *Queries) CreateFlowNodesBulk(ctx context.Context, arg CreateFlo...
constant createFlowTag (line 577) | createFlowTag = `-- name: CreateFlowTag :exec
type CreateFlowTagParams (line 584) | type CreateFlowTagParams struct
method CreateFlowTag (line 590) | func (q *Queries) CreateFlowTag(ctx context.Context, arg CreateFlowTagPa...
constant createFlowVariable (line 595) | createFlowVariable = `-- name: CreateFlowVariable :exec
type CreateFlowVariableParams (line 602) | type CreateFlowVariableParams struct
method CreateFlowVariable (line 612) | func (q *Queries) CreateFlowVariable(ctx context.Context, arg CreateFlow...
constant createFlowVariableBulk (line 625) | createFlowVariableBulk = `-- name: CreateFlowVariableBulk :exec
type CreateFlowVariableBulkParams (line 641) | type CreateFlowVariableBulkParams struct
method CreateFlowVariableBulk (line 714) | func (q *Queries) CreateFlowVariableBulk(ctx context.Context, arg Create...
constant createFlowsBulk (line 790) | createFlowsBulk = `-- name: CreateFlowsBulk :exec
type CreateFlowsBulkParams (line 806) | type CreateFlowsBulkParams struct
method CreateFlowsBulk (line 889) | func (q *Queries) CreateFlowsBulk(ctx context.Context, arg CreateFlowsBu...
constant createMigration (line 975) | createMigration = `-- name: CreateMigration :exec
type CreateMigrationParams (line 982) | type CreateMigrationParams struct
method CreateMigration (line 989) | func (q *Queries) CreateMigration(ctx context.Context, arg CreateMigrati...
constant createNodeExecution (line 999) | createNodeExecution = `-- name: CreateNodeExecution :one
type CreateNodeExecutionParams (line 1008) | type CreateNodeExecutionParams struct
method CreateNodeExecution (line 1023) | func (q *Queries) CreateNodeExecution(ctx context.Context, arg CreateNod...
constant createTag (line 1056) | createTag = `-- name: CreateTag :exec
type CreateTagParams (line 1063) | type CreateTagParams struct
method CreateTag (line 1070) | func (q *Queries) CreateTag(ctx context.Context, arg CreateTagParams) er...
constant deleteFlow (line 1080) | deleteFlow = `-- name: DeleteFlow :exec
method DeleteFlow (line 1086) | func (q *Queries) DeleteFlow(ctx context.Context, id idwrap.IDWrap) error {
constant deleteFlowEdge (line 1091) | deleteFlowEdge = `-- name: DeleteFlowEdge :exec
method DeleteFlowEdge (line 1098) | func (q *Queries) DeleteFlowEdge(ctx context.Context, id idwrap.IDWrap) ...
constant deleteFlowNode (line 1103) | deleteFlowNode = `-- name: DeleteFlowNode :exec
method DeleteFlowNode (line 1109) | func (q *Queries) DeleteFlowNode(ctx context.Context, id idwrap.IDWrap) ...
constant deleteFlowNodeCondition (line 1114) | deleteFlowNodeCondition = `-- name: DeleteFlowNodeCondition :exec
method DeleteFlowNodeCondition (line 1120) | func (q *Queries) DeleteFlowNodeCondition(ctx context.Context, flowNodeI...
constant deleteFlowNodeFor (line 1125) | deleteFlowNodeFor = `-- name: DeleteFlowNodeFor :exec
method DeleteFlowNodeFor (line 1131) | func (q *Queries) DeleteFlowNodeFor(ctx context.Context, flowNodeID idwr...
constant deleteFlowNodeForEach (line 1136) | deleteFlowNodeForEach = `-- name: DeleteFlowNodeForEach :exec
method DeleteFlowNodeForEach (line 1142) | func (q *Queries) DeleteFlowNodeForEach(ctx context.Context, flowNodeID ...
constant deleteFlowNodeGraphQL (line 1147) | deleteFlowNodeGraphQL = `-- name: DeleteFlowNodeGraphQL :exec
method DeleteFlowNodeGraphQL (line 1151) | func (q *Queries) DeleteFlowNodeGraphQL(ctx context.Context, flowNodeID ...
constant deleteFlowNodeHTTP (line 1156) | deleteFlowNodeHTTP = `-- name: DeleteFlowNodeHTTP :exec
method DeleteFlowNodeHTTP (line 1162) | func (q *Queries) DeleteFlowNodeHTTP(ctx context.Context, flowNodeID idw...
constant deleteFlowNodeJs (line 1167) | deleteFlowNodeJs = `-- name: DeleteFlowNodeJs :exec
method DeleteFlowNodeJs (line 1173) | func (q *Queries) DeleteFlowNodeJs(ctx context.Context, flowNodeID idwra...
constant deleteFlowNodeRunSubFlow (line 1178) | deleteFlowNodeRunSubFlow = `-- name: DeleteFlowNodeRunSubFlow :exec
method DeleteFlowNodeRunSubFlow (line 1183) | func (q *Queries) DeleteFlowNodeRunSubFlow(ctx context.Context, flowNode...
constant deleteFlowNodeSubFlowReturn (line 1188) | deleteFlowNodeSubFlowReturn = `-- name: DeleteFlowNodeSubFlowReturn :exec
method DeleteFlowNodeSubFlowReturn (line 1193) | func (q *Queries) DeleteFlowNodeSubFlowReturn(ctx context.Context, flowN...
constant deleteFlowNodeSubFlowTrigger (line 1198) | deleteFlowNodeSubFlowTrigger = `-- name: DeleteFlowNodeSubFlowTrigger :exec
method DeleteFlowNodeSubFlowTrigger (line 1203) | func (q *Queries) DeleteFlowNodeSubFlowTrigger(ctx context.Context, flow...
constant deleteFlowNodeWait (line 1208) | deleteFlowNodeWait = `-- name: DeleteFlowNodeWait :exec
method DeleteFlowNodeWait (line 1214) | func (q *Queries) DeleteFlowNodeWait(ctx context.Context, flowNodeID idw...
constant deleteFlowTag (line 1219) | deleteFlowTag = `-- name: DeleteFlowTag :exec
method DeleteFlowTag (line 1225) | func (q *Queries) DeleteFlowTag(ctx context.Context, id idwrap.IDWrap) e...
constant deleteFlowVariable (line 1230) | deleteFlowVariable = `-- name: DeleteFlowVariable :exec
method DeleteFlowVariable (line 1236) | func (q *Queries) DeleteFlowVariable(ctx context.Context, id idwrap.IDWr...
constant deleteMigration (line 1241) | deleteMigration = `-- name: DeleteMigration :exec
method DeleteMigration (line 1247) | func (q *Queries) DeleteMigration(ctx context.Context, id []byte) error {
constant deleteNodeExecutionsByNodeID (line 1252) | deleteNodeExecutionsByNodeID = `-- name: DeleteNodeExecutionsByNodeID :exec
method DeleteNodeExecutionsByNodeID (line 1256) | func (q *Queries) DeleteNodeExecutionsByNodeID(ctx context.Context, node...
constant deleteNodeExecutionsByNodeIDs (line 1261) | deleteNodeExecutionsByNodeIDs = `-- name: DeleteNodeExecutionsByNodeIDs ...
method DeleteNodeExecutionsByNodeIDs (line 1265) | func (q *Queries) DeleteNodeExecutionsByNodeIDs(ctx context.Context, nod...
constant deleteTag (line 1280) | deleteTag = `-- name: DeleteTag :exec
method DeleteTag (line 1286) | func (q *Queries) DeleteTag(ctx context.Context, id idwrap.IDWrap) error {
constant getAllFlowsByWorkspaceID (line 1291) | getAllFlowsByWorkspaceID = `-- name: GetAllFlowsByWorkspaceID :many
method GetAllFlowsByWorkspaceID (line 1308) | func (q *Queries) GetAllFlowsByWorkspaceID(ctx context.Context, workspac...
constant getFlow (line 1340) | getFlow = `-- name: GetFlow :one
method GetFlow (line 1357) | func (q *Queries) GetFlow(ctx context.Context, id idwrap.IDWrap) (Flow, ...
constant getFlowEdge (line 1373) | getFlowEdge = `-- name: GetFlowEdge :one
method GetFlowEdge (line 1388) | func (q *Queries) GetFlowEdge(ctx context.Context, id idwrap.IDWrap) (Fl...
constant getFlowEdgesByFlowID (line 1402) | getFlowEdgesByFlowID = `-- name: GetFlowEdgesByFlowID :many
method GetFlowEdgesByFlowID (line 1416) | func (q *Queries) GetFlowEdgesByFlowID(ctx context.Context, flowID idwra...
constant getFlowEdgesByFlowIDs (line 1446) | getFlowEdgesByFlowIDs = `-- name: GetFlowEdgesByFlowIDs :many
type GetFlowEdgesByFlowIDsRow (line 1452) | type GetFlowEdgesByFlowIDsRow struct
method GetFlowEdgesByFlowIDs (line 1458) | func (q *Queries) GetFlowEdgesByFlowIDs(ctx context.Context, flowIds []i...
constant getFlowEdgesBySourceNodeIDs (line 1491) | getFlowEdgesBySourceNodeIDs = `-- name: GetFlowEdgesBySourceNodeIDs :many
method GetFlowEdgesBySourceNodeIDs (line 1498) | func (q *Queries) GetFlowEdgesBySourceNodeIDs(ctx context.Context, nodei...
constant getFlowEdgesByTargetNodeIDs (line 1538) | getFlowEdgesByTargetNodeIDs = `-- name: GetFlowEdgesByTargetNodeIDs :many
method GetFlowEdgesByTargetNodeIDs (line 1545) | func (q *Queries) GetFlowEdgesByTargetNodeIDs(ctx context.Context, nodei...
constant getFlowNode (line 1585) | getFlowNode = `-- name: GetFlowNode :one
method GetFlowNode (line 1601) | func (q *Queries) GetFlowNode(ctx context.Context, id idwrap.IDWrap) (Fl...
constant getFlowNodeCondition (line 1616) | getFlowNodeCondition = `-- name: GetFlowNodeCondition :one
method GetFlowNodeCondition (line 1627) | func (q *Queries) GetFlowNodeCondition(ctx context.Context, flowNodeID i...
constant getFlowNodeFor (line 1634) | getFlowNodeFor = `-- name: GetFlowNodeFor :one
method GetFlowNodeFor (line 1647) | func (q *Queries) GetFlowNodeFor(ctx context.Context, flowNodeID idwrap....
constant getFlowNodeForEach (line 1659) | getFlowNodeForEach = `-- name: GetFlowNodeForEach :one
method GetFlowNodeForEach (line 1672) | func (q *Queries) GetFlowNodeForEach(ctx context.Context, flowNodeID idw...
constant getFlowNodeGraphQL (line 1684) | getFlowNodeGraphQL = `-- name: GetFlowNodeGraphQL :one
method GetFlowNodeGraphQL (line 1696) | func (q *Queries) GetFlowNodeGraphQL(ctx context.Context, flowNodeID idw...
constant getFlowNodeHTTP (line 1703) | getFlowNodeHTTP = `-- name: GetFlowNodeHTTP :one
method GetFlowNodeHTTP (line 1715) | func (q *Queries) GetFlowNodeHTTP(ctx context.Context, flowNodeID idwrap...
constant getFlowNodeJs (line 1722) | getFlowNodeJs = `-- name: GetFlowNodeJs :one
method GetFlowNodeJs (line 1734) | func (q *Queries) GetFlowNodeJs(ctx context.Context, flowNodeID idwrap.I...
constant getFlowNodeRunSubFlow (line 1741) | getFlowNodeRunSubFlow = `-- name: GetFlowNodeRunSubFlow :one
method GetFlowNodeRunSubFlow (line 1749) | func (q *Queries) GetFlowNodeRunSubFlow(ctx context.Context, flowNodeID ...
constant getFlowNodeSubFlowReturn (line 1761) | getFlowNodeSubFlowReturn = `-- name: GetFlowNodeSubFlowReturn :one
method GetFlowNodeSubFlowReturn (line 1769) | func (q *Queries) GetFlowNodeSubFlowReturn(ctx context.Context, flowNode...
constant getFlowNodeSubFlowTrigger (line 1776) | getFlowNodeSubFlowTrigger = `-- name: GetFlowNodeSubFlowTrigger :one
method GetFlowNodeSubFlowTrigger (line 1784) | func (q *Queries) GetFlowNodeSubFlowTrigger(ctx context.Context, flowNod...
constant getFlowNodeWait (line 1791) | getFlowNodeWait = `-- name: GetFlowNodeWait :one
method GetFlowNodeWait (line 1801) | func (q *Queries) GetFlowNodeWait(ctx context.Context, flowNodeID idwrap...
constant getFlowNodesByFlowID (line 1808) | getFlowNodesByFlowID = `-- name: GetFlowNodesByFlowID :many
method GetFlowNodesByFlowID (line 1823) | func (q *Queries) GetFlowNodesByFlowID(ctx context.Context, flowID idwra...
constant getFlowNodesByFlowIDs (line 1854) | getFlowNodesByFlowIDs = `-- name: GetFlowNodesByFlowIDs :many
type GetFlowNodesByFlowIDsRow (line 1860) | type GetFlowNodesByFlowIDsRow struct
method GetFlowNodesByFlowIDs (line 1866) | func (q *Queries) GetFlowNodesByFlowIDs(ctx context.Context, flowIds []i...
constant getFlowTag (line 1899) | getFlowTag = `-- name: GetFlowTag :one
method GetFlowTag (line 1909) | func (q *Queries) GetFlowTag(ctx context.Context, id idwrap.IDWrap) (Flo...
constant getFlowTagsByFlowID (line 1916) | getFlowTagsByFlowID = `-- name: GetFlowTagsByFlowID :many
method GetFlowTagsByFlowID (line 1927) | func (q *Queries) GetFlowTagsByFlowID(ctx context.Context, flowID idwrap...
constant getFlowTagsByTagID (line 1950) | getFlowTagsByTagID = `-- name: GetFlowTagsByTagID :many
method GetFlowTagsByTagID (line 1961) | func (q *Queries) GetFlowTagsByTagID(ctx context.Context, tagID idwrap.I...
constant getFlowVariable (line 1984) | getFlowVariable = `-- name: GetFlowVariable :one
method GetFlowVariable (line 2000) | func (q *Queries) GetFlowVariable(ctx context.Context, id idwrap.IDWrap)...
constant getFlowVariablesByFlowID (line 2015) | getFlowVariablesByFlowID = `-- name: GetFlowVariablesByFlowID :many
method GetFlowVariablesByFlowID (line 2030) | func (q *Queries) GetFlowVariablesByFlowID(ctx context.Context, flowID i...
constant getFlowVariablesByFlowIDOrdered (line 2061) | getFlowVariablesByFlowIDOrdered = `-- name: GetFlowVariablesByFlowIDOrde...
method GetFlowVariablesByFlowIDOrdered (line 2078) | func (q *Queries) GetFlowVariablesByFlowIDOrdered(ctx context.Context, f...
constant getFlowVariablesByFlowIDs (line 2109) | getFlowVariablesByFlowIDs = `-- name: GetFlowVariablesByFlowIDs :many
type GetFlowVariablesByFlowIDsRow (line 2115) | type GetFlowVariablesByFlowIDsRow struct
method GetFlowVariablesByFlowIDs (line 2121) | func (q *Queries) GetFlowVariablesByFlowIDs(ctx context.Context, flowIds...
constant getFlowsByVersionParentID (line 2154) | getFlowsByVersionParentID = `-- name: GetFlowsByVersionParentID :many
method GetFlowsByVersionParentID (line 2170) | func (q *Queries) GetFlowsByVersionParentID(ctx context.Context, version...
constant getFlowsByWorkspaceID (line 2202) | getFlowsByWorkspaceID = `-- name: GetFlowsByWorkspaceID :many
method GetFlowsByWorkspaceID (line 2219) | func (q *Queries) GetFlowsByWorkspaceID(ctx context.Context, workspaceID...
constant getLatestNodeExecutionByNodeID (line 2251) | getLatestNodeExecutionByNodeID = `-- name: GetLatestNodeExecutionByNodeI...
method GetLatestNodeExecutionByNodeID (line 2259) | func (q *Queries) GetLatestNodeExecutionByNodeID(ctx context.Context, no...
constant getLatestVersionByParentID (line 2279) | getLatestVersionByParentID = `-- name: GetLatestVersionByParentID :one
method GetLatestVersionByParentID (line 2297) | func (q *Queries) GetLatestVersionByParentID(ctx context.Context, versio...
constant getMigration (line 2313) | getMigration = `-- name: GetMigration :one
method GetMigration (line 2326) | func (q *Queries) GetMigration(ctx context.Context, id []byte) (Migratio...
constant getMigrations (line 2338) | getMigrations = `-- name: GetMigrations :many
method GetMigrations (line 2348) | func (q *Queries) GetMigrations(ctx context.Context) ([]Migration, error) {
constant getNodeExecution (line 2376) | getNodeExecution = `-- name: GetNodeExecution :one
method GetNodeExecution (line 2382) | func (q *Queries) GetNodeExecution(ctx context.Context, id idwrap.IDWrap...
constant getNodeExecutionsByNodeID (line 2402) | getNodeExecutionsByNodeID = `-- name: GetNodeExecutionsByNodeID :many
method GetNodeExecutionsByNodeID (line 2409) | func (q *Queries) GetNodeExecutionsByNodeID(ctx context.Context, nodeID ...
constant getTag (line 2445) | getTag = `-- name: GetTag :one
method GetTag (line 2458) | func (q *Queries) GetTag(ctx context.Context, id idwrap.IDWrap) (Tag, er...
constant getTagsByWorkspaceID (line 2470) | getTagsByWorkspaceID = `-- name: GetTagsByWorkspaceID :many
method GetTagsByWorkspaceID (line 2482) | func (q *Queries) GetTagsByWorkspaceID(ctx context.Context, workspaceID ...
constant listNodeExecutions (line 2510) | listNodeExecutions = `-- name: ListNodeExecutions :many
type ListNodeExecutionsParams (line 2517) | type ListNodeExecutionsParams struct
method ListNodeExecutions (line 2523) | func (q *Queries) ListNodeExecutions(ctx context.Context, arg ListNodeEx...
constant listNodeExecutionsByFlowRun (line 2559) | listNodeExecutionsByFlowRun = `-- name: ListNodeExecutionsByFlowRun :many
method ListNodeExecutionsByFlowRun (line 2566) | func (q *Queries) ListNodeExecutionsByFlowRun(ctx context.Context, flowI...
constant listNodeExecutionsByState (line 2602) | listNodeExecutionsByState = `-- name: ListNodeExecutionsByState :many
type ListNodeExecutionsByStateParams (line 2609) | type ListNodeExecutionsByStateParams struct
method ListNodeExecutionsByState (line 2616) | func (q *Queries) ListNodeExecutionsByState(ctx context.Context, arg Lis...
constant updateFlow (line 2657) | updateFlow = `-- name: UpdateFlow :exec
type UpdateFlowParams (line 2668) | type UpdateFlowParams struct
method UpdateFlow (line 2676) | func (q *Queries) UpdateFlow(ctx context.Context, arg UpdateFlowParams) ...
constant updateFlowEdge (line 2687) | updateFlowEdge = `-- name: UpdateFlowEdge :exec
type UpdateFlowEdgeParams (line 2697) | type UpdateFlowEdgeParams struct
method UpdateFlowEdge (line 2704) | func (q *Queries) UpdateFlowEdge(ctx context.Context, arg UpdateFlowEdge...
constant updateFlowEdgeState (line 2714) | updateFlowEdgeState = `-- name: UpdateFlowEdgeState :exec
type UpdateFlowEdgeStateParams (line 2722) | type UpdateFlowEdgeStateParams struct
method UpdateFlowEdgeState (line 2727) | func (q *Queries) UpdateFlowEdgeState(ctx context.Context, arg UpdateFlo...
constant updateFlowNode (line 2732) | updateFlowNode = `-- name: UpdateFlowNode :exec
type UpdateFlowNodeParams (line 2742) | type UpdateFlowNodeParams struct
method UpdateFlowNode (line 2749) | func (q *Queries) UpdateFlowNode(ctx context.Context, arg UpdateFlowNode...
constant updateFlowNodeCondition (line 2759) | updateFlowNodeCondition = `-- name: UpdateFlowNodeCondition :exec
type UpdateFlowNodeConditionParams (line 2767) | type UpdateFlowNodeConditionParams struct
method UpdateFlowNodeCondition (line 2772) | func (q *Queries) UpdateFlowNodeCondition(ctx context.Context, arg Updat...
constant updateFlowNodeFor (line 2777) | updateFlowNodeFor = `-- name: UpdateFlowNodeFor :exec
type UpdateFlowNodeForParams (line 2787) | type UpdateFlowNodeForParams struct
method UpdateFlowNodeFor (line 2794) | func (q *Queries) UpdateFlowNodeFor(ctx context.Context, arg UpdateFlowN...
constant updateFlowNodeForEach (line 2804) | updateFlowNodeForEach = `-- name: UpdateFlowNodeForEach :exec
type UpdateFlowNodeForEachParams (line 2814) | type UpdateFlowNodeForEachParams struct
method UpdateFlowNodeForEach (line 2821) | func (q *Queries) UpdateFlowNodeForEach(ctx context.Context, arg UpdateF...
constant updateFlowNodeGraphQL (line 2831) | updateFlowNodeGraphQL = `-- name: UpdateFlowNodeGraphQL :exec
type UpdateFlowNodeGraphQLParams (line 2838) | type UpdateFlowNodeGraphQLParams struct
method UpdateFlowNodeGraphQL (line 2844) | func (q *Queries) UpdateFlowNodeGraphQL(ctx context.Context, arg UpdateF...
constant updateFlowNodeHTTP (line 2849) | updateFlowNodeHTTP = `-- name: UpdateFlowNodeHTTP :exec
type UpdateFlowNodeHTTPParams (line 2862) | type UpdateFlowNodeHTTPParams struct
method UpdateFlowNodeHTTP (line 2868) | func (q *Queries) UpdateFlowNodeHTTP(ctx context.Context, arg UpdateFlow...
constant updateFlowNodeIDMapping (line 2873) | updateFlowNodeIDMapping = `-- name: UpdateFlowNodeIDMapping :exec
type UpdateFlowNodeIDMappingParams (line 2879) | type UpdateFlowNodeIDMappingParams struct
method UpdateFlowNodeIDMapping (line 2884) | func (q *Queries) UpdateFlowNodeIDMapping(ctx context.Context, arg Updat...
constant updateFlowNodeJs (line 2889) | updateFlowNodeJs = `-- name: UpdateFlowNodeJs :exec
type UpdateFlowNodeJsParams (line 2898) | type UpdateFlowNodeJsParams struct
method UpdateFlowNodeJs (line 2904) | func (q *Queries) UpdateFlowNodeJs(ctx context.Context, arg UpdateFlowNo...
constant updateFlowNodeRunSubFlow (line 2909) | updateFlowNodeRunSubFlow = `-- name: UpdateFlowNodeRunSubFlow :exec
type UpdateFlowNodeRunSubFlowParams (line 2915) | type UpdateFlowNodeRunSubFlowParams struct
method UpdateFlowNodeRunSubFlow (line 2922) | func (q *Queries) UpdateFlowNodeRunSubFlow(ctx context.Context, arg Upda...
constant updateFlowNodeState (line 2932) | updateFlowNodeState = `-- name: UpdateFlowNodeState :exec
type UpdateFlowNodeStateParams (line 2940) | type UpdateFlowNodeStateParams struct
method UpdateFlowNodeState (line 2945) | func (q *Queries) UpdateFlowNodeState(ctx context.Context, arg UpdateFlo...
constant updateFlowNodeSubFlowReturn (line 2950) | updateFlowNodeSubFlowReturn = `-- name: UpdateFlowNodeSubFlowReturn :exec
type UpdateFlowNodeSubFlowReturnParams (line 2956) | type UpdateFlowNodeSubFlowReturnParams struct
method UpdateFlowNodeSubFlowReturn (line 2961) | func (q *Queries) UpdateFlowNodeSubFlowReturn(ctx context.Context, arg U...
constant updateFlowNodeSubFlowTrigger (line 2966) | updateFlowNodeSubFlowTrigger = `-- name: UpdateFlowNodeSubFlowTrigger :exec
type UpdateFlowNodeSubFlowTriggerParams (line 2972) | type UpdateFlowNodeSubFlowTriggerParams struct
method UpdateFlowNodeSubFlowTrigger (line 2977) | func (q *Queries) UpdateFlowNodeSubFlowTrigger(ctx context.Context, arg ...
constant updateFlowNodeWait (line 2982) | updateFlowNodeWait = `-- name: UpdateFlowNodeWait :exec
type UpdateFlowNodeWaitParams (line 2990) | type UpdateFlowNodeWaitParams struct
method UpdateFlowNodeWait (line 2995) | func (q *Queries) UpdateFlowNodeWait(ctx context.Context, arg UpdateFlow...
constant updateFlowVariable (line 3000) | updateFlowVariable = `-- name: UpdateFlowVariable :exec
type UpdateFlowVariableParams (line 3011) | type UpdateFlowVariableParams struct
method UpdateFlowVariable (line 3019) | func (q *Queries) UpdateFlowVariable(ctx context.Context, arg UpdateFlow...
constant updateFlowVariableOrder (line 3030) | updateFlowVariableOrder = `-- name: UpdateFlowVariableOrder :exec
type UpdateFlowVariableOrderParams (line 3038) | type UpdateFlowVariableOrderParams struct
method UpdateFlowVariableOrder (line 3043) | func (q *Queries) UpdateFlowVariableOrder(ctx context.Context, arg Updat...
constant updateNodeExecution (line 3048) | updateNodeExecution = `-- name: UpdateNodeExecution :one
type UpdateNodeExecutionParams (line 3056) | type UpdateNodeExecutionParams struct
method UpdateNodeExecution (line 3067) | func (q *Queries) UpdateNodeExecution(ctx context.Context, arg UpdateNod...
constant updateNodeExecutionNodeID (line 3096) | updateNodeExecutionNodeID = `-- name: UpdateNodeExecutionNodeID :exec
type UpdateNodeExecutionNodeIDParams (line 3102) | type UpdateNodeExecutionNodeIDParams struct
method UpdateNodeExecutionNodeID (line 3107) | func (q *Queries) UpdateNodeExecutionNodeID(ctx context.Context, arg Upd...
constant updateTag (line 3112) | updateTag = `-- name: UpdateTag :exec
type UpdateTagParams (line 3121) | type UpdateTagParams struct
method UpdateTag (line 3127) | func (q *Queries) UpdateTag(ctx context.Context, arg UpdateTagParams) er...
constant upsertNodeExecution (line 3132) | upsertNodeExecution = `-- name: UpsertNodeExecution :one
type UpsertNodeExecutionParams (line 3151) | type UpsertNodeExecutionParams struct
method UpsertNodeExecution (line 3166) | func (q *Queries) UpsertNodeExecution(ctx context.Context, arg UpsertNod...
FILE: packages/db/pkg/sqlc/gen/graphql.sql.go
constant createGraphQL (line 16) | createGraphQL = `-- name: CreateGraphQL :exec
type CreateGraphQLParams (line 26) | type CreateGraphQLParams struct
method CreateGraphQL (line 48) | func (q *Queries) CreateGraphQL(ctx context.Context, arg CreateGraphQLPa...
constant createGraphQLAssert (line 73) | createGraphQLAssert = `-- name: CreateGraphQLAssert :exec
type CreateGraphQLAssertParams (line 93) | type CreateGraphQLAssertParams struct
method CreateGraphQLAssert (line 110) | func (q *Queries) CreateGraphQLAssert(ctx context.Context, arg CreateGra...
constant createGraphQLHeader (line 130) | createGraphQLHeader = `-- name: CreateGraphQLHeader :exec
type CreateGraphQLHeaderParams (line 140) | type CreateGraphQLHeaderParams struct
method CreateGraphQLHeader (line 159) | func (q *Queries) CreateGraphQLHeader(ctx context.Context, arg CreateGra...
constant createGraphQLResponse (line 181) | createGraphQLResponse = `-- name: CreateGraphQLResponse :exec
type CreateGraphQLResponseParams (line 188) | type CreateGraphQLResponseParams struct
method CreateGraphQLResponse (line 199) | func (q *Queries) CreateGraphQLResponse(ctx context.Context, arg CreateG...
constant createGraphQLResponseAssert (line 213) | createGraphQLResponseAssert = `-- name: CreateGraphQLResponseAssert :exec
type CreateGraphQLResponseAssertParams (line 221) | type CreateGraphQLResponseAssertParams struct
method CreateGraphQLResponseAssert (line 230) | func (q *Queries) CreateGraphQLResponseAssert(ctx context.Context, arg C...
constant createGraphQLResponseHeader (line 241) | createGraphQLResponseHeader = `-- name: CreateGraphQLResponseHeader :exec
type CreateGraphQLResponseHeaderParams (line 248) | type CreateGraphQLResponseHeaderParams struct
method CreateGraphQLResponseHeader (line 256) | func (q *Queries) CreateGraphQLResponseHeader(ctx context.Context, arg C...
constant createGraphQLResponseHeaderBulk (line 267) | createGraphQLResponseHeaderBulk = `-- name: CreateGraphQLResponseHeaderB...
type CreateGraphQLResponseHeaderBulkParams (line 284) | type CreateGraphQLResponseHeaderBulkParams struct
method CreateGraphQLResponseHeaderBulk (line 337) | func (q *Queries) CreateGraphQLResponseHeaderBulk(ctx context.Context, a...
constant createGraphQLVersion (line 393) | createGraphQLVersion = `-- name: CreateGraphQLVersion :exec
type CreateGraphQLVersionParams (line 401) | type CreateGraphQLVersionParams struct
method CreateGraphQLVersion (line 412) | func (q *Queries) CreateGraphQLVersion(ctx context.Context, arg CreateGr...
constant deleteGraphQL (line 425) | deleteGraphQL = `-- name: DeleteGraphQL :exec
method DeleteGraphQL (line 430) | func (q *Queries) DeleteGraphQL(ctx context.Context, id idwrap.IDWrap) e...
constant deleteGraphQLAssert (line 435) | deleteGraphQLAssert = `-- name: DeleteGraphQLAssert :exec
method DeleteGraphQLAssert (line 440) | func (q *Queries) DeleteGraphQLAssert(ctx context.Context, id []byte) er...
constant deleteGraphQLHeader (line 445) | deleteGraphQLHeader = `-- name: DeleteGraphQLHeader :exec
method DeleteGraphQLHeader (line 450) | func (q *Queries) DeleteGraphQLHeader(ctx context.Context, id idwrap.IDW...
constant deleteGraphQLResponse (line 455) | deleteGraphQLResponse = `-- name: DeleteGraphQLResponse :exec
method DeleteGraphQLResponse (line 459) | func (q *Queries) DeleteGraphQLResponse(ctx context.Context, id idwrap.I...
constant deleteGraphQLResponseHeader (line 464) | deleteGraphQLResponseHeader = `-- name: DeleteGraphQLResponseHeader :exec
method DeleteGraphQLResponseHeader (line 468) | func (q *Queries) DeleteGraphQLResponseHeader(ctx context.Context, id id...
constant getGraphQL (line 473) | getGraphQL = `-- name: GetGraphQL :one
method GetGraphQL (line 485) | func (q *Queries) GetGraphQL(ctx context.Context, id idwrap.IDWrap) (Gra...
constant getGraphQLAssert (line 512) | getGraphQLAssert = `-- name: GetGraphQLAssert :one
type GetGraphQLAssertRow (line 534) | type GetGraphQLAssertRow struct
method GetGraphQLAssert (line 552) | func (q *Queries) GetGraphQLAssert(ctx context.Context, id []byte) (GetG...
constant getGraphQLAssertDeltasByParentID (line 574) | getGraphQLAssertDeltasByParentID = `-- name: GetGraphQLAssertDeltasByPar...
type GetGraphQLAssertDeltasByParentIDRow (line 595) | type GetGraphQLAssertDeltasByParentIDRow struct
method GetGraphQLAssertDeltasByParentID (line 612) | func (q *Queries) GetGraphQLAssertDeltasByParentID(ctx context.Context, ...
constant getGraphQLAssertDeltasByWorkspaceID (line 650) | getGraphQLAssertDeltasByWorkspaceID = `-- name: GetGraphQLAssertDeltasBy...
type GetGraphQLAssertDeltasByWorkspaceIDRow (line 672) | type GetGraphQLAssertDeltasByWorkspaceIDRow struct
method GetGraphQLAssertDeltasByWorkspaceID (line 689) | func (q *Queries) GetGraphQLAssertDeltasByWorkspaceID(ctx context.Contex...
constant getGraphQLAssertsByGraphQLID (line 727) | getGraphQLAssertsByGraphQLID = `-- name: GetGraphQLAssertsByGraphQLID :many
type GetGraphQLAssertsByGraphQLIDRow (line 748) | type GetGraphQLAssertsByGraphQLIDRow struct
method GetGraphQLAssertsByGraphQLID (line 765) | func (q *Queries) GetGraphQLAssertsByGraphQLID(ctx context.Context, grap...
constant getGraphQLAssertsByIDs (line 803) | getGraphQLAssertsByIDs = `-- name: GetGraphQLAssertsByIDs :many
type GetGraphQLAssertsByIDsRow (line 823) | type GetGraphQLAssertsByIDsRow struct
method GetGraphQLAssertsByIDs (line 840) | func (q *Queries) GetGraphQLAssertsByIDs(ctx context.Context, ids [][]by...
constant getGraphQLDeltasByParentID (line 888) | getGraphQLDeltasByParentID = `-- name: GetGraphQLDeltasByParentID :many
method GetGraphQLDeltasByParentID (line 899) | func (q *Queries) GetGraphQLDeltasByParentID(ctx context.Context, parent...
constant getGraphQLDeltasByWorkspaceID (line 942) | getGraphQLDeltasByWorkspaceID = `-- name: GetGraphQLDeltasByWorkspaceID ...
method GetGraphQLDeltasByWorkspaceID (line 955) | func (q *Queries) GetGraphQLDeltasByWorkspaceID(ctx context.Context, wor...
constant getGraphQLHeaderDeltasByParentID (line 998) | getGraphQLHeaderDeltasByParentID = `-- name: GetGraphQLHeaderDeltasByPar...
method GetGraphQLHeaderDeltasByParentID (line 1009) | func (q *Queries) GetGraphQLHeaderDeltasByParentID(ctx context.Context, ...
constant getGraphQLHeaderDeltasByWorkspaceID (line 1049) | getGraphQLHeaderDeltasByWorkspaceID = `-- name: GetGraphQLHeaderDeltasBy...
method GetGraphQLHeaderDeltasByWorkspaceID (line 1063) | func (q *Queries) GetGraphQLHeaderDeltasByWorkspaceID(ctx context.Contex...
constant getGraphQLHeaders (line 1103) | getGraphQLHeaders = `-- name: GetGraphQLHeaders :many
method GetGraphQLHeaders (line 1116) | func (q *Queries) GetGraphQLHeaders(ctx context.Context, graphqlID idwra...
constant getGraphQLHeadersByIDs (line 1156) | getGraphQLHeadersByIDs = `-- name: GetGraphQLHeadersByIDs :many
method GetGraphQLHeadersByIDs (line 1166) | func (q *Queries) GetGraphQLHeadersByIDs(ctx context.Context, ids []idwr...
constant getGraphQLResponse (line 1216) | getGraphQLResponse = `-- name: GetGraphQLResponse :one
method GetGraphQLResponse (line 1225) | func (q *Queries) GetGraphQLResponse(ctx context.Context, id idwrap.IDWr...
constant getGraphQLResponseAssertsByResponseID (line 1241) | getGraphQLResponseAssertsByResponseID = `-- name: GetGraphQLResponseAsse...
method GetGraphQLResponseAssertsByResponseID (line 1248) | func (q *Queries) GetGraphQLResponseAssertsByResponseID(ctx context.Cont...
constant getGraphQLResponseAssertsByWorkspaceID (line 1277) | getGraphQLResponseAssertsByWorkspaceID = `-- name: GetGraphQLResponseAss...
method GetGraphQLResponseAssertsByWorkspaceID (line 1290) | func (q *Queries) GetGraphQLResponseAssertsByWorkspaceID(ctx context.Con...
constant getGraphQLResponseHeadersByResponseID (line 1319) | getGraphQLResponseHeadersByResponseID = `-- name: GetGraphQLResponseHead...
method GetGraphQLResponseHeadersByResponseID (line 1329) | func (q *Queries) GetGraphQLResponseHeadersByResponseID(ctx context.Cont...
constant getGraphQLResponseHeadersByWorkspaceID (line 1358) | getGraphQLResponseHeadersByWorkspaceID = `-- name: GetGraphQLResponseHea...
method GetGraphQLResponseHeadersByWorkspaceID (line 1368) | func (q *Queries) GetGraphQLResponseHeadersByWorkspaceID(ctx context.Con...
constant getGraphQLResponsesByGraphQLID (line 1397) | getGraphQLResponsesByGraphQLID = `-- name: GetGraphQLResponsesByGraphQLI...
method GetGraphQLResponsesByGraphQLID (line 1405) | func (q *Queries) GetGraphQLResponsesByGraphQLID(ctx context.Context, gr...
constant getGraphQLResponsesByWorkspaceID (line 1437) | getGraphQLResponsesByWorkspaceID = `-- name: GetGraphQLResponsesByWorksp...
method GetGraphQLResponsesByWorkspaceID (line 1447) | func (q *Queries) GetGraphQLResponsesByWorkspaceID(ctx context.Context, ...
constant getGraphQLVersionsByGraphQLID (line 1479) | getGraphQLVersionsByGraphQLID = `-- name: GetGraphQLVersionsByGraphQLID ...
method GetGraphQLVersionsByGraphQLID (line 1486) | func (q *Queries) GetGraphQLVersionsByGraphQLID(ctx context.Context, gra...
constant getGraphQLWorkspaceID (line 1517) | getGraphQLWorkspaceID = `-- name: GetGraphQLWorkspaceID :one
method GetGraphQLWorkspaceID (line 1524) | func (q *Queries) GetGraphQLWorkspaceID(ctx context.Context, id idwrap.I...
constant getGraphQLsByWorkspaceID (line 1531) | getGraphQLsByWorkspaceID = `-- name: GetGraphQLsByWorkspaceID :many
method GetGraphQLsByWorkspaceID (line 1542) | func (q *Queries) GetGraphQLsByWorkspaceID(ctx context.Context, workspac...
constant updateGraphQL (line 1585) | updateGraphQL = `-- name: UpdateGraphQL :exec
type UpdateGraphQLParams (line 1598) | type UpdateGraphQLParams struct
method UpdateGraphQL (line 1608) | func (q *Queries) UpdateGraphQL(ctx context.Context, arg UpdateGraphQLPa...
constant updateGraphQLAssert (line 1621) | updateGraphQLAssert = `-- name: UpdateGraphQLAssert :exec
type UpdateGraphQLAssertParams (line 1632) | type UpdateGraphQLAssertParams struct
method UpdateGraphQLAssert (line 1641) | func (q *Queries) UpdateGraphQLAssert(ctx context.Context, arg UpdateGra...
constant updateGraphQLAssertDelta (line 1653) | updateGraphQLAssertDelta = `-- name: UpdateGraphQLAssertDelta :exec
type UpdateGraphQLAssertDeltaParams (line 1664) | type UpdateGraphQLAssertDeltaParams struct
method UpdateGraphQLAssertDelta (line 1673) | func (q *Queries) UpdateGraphQLAssertDelta(ctx context.Context, arg Upda...
constant updateGraphQLDelta (line 1685) | updateGraphQLDelta = `-- name: UpdateGraphQLDelta :exec
type UpdateGraphQLDeltaParams (line 1697) | type UpdateGraphQLDeltaParams struct
method UpdateGraphQLDelta (line 1706) | func (q *Queries) UpdateGraphQLDelta(ctx context.Context, arg UpdateGrap...
constant updateGraphQLHeader (line 1718) | updateGraphQLHeader = `-- name: UpdateGraphQLHeader :exec
type UpdateGraphQLHeaderParams (line 1730) | type UpdateGraphQLHeaderParams struct
method UpdateGraphQLHeader (line 1739) | func (q *Queries) UpdateGraphQLHeader(ctx context.Context, arg UpdateGra...
constant updateGraphQLHeaderDelta (line 1751) | updateGraphQLHeaderDelta = `-- name: UpdateGraphQLHeaderDelta :exec
type UpdateGraphQLHeaderDeltaParams (line 1763) | type UpdateGraphQLHeaderDeltaParams struct
method UpdateGraphQLHeaderDelta (line 1773) | func (q *Queries) UpdateGraphQLHeaderDelta(ctx context.Context, arg Upda...
FILE: packages/db/pkg/sqlc/gen/http.sql.go
constant createHTTP (line 17) | createHTTP = `-- name: CreateHTTP :exec
type CreateHTTPParams (line 26) | type CreateHTTPParams struct
method CreateHTTP (line 49) | func (q *Queries) CreateHTTP(ctx context.Context, arg CreateHTTPParams) ...
constant createHTTPAssert (line 75) | createHTTPAssert = `-- name: CreateHTTPAssert :exec
type CreateHTTPAssertParams (line 84) | type CreateHTTPAssertParams struct
method CreateHTTPAssert (line 101) | func (q *Queries) CreateHTTPAssert(ctx context.Context, arg CreateHTTPAs...
constant createHTTPAssertBulk (line 121) | createHTTPAssertBulk = `-- name: CreateHTTPAssertBulk :exec
type CreateHTTPAssertBulkParams (line 140) | type CreateHTTPAssertBulkParams struct
method CreateHTTPAssertBulk (line 283) | func (q *Queries) CreateHTTPAssertBulk(ctx context.Context, arg CreateHT...
constant createHTTPBodyForm (line 429) | createHTTPBodyForm = `-- name: CreateHTTPBodyForm :exec
type CreateHTTPBodyFormParams (line 438) | type CreateHTTPBodyFormParams struct
method CreateHTTPBodyForm (line 457) | func (q *Queries) CreateHTTPBodyForm(ctx context.Context, arg CreateHTTP...
constant createHTTPBodyRaw (line 479) | createHTTPBodyRaw = `-- name: CreateHTTPBodyRaw :exec
type CreateHTTPBodyRawParams (line 497) | type CreateHTTPBodyRawParams struct
method CreateHTTPBodyRaw (line 510) | func (q *Queries) CreateHTTPBodyRaw(ctx context.Context, arg CreateHTTPB...
constant createHTTPBodyUrlEncoded (line 526) | createHTTPBodyUrlEncoded = `-- name: CreateHTTPBodyUrlEncoded :exec
type CreateHTTPBodyUrlEncodedParams (line 535) | type CreateHTTPBodyUrlEncodedParams struct
method CreateHTTPBodyUrlEncoded (line 554) | func (q *Queries) CreateHTTPBodyUrlEncoded(ctx context.Context, arg Crea...
constant createHTTPBodyUrlEncodedBulk (line 576) | createHTTPBodyUrlEncodedBulk = `-- name: CreateHTTPBodyUrlEncodedBulk :exec
type CreateHTTPBodyUrlEncodedBulkParams (line 595) | type CreateHTTPBodyUrlEncodedBulkParams struct
method CreateHTTPBodyUrlEncodedBulk (line 758) | func (q *Queries) CreateHTTPBodyUrlEncodedBulk(ctx context.Context, arg ...
constant createHTTPHeader (line 924) | createHTTPHeader = `-- name: CreateHTTPHeader :exec
type CreateHTTPHeaderParams (line 933) | type CreateHTTPHeaderParams struct
method CreateHTTPHeader (line 952) | func (q *Queries) CreateHTTPHeader(ctx context.Context, arg CreateHTTPHe...
constant createHTTPResponse (line 974) | createHTTPResponse = `-- name: CreateHTTPResponse :exec
type CreateHTTPResponseParams (line 981) | type CreateHTTPResponseParams struct
method CreateHTTPResponse (line 992) | func (q *Queries) CreateHTTPResponse(ctx context.Context, arg CreateHTTP...
constant createHTTPResponseAssert (line 1006) | createHTTPResponseAssert = `-- name: CreateHTTPResponseAssert :exec
type CreateHTTPResponseAssertParams (line 1013) | type CreateHTTPResponseAssertParams struct
method CreateHTTPResponseAssert (line 1021) | func (q *Queries) CreateHTTPResponseAssert(ctx context.Context, arg Crea...
constant createHTTPResponseAssertBulk (line 1032) | createHTTPResponseAssertBulk = `-- name: CreateHTTPResponseAssertBulk :exec
type CreateHTTPResponseAssertBulkParams (line 1049) | type CreateHTTPResponseAssertBulkParams struct
method CreateHTTPResponseAssertBulk (line 1102) | func (q *Queries) CreateHTTPResponseAssertBulk(ctx context.Context, arg ...
constant createHTTPResponseBulk (line 1158) | createHTTPResponseBulk = `-- name: CreateHTTPResponseBulk :exec
type CreateHTTPResponseBulkParams (line 1175) | type CreateHTTPResponseBulkParams struct
method CreateHTTPResponseBulk (line 1258) | func (q *Queries) CreateHTTPResponseBulk(ctx context.Context, arg Create...
constant createHTTPResponseHeader (line 1344) | createHTTPResponseHeader = `-- name: CreateHTTPResponseHeader :exec
type CreateHTTPResponseHeaderParams (line 1351) | type CreateHTTPResponseHeaderParams struct
method CreateHTTPResponseHeader (line 1359) | func (q *Queries) CreateHTTPResponseHeader(ctx context.Context, arg Crea...
constant createHTTPResponseHeaderBulk (line 1370) | createHTTPResponseHeaderBulk = `-- name: CreateHTTPResponseHeaderBulk :exec
type CreateHTTPResponseHeaderBulkParams (line 1387) | type CreateHTTPResponseHeaderBulkParams struct
method CreateHTTPResponseHeaderBulk (line 1440) | func (q *Queries) CreateHTTPResponseHeaderBulk(ctx context.Context, arg ...
constant createHTTPSearchParam (line 1496) | createHTTPSearchParam = `-- name: CreateHTTPSearchParam :exec
type CreateHTTPSearchParamParams (line 1505) | type CreateHTTPSearchParamParams struct
method CreateHTTPSearchParam (line 1524) | func (q *Queries) CreateHTTPSearchParam(ctx context.Context, arg CreateH...
constant createHttpVersion (line 1546) | createHttpVersion = `-- name: CreateHttpVersion :exec
type CreateHttpVersionParams (line 1553) | type CreateHttpVersionParams struct
method CreateHttpVersion (line 1563) | func (q *Queries) CreateHttpVersion(ctx context.Context, arg CreateHttpV...
constant deleteHTTP (line 1576) | deleteHTTP = `-- name: DeleteHTTP :exec
method DeleteHTTP (line 1581) | func (q *Queries) DeleteHTTP(ctx context.Context, id idwrap.IDWrap) error {
constant deleteHTTPAssert (line 1586) | deleteHTTPAssert = `-- name: DeleteHTTPAssert :exec
method DeleteHTTPAssert (line 1590) | func (q *Queries) DeleteHTTPAssert(ctx context.Context, id idwrap.IDWrap...
constant deleteHTTPBodyForm (line 1595) | deleteHTTPBodyForm = `-- name: DeleteHTTPBodyForm :exec
method DeleteHTTPBodyForm (line 1599) | func (q *Queries) DeleteHTTPBodyForm(ctx context.Context, id idwrap.IDWr...
constant deleteHTTPBodyRaw (line 1604) | deleteHTTPBodyRaw = `-- name: DeleteHTTPBodyRaw :exec
method DeleteHTTPBodyRaw (line 1610) | func (q *Queries) DeleteHTTPBodyRaw(ctx context.Context, id idwrap.IDWra...
constant deleteHTTPBodyUrlEncoded (line 1615) | deleteHTTPBodyUrlEncoded = `-- name: DeleteHTTPBodyUrlEncoded :exec
method DeleteHTTPBodyUrlEncoded (line 1619) | func (q *Queries) DeleteHTTPBodyUrlEncoded(ctx context.Context, id idwra...
constant deleteHTTPHeader (line 1624) | deleteHTTPHeader = `-- name: DeleteHTTPHeader :exec
method DeleteHTTPHeader (line 1629) | func (q *Queries) DeleteHTTPHeader(ctx context.Context, id idwrap.IDWrap...
constant deleteHTTPResponse (line 1634) | deleteHTTPResponse = `-- name: DeleteHTTPResponse :exec
method DeleteHTTPResponse (line 1638) | func (q *Queries) DeleteHTTPResponse(ctx context.Context, id idwrap.IDWr...
constant deleteHTTPResponseAssert (line 1643) | deleteHTTPResponseAssert = `-- name: DeleteHTTPResponseAssert :exec
method DeleteHTTPResponseAssert (line 1647) | func (q *Queries) DeleteHTTPResponseAssert(ctx context.Context, id idwra...
constant deleteHTTPResponseHeader (line 1652) | deleteHTTPResponseHeader = `-- name: DeleteHTTPResponseHeader :exec
method DeleteHTTPResponseHeader (line 1656) | func (q *Queries) DeleteHTTPResponseHeader(ctx context.Context, id idwra...
constant deleteHTTPSearchParam (line 1661) | deleteHTTPSearchParam = `-- name: DeleteHTTPSearchParam :exec
method DeleteHTTPSearchParam (line 1666) | func (q *Queries) DeleteHTTPSearchParam(ctx context.Context, id idwrap.I...
constant findHTTPByContentHash (line 1671) | findHTTPByContentHash = `-- name: FindHTTPByContentHash :one
type FindHTTPByContentHashParams (line 1678) | type FindHTTPByContentHashParams struct
method FindHTTPByContentHash (line 1684) | func (q *Queries) FindHTTPByContentHash(ctx context.Context, arg FindHTT...
constant findHTTPByURLAndMethod (line 1691) | findHTTPByURLAndMethod = `-- name: FindHTTPByURLAndMethod :one
type FindHTTPByURLAndMethodParams (line 1722) | type FindHTTPByURLAndMethodParams struct
method FindHTTPByURLAndMethod (line 1729) | func (q *Queries) FindHTTPByURLAndMethod(ctx context.Context, arg FindHT...
constant getHTTP (line 1757) | getHTTP = `-- name: GetHTTP :one
method GetHTTP (line 1806) | func (q *Queries) GetHTTP(ctx context.Context, id idwrap.IDWrap) (Http, ...
constant getHTTPAssert (line 1834) | getHTTPAssert = `-- name: GetHTTPAssert :one
method GetHTTPAssert (line 1857) | func (q *Queries) GetHTTPAssert(ctx context.Context, id idwrap.IDWrap) (...
constant getHTTPAssertsByHttpID (line 1879) | getHTTPAssertsByHttpID = `-- name: GetHTTPAssertsByHttpID :many
method GetHTTPAssertsByHttpID (line 1900) | func (q *Queries) GetHTTPAssertsByHttpID(ctx context.Context, httpID idw...
constant getHTTPAssertsByHttpIDs (line 1938) | getHTTPAssertsByHttpIDs = `-- name: GetHTTPAssertsByHttpIDs :many
type GetHTTPAssertsByHttpIDsRow (line 1944) | type GetHTTPAssertsByHttpIDsRow struct
method GetHTTPAssertsByHttpIDs (line 1951) | func (q *Queries) GetHTTPAssertsByHttpIDs(ctx context.Context, httpIds [...
constant getHTTPAssertsByIDs (line 1984) | getHTTPAssertsByIDs = `-- name: GetHTTPAssertsByIDs :many
method GetHTTPAssertsByIDs (line 2004) | func (q *Queries) GetHTTPAssertsByIDs(ctx context.Context, ids []idwrap....
constant getHTTPBatchForStreaming (line 2052) | getHTTPBatchForStreaming = `-- name: GetHTTPBatchForStreaming :many
type GetHTTPBatchForStreamingParams (line 2077) | type GetHTTPBatchForStreamingParams struct
type GetHTTPBatchForStreamingRow (line 2082) | type GetHTTPBatchForStreamingRow struct
method GetHTTPBatchForStreaming (line 2105) | func (q *Queries) GetHTTPBatchForStreaming(ctx context.Context, arg GetH...
constant getHTTPBodyFormStreaming (line 2157) | getHTTPBodyFormStreaming = `-- name: GetHTTPBodyFormStreaming :many
type GetHTTPBodyFormStreamingParams (line 2180) | type GetHTTPBodyFormStreamingParams struct
type GetHTTPBodyFormStreamingRow (line 2185) | type GetHTTPBodyFormStreamingRow struct
method GetHTTPBodyFormStreaming (line 2203) | func (q *Queries) GetHTTPBodyFormStreaming(ctx context.Context, arg GetH...
constant getHTTPBodyForms (line 2252) | getHTTPBodyForms = `-- name: GetHTTPBodyForms :many
type GetHTTPBodyFormsRow (line 2276) | type GetHTTPBodyFormsRow struct
method GetHTTPBodyForms (line 2296) | func (q *Queries) GetHTTPBodyForms(ctx context.Context, httpID idwrap.ID...
constant getHTTPBodyFormsByHttpIDs (line 2336) | getHTTPBodyFormsByHttpIDs = `-- name: GetHTTPBodyFormsByHttpIDs :many
type GetHTTPBodyFormsByHttpIDsRow (line 2342) | type GetHTTPBodyFormsByHttpIDsRow struct
method GetHTTPBodyFormsByHttpIDs (line 2349) | func (q *Queries) GetHTTPBodyFormsByHttpIDs(ctx context.Context, httpIds...
constant getHTTPBodyFormsByIDs (line 2382) | getHTTPBodyFormsByIDs = `-- name: GetHTTPBodyFormsByIDs :many
type GetHTTPBodyFormsByIDsRow (line 2404) | type GetHTTPBodyFormsByIDsRow struct
method GetHTTPBodyFormsByIDs (line 2423) | func (q *Queries) GetHTTPBodyFormsByIDs(ctx context.Context, ids []idwra...
constant getHTTPBodyRaw (line 2473) | getHTTPBodyRaw = `-- name: GetHTTPBodyRaw :one
method GetHTTPBodyRaw (line 2492) | func (q *Queries) GetHTTPBodyRaw(ctx context.Context, httpID idwrap.IDWr...
constant getHTTPBodyRawByID (line 2510) | getHTTPBodyRawByID = `-- name: GetHTTPBodyRawByID :one
method GetHTTPBodyRawByID (line 2530) | func (q *Queries) GetHTTPBodyRawByID(ctx context.Context, id idwrap.IDWr...
constant getHTTPBodyRawsByHttpIDs (line 2548) | getHTTPBodyRawsByHttpIDs = `-- name: GetHTTPBodyRawsByHttpIDs :many
type GetHTTPBodyRawsByHttpIDsRow (line 2554) | type GetHTTPBodyRawsByHttpIDsRow struct
method GetHTTPBodyRawsByHttpIDs (line 2561) | func (q *Queries) GetHTTPBodyRawsByHttpIDs(ctx context.Context, httpIds ...
constant getHTTPBodyUrlEncoded (line 2594) | getHTTPBodyUrlEncoded = `-- name: GetHTTPBodyUrlEncoded :one
method GetHTTPBodyUrlEncoded (line 2619) | func (q *Queries) GetHTTPBodyUrlEncoded(ctx context.Context, id idwrap.I...
constant getHTTPBodyUrlEncodedByHttpID (line 2643) | getHTTPBodyUrlEncodedByHttpID = `-- name: GetHTTPBodyUrlEncodedByHttpID ...
method GetHTTPBodyUrlEncodedByHttpID (line 2666) | func (q *Queries) GetHTTPBodyUrlEncodedByHttpID(ctx context.Context, htt...
constant getHTTPBodyUrlEncodedsByIDs (line 2706) | getHTTPBodyUrlEncodedsByIDs = `-- name: GetHTTPBodyUrlEncodedsByIDs :many
method GetHTTPBodyUrlEncodedsByIDs (line 2728) | func (q *Queries) GetHTTPBodyUrlEncodedsByIDs(ctx context.Context, ids [...
constant getHTTPBodyUrlencodedsByHttpIDs (line 2778) | getHTTPBodyUrlencodedsByHttpIDs = `-- name: GetHTTPBodyUrlencodedsByHttp...
type GetHTTPBodyUrlencodedsByHttpIDsRow (line 2784) | type GetHTTPBodyUrlencodedsByHttpIDsRow struct
method GetHTTPBodyUrlencodedsByHttpIDs (line 2791) | func (q *Queries) GetHTTPBodyUrlencodedsByHttpIDs(ctx context.Context, h...
constant getHTTPDeltasByParentID (line 2824) | getHTTPDeltasByParentID = `-- name: GetHTTPDeltasByParentID :many
type GetHTTPDeltasByParentIDRow (line 2850) | type GetHTTPDeltasByParentIDRow struct
method GetHTTPDeltasByParentID (line 2872) | func (q *Queries) GetHTTPDeltasByParentID(ctx context.Context, parentHtt...
constant getHTTPDeltasByWorkspaceID (line 2915) | getHTTPDeltasByWorkspaceID = `-- name: GetHTTPDeltasByWorkspaceID :many
method GetHTTPDeltasByWorkspaceID (line 2942) | func (q *Queries) GetHTTPDeltasByWorkspaceID(ctx context.Context, worksp...
constant getHTTPDeltasSince (line 2986) | getHTTPDeltasSince = `-- name: GetHTTPDeltasSince :many
type GetHTTPDeltasSinceParams (line 3013) | type GetHTTPDeltasSinceParams struct
type GetHTTPDeltasSinceRow (line 3019) | type GetHTTPDeltasSinceRow struct
method GetHTTPDeltasSince (line 3041) | func (q *Queries) GetHTTPDeltasSince(ctx context.Context, arg GetHTTPDel...
constant getHTTPHeaders (line 3094) | getHTTPHeaders = `-- name: GetHTTPHeaders :many
method GetHTTPHeaders (line 3119) | func (q *Queries) GetHTTPHeaders(ctx context.Context, httpID idwrap.IDWr...
constant getHTTPHeadersByHttpIDs (line 3159) | getHTTPHeadersByHttpIDs = `-- name: GetHTTPHeadersByHttpIDs :many
type GetHTTPHeadersByHttpIDsRow (line 3165) | type GetHTTPHeadersByHttpIDsRow struct
method GetHTTPHeadersByHttpIDs (line 3172) | func (q *Queries) GetHTTPHeadersByHttpIDs(ctx context.Context, httpIds [...
constant getHTTPHeadersByIDs (line 3205) | getHTTPHeadersByIDs = `-- name: GetHTTPHeadersByIDs :many
method GetHTTPHeadersByIDs (line 3227) | func (q *Queries) GetHTTPHeadersByIDs(ctx context.Context, ids []idwrap....
constant getHTTPHeadersStreaming (line 3277) | getHTTPHeadersStreaming = `-- name: GetHTTPHeadersStreaming :many
type GetHTTPHeadersStreamingParams (line 3300) | type GetHTTPHeadersStreamingParams struct
type GetHTTPHeadersStreamingRow (line 3305) | type GetHTTPHeadersStreamingRow struct
method GetHTTPHeadersStreaming (line 3324) | func (q *Queries) GetHTTPHeadersStreaming(ctx context.Context, arg GetHT...
constant getHTTPIncrementalUpdates (line 3373) | getHTTPIncrementalUpdates = `-- name: GetHTTPIncrementalUpdates :many
type GetHTTPIncrementalUpdatesParams (line 3400) | type GetHTTPIncrementalUpdatesParams struct
type GetHTTPIncrementalUpdatesRow (line 3406) | type GetHTTPIncrementalUpdatesRow struct
method GetHTTPIncrementalUpdates (line 3429) | func (q *Queries) GetHTTPIncrementalUpdates(ctx context.Context, arg Get...
constant getHTTPResponse (line 3470) | getHTTPResponse = `-- name: GetHTTPResponse :one
method GetHTTPResponse (line 3489) | func (q *Queries) GetHTTPResponse(ctx context.Context, id idwrap.IDWrap)...
constant getHTTPResponseAssert (line 3505) | getHTTPResponseAssert = `-- name: GetHTTPResponseAssert :one
method GetHTTPResponseAssert (line 3519) | func (q *Queries) GetHTTPResponseAssert(ctx context.Context, id idwrap.I...
constant getHTTPResponseAssertsByHttpID (line 3532) | getHTTPResponseAssertsByHttpID = `-- name: GetHTTPResponseAssertsByHttpI...
method GetHTTPResponseAssertsByHttpID (line 3540) | func (q *Queries) GetHTTPResponseAssertsByHttpID(ctx context.Context, ht...
constant getHTTPResponseAssertsByIDs (line 3569) | getHTTPResponseAssertsByIDs = `-- name: GetHTTPResponseAssertsByIDs :many
method GetHTTPResponseAssertsByIDs (line 3581) | func (q *Queries) GetHTTPResponseAssertsByIDs(ctx context.Context, ids [...
constant getHTTPResponseAssertsByResponseID (line 3620) | getHTTPResponseAssertsByResponseID = `-- name: GetHTTPResponseAssertsByR...
method GetHTTPResponseAssertsByResponseID (line 3632) | func (q *Queries) GetHTTPResponseAssertsByResponseID(ctx context.Context...
constant getHTTPResponseAssertsByWorkspaceID (line 3661) | getHTTPResponseAssertsByWorkspaceID = `-- name: GetHTTPResponseAssertsBy...
method GetHTTPResponseAssertsByWorkspaceID (line 3675) | func (q *Queries) GetHTTPResponseAssertsByWorkspaceID(ctx context.Contex...
constant getHTTPResponseHeader (line 3704) | getHTTPResponseHeader = `-- name: GetHTTPResponseHeader :one
method GetHTTPResponseHeader (line 3718) | func (q *Queries) GetHTTPResponseHeader(ctx context.Context, id idwrap.I...
constant getHTTPResponseHeadersByHttpID (line 3731) | getHTTPResponseHeadersByHttpID = `-- name: GetHTTPResponseHeadersByHttpI...
method GetHTTPResponseHeadersByHttpID (line 3739) | func (q *Queries) GetHTTPResponseHeadersByHttpID(ctx context.Context, ht...
constant getHTTPResponseHeadersByIDs (line 3768) | getHTTPResponseHeadersByIDs = `-- name: GetHTTPResponseHeadersByIDs :many
method GetHTTPResponseHeadersByIDs (line 3780) | func (q *Queries) GetHTTPResponseHeadersByIDs(ctx context.Context, ids [...
constant getHTTPResponseHeadersByResponseID (line 3819) | getHTTPResponseHeadersByResponseID = `-- name: GetHTTPResponseHeadersByR...
method GetHTTPResponseHeadersByResponseID (line 3831) | func (q *Queries) GetHTTPResponseHeadersByResponseID(ctx context.Context...
constant getHTTPResponseHeadersByWorkspaceID (line 3860) | getHTTPResponseHeadersByWorkspaceID = `-- name: GetHTTPResponseHeadersBy...
method GetHTTPResponseHeadersByWorkspaceID (line 3874) | func (q *Queries) GetHTTPResponseHeadersByWorkspaceID(ctx context.Contex...
constant getHTTPResponsesByHttpID (line 3903) | getHTTPResponsesByHttpID = `-- name: GetHTTPResponsesByHttpID :many
method GetHTTPResponsesByHttpID (line 3918) | func (q *Queries) GetHTTPResponsesByHttpID(ctx context.Context, httpID i...
constant getHTTPResponsesByIDs (line 3950) | getHTTPResponsesByIDs = `-- name: GetHTTPResponsesByIDs :many
method GetHTTPResponsesByIDs (line 3965) | func (q *Queries) GetHTTPResponsesByIDs(ctx context.Context, ids []idwra...
constant getHTTPResponsesByWorkspaceID (line 4007) | getHTTPResponsesByWorkspaceID = `-- name: GetHTTPResponsesByWorkspaceID ...
method GetHTTPResponsesByWorkspaceID (line 4023) | func (q *Queries) GetHTTPResponsesByWorkspaceID(ctx context.Context, wor...
constant getHTTPSearchParams (line 4055) | getHTTPSearchParams = `-- name: GetHTTPSearchParams :many
type GetHTTPSearchParamsRow (line 4079) | type GetHTTPSearchParamsRow struct
method GetHTTPSearchParams (line 4099) | func (q *Queries) GetHTTPSearchParams(ctx context.Context, httpID idwrap...
constant getHTTPSearchParamsByHttpIDs (line 4139) | getHTTPSearchParamsByHttpIDs = `-- name: GetHTTPSearchParamsByHttpIDs :many
type GetHTTPSearchParamsByHttpIDsRow (line 4145) | type GetHTTPSearchParamsByHttpIDsRow struct
method GetHTTPSearchParamsByHttpIDs (line 4152) | func (q *Queries) GetHTTPSearchParamsByHttpIDs(ctx context.Context, http...
constant getHTTPSearchParamsByIDs (line 4185) | getHTTPSearchParamsByIDs = `-- name: GetHTTPSearchParamsByIDs :many
type GetHTTPSearchParamsByIDsRow (line 4207) | type GetHTTPSearchParamsByIDsRow struct
method GetHTTPSearchParamsByIDs (line 4226) | func (q *Queries) GetHTTPSearchParamsByIDs(ctx context.Context, ids []id...
constant getHTTPSearchParamsStreaming (line 4276) | getHTTPSearchParamsStreaming = `-- name: GetHTTPSearchParamsStreaming :many
type GetHTTPSearchParamsStreamingParams (line 4299) | type GetHTTPSearchParamsStreamingParams struct
type GetHTTPSearchParamsStreamingRow (line 4304) | type GetHTTPSearchParamsStreamingRow struct
method GetHTTPSearchParamsStreaming (line 4322) | func (q *Queries) GetHTTPSearchParamsStreaming(ctx context.Context, arg ...
constant getHTTPSnapshotCount (line 4371) | getHTTPSnapshotCount = `-- name: GetHTTPSnapshotCount :one
type GetHTTPSnapshotCountParams (line 4380) | type GetHTTPSnapshotCountParams struct
method GetHTTPSnapshotCount (line 4386) | func (q *Queries) GetHTTPSnapshotCount(ctx context.Context, arg GetHTTPS...
constant getHTTPSnapshotPage (line 4393) | getHTTPSnapshotPage = `-- name: GetHTTPSnapshotPage :many
type GetHTTPSnapshotPageParams (line 4428) | type GetHTTPSnapshotPageParams struct
type GetHTTPSnapshotPageRow (line 4434) | type GetHTTPSnapshotPageRow struct
method GetHTTPSnapshotPage (line 4457) | func (q *Queries) GetHTTPSnapshotPage(ctx context.Context, arg GetHTTPSn...
constant getHTTPSnapshotsByWorkspaceID (line 4498) | getHTTPSnapshotsByWorkspaceID = `-- name: GetHTTPSnapshotsByWorkspaceID ...
method GetHTTPSnapshotsByWorkspaceID (line 4525) | func (q *Queries) GetHTTPSnapshotsByWorkspaceID(ctx context.Context, wor...
constant getHTTPStreamingMetrics (line 4569) | getHTTPStreamingMetrics = `-- name: GetHTTPStreamingMetrics :one
type GetHTTPStreamingMetricsParams (line 4581) | type GetHTTPStreamingMetricsParams struct
type GetHTTPStreamingMetricsRow (line 4586) | type GetHTTPStreamingMetricsRow struct
method GetHTTPStreamingMetrics (line 4597) | func (q *Queries) GetHTTPStreamingMetrics(ctx context.Context, arg GetHT...
constant getHTTPWorkspaceActivity (line 4611) | getHTTPWorkspaceActivity = `-- name: GetHTTPWorkspaceActivity :many
type GetHTTPWorkspaceActivityParams (line 4625) | type GetHTTPWorkspaceActivityParams struct
type GetHTTPWorkspaceActivityRow (line 4630) | type GetHTTPWorkspaceActivityRow struct
method GetHTTPWorkspaceActivity (line 4638) | func (q *Queries) GetHTTPWorkspaceActivity(ctx context.Context, arg GetH...
constant getHTTPWorkspaceID (line 4666) | getHTTPWorkspaceID = `-- name: GetHTTPWorkspaceID :one
method GetHTTPWorkspaceID (line 4673) | func (q *Queries) GetHTTPWorkspaceID(ctx context.Context, id idwrap.IDWr...
constant getHTTPsByFolderID (line 4680) | getHTTPsByFolderID = `-- name: GetHTTPsByFolderID :many
type GetHTTPsByFolderIDRow (line 4706) | type GetHTTPsByFolderIDRow struct
method GetHTTPsByFolderID (line 4728) | func (q *Queries) GetHTTPsByFolderID(ctx context.Context, folderID *idwr...
constant getHTTPsByIDs (line 4771) | getHTTPsByIDs = `-- name: GetHTTPsByIDs :many
type GetHTTPsByIDsRow (line 4796) | type GetHTTPsByIDsRow struct
method GetHTTPsByIDs (line 4818) | func (q *Queries) GetHTTPsByIDs(ctx context.Context, ids []idwrap.IDWrap...
constant getHTTPsByWorkspaceID (line 4871) | getHTTPsByWorkspaceID = `-- name: GetHTTPsByWorkspaceID :many
method GetHTTPsByWorkspaceID (line 4898) | func (q *Queries) GetHTTPsByWorkspaceID(ctx context.Context, workspaceID...
constant getHttpVersionsByHttpID (line 4942) | getHttpVersionsByHttpID = `-- name: GetHttpVersionsByHttpID :many
method GetHttpVersionsByHttpID (line 4949) | func (q *Queries) GetHttpVersionsByHttpID(ctx context.Context, httpID id...
constant resetHTTPBodyFormDelta (line 4980) | resetHTTPBodyFormDelta = `-- name: ResetHTTPBodyFormDelta :exec
method ResetHTTPBodyFormDelta (line 4994) | func (q *Queries) ResetHTTPBodyFormDelta(ctx context.Context, id idwrap....
constant resolveHTTPWithDeltas (line 4999) | resolveHTTPWithDeltas = `-- name: ResolveHTTPWithDeltas :one
type ResolveHTTPWithDeltasParams (line 5077) | type ResolveHTTPWithDeltasParams struct
type ResolveHTTPWithDeltasRow (line 5082) | type ResolveHTTPWithDeltasRow struct
method ResolveHTTPWithDeltas (line 5106) | func (q *Queries) ResolveHTTPWithDeltas(ctx context.Context, arg Resolve...
constant updateHTTP (line 5132) | updateHTTP = `-- name: UpdateHTTP :exec
type UpdateHTTPParams (line 5146) | type UpdateHTTPParams struct
method UpdateHTTP (line 5157) | func (q *Queries) UpdateHTTP(ctx context.Context, arg UpdateHTTPParams) ...
constant updateHTTPAssert (line 5171) | updateHTTPAssert = `-- name: UpdateHTTPAssert :exec
type UpdateHTTPAssertParams (line 5186) | type UpdateHTTPAssertParams struct
method UpdateHTTPAssert (line 5199) | func (q *Queries) UpdateHTTPAssert(ctx context.Context, arg UpdateHTTPAs...
constant updateHTTPAssertDelta (line 5215) | updateHTTPAssertDelta = `-- name: UpdateHTTPAssertDelta :exec
type UpdateHTTPAssertDeltaParams (line 5226) | type UpdateHTTPAssertDeltaParams struct
method UpdateHTTPAssertDelta (line 5234) | func (q *Queries) UpdateHTTPAssertDelta(ctx context.Context, arg UpdateH...
constant updateHTTPBodyForm (line 5245) | updateHTTPBodyForm = `-- name: UpdateHTTPBodyForm :exec
type UpdateHTTPBodyFormParams (line 5257) | type UpdateHTTPBodyFormParams struct
method UpdateHTTPBodyForm (line 5266) | func (q *Queries) UpdateHTTPBodyForm(ctx context.Context, arg UpdateHTTP...
constant updateHTTPBodyFormDelta (line 5278) | updateHTTPBodyFormDelta = `-- name: UpdateHTTPBodyFormDelta :exec
type UpdateHTTPBodyFormDeltaParams (line 5290) | type UpdateHTTPBodyFormDeltaParams struct
method UpdateHTTPBodyFormDelta (line 5299) | func (q *Queries) UpdateHTTPBodyFormDelta(ctx context.Context, arg Updat...
constant updateHTTPBodyFormOrder (line 5311) | updateHTTPBodyFormOrder = `-- name: UpdateHTTPBodyFormOrder :exec
type UpdateHTTPBodyFormOrderParams (line 5317) | type UpdateHTTPBodyFormOrderParams struct
method UpdateHTTPBodyFormOrder (line 5323) | func (q *Queries) UpdateHTTPBodyFormOrder(ctx context.Context, arg Updat...
constant updateHTTPBodyRaw (line 5328) | updateHTTPBodyRaw = `-- name: UpdateHTTPBodyRaw :exec
type UpdateHTTPBodyRawParams (line 5338) | type UpdateHTTPBodyRawParams struct
method UpdateHTTPBodyRaw (line 5345) | func (q *Queries) UpdateHTTPBodyRaw(ctx context.Context, arg UpdateHTTPB...
constant updateHTTPBodyRawDelta (line 5355) | updateHTTPBodyRawDelta = `-- name: UpdateHTTPBodyRawDelta :exec
type UpdateHTTPBodyRawDeltaParams (line 5365) | type UpdateHTTPBodyRawDeltaParams struct
method UpdateHTTPBodyRawDelta (line 5372) | func (q *Queries) UpdateHTTPBodyRawDelta(ctx context.Context, arg Update...
constant updateHTTPBodyUrlEncoded (line 5382) | updateHTTPBodyUrlEncoded = `-- name: UpdateHTTPBodyUrlEncoded :exec
type UpdateHTTPBodyUrlEncodedParams (line 5394) | type UpdateHTTPBodyUrlEncodedParams struct
method UpdateHTTPBodyUrlEncoded (line 5403) | func (q *Queries) UpdateHTTPBodyUrlEncoded(ctx context.Context, arg Upda...
constant updateHTTPBodyUrlEncodedDelta (line 5415) | updateHTTPBodyUrlEncodedDelta = `-- name: UpdateHTTPBodyUrlEncodedDelta ...
type UpdateHTTPBodyUrlEncodedDeltaParams (line 5427) | type UpdateHTTPBodyUrlEncodedDeltaParams struct
method UpdateHTTPBodyUrlEncodedDelta (line 5436) | func (q *Queries) UpdateHTTPBodyUrlEncodedDelta(ctx context.Context, arg...
constant updateHTTPDelta (line 5448) | updateHTTPDelta = `-- name: UpdateHTTPDelta :exec
type UpdateHTTPDeltaParams (line 5460) | type UpdateHTTPDeltaParams struct
method UpdateHTTPDelta (line 5469) | func (q *Queries) UpdateHTTPDelta(ctx context.Context, arg UpdateHTTPDel...
constant updateHTTPHeader (line 5481) | updateHTTPHeader = `-- name: UpdateHTTPHeader :exec
type UpdateHTTPHeaderParams (line 5493) | type UpdateHTTPHeaderParams struct
method UpdateHTTPHeader (line 5502) | func (q *Queries) UpdateHTTPHeader(ctx context.Context, arg UpdateHTTPHe...
constant updateHTTPHeaderDelta (line 5514) | updateHTTPHeaderDelta = `-- name: UpdateHTTPHeaderDelta :exec
type UpdateHTTPHeaderDeltaParams (line 5526) | type UpdateHTTPHeaderDeltaParams struct
method UpdateHTTPHeaderDelta (line 5535) | func (q *Queries) UpdateHTTPHeaderDelta(ctx context.Context, arg UpdateH...
constant updateHTTPHeaderOrder (line 5547) | updateHTTPHeaderOrder = `-- name: UpdateHTTPHeaderOrder :exec
type UpdateHTTPHeaderOrderParams (line 5553) | type UpdateHTTPHeaderOrderParams struct
method UpdateHTTPHeaderOrder (line 5559) | func (q *Queries) UpdateHTTPHeaderOrder(ctx context.Context, arg UpdateH...
constant updateHTTPResponse (line 5564) | updateHTTPResponse = `-- name: UpdateHTTPResponse :exec
type UpdateHTTPResponseParams (line 5575) | type UpdateHTTPResponseParams struct
method UpdateHTTPResponse (line 5584) | func (q *Queries) UpdateHTTPResponse(ctx context.Context, arg UpdateHTTP...
constant updateHTTPResponseAssert (line 5596) | updateHTTPResponseAssert = `-- name: UpdateHTTPResponseAssert :exec
type UpdateHTTPResponseAssertParams (line 5604) | type UpdateHTTPResponseAssertParams struct
method UpdateHTTPResponseAssert (line 5610) | func (q *Queries) UpdateHTTPResponseAssert(ctx context.Context, arg Upda...
constant updateHTTPResponseHeader (line 5615) | updateHTTPResponseHeader = `-- name: UpdateHTTPResponseHeader :exec
type UpdateHTTPResponseHeaderParams (line 5623) | type UpdateHTTPResponseHeaderParams struct
method UpdateHTTPResponseHeader (line 5629) | func (q *Queries) UpdateHTTPResponseHeader(ctx context.Context, arg Upda...
constant updateHTTPSearchParam (line 5634) | updateHTTPSearchParam = `-- name: UpdateHTTPSearchParam :exec
type UpdateHTTPSearchParamParams (line 5645) | type UpdateHTTPSearchParamParams struct
method UpdateHTTPSearchParam (line 5653) | func (q *Queries) UpdateHTTPSearchParam(ctx context.Context, arg UpdateH...
constant updateHTTPSearchParamDelta (line 5664) | updateHTTPSearchParamDelta = `-- name: UpdateHTTPSearchParamDelta :exec
type UpdateHTTPSearchParamDeltaParams (line 5676) | type UpdateHTTPSearchParamDeltaParams struct
method UpdateHTTPSearchParamDelta (line 5685) | func (q *Queries) UpdateHTTPSearchParamDelta(ctx context.Context, arg Up...
constant updateHTTPSearchParamOrder (line 5697) | updateHTTPSearchParamOrder = `-- name: UpdateHTTPSearchParamOrder :exec
type UpdateHTTPSearchParamOrderParams (line 5703) | type UpdateHTTPSearchParamOrderParams struct
method UpdateHTTPSearchParamOrder (line 5709) | func (q *Queries) UpdateHTTPSearchParamOrder(ctx context.Context, arg Up...
FILE: packages/db/pkg/sqlc/gen/models.go
type AuthAccount (line 14) | type AuthAccount struct
type AuthJwk (line 30) | type AuthJwk struct
type AuthSession (line 38) | type AuthSession struct
type AuthUser (line 49) | type AuthUser struct
type AuthVerification (line 59) | type AuthVerification struct
type Credential (line 68) | type Credential struct
type CredentialAnthropic (line 75) | type CredentialAnthropic struct
type CredentialGemini (line 82) | type CredentialGemini struct
type CredentialOpenai (line 89) | type CredentialOpenai struct
type Environment (line 96) | type Environment struct
type File (line 105) | type File struct
type Flow (line 117) | type Flow struct
type FlowEdge (line 128) | type FlowEdge struct
type FlowNode (line 137) | type FlowNode struct
type FlowNodeAi (line 147) | type FlowNodeAi struct
type FlowNodeAiProvider (line 153) | type FlowNodeAiProvider struct
type FlowNodeCondition (line 161) | type FlowNodeCondition struct
type FlowNodeFor (line 166) | type FlowNodeFor struct
type FlowNodeForEach (line 173) | type FlowNodeForEach struct
type FlowNodeGraphql (line 180) | type FlowNodeGraphql struct
type FlowNodeHttp (line 186) | type FlowNodeHttp struct
type FlowNodeJ (line 192) | type FlowNodeJ struct
type FlowNodeMemory (line 198) | type FlowNodeMemory struct
type FlowNodeRunSubFlow (line 204) | type FlowNodeRunSubFlow struct
type FlowNodeSubFlowReturn (line 211) | type FlowNodeSubFlowReturn struct
type FlowNodeSubFlowTrigger (line 216) | type FlowNodeSubFlowTrigger struct
type FlowNodeWait (line 221) | type FlowNodeWait struct
type FlowNodeWsConnection (line 226) | type FlowNodeWsConnection struct
type FlowNodeWsSend (line 231) | type FlowNodeWsSend struct
type FlowTag (line 237) | type FlowTag struct
type FlowVariable (line 243) | type FlowVariable struct
type Graphql (line 253) | type Graphql struct
type GraphqlAssert (line 275) | type GraphqlAssert struct
type GraphqlHeader (line 292) | type GraphqlHeader struct
type GraphqlResponse (line 311) | type GraphqlResponse struct
type GraphqlResponseAssert (line 322) | type GraphqlResponseAssert struct
type GraphqlResponseHeader (line 330) | type GraphqlResponseHeader struct
type GraphqlVersion (line 338) | type GraphqlVersion struct
type Http (line 348) | type Http struct
type HttpAssert (line 371) | type HttpAssert struct
type HttpBodyForm (line 388) | type HttpBodyForm struct
type HttpBodyRaw (line 407) | type HttpBodyRaw struct
type HttpBodyUrlencoded (line 420) | type HttpBodyUrlencoded struct
type HttpHeader (line 439) | type HttpHeader struct
type HttpResponse (line 458) | type HttpResponse struct
type HttpResponseAssert (line 469) | type HttpResponseAssert struct
type HttpResponseHeader (line 477) | type HttpResponseHeader struct
type HttpSearchParam (line 485) | type HttpSearchParam struct
type HttpVersion (line 504) | type HttpVersion struct
type Migration (line 514) | type Migration struct
type NodeExecution (line 521) | type NodeExecution struct
type Tag (line 536) | type Tag struct
type User (line 543) | type User struct
type Variable (line 555) | type Variable struct
type Websocket (line 565) | type Websocket struct
type WebsocketHeader (line 577) | type WebsocketHeader struct
type Workspace (line 589) | type Workspace struct
type WorkspacesUser (line 600) | type WorkspacesUser struct
FILE: packages/db/pkg/sqlc/gen/streaming_bench_test.go
function BenchmarkHTTPStreamingQueries (line 17) | func BenchmarkHTTPStreamingQueries(b *testing.B) {
function BenchmarkDeltaResolution (line 90) | func BenchmarkDeltaResolution(b *testing.B) {
function BenchmarkConcurrentStreaming (line 132) | func BenchmarkConcurrentStreaming(b *testing.B) {
function setupBenchmarkDB (line 222) | func setupBenchmarkDB(b *testing.B) *sql.DB {
function insertTestWorkspace (line 238) | func insertTestWorkspace(b *testing.B, db *sql.DB) idwrap.IDWrap {
function insertTestHTTPRecord (line 250) | func insertTestHTTPRecord(b *testing.B, db *sql.DB, workspaceID idwrap.I...
function insertTestHTTPData (line 262) | func insertTestHTTPData(b *testing.B, db *sql.DB, workspaceID idwrap.IDW...
function insertTestDeltas (line 287) | func insertTestDeltas(b *testing.B, db *sql.DB, parentHTTPID idwrap.IDWr...
function insertTestChildData (line 312) | func insertTestChildData(b *testing.B, db *sql.DB, httpIDs []idwrap.IDWr...
function loadSchema (line 338) | func loadSchema(b *testing.B) string {
FILE: packages/db/pkg/sqlc/gen/users.sql.go
constant createUser (line 15) | createUser = `-- name: CreateUser :exec
type CreateUserParams (line 31) | type CreateUserParams struct
method CreateUser (line 42) | func (q *Queries) CreateUser(ctx context.Context, arg CreateUserParams) ...
constant deleteUser (line 56) | deleteUser = `-- name: DeleteUser :exec
method DeleteUser (line 62) | func (q *Queries) DeleteUser(ctx context.Context, id idwrap.IDWrap) error {
constant getUser (line 67) | getUser = `-- name: GetUser :one
type GetUserRow (line 85) | type GetUserRow struct
method GetUser (line 97) | func (q *Queries) GetUser(ctx context.Context, id idwrap.IDWrap) (GetUse...
constant getUserByEmail (line 113) | getUserByEmail = `-- name: GetUserByEmail :one
type GetUserByEmailRow (line 131) | type GetUserByEmailRow struct
method GetUserByEmail (line 142) | func (q *Queries) GetUserByEmail(ctx context.Context, email string) (Get...
constant getUserByEmailAndProviderType (line 158) | getUserByEmailAndProviderType = `-- name: GetUserByEmailAndProviderType ...
type GetUserByEmailAndProviderTypeParams (line 177) | type GetUserByEmailAndProviderTypeParams struct
type GetUserByEmailAndProviderTypeRow (line 182) | type GetUserByEmailAndProviderTypeRow struct
method GetUserByEmailAndProviderType (line 193) | func (q *Queries) GetUserByEmailAndProviderType(ctx context.Context, arg...
constant getUserByExternalID (line 209) | getUserByExternalID = `-- name: GetUserByExternalID :one
type GetUserByExternalIDRow (line 227) | type GetUserByExternalIDRow struct
method GetUserByExternalID (line 238) | func (q *Queries) GetUserByExternalID(ctx context.Context, externalID sq...
constant getUserByProviderIDandType (line 254) | getUserByProviderIDandType = `-- name: GetUserByProviderIDandType :one
type GetUserByProviderIDandTypeParams (line 273) | type GetUserByProviderIDandTypeParams struct
type GetUserByProviderIDandTypeRow (line 278) | type GetUserByProviderIDandTypeRow struct
method GetUserByProviderIDandType (line 289) | func (q *Queries) GetUserByProviderIDandType(ctx context.Context, arg Ge...
constant updateUser (line 305) | updateUser = `-- name: UpdateUser :exec
type UpdateUserParams (line 316) | type UpdateUserParams struct
method UpdateUser (line 324) | func (q *Queries) UpdateUser(ctx context.Context, arg UpdateUserParams) ...
FILE: packages/db/pkg/sqlc/gen/websocket.sql.go
constant createFlowNodeWsConnection (line 14) | createFlowNodeWsConnection = `-- name: CreateFlowNodeWsConnection :exec
type CreateFlowNodeWsConnectionParams (line 18) | type CreateFlowNodeWsConnectionParams struct
method CreateFlowNodeWsConnection (line 23) | func (q *Queries) CreateFlowNodeWsConnection(ctx context.Context, arg Cr...
constant createFlowNodeWsSend (line 28) | createFlowNodeWsSend = `-- name: CreateFlowNodeWsSend :exec
type CreateFlowNodeWsSendParams (line 32) | type CreateFlowNodeWsSendParams struct
method CreateFlowNodeWsSend (line 38) | func (q *Queries) CreateFlowNodeWsSend(ctx context.Context, arg CreateFl...
constant createWebSocket (line 43) | createWebSocket = `-- name: CreateWebSocket :exec
type CreateWebSocketParams (line 51) | type CreateWebSocketParams struct
method CreateWebSocket (line 63) | func (q *Queries) CreateWebSocket(ctx context.Context, arg CreateWebSock...
constant createWebSocketHeader (line 78) | createWebSocketHeader = `-- name: CreateWebSocketHeader :exec
type CreateWebSocketHeaderParams (line 86) | type CreateWebSocketHeaderParams struct
method CreateWebSocketHeader (line 98) | func (q *Queries) CreateWebSocketHeader(ctx context.Context, arg CreateW...
constant deleteFlowNodeWsConnection (line 113) | deleteFlowNodeWsConnection = `-- name: DeleteFlowNodeWsConnection :exec
method DeleteFlowNodeWsConnection (line 117) | func (q *Queries) DeleteFlowNodeWsConnection(ctx context.Context, flowNo...
constant deleteFlowNodeWsSend (line 122) | deleteFlowNodeWsSend = `-- name: DeleteFlowNodeWsSend :exec
method DeleteFlowNodeWsSend (line 126) | func (q *Queries) DeleteFlowNodeWsSend(ctx context.Context, flowNodeID i...
constant deleteWebSocket (line 131) | deleteWebSocket = `-- name: DeleteWebSocket :exec
method DeleteWebSocket (line 136) | func (q *Queries) DeleteWebSocket(ctx context.Context, id idwrap.IDWrap)...
constant deleteWebSocketHeader (line 141) | deleteWebSocketHeader = `-- name: DeleteWebSocketHeader :exec
method DeleteWebSocketHeader (line 146) | func (q *Queries) DeleteWebSocketHeader(ctx context.Context, id idwrap.I...
constant deleteWebSocketHeadersByWebSocketID (line 151) | deleteWebSocketHeadersByWebSocketID = `-- name: DeleteWebSocketHeadersBy...
method DeleteWebSocketHeadersByWebSocketID (line 156) | func (q *Queries) DeleteWebSocketHeadersByWebSocketID(ctx context.Contex...
constant getFlowNodeWsConnection (line 161) | getFlowNodeWsConnection = `-- name: GetFlowNodeWsConnection :one
method GetFlowNodeWsConnection (line 172) | func (q *Queries) GetFlowNodeWsConnection(ctx context.Context, flowNodeI...
constant getFlowNodeWsSend (line 179) | getFlowNodeWsSend = `-- name: GetFlowNodeWsSend :one
method GetFlowNodeWsSend (line 189) | func (q *Queries) GetFlowNodeWsSend(ctx context.Context, flowNodeID idwr...
constant getWebSocket (line 196) | getWebSocket = `-- name: GetWebSocket :one
method GetWebSocket (line 206) | func (q *Queries) GetWebSocket(ctx context.Context, id idwrap.IDWrap) (W...
constant getWebSocketHeaderByID (line 223) | getWebSocketHeaderByID = `-- name: GetWebSocketHeaderByID :one
method GetWebSocketHeaderByID (line 231) | func (q *Queries) GetWebSocketHeaderByID(ctx context.Context, id idwrap....
constant getWebSocketHeaders (line 248) | getWebSocketHeaders = `-- name: GetWebSocketHeaders :many
method GetWebSocketHeaders (line 259) | func (q *Queries) GetWebSocketHeaders(ctx context.Context, websocketID i...
constant getWebSocketWorkspaceID (line 292) | getWebSocketWorkspaceID = `-- name: GetWebSocketWorkspaceID :one
method GetWebSocketWorkspaceID (line 299) | func (q *Queries) GetWebSocketWorkspaceID(ctx context.Context, id idwrap...
constant getWebSocketsByWorkspaceID (line 306) | getWebSocketsByWorkspaceID = `-- name: GetWebSocketsByWorkspaceID :many
method GetWebSocketsByWorkspaceID (line 315) | func (q *Queries) GetWebSocketsByWorkspaceID(ctx context.Context, worksp...
constant updateFlowNodeWsConnection (line 348) | updateFlowNodeWsConnection = `-- name: UpdateFlowNodeWsConnection :exec
type UpdateFlowNodeWsConnectionParams (line 354) | type UpdateFlowNodeWsConnectionParams struct
method UpdateFlowNodeWsConnection (line 359) | func (q *Queries) UpdateFlowNodeWsConnection(ctx context.Context, arg Up...
constant updateFlowNodeWsSend (line 364) | updateFlowNodeWsSend = `-- name: UpdateFlowNodeWsSend :exec
type UpdateFlowNodeWsSendParams (line 371) | type UpdateFlowNodeWsSendParams struct
method UpdateFlowNodeWsSend (line 377) | func (q *Queries) UpdateFlowNodeWsSend(ctx context.Context, arg UpdateFl...
constant updateWebSocket (line 382) | updateWebSocket = `-- name: UpdateWebSocket :exec
type UpdateWebSocketParams (line 393) | type UpdateWebSocketParams struct
method UpdateWebSocket (line 401) | func (q *Queries) UpdateWebSocket(ctx context.Context, arg UpdateWebSock...
constant updateWebSocketHeader (line 412) | updateWebSocketHeader = `-- name: UpdateWebSocketHeader :exec
type UpdateWebSocketHeaderParams (line 424) | type UpdateWebSocketHeaderParams struct
method UpdateWebSocketHeader (line 433) | func (q *Queries) UpdateWebSocketHeader(ctx context.Context, arg UpdateW...
FILE: packages/db/pkg/sqlc/gen/workspaces.sql.go
constant checkIFWorkspaceUserExists (line 14) | checkIFWorkspaceUserExists = `-- name: CheckIFWorkspaceUserExists :one
type CheckIFWorkspaceUserExistsParams (line 31) | type CheckIFWorkspaceUserExistsParams struct
method CheckIFWorkspaceUserExists (line 37) | func (q *Queries) CheckIFWorkspaceUserExists(ctx context.Context, arg Ch...
constant createWorkspace (line 44) | createWorkspace = `-- name: CreateWorkspace :exec
type CreateWorkspaceParams (line 51) | type CreateWorkspaceParams struct
method CreateWorkspace (line 62) | func (q *Queries) CreateWorkspace(ctx context.Context, arg CreateWorkspa...
constant createWorkspaceUser (line 76) | createWorkspaceUser = `-- name: CreateWorkspaceUser :exec
type CreateWorkspaceUserParams (line 83) | type CreateWorkspaceUserParams struct
method CreateWorkspaceUser (line 90) | func (q *Queries) CreateWorkspaceUser(ctx context.Context, arg CreateWor...
constant deleteWorkspace (line 100) | deleteWorkspace = `-- name: DeleteWorkspace :exec
method DeleteWorkspace (line 106) | func (q *Queries) DeleteWorkspace(ctx context.Context, id idwrap.IDWrap)...
constant deleteWorkspaceUser (line 111) | deleteWorkspaceUser = `-- name: DeleteWorkspaceUser :exec
method DeleteWorkspaceUser (line 117) | func (q *Queries) DeleteWorkspaceUser(ctx context.Context, id idwrap.IDW...
constant getAllWorkspacesByUserID (line 122) | getAllWorkspacesByUserID = `-- name: GetAllWorkspacesByUserID :many
method GetAllWorkspacesByUserID (line 142) | func (q *Queries) GetAllWorkspacesByUserID(ctx context.Context, userID i...
constant getWorkspace (line 174) | getWorkspace = `-- name: GetWorkspace :one
method GetWorkspace (line 193) | func (q *Queries) GetWorkspace(ctx context.Context, id idwrap.IDWrap) (W...
constant getWorkspaceByUserID (line 209) | getWorkspaceByUserID = `-- name: GetWorkspaceByUserID :one
method GetWorkspaceByUserID (line 236) | func (q *Queries) GetWorkspaceByUserID(ctx context.Context, userID idwra...
constant getWorkspaceByUserIDandWorkspaceID (line 252) | getWorkspaceByUserIDandWorkspaceID = `-- name: GetWorkspaceByUserIDandWo...
type GetWorkspaceByUserIDandWorkspaceIDParams (line 280) | type GetWorkspaceByUserIDandWorkspaceIDParams struct
method GetWorkspaceByUserIDandWorkspaceID (line 285) | func (q *Queries) GetWorkspaceByUserIDandWorkspaceID(ctx context.Context...
constant getWorkspaceUser (line 301) | getWorkspaceUser = `-- name: GetWorkspaceUser :one
method GetWorkspaceUser (line 315) | func (q *Queries) GetWorkspaceUser(ctx context.Context, id idwrap.IDWrap...
constant getWorkspaceUserByUserID (line 327) | getWorkspaceUserByUserID = `-- name: GetWorkspaceUserByUserID :many
method GetWorkspaceUserByUserID (line 339) | func (q *Queries) GetWorkspaceUserByUserID(ctx context.Context, userID i...
constant getWorkspaceUserByWorkspaceID (line 367) | getWorkspaceUserByWorkspaceID = `-- name: GetWorkspaceUserByWorkspaceID ...
method GetWorkspaceUserByWorkspaceID (line 379) | func (q *Queries) GetWorkspaceUserByWorkspaceID(ctx context.Context, wor...
constant getWorkspaceUserByWorkspaceIDAndUserID (line 407) | getWorkspaceUserByWorkspaceIDAndUserID = `-- name: GetWorkspaceUserByWor...
type GetWorkspaceUserByWorkspaceIDAndUserIDParams (line 422) | type GetWorkspaceUserByWorkspaceIDAndUserIDParams struct
method GetWorkspaceUserByWorkspaceIDAndUserID (line 427) | func (q *Queries) GetWorkspaceUserByWorkspaceIDAndUserID(ctx context.Con...
constant getWorkspacesByUserID (line 439) | getWorkspacesByUserID = `-- name: GetWorkspacesByUserID :many
method GetWorkspacesByUserID (line 462) | func (q *Queries) GetWorkspacesByUserID(ctx context.Context, userID idwr...
constant getWorkspacesByUserIDOrdered (line 494) | getWorkspacesByUserIDOrdered = `-- name: GetWorkspacesByUserIDOrdered :many
method GetWorkspacesByUserIDOrdered (line 513) | func (q *Queries) GetWorkspacesByUserIDOrdered(ctx context.Context, user...
constant updateWorkspace (line 545) | updateWorkspace = `-- name: UpdateWorkspace :exec
type UpdateWorkspaceParams (line 558) | type UpdateWorkspaceParams struct
method UpdateWorkspace (line 568) | func (q *Queries) UpdateWorkspace(ctx context.Context, arg UpdateWorkspa...
constant updateWorkspaceUpdatedTime (line 581) | updateWorkspaceUpdatedTime = `-- name: UpdateWorkspaceUpdatedTime :exec
type UpdateWorkspaceUpdatedTimeParams (line 589) | type UpdateWorkspaceUpdatedTimeParams struct
method UpdateWorkspaceUpdatedTime (line 594) | func (q *Queries) UpdateWorkspaceUpdatedTime(ctx context.Context, arg Up...
constant updateWorkspaceUser (line 599) | updateWorkspaceUser = `-- name: UpdateWorkspaceUser :exec
type UpdateWorkspaceUserParams (line 609) | type UpdateWorkspaceUserParams struct
method UpdateWorkspaceUser (line 616) | func (q *Queries) UpdateWorkspaceUser(ctx context.Context, arg UpdateWor...
FILE: packages/db/pkg/sqlc/schema/00_users.sql
type users (line 2) | CREATE TABLE users (
FILE: packages/db/pkg/sqlc/schema/01_workspaces.sql
type workspaces (line 2) | CREATE TABLE workspaces (
type workspaces_idx1 (line 13) | CREATE INDEX workspaces_idx1 ON workspaces (
type workspaces_users (line 19) | CREATE TABLE workspaces_users (
type workspaces_users_idx1 (line 31) | CREATE INDEX workspaces_users_idx1 ON workspaces_users (
FILE: packages/db/pkg/sqlc/schema/02_environment.sql
type environment (line 2) | CREATE TABLE environment (
type environment_idx1 (line 12) | CREATE INDEX environment_idx1 ON environment (workspace_id, type, name)
type environment_workspace_lookup (line 13) | CREATE INDEX environment_workspace_lookup ON environment (id, workspace_id)
type environment_order_idx (line 14) | CREATE INDEX environment_order_idx ON environment (workspace_id, display...
type variable (line 16) | CREATE TABLE variable (
type variable_idx1 (line 28) | CREATE INDEX variable_idx1 ON variable (env_id, var_key)
type variable_order_idx (line 29) | CREATE INDEX variable_order_idx ON variable (env_id, display_order)
FILE: packages/db/pkg/sqlc/schema/03_files.sql
type files (line 8) | CREATE TABLE files (
type files_workspace_idx (line 36) | CREATE INDEX files_workspace_idx ON files (workspace_id)
type files_path_hash_idx (line 38) | CREATE UNIQUE INDEX files_path_hash_idx ON files (workspace_id, path_has...
type files_hierarchy_idx (line 40) | CREATE INDEX files_hierarchy_idx ON files (
type files_content_lookup_idx (line 46) | CREATE INDEX files_content_lookup_idx ON files (
type files_parent_lookup_idx (line 51) | CREATE INDEX files_parent_lookup_idx ON files (
type files_name_search_idx (line 56) | CREATE INDEX files_name_search_idx ON files (
type files_kind_filter_idx (line 61) | CREATE INDEX files_kind_filter_idx ON files (
type files_workspace_hierarchy_idx (line 67) | CREATE INDEX files_workspace_hierarchy_idx ON files (
FILE: packages/db/pkg/sqlc/schema/04_http.sql
type http (line 9) | CREATE TABLE http (
type http_workspace_idx (line 49) | CREATE INDEX http_workspace_idx ON http (workspace_id)
type http_folder_idx (line 50) | CREATE INDEX http_folder_idx ON http (folder_id) WHERE folder_id IS NOT ...
type http_parent_delta_idx (line 51) | CREATE INDEX http_parent_delta_idx ON http (parent_http_id, is_delta)
type http_workspace_name_idx (line 52) | CREATE INDEX http_workspace_name_idx ON http (workspace_id, name)
type http_method_idx (line 53) | CREATE INDEX http_method_idx ON http (method)
type http_content_hash_idx (line 54) | CREATE INDEX http_content_hash_idx ON http (workspace_id, content_hash) ...
type http_search_param (line 57) | CREATE TABLE http_search_param (
type http_search_param_http_idx (line 85) | CREATE INDEX http_search_param_http_idx ON http_search_param (http_id)
type http_search_param_key_idx (line 86) | CREATE INDEX http_search_param_key_idx ON http_search_param (http_id, key)
type http_search_param_order_idx (line 87) | CREATE INDEX http_search_param_order_idx ON http_search_param (http_id, ...
type http_search_param_delta_idx (line 88) | CREATE INDEX http_search_param_delta_idx ON http_search_param (parent_ht...
type http_header (line 91) | CREATE TABLE http_header (
type http_header_http_idx (line 126) | CREATE INDEX http_header_http_idx ON http_header (http_id)
type http_header_parent_delta_idx (line 127) | CREATE INDEX http_header_parent_delta_idx ON http_header (parent_header_...
type http_header_order_idx (line 128) | CREATE INDEX http_header_order_idx ON http_header (http_id, display_order)
type http_header_key_idx (line 129) | CREATE INDEX http_header_key_idx ON http_header (header_key)
type http_header_streaming_idx (line 132) | CREATE INDEX http_header_streaming_idx ON http_header (http_id, enabled,...
type http_header_delta_streaming_idx (line 133) | CREATE INDEX http_header_delta_streaming_idx ON http_header (parent_head...
type http_body_form (line 136) | CREATE TABLE http_body_form (
type http_body_form_http_idx (line 164) | CREATE INDEX http_body_form_http_idx ON http_body_form (http_id)
type http_body_form_key_idx (line 165) | CREATE INDEX http_body_form_key_idx ON http_body_form (http_id, key)
type http_body_form_order_idx (line 166) | CREATE INDEX http_body_form_order_idx ON http_body_form (http_id, displa...
type http_body_form_delta_idx (line 167) | CREATE INDEX http_body_form_delta_idx ON http_body_form (parent_http_bod...
type http_body_raw (line 172) | CREATE TABLE http_body_raw (
type http_body_raw_http_idx (line 200) | CREATE INDEX http_body_raw_http_idx ON http_body_raw (http_id)
type http_body_raw_parent_delta_idx (line 201) | CREATE INDEX http_body_raw_parent_delta_idx ON http_body_raw (parent_bod...
type http_body_raw_streaming_idx (line 204) | CREATE INDEX http_body_raw_streaming_idx ON http_body_raw (http_id, upda...
type http_body_raw_delta_streaming_idx (line 205) | CREATE INDEX http_body_raw_delta_streaming_idx ON http_body_raw (parent_...
type http_version (line 208) | CREATE TABLE http_version (
type http_version_http_idx (line 228) | CREATE INDEX http_version_http_idx ON http_version (http_id)
type http_version_active_idx (line 229) | CREATE INDEX http_version_active_idx ON http_version (is_active) WHERE i...
type http_version_created_by_idx (line 230) | CREATE INDEX http_version_created_by_idx ON http_version (created_by)
type http_assert (line 236) | CREATE TABLE http_assert (
type http_assert_http_idx (line 265) | CREATE INDEX http_assert_http_idx ON http_assert (http_id)
type http_assert_order_idx (line 266) | CREATE INDEX http_assert_order_idx ON http_assert (http_id, display_order)
type http_assert_delta_idx (line 267) | CREATE INDEX http_assert_delta_idx ON http_assert (parent_http_assert_id...
type http_workspace_access_idx (line 270) | CREATE INDEX http_workspace_access_idx ON http (workspace_id, folder_id,...
type http_workspace_streaming_idx (line 271) | CREATE INDEX http_workspace_streaming_idx ON http (workspace_id, updated...
type http_delta_resolution_idx (line 275) | CREATE INDEX http_delta_resolution_idx ON http (parent_http_id, is_delta...
type http_workspace_method_streaming_idx (line 276) | CREATE INDEX http_workspace_method_streaming_idx ON http (workspace_id, ...
type http_active_streaming_idx (line 279) | CREATE INDEX http_active_streaming_idx ON http (workspace_id, updated_at...
type http_workspace_method_idx (line 282) | CREATE INDEX http_workspace_method_idx ON http (workspace_id, method)
type http_folder_method_idx (line 283) | CREATE INDEX http_folder_method_idx ON http (folder_id, method) WHERE fo...
type http_body_urlencoded (line 293) | CREATE TABLE http_body_urlencoded (
type http_body_urlencoded_http_idx (line 324) | CREATE INDEX http_body_urlencoded_http_idx ON http_body_urlencoded (http...
type http_body_urlencoded_key_idx (line 325) | CREATE INDEX http_body_urlencoded_key_idx ON http_body_urlencoded (http_...
type http_body_urlencoded_order_idx (line 326) | CREATE INDEX http_body_urlencoded_order_idx ON http_body_urlencoded (htt...
type http_body_urlencoded_delta_idx (line 327) | CREATE INDEX http_body_urlencoded_delta_idx ON http_body_urlencoded (par...
type http_response (line 337) | CREATE TABLE http_response (
type http_response_header (line 351) | CREATE TABLE http_response_header (
type http_response_http_idx (line 362) | CREATE INDEX http_response_http_idx ON http_response (http_id)
type http_response_time_idx (line 363) | CREATE INDEX http_response_time_idx ON http_response (http_id, time DESC)
type http_response_header_response_idx (line 366) | CREATE INDEX http_response_header_response_idx ON http_response_header (...
type http_response_header_key_idx (line 367) | CREATE INDEX http_response_header_key_idx ON http_response_header (respo...
type http_response_assert (line 370) | CREATE TABLE http_response_assert (
type http_response_assert_response_idx (line 381) | CREATE INDEX http_response_assert_response_idx ON http_response_assert (...
type http_response_assert_success_idx (line 382) | CREATE INDEX http_response_assert_success_idx ON http_response_assert (r...
FILE: packages/db/pkg/sqlc/schema/05_flow.sql
type flow (line 1) | CREATE TABLE flow (
type flow_idx1 (line 14) | CREATE index flow_idx1 ON flow (workspace_id, version_parent_id)
type tag (line 16) | CREATE TABLE tag (
type tag_idx1 (line 24) | CREATE INDEX tag_idx1 ON tag (workspace_id)
type flow_tag (line 26) | CREATE TABLE flow_tag (
type flow_tag_idx1 (line 34) | CREATE INDEX flow_tag_idx1 ON flow_tag (flow_id, tag_id)
type flow_node (line 36) | CREATE TABLE flow_node (
type flow_node_idx1 (line 47) | CREATE INDEX flow_node_idx1 ON flow_node (flow_id)
type flow_edge (line 49) | CREATE TABLE flow_edge (
type flow_edge_idx1 (line 59) | CREATE INDEX flow_edge_idx1 ON flow_edge (flow_id, source_id, target_id)
type flow_node_for (line 63) | CREATE TABLE flow_node_for (
type flow_node_for_each (line 71) | CREATE TABLE flow_node_for_each (
type flow_node_http (line 78) | CREATE TABLE flow_node_http (
type flow_node_graphql (line 87) | CREATE TABLE flow_node_graphql (
type flow_node_condition (line 95) | CREATE TABLE flow_node_condition (
type flow_node_js (line 100) | CREATE TABLE flow_node_js (
type flow_node_wait (line 106) | CREATE TABLE flow_node_wait (
type flow_node_sub_flow_trigger (line 111) | CREATE TABLE flow_node_sub_flow_trigger (
type flow_node_sub_flow_return (line 116) | CREATE TABLE flow_node_sub_flow_return (
type flow_node_run_sub_flow (line 121) | CREATE TABLE flow_node_run_sub_flow (
type flow_variable (line 129) | CREATE TABLE flow_variable (
type flow_variable_ordering (line 142) | CREATE INDEX flow_variable_ordering ON flow_variable (flow_id, display_o...
type node_execution (line 144) | CREATE TABLE node_execution (
type node_execution_idx1 (line 163) | CREATE INDEX node_execution_idx1 ON node_execution (node_id)
type node_execution_idx2 (line 164) | CREATE INDEX node_execution_idx2 ON node_execution (completed_at DESC)
type node_execution_idx3 (line 165) | CREATE INDEX node_execution_idx3 ON node_execution (state)
FILE: packages/db/pkg/sqlc/schema/06_migration.sql
type migration (line 1) | CREATE TABLE migration (
FILE: packages/db/pkg/sqlc/schema/07_ai.sql
type credential (line 7) | CREATE TABLE credential (
type credential_workspace_idx (line 15) | CREATE INDEX credential_workspace_idx ON credential (workspace_id)
type credential_openai (line 17) | CREATE TABLE credential_openai (
type credential_gemini (line 25) | CREATE TABLE credential_gemini (
type credential_anthropic (line 33) | CREATE TABLE credential_anthropic (
type flow_node_ai (line 41) | CREATE TABLE flow_node_ai (
type flow_node_ai_provider (line 48) | CREATE TABLE flow_node_ai_provider (
type flow_node_memory (line 57) | CREATE TABLE flow_node_memory (
FILE: packages/db/pkg/sqlc/schema/08_betterauth.sql
type auth_user (line 6) | CREATE TABLE auth_user (
type auth_session (line 17) | CREATE TABLE auth_session (
type auth_account (line 30) | CREATE TABLE auth_account (
type auth_verification (line 48) | CREATE TABLE auth_verification (
type auth_jwks (line 58) | CREATE TABLE auth_jwks (
FILE: packages/db/pkg/sqlc/schema/08_graphql.sql
type graphql (line 9) | CREATE TABLE graphql (
type graphql_workspace_idx (line 26) | CREATE INDEX graphql_workspace_idx ON graphql (workspace_id)
type graphql_folder_idx (line 27) | CREATE INDEX graphql_folder_idx ON graphql (folder_id) WHERE folder_id I...
type graphql_version (line 30) | CREATE TABLE graphql_version (
type graphql_version_graphql_idx (line 49) | CREATE INDEX graphql_version_graphql_idx ON graphql_version (graphql_id)
type graphql_version_active_idx (line 50) | CREATE INDEX graphql_version_active_idx ON graphql_version (is_active) W...
type graphql_version_created_by_idx (line 51) | CREATE INDEX graphql_version_created_by_idx ON graphql_version (created_by)
type graphql_header (line 54) | CREATE TABLE graphql_header (
type graphql_header_graphql_idx (line 68) | CREATE INDEX graphql_header_graphql_idx ON graphql_header (graphql_id)
type graphql_header_order_idx (line 69) | CREATE INDEX graphql_header_order_idx ON graphql_header (graphql_id, dis...
type graphql_assert (line 72) | CREATE TABLE graphql_assert (
type graphql_assert_graphql_idx (line 85) | CREATE INDEX graphql_assert_graphql_idx ON graphql_assert (graphql_id)
type graphql_assert_order_idx (line 86) | CREATE INDEX graphql_assert_order_idx ON graphql_assert (graphql_id, dis...
type graphql_response (line 89) | CREATE TABLE graphql_response (
type graphql_response_graphql_idx (line 102) | CREATE INDEX graphql_response_graphql_idx ON graphql_response (graphql_id)
type graphql_response_time_idx (line 103) | CREATE INDEX graphql_response_time_idx ON graphql_response (graphql_id, ...
type graphql_response_header (line 106) | CREATE TABLE graphql_response_header (
type graphql_response_header_response_idx (line 116) | CREATE INDEX graphql_response_header_response_idx ON graphql_response_he...
type graphql_response_assert (line 119) | CREATE TABLE graphql_response_assert (
type graphql_response_assert_response_idx (line 129) | CREATE INDEX graphql_response_assert_response_idx ON graphql_response_as...
type graphql_response_assert_success_idx (line 130) | CREATE INDEX graphql_response_assert_success_idx ON graphql_response_ass...
FILE: packages/db/pkg/sqlc/schema/09_graphql_delta.sql
type graphql_parent_delta_idx (line 25) | CREATE INDEX graphql_parent_delta_idx ON graphql (parent_graphql_id, is_...
type graphql_delta_resolution_idx (line 26) | CREATE INDEX graphql_delta_resolution_idx ON graphql (parent_graphql_id,...
type graphql_active_streaming_idx (line 27) | CREATE INDEX graphql_active_streaming_idx ON graphql (workspace_id, upda...
type graphql_header_parent_delta_idx (line 41) | CREATE INDEX graphql_header_parent_delta_idx ON graphql_header (parent_g...
type graphql_header_delta_streaming_idx (line 42) | CREATE INDEX graphql_header_delta_streaming_idx ON graphql_header (paren...
type graphql_assert_parent_delta_idx (line 55) | CREATE INDEX graphql_assert_parent_delta_idx ON graphql_assert (parent_g...
type graphql_assert_delta_streaming_idx (line 56) | CREATE INDEX graphql_assert_delta_streaming_idx ON graphql_assert (paren...
FILE: packages/db/pkg/sqlc/schema/10_websocket.sql
type websocket (line 9) | CREATE TABLE websocket (
type websocket_workspace_idx (line 24) | CREATE INDEX websocket_workspace_idx ON websocket (workspace_id)
type websocket_folder_idx (line 25) | CREATE INDEX websocket_folder_idx ON websocket (folder_id) WHERE folder_...
type websocket_header (line 28) | CREATE TABLE websocket_header (
type websocket_header_ws_idx (line 42) | CREATE INDEX websocket_header_ws_idx ON websocket_header (websocket_id)
type websocket_header_order_idx (line 43) | CREATE INDEX websocket_header_order_idx ON websocket_header (websocket_i...
type flow_node_ws_connection (line 46) | CREATE TABLE flow_node_ws_connection (
type flow_node_ws_send (line 53) | CREATE TABLE flow_node_ws_send (
FILE: packages/db/pkg/sqlc/sqlc.go
function CreateLocalTables (line 18) | func CreateLocalTables(ctx context.Context, db *sql.DB) error {
FILE: packages/db/pkg/sqlitelocal/sqlitelocal.go
function NewSQLiteLocal (line 21) | func NewSQLiteLocal(ctx context.Context, dbName, path, encryptionKey str...
FILE: packages/db/pkg/sqlitemem/sqlitemem.go
function NewSQLiteMem (line 17) | func NewSQLiteMem(ctx context.Context) (*sql.DB, func(), error) {
FILE: packages/db/pkg/tursolocal/linux.go
function NewTursoLocal (line 24) | func NewTursoLocal(ctx context.Context, dbName, path, encryptionKey stri...
FILE: packages/db/pkg/tursolocal/tursolocal_bench_test.go
function openCurrent (line 23) | func openCurrent(ctx context.Context, dbName, path string) (*sql.DB, fun...
function openLegacy (line 32) | func openLegacy(ctx context.Context, dbName, path string) (*sql.DB, func...
function BenchmarkTursoLocalWriteHeavy (line 73) | func BenchmarkTursoLocalWriteHeavy(b *testing.B) {
FILE: packages/db/pkg/tursolocal/types.go
type LocalDB (line 10) | type LocalDB struct
method Default (line 18) | func (l *LocalDB) Default() *sql.DB {
function cloneValues (line 25) | func cloneValues(src url.Values) url.Values {
FILE: packages/db/pkg/tursolocal/windows.go
function NewTursoLocal (line 24) | func NewTursoLocal(ctx context.Context, dbName, path, encryptionKey stri...
FILE: packages/db/pkg/tursomem/linux.go
function NewTursoLocal (line 19) | func NewTursoLocal(ctx context.Context) (*sql.DB, func(), error) {
FILE: packages/db/pkg/tursomem/windows.go
function NewTursoLocal (line 19) | func NewTursoLocal(ctx context.Context) (*sql.DB, func(), error) {
FILE: packages/db/verification_test.go
function TestHTTPChildEntityVerification (line 16) | func TestHTTPChildEntityVerification(t *testing.T) {
function main (line 523) | func main() {
FILE: packages/server/cmd/authadapter-testserver/main.go
function main (line 32) | func main() {
function run (line 38) | func run() error {
FILE: packages/server/cmd/server/server.go
function main (line 9) | func main() {
FILE: packages/server/cmd/serverrun/serverrun.go
type workspaceImporterAdapter (line 69) | type workspaceImporterAdapter struct
method ImportWorkspaceFromYAML (line 73) | func (w *workspaceImporterAdapter) ImportWorkspaceFromYAML(ctx context...
method ImportWorkspaceFromCurl (line 99) | func (w *workspaceImporterAdapter) ImportWorkspaceFromCurl(ctx context...
function Run (line 106) | func Run() error {
type serviceManager (line 713) | type serviceManager struct
method addService (line 724) | func (sm *serviceManager) addService(s *api.Service, e error) {
method getServices (line 734) | func (sm *serviceManager) getServices() []api.Service {
function newServiceManager (line 718) | func newServiceManager(size int) *serviceManager {
function setupLogger (line 738) | func setupLogger() *slog.Logger {
function setupDB (line 761) | func setupDB(ctx context.Context) (*sql.DB, func(), error) {
function getDBLocal (line 776) | func getDBLocal(ctx context.Context) (*sql.DB, func(), error) {
type streamers (line 814) | type streamers struct
method shutdown (line 908) | func (s *streamers) shutdown() {
function newStreamers (line 860) | func newStreamers() *streamers {
function registerCascadeHandlers (line 956) | func registerCascadeHandlers(registry *streamregistry.Registry, httpStre...
FILE: packages/server/internal/api/api.go
type Service (line 15) | type Service struct
type ServerStreamAdHoc (line 20) | type ServerStreamAdHoc interface
type ClientStreamAdHoc (line 24) | type ClientStreamAdHoc interface
type FullStreamAdHoc (line 28) | type FullStreamAdHoc interface
function newCORS (line 33) | func newCORS() *cors.Cors {
constant ServerModeUDS (line 66) | ServerModeUDS = "uds"
constant ServerModeTCP (line 67) | ServerModeTCP = "tcp"
function newH2CServer (line 70) | func newH2CServer(mux *http.ServeMux) *http.Server {
function ListenServices (line 91) | func ListenServices(services []Service, port string) error {
function listenTCP (line 115) | func listenTCP(mux *http.ServeMux, port string) error {
FILE: packages/server/internal/api/api_unix.go
function DefaultServerSocketPath (line 16) | func DefaultServerSocketPath() string {
function DefaultWorkerSocketPath (line 21) | func DefaultWorkerSocketPath() string {
function listenIPC (line 25) | func listenIPC(mux *http.ServeMux) error {
function DialWorker (line 64) | func DialWorker(ctx context.Context, socketPath string) (net.Conn, error) {
FILE: packages/server/internal/api/api_windows.go
function DefaultServerSocketPath (line 16) | func DefaultServerSocketPath() string {
function DefaultWorkerSocketPath (line 21) | func DefaultWorkerSocketPath() string {
function listenIPC (line 25) | func listenIPC(mux *http.ServeMux) error {
function DialWorker (line 43) | func DialWorker(ctx context.Context, socketPath string) (net.Conn, error) {
FILE: packages/server/internal/api/middleware/mwauth/helpers.go
function CheckOwnerWorkspace (line 13) | func CheckOwnerWorkspace(ctx context.Context, su suser.UserService, work...
function CheckOwnerWorkspaceWithReader (line 23) | func CheckOwnerWorkspaceWithReader(ctx context.Context, userReader *swor...
FILE: packages/server/internal/api/middleware/mwauth/mwauth.go
type ContextKey (line 23) | type ContextKey
constant UserIDKeyCtx (line 26) | UserIDKeyCtx ContextKey = iota
constant WorkspaceIDKeyCtx (line 27) | WorkspaceIDKeyCtx
constant LocalDummyIDStr (line 30) | LocalDummyIDStr = "00000000000000000000000000"
type authInterceptor (line 34) | type authInterceptor struct
method WrapUnary (line 40) | func (i *authInterceptor) WrapUnary(next connect.UnaryFunc) connect.Un...
method WrapStreamingClient (line 50) | func (*authInterceptor) WrapStreamingClient(next connect.StreamingClie...
method WrapStreamingHandler (line 60) | func (i *authInterceptor) WrapStreamingHandler(next connect.StreamingH...
function NewAuthInterceptor (line 36) | func NewAuthInterceptor() *authInterceptor {
function NewAuthInterceptorOne (line 69) | func NewAuthInterceptorOne(secret []byte) connect.UnaryInterceptorFunc {
function NewAuthInterceptorLocal (line 82) | func NewAuthInterceptorLocal() connect.UnaryInterceptorFunc {
type AuthInterceptorData (line 94) | type AuthInterceptorData struct
method AuthInterceptor (line 102) | func (authData AuthInterceptorData) AuthInterceptor(ctx context.Contex...
function CreateAuthedContext (line 98) | func CreateAuthedContext(ctx context.Context, userID idwrap.IDWrap) cont...
function AuthInterceptorLocal (line 133) | func AuthInterceptorLocal(ctx context.Context, req connect.AnyRequest, n...
function AuthInterceptorLocalStreamHandlerLocal (line 137) | func AuthInterceptorLocalStreamHandlerLocal(next connect.StreamingHandle...
function CrashInterceptor (line 146) | func CrashInterceptor(ctx context.Context, req connect.AnyRequest, next ...
function GetContextUserID (line 161) | func GetContextUserID(ctx context.Context) (idwrap.IDWrap, error) {
type betterAuthInterceptor (line 172) | type betterAuthInterceptor struct
method WrapUnary (line 186) | func (i *betterAuthInterceptor) WrapUnary(next connect.UnaryFunc) conn...
method WrapStreamingClient (line 200) | func (i *betterAuthInterceptor) WrapStreamingClient(next connect.Strea...
method WrapStreamingHandler (line 210) | func (i *betterAuthInterceptor) WrapStreamingHandler(next connect.Stre...
method extractUserID (line 226) | func (i *betterAuthInterceptor) extractUserID(ctx context.Context, hea...
function NewBetterAuthInterceptor (line 179) | func NewBetterAuthInterceptor(kf jwt.Keyfunc, us suser.UserService) *bet...
FILE: packages/server/internal/api/middleware/mwauth/mwauth_test.go
function mockUnaryNext (line 28) | func mockUnaryNext(t *testing.T, expectedID idwrap.IDWrap) connect.Unary...
function mockUnaryPanicNext (line 44) | func mockUnaryPanicNext(ctx context.Context, req connect.AnyRequest) (co...
function TestNewAuthInterceptorLocal (line 48) | func TestNewAuthInterceptorLocal(t *testing.T) {
function TestAuthInterceptorLocalStreamHandlerLocal (line 57) | func TestAuthInterceptorLocalStreamHandlerLocal(t *testing.T) {
type mockRequest (line 70) | type mockRequest struct
method Spec (line 75) | func (m mockRequest) Spec() connect.Spec {
method Header (line 81) | func (m mockRequest) Header() http.Header {
function TestCrashInterceptor (line 88) | func TestCrashInterceptor(t *testing.T) {
function TestNewAuthInterceptorOne (line 122) | func TestNewAuthInterceptorOne(t *testing.T) {
function TestGetContextUserID (line 191) | func TestGetContextUserID(t *testing.T) {
function TestAuthInterceptor_Methods (line 207) | func TestAuthInterceptor_Methods(t *testing.T) {
function testHMACKeyfunc (line 249) | func testHMACKeyfunc() jwt.Keyfunc {
function createTestBetterAuthJWT (line 259) | func createTestBetterAuthJWT(t *testing.T, sub, email, name string, expi...
function setupTestUserService (line 284) | func setupTestUserService(t *testing.T) (suser.UserService, *sql.DB) {
function TestBetterAuthInterceptor_ExtractUserID (line 295) | func TestBetterAuthInterceptor_ExtractUserID(t *testing.T) {
function TestBetterAuthInterceptor_ConcurrentAutoProvision (line 378) | func TestBetterAuthInterceptor_ConcurrentAutoProvision(t *testing.T) {
function TestBetterAuthInterceptor_ConcurrentDifferentUsers (line 420) | func TestBetterAuthInterceptor_ConcurrentDifferentUsers(t *testing.T) {
function TestValidateJWT (line 458) | func TestValidateJWT(t *testing.T) {
FILE: packages/server/internal/api/middleware/mwcodec/mwcodec.go
type protoJSONCodec (line 13) | type protoJSONCodec struct
method Name (line 29) | func (c *protoJSONCodec) Name() string {
method Marshal (line 34) | func (c *protoJSONCodec) Marshal(msg any) ([]byte, error) {
method Unmarshal (line 43) | func (c *protoJSONCodec) Unmarshal(data []byte, msg any) error {
function errNotProto (line 51) | func errNotProto(msg any) error {
type errNotProtoMessage (line 58) | type errNotProtoMessage struct
method Error (line 62) | func (e *errNotProtoMessage) Error() string {
function NewJSONCodec (line 68) | func NewJSONCodec() connect.Codec {
function WithJSONCodec (line 73) | func WithJSONCodec() connect.HandlerOption {
FILE: packages/server/internal/api/middleware/mwcompress/mwcompress.go
function NewCompress (line 10) | func NewCompress() connect.Compressor {
function NewDecompress (line 14) | func NewDecompress() connect.Decompressor {
FILE: packages/server/internal/api/rauthadapter/rauthadapter.go
type AuthAdapterRPC (line 113) | type AuthAdapterRPC struct
method Create (line 285) | func (h AuthAdapterRPC) Create(ctx context.Context, req *connect.Reque...
method Find (line 301) | func (h AuthAdapterRPC) Find(ctx context.Context, req *connect.Request...
method FindMany (line 320) | func (h AuthAdapterRPC) FindMany(ctx context.Context, req *connect.Req...
method Update (line 350) | func (h AuthAdapterRPC) Update(ctx context.Context, req *connect.Reque...
method UpdateMany (line 373) | func (h AuthAdapterRPC) UpdateMany(ctx context.Context, req *connect.R...
method Delete (line 389) | func (h AuthAdapterRPC) Delete(ctx context.Context, req *connect.Reque...
method DeleteMany (line 400) | func (h AuthAdapterRPC) DeleteMany(ctx context.Context, req *connect.R...
method Count (line 411) | func (h AuthAdapterRPC) Count(ctx context.Context, req *connect.Reques...
type AuthAdapterRPCDeps (line 120) | type AuthAdapterRPCDeps struct
function New (line 125) | func New(deps AuthAdapterRPCDeps) AuthAdapterRPC {
function CreateService (line 130) | func CreateService(h AuthAdapterRPC, opts []connect.HandlerOption) (*api...
function operatorToString (line 137) | func operatorToString(op auth_adapterv1.Operator) string {
function connectorToString (line 166) | func connectorToString(c auth_adapterv1.Connector) string {
function directionToString (line 173) | func directionToString(d auth_adapterv1.Direction) string {
function protoValueToRaw (line 181) | func protoValueToRaw(v *structpb.Value) (json.RawMessage, error) {
function protoStructToMap (line 193) | func protoStructToMap(v *structpb.Value) (map[string]json.RawMessage, er...
function protoMapToData (line 209) | func protoMapToData(m map[string]*structpb.Value) (map[string]json.RawMe...
function mapToProtoValue (line 222) | func mapToProtoValue(m map[string]any) (*structpb.Value, error) {
function mapAnyToProtoMap (line 238) | func mapAnyToProtoMap(m map[string]any) (map[string]*structpb.Value, err...
function convertWhere (line 258) | func convertWhere(where []*auth_adapterv1.Where) ([]authadapter.WhereCla...
function adapterErr (line 276) | func adapterErr(err error) error {
FILE: packages/server/internal/api/rauthadapter/rauthadapter_test.go
function newHandler (line 18) | func newHandler(t *testing.T) (AuthAdapterRPC, func()) {
function newHandlerWithFK (line 29) | func newHandlerWithFK(t *testing.T) (AuthAdapterRPC, func()) {
function jsonValue (line 38) | func jsonValue(m map[string]any) *structpb.Value {
function jsonMap (line 48) | func jsonMap(m map[string]any) map[string]*structpb.Value {
function protoMapToAny (line 62) | func protoMapToAny(m map[string]*structpb.Value) map[string]any {
function eqWhere (line 71) | func eqWhere(field string, val *structpb.Value) *auth_adapterv1.Where {
function TestCreate_user (line 82) | func TestCreate_user(t *testing.T) {
function TestCreate_session (line 106) | func TestCreate_session(t *testing.T) {
function TestCreate_unsupportedModel (line 140) | func TestCreate_unsupportedModel(t *testing.T) {
function TestFind_byID (line 156) | func TestFind_byID(t *testing.T) {
function TestFind_byEmail (line 185) | func TestFind_byEmail(t *testing.T) {
function TestFind_notFound (line 213) | func TestFind_notFound(t *testing.T) {
function TestFindMany_sessions (line 229) | func TestFindMany_sessions(t *testing.T) {
function TestUpdate_user (line 271) | func TestUpdate_user(t *testing.T) {
function TestDelete_user (line 300) | func TestDelete_user(t *testing.T) {
function TestDeleteMany_expiredSessions (line 336) | func TestDeleteMany_expiredSessions(t *testing.T) {
function TestCount_users (line 399) | func TestCount_users(t *testing.T) {
function TestUpdateMany_user (line 424) | func TestUpdateMany_user(t *testing.T) {
function TestUpdateMany_unsupportedModel (line 456) | func TestUpdateMany_unsupportedModel(t *testing.T) {
function createUserFixture (line 472) | func createUserFixture(t *testing.T, h AuthAdapterRPC, name, email strin...
function TestCreate_account (line 489) | func TestCreate_account(t *testing.T) {
function TestCreate_accountWithTokens (line 513) | func TestCreate_accountWithTokens(t *testing.T) {
function TestFind_accountByID (line 541) | func TestFind_accountByID(t *testing.T) {
function TestFind_accountByProviderAndAccountId (line 569) | func TestFind_accountByProviderAndAccountId(t *testing.T) {
function TestFind_accountNotFound (line 597) | func TestFind_accountNotFound(t *testing.T) {
function TestFindMany_accountsByUserId (line 612) | func TestFindMany_accountsByUserId(t *testing.T) {
function TestUpdate_account (line 639) | func TestUpdate_account(t *testing.T) {
function TestDelete_account (line 667) | func TestDelete_account(t *testing.T) {
function TestDeleteMany_accountsByUserId (line 698) | func TestDeleteMany_accountsByUserId(t *testing.T) {
function TestCreate_verification (line 733) | func TestCreate_verification(t *testing.T) {
function TestFind_verificationByID (line 755) | func TestFind_verificationByID(t *testing.T) {
function TestFind_verificationByIdentifier (line 782) | func TestFind_verificationByIdentifier(t *testing.T) {
function TestDelete_verification (line 807) | func TestDelete_verification(t *testing.T) {
function TestDeleteMany_expiredVerifications (line 840) | func TestDeleteMany_expiredVerifications(t *testing.T) {
function TestFind_sessionByToken (line 900) | func TestFind_sessionByToken(t *testing.T) {
function TestCreate_sessionWithOptionalFields (line 927) | func TestCreate_sessionWithOptionalFields(t *testing.T) {
function TestUpdate_session (line 951) | func TestUpdate_session(t *testing.T) {
function TestDelete_sessionByToken (line 982) | func TestDelete_sessionByToken(t *testing.T) {
function TestDeleteMany_sessionsByExpiresAtLt (line 1016) | func TestDeleteMany_sessionsByExpiresAtLt(t *testing.T) {
function TestCreate_userWithImage (line 1069) | func TestCreate_userWithImage(t *testing.T) {
function TestUpdate_userEmailVerified (line 1089) | func TestUpdate_userEmailVerified(t *testing.T) {
function TestFind_unsupportedModel (line 1119) | func TestFind_unsupportedModel(t *testing.T) {
function TestFindMany_unsupportedModel (line 1133) | func TestFindMany_unsupportedModel(t *testing.T) {
function TestCount_unsupportedModel (line 1147) | func TestCount_unsupportedModel(t *testing.T) {
function TestDelete_unsupportedModel (line 1160) | func TestDelete_unsupportedModel(t *testing.T) {
function TestFind_unsupportedWhereField (line 1174) | func TestFind_unsupportedWhereField(t *testing.T) {
function TestFind_userByName (line 1189) | func TestFind_userByName(t *testing.T) {
function TestConnectorToString (line 1215) | func TestConnectorToString(t *testing.T) {
function TestOperatorToString (line 1223) | func TestOperatorToString(t *testing.T) {
function TestAdapterErr_unsupportedModel (line 1247) | func TestAdapterErr_unsupportedModel(t *testing.T) {
function TestAdapterErr_unsupportedWhere (line 1254) | func TestAdapterErr_unsupportedWhere(t *testing.T) {
function TestCreate_userDuplicateEmail (line 1272) | func TestCreate_userDuplicateEmail(t *testing.T) {
function TestCreate_userEmailVerifiedDefaultFalse (line 1294) | func TestCreate_userEmailVerifiedDefaultFalse(t *testing.T) {
function TestCreate_userImageOptional (line 1312) | func TestCreate_userImageOptional(t *testing.T) {
function TestCreate_sessionDuplicateToken (line 1335) | func TestCreate_sessionDuplicateToken(t *testing.T) {
function TestDelete_userCascadesSessions (line 1359) | func TestDelete_userCascadesSessions(t *testing.T) {
function TestSession_optionalFieldsNullWhenAbsent (line 1392) | func TestSession_optionalFieldsNullWhenAbsent(t *testing.T) {
function TestDelete_userCascadesAccounts (line 1420) | func TestDelete_userCascadesAccounts(t *testing.T) {
function TestCreate_accountCredentialProvider (line 1453) | func TestCreate_accountCredentialProvider(t *testing.T) {
function TestAccount_sensitiveFieldsNullWhenAbsent (line 1477) | func TestAccount_sensitiveFieldsNullWhenAbsent(t *testing.T) {
function TestCreate_jwks (line 1504) | func TestCreate_jwks(t *testing.T) {
function TestFindMany_jwks (line 1522) | func TestFindMany_jwks(t *testing.T) {
function TestDelete_jwks (line 1553) | func TestDelete_jwks(t *testing.T) {
FILE: packages/server/internal/api/rcredential/deps_test.go
function TestCredentialRPCDeps_Validate (line 11) | func TestCredentialRPCDeps_Validate(t *testing.T) {
function TestCredentialRPCReaders_Validate (line 173) | func TestCredentialRPCReaders_Validate(t *testing.T) {
function TestCredentialRPCStreamers_Validate (line 203) | func TestCredentialRPCStreamers_Validate(t *testing.T) {
function TestNew_PanicsOnInvalidDeps (line 276) | func TestNew_PanicsOnInvalidDeps(t *testing.T) {
FILE: packages/server/internal/api/rcredential/rcredential.go
constant eventTypeInsert (line 31) | eventTypeInsert = "insert"
constant eventTypeUpdate (line 32) | eventTypeUpdate = "update"
constant eventTypeDelete (line 33) | eventTypeDelete = "delete"
type CredentialRPC (line 36) | type CredentialRPC struct
method getAccessibleWorkspaces (line 188) | func (s *CredentialRPC) getAccessibleWorkspaces(ctx context.Context) (...
method getCredentialWorkspaceID (line 203) | func (s *CredentialRPC) getCredentialWorkspaceID(ctx context.Context, ...
method CredentialCollection (line 227) | func (s *CredentialRPC) CredentialCollection(
method CredentialInsert (line 250) | func (s *CredentialRPC) CredentialInsert(
method CredentialUpdate (line 400) | func (s *CredentialRPC) CredentialUpdate(
method CredentialDelete (line 481) | func (s *CredentialRPC) CredentialDelete(
method CredentialSync (line 557) | func (s *CredentialRPC) CredentialSync(
method streamCredentialSync (line 569) | func (s *CredentialRPC) streamCredentialSync(
method CredentialOpenAiCollection (line 647) | func (s *CredentialRPC) CredentialOpenAiCollection(
method CredentialOpenAiInsert (line 680) | func (s *CredentialRPC) CredentialOpenAiInsert(
method CredentialOpenAiUpdate (line 775) | func (s *CredentialRPC) CredentialOpenAiUpdate(
method CredentialOpenAiDelete (line 867) | func (s *CredentialRPC) CredentialOpenAiDelete(
method CredentialOpenAiSync (line 943) | func (s *CredentialRPC) CredentialOpenAiSync(
method streamCredentialOpenAiSync (line 955) | func (s *CredentialRPC) streamCredentialOpenAiSync(
method CredentialGeminiCollection (line 1029) | func (s *CredentialRPC) CredentialGeminiCollection(
method CredentialGeminiInsert (line 1062) | func (s *CredentialRPC) CredentialGeminiInsert(
method CredentialGeminiUpdate (line 1156) | func (s *CredentialRPC) CredentialGeminiUpdate(
method CredentialGeminiDelete (line 1247) | func (s *CredentialRPC) CredentialGeminiDelete(
method CredentialGeminiSync (line 1318) | func (s *CredentialRPC) CredentialGeminiSync(
method streamCredentialGeminiSync (line 1330) | func (s *CredentialRPC) streamCredentialGeminiSync(
method CredentialAnthropicCollection (line 1404) | func (s *CredentialRPC) CredentialAnthropicCollection(
method CredentialAnthropicInsert (line 1437) | func (s *CredentialRPC) CredentialAnthropicInsert(
method CredentialAnthropicUpdate (line 1531) | func (s *CredentialRPC) CredentialAnthropicUpdate(
method CredentialAnthropicDelete (line 1622) | func (s *CredentialRPC) CredentialAnthropicDelete(
method CredentialAnthropicSync (line 1693) | func (s *CredentialRPC) CredentialAnthropicSync(
method streamCredentialAnthropicSync (line 1705) | func (s *CredentialRPC) streamCredentialAnthropicSync(
type CredentialTopic (line 55) | type CredentialTopic struct
type CredentialEvent (line 59) | type CredentialEvent struct
type CredentialOpenAiTopic (line 64) | type CredentialOpenAiTopic struct
type CredentialOpenAiEvent (line 68) | type CredentialOpenAiEvent struct
type CredentialGeminiTopic (line 73) | type CredentialGeminiTopic struct
type CredentialGeminiEvent (line 77) | type CredentialGeminiEvent struct
type CredentialAnthropicTopic (line 82) | type CredentialAnthropicTopic struct
type CredentialAnthropicEvent (line 86) | type CredentialAnthropicEvent struct
type CredentialRPCServices (line 93) | type CredentialRPCServices struct
method Validate (line 99) | func (s *CredentialRPCServices) Validate() error {
type CredentialRPCReaders (line 103) | type CredentialRPCReaders struct
method Validate (line 107) | func (r *CredentialRPCReaders) Validate() error {
type CredentialRPCStreamers (line 114) | type CredentialRPCStreamers struct
method Validate (line 121) | func (s *CredentialRPCStreamers) Validate() error {
type CredentialRPCDeps (line 137) | type CredentialRPCDeps struct
method Validate (line 145) | func (d *CredentialRPCDeps) Validate() error {
function New (line 161) | func New(deps CredentialRPCDeps) CredentialRPC {
function CreateService (line 180) | func CreateService(srv CredentialRPC, options []connect.HandlerOption) (...
FILE: packages/server/internal/api/rcredential/rcredential_test.go
type credentialFixture (line 30) | type credentialFixture struct
method createWorkspace (line 102) | func (f *credentialFixture) createWorkspace(t *testing.T, name string)...
method createCredential (line 143) | func (f *credentialFixture) createCredential(t *testing.T, wsID idwrap...
function newCredentialFixture (line 39) | func newCredentialFixture(t *testing.T) *credentialFixture {
function TestCredentialInsert_Success (line 162) | func TestCredentialInsert_Success(t *testing.T) {
function TestCredentialInsert_InvalidWorkspace (line 188) | func TestCredentialInsert_InvalidWorkspace(t *testing.T) {
function TestCredentialUpdate_Success (line 210) | func TestCredentialUpdate_Success(t *testing.T) {
function TestCredentialUpdate_NotFound (line 246) | func TestCredentialUpdate_NotFound(t *testing.T) {
function TestCredentialDelete_Success (line 264) | func TestCredentialDelete_Success(t *testing.T) {
function TestCredentialDelete_AlreadyDeleted (line 303) | func TestCredentialDelete_AlreadyDeleted(t *testing.T) {
function TestCredentialCollection_Success (line 319) | func TestCredentialCollection_Success(t *testing.T) {
function TestCredentialOpenAiInsert_Success (line 348) | func TestCredentialOpenAiInsert_Success(t *testing.T) {
function TestCredentialOpenAiInsert_WithBaseUrl (line 373) | func TestCredentialOpenAiInsert_WithBaseUrl(t *testing.T) {
function TestCredentialOpenAiUpdate_Success (line 398) | func TestCredentialOpenAiUpdate_Success(t *testing.T) {
function TestCredentialOpenAiDelete_Success (line 433) | func TestCredentialOpenAiDelete_Success(t *testing.T) {
function TestCredentialGeminiInsert_Success (line 466) | func TestCredentialGeminiInsert_Success(t *testing.T) {
function TestCredentialGeminiUpdate_Success (line 489) | func TestCredentialGeminiUpdate_Success(t *testing.T) {
function TestCredentialGeminiDelete_Success (line 521) | func TestCredentialGeminiDelete_Success(t *testing.T) {
function TestCredentialAnthropicInsert_Success (line 552) | func TestCredentialAnthropicInsert_Success(t *testing.T) {
function TestCredentialAnthropicUpdate_Success (line 575) | func TestCredentialAnthropicUpdate_Success(t *testing.T) {
function TestCredentialAnthropicDelete_Success (line 607) | func TestCredentialAnthropicDelete_Success(t *testing.T) {
function TestCredentialCollection_ReturnsCorrectData (line 638) | func TestCredentialCollection_ReturnsCorrectData(t *testing.T) {
function TestCredentialSyncFiltersUnauthorizedWorkspaces (line 677) | func TestCredentialSyncFiltersUnauthorizedWorkspaces(t *testing.T) {
function TestCredentialDeleteConcurrent (line 7
Condensed preview — 1290 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (9,795K chars).
[
{
"path": ".editorconfig",
"chars": 191,
"preview": "# editorconfig.org\nroot = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\n\nindent_size = 2\nindent_style = space\n\nmax_line_len"
},
{
"path": ".envrc",
"chars": 10,
"preview": "use flake\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug-report.yaml",
"chars": 1500,
"preview": "name: Report a bug\ndescription: Have you found a bug or issue? Create a bug report\nlabels: ['bug']\n\nbody:\n - type: mark"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 182,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: Security vulnerability\n url: https://dev.tools/\n about: Pleas"
},
{
"path": ".github/ISSUE_TEMPLATE/feature-request.yaml",
"chars": 1530,
"preview": "name: Feature request\ndescription: Suggest an idea or a feature\nlabels: ['feature request']\n\nbody:\n - type: checkboxes\n"
},
{
"path": ".github/actions/dependencies-unix/action.yaml",
"chars": 1303,
"preview": "name: Setup Unix dependencies\ndescription: ''\n\nruns:\n using: composite\n steps:\n - uses: nixbuild/nix-quick-install-"
},
{
"path": ".github/actions/dependencies-windows/action.yaml",
"chars": 1441,
"preview": "name: Setup Windows dependencies\ndescription: ''\n\nruns:\n using: composite\n steps:\n - id: cache\n uses: actions/"
},
{
"path": ".github/actions/setup/action.yaml",
"chars": 622,
"preview": "name: Setup runner\ndescription: ''\n\ninputs:\n shell:\n description: INTERNAL\n default: ${{ runner.os == 'Windows' &"
},
{
"path": ".github/workflows/benchmark-generic.yml",
"chars": 9177,
"preview": "name: Generic Benchmark CI\n\non:\n workflow_dispatch:\n inputs:\n packages:\n description: 'Packages to bench"
},
{
"path": ".github/workflows/check.yaml",
"chars": 2157,
"preview": "name: Check\n\non:\n workflow_dispatch:\n pull_request:\n branches: [main]\n push:\n branches: [main]\n\nconcurrency:\n "
},
{
"path": ".github/workflows/goci.yml",
"chars": 1444,
"preview": "name: goci\n\non:\n workflow_dispatch:\n\nenv:\n GO_VERSION: 1.23\n GOLANGCI_LINT_VERSION: v1.60\n\njobs:\n detect-modules:\n "
},
{
"path": ".github/workflows/release-chrome-extension.yaml",
"chars": 1010,
"preview": "name: Release / Chrome Extension\n\non:\n workflow_dispatch:\n\nconcurrency:\n group: ${{ github.workflow }}-${{ github.ref "
},
{
"path": ".github/workflows/release-cloudflare-pages.yaml",
"chars": 1001,
"preview": "name: Release / Cloudflare Pages\n\non:\n workflow_dispatch:\n\nconcurrency:\n group: ${{ github.workflow }}-${{ github.ref "
},
{
"path": ".github/workflows/release-electron-builder.yaml",
"chars": 1968,
"preview": "name: Release / Electron Builder\n\non:\n workflow_dispatch:\n\njobs:\n build:\n name: Build\n continue-on-error: true\n "
},
{
"path": ".github/workflows/release-go.yaml",
"chars": 1234,
"preview": "name: Release / Go\n\non:\n workflow_dispatch:\n\njobs:\n build:\n name: Build Go Binary\n continue-on-error: true\n s"
},
{
"path": ".github/workflows/release.yaml",
"chars": 1177,
"preview": "name: Release\n\non:\n workflow_dispatch:\n inputs:\n api-recorder-extension: { type: boolean }\n cli: { type: b"
},
{
"path": ".github/workflows/sql.yml",
"chars": 344,
"preview": "name: sql\non:\n push:\n branches:\n - 'main'\n paths:\n - '**.sql'\njobs:\n sql-vet:\n name: SQL Vet\n ru"
},
{
"path": ".github/workflows/update-scoop.yaml",
"chars": 944,
"preview": "name: Update / Scoop\n\non:\n schedule:\n - cron: '0 0 * * 1'\n workflow_dispatch:\n\njobs:\n build:\n name: Build\n r"
},
{
"path": ".gitignore",
"chars": 494,
"preview": ".ai\n.bench/\n.claude\n.direnv\n.env.*.local\n.env.keys\n.env.local\n.next\n.nx/cache\n.nx/workspace-data\n.plasmo\n.task\n.vite\n*.d"
},
{
"path": ".golangci.yml",
"chars": 391,
"preview": "version: \"2\"\n\nrun:\n allow-parallel-runners: false\n modules-download-mode: readonly\n allow-serial-runners: true\n go: "
},
{
"path": ".prettierignore",
"chars": 137,
"preview": ".ai/\n.golangci.yml\n*.har\nAGENTS.md\nCHANGELOG.md\nconductor/\ndist\nflake.lock\nGEMINI.md\nLICENSE\npnpm-lock.yaml\nroute-tree.g"
},
{
"path": ".sqlfluff",
"chars": 295,
"preview": "[sqlfluff]\ndialect = sqlite \ntemplater = jinja\nsql_file_exts = .sql,.sql.j2,.dml,.ddl\n\n[sqlfluff:indentation]\nindented_j"
},
{
"path": ".vscode/extensions.json",
"chars": 317,
"preview": "{\n \"recommendations\": [\n \"bradlc.vscode-tailwindcss\",\n \"dbaeumer.vscode-eslint\",\n \"editorconfig.editorconfig\","
},
{
"path": ".vscode/settings.json",
"chars": 600,
"preview": "{\n \"eslint.options\": { \"flags\": [\"v10_config_lookup_from_file\"] },\n \"eslint.nodeEnv\": \"IDE\",\n \"files.associations\": {"
},
{
"path": "AGENTS.md",
"chars": 8147,
"preview": "# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## "
},
{
"path": "LICENSE",
"chars": 11338,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "README.md",
"chars": 5263,
"preview": "<p align=\"center\">\n <a href=\"https://dev.tools/\">\n <img width=200px height=200px src=\"./apps/desktop/build/icon.png\""
},
{
"path": "apps/api-recorder-extension/eslint.config.ts",
"chars": 499,
"preview": "import { ConfigArray } from 'typescript-eslint';\n\nimport base from '@the-dev-tools/eslint-config';\n\nconst config: Config"
},
{
"path": "apps/api-recorder-extension/package.disabled.json",
"chars": 1342,
"preview": "{\n \"name\": \"@the-dev-tools/api-recorder-extension\",\n \"displayName\": \"API Recorder\",\n \"author\": \"dev.tools\",\n \"versio"
},
{
"path": "apps/api-recorder-extension/postcss.config.js",
"chars": 124,
"preview": "/**\n * @type {import('postcss').ProcessOptions}\n */\nmodule.exports = {\n plugins: {\n '@tailwindcss/postcss': {},\n },"
},
{
"path": "apps/api-recorder-extension/project.disabled.json",
"chars": 491,
"preview": "{\n \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n\n \"name\": \"api-recorder-extension\",\n \"projectType\""
},
{
"path": "apps/api-recorder-extension/src/auth.ts",
"chars": 1650,
"preview": "import { Effect, Option, Schema } from 'effect';\nimport { Magic } from 'magic-sdk';\n\nimport * as Storage from '~storage'"
},
{
"path": "apps/api-recorder-extension/src/background.ts",
"chars": 4811,
"preview": "import type { Protocol } from 'devtools-protocol';\nimport type { ProtocolMapping } from 'devtools-protocol/types/protoco"
},
{
"path": "apps/api-recorder-extension/src/layout.tsx",
"chars": 778,
"preview": "import backgroundImage from 'data-base64:~/../assets/background.png';\nimport { twMerge } from 'tailwind-merge';\n\nexport "
},
{
"path": "apps/api-recorder-extension/src/popup.tsx",
"chars": 22373,
"preview": "import '~styles.css';\n\nimport {\n Array,\n Clock,\n Duration,\n Effect,\n flow,\n HashMap,\n Match,\n Option,\n pipe,\n "
},
{
"path": "apps/api-recorder-extension/src/postman.ts",
"chars": 10761,
"preview": "import * as S from 'effect/Schema';\n\n// Generated using: https://app.quicktype.io\n// Documentation: https://learning.pos"
},
{
"path": "apps/api-recorder-extension/src/recorder.ts",
"chars": 9441,
"preview": "import * as PlasmoStorage from '@plasmohq/storage/hook';\nimport * as Devtools from 'devtools-protocol';\nimport { Array, "
},
{
"path": "apps/api-recorder-extension/src/runtime.ts",
"chars": 144,
"preview": "import { Logger, LogLevel, ManagedRuntime } from 'effect';\n\nexport const Runtime = ManagedRuntime.make(Logger.minimumLog"
},
{
"path": "apps/api-recorder-extension/src/storage.ts",
"chars": 1917,
"preview": "import * as PlasmoStorage from '@plasmohq/storage';\nimport * as PlasmoStorageHook from '@plasmohq/storage/hook';\nimport "
},
{
"path": "apps/api-recorder-extension/src/styles.css",
"chars": 93,
"preview": "@import '@the-dev-tools/ui/styles';\n\n@source '.';\n\nhtml,\nbody,\n#__plasmo {\n height: 100%;\n}\n"
},
{
"path": "apps/api-recorder-extension/src/tabs/auth-callback.tsx",
"chars": 3893,
"preview": "import '~styles.css';\n\nimport type { IconType } from 'react-icons';\n\nimport { Effect, Match, Option, pipe, Tuple } from "
},
{
"path": "apps/api-recorder-extension/src/types.d.ts",
"chars": 39,
"preview": "import 'plasmo/templates/plasmo.d.ts';\n"
},
{
"path": "apps/api-recorder-extension/src/ui/button.tsx",
"chars": 1162,
"preview": "import * as RAC from 'react-aria-components';\nimport { tv, type VariantProps } from 'tailwind-variants';\nimport { focusV"
},
{
"path": "apps/api-recorder-extension/src/utils.ts",
"chars": 298,
"preview": "// https://github.com/microsoft/TypeScript/issues/13948#issuecomment-1333159066\n// eslint-disable-next-line @typescript-"
},
{
"path": "apps/api-recorder-extension/tsconfig.json",
"chars": 227,
"preview": "{\n \"extends\": [\"../../tsconfig.base.json\"],\n \"files\": [],\n \"references\": [\n {\n \"path\": \"../../packages/ui\"\n "
},
{
"path": "apps/api-recorder-extension/tsconfig.lib.json",
"chars": 430,
"preview": "{\n \"extends\": [\"plasmo/templates/tsconfig.base.json\", \"./tsconfig.json\"],\n \"compilerOptions\": {\n \"outDir\": \"dist\",\n"
},
{
"path": "apps/cli/.devtools.yaml",
"chars": 3,
"preview": "{}\n"
},
{
"path": "apps/cli/CHANGELOG.md",
"chars": 3505,
"preview": "## 1.0.1 (2026-05-05)\n\n### 🩹 Fixes\n\n- ### Bug fixes ([#42](https://github.com/the-dev-tools/dev-tools/issues/42))\n\n - *"
},
{
"path": "apps/cli/cmd/config.go",
"chars": 1157,
"preview": "package cmd\n\nimport (\n\t\"github.com/the-dev-tools/dev-tools/packages/server/pkg/model/mfile\"\n\t\"github.com/the-dev-tools/d"
},
{
"path": "apps/cli/cmd/flow.go",
"chars": 15244,
"preview": "package cmd\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"log/slog\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/the-dev-tools/dev-tools/apps/c"
},
{
"path": "apps/cli/cmd/import.go",
"chars": 7932,
"preview": "package cmd\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log/slog\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/the-dev-tools/dev-to"
},
{
"path": "apps/cli/cmd/root.go",
"chars": 2043,
"preview": "package cmd\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\thomedir \"github.com/mitchellh/go-homedir\"\n\t\"github.com/spf13/cobra\"\n\t\"github.com/s"
},
{
"path": "apps/cli/cmd/version.go",
"chars": 393,
"preview": "package cmd\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/spf13/cobra\"\n)\n\nfunc init() {\n\trootCmd.AddCommand(versionCmd)\n}\n\nconst versio"
},
{
"path": "apps/cli/embedded/embeddedJS/embededJS.go",
"chars": 86,
"preview": "package embeddedJS\n\nimport _ \"embed\"\n\n//go:embed worker.cjs.embed\nvar WorkerJS string\n"
},
{
"path": "apps/cli/go.mod",
"chars": 3985,
"preview": "module github.com/the-dev-tools/dev-tools/apps/cli\n\ngo 1.25\n\nrequire (\n\tconnectrpc.com/connect v1.19.1\n\tgithub.com/mitch"
},
{
"path": "apps/cli/go.sum",
"chars": 18404,
"preview": "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20251209175733-2a1774d88802.1 h1:j9yeqTWEFrtimt8Nng2"
},
{
"path": "apps/cli/install.sh",
"chars": 8805,
"preview": "#!/bin/bash\n\nset -e\n\n# DevTools CLI Installer Script\n# This script downloads and installs the DevTools CLI from GitHub r"
},
{
"path": "apps/cli/internal/common/services.go",
"chars": 4899,
"preview": "package common\n\nimport (\n\t\"context\"\n\t\"database/sql\"\n\t\"fmt\"\n\t\"log/slog\"\n\n\t\"github.com/the-dev-tools/dev-tools/packages/db"
},
{
"path": "apps/cli/internal/importer/importer.go",
"chars": 1482,
"preview": "package importer\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log/slog\"\n\n\t\"github.com/the-dev-tools/dev-tools/apps/cli/internal/common\""
},
{
"path": "apps/cli/internal/importer/importer_test.go",
"chars": 1030,
"preview": "package importer_test\n\nimport (\n\t\"context\"\n\t\"log/slog\"\n\t\"testing\"\n\n\t\"github.com/the-dev-tools/dev-tools/apps/cli/interna"
},
{
"path": "apps/cli/internal/model/result.go",
"chars": 1139,
"preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype IterationContextResult struct {\n\tIterationPath []int `json:\"iteration_path,o"
},
{
"path": "apps/cli/internal/reporter/reporter.go",
"chars": 16671,
"preview": "package reporter\n\nimport (\n\t\"encoding/json\"\n\t\"encoding/xml\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\""
},
{
"path": "apps/cli/internal/reporter/reporter_test.go",
"chars": 4762,
"preview": "package reporter\n\nimport (\n\t\"encoding/json\"\n\t\"encoding/xml\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/the-"
},
{
"path": "apps/cli/internal/runner/jsrunner.go",
"chars": 5350,
"preview": "package runner\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/exec\"\n\t\"time\"\n\n\tembeddedJS \"github.com/the-dev-"
},
{
"path": "apps/cli/internal/runner/runner.go",
"chars": 12280,
"preview": "package runner\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"log/slog\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/the-dev-tools/"
},
{
"path": "apps/cli/internal/runner/runner_test.go",
"chars": 24527,
"preview": "package runner_test\n\nimport (\n\t\"context\"\n\t\"database/sql\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"log/slog\"\n\t\"net/http\"\n\t\"net/http/http"
},
{
"path": "apps/cli/main.go",
"chars": 1142,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/the-dev-tools/dev-tools/packages/server/cmd/serverrun\"\n)\n\nconst"
},
{
"path": "apps/cli/mode_cli.go",
"chars": 126,
"preview": "//go:build cli\n\npackage main\n\nimport \"github.com/the-dev-tools/dev-tools/apps/cli/cmd\"\n\nfunc init() {\n\trunCLI = cmd.Exec"
},
{
"path": "apps/cli/package.json",
"chars": 232,
"preview": "{\n \"name\": \"@the-dev-tools/cli\",\n \"version\": \"1.0.1\",\n \"private\": true,\n \"type\": \"module\",\n \"exports\": \"./dist\",\n "
},
{
"path": "apps/cli/project.json",
"chars": 2411,
"preview": "{\n \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n\n \"name\": \"cli\",\n \"projectType\": \"application\",\n\n "
},
{
"path": "apps/cli/taskfile.yaml",
"chars": 1720,
"preview": "# yaml-language-server: $schema=https://taskfile.dev/schema.json\nversion: '3'\n\nvars:\n APP_NAME: cli\n VERSION: v1.0.0\n "
},
{
"path": "apps/cli/test/yamlflow/ai_node_example.yaml",
"chars": 5667,
"preview": "workspace_name: AI Node Example\n# This demonstrates AI node usage in flows\n# Note: AI nodes require configured credentia"
},
{
"path": "apps/cli/test/yamlflow/example_run_yamlflow.yaml",
"chars": 4745,
"preview": "workspace_name: Example Run Field YamlFlow\nrun:\n - flow: FlowA\n - flow: FlowB\n depends_on: FlowA\n - flow: FlowC\n "
},
{
"path": "apps/cli/test/yamlflow/file_upload_example.yaml",
"chars": 701,
"preview": "workspace_name: File Upload Example\n\nrun:\n - flow: FileUploadFlow\n\nflows:\n - name: FileUploadFlow\n steps:\n - r"
},
{
"path": "apps/cli/test/yamlflow/graphql_run_example.yaml",
"chars": 1759,
"preview": "workspace_name: GraphQL Run Example\nrun:\n - flow: QueryAndLookup\ngraphql_requests:\n - name: ListCountries\n url: htt"
},
{
"path": "apps/cli/test/yamlflow/integration_yamlflow_test.go",
"chars": 1785,
"preview": "//go:build cli_integration\n\npackage yamlflow_test\n\nimport (\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"testing\"\n)\n\n// TestMain "
},
{
"path": "apps/cli/test/yamlflow/loop_break_example.yaml",
"chars": 770,
"preview": "workspace_name: Loop Break Smoke Test\nrun:\n - flow: BreakWhenResponseMatches\n - flow: ToleratesUndefinedIdentifier\nflo"
},
{
"path": "apps/cli/test/yamlflow/multi_flow_run_example.yaml",
"chars": 5357,
"preview": "workspace_name: Multi-Flow Run Example\nrun:\n - flow: DataFetchFlow\n - flow: ProcessingFlow\n depends_on: DataFetchFl"
},
{
"path": "apps/cli/test/yamlflow/simple_run_example.yaml",
"chars": 2003,
"preview": "workspace_name: Simple Run Example\nrun:\n - flow: FlowA\n - flow: FlowB\n depends_on: FlowA\n - flow: FlowC\n depend"
},
{
"path": "apps/cli/test/yamlflow/test_run_field.yaml",
"chars": 4485,
"preview": "workspace_name: Test Workflow with Run Dependencies\n# This demonstrates multiple flows executing in sequence\n# FlowA run"
},
{
"path": "apps/cli/test/yamlflow/testdata/sample.txt",
"chars": 95,
"preview": "Hello, this is a sample text file for upload testing.\nIt contains multiple lines.\nLine 3 here.\n"
},
{
"path": "apps/cli/test/yamlflow/ws_run_example.yaml",
"chars": 1504,
"preview": "workspace_name: New Workspace\nrun:\n - flow: ws-integration\nflows:\n - name: ws-integration\n steps:\n - manual_st"
},
{
"path": "apps/desktop/CHANGELOG.md",
"chars": 7571,
"preview": "## 1.0.1 (2026-05-05)\n\n### 🩹 Fixes\n\n- ### Bug fixes ([#42](https://github.com/the-dev-tools/dev-tools/issues/42))\n\n - *"
},
{
"path": "apps/desktop/build/electron-publisher-custom.js",
"chars": 0,
"preview": ""
},
{
"path": "apps/desktop/build/entitlements.mac.plist",
"chars": 604,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "apps/desktop/build.ts",
"chars": 2272,
"preview": "import { Command } from '@effect/platform';\nimport { NodeContext } from '@effect/platform-node';\nimport { Config, Effect"
},
{
"path": "apps/desktop/electron.vite.config.ts",
"chars": 735,
"preview": "import { lezer } from '@lezer/generator/rollup';\nimport TailwindVite from '@tailwindcss/vite';\nimport ReactVite from '@v"
},
{
"path": "apps/desktop/eslint.config.ts",
"chars": 56,
"preview": "export { default } from '@the-dev-tools/eslint-config';\n"
},
{
"path": "apps/desktop/package.json",
"chars": 1912,
"preview": "{\n \"name\": \"@the-dev-tools/desktop\",\n \"description\": \"DevTools Studio is a powerful API testing tool that records your"
},
{
"path": "apps/desktop/project.json",
"chars": 123,
"preview": "{\n \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n\n \"name\": \"desktop\",\n \"projectType\": \"application\""
},
{
"path": "apps/desktop/src/main/env.d.ts",
"chars": 45,
"preview": "/// <reference types=\"electron-vite/node\" />\n"
},
{
"path": "apps/desktop/src/main/index.ts",
"chars": 13534,
"preview": "import { Command, FetchHttpClient, Path, Url } from '@effect/platform';\nimport * as NodeContext from '@effect/platform-n"
},
{
"path": "apps/desktop/src/main/update.ts",
"chars": 2977,
"preview": "import { HttpClient, HttpClientResponse } from '@effect/platform';\nimport { CustomPublishOptions } from 'builder-util-ru"
},
{
"path": "apps/desktop/src/preload/index.ts",
"chars": 1233,
"preview": "// See the Electron documentation for details on how to use preload scripts:\n// https://www.electronjs.org/docs/latest/t"
},
{
"path": "apps/desktop/src/renderer/env.d.ts",
"chars": 630,
"preview": "/// <reference types=\"vite/client\" />\n\nimport { type ProgressInfo } from 'electron-updater';\n\ndeclare global {\n interfa"
},
{
"path": "apps/desktop/src/renderer/index.html",
"chars": 221,
"preview": "<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <title>DevTools Studio</title>\n </head>\n <b"
},
{
"path": "apps/desktop/src/renderer/main.tsx",
"chars": 5103,
"preview": "import { Atom, Result, useAtomValue } from '@effect-atom/atom-react';\nimport { HttpClient, HttpClientResponse } from '@e"
},
{
"path": "apps/desktop/src/renderer/styles.css",
"chars": 90,
"preview": "@import '@the-dev-tools/client/styles';\n\n@plugin '@tailwindcss/typography';\n\n@source '.';\n"
},
{
"path": "apps/desktop/tsconfig.json",
"chars": 132,
"preview": "{\n \"extends\": [\"../../tsconfig.base.json\"],\n \"files\": [],\n \"references\": [\n {\n \"path\": \"./tsconfig.lib.json\"\n"
},
{
"path": "apps/desktop/tsconfig.lib.json",
"chars": 489,
"preview": "{\n \"extends\": \"./tsconfig.json\",\n \"compilerOptions\": {\n \"outDir\": \"dist\",\n \"jsx\": \"react-jsx\",\n \"types\": [\"vi"
},
{
"path": "docs/CODE-OF-CONDUCT.md",
"chars": 5503,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participa"
},
{
"path": "docs/CONTRIBUTING.md",
"chars": 8490,
"preview": "# Contributing Guidelines\n\nPull requests, bug reports, and all other forms of contribution are welcomed and highly encou"
},
{
"path": "docs/PULL_REQUEST_TEMPLATE.md",
"chars": 1495,
"preview": "By submitting a PR to this repository, you agree to the terms within the [Contributor Covenant Code of Conduct](https://"
},
{
"path": "docs/cli.md",
"chars": 8243,
"preview": "# DevTools CLI Guide\n\n## Overview\n\nThe DevTools CLI (`devtoolscli`) is the command-line companion to the desktop applica"
},
{
"path": "eslint.config.ts",
"chars": 221,
"preview": "import { ConfigArray } from 'typescript-eslint';\n\nimport base from '@the-dev-tools/eslint-config';\n\nconst config: Config"
},
{
"path": "flake.nix",
"chars": 3144,
"preview": "{\n inputs = {\n cache-nix-action.url = \"github:nix-community/cache-nix-action\";\n flake-parts.url = \"github:hercule"
},
{
"path": "go.work",
"chars": 193,
"preview": "go 1.25\n\nuse (\n\t./apps/cli\n\t./packages/auth-lib\n\t./packages/db\n\t./packages/server\n\t./packages/spec\n\t./tools/benchmark\n\t."
},
{
"path": "go.work.sum",
"chars": 145233,
"preview": "cel.dev/expr v0.15.0/go.mod h1:TRSuuV7DlVCE/uwv5QbAiW/v8l5O8C4eEPHeu7gf7Sg=\ncel.dev/expr v0.16.2/go.mod h1:gXngZQMkWJoSb"
},
{
"path": "install.ps1",
"chars": 26292,
"preview": "# Issue Tracker: https://github.com/ScoopInstaller/Install/issues\n# Unlicense License:\n#\n# This is free and unencumbered"
},
{
"path": "nx.json",
"chars": 1686,
"preview": "{\n \"$schema\": \"./node_modules/nx/schemas/nx-schema.json\",\n\n \"parallel\": 8,\n\n \"sync\": {\n \"applyChanges\": true\n },\n"
},
{
"path": "package.json",
"chars": 864,
"preview": "{\n \"name\": \"the-dev-tools\",\n \"private\": true,\n \"type\": \"module\",\n \"dependencies\": {\n \"@the-dev-tools/spec\": \"work"
},
{
"path": "packages/auth/eslint.config.ts",
"chars": 56,
"preview": "export { default } from '@the-dev-tools/eslint-config';\n"
},
{
"path": "packages/auth/package.json",
"chars": 983,
"preview": "{\n \"name\": \"@the-dev-tools/auth\",\n \"private\": true,\n \"type\": \"module\",\n \"scripts\": {\n \"better-auth\": \"better-auth"
},
{
"path": "packages/auth/project.json",
"chars": 327,
"preview": "{\n \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n\n \"name\": \"auth\",\n \"projectType\": \"library\",\n\n \"t"
},
{
"path": "packages/auth/src/adapter.test.ts",
"chars": 3845,
"preview": "import { Command, FileSystem, Path, Url } from '@effect/platform';\nimport { NodeContext } from '@effect/platform-node';\n"
},
{
"path": "packages/auth/src/adapter.ts",
"chars": 5597,
"preview": "import { create, fromJson, type JsonValue, toJson } from '@bufbuild/protobuf';\nimport { type Value, ValueSchema } from '"
},
{
"path": "packages/auth/src/auth-effect.ts",
"chars": 1517,
"preview": "import { Path } from '@effect/platform';\nimport { betterAuth, type BetterAuthPlugin } from 'better-auth';\nimport { jwt }"
},
{
"path": "packages/auth/src/auth.ts",
"chars": 229,
"preview": "import { NodeContext } from '@effect/platform-node';\nimport { Effect, pipe } from 'effect';\nimport { authEffect } from '"
},
{
"path": "packages/auth/src/client.ts",
"chars": 429,
"preview": "import { jwtClient } from 'better-auth/client/plugins';\nimport { createAuthClient } from 'better-auth/react';\nimport { C"
},
{
"path": "packages/auth/src/config.ts",
"chars": 60,
"preview": "export const defaultUrl = new URL('http://localhost:5000');\n"
},
{
"path": "packages/auth/src/index.ts",
"chars": 884,
"preview": "import { HttpApp, HttpMiddleware, HttpRouter, HttpServer } from '@effect/platform';\nimport { NodeHttpServer, NodeRuntime"
},
{
"path": "packages/auth/tsconfig.json",
"chars": 132,
"preview": "{\n \"extends\": [\"../../tsconfig.base.json\"],\n \"files\": [],\n \"references\": [\n {\n \"path\": \"./tsconfig.lib.json\"\n"
},
{
"path": "packages/auth/tsconfig.lib.json",
"chars": 229,
"preview": "{\n \"extends\": \"./tsconfig.json\",\n \"include\": [\".\"],\n \"exclude\": [\"node_modules\"],\n \"references\": [\n {\n \"path"
},
{
"path": "packages/auth/vitest.config.ts",
"chars": 141,
"preview": "import type { UserConfig } from 'vitest/config';\n\nexport default {\n test: {\n include: ['src/**/*.test.ts'],\n },\n} s"
},
{
"path": "packages/auth-lib/go.mod",
"chars": 114,
"preview": "module github.com/the-dev-tools/dev-tools/packages/auth-lib\n\ngo 1.25\n\nrequire github.com/golang-jwt/jwt/v5 v5.3.0\n"
},
{
"path": "packages/auth-lib/go.sum",
"chars": 175,
"preview": "github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo=\ngithub.com/golang-jwt/jwt/v5 v5.3.0/"
},
{
"path": "packages/auth-lib/jwks/jwks.go",
"chars": 6288,
"preview": "// Package jwks provides JWKS (JSON Web Key Set) fetching and parsing utilities\n// for validating JWT tokens signed with"
},
{
"path": "packages/auth-lib/jwks/jwks_test.go",
"chars": 6024,
"preview": "package jwks\n\nimport (\n\t\"context\"\n\t\"crypto/rand\"\n\t\"crypto/rsa\"\n\t\"encoding/json\"\n\t\"math/big\"\n\t\"net/http\"\n\t\"net/http/httpt"
},
{
"path": "packages/auth-lib/project.json",
"chars": 636,
"preview": "{\n \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n\n \"name\": \"auth-lib\",\n \"projectType\": \"library\",\n\n"
},
{
"path": "packages/client/.storybook/main.ts",
"chars": 132,
"preview": "import { StorybookConfig as _ } from '@storybook/react-vite';\nexport { default } from '@the-dev-tools/ui/storybook-confi"
},
{
"path": "packages/client/.storybook/manager.ts",
"chars": 56,
"preview": "import '@the-dev-tools/ui/storybook-config/manager.ts';\n"
},
{
"path": "packages/client/.storybook/preview.tsx",
"chars": 74,
"preview": "export { default } from '@the-dev-tools/ui/storybook-config/preview.tsx';\n"
},
{
"path": "packages/client/eslint.config.ts",
"chars": 56,
"preview": "export { default } from '@the-dev-tools/eslint-config';\n"
},
{
"path": "packages/client/index.html",
"chars": 229,
"preview": "<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <title>DevTools</title>\n </head>\n <body>\n "
},
{
"path": "packages/client/package.json",
"chars": 3044,
"preview": "{\n \"name\": \"@the-dev-tools/client\",\n \"private\": true,\n \"type\": \"module\",\n \"scripts\": {\n \"dev\": \"vite\"\n },\n \"exp"
},
{
"path": "packages/client/project.json",
"chars": 294,
"preview": "{\n \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n\n \"name\": \"client\",\n \"projectType\": \"library\",\n\n "
},
{
"path": "packages/client/src/app/context.tsx",
"chars": 500,
"preview": "import { Transport } from '@connectrpc/connect';\nimport { Registry } from '@effect-atom/atom-react';\nimport { KeyValueSt"
},
{
"path": "packages/client/src/app/dev-tools.tsx",
"chars": 2215,
"preview": "import type { ReactQueryDevtools as ReactQueryDevtoolsType } from '@tanstack/react-query-devtools';\nimport type { TanSta"
},
{
"path": "packages/client/src/app/entrypoint.tsx",
"chars": 317,
"preview": "import { Layer, pipe } from 'effect';\nimport { createRoot } from 'react-dom/client';\nimport { addGlobalLayer, App, confi"
},
{
"path": "packages/client/src/app/env.d.ts",
"chars": 263,
"preview": "import type { Dialog } from 'electron';\n\ndeclare const PUBLIC_ENV: object;\n\ndeclare global {\n interface Window {\n el"
},
{
"path": "packages/client/src/app/error.tsx",
"chars": 938,
"preview": "import { useQueryErrorResetBoundary } from '@tanstack/react-query';\nimport { ErrorRouteComponent, useRouter } from '@tan"
},
{
"path": "packages/client/src/app/import-meta.d.ts",
"chars": 64,
"preview": "interface ImportMeta {\n dirname: string;\n filename: string;\n}\n"
},
{
"path": "packages/client/src/app/index.tsx",
"chars": 2475,
"preview": "import { scan } from 'react-scan';\n\nimport { TransportProvider } from '@connectrpc/connect-query';\nimport { Atom, Result"
},
{
"path": "packages/client/src/app/router/index.tsx",
"chars": 382,
"preview": "import { createHashHistory, createRouter } from '@tanstack/react-router';\nimport { RouterContext } from '../context';\nim"
},
{
"path": "packages/client/src/app/router/route-tree.gen.ts",
"chars": 42209,
"preview": "/* eslint-disable */\n\n// @ts-nocheck\n\n// noinspection JSUnusedGlobalSymbols\n\n// This file was automatically generated by"
},
{
"path": "packages/client/src/app/router/routes/(dashboard)/__virtual.ts",
"chars": 121,
"preview": "import { resolveRoutesFrom } from '../../../../pages/dashboard';\n\nexport default resolveRoutesFrom(import.meta.dirname);"
},
{
"path": "packages/client/src/app/router/routes/__root.tsx",
"chars": 904,
"preview": "import { createRootRouteWithContext, Outlet } from '@tanstack/react-router';\nimport { tw } from '@the-dev-tools/ui/tailw"
},
{
"path": "packages/client/src/app/router/vite.tsx",
"chars": 265,
"preview": "import { tanstackRouter } from '@tanstack/router-plugin/vite';\n\nexport const routerVitePlugin = tanstackRouter({\n autoC"
},
{
"path": "packages/client/src/app/styles.css",
"chars": 1631,
"preview": "@layer react-flow {\n @import '@xyflow/react/dist/style.css';\n}\n\n@import '@the-dev-tools/ui/styles';\n\n@source '..';\n\n:ro"
},
{
"path": "packages/client/src/app/umami.tsx",
"chars": 1836,
"preview": "import { Config, Effect, pipe } from 'effect';\nimport { Ulid } from 'id128';\n\ninterface Umami {\n identify(uniqueId: str"
},
{
"path": "packages/client/src/features/agent/agent-logger.ts",
"chars": 5456,
"preview": "/** JSON stringify with BigInt support */\nconst safeStringify = (value: unknown): string =>\n JSON.stringify(value, (_ke"
},
{
"path": "packages/client/src/features/agent/context-builder.ts",
"chars": 26148,
"preview": "/* eslint-disable @typescript-eslint/no-unnecessary-condition */\nimport { eq, useLiveQuery } from '@tanstack/react-db';\n"
},
{
"path": "packages/client/src/features/agent/index.ts",
"chars": 518,
"preview": "export { buildSystemPrompt, useFlowContext } from './context-builder';\nexport { executeToolCall } from './tool-executor'"
},
{
"path": "packages/client/src/features/agent/layout.ts",
"chars": 4480,
"preview": "import type { EdgeInfo, NodeInfo } from './types';\n\nexport type LayoutOrientation = 'horizontal' | 'vertical';\n\nexport i"
},
{
"path": "packages/client/src/features/agent/tool-executor.ts",
"chars": 65379,
"preview": "/* eslint-disable @typescript-eslint/await-thenable, @typescript-eslint/no-base-to-string, @typescript-eslint/no-confusi"
},
{
"path": "packages/client/src/features/agent/tool-schemas.ts",
"chars": 7067,
"preview": "/**\n * Runtime tool schema utilities - converts Effect Schemas to JSON Schema tool definitions.\n * These utilities are u"
},
{
"path": "packages/client/src/features/agent/types.ts",
"chars": 1971,
"preview": "import type { ChatCompletionMessageParam, ChatCompletionTool } from 'openai/resources/chat/completions';\n\nexport type Me"
},
{
"path": "packages/client/src/features/agent/use-agent-chat.ts",
"chars": 41749,
"preview": "/* eslint-disable @typescript-eslint/no-unnecessary-condition */\nimport { eq } from '@tanstack/react-db';\nimport { Ulid "
},
{
"path": "packages/client/src/features/agent/use-agent-provider-key.ts",
"chars": 2171,
"preview": "import { useCallback, useSyncExternalStore } from 'react';\n\nexport type AgentProvider = 'anthropic' | 'openai' | 'openro"
},
{
"path": "packages/client/src/features/delta/index.tsx",
"chars": 13254,
"preview": "import { Message, MessageShape } from '@bufbuild/protobuf';\nimport { debounceStrategy, eq, Ref, useLiveQuery, usePacedMu"
},
{
"path": "packages/client/src/features/expression/code-mirror/drop-extension.ts",
"chars": 2751,
"preview": "import { fromJson } from '@bufbuild/protobuf';\nimport { StateEffect, StateField } from '@codemirror/state';\nimport { Edi"
},
{
"path": "packages/client/src/features/expression/code-mirror/extensions.tsx",
"chars": 19213,
"preview": "import {\n autocompletion,\n closeBrackets,\n closeBracketsKeymap,\n Completion,\n completionKeymap,\n CompletionSource,"
},
{
"path": "packages/client/src/features/expression/code-mirror/syntax.grammar",
"chars": 1618,
"preview": "@top FullExpression { fullExpr* }\n\n@top StringExpression { stringContentNested* }\n\n@local tokens {\n InterpolationStart["
},
{
"path": "packages/client/src/features/expression/code-mirror/syntax.grammar.d.ts",
"chars": 78,
"preview": "import { LRParser } from '@lezer/lr';\n\nexport declare const parser: LRParser;\n"
},
{
"path": "packages/client/src/features/expression/guess-language.tsx",
"chars": 646,
"preview": "import { Match, Option, pipe, Schema } from 'effect';\nimport { CodeMirrorMarkupLanguage } from './code-mirror/extensions"
},
{
"path": "packages/client/src/features/expression/index.tsx",
"chars": 571,
"preview": "export { type DropFormat, referenceDropExtension } from './code-mirror/drop-extension';\nexport {\n baseCodeMirrorExtensi"
},
{
"path": "packages/client/src/features/expression/prettier.tsx",
"chars": 1400,
"preview": "import { queryOptions } from '@tanstack/react-query';\nimport { Array, Match, pipe } from 'effect';\nimport { format } fro"
},
{
"path": "packages/client/src/features/expression/reference-path.ts",
"chars": 2190,
"preview": "import { ReferenceKey, ReferenceKeyKind } from '@the-dev-tools/spec/buf/api/reference/v1/reference_pb';\n\n/**\n * Strip th"
},
{
"path": "packages/client/src/features/expression/reference.tsx",
"chars": 7936,
"preview": "import { fromJson, Message, toJson } from '@bufbuild/protobuf';\nimport { startCompletion } from '@codemirror/autocomplet"
},
{
"path": "packages/client/src/features/file-system/index.tsx",
"chars": 53061,
"preview": "import { create } from '@bufbuild/protobuf';\nimport { and, eq, isUndefined, or, useLiveQuery } from '@tanstack/react-db'"
},
{
"path": "packages/client/src/features/form-table/index.tsx",
"chars": 628,
"preview": "import { Tooltip, TooltipTrigger } from 'react-aria-components';\nimport { LuTrash2 } from 'react-icons/lu';\nimport { But"
},
{
"path": "packages/client/src/pages/credential/@x/workspace.tsx",
"chars": 147,
"preview": "import { resolveRoutesTo } from '../../../shared/lib/router';\n\nexport const resolveRoutesFrom = resolveRoutesTo(import.m"
},
{
"path": "packages/client/src/pages/credential/routes/credential/$credentialIdCan/index.tsx",
"chars": 6110,
"preview": "import { create } from '@bufbuild/protobuf';\nimport { useLiveQuery } from '@tanstack/react-db';\nimport { createFileRoute"
},
{
"path": "packages/client/src/pages/credential/tab.tsx",
"chars": 2148,
"preview": "import { useLiveQuery } from '@tanstack/react-db';\nimport { Match, pipe } from 'effect';\nimport { useEffect } from 'reac"
},
{
"path": "packages/client/src/pages/dashboard/index.tsx",
"chars": 141,
"preview": "import { resolveRoutesTo } from '../../shared/lib/router';\n\nexport const resolveRoutesFrom = resolveRoutesTo(import.meta"
},
{
"path": "packages/client/src/pages/dashboard/routes/(user)/__virtual.ts",
"chars": 120,
"preview": "import { resolveRoutesFrom } from '../../../user/@x/dashboard';\n\nexport default resolveRoutesFrom(import.meta.dirname);\n"
},
{
"path": "packages/client/src/pages/dashboard/routes/(workspace)/__virtual.ts",
"chars": 125,
"preview": "import { resolveRoutesFrom } from '../../../workspace/@x/dashboard';\n\nexport default resolveRoutesFrom(import.meta.dirna"
},
{
"path": "packages/client/src/pages/dashboard/routes/index.tsx",
"chars": 9440,
"preview": "import { create } from '@bufbuild/protobuf';\nimport { timestampDate } from '@bufbuild/protobuf/wkt';\nimport { count, eq,"
},
{
"path": "packages/client/src/pages/flow/@x/workspace.tsx",
"chars": 147,
"preview": "import { resolveRoutesTo } from '../../../shared/lib/router';\n\nexport const resolveRoutesFrom = resolveRoutesTo(import.m"
},
{
"path": "packages/client/src/pages/flow/add-node.tsx",
"chars": 18571,
"preview": "import { MessageInitShape } from '@bufbuild/protobuf';\nimport * as XF from '@xyflow/react';\nimport { Ulid } from 'id128'"
},
{
"path": "packages/client/src/pages/flow/agent-panel.tsx",
"chars": 34327,
"preview": "import { eq, useLiveQuery } from '@tanstack/react-db';\nimport { Ulid } from 'id128';\nimport { KeyboardEvent, type Synthe"
},
{
"path": "packages/client/src/pages/flow/context.tsx",
"chars": 416,
"preview": "import { createContext, Dispatch, ReactNode, SetStateAction } from 'react';\nimport { UndoStack } from './undo';\n\nexport "
},
{
"path": "packages/client/src/pages/flow/edge.tsx",
"chars": 7464,
"preview": "import { create } from '@bufbuild/protobuf';\nimport {\n createCollection,\n createLiveQueryCollection,\n eq,\n localOnly"
},
{
"path": "packages/client/src/pages/flow/edit.tsx",
"chars": 34055,
"preview": "import { create } from '@bufbuild/protobuf';\nimport { eq, Query, useLiveQuery } from '@tanstack/react-db';\nimport { useM"
},
{
"path": "packages/client/src/pages/flow/handle.tsx",
"chars": 6846,
"preview": "import { useLiveQuery } from '@tanstack/react-db';\nimport * as XF from '@xyflow/react';\nimport { Match, pipe } from 'eff"
},
{
"path": "packages/client/src/pages/flow/history.tsx",
"chars": 6523,
"preview": "import { create } from '@bufbuild/protobuf';\nimport { eq, useLiveQuery } from '@tanstack/react-db';\nimport { ReactFlowPr"
},
{
"path": "packages/client/src/pages/flow/node.tsx",
"chars": 28528,
"preview": "import { create } from '@bufbuild/protobuf';\nimport {\n createCollection,\n createLiveQueryCollection,\n debounceStrateg"
},
{
"path": "packages/client/src/pages/flow/nodes/ai.tsx",
"chars": 19608,
"preview": "import { create } from '@bufbuild/protobuf';\nimport { and, createLiveQueryCollection, eq, isUndefined, useLiveQuery } fr"
},
{
"path": "packages/client/src/pages/flow/nodes/condition.tsx",
"chars": 2362,
"preview": "import { create } from '@bufbuild/protobuf';\nimport { eq, useLiveQuery } from '@tanstack/react-db';\nimport * as XF from "
},
{
"path": "packages/client/src/pages/flow/nodes/for-each.tsx",
"chars": 3550,
"preview": "import { create } from '@bufbuild/protobuf';\nimport { eq, useLiveQuery } from '@tanstack/react-db';\nimport * as XF from "
},
{
"path": "packages/client/src/pages/flow/nodes/for.tsx",
"chars": 3609,
"preview": "import { create } from '@bufbuild/protobuf';\nimport { eq, useLiveQuery } from '@tanstack/react-db';\nimport * as XF from "
},
{
"path": "packages/client/src/pages/flow/nodes/graphql.tsx",
"chars": 5806,
"preview": "import { create } from '@bufbuild/protobuf';\nimport { eq, useLiveQuery } from '@tanstack/react-db';\nimport { useRouter }"
},
{
"path": "packages/client/src/pages/flow/nodes/http.tsx",
"chars": 5860,
"preview": "import { create } from '@bufbuild/protobuf';\nimport { eq, useLiveQuery } from '@tanstack/react-db';\nimport { useRouter }"
},
{
"path": "packages/client/src/pages/flow/nodes/javascript.tsx",
"chars": 2422,
"preview": "import { create } from '@bufbuild/protobuf';\nimport { eq, useLiveQuery } from '@tanstack/react-db';\nimport CodeMirror fr"
},
{
"path": "packages/client/src/pages/flow/nodes/manual-start.tsx",
"chars": 878,
"preview": "import * as XF from '@xyflow/react';\nimport { Ulid } from 'id128';\nimport { FiZap } from 'react-icons/fi';\nimport { Play"
},
{
"path": "packages/client/src/pages/flow/nodes/run-sub-flow.tsx",
"chars": 8014,
"preview": "import { create } from '@bufbuild/protobuf';\nimport { eq, useLiveQuery } from '@tanstack/react-db';\nimport { useRouter }"
},
{
"path": "packages/client/src/pages/flow/nodes/sub-flow-return.tsx",
"chars": 4530,
"preview": "import { create } from '@bufbuild/protobuf';\nimport { eq, useLiveQuery } from '@tanstack/react-db';\nimport * as XF from "
},
{
"path": "packages/client/src/pages/flow/nodes/sub-flow-trigger.tsx",
"chars": 7246,
"preview": "import { create } from '@bufbuild/protobuf';\nimport { json } from '@codemirror/lang-json';\nimport { eq, useLiveQuery } f"
},
{
"path": "packages/client/src/pages/flow/nodes/wait.tsx",
"chars": 2328,
"preview": "import { create } from '@bufbuild/protobuf';\nimport { eq, useLiveQuery } from '@tanstack/react-db';\nimport * as XF from "
},
{
"path": "packages/client/src/pages/flow/nodes/ws-connection.tsx",
"chars": 5213,
"preview": "import { create } from '@bufbuild/protobuf';\nimport { eq, useLiveQuery } from '@tanstack/react-db';\nimport { useRouter }"
}
]
// ... and 1090 more files (download for full content)
About this extraction
This page contains the full source code of the the-dev-tools/dev-tools GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1290 files (21.2 MB), approximately 2.3M tokens, and a symbol index with 8790 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.