@frehilm/ordna-cli 0.1.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.
Files changed (103) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +101 -0
  3. package/dist/agent.d.ts +18 -0
  4. package/dist/agent.d.ts.map +1 -0
  5. package/dist/agent.js +36 -0
  6. package/dist/agent.js.map +1 -0
  7. package/dist/bin/ordna.d.ts +3 -0
  8. package/dist/bin/ordna.d.ts.map +1 -0
  9. package/dist/bin/ordna.js +11 -0
  10. package/dist/bin/ordna.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +80 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/colors.d.ts +12 -0
  16. package/dist/colors.d.ts.map +1 -0
  17. package/dist/colors.js +18 -0
  18. package/dist/colors.js.map +1 -0
  19. package/dist/commands/assign.d.ts +2 -0
  20. package/dist/commands/assign.d.ts.map +1 -0
  21. package/dist/commands/assign.js +18 -0
  22. package/dist/commands/assign.js.map +1 -0
  23. package/dist/commands/commit.d.ts +2 -0
  24. package/dist/commands/commit.d.ts.map +1 -0
  25. package/dist/commands/commit.js +14 -0
  26. package/dist/commands/commit.js.map +1 -0
  27. package/dist/commands/create.d.ts +10 -0
  28. package/dist/commands/create.d.ts.map +1 -0
  29. package/dist/commands/create.js +21 -0
  30. package/dist/commands/create.js.map +1 -0
  31. package/dist/commands/init.d.ts +2 -0
  32. package/dist/commands/init.d.ts.map +1 -0
  33. package/dist/commands/init.js +37 -0
  34. package/dist/commands/init.js.map +1 -0
  35. package/dist/commands/list.d.ts +7 -0
  36. package/dist/commands/list.d.ts.map +1 -0
  37. package/dist/commands/list.js +16 -0
  38. package/dist/commands/list.js.map +1 -0
  39. package/dist/commands/move.d.ts +2 -0
  40. package/dist/commands/move.d.ts.map +1 -0
  41. package/dist/commands/move.js +15 -0
  42. package/dist/commands/move.js.map +1 -0
  43. package/dist/commands/show.d.ts +2 -0
  44. package/dist/commands/show.d.ts.map +1 -0
  45. package/dist/commands/show.js +13 -0
  46. package/dist/commands/show.js.map +1 -0
  47. package/dist/commands/web.d.ts +7 -0
  48. package/dist/commands/web.d.ts.map +1 -0
  49. package/dist/commands/web.js +26 -0
  50. package/dist/commands/web.js.map +1 -0
  51. package/dist/format.d.ts +6 -0
  52. package/dist/format.d.ts.map +1 -0
  53. package/dist/format.js +55 -0
  54. package/dist/format.js.map +1 -0
  55. package/dist/index.d.ts +6 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +4 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/tui/App.d.ts +7 -0
  60. package/dist/tui/App.d.ts.map +1 -0
  61. package/dist/tui/App.js +484 -0
  62. package/dist/tui/App.js.map +1 -0
  63. package/dist/tui/Card.d.ts +12 -0
  64. package/dist/tui/Card.d.ts.map +1 -0
  65. package/dist/tui/Card.js +29 -0
  66. package/dist/tui/Card.js.map +1 -0
  67. package/dist/tui/Column.d.ts +18 -0
  68. package/dist/tui/Column.d.ts.map +1 -0
  69. package/dist/tui/Column.js +19 -0
  70. package/dist/tui/Column.js.map +1 -0
  71. package/dist/tui/SelectPrompt.d.ts +11 -0
  72. package/dist/tui/SelectPrompt.d.ts.map +1 -0
  73. package/dist/tui/SelectPrompt.js +25 -0
  74. package/dist/tui/SelectPrompt.js.map +1 -0
  75. package/dist/tui/Sidebar.d.ts +44 -0
  76. package/dist/tui/Sidebar.d.ts.map +1 -0
  77. package/dist/tui/Sidebar.js +84 -0
  78. package/dist/tui/Sidebar.js.map +1 -0
  79. package/dist/tui/Subbar.d.ts +11 -0
  80. package/dist/tui/Subbar.d.ts.map +1 -0
  81. package/dist/tui/Subbar.js +22 -0
  82. package/dist/tui/Subbar.js.map +1 -0
  83. package/dist/tui/TaskDetail.d.ts +12 -0
  84. package/dist/tui/TaskDetail.d.ts.map +1 -0
  85. package/dist/tui/TaskDetail.js +15 -0
  86. package/dist/tui/TaskDetail.js.map +1 -0
  87. package/dist/tui/TextPrompt.d.ts +10 -0
  88. package/dist/tui/TextPrompt.d.ts.map +1 -0
  89. package/dist/tui/TextPrompt.js +15 -0
  90. package/dist/tui/TextPrompt.js.map +1 -0
  91. package/dist/tui/hooks.d.ts +6 -0
  92. package/dist/tui/hooks.d.ts.map +1 -0
  93. package/dist/tui/hooks.js +21 -0
  94. package/dist/tui/hooks.js.map +1 -0
  95. package/dist/tui/index.d.ts +10 -0
  96. package/dist/tui/index.d.ts.map +1 -0
  97. package/dist/tui/index.js +25 -0
  98. package/dist/tui/index.js.map +1 -0
  99. package/dist/tui/theme.d.ts +17 -0
  100. package/dist/tui/theme.d.ts.map +1 -0
  101. package/dist/tui/theme.js +35 -0
  102. package/dist/tui/theme.js.map +1 -0
  103. package/package.json +58 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 FreHilm
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,101 @@
1
+ # @frehilm/ordna-cli
2
+
3
+ The `ordna` binary plus an embeddable Ink-based Kanban TUI. Re-exports the entire [@frehilm/ordna-core](../core/README.md) API, so this is the only Ordna package you need if you're a terminal user or embedding the TUI in an IDE.
4
+
5
+ ## Install
6
+
7
+ Global binary:
8
+
9
+ ```bash
10
+ npm i -g @frehilm/ordna-cli # provides the `ordna` command
11
+ ```
12
+
13
+ As a library:
14
+
15
+ ```bash
16
+ pnpm add @frehilm/ordna-cli
17
+ ```
18
+
19
+ ## CLI commands
20
+
21
+ ```
22
+ ordna Launch the TUI (default)
23
+ ordna board Launch the TUI
24
+ ordna init Create .ordna/config.yaml and tasks/
25
+ ordna list [-s status] List tasks, optionally filtered
26
+ ordna show <id> Print a task
27
+ ordna create <title...> Create a task
28
+ -p, --priority <level> high | medium | low
29
+ -t, --tag <tag...> one or more tags
30
+ -d, --depends-on <id..> one or more dependency IDs
31
+ -a, --assignee <name>
32
+ -s, --status <status>
33
+ ordna move <id> <status> Change status (depends_on gate on the terminal status)
34
+ ordna assign <id> [name] Omit name to unassign
35
+ ordna commit [-m msg] Stage tasks/ and git commit
36
+ ordna web [-p port] Start the local web Kanban (delegates to @frehilm/ordna-web)
37
+ ```
38
+
39
+ ## TUI
40
+
41
+ Launch with `ordna` or `ordna board`. Three-pane layout: topbar · filter sidebar · board (columns) · subbar · footer hints.
42
+
43
+ | Key | Action |
44
+ |----------------|------------------------------------------|
45
+ | `Tab` | Toggle focus between sidebar and board |
46
+ | `← → / h l` | Switch column |
47
+ | `↑ ↓ / j k` | Select task / sidebar row |
48
+ | `Enter` | Open task detail popup / apply filter |
49
+ | `Space` | Pick up task; then `← →` to move columns |
50
+ | `c` | Create a new task |
51
+ | `m` | Move task via status picker |
52
+ | `a` | Set assignee |
53
+ | `e` | Edit the task file in `$EDITOR` |
54
+ | `x` | Archive selected task |
55
+ | `g` | Send task to agent hook (only if enabled)|
56
+ | `/` | Search |
57
+ | `Esc` | Clear search / drop / close |
58
+ | `q` | Quit |
59
+
60
+ ### Sidebar
61
+
62
+ `Views` (All · per-status counts · Archived) · `Priority` (high / medium / low) · `Tags` (top 8 by usage). Counts are live; selected filter scopes the board and the subbar title.
63
+
64
+ ### Columns
65
+
66
+ - Double-line border, colored dot for the status, title + count.
67
+ - Single-line rows: `› T-001 !h Title #tag @user ███░░ 3/5 ↪1` — priority letter, colored tag chips, assignee, acceptance-criteria progress bar, depends-on count.
68
+ - Scrolling: when a column overflows, `↑ N more` and `↓ N more` appear. Selection auto-scrolls to stay visible. Moving a task scrolls the target column to reveal it.
69
+ - Columns fill the available width evenly. The Archived view keeps a single-column width so it doesn't dominate.
70
+
71
+ ### Popup
72
+
73
+ `Enter` on a task opens a centered modal with the full body. `e` opens in `$EDITOR`. `Esc` / `q` closes.
74
+
75
+ ### Behavior
76
+
77
+ The TUI runs in the **alternate screen buffer** so it never pollutes your scrollback, and reloads automatically when task files change on disk (CLI, web, agent, editor — they all show up live).
78
+
79
+ ## Embedded use
80
+
81
+ ```ts
82
+ import { runBoard } from "@frehilm/ordna-cli";
83
+
84
+ await runBoard({
85
+ agentHook: {
86
+ url: "http://127.0.0.1:9999/agent",
87
+ label: "Claude",
88
+ headers: { "X-Token": "..." },
89
+ },
90
+ });
91
+ ```
92
+
93
+ For a full IDE embedding (xterm.js + node-pty pane), see the [Host integration](../../README.md#host-integration) section in the root README.
94
+
95
+ ## Configuration
96
+
97
+ Inherits everything from [@frehilm/ordna-core](../core/README.md#configuration). The CLI does not add or override any keys.
98
+
99
+ ## License
100
+
101
+ MIT — see [LICENSE](../../LICENSE).
@@ -0,0 +1,18 @@
1
+ import type { Task } from "@frehilm/ordna-core";
2
+ export interface AgentHookConfig {
3
+ url: string;
4
+ label: string;
5
+ headers: Record<string, string>;
6
+ }
7
+ export declare function loadAgentHook(): AgentHookConfig | null;
8
+ export interface AgentContext {
9
+ tasksDir: string;
10
+ cwd: string;
11
+ schema: string;
12
+ }
13
+ export declare function sendAgent(hook: AgentHookConfig, task: Task, context: AgentContext): Promise<{
14
+ ok: boolean;
15
+ status: number;
16
+ body: string;
17
+ }>;
18
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,WAAW,eAAe;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,wBAAgB,aAAa,IAAI,eAAe,GAAG,IAAI,CAmBtD;AAED,MAAM,WAAW,YAAY;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,SAAS,CAC9B,IAAI,EAAE,eAAe,EACrB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,YAAY,GACnB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAWxD"}
package/dist/agent.js ADDED
@@ -0,0 +1,36 @@
1
+ export function loadAgentHook() {
2
+ const url = process.env.ORDNA_AGENT_HOOK_URL;
3
+ if (!url)
4
+ return null;
5
+ const label = process.env.ORDNA_AGENT_HOOK_LABEL ?? "Agent";
6
+ const headers = {};
7
+ const rawHeaders = process.env.ORDNA_AGENT_HOOK_HEADERS;
8
+ if (rawHeaders) {
9
+ try {
10
+ const parsed = JSON.parse(rawHeaders);
11
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
12
+ for (const [k, v] of Object.entries(parsed)) {
13
+ if (typeof v === "string")
14
+ headers[k] = v;
15
+ }
16
+ }
17
+ }
18
+ catch {
19
+ // Malformed headers are ignored so the hook still works.
20
+ }
21
+ }
22
+ return { url, label, headers };
23
+ }
24
+ export async function sendAgent(hook, task, context) {
25
+ const res = await fetch(hook.url, {
26
+ method: "POST",
27
+ headers: {
28
+ "Content-Type": "application/json",
29
+ ...hook.headers,
30
+ },
31
+ body: JSON.stringify({ action: "agent", task, context }),
32
+ });
33
+ const body = await res.text();
34
+ return { ok: res.ok, status: res.status, body };
35
+ }
36
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,aAAa;IAC5B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAC7C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,OAAO,CAAC;IAC5D,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IACxD,IAAI,UAAU,EAAE,CAAC;QAChB,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAY,CAAC;YACjD,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpE,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAiC,CAAC,EAAE,CAAC;oBACxE,IAAI,OAAO,CAAC,KAAK,QAAQ;wBAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC3C,CAAC;YACF,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,yDAAyD;QAC1D,CAAC;IACF,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAChC,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,SAAS,CAC9B,IAAqB,EACrB,IAAU,EACV,OAAqB;IAErB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;QACjC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACR,cAAc,EAAE,kBAAkB;YAClC,GAAG,IAAI,CAAC,OAAO;SACf;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;KACxD,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;AACjD,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=ordna.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ordna.d.ts","sourceRoot":"","sources":["../../src/bin/ordna.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ import { buildProgram } from "../cli.js";
3
+ async function main() {
4
+ const program = buildProgram();
5
+ await program.parseAsync(process.argv);
6
+ }
7
+ main().catch((error) => {
8
+ console.error(error instanceof Error ? error.message : error);
9
+ process.exitCode = 1;
10
+ });
11
+ //# sourceMappingURL=ordna.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ordna.js","sourceRoot":"","sources":["../../src/bin/ordna.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,KAAK,UAAU,IAAI;IAClB,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;IAC/B,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACtB,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function buildProgram(): Command;
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,YAAY,IAAI,OAAO,CAmFtC"}
package/dist/cli.js ADDED
@@ -0,0 +1,80 @@
1
+ import { Command } from "commander";
2
+ import { runAssign } from "./commands/assign.js";
3
+ import { runCommit } from "./commands/commit.js";
4
+ import { runCreate } from "./commands/create.js";
5
+ import { runInit } from "./commands/init.js";
6
+ import { runList } from "./commands/list.js";
7
+ import { runMove } from "./commands/move.js";
8
+ import { runShow } from "./commands/show.js";
9
+ import { runWebCommand } from "./commands/web.js";
10
+ export function buildProgram() {
11
+ const program = new Command();
12
+ program
13
+ .name("ordna")
14
+ .description("Git-native project management. Tasks as markdown.")
15
+ .version("0.0.0");
16
+ program
17
+ .command("init")
18
+ .description("Create .ordna/config.yaml and tasks/ if missing")
19
+ .action(() => runInit());
20
+ program
21
+ .command("list")
22
+ .alias("ls")
23
+ .description("List tasks")
24
+ .option("-s, --status <status>", "filter by status")
25
+ .option("-a, --assignee <name>", "filter by assignee")
26
+ .option("-t, --tag <tag>", "filter by tag")
27
+ .action((opts) => runList(opts));
28
+ program
29
+ .command("show <id>")
30
+ .description("Show a task")
31
+ .action((id) => runShow(id));
32
+ program
33
+ .command("create <title...>")
34
+ .description("Create a new task")
35
+ .option("-a, --assignee <name>", "assignee")
36
+ .option("-p, --priority <level>", "high | medium | low")
37
+ .option("-t, --tag <tag...>", "one or more tags")
38
+ .option("-d, --depends-on <id...>", "one or more dependency IDs")
39
+ .option("-s, --status <status>", "initial status")
40
+ .action((titleParts, opts) => runCreate(titleParts.join(" "), {
41
+ assignee: opts.assignee,
42
+ priority: opts.priority,
43
+ tags: opts.tag,
44
+ dependsOn: opts.dependsOn,
45
+ status: opts.status,
46
+ }));
47
+ program
48
+ .command("move <id> <status>")
49
+ .description("Move a task to a different status")
50
+ .action((id, status) => runMove(id, status));
51
+ program
52
+ .command("assign <id> [name]")
53
+ .description("Assign a task (omit name to unassign)")
54
+ .action((id, name) => runAssign(id, name));
55
+ program
56
+ .command("commit")
57
+ .description("Stage tasks/ and git commit")
58
+ .option("-m, --message <msg>", "commit message", "chore(tasks): update")
59
+ .action((opts) => runCommit(opts.message));
60
+ program
61
+ .command("web")
62
+ .description("Start the local web Kanban (opens browser)")
63
+ .option("-p, --port <port>", "port (default from config)", (v) => Number.parseInt(v, 10))
64
+ .option("-h, --host <host>", "host", "127.0.0.1")
65
+ .option("--no-open", "do not open browser")
66
+ .action((opts) => runWebCommand(opts));
67
+ program
68
+ .command("board")
69
+ .description("Open the Kanban TUI (default)")
70
+ .action(async () => {
71
+ const { runBoard } = await import("./tui/index.js");
72
+ await runBoard();
73
+ });
74
+ program.action(async () => {
75
+ const { runBoard } = await import("./tui/index.js");
76
+ await runBoard();
77
+ });
78
+ return program;
79
+ }
80
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare const c: {
2
+ dim: (t: string) => string;
3
+ bold: (t: string) => string;
4
+ red: (t: string) => string;
5
+ green: (t: string) => string;
6
+ yellow: (t: string) => string;
7
+ blue: (t: string) => string;
8
+ magenta: (t: string) => string;
9
+ cyan: (t: string) => string;
10
+ gray: (t: string) => string;
11
+ };
12
+ //# sourceMappingURL=colors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../src/colors.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,CAAC;aACJ,MAAM;cACL,MAAM;aACP,MAAM;eACJ,MAAM;gBACL,MAAM;cACR,MAAM;iBACH,MAAM;cACT,MAAM;cACN,MAAM;CAChB,CAAC"}
package/dist/colors.js ADDED
@@ -0,0 +1,18 @@
1
+ const isTTY = Boolean(process.stdout.isTTY) && process.env.NO_COLOR === undefined;
2
+ function wrap(code, text) {
3
+ if (!isTTY)
4
+ return text;
5
+ return `\x1b[${code}m${text}\x1b[0m`;
6
+ }
7
+ export const c = {
8
+ dim: (t) => wrap(2, t),
9
+ bold: (t) => wrap(1, t),
10
+ red: (t) => wrap(31, t),
11
+ green: (t) => wrap(32, t),
12
+ yellow: (t) => wrap(33, t),
13
+ blue: (t) => wrap(34, t),
14
+ magenta: (t) => wrap(35, t),
15
+ cyan: (t) => wrap(36, t),
16
+ gray: (t) => wrap(90, t),
17
+ };
18
+ //# sourceMappingURL=colors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.js","sourceRoot":"","sources":["../src/colors.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC;AAElF,SAAS,IAAI,CAAC,IAAY,EAAE,IAAY;IACvC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,QAAQ,IAAI,IAAI,IAAI,SAAS,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,MAAM,CAAC,GAAG;IAChB,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/B,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/B,KAAK,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACjC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAClC,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAChC,OAAO,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACnC,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAChC,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;CAChC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function runAssign(id: string, assignee: string | undefined): Promise<void>;
2
+ //# sourceMappingURL=assign.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,18 @@
1
+ import { createContext, updateTask } from "@frehilm/ordna-core";
2
+ import { c } from "../colors.js";
3
+ export async function runAssign(id, assignee) {
4
+ const ctx = createContext();
5
+ const value = assignee && assignee.length > 0 ? assignee : null;
6
+ try {
7
+ const task = await updateTask(id, { assignee: value }, ctx);
8
+ if (value === null)
9
+ console.log(`${c.bold(task.id)} unassigned`);
10
+ else
11
+ console.log(`${c.bold(task.id)} → ${c.magenta(`@${value}`)}`);
12
+ }
13
+ catch (error) {
14
+ console.error(c.red(error.message));
15
+ process.exitCode = 1;
16
+ }
17
+ }
18
+ //# sourceMappingURL=assign.js.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
1
+ export declare function runCommit(message: string | undefined): Promise<void>;
2
+ //# sourceMappingURL=commit.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,14 @@
1
+ import { commitTasks, createContext } from "@frehilm/ordna-core";
2
+ import { c } from "../colors.js";
3
+ export async function runCommit(message) {
4
+ const ctx = createContext();
5
+ try {
6
+ await commitTasks(ctx, message);
7
+ console.log(c.green("Committed."));
8
+ }
9
+ catch (error) {
10
+ console.error(c.red(error.message));
11
+ process.exitCode = 1;
12
+ }
13
+ }
14
+ //# sourceMappingURL=commit.js.map
@@ -0,0 +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"}
@@ -0,0 +1,10 @@
1
+ import { type Priority } from "@frehilm/ordna-core";
2
+ export interface CreateOptions {
3
+ assignee?: string;
4
+ priority?: Priority;
5
+ tags?: string[];
6
+ dependsOn?: string[];
7
+ status?: string;
8
+ }
9
+ export declare function runCreate(title: string, options?: CreateOptions): Promise<void>;
10
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,21 @@
1
+ import { createContext, createTask } from "@frehilm/ordna-core";
2
+ import { c } from "../colors.js";
3
+ export async function runCreate(title, options = {}) {
4
+ if (!title || title.trim().length === 0) {
5
+ console.error(c.red("Title is required."));
6
+ process.exitCode = 1;
7
+ return;
8
+ }
9
+ const ctx = createContext();
10
+ const task = await createTask({
11
+ title,
12
+ assignee: options.assignee ?? null,
13
+ priority: options.priority ?? null,
14
+ tags: options.tags ?? [],
15
+ depends_on: options.dependsOn ?? [],
16
+ status: options.status,
17
+ }, ctx);
18
+ console.log(c.green(`Created ${c.bold(task.id)}: ${task.title}`));
19
+ console.log(c.dim(` ${task.filePath}`));
20
+ }
21
+ //# sourceMappingURL=create.js.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
1
+ export declare function runInit(cwd?: string): void;
2
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,37 @@
1
+ import { existsSync, mkdirSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { c } from "../colors.js";
4
+ const TEMPLATE = `# Ordna config — all keys optional.
5
+ tasksDir: tasks
6
+ schema: ordna
7
+ statuses: [todo, doing, done]
8
+ idPrefix: T
9
+ zeroPaddedIds: 3
10
+ webPort: 7420
11
+ `;
12
+ export function runInit(cwd = process.cwd()) {
13
+ const configDir = join(cwd, ".ordna");
14
+ const configFile = join(configDir, "config.yaml");
15
+ const tasksDir = join(cwd, "tasks");
16
+ let created = 0;
17
+ if (!existsSync(configDir)) {
18
+ mkdirSync(configDir, { recursive: true });
19
+ created++;
20
+ }
21
+ if (!existsSync(configFile)) {
22
+ writeFileSync(configFile, TEMPLATE, "utf8");
23
+ created++;
24
+ }
25
+ if (!existsSync(tasksDir)) {
26
+ mkdirSync(tasksDir, { recursive: true });
27
+ created++;
28
+ }
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."));
34
+ console.log(c.dim(` ${configFile}`));
35
+ console.log(c.dim(` ${tasksDir}/`));
36
+ }
37
+ //# sourceMappingURL=init.js.map
@@ -0,0 +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"}
@@ -0,0 +1,7 @@
1
+ export interface ListOptions {
2
+ status?: string;
3
+ assignee?: string;
4
+ tag?: string;
5
+ }
6
+ export declare function runList(options?: ListOptions): Promise<void>;
7
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,16 @@
1
+ import { createContext, listTasks } from "@frehilm/ordna-core";
2
+ import { c } from "../colors.js";
3
+ import { formatListRow, summarizeStatuses } from "../format.js";
4
+ export async function runList(options = {}) {
5
+ const ctx = createContext();
6
+ const tasks = await listTasks(ctx, options);
7
+ if (tasks.length === 0) {
8
+ console.log(c.dim("No tasks. Create one with `ordna create \"title\"`."));
9
+ return;
10
+ }
11
+ for (const task of tasks)
12
+ console.log(formatListRow(task));
13
+ console.log("");
14
+ console.log(summarizeStatuses(ctx.config, tasks));
15
+ }
16
+ //# sourceMappingURL=list.js.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
1
+ export declare function runMove(id: string, status: string): Promise<void>;
2
+ //# sourceMappingURL=move.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,15 @@
1
+ import { createContext, moveTask } from "@frehilm/ordna-core";
2
+ import { c } from "../colors.js";
3
+ import { colorStatus } from "../format.js";
4
+ export async function runMove(id, status) {
5
+ const ctx = createContext();
6
+ try {
7
+ const task = await moveTask(id, status, ctx);
8
+ console.log(`${c.bold(task.id)} → ${colorStatus(task.status)}`);
9
+ }
10
+ catch (error) {
11
+ console.error(c.red(error.message));
12
+ process.exitCode = 1;
13
+ }
14
+ }
15
+ //# sourceMappingURL=move.js.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
1
+ export declare function runShow(id: string): Promise<void>;
2
+ //# sourceMappingURL=show.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,13 @@
1
+ import { createContext, getTask } from "@frehilm/ordna-core";
2
+ import { c } from "../colors.js";
3
+ import { formatTask } from "../format.js";
4
+ export async function runShow(id) {
5
+ const task = await getTask(id, createContext());
6
+ if (!task) {
7
+ console.error(c.red(`Task ${id} not found.`));
8
+ process.exitCode = 1;
9
+ return;
10
+ }
11
+ console.log(formatTask(task));
12
+ }
13
+ //# sourceMappingURL=show.js.map
@@ -0,0 +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"}
@@ -0,0 +1,7 @@
1
+ export interface WebOptions {
2
+ port?: number;
3
+ host?: string;
4
+ noOpen?: boolean;
5
+ }
6
+ export declare function runWebCommand(options?: WebOptions): Promise<void>;
7
+ //# sourceMappingURL=web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/commands/web.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,aAAa,CAAC,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB3E"}