@waymakeros/cli 2.0.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/README.md +158 -0
- package/dist/cli/cli.d.ts +7 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/cli/cli.js +703 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/commands/auth.d.ts +14 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/auth.js +507 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/init.d.ts +13 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +297 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/kanban.d.ts +12 -0
- package/dist/cli/commands/kanban.d.ts.map +1 -0
- package/dist/cli/commands/kanban.js +71 -0
- package/dist/cli/commands/kanban.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +12 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +170 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +12 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +222 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/daemon.d.ts +106 -0
- package/dist/cli/daemon.d.ts.map +1 -0
- package/dist/cli/daemon.js +393 -0
- package/dist/cli/daemon.js.map +1 -0
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +90 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +238 -0
- package/dist/index.js.map +1 -0
- package/dist/simple-server.d.ts +7 -0
- package/dist/simple-server.d.ts.map +1 -0
- package/dist/simple-server.js +157 -0
- package/dist/simple-server.js.map +1 -0
- package/dist/sync/commander-client.d.ts +161 -0
- package/dist/sync/commander-client.d.ts.map +1 -0
- package/dist/sync/commander-client.js +405 -0
- package/dist/sync/commander-client.js.map +1 -0
- package/dist/sync/config-manager.d.ts +48 -0
- package/dist/sync/config-manager.d.ts.map +1 -0
- package/dist/sync/config-manager.js +169 -0
- package/dist/sync/config-manager.js.map +1 -0
- package/dist/sync/file-watcher.d.ts +53 -0
- package/dist/sync/file-watcher.d.ts.map +1 -0
- package/dist/sync/file-watcher.js +228 -0
- package/dist/sync/file-watcher.js.map +1 -0
- package/dist/sync/folder-service.d.ts +110 -0
- package/dist/sync/folder-service.d.ts.map +1 -0
- package/dist/sync/folder-service.js +298 -0
- package/dist/sync/folder-service.js.map +1 -0
- package/dist/sync/folder-status-mapper.d.ts +106 -0
- package/dist/sync/folder-status-mapper.d.ts.map +1 -0
- package/dist/sync/folder-status-mapper.js +235 -0
- package/dist/sync/folder-status-mapper.js.map +1 -0
- package/dist/sync/layer-resolver.d.ts +54 -0
- package/dist/sync/layer-resolver.d.ts.map +1 -0
- package/dist/sync/layer-resolver.js +206 -0
- package/dist/sync/layer-resolver.js.map +1 -0
- package/dist/sync/markdown-parser.d.ts +49 -0
- package/dist/sync/markdown-parser.d.ts.map +1 -0
- package/dist/sync/markdown-parser.js +202 -0
- package/dist/sync/markdown-parser.js.map +1 -0
- package/dist/sync/reverse-sync.d.ts +139 -0
- package/dist/sync/reverse-sync.d.ts.map +1 -0
- package/dist/sync/reverse-sync.js +773 -0
- package/dist/sync/reverse-sync.js.map +1 -0
- package/dist/sync/sync-engine.d.ts +157 -0
- package/dist/sync/sync-engine.d.ts.map +1 -0
- package/dist/sync/sync-engine.js +875 -0
- package/dist/sync/sync-engine.js.map +1 -0
- package/dist/sync/sync-index.d.ts +150 -0
- package/dist/sync/sync-index.d.ts.map +1 -0
- package/dist/sync/sync-index.js +287 -0
- package/dist/sync/sync-index.js.map +1 -0
- package/dist/sync/trinity-mapper.d.ts +62 -0
- package/dist/sync/trinity-mapper.d.ts.map +1 -0
- package/dist/sync/trinity-mapper.js +548 -0
- package/dist/sync/trinity-mapper.js.map +1 -0
- package/dist/sync/types.d.ts +176 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/sync/types.js +6 -0
- package/dist/sync/types.js.map +1 -0
- package/dist/tools/apply-framework.d.ts +7 -0
- package/dist/tools/apply-framework.d.ts.map +1 -0
- package/dist/tools/apply-framework.js +30 -0
- package/dist/tools/apply-framework.js.map +1 -0
- package/dist/tools/commander-comment-create.d.ts +7 -0
- package/dist/tools/commander-comment-create.d.ts.map +1 -0
- package/dist/tools/commander-comment-create.js +100 -0
- package/dist/tools/commander-comment-create.js.map +1 -0
- package/dist/tools/commander-comment-list.d.ts +7 -0
- package/dist/tools/commander-comment-list.d.ts.map +1 -0
- package/dist/tools/commander-comment-list.js +110 -0
- package/dist/tools/commander-comment-list.js.map +1 -0
- package/dist/tools/commander-document-create.d.ts +7 -0
- package/dist/tools/commander-document-create.d.ts.map +1 -0
- package/dist/tools/commander-document-create.js +168 -0
- package/dist/tools/commander-document-create.js.map +1 -0
- package/dist/tools/commander-document-get.d.ts +7 -0
- package/dist/tools/commander-document-get.d.ts.map +1 -0
- package/dist/tools/commander-document-get.js +104 -0
- package/dist/tools/commander-document-get.js.map +1 -0
- package/dist/tools/commander-document-list.d.ts +7 -0
- package/dist/tools/commander-document-list.d.ts.map +1 -0
- package/dist/tools/commander-document-list.js +117 -0
- package/dist/tools/commander-document-list.js.map +1 -0
- package/dist/tools/commander-document-update.d.ts +7 -0
- package/dist/tools/commander-document-update.d.ts.map +1 -0
- package/dist/tools/commander-document-update.js +133 -0
- package/dist/tools/commander-document-update.js.map +1 -0
- package/dist/tools/commander-folder-create.d.ts +7 -0
- package/dist/tools/commander-folder-create.d.ts.map +1 -0
- package/dist/tools/commander-folder-create.js +157 -0
- package/dist/tools/commander-folder-create.js.map +1 -0
- package/dist/tools/commander-folder-delete.d.ts +7 -0
- package/dist/tools/commander-folder-delete.d.ts.map +1 -0
- package/dist/tools/commander-folder-delete.js +85 -0
- package/dist/tools/commander-folder-delete.js.map +1 -0
- package/dist/tools/commander-folder-get.d.ts +7 -0
- package/dist/tools/commander-folder-get.d.ts.map +1 -0
- package/dist/tools/commander-folder-get.js +94 -0
- package/dist/tools/commander-folder-get.js.map +1 -0
- package/dist/tools/commander-folder-list.d.ts +7 -0
- package/dist/tools/commander-folder-list.d.ts.map +1 -0
- package/dist/tools/commander-folder-list.js +96 -0
- package/dist/tools/commander-folder-list.js.map +1 -0
- package/dist/tools/commander-folder-update.d.ts +7 -0
- package/dist/tools/commander-folder-update.d.ts.map +1 -0
- package/dist/tools/commander-folder-update.js +120 -0
- package/dist/tools/commander-folder-update.js.map +1 -0
- package/dist/tools/commander-framework-apply.d.ts +7 -0
- package/dist/tools/commander-framework-apply.d.ts.map +1 -0
- package/dist/tools/commander-framework-apply.js +110 -0
- package/dist/tools/commander-framework-apply.js.map +1 -0
- package/dist/tools/commander-framework-categories.d.ts +7 -0
- package/dist/tools/commander-framework-categories.d.ts.map +1 -0
- package/dist/tools/commander-framework-categories.js +90 -0
- package/dist/tools/commander-framework-categories.js.map +1 -0
- package/dist/tools/commander-framework-get.d.ts +7 -0
- package/dist/tools/commander-framework-get.d.ts.map +1 -0
- package/dist/tools/commander-framework-get.js +124 -0
- package/dist/tools/commander-framework-get.js.map +1 -0
- package/dist/tools/commander-framework-list.d.ts +7 -0
- package/dist/tools/commander-framework-list.d.ts.map +1 -0
- package/dist/tools/commander-framework-list.js +103 -0
- package/dist/tools/commander-framework-list.js.map +1 -0
- package/dist/tools/commander-goal-create.d.ts +7 -0
- package/dist/tools/commander-goal-create.d.ts.map +1 -0
- package/dist/tools/commander-goal-create.js +130 -0
- package/dist/tools/commander-goal-create.js.map +1 -0
- package/dist/tools/commander-goal-get.d.ts +7 -0
- package/dist/tools/commander-goal-get.d.ts.map +1 -0
- package/dist/tools/commander-goal-get.js +83 -0
- package/dist/tools/commander-goal-get.js.map +1 -0
- package/dist/tools/commander-goal-list.d.ts +7 -0
- package/dist/tools/commander-goal-list.d.ts.map +1 -0
- package/dist/tools/commander-goal-list.js +111 -0
- package/dist/tools/commander-goal-list.js.map +1 -0
- package/dist/tools/commander-goal-update.d.ts +7 -0
- package/dist/tools/commander-goal-update.d.ts.map +1 -0
- package/dist/tools/commander-goal-update.js +110 -0
- package/dist/tools/commander-goal-update.js.map +1 -0
- package/dist/tools/commander-key-result-create.d.ts +7 -0
- package/dist/tools/commander-key-result-create.d.ts.map +1 -0
- package/dist/tools/commander-key-result-create.js +134 -0
- package/dist/tools/commander-key-result-create.js.map +1 -0
- package/dist/tools/commander-key-result-update.d.ts +7 -0
- package/dist/tools/commander-key-result-update.d.ts.map +1 -0
- package/dist/tools/commander-key-result-update.js +119 -0
- package/dist/tools/commander-key-result-update.js.map +1 -0
- package/dist/tools/commander-layer-create.d.ts +7 -0
- package/dist/tools/commander-layer-create.d.ts.map +1 -0
- package/dist/tools/commander-layer-create.js +167 -0
- package/dist/tools/commander-layer-create.js.map +1 -0
- package/dist/tools/commander-layer-delete.d.ts +7 -0
- package/dist/tools/commander-layer-delete.d.ts.map +1 -0
- package/dist/tools/commander-layer-delete.js +141 -0
- package/dist/tools/commander-layer-delete.js.map +1 -0
- package/dist/tools/commander-layer-list.d.ts +7 -0
- package/dist/tools/commander-layer-list.d.ts.map +1 -0
- package/dist/tools/commander-layer-list.js +102 -0
- package/dist/tools/commander-layer-list.js.map +1 -0
- package/dist/tools/commander-presentation.d.ts +7 -0
- package/dist/tools/commander-presentation.d.ts.map +1 -0
- package/dist/tools/commander-presentation.js +185 -0
- package/dist/tools/commander-presentation.js.map +1 -0
- package/dist/tools/commander-project-create.d.ts +7 -0
- package/dist/tools/commander-project-create.d.ts.map +1 -0
- package/dist/tools/commander-project-create.js +130 -0
- package/dist/tools/commander-project-create.js.map +1 -0
- package/dist/tools/commander-project-get.d.ts +7 -0
- package/dist/tools/commander-project-get.d.ts.map +1 -0
- package/dist/tools/commander-project-get.js +107 -0
- package/dist/tools/commander-project-get.js.map +1 -0
- package/dist/tools/commander-project-list.d.ts +7 -0
- package/dist/tools/commander-project-list.d.ts.map +1 -0
- package/dist/tools/commander-project-list.js +104 -0
- package/dist/tools/commander-project-list.js.map +1 -0
- package/dist/tools/commander-project-update.d.ts +7 -0
- package/dist/tools/commander-project-update.d.ts.map +1 -0
- package/dist/tools/commander-project-update.js +126 -0
- package/dist/tools/commander-project-update.js.map +1 -0
- package/dist/tools/commander-project.d.ts +7 -0
- package/dist/tools/commander-project.d.ts.map +1 -0
- package/dist/tools/commander-project.js +144 -0
- package/dist/tools/commander-project.js.map +1 -0
- package/dist/tools/commander-role-assign.d.ts +7 -0
- package/dist/tools/commander-role-assign.d.ts.map +1 -0
- package/dist/tools/commander-role-assign.js +115 -0
- package/dist/tools/commander-role-assign.js.map +1 -0
- package/dist/tools/commander-role-create.d.ts +7 -0
- package/dist/tools/commander-role-create.d.ts.map +1 -0
- package/dist/tools/commander-role-create.js +130 -0
- package/dist/tools/commander-role-create.js.map +1 -0
- package/dist/tools/commander-role-get.d.ts +7 -0
- package/dist/tools/commander-role-get.d.ts.map +1 -0
- package/dist/tools/commander-role-get.js +108 -0
- package/dist/tools/commander-role-get.js.map +1 -0
- package/dist/tools/commander-role-list.d.ts +7 -0
- package/dist/tools/commander-role-list.d.ts.map +1 -0
- package/dist/tools/commander-role-list.js +106 -0
- package/dist/tools/commander-role-list.js.map +1 -0
- package/dist/tools/commander-role-update.d.ts +7 -0
- package/dist/tools/commander-role-update.d.ts.map +1 -0
- package/dist/tools/commander-role-update.js +126 -0
- package/dist/tools/commander-role-update.js.map +1 -0
- package/dist/tools/commander-search.d.ts +7 -0
- package/dist/tools/commander-search.d.ts.map +1 -0
- package/dist/tools/commander-search.js +146 -0
- package/dist/tools/commander-search.js.map +1 -0
- package/dist/tools/commander-sheet-create.d.ts +7 -0
- package/dist/tools/commander-sheet-create.d.ts.map +1 -0
- package/dist/tools/commander-sheet-create.js +160 -0
- package/dist/tools/commander-sheet-create.js.map +1 -0
- package/dist/tools/commander-sheet-get.d.ts +7 -0
- package/dist/tools/commander-sheet-get.d.ts.map +1 -0
- package/dist/tools/commander-sheet-get.js +128 -0
- package/dist/tools/commander-sheet-get.js.map +1 -0
- package/dist/tools/commander-sheet-list.d.ts +7 -0
- package/dist/tools/commander-sheet-list.d.ts.map +1 -0
- package/dist/tools/commander-sheet-list.js +108 -0
- package/dist/tools/commander-sheet-list.js.map +1 -0
- package/dist/tools/commander-sheet-update.d.ts +7 -0
- package/dist/tools/commander-sheet-update.d.ts.map +1 -0
- package/dist/tools/commander-sheet-update.js +163 -0
- package/dist/tools/commander-sheet-update.js.map +1 -0
- package/dist/tools/commander-status-list.d.ts +7 -0
- package/dist/tools/commander-status-list.d.ts.map +1 -0
- package/dist/tools/commander-status-list.js +103 -0
- package/dist/tools/commander-status-list.js.map +1 -0
- package/dist/tools/commander-task-assign.d.ts +7 -0
- package/dist/tools/commander-task-assign.d.ts.map +1 -0
- package/dist/tools/commander-task-assign.js +91 -0
- package/dist/tools/commander-task-assign.js.map +1 -0
- package/dist/tools/commander-task-create.d.ts +7 -0
- package/dist/tools/commander-task-create.d.ts.map +1 -0
- package/dist/tools/commander-task-create.js +142 -0
- package/dist/tools/commander-task-create.js.map +1 -0
- package/dist/tools/commander-task-delete.d.ts +7 -0
- package/dist/tools/commander-task-delete.d.ts.map +1 -0
- package/dist/tools/commander-task-delete.js +88 -0
- package/dist/tools/commander-task-delete.js.map +1 -0
- package/dist/tools/commander-task-list-mine.d.ts +7 -0
- package/dist/tools/commander-task-list-mine.d.ts.map +1 -0
- package/dist/tools/commander-task-list-mine.js +109 -0
- package/dist/tools/commander-task-list-mine.js.map +1 -0
- package/dist/tools/commander-task-read.d.ts +10 -0
- package/dist/tools/commander-task-read.d.ts.map +1 -0
- package/dist/tools/commander-task-read.js +96 -0
- package/dist/tools/commander-task-read.js.map +1 -0
- package/dist/tools/commander-task-update.d.ts +7 -0
- package/dist/tools/commander-task-update.d.ts.map +1 -0
- package/dist/tools/commander-task-update.js +159 -0
- package/dist/tools/commander-task-update.js.map +1 -0
- package/dist/tools/commander-taskboard-tasks.d.ts +7 -0
- package/dist/tools/commander-taskboard-tasks.d.ts.map +1 -0
- package/dist/tools/commander-taskboard-tasks.js +97 -0
- package/dist/tools/commander-taskboard-tasks.js.map +1 -0
- package/dist/tools/commander-team-add-member.d.ts +7 -0
- package/dist/tools/commander-team-add-member.d.ts.map +1 -0
- package/dist/tools/commander-team-add-member.js +104 -0
- package/dist/tools/commander-team-add-member.js.map +1 -0
- package/dist/tools/commander-team-create.d.ts +7 -0
- package/dist/tools/commander-team-create.d.ts.map +1 -0
- package/dist/tools/commander-team-create.js +117 -0
- package/dist/tools/commander-team-create.js.map +1 -0
- package/dist/tools/commander-team-list.d.ts +7 -0
- package/dist/tools/commander-team-list.d.ts.map +1 -0
- package/dist/tools/commander-team-list.js +94 -0
- package/dist/tools/commander-team-list.js.map +1 -0
- package/dist/tools/commander-team-remove-member.d.ts +7 -0
- package/dist/tools/commander-team-remove-member.d.ts.map +1 -0
- package/dist/tools/commander-team-remove-member.js +98 -0
- package/dist/tools/commander-team-remove-member.js.map +1 -0
- package/dist/tools/commander-user-get.d.ts +7 -0
- package/dist/tools/commander-user-get.d.ts.map +1 -0
- package/dist/tools/commander-user-get.js +101 -0
- package/dist/tools/commander-user-get.js.map +1 -0
- package/dist/tools/commander-user-invite.d.ts +7 -0
- package/dist/tools/commander-user-invite.d.ts.map +1 -0
- package/dist/tools/commander-user-invite.js +119 -0
- package/dist/tools/commander-user-invite.js.map +1 -0
- package/dist/tools/commander-user-list.d.ts +7 -0
- package/dist/tools/commander-user-list.d.ts.map +1 -0
- package/dist/tools/commander-user-list.js +108 -0
- package/dist/tools/commander-user-list.js.map +1 -0
- package/dist/tools/commander-workspace-create.d.ts +7 -0
- package/dist/tools/commander-workspace-create.d.ts.map +1 -0
- package/dist/tools/commander-workspace-create.js +124 -0
- package/dist/tools/commander-workspace-create.js.map +1 -0
- package/dist/tools/commander-workspace-list.d.ts +7 -0
- package/dist/tools/commander-workspace-list.d.ts.map +1 -0
- package/dist/tools/commander-workspace-list.js +95 -0
- package/dist/tools/commander-workspace-list.js.map +1 -0
- package/dist/tools/commander-workspace-update.d.ts +7 -0
- package/dist/tools/commander-workspace-update.d.ts.map +1 -0
- package/dist/tools/commander-workspace-update.js +118 -0
- package/dist/tools/commander-workspace-update.js.map +1 -0
- package/dist/tools/commander-workspace.d.ts +7 -0
- package/dist/tools/commander-workspace.d.ts.map +1 -0
- package/dist/tools/commander-workspace.js +131 -0
- package/dist/tools/commander-workspace.js.map +1 -0
- package/dist/tools/create-kanban.d.ts +7 -0
- package/dist/tools/create-kanban.d.ts.map +1 -0
- package/dist/tools/create-kanban.js +32 -0
- package/dist/tools/create-kanban.js.map +1 -0
- package/dist/tools/create-table.d.ts +7 -0
- package/dist/tools/create-table.d.ts.map +1 -0
- package/dist/tools/create-table.js +188 -0
- package/dist/tools/create-table.js.map +1 -0
- package/dist/tools/search-knowledge.d.ts +7 -0
- package/dist/tools/search-knowledge.d.ts.map +1 -0
- package/dist/tools/search-knowledge.js +33 -0
- package/dist/tools/search-knowledge.js.map +1 -0
- package/dist/tools/waymaker-kanban-view.d.ts +7 -0
- package/dist/tools/waymaker-kanban-view.d.ts.map +1 -0
- package/dist/tools/waymaker-kanban-view.js +255 -0
- package/dist/tools/waymaker-kanban-view.js.map +1 -0
- package/dist/tools/waymaker-sync-configure.d.ts +13 -0
- package/dist/tools/waymaker-sync-configure.d.ts.map +1 -0
- package/dist/tools/waymaker-sync-configure.js +291 -0
- package/dist/tools/waymaker-sync-configure.js.map +1 -0
- package/dist/tools/waymaker-sync-file.d.ts +7 -0
- package/dist/tools/waymaker-sync-file.d.ts.map +1 -0
- package/dist/tools/waymaker-sync-file.js +79 -0
- package/dist/tools/waymaker-sync-file.js.map +1 -0
- package/dist/tools/waymaker-sync-poll.d.ts +8 -0
- package/dist/tools/waymaker-sync-poll.d.ts.map +1 -0
- package/dist/tools/waymaker-sync-poll.js +398 -0
- package/dist/tools/waymaker-sync-poll.js.map +1 -0
- package/dist/tools/waymaker-sync-start.d.ts +7 -0
- package/dist/tools/waymaker-sync-start.d.ts.map +1 -0
- package/dist/tools/waymaker-sync-start.js +56 -0
- package/dist/tools/waymaker-sync-start.js.map +1 -0
- package/dist/tools/waymaker-sync-status.d.ts +7 -0
- package/dist/tools/waymaker-sync-status.d.ts.map +1 -0
- package/dist/tools/waymaker-sync-status.js +45 -0
- package/dist/tools/waymaker-sync-status.js.map +1 -0
- package/dist/tools/waymaker-sync-stop.d.ts +7 -0
- package/dist/tools/waymaker-sync-stop.d.ts.map +1 -0
- package/dist/tools/waymaker-sync-stop.js +56 -0
- package/dist/tools/waymaker-sync-stop.js.map +1 -0
- package/dist/tools/waymaker-sync-workspace.d.ts +26 -0
- package/dist/tools/waymaker-sync-workspace.d.ts.map +1 -0
- package/dist/tools/waymaker-sync-workspace.js +148 -0
- package/dist/tools/waymaker-sync-workspace.js.map +1 -0
- package/dist/tools/waymaker-sync-workspace.tool.d.ts +9 -0
- package/dist/tools/waymaker-sync-workspace.tool.d.ts.map +1 -0
- package/dist/tools/waymaker-sync-workspace.tool.js +68 -0
- package/dist/tools/waymaker-sync-workspace.tool.js.map +1 -0
- package/dist/types/tool.d.ts +13 -0
- package/dist/types/tool.d.ts.map +1 -0
- package/dist/types/tool.js +2 -0
- package/dist/types/tool.js.map +1 -0
- package/dist/utils/daemon-health.d.ts +21 -0
- package/dist/utils/daemon-health.d.ts.map +1 -0
- package/dist/utils/daemon-health.js +40 -0
- package/dist/utils/daemon-health.js.map +1 -0
- package/dist/utils/fetch-ipv4.d.ts +36 -0
- package/dist/utils/fetch-ipv4.d.ts.map +1 -0
- package/dist/utils/fetch-ipv4.js +91 -0
- package/dist/utils/fetch-ipv4.js.map +1 -0
- package/package.json +62 -0
package/dist/cli/cli.js
ADDED
|
@@ -0,0 +1,703 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Waymaker Sync CLI
|
|
4
|
+
* Command-line interface for Waymaker Sync engine
|
|
5
|
+
*/
|
|
6
|
+
import { SyncDaemon } from './daemon.js';
|
|
7
|
+
import { ConfigManager } from '../sync/config-manager.js';
|
|
8
|
+
import { SyncEngine } from '../sync/sync-engine.js';
|
|
9
|
+
const COMMANDS = {
|
|
10
|
+
START: 'start',
|
|
11
|
+
STOP: 'stop',
|
|
12
|
+
STATUS: 'status',
|
|
13
|
+
INIT: 'init',
|
|
14
|
+
LAYER: 'layer',
|
|
15
|
+
KANBAN: 'kanban',
|
|
16
|
+
SYNC_ALL: 'sync-all',
|
|
17
|
+
};
|
|
18
|
+
async function main() {
|
|
19
|
+
const args = process.argv.slice(2);
|
|
20
|
+
// Default to current directory
|
|
21
|
+
const projectPath = process.cwd();
|
|
22
|
+
if (args.length === 0) {
|
|
23
|
+
printHelp();
|
|
24
|
+
process.exit(0);
|
|
25
|
+
}
|
|
26
|
+
const command = args[0];
|
|
27
|
+
try {
|
|
28
|
+
switch (command) {
|
|
29
|
+
case COMMANDS.START:
|
|
30
|
+
await startCommand(projectPath);
|
|
31
|
+
break;
|
|
32
|
+
case COMMANDS.STOP:
|
|
33
|
+
await stopCommand(projectPath);
|
|
34
|
+
break;
|
|
35
|
+
case COMMANDS.STATUS:
|
|
36
|
+
await statusCommand(projectPath);
|
|
37
|
+
break;
|
|
38
|
+
case COMMANDS.INIT:
|
|
39
|
+
await initCommand(projectPath, args.slice(1));
|
|
40
|
+
break;
|
|
41
|
+
case COMMANDS.LAYER:
|
|
42
|
+
await layerCommand(projectPath, args.slice(1));
|
|
43
|
+
break;
|
|
44
|
+
case COMMANDS.KANBAN:
|
|
45
|
+
await kanbanCommand(projectPath, args.slice(1));
|
|
46
|
+
break;
|
|
47
|
+
case COMMANDS.SYNC_ALL:
|
|
48
|
+
await syncAllCommand(projectPath, args.slice(1));
|
|
49
|
+
break;
|
|
50
|
+
default:
|
|
51
|
+
console.error(`Unknown command: ${command}`);
|
|
52
|
+
printHelp();
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
console.error('Error:', error instanceof Error ? error.message : String(error));
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Start sync daemon
|
|
63
|
+
*/
|
|
64
|
+
async function startCommand(projectPath) {
|
|
65
|
+
console.log('Starting Waymaker Sync daemon...');
|
|
66
|
+
const daemon = new SyncDaemon(projectPath);
|
|
67
|
+
if (daemon.isRunning()) {
|
|
68
|
+
console.log('ā Sync daemon is already running');
|
|
69
|
+
console.log(`PID: ${daemon.getPid()}`);
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
await daemon.start();
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Stop sync daemon
|
|
76
|
+
*/
|
|
77
|
+
async function stopCommand(projectPath) {
|
|
78
|
+
console.log('Stopping Waymaker Sync daemon...');
|
|
79
|
+
const daemon = new SyncDaemon(projectPath);
|
|
80
|
+
if (!daemon.isRunning()) {
|
|
81
|
+
console.log('Sync daemon is not running');
|
|
82
|
+
process.exit(0);
|
|
83
|
+
}
|
|
84
|
+
const pid = daemon.getPid();
|
|
85
|
+
if (pid) {
|
|
86
|
+
// Send SIGTERM to graceful shutdown
|
|
87
|
+
process.kill(pid, 'SIGTERM');
|
|
88
|
+
console.log(`ā
Sent stop signal to daemon (PID: ${pid})`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Show sync daemon status
|
|
93
|
+
*/
|
|
94
|
+
async function statusCommand(projectPath) {
|
|
95
|
+
const daemon = new SyncDaemon(projectPath);
|
|
96
|
+
const status = daemon.getStatus();
|
|
97
|
+
console.log('\nš Waymaker Sync Status\n');
|
|
98
|
+
console.log(`Running: ${status.running ? 'ā
Yes' : 'ā No'}`);
|
|
99
|
+
if (status.running && status.pid) {
|
|
100
|
+
console.log(`PID: ${status.pid}`);
|
|
101
|
+
}
|
|
102
|
+
if (status.status) {
|
|
103
|
+
const s = status.status;
|
|
104
|
+
console.log(`\nSync Statistics:`);
|
|
105
|
+
console.log(` Started: ${s.startedAt?.toLocaleString() || 'N/A'}`);
|
|
106
|
+
console.log(` Files Watched: ${s.filesWatched}`);
|
|
107
|
+
console.log(` Last Sync: ${s.lastSyncAt?.toLocaleString() || 'Never'}`);
|
|
108
|
+
console.log(` Total Syncs: ${s.syncCount}`);
|
|
109
|
+
console.log(` Errors: ${s.errorCount}`);
|
|
110
|
+
if (s.recentErrors.length > 0) {
|
|
111
|
+
console.log(`\nRecent Errors:`);
|
|
112
|
+
s.recentErrors.forEach((err, i) => {
|
|
113
|
+
console.log(` ${i + 1}. [${err.timestamp.toLocaleTimeString()}] ${err.filePath}`);
|
|
114
|
+
console.log(` ${err.error}`);
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
console.log();
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Initialize Waymaker Sync configuration
|
|
122
|
+
*/
|
|
123
|
+
async function initCommand(projectPath, args) {
|
|
124
|
+
console.log('Initializing Waymaker Sync configuration...\n');
|
|
125
|
+
const configManager = new ConfigManager(projectPath);
|
|
126
|
+
// Check if config already exists
|
|
127
|
+
if (configManager.exists()) {
|
|
128
|
+
console.log('ā Configuration already exists at:');
|
|
129
|
+
console.log(` ${configManager.getConfigPath()}`);
|
|
130
|
+
console.log('\nUse --force to overwrite existing configuration');
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
// Parse command line arguments
|
|
134
|
+
const options = parseInitOptions(args);
|
|
135
|
+
if (!options.workspace_id || !options.project_id || !options.organization_id) {
|
|
136
|
+
console.error('Missing required options. Usage:');
|
|
137
|
+
console.error(' waymaker sync init \\');
|
|
138
|
+
console.error(' --workspace-id <uuid> \\');
|
|
139
|
+
console.error(' --project-id <uuid> \\');
|
|
140
|
+
console.error(' --organization-id <clerk-org-id> \\');
|
|
141
|
+
console.error(' [--taskboard-id <uuid>]');
|
|
142
|
+
process.exit(1);
|
|
143
|
+
}
|
|
144
|
+
// Create configuration
|
|
145
|
+
const config = await configManager.createInitialConfig({
|
|
146
|
+
workspace_id: options.workspace_id,
|
|
147
|
+
project_id: options.project_id,
|
|
148
|
+
organization_id: options.organization_id,
|
|
149
|
+
taskboard_id: options.taskboard_id,
|
|
150
|
+
});
|
|
151
|
+
console.log('ā
Configuration created successfully!\n');
|
|
152
|
+
console.log(`Config file: ${configManager.getConfigPath()}\n`);
|
|
153
|
+
console.log('Configuration:');
|
|
154
|
+
console.log(` Workspace ID: ${config.workspace_id}`);
|
|
155
|
+
console.log(` Project ID: ${config.project_id}`);
|
|
156
|
+
console.log(` Organization ID: ${config.organization_id}`);
|
|
157
|
+
console.log(` Taskboard ID: ${config.sync.taskboard_id || '(not set)'}`);
|
|
158
|
+
console.log(` Sync Mode: ${config.sync.mode}`);
|
|
159
|
+
console.log(` Watch Patterns: ${config.sync.watch_patterns.length}`);
|
|
160
|
+
console.log('\nNext steps:');
|
|
161
|
+
console.log(' 1. Set WAYMAKER_API_KEY environment variable');
|
|
162
|
+
console.log(' 2. Run: waymaker sync start');
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Parse init command options
|
|
166
|
+
*/
|
|
167
|
+
function parseInitOptions(args) {
|
|
168
|
+
const options = {};
|
|
169
|
+
for (let i = 0; i < args.length; i++) {
|
|
170
|
+
const arg = args[i];
|
|
171
|
+
const value = args[i + 1];
|
|
172
|
+
switch (arg) {
|
|
173
|
+
case '--workspace-id':
|
|
174
|
+
options.workspace_id = value;
|
|
175
|
+
i++;
|
|
176
|
+
break;
|
|
177
|
+
case '--project-id':
|
|
178
|
+
options.project_id = value;
|
|
179
|
+
i++;
|
|
180
|
+
break;
|
|
181
|
+
case '--organization-id':
|
|
182
|
+
options.organization_id = value;
|
|
183
|
+
i++;
|
|
184
|
+
break;
|
|
185
|
+
case '--taskboard-id':
|
|
186
|
+
options.taskboard_id = value;
|
|
187
|
+
i++;
|
|
188
|
+
break;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return options;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Layer management commands
|
|
195
|
+
*/
|
|
196
|
+
async function layerCommand(projectPath, args) {
|
|
197
|
+
if (args.length === 0) {
|
|
198
|
+
printLayerHelp();
|
|
199
|
+
process.exit(0);
|
|
200
|
+
}
|
|
201
|
+
const subCommand = args[0];
|
|
202
|
+
const subArgs = args.slice(1);
|
|
203
|
+
// Get config for taskboard ID
|
|
204
|
+
const configManager = new ConfigManager(projectPath);
|
|
205
|
+
if (!configManager.exists()) {
|
|
206
|
+
console.error('ā No Waymaker Sync configuration found.');
|
|
207
|
+
console.error('Run `waymaker sync init` first to configure sync.');
|
|
208
|
+
process.exit(1);
|
|
209
|
+
}
|
|
210
|
+
const config = configManager.getConfig();
|
|
211
|
+
const taskboardId = parseOption(subArgs, '--taskboard') || config.sync.taskboard_id;
|
|
212
|
+
if (!taskboardId) {
|
|
213
|
+
console.error('ā No taskboard ID specified.');
|
|
214
|
+
console.error('Either set taskboard_id in .commander/config.json or use --taskboard <id>');
|
|
215
|
+
process.exit(1);
|
|
216
|
+
}
|
|
217
|
+
const apiKey = process.env.WAYMAKER_API_KEY;
|
|
218
|
+
if (!apiKey) {
|
|
219
|
+
console.error('ā WAYMAKER_API_KEY environment variable not set.');
|
|
220
|
+
process.exit(1);
|
|
221
|
+
}
|
|
222
|
+
const appsUrl = process.env.WAYMAKER_APPS_URL || 'https://apps.waymakerone.com';
|
|
223
|
+
switch (subCommand) {
|
|
224
|
+
case 'list':
|
|
225
|
+
await layerListCommand(appsUrl, apiKey, taskboardId);
|
|
226
|
+
break;
|
|
227
|
+
case 'create':
|
|
228
|
+
await layerCreateCommand(appsUrl, apiKey, taskboardId, subArgs);
|
|
229
|
+
break;
|
|
230
|
+
case 'delete':
|
|
231
|
+
await layerDeleteCommand(appsUrl, apiKey, taskboardId, subArgs);
|
|
232
|
+
break;
|
|
233
|
+
default:
|
|
234
|
+
console.error(`Unknown layer command: ${subCommand}`);
|
|
235
|
+
printLayerHelp();
|
|
236
|
+
process.exit(1);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* List layers on a taskboard
|
|
241
|
+
*/
|
|
242
|
+
async function layerListCommand(appsUrl, apiKey, taskboardId) {
|
|
243
|
+
console.log('\nš Layers on taskboard\n');
|
|
244
|
+
const response = await fetch(`${appsUrl}/functions/v1/commander-layer-operations`, {
|
|
245
|
+
method: 'POST',
|
|
246
|
+
headers: {
|
|
247
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
248
|
+
'Content-Type': 'application/json',
|
|
249
|
+
},
|
|
250
|
+
body: JSON.stringify({
|
|
251
|
+
action: 'list-layers',
|
|
252
|
+
taskboardId,
|
|
253
|
+
}),
|
|
254
|
+
});
|
|
255
|
+
if (!response.ok) {
|
|
256
|
+
console.error('ā Failed to list layers:', response.status, await response.text());
|
|
257
|
+
process.exit(1);
|
|
258
|
+
}
|
|
259
|
+
const result = await response.json();
|
|
260
|
+
if (!result.success) {
|
|
261
|
+
console.error('ā Error:', result.error);
|
|
262
|
+
process.exit(1);
|
|
263
|
+
}
|
|
264
|
+
const layers = result.data?.layers || [];
|
|
265
|
+
if (layers.length === 0) {
|
|
266
|
+
console.log('No layers found on this taskboard.\n');
|
|
267
|
+
console.log('Create one with: waymaker sync layer create "My Layer"');
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
// Print hierarchy
|
|
271
|
+
const printLayer = (layer, indent = 0) => {
|
|
272
|
+
const prefix = ' '.repeat(indent) + (indent > 0 ? 'āāā ' : '');
|
|
273
|
+
console.log(`${prefix}${layer.name}`);
|
|
274
|
+
console.log(`${' '.repeat(indent * 2 + (indent > 0 ? 4 : 0))}ID: ${layer.id}`);
|
|
275
|
+
if (layer.path && layer.path !== layer.name) {
|
|
276
|
+
console.log(`${' '.repeat(indent * 2 + (indent > 0 ? 4 : 0))}Path: ${layer.path}`);
|
|
277
|
+
}
|
|
278
|
+
console.log();
|
|
279
|
+
};
|
|
280
|
+
// Build hierarchy and print
|
|
281
|
+
const hierarchy = result.data?.hierarchy || [];
|
|
282
|
+
const printHierarchy = (nodes, indent = 0) => {
|
|
283
|
+
for (const node of nodes) {
|
|
284
|
+
printLayer(node, indent);
|
|
285
|
+
if (node.children?.length > 0) {
|
|
286
|
+
printHierarchy(node.children, indent + 1);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
printHierarchy(hierarchy);
|
|
291
|
+
console.log(`Total: ${layers.length} layer(s)\n`);
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Create a new layer
|
|
295
|
+
*/
|
|
296
|
+
async function layerCreateCommand(appsUrl, apiKey, taskboardId, args) {
|
|
297
|
+
// First positional arg is the layer name
|
|
298
|
+
const name = args.find(a => !a.startsWith('--'));
|
|
299
|
+
const parentLayer = parseOption(args, '--parent');
|
|
300
|
+
if (!name) {
|
|
301
|
+
console.error('ā Layer name required.');
|
|
302
|
+
console.error('Usage: waymaker sync layer create "Sprint 1" --parent "Taskboards"');
|
|
303
|
+
process.exit(1);
|
|
304
|
+
}
|
|
305
|
+
console.log(`\nš¦ Creating layer: ${name}`);
|
|
306
|
+
if (parentLayer) {
|
|
307
|
+
console.log(` Parent: ${parentLayer}`);
|
|
308
|
+
}
|
|
309
|
+
// If parent specified, resolve it first
|
|
310
|
+
let parentLayerId = null;
|
|
311
|
+
if (parentLayer) {
|
|
312
|
+
const findResponse = await fetch(`${appsUrl}/functions/v1/commander-layer-operations`, {
|
|
313
|
+
method: 'POST',
|
|
314
|
+
headers: {
|
|
315
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
316
|
+
'Content-Type': 'application/json',
|
|
317
|
+
},
|
|
318
|
+
body: JSON.stringify({
|
|
319
|
+
action: 'find-layer-by-path',
|
|
320
|
+
taskboardId,
|
|
321
|
+
layerPath: parentLayer,
|
|
322
|
+
}),
|
|
323
|
+
});
|
|
324
|
+
if (!findResponse.ok) {
|
|
325
|
+
console.error('ā Failed to find parent layer:', await findResponse.text());
|
|
326
|
+
process.exit(1);
|
|
327
|
+
}
|
|
328
|
+
const findResult = await findResponse.json();
|
|
329
|
+
if (!findResult.success || !findResult.data?.layer) {
|
|
330
|
+
console.error(`ā Parent layer not found: ${parentLayer}`);
|
|
331
|
+
process.exit(1);
|
|
332
|
+
}
|
|
333
|
+
parentLayerId = findResult.data.layer.id;
|
|
334
|
+
}
|
|
335
|
+
// Create the layer
|
|
336
|
+
const response = await fetch(`${appsUrl}/functions/v1/commander-layer-operations`, {
|
|
337
|
+
method: 'POST',
|
|
338
|
+
headers: {
|
|
339
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
340
|
+
'Content-Type': 'application/json',
|
|
341
|
+
},
|
|
342
|
+
body: JSON.stringify({
|
|
343
|
+
action: 'create-layer',
|
|
344
|
+
taskboardId,
|
|
345
|
+
name,
|
|
346
|
+
parentLayerId,
|
|
347
|
+
description: parseOption(args, '--description'),
|
|
348
|
+
startDate: parseOption(args, '--start-date'),
|
|
349
|
+
endDate: parseOption(args, '--end-date'),
|
|
350
|
+
}),
|
|
351
|
+
});
|
|
352
|
+
if (!response.ok) {
|
|
353
|
+
console.error('ā Failed to create layer:', response.status, await response.text());
|
|
354
|
+
process.exit(1);
|
|
355
|
+
}
|
|
356
|
+
const result = await response.json();
|
|
357
|
+
if (!result.success) {
|
|
358
|
+
console.error('ā Error:', result.error);
|
|
359
|
+
process.exit(1);
|
|
360
|
+
}
|
|
361
|
+
const layer = result.data?.layer;
|
|
362
|
+
const layerPath = parentLayer ? `${parentLayer}/${name}` : name;
|
|
363
|
+
console.log(`\nā
Layer created successfully!`);
|
|
364
|
+
console.log(` Name: ${layer.name}`);
|
|
365
|
+
console.log(` ID: ${layer.id}`);
|
|
366
|
+
console.log(` Path: ${layerPath}`);
|
|
367
|
+
console.log();
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Delete a layer
|
|
371
|
+
*/
|
|
372
|
+
async function layerDeleteCommand(appsUrl, apiKey, taskboardId, args) {
|
|
373
|
+
// First positional arg is the layer path
|
|
374
|
+
const layerPath = args.find(a => !a.startsWith('--'));
|
|
375
|
+
if (!layerPath) {
|
|
376
|
+
console.error('ā Layer path required.');
|
|
377
|
+
console.error('Usage: waymaker sync layer delete "Taskboards/Sprint 1"');
|
|
378
|
+
process.exit(1);
|
|
379
|
+
}
|
|
380
|
+
console.log(`\nšļø Deleting layer: ${layerPath}`);
|
|
381
|
+
// Find the layer first
|
|
382
|
+
const findResponse = await fetch(`${appsUrl}/functions/v1/commander-layer-operations`, {
|
|
383
|
+
method: 'POST',
|
|
384
|
+
headers: {
|
|
385
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
386
|
+
'Content-Type': 'application/json',
|
|
387
|
+
},
|
|
388
|
+
body: JSON.stringify({
|
|
389
|
+
action: 'find-layer-by-path',
|
|
390
|
+
taskboardId,
|
|
391
|
+
layerPath,
|
|
392
|
+
}),
|
|
393
|
+
});
|
|
394
|
+
if (!findResponse.ok) {
|
|
395
|
+
console.error('ā Failed to find layer:', await findResponse.text());
|
|
396
|
+
process.exit(1);
|
|
397
|
+
}
|
|
398
|
+
const findResult = await findResponse.json();
|
|
399
|
+
if (!findResult.success || !findResult.data?.layer) {
|
|
400
|
+
console.error(`ā Layer not found: ${layerPath}`);
|
|
401
|
+
process.exit(1);
|
|
402
|
+
}
|
|
403
|
+
const layerId = findResult.data.layer.id;
|
|
404
|
+
// Delete the layer
|
|
405
|
+
const response = await fetch(`${appsUrl}/functions/v1/commander-layer-operations`, {
|
|
406
|
+
method: 'POST',
|
|
407
|
+
headers: {
|
|
408
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
409
|
+
'Content-Type': 'application/json',
|
|
410
|
+
},
|
|
411
|
+
body: JSON.stringify({
|
|
412
|
+
action: 'delete-layer',
|
|
413
|
+
layerId,
|
|
414
|
+
}),
|
|
415
|
+
});
|
|
416
|
+
if (!response.ok) {
|
|
417
|
+
console.error('ā Failed to delete layer:', response.status, await response.text());
|
|
418
|
+
process.exit(1);
|
|
419
|
+
}
|
|
420
|
+
const result = await response.json();
|
|
421
|
+
if (!result.success) {
|
|
422
|
+
console.error('ā Error:', result.error);
|
|
423
|
+
process.exit(1);
|
|
424
|
+
}
|
|
425
|
+
console.log(`ā
Layer deleted: ${layerPath}\n`);
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Parse a command line option value
|
|
429
|
+
*/
|
|
430
|
+
function parseOption(args, optionName) {
|
|
431
|
+
const index = args.indexOf(optionName);
|
|
432
|
+
if (index >= 0 && index < args.length - 1) {
|
|
433
|
+
return args[index + 1];
|
|
434
|
+
}
|
|
435
|
+
return undefined;
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Display kanban board in terminal
|
|
439
|
+
*/
|
|
440
|
+
async function kanbanCommand(projectPath, args) {
|
|
441
|
+
// Get config for taskboard ID
|
|
442
|
+
const configManager = new ConfigManager(projectPath);
|
|
443
|
+
if (!configManager.exists()) {
|
|
444
|
+
console.error('ā No Waymaker Sync configuration found.');
|
|
445
|
+
console.error('Run `waymaker sync init` first to configure sync.');
|
|
446
|
+
process.exit(1);
|
|
447
|
+
}
|
|
448
|
+
const config = configManager.getConfig();
|
|
449
|
+
const taskboardId = parseOption(args, '--taskboard') || config.sync.taskboard_id;
|
|
450
|
+
if (!taskboardId) {
|
|
451
|
+
console.error('ā No taskboard ID specified.');
|
|
452
|
+
console.error('Either set taskboard_id in .commander/config.json or use --taskboard <id>');
|
|
453
|
+
process.exit(1);
|
|
454
|
+
}
|
|
455
|
+
const apiKey = process.env.WAYMAKER_API_KEY;
|
|
456
|
+
if (!apiKey) {
|
|
457
|
+
console.error('ā WAYMAKER_API_KEY environment variable not set.');
|
|
458
|
+
process.exit(1);
|
|
459
|
+
}
|
|
460
|
+
const appsUrl = process.env.WAYMAKER_APPS_URL || 'https://apps.waymakerone.com';
|
|
461
|
+
const layerFilter = parseOption(args, '--layer');
|
|
462
|
+
const maxTasks = parseInt(parseOption(args, '--max') || '10', 10);
|
|
463
|
+
// const compact = args.includes('--compact'); // Reserved for future use
|
|
464
|
+
console.log('\nš Fetching Kanban board...\n');
|
|
465
|
+
// Fetch tasks from taskboard
|
|
466
|
+
const response = await fetch(`${appsUrl}/functions/v1/commander-taskboard-tasks`, {
|
|
467
|
+
method: 'POST',
|
|
468
|
+
headers: {
|
|
469
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
470
|
+
'Content-Type': 'application/json',
|
|
471
|
+
},
|
|
472
|
+
body: JSON.stringify({
|
|
473
|
+
taskboard_id: taskboardId,
|
|
474
|
+
}),
|
|
475
|
+
});
|
|
476
|
+
if (!response.ok) {
|
|
477
|
+
console.error('ā Failed to fetch taskboard:', response.status, await response.text());
|
|
478
|
+
process.exit(1);
|
|
479
|
+
}
|
|
480
|
+
const result = await response.json();
|
|
481
|
+
if (!result.success) {
|
|
482
|
+
console.error('ā Error:', result.error);
|
|
483
|
+
process.exit(1);
|
|
484
|
+
}
|
|
485
|
+
const { board, status_sections, tasks, layers } = result.data;
|
|
486
|
+
// Filter tasks by layer if specified
|
|
487
|
+
let filteredTasks = tasks;
|
|
488
|
+
let layerName = null;
|
|
489
|
+
if (layerFilter) {
|
|
490
|
+
const layer = layers.find((l) => l.id === layerFilter || l.name.toLowerCase() === layerFilter.toLowerCase());
|
|
491
|
+
if (layer) {
|
|
492
|
+
filteredTasks = filteredTasks.filter((t) => t.layer_id === layer.id);
|
|
493
|
+
layerName = layer.name;
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
// Group tasks by status section
|
|
497
|
+
const tasksBySection = new Map();
|
|
498
|
+
for (const section of status_sections) {
|
|
499
|
+
tasksBySection.set(section.id, []);
|
|
500
|
+
}
|
|
501
|
+
for (const task of filteredTasks) {
|
|
502
|
+
const sectionTasks = tasksBySection.get(task.status_section_id);
|
|
503
|
+
if (sectionTasks) {
|
|
504
|
+
sectionTasks.push(task);
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
// Sort sections by position
|
|
508
|
+
const sortedSections = [...status_sections].sort((a, b) => a.position - b.position);
|
|
509
|
+
// Print board
|
|
510
|
+
console.log(`š ${board.name}${layerName ? ` (${layerName})` : ''}`);
|
|
511
|
+
console.log('ā'.repeat(60));
|
|
512
|
+
for (const section of sortedSections) {
|
|
513
|
+
const sectionTasks = tasksBySection.get(section.id) || [];
|
|
514
|
+
const icon = section.is_completed ? 'ā
' : 'š';
|
|
515
|
+
console.log(`\n${icon} ${section.name} (${sectionTasks.length})`);
|
|
516
|
+
const displayTasks = sectionTasks.slice(0, maxTasks);
|
|
517
|
+
for (const task of displayTasks) {
|
|
518
|
+
const priority = getPriorityIcon(task.priority);
|
|
519
|
+
const checkbox = task.is_completed ? 'ā' : 'ā';
|
|
520
|
+
console.log(` ${checkbox} ${priority} ${task.name}`);
|
|
521
|
+
}
|
|
522
|
+
if (sectionTasks.length > maxTasks) {
|
|
523
|
+
console.log(` ... +${sectionTasks.length - maxTasks} more`);
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
// Summary
|
|
527
|
+
const totalTasks = filteredTasks.length;
|
|
528
|
+
const completedTasks = sortedSections
|
|
529
|
+
.filter((s) => s.is_completed)
|
|
530
|
+
.reduce((sum, s) => sum + (tasksBySection.get(s.id)?.length || 0), 0);
|
|
531
|
+
console.log('\nā'.repeat(60));
|
|
532
|
+
console.log(`Total: ${totalTasks} tasks | Completed: ${completedTasks} | Open: ${totalTasks - completedTasks}`);
|
|
533
|
+
console.log();
|
|
534
|
+
}
|
|
535
|
+
/**
|
|
536
|
+
* Get priority icon for CLI display
|
|
537
|
+
*/
|
|
538
|
+
function getPriorityIcon(priority) {
|
|
539
|
+
switch (priority) {
|
|
540
|
+
case 1: return 'š“';
|
|
541
|
+
case 2: return 'š ';
|
|
542
|
+
case 3: return 'š”';
|
|
543
|
+
case 4: return 'š¢';
|
|
544
|
+
default: return 'āŖ';
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
/**
|
|
548
|
+
* Sync all existing files command
|
|
549
|
+
*/
|
|
550
|
+
async function syncAllCommand(projectPath, args) {
|
|
551
|
+
console.log('\nš Waymaker Sync - Initial File Scan\n');
|
|
552
|
+
// Check for config
|
|
553
|
+
const configManager = new ConfigManager(projectPath);
|
|
554
|
+
if (!configManager.exists()) {
|
|
555
|
+
console.error('ā No Waymaker Sync configuration found.');
|
|
556
|
+
console.error('Run `waymaker sync init` first to configure sync.');
|
|
557
|
+
process.exit(1);
|
|
558
|
+
}
|
|
559
|
+
const apiKey = process.env.WAYMAKER_API_KEY;
|
|
560
|
+
if (!apiKey) {
|
|
561
|
+
console.error('ā WAYMAKER_API_KEY environment variable not set.');
|
|
562
|
+
process.exit(1);
|
|
563
|
+
}
|
|
564
|
+
const dryRun = args.includes('--dry-run');
|
|
565
|
+
const force = args.includes('--force');
|
|
566
|
+
const batchSize = parseInt(parseOption(args, '--batch-size') || '50', 10);
|
|
567
|
+
const concurrency = parseInt(parseOption(args, '--concurrency') || '5', 10);
|
|
568
|
+
console.log('Options:');
|
|
569
|
+
console.log(` Batch Size: ${batchSize}`);
|
|
570
|
+
console.log(` Concurrency: ${concurrency}`);
|
|
571
|
+
console.log(` Dry Run: ${dryRun ? 'Yes' : 'No'}`);
|
|
572
|
+
console.log(` Force: ${force ? 'Yes' : 'No'}`);
|
|
573
|
+
console.log();
|
|
574
|
+
// Create and initialize sync engine
|
|
575
|
+
const engine = new SyncEngine(projectPath);
|
|
576
|
+
await engine.initialize();
|
|
577
|
+
// Set up progress listener
|
|
578
|
+
engine.on('sync-progress', (progress) => {
|
|
579
|
+
const percent = Math.round((progress.processed / progress.total) * 100);
|
|
580
|
+
process.stdout.write(`\r Progress: ${progress.processed}/${progress.total} (${percent}%) - Synced: ${progress.synced}, Skipped: ${progress.skipped}, Failed: ${progress.failed}`);
|
|
581
|
+
});
|
|
582
|
+
console.log('Starting scan...\n');
|
|
583
|
+
const result = await engine.syncAll({
|
|
584
|
+
batchSize,
|
|
585
|
+
concurrency,
|
|
586
|
+
dryRun,
|
|
587
|
+
force,
|
|
588
|
+
});
|
|
589
|
+
console.log('\n\nā
Initial scan complete!\n');
|
|
590
|
+
console.log('Results:');
|
|
591
|
+
console.log(` Total Files: ${result.totalFiles}`);
|
|
592
|
+
console.log(` Synced: ${result.synced}`);
|
|
593
|
+
console.log(` Skipped: ${result.skipped}`);
|
|
594
|
+
console.log(` Failed: ${result.failed}`);
|
|
595
|
+
console.log(` Duration: ${(result.duration / 1000).toFixed(2)}s`);
|
|
596
|
+
if (result.errors.length > 0) {
|
|
597
|
+
console.log('\nErrors:');
|
|
598
|
+
for (const error of result.errors.slice(0, 10)) {
|
|
599
|
+
console.log(` ā ${error.filePath}`);
|
|
600
|
+
console.log(` ${error.error}`);
|
|
601
|
+
}
|
|
602
|
+
if (result.errors.length > 10) {
|
|
603
|
+
console.log(` ... and ${result.errors.length - 10} more errors`);
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
console.log();
|
|
607
|
+
}
|
|
608
|
+
/**
|
|
609
|
+
* Print layer command help
|
|
610
|
+
*/
|
|
611
|
+
function printLayerHelp() {
|
|
612
|
+
console.log(`
|
|
613
|
+
Waymaker Sync - Layer Management
|
|
614
|
+
|
|
615
|
+
Usage:
|
|
616
|
+
waymaker sync layer <command> [options]
|
|
617
|
+
|
|
618
|
+
Commands:
|
|
619
|
+
list List all layers on the taskboard
|
|
620
|
+
create Create a new layer
|
|
621
|
+
delete Delete a layer
|
|
622
|
+
|
|
623
|
+
Examples:
|
|
624
|
+
# List all layers
|
|
625
|
+
waymaker sync layer list
|
|
626
|
+
|
|
627
|
+
# Create a top-level layer
|
|
628
|
+
waymaker sync layer create "Taskboards"
|
|
629
|
+
|
|
630
|
+
# Create a child layer (sprint under product)
|
|
631
|
+
waymaker sync layer create "Sprint 1" --parent "Taskboards"
|
|
632
|
+
|
|
633
|
+
# Create with dates
|
|
634
|
+
waymaker sync layer create "Sprint 2" --parent "Taskboards" \\
|
|
635
|
+
--start-date 2026-02-01 --end-date 2026-02-14
|
|
636
|
+
|
|
637
|
+
# Delete a layer by path
|
|
638
|
+
waymaker sync layer delete "Taskboards/Sprint 1"
|
|
639
|
+
|
|
640
|
+
Options:
|
|
641
|
+
--taskboard <id> Taskboard ID (uses config if not specified)
|
|
642
|
+
--parent <path> Parent layer path for hierarchical layers
|
|
643
|
+
--description <text> Layer description
|
|
644
|
+
--start-date <date> Start date (YYYY-MM-DD)
|
|
645
|
+
--end-date <date> End date (YYYY-MM-DD)
|
|
646
|
+
`);
|
|
647
|
+
}
|
|
648
|
+
/**
|
|
649
|
+
* Print help message
|
|
650
|
+
*/
|
|
651
|
+
function printHelp() {
|
|
652
|
+
console.log(`
|
|
653
|
+
Waymaker Sync - IDE ā Commander Bridge
|
|
654
|
+
|
|
655
|
+
Usage:
|
|
656
|
+
waymaker sync <command> [options]
|
|
657
|
+
|
|
658
|
+
Commands:
|
|
659
|
+
start Start sync daemon
|
|
660
|
+
stop Stop sync daemon
|
|
661
|
+
status Show sync daemon status
|
|
662
|
+
init Initialize configuration
|
|
663
|
+
layer Manage taskboard layers (list, create, delete)
|
|
664
|
+
kanban Display Kanban board in terminal
|
|
665
|
+
sync-all Sync all existing files (initial scan)
|
|
666
|
+
|
|
667
|
+
Examples:
|
|
668
|
+
# Initialize configuration
|
|
669
|
+
waymaker sync init \\
|
|
670
|
+
--workspace-id <uuid> \\
|
|
671
|
+
--project-id <uuid> \\
|
|
672
|
+
--organization-id <org-id> \\
|
|
673
|
+
--taskboard-id <uuid>
|
|
674
|
+
|
|
675
|
+
# Start sync daemon
|
|
676
|
+
waymaker sync start
|
|
677
|
+
|
|
678
|
+
# Check status
|
|
679
|
+
waymaker sync status
|
|
680
|
+
|
|
681
|
+
# Stop daemon
|
|
682
|
+
waymaker sync stop
|
|
683
|
+
|
|
684
|
+
# Display Kanban board
|
|
685
|
+
waymaker sync kanban
|
|
686
|
+
waymaker sync kanban --layer "Sprint 1"
|
|
687
|
+
|
|
688
|
+
# Initial sync of all files
|
|
689
|
+
waymaker sync sync-all
|
|
690
|
+
waymaker sync sync-all --dry-run
|
|
691
|
+
waymaker sync sync-all --force --batch-size 100
|
|
692
|
+
|
|
693
|
+
Environment Variables:
|
|
694
|
+
WAYMAKER_API_KEY API key for Commander access
|
|
695
|
+
WAYMAKER_APPS_URL Supabase apps URL (optional)
|
|
696
|
+
|
|
697
|
+
For more information, visit:
|
|
698
|
+
https://docs.waymakerone.com/waymaker-sync
|
|
699
|
+
`);
|
|
700
|
+
}
|
|
701
|
+
// Run CLI
|
|
702
|
+
main();
|
|
703
|
+
//# sourceMappingURL=cli.js.map
|