feinai 0.6.3 → 0.6.4

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "feinai",
3
- "version": "0.6.3",
3
+ "version": "0.6.4",
4
4
  "description": "Task & spec manager for AI agents — parallel worktrees, live dashboard, SDD skills",
5
5
  "type": "module",
6
6
  "bin": {
package/src/cli.ts CHANGED
@@ -48,7 +48,7 @@ import {
48
48
  type OutputFormat,
49
49
  } from "./format";
50
50
 
51
- const VERSION = "0.6.3";
51
+ const VERSION = "0.6.4";
52
52
 
53
53
  interface ParsedArgs {
54
54
  positional: string[];
@@ -396,20 +396,20 @@ function cmdInit(args: ParsedArgs): void {
396
396
  const path = initDb();
397
397
  console.log(`Initialized feinai DB at ${path}`);
398
398
 
399
- // Auto-add .tasca/ to .gitignore if inside a git repo
399
+ // Auto-add .feinai/ to .gitignore if inside a git repo
400
400
  if (existsSync(".git")) {
401
401
  const gitignorePath = ".gitignore";
402
- const entry = ".tasca/";
402
+ const entry = ".feinai/";
403
403
 
404
404
  if (!existsSync(gitignorePath)) {
405
405
  writeFileSync(gitignorePath, entry + "\n");
406
- console.log(".tasca/ added to .gitignore");
406
+ console.log(".feinai/ added to .gitignore");
407
407
  } else {
408
408
  const content = readFileSync(gitignorePath, "utf-8");
409
409
  if (!content.includes(entry)) {
410
410
  const separator = content.endsWith("\n") ? "" : "\n";
411
411
  writeFileSync(gitignorePath, content + separator + entry + "\n");
412
- console.log(".tasca/ added to .gitignore");
412
+ console.log(".feinai/ added to .gitignore");
413
413
  }
414
414
  }
415
415
  }
@@ -1158,6 +1158,9 @@
1158
1158
  if (taskData.status === "completed" || taskData.status === "failed") {
1159
1159
  actions.push(`<button class="btn" data-action="reopen" data-id="${escapeHtml(taskData.id)}">↩ reopen</button>`);
1160
1160
  }
1161
+ if (taskData.spec_id) {
1162
+ actions.unshift(`<button class="btn" data-action="back-to-spec" data-spec="${escapeHtml(taskData.spec_id)}">← ${escapeHtml(taskData.spec_id)}</button>`);
1163
+ }
1161
1164
  setModalBody(`
1162
1165
  ${actions.length ? `<div class="modal-actions">${actions.join("")}</div>` : ""}
1163
1166
  <div class="modal-section">
@@ -1360,6 +1363,9 @@
1360
1363
  await api("POST", `/api/tasks`, body);
1361
1364
  toast("Task created", body.id);
1362
1365
  closeModal();
1366
+ } else if (action === "back-to-spec") {
1367
+ const specId = btn.dataset.spec;
1368
+ if (specId) openSpecModal(specId);
1363
1369
  }
1364
1370
  } catch (err) {
1365
1371
  toast("Error", err.message, true);
@@ -1463,7 +1469,7 @@
1463
1469
  <div class="worktree-context">
1464
1470
  <div class="context-row"><span class="context-label">Working directory</span><span class="context-value">${escapeHtml(workingDir)}</span></div>
1465
1471
  <div class="context-row"><span class="context-label">Repo</span><span class="context-value">${escapeHtml(repoName)}</span></div>
1466
- <div class="context-row"><span class="context-label">.tasca</span><span class="context-value">${escapeHtml(tascaLoc)}</span></div>
1472
+ <div class="context-row"><span class="context-label">.feinai</span><span class="context-value">${escapeHtml(tascaLoc)}</span></div>
1467
1473
  </div>
1468
1474
  <span class="elapsed-time" data-elapsed="${escapeHtml(task.taken_at ?? '')}"></span>
1469
1475
  </div>
package/src/db.ts CHANGED
@@ -183,7 +183,7 @@ function applySchema(db: DbInstance): void {
183
183
  }
184
184
 
185
185
  /**
186
- * Find .tasca/tasca.db by walking up from cwd, like git does with .git.
186
+ * Find .feinai/feinai.db by walking up from cwd, like git does with .git.
187
187
  * Returns null if no DB exists in the tree above the starting directory.
188
188
  */
189
189
  export function findDbPath(startDir: string = process.cwd()): string | null {
@@ -200,7 +200,7 @@ export function findDbPath(startDir: string = process.cwd()): string | null {
200
200
  }
201
201
 
202
202
  /**
203
- * Initialize a new tasca DB in the given directory (default: cwd).
203
+ * Initialize a new feinai DB in the given directory (default: cwd).
204
204
  * Returns the absolute path of the created DB file.
205
205
  */
206
206
  export function initDb(dir: string = process.cwd()): string {