summaryrefslogtreecommitdiffhomepage
path: root/packages/app
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-01-22 07:41:20 -0600
committerAdam <[email protected]>2026-01-22 07:42:56 -0600
commit16fad51b5ed572571ffb01159714756049b8a452 (patch)
treeffebb90c34e367cf372b33422db98fc071f218e9 /packages/app
parent287511c9b1320a2a8a464531c2a5f4e02cd259bf (diff)
downloadopencode-16fad51b5ed572571ffb01159714756049b8a452.tar.gz
opencode-16fad51b5ed572571ffb01159714756049b8a452.zip
feat(app): add workspace startup script to projects
Diffstat (limited to 'packages/app')
-rw-r--r--packages/app/src/components/dialog-edit-project.tsx15
-rw-r--r--packages/app/src/i18n/en.ts3
2 files changed, 18 insertions, 0 deletions
diff --git a/packages/app/src/components/dialog-edit-project.tsx b/packages/app/src/components/dialog-edit-project.tsx
index 9cf7ce575..7664470f7 100644
--- a/packages/app/src/components/dialog-edit-project.tsx
+++ b/packages/app/src/components/dialog-edit-project.tsx
@@ -25,6 +25,7 @@ export function DialogEditProject(props: { project: LocalProject }) {
name: defaultName(),
color: props.project.icon?.color || "pink",
iconUrl: props.project.icon?.override || "",
+ startup: props.project.commands?.start ?? "",
saving: false,
})
@@ -69,15 +70,18 @@ export function DialogEditProject(props: { project: LocalProject }) {
async function handleSubmit(e: SubmitEvent) {
e.preventDefault()
+
if (!props.project.id) return
setStore("saving", true)
const name = store.name.trim() === folderName() ? "" : store.name.trim()
+ const start = store.startup.trim()
await globalSDK.client.project.update({
projectID: props.project.id,
directory: props.project.worktree,
name,
icon: { color: store.color, override: store.iconUrl },
+ commands: { start },
})
setStore("saving", false)
dialog.close()
@@ -215,6 +219,17 @@ export function DialogEditProject(props: { project: LocalProject }) {
</div>
</div>
</Show>
+
+ <TextField
+ multiline
+ label={language.t("dialog.project.edit.worktree.startup")}
+ description={language.t("dialog.project.edit.worktree.startup.description")}
+ placeholder={language.t("dialog.project.edit.worktree.startup.placeholder")}
+ value={store.startup}
+ onChange={(v) => setStore("startup", v)}
+ spellcheck={false}
+ class="max-h-40 w-full font-mono text-xs no-scrollbar"
+ />
</div>
<div class="flex justify-end gap-2">
diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts
index 8249c68f9..f2ba88c59 100644
--- a/packages/app/src/i18n/en.ts
+++ b/packages/app/src/i18n/en.ts
@@ -257,6 +257,9 @@ export const dict = {
"dialog.project.edit.icon.recommended": "Recommended: 128x128px",
"dialog.project.edit.color": "Color",
"dialog.project.edit.color.select": "Select {{color}} color",
+ "dialog.project.edit.worktree.startup": "Workspace startup script",
+ "dialog.project.edit.worktree.startup.description": "Runs after creating a new workspace (worktree).",
+ "dialog.project.edit.worktree.startup.placeholder": "e.g. bun install",
"context.breakdown.title": "Context Breakdown",
"context.breakdown.note": 'Approximate breakdown of input tokens. "Other" includes tool definitions and overhead.',