nomoreide 0.2.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -9
- package/bin/nomoreide.js +82 -0
- package/package.json +24 -132
- package/dist/cli/agents.d.ts +0 -2
- package/dist/cli/agents.js +0 -43
- package/dist/cli/agents.js.map +0 -1
- package/dist/cli/commands.d.ts +0 -11
- package/dist/cli/commands.js +0 -235
- package/dist/cli/commands.js.map +0 -1
- package/dist/cli/daemon.d.ts +0 -15
- package/dist/cli/daemon.js +0 -139
- package/dist/cli/daemon.js.map +0 -1
- package/dist/cli/database.d.ts +0 -2
- package/dist/cli/database.js +0 -145
- package/dist/cli/database.js.map +0 -1
- package/dist/cli/errors.d.ts +0 -2
- package/dist/cli/errors.js +0 -3
- package/dist/cli/errors.js.map +0 -1
- package/dist/cli/flags.d.ts +0 -1
- package/dist/cli/flags.js +0 -19
- package/dist/cli/flags.js.map +0 -1
- package/dist/cli/git.d.ts +0 -2
- package/dist/cli/git.js +0 -113
- package/dist/cli/git.js.map +0 -1
- package/dist/cli/profile.d.ts +0 -2
- package/dist/cli/profile.js +0 -171
- package/dist/cli/profile.js.map +0 -1
- package/dist/core/agent-context.d.ts +0 -9
- package/dist/core/agent-context.js +0 -43
- package/dist/core/agent-context.js.map +0 -1
- package/dist/core/agent-env/antigravity-reader.d.ts +0 -7
- package/dist/core/agent-env/antigravity-reader.js +0 -86
- package/dist/core/agent-env/antigravity-reader.js.map +0 -1
- package/dist/core/agent-env/availability.d.ts +0 -6
- package/dist/core/agent-env/availability.js +0 -79
- package/dist/core/agent-env/availability.js.map +0 -1
- package/dist/core/agent-env/claude-reader.d.ts +0 -7
- package/dist/core/agent-env/claude-reader.js +0 -101
- package/dist/core/agent-env/claude-reader.js.map +0 -1
- package/dist/core/agent-env/codex-reader.d.ts +0 -11
- package/dist/core/agent-env/codex-reader.js +0 -164
- package/dist/core/agent-env/codex-reader.js.map +0 -1
- package/dist/core/agent-env/index.d.ts +0 -9
- package/dist/core/agent-env/index.js +0 -29
- package/dist/core/agent-env/index.js.map +0 -1
- package/dist/core/agent-env/managed-plugins.d.ts +0 -18
- package/dist/core/agent-env/managed-plugins.js +0 -68
- package/dist/core/agent-env/managed-plugins.js.map +0 -1
- package/dist/core/agent-env/plugin-reader.d.ts +0 -9
- package/dist/core/agent-env/plugin-reader.js +0 -174
- package/dist/core/agent-env/plugin-reader.js.map +0 -1
- package/dist/core/agent-env/shared.d.ts +0 -26
- package/dist/core/agent-env/shared.js +0 -116
- package/dist/core/agent-env/shared.js.map +0 -1
- package/dist/core/agent-env/types.d.ts +0 -66
- package/dist/core/agent-env/types.js +0 -7
- package/dist/core/agent-env/types.js.map +0 -1
- package/dist/core/agent-env-actions.d.ts +0 -117
- package/dist/core/agent-env-actions.js +0 -273
- package/dist/core/agent-env-actions.js.map +0 -1
- package/dist/core/agent-env-plugin-uninstall.d.ts +0 -11
- package/dist/core/agent-env-plugin-uninstall.js +0 -189
- package/dist/core/agent-env-plugin-uninstall.js.map +0 -1
- package/dist/core/agent-env-writers.d.ts +0 -71
- package/dist/core/agent-env-writers.js +0 -632
- package/dist/core/agent-env-writers.js.map +0 -1
- package/dist/core/agent-profiles/apply.d.ts +0 -57
- package/dist/core/agent-profiles/apply.js +0 -209
- package/dist/core/agent-profiles/apply.js.map +0 -1
- package/dist/core/agent-profiles/builtin.d.ts +0 -8
- package/dist/core/agent-profiles/builtin.js +0 -33
- package/dist/core/agent-profiles/builtin.js.map +0 -1
- package/dist/core/agent-profiles/credentials.d.ts +0 -26
- package/dist/core/agent-profiles/credentials.js +0 -151
- package/dist/core/agent-profiles/credentials.js.map +0 -1
- package/dist/core/agent-profiles/debug-setup.d.ts +0 -18
- package/dist/core/agent-profiles/debug-setup.js +0 -237
- package/dist/core/agent-profiles/debug-setup.js.map +0 -1
- package/dist/core/agent-profiles/index.d.ts +0 -18
- package/dist/core/agent-profiles/index.js +0 -19
- package/dist/core/agent-profiles/index.js.map +0 -1
- package/dist/core/agent-profiles/plugin-apply.d.ts +0 -16
- package/dist/core/agent-profiles/plugin-apply.js +0 -383
- package/dist/core/agent-profiles/plugin-apply.js.map +0 -1
- package/dist/core/agent-profiles/plugin-bundle.d.ts +0 -6
- package/dist/core/agent-profiles/plugin-bundle.js +0 -32
- package/dist/core/agent-profiles/plugin-bundle.js.map +0 -1
- package/dist/core/agent-profiles/publication.d.ts +0 -105
- package/dist/core/agent-profiles/publication.js +0 -126
- package/dist/core/agent-profiles/publication.js.map +0 -1
- package/dist/core/agent-profiles/registry-auth.d.ts +0 -25
- package/dist/core/agent-profiles/registry-auth.js +0 -78
- package/dist/core/agent-profiles/registry-auth.js.map +0 -1
- package/dist/core/agent-profiles/registry-client.d.ts +0 -98
- package/dist/core/agent-profiles/registry-client.js +0 -109
- package/dist/core/agent-profiles/registry-client.js.map +0 -1
- package/dist/core/agent-profiles/registry-config.d.ts +0 -62
- package/dist/core/agent-profiles/registry-config.js +0 -221
- package/dist/core/agent-profiles/registry-config.js.map +0 -1
- package/dist/core/agent-profiles/registry-transfer.d.ts +0 -42
- package/dist/core/agent-profiles/registry-transfer.js +0 -133
- package/dist/core/agent-profiles/registry-transfer.js.map +0 -1
- package/dist/core/agent-profiles/store.d.ts +0 -62
- package/dist/core/agent-profiles/store.js +0 -479
- package/dist/core/agent-profiles/store.js.map +0 -1
- package/dist/core/agent-profiles/transfer.d.ts +0 -27
- package/dist/core/agent-profiles/transfer.js +0 -359
- package/dist/core/agent-profiles/transfer.js.map +0 -1
- package/dist/core/agent-profiles/types.d.ts +0 -364
- package/dist/core/agent-profiles/types.js +0 -79
- package/dist/core/agent-profiles/types.js.map +0 -1
- package/dist/core/agent-runtime.d.ts +0 -114
- package/dist/core/agent-runtime.js +0 -494
- package/dist/core/agent-runtime.js.map +0 -1
- package/dist/core/agent-sessions.d.ts +0 -46
- package/dist/core/agent-sessions.js +0 -109
- package/dist/core/agent-sessions.js.map +0 -1
- package/dist/core/agent-settings.d.ts +0 -31
- package/dist/core/agent-settings.js +0 -129
- package/dist/core/agent-settings.js.map +0 -1
- package/dist/core/agent-terminal.d.ts +0 -22
- package/dist/core/agent-terminal.js +0 -62
- package/dist/core/agent-terminal.js.map +0 -1
- package/dist/core/agent-transcripts.d.ts +0 -29
- package/dist/core/agent-transcripts.js +0 -281
- package/dist/core/agent-transcripts.js.map +0 -1
- package/dist/core/app-settings.d.ts +0 -74
- package/dist/core/app-settings.js +0 -118
- package/dist/core/app-settings.js.map +0 -1
- package/dist/core/app-version.d.ts +0 -2
- package/dist/core/app-version.js +0 -16
- package/dist/core/app-version.js.map +0 -1
- package/dist/core/approval-broker.d.ts +0 -29
- package/dist/core/approval-broker.js +0 -48
- package/dist/core/approval-broker.js.map +0 -1
- package/dist/core/claude-settings.d.ts +0 -18
- package/dist/core/claude-settings.js +0 -48
- package/dist/core/claude-settings.js.map +0 -1
- package/dist/core/cloudflare-actions.d.ts +0 -90
- package/dist/core/cloudflare-actions.js +0 -178
- package/dist/core/cloudflare-actions.js.map +0 -1
- package/dist/core/cloudflare-auth.d.ts +0 -61
- package/dist/core/cloudflare-auth.js +0 -149
- package/dist/core/cloudflare-auth.js.map +0 -1
- package/dist/core/cloudflare-context.d.ts +0 -2
- package/dist/core/cloudflare-context.js +0 -106
- package/dist/core/cloudflare-context.js.map +0 -1
- package/dist/core/cloudflare-manager.d.ts +0 -258
- package/dist/core/cloudflare-manager.js +0 -414
- package/dist/core/cloudflare-manager.js.map +0 -1
- package/dist/core/cloudflare-provider.d.ts +0 -64
- package/dist/core/cloudflare-provider.js +0 -348
- package/dist/core/cloudflare-provider.js.map +0 -1
- package/dist/core/config-files.d.ts +0 -27
- package/dist/core/config-files.js +0 -154
- package/dist/core/config-files.js.map +0 -1
- package/dist/core/config-store.d.ts +0 -181
- package/dist/core/config-store.js +0 -1026
- package/dist/core/config-store.js.map +0 -1
- package/dist/core/context-library.d.ts +0 -53
- package/dist/core/context-library.js +0 -605
- package/dist/core/context-library.js.map +0 -1
- package/dist/core/context-types.d.ts +0 -83
- package/dist/core/context-types.js +0 -9
- package/dist/core/context-types.js.map +0 -1
- package/dist/core/daemon-client.d.ts +0 -84
- package/dist/core/daemon-client.js +0 -156
- package/dist/core/daemon-client.js.map +0 -1
- package/dist/core/daemon-lifecycle.d.ts +0 -59
- package/dist/core/daemon-lifecycle.js +0 -147
- package/dist/core/daemon-lifecycle.js.map +0 -1
- package/dist/core/db/catalog.d.ts +0 -57
- package/dist/core/db/catalog.js +0 -38
- package/dist/core/db/catalog.js.map +0 -1
- package/dist/core/db/data-masking.d.ts +0 -3
- package/dist/core/db/data-masking.js +0 -14
- package/dist/core/db/data-masking.js.map +0 -1
- package/dist/core/db/driver.d.ts +0 -151
- package/dist/core/db/driver.js +0 -209
- package/dist/core/db/driver.js.map +0 -1
- package/dist/core/db/export.d.ts +0 -17
- package/dist/core/db/export.js +0 -67
- package/dist/core/db/export.js.map +0 -1
- package/dist/core/db/mysql-driver.d.ts +0 -33
- package/dist/core/db/mysql-driver.js +0 -364
- package/dist/core/db/mysql-driver.js.map +0 -1
- package/dist/core/db/postgres-driver.d.ts +0 -34
- package/dist/core/db/postgres-driver.js +0 -430
- package/dist/core/db/postgres-driver.js.map +0 -1
- package/dist/core/db/sqlite-driver.d.ts +0 -30
- package/dist/core/db/sqlite-driver.js +0 -301
- package/dist/core/db/sqlite-driver.js.map +0 -1
- package/dist/core/db-peek.d.ts +0 -99
- package/dist/core/db-peek.js +0 -322
- package/dist/core/db-peek.js.map +0 -1
- package/dist/core/db-write.d.ts +0 -45
- package/dist/core/db-write.js +0 -190
- package/dist/core/db-write.js.map +0 -1
- package/dist/core/docker-inspect.d.ts +0 -34
- package/dist/core/docker-inspect.js +0 -108
- package/dist/core/docker-inspect.js.map +0 -1
- package/dist/core/docker-resources.d.ts +0 -28
- package/dist/core/docker-resources.js +0 -59
- package/dist/core/docker-resources.js.map +0 -1
- package/dist/core/docker-service-runner.d.ts +0 -21
- package/dist/core/docker-service-runner.js +0 -80
- package/dist/core/docker-service-runner.js.map +0 -1
- package/dist/core/docker-stats.d.ts +0 -24
- package/dist/core/docker-stats.js +0 -76
- package/dist/core/docker-stats.js.map +0 -1
- package/dist/core/docker.d.ts +0 -75
- package/dist/core/docker.js +0 -219
- package/dist/core/docker.js.map +0 -1
- package/dist/core/env-file.d.ts +0 -24
- package/dist/core/env-file.js +0 -123
- package/dist/core/env-file.js.map +0 -1
- package/dist/core/env-runtime.d.ts +0 -32
- package/dist/core/env-runtime.js +0 -42
- package/dist/core/env-runtime.js.map +0 -1
- package/dist/core/error-inbox.d.ts +0 -91
- package/dist/core/error-inbox.js +0 -292
- package/dist/core/error-inbox.js.map +0 -1
- package/dist/core/extensions.d.ts +0 -78
- package/dist/core/extensions.js +0 -41
- package/dist/core/extensions.js.map +0 -1
- package/dist/core/external-terminal.d.ts +0 -60
- package/dist/core/external-terminal.js +0 -429
- package/dist/core/external-terminal.js.map +0 -1
- package/dist/core/fix-loop.d.ts +0 -55
- package/dist/core/fix-loop.js +0 -73
- package/dist/core/fix-loop.js.map +0 -1
- package/dist/core/git-actions.d.ts +0 -69
- package/dist/core/git-actions.js +0 -161
- package/dist/core/git-actions.js.map +0 -1
- package/dist/core/git-graph-layout.d.ts +0 -34
- package/dist/core/git-graph-layout.js +0 -94
- package/dist/core/git-graph-layout.js.map +0 -1
- package/dist/core/git-identity.d.ts +0 -78
- package/dist/core/git-identity.js +0 -178
- package/dist/core/git-identity.js.map +0 -1
- package/dist/core/git-manager.d.ts +0 -129
- package/dist/core/git-manager.js +0 -509
- package/dist/core/git-manager.js.map +0 -1
- package/dist/core/git-worktrees.d.ts +0 -35
- package/dist/core/git-worktrees.js +0 -142
- package/dist/core/git-worktrees.js.map +0 -1
- package/dist/core/github-auth.d.ts +0 -28
- package/dist/core/github-auth.js +0 -134
- package/dist/core/github-auth.js.map +0 -1
- package/dist/core/github-context.d.ts +0 -12
- package/dist/core/github-context.js +0 -36
- package/dist/core/github-context.js.map +0 -1
- package/dist/core/github-manager.d.ts +0 -230
- package/dist/core/github-manager.js +0 -324
- package/dist/core/github-manager.js.map +0 -1
- package/dist/core/host-metrics.d.ts +0 -41
- package/dist/core/host-metrics.js +0 -93
- package/dist/core/host-metrics.js.map +0 -1
- package/dist/core/http-inspector.d.ts +0 -20
- package/dist/core/http-inspector.js +0 -106
- package/dist/core/http-inspector.js.map +0 -1
- package/dist/core/jetbrains-import.d.ts +0 -85
- package/dist/core/jetbrains-import.js +0 -599
- package/dist/core/jetbrains-import.js.map +0 -1
- package/dist/core/log-sources.d.ts +0 -21
- package/dist/core/log-sources.js +0 -219
- package/dist/core/log-sources.js.map +0 -1
- package/dist/core/log-store.d.ts +0 -33
- package/dist/core/log-store.js +0 -94
- package/dist/core/log-store.js.map +0 -1
- package/dist/core/log-volume.d.ts +0 -41
- package/dist/core/log-volume.js +0 -81
- package/dist/core/log-volume.js.map +0 -1
- package/dist/core/mcp-auth.d.ts +0 -27
- package/dist/core/mcp-auth.js +0 -90
- package/dist/core/mcp-auth.js.map +0 -1
- package/dist/core/metrics-store.d.ts +0 -74
- package/dist/core/metrics-store.js +0 -187
- package/dist/core/metrics-store.js.map +0 -1
- package/dist/core/one-time-skills.d.ts +0 -27
- package/dist/core/one-time-skills.js +0 -185
- package/dist/core/one-time-skills.js.map +0 -1
- package/dist/core/port-utils.d.ts +0 -23
- package/dist/core/port-utils.js +0 -83
- package/dist/core/port-utils.js.map +0 -1
- package/dist/core/process-manager.d.ts +0 -99
- package/dist/core/process-manager.js +0 -738
- package/dist/core/process-manager.js.map +0 -1
- package/dist/core/process-tree.d.ts +0 -17
- package/dist/core/process-tree.js +0 -64
- package/dist/core/process-tree.js.map +0 -1
- package/dist/core/project-overview.d.ts +0 -52
- package/dist/core/project-overview.js +0 -122
- package/dist/core/project-overview.js.map +0 -1
- package/dist/core/providers/api-base.d.ts +0 -24
- package/dist/core/providers/api-base.js +0 -44
- package/dist/core/providers/api-base.js.map +0 -1
- package/dist/core/providers/credentials.d.ts +0 -93
- package/dist/core/providers/credentials.js +0 -88
- package/dist/core/providers/credentials.js.map +0 -1
- package/dist/core/providers/deploy-provider.d.ts +0 -327
- package/dist/core/providers/deploy-provider.js +0 -25
- package/dist/core/providers/deploy-provider.js.map +0 -1
- package/dist/core/providers/egress.d.ts +0 -58
- package/dist/core/providers/egress.js +0 -124
- package/dist/core/providers/egress.js.map +0 -1
- package/dist/core/providers/host-bridge.d.ts +0 -20
- package/dist/core/providers/host-bridge.js +0 -57
- package/dist/core/providers/host-bridge.js.map +0 -1
- package/dist/core/providers/host-provider.d.ts +0 -160
- package/dist/core/providers/host-provider.js +0 -2
- package/dist/core/providers/host-provider.js.map +0 -1
- package/dist/core/providers/oauth.d.ts +0 -97
- package/dist/core/providers/oauth.js +0 -238
- package/dist/core/providers/oauth.js.map +0 -1
- package/dist/core/providers/project-resolution.d.ts +0 -81
- package/dist/core/providers/project-resolution.js +0 -101
- package/dist/core/providers/project-resolution.js.map +0 -1
- package/dist/core/providers/registry.d.ts +0 -73
- package/dist/core/providers/registry.js +0 -53
- package/dist/core/providers/registry.js.map +0 -1
- package/dist/core/providers/strings.d.ts +0 -95
- package/dist/core/providers/strings.js +0 -59
- package/dist/core/providers/strings.js.map +0 -1
- package/dist/core/public-config.d.ts +0 -18
- package/dist/core/public-config.js +0 -76
- package/dist/core/public-config.js.map +0 -1
- package/dist/core/read-only-files.d.ts +0 -28
- package/dist/core/read-only-files.js +0 -93
- package/dist/core/read-only-files.js.map +0 -1
- package/dist/core/repo-create.d.ts +0 -11
- package/dist/core/repo-create.js +0 -54
- package/dist/core/repo-create.js.map +0 -1
- package/dist/core/repo-match.d.ts +0 -12
- package/dist/core/repo-match.js +0 -40
- package/dist/core/repo-match.js.map +0 -1
- package/dist/core/repo-onboard.d.ts +0 -297
- package/dist/core/repo-onboard.js +0 -667
- package/dist/core/repo-onboard.js.map +0 -1
- package/dist/core/repro-bundle.d.ts +0 -30
- package/dist/core/repro-bundle.js +0 -116
- package/dist/core/repro-bundle.js.map +0 -1
- package/dist/core/service-graph.d.ts +0 -50
- package/dist/core/service-graph.js +0 -143
- package/dist/core/service-graph.js.map +0 -1
- package/dist/core/service-health.d.ts +0 -10
- package/dist/core/service-health.js +0 -46
- package/dist/core/service-health.js.map +0 -1
- package/dist/core/service-log-source.d.ts +0 -9
- package/dist/core/service-log-source.js +0 -49
- package/dist/core/service-log-source.js.map +0 -1
- package/dist/core/service-registry.d.ts +0 -52
- package/dist/core/service-registry.js +0 -101
- package/dist/core/service-registry.js.map +0 -1
- package/dist/core/snapshot-manager.d.ts +0 -62
- package/dist/core/snapshot-manager.js +0 -219
- package/dist/core/snapshot-manager.js.map +0 -1
- package/dist/core/ssh-servers.d.ts +0 -89
- package/dist/core/ssh-servers.js +0 -251
- package/dist/core/ssh-servers.js.map +0 -1
- package/dist/core/ssh-service-runner.d.ts +0 -7
- package/dist/core/ssh-service-runner.js +0 -36
- package/dist/core/ssh-service-runner.js.map +0 -1
- package/dist/core/ssh-setup.d.ts +0 -11
- package/dist/core/ssh-setup.js +0 -49
- package/dist/core/ssh-setup.js.map +0 -1
- package/dist/core/system-processes.d.ts +0 -29
- package/dist/core/system-processes.js +0 -119
- package/dist/core/system-processes.js.map +0 -1
- package/dist/core/terminal-manager.d.ts +0 -123
- package/dist/core/terminal-manager.js +0 -470
- package/dist/core/terminal-manager.js.map +0 -1
- package/dist/core/terminal-session.d.ts +0 -122
- package/dist/core/terminal-session.js +0 -242
- package/dist/core/terminal-session.js.map +0 -1
- package/dist/core/terminal-spawn.d.ts +0 -26
- package/dist/core/terminal-spawn.js +0 -63
- package/dist/core/terminal-spawn.js.map +0 -1
- package/dist/core/test-runner.d.ts +0 -69
- package/dist/core/test-runner.js +0 -199
- package/dist/core/test-runner.js.map +0 -1
- package/dist/core/timeline-store.d.ts +0 -20
- package/dist/core/timeline-store.js +0 -36
- package/dist/core/timeline-store.js.map +0 -1
- package/dist/core/tool-call-store.d.ts +0 -25
- package/dist/core/tool-call-store.js +0 -62
- package/dist/core/tool-call-store.js.map +0 -1
- package/dist/core/types.d.ts +0 -312
- package/dist/core/types.js +0 -2
- package/dist/core/types.js.map +0 -1
- package/dist/core/usage-history.d.ts +0 -81
- package/dist/core/usage-history.js +0 -149
- package/dist/core/usage-history.js.map +0 -1
- package/dist/core/vercel-actions.d.ts +0 -71
- package/dist/core/vercel-actions.js +0 -109
- package/dist/core/vercel-actions.js.map +0 -1
- package/dist/core/vercel-auth.d.ts +0 -40
- package/dist/core/vercel-auth.js +0 -88
- package/dist/core/vercel-auth.js.map +0 -1
- package/dist/core/vercel-context.d.ts +0 -2
- package/dist/core/vercel-context.js +0 -97
- package/dist/core/vercel-context.js.map +0 -1
- package/dist/core/vercel-manager.d.ts +0 -268
- package/dist/core/vercel-manager.js +0 -401
- package/dist/core/vercel-manager.js.map +0 -1
- package/dist/core/vercel-oauth.d.ts +0 -37
- package/dist/core/vercel-oauth.js +0 -57
- package/dist/core/vercel-oauth.js.map +0 -1
- package/dist/core/vercel-provider.d.ts +0 -23
- package/dist/core/vercel-provider.js +0 -276
- package/dist/core/vercel-provider.js.map +0 -1
- package/dist/core/vultr-actions.d.ts +0 -52
- package/dist/core/vultr-actions.js +0 -62
- package/dist/core/vultr-actions.js.map +0 -1
- package/dist/core/vultr-auth.d.ts +0 -32
- package/dist/core/vultr-auth.js +0 -54
- package/dist/core/vultr-auth.js.map +0 -1
- package/dist/core/vultr-context.d.ts +0 -2
- package/dist/core/vultr-context.js +0 -55
- package/dist/core/vultr-context.js.map +0 -1
- package/dist/core/vultr-manager.d.ts +0 -113
- package/dist/core/vultr-manager.js +0 -170
- package/dist/core/vultr-manager.js.map +0 -1
- package/dist/core/vultr-provider.d.ts +0 -69
- package/dist/core/vultr-provider.js +0 -226
- package/dist/core/vultr-provider.js.map +0 -1
- package/dist/core/workflow-triggers.d.ts +0 -139
- package/dist/core/workflow-triggers.js +0 -208
- package/dist/core/workflow-triggers.js.map +0 -1
- package/dist/core/workflows.d.ts +0 -290
- package/dist/core/workflows.js +0 -190
- package/dist/core/workflows.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.js +0 -66
- package/dist/index.js.map +0 -1
- package/dist/mcp/server.d.ts +0 -37
- package/dist/mcp/server.js +0 -84
- package/dist/mcp/server.js.map +0 -1
- package/dist/mcp/tools/agent-env.d.ts +0 -9
- package/dist/mcp/tools/agent-env.js +0 -160
- package/dist/mcp/tools/agent-env.js.map +0 -1
- package/dist/mcp/tools/agent-profiles.d.ts +0 -9
- package/dist/mcp/tools/agent-profiles.js +0 -197
- package/dist/mcp/tools/agent-profiles.js.map +0 -1
- package/dist/mcp/tools/agent-registry.d.ts +0 -9
- package/dist/mcp/tools/agent-registry.js +0 -81
- package/dist/mcp/tools/agent-registry.js.map +0 -1
- package/dist/mcp/tools/agent.d.ts +0 -4
- package/dist/mcp/tools/agent.js +0 -29
- package/dist/mcp/tools/agent.js.map +0 -1
- package/dist/mcp/tools/context.d.ts +0 -36
- package/dist/mcp/tools/context.js +0 -69
- package/dist/mcp/tools/context.js.map +0 -1
- package/dist/mcp/tools/database.d.ts +0 -9
- package/dist/mcp/tools/database.js +0 -166
- package/dist/mcp/tools/database.js.map +0 -1
- package/dist/mcp/tools/docs.d.ts +0 -29
- package/dist/mcp/tools/docs.js +0 -134
- package/dist/mcp/tools/docs.js.map +0 -1
- package/dist/mcp/tools/errors.d.ts +0 -12
- package/dist/mcp/tools/errors.js +0 -47
- package/dist/mcp/tools/errors.js.map +0 -1
- package/dist/mcp/tools/git.d.ts +0 -4
- package/dist/mcp/tools/git.js +0 -209
- package/dist/mcp/tools/git.js.map +0 -1
- package/dist/mcp/tools/github.d.ts +0 -4
- package/dist/mcp/tools/github.js +0 -196
- package/dist/mcp/tools/github.js.map +0 -1
- package/dist/mcp/tools/index.d.ts +0 -36
- package/dist/mcp/tools/index.js +0 -61
- package/dist/mcp/tools/index.js.map +0 -1
- package/dist/mcp/tools/onboard.d.ts +0 -10
- package/dist/mcp/tools/onboard.js +0 -30
- package/dist/mcp/tools/onboard.js.map +0 -1
- package/dist/mcp/tools/provider.d.ts +0 -16
- package/dist/mcp/tools/provider.js +0 -110
- package/dist/mcp/tools/provider.js.map +0 -1
- package/dist/mcp/tools/services.d.ts +0 -13
- package/dist/mcp/tools/services.js +0 -204
- package/dist/mcp/tools/services.js.map +0 -1
- package/dist/mcp/tools/snapshots.d.ts +0 -8
- package/dist/mcp/tools/snapshots.js +0 -37
- package/dist/mcp/tools/snapshots.js.map +0 -1
- package/dist/mcp/tools/terminal.d.ts +0 -4
- package/dist/mcp/tools/terminal.js +0 -38
- package/dist/mcp/tools/terminal.js.map +0 -1
- package/dist/tui/app.d.ts +0 -22
- package/dist/tui/app.js +0 -138
- package/dist/tui/app.js.map +0 -1
- package/dist/web/agent-info.d.ts +0 -82
- package/dist/web/agent-info.js +0 -775
- package/dist/web/agent-info.js.map +0 -1
- package/dist/web/client/assets/SymbolsNerdFontMono-Regular-DDncdh2F.ttf +0 -0
- package/dist/web/client/assets/code-editor-TE0sjFGO.js +0 -30
- package/dist/web/client/assets/context-graph-B9MnBpp6.js +0 -7
- package/dist/web/client/assets/core-DhEqZVGG.js +0 -1
- package/dist/web/client/assets/event-BK_86lmQ.js +0 -1
- package/dist/web/client/assets/index-BhDAhmA1.js +0 -1
- package/dist/web/client/assets/index-CSo__8A6.css +0 -1
- package/dist/web/client/assets/index-DAJvBqn9.js +0 -352
- package/dist/web/client/assets/nomoreide-favicon-Ds7Tgj9p.svg +0 -24
- package/dist/web/client/assets/system-process-table-DetWu0Gj.js +0 -1
- package/dist/web/client/assets/window-DlR023_X.js +0 -1
- package/dist/web/client/index.html +0 -44
- package/dist/web/dashboard.d.ts +0 -61
- package/dist/web/dashboard.js +0 -221
- package/dist/web/dashboard.js.map +0 -1
- package/dist/web/directories.d.ts +0 -27
- package/dist/web/directories.js +0 -81
- package/dist/web/directories.js.map +0 -1
- package/dist/web/http-utils.d.ts +0 -13
- package/dist/web/http-utils.js +0 -72
- package/dist/web/http-utils.js.map +0 -1
- package/dist/web/routes/agent-chat-routes.d.ts +0 -3
- package/dist/web/routes/agent-chat-routes.js +0 -186
- package/dist/web/routes/agent-chat-routes.js.map +0 -1
- package/dist/web/routes/agent-env-routes.d.ts +0 -9
- package/dist/web/routes/agent-env-routes.js +0 -86
- package/dist/web/routes/agent-env-routes.js.map +0 -1
- package/dist/web/routes/agent-profile-routes.d.ts +0 -8
- package/dist/web/routes/agent-profile-routes.js +0 -211
- package/dist/web/routes/agent-profile-routes.js.map +0 -1
- package/dist/web/routes/agent-registry-routes.d.ts +0 -2
- package/dist/web/routes/agent-registry-routes.js +0 -375
- package/dist/web/routes/agent-registry-routes.js.map +0 -1
- package/dist/web/routes/agent-routes.d.ts +0 -3
- package/dist/web/routes/agent-routes.js +0 -73
- package/dist/web/routes/agent-routes.js.map +0 -1
- package/dist/web/routes/agent-settings-routes.d.ts +0 -8
- package/dist/web/routes/agent-settings-routes.js +0 -67
- package/dist/web/routes/agent-settings-routes.js.map +0 -1
- package/dist/web/routes/context-library-routes.d.ts +0 -2
- package/dist/web/routes/context-library-routes.js +0 -139
- package/dist/web/routes/context-library-routes.js.map +0 -1
- package/dist/web/routes/context.d.ts +0 -73
- package/dist/web/routes/context.js +0 -48
- package/dist/web/routes/context.js.map +0 -1
- package/dist/web/routes/dashboard-routes.d.ts +0 -3
- package/dist/web/routes/dashboard-routes.js +0 -47
- package/dist/web/routes/dashboard-routes.js.map +0 -1
- package/dist/web/routes/database-routes.d.ts +0 -3
- package/dist/web/routes/database-routes.js +0 -341
- package/dist/web/routes/database-routes.js.map +0 -1
- package/dist/web/routes/docker-routes.d.ts +0 -7
- package/dist/web/routes/docker-routes.js +0 -122
- package/dist/web/routes/docker-routes.js.map +0 -1
- package/dist/web/routes/errors-routes.d.ts +0 -3
- package/dist/web/routes/errors-routes.js +0 -77
- package/dist/web/routes/errors-routes.js.map +0 -1
- package/dist/web/routes/extensions-routes.d.ts +0 -14
- package/dist/web/routes/extensions-routes.js +0 -21
- package/dist/web/routes/extensions-routes.js.map +0 -1
- package/dist/web/routes/git-routes.d.ts +0 -3
- package/dist/web/routes/git-routes.js +0 -598
- package/dist/web/routes/git-routes.js.map +0 -1
- package/dist/web/routes/github-context.d.ts +0 -11
- package/dist/web/routes/github-context.js +0 -34
- package/dist/web/routes/github-context.js.map +0 -1
- package/dist/web/routes/github-routes.d.ts +0 -2
- package/dist/web/routes/github-routes.js +0 -699
- package/dist/web/routes/github-routes.js.map +0 -1
- package/dist/web/routes/host-routes.d.ts +0 -2
- package/dist/web/routes/host-routes.js +0 -188
- package/dist/web/routes/host-routes.js.map +0 -1
- package/dist/web/routes/index.d.ts +0 -10
- package/dist/web/routes/index.js +0 -72
- package/dist/web/routes/index.js.map +0 -1
- package/dist/web/routes/jetbrains-import-routes.d.ts +0 -2
- package/dist/web/routes/jetbrains-import-routes.js +0 -121
- package/dist/web/routes/jetbrains-import-routes.js.map +0 -1
- package/dist/web/routes/log-sources-routes.d.ts +0 -6
- package/dist/web/routes/log-sources-routes.js +0 -102
- package/dist/web/routes/log-sources-routes.js.map +0 -1
- package/dist/web/routes/metrics-routes.d.ts +0 -3
- package/dist/web/routes/metrics-routes.js +0 -60
- package/dist/web/routes/metrics-routes.js.map +0 -1
- package/dist/web/routes/onboard-routes.d.ts +0 -9
- package/dist/web/routes/onboard-routes.js +0 -146
- package/dist/web/routes/onboard-routes.js.map +0 -1
- package/dist/web/routes/overview-routes.d.ts +0 -2
- package/dist/web/routes/overview-routes.js +0 -36
- package/dist/web/routes/overview-routes.js.map +0 -1
- package/dist/web/routes/provider-routes.d.ts +0 -2
- package/dist/web/routes/provider-routes.js +0 -558
- package/dist/web/routes/provider-routes.js.map +0 -1
- package/dist/web/routes/service-routes.d.ts +0 -3
- package/dist/web/routes/service-routes.js +0 -511
- package/dist/web/routes/service-routes.js.map +0 -1
- package/dist/web/routes/settings-routes.d.ts +0 -2
- package/dist/web/routes/settings-routes.js +0 -151
- package/dist/web/routes/settings-routes.js.map +0 -1
- package/dist/web/routes/shell-routes.d.ts +0 -22
- package/dist/web/routes/shell-routes.js +0 -75
- package/dist/web/routes/shell-routes.js.map +0 -1
- package/dist/web/routes/skills-routes.d.ts +0 -2
- package/dist/web/routes/skills-routes.js +0 -49
- package/dist/web/routes/skills-routes.js.map +0 -1
- package/dist/web/routes/snapshot-routes.d.ts +0 -8
- package/dist/web/routes/snapshot-routes.js +0 -194
- package/dist/web/routes/snapshot-routes.js.map +0 -1
- package/dist/web/routes/ssh-server-routes.d.ts +0 -10
- package/dist/web/routes/ssh-server-routes.js +0 -163
- package/dist/web/routes/ssh-server-routes.js.map +0 -1
- package/dist/web/routes/terminal-routes.d.ts +0 -7
- package/dist/web/routes/terminal-routes.js +0 -313
- package/dist/web/routes/terminal-routes.js.map +0 -1
- package/dist/web/routes/workflow-routes.d.ts +0 -8
- package/dist/web/routes/workflow-routes.js +0 -45
- package/dist/web/routes/workflow-routes.js.map +0 -1
- package/dist/web/routes/workflow-trigger-routes.d.ts +0 -9
- package/dist/web/routes/workflow-trigger-routes.js +0 -78
- package/dist/web/routes/workflow-trigger-routes.js.map +0 -1
- package/dist/web/server.d.ts +0 -31
- package/dist/web/server.js +0 -325
- package/dist/web/server.js.map +0 -1
- package/dist/web/service-tester.d.ts +0 -16
- package/dist/web/service-tester.js +0 -107
- package/dist/web/service-tester.js.map +0 -1
- package/dist/web/static-assets.d.ts +0 -9
- package/dist/web/static-assets.js +0 -77
- package/dist/web/static-assets.js.map +0 -1
- package/dist/web/usage-info.d.ts +0 -56
- package/dist/web/usage-info.js +0 -265
- package/dist/web/usage-info.js.map +0 -1
|
@@ -1,494 +0,0 @@
|
|
|
1
|
-
import { spawn } from "node:child_process";
|
|
2
|
-
import { mkdtempSync, writeFileSync } from "node:fs";
|
|
3
|
-
import { tmpdir } from "node:os";
|
|
4
|
-
import { join } from "node:path";
|
|
5
|
-
/**
|
|
6
|
-
* In-dashboard AI agent backed by the real local agent CLI. NoMoreIDE selects
|
|
7
|
-
* Claude Code or Codex from the same startup-agent detection used by /agent,
|
|
8
|
-
* then drives that CLI in a machine-readable headless mode rather than calling
|
|
9
|
-
* a vendor API directly.
|
|
10
|
-
*
|
|
11
|
-
* Conversation continuity uses the selected CLI's own session store: the first
|
|
12
|
-
* turn returns a session id, which the client sends back as `resumeSessionId` on
|
|
13
|
-
* the next turn. The server holds no transcript state.
|
|
14
|
-
*
|
|
15
|
-
* Tool permissions: unless NOMOREIDE_AGENT_PERMISSION_MODE=bypassPermissions,
|
|
16
|
-
* the agent runs in `default` mode with a PreToolUse hook on mutating tools.
|
|
17
|
-
* The hook blocks and asks the dock (via ApprovalBroker) for an Allow/Deny.
|
|
18
|
-
*/
|
|
19
|
-
const CLAUDE_BIN = process.env.NOMOREIDE_CLAUDE_BIN || "claude";
|
|
20
|
-
const CODEX_BIN = process.env.NOMOREIDE_CODEX_BIN || "codex";
|
|
21
|
-
/** "bypassPermissions" runs fully autonomous (no approval prompts). */
|
|
22
|
-
const PERMISSION_MODE = process.env.NOMOREIDE_AGENT_PERMISSION_MODE || "default";
|
|
23
|
-
const CODEX_APPROVAL_POLICY = process.env.NOMOREIDE_CODEX_APPROVAL_POLICY || "never";
|
|
24
|
-
/** Tools that trigger an approval prompt (mutating / side-effecting ones). */
|
|
25
|
-
const GATED_TOOLS = "Bash|Edit|Write|MultiEdit|NotebookEdit";
|
|
26
|
-
/** Truncate tool-result previews shown in the dock. */
|
|
27
|
-
const PREVIEW_LIMIT = 400;
|
|
28
|
-
export const CLAUDE_PROVIDER = {
|
|
29
|
-
id: "claude",
|
|
30
|
-
label: "Claude Code",
|
|
31
|
-
commandName: "claude",
|
|
32
|
-
bin: CLAUDE_BIN,
|
|
33
|
-
installHint: "Install Claude Code (and run `claude login`) so it is on NoMoreIDE's PATH, then reload.",
|
|
34
|
-
intro: "This is real Claude Code, running in your workspace with full tools - e.g. \"restart the api and tail its logs\", \"what changed in git and why?\", \"fix the failing test\".",
|
|
35
|
-
};
|
|
36
|
-
export const CODEX_PROVIDER = {
|
|
37
|
-
id: "codex",
|
|
38
|
-
label: "Codex",
|
|
39
|
-
commandName: "codex",
|
|
40
|
-
bin: CODEX_BIN,
|
|
41
|
-
installHint: "Install Codex CLI (and run `codex login`) so it is on NoMoreIDE's PATH, then reload.",
|
|
42
|
-
intro: "This is real Codex CLI, running in your workspace with full tools - e.g. \"restart the api and tail its logs\", \"what changed in git and why?\", \"fix the failing test\".",
|
|
43
|
-
};
|
|
44
|
-
const availabilityProbes = new Map();
|
|
45
|
-
/** Every selectable chat provider, in display order. */
|
|
46
|
-
export const CHAT_PROVIDERS = [CLAUDE_PROVIDER, CODEX_PROVIDER];
|
|
47
|
-
/** Look up a provider by its id; undefined for unknown ids. */
|
|
48
|
-
export function providerById(id) {
|
|
49
|
-
return CHAT_PROVIDERS.find((provider) => provider.id === id);
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Pick the in-dock chat provider. An explicit user choice (`preferredId`, saved
|
|
53
|
-
* in config) wins; otherwise fall back to the startup-agent detection that the
|
|
54
|
-
* MCP-launched flow relies on; otherwise Claude.
|
|
55
|
-
*/
|
|
56
|
-
export function resolveChatProvider(detectedName, preferredId) {
|
|
57
|
-
return (providerById(preferredId) ??
|
|
58
|
-
(detectedName === "codex" ? CODEX_PROVIDER : CLAUDE_PROVIDER));
|
|
59
|
-
}
|
|
60
|
-
export function publicProviderInfo(provider) {
|
|
61
|
-
return {
|
|
62
|
-
id: provider.id,
|
|
63
|
-
label: provider.label,
|
|
64
|
-
commandName: provider.commandName,
|
|
65
|
-
installHint: provider.installHint,
|
|
66
|
-
intro: provider.intro,
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
/** True when the selected agent CLI is installed and runnable. Memoized. */
|
|
70
|
-
export function isAgentAvailable(provider = CLAUDE_PROVIDER) {
|
|
71
|
-
const existing = availabilityProbes.get(provider.id);
|
|
72
|
-
if (existing)
|
|
73
|
-
return existing;
|
|
74
|
-
const probe = new Promise((resolve) => {
|
|
75
|
-
const child = spawn(provider.bin, ["--version"], { stdio: "ignore" });
|
|
76
|
-
child.on("error", () => resolve(false));
|
|
77
|
-
child.on("close", (code) => resolve(code === 0));
|
|
78
|
-
}).catch(() => false);
|
|
79
|
-
availabilityProbes.set(provider.id, probe);
|
|
80
|
-
return probe;
|
|
81
|
-
}
|
|
82
|
-
/** Whether tool calls are gated behind dock approval (vs. fully autonomous). */
|
|
83
|
-
export function approvalsEnabled(provider = CLAUDE_PROVIDER) {
|
|
84
|
-
return provider.id === "claude" && PERMISSION_MODE !== "bypassPermissions";
|
|
85
|
-
}
|
|
86
|
-
export function buildAgentInvocation(provider, message, resumeSessionId, gating) {
|
|
87
|
-
if (provider.id === "codex") {
|
|
88
|
-
const args = ["-a", CODEX_APPROVAL_POLICY, "exec"];
|
|
89
|
-
if (resumeSessionId) {
|
|
90
|
-
args.push("resume", "--json", "--skip-git-repo-check", resumeSessionId, message);
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
args.push("--json", "--skip-git-repo-check", message);
|
|
94
|
-
}
|
|
95
|
-
return { bin: provider.bin, args };
|
|
96
|
-
}
|
|
97
|
-
const args = [
|
|
98
|
-
"--print",
|
|
99
|
-
"--output-format",
|
|
100
|
-
"stream-json",
|
|
101
|
-
"--verbose",
|
|
102
|
-
"--include-partial-messages",
|
|
103
|
-
"--permission-mode",
|
|
104
|
-
gating ? "default" : PERMISSION_MODE,
|
|
105
|
-
];
|
|
106
|
-
if (gating) {
|
|
107
|
-
args.push("--settings", approvalSettings());
|
|
108
|
-
}
|
|
109
|
-
if (resumeSessionId)
|
|
110
|
-
args.push("--resume", resumeSessionId);
|
|
111
|
-
args.push(message);
|
|
112
|
-
return { bin: provider.bin, args };
|
|
113
|
-
}
|
|
114
|
-
export class AgentRuntime {
|
|
115
|
-
deps;
|
|
116
|
-
constructor(deps) {
|
|
117
|
-
this.deps = deps;
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Run one user turn. Streams events until the CLI exits. `resumeSessionId`
|
|
121
|
-
* continues a prior Claude Code session; omit it to start a fresh one.
|
|
122
|
-
*/
|
|
123
|
-
async run(message, resumeSessionId, onEvent, options = {}) {
|
|
124
|
-
const { signal, approval, autoApprove } = options;
|
|
125
|
-
const provider = this.deps.provider ?? CLAUDE_PROVIDER;
|
|
126
|
-
const gating = Boolean(approval) && approvalsEnabled(provider);
|
|
127
|
-
const invocation = buildAgentInvocation(provider, message, resumeSessionId, gating);
|
|
128
|
-
const env = gating && approval
|
|
129
|
-
? {
|
|
130
|
-
...process.env,
|
|
131
|
-
NOMOREIDE_APPROVAL_URL: approval.url,
|
|
132
|
-
// Scoped auto-approve for a consented workflow step (footguns still prompt).
|
|
133
|
-
...(autoApprove ? { NOMOREIDE_AUTO_APPROVE: "1" } : {}),
|
|
134
|
-
}
|
|
135
|
-
: process.env;
|
|
136
|
-
await new Promise((resolve) => {
|
|
137
|
-
const child = spawn(invocation.bin, invocation.args, {
|
|
138
|
-
cwd: this.deps.cwd,
|
|
139
|
-
env,
|
|
140
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
141
|
-
});
|
|
142
|
-
const toolNames = new Map();
|
|
143
|
-
let stdout = "";
|
|
144
|
-
let stderr = "";
|
|
145
|
-
let finished = false;
|
|
146
|
-
let openedSession;
|
|
147
|
-
const finish = () => {
|
|
148
|
-
if (finished)
|
|
149
|
-
return;
|
|
150
|
-
finished = true;
|
|
151
|
-
if (openedSession)
|
|
152
|
-
approval?.broker.closeRun(openedSession);
|
|
153
|
-
resolve();
|
|
154
|
-
};
|
|
155
|
-
// Bridge the broker's approval requests onto the SSE stream the moment
|
|
156
|
-
// we learn this run's session id.
|
|
157
|
-
const onLine = (line) => {
|
|
158
|
-
const sessionId = provider.id === "codex"
|
|
159
|
-
? handleCodexLine(line, toolNames, onEvent)
|
|
160
|
-
: handleClaudeLine(line, toolNames, onEvent);
|
|
161
|
-
if (sessionId && gating && approval && !openedSession) {
|
|
162
|
-
openedSession = sessionId;
|
|
163
|
-
approval.broker.openRun(sessionId, (request) => onEvent({
|
|
164
|
-
type: "approval_request",
|
|
165
|
-
requestId: request.requestId,
|
|
166
|
-
name: request.name,
|
|
167
|
-
input: request.input,
|
|
168
|
-
}));
|
|
169
|
-
}
|
|
170
|
-
};
|
|
171
|
-
if (signal) {
|
|
172
|
-
if (signal.aborted)
|
|
173
|
-
child.kill();
|
|
174
|
-
else
|
|
175
|
-
signal.addEventListener("abort", () => child.kill(), { once: true });
|
|
176
|
-
}
|
|
177
|
-
child.on("error", (error) => {
|
|
178
|
-
onEvent({
|
|
179
|
-
type: "error",
|
|
180
|
-
message: error.code === "ENOENT"
|
|
181
|
-
? `Could not run "${provider.bin}". ${provider.installHint}`
|
|
182
|
-
: error.message,
|
|
183
|
-
});
|
|
184
|
-
finish();
|
|
185
|
-
});
|
|
186
|
-
child.stdout.setEncoding("utf8");
|
|
187
|
-
child.stdout.on("data", (chunk) => {
|
|
188
|
-
stdout += chunk;
|
|
189
|
-
let newline = stdout.indexOf("\n");
|
|
190
|
-
while (newline !== -1) {
|
|
191
|
-
const line = stdout.slice(0, newline).trim();
|
|
192
|
-
stdout = stdout.slice(newline + 1);
|
|
193
|
-
if (line)
|
|
194
|
-
onLine(line);
|
|
195
|
-
newline = stdout.indexOf("\n");
|
|
196
|
-
}
|
|
197
|
-
});
|
|
198
|
-
child.stderr.setEncoding("utf8");
|
|
199
|
-
child.stderr.on("data", (chunk) => {
|
|
200
|
-
stderr += chunk;
|
|
201
|
-
});
|
|
202
|
-
child.on("close", (code) => {
|
|
203
|
-
if (signal?.aborted)
|
|
204
|
-
return finish();
|
|
205
|
-
const leftover = stdout.trim();
|
|
206
|
-
if (leftover)
|
|
207
|
-
onLine(leftover);
|
|
208
|
-
if (code !== 0) {
|
|
209
|
-
onEvent({
|
|
210
|
-
type: "error",
|
|
211
|
-
message: stderr.trim() || `${provider.label} exited with code ${code}.`,
|
|
212
|
-
});
|
|
213
|
-
}
|
|
214
|
-
finish();
|
|
215
|
-
});
|
|
216
|
-
});
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* Parse one NDJSON line from Claude Code's stream-json output, emitting the
|
|
221
|
-
* relevant dock events. Returns the session id when this line is the init event.
|
|
222
|
-
*/
|
|
223
|
-
export function handleClaudeLine(line, toolNames, onEvent) {
|
|
224
|
-
let obj;
|
|
225
|
-
try {
|
|
226
|
-
obj = JSON.parse(line);
|
|
227
|
-
}
|
|
228
|
-
catch {
|
|
229
|
-
return undefined;
|
|
230
|
-
}
|
|
231
|
-
switch (obj.type) {
|
|
232
|
-
case "system": {
|
|
233
|
-
if (obj.subtype === "init" && typeof obj.session_id === "string") {
|
|
234
|
-
onEvent({ type: "session", sessionId: obj.session_id });
|
|
235
|
-
return obj.session_id;
|
|
236
|
-
}
|
|
237
|
-
return undefined;
|
|
238
|
-
}
|
|
239
|
-
case "stream_event": {
|
|
240
|
-
// Token-level text deltas (from --include-partial-messages).
|
|
241
|
-
const event = obj.event;
|
|
242
|
-
if (event?.type === "content_block_delta" && event.delta?.type === "text_delta") {
|
|
243
|
-
onEvent({ type: "text", text: event.delta.text ?? "" });
|
|
244
|
-
}
|
|
245
|
-
return undefined;
|
|
246
|
-
}
|
|
247
|
-
case "assistant": {
|
|
248
|
-
for (const block of messageContent(obj.message)) {
|
|
249
|
-
if (block.type === "tool_use" && typeof block.id === "string") {
|
|
250
|
-
toolNames.set(block.id, String(block.name));
|
|
251
|
-
onEvent({ type: "tool_use", id: block.id, name: String(block.name), input: block.input });
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
return undefined;
|
|
255
|
-
}
|
|
256
|
-
case "user": {
|
|
257
|
-
for (const block of messageContent(obj.message)) {
|
|
258
|
-
if (block.type === "tool_result" && typeof block.tool_use_id === "string") {
|
|
259
|
-
onEvent({
|
|
260
|
-
type: "tool_result",
|
|
261
|
-
id: block.tool_use_id,
|
|
262
|
-
name: toolNames.get(block.tool_use_id) ?? "tool",
|
|
263
|
-
preview: previewOf(block.content),
|
|
264
|
-
isError: Boolean(block.is_error),
|
|
265
|
-
});
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
return undefined;
|
|
269
|
-
}
|
|
270
|
-
case "result": {
|
|
271
|
-
onEvent({ type: "done", stopReason: typeof obj.subtype === "string" ? obj.subtype : null });
|
|
272
|
-
return undefined;
|
|
273
|
-
}
|
|
274
|
-
default:
|
|
275
|
-
return undefined;
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
/** Parse one JSONL event from `codex exec --json`. */
|
|
279
|
-
export function handleCodexLine(line, toolNames, onEvent) {
|
|
280
|
-
let obj;
|
|
281
|
-
try {
|
|
282
|
-
obj = JSON.parse(line);
|
|
283
|
-
}
|
|
284
|
-
catch {
|
|
285
|
-
return undefined;
|
|
286
|
-
}
|
|
287
|
-
if (obj.type === "thread.started" && typeof obj.thread_id === "string") {
|
|
288
|
-
onEvent({ type: "session", sessionId: obj.thread_id });
|
|
289
|
-
return obj.thread_id;
|
|
290
|
-
}
|
|
291
|
-
if (obj.type === "item.started" || obj.type === "item.completed") {
|
|
292
|
-
const item = obj.item;
|
|
293
|
-
if (!item || typeof item.id !== "string" || typeof item.type !== "string") {
|
|
294
|
-
return undefined;
|
|
295
|
-
}
|
|
296
|
-
if (item.type === "command_execution") {
|
|
297
|
-
const name = "command";
|
|
298
|
-
toolNames.set(item.id, name);
|
|
299
|
-
const command = typeof item.command === "string" ? item.command : "";
|
|
300
|
-
if (obj.type === "item.started") {
|
|
301
|
-
onEvent({ type: "tool_use", id: item.id, name, input: { command } });
|
|
302
|
-
return undefined;
|
|
303
|
-
}
|
|
304
|
-
onEvent({
|
|
305
|
-
type: "tool_result",
|
|
306
|
-
id: item.id,
|
|
307
|
-
name,
|
|
308
|
-
preview: previewOf(item.aggregated_output),
|
|
309
|
-
isError: typeof item.exit_code === "number"
|
|
310
|
-
? item.exit_code !== 0
|
|
311
|
-
: item.status === "failed",
|
|
312
|
-
});
|
|
313
|
-
return undefined;
|
|
314
|
-
}
|
|
315
|
-
if (item.type === "agent_message" && obj.type === "item.completed") {
|
|
316
|
-
const text = typeof item.text === "string" ? item.text : "";
|
|
317
|
-
if (text)
|
|
318
|
-
onEvent({ type: "text", text });
|
|
319
|
-
return undefined;
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
if (obj.type === "turn.completed") {
|
|
323
|
-
onEvent({ type: "done", stopReason: null });
|
|
324
|
-
}
|
|
325
|
-
return undefined;
|
|
326
|
-
}
|
|
327
|
-
function messageContent(message) {
|
|
328
|
-
const content = message?.content;
|
|
329
|
-
return Array.isArray(content) ? content : [];
|
|
330
|
-
}
|
|
331
|
-
function previewOf(content) {
|
|
332
|
-
let text;
|
|
333
|
-
if (typeof content === "string") {
|
|
334
|
-
text = content;
|
|
335
|
-
}
|
|
336
|
-
else if (Array.isArray(content)) {
|
|
337
|
-
text = content
|
|
338
|
-
.map((block) => typeof block === "string"
|
|
339
|
-
? block
|
|
340
|
-
: typeof block.text === "string"
|
|
341
|
-
? block.text
|
|
342
|
-
: "")
|
|
343
|
-
.join(" ");
|
|
344
|
-
}
|
|
345
|
-
else {
|
|
346
|
-
text = "";
|
|
347
|
-
}
|
|
348
|
-
text = text.trim();
|
|
349
|
-
return text.length > PREVIEW_LIMIT ? `${text.slice(0, PREVIEW_LIMIT)}…` : text;
|
|
350
|
-
}
|
|
351
|
-
/**
|
|
352
|
-
* Irreversible / history-rewriting shell that must keep a human in the loop even
|
|
353
|
-
* inside an auto-approved workflow step. Exported so it's unit-testable; the
|
|
354
|
-
* approval hook runs this exact function (serialized via `toString()` into
|
|
355
|
-
* {@link HOOK_SOURCE}). Unknown shapes are treated as risky.
|
|
356
|
-
*/
|
|
357
|
-
export function isDangerousBashCommand(cmd) {
|
|
358
|
-
if (typeof cmd !== "string")
|
|
359
|
-
return true;
|
|
360
|
-
const c = cmd.trim();
|
|
361
|
-
return (/\brm\s+-[a-zA-Z]*f/.test(c) ||
|
|
362
|
-
/\bgit\b.*\breset\b.*--hard/.test(c) ||
|
|
363
|
-
/\bgit\b.*\bclean\b.*-[a-zA-Z]*f/.test(c) ||
|
|
364
|
-
/\bgit\b.*\bpush\b.*(--force|-f(\s|$))/.test(c) ||
|
|
365
|
-
/\bgit\b.*\bbranch\b.*\s-D\b/.test(c) ||
|
|
366
|
-
/>/.test(c));
|
|
367
|
-
}
|
|
368
|
-
let hookPath;
|
|
369
|
-
let settingsJson;
|
|
370
|
-
/** Inline `--settings` JSON installing the PreToolUse approval hook. Cached. */
|
|
371
|
-
function approvalSettings() {
|
|
372
|
-
if (!settingsJson) {
|
|
373
|
-
const command = `node ${JSON.stringify(ensureHookScript())}`;
|
|
374
|
-
settingsJson = JSON.stringify({
|
|
375
|
-
// NoMoreIDE's own MCP tools are read-safe / scoped to registered services,
|
|
376
|
-
// so auto-allow them. Claude Code has no wildcard for the tool portion of
|
|
377
|
-
// an MCP rule; the bare server prefix `mcp__nomoreide` allows every tool
|
|
378
|
-
// from that server. Everything else (Bash/Edit/Write/Read/...) is left to
|
|
379
|
-
// the PreToolUse hook below — onboarding leans on the structured profile
|
|
380
|
-
// from `nomoreide_onboard_repo` instead of crawling the repo, so the agent
|
|
381
|
-
// shouldn't need Read/Glob/Grep at all.
|
|
382
|
-
permissions: { allow: ["mcp__nomoreide"] },
|
|
383
|
-
hooks: {
|
|
384
|
-
PreToolUse: [{ matcher: GATED_TOOLS, hooks: [{ type: "command", command }] }],
|
|
385
|
-
},
|
|
386
|
-
});
|
|
387
|
-
}
|
|
388
|
-
return settingsJson;
|
|
389
|
-
}
|
|
390
|
-
/**
|
|
391
|
-
* Write the approval-hook script to a temp file once, runnable by plain `node`
|
|
392
|
-
* in both dev (tsx) and built modes. It POSTs the pending tool call to the web
|
|
393
|
-
* server and blocks until the user's decision returns, then prints the
|
|
394
|
-
* PreToolUse permission decision Claude Code expects.
|
|
395
|
-
*/
|
|
396
|
-
function ensureHookScript() {
|
|
397
|
-
if (hookPath)
|
|
398
|
-
return hookPath;
|
|
399
|
-
const dir = mkdtempSync(join(tmpdir(), "nomoreide-agent-"));
|
|
400
|
-
hookPath = join(dir, "approval-hook.cjs");
|
|
401
|
-
writeFileSync(hookPath, HOOK_SOURCE, "utf8");
|
|
402
|
-
return hookPath;
|
|
403
|
-
}
|
|
404
|
-
const HOOK_SOURCE = `"use strict";
|
|
405
|
-
const http = require("http");
|
|
406
|
-
const { randomUUID } = require("crypto");
|
|
407
|
-
let body = "";
|
|
408
|
-
process.stdin.on("data", (d) => (body += d));
|
|
409
|
-
process.stdin.on("end", () => {
|
|
410
|
-
let input = {};
|
|
411
|
-
try { input = JSON.parse(body); } catch {}
|
|
412
|
-
const cmd = input.tool_input && input.tool_input.command;
|
|
413
|
-
// Auto-allow routine, low-risk Bash (diagnostics + dependency installs) so
|
|
414
|
-
// onboarding doesn't prompt for every step. Anything with shell chaining,
|
|
415
|
-
// redirection, or command substitution — or outside the safe verb list —
|
|
416
|
-
// still falls through to the dock for an explicit Allow/Deny.
|
|
417
|
-
if (input.tool_name === "Bash" && isSafeBash(cmd)) {
|
|
418
|
-
return decide("allow", "Auto-allowed routine command.");
|
|
419
|
-
}
|
|
420
|
-
// Scoped auto-approve for a consented workflow step: let the agent edit files
|
|
421
|
-
// and run non-footgun shell without a prompt for each call. Irreversible
|
|
422
|
-
// footguns (rm -rf, git reset --hard / clean -f / force-push / branch -D, and
|
|
423
|
-
// output redirection) still fall through to the dock for an explicit Allow.
|
|
424
|
-
if (process.env.NOMOREIDE_AUTO_APPROVE === "1") {
|
|
425
|
-
if (input.tool_name !== "Bash") {
|
|
426
|
-
return decide("allow", "Auto-approved within workflow.");
|
|
427
|
-
}
|
|
428
|
-
if (!isDangerousBashCommand(cmd)) {
|
|
429
|
-
return decide("allow", "Auto-approved within workflow.");
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
const url = process.env.NOMOREIDE_APPROVAL_URL;
|
|
433
|
-
if (!url) return decide("deny", "Approval channel not configured.");
|
|
434
|
-
let target;
|
|
435
|
-
try { target = new URL(url); } catch { return decide("deny", "Bad approval URL."); }
|
|
436
|
-
const payload = JSON.stringify({
|
|
437
|
-
sessionId: input.session_id,
|
|
438
|
-
requestId: randomUUID(),
|
|
439
|
-
toolName: input.tool_name,
|
|
440
|
-
toolInput: input.tool_input,
|
|
441
|
-
});
|
|
442
|
-
const req = http.request(
|
|
443
|
-
{
|
|
444
|
-
hostname: target.hostname,
|
|
445
|
-
port: target.port,
|
|
446
|
-
path: target.pathname,
|
|
447
|
-
method: "POST",
|
|
448
|
-
headers: { "content-type": "application/json", "content-length": Buffer.byteLength(payload) },
|
|
449
|
-
},
|
|
450
|
-
(res) => {
|
|
451
|
-
let data = "";
|
|
452
|
-
res.setEncoding("utf8");
|
|
453
|
-
res.on("data", (c) => (data += c));
|
|
454
|
-
res.on("end", () => {
|
|
455
|
-
try {
|
|
456
|
-
const r = JSON.parse(data);
|
|
457
|
-
decide(r.decision === "allow" ? "allow" : "deny", r.reason);
|
|
458
|
-
} catch {
|
|
459
|
-
decide("deny", "No decision returned.");
|
|
460
|
-
}
|
|
461
|
-
});
|
|
462
|
-
},
|
|
463
|
-
);
|
|
464
|
-
req.on("error", () => decide("deny", "Approval request failed to reach NoMoreIDE."));
|
|
465
|
-
req.setTimeout(10 * 60 * 1000, () => {
|
|
466
|
-
req.destroy();
|
|
467
|
-
decide("deny", "Approval timed out.");
|
|
468
|
-
});
|
|
469
|
-
req.write(payload);
|
|
470
|
-
req.end();
|
|
471
|
-
});
|
|
472
|
-
function isSafeBash(cmd) {
|
|
473
|
-
if (typeof cmd !== "string") return false;
|
|
474
|
-
const c = cmd.trim();
|
|
475
|
-
// Reject anything that chains, redirects, or substitutes — keep it one simple
|
|
476
|
-
// command so a safe prefix can't smuggle a dangerous tail (e.g. "echo x; rm -rf").
|
|
477
|
-
if (/[;&|<>$()\\\`]/.test(c)) return false;
|
|
478
|
-
return /^(echo|pwd|whoami|true|date|ls|node|npm (install|ci|--version|-v)|pnpm (install|--version|-v)|yarn( install| --version| -v)?|bun (install|--version|-v)|pip3? install)\\b/.test(c);
|
|
479
|
-
}
|
|
480
|
-
${isDangerousBashCommand.toString()}
|
|
481
|
-
function decide(permissionDecision, reason) {
|
|
482
|
-
process.stdout.write(
|
|
483
|
-
JSON.stringify({
|
|
484
|
-
hookSpecificOutput: {
|
|
485
|
-
hookEventName: "PreToolUse",
|
|
486
|
-
permissionDecision,
|
|
487
|
-
permissionDecisionReason: reason || "",
|
|
488
|
-
},
|
|
489
|
-
}),
|
|
490
|
-
);
|
|
491
|
-
process.exit(0);
|
|
492
|
-
}
|
|
493
|
-
`;
|
|
494
|
-
//# sourceMappingURL=agent-runtime.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-runtime.js","sourceRoot":"","sources":["../../src/core/agent-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { type ConfigStore } from "./config-store.js";
|
|
2
|
-
import { SnapshotManager } from "./snapshot-manager.js";
|
|
3
|
-
export interface AgentSession {
|
|
4
|
-
id: string;
|
|
5
|
-
/** Repository the session snapshot was taken in. */
|
|
6
|
-
repoPath: string;
|
|
7
|
-
/** Snapshot of the working tree before the session's first tool call. */
|
|
8
|
-
snapshotSha?: string;
|
|
9
|
-
snapshotRef?: string;
|
|
10
|
-
startedAt: string;
|
|
11
|
-
lastToolAt: string;
|
|
12
|
-
toolCount: number;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* By default, sessions are persisted to `~/.nomoreide/agent-sessions.json`
|
|
16
|
-
* (not kept only in memory) because the MCP server and the web UI may run in
|
|
17
|
-
* different processes — the UI must be able to list change-sets it didn't
|
|
18
|
-
* record.
|
|
19
|
-
*/
|
|
20
|
-
export declare class AgentSessionStore {
|
|
21
|
-
private readonly filePath;
|
|
22
|
-
constructor(filePath: string);
|
|
23
|
-
list(): Promise<AgentSession[]>;
|
|
24
|
-
get(id: string): Promise<AgentSession | undefined>;
|
|
25
|
-
save(session: AgentSession): Promise<void>;
|
|
26
|
-
}
|
|
27
|
-
export interface AgentSessionTracker {
|
|
28
|
-
/**
|
|
29
|
-
* Called before every recorded tool call. Starts a session (taking a
|
|
30
|
-
* working-tree snapshot) when none is active or the previous one went
|
|
31
|
-
* idle; otherwise bumps the active session. Never throws — a failed
|
|
32
|
-
* snapshot (e.g. not a git repo) must not block the tool call.
|
|
33
|
-
*/
|
|
34
|
-
beforeToolCall(): Promise<string>;
|
|
35
|
-
}
|
|
36
|
-
export interface AgentSessionTrackerOptions {
|
|
37
|
-
store: AgentSessionStore;
|
|
38
|
-
configStore: ConfigStore;
|
|
39
|
-
cwd?: string;
|
|
40
|
-
/** Gap after which the next tool call starts a new session. */
|
|
41
|
-
idleMs?: number;
|
|
42
|
-
/** Injectable for tests. */
|
|
43
|
-
snapshotManagerFor?: (repoPath: string) => Pick<SnapshotManager, "snapshot" | "prune">;
|
|
44
|
-
now?: () => number;
|
|
45
|
-
}
|
|
46
|
-
export declare function createAgentSessionTracker(options: AgentSessionTrackerOptions): AgentSessionTracker;
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
-
import { dirname } from "node:path";
|
|
3
|
-
import { isGitWorktree } from "./config-store.js";
|
|
4
|
-
import { SnapshotManager } from "./snapshot-manager.js";
|
|
5
|
-
const MAX_SESSIONS = 50;
|
|
6
|
-
/**
|
|
7
|
-
* By default, sessions are persisted to `~/.nomoreide/agent-sessions.json`
|
|
8
|
-
* (not kept only in memory) because the MCP server and the web UI may run in
|
|
9
|
-
* different processes — the UI must be able to list change-sets it didn't
|
|
10
|
-
* record.
|
|
11
|
-
*/
|
|
12
|
-
export class AgentSessionStore {
|
|
13
|
-
filePath;
|
|
14
|
-
constructor(filePath) {
|
|
15
|
-
this.filePath = filePath;
|
|
16
|
-
}
|
|
17
|
-
async list() {
|
|
18
|
-
try {
|
|
19
|
-
const parsed = JSON.parse(await readFile(this.filePath, "utf8"));
|
|
20
|
-
return Array.isArray(parsed) ? parsed : [];
|
|
21
|
-
}
|
|
22
|
-
catch {
|
|
23
|
-
return [];
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
async get(id) {
|
|
27
|
-
return (await this.list()).find((session) => session.id === id);
|
|
28
|
-
}
|
|
29
|
-
async save(session) {
|
|
30
|
-
const sessions = (await this.list()).filter((existing) => existing.id !== session.id);
|
|
31
|
-
sessions.unshift(session);
|
|
32
|
-
sessions.splice(MAX_SESSIONS);
|
|
33
|
-
await mkdir(dirname(this.filePath), { recursive: true });
|
|
34
|
-
await writeFile(this.filePath, `${JSON.stringify(sessions, null, 2)}\n`, "utf8");
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
const DEFAULT_IDLE_MS = 30 * 60 * 1000;
|
|
38
|
-
const SNAPSHOT_KEEP = 50;
|
|
39
|
-
export function createAgentSessionTracker(options) {
|
|
40
|
-
const cwd = options.cwd ?? process.cwd();
|
|
41
|
-
const idleMs = options.idleMs ?? DEFAULT_IDLE_MS;
|
|
42
|
-
const now = options.now ?? Date.now;
|
|
43
|
-
const snapshotManagerFor = options.snapshotManagerFor ?? ((repoPath) => new SnapshotManager(repoPath));
|
|
44
|
-
let active = null;
|
|
45
|
-
let pending = null;
|
|
46
|
-
async function beginSession() {
|
|
47
|
-
const startedAt = new Date(now()).toISOString();
|
|
48
|
-
const repoPath = await selectedRepoPath(options.configStore, cwd);
|
|
49
|
-
const session = {
|
|
50
|
-
id: `s-${now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`,
|
|
51
|
-
repoPath,
|
|
52
|
-
startedAt,
|
|
53
|
-
lastToolAt: startedAt,
|
|
54
|
-
toolCount: 0,
|
|
55
|
-
};
|
|
56
|
-
try {
|
|
57
|
-
const manager = snapshotManagerFor(repoPath);
|
|
58
|
-
const snapshot = await manager.snapshot(`agent session ${session.id}`);
|
|
59
|
-
session.snapshotSha = snapshot.sha;
|
|
60
|
-
session.snapshotRef = snapshot.ref;
|
|
61
|
-
await manager.prune(SNAPSHOT_KEEP);
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
// Not a git repo (or git unavailable) — track the session without a snapshot.
|
|
65
|
-
}
|
|
66
|
-
return session;
|
|
67
|
-
}
|
|
68
|
-
return {
|
|
69
|
-
async beforeToolCall() {
|
|
70
|
-
// Serialize: parallel tool calls at session start must share one snapshot.
|
|
71
|
-
const previous = pending ?? Promise.resolve("");
|
|
72
|
-
const next = previous
|
|
73
|
-
.catch(() => "")
|
|
74
|
-
.then(async () => {
|
|
75
|
-
const timestamp = now();
|
|
76
|
-
if (!active || timestamp - Date.parse(active.lastToolAt) > idleMs) {
|
|
77
|
-
active = await beginSession();
|
|
78
|
-
}
|
|
79
|
-
active.lastToolAt = new Date(timestamp).toISOString();
|
|
80
|
-
active.toolCount += 1;
|
|
81
|
-
try {
|
|
82
|
-
await options.store.save(active);
|
|
83
|
-
}
|
|
84
|
-
catch {
|
|
85
|
-
// Persistence is best-effort; never block the tool call.
|
|
86
|
-
}
|
|
87
|
-
return active.id;
|
|
88
|
-
});
|
|
89
|
-
pending = next;
|
|
90
|
-
return next;
|
|
91
|
-
},
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
async function selectedRepoPath(configStore, fallbackCwd) {
|
|
95
|
-
try {
|
|
96
|
-
const config = await configStore.load();
|
|
97
|
-
const repos = config.gitRepositories ?? [];
|
|
98
|
-
const selected = repos.find((repo) => repo.name === config.selectedGitRepository) ?? repos[0];
|
|
99
|
-
if (selected?.activeWorktreePath &&
|
|
100
|
-
await isGitWorktree(selected.activeWorktreePath)) {
|
|
101
|
-
return selected.activeWorktreePath;
|
|
102
|
-
}
|
|
103
|
-
return selected?.path ?? fallbackCwd;
|
|
104
|
-
}
|
|
105
|
-
catch {
|
|
106
|
-
return fallbackCwd;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
//# sourceMappingURL=agent-sessions.js.map
|