summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--internal/api/elaborate.go10
-rw-r--r--web/app.js10
2 files changed, 15 insertions, 5 deletions
diff --git a/internal/api/elaborate.go b/internal/api/elaborate.go
index d275d61..00f3297 100644
--- a/internal/api/elaborate.go
+++ b/internal/api/elaborate.go
@@ -86,7 +86,8 @@ func (s *Server) claudeBinaryPath() string {
func (s *Server) handleElaborateTask(w http.ResponseWriter, r *http.Request) {
var input struct {
- Prompt string `json:"prompt"`
+ Prompt string `json:"prompt"`
+ WorkingDir string `json:"working_dir"`
}
if err := json.NewDecoder(r.Body).Decode(&input); err != nil {
writeJSON(w, http.StatusBadRequest, map[string]string{"error": "invalid JSON: " + err.Error()})
@@ -97,12 +98,17 @@ func (s *Server) handleElaborateTask(w http.ResponseWriter, r *http.Request) {
return
}
+ workDir := s.workDir
+ if input.WorkingDir != "" {
+ workDir = input.WorkingDir
+ }
+
ctx, cancel := context.WithTimeout(r.Context(), elaborateTimeout)
defer cancel()
cmd := exec.CommandContext(ctx, s.claudeBinaryPath(),
"-p", input.Prompt,
- "--system-prompt", buildElaboratePrompt(s.workDir),
+ "--system-prompt", buildElaboratePrompt(workDir),
"--output-format", "json",
"--model", "haiku",
)
diff --git a/web/app.js b/web/app.js
index 044d779..a3c425e 100644
--- a/web/app.js
+++ b/web/app.js
@@ -950,11 +950,11 @@ async function submitAnswer(taskId, questionId, answer, banner) {
// ── Elaborate (Draft with AI) ─────────────────────────────────────────────────
-async function elaborateTask(prompt) {
+async function elaborateTask(prompt, workingDir) {
const res = await fetch(`${API_BASE}/api/tasks/elaborate`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
- body: JSON.stringify({ prompt }),
+ body: JSON.stringify({ prompt, working_dir: workingDir }),
});
if (!res.ok) {
let msg = `HTTP ${res.status}`;
@@ -1699,7 +1699,11 @@ if (typeof document !== 'undefined') document.addEventListener('DOMContentLoaded
form.querySelectorAll('.form-error, .elaborate-banner').forEach(el => el.remove());
try {
- const result = await elaborateTask(prompt);
+ const sel = document.getElementById('project-select');
+ const workingDir = sel.value === '__new__'
+ ? document.getElementById('new-project-input').value.trim()
+ : sel.value;
+ const result = await elaborateTask(prompt, workingDir);
// Populate form fields
const f = document.getElementById('task-form');