Skip to content
Merged
Show file tree
Hide file tree
Changes from 61 commits
Commits
Show all changes
98 commits
Select commit Hold shift + click to select a range
31a3da8
feat(component-sdk): add tool mode metadata for agent-callable compon…
betterclever Jan 15, 2026
11c850d
refactor(component-sdk): align tool mode metadata with zod-first arch…
betterclever Jan 19, 2026
0660362
fix(tool-helpers): use Zod's toJSONSchema() and MCP SDK types
betterclever Jan 20, 2026
83a2a9b
feat(mcp): add Tool Registry Service for agent tool credentials
betterclever Jan 15, 2026
1fcd5eb
refactor(mcp): resolve lint and type errors in tool registry
betterclever Jan 19, 2026
abc2e1e
fix(tool-registry): handle non-JSON auth tokens in getToolCredentials
betterclever Jan 20, 2026
f82a05d
refactor(mcp): resolve lint spacing issues in tool registry
betterclever Jan 20, 2026
ab4941a
feat(dsl): implement workflow tool mode handling and MCP server node
betterclever Jan 19, 2026
ca18b5e
feat(mcp): implement mcp tool mode execution and registration
betterclever Jan 20, 2026
b0113e5
feat(mcp): implement MCP Gateway with tool listing and execution
betterclever Jan 19, 2026
737896c
refactor(mcp-gateway): use StreamableHTTPClientTransport for external…
betterclever Jan 20, 2026
bf20f01
feat(mcp-gateway): implement signal-based tool execution via Temporal
betterclever Jan 20, 2026
d748ef8
feat(mcp): complete MCP Gateway implementation with security and isol…
betterclever Jan 21, 2026
6eaeab1
feat(mcp-gateway): wire up controller with headers and session support
betterclever Jan 21, 2026
facae02
feat(mcp): implement secure session-scoped authentication for MCP Gat…
betterclever Jan 21, 2026
f1752c2
feat(mcp): fix component tool parameter propagation and harden logic-…
betterclever Jan 21, 2026
335e021
docs: add ENG-132 tool mode orchestration implementation plan
betterclever Jan 22, 2026
be5bbb9
feat(dsl): add connectedToolNodeIds metadata and agent tools port
betterclever Jan 22, 2026
ad44d61
feat(compiler): track tool->agent edges and handle virtual tools port
betterclever Jan 22, 2026
d84712d
feat(temporal): pass connectedToolNodeIds to agent execution context
betterclever Jan 22, 2026
09c19cb
feat(gateway): implement nodeId-based tool scoping and session API
betterclever Jan 22, 2026
5b3eea8
feat(worker): propagate tool binding metadata to component context
betterclever Jan 22, 2026
e6075bf
feat(agent): implement gateway-based tool discovery and execution
betterclever Jan 22, 2026
668b797
fix(mcp): implement multi-agent tool scoping and gateway-based discovery
betterclever Jan 23, 2026
f794995
fix(agent): ensure tool execution returns string values
betterclever Jan 23, 2026
cdd5f8d
chore(logging): implement structured file-based debug logging
betterclever Jan 23, 2026
56ea42c
docs: add comprehensive ENG-132 implementation summary
betterclever Jan 23, 2026
7a87122
feat(logging): add detailed tool execution debug logging
betterclever Jan 23, 2026
b3f5409
committed the changes.
betterclever Jan 23, 2026
73f2212
refactor: rework ai agent mcp tools
betterclever Jan 24, 2026
0cecd0c
test: align ai agent tests with schemas
betterclever Jan 24, 2026
04f1e47
fix: stabilize mcp tool discovery
betterclever Jan 24, 2026
5ab0116
fix: align mcp tool schemas and agent logging
betterclever Jan 24, 2026
6ffe6e0
chore: remove ai agent debug logs
betterclever Jan 24, 2026
1ecde88
chore: remove eng-132 interim docs
betterclever Jan 24, 2026
d3f56bf
chore: fix lint and remove unused checks
betterclever Jan 24, 2026
341440f
test: stabilize mcp internal and ai agent tests
betterclever Jan 25, 2026
a03de01
feat(worker): add OpenCode agent component
betterclever Jan 26, 2026
874955f
feat: implement contract-based tool ports and mcp agent tools port
betterclever Jan 26, 2026
0832d06
feat: enhance Tool Mode UI and fix metadata propagation
betterclever Jan 26, 2026
5ba3dd3
feat: implement tool schema and expose parameters for agent tools
betterclever Jan 27, 2026
3d48e1d
feat: refresh tool mode config panel
betterclever Jan 27, 2026
d45c055
feat: add zai-coding-plan provider support to OpenCode component
betterclever Jan 27, 2026
1472932
fix: attempt to fix opencode docker command argument handling
betterclever Jan 27, 2026
201bcb7
fix(opencode): fix E2E tests by removing --quiet flag and using wrapp…
betterclever Jan 27, 2026
3c4441b
fix(opencode): always append task to prompt when systemPrompt is prov…
betterclever Jan 27, 2026
ca3d47f
fix: add baseUrl and headers to zai-coding-plan provider schema
betterclever Jan 27, 2026
2d1a8d6
fix: remove emitDeclarationOnly from worker tsconfig to properly emit…
betterclever Jan 27, 2026
aead2e2
lint: fix unused caught error variable in ConfigPanel
betterclever Jan 27, 2026
0b16a59
feat: add stdio MCP proxy and cleanup
betterclever Jan 29, 2026
55844de
feat: add AWS MCP server components
betterclever Jan 29, 2026
80b764c
feat: add stdio mcp proxy and aws mcp components
betterclever Jan 29, 2026
4781b6e
chore: drop ai notes
betterclever Jan 29, 2026
532d841
feat: finalize mcp servers and ui
betterclever Jan 29, 2026
1342d82
Merge pull request #239 from ShipSecAI/eng-103/aws-investigation-tools
betterclever Jan 30, 2026
33dccb0
Merge pull request #237 from ShipSecAI/eng-101/frontend-tool-mode-age…
betterclever Jan 30, 2026
561512b
Merge pull request #236 from ShipSecAI/eng-100/opencode-agent-component
betterclever Jan 30, 2026
75fcbfa
Merge pull request #230 from ShipSecAI/eng-132/tool-mode-orchestration
betterclever Jan 30, 2026
a0d6b86
Merge pull request #213 from ShipSecAI/eng-98/mcp-gateway
betterclever Jan 30, 2026
8d32f0a
Merge pull request #212 from ShipSecAI/eng-97/workflow-tool-mode
betterclever Jan 30, 2026
7d7836b
Merge pull request #208 from ShipSecAI/eng-96/tool-registry
betterclever Jan 30, 2026
c853fde
merge: main into mcp-tool-mode
betterclever Jan 30, 2026
7bd9fba
fix: stabilize mcp internal test and opencode env
betterclever Jan 30, 2026
29e6e15
fix(worker): resolve typecheck outputs
betterclever Jan 30, 2026
b97564a
fix(e2e): enable ENG-104 alert investigation workflow
betterclever Jan 31, 2026
872778e
feat(logging): add comprehensive logs for MCP tool discovery and gateway
betterclever Jan 31, 2026
23e1b43
fix: add oauth: false to OpenCode MCP gateway config
betterclever Jan 31, 2026
9c69fa8
docs: add investigation of OpenCode tool discovery issue
betterclever Jan 31, 2026
ac87256
debug: add logging to opencode to debug connectedToolNodeIds issue
betterclever Jan 31, 2026
1987c57
docs: document root cause investigation for connectedToolNodeIds issue
betterclever Jan 31, 2026
6d52d84
docs: add solution summary for OpenCode tool discovery investigation
betterclever Jan 31, 2026
ec1e26d
cleanup: remove debug logging after successful investigation
betterclever Jan 31, 2026
f278b76
docs: add final investigation complete summary
betterclever Jan 31, 2026
ae157ee
test: add OpenCode tool invocation verification test
betterclever Jan 31, 2026
d3084c9
test: add simple MCP tool discovery test
betterclever Jan 31, 2026
b0aa076
test: add MCP tool discovery test with AWS CloudTrail
betterclever Jan 31, 2026
0be670f
fix: enable opencode mcp discovery
betterclever Feb 1, 2026
8453f2b
chore: fix worker lint warnings
betterclever Feb 1, 2026
83fed6b
test: align mcp gateway urls
betterclever Feb 1, 2026
6b0ca4a
fix: improve tool mode wiring and secrets ui
betterclever Feb 1, 2026
6a505c2
fix: clean mcp ui and eng-104 flow
betterclever Feb 1, 2026
19644fb
chore: clean e2e tests and docs
betterclever Feb 1, 2026
18cd1f1
test: ignore dist output in bun
betterclever Feb 1, 2026
0f12372
test: remove worker dist before bun test
betterclever Feb 1, 2026
495936e
test: stabilize ai agent unit tests
betterclever Feb 1, 2026
32e9897
chore: satisfy lint for ai agent overrides
betterclever Feb 1, 2026
c2bef58
test: allow ai sdk overrides in execution metadata
betterclever Feb 1, 2026
9cebf22
fix: add getVolumeName to IsolatedContainerVolume mock in opencode tests
betterclever Feb 1, 2026
a18fb3a
fix: improve test isolation in ai-agent tests
betterclever Feb 1, 2026
9b2d0c6
fix: make ai-agent test context dynamic for proper test isolation
betterclever Feb 1, 2026
302cfbf
fix: use vi.spyOn for proper mock isolation in ai-agent tests
betterclever Feb 1, 2026
982c7af
fix: make test context http.fetch use globalThis.fetch for proper moc…
betterclever Feb 1, 2026
0ee3c9f
fix: typecheck error for test context fetch function
betterclever Feb 1, 2026
9b68ba2
fix: security and reliability improvements from PR review
betterclever Feb 2, 2026
b691ab3
fix: add timeout protection and cleanup for MCP tool execution
betterclever Feb 2, 2026
5c32f24
Merge remote-tracking branch 'origin/main' into mcp-tool-mode
betterclever Feb 2, 2026
fb351dc
lint fix
betterclever Feb 2, 2026
faf2508
fix the ai agent test
betterclever Feb 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
192 changes: 0 additions & 192 deletions .ai/zod-first-migration.md

