@hiroleague/taskmanager 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +1 -1
  2. package/dist/assets/index-BpzHnKdP.css +1 -0
  3. package/dist/assets/index-DmNErTAP.js +273 -0
  4. package/dist/index.html +2 -2
  5. package/package.json +1 -1
  6. package/skills/hiro-task-manager-cli/SKILL.md +6 -4
  7. package/skills/hiro-task-manager-cli/reference/cli-access-policy.md +1 -0
  8. package/skills/hiro-task-manager-cli/reference/releases.md +14 -0
  9. package/src/cli/commands/query.ts +56 -56
  10. package/src/cli/commands/releases.ts +22 -0
  11. package/src/cli/handlers/boards.test.ts +669 -669
  12. package/src/cli/handlers/cli-wiring.test.ts +38 -1
  13. package/src/cli/handlers/releases.ts +15 -0
  14. package/src/cli/handlers/search.test.ts +374 -374
  15. package/src/cli/handlers/search.ts +17 -17
  16. package/src/cli/lib/cli-http-errors.test.ts +85 -85
  17. package/src/cli/lib/write/releases.ts +64 -1
  18. package/src/cli/lib/write-result.test.ts +3 -0
  19. package/src/cli/lib/write-result.ts +3 -0
  20. package/src/cli/lib/writeCommands.breadth.test.ts +143 -0
  21. package/src/cli/lib/writeCommands.ts +1 -0
  22. package/src/cli/subprocess.real-stack.test.ts +625 -611
  23. package/src/cli/subprocess.smoke.test.ts +954 -954
  24. package/src/client/api/useBoardChangeStream.ts +421 -168
  25. package/src/client/api/useBoardIndexStream.ts +35 -0
  26. package/src/client/components/board/BoardStatsChips.tsx +233 -233
  27. package/src/client/components/board/BoardStatsContext.tsx +41 -41
  28. package/src/client/components/board/boardHeaderButtonStyles.ts +38 -38
  29. package/src/client/components/board/shortcuts/useBoardShortcutKeydown.ts +49 -49
  30. package/src/client/components/board/useBoardCanvasPanScroll.ts +108 -108
  31. package/src/client/components/board/useBoardTaskContainerDroppableReact.ts +33 -33
  32. package/src/client/components/board/useBoardTaskSortableReact.ts +26 -26
  33. package/src/client/components/layout/AppShell.tsx +5 -2
  34. package/src/client/components/layout/NotificationToasts.tsx +38 -1
  35. package/src/client/components/multi-select.tsx +1206 -1206
  36. package/src/client/components/routing/BoardPage.tsx +20 -20
  37. package/src/client/components/routing/NavigationRegistrar.tsx +13 -13
  38. package/src/client/components/task/TaskCard.tsx +643 -643
  39. package/src/client/components/ui/badge.tsx +49 -49
  40. package/src/client/components/ui/button.tsx +65 -65
  41. package/src/client/components/ui/command.tsx +193 -193
  42. package/src/client/components/ui/dialog.tsx +163 -163
  43. package/src/client/components/ui/input-group.tsx +155 -155
  44. package/src/client/components/ui/input.tsx +19 -19
  45. package/src/client/components/ui/popover.tsx +87 -87
  46. package/src/client/components/ui/separator.tsx +28 -28
  47. package/src/client/components/ui/textarea.tsx +18 -18
  48. package/src/client/index.css +248 -248
  49. package/src/client/lib/appNavigate.ts +16 -16
  50. package/src/client/lib/taskCardDate.ts +111 -111
  51. package/src/client/lib/utils.ts +6 -6
  52. package/src/client/store/notificationUi.ts +14 -0
  53. package/src/server/auth.ts +351 -351
  54. package/src/server/events.ts +31 -4
  55. package/src/server/migrations/registry.ts +43 -43
  56. package/src/server/notificationEvents.ts +8 -1
  57. package/src/server/routes/boards.ts +15 -1
  58. package/src/server/routes/trash.ts +6 -1
  59. package/src/shared/boardEvents.ts +6 -0
  60. package/src/shared/runtimeConfig.ts +256 -256
  61. package/dist/assets/index-hMFTu7sr.css +0 -1
  62. package/dist/assets/index-oKG1C41_.js +0 -273
package/dist/index.html CHANGED
@@ -25,7 +25,7 @@
25
25
  } catch (e) {}
26
26
  })();
27
27
  </script>
28
- <script type="module" crossorigin src="/assets/index-oKG1C41_.js"></script>
28
+ <script type="module" crossorigin src="/assets/index-DmNErTAP.js"></script>
29
29
  <link rel="modulepreload" crossorigin href="/assets/chunk-CFjPhJqf.js">
30
30
  <link rel="modulepreload" crossorigin href="/assets/src-C47h8eAM.js">
31
31
  <link rel="modulepreload" crossorigin href="/assets/chunk-ICPOFSXX-DkUVjrLw.js">
