@frehilm/ordna-cli 0.1.4 → 0.2.1

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.
Files changed (66) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +14 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/assign.d.ts.map +1 -1
  5. package/dist/commands/assign.js +3 -2
  6. package/dist/commands/assign.js.map +1 -1
  7. package/dist/commands/commit.d.ts.map +1 -1
  8. package/dist/commands/commit.js +3 -2
  9. package/dist/commands/commit.js.map +1 -1
  10. package/dist/commands/create.d.ts.map +1 -1
  11. package/dist/commands/create.js +8 -3
  12. package/dist/commands/create.js.map +1 -1
  13. package/dist/commands/init.d.ts +15 -1
  14. package/dist/commands/init.d.ts.map +1 -1
  15. package/dist/commands/init.js +67 -17
  16. package/dist/commands/init.js.map +1 -1
  17. package/dist/commands/list.d.ts.map +1 -1
  18. package/dist/commands/list.js +3 -2
  19. package/dist/commands/list.js.map +1 -1
  20. package/dist/commands/move.d.ts.map +1 -1
  21. package/dist/commands/move.js +3 -2
  22. package/dist/commands/move.js.map +1 -1
  23. package/dist/commands/show.d.ts.map +1 -1
  24. package/dist/commands/show.js +3 -2
  25. package/dist/commands/show.js.map +1 -1
  26. package/dist/lib/ensure-context.d.ts +19 -0
  27. package/dist/lib/ensure-context.d.ts.map +1 -0
  28. package/dist/lib/ensure-context.js +39 -0
  29. package/dist/lib/ensure-context.js.map +1 -0
  30. package/dist/lib/prompt-mode.d.ts +12 -0
  31. package/dist/lib/prompt-mode.d.ts.map +1 -0
  32. package/dist/lib/prompt-mode.js +43 -0
  33. package/dist/lib/prompt-mode.js.map +1 -0
  34. package/dist/tui/App.d.ts.map +1 -1
  35. package/dist/tui/App.js +59 -4
  36. package/dist/tui/App.js.map +1 -1
  37. package/dist/tui/LineInput.d.ts +26 -0
  38. package/dist/tui/LineInput.d.ts.map +1 -0
  39. package/dist/tui/LineInput.js +114 -0
  40. package/dist/tui/LineInput.js.map +1 -0
  41. package/dist/tui/SetupModal.d.ts +14 -0
  42. package/dist/tui/SetupModal.d.ts.map +1 -0
  43. package/dist/tui/SetupModal.js +67 -0
  44. package/dist/tui/SetupModal.js.map +1 -0
  45. package/dist/tui/Sidebar.d.ts +1 -1
  46. package/dist/tui/Sidebar.d.ts.map +1 -1
  47. package/dist/tui/Sidebar.js +20 -2
  48. package/dist/tui/Sidebar.js.map +1 -1
  49. package/dist/tui/TaskDetail.d.ts.map +1 -1
  50. package/dist/tui/TaskDetail.js +1 -1
  51. package/dist/tui/TaskDetail.js.map +1 -1
  52. package/dist/tui/TaskEditor.d.ts.map +1 -1
  53. package/dist/tui/TaskEditor.js +96 -28
  54. package/dist/tui/TaskEditor.js.map +1 -1
  55. package/dist/tui/TextPrompt.d.ts.map +1 -1
  56. package/dist/tui/TextPrompt.js +2 -2
  57. package/dist/tui/TextPrompt.js.map +1 -1
  58. package/dist/tui/hooks.d.ts +17 -0
  59. package/dist/tui/hooks.d.ts.map +1 -1
  60. package/dist/tui/hooks.js +53 -1
  61. package/dist/tui/hooks.js.map +1 -1
  62. package/dist/tui/index.d.ts.map +1 -1
  63. package/dist/tui/index.js +38 -3
  64. package/dist/tui/index.js.map +1 -1
  65. package/package.json +3 -3
  66. package/templates/AGENTS.md +25 -0
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,wBAAgB,YAAY,IAAI,OAAO,CAkGtC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,wBAAgB,YAAY,IAAI,OAAO,CAqHtC"}
package/dist/cli.js CHANGED
@@ -17,7 +17,20 @@ export function buildProgram() {
17
17
  program
18
18
  .command("init")
19
19
  .description("Create .ordna/config.yaml and tasks/ if missing")
20
- .action(() => runInit());
20
+ .option("-s, --storage <mode>", "explicit storage mode: file | hybrid | namespace (skips auto-detect)")
21
+ .action(async (opts) => {
22
+ const storage = opts.storage === "file" ||
23
+ opts.storage === "hybrid" ||
24
+ opts.storage === "namespace"
25
+ ? opts.storage
26
+ : undefined;
27
+ if (opts.storage && !storage) {
28
+ console.error(`Invalid --storage value: "${opts.storage}". Use file, hybrid, or namespace.`);
29
+ process.exitCode = 1;
30
+ return;
31
+ }
32
+ await runInit(storage ? { storage } : {});
33
+ });
21
34
  program
22
35
  .command("list")
23
36
  .alias("ls")
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"assign.d.ts","sourceRoot":"","sources":["../../src/commands/assign.ts"],"names":[],"mappings":"AAGA,wBAAsB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAWvF"}
1
+ {"version":3,"file":"assign.d.ts","sourceRoot":"","sources":["../../src/commands/assign.ts"],"names":[],"mappings":"AAIA,wBAAsB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAWvF"}
@@ -1,7 +1,8 @@
1
- import { createContext, updateTask } from "@frehilm/ordna-core";
1
+ import { updateTask } from "@frehilm/ordna-core";
2
+ import { ensureContextOrExit } from "../lib/ensure-context.js";
2
3
  import { c } from "../colors.js";
3
4
  export async function runAssign(id, assignee) {
4
- const ctx = createContext();
5
+ const ctx = await ensureContextOrExit();
5
6
  const value = assignee && assignee.length > 0 ? assignee : null;
6
7
  try {
7
8
  const task = await updateTask(id, { assignee: value }, ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"assign.js","sourceRoot":"","sources":["../../src/commands/assign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,EAAU,EAAE,QAA4B;IACvE,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC;QAC5D,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;;YAC5D,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACtB,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"assign.js","sourceRoot":"","sources":["../../src/commands/assign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,EAAU,EAAE,QAA4B;IACvE,MAAM,GAAG,GAAG,MAAM,mBAAmB,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC;QAC5D,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;;YAC5D,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACtB,CAAC;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"commit.d.ts","sourceRoot":"","sources":["../../src/commands/commit.ts"],"names":[],"mappings":"AAGA,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAS1E"}
1
+ {"version":3,"file":"commit.d.ts","sourceRoot":"","sources":["../../src/commands/commit.ts"],"names":[],"mappings":"AAIA,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAS1E"}
@@ -1,7 +1,8 @@
1
- import { commitTasks, createContext } from "@frehilm/ordna-core";
1
+ import { commitTasks } from "@frehilm/ordna-core";
2
+ import { ensureContextOrExit } from "../lib/ensure-context.js";
2
3
  import { c } from "../colors.js";
3
4
  export async function runCommit(message) {
4
- const ctx = createContext();
5
+ const ctx = await ensureContextOrExit();
5
6
  try {
6
7
  await commitTasks(ctx, message);
7
8
  console.log(c.green("Committed."));
@@ -1 +1 @@
1
- {"version":3,"file":"commit.js","sourceRoot":"","sources":["../../src/commands/commit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAA2B;IAC1D,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,IAAI,CAAC;QACJ,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACtB,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"commit.js","sourceRoot":"","sources":["../../src/commands/commit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAA2B;IAC1D,MAAM,GAAG,GAAG,MAAM,mBAAmB,EAAE,CAAC;IACxC,IAAI,CAAC;QACJ,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACtB,CAAC;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/E,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBzF"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAIhE,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBzF"}
@@ -1,4 +1,5 @@
1
- import { createContext, createTask } from "@frehilm/ordna-core";
1
+ import { createTask } from "@frehilm/ordna-core";
2
+ import { ensureContextOrExit } from "../lib/ensure-context.js";
2
3
  import { c } from "../colors.js";
3
4
  export async function runCreate(title, options = {}) {
4
5
  if (!title || title.trim().length === 0) {
@@ -6,7 +7,7 @@ export async function runCreate(title, options = {}) {
6
7
  process.exitCode = 1;
7
8
  return;
8
9
  }
9
- const ctx = createContext();
10
+ const ctx = await ensureContextOrExit();
10
11
  const task = await createTask({
11
12
  title,
12
13
  assignee: options.assignee ?? null,
@@ -16,6 +17,10 @@ export async function runCreate(title, options = {}) {
16
17
  status: options.status,
17
18
  }, ctx);
18
19
  console.log(c.green(`Created ${c.bold(task.id)}: ${task.title}`));
19
- console.log(c.dim(` ${task.filePath}`));
20
+ // Namespace-mode tasks have no on-disk path — skip the path line
21
+ // rather than printing `undefined`. The id is the durable handle.
22
+ if (task.filePath) {
23
+ console.log(c.dim(` ${task.filePath}`));
24
+ }
20
25
  }
21
26
  //# sourceMappingURL=create.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAiB,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAUjC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAa,EAAE,UAAyB,EAAE;IACzE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACR,CAAC;IACD,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,MAAM,UAAU,CAC5B;QACC,KAAK;QACL,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI;QAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI;QAClC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;QACxB,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE;QACnC,MAAM,EAAE,OAAO,CAAC,MAAM;KACtB,EACD,GAAG,CACH,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiB,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAUjC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAa,EAAE,UAAyB,EAAE;IACzE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACR,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,mBAAmB,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,UAAU,CAC5B;QACC,KAAK;QACL,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI;QAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI;QAClC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;QACxB,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE;QACnC,MAAM,EAAE,OAAO,CAAC,MAAM;KACtB,EACD,GAAG,CACH,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAClE,iEAAiE;IACjE,kEAAkE;IAClE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;AACF,CAAC"}
@@ -1,2 +1,16 @@
1
- export declare function runInit(cwd?: string): void;
1
+ export interface InitOptions {
2
+ storage?: "file" | "hybrid" | "namespace";
3
+ }
4
+ /**
5
+ * Initialise Ordna in the current directory.
6
+ *
7
+ * - `--storage=file|hybrid|namespace` skips detection entirely and
8
+ * writes the chosen mode (the chosen mode dictates whether
9
+ * `tasks/` is created).
10
+ * - Without `--storage`, runs detection. Confident modes auto-write.
11
+ * On the "ask" branch (git repo, no signals), prompts the user.
12
+ * - If `.ordna/config.yaml` already exists, this is a no-op (preserves
13
+ * existing behaviour).
14
+ */
15
+ export declare function runInit(options?: InitOptions, cwd?: string): Promise<void>;
2
16
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAaA,wBAAgB,OAAO,CAAC,GAAG,GAAE,MAAsB,GAAG,IAAI,CA0BzD"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,WAAW;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC;CAC1C;AAYD;;;;;;;;;;GAUG;AACH,wBAAsB,OAAO,CAC5B,OAAO,GAAE,WAAgB,EACzB,GAAG,GAAE,MAAsB,GACzB,OAAO,CAAC,IAAI,CAAC,CAoEf"}
@@ -1,7 +1,10 @@
1
1
  import { existsSync, mkdirSync, writeFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
+ import { detectStorageMode, writeStorageConfig, } from "@frehilm/ordna-core";
3
4
  import { c } from "../colors.js";
4
- const TEMPLATE = `# Ordna config — all keys optional.
5
+ import { promptStorageMode } from "../lib/prompt-mode.js";
6
+ const FILE_MODE_TEMPLATE = `# Ordna config — all keys optional.
7
+ storage: file
5
8
  tasksDir: tasks
6
9
  schema: ordna
7
10
  statuses: [todo, doing, done]
@@ -9,29 +12,76 @@ idPrefix: T
9
12
  zeroPaddedIds: 3
10
13
  webPort: 7420
11
14
  `;
12
- export function runInit(cwd = process.cwd()) {
15
+ /**
16
+ * Initialise Ordna in the current directory.
17
+ *
18
+ * - `--storage=file|hybrid|namespace` skips detection entirely and
19
+ * writes the chosen mode (the chosen mode dictates whether
20
+ * `tasks/` is created).
21
+ * - Without `--storage`, runs detection. Confident modes auto-write.
22
+ * On the "ask" branch (git repo, no signals), prompts the user.
23
+ * - If `.ordna/config.yaml` already exists, this is a no-op (preserves
24
+ * existing behaviour).
25
+ */
26
+ export async function runInit(options = {}, cwd = process.cwd()) {
13
27
  const configDir = join(cwd, ".ordna");
14
28
  const configFile = join(configDir, "config.yaml");
15
- const tasksDir = join(cwd, "tasks");
16
- let created = 0;
29
+ if (existsSync(configFile)) {
30
+ console.log(c.dim("Ordna already initialized in this repo."));
31
+ return;
32
+ }
33
+ // Decide storage mode: explicit flag, then detection, then prompt.
34
+ let storage;
35
+ if (options.storage) {
36
+ storage = options.storage;
37
+ }
38
+ else {
39
+ const detected = await detectStorageMode(cwd);
40
+ if (detected.mode === "ask") {
41
+ if (process.stdin.isTTY) {
42
+ storage = await promptStorageMode();
43
+ }
44
+ else {
45
+ console.error(c.red("This directory is a git repo with no storage signals, and this isn't an interactive shell."));
46
+ console.error(c.dim(" Re-run with `ordna init --storage=file|hybrid|namespace`."));
47
+ process.exit(1);
48
+ }
49
+ }
50
+ else if (detected.mode === "default-file") {
51
+ storage = "file";
52
+ }
53
+ else {
54
+ storage = detected.mode;
55
+ }
56
+ }
17
57
  if (!existsSync(configDir)) {
18
58
  mkdirSync(configDir, { recursive: true });
19
- created++;
20
59
  }
21
- if (!existsSync(configFile)) {
22
- writeFileSync(configFile, TEMPLATE, "utf8");
23
- created++;
60
+ // File mode keeps the full default template (visible defaults are
61
+ // good docs for new users). Hybrid + namespace get the minimal
62
+ // config from `writeStorageConfig` (just the storage key).
63
+ if (storage === "file") {
64
+ writeFileSync(configFile, FILE_MODE_TEMPLATE, "utf8");
65
+ const tasksDir = join(cwd, "tasks");
66
+ if (!existsSync(tasksDir)) {
67
+ mkdirSync(tasksDir, { recursive: true });
68
+ }
24
69
  }
25
- if (!existsSync(tasksDir)) {
26
- mkdirSync(tasksDir, { recursive: true });
27
- created++;
70
+ else {
71
+ writeStorageConfig(cwd, storage);
72
+ if (storage === "hybrid") {
73
+ // Hybrid still uses files; create the tasks/ dir so subsequent
74
+ // `ordna create` calls find a writable location.
75
+ const tasksDir = join(cwd, "tasks");
76
+ if (!existsSync(tasksDir)) {
77
+ mkdirSync(tasksDir, { recursive: true });
78
+ }
79
+ }
28
80
  }
29
- if (created === 0) {
30
- console.log(c.dim("Ordna already initialized in this repo."));
31
- return;
32
- }
33
- console.log(c.green("Initialized Ordna."));
81
+ console.log(c.green(`Initialized Ordna (storage: ${c.bold(storage)}).`));
34
82
  console.log(c.dim(` ${configFile}`));
35
- console.log(c.dim(` ${tasksDir}/`));
83
+ if (storage !== "namespace") {
84
+ console.log(c.dim(` ${join(cwd, "tasks")}/`));
85
+ }
36
86
  }
37
87
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAEjC,MAAM,QAAQ,GAAG;;;;;;;CAOhB,CAAC;AAEF,MAAM,UAAU,OAAO,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAEpC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,OAAO,EAAE,CAAC;IACX,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC5C,OAAO,EAAE,CAAC;IACX,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,OAAO,EAAE,CAAC;IACX,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAC;QAC9D,OAAO;IACR,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,UAAU,EAAE,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAED,wBAAsB,OAAO,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAUtE"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAED,wBAAsB,OAAO,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAUtE"}
@@ -1,8 +1,9 @@
1
- import { createContext, listTasks } from "@frehilm/ordna-core";
1
+ import { listTasks } from "@frehilm/ordna-core";
2
+ import { ensureContextOrExit } from "../lib/ensure-context.js";
2
3
  import { c } from "../colors.js";
3
4
  import { formatListRow, summarizeStatuses } from "../format.js";
4
5
  export async function runList(options = {}) {
5
- const ctx = createContext();
6
+ const ctx = await ensureContextOrExit();
6
7
  const tasks = await listTasks(ctx, options);
7
8
  if (tasks.length === 0) {
8
9
  console.log(c.dim("No tasks. Create one with `ordna create \"title\"`."));
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAQhE,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,UAAuB,EAAE;IACtD,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAC;QAC1E,OAAO;IACR,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAQhE,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,UAAuB,EAAE;IACtD,MAAM,GAAG,GAAG,MAAM,mBAAmB,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAC;QAC1E,OAAO;IACR,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACnD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"move.d.ts","sourceRoot":"","sources":["../../src/commands/move.ts"],"names":[],"mappings":"AAIA,wBAAsB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASvE"}
1
+ {"version":3,"file":"move.d.ts","sourceRoot":"","sources":["../../src/commands/move.ts"],"names":[],"mappings":"AAKA,wBAAsB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASvE"}
@@ -1,8 +1,9 @@
1
- import { createContext, moveTask } from "@frehilm/ordna-core";
1
+ import { moveTask } from "@frehilm/ordna-core";
2
+ import { ensureContextOrExit } from "../lib/ensure-context.js";
2
3
  import { c } from "../colors.js";
3
4
  import { colorStatus } from "../format.js";
4
5
  export async function runMove(id, status) {
5
- const ctx = createContext();
6
+ const ctx = await ensureContextOrExit();
6
7
  try {
7
8
  const task = await moveTask(id, status, ctx);
8
9
  console.log(`${c.bold(task.id)} → ${colorStatus(task.status)}`);
@@ -1 +1 @@
1
- {"version":3,"file":"move.js","sourceRoot":"","sources":["../../src/commands/move.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAU,EAAE,MAAc;IACvD,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACtB,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"move.js","sourceRoot":"","sources":["../../src/commands/move.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAU,EAAE,MAAc;IACvD,MAAM,GAAG,GAAG,MAAM,mBAAmB,EAAE,CAAC;IACxC,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACtB,CAAC;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../src/commands/show.ts"],"names":[],"mappings":"AAIA,wBAAsB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQvD"}
1
+ {"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../src/commands/show.ts"],"names":[],"mappings":"AAKA,wBAAsB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQvD"}
@@ -1,8 +1,9 @@
1
- import { createContext, getTask } from "@frehilm/ordna-core";
1
+ import { getTask } from "@frehilm/ordna-core";
2
+ import { ensureContextOrExit } from "../lib/ensure-context.js";
2
3
  import { c } from "../colors.js";
3
4
  import { formatTask } from "../format.js";
4
5
  export async function runShow(id) {
5
- const task = await getTask(id, createContext());
6
+ const task = await getTask(id, await ensureContextOrExit());
6
7
  if (!task) {
7
8
  console.error(c.red(`Task ${id} not found.`));
8
9
  process.exitCode = 1;
@@ -1 +1 @@
1
- {"version":3,"file":"show.js","sourceRoot":"","sources":["../../src/commands/show.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAU;IACvC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACR,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"show.js","sourceRoot":"","sources":["../../src/commands/show.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAU;IACvC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,EAAE,EAAE,MAAM,mBAAmB,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACR,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { type StoreContext } from "@frehilm/ordna-core";
2
+ /**
3
+ * Wrap `createContext` with the auto-detect + prompt flow used by
4
+ * every one-shot CLI command. Handles three cases:
5
+ *
6
+ * 1. **Storage already known** (config file present OR `ORDNA_STORAGE`
7
+ * env var set OR detection lands on a confident mode) — runs as
8
+ * today, no interaction.
9
+ * 2. **`NeedsModeSelection` + TTY** — prompt the user 1/2/3, write
10
+ * the chosen config, retry.
11
+ * 3. **`NeedsModeSelection` + non-TTY** — print a clear error pointing
12
+ * at `ordna init` and the `ORDNA_STORAGE` env var, then exit with
13
+ * code 1.
14
+ *
15
+ * Returns the constructed `StoreContext` on success, or never returns
16
+ * when it exits the process on the non-TTY path.
17
+ */
18
+ export declare function ensureContextOrExit(): Promise<StoreContext>;
19
+ //# sourceMappingURL=ensure-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-context.d.ts","sourceRoot":"","sources":["../../src/lib/ensure-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,KAAK,YAAY,EAEjB,MAAM,qBAAqB,CAAC;AAI7B;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,YAAY,CAAC,CAwBjE"}
@@ -0,0 +1,39 @@
1
+ import { createContext, ensureStorageConfig, NeedsModeSelection, writeStorageConfig, } from "@frehilm/ordna-core";
2
+ import { c } from "../colors.js";
3
+ import { promptStorageMode } from "./prompt-mode.js";
4
+ /**
5
+ * Wrap `createContext` with the auto-detect + prompt flow used by
6
+ * every one-shot CLI command. Handles three cases:
7
+ *
8
+ * 1. **Storage already known** (config file present OR `ORDNA_STORAGE`
9
+ * env var set OR detection lands on a confident mode) — runs as
10
+ * today, no interaction.
11
+ * 2. **`NeedsModeSelection` + TTY** — prompt the user 1/2/3, write
12
+ * the chosen config, retry.
13
+ * 3. **`NeedsModeSelection` + non-TTY** — print a clear error pointing
14
+ * at `ordna init` and the `ORDNA_STORAGE` env var, then exit with
15
+ * code 1.
16
+ *
17
+ * Returns the constructed `StoreContext` on success, or never returns
18
+ * when it exits the process on the non-TTY path.
19
+ */
20
+ export async function ensureContextOrExit() {
21
+ try {
22
+ await ensureStorageConfig(process.cwd());
23
+ return createContext();
24
+ }
25
+ catch (err) {
26
+ if (!(err instanceof NeedsModeSelection))
27
+ throw err;
28
+ if (process.stdin.isTTY) {
29
+ const mode = await promptStorageMode();
30
+ writeStorageConfig(process.cwd(), mode);
31
+ return createContext();
32
+ }
33
+ // Non-TTY: be explicit about how to recover.
34
+ console.error(c.red("No .ordna/config.yaml found and this isn't an interactive shell."));
35
+ console.error(c.dim(" Run `ordna init` from a terminal, or set ORDNA_STORAGE=file|hybrid|namespace to skip the prompt."));
36
+ process.exit(1);
37
+ }
38
+ }
39
+ //# sourceMappingURL=ensure-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-context.js","sourceRoot":"","sources":["../../src/lib/ensure-context.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAElB,kBAAkB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACxC,IAAI,CAAC;QACJ,MAAM,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACzC,OAAO,aAAa,EAAE,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,CAAC,GAAG,YAAY,kBAAkB,CAAC;YAAE,MAAM,GAAG,CAAC;QACpD,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,iBAAiB,EAAE,CAAC;YACvC,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;YACxC,OAAO,aAAa,EAAE,CAAC;QACxB,CAAC;QACD,6CAA6C;QAC7C,OAAO,CAAC,KAAK,CACZ,CAAC,CAAC,GAAG,CACJ,kEAAkE,CAClE,CACD,CAAC;QACF,OAAO,CAAC,KAAK,CACZ,CAAC,CAAC,GAAG,CACJ,oGAAoG,CACpG,CACD,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACF,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Interactive prompt asking the user to pick one of the three storage
3
+ * modes. Used by `ordna init` (no `--storage` flag) and by every
4
+ * one-shot CLI command via `ensureContextOrExit` when detection
5
+ * lands on `ask`.
6
+ *
7
+ * Terse by design: three numbered options, two-line description, an
8
+ * inline 1/2/3 prompt. Trade-off discussion belongs in the README,
9
+ * not the prompt.
10
+ */
11
+ export declare function promptStorageMode(): Promise<"file" | "hybrid" | "namespace">;
12
+ //# sourceMappingURL=prompt-mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-mode.d.ts","sourceRoot":"","sources":["../../src/lib/prompt-mode.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CACjD,MAAM,GAAG,QAAQ,GAAG,WAAW,CAC/B,CAkCA"}
@@ -0,0 +1,43 @@
1
+ import { createInterface } from "node:readline/promises";
2
+ import { c } from "../colors.js";
3
+ /**
4
+ * Interactive prompt asking the user to pick one of the three storage
5
+ * modes. Used by `ordna init` (no `--storage` flag) and by every
6
+ * one-shot CLI command via `ensureContextOrExit` when detection
7
+ * lands on `ask`.
8
+ *
9
+ * Terse by design: three numbered options, two-line description, an
10
+ * inline 1/2/3 prompt. Trade-off discussion belongs in the README,
11
+ * not the prompt.
12
+ */
13
+ export async function promptStorageMode() {
14
+ console.log("");
15
+ console.log(c.bold("Pick a storage mode for this project."));
16
+ console.log("");
17
+ console.log(` 1) ${c.bold("file")} Tasks as markdown in tasks/ ${c.dim("(default, recommended)")}`);
18
+ console.log(` 2) ${c.bold("hybrid")} Tasks as files + synced ID allocator + audit log in git`);
19
+ console.log(` 3) ${c.bold("namespace")} Tasks as git refs; working tree stays clean`);
20
+ console.log("");
21
+ const rl = createInterface({
22
+ input: process.stdin,
23
+ output: process.stdout,
24
+ });
25
+ try {
26
+ while (true) {
27
+ const answer = (await rl.question(c.dim("Pick a storage mode [1/2/3, default 1]: ")))
28
+ .trim()
29
+ .toLowerCase();
30
+ if (answer === "" || answer === "1" || answer === "file")
31
+ return "file";
32
+ if (answer === "2" || answer === "hybrid")
33
+ return "hybrid";
34
+ if (answer === "3" || answer === "namespace")
35
+ return "namespace";
36
+ console.log(c.dim(" Please enter 1, 2, or 3."));
37
+ }
38
+ }
39
+ finally {
40
+ rl.close();
41
+ }
42
+ }
43
+ //# sourceMappingURL=prompt-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-mode.js","sourceRoot":"","sources":["../../src/lib/prompt-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAEjC;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IAGtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CACV,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,CAC7F,CAAC;IACF,OAAO,CAAC,GAAG,CACV,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,6DAA6D,CACrF,CAAC;IACF,OAAO,CAAC,GAAG,CACV,QAAQ,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,8CAA8C,CACzE,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,EAAE,GAAG,eAAe,CAAC;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACtB,CAAC,CAAC;IACH,IAAI,CAAC;QACJ,OAAO,IAAI,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,CACd,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CACpE;iBACC,IAAI,EAAE;iBACN,WAAW,EAAE,CAAC;YAChB,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,MAAM;gBAAE,OAAO,MAAM,CAAC;YACxE,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,QAAQ;gBAAE,OAAO,QAAQ,CAAC;YAC3D,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,WAAW;gBAAE,OAAO,WAAW,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAClD,CAAC;IACF,CAAC;YAAS,CAAC;QACV,EAAE,CAAC,KAAK,EAAE,CAAC;IACZ,CAAC;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"AAcA,OAAO,KAMN,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,KAAK,eAAe,EAA4B,MAAM,aAAa,CAAC;AAoE7E,MAAM,WAAW,QAAQ;IACxB,SAAS,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;CACnC;AAED,wBAAgB,GAAG,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,GAAE,QAAa,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAkrBlF"}
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAMN,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,KAAK,eAAe,EAA4B,MAAM,aAAa,CAAC;AAoE7E,MAAM,WAAW,QAAQ;IACxB,SAAS,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;CACnC;AAED,wBAAgB,GAAG,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,GAAE,QAAa,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAgvBlF"}