This file was deleted.

69 changes: 35 additions & 34 deletions backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,62 +17,63 @@
"delete:runs": "bun scripts/delete-all-workflow-runs.ts"
},
"dependencies": {
"@clerk/backend": "^2.9.4",
"@clerk/types": "^4.81.0",
"@grpc/grpc-js": "^1.14.0",
"@nestjs/common": "^10.4.0",
"@nestjs/config": "^3.2.0",
"@nestjs/core": "^10.4.0",
"@nestjs/platform-express": "^10.4.0",
"@nestjs/swagger": "^11.2.0",
"@clerk/backend": "^2.29.5",
"@clerk/types": "^4.101.13",
"@grpc/grpc-js": "^1.14.3",
"@nestjs/common": "^10.4.22",
"@nestjs/config": "^3.3.0",
"@nestjs/core": "^10.4.22",
"@nestjs/platform-express": "^10.4.22",
"@nestjs/swagger": "^11.2.5",
"@shipsec/component-sdk": "workspace:*",
"@shipsec/shared": "workspace:*",
"@shipsec/studio-worker": "workspace:*",
"@temporalio/client": "^1.11.3",
"@temporalio/worker": "^1.11.3",
"@temporalio/workflow": "^1.11.3",
"@types/express": "^5.0.3",
"@temporalio/client": "^1.14.1",
"@temporalio/worker": "^1.14.1",
"@temporalio/workflow": "^1.14.1",
"@types/express": "^5.0.6",
"@types/minio": "^7.1.1",
"ai": "^6.0.0-beta.68",
"ai": "^6.0.49",
"bcryptjs": "^3.0.3",
"class-transformer": "^0.5.1",
"class-validator": "^0.14.1",
"class-validator": "^0.14.3",
"date-fns": "^4.1.0",
"dotenv": "^17.2.3",
"drizzle-orm": "^0.44.6",
"ioredis": "^5.4.1",
"drizzle-orm": "^0.44.7",
"express": "^5.2.1",
"ioredis": "^5.9.2",
"kafkajs": "^2.2.4",
"long": "^5.2.4",
"long": "^5.3.2",
"minio": "^8.0.6",
"multer": "^2.0.2",
"nestjs-zod": "^5.0.1",
"pg": "^8.16.3",
"posthog-node": "^5.17.2",
"nestjs-zod": "^5.1.1",
"pg": "^8.17.2",
"posthog-node": "^5.24.2",
"reflect-metadata": "^0.2.2",
"swagger-ui-express": "^5.0.1",
"zod": "^4.1.12"
"zod": "^4.3.6"
},
"devDependencies": {
"@eslint/js": "^9.39.2",
"@nestjs/testing": "^10.4.0",
"@nestjs/testing": "^10.4.22",
"@types/bcryptjs": "^3.0.0",
"@types/express-serve-static-core": "^4.19.6",
"@types/express-serve-static-core": "^4.19.8",
"@types/har-format": "^1.2.16",
"@types/multer": "^2.0.0",
"@types/node": "^20.16.11",
"@types/pg": "^8.15.5",
"@types/node": "^20.19.30",
"@types/pg": "^8.16.0",
"@types/supertest": "^2.0.16",
"@typescript-eslint/eslint-plugin": "^8.53.0",
"@typescript-eslint/parser": "^8.53.0",
"bun-types": "^1.2.23",
"drizzle-kit": "^0.31.5",
"@typescript-eslint/eslint-plugin": "^8.53.1",
"@typescript-eslint/parser": "^8.53.1",
"bun-types": "^1.3.6",
"drizzle-kit": "^0.31.8",
"eslint": "^9.39.2",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-prettier": "^5.5.5",
"globals": "^17.0.0",
"prettier": "^3.8.0",
"supertest": "^7.1.4",
"typescript": "^5.6.3",
"typescript-eslint": "^8.53.0"
"globals": "^17.1.0",
"prettier": "^3.8.1",
"supertest": "^7.2.2",
"typescript": "^5.9.3",
"typescript-eslint": "^8.53.1"
}
}
2 changes: 2 additions & 0 deletions backend/src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import { TestingSupportModule } from './testing/testing.module';
import { IntegrationsModule } from './integrations/integrations.module';
import { SchedulesModule } from './schedules/schedules.module';
import { AnalyticsModule } from './analytics/analytics.module';
import { McpModule } from './mcp/mcp.module';

