@kosuke-ai/kosuke 1.0.7 → 1.0.9
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/CHANGELOG.md +19 -0
- package/README.md +11 -11
- package/dist/agent/summary.js +2 -2
- package/dist/commands/agent.js +4 -3
- package/dist/commands/auth.js +6 -7
- package/dist/commands/hand-written.js +93 -0
- package/dist/commands/integrations.js +9 -12
- package/dist/commands/skill-runs.js +15 -12
- package/dist/commands/watch.js +5 -5
- package/dist/generated/commands/{user/crons-artifacts-list.js → crons/artifacts-list--personal.js} +3 -1
- package/dist/generated/commands/{user/crons-create.js → crons/create--personal.js} +4 -2
- package/dist/generated/commands/crons/create.js +3 -3
- package/dist/generated/commands/{user/crons-get.js → crons/get--personal.js} +3 -1
- package/dist/generated/commands/{user/crons-list.js → crons/list--personal.js} +3 -1
- package/dist/generated/commands/{user/crons-run.js → crons/run--personal.js} +3 -1
- package/dist/generated/commands/{user/crons-runs-artifacts-get.js → crons/runs-artifacts-get--personal.js} +3 -1
- package/dist/generated/commands/{user/crons-runs-artifacts-list.js → crons/runs-artifacts-list--personal.js} +3 -1
- package/dist/generated/commands/{user/crons-runs-get.js → crons/runs-get--personal.js} +3 -1
- package/dist/generated/commands/{user/crons-runs-list.js → crons/runs-list--personal.js} +3 -1
- package/dist/generated/commands/crons/{runs-messages.js → runs-messages-list.js} +2 -1
- package/dist/generated/commands/{user/crons-update.js → crons/update--personal.js} +4 -2
- package/dist/generated/commands/crons/update.js +2 -2
- package/dist/generated/commands/{deploy → deploys}/cancel.js +1 -1
- package/dist/generated/commands/{deploy → deploys}/list.js +1 -1
- package/dist/generated/commands/{deploy/message.js → deploys/messages-get.js} +4 -3
- package/dist/generated/commands/{deploy/messages.js → deploys/messages-list.js} +4 -3
- package/dist/generated/commands/{deploy/set-model.js → deploys/model-set.js} +3 -2
- package/dist/generated/commands/{deploy → deploys}/queue-delete.js +1 -1
- package/dist/generated/commands/{deploy → deploys}/queue-list.js +1 -1
- package/dist/generated/commands/{deploy → deploys}/queue-move.js +1 -1
- package/dist/generated/commands/{deploy → deploys}/queue-resume.js +1 -1
- package/dist/generated/commands/{deploy → deploys}/queue-send.js +1 -1
- package/dist/generated/commands/{deploy → deploys}/queue-steer.js +1 -1
- package/dist/generated/commands/{deploy → deploys}/queue-update.js +1 -1
- package/dist/generated/commands/{deploy/run.js → deploys/start.js} +2 -2
- package/dist/generated/commands/devices/list.js +1 -1
- package/dist/generated/commands/devices/{request.js → requests-create.js} +2 -1
- package/dist/generated/commands/{user/files-delete.js → files/delete--personal.js} +3 -1
- package/dist/generated/commands/{user/files-mkdir.js → files/folders-create--personal.js} +5 -2
- package/dist/generated/commands/files/{mkdir.js → folders-create.js} +2 -1
- package/dist/generated/commands/{user/files-get.js → files/get--personal.js} +3 -1
- package/dist/generated/commands/{user/files-list.js → files/list--personal.js} +3 -1
- package/dist/generated/commands/{user/files-move.js → files/move--personal.js} +3 -1
- package/dist/generated/commands/{user/files-put.js → files/set--personal.js} +4 -2
- package/dist/generated/commands/files/{put.js → set.js} +1 -1
- package/dist/generated/commands/github/{status.js → connection-get.js} +2 -1
- package/dist/generated/commands/github/{repositories.js → repositories-list.js} +2 -1
- package/dist/generated/commands/index.js +330 -324
- package/dist/generated/commands/{user/integrations-linkedin-connect.js → integrations/browser-connections-create--personal-network-linkedin.js} +9 -3
- package/dist/generated/commands/{user/integrations-x-connect.js → integrations/browser-connections-create--personal-network-x.js} +9 -3
- package/dist/generated/commands/{user/integrations-linkedin-list.js → integrations/browser-connections-list--personal-network-linkedin.js} +8 -2
- package/dist/generated/commands/{user/integrations-x-list.js → integrations/browser-connections-list--personal-network-x.js} +8 -2
- package/dist/generated/commands/{user/integrations-linkedin-reconnect.js → integrations/browser-connections-reconnect--personal-network-linkedin.js} +8 -2
- package/dist/generated/commands/{user/integrations-x-reconnect.js → integrations/browser-connections-reconnect--personal-network-x.js} +8 -2
- package/dist/generated/commands/{user/integrations-remove.js → integrations/connections-delete--personal.js} +6 -3
- package/dist/generated/commands/{workspaces/integrations-remove.js → integrations/connections-delete.js} +2 -2
- package/dist/generated/commands/{workspaces/integrations-get.js → integrations/connections-get.js} +1 -1
- package/dist/generated/commands/{user/integrations-list.js → integrations/connections-list--personal.js} +4 -1
- package/dist/generated/commands/{workspaces/integrations-list.js → integrations/connections-list.js} +1 -1
- package/dist/generated/commands/integrations/{execute.js → tools-call.js} +3 -1
- package/dist/generated/commands/integrations/{tools.js → tools-list.js} +3 -1
- package/dist/generated/commands/mac/{apps.js → apps-list.js} +2 -1
- package/dist/generated/commands/mac/{ax-tree.js → ax-tree-get.js} +3 -2
- package/dist/generated/commands/mac/{browser-connections.js → browser-connections-list.js} +3 -1
- package/dist/generated/commands/mac/{browser-connection-check.js → browser-connections-update.js} +6 -4
- package/dist/generated/commands/mac/{browser-sign-in.js → browser-login.js} +2 -1
- package/dist/generated/commands/mac/{browser-profiles.js → browser-profiles-list.js} +3 -1
- package/dist/generated/commands/mac/{browser.js → browser-run.js} +2 -1
- package/dist/generated/commands/mac/click.js +2 -2
- package/dist/generated/commands/mac/{file-delete.js → files-delete.js} +2 -1
- package/dist/generated/commands/mac/{file-read.js → files-get.js} +2 -1
- package/dist/generated/commands/mac/{file-list.js → files-list.js} +2 -1
- package/dist/generated/commands/mac/{file-move.js → files-move.js} +2 -1
- package/dist/generated/commands/mac/{file-write.js → files-set.js} +2 -1
- package/dist/generated/commands/mac/key.js +1 -1
- package/dist/generated/commands/mac/{screenshot.js → screenshots-create.js} +3 -2
- package/dist/generated/commands/mac/scroll.js +2 -2
- package/dist/generated/commands/mac/{tools.js → status-get.js} +2 -1
- package/dist/generated/commands/mac/type.js +2 -2
- package/dist/generated/commands/mac/{windows.js → windows-list.js} +2 -1
- package/dist/generated/commands/{user/plugins-list.js → plugins/list--personal.js} +3 -1
- package/dist/generated/commands/{workspaces/plugins-list.js → plugins/list.js} +0 -1
- package/dist/generated/commands/{user/plugins-update.js → plugins/update--personal.js} +3 -1
- package/dist/generated/commands/{workspaces/plugins-update.js → plugins/update.js} +0 -1
- package/dist/generated/commands/preview/{health.js → health-get.js} +2 -1
- package/dist/generated/commands/preview/{shared-artifact.js → shared-artifacts-get.js} +2 -1
- package/dist/generated/commands/preview/{shared.js → shared-get.js} +2 -1
- package/dist/generated/commands/projects/{batch-merging-add-member.js → batch-merging-members-create.js} +2 -1
- package/dist/generated/commands/projects/{batch-merging-eject.js → batch-merging-members-delete.js} +2 -1
- package/dist/generated/commands/projects/{branches.js → branches-list.js} +2 -1
- package/dist/generated/commands/projects/{env-vars-add.js → env-vars-create.js} +1 -1
- package/dist/generated/commands/projects/{env-vars-remove.js → env-vars-delete.js} +1 -1
- package/dist/generated/commands/projects/{labels.js → labels-list.js} +2 -1
- package/dist/generated/commands/projects/{labels-usage.js → labels-sessions-list.js} +2 -1
- package/dist/generated/commands/projects/{labels-color.js → labels-update.js} +1 -1
- package/dist/generated/commands/projects/{live-logs.js → live-logs-list.js} +2 -1
- package/dist/generated/commands/projects/{live-query.js → live-queries-run.js} +2 -1
- package/dist/generated/commands/projects/{live-traffic.js → live-traffic-get.js} +2 -1
- package/dist/generated/commands/projects/{live-write.js → live-writes-create.js} +2 -1
- package/dist/generated/commands/projects/{live-write-status.js → live-writes-get.js} +2 -1
- package/dist/generated/commands/projects/{releases.js → releases-list.js} +2 -1
- package/dist/generated/commands/projects/{services-add.js → services-create.js} +1 -1
- package/dist/generated/commands/projects/{services-remove.js → services-delete.js} +1 -1
- package/dist/generated/commands/projects/{settings-import.js → settings-set.js} +1 -1
- package/dist/generated/commands/projects/{skills.js → skills-list.js} +2 -1
- package/dist/generated/commands/projects/{versions.js → versions-list.js} +2 -1
- package/dist/generated/commands/projects/{switch-workflow.js → workflow-set.js} +2 -1
- package/dist/generated/commands/prototypes/create.js +69 -0
- package/dist/generated/commands/{workspaces/access-status.js → providers/access-get.js} +3 -2
- package/dist/generated/commands/{user/subscriptions-set-default-model.js → providers/default-model-set--personal.js} +6 -3
- package/dist/generated/commands/{user/subscriptions-delete.js → providers/delete--personal.js} +4 -2
- package/dist/generated/commands/{workspaces/ai-provider-remove.js → providers/delete.js} +2 -3
- package/dist/generated/commands/{user/subscriptions-get.js → providers/get--personal.js} +4 -2
- package/dist/generated/commands/{workspaces/ai-provider-get.js → providers/get.js} +1 -2
- package/dist/generated/commands/{workspaces/ai-provider-google-remove.js → providers/google-delete.js} +2 -3
- package/dist/generated/commands/{workspaces/ai-provider-google-get.js → providers/google-get.js} +1 -2
- package/dist/generated/commands/{workspaces/ai-provider-google-delete-method.js → providers/google-methods-delete.js} +3 -3
- package/dist/generated/commands/{workspaces/ai-provider-google-select-method.js → providers/google-methods-set.js} +3 -3
- package/dist/generated/commands/{workspaces/ai-provider-google-save.js → providers/google-set.js} +2 -3
- package/dist/generated/commands/{user/subscriptions-grok-get.js → providers/grok-get--personal.js} +4 -2
- package/dist/generated/commands/{workspaces → providers}/grok-get.js +1 -1
- package/dist/generated/commands/{user/subscriptions-grok-change.js → providers/grok-update--personal.js} +5 -3
- package/dist/generated/commands/{workspaces/grok-change.js → providers/grok-update.js} +2 -2
- package/dist/generated/commands/{user/subscriptions-set-key.js → providers/keys-set--personal.js} +6 -3
- package/dist/generated/commands/{user/subscriptions-login-antigravity-cancel.js → providers/logins-cancel--personal-provider-antigravity.js} +9 -4
- package/dist/generated/commands/{workspaces/ai-provider-login-antigravity-cancel.js → providers/logins-cancel--provider-antigravity.js} +8 -4
- package/dist/generated/commands/{user/subscriptions-login-antigravity-complete.js → providers/logins-complete--personal-provider-antigravity.js} +9 -4
- package/dist/generated/commands/{user/subscriptions-login-claude-complete.js → providers/logins-complete--personal-provider-claude-code.js} +9 -4
- package/dist/generated/commands/{user/subscriptions-login-codex-complete.js → providers/logins-complete--personal-provider-codex.js} +9 -4
- package/dist/generated/commands/{user/subscriptions-login-muse-complete.js → providers/logins-complete--personal-provider-muse-code.js} +9 -4
- package/dist/generated/commands/{workspaces/ai-provider-login-antigravity-complete.js → providers/logins-complete--provider-antigravity.js} +8 -4
- package/dist/generated/commands/{workspaces/provider-login-claude-complete.js → providers/logins-complete--provider-claude-code.js} +8 -3
- package/dist/generated/commands/{workspaces/provider-login-codex-complete.js → providers/logins-complete--provider-codex.js} +8 -3
- package/dist/generated/commands/{workspaces/provider-login-muse-complete.js → providers/logins-complete--provider-muse-code.js} +8 -3
- package/dist/generated/commands/{user/subscriptions-logins-delete.js → providers/logins-delete--personal.js} +4 -2
- package/dist/generated/commands/{user/subscriptions-logins-recheck.js → providers/logins-recheck--personal.js} +4 -2
- package/dist/generated/commands/{workspaces/ai-provider-logins-recheck.js → providers/logins-recheck.js} +1 -2
- package/dist/generated/commands/{user/subscriptions-login-antigravity-start.js → providers/logins-start--personal-provider-antigravity.js} +9 -4
- package/dist/generated/commands/{user/subscriptions-login-claude-start.js → providers/logins-start--personal-provider-claude-code.js} +9 -4
- package/dist/generated/commands/{user/subscriptions-login-codex-start.js → providers/logins-start--personal-provider-codex.js} +9 -4
- package/dist/generated/commands/{user/subscriptions-login-muse-start.js → providers/logins-start--personal-provider-muse-code.js} +9 -4
- package/dist/generated/commands/{workspaces/ai-provider-login-antigravity-start.js → providers/logins-start--provider-antigravity.js} +8 -4
- package/dist/generated/commands/{workspaces/provider-login-claude-start.js → providers/logins-start--provider-claude-code.js} +8 -3
- package/dist/generated/commands/{workspaces/provider-login-codex-start.js → providers/logins-start--provider-codex.js} +8 -3
- package/dist/generated/commands/{workspaces/provider-login-muse-start.js → providers/logins-start--provider-muse-code.js} +8 -3
- package/dist/generated/commands/{workspaces/ai-provider-set.js → providers/set.js} +1 -2
- package/dist/generated/commands/{user/subscriptions-token-usage.js → providers/token-usage-get--personal.js} +6 -3
- package/dist/generated/commands/{workspaces/ai-provider-token-usage.js → providers/token-usage-get.js} +3 -3
- package/dist/generated/commands/{user/subscriptions-usage.js → providers/usage-get--personal.js} +6 -3
- package/dist/generated/commands/{workspaces/ai-provider-google-usage.js → providers/usage-get--provider-antigravity.js} +9 -4
- package/dist/generated/commands/{workspaces/ai-provider-usage-claude.js → providers/usage-get--provider-claude-code.js} +8 -3
- package/dist/generated/commands/{workspaces/ai-provider-usage-codex.js → providers/usage-get--provider-codex.js} +8 -3
- package/dist/generated/commands/{workspaces/ai-provider-usage-coding-plan.js → providers/usage-get--provider-coding-plan.js} +8 -3
- package/dist/generated/commands/{workspaces/ai-provider-usage-deepseek.js → providers/usage-get--provider-deepseek-api.js} +8 -3
- package/dist/generated/commands/{workspaces/ai-provider-usage-grok.js → providers/usage-get--provider-grok.js} +8 -3
- package/dist/generated/commands/{workspaces/ai-provider-usage-kimi-code.js → providers/usage-get--provider-kimi-code.js} +8 -3
- package/dist/generated/commands/{workspaces/ai-provider-usage-muse.js → providers/usage-get--provider-muse-code.js} +8 -3
- package/dist/generated/commands/sensei/{cards.js → cards-list.js} +2 -1
- package/dist/generated/commands/sensei/{cards-send-reply.js → cards-reply.js} +1 -1
- package/dist/generated/commands/sensei/{cards-put.js → cards-set.js} +1 -1
- package/dist/generated/commands/sensei/{chat.js → chat-get.js} +2 -1
- package/dist/generated/commands/sensei/{connect.js → connect-buttons-create.js} +2 -1
- package/dist/generated/commands/sensei/delegates-list.js +25 -0
- package/dist/generated/commands/sensei/{delegates-note.js → delegates-notes-create.js} +2 -1
- package/dist/generated/commands/sensei/{describe.js → describe-cards-create.js} +2 -1
- package/dist/generated/commands/sensei/{device-requests-decide.js → device-requests-update.js} +1 -1
- package/dist/generated/commands/sensei/{memory-put.js → memory-set.js} +4 -2
- package/dist/generated/commands/sensei/{merge-rule.js → merge-rule-set.js} +2 -1
- package/dist/generated/commands/sensei/{messages-reroute.js → messages-move.js} +1 -1
- package/dist/generated/commands/sensei/messages-send.js +2 -2
- package/dist/generated/commands/sensei/{notifications-open.js → notifications-mark-read.js} +1 -1
- package/dist/generated/commands/sensei/{reels-activity.js → reels-activity-list.js} +2 -1
- package/dist/generated/commands/sensei/{reels-ranks.js → reels-ranks-list.js} +2 -1
- package/dist/generated/commands/sensei/{repository.js → repository-cards-create.js} +2 -1
- package/dist/generated/commands/sensei/{review-approve.js → review-approvals-create.js} +2 -1
- package/dist/generated/commands/sensei/{review-context.js → review-context-get.js} +2 -1
- package/dist/generated/commands/sensei/{review-ask.js → review-requests-create.js} +3 -2
- package/dist/generated/commands/sensei/{sessions-assess.js → sessions-assessments-create.js} +2 -1
- package/dist/generated/commands/sensei/{sessions-facts.js → sessions-facts-get.js} +2 -1
- package/dist/generated/commands/sensei/{suggest.js → suggestions-create.js} +2 -1
- package/dist/generated/commands/sensei/{thread-done.js → threads-close.js} +2 -2
- package/dist/generated/commands/sensei/{thread-read.js → threads-get.js} +2 -2
- package/dist/generated/commands/sensei/{threads.js → threads-list.js} +2 -1
- package/dist/generated/commands/sensei/{thread-move.js → threads-move.js} +1 -1
- package/dist/generated/commands/sensei/{thread-split.js → threads-split.js} +1 -1
- package/dist/generated/commands/sensei/{widgets.js → widgets-get.js} +2 -1
- package/dist/generated/commands/sessions/app-stack-start.js +2 -1
- package/dist/generated/commands/sessions/{artifacts-attach.js → artifacts-create.js} +1 -1
- package/dist/generated/commands/sessions/create.js +2 -2
- package/dist/generated/commands/sessions/{desktop-control.js → desktop-control-set.js} +3 -1
- package/dist/generated/commands/sessions/{desktop.js → desktop-get.js} +2 -1
- package/dist/generated/commands/sessions/desktop-start.js +2 -1
- package/dist/generated/commands/sessions/{diff-comments-add.js → diff-comments-create.js} +1 -1
- package/dist/generated/commands/sessions/{diff-commits.js → diff-commits-list.js} +2 -1
- package/dist/generated/commands/sessions/{diff-files.js → diff-files-list.js} +2 -1
- package/dist/generated/commands/sessions/{diff-patch.js → diff-patch-get.js} +2 -1
- package/dist/generated/commands/sessions/{files-write.js → files-set.js} +1 -1
- package/dist/generated/commands/sessions/get.js +1 -1
- package/dist/generated/commands/sessions/{git-commit-message.js → git-commit-message-create.js} +2 -1
- package/dist/generated/commands/sessions/{git-state.js → git-state-get.js} +2 -1
- package/dist/generated/commands/sessions/{go-ahead-clear.js → go-ahead-delete.js} +1 -1
- package/dist/generated/commands/sessions/{labels-edit.js → labels-update.js} +1 -1
- package/dist/generated/commands/sessions/{all.js → list--all.js} +4 -1
- package/dist/generated/commands/sessions/{message.js → messages-get.js} +4 -3
- package/dist/generated/commands/sessions/{messages.js → messages-list.js} +3 -2
- package/dist/generated/commands/sessions/{edit-prompt.js → prompt-update.js} +2 -1
- package/dist/generated/commands/sessions/pull-request-mark-ready.js +40 -0
- package/dist/generated/commands/sessions/qa-runs-finish.js +66 -0
- package/dist/generated/commands/sessions/qa-runs-fixes-create.js +65 -0
- package/dist/generated/commands/sessions/qa-runs-get.js +22 -0
- package/dist/generated/commands/sessions/qa-runs-results-create.js +45 -0
- package/dist/generated/commands/sessions/qa-runs-start.js +75 -0
- package/dist/generated/commands/sessions/qa-runs-stop.js +43 -0
- package/dist/generated/commands/sessions/qa-set.js +1 -1
- package/dist/generated/commands/sessions/review-set.js +53 -0
- package/dist/generated/commands/sessions/{runtime-command.js → runtime-commands-run.js} +2 -1
- package/dist/generated/commands/sessions/{activate.js → start.js} +1 -1
- package/dist/generated/commands/sessions/update.js +1 -1
- package/dist/generated/commands/{user/skills-create.js → skills/create--personal.js} +3 -1
- package/dist/generated/commands/{workspaces/skills-create.js → skills/create.js} +0 -1
- package/dist/generated/commands/{user/skills-delete.js → skills/delete--personal.js} +3 -1
- package/dist/generated/commands/{workspaces/skills-delete.js → skills/delete.js} +0 -1
- package/dist/generated/commands/{user/skills-get.js → skills/get--personal.js} +3 -1
- package/dist/generated/commands/{workspaces/skills-get.js → skills/get.js} +0 -1
- package/dist/generated/commands/{user/skills-list.js → skills/list--personal.js} +3 -1
- package/dist/generated/commands/{workspaces/skills-list.js → skills/list.js} +0 -1
- package/dist/generated/commands/{user/skills-update.js → skills/update--personal.js} +3 -1
- package/dist/generated/commands/{workspaces/skills-update.js → skills/update.js} +0 -1
- package/dist/generated/commands/{personal-tasks/create.js → tasks/create--personal.js} +5 -2
- package/dist/generated/commands/tasks/create.js +2 -2
- package/dist/generated/commands/{personal-tasks/delete.js → tasks/delete--personal.js} +4 -1
- package/dist/generated/commands/{personal-tasks/get.js → tasks/get--personal.js} +4 -1
- package/dist/generated/commands/tasks/{labels.js → labels-list.js} +2 -1
- package/dist/generated/commands/tasks/{all.js → list--all.js} +25 -1
- package/dist/generated/commands/{personal-tasks/list.js → tasks/list--personal.js} +4 -1
- package/dist/generated/commands/tasks/list.js +21 -0
- package/dist/generated/commands/{personal-tasks/move.js → tasks/move--personal.js} +4 -1
- package/dist/generated/commands/{personal-tasks/start.js → tasks/start--personal.js} +5 -2
- package/dist/generated/commands/tasks/start.js +1 -1
- package/dist/generated/commands/{personal-tasks/update.js → tasks/update--personal.js} +4 -1
- package/dist/generated/commands/tasks/update.js +1 -1
- package/dist/generated/commands/user/{auth-token-revoke.js → api-keys-delete.js} +2 -2
- package/dist/generated/commands/user/{profile.js → profile-get.js} +2 -1
- package/dist/generated/commands/user/{push-devices-register.js → push-devices-create.js} +1 -1
- package/dist/generated/commands/user/{push-devices-remove.js → push-devices-delete.js} +1 -1
- package/dist/generated/commands/workspaces/{artifacts.js → artifacts-search.js} +2 -1
- package/dist/generated/commands/workspaces/{credits.js → credits-get.js} +2 -1
- package/dist/generated/commands/{members/list.js → workspaces/members-list--all.js} +4 -0
- package/dist/generated/commands/workspaces/{members.js → members-list.js} +2 -1
- package/dist/generated/commands/workspaces/{sandbox-limit.js → sandbox-limit-get.js} +2 -1
- package/dist/generated/commands/workspaces/{stop-sandboxes.js → sandboxes-stop.js} +2 -1
- package/dist/generated/commands/workspaces/timezone-set.js +2 -1
- package/dist/generated/commands/workspaces/{usage.js → usage-get.js} +2 -1
- package/dist/integrations/api.js +1 -1
- package/dist/integrations/render.js +1 -1
- package/dist/program.js +15 -9
- package/dist/runtime/aliases.js +516 -0
- package/dist/runtime/attach.js +301 -55
- package/dist/runtime/former-commands.js +89 -0
- package/dist/runtime/job-watch.js +1 -1
- package/dist/runtime/variants.js +205 -0
- package/openapi.json +2309 -1132
- package/package.json +4 -6
- package/dist/generated/commands/crons/projects-resume.js +0 -21
- package/dist/generated/commands/crons/runs-diagnostics.js +0 -21
- package/dist/generated/commands/sessions/needs-you.js +0 -16
- package/dist/generated/commands/sessions/qa-clear.js +0 -22
- package/dist/generated/commands/sessions/title-generate.js +0 -29
- package/dist/generated/commands/user/memory-list.js +0 -17
- package/dist/generated/commands/user/memory-put.js +0 -37
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { UsageError } from './invoke.js';
|
|
2
|
+
/** The word that reaches a personal form. */
|
|
3
|
+
export const PERSONAL = 'personal';
|
|
4
|
+
export function scopeOf(form) {
|
|
5
|
+
return form.variant?.scope ?? 'workspace';
|
|
6
|
+
}
|
|
7
|
+
/** Descriptors grouped by command, in the order the first form of each appears. */
|
|
8
|
+
export function formsOf(operations) {
|
|
9
|
+
const byCommand = new Map();
|
|
10
|
+
for (const operation of operations) {
|
|
11
|
+
const key = operation.command.join(' ');
|
|
12
|
+
byCommand.set(key, [...(byCommand.get(key) ?? []), operation]);
|
|
13
|
+
}
|
|
14
|
+
return byCommand;
|
|
15
|
+
}
|
|
16
|
+
/** What is left of a form's path params once the workspace positional took its place. */
|
|
17
|
+
function restParams(form, hasScope) {
|
|
18
|
+
if (scopeOf(form) === 'workspace' && hasScope)
|
|
19
|
+
return form.pathParams.slice(1);
|
|
20
|
+
return form.pathParams;
|
|
21
|
+
}
|
|
22
|
+
function commonPrefix(lists) {
|
|
23
|
+
const [first = [], ...rest] = lists;
|
|
24
|
+
const prefix = [];
|
|
25
|
+
for (let i = 0; i < first.length; i++) {
|
|
26
|
+
if (rest.every((list) => list[i] === first[i]))
|
|
27
|
+
prefix.push(first[i]);
|
|
28
|
+
else
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
return prefix;
|
|
32
|
+
}
|
|
33
|
+
export function leafShape(forms) {
|
|
34
|
+
const scopes = new Set(forms.map(scopeOf));
|
|
35
|
+
const hasScope = scopes.has('personal') || scopes.has('all');
|
|
36
|
+
const workspace = forms.find((form) => scopeOf(form) === 'workspace');
|
|
37
|
+
let scope = null;
|
|
38
|
+
if (hasScope) {
|
|
39
|
+
const name = workspace?.pathParams[0] ?? 'workspaceId';
|
|
40
|
+
const optional = scopes.has('all');
|
|
41
|
+
const words = [
|
|
42
|
+
...(scopes.has('workspace') || !scopes.has('personal') ? [name] : []),
|
|
43
|
+
...(scopes.has('personal') ? [PERSONAL] : []),
|
|
44
|
+
].join('|');
|
|
45
|
+
scope = { name, label: optional ? `[${words}]` : `<${words}>`, optional };
|
|
46
|
+
}
|
|
47
|
+
const positionals = commonPrefix(forms.map((form) => restParams(form, hasScope)));
|
|
48
|
+
const flags = new Map();
|
|
49
|
+
const entry = (flag) => {
|
|
50
|
+
let found = flags.get(flag);
|
|
51
|
+
if (!found) {
|
|
52
|
+
found = { flag, forms: new Map(), uniform: true, selector: new Set() };
|
|
53
|
+
flags.set(flag, found);
|
|
54
|
+
}
|
|
55
|
+
return found;
|
|
56
|
+
};
|
|
57
|
+
for (const form of forms) {
|
|
58
|
+
const own = new Set();
|
|
59
|
+
for (const field of fieldsOf(form)) {
|
|
60
|
+
entry(field.flag).forms.set(form, field);
|
|
61
|
+
own.add(field.flag);
|
|
62
|
+
}
|
|
63
|
+
for (const name of restParams(form, hasScope).slice(positionals.length)) {
|
|
64
|
+
const flag = kebab(name);
|
|
65
|
+
if (own.has(flag)) {
|
|
66
|
+
throw new Error(`kosuke ${form.command.join(' ')}: path param ${name} and a field share --${flag}.`);
|
|
67
|
+
}
|
|
68
|
+
entry(flag).forms.set(form, { name, flag, kind: 'string', required: true, pathParam: true });
|
|
69
|
+
}
|
|
70
|
+
if (form.variant?.when)
|
|
71
|
+
entry(form.variant.when.flag).selector.add(scopeOf(form));
|
|
72
|
+
}
|
|
73
|
+
for (const leafFlag of flags.values()) {
|
|
74
|
+
const shapes = new Set([...leafFlag.forms.values()].map((field) => JSON.stringify([field.kind, field.choices ?? null, field.repeated ?? false])));
|
|
75
|
+
leafFlag.uniform = shapes.size <= 1 && leafFlag.selector.size === 0;
|
|
76
|
+
}
|
|
77
|
+
return { scope, positionals, flags: [...flags.values()] };
|
|
78
|
+
}
|
|
79
|
+
/** Query, then JSON body, then form fields, one per flag. */
|
|
80
|
+
export function fieldsOf(form) {
|
|
81
|
+
const seen = new Set();
|
|
82
|
+
return [...form.query, ...(form.body?.fields ?? []), ...(form.multipart ?? [])].filter((field) => {
|
|
83
|
+
if (seen.has(field.flag))
|
|
84
|
+
return false;
|
|
85
|
+
seen.add(field.flag);
|
|
86
|
+
return true;
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
/** `kosuke crons get personal`, `kosuke providers usage get <workspaceId> --provider codex`. */
|
|
90
|
+
export function formUsage(form, shape) {
|
|
91
|
+
const scope = scopeOf(form);
|
|
92
|
+
const first = !shape.scope
|
|
93
|
+
? []
|
|
94
|
+
: scope === 'personal'
|
|
95
|
+
? [PERSONAL]
|
|
96
|
+
: scope === 'all'
|
|
97
|
+
? []
|
|
98
|
+
: [`<${shape.scope.name}>`];
|
|
99
|
+
return [
|
|
100
|
+
'kosuke',
|
|
101
|
+
...form.command,
|
|
102
|
+
...first,
|
|
103
|
+
...shape.positionals.map((name) => `<${name}>`),
|
|
104
|
+
...(form.variant?.when ? [`--${form.variant.when.flag} ${form.variant.when.equals}`] : []),
|
|
105
|
+
].join(' ');
|
|
106
|
+
}
|
|
107
|
+
/** `the personal form`, `the --provider codex form`, `the workspace form`. */
|
|
108
|
+
export function formLabel(form) {
|
|
109
|
+
const words = [
|
|
110
|
+
...(form.variant?.scope ? [form.variant.scope] : []),
|
|
111
|
+
...(form.variant?.when ? [`--${form.variant.when.flag} ${form.variant.when.equals}`] : []),
|
|
112
|
+
];
|
|
113
|
+
return `the ${words.length ? words.join(' ') : 'workspace'} form`;
|
|
114
|
+
}
|
|
115
|
+
const WORKSPACE_ID = 'workspaceId';
|
|
116
|
+
/**
|
|
117
|
+
* The form a call reaches, or a UsageError saying why none does. `reachable` is what
|
|
118
|
+
* the caller's key reaches: a form it does not is refused by name rather than as a
|
|
119
|
+
* form that does not exist.
|
|
120
|
+
*/
|
|
121
|
+
export function selectForm(forms, { first, flags }, reachable = () => true) {
|
|
122
|
+
const command = `kosuke ${forms[0].command.join(' ')}`;
|
|
123
|
+
const shape = leafShape(forms);
|
|
124
|
+
let scope = 'workspace';
|
|
125
|
+
if (shape.scope) {
|
|
126
|
+
if (first === PERSONAL)
|
|
127
|
+
scope = 'personal';
|
|
128
|
+
else if (first === undefined)
|
|
129
|
+
scope = 'all';
|
|
130
|
+
}
|
|
131
|
+
else if (first === PERSONAL && forms[0].pathParams[0] === WORKSPACE_ID) {
|
|
132
|
+
scope = 'personal';
|
|
133
|
+
}
|
|
134
|
+
const scoped = forms.filter((form) => scopeOf(form) === scope);
|
|
135
|
+
if (!scoped.length) {
|
|
136
|
+
if (scope === 'personal') {
|
|
137
|
+
throw new UsageError(`${command} has no personal form. Pass ${idHint(shape.scope?.name ?? WORKSPACE_ID)}.`);
|
|
138
|
+
}
|
|
139
|
+
if (scope === 'workspace' && forms.some((form) => scopeOf(form) === 'personal')) {
|
|
140
|
+
throw new UsageError(`${command} works on personal only. Pass personal.`);
|
|
141
|
+
}
|
|
142
|
+
throw new UsageError(`${command} needs ${idHint(shape.scope?.name ?? WORKSPACE_ID)}.`);
|
|
143
|
+
}
|
|
144
|
+
let form = scoped[0];
|
|
145
|
+
const selector = scoped[0].variant?.when?.flag;
|
|
146
|
+
if (selector) {
|
|
147
|
+
const value = flags[selector];
|
|
148
|
+
const match = scoped.find((candidate) => candidate.variant?.when?.equals === value);
|
|
149
|
+
if (!match) {
|
|
150
|
+
const values = scoped.map((candidate) => candidate.variant.when.equals);
|
|
151
|
+
throw new UsageError(`--${selector} must be one of ${values.join(', ')} for ${scopedUsage(command, scope, shape)}.`);
|
|
152
|
+
}
|
|
153
|
+
form = match;
|
|
154
|
+
}
|
|
155
|
+
if (!reachable(form)) {
|
|
156
|
+
throw new UsageError(`This key does not reach ${formLabel(form)} of ${command}.`);
|
|
157
|
+
}
|
|
158
|
+
for (const leafFlag of shape.flags) {
|
|
159
|
+
if (flags[leafFlag.flag] === undefined)
|
|
160
|
+
continue;
|
|
161
|
+
if (leafFlag.forms.has(form) || form.variant?.when?.flag === leafFlag.flag)
|
|
162
|
+
continue;
|
|
163
|
+
// A selector of another scope is not a flag of this form either.
|
|
164
|
+
throw new UsageError(`--${leafFlag.flag} is not a flag of ${formLabel(form)} of ${command}.`);
|
|
165
|
+
}
|
|
166
|
+
for (const leafFlag of shape.flags) {
|
|
167
|
+
const field = leafFlag.forms.get(form);
|
|
168
|
+
if (field?.pathParam && flags[leafFlag.flag] === undefined) {
|
|
169
|
+
throw new UsageError(`--${leafFlag.flag} is required.`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return form;
|
|
173
|
+
}
|
|
174
|
+
function scopedUsage(command, scope, shape) {
|
|
175
|
+
if (!shape.scope || scope === 'all')
|
|
176
|
+
return command;
|
|
177
|
+
return `${command} ${scope === 'personal' ? PERSONAL : `<${shape.scope.name}>`}`;
|
|
178
|
+
}
|
|
179
|
+
/** The chosen form's path params: the workspace positional, the shared ones, then V3 flags. */
|
|
180
|
+
export function pathParamsFor(form, shape, first, positionals, flags) {
|
|
181
|
+
const params = {};
|
|
182
|
+
const rest = [...form.pathParams];
|
|
183
|
+
if (shape.scope && scopeOf(form) === 'workspace')
|
|
184
|
+
params[rest.shift()] = first;
|
|
185
|
+
rest.forEach((name, index) => {
|
|
186
|
+
params[name] =
|
|
187
|
+
index < shape.positionals.length ? positionals[index] : String(flags[kebab(name)]);
|
|
188
|
+
});
|
|
189
|
+
return params;
|
|
190
|
+
}
|
|
191
|
+
/** `connectionId` reads as `connection-id`, the generator's own spelling of a flag. */
|
|
192
|
+
function kebab(name) {
|
|
193
|
+
return name
|
|
194
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1-$2')
|
|
195
|
+
.replace(/_/g, '-')
|
|
196
|
+
.toLowerCase();
|
|
197
|
+
}
|
|
198
|
+
/** The id a scope positional takes, in words, with the command that lists them. */
|
|
199
|
+
function idHint(name) {
|
|
200
|
+
if (name === 'projectId')
|
|
201
|
+
return 'a project id (kosuke projects list)';
|
|
202
|
+
if (name === WORKSPACE_ID)
|
|
203
|
+
return 'a workspace id (kosuke workspaces list)';
|
|
204
|
+
return `a ${name}`;
|
|
205
|
+
}
|