@hiroleague/taskmanager 0.0.2 → 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.
- package/README.md +1 -1
- package/dist/assets/architecture-YZFGNWBL-DoE0KxgG.js +1 -0
- package/dist/assets/architectureDiagram-Q4EWVU46-DeuBhy7X.js +36 -0
- package/dist/assets/{blockDiagram-DXYQGD6D-DQzEOPT2.js → blockDiagram-DXYQGD6D-BDBy9ns9.js} +1 -1
- package/dist/assets/{c4Diagram-AHTNJAMY-B2Yfcwbo.js → c4Diagram-AHTNJAMY-CpqJj_8a.js} +1 -1
- package/dist/assets/channel-PHRyjspt.js +1 -0
- package/dist/assets/{chunk-2KRD3SAO-C2e-_49I.js → chunk-2KRD3SAO-DEpUsxdZ.js} +1 -1
- package/dist/assets/chunk-336JU56O-BGQvSwLk.js +2 -0
- package/dist/assets/chunk-426QAEUC-Cl9nQN9c.js +1 -0
- package/dist/assets/{chunk-4TB4RGXK-AZq3s1Dh.js → chunk-4TB4RGXK-Dq7aiIrZ.js} +2 -2
- package/dist/assets/{chunk-5FUZZQ4R-XEga0hMC.js → chunk-5FUZZQ4R-B_HuuUjf.js} +1 -1
- package/dist/assets/{chunk-5PVQY5BW-BrmXs2Gs.js → chunk-5PVQY5BW-cGfZCZGU.js} +2 -2
- package/dist/assets/{chunk-67CJDMHE-B1-M78qu.js → chunk-67CJDMHE-BMYAVZfw.js} +1 -1
- package/dist/assets/{chunk-7N4EOEYR-D7mYFpz-.js → chunk-7N4EOEYR-Ct-EY7Nc.js} +1 -1
- package/dist/assets/{chunk-AA7GKIK3-VWI9k39i.js → chunk-AA7GKIK3-Bd4HFpeo.js} +1 -1
- package/dist/assets/{chunk-CIAEETIT-hnu4zamm.js → chunk-CIAEETIT-CrFUkPMT.js} +1 -1
- package/dist/assets/{chunk-EDXVE4YY-DxUqDyxy.js → chunk-EDXVE4YY-DMDyt0NF.js} +1 -1
- package/dist/assets/{chunk-ENJZ2VHE-BgZKYo1l.js → chunk-ENJZ2VHE-DrWzOrpd.js} +1 -1
- package/dist/assets/{chunk-FOC6F5B3-BJsh9nO9.js → chunk-FOC6F5B3-Bemzq96j.js} +1 -1
- package/dist/assets/{chunk-ICPOFSXX-BNR1V8rT.js → chunk-ICPOFSXX-DkUVjrLw.js} +5 -5
- package/dist/assets/{chunk-K5T4RW27-BLIPdXaZ.js → chunk-K5T4RW27-ALKIf000.js} +5 -5
- package/dist/assets/{chunk-KGLVRYIC-DvaW2TkT.js → chunk-KGLVRYIC-Bg6HNTZ-.js} +1 -1
- package/dist/assets/{chunk-LIHQZDEY-CUsM0M11.js → chunk-LIHQZDEY-DeyGongE.js} +1 -1
- package/dist/assets/{chunk-ORNJ4GCN-CfluNV0_.js → chunk-ORNJ4GCN-Bx83s1bJ.js} +1 -1
- package/dist/assets/{chunk-OYMX7WX6-CkWzw4JX.js → chunk-OYMX7WX6-BqRUtRpL.js} +1 -1
- package/dist/assets/{chunk-U2HBQHQK-DTJPeU7W.js → chunk-U2HBQHQK-DogcerR6.js} +1 -1
- package/dist/assets/{chunk-X2U36JSP-CrTnmMqG.js → chunk-X2U36JSP-CwVWdmZV.js} +1 -1
- package/dist/assets/chunk-XPW4576I-DQpNCogT.js +32 -0
- package/dist/assets/{chunk-YZCP3GAM-9wq0QKUn.js → chunk-YZCP3GAM-crQSbji9.js} +1 -1
- package/dist/assets/{chunk-ZZ45TVLE-D3I1kLlo.js → chunk-ZZ45TVLE-Bk1S1YtS.js} +1 -1
- package/dist/assets/classDiagram-6PBFFD2Q-B_TabGaU.js +1 -0
- package/dist/assets/classDiagram-v2-HSJHXN6E-CGnZkUWw.js +1 -0
- package/dist/assets/clone-D4ka472w.js +1 -0
- package/dist/assets/{cose-bilkent-S5V4N54A-BygGvZGW.js → cose-bilkent-S5V4N54A-RBTHUit8.js} +1 -1
- package/dist/assets/cytoscape.esm-BGJwlmkf.js +321 -0
- package/dist/assets/dagre-B32eYLtm.js +1 -0
- package/dist/assets/{dagre-KV5264BT-lveZDhBf.js → dagre-KV5264BT-nX7tuXXn.js} +1 -1
- package/dist/assets/diagram-5BDNPKRD-DRxMXlQr.js +10 -0
- package/dist/assets/diagram-G4DWMVQ6-CoojevGm.js +24 -0
- package/dist/assets/diagram-MMDJMWI5-CWtJyfVW.js +43 -0
- package/dist/assets/diagram-TYMM5635-CsDJC4Hq.js +24 -0
- package/dist/assets/{erDiagram-SMLLAGMA-dx09stuy.js → erDiagram-SMLLAGMA-Cf7Xtd9A.js} +2 -2
- package/dist/assets/{flatten-B2BZ0pzY.js → flatten-CYX_pHZ7.js} +1 -1
- package/dist/assets/{flowDiagram-DWJPFMVM-CJi2WISS.js → flowDiagram-DWJPFMVM-DQaeR16a.js} +3 -3
- package/dist/assets/{ganttDiagram-T4ZO3ILL-OCTvbRxF.js → ganttDiagram-T4ZO3ILL-8EIcztcH.js} +1 -1
- package/dist/assets/gitGraph-7Q5UKJZL-BH9A1SAZ.js +1 -0
- package/dist/assets/{gitGraphDiagram-UUTBAWPF-Bjj94M12.js → gitGraphDiagram-UUTBAWPF-DO9ODqYw.js} +1 -1
- package/dist/assets/graphlib-bPBqlJKT.js +1 -0
- package/dist/assets/identity-Me9aart9.js +1 -0
- package/dist/assets/index-BpzHnKdP.css +1 -0
- package/dist/assets/index-DmNErTAP.js +273 -0
- package/dist/assets/info-OMHHGYJF-BvKR-zWh.js +1 -0
- package/dist/assets/infoDiagram-42DDH7IO-pRTXCm5C.js +2 -0
- package/dist/assets/isEmpty-Cu0k-j1j.js +1 -0
- package/dist/assets/{ishikawaDiagram-UXIWVN3A-Cnc1bwBo.js → ishikawaDiagram-UXIWVN3A-BP2YE5QI.js} +2 -2
- package/dist/assets/{journeyDiagram-VCZTEJTY-BkMxoaPq.js → journeyDiagram-VCZTEJTY-B3l2juoL.js} +1 -1
- package/dist/assets/{kanban-definition-6JOO6SKY-CwHbIze0.js → kanban-definition-6JOO6SKY-BpIpEOZZ.js} +4 -4
- package/dist/assets/{line-DNzQATGr.js → line-otOkzGl8.js} +1 -1
- package/dist/assets/mermaid-parser.core-xWsW24Gq.js +4 -0
- package/dist/assets/{mindmap-definition-QFDTVHPH-DswAJiEd.js → mindmap-definition-QFDTVHPH-B9khyC7X.js} +3 -3
- package/dist/assets/packet-4T2RLAQJ-D8Dw3nmf.js +1 -0
- package/dist/assets/pie-ZZUOXDRM-ZghowlAE.js +1 -0
- package/dist/assets/{pieDiagram-DEJITSTG-DgQTCddl.js → pieDiagram-DEJITSTG-v32hL3i7.js} +1 -1
- package/dist/assets/{quadrantDiagram-34T5L4WZ-c0iZxo2I.js → quadrantDiagram-34T5L4WZ-DIL3GDFt.js} +1 -1
- package/dist/assets/radar-PYXPWWZC-D-PK3JOd.js +1 -0
- package/dist/assets/reduce-CImcgAcU.js +1 -0
- package/dist/assets/{requirementDiagram-MS252O5E-D1moa23Z.js → requirementDiagram-MS252O5E-D8os2-4y.js} +2 -2
- package/dist/assets/{sankeyDiagram-XADWPNL6-woJZoQ58.js → sankeyDiagram-XADWPNL6-BV70D4l5.js} +1 -1
- package/dist/assets/{sequenceDiagram-FGHM5R23-Dvhj7HGn.js → sequenceDiagram-FGHM5R23-Cwu8hQW1.js} +1 -1
- package/dist/assets/stateDiagram-FHFEXIEX-oYUWv7Fb.js +1 -0
- package/dist/assets/stateDiagram-v2-QKLJ7IA2-CFUTpFu-.js +1 -0
- package/dist/assets/{timeline-definition-GMOUNBTQ-z-IncVmK.js → timeline-definition-GMOUNBTQ-CxSdKxpL.js} +1 -1
- package/dist/assets/treeView-SZITEDCU-uVgaJQzG.js +1 -0
- package/dist/assets/treemap-W4RFUUIX-Dcad_9AN.js +1 -0
- package/dist/assets/vennDiagram-DHZGUBPP-D4wgD7QI.js +34 -0
- package/dist/assets/wardley-RL74JXVD-CFXrK8mx.js +1 -0
- package/dist/assets/{wardleyDiagram-NUSXRM2D-D-kouujI.js → wardleyDiagram-NUSXRM2D-5Q201ea3.js} +1 -1
- package/dist/assets/{xychartDiagram-5P7HB3ND-D1lnM0pL.js → xychartDiagram-5P7HB3ND-BPZv_axd.js} +3 -3
- package/dist/index.html +17 -13
- package/package.json +2 -4
- package/skills/hiro-task-manager-cli/SKILL.md +6 -4
- package/skills/hiro-task-manager-cli/reference/cli-access-policy.md +1 -0
- package/skills/hiro-task-manager-cli/reference/releases.md +14 -0
- package/src/cli/bootstrap/launcher.ts +19 -5
- package/src/cli/bootstrap/program.test.ts +46 -0
- package/src/cli/bootstrap/program.ts +50 -1
- package/src/cli/commands/query.ts +56 -56
- package/src/cli/commands/releases.ts +22 -0
- package/src/cli/handlers/boards.test.ts +669 -669
- package/src/cli/handlers/cli-wiring.test.ts +38 -1
- package/src/cli/handlers/releases.ts +15 -0
- package/src/cli/handlers/search.test.ts +374 -374
- package/src/cli/handlers/search.ts +17 -17
- package/src/cli/lib/cli-http-errors.test.ts +85 -85
- package/src/cli/lib/launcherUi.test.ts +74 -0
- package/src/cli/lib/launcherUi.ts +47 -0
- package/src/cli/lib/write/releases.ts +64 -1
- package/src/cli/lib/write-result.test.ts +3 -0
- package/src/cli/lib/write-result.ts +3 -0
- package/src/cli/lib/writeCommands.breadth.test.ts +143 -0
- package/src/cli/lib/writeCommands.ts +1 -0
- package/src/cli/subprocess.real-stack.test.ts +625 -611
- package/src/cli/subprocess.smoke.test.ts +954 -954
- package/src/client/api/useBoardChangeStream.ts +421 -168
- package/src/client/api/useBoardIndexStream.ts +35 -0
- package/src/client/components/board/BoardStatsChips.tsx +233 -233
- package/src/client/components/board/BoardStatsContext.tsx +41 -41
- package/src/client/components/board/boardHeaderButtonStyles.ts +38 -38
- package/src/client/components/board/shortcuts/useBoardShortcutKeydown.ts +49 -49
- package/src/client/components/board/useBoardCanvasPanScroll.ts +108 -108
- package/src/client/components/board/useBoardTaskContainerDroppableReact.ts +33 -33
- package/src/client/components/board/useBoardTaskSortableReact.ts +26 -26
- package/src/client/components/layout/AppShell.tsx +5 -2
- package/src/client/components/layout/NotificationToasts.tsx +38 -1
- package/src/client/components/multi-select.tsx +1206 -1206
- package/src/client/components/routing/BoardPage.tsx +20 -20
- package/src/client/components/routing/NavigationRegistrar.tsx +13 -13
- package/src/client/components/task/TaskCard.tsx +643 -643
- package/src/client/components/ui/badge.tsx +49 -49
- package/src/client/components/ui/button.tsx +65 -65
- package/src/client/components/ui/command.tsx +193 -193
- package/src/client/components/ui/dialog.tsx +163 -163
- package/src/client/components/ui/input-group.tsx +155 -155
- package/src/client/components/ui/input.tsx +19 -19
- package/src/client/components/ui/popover.tsx +87 -87
- package/src/client/components/ui/separator.tsx +28 -28
- package/src/client/components/ui/textarea.tsx +18 -18
- package/src/client/index.css +248 -248
- package/src/client/lib/appNavigate.ts +16 -16
- package/src/client/lib/taskCardDate.ts +111 -111
- package/src/client/lib/utils.ts +6 -6
- package/src/client/store/notificationUi.ts +14 -0
- package/src/server/auth.ts +351 -351
- package/src/server/events.ts +31 -4
- package/src/server/migrations/registry.ts +43 -43
- package/src/server/notificationEvents.ts +8 -1
- package/src/server/routes/boards.ts +15 -1
- package/src/server/routes/trash.ts +6 -1
- package/src/shared/boardEvents.ts +6 -0
- package/src/shared/runtimeConfig.ts +256 -256
- package/src/shared/skillsInstall.ts +2 -3
- package/dist/assets/architecture-YZFGNWBL-C1MoQeSs.js +0 -1
- package/dist/assets/architectureDiagram-Q4EWVU46-DUEfvDBu.js +0 -36
- package/dist/assets/channel-yBmN_ln0.js +0 -1
- package/dist/assets/classDiagram-6PBFFD2Q-Dx_f-9b7.js +0 -1
- package/dist/assets/classDiagram-v2-HSJHXN6E-CSfvZ-nt.js +0 -1
- package/dist/assets/clone-CXokakwV.js +0 -1
- package/dist/assets/cytoscape.esm-BIYWHPG0.js +0 -321
- package/dist/assets/dagre-Do0eD9eI.js +0 -1
- package/dist/assets/diagram-5BDNPKRD-Dq5yM_uY.js +0 -10
- package/dist/assets/diagram-G4DWMVQ6-D-SYOmKm.js +0 -24
- package/dist/assets/diagram-MMDJMWI5-lU5t9BZA.js +0 -43
- package/dist/assets/diagram-TYMM5635-6tfUbY3R.js +0 -24
- package/dist/assets/gitGraph-7Q5UKJZL-BXTuQaDM.js +0 -1
- package/dist/assets/graphlib-BIlXYGdM.js +0 -1
- package/dist/assets/identity-D4WOnl_h.js +0 -1
- package/dist/assets/index-CZZuue3D.js +0 -304
- package/dist/assets/index-hMFTu7sr.css +0 -1
- package/dist/assets/info-OMHHGYJF-BeeKt8-X.js +0 -1
- package/dist/assets/infoDiagram-42DDH7IO-wq_opQKO.js +0 -2
- package/dist/assets/mermaid-parser.core-DrLhKJ48.js +0 -4
- package/dist/assets/packet-4T2RLAQJ-DQ-H9_jd.js +0 -1
- package/dist/assets/pie-ZZUOXDRM-BSj0Jsyj.js +0 -1
- package/dist/assets/radar-PYXPWWZC-B7-oRPFL.js +0 -1
- package/dist/assets/reduce-Uumu9GdR.js +0 -1
- package/dist/assets/stateDiagram-FHFEXIEX-Dx5CjenB.js +0 -1
- package/dist/assets/stateDiagram-v2-QKLJ7IA2-C_PkrTdc.js +0 -1
- package/dist/assets/treeView-SZITEDCU-CFXle9Az.js +0 -1
- package/dist/assets/treemap-W4RFUUIX-CAW3vWh8.js +0 -1
- package/dist/assets/vennDiagram-DHZGUBPP-CT1ehozU.js +0 -34
- package/dist/assets/wardley-RL74JXVD-7q3ju4kc.js +0 -1
- package/scripts/postinstall-message.mjs +0 -160
- /package/dist/assets/{chunk-4BX2VUAB-ean5NKtU.js → chunk-4BX2VUAB-C70mcfQR.js} +0 -0
- /package/dist/assets/{chunk-55IACEB6-CvSRyJqy.js → chunk-55IACEB6-CWfnqcLM.js} +0 -0
- /package/dist/assets/{chunk-BSJP7CBP-D8kBlJsf.js → chunk-BSJP7CBP-B0LrXV9y.js} +0 -0
- /package/dist/assets/{chunk-FMBD7UC4-DrNhFt1N.js → chunk-FMBD7UC4-_mV71Mwu.js} +0 -0
- /package/dist/assets/{chunk-QZHKN3VN-Csp3OYJY.js → chunk-QZHKN3VN-t2nrsegL.js} +0 -0
- /package/dist/assets/{katex-8mXVa4k3.js → katex-B2dtGfSp.js} +0 -0
- /package/dist/assets/{rough.esm-DtEqI08j.js → rough.esm-DEh6Frf9.js} +0 -0
package/dist/index.html
CHANGED
|
@@ -25,24 +25,28 @@
|
|
|
25
25
|
} catch (e) {}
|
|
26
26
|
})();
|
|
27
27
|
</script>
|
|
28
|
-
<script type="module" crossorigin src="/assets/index-
|
|
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
|
-
<link rel="modulepreload" crossorigin href="/assets/chunk-ICPOFSXX-
|
|
31
|
+
<link rel="modulepreload" crossorigin href="/assets/chunk-ICPOFSXX-DkUVjrLw.js">
|
|
32
32
|
<link rel="modulepreload" crossorigin href="/assets/dist-BXMOO6xX.js">
|
|
33
|
-
<link rel="modulepreload" crossorigin href="/assets/identity-
|
|
34
|
-
<link rel="modulepreload" crossorigin href="/assets/chunk-5PVQY5BW-
|
|
35
|
-
<link rel="modulepreload" crossorigin href="/assets/chunk-U2HBQHQK-
|
|
36
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
37
|
-
<link rel="modulepreload" crossorigin href="/assets/chunk-
|
|
38
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
39
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
40
|
-
<link rel="modulepreload" crossorigin href="/assets/chunk-
|
|
33
|
+
<link rel="modulepreload" crossorigin href="/assets/identity-Me9aart9.js">
|
|
34
|
+
<link rel="modulepreload" crossorigin href="/assets/chunk-5PVQY5BW-cGfZCZGU.js">
|
|
35
|
+
<link rel="modulepreload" crossorigin href="/assets/chunk-U2HBQHQK-DogcerR6.js">
|
|
36
|
+
<link rel="modulepreload" crossorigin href="/assets/isEmpty-Cu0k-j1j.js">
|
|
37
|
+
<link rel="modulepreload" crossorigin href="/assets/chunk-X2U36JSP-CwVWdmZV.js">
|
|
38
|
+
<link rel="modulepreload" crossorigin href="/assets/chunk-ZZ45TVLE-Bk1S1YtS.js">
|
|
39
|
+
<link rel="modulepreload" crossorigin href="/assets/rough.esm-DEh6Frf9.js">
|
|
40
|
+
<link rel="modulepreload" crossorigin href="/assets/chunk-5FUZZQ4R-B_HuuUjf.js">
|
|
41
41
|
<link rel="modulepreload" crossorigin href="/assets/path-CIRGLb_6.js">
|
|
42
42
|
<link rel="modulepreload" crossorigin href="/assets/array-BCJ35G43.js">
|
|
43
|
-
<link rel="modulepreload" crossorigin href="/assets/line-
|
|
44
|
-
<link rel="modulepreload" crossorigin href="/assets/chunk-
|
|
45
|
-
<link rel="
|
|
43
|
+
<link rel="modulepreload" crossorigin href="/assets/line-otOkzGl8.js">
|
|
44
|
+
<link rel="modulepreload" crossorigin href="/assets/chunk-BSJP7CBP-B0LrXV9y.js">
|
|
45
|
+
<link rel="modulepreload" crossorigin href="/assets/chunk-ENJZ2VHE-DrWzOrpd.js">
|
|
46
|
+
<link rel="modulepreload" crossorigin href="/assets/chunk-336JU56O-BGQvSwLk.js">
|
|
47
|
+
<link rel="modulepreload" crossorigin href="/assets/chunk-426QAEUC-Cl9nQN9c.js">
|
|
48
|
+
<link rel="modulepreload" crossorigin href="/assets/chunk-XPW4576I-DQpNCogT.js">
|
|
49
|
+
<link rel="stylesheet" crossorigin href="/assets/index-BpzHnKdP.css">
|
|
46
50
|
</head>
|
|
47
51
|
<body>
|
|
48
52
|
<div id="root"></div>
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hiroleague/taskmanager",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "Task Manager for Solo Builders and AI Agents, working as a team",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
@@ -22,7 +22,6 @@
|
|
|
22
22
|
"skills",
|
|
23
23
|
"LICENSE",
|
|
24
24
|
"README.md",
|
|
25
|
-
"scripts/postinstall-message.mjs",
|
|
26
25
|
"scripts/stubs/node-domexception"
|
|
27
26
|
],
|
|
28
27
|
"overrides": {
|
|
@@ -33,7 +32,6 @@
|
|
|
33
32
|
"hirotm": "./src/cli/bin/hirotm.ts"
|
|
34
33
|
},
|
|
35
34
|
"scripts": {
|
|
36
|
-
"postinstall": "node scripts/postinstall-message.mjs",
|
|
37
35
|
"app": "bun run src/cli/bin/hirotaskmanager.ts",
|
|
38
36
|
"cli": "bun run src/cli/bin/hirotm.ts",
|
|
39
37
|
"dev": "concurrently -k -n api,web -c blue,green \"npm run dev:server\" \"npm run dev:client\"",
|
|
@@ -39,7 +39,9 @@ If you are not sure, use a generic name "AI Agent"
|
|
|
39
39
|
|
|
40
40
|
## Installation
|
|
41
41
|
|
|
42
|
-
|
|
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/
|
|
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
|
|
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/
|
|
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`.
|
|
@@ -29,6 +29,8 @@ import {
|
|
|
29
29
|
formatTextPrompt,
|
|
30
30
|
isAuthInitialized,
|
|
31
31
|
paintValue,
|
|
32
|
+
printSetupContinuePrompt,
|
|
33
|
+
printSetupNextSteps,
|
|
32
34
|
printPassphraseHint,
|
|
33
35
|
printRecoveryKey,
|
|
34
36
|
printRecoveryKeyExitHint,
|
|
@@ -319,7 +321,7 @@ async function waitForRecoveryKeyFile(authDir: string): Promise<string> {
|
|
|
319
321
|
return key;
|
|
320
322
|
}
|
|
321
323
|
|
|
322
|
-
async function
|
|
324
|
+
async function waitForEnterKey(): Promise<void> {
|
|
323
325
|
const rl = createInterface({
|
|
324
326
|
input: process.stdin,
|
|
325
327
|
output: process.stdout,
|
|
@@ -383,9 +385,21 @@ export function createHirotaskmanagerProgram(): Command {
|
|
|
383
385
|
},
|
|
384
386
|
};
|
|
385
387
|
|
|
386
|
-
//
|
|
387
|
-
//
|
|
388
|
-
ensureBundledSkills();
|
|
388
|
+
// Registry installs can skip lifecycle hooks, so setup itself must
|
|
389
|
+
// print the exact `npx skills` commands users should run next.
|
|
390
|
+
const skillsInstalled = ensureBundledSkills();
|
|
391
|
+
if (shouldRunSetup) {
|
|
392
|
+
printSetupNextSteps({
|
|
393
|
+
profileName: selectedProfile,
|
|
394
|
+
skillsInstalled,
|
|
395
|
+
});
|
|
396
|
+
if (setupResult.setupMeta.justFinishedInteractiveSetup) {
|
|
397
|
+
// Keep setup blocked here so users see the required skills step
|
|
398
|
+
// before the server starts and the browser steals focus.
|
|
399
|
+
printSetupContinuePrompt();
|
|
400
|
+
await waitForEnterKey();
|
|
401
|
+
}
|
|
402
|
+
}
|
|
389
403
|
|
|
390
404
|
const launcherConfig = setupResult.config;
|
|
391
405
|
|
|
@@ -471,7 +485,7 @@ export function createHirotaskmanagerProgram(): Command {
|
|
|
471
485
|
const recoveryKey = await waitForRecoveryKeyFile(authDir);
|
|
472
486
|
printRecoveryKey(recoveryKey);
|
|
473
487
|
printRecoveryKeyExitHint(runningUrl);
|
|
474
|
-
await
|
|
488
|
+
await waitForEnterKey();
|
|
475
489
|
}
|
|
476
490
|
} finally {
|
|
477
491
|
if (previousSilentStartup === undefined) {
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { describe, expect, test } from "bun:test";
|
|
2
|
+
import {
|
|
3
|
+
getHirotmLauncherSetupCommand,
|
|
4
|
+
shouldRequireLauncherSetupForHirotm,
|
|
5
|
+
} from "./program";
|
|
6
|
+
|
|
7
|
+
describe("shouldRequireLauncherSetupForHirotm", () => {
|
|
8
|
+
test("requires launcher setup for installed mode without a saved profile", () => {
|
|
9
|
+
expect(
|
|
10
|
+
shouldRequireLauncherSetupForHirotm({
|
|
11
|
+
runtimeKind: "installed",
|
|
12
|
+
hasInstalledProfileConfig: false,
|
|
13
|
+
}),
|
|
14
|
+
).toBe(true);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
test("allows installed mode once the profile config exists", () => {
|
|
18
|
+
expect(
|
|
19
|
+
shouldRequireLauncherSetupForHirotm({
|
|
20
|
+
runtimeKind: "installed",
|
|
21
|
+
hasInstalledProfileConfig: true,
|
|
22
|
+
}),
|
|
23
|
+
).toBe(false);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
test("never blocks dev mode on launcher setup", () => {
|
|
27
|
+
expect(
|
|
28
|
+
shouldRequireLauncherSetupForHirotm({
|
|
29
|
+
runtimeKind: "dev",
|
|
30
|
+
hasInstalledProfileConfig: false,
|
|
31
|
+
}),
|
|
32
|
+
).toBe(false);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
describe("getHirotmLauncherSetupCommand", () => {
|
|
37
|
+
test("uses the plain launcher command for the default profile", () => {
|
|
38
|
+
expect(getHirotmLauncherSetupCommand("default")).toBe("hirotaskmanager");
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
test("includes the selected profile for named profiles", () => {
|
|
42
|
+
expect(getHirotmLauncherSetupCommand("work")).toBe(
|
|
43
|
+
"hirotaskmanager --profile work",
|
|
44
|
+
);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
@@ -8,8 +8,56 @@ import { registerStatusCommands } from "../commands/statuses";
|
|
|
8
8
|
import { registerTaskCommands } from "../commands/tasks";
|
|
9
9
|
import { registerTrashCommands } from "../commands/trash";
|
|
10
10
|
import { createDefaultCliContext } from "../handlers/context";
|
|
11
|
+
import { hasCliConfigFile, resolveProfileName, resolveRuntimeKind } from "../lib/config";
|
|
11
12
|
import { syncCliOutputFormatFromGlobals } from "../lib/cliFormat";
|
|
12
|
-
import { exitWithError, resetCliOutputFormat } from "../lib/output";
|
|
13
|
+
import { CliError, exitWithError, resetCliOutputFormat } from "../lib/output";
|
|
14
|
+
import { CLI_ERR } from "../types/errors";
|
|
15
|
+
|
|
16
|
+
export function shouldRequireLauncherSetupForHirotm(options: {
|
|
17
|
+
runtimeKind: "installed" | "dev";
|
|
18
|
+
hasInstalledProfileConfig: boolean;
|
|
19
|
+
}): boolean {
|
|
20
|
+
return (
|
|
21
|
+
options.runtimeKind === "installed" &&
|
|
22
|
+
options.hasInstalledProfileConfig === false
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function getHirotmLauncherSetupCommand(profileName: string): string {
|
|
27
|
+
return profileName === "default"
|
|
28
|
+
? "hirotaskmanager"
|
|
29
|
+
: `hirotaskmanager --profile ${profileName}`;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function ensureInstalledProfileIsReadyForHirotm(): void {
|
|
33
|
+
const runtimeKind = resolveRuntimeKind();
|
|
34
|
+
const profileName = resolveProfileName({ kind: "installed" });
|
|
35
|
+
const hasInstalledProfileConfig = hasCliConfigFile({
|
|
36
|
+
profile: profileName,
|
|
37
|
+
kind: "installed",
|
|
38
|
+
});
|
|
39
|
+
if (
|
|
40
|
+
!shouldRequireLauncherSetupForHirotm({
|
|
41
|
+
runtimeKind,
|
|
42
|
+
hasInstalledProfileConfig,
|
|
43
|
+
})
|
|
44
|
+
) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const setupCommand = getHirotmLauncherSetupCommand(profileName);
|
|
49
|
+
// Package managers can skip lifecycle scripts, so actionable `hirotm`
|
|
50
|
+
// commands must direct users back to the launcher for first-run setup.
|
|
51
|
+
throw new CliError(
|
|
52
|
+
`No installed TaskManager profile found for "${profileName}". Run \`${setupCommand}\` first to create and configure this profile.`,
|
|
53
|
+
2,
|
|
54
|
+
{
|
|
55
|
+
code: CLI_ERR.missingRequired,
|
|
56
|
+
profile: profileName,
|
|
57
|
+
hint: `Run \`${setupCommand}\` first.`,
|
|
58
|
+
},
|
|
59
|
+
);
|
|
60
|
+
}
|
|
13
61
|
|
|
14
62
|
/**
|
|
15
63
|
* Build the hirotm Commander program.
|
|
@@ -45,6 +93,7 @@ export function createHirotmProgram(): Command {
|
|
|
45
93
|
quiet?: boolean;
|
|
46
94
|
};
|
|
47
95
|
syncCliOutputFormatFromGlobals(opts);
|
|
96
|
+
ensureInstalledProfileIsReadyForHirotm();
|
|
48
97
|
});
|
|
49
98
|
|
|
50
99
|
const ctx = createDefaultCliContext();
|
|
@@ -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")
|