(deps commandDeps)
| 637 | } |
| 638 | |
| 639 | func newAgentHeartbeatWakeCommand(deps commandDeps) *cobra.Command { |
| 640 | var ( |
| 641 | sessionID string |
| 642 | source string |
| 643 | dryRun bool |
| 644 | idempotencyKey string |
| 645 | ) |
| 646 | cmd := &cobra.Command{ |
| 647 | Use: "wake <agent>", |
| 648 | Short: "Request one manual advisory Heartbeat wake", |
| 649 | Example: " agh agent heartbeat wake coder --session sess_123 --dry-run --json", |
| 650 | Args: exactOneNonBlankArg(), |
| 651 | RunE: func(cmd *cobra.Command, args []string) error { |
| 652 | client, err := clientFromDeps(deps) |
| 653 | if err != nil { |
| 654 | return err |
| 655 | } |
| 656 | workspace, err := commandWorkspaceFlag(cmd) |
| 657 | if err != nil { |
| 658 | return err |
| 659 | } |
| 660 | session, err := changedNonEmptyStringFlag(cmd, sessionSessionKey, sessionID) |
| 661 | if err != nil { |
| 662 | return err |
| 663 | } |
| 664 | wakeSource := contract.HeartbeatWakeSource(strings.TrimSpace(source)) |
| 665 | if wakeSource == "" { |
| 666 | wakeSource = contract.HeartbeatWakeSourceManual |
| 667 | } |
| 668 | record, err := client.WakeAgentHeartbeat(cmd.Context(), args[0], AgentHeartbeatWakeRequest{ |
| 669 | WorkspaceID: workspace, |
| 670 | AgentName: args[0], |
| 671 | SessionID: session, |
| 672 | Source: wakeSource, |
| 673 | DryRun: dryRun, |
| 674 | IdempotencyKey: strings.TrimSpace(idempotencyKey), |
| 675 | }) |
| 676 | if err != nil { |
| 677 | return err |
| 678 | } |
| 679 | return writeCommandOutput(cmd, agentHeartbeatWakeBundle(record)) |
| 680 | }, |
| 681 | } |
| 682 | addWorkspaceFlag(cmd) |
| 683 | cmd.Flags().StringVar(&sessionID, sessionSessionKey, "", "Session id to wake") |
| 684 | cmd.Flags().StringVar(&source, "source", string(contract.HeartbeatWakeSourceManual), "Wake source") |
| 685 | cmd.Flags().BoolVar(&dryRun, "dry-run", false, "Evaluate wake gates without sending a prompt") |
| 686 | cmd.Flags().StringVar(&idempotencyKey, "idempotency-key", "", "Optional idempotency key") |
| 687 | return cmd |
| 688 | } |
| 689 | |
| 690 | func newSessionSoulCommand(deps commandDeps) *cobra.Command { |
| 691 | cmd := &cobra.Command{ |
no test coverage detected