Add GSP init and AI usage tooling
This commit is contained in:
@@ -24,7 +24,18 @@ func run(args []string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
if len(args) == 1 && (args[0] == "-v" || args[0] == "--version") {
|
||||
printVersion(false)
|
||||
return nil
|
||||
}
|
||||
|
||||
switch args[0] {
|
||||
case "init":
|
||||
return runInit(args[1:])
|
||||
case "ai-init":
|
||||
return runAIInit(args[1:])
|
||||
case "version":
|
||||
return runVersion(args[1:])
|
||||
case "validate":
|
||||
return runValidate(args[1:])
|
||||
case "index":
|
||||
@@ -51,6 +62,9 @@ func printHelp() {
|
||||
fmt.Print(`GSP Toolkit
|
||||
|
||||
Usage:
|
||||
gsp init [path] [--name project-name] [--entry project.entry] [--force]
|
||||
gsp ai-init [--root .] [--agents] [--skill generic|codex] [--all] [--force]
|
||||
gsp version [--json]
|
||||
gsp validate [--root .] [--out report.json]
|
||||
gsp index [--root .] [--out index.json]
|
||||
gsp trace <id> [--root .] [--depth 3] [--out trace.json]
|
||||
@@ -61,6 +75,88 @@ Usage:
|
||||
`)
|
||||
}
|
||||
|
||||
func runAIInit(args []string) error {
|
||||
fs := flag.NewFlagSet("ai-init", flag.ContinueOnError)
|
||||
root := commonRoot(fs)
|
||||
agents := fs.Bool("agents", false, "generate AGENTS.md")
|
||||
skill := fs.String("skill", "", "generate a skill adapter: generic or codex")
|
||||
all := fs.Bool("all", false, "generate README.md, AI_USAGE.md, AGENTS.md, and generic skill")
|
||||
force := fs.Bool("force", false, "overwrite generated AI files when they already exist")
|
||||
if err := fs.Parse(args); err != nil {
|
||||
return err
|
||||
}
|
||||
if fs.NArg() != 0 {
|
||||
return fmt.Errorf("ai-init does not accept positional arguments; use --root")
|
||||
}
|
||||
result, err := gsp.InitAIUsage(*root, gsp.AIInitOptions{
|
||||
Agents: *agents,
|
||||
Skill: *skill,
|
||||
All: *all,
|
||||
Force: *force,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return writeJSON("", result)
|
||||
}
|
||||
|
||||
func runInit(args []string) error {
|
||||
fs := flag.NewFlagSet("init", flag.ContinueOnError)
|
||||
name := fs.String("name", "", "project name")
|
||||
entry := fs.String("entry", "project.entry", "entry GSP id")
|
||||
force := fs.Bool("force", false, "overwrite generated init files when they already exist")
|
||||
if err := fs.Parse(normalizeFlagArgs(args)); err != nil {
|
||||
return err
|
||||
}
|
||||
if fs.NArg() > 1 {
|
||||
return fmt.Errorf("init accepts zero or one path")
|
||||
}
|
||||
root := "."
|
||||
if fs.NArg() == 1 {
|
||||
root = fs.Arg(0)
|
||||
}
|
||||
result, err := gsp.InitProject(root, gsp.InitOptions{
|
||||
Name: *name,
|
||||
Entry: *entry,
|
||||
Force: *force,
|
||||
GSPVersion: gsp.DefaultGSPVersion,
|
||||
ToolkitVersion: gsp.ToolkitVersion,
|
||||
DefaultOutputFolder: ".gsp",
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return writeJSON("", result)
|
||||
}
|
||||
|
||||
func runVersion(args []string) error {
|
||||
fs := flag.NewFlagSet("version", flag.ContinueOnError)
|
||||
asJSON := fs.Bool("json", false, "print version as JSON")
|
||||
if err := fs.Parse(args); err != nil {
|
||||
return err
|
||||
}
|
||||
printVersion(*asJSON)
|
||||
return nil
|
||||
}
|
||||
|
||||
func printVersion(asJSON bool) {
|
||||
value := struct {
|
||||
ToolkitVersion string `json:"toolkitVersion"`
|
||||
DefaultGSPVersion string `json:"defaultGspVersion"`
|
||||
SupportedGSPVersion []string `json:"supportedGspVersions"`
|
||||
}{
|
||||
ToolkitVersion: gsp.ToolkitVersion,
|
||||
DefaultGSPVersion: gsp.DefaultGSPVersion,
|
||||
SupportedGSPVersion: gsp.SupportedGSPVersions,
|
||||
}
|
||||
if asJSON {
|
||||
data, _ := json.MarshalIndent(value, "", " ")
|
||||
fmt.Println(string(data))
|
||||
return
|
||||
}
|
||||
fmt.Printf("GSP Toolkit %s\nDefault GSP %s\nSupported GSP %s\n", gsp.ToolkitVersion, gsp.DefaultGSPVersion, strings.Join(gsp.SupportedGSPVersions, ", "))
|
||||
}
|
||||
|
||||
func commonRoot(fs *flag.FlagSet) *string {
|
||||
return fs.String("root", ".", "project root to scan")
|
||||
}
|
||||
@@ -236,6 +332,8 @@ func normalizeFlagArgs(args []string) []string {
|
||||
"-budget": true, "--budget": true,
|
||||
"-format": true, "--format": true,
|
||||
"-stage": true, "--stage": true,
|
||||
"-name": true, "--name": true,
|
||||
"-entry": true, "--entry": true,
|
||||
}
|
||||
var flags []string
|
||||
var positionals []string
|
||||
|
||||
Reference in New Issue
Block a user