import { ApiKeysModule } from './api-keys/api-keys.module';
import { WebhooksModule } from './webhooks/webhooks.module';
Expand All @@ -37,6 +38,7 @@ const coreModules = [
ApiKeysModule,
WebhooksModule,
HumanInputsModule,
McpModule,
];

const testingModules = process.env.NODE_ENV === 'production' ? [] : [TestingSupportModule];
Expand Down
22 changes: 21 additions & 1 deletion backend/src/components/components.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import '@shipsec/studio-worker/components';
import {
componentRegistry,
extractPorts,
getToolSchema,
type CachedComponentMetadata,
} from '@shipsec/component-sdk';
import { categorizeComponent, getCategoryConfig } from './utils/categorization';
Expand Down Expand Up @@ -45,6 +46,8 @@ function serializeComponent(entry: CachedComponentMetadata) {
outputs: entry.outputs ?? [],
parameters: entry.parameters ?? [],
examples: metadata.examples ?? [],
agentTool: metadata.agentTool ?? null,
toolSchema: metadata.agentTool?.enabled ? getToolSchema(component) : null,
};
}

Expand Down Expand Up @@ -221,6 +224,15 @@ export class ComponentsController {
type: 'array',
items: { type: 'string' },
},
agentTool: {
type: 'object',
nullable: true,
properties: {
enabled: { type: 'boolean' },
toolName: { type: 'string', nullable: true },
toolDescription: { type: 'string', nullable: true },
},
},
},
},
},
Expand Down Expand Up @@ -334,9 +346,17 @@ export class ComponentsController {
},
parameters: { type: 'array' },
examples: { type: 'array' },
isLatest: { type: 'boolean', nullable: true },
deprecated: { type: 'boolean', nullable: true },
example: { type: 'string', nullable: true },
agentTool: {
type: 'object',
nullable: true,
properties: {
enabled: { type: 'boolean' },
toolName: { type: 'string', nullable: true },
toolDescription: { type: 'string', nullable: true },
},
},
},
},
})
Expand Down
8 changes: 8 additions & 0 deletions backend/src/components/utils/categorization.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ const SUPPORTED_CATEGORIES: readonly ComponentCategory[] = [
'input',
'transform',
'ai',
'mcp',
'security',
'it_ops',
'notification',
Expand Down Expand Up @@ -41,6 +42,13 @@ const COMPONENT_CATEGORY_CONFIG: Record<ComponentCategory, ComponentCategoryConf
emoji: '🤖',
icon: 'Brain',
},
mcp: {
label: 'MCP Servers',
color: 'text-teal-600',
description: 'Model Context Protocol servers and tool gateways',
emoji: '🔌',
icon: 'Plug',
},
security: {
label: 'Security Tools',
color: 'text-red-600',
Expand Down
Loading