iop/apps/edge/internal/edgecmd/root.go
toki 80fcbca74f feat(edge): Responses 입력 표면을 추가한다
NomadCode Core가 OpenAI Responses shape로 Edge 실행을 요청할 수 있도록 non-streaming /v1/responses 경계와 metadata 전달, smoke 검증을 함께 고정한다.
2026-06-08 15:16:25 +09:00

55 lines
2.1 KiB
Go

package edgecmd
import "github.com/spf13/cobra"
// Options provides command roots owned by the edge main package while keeping
// command support logic inside the edgecmd package.
type Options struct {
ConfigPath *string
Serve *cobra.Command
Console *cobra.Command
}
// NewRoot builds the iop-edge command surface.
func NewRoot(opts Options) *cobra.Command {
configPath := opts.ConfigPath
if configPath == nil {
var localConfigPath string
configPath = &localConfigPath
}
root := &cobra.Command{
Use: "edge",
Short: "IOP Edge — execution group controller",
Long: `IOP Edge is the backend execution group controller that coordinates multiple execution nodes.
It manages token-based node registration, node registry, node configuration delivery, and OpenAI-compatible routing.
The official local development and field test flow is as follows:
1. config init - Write a clean local edge.yaml configuration template.
2. env - Verify resolved local environment, log paths, and listen URLs.
3. node register - Add a node record to edge.yaml and generate its one-line bootstrap command.
4. config check - Validate the edge.yaml configuration structure and constraints.
5. serve (or console) - Start the Edge server (or interactive console) to accept connections.
6. nodes list - List configured nodes and show their connection status.
7. smoke openai - Perform an E2E health, models, chat, and responses smoke test on the OpenAI endpoint.`,
Example: ` iop-edge config init
iop-edge env
iop-edge node register my-node --adapter cli
iop-edge config check
iop-edge serve
iop-edge nodes list
iop-edge smoke openai --model gemma4:26b`,
}
root.PersistentFlags().StringVarP(configPath, "config", "c", "", "config file path (defaults to bundle-local edge.yaml)")
commands := make([]*cobra.Command, 0, 10)
if opts.Serve != nil {
commands = append(commands, opts.Serve)
}
if opts.Console != nil {
commands = append(commands, opts.Console)
}
commands = append(commands, versionCmd(), configCmd(), envCmd(), setupCmd(), bootstrapCmd(), nodeCmd(), nodesCmd(), smokeCmd())
root.AddCommand(commands...)
return root
}