@@ -46,7 +46,7 @@
46
46
  <link rel="modulepreload" crossorigin href="/assets/chunk-336JU56O-BGQvSwLk.js">
47
47
  <link rel="modulepreload" crossorigin href="/assets/chunk-426QAEUC-Cl9nQN9c.js">
48
48
  <link rel="modulepreload" crossorigin href="/assets/chunk-XPW4576I-DQpNCogT.js">
49
- <link rel="stylesheet" crossorigin href="/assets/index-hMFTu7sr.css">
49
+ <link rel="stylesheet" crossorigin href="/assets/index-BpzHnKdP.css">
50
50
  </head>
51
51
  <body>
52
52
  <div id="root"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hiroleague/taskmanager",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "type": "module",
5
5
  "description": "Task Manager for Solo Builders and AI Agents, working as a team",
6
6
  "license": "MIT",
@@ -39,7 +39,9 @@ If you are not sure, use a generic name "AI Agent"
39
39
 
40
40
  ## Installation
41
41
 
42
- If command is not found, ask the user to [install](https://docs.hiroleague.com/task-manager/get-started/quick-start) it and configure it.
42
+ The `hirotm` binary ships with the **`@hiroleague/taskmanager`** npm package ([npm](https://www.npmjs.com/package/@hiroleague/taskmanager), [source](https://github.com/hiro-league/hirotaskmanager)).
43
+
44
+ If the command is not found, ask the user to [install](https://docs.hiroleague.com/task-manager/get-started/quickstart) it and configure it.
43
45
 
44
46
  # Discovery
45
47
 
@@ -70,12 +72,12 @@ If you are not allowed to access an entity or perform an operation due to CLI Ac
70
72
 
71
73
  ## References
72
74
 
73
- - [Installation Guide](https://docs.hiroleague.com/task-manager/get-started/quick-start)
75
+ - [Installation Guide](https://docs.hiroleague.com/task-manager/get-started/quickstart)
74
76
  - Server Commands - Start, stop, and check the server status.
75
77
  - [Boards Commands](reference/boards.md) - Create, update, delete, list, describe, and configure boards.
76
78
  - [Lists Commands](reference/lists.md) - List, add, update, move, delete, restore, and purge board lists.
77
79
  - [Tasks Commands](reference/tasks.md) - List, add, update, move, delete, restore, and purge tasks.
78
- - [Releases Commands](reference/releases.md) - List, show, add, update, and delete releases.
80
+ - [Releases Commands](reference/releases.md) - List, show, add, update, delete, and set-default releases.
79
81
  - [Trash Commands](reference/trash.md) - Inspect trashed boards, lists, and tasks.
80
82
  - [Status Commands](reference/statuses.md) - List workflow statuses and their meanings.
81
83
  - [Search Commands](reference/search.md) - Full-text task search with `query search`.
@@ -94,4 +96,4 @@ If you are not allowed to access an entity or perform an operation due to CLI Ac
94
96
 
95
97
  **References**
96
98
 
97
- - [Online Documentation](https://docs.hiroleague.com/task-manager/get-started/quick-start)
99
+ - [Online Documentation](https://docs.hiroleague.com/task-manager/get-started/quickstart)
@@ -54,6 +54,7 @@ Use this page to map `hirotm` commands to the board CLI policy checks enforced b
54
54
  - `releases add`: `readBoard` + `manageStructure`
55
55
  - `releases update`: `readBoard` + `manageStructure`
56
56
  - `releases delete`: `readBoard` + `manageStructure`
57
+ - `releases set-default`: `readBoard` + `manageStructure`
57
58
 
58
59
  ### Search and trash
59
60
 
@@ -85,3 +85,17 @@ Delete a release from a board.
85
85
 
86
86
  - `--move-tasks-to <id>`: move tagged tasks to another release before deletion.
87
87
  - If omitted, tasks on that release become untagged.
88
+
89
+ ### `releases set-default`
90
+
91
+ Format:
92
+
93
+ ```bash
94
+ hirotm releases set-default --board <id-or-slug> <release-id>
95
+ hirotm releases set-default --board <id-or-slug> --clear
96
+ ```
97
+
98
+ Set or clear the board’s default release (the release used for new tasks when the board’s auto-assign rules apply). This PATCHes the board (`defaultReleaseId`); requires `manageStructure` on the board for CLI clients.
99
+
100
+ - Provide `<release-id>` to set the default, or `--clear` to remove it.
101
+ - Do not pass `<release-id>` together with `--clear`.
@@ -1,56 +1,56 @@
1
- import { Command } from "commander";
2
- import type { CliContext } from "../types/context";
3
- import { handleSearch } from "../handlers/search";
4
- import {
5
- addClientNameOption,
6
- CLI_FIELDS_OPTION_DESC,
7
- cliAction,
8
- } from "../lib/command-helpers";
9
- import { CLI_DEFAULTS } from "../lib/constants";
10
-
11
- export function registerQueryCommands(
12
- program: Command,
13
- ctx: CliContext,
14
- ): void {
15
- const query = program
16
- .command("query")
17
- .description("Read-only queries across boards (search, etc.)");
18
-
19
- addClientNameOption(
20
- query
21
- .command("search")
22
- .description(
23
- "Search tasks (title, body, list name, group & status labels) via FTS5",
24
- )
25
- .argument("<query...>", "Search query (quote phrases with spaces)")
26
- .option("--board <id-or-slug>", "Limit results to one board")
27
- .option(
28
- "--limit <n>",
29
- `Page size (default ${CLI_DEFAULTS.DEFAULT_SEARCH_LIMIT}, max ${CLI_DEFAULTS.MAX_PAGE_LIMIT})`,
30
- )
31
- .option("--offset <n>", "Skip this many hits (default 0)")
32
- .option(
33
- "--page-all",
34
- "Fetch every page at the current --limit and merge into one result set",
35
- )
36
- .option(
37
- "--no-prefix",
38
- "Do not add * to the last token (exact token only). Default matches prefixes (drag finds dragging); this flag does not",
39
- )
40
- .option("--fields <keys>", CLI_FIELDS_OPTION_DESC),
41
- ).action(
42
- cliAction(
43
- (
44
- queryParts: string[],
45
- options: {
46
- board?: string;
47
- limit?: string;
48
- offset?: string;
49
- pageAll?: boolean;
50
- noPrefix?: boolean;
51
- fields?: string;
52
- },
53
- ) => handleSearch(ctx, queryParts, options),
54
- ),
55
- );
56
- }
1
+ import { Command } from "commander";
2
+ import type { CliContext } from "../types/context";
3
+ import { handleSearch } from "../handlers/search";
4
+ import {
5
+ addClientNameOption,
6
+ CLI_FIELDS_OPTION_DESC,
7
+ cliAction,
8
+ } from "../lib/command-helpers";
9
+ import { CLI_DEFAULTS } from "../lib/constants";
10
+
11
+ export function registerQueryCommands(
12
+ program: Command,
13
+ ctx: CliContext,
14
+ ): void {
15
+ const query = program
16
+ .command("query")
17
+ .description("Read-only queries across boards (search, etc.)");
18
+
19
+ addClientNameOption(
20
+ query
21
+ .command("search")
22
+ .description(
23
+ "Search tasks (title, body, list name, group & status labels) via FTS5",
24
+ )
25
+ .argument("<query...>", "Search query (quote phrases with spaces)")
26
+ .option("--board <id-or-slug>", "Limit results to one board")
27
+ .option(
28
+ "--limit <n>",
29
+ `Page size (default ${CLI_DEFAULTS.DEFAULT_SEARCH_LIMIT}, max ${CLI_DEFAULTS.MAX_PAGE_LIMIT})`,
30
+ )
31
+ .option("--offset <n>", "Skip this many hits (default 0)")
32
+ .option(
33
+ "--page-all",
34
+ "Fetch every page at the current --limit and merge into one result set",
35
+ )
36
+ .option(
37
+ "--no-prefix",
38
+ "Do not add * to the last token (exact token only). Default matches prefixes (drag finds dragging); this flag does not",
39
+ )
40
+ .option("--fields <keys>", CLI_FIELDS_OPTION_DESC),
41
+ ).action(
42
+ cliAction(
43
+ (
44
+ queryParts: string[],
45
+ options: {
46
+ board?: string;
47
+ limit?: string;
48
+ offset?: string;
49
+ pageAll?: boolean;
50
+ noPrefix?: boolean;
51
+ fields?: string;
52
+ },
53
+ ) => handleSearch(ctx, queryParts, options),
54
+ ),
55
+ );
56
+ }
@@ -4,6 +4,7 @@ import {
4
4
  handleReleasesAdd,
5
5
  handleReleasesDelete,
6
6
  handleReleasesList,
7
+ handleReleasesSetDefault,
7
8
  handleReleasesShow,
8
9
  handleReleasesUpdate,
9
10
  } from "../handlers/releases";
@@ -84,6 +85,27 @@ export function registerReleaseCommands(
84
85
  }) => handleReleasesAdd(ctx, options)),
85
86
  );
86
87
 
88
+ addClientNameOption(
89
+ releasesCommand
90
+ .command("set-default")
91
+ .description(
92
+ "Set or clear the board default release (PATCH board; requires manageStructure)",
93
+ )
94
+ .requiredOption("--board <id-or-slug>", "Board id or slug")
95
+ .option("--clear", "Clear the board default release")
96
+ .argument(
97
+ "[release-id]",
98
+ "Numeric release id to use as default (omit when using --clear)",
99
+ ),
100
+ ).action(
101
+ cliAction(
102
+ (
103
+ releaseId: string | undefined,
104
+ options: { board: string; clear?: boolean },
105
+ ) => handleReleasesSetDefault(ctx, releaseId, options),
106
+ ),
107
+ );
108
+
87
109
  addClientNameOption(
88
110
  releasesCommand
89
111
  .command("update")