Skip to content

Commit 9a4220f

Browse files
committed
code review fixes
1 parent e64004f commit 9a4220f

12 files changed

Lines changed: 62 additions & 39 deletions

File tree

frontend/src/components/service-table.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,7 @@ export const ServiceTable = Shade<ServiceTableProps>({
100100
/>
101101
</NestedRouteLink>
102102
<NestedRouteLink href={`/services/${entry.id}?${serializeToQueryString({ edit: true })}`}>
103-
<Button
104-
variant="text"
105-
size="small"
106-
title="Edit"
107-
startIcon={<Icon icon={icons.edit} size="small" />}
108-
/>
103+
<Button variant="text" size="small" title="Edit" startIcon={<Icon icon={icons.edit} size="small" />} />
109104
</NestedRouteLink>
110105
</div>
111106
),

frontend/src/pages/dashboard/index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ export const Dashboard = Shade<DashboardProps>({
108108
title={currentStack?.displayName ?? props.stackName}
109109
description={currentStack?.description}
110110
actions={
111-
<NestedRouteLink href="/stacks/:stackName/edit" params={{ stackName: props.stackName! }}>
111+
<NestedRouteLink href="/stacks/:stackName/edit" params={{ stackName: props.stackName }}>
112112
<Button variant="outlined" startIcon={<Icon icon={icons.edit} size="small" />}>
113113
Edit Stack
114114
</Button>
@@ -161,7 +161,7 @@ export const Dashboard = Shade<DashboardProps>({
161161
</Button>
162162
) : null}
163163
<div style={{ flex: '1' }} />
164-
<NestedRouteLink href="/services/wizard/:stackName" params={{ stackName: props.stackName! }}>
164+
<NestedRouteLink href="/services/wizard/:stackName" params={{ stackName: props.stackName }}>
165165
<Button variant="contained" startIcon={<Icon icon={icons.plus} size="small" />}>
166166
Create Service
167167
</Button>
@@ -189,7 +189,7 @@ export const Dashboard = Shade<DashboardProps>({
189189
}}
190190
>
191191
<h3 style={{ margin: '0', fontSize: '16px' }}>Repositories ({repos.length})</h3>
192-
<NestedRouteLink href="/repositories/create/:stackName" params={{ stackName: props.stackName! }}>
192+
<NestedRouteLink href="/repositories/create/:stackName" params={{ stackName: props.stackName }}>
193193
<Button variant="outlined" startIcon={<Icon icon={icons.plus} size="small" />}>
194194
Add Repository
195195
</Button>

frontend/src/pages/services/service-detail.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ const eventLabels: Record<string, string> = {
3838
'build-completed': 'Build completed',
3939
'build-failed': 'Build failed',
4040
'pull-completed': 'Pull completed',
41-
'imported': 'Imported',
41+
imported: 'Imported',
4242
}
4343

4444
type ServiceDetailProps = {

frontend/src/pages/stacks/create-stack.tsx

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,7 @@ export const CreateStack = Shade({
4040
<PageContainer>
4141
<PageHeader icon="➕" title="Create Stack" description="Set up a new stack to manage your services." />
4242
<Paper>
43-
<StackForm
44-
mode="create"
45-
onSubmit={(data) => void handleSubmit(data)}
46-
cancelHref="/"
47-
/>
43+
<StackForm mode="create" onSubmit={(data) => void handleSubmit(data)} cancelHref="/" />
4844
</Paper>
4945
</PageContainer>
5046
)

frontend/src/pages/stacks/edit-stack.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -146,12 +146,7 @@ export const EditStack = Shade<EditStackProps>({
146146
}
147147
/>
148148
<Paper>
149-
<StackForm
150-
mode="edit"
151-
initial={stack}
152-
onSubmit={(data) => void handleSave(data)}
153-
cancelHref="/"
154-
/>
149+
<StackForm mode="edit" initial={stack} onSubmit={(data) => void handleSave(data)} cancelHref="/" />
155150
</Paper>
156151
{isConfirmingDelete ? (
157152
<ConfirmDialog

service/src/app-models/data-store/setup-data-store.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import type { Options, Sequelize } from 'sequelize'
2020
import sqlite from 'sqlite3'
2121
import { join } from 'path'
2222

23-
import { authorizedDataSet, dataDir } from '../../config.js'
23+
import { authorizedDataSet, dataDir, ensureDataDir } from '../../config.js'
2424

2525
// --- Sequelize Model classes ---
2626

@@ -389,6 +389,7 @@ async function initAllModels(sequelize: Sequelize): Promise<void> {
389389
}
390390

391391
export const setupDataStore = async (injector: Injector) => {
392+
ensureDataDir()
392393
const logger = getLogger(injector).withScope('DataStore')
393394
const dbOptions = getDbOptions()
394395

service/src/app-models/stacks/setup-stacks-rest-api.ts

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,14 @@ export const setupStacksRestApi = async (injector: Injector) => {
117117
const svcs = await svcDs.find(i, { filter: { stackName: { $eq: id } }, select: ['id'] })
118118
const svcIds = svcs.map((svc) => svc.id)
119119
if (svcIds.length > 0) {
120-
await repo.getDataSetFor(ServiceStatus, 'serviceId').remove(i, ...svcIds).catch(() => {})
121-
await repo.getDataSetFor(ServiceConfig, 'serviceId').remove(i, ...svcIds).catch(() => {})
120+
await repo
121+
.getDataSetFor(ServiceStatus, 'serviceId')
122+
.remove(i, ...svcIds)
123+
.catch(() => {})
124+
await repo
125+
.getDataSetFor(ServiceConfig, 'serviceId')
126+
.remove(i, ...svcIds)
127+
.catch(() => {})
122128
await svcDs.remove(i, ...svcIds).catch(() => {})
123129
}
124130

@@ -127,15 +133,21 @@ export const setupStacksRestApi = async (injector: Injector) => {
127133
.find(i, { filter: { stackName: { $eq: id } }, select: ['id'] })
128134
const repoIds = repos.map((r) => r.id)
129135
if (repoIds.length > 0) {
130-
await repo.getDataSetFor(GitHubRepository, 'id').remove(i, ...repoIds).catch(() => {})
136+
await repo
137+
.getDataSetFor(GitHubRepository, 'id')
138+
.remove(i, ...repoIds)
139+
.catch(() => {})
131140
}
132141

133142
const deps = await repo
134143
.getDataSetFor(Dependency, 'id')
135144
.find(i, { filter: { stackName: { $eq: id } }, select: ['id'] })
136145
const depIds = deps.map((d) => d.id)
137146
if (depIds.length > 0) {
138-
await repo.getDataSetFor(Dependency, 'id').remove(i, ...depIds).catch(() => {})
147+
await repo
148+
.getDataSetFor(Dependency, 'id')
149+
.remove(i, ...depIds)
150+
.catch(() => {})
139151
}
140152

141153
await repo

service/src/config.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ import { mkdirSync } from 'fs'
1010
import { join } from 'path'
1111

1212
export const dataDir = process.env.STACK_CRAFT_DATA_DIR || join(process.cwd(), 'data')
13-
mkdirSync(dataDir, { recursive: true })
13+
14+
export const ensureDataDir = () => {
15+
mkdirSync(dataDir, { recursive: true })
16+
}
1417

1518
export const authorizedOnly = async (options: { injector: Injector }): Promise<AuthorizationResult> => {
1619
const isAllowed = await isAuthenticated(options.injector)

service/src/mcp/mcp-server.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ export const createMcpRequestHandler = (injector: Injector, sessionManager: McpS
237237
return async (req: IncomingMessage, res: ServerResponse) => {
238238
try {
239239
const authHeader = req.headers.authorization
240-
const user = await resolveTokenUser(injector, authHeader)
240+
const user = await resolveTokenUser(injector, authHeader, elevated)
241241
if (!user) {
242242
res.writeHead(401, { 'Content-Type': 'application/json' })
243243
res.end(JSON.stringify({ error: 'Unauthorized. Provide a valid Bearer token.' }))

service/src/mcp/setup-mcp.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,14 @@ export class McpHttpServer {
5151
}
5252
}
5353

54+
export const getMcpPort = (env = process.env) => parseInt(env.MCP_PORT as string, 10) || 9091
55+
5456
/**
5557
* Sets up the MCP endpoint on a separate port.
5658
* MCP clients connect to this endpoint using Streamable HTTP transport.
5759
*/
5860
export const setupMcp = (injector: Injector) => {
59-
const port = parseInt(process.env.MCP_PORT as string, 10) || 9091
61+
const port = getMcpPort()
6062
const mcpServer = injector.getInstance(McpHttpServer)
6163
mcpServer.listen(injector, port)
6264
}

0 commit comments

Comments
 (0)