@frehilm/ordna-cli 0.1.3 → 0.2.0
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/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +14 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/assign.d.ts.map +1 -1
- package/dist/commands/assign.js +3 -2
- package/dist/commands/assign.js.map +1 -1
- package/dist/commands/commit.d.ts.map +1 -1
- package/dist/commands/commit.js +3 -2
- package/dist/commands/commit.js.map +1 -1
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +8 -3
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/init.d.ts +15 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +67 -17
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +3 -2
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/move.d.ts.map +1 -1
- package/dist/commands/move.js +3 -2
- package/dist/commands/move.js.map +1 -1
- package/dist/commands/show.d.ts.map +1 -1
- package/dist/commands/show.js +3 -2
- package/dist/commands/show.js.map +1 -1
- package/dist/lib/ensure-context.d.ts +19 -0
- package/dist/lib/ensure-context.d.ts.map +1 -0
- package/dist/lib/ensure-context.js +39 -0
- package/dist/lib/ensure-context.js.map +1 -0
- package/dist/lib/prompt-mode.d.ts +12 -0
- package/dist/lib/prompt-mode.d.ts.map +1 -0
- package/dist/lib/prompt-mode.js +43 -0
- package/dist/lib/prompt-mode.js.map +1 -0
- package/dist/tui/App.d.ts.map +1 -1
- package/dist/tui/App.js +39 -1
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/LineInput.d.ts +26 -0
- package/dist/tui/LineInput.d.ts.map +1 -0
- package/dist/tui/LineInput.js +114 -0
- package/dist/tui/LineInput.js.map +1 -0
- package/dist/tui/SetupModal.d.ts +14 -0
- package/dist/tui/SetupModal.d.ts.map +1 -0
- package/dist/tui/SetupModal.js +67 -0
- package/dist/tui/SetupModal.js.map +1 -0
- package/dist/tui/TaskDetail.d.ts.map +1 -1
- package/dist/tui/TaskDetail.js +1 -1
- package/dist/tui/TaskDetail.js.map +1 -1
- package/dist/tui/TaskEditor.d.ts.map +1 -1
- package/dist/tui/TaskEditor.js +96 -28
- package/dist/tui/TaskEditor.js.map +1 -1
- package/dist/tui/TextPrompt.d.ts.map +1 -1
- package/dist/tui/TextPrompt.js +2 -2
- package/dist/tui/TextPrompt.js.map +1 -1
- package/dist/tui/hooks.d.ts +17 -0
- package/dist/tui/hooks.d.ts.map +1 -1
- package/dist/tui/hooks.js +53 -1
- package/dist/tui/hooks.js.map +1 -1
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +38 -3
- package/dist/tui/index.js.map +1 -1
- package/package.json +3 -3
- 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,
|
|
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
|
-
.
|
|
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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,UAAU,YAAY;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACL,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CAAC,mDAAmD,CAAC;SAChE,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnB,OAAO;SACL,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,iDAAiD,CAAC;SAC9D,MAAM,CAAC,
|
|
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":"
|
|
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"}
|
package/dist/commands/assign.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
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 =
|
|
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,
|
|
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":"
|
|
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"}
|
package/dist/commands/commit.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { commitTasks
|
|
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 =
|
|
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,
|
|
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,
|
|
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"}
|
package/dist/commands/create.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
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 =
|
|
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
|
-
|
|
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,
|
|
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"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -1,2 +1,16 @@
|
|
|
1
|
-
export
|
|
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":"
|
|
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"}
|
package/dist/commands/init.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
16
|
-
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
|
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,EACN,iBAAiB,EACjB,kBAAkB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAM1D,MAAM,kBAAkB,GAAG;;;;;;;;CAQ1B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC5B,UAAuB,EAAE,EACzB,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAElD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAC;QAC9D,OAAO;IACR,CAAC;IAED,mEAAmE;IACnE,IAAI,OAAwC,CAAC;IAC7C,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAC3B,CAAC;SAAM,CAAC;QACP,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC7B,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACzB,OAAO,GAAG,MAAM,iBAAiB,EAAE,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,KAAK,CACZ,CAAC,CAAC,GAAG,CACJ,4FAA4F,CAC5F,CACD,CAAC;gBACF,OAAO,CAAC,KAAK,CACZ,CAAC,CAAC,GAAG,CACJ,6DAA6D,CAC7D,CACD,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;QACF,CAAC;aAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAC7C,OAAO,GAAG,MAAM,CAAC;QAClB,CAAC;aAAM,CAAC;YACP,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;QACzB,CAAC;IACF,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,kEAAkE;IAClE,+DAA+D;IAC/D,2DAA2D;IAC3D,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACxB,aAAa,CAAC,UAAU,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,CAAC;IACF,CAAC;SAAM,CAAC;QACP,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACjC,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC1B,+DAA+D;YAC/D,iDAAiD;YACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACpC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3B,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,UAAU,EAAE,CAAC,CAAC,CAAC;IACtC,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/commands/list.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
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 =
|
|
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,
|
|
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":"
|
|
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"}
|
package/dist/commands/move.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
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 =
|
|
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,
|
|
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":"
|
|
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"}
|
package/dist/commands/show.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
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,
|
|
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,
|
|
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"}
|
package/dist/tui/App.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"
|
|
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,CAutBlF"}
|
package/dist/tui/App.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { spawn } from "node:child_process";
|
|
3
|
-
import { ARCHIVED_STATUS, createContext as createStoreContext, createTask, listTasks, moveTask, updateTask, watchTasks, } from "@frehilm/ordna-core";
|
|
3
|
+
import { ARCHIVED_STATUS, canFetch, createContext as createStoreContext, createTask, fetchTasks, listTasks, moveTask, updateTask, watchTasks, } from "@frehilm/ordna-core";
|
|
4
4
|
import { Box, Text, useApp, useInput, useStdin } from "ink";
|
|
5
5
|
import React, { startTransition, useCallback, useEffect, useMemo, useState, } from "react";
|
|
6
6
|
import { loadAgentHook, sendAgent } from "../agent.js";
|
|
@@ -97,6 +97,18 @@ export function App({ agentHook: agentHookProp } = {}) {
|
|
|
97
97
|
if (event.type === "removed") {
|
|
98
98
|
setTasks((prev) => removeTaskByPath(prev, event.filePath));
|
|
99
99
|
}
|
|
100
|
+
else if (event.type === "renamed") {
|
|
101
|
+
// Drop the entry under the old id (if it's still there)
|
|
102
|
+
// and re-insert the renamed task under its new id. A toast
|
|
103
|
+
// nudges the user about the auto-renumber.
|
|
104
|
+
setTasks((prev) => {
|
|
105
|
+
const withoutOld = prev.filter((t) => t.id !== event.oldId);
|
|
106
|
+
return mergeTask(withoutOld, event.task);
|
|
107
|
+
});
|
|
108
|
+
const msg = `Renamed ${event.oldId} → ${event.newId}`;
|
|
109
|
+
setToast(msg);
|
|
110
|
+
setTimeout(() => setToast((t) => (t === msg ? null : t)), 2500);
|
|
111
|
+
}
|
|
100
112
|
else {
|
|
101
113
|
setTasks((prev) => mergeTask(prev, event.task));
|
|
102
114
|
}
|
|
@@ -155,6 +167,13 @@ export function App({ agentHook: agentHookProp } = {}) {
|
|
|
155
167
|
const visibleCount = filteredTasks.length;
|
|
156
168
|
const totalCount = useMemo(() => tasks.filter((t) => t.status !== ARCHIVED_STATUS).length, [tasks]);
|
|
157
169
|
const launchEditor = useCallback((task) => {
|
|
170
|
+
// Namespace-mode tasks live as git blobs and have no on-disk
|
|
171
|
+
// path — there's nothing to open in `$EDITOR`. Show a toast
|
|
172
|
+
// rather than spawning the editor with `undefined`.
|
|
173
|
+
if (!task.filePath) {
|
|
174
|
+
flashToast(`${task.id} has no on-disk file (namespace mode).`);
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
158
177
|
const editor = process.env.EDITOR || process.env.VISUAL || "vi";
|
|
159
178
|
setRawMode?.(false);
|
|
160
179
|
const proc = spawn(editor, [task.filePath], { stdio: "inherit" });
|
|
@@ -225,6 +244,21 @@ export function App({ agentHook: agentHookProp } = {}) {
|
|
|
225
244
|
flashToast(error.message);
|
|
226
245
|
}
|
|
227
246
|
};
|
|
247
|
+
const fetchSupported = canFetch(ctx);
|
|
248
|
+
const runFetch = async () => {
|
|
249
|
+
if (!fetchSupported)
|
|
250
|
+
return;
|
|
251
|
+
flashToast("Fetching…");
|
|
252
|
+
try {
|
|
253
|
+
const result = await fetchTasks(ctx);
|
|
254
|
+
flashToast(result.refsUpdated === 0
|
|
255
|
+
? `Up to date · ${result.durationMs}ms`
|
|
256
|
+
: `Fetched ${result.refsUpdated} ref${result.refsUpdated === 1 ? "" : "s"} · ${result.durationMs}ms`);
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
flashToast(error.message);
|
|
260
|
+
}
|
|
261
|
+
};
|
|
228
262
|
const applySidebarFocused = () => {
|
|
229
263
|
if (sidebarFocusedKey === null)
|
|
230
264
|
return;
|
|
@@ -358,6 +392,9 @@ export function App({ agentHook: agentHookProp } = {}) {
|
|
|
358
392
|
setSidebarPinned((p) => !p);
|
|
359
393
|
setSidebarPeek(false);
|
|
360
394
|
}
|
|
395
|
+
else if (input === "r" && canFetch(ctx)) {
|
|
396
|
+
void runFetch();
|
|
397
|
+
}
|
|
361
398
|
else if (input === "/") {
|
|
362
399
|
setMode({ kind: "search" });
|
|
363
400
|
}
|
|
@@ -541,6 +578,7 @@ export function App({ agentHook: agentHookProp } = {}) {
|
|
|
541
578
|
{ keys: "E", label: "$EDITOR" },
|
|
542
579
|
{ keys: "x", label: "archive" },
|
|
543
580
|
...(agentHook ? [{ keys: "g", label: agentHook.label.toLowerCase() }] : []),
|
|
581
|
+
...(fetchSupported ? [{ keys: "r", label: "fetch" }] : []),
|
|
544
582
|
{ keys: "/", label: "find" },
|
|
545
583
|
{ keys: "q", label: "quit" },
|
|
546
584
|
